diff --git a/src/main/cli/settings.c b/src/main/cli/settings.c index ab55351b8..d7de29c12 100644 --- a/src/main/cli/settings.c +++ b/src/main/cli/settings.c @@ -487,6 +487,11 @@ static const char * const lookupTableOsdDisplayPortDevice[] = { "NONE", "AUTO", "MAX7456", "MSP", }; +#ifdef USE_OSD +static const char * const lookupTableOsdLogoOnArming[] = { + "OFF", "ON", "FIRST_ARMING", +}; +#endif #define LOOKUP_TABLE_ENTRY(name) { name, ARRAYLEN(name) } @@ -606,6 +611,10 @@ const lookupTableEntry_t lookupTables[] = { LOOKUP_TABLE_ENTRY(lookupTableInterpolatedSetpoint), LOOKUP_TABLE_ENTRY(lookupTableDshotBitbangedTimer), LOOKUP_TABLE_ENTRY(lookupTableOsdDisplayPortDevice), + +#ifdef USE_OSD + LOOKUP_TABLE_ENTRY(lookupTableOsdLogoOnArming), +#endif }; #undef LOOKUP_TABLE_ENTRY @@ -1242,6 +1251,7 @@ const clivalue_t valueTable[] = { { "osd_ah_max_pit", VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned = { 0, 90 }, PG_OSD_CONFIG, offsetof(osdConfig_t, ahMaxPitch) }, { "osd_ah_max_rol", VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned = { 0, 90 }, PG_OSD_CONFIG, offsetof(osdConfig_t, ahMaxRoll) }, { "osd_ah_invert", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_OSD_CONFIG, offsetof(osdConfig_t, ahInvert) }, + { "osd_logo_on_arming", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OSD_LOGO_ON_ARMING }, PG_OSD_CONFIG, offsetof(osdConfig_t, logo_on_arming) }, { "osd_tim1", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, INT16_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, timers[OSD_TIMER_1]) }, { "osd_tim2", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, INT16_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, timers[OSD_TIMER_2]) }, diff --git a/src/main/cli/settings.h b/src/main/cli/settings.h index 562828ec0..6e3ac466b 100644 --- a/src/main/cli/settings.h +++ b/src/main/cli/settings.h @@ -139,6 +139,9 @@ typedef enum { TABLE_INTERPOLATED_SP, TABLE_DSHOT_BITBANGED_TIMER, TABLE_OSD_DISPLAYPORT_DEVICE, +#ifdef USE_OSD + TABLE_OSD_LOGO_ON_ARMING, +#endif LOOKUP_TABLE_COUNT } lookupTableIndex_e; diff --git a/src/main/osd/osd.c b/src/main/osd/osd.c index b43573dd9..c3946faaf 100644 --- a/src/main/osd/osd.c +++ b/src/main/osd/osd.c @@ -91,6 +91,12 @@ #include "hardware_revision.h" #endif +typedef enum { + OSD_LOGO_ARMING_OFF, + OSD_LOGO_ARMING_ON, + OSD_LOGO_ARMING_FIRST +} osd_logo_on_arming_e; + const char * const osdTimerSourceNames[] = { "ON TIME ", "TOTAL ARM", @@ -332,6 +338,7 @@ void pgResetFn_osdConfig(osdConfig_t *osdConfig) osdConfig->displayPortDevice = OSD_DISPLAYPORT_DEVICE_AUTO; osdConfig->distance_alarm = 0; + osdConfig->logo_on_arming = OSD_LOGO_ARMING_OFF; } static void osdDrawLogo(int x, int y) @@ -808,8 +815,14 @@ static void osdRefreshStats(void) static void osdShowArmed(void) { + static bool everArmed = false; + displayClearScreen(osdDisplayPort); + if ((osdConfig()->logo_on_arming == OSD_LOGO_ARMING_ON) || ((osdConfig()->logo_on_arming == OSD_LOGO_ARMING_FIRST) && !everArmed)) { + osdDrawLogo(3, 1); + } displayWrite(osdDisplayPort, 12, 7, DISPLAYPORT_ATTR_NONE, "ARMED"); + everArmed = true; } STATIC_UNIT_TESTED void osdRefresh(timeUs_t currentTimeUs) diff --git a/src/main/osd/osd.h b/src/main/osd/osd.h index 218b798be..7132fbf40 100644 --- a/src/main/osd/osd.h +++ b/src/main/osd/osd.h @@ -271,6 +271,7 @@ typedef struct osdConfig_s { int8_t rcChannels[OSD_RCCHANNELS_COUNT]; // RC channel values to display, -1 if none uint8_t displayPortDevice; // osdDisplayPortDevice_e uint16_t distance_alarm; + uint8_t logo_on_arming; // show the logo on arming } osdConfig_t; PG_DECLARE(osdConfig_t, osdConfig);