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

Merge pull request #7844 from iNavFlight/dzikuvx-rework-7804

Add macros to active box and reset boxes count
This commit is contained in:
Paweł Spychalski 2022-02-26 18:15:21 +01:00 committed by GitHub
commit bd9bb98415
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -102,6 +102,9 @@ static uint8_t activeBoxIds[CHECKBOX_ITEM_COUNT];
// this is the number of filled indexes in above array // this is the number of filled indexes in above array
uint8_t activeBoxIdCount = 0; uint8_t activeBoxIdCount = 0;
#define RESET_BOX_ID_COUNT activeBoxIdCount = 0
#define ADD_ACTIVE_BOX(box) activeBoxIds[activeBoxIdCount++] = box
const box_t *findBoxByActiveBoxId(uint8_t activeBoxId) const box_t *findBoxByActiveBoxId(uint8_t activeBoxId)
{ {
for (uint8_t boxIndex = 0; boxIndex < sizeof(boxes) / sizeof(box_t); boxIndex++) { for (uint8_t boxIndex = 0; boxIndex < sizeof(boxes) / sizeof(box_t); boxIndex++) {
@ -169,34 +172,34 @@ void initActiveBoxIds(void)
// calculate used boxes based on features and fill availableBoxes[] array // calculate used boxes based on features and fill availableBoxes[] array
memset(activeBoxIds, 0xFF, sizeof(activeBoxIds)); memset(activeBoxIds, 0xFF, sizeof(activeBoxIds));
activeBoxIdCount = 0; RESET_BOX_ID_COUNT;
activeBoxIds[activeBoxIdCount++] = BOXARM; ADD_ACTIVE_BOX(BOXARM);
activeBoxIds[activeBoxIdCount++] = BOXPREARM; ADD_ACTIVE_BOX(BOXPREARM);
if (sensors(SENSOR_ACC) && STATE(ALTITUDE_CONTROL)) { if (sensors(SENSOR_ACC) && STATE(ALTITUDE_CONTROL)) {
activeBoxIds[activeBoxIdCount++] = BOXANGLE; ADD_ACTIVE_BOX(BOXANGLE);
activeBoxIds[activeBoxIdCount++] = BOXHORIZON; ADD_ACTIVE_BOX(BOXHORIZON);
activeBoxIds[activeBoxIdCount++] = BOXTURNASSIST; ADD_ACTIVE_BOX(BOXTURNASSIST);
} }
if (!feature(FEATURE_AIRMODE) && STATE(ALTITUDE_CONTROL)) { if (!feature(FEATURE_AIRMODE) && STATE(ALTITUDE_CONTROL)) {
activeBoxIds[activeBoxIdCount++] = BOXAIRMODE; ADD_ACTIVE_BOX(BOXAIRMODE);
} }
activeBoxIds[activeBoxIdCount++] = BOXHEADINGHOLD; ADD_ACTIVE_BOX(BOXHEADINGHOLD);
//Camstab mode is enabled always //Camstab mode is enabled always
activeBoxIds[activeBoxIdCount++] = BOXCAMSTAB; ADD_ACTIVE_BOX(BOXCAMSTAB);
if (STATE(MULTIROTOR)) { if (STATE(MULTIROTOR)) {
if ((sensors(SENSOR_ACC) || sensors(SENSOR_MAG))) { if ((sensors(SENSOR_ACC) || sensors(SENSOR_MAG))) {
activeBoxIds[activeBoxIdCount++] = BOXHEADFREE; ADD_ACTIVE_BOX(BOXHEADFREE);
activeBoxIds[activeBoxIdCount++] = BOXHEADADJ; ADD_ACTIVE_BOX(BOXHEADADJ);
} }
if (sensors(SENSOR_BARO) && sensors(SENSOR_RANGEFINDER) && sensors(SENSOR_OPFLOW)) { if (sensors(SENSOR_BARO) && sensors(SENSOR_RANGEFINDER) && sensors(SENSOR_OPFLOW)) {
activeBoxIds[activeBoxIdCount++] = BOXSURFACE; ADD_ACTIVE_BOX(BOXSURFACE);
} }
activeBoxIds[activeBoxIdCount++] = BOXFPVANGLEMIX; ADD_ACTIVE_BOX(BOXFPVANGLEMIX);
} }
bool navReadyAltControl = sensors(SENSOR_BARO); bool navReadyAltControl = sensors(SENSOR_BARO);
@ -210,56 +213,56 @@ void initActiveBoxIds(void)
} }
if (STATE(ALTITUDE_CONTROL) && navReadyAltControl && (navReadyPosControl || navFlowDeadReckoning)) { if (STATE(ALTITUDE_CONTROL) && navReadyAltControl && (navReadyPosControl || navFlowDeadReckoning)) {
activeBoxIds[activeBoxIdCount++] = BOXNAVPOSHOLD; ADD_ACTIVE_BOX(BOXNAVPOSHOLD);
if (STATE(AIRPLANE)) { if (STATE(AIRPLANE)) {
activeBoxIds[activeBoxIdCount++] = BOXLOITERDIRCHN; ADD_ACTIVE_BOX(BOXLOITERDIRCHN);
} }
} }
if (navReadyPosControl) { if (navReadyPosControl) {
if (!STATE(ALTITUDE_CONTROL) || (STATE(ALTITUDE_CONTROL) && navReadyAltControl)) { if (!STATE(ALTITUDE_CONTROL) || (STATE(ALTITUDE_CONTROL) && navReadyAltControl)) {
activeBoxIds[activeBoxIdCount++] = BOXNAVRTH; ADD_ACTIVE_BOX(BOXNAVRTH);
activeBoxIds[activeBoxIdCount++] = BOXNAVWP; ADD_ACTIVE_BOX(BOXNAVWP);
activeBoxIds[activeBoxIdCount++] = BOXHOMERESET; ADD_ACTIVE_BOX(BOXHOMERESET);
activeBoxIds[activeBoxIdCount++] = BOXGCSNAV; ADD_ACTIVE_BOX(BOXGCSNAV);
activeBoxIds[activeBoxIdCount++] = BOXPLANWPMISSION; ADD_ACTIVE_BOX(BOXPLANWPMISSION);
} }
if (STATE(AIRPLANE)) { if (STATE(AIRPLANE)) {
activeBoxIds[activeBoxIdCount++] = BOXNAVCRUISE; ADD_ACTIVE_BOX(BOXNAVCRUISE);
activeBoxIds[activeBoxIdCount++] = BOXNAVCOURSEHOLD; ADD_ACTIVE_BOX(BOXNAVCOURSEHOLD);
activeBoxIds[activeBoxIdCount++] = BOXSOARING; ADD_ACTIVE_BOX(BOXSOARING);
} }
} }
#ifdef USE_MR_BRAKING_MODE #ifdef USE_MR_BRAKING_MODE
if (mixerConfig()->platformType == PLATFORM_MULTIROTOR) { if (mixerConfig()->platformType == PLATFORM_MULTIROTOR) {
activeBoxIds[activeBoxIdCount++] = BOXBRAKING; ADD_ACTIVE_BOX(BOXBRAKING);
} }
#endif #endif
#endif // GPS #endif // GPS
if (STATE(ALTITUDE_CONTROL) && navReadyAltControl) { if (STATE(ALTITUDE_CONTROL) && navReadyAltControl) {
activeBoxIds[activeBoxIdCount++] = BOXNAVALTHOLD; ADD_ACTIVE_BOX(BOXNAVALTHOLD);
} }
if (STATE(AIRPLANE) || STATE(ROVER) || STATE(BOAT)) { if (STATE(AIRPLANE) || STATE(ROVER) || STATE(BOAT)) {
activeBoxIds[activeBoxIdCount++] = BOXMANUAL; ADD_ACTIVE_BOX(BOXMANUAL);
} }
if (STATE(AIRPLANE)) { if (STATE(AIRPLANE)) {
if (!feature(FEATURE_FW_LAUNCH)) { if (!feature(FEATURE_FW_LAUNCH)) {
activeBoxIds[activeBoxIdCount++] = BOXNAVLAUNCH; ADD_ACTIVE_BOX(BOXNAVLAUNCH);
} }
if (!feature(FEATURE_FW_AUTOTRIM)) { if (!feature(FEATURE_FW_AUTOTRIM)) {
activeBoxIds[activeBoxIdCount++] = BOXAUTOTRIM; ADD_ACTIVE_BOX(BOXAUTOTRIM);
} }
#if defined(USE_AUTOTUNE_FIXED_WING) #if defined(USE_AUTOTUNE_FIXED_WING)
activeBoxIds[activeBoxIdCount++] = BOXAUTOTUNE; ADD_ACTIVE_BOX(BOXAUTOTUNE);
#endif #endif
if (sensors(SENSOR_BARO)) { if (sensors(SENSOR_BARO)) {
activeBoxIds[activeBoxIdCount++] = BOXAUTOLEVEL; ADD_ACTIVE_BOX(BOXAUTOLEVEL);
} }
} }
@ -268,68 +271,70 @@ void initActiveBoxIds(void)
* flying wing can cause bad thing * flying wing can cause bad thing
*/ */
if (STATE(FLAPERON_AVAILABLE)) { if (STATE(FLAPERON_AVAILABLE)) {
activeBoxIds[activeBoxIdCount++] = BOXFLAPERON; ADD_ACTIVE_BOX(BOXFLAPERON);
} }
activeBoxIds[activeBoxIdCount++] = BOXBEEPERON; ADD_ACTIVE_BOX(BOXBEEPERON);
#ifdef USE_LIGHTS #ifdef USE_LIGHTS
activeBoxIds[activeBoxIdCount++] = BOXLIGHTS; ADD_ACTIVE_BOX(BOXLIGHTS);
#endif #endif
#ifdef USE_LED_STRIP #ifdef USE_LED_STRIP
if (feature(FEATURE_LED_STRIP)) { if (feature(FEATURE_LED_STRIP)) {
activeBoxIds[activeBoxIdCount++] = BOXLEDLOW; ADD_ACTIVE_BOX(BOXLEDLOW);
} }
#endif #endif
activeBoxIds[activeBoxIdCount++] = BOXOSD; ADD_ACTIVE_BOX(BOXOSD);
#ifdef USE_TELEMETRY #ifdef USE_TELEMETRY
if (feature(FEATURE_TELEMETRY) && telemetryConfig()->telemetry_switch) if (feature(FEATURE_TELEMETRY) && telemetryConfig()->telemetry_switch) {
activeBoxIds[activeBoxIdCount++] = BOXTELEMETRY; ADD_ACTIVE_BOX(BOXTELEMETRY);
}
#endif #endif
#ifdef USE_BLACKBOX #ifdef USE_BLACKBOX
if (feature(FEATURE_BLACKBOX)){ if (feature(FEATURE_BLACKBOX)) {
activeBoxIds[activeBoxIdCount++] = BOXBLACKBOX; ADD_ACTIVE_BOX(BOXBLACKBOX);
} }
#endif #endif
activeBoxIds[activeBoxIdCount++] = BOXKILLSWITCH; ADD_ACTIVE_BOX(BOXKILLSWITCH);
activeBoxIds[activeBoxIdCount++] = BOXFAILSAFE; ADD_ACTIVE_BOX(BOXFAILSAFE);
#ifdef USE_RCDEVICE #ifdef USE_RCDEVICE
activeBoxIds[activeBoxIdCount++] = BOXCAMERA1; ADD_ACTIVE_BOX(BOXCAMERA1);
activeBoxIds[activeBoxIdCount++] = BOXCAMERA2; ADD_ACTIVE_BOX(BOXCAMERA2);
activeBoxIds[activeBoxIdCount++] = BOXCAMERA3; ADD_ACTIVE_BOX(BOXCAMERA3);
#endif #endif
#ifdef USE_PINIOBOX #ifdef USE_PINIOBOX
// USER modes are only used for PINIO at the moment // USER modes are only used for PINIO at the moment
activeBoxIds[activeBoxIdCount++] = BOXUSER1; ADD_ACTIVE_BOX(BOXUSER1);
activeBoxIds[activeBoxIdCount++] = BOXUSER2; ADD_ACTIVE_BOX(BOXUSER2);
#endif #endif
#if defined(USE_OSD) && defined(OSD_LAYOUT_COUNT) #if defined(USE_OSD) && defined(OSD_LAYOUT_COUNT)
#if OSD_LAYOUT_COUNT > 0 #if OSD_LAYOUT_COUNT > 0
activeBoxIds[activeBoxIdCount++] = BOXOSDALT1; ADD_ACTIVE_BOX(BOXOSDALT1);
#if OSD_LAYOUT_COUNT > 1 #if OSD_LAYOUT_COUNT > 1
activeBoxIds[activeBoxIdCount++] = BOXOSDALT2; ADD_ACTIVE_BOX(BOXOSDALT2);
#if OSD_LAYOUT_COUNT > 2 #if OSD_LAYOUT_COUNT > 2
activeBoxIds[activeBoxIdCount++] = BOXOSDALT3; ADD_ACTIVE_BOX(BOXOSDALT3);
#endif #endif
#endif #endif
#endif #endif
#endif #endif
#if defined(USE_RX_MSP) && defined(USE_MSP_RC_OVERRIDE) #if defined(USE_RX_MSP) && defined(USE_MSP_RC_OVERRIDE)
activeBoxIds[activeBoxIdCount++] = BOXMSPRCOVERRIDE; ADD_ACTIVE_BOX(BOXMSPRCOVERRIDE);
#endif #endif
#ifdef USE_DSHOT #ifdef USE_DSHOT
if(STATE(MULTIROTOR) && isMotorProtocolDshot()) if(STATE(MULTIROTOR) && isMotorProtocolDshot()) {
activeBoxIds[activeBoxIdCount++] = BOXTURTLE; ADD_ACTIVE_BOX(BOXTURTLE);
}
#endif #endif
} }
@ -407,14 +412,14 @@ uint16_t packSensorStatus(void)
{ {
// Sensor bits // Sensor bits
uint16_t sensorStatus = uint16_t sensorStatus =
IS_ENABLED(sensors(SENSOR_ACC)) << 0 | IS_ENABLED(sensors(SENSOR_ACC)) << 0 |
IS_ENABLED(sensors(SENSOR_BARO)) << 1 | IS_ENABLED(sensors(SENSOR_BARO)) << 1 |
IS_ENABLED(sensors(SENSOR_MAG)) << 2 | IS_ENABLED(sensors(SENSOR_MAG)) << 2 |
IS_ENABLED(sensors(SENSOR_GPS)) << 3 | IS_ENABLED(sensors(SENSOR_GPS)) << 3 |
IS_ENABLED(sensors(SENSOR_RANGEFINDER)) << 4 | IS_ENABLED(sensors(SENSOR_RANGEFINDER)) << 4 |
IS_ENABLED(sensors(SENSOR_OPFLOW)) << 5 | IS_ENABLED(sensors(SENSOR_OPFLOW)) << 5 |
IS_ENABLED(sensors(SENSOR_PITOT)) << 6 | IS_ENABLED(sensors(SENSOR_PITOT)) << 6 |
IS_ENABLED(sensors(SENSOR_TEMP)) << 7; IS_ENABLED(sensors(SENSOR_TEMP)) << 7;
// Hardware failure indication bit // Hardware failure indication bit
if (!isHardwareHealthy()) { if (!isHardwareHealthy()) {