AP_GPS: cope with UAVCAN GPS that don't provide Aux message

thanks to @VadimZ for the suggestion
This commit is contained in:
Andrew Tridgell 2019-11-28 13:41:29 +11:00
parent 0cd737856d
commit bc7f811ff0
2 changed files with 15 additions and 0 deletions

View File

@ -240,6 +240,12 @@ void AP_GPS_UAVCAN::handle_fix_msg(const FixCb &cb)
interim_state.num_sats = 0; interim_state.num_sats = 0;
} }
if (!seen_aux) {
// if we haven't seen an Aux message then populate vdop and
// hdop from pdop. Some GPS modules don't provide the Aux message
interim_state.hdop = interim_state.vdop = cb.msg->pdop * 100.0;
}
interim_state.last_gps_time_ms = AP_HAL::millis(); interim_state.last_gps_time_ms = AP_HAL::millis();
_new_data = true; _new_data = true;
@ -336,6 +342,12 @@ void AP_GPS_UAVCAN::handle_fix2_msg(const Fix2Cb &cb)
interim_state.num_sats = 0; interim_state.num_sats = 0;
} }
if (!seen_aux) {
// if we haven't seen an Aux message then populate vdop and
// hdop from pdop. Some GPS modules don't provide the Aux message
interim_state.hdop = interim_state.vdop = cb.msg->pdop * 100.0;
}
interim_state.last_gps_time_ms = AP_HAL::millis(); interim_state.last_gps_time_ms = AP_HAL::millis();
_new_data = true; _new_data = true;
@ -355,10 +367,12 @@ void AP_GPS_UAVCAN::handle_aux_msg(const AuxCb &cb)
WITH_SEMAPHORE(sem); WITH_SEMAPHORE(sem);
if (!uavcan::isNaN(cb.msg->hdop)) { if (!uavcan::isNaN(cb.msg->hdop)) {
seen_aux = true;
interim_state.hdop = cb.msg->hdop * 100.0; interim_state.hdop = cb.msg->hdop * 100.0;
} }
if (!uavcan::isNaN(cb.msg->vdop)) { if (!uavcan::isNaN(cb.msg->vdop)) {
seen_aux = true;
interim_state.vdop = cb.msg->vdop * 100.0; interim_state.vdop = cb.msg->vdop * 100.0;
} }
} }

View File

@ -65,6 +65,7 @@ private:
bool seen_message; bool seen_message;
bool seen_fix2; bool seen_fix2;
bool seen_aux;
// Module Detection Registry // Module Detection Registry
static struct DetectedModules { static struct DetectedModules {