# HG changeset patch # User ethanzonca@CL-ENS241-08.cedarville.edu # Date 2013-01-30 21:20:33 # Node ID c21de31ee8569f9ca3538045d008a5380f9975ec # Parent 89ad841d14f4af4af4727a1b38578bf32eb3267b Added labeling feature to logged data for sensor data types, slave data request system now fully functional. Note: logger node is no longer selected as previously planned. diff --git a/master/master/config.h b/master/master/config.h --- a/master/master/config.h +++ b/master/master/config.h @@ -52,6 +52,8 @@ // Node identifier of log destination xbee #define XBEE_LOGDEST_NAME "HAB-LOGGER" +#define DATAREQUEST_RATE 3000 + // -------------------------------------------------------------------------- // Command Parser config (serparser.c) // -------------------------------------------------------------------------- diff --git a/master/master/lib/led.c b/master/master/lib/led.c --- a/master/master/lib/led.c +++ b/master/master/lib/led.c @@ -58,6 +58,13 @@ void led_errorcode(uint8_t code) led_on(LED_ERROR); } +void led_alert() { + led_on(LED_ACT0); + led_on(LED_ACT1); + led_on(LED_ACT2); + led_on(LED_ACT3); + _delay_ms(10); +} uint8_t ctr = 0; void led_spin() { diff --git a/master/master/lib/led.h b/master/master/lib/led.h --- a/master/master/lib/led.h +++ b/master/master/lib/led.h @@ -67,5 +67,6 @@ void led_off(uint8_t led); void led_toggle(uint8_t led); void led_errorcode(uint8_t code); void led_spin(); +void led_alert(); #endif /* LED_H_ */ 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 @@ -18,6 +18,7 @@ #include #include #include +#include #include "serial.h" #include "serparser.h" #include "slavesensors.h" @@ -25,6 +26,36 @@ #include "led.h" #include "looptime.h" +// Label lookup table +const char label_0[] PROGMEM = "BoardTemp"; +const char label_1[] PROGMEM = "HeaterStatus"; +const char label_2[] PROGMEM = "BatteryLevel"; +const char label_3[] PROGMEM = "AirTemp"; +const char label_4[] PROGMEM = "AmbientLight"; +const char label_5[] PROGMEM = "Humidity"; +const char label_6[] PROGMEM = "Pressure"; +const char label_7[] PROGMEM = "Altitude"; +const char label_8[] PROGMEM = "CPM-Radiation"; + +const char *const labelLookup[] PROGMEM = +{ + label_0, + label_1, + label_2, + label_3, + label_4, + label_5, + label_6, + label_7, + label_8, +}; + +char labelBuffer[25]; // Size to length of label +char* slavesensors_getLabel(uint8_t sensorID) { + strncpy_P(labelBuffer,(char*)pgm_read_word(&(labelLookup[sensorID])),25); + return labelBuffer; +} + uint8_t currentSlave = 0; uint8_t currentSlaveSensor = 0; @@ -36,7 +67,7 @@ void slavesensors_setup() } //#define DEBUG_NETWORKSCAN -//#define DEBUG_GETSLAVEDATA +#define DEBUG_GETSLAVEDATA char* bufPtr = 0x00; @@ -168,11 +199,25 @@ void slavesensors_network_scan() { serial0_ion(); } -// #define DEBUG_SELECTNODE +//#define DEBUG_CONTEXTSWITCH +//#define DEBUG_SELECTNODE + +uint8_t selectedNode = 0; +uint8_t slavesensors_getselectednode() { + return selectedNode; +} + void slavesensors_selectnode(uint8_t nodeIndex) { + if(selectedNode == nodeIndex) { + return; + } serial0_ioff(); + + #ifdef DEBUG_CONTEXTSWITCH uint32_t startTime = time_millis(); + #endif + #ifdef DEBUG_SELECTNODE serial0_sendString("Switch to node "); serial0_sendChar(nodeIndex + 0x30); @@ -202,6 +247,7 @@ void slavesensors_selectnode(uint8_t nod } slavesensors_exitAT(); + selectedNode = nodeIndex; } _delay_ms(2); @@ -211,10 +257,13 @@ void slavesensors_selectnode(uint8_t nod serial0_sendString("\r\n"); #endif + #ifdef DEBUG_CONTEXTSWITCH uint32_t switchTime = time_millis() - startTime; char tmpB[32]; snprintf(tmpB, 32, "CTXSW: %lu ms\r\n", switchTime); serial0_sendString(tmpB); + #endif + serial0_ion(); return; } @@ -307,10 +356,13 @@ void slavesensors_request() { if(currentSlave == loggerIndex) { currentSlave++; + if(currentSlave >= (nodeCount)) { + slavesensors_selectlogger(); + return; + } } slavesensors_selectnode(currentSlave); serial_sendCommand("@"); // Request data! - slavesensors_selectlogger(); } @@ -382,6 +434,7 @@ void slavesensors_process(uint8_t parseR currentSlave = 0; currentSlaveSensor = 0; requesting = false; + led_alert(); } // If we finished up one slave, go to the next else if(currentSlaveSensor >= (numReadingsToExpect-1)) @@ -401,6 +454,7 @@ void slavesensors_process(uint8_t parseR currentSlave = 0; currentSlaveSensor = 0; requesting = false; + led_alert(); return; } else { 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,14 @@ enum sensorTypes // CMD ID# CAMERA, }; +char* slavesensors_getLabel(uint8_t sensorID); char* slavesensors_slavename(uint8_t id); bool slavesensors_dataReady(); bool slavesensors_isrequesting(); void slavesensors_setup(); void slavesensors_network_scan(); +uint8_t slavesensors_getselectednode(); +void slavesensors_selectnode(uint8_t nodeIndex); void slavesensors_startprocess(); void slavesensors_request(); void slavesensors_process(uint8_t parseResult); diff --git a/master/master/master.c b/master/master/master.c --- a/master/master/master.c +++ b/master/master/master.c @@ -77,6 +77,8 @@ int main(void) uint32_t lastAprsBroadcast = 0; uint32_t lastLog = 0; uint32_t lastLedCycle = 0; + uint32_t lastDataReq = 0; + bool dataWasReady = false; // Result of last parser run @@ -132,7 +134,7 @@ int main(void) int16_t tmp = sensordata_get(i, j); if(tmp != -32768) { // FIXME: will the 128 here really provide safety? might want to subtract the strlen - snprintf(csvHeader + strlen(csvHeader), 128,"%s-Sensor%u,", slavesensors_slavename(i), j); + snprintf(csvHeader + strlen(csvHeader), 128,"%s-%s,", slavesensors_slavename(i), slavesensors_getLabel(j)); } } } @@ -170,6 +172,22 @@ int main(void) } + // Periodic: Data Request + if(time_millis() - lastDataReq > DATAREQUEST_RATE) { + // Start getting values for next transmission + if(slavesensors_isrequesting()) + { + // TODO: something is terribly wrong + } + else + { + slavesensors_startprocess(); + } + + lastDataReq = time_millis(); + } + + // Periodic: APRS transmission if(time_millis() - lastAprsBroadcast > APRS_TRANSMIT_PERIOD) { @@ -177,18 +195,6 @@ int main(void) serial1_ioff(); aprs_send(); // non-blocking - //serial0_sendString("Initiating APRS transmission...\r\n"); - - // Start getting values for next transmission - if(slavesensors_isrequesting()) - { - // TODO: something is terribly wrong - } - else - { - slavesensors_startprocess(); - } - lastAprsBroadcast = time_millis(); }