Test software for SatChat prototype hardware Platform - MAX32630FTHR
Dependencies: USBDevice max32630fthr
Diff: main.cpp
- Revision:
- 14:8ff04e82bda2
- Parent:
- 13:ff0b39177386
- Child:
- 15:7d75ecaeabdb
--- a/main.cpp Mon Jul 03 15:46:51 2017 +0000 +++ b/main.cpp Mon Jul 03 16:50:59 2017 +0000 @@ -6,13 +6,15 @@ #define OFF 1 #define EXIT_SUCCESS 0 #define EXIT_FAILURE 1 +const int GPS_TIMEOUT=180; //Wait three minutes maximum for GPS. + Serial pc(USBTX, USBRX); Serial gps(P5_3, P5_4, 9600); I2C i2c(P5_7,P6_0); // SDA, SCL DigitalOut red_led(LED1,1); DigitalOut green_led(LED2,1); -DigitalOut blue_led(LED3,1); +DigitalOut gps_led(LED3,1); //Blue char gpsfix_last_utc_time[11] = {0}; char gpsfix_last_utc_date[7] = {0}; char gpsfix_longtitude[12] = {0}; @@ -29,11 +31,18 @@ { char data[2]; data[0] = 0x16; //MAX14690 LDO3cfg register - data[1] = 0xE0; //Disable LDO3 if (state == ON) { data[1] = 0xE2; //Enable LDO3 + i2c.write( 0x50, data, 2 ); + gps_led=ON; + } else { + data[1] = 0xE0; //Disable LDO3 + i2c.write( 0x50, data, 2 ); + gps_led=OFF; + while (gps.readable()) { + char dummy = gps.getc(); //Empty serial buffer because overflows reveal MBED bugs :-( + } } - i2c.write( 0x50, data, 2 ); } int get_epoch_from_last_gps_time(void) @@ -60,18 +69,12 @@ int gps_update(void) { -#define GPS_TIMEOUT 120; //Wait two minutes maximum for GPS. gps_power(ON); time_t gps_on_time = time(NULL); //Start time for GPS timeout calculation. bool wait_for_fix = true; //Set this to false once a fix is obtained. - blue_led = ON; while (wait_for_fix) { //Keep monitoring the GPS until we get a fix. - if ((time(NULL) - gps_on_time ) > 120) { + if ((time(NULL) - gps_on_time) > GPS_TIMEOUT) { gps_power(OFF); - blue_led = OFF; - while (gps.readable()) { - char dummy = gps.getc(); //Empty serial buffer because overflows reveal MBED bugs :-( - } return EXIT_FAILURE; //Return an error if the GPS takes too long for a fix. } int checksum = 0; @@ -107,7 +110,7 @@ token = strtok(NULL, ","); if (*token != 32) { //If there is a time present (anything but a space), record it. //pc.printf("Time: %s\n\r",token); - blue_led =! blue_led; //Flash blue LED + gps_led =! gps_led; //Flash blue LED memcpy(gpsfix_last_utc_time, token, sizeof gpsfix_last_utc_time - 1); } } @@ -120,11 +123,7 @@ if (*token == 'A') { //Is this an 'A'ctive (valid) fix? pc.printf("Got a fix\n\r"); gps_power(OFF); //Yes - No need for GPS now - blue_led = OFF; wait_for_fix = false; //Stop looping now we have a fix. - while (gps.readable()) { - char dummy = gps.getc(); //Empty serial buffer because overflows reveal MBED bugs :-( - } if (token != NULL) { token = strtok(NULL, ","); //pc.printf("Latitude: %s\n\r",token); @@ -169,9 +168,6 @@ } } } - while (gps.readable()) { - char dummy = gps.getc(); - } } return EXIT_SUCCESS; } @@ -207,9 +203,9 @@ } else { pc.printf("\n\rGPS timed out and we have no existing fix.\n\r"); pc.printf("We can send an Iridium packet but coordinates are rough.\n\r"); + pc.printf("Sending SOS in 10 seconds"); + red_led=ON; } - pc.printf("Sending SOS in 10 seconds"); - red_led=ON; while(true) {}; //STOP HERE } }