Skip to content

Commit 47cb62a

Browse files
authored
Merge pull request #7694 from breadoven/abo_fix_modes_craft_type
Mode availability improvements
2 parents b1d1531 + 44e5172 commit 47cb62a

File tree

1 file changed

+31
-28
lines changed

1 file changed

+31
-28
lines changed

src/main/fc/fc_msp_box.c

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -185,48 +185,49 @@ void initActiveBoxIds(void)
185185

186186
activeBoxIds[activeBoxIdCount++] = BOXHEADINGHOLD;
187187

188-
if ((sensors(SENSOR_ACC) || sensors(SENSOR_MAG)) && STATE(MULTIROTOR)) {
189-
activeBoxIds[activeBoxIdCount++] = BOXHEADFREE;
190-
activeBoxIds[activeBoxIdCount++] = BOXHEADADJ;
191-
}
192-
193-
if (STATE(ALTITUDE_CONTROL) && STATE(MULTIROTOR)) {
194-
activeBoxIds[activeBoxIdCount++] = BOXFPVANGLEMIX;
195-
}
196-
197188
//Camstab mode is enabled always
198189
activeBoxIds[activeBoxIdCount++] = BOXCAMSTAB;
199190

200-
#ifdef USE_GPS
201-
if (STATE(ALTITUDE_CONTROL) && (sensors(SENSOR_BARO) || (feature(FEATURE_GPS) && (STATE(AIRPLANE) || positionEstimationConfig()->use_gps_no_baro)))) {
202-
activeBoxIds[activeBoxIdCount++] = BOXNAVALTHOLD;
203-
if (STATE(MULTIROTOR)) {
191+
if (STATE(MULTIROTOR)) {
192+
if ((sensors(SENSOR_ACC) || sensors(SENSOR_MAG))) {
193+
activeBoxIds[activeBoxIdCount++] = BOXHEADFREE;
194+
activeBoxIds[activeBoxIdCount++] = BOXHEADADJ;
195+
}
196+
if (sensors(SENSOR_BARO) && sensors(SENSOR_RANGEFINDER) && sensors(SENSOR_OPFLOW)) {
204197
activeBoxIds[activeBoxIdCount++] = BOXSURFACE;
205198
}
199+
activeBoxIds[activeBoxIdCount++] = BOXFPVANGLEMIX;
206200
}
207201

208-
const bool navReadyMultirotor = STATE(MULTIROTOR) && (getHwCompassStatus() != HW_SENSOR_NONE) && sensors(SENSOR_ACC) && feature(FEATURE_GPS);
209-
const bool navReadyOther = !STATE(MULTIROTOR) && sensors(SENSOR_ACC) && feature(FEATURE_GPS);
202+
bool navReadyAltControl = sensors(SENSOR_BARO);
203+
#ifdef USE_GPS
204+
navReadyAltControl = navReadyAltControl || (feature(FEATURE_GPS) && (STATE(AIRPLANE) || positionEstimationConfig()->use_gps_no_baro));
205+
210206
const bool navFlowDeadReckoning = sensors(SENSOR_OPFLOW) && sensors(SENSOR_ACC) && positionEstimationConfig()->allow_dead_reckoning;
211-
if (navFlowDeadReckoning || navReadyMultirotor || navReadyOther) {
212-
if (!STATE(ROVER) && !STATE(BOAT)) {
213-
activeBoxIds[activeBoxIdCount++] = BOXNAVPOSHOLD;
214-
}
207+
bool navReadyPosControl = sensors(SENSOR_ACC) && feature(FEATURE_GPS);
208+
if (STATE(MULTIROTOR)) {
209+
navReadyPosControl = navReadyPosControl && getHwCompassStatus() != HW_SENSOR_NONE;
210+
}
211+
212+
if (STATE(ALTITUDE_CONTROL) && navReadyAltControl && (navReadyPosControl || navFlowDeadReckoning)) {
213+
activeBoxIds[activeBoxIdCount++] = BOXNAVPOSHOLD;
215214
if (STATE(AIRPLANE)) {
216215
activeBoxIds[activeBoxIdCount++] = BOXLOITERDIRCHN;
217216
}
218217
}
219218

220-
if (navReadyMultirotor || navReadyOther) {
221-
activeBoxIds[activeBoxIdCount++] = BOXNAVRTH;
222-
activeBoxIds[activeBoxIdCount++] = BOXNAVWP;
223-
activeBoxIds[activeBoxIdCount++] = BOXHOMERESET;
224-
activeBoxIds[activeBoxIdCount++] = BOXGCSNAV;
225-
activeBoxIds[activeBoxIdCount++] = BOXPLANWPMISSION;
219+
if (navReadyPosControl) {
220+
if (!STATE(ALTITUDE_CONTROL) || (STATE(ALTITUDE_CONTROL) && navReadyAltControl)) {
221+
activeBoxIds[activeBoxIdCount++] = BOXNAVRTH;
222+
activeBoxIds[activeBoxIdCount++] = BOXNAVWP;
223+
activeBoxIds[activeBoxIdCount++] = BOXHOMERESET;
224+
activeBoxIds[activeBoxIdCount++] = BOXGCSNAV;
225+
activeBoxIds[activeBoxIdCount++] = BOXPLANWPMISSION;
226+
}
226227

227228
if (STATE(AIRPLANE)) {
228-
activeBoxIds[activeBoxIdCount++] = BOXNAVCOURSEHOLD;
229229
activeBoxIds[activeBoxIdCount++] = BOXNAVCRUISE;
230+
activeBoxIds[activeBoxIdCount++] = BOXNAVCOURSEHOLD;
230231
activeBoxIds[activeBoxIdCount++] = BOXSOARING;
231232
}
232233
}
@@ -236,8 +237,10 @@ void initActiveBoxIds(void)
236237
activeBoxIds[activeBoxIdCount++] = BOXBRAKING;
237238
}
238239
#endif
239-
240-
#endif
240+
#endif // GPS
241+
if (STATE(ALTITUDE_CONTROL) && navReadyAltControl) {
242+
activeBoxIds[activeBoxIdCount++] = BOXNAVALTHOLD;
243+
}
241244

242245
if (STATE(AIRPLANE) || STATE(ROVER) || STATE(BOAT)) {
243246
activeBoxIds[activeBoxIdCount++] = BOXMANUAL;

0 commit comments

Comments
 (0)