# HG changeset patch # User ethanzonca@CL-ENS241-08.cedarville.edu # Date 2013-01-24 15:10:36 # Node ID 91a9664e6fd060c8c9efa8aab09bfaf72a6fde1e # Parent 2d1f159689de8660d5adcdeea41b6f3d63b1b2b2 Adaptive logging system now fully functional diff --git a/master/master/lib/gps.c b/master/master/lib/gps.c --- a/master/master/lib/gps.c +++ b/master/master/lib/gps.c @@ -1,11 +1,18 @@ -/* -* gpsMKa.c -* -* Created: 11/15/2012 12:02:38 PM -* Author: mkanning -*/ +/* + * Master Firmware: NMEA Parser + * + * Wireless Observational Modular Aerial Network + * + * Ethan Zonca + * Matthew Kanning + * Kyle Ripperger + * Matthew Kroening + * + */ #include +#include +#include #include #include #include "gps.h" @@ -128,14 +135,14 @@ ISR(USART1_RX_vect) void gps_setup() { - sprintf(timestamp, "0"); - sprintf(latitude, "0"); - sprintf(longitude, "0"); - sprintf(numSatellites, "0"); - sprintf(hdop, "0"); - sprintf(knots, "0"); - sprintf(course, "0"); - sprintf(dayofmonth, "0"); + snprintf(timestamp,2, "0"); + snprintf(latitude,2, "0"); + snprintf(longitude,2, "0"); + snprintf(numSatellites,2, "0"); + snprintf(hdop,2, "0"); + snprintf(knots,2, "0"); + snprintf(course,2, "0"); + snprintf(dayofmonth,2, "0"); } @@ -674,7 +681,8 @@ void parse_gps_transmission(void){ } /// MKa GPS transmission parser END -void XORbyteWithChecksum(uint8_t byte){ +void XORbyteWithChecksum(uint8_t byte) +{ calculatedChecksum ^= (int)byte; //this may need to be re-coded } diff --git a/master/master/lib/gps.h b/master/master/lib/gps.h --- a/master/master/lib/gps.h +++ b/master/master/lib/gps.h @@ -1,9 +1,14 @@ -/* - * gpsMKa.h - * - * Created: 11/15/2012 12:02:53 PM - * Author: mkanning - */ +/* + * Master Firmware: NMEA Parser + * + * Wireless Observational Modular Aerial Network + * + * Ethan Zonca + * Matthew Kanning + * Kyle Ripperger + * Matthew Kroening + * + */ #ifndef GPSMKA_H_ @@ -21,5 +26,7 @@ char* get_course(); char* get_hdop(); char* get_sv(); char* get_dayofmonth(); +void parse_gps_transmission(void); +void XORbyteWithChecksum(uint8_t byte); #endif /* GPSMKA_H_ */ \ No newline at end of file diff --git a/master/master/lib/heater.c b/master/master/lib/heater.c --- a/master/master/lib/heater.c +++ b/master/master/lib/heater.c @@ -12,6 +12,7 @@ #include "../config.h" #include "led.h" +#include "boardtemp.h" void heater_regulateTemp() { diff --git a/master/master/lib/logger.c b/master/master/lib/logger.c --- a/master/master/lib/logger.c +++ b/master/master/lib/logger.c @@ -23,6 +23,7 @@ #include "sdcard/partition.h" #include "sdcard/sd_raw.h" #include "sdcard/sd_raw_config.h" +#include "serial.h" #include "logger.h" #include "led.h" diff --git a/master/master/lib/sensordata.c b/master/master/lib/sensordata.c --- a/master/master/lib/sensordata.c +++ b/master/master/lib/sensordata.c @@ -11,6 +11,7 @@ */ #include "../config.h" +#include #include "sensordata.h" #include "boardtemp.h" #include "gps.h" diff --git a/master/master/lib/serial.h b/master/master/lib/serial.h --- a/master/master/lib/serial.h +++ b/master/master/lib/serial.h @@ -35,6 +35,10 @@ char* serial0_readLine(); void serial_sendCommand( char* data ); void serial_sendResponseData(); + +void serial0_ion(); +void serial0_ioff(); + void serial1_ion(); void serial1_ioff(); diff --git a/master/master/lib/slavesensors.c b/master/master/lib/slavesensors.c --- a/master/master/lib/slavesensors.c +++ b/master/master/lib/slavesensors.c @@ -10,17 +10,20 @@ * */ +#include "../config.h" #include #include -#include "../config.h" +#include +#include +#include +#include +#include #include "serial.h" #include "serparser.h" #include "slavesensors.h" #include "sensordata.h" #include "led.h" #include "looptime.h" -#include -#include uint8_t currentSlave = 0; uint8_t currentSlaveSensor = 0; @@ -32,13 +35,22 @@ void slavesensors_setup() } -#define DEBUG_NETWORKSCAN +//#define DEBUG_NETWORKSCAN +//#define DEBUG_GETSLAVEDATA char* bufPtr = 0x00; -char slaveAddressLow[MAX_NUM_SLAVES][9]; -char slaveAddressHigh[MAX_NUM_SLAVES][9]; + +static char slaveAddressLow[MAX_NUM_SLAVES][9]; +static char slaveAddressHigh[MAX_NUM_SLAVES][9]; +static char slaveNames[MAX_NUM_SLAVES][20]; + uint8_t loggerIndex = 255; uint8_t nodeCount = 0; +bool dataReady = false; + +char* slavesensors_slavename(uint8_t id) { + return slaveNames[id]; +} void slavesensors_network_scan() { serial0_ioff(); @@ -54,10 +66,6 @@ void slavesensors_network_scan() { led_on(LED_ACTIVITY); atOK = slavesensors_enterAT(); - - char nameString[20] = "NONE"; - - char slaveNames[MAX_NUM_SLAVES][16]; // Hold 16-char addresses of max MAX_NUM_SLAVES nodes, local so the memory can be reused // wait for OK if(atOK == 0) @@ -69,7 +77,7 @@ void slavesensors_network_scan() { // wait for scan to complete uint16_t scanStart = time_millis(); while(!serial0_hasChar()) { - if(time_millis() - scanStart > 5000) { + if(time_millis() - scanStart > 7000) { led_errorcode(ERROR_XBEETIMEOUT); return; } @@ -87,14 +95,13 @@ void slavesensors_network_scan() { } if(lineCount == 1) { - strcpy(slaveAddressHigh[nodeCount], bufPtr); + strncpy(slaveAddressHigh[nodeCount],bufPtr, 9); } else if(lineCount == 2) { - strcpy(slaveAddressLow[nodeCount], bufPtr); + strncpy(slaveAddressLow[nodeCount],bufPtr, 9); } else if(lineCount == 3) { - strcpy(nameString, bufPtr); - strcpy(slaveNames[nodeCount], bufPtr); + strncpy(slaveNames[nodeCount], bufPtr, 20); } // If we've finished one chunk (including the newline after it). Can't be else if because it controls increment. @@ -137,7 +144,7 @@ void slavesensors_network_scan() { char debugBuf[64]; serial0_sendString("Discovered: \r\n"); for(int i=0; i= nodeCount && currentSlaveSensor >= numReadingsToExpect) + + if(currentSlave >= (nodeCount-1) && currentSlaveSensor >= (numReadingsToExpect-1)) { + #ifdef DEBUG_GETSLAVEDATA + serial0_sendString("We got all data for all slaves!\r\n"); + #endif + + dataReady = true; currentSlave = 0; currentSlaveSensor = 0; requesting = false; @@ -315,6 +343,10 @@ void slavesensors_process(uint8_t parseR // If we finished up one slave, go to the next else if(currentSlaveSensor >= (numReadingsToExpect-1)) { + #ifdef DEBUG_GETSLAVEDATA + serial0_sendString("Finished up one slave, go to another.\r\n"); + #endif + currentSlave++; currentSlaveSensor = 0; requesting = true; @@ -323,6 +355,10 @@ void slavesensors_process(uint8_t parseR // If we haven't finished a slave (or all of them), just get the next sensor of the current slave else { + #ifdef DEBUG_GETSLAVEDATA + serial0_sendString("Give me another sensor value..."); + #endif + // request data for the current sensor of the current slave currentSlaveSensor++; requesting = true; diff --git a/master/master/lib/slavesensors.h b/master/master/lib/slavesensors.h --- a/master/master/lib/slavesensors.h +++ b/master/master/lib/slavesensors.h @@ -30,11 +30,17 @@ enum sensorTypes // CMD ID# CAMERA, }; +char* slavesensors_slavename(uint8_t id); +bool slavesensors_dataReady(); bool slavesensors_isrequesting(); void slavesensors_setup(); void slavesensors_network_scan(); void slavesensors_startprocess(); void slavesensors_request(); void slavesensors_process(uint8_t parseResult); +int xbeeIsOk(); +void slavesensors_selectlogger(); +void slavesensors_exitAT(); +int slavesensors_enterAT(); #endif /* SLAVESENSORS_H_ */ \ No newline at end of file diff --git a/master/master/master.c b/master/master/master.c --- a/master/master/master.c +++ b/master/master/master.c @@ -19,6 +19,7 @@ #include #include #include +#include #include "lib/serial.h" #include "lib/aprs.h" @@ -31,7 +32,7 @@ #include "lib/i2c.h" #include "lib/boardtemp.h" - +#include "lib/heater.h" #include "lib/looptime.h" #include "lib/slavesensors.h" #include "lib/serparser.h" @@ -67,20 +68,16 @@ int main(void) // Buffer for string operations char logbuf[128]; - char debugBuf[128]; // Software timers uint32_t lastAprsBroadcast = 0; uint32_t lastLog = 0; uint32_t lastLedCycle = 0; + bool dataWasReady = false; // Result of last parser run int parseResult = PARSERESULT_NODATA; - // Write CSV header to SD card - logger_log("ProgramTime,LastAprsBroadcast,LastLog\n"); - - serial1_ioff(); while(1) @@ -117,22 +114,43 @@ int main(void) sensors_readBoardTemp(); // i2c read, 400k - logbuf[0] = 0x00; - //snprintf(logbuf, 128, "%lu,%d,%u,%s,%s,%s,%s,%s\r\n", time_millis(), sensors_getBoardTemp(),get_timestamp(),get_latitude(),get_longitude(),get_speedKnots(),get_hdop(), get_course()); - for(int i=0; i