1
0
Fork 0
mirror of https://github.com/iNavFlight/inav.git synced 2025-07-25 17:25:18 +03:00

allow HITL to run with HW baro failure

This commit is contained in:
Roman Lut 2023-04-26 16:55:46 +02:00
parent f31f6fc483
commit 32c4dcd436
3 changed files with 28 additions and 10 deletions

View file

@ -3478,7 +3478,9 @@ bool mspFCProcessInOutCommand(uint16_t cmdMSP, sbuf_t *dst, sbuf_t *src, mspResu
DISABLE_ARMING_FLAG(SIMULATOR_MODE_HITL);
#ifdef USE_BARO
if ( requestedSensors[SENSOR_INDEX_BARO] != BARO_NONE ) {
baroStartCalibration();
}
#endif
#ifdef USE_MAG
DISABLE_STATE(COMPASS_CALIBRATED);
@ -3489,10 +3491,15 @@ bool mspFCProcessInOutCommand(uint16_t cmdMSP, sbuf_t *dst, sbuf_t *src, mspResu
disarm(DISARM_SWITCH); // Disarm to prevent motor output!!!
}
} else if (!areSensorsCalibrating()) {
} else {
if (!ARMING_FLAG(SIMULATOR_MODE_HITL)) { // Just once
#ifdef USE_BARO
baroStartCalibration();
if ( requestedSensors[SENSOR_INDEX_BARO] != BARO_NONE ) {
sensorsSet(SENSOR_BARO);
setTaskEnabled(TASK_BARO, true);
DISABLE_ARMING_FLAG(ARMING_DISABLED_HARDWARE_FAILURE);
baroStartCalibration();
}
#endif
#ifdef USE_MAG

View file

@ -254,6 +254,12 @@ uint32_t baroUpdate(void)
{
static barometerState_e state = BAROMETER_NEEDS_SAMPLES;
#ifdef USE_SIMULATOR
if (ARMING_FLAG(SIMULATOR_MODE_HITL)) {
return 0;
}
#endif
switch (state) {
default:
case BAROMETER_NEEDS_SAMPLES:
@ -269,19 +275,13 @@ uint32_t baroUpdate(void)
case BAROMETER_NEEDS_CALCULATION:
if (baro.dev.get_up) {
baro.dev.get_up(&baro.dev);
baro.dev.get_up(&baro.dev);
}
if (baro.dev.start_ut) {
baro.dev.start_ut(&baro.dev);
}
#ifdef USE_SIMULATOR
if (!ARMING_FLAG(SIMULATOR_MODE_HITL)) {
//output: baro.baroPressure, baro.baroTemperature
baro.dev.calculate(&baro.dev, &baro.baroPressure, &baro.baroTemperature);
}
#else
//output: baro.baroPressure, baro.baroTemperature
baro.dev.calculate(&baro.dev, &baro.baroPressure, &baro.baroTemperature);
#endif
state = BAROMETER_NEEDS_SAMPLES;
return baro.dev.ut_delay;
break;

View file

@ -94,6 +94,17 @@ hardwareSensorStatus_e getHwCompassStatus(void)
hardwareSensorStatus_e getHwBarometerStatus(void)
{
#if defined(USE_BARO)
#ifdef USE_SIMULATOR
if (ARMING_FLAG(SIMULATOR_MODE_HITL) || ARMING_FLAG(SIMULATOR_MODE_SITL)) {
if (requestedSensors[SENSOR_INDEX_BARO] == BARO_NONE) {
return HW_SENSOR_NONE;
} else if (baroIsHealthy()) {
return HW_SENSOR_OK;
} else {
return HW_SENSOR_UNHEALTHY;
}
}
#endif
if (detectedSensors[SENSOR_INDEX_BARO] != BARO_NONE) {
if (baroIsHealthy()) {
return HW_SENSOR_OK;