From d3c824d6b7b25cd721684c02485774e59a2b1b20 Mon Sep 17 00:00:00 2001 From: Jon Mahoney Date: Sun, 4 Sep 2022 22:46:05 -0400 Subject: [PATCH] Ready Mode By giving a mode that signals the pilot is ready other than armed props at a race event it will be easier to determine when all pilots are ready to race. --- src/main/cli/settings.c | 2 +- src/main/fc/rc_modes.h | 1 + src/main/msp/msp_box.c | 2 ++ src/main/osd/osd.h | 1 + src/main/osd/osd_elements.c | 9 +++++++++ 5 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/cli/settings.c b/src/main/cli/settings.c index 13057de4c6..faa6e0e020 100644 --- a/src/main/cli/settings.c +++ b/src/main/cli/settings.c @@ -1387,6 +1387,7 @@ const clivalue_t valueTable[] = { { "osd_disarmed_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_DISARMED]) }, { "osd_nheading_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_NUMERICAL_HEADING]) }, { "osd_up_down_reference_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_UP_DOWN_REFERENCE]) }, + { "osd_ready_mode_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_READY_MODE]) }, #ifdef USE_VARIO { "osd_nvario_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_NUMERICAL_VARIO]) }, #endif @@ -1425,7 +1426,6 @@ const clivalue_t valueTable[] = { { "osd_total_flights_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_TOTAL_FLIGHTS]) }, { "osd_aux_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_AUX_VALUE]) }, - // OSD stats enabled flags are stored as bitmapped values inside a 32bit parameter { "osd_stat_bitmask", VAR_UINT32 | MASTER_VALUE, .config.u32Max = UINT32_MAX, PG_OSD_CONFIG, offsetof(osdConfig_t, enabled_stats)}, diff --git a/src/main/fc/rc_modes.h b/src/main/fc/rc_modes.h index 664df337cb..705683f637 100644 --- a/src/main/fc/rc_modes.h +++ b/src/main/fc/rc_modes.h @@ -77,6 +77,7 @@ typedef enum { BOXMSPOVERRIDE, BOXSTICKCOMMANDDISABLE, BOXBEEPERMUTE, + BOXREADY, CHECKBOX_ITEM_COUNT } boxId_e; diff --git a/src/main/msp/msp_box.c b/src/main/msp/msp_box.c index 6524f0fc75..d1942a970b 100644 --- a/src/main/msp/msp_box.c +++ b/src/main/msp/msp_box.c @@ -100,6 +100,7 @@ static const box_t boxes[CHECKBOX_ITEM_COUNT] = { { .boxId = BOXMSPOVERRIDE, .boxName = "MSP OVERRIDE", .permanentId = 50}, { .boxId = BOXSTICKCOMMANDDISABLE, .boxName = "STICK COMMANDS DISABLE", .permanentId = 51}, { .boxId = BOXBEEPERMUTE, .boxName = "BEEPER MUTE", .permanentId = 52}, + { .boxId = BOXREADY, .boxName = "READY", .permanentId = 53} }; // mask of enabled IDs, calculated on startup based on enabled features. boxId_e is used as bit index @@ -335,6 +336,7 @@ void initActiveBoxIds(void) #endif BME(BOXSTICKCOMMANDDISABLE); + BME(BOXREADY); #undef BME // check that all enabled IDs are in boxes array (check may be skipped when using findBoxById() functions) diff --git a/src/main/osd/osd.h b/src/main/osd/osd.h index 6e1415241d..1eec65543a 100644 --- a/src/main/osd/osd.h +++ b/src/main/osd/osd.h @@ -163,6 +163,7 @@ typedef enum { OSD_TX_UPLINK_POWER, OSD_WATT_HOURS_DRAWN, OSD_AUX_VALUE, + OSD_READY_MODE, OSD_ITEM_COUNT // MUST BE LAST } osd_items_e; diff --git a/src/main/osd/osd_elements.c b/src/main/osd/osd_elements.c index 8b4160bed6..7b81747ab0 100644 --- a/src/main/osd/osd_elements.c +++ b/src/main/osd/osd_elements.c @@ -992,6 +992,13 @@ static void osdElementFlymode(osdElementParms_t *element) } } +static void osdElementReadyMode(osdElementParms_t *element) +{ + if (IS_RC_MODE_ACTIVE(BOXREADY) && !ARMING_FLAG(ARMED)) { + strcpy(element->buff, "READY"); + } +} + #ifdef USE_ACC static void osdElementGForce(osdElementParms_t *element) { @@ -1559,6 +1566,7 @@ static const uint8_t osdElementDisplayOrder[] = { OSD_MAIN_BATT_USAGE, OSD_DISARMED, OSD_NUMERICAL_HEADING, + OSD_READY_MODE, #ifdef USE_VARIO OSD_NUMERICAL_VARIO, #endif @@ -1644,6 +1652,7 @@ const osdElementDrawFn osdElementDrawFunction[OSD_ITEM_COUNT] = { [OSD_PIDRATE_PROFILE] = osdElementPidRateProfile, [OSD_WARNINGS] = osdElementWarnings, [OSD_AVG_CELL_VOLTAGE] = osdElementAverageCellVoltage, + [OSD_READY_MODE] = osdElementReadyMode, #ifdef USE_GPS [OSD_GPS_LON] = osdElementGpsCoordinate, [OSD_GPS_LAT] = osdElementGpsCoordinate,