Add option to display the OSD logo on arming

Adds `osd_logo_on_arming` setting with values `OFF, ON, FIRST_ARMING` (defaults to `OFF`). Optionally displays the OSD splash logo durin the "ARMING" message.
This commit is contained in:
Bruce Luckcuck 2019-11-28 13:38:33 -05:00
parent cf86671997
commit 05c8538752
4 changed files with 27 additions and 0 deletions

View File

@ -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]) },

View File

@ -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;

View File

@ -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)

View File

@ -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);