Bmag incl gps rettelse
Dependencies: mbed WDT MODSERIAL BME280
main.cpp@0:b3313c5ffca3, 2017-02-17 (annotated)
- Committer:
- MAA
- Date:
- Fri Feb 17 09:33:57 2017 +0000
- Revision:
- 0:b3313c5ffca3
- Child:
- 1:f347c4ef25fa
- Child:
- 2:39c4a85dc2a4
init
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MAA | 0:b3313c5ffca3 | 1 | #include "main.h" |
MAA | 0:b3313c5ffca3 | 2 | |
MAA | 0:b3313c5ffca3 | 3 | //Global GPS variables |
MAA | 0:b3313c5ffca3 | 4 | bool GPS_Data_Rdy = false; |
MAA | 0:b3313c5ffca3 | 5 | bool GPS_Data_Valid = false; |
MAA | 0:b3313c5ffca3 | 6 | bool GGA_Fix_Present = false; |
MAA | 0:b3313c5ffca3 | 7 | |
MAA | 0:b3313c5ffca3 | 8 | //global system variables,at the moment, only the currently always true "run variable" |
MAA | 0:b3313c5ffca3 | 9 | bool run = true; |
MAA | 0:b3313c5ffca3 | 10 | int writecount = 0; |
MAA | 0:b3313c5ffca3 | 11 | int dataRWComplete = 0; |
MAA | 0:b3313c5ffca3 | 12 | |
MAA | 0:b3313c5ffca3 | 13 | //global tmpGpsRxString |
MAA | 0:b3313c5ffca3 | 14 | char tmpGpsRxString[128]; |
MAA | 0:b3313c5ffca3 | 15 | |
MAA | 0:b3313c5ffca3 | 16 | WatchDog wdt; |
MAA | 0:b3313c5ffca3 | 17 | |
MAA | 0:b3313c5ffca3 | 18 | int main(void){ |
MAA | 0:b3313c5ffca3 | 19 | |
MAA | 0:b3313c5ffca3 | 20 | //Initializing string buffer for GPS data |
MAA | 0:b3313c5ffca3 | 21 | string GPS_String_Buff; |
MAA | 0:b3313c5ffca3 | 22 | GPS_String_Buff.resize(128); |
MAA | 0:b3313c5ffca3 | 23 | memset(tmpGpsRxString,'\0',128); |
MAA | 0:b3313c5ffca3 | 24 | |
MAA | 0:b3313c5ffca3 | 25 | //initializing watchdog timer to 10 second idle limit |
MAA | 0:b3313c5ffca3 | 26 | wdt.kick(10); |
MAA | 0:b3313c5ffca3 | 27 | |
MAA | 0:b3313c5ffca3 | 28 | //GPS communication init |
MAA | 0:b3313c5ffca3 | 29 | gps.baud(9600); |
MAA | 0:b3313c5ffca3 | 30 | gps.attach(&rxCallback, MODSERIAL::RxIrq); |
MAA | 0:b3313c5ffca3 | 31 | |
MAA | 0:b3313c5ffca3 | 32 | //debug comm setup, to be removed when working correctly :) |
MAA | 0:b3313c5ffca3 | 33 | dbg.baud(115200); |
MAA | 0:b3313c5ffca3 | 34 | |
MAA | 0:b3313c5ffca3 | 35 | //setting up USB device |
MAA | 0:b3313c5ffca3 | 36 | USBHostMSD msd("usb"); |
MAA | 0:b3313c5ffca3 | 37 | |
MAA | 0:b3313c5ffca3 | 38 | while(!msd.connect()){ |
MAA | 0:b3313c5ffca3 | 39 | dbg.printf("Trying to connect to usb flash disk\r\n"); |
MAA | 0:b3313c5ffca3 | 40 | wait_ms(500); |
MAA | 0:b3313c5ffca3 | 41 | } |
MAA | 0:b3313c5ffca3 | 42 | |
MAA | 0:b3313c5ffca3 | 43 | //Opening a file on usb disk |
MAA | 0:b3313c5ffca3 | 44 | FILE * fp = fopen("/usb/test1.txt", "a"); |
MAA | 0:b3313c5ffca3 | 45 | |
MAA | 0:b3313c5ffca3 | 46 | //Start comms with the GPS, Enabling GPRMC and GPGGA |
MAA | 0:b3313c5ffca3 | 47 | gps.printf("$PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28\r\n"); |
MAA | 0:b3313c5ffca3 | 48 | |
MAA | 0:b3313c5ffca3 | 49 | //infinite loop |
MAA | 0:b3313c5ffca3 | 50 | while(run) { |
MAA | 0:b3313c5ffca3 | 51 | |
MAA | 0:b3313c5ffca3 | 52 | if(GPS_Data_Rdy){ |
MAA | 0:b3313c5ffca3 | 53 | |
MAA | 0:b3313c5ffca3 | 54 | gps.scanf("%s", &tmpGpsRxString); |
MAA | 0:b3313c5ffca3 | 55 | |
MAA | 0:b3313c5ffca3 | 56 | //copy c_string to string |
MAA | 0:b3313c5ffca3 | 57 | GPS_String_Buff.assign(tmpGpsRxString); |
MAA | 0:b3313c5ffca3 | 58 | |
MAA | 0:b3313c5ffca3 | 59 | //clear tmpRxBuffer |
MAA | 0:b3313c5ffca3 | 60 | memset(tmpGpsRxString,'\0',128); |
MAA | 0:b3313c5ffca3 | 61 | |
MAA | 0:b3313c5ffca3 | 62 | //printing GPS string buffer |
MAA | 0:b3313c5ffca3 | 63 | dbg.printf(GPS_String_Buff.c_str()); |
MAA | 0:b3313c5ffca3 | 64 | dbg.printf("\r\n"); |
MAA | 0:b3313c5ffca3 | 65 | //dbg.printf("Validating GPS data\r\n"); |
MAA | 0:b3313c5ffca3 | 66 | //Validate CRC |
MAA | 0:b3313c5ffca3 | 67 | GPS_Data_Valid = gpsNMEA.ValidateData(GPS_String_Buff, &dbg); |
MAA | 0:b3313c5ffca3 | 68 | |
MAA | 0:b3313c5ffca3 | 69 | //store valid string, either gga or rmc |
MAA | 0:b3313c5ffca3 | 70 | if(GPS_Data_Valid){ |
MAA | 0:b3313c5ffca3 | 71 | gpsNMEA.StoreString(GPS_String_Buff, &dbg); |
MAA | 0:b3313c5ffca3 | 72 | } |
MAA | 0:b3313c5ffca3 | 73 | |
MAA | 0:b3313c5ffca3 | 74 | GGA_Fix_Present = gpsNMEA.GGAFixVerification(&dbg); |
MAA | 0:b3313c5ffca3 | 75 | |
MAA | 0:b3313c5ffca3 | 76 | //Clearing RX buffer. |
MAA | 0:b3313c5ffca3 | 77 | //dbg.printf("Clearing Rx buffer, and flags... "); |
MAA | 0:b3313c5ffca3 | 78 | GPS_String_Buff = ""; |
MAA | 0:b3313c5ffca3 | 79 | GPS_String_Buff.resize(128); |
MAA | 0:b3313c5ffca3 | 80 | |
MAA | 0:b3313c5ffca3 | 81 | //clearing flags |
MAA | 0:b3313c5ffca3 | 82 | GPS_Data_Valid = false; |
MAA | 0:b3313c5ffca3 | 83 | GPS_Data_Rdy = false; |
MAA | 0:b3313c5ffca3 | 84 | //dbg.printf("Done!\r\n"); |
MAA | 0:b3313c5ffca3 | 85 | |
MAA | 0:b3313c5ffca3 | 86 | //write current data received data to file if gga fix is present. |
MAA | 0:b3313c5ffca3 | 87 | if (fp != NULL && GGA_Fix_Present) { |
MAA | 0:b3313c5ffca3 | 88 | dbg.printf("Writing to usb flash disk\r\n"); |
MAA | 0:b3313c5ffca3 | 89 | writecount += 1; |
MAA | 0:b3313c5ffca3 | 90 | fprintf(fp, gpsNMEA.currentGGAString.c_str()); |
MAA | 0:b3313c5ffca3 | 91 | fprintf(fp, "\r\n"); |
MAA | 0:b3313c5ffca3 | 92 | fprintf(fp, gpsNMEA.currentGPRMCString.c_str()); |
MAA | 0:b3313c5ffca3 | 93 | fprintf(fp, "\r\n"); |
MAA | 0:b3313c5ffca3 | 94 | } |
MAA | 0:b3313c5ffca3 | 95 | |
MAA | 0:b3313c5ffca3 | 96 | if(fp == NULL){ |
MAA | 0:b3313c5ffca3 | 97 | //Reopening a file on usb disk |
MAA | 0:b3313c5ffca3 | 98 | FILE * fp = fopen("/usb/test1.txt", "a"); |
MAA | 0:b3313c5ffca3 | 99 | } |
MAA | 0:b3313c5ffca3 | 100 | |
MAA | 0:b3313c5ffca3 | 101 | //Close file and reopen |
MAA | 0:b3313c5ffca3 | 102 | if(writecount > 10){ |
MAA | 0:b3313c5ffca3 | 103 | //dbg.printf("Closing file and reopening.\r\n"); |
MAA | 0:b3313c5ffca3 | 104 | fclose(fp); |
MAA | 0:b3313c5ffca3 | 105 | writecount = 0; |
MAA | 0:b3313c5ffca3 | 106 | FILE * fp = fopen("/usb/test1.txt", "a"); |
MAA | 0:b3313c5ffca3 | 107 | } |
MAA | 0:b3313c5ffca3 | 108 | |
MAA | 0:b3313c5ffca3 | 109 | } |
MAA | 0:b3313c5ffca3 | 110 | |
MAA | 0:b3313c5ffca3 | 111 | |
MAA | 0:b3313c5ffca3 | 112 | |
MAA | 0:b3313c5ffca3 | 113 | //If connection to USB flash disk is lost, reconnect to the flash disk |
MAA | 0:b3313c5ffca3 | 114 | if(!msd.connected()){ |
MAA | 0:b3313c5ffca3 | 115 | //reestablish usb connection |
MAA | 0:b3313c5ffca3 | 116 | while(!msd.connect()){ |
MAA | 0:b3313c5ffca3 | 117 | dbg.printf("Trying to reconnect to usb flash disk\r\n"); |
MAA | 0:b3313c5ffca3 | 118 | wait_ms(500); |
MAA | 0:b3313c5ffca3 | 119 | } |
MAA | 0:b3313c5ffca3 | 120 | |
MAA | 0:b3313c5ffca3 | 121 | //Reopening a file on usb disk |
MAA | 0:b3313c5ffca3 | 122 | FILE * fp = fopen("/usb/test1.txt", "a"); |
MAA | 0:b3313c5ffca3 | 123 | |
MAA | 0:b3313c5ffca3 | 124 | } |
MAA | 0:b3313c5ffca3 | 125 | |
MAA | 0:b3313c5ffca3 | 126 | wdt.kick(); |
MAA | 0:b3313c5ffca3 | 127 | |
MAA | 0:b3313c5ffca3 | 128 | } |
MAA | 0:b3313c5ffca3 | 129 | |
MAA | 0:b3313c5ffca3 | 130 | return 0; |
MAA | 0:b3313c5ffca3 | 131 | } |
MAA | 0:b3313c5ffca3 | 132 | |
MAA | 0:b3313c5ffca3 | 133 | //Thanks to MODSERIAL! |
MAA | 0:b3313c5ffca3 | 134 | // Called everytime a new character goes into |
MAA | 0:b3313c5ffca3 | 135 | // the RX buffer. Test that character for \n |
MAA | 0:b3313c5ffca3 | 136 | // Note, rxGetLastChar() gets the last char that |
MAA | 0:b3313c5ffca3 | 137 | // we received but it does NOT remove it from |
MAA | 0:b3313c5ffca3 | 138 | // the RX buffer. |
MAA | 0:b3313c5ffca3 | 139 | void rxCallback(MODSERIAL_IRQ_INFO *q) { |
MAA | 0:b3313c5ffca3 | 140 | MODSERIAL *serial = q->serial; |
MAA | 0:b3313c5ffca3 | 141 | if ( serial->rxGetLastChar() == '\n') { |
MAA | 0:b3313c5ffca3 | 142 | GPS_Data_Rdy = true; |
MAA | 0:b3313c5ffca3 | 143 | } |
MAA | 0:b3313c5ffca3 | 144 | } |