GPS support via MSP
This commit is contained in:
parent
946cbd257f
commit
92d3b7ca6f
|
@ -2027,7 +2027,7 @@ static mspResult_e mspProcessInCommand(uint8_t cmdMSP, sbuf_t *src)
|
||||||
gpsSol.llh.lon = sbufReadU32(src);
|
gpsSol.llh.lon = sbufReadU32(src);
|
||||||
gpsSol.llh.alt = sbufReadU16(src) * 100; // alt changed from 1m to 0.01m per lsb since MSP API 1.39 by RTH. Received MSP altitudes in 1m per lsb have to upscaled.
|
gpsSol.llh.alt = sbufReadU16(src) * 100; // alt changed from 1m to 0.01m per lsb since MSP API 1.39 by RTH. Received MSP altitudes in 1m per lsb have to upscaled.
|
||||||
gpsSol.groundSpeed = sbufReadU16(src);
|
gpsSol.groundSpeed = sbufReadU16(src);
|
||||||
GPS_update |= 2; // New data signalisation to GPS functions // FIXME Magic Numbers
|
GPS_update |= GPS_MSP_UPDATE; // MSP data signalisation to GPS functions
|
||||||
break;
|
break;
|
||||||
#endif // USE_GPS
|
#endif // USE_GPS
|
||||||
case MSP_SET_FEATURE_CONFIG:
|
case MSP_SET_FEATURE_CONFIG:
|
||||||
|
|
|
@ -98,7 +98,7 @@ static uint16_t fraction3[2];
|
||||||
gpsSolutionData_t gpsSol;
|
gpsSolutionData_t gpsSol;
|
||||||
uint32_t GPS_packetCount = 0;
|
uint32_t GPS_packetCount = 0;
|
||||||
uint32_t GPS_svInfoReceivedCount = 0; // SV = Space Vehicle, counter increments each time SV info is received.
|
uint32_t GPS_svInfoReceivedCount = 0; // SV = Space Vehicle, counter increments each time SV info is received.
|
||||||
uint8_t GPS_update = 0; // it's a binary toggle to distinct a GPS position update
|
uint8_t GPS_update = 0; // toogle to distinct a GPS position update (directly or via MSP)
|
||||||
|
|
||||||
uint8_t GPS_numCh; // Number of channels
|
uint8_t GPS_numCh; // Number of channels
|
||||||
uint8_t GPS_svinfo_chn[GPS_SV_MAXSATS]; // Channel number
|
uint8_t GPS_svinfo_chn[GPS_SV_MAXSATS]; // Channel number
|
||||||
|
@ -492,6 +492,12 @@ void gpsUpdate(timeUs_t currentTimeUs)
|
||||||
if (gpsPort) {
|
if (gpsPort) {
|
||||||
while (serialRxBytesWaiting(gpsPort))
|
while (serialRxBytesWaiting(gpsPort))
|
||||||
gpsNewData(serialRead(gpsPort));
|
gpsNewData(serialRead(gpsPort));
|
||||||
|
} else if (GPS_update & GPS_MSP_UPDATE) { // GPS data received via MSP
|
||||||
|
gpsSetState(GPS_RECEIVING_DATA);
|
||||||
|
gpsData.lastMessage = millis();
|
||||||
|
sensorsSet(SENSOR_GPS);
|
||||||
|
onGpsNewData();
|
||||||
|
GPS_update &= ~GPS_MSP_UPDATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (gpsData.state) {
|
switch (gpsData.state) {
|
||||||
|
@ -547,10 +553,7 @@ static void gpsNewData(uint16_t c)
|
||||||
gpsData.lastMessage = millis();
|
gpsData.lastMessage = millis();
|
||||||
sensorsSet(SENSOR_GPS);
|
sensorsSet(SENSOR_GPS);
|
||||||
|
|
||||||
if (GPS_update == 1)
|
GPS_update ^= GPS_DIRECT_TICK;
|
||||||
GPS_update = 0;
|
|
||||||
else
|
|
||||||
GPS_update = 1;
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
debug[3] = GPS_update;
|
debug[3] = GPS_update;
|
||||||
|
|
|
@ -137,10 +137,15 @@ typedef enum {
|
||||||
} navigationMode_e;
|
} navigationMode_e;
|
||||||
extern navigationMode_e nav_mode; // Navigation mode
|
extern navigationMode_e nav_mode; // Navigation mode
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
GPS_DIRECT_TICK = 1 << 0,
|
||||||
|
GPS_MSP_UPDATE = 1 << 1
|
||||||
|
} gpsUpdateToggle_e;
|
||||||
|
|
||||||
extern gpsData_t gpsData;
|
extern gpsData_t gpsData;
|
||||||
extern gpsSolutionData_t gpsSol;
|
extern gpsSolutionData_t gpsSol;
|
||||||
|
|
||||||
extern uint8_t GPS_update; // it's a binary toogle to distinct a GPS position update
|
extern uint8_t GPS_update; // toogle to distinct a GPS position update (directly or via MSP)
|
||||||
extern uint32_t GPS_packetCount;
|
extern uint32_t GPS_packetCount;
|
||||||
extern uint32_t GPS_svInfoReceivedCount;
|
extern uint32_t GPS_svInfoReceivedCount;
|
||||||
extern uint8_t GPS_numCh; // Number of channels
|
extern uint8_t GPS_numCh; // Number of channels
|
||||||
|
|
Loading…
Reference in New Issue