13 volatile int gps_stopping;
14 volatile int gps_stack[100];
15 volatile int _gps_rx_pin, _gps_tx_pin, _gps_baud;
19 gps_byte_t inBuff[GPS_INBUFF_SIZE];
24 void ParseTID(
char tid);
29 void gps_run(
void *par)
31 gps_byte_t tempBuff[16];
36 memset(gps_data.talker_ids,
' ',
sizeof(gps_data.talker_ids));
37 gps_data.talker_ids[64] = 0;
39 gps_ser =
fdserial_open(_gps_rx_pin, _gps_tx_pin, 0, _gps_baud);
70 if(inBuff[0] ==
'G' || inBuff[0] ==
'B' || inBuff[0] ==
'Q')
72 if(inBuff[0] ==
'B' && inBuff[1] ==
'D')
79 if(inBuff[2] ==
'R' && inBuff[3] ==
'M' && inBuff[4] ==
'C')
85 if(inBuff[2] ==
'G' && inBuff[3] ==
'G' && inBuff[4] ==
'A')
94 void ParseTID(
char tid)
98 for (gcr = 0; gcr < 64; gcr++)
100 gps_data.talker_ids[gcr + 1] = gps_data.talker_ids[gcr];
102 gps_data.talker_ids[64] = 0;
103 gps_data.talker_ids[0] = tid;
111 ptrBuff = strtok(inBuff,
",");
113 while(ptrBuff && i<12)
116 gps_data.time = atof(ptrBuff);
119 gps_data.fix_valid = strcmp(ptrBuff,
"A") ? GPS_FALSE:GPS_TRUE;
125 f_temp = (
float)atof(ptrBuff);
126 ptrBuff = strtok(NULL,
",");
130 sign = strcmp(ptrBuff,
"N") ? -1:1;
131 degs = (int)f_temp/100;
132 f_temp -= (degs*100);
133 gps_data.lat_dds = sign*((f_temp/60)+degs);
140 f_temp = (
float)atof(ptrBuff);
141 ptrBuff = strtok(NULL,
",");
148 sign = strcmp(ptrBuff,
"E") ? -1:1;
149 degs = (int)f_temp/100;
150 f_temp -= (degs*100);
151 gps_data.lon_dds = sign*((f_temp/60)+degs);
155 gps_data.velocity = (
float)atof(ptrBuff);
158 gps_data.heading = (
float)atof(ptrBuff);
161 gps_data.date = atoi(ptrBuff);
164 gps_data.mag_var = (
float)atof(ptrBuff);
166 ptrBuff = strtok(NULL,
",");
175 ptrBuff = strtok(inBuff,
",");
177 while(ptrBuff && i<16)
180 gps_data.fix = atoi(ptrBuff);
183 gps_data.sats_tracked = atoi(ptrBuff);
186 gps_data.altitude = (
float)atof(ptrBuff);
188 ptrBuff = strtok(NULL,
",");
197 int ch, prevch=0, len, i;
198 len = strlen(inBuff);
203 if(ch ==
',' && prevch ==
',')
205 memmove(inBuff+i+1, inBuff+i, len-i);
206 prevch = inBuff[i] =
'0';