Merge pull request #67 from multiwii/gps_noirq
gps_noirq experiment was successful
This commit is contained in:
commit
1c796b44f2
5629
obj/baseflight.hex
5629
obj/baseflight.hex
File diff suppressed because it is too large
Load Diff
20
src/gps.c
20
src/gps.c
|
@ -93,7 +93,8 @@ void gpsInit(uint8_t baudrateIndex)
|
||||||
mode = MODE_RX;
|
mode = MODE_RX;
|
||||||
|
|
||||||
gpsSetPIDs();
|
gpsSetPIDs();
|
||||||
core.gpsport = uartOpen(USART2, gpsNewData, gpsInitData[baudrateIndex].baudrate, mode);
|
// Open GPS UART, no callback - buffer will be read out in gpsThread()
|
||||||
|
core.gpsport = uartOpen(USART2, NULL, gpsInitData[baudrateIndex].baudrate, mode);
|
||||||
// signal GPS "thread" to initialize when it gets to it
|
// signal GPS "thread" to initialize when it gets to it
|
||||||
gpsSetState(GPS_INITIALIZING);
|
gpsSetState(GPS_INITIALIZING);
|
||||||
}
|
}
|
||||||
|
@ -158,6 +159,12 @@ void gpsInitHardware(void)
|
||||||
|
|
||||||
void gpsThread(void)
|
void gpsThread(void)
|
||||||
{
|
{
|
||||||
|
// read out available GPS bytes
|
||||||
|
if (core.gpsport) {
|
||||||
|
while (serialTotalBytesWaiting(core.gpsport))
|
||||||
|
gpsNewData(serialRead(core.gpsport));
|
||||||
|
}
|
||||||
|
|
||||||
switch (gpsData.state) {
|
switch (gpsData.state) {
|
||||||
case GPS_UNKNOWN:
|
case GPS_UNKNOWN:
|
||||||
break;
|
break;
|
||||||
|
@ -536,9 +543,6 @@ int8_t gpsSetPassthrough(void)
|
||||||
if (gpsData.state != GPS_RECEIVINGDATA)
|
if (gpsData.state != GPS_RECEIVINGDATA)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
// get rid of callback
|
|
||||||
core.gpsport->callback = NULL;
|
|
||||||
|
|
||||||
LED0_OFF;
|
LED0_OFF;
|
||||||
LED1_OFF;
|
LED1_OFF;
|
||||||
|
|
||||||
|
@ -846,8 +850,10 @@ uint32_t GPS_coord_to_degrees(char* s)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
// scan for decimal point or end of field
|
// scan for decimal point or end of field
|
||||||
for (p = s; isdigit((unsigned char)*p); p++)
|
for (p = s; isdigit((unsigned char)*p); p++) {
|
||||||
;
|
if (p >= s + 15)
|
||||||
|
return 0; // stop potential fail
|
||||||
|
}
|
||||||
q = s;
|
q = s;
|
||||||
|
|
||||||
// convert degrees
|
// convert degrees
|
||||||
|
@ -892,6 +898,8 @@ static uint32_t grab_fields(char *src, uint8_t mult)
|
||||||
tmp *= 10;
|
tmp *= 10;
|
||||||
if (src[i] >= '0' && src[i] <= '9')
|
if (src[i] >= '0' && src[i] <= '9')
|
||||||
tmp += src[i] - '0';
|
tmp += src[i] - '0';
|
||||||
|
if (i >= 15)
|
||||||
|
return 0; // out of bounds
|
||||||
}
|
}
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue