Code for 'Smart Regulator' featured in 'Model Engineer', November 2020 on. Contains all work to August 2020 including all code described. Top level algorithm development is quite spares, leaving some work for you! Any questions - jon@jons-workshop.com
Dependencies: mbed BufferedSerial Servo2 PCT2075 I2CEeprom FastPWM
gps_mod.cpp@3:43cb067ecd00, 2020-07-27 (annotated)
- Committer:
- JonFreeman
- Date:
- Mon Jul 27 08:44:59 2020 +0000
- Revision:
- 3:43cb067ecd00
- Child:
- 4:28cc0cf01570
End of July after good day out at Ashton Court
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JonFreeman | 3:43cb067ecd00 | 1 | #include "mbed.h" |
JonFreeman | 3:43cb067ecd00 | 2 | |
JonFreeman | 3:43cb067ecd00 | 3 | #ifdef GPS_ |
JonFreeman | 3:43cb067ecd00 | 4 | |
JonFreeman | 3:43cb067ecd00 | 5 | #include "mbed.h" |
JonFreeman | 3:43cb067ecd00 | 6 | #include "gps_mod.h" |
JonFreeman | 3:43cb067ecd00 | 7 | using namespace std; |
JonFreeman | 3:43cb067ecd00 | 8 | #if defined (TARGET_NUCLEO_L476RG) // Computer is low power ARM Cortex development system |
JonFreeman | 3:43cb067ecd00 | 9 | #include "BufferedSerial.h" |
JonFreeman | 3:43cb067ecd00 | 10 | BufferedSerial gps_module (A0, A1); |
JonFreeman | 3:43cb067ecd00 | 11 | #endif |
JonFreeman | 3:43cb067ecd00 | 12 | #if defined (TARGET_DISCO_F746NG) // Computer is high-end ARM Cortex development system with touch lcd |
JonFreeman | 3:43cb067ecd00 | 13 | #include "BufferedSoftSerial.h" |
JonFreeman | 3:43cb067ecd00 | 14 | BufferedSoftSerial gps_module (A4, A5); |
JonFreeman | 3:43cb067ecd00 | 15 | #endif |
JonFreeman | 3:43cb067ecd00 | 16 | #ifdef TARGET_NUCLEO_L432KC |
JonFreeman | 3:43cb067ecd00 | 17 | #include "BufferedSerial.h" |
JonFreeman | 3:43cb067ecd00 | 18 | extern BufferedSerial gps_module; |
JonFreeman | 3:43cb067ecd00 | 19 | #endif |
JonFreeman | 3:43cb067ecd00 | 20 | gps_mod::gps_mod() // Constructor |
JonFreeman | 3:43cb067ecd00 | 21 | { |
JonFreeman | 3:43cb067ecd00 | 22 | //BufferedSoftSerial gps_module (_pinTx : A0, _pinRx : A1); |
JonFreeman | 3:43cb067ecd00 | 23 | state = WAITING4DOLLAR; |
JonFreeman | 3:43cb067ecd00 | 24 | destptr = dest; |
JonFreeman | 3:43cb067ecd00 | 25 | strcpy (latstr, "Invalid\0"); |
JonFreeman | 3:43cb067ecd00 | 26 | strcpy (longstr, "Invalid\0"); |
JonFreeman | 3:43cb067ecd00 | 27 | strcpy (altistr, "Invalid\0"); |
JonFreeman | 3:43cb067ecd00 | 28 | strcpy (timestr, "??:??:??\0"); |
JonFreeman | 3:43cb067ecd00 | 29 | chcnt = 0; |
JonFreeman | 3:43cb067ecd00 | 30 | inmsg = false; |
JonFreeman | 3:43cb067ecd00 | 31 | newdata = false; |
JonFreeman | 3:43cb067ecd00 | 32 | posfix[0] = 'x'; |
JonFreeman | 3:43cb067ecd00 | 33 | posfix[1] = 0; |
JonFreeman | 3:43cb067ecd00 | 34 | return; |
JonFreeman | 3:43cb067ecd00 | 35 | } |
JonFreeman | 3:43cb067ecd00 | 36 | |
JonFreeman | 3:43cb067ecd00 | 37 | bool gps_mod::new_data() { |
JonFreeman | 3:43cb067ecd00 | 38 | bool r; |
JonFreeman | 3:43cb067ecd00 | 39 | r = newdata; |
JonFreeman | 3:43cb067ecd00 | 40 | newdata = false; |
JonFreeman | 3:43cb067ecd00 | 41 | return r; |
JonFreeman | 3:43cb067ecd00 | 42 | } |
JonFreeman | 3:43cb067ecd00 | 43 | |
JonFreeman | 3:43cb067ecd00 | 44 | bool gps_mod::fix_valid() |
JonFreeman | 3:43cb067ecd00 | 45 | { |
JonFreeman | 3:43cb067ecd00 | 46 | if (posfix[0] < '1' || posfix[0] > '3') return false; |
JonFreeman | 3:43cb067ecd00 | 47 | return true; |
JonFreeman | 3:43cb067ecd00 | 48 | } |
JonFreeman | 3:43cb067ecd00 | 49 | |
JonFreeman | 3:43cb067ecd00 | 50 | char * gps_mod::date () { |
JonFreeman | 3:43cb067ecd00 | 51 | return datestr; |
JonFreeman | 3:43cb067ecd00 | 52 | } |
JonFreeman | 3:43cb067ecd00 | 53 | |
JonFreeman | 3:43cb067ecd00 | 54 | char * gps_mod::heading () { |
JonFreeman | 3:43cb067ecd00 | 55 | return headingstr; |
JonFreeman | 3:43cb067ecd00 | 56 | } |
JonFreeman | 3:43cb067ecd00 | 57 | |
JonFreeman | 3:43cb067ecd00 | 58 | char * gps_mod::mph () { |
JonFreeman | 3:43cb067ecd00 | 59 | return speed_mphourstr; |
JonFreeman | 3:43cb067ecd00 | 60 | } |
JonFreeman | 3:43cb067ecd00 | 61 | |
JonFreeman | 3:43cb067ecd00 | 62 | char * gps_mod::position_fix_indicator () |
JonFreeman | 3:43cb067ecd00 | 63 | { |
JonFreeman | 3:43cb067ecd00 | 64 | return posfix; |
JonFreeman | 3:43cb067ecd00 | 65 | } |
JonFreeman | 3:43cb067ecd00 | 66 | |
JonFreeman | 3:43cb067ecd00 | 67 | char * gps_mod::latitude() |
JonFreeman | 3:43cb067ecd00 | 68 | { |
JonFreeman | 3:43cb067ecd00 | 69 | if (fix_valid()) return latstr; |
JonFreeman | 3:43cb067ecd00 | 70 | return "No Fix "; |
JonFreeman | 3:43cb067ecd00 | 71 | } |
JonFreeman | 3:43cb067ecd00 | 72 | |
JonFreeman | 3:43cb067ecd00 | 73 | char * gps_mod::longitude() |
JonFreeman | 3:43cb067ecd00 | 74 | { |
JonFreeman | 3:43cb067ecd00 | 75 | if (fix_valid()) return longstr; |
JonFreeman | 3:43cb067ecd00 | 76 | return "No Fix "; |
JonFreeman | 3:43cb067ecd00 | 77 | } |
JonFreeman | 3:43cb067ecd00 | 78 | |
JonFreeman | 3:43cb067ecd00 | 79 | char * gps_mod::altitude() |
JonFreeman | 3:43cb067ecd00 | 80 | { |
JonFreeman | 3:43cb067ecd00 | 81 | if (fix_valid()) return altistr; |
JonFreeman | 3:43cb067ecd00 | 82 | return "No Fix "; |
JonFreeman | 3:43cb067ecd00 | 83 | } |
JonFreeman | 3:43cb067ecd00 | 84 | |
JonFreeman | 3:43cb067ecd00 | 85 | char * gps_mod::sat_count () |
JonFreeman | 3:43cb067ecd00 | 86 | { |
JonFreeman | 3:43cb067ecd00 | 87 | return numofsats; |
JonFreeman | 3:43cb067ecd00 | 88 | } |
JonFreeman | 3:43cb067ecd00 | 89 | |
JonFreeman | 3:43cb067ecd00 | 90 | char * gps_mod::message(int mess_num) |
JonFreeman | 3:43cb067ecd00 | 91 | { |
JonFreeman | 3:43cb067ecd00 | 92 | if (mess_num < 0 || mess_num > 5) |
JonFreeman | 3:43cb067ecd00 | 93 | return NULL; |
JonFreeman | 3:43cb067ecd00 | 94 | return dest + mess_num * (MAXMSGLEN + 4); |
JonFreeman | 3:43cb067ecd00 | 95 | } |
JonFreeman | 3:43cb067ecd00 | 96 | |
JonFreeman | 3:43cb067ecd00 | 97 | char * gps_mod::time () |
JonFreeman | 3:43cb067ecd00 | 98 | { |
JonFreeman | 3:43cb067ecd00 | 99 | // char * t = message(0); |
JonFreeman | 3:43cb067ecd00 | 100 | return timestr; |
JonFreeman | 3:43cb067ecd00 | 101 | } |
JonFreeman | 3:43cb067ecd00 | 102 | |
JonFreeman | 3:43cb067ecd00 | 103 | double gps_mod::lat_merged () |
JonFreeman | 3:43cb067ecd00 | 104 | { |
JonFreeman | 3:43cb067ecd00 | 105 | double result = strtod (latstr, NULL); |
JonFreeman | 3:43cb067ecd00 | 106 | return result + (strtod (latstr + 3, NULL) / 60.0); |
JonFreeman | 3:43cb067ecd00 | 107 | } |
JonFreeman | 3:43cb067ecd00 | 108 | |
JonFreeman | 3:43cb067ecd00 | 109 | double gps_mod::lon_merged () |
JonFreeman | 3:43cb067ecd00 | 110 | { |
JonFreeman | 3:43cb067ecd00 | 111 | double result = strtod (longstr, NULL); |
JonFreeman | 3:43cb067ecd00 | 112 | return result + (strtod (longstr + 4, NULL) / 60.0); |
JonFreeman | 3:43cb067ecd00 | 113 | } |
JonFreeman | 3:43cb067ecd00 | 114 | |
JonFreeman | 3:43cb067ecd00 | 115 | int gps_mod::update() |
JonFreeman | 3:43cb067ecd00 | 116 | { |
JonFreeman | 3:43cb067ecd00 | 117 | static const char month_tab[] = "---\0Jan\0Feb\0Mar\0Apr\0May\0Jun\0Jul\0Aug\0Sep\0Oct\0Nov\0Dec\0"; |
JonFreeman | 3:43cb067ecd00 | 118 | const int MAX_COMMAS_IN_MSG = 24; |
JonFreeman | 3:43cb067ecd00 | 119 | int date, month; |
JonFreeman | 3:43cb067ecd00 | 120 | while (gps_module.readable()) { |
JonFreeman | 3:43cb067ecd00 | 121 | ch = gps_module.getc(); |
JonFreeman | 3:43cb067ecd00 | 122 | switch (state) { |
JonFreeman | 3:43cb067ecd00 | 123 | case WAITING4DOLLAR: |
JonFreeman | 3:43cb067ecd00 | 124 | i = 0; |
JonFreeman | 3:43cb067ecd00 | 125 | if (ch == '$') state = GOTDOLLAR; |
JonFreeman | 3:43cb067ecd00 | 126 | break; |
JonFreeman | 3:43cb067ecd00 | 127 | case GOTDOLLAR: // accumulate 5 chars after '$' |
JonFreeman | 3:43cb067ecd00 | 128 | hdracc[i++] = ch; |
JonFreeman | 3:43cb067ecd00 | 129 | hdracc[i] = 0; |
JonFreeman | 3:43cb067ecd00 | 130 | if (i > 4) { |
JonFreeman | 3:43cb067ecd00 | 131 | i = -1; |
JonFreeman | 3:43cb067ecd00 | 132 | state = GOTHDR; |
JonFreeman | 3:43cb067ecd00 | 133 | } |
JonFreeman | 3:43cb067ecd00 | 134 | break; |
JonFreeman | 3:43cb067ecd00 | 135 | case GOTHDR: // have read "$GP???" to get here |
JonFreeman | 3:43cb067ecd00 | 136 | // if (ch != ',') pc.printf ("Oops, comma missing\r\n"); |
JonFreeman | 3:43cb067ecd00 | 137 | if (strncmp(hdracc,"GPGGA",5) == 0) i = 0; |
JonFreeman | 3:43cb067ecd00 | 138 | else if (strncmp(hdracc,"GPGLL",5) == 0) i = 1; |
JonFreeman | 3:43cb067ecd00 | 139 | else if (strncmp(hdracc,"GPGSA",5) == 0) i = 2; |
JonFreeman | 3:43cb067ecd00 | 140 | else if (strncmp(hdracc,"GPGSV",5) == 0) i = 3; |
JonFreeman | 3:43cb067ecd00 | 141 | else if (strncmp(hdracc,"GPRMC",5) == 0) i = 4;//161229.487,A,3723.24756, N,12158.34162,W, 0.13, 309.62, 120598,,*10 |
JonFreeman | 3:43cb067ecd00 | 142 | // time ? lat lon ground speed knots|heading|date |
JonFreeman | 3:43cb067ecd00 | 143 | else if (strncmp(hdracc,"GPVTG",5) == 0) i = 5; |
JonFreeman | 3:43cb067ecd00 | 144 | if (i < 0) state = WAITING4DOLLAR; // Found invalid header info |
JonFreeman | 3:43cb067ecd00 | 145 | else { // Validated header info |
JonFreeman | 3:43cb067ecd00 | 146 | destptr = message(i); |
JonFreeman | 3:43cb067ecd00 | 147 | chcnt = 0; |
JonFreeman | 3:43cb067ecd00 | 148 | state = WAITING4CR; |
JonFreeman | 3:43cb067ecd00 | 149 | } |
JonFreeman | 3:43cb067ecd00 | 150 | break; |
JonFreeman | 3:43cb067ecd00 | 151 | case WAITING4CR: |
JonFreeman | 3:43cb067ecd00 | 152 | if (ch == '\r') { |
JonFreeman | 3:43cb067ecd00 | 153 | state = WAITING4LF; // process new string data here |
JonFreeman | 3:43cb067ecd00 | 154 | int comma_count = 0, comma_positions[MAX_COMMAS_IN_MSG + 2]; |
JonFreeman | 3:43cb067ecd00 | 155 | for (int j = 0; j < strlen(destptr) && j < MAXMSGLEN && comma_count < MAX_COMMAS_IN_MSG; j++) { |
JonFreeman | 3:43cb067ecd00 | 156 | if (destptr[j] == ',') { |
JonFreeman | 3:43cb067ecd00 | 157 | comma_positions[comma_count++] = j; |
JonFreeman | 3:43cb067ecd00 | 158 | comma_positions[comma_count] = 0; |
JonFreeman | 3:43cb067ecd00 | 159 | } |
JonFreeman | 3:43cb067ecd00 | 160 | } |
JonFreeman | 3:43cb067ecd00 | 161 | switch (i) { |
JonFreeman | 3:43cb067ecd00 | 162 | case 0: // GGA 183655.00,5110.25620,N,00320.09926,W,1,11,0.80,59.9,M,49.5,M,,*74 |
JonFreeman | 3:43cb067ecd00 | 163 | if (comma_positions[0] == 9) { // time data seems to exist |
JonFreeman | 3:43cb067ecd00 | 164 | timestr[0] = dest[0]; |
JonFreeman | 3:43cb067ecd00 | 165 | timestr[1] = dest[1]; |
JonFreeman | 3:43cb067ecd00 | 166 | timestr[2] = ':'; |
JonFreeman | 3:43cb067ecd00 | 167 | timestr[3] = dest[2]; |
JonFreeman | 3:43cb067ecd00 | 168 | timestr[4] = dest[3]; |
JonFreeman | 3:43cb067ecd00 | 169 | timestr[5] = ':'; |
JonFreeman | 3:43cb067ecd00 | 170 | timestr[6] = dest[4]; |
JonFreeman | 3:43cb067ecd00 | 171 | timestr[7] = dest[5]; |
JonFreeman | 3:43cb067ecd00 | 172 | timestr[8] = 0; |
JonFreeman | 3:43cb067ecd00 | 173 | } else { |
JonFreeman | 3:43cb067ecd00 | 174 | strcpy (timestr, "Invalid"); |
JonFreeman | 3:43cb067ecd00 | 175 | } |
JonFreeman | 3:43cb067ecd00 | 176 | posfix[0] = dest[comma_positions[4] + 1]; |
JonFreeman | 3:43cb067ecd00 | 177 | if (fix_valid()) { |
JonFreeman | 3:43cb067ecd00 | 178 | int a = 0, b = comma_positions[5] + 1; // get numof sats |
JonFreeman | 3:43cb067ecd00 | 179 | if (dest[b] == ',') { |
JonFreeman | 3:43cb067ecd00 | 180 | numofsats[0] = '-'; |
JonFreeman | 3:43cb067ecd00 | 181 | numofsats[1] = '-'; |
JonFreeman | 3:43cb067ecd00 | 182 | } |
JonFreeman | 3:43cb067ecd00 | 183 | else { |
JonFreeman | 3:43cb067ecd00 | 184 | numofsats[0] = dest[b++]; |
JonFreeman | 3:43cb067ecd00 | 185 | numofsats[1] = dest[b++]; |
JonFreeman | 3:43cb067ecd00 | 186 | } |
JonFreeman | 3:43cb067ecd00 | 187 | b = comma_positions[7] + 1; // get altitude |
JonFreeman | 3:43cb067ecd00 | 188 | char c; |
JonFreeman | 3:43cb067ecd00 | 189 | while ((c = dest[b++]) != ',' && a < 7) |
JonFreeman | 3:43cb067ecd00 | 190 | altistr[a++] = c; |
JonFreeman | 3:43cb067ecd00 | 191 | altistr[a] = 0; |
JonFreeman | 3:43cb067ecd00 | 192 | } |
JonFreeman | 3:43cb067ecd00 | 193 | numofsats[2] = 0; |
JonFreeman | 3:43cb067ecd00 | 194 | break; |
JonFreeman | 3:43cb067ecd00 | 195 | case 1: // GLL 5110.25606,N,00320.10001,W,183752.00,A,A*72 |
JonFreeman | 3:43cb067ecd00 | 196 | latstr[0] = destptr[0]; |
JonFreeman | 3:43cb067ecd00 | 197 | latstr[1] = destptr[1]; |
JonFreeman | 3:43cb067ecd00 | 198 | latstr[2] = '~'; |
JonFreeman | 3:43cb067ecd00 | 199 | latstr[3] = destptr[2]; |
JonFreeman | 3:43cb067ecd00 | 200 | latstr[4] = destptr[3]; |
JonFreeman | 3:43cb067ecd00 | 201 | latstr[5] = '.'; |
JonFreeman | 3:43cb067ecd00 | 202 | for (int k = 5; k < 10; k++) |
JonFreeman | 3:43cb067ecd00 | 203 | latstr[k + 1] = destptr[k]; |
JonFreeman | 3:43cb067ecd00 | 204 | latstr[11] = ' '; |
JonFreeman | 3:43cb067ecd00 | 205 | latstr[12] = destptr[11]; // N or S |
JonFreeman | 3:43cb067ecd00 | 206 | latstr[13] = 0; |
JonFreeman | 3:43cb067ecd00 | 207 | for (int k = 0; k < 3; k++) |
JonFreeman | 3:43cb067ecd00 | 208 | longstr[k] = destptr[k + 13]; |
JonFreeman | 3:43cb067ecd00 | 209 | longstr[3] = '~'; |
JonFreeman | 3:43cb067ecd00 | 210 | longstr[4] = destptr[16]; |
JonFreeman | 3:43cb067ecd00 | 211 | longstr[5] = destptr[17]; |
JonFreeman | 3:43cb067ecd00 | 212 | longstr[6] = '.'; |
JonFreeman | 3:43cb067ecd00 | 213 | for (int k = 7; k < 12; k++) |
JonFreeman | 3:43cb067ecd00 | 214 | longstr[k] = destptr[k + 12]; |
JonFreeman | 3:43cb067ecd00 | 215 | longstr[12] = ' '; |
JonFreeman | 3:43cb067ecd00 | 216 | longstr[13] = destptr[25]; // E or W |
JonFreeman | 3:43cb067ecd00 | 217 | longstr[14] = 0; |
JonFreeman | 3:43cb067ecd00 | 218 | break; |
JonFreeman | 3:43cb067ecd00 | 219 | case 2: // GSA A,3,11,22,01,03,17,23,19,14,09,,,,1.72,0.97,1.42*0E |
JonFreeman | 3:43cb067ecd00 | 220 | break; |
JonFreeman | 3:43cb067ecd00 | 221 | case 3: // GSV complex multiple |
JonFreeman | 3:43cb067ecd00 | 222 | break; // 0 1 2 3 4 5 67 |
JonFreeman | 3:43cb067ecd00 | 223 | case 4: // RMC 184111.00, A,5110.25663, N,00320.10076,W, 0.223, , 090816,,,A*6B |
JonFreeman | 3:43cb067ecd00 | 224 | // // 161229.487,A,3723.24756, N,12158.34162,W, 0.13, 309.62, 120598,,*10 |
JonFreeman | 3:43cb067ecd00 | 225 | // time ? lat lon ground speed knots|heading|date |
JonFreeman | 3:43cb067ecd00 | 226 | if (comma_positions[6] + 1 == comma_positions[7]) // no heading data exists |
JonFreeman | 3:43cb067ecd00 | 227 | strcpy (headingstr, "-/-"); |
JonFreeman | 3:43cb067ecd00 | 228 | else |
JonFreeman | 3:43cb067ecd00 | 229 | sprintf(headingstr, "%.1f", strtod(destptr + comma_positions[6] + 1, NULL)); |
JonFreeman | 3:43cb067ecd00 | 230 | // pc.printf("%s ^%s^", destptr, headingstr); |
JonFreeman | 3:43cb067ecd00 | 231 | date = (destptr[comma_positions[7] + 1] - '0') * 10 + (destptr[comma_positions[7] + 2] - '0'); |
JonFreeman | 3:43cb067ecd00 | 232 | month = (destptr[comma_positions[7] + 3] - '0') * 10 + (destptr[comma_positions[7] + 4] - '0'); |
JonFreeman | 3:43cb067ecd00 | 233 | if (month > 12 || month < 1) |
JonFreeman | 3:43cb067ecd00 | 234 | month = 0; |
JonFreeman | 3:43cb067ecd00 | 235 | month *= 4; |
JonFreeman | 3:43cb067ecd00 | 236 | sprintf (datestr, "%d %s 20%d", date, &month_tab[month], strtol(&destptr[comma_positions[7] + 5], NULL, 10)); |
JonFreeman | 3:43cb067ecd00 | 237 | break; |
JonFreeman | 3:43cb067ecd00 | 238 | case 5: // VTG ,T , ,M,0.098,N,0.181,K,A*2A course over ground and ground speed |
JonFreeman | 3:43cb067ecd00 | 239 | //$ GPVTG 309.62,T , ,M,0.13, N,0.2, K*6E |
JonFreeman | 3:43cb067ecd00 | 240 | sprintf (speed_mphourstr, "%.1fmph", km2miles * strtod(destptr + comma_positions[5] + 1, NULL)); |
JonFreeman | 3:43cb067ecd00 | 241 | newdata = true; |
JonFreeman | 3:43cb067ecd00 | 242 | break; // course true|course magnetic|knots|km/hour |
JonFreeman | 3:43cb067ecd00 | 243 | default: |
JonFreeman | 3:43cb067ecd00 | 244 | // pc.printf ("Naf i = %d\r\n", i); |
JonFreeman | 3:43cb067ecd00 | 245 | break; |
JonFreeman | 3:43cb067ecd00 | 246 | } |
JonFreeman | 3:43cb067ecd00 | 247 | } else { // char is not CR |
JonFreeman | 3:43cb067ecd00 | 248 | if (chcnt > MAXMSGLEN) chcnt = MAXMSGLEN; |
JonFreeman | 3:43cb067ecd00 | 249 | destptr[chcnt++] = ch; |
JonFreeman | 3:43cb067ecd00 | 250 | destptr[chcnt] = 0; |
JonFreeman | 3:43cb067ecd00 | 251 | } |
JonFreeman | 3:43cb067ecd00 | 252 | break; |
JonFreeman | 3:43cb067ecd00 | 253 | case WAITING4LF: |
JonFreeman | 3:43cb067ecd00 | 254 | // if (ch != '\n') |
JonFreeman | 3:43cb067ecd00 | 255 | // pc.printf ("Oops, no LF\r\n"); |
JonFreeman | 3:43cb067ecd00 | 256 | state = WAITING4DOLLAR; |
JonFreeman | 3:43cb067ecd00 | 257 | break; |
JonFreeman | 3:43cb067ecd00 | 258 | default: |
JonFreeman | 3:43cb067ecd00 | 259 | break; |
JonFreeman | 3:43cb067ecd00 | 260 | } |
JonFreeman | 3:43cb067ecd00 | 261 | } |
JonFreeman | 3:43cb067ecd00 | 262 | return 0; |
JonFreeman | 3:43cb067ecd00 | 263 | } // end of int gps_mod::update() |
JonFreeman | 3:43cb067ecd00 | 264 | |
JonFreeman | 3:43cb067ecd00 | 265 | #endif |