diff --git a/master/master/config.h b/master/master/config.h --- a/master/master/config.h +++ b/master/master/config.h @@ -28,7 +28,9 @@ // SD Card #define ERROR_SD_INIT 2 #define ERROR_SD_PARTITION 3 -#define ERROR_CRAP 6 +#define ERROR_SD_FILE 4 + +#define ERROR_CRAP 15 // -------------------------------------------------------------------------- // Slave Sensors config (slavesensors.c) 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 @@ -64,6 +64,7 @@ void logger_setup() if(!fs) { // opening filesystem failed + led_errorcode(ERROR_SD_PARTITION); return; } @@ -75,6 +76,7 @@ void logger_setup() { // opening root directory failed _delay_ms(10); + led_errorcode(ERROR_SD_FILE); return; } @@ -87,7 +89,9 @@ void logger_setup() sprintf(filename, "data%d.csv",++logid); // TODO: Catch errors here - fat_create_file(dd, filename, &directory); + if(!fat_create_file(dd, filename, &directory)) { + led_errorcode(ERROR_SD_FILE); + } eeprom_update_byte(LOGGER_ID_EEPROM_ADDR, logid); @@ -95,6 +99,7 @@ void logger_setup() fd = open_file_in_dir(fs, dd, filename); if(!fd) { + led_errorcode(ERROR_SD_FILE); _delay_ms(10); return; } @@ -105,6 +110,7 @@ void logger_setup() if(!fat_seek_file(fd, &offset, FAT_SEEK_SET)) { // Error seeking to file + led_errorcode(ERROR_SD_FILE); _delay_ms(10); fat_close_file(fd); return; diff --git a/master/master/lib/serial.c b/master/master/lib/serial.c --- a/master/master/lib/serial.c +++ b/master/master/lib/serial.c @@ -15,6 +15,7 @@ #include "../config.h" #include #include +#include // NOTE: USART ISRs for character reception are included in serparser.c @@ -65,6 +66,14 @@ void serial1_ioff() { UCSR1B &= ~(1 << RXCIE1); // Disable interrupt } +void serial0_ion() { + UCSR0B |= (1 << RXCIE0); // Enable interrupt +} +void serial0_ioff() { + UCSR0B &= ~(1 << RXCIE0); // Disable interrupt +} + + void serial0_sendChar( unsigned char byte ) { while (!(UCSR0A & (1< +#include uint8_t currentSlave = 0; uint8_t currentSlaveSensor = 0; @@ -57,6 +60,87 @@ void slavesensors_setup() } +char* bufPtr = 0x00; +void slavesensors_network_scan() { + serial0_ioff(); + + int atOK; + + serial0_sendString("Beginning network scan...\r\n"); + + // Delay guard period + _delay_ms(500); + _delay_ms(500); + + // Enter AT mode + serial0_sendChar('+'); // Enter AT mode + serial0_sendChar('+'); + serial0_sendChar('+'); + + while(!serial0_hasChar()) { + wdt_reset(); + } + bufPtr = serial0_readLine(); + + char nameString[20] = "NONE"; + + // wait for OK + //todo + if(strcmp(bufPtr, "OK") == 0) + { + atOK = 1; + + serial0_sendString("ATND"); + serial0_sendChar(0x0D); + // wait for scan to complete + while(!serial0_hasChar()) { + wdt_reset(); + } + + // Scan data end when newline by itself ("") + int lineCount = 0; + while(1) { + bufPtr = serial0_readLine(); + if(lineCount == 3) { + strcpy(nameString, bufPtr); + } + if(strcmp(bufPtr, "") == 0) + break; + lineCount++; + } + // Exit AT + serial0_sendString("ATCN"); + serial0_sendChar(0x0D); + + } + else { + atOK = 0; + } + _delay_ms(200); + //serial0_sendString("ATND"); // Scan all nodes + + + + led_on(LED_SIDEBOARD); + _delay_ms(500); + + serial0_sendString("First found node is: "); + serial0_sendString(nameString); + serial0_sendString("\r\n"); + + if(atOK != 1) { + serial0_sendString("AT mode failed \r\n"); + } + + + // Wait for response + // will be multiple values separated by + // 9 data lines per node, terminated, followed by a new line with only at the end of all nodes. + + // followed by another signifies end of scan data + serial0_ion(); +} + bool slavesensors_isrequesting() { return requesting; @@ -76,7 +160,6 @@ void slavesensors_request() void slavesensors_process(uint8_t parseResult) { - if(!requesting) { // we got a command when we didn't request anything. probably skip it. return; 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 @@ -32,6 +32,7 @@ enum sensorTypes // CMD ID# bool slavesensors_isrequesting(); void slavesensors_setup(); +void slavesensors_network_scan(); 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 @@ -58,6 +58,8 @@ int main(void) serial0_sendString("---------------------------------\r\n"); serial0_sendString("\r\nHello.\r\n\r\n"); + slavesensors_network_scan(); + led_on(LED_POWER); led_off(LED_SIDEBOARD); @@ -129,7 +131,7 @@ int main(void) // Print out GPS debug snprintf(debugBuf, 128, "GPS> time: %s lat: %s lon: %s speed: %s hdop: %s course: %s\r\n", get_timestamp(),get_latitude(),get_longitude(),get_speedKnots(),get_hdop(), get_course()); - serial0_sendString(debugBuf); + //serial0_sendString(debugBuf); sensors_readBoardTemp(); // i2c read, 400k @@ -137,8 +139,8 @@ int main(void) logger_log(logbuf); // Print out logger debug - serial0_sendString("LOG> "); - serial0_sendString(logbuf); + //serial0_sendString("LOG> "); + //serial0_sendString(logbuf); led_off(LED_CYCLE); lastLog = time_millis();