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 @@ -180,6 +180,7 @@ void logger_setup() error_log_rawwrite(LOGGER_HEADERTEXT); error_log_rawwrite("\n-- BEGIN ERROR --\n"); + error_log_rawwrite("\nErrorNo,ErrorMsg,ErrorInfo,\r\n"); } void logger_log(char *buffer) @@ -202,15 +203,37 @@ void error_log(uint8_t errNo, bool flash strncpy_P(labelBuffer,(char*)pgm_read_word(&(errorMessageLookup[errNo])),32); } char errorLine[128]; - snprintf(errorLine, 128, "%lu, %u, %s,\r\n", time_millis(), errNo, labelBuffer); + snprintf(errorLine, 128, "%lu, %u, %s,,\r\n", time_millis(), errNo, labelBuffer); error_log_rawwrite(errorLine); + led_on(LED_ERROR); if(flashLED) { led_errorcode(errNo); } } +void error_log_msg(uint8_t errNo, bool flashLED, char* infoText) +{ + char labelBuffer[32]; + labelBuffer[0] = 0x00; + + if(errNo <= MAX_ERRNO) + { + strncpy_P(labelBuffer,(char*)pgm_read_word(&(errorMessageLookup[errNo])),32); + } + char errorLine[256]; + snprintf(errorLine, 256, "%lu,%u,%s,%s,\r\n", time_millis(), errNo, labelBuffer, infoText); + error_log_rawwrite(errorLine); + + led_on(LED_ERROR); + if(flashLED) + { + led_errorcode(errNo); + } +} + + void error_log_rawwrite(char *buffer) { uint8_t len = strlen(buffer); diff --git a/master/master/lib/logger.h b/master/master/lib/logger.h --- a/master/master/lib/logger.h +++ b/master/master/lib/logger.h @@ -21,6 +21,7 @@ uint8_t logger_writeLine(char* dateLine, struct fat_file_struct* open_file_in_dir(struct fat_fs_struct* fs, struct fat_dir_struct* dd, const char* name); uint8_t find_file_in_dir(struct fat_fs_struct* fs, struct fat_dir_struct* dd, const char* name, struct fat_dir_entry_struct* dir_entry); void error_log(uint8_t errNo, bool flashLED); +void error_log_msg(uint8_t errNo, bool flashLED, char* infoText); void error_log_rawwrite(char *buffer); void logger_log(char *buffer); void logger_closeLog(); 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 @@ -25,6 +25,7 @@ #include "sensordata.h" #include "led.h" #include "looptime.h" +#include "logger.h" // Label lookup table // Make sure there are never more labels than there are MAX_NUM_SENSORS! @@ -70,11 +71,6 @@ uint8_t currentSlave = 0; uint8_t currentSlaveSensor = 0; bool requesting = false; - -void slavesensors_setup() -{ - -} //#define DEBUG_NETWORKSCAN //#define DEBUG_GETSLAVEDATA @@ -85,10 +81,18 @@ static char slaveAddressLow[MAX_NUM_SLAV static char slaveAddressHigh[MAX_NUM_SLAVES][9]; static char slaveNames[MAX_NUM_SLAVES][15]; -uint8_t loggerIndex = 255; +static char loggerAddressLow[9]; +static char loggerAddressHigh[9]; + uint8_t nodeCount = 0; bool dataReady = false; +void slavesensors_setup() +{ + loggerAddressLow[0] = 0x00; + loggerAddressHigh[0] = 0x00; +} + char* slavesensors_slavename(uint8_t id) { return slaveNames[id]; @@ -153,9 +157,19 @@ void slavesensors_network_scan() // If we've finished one chunk (including the newline after it). Can't be else if because it controls increment. if(lineCount == 9) { - // bufPtr should be null at this point, because we read in a newline after one chunk - nodeCount++; - lineCount = 0; + if(strcmp(slaveNames[nodeCount], XBEE_LOGDEST_NAME) == 0) + { + // Save logger address in the loggerAddressXXXX variables + strncpy(loggerAddressHigh, slaveAddressHigh[nodeCount], 9); + strncpy(loggerAddressLow, slaveAddressLow[nodeCount], 9); + lineCount = 0; + // don't increment, just overwrite this next time + } + else { + // bufPtr should be null at this point, because we read in a newline after one chunk + nodeCount++; + lineCount = 0; + } } else { @@ -194,7 +208,7 @@ void slavesensors_network_scan() _delay_ms(500); led_off(LED_SIDEBOARD); - #ifdef DEBUG_OUTPUT + #ifdef DEBUG_NETWORKSCAN char debugBuf[64]; serial0_sendString("Discovered: \r\n"); @@ -211,13 +225,7 @@ void slavesensors_network_scan() #endif - for(int i=0; i timeout) { - error_log(ERROR_XBEETIMEOUT); + error_log(ERROR_XBEETIMEOUT, true); return true; } if(time_millis() - lastBlink > 50) @@ -361,7 +377,7 @@ int slavesensors_enterAT() int xbeeIsOk() { if(waitTimeout(2000)) { - error_log(ERROR_XBEETIMEOUT); + error_log(ERROR_XBEETIMEOUT, true); return 1; } char* tmppntr = serial0_readLine(); @@ -371,7 +387,7 @@ int xbeeIsOk() } else { - error_log(ERROR_SLAVETIMEOUT); + error_log(ERROR_SLAVETIMEOUT, true); return 1; } } @@ -396,10 +412,6 @@ void slavesensors_startprocess() uint32_t beginRequest = 0; void slavesensors_request() { - if(currentSlave == loggerIndex) { - gotoNextSlaveOrSensor(true); - return; - } slavesensors_selectnode(currentSlave); beginRequest = time_millis(); serial_sendCommand("@"); // Request data! @@ -438,23 +450,24 @@ void gotoNextSlaveOrSensor(bool fail) { currentSlaveSensor = 0; requesting = true; - if(currentSlave == loggerIndex) - { - if(currentSlave >= (nodeCount-1)) - { - // We hit the last one, we're done. - dataReady = true; - currentSlave = 0; - currentSlaveSensor = 0; - requesting = false; - led_alert(); - return; - } - else - { - currentSlave++; // Skip the logger: increment to the next slave after the logger - } - } + // EXPECT PROBLEMS HERE FROM NOT INCREMENTING + //if(currentSlave == loggerIndex) + //{ + //if(currentSlave >= (nodeCount-1)) + //{ + //// We hit the last one, we're done. + //dataReady = true; + //currentSlave = 0; + //currentSlaveSensor = 0; + //requesting = false; + //led_alert(); + //return; + //} + //else + //{ + //currentSlave++; // Skip the logger: increment to the next slave after the logger + //} + //} slavesensors_request(); } @@ -490,7 +503,9 @@ void slavesensors_process(uint8_t parseR // if we're requesting, we have no data, and we're over the timeout, this is bad! // setParserState(STATE_RESET); - meh, can't do this because it freaking increments the cirbufptr gotoNextSlaveOrSensor(true); - error_log(ERROR_SLAVETIMEOUT, false); // log error, don't blink LED + char* msg[128]; + snprintf(msg, 128, "Slave %u (%s) timeout",currentSlave,slaveNames[currentSlave]); + error_log_msg(ERROR_SLAVETIMEOUT, false, msg); // log error, don't blink LED } } 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 @@ -39,6 +39,7 @@ void slavesensors_setup(); void slavesensors_network_scan(); uint8_t slavesensors_getselectednode(); void slavesensors_selectnode(uint8_t nodeIndex); +bool slavesensors_selectaddress(char* addrHigh, char* addrLow); void slavesensors_startprocess(); void slavesensors_request(); void gotoNextSlaveOrSensor(bool fail); diff --git a/master/master/master.c b/master/master/master.c --- a/master/master/master.c +++ b/master/master/master.c @@ -38,6 +38,9 @@ int main(void) { + // Power debounce + _delay_ms(100); + // Initialize libraries time_setup(); watchdog_setup(); // enables interrupts