diff --git a/src/main/io/osd.c b/src/main/io/osd.c index 2615600123..f35bb18dd1 100755 --- a/src/main/io/osd.c +++ b/src/main/io/osd.c @@ -493,7 +493,11 @@ static void osdDrawSingleElement(uint8_t item) { const char vtxBandLetter = vtx58BandLetter[vtxSettingsConfig()->band]; const char *vtxChannelName = vtx58ChannelNames[vtxSettingsConfig()->channel]; - tfp_sprintf(buff, "%c:%s:%d", vtxBandLetter, vtxChannelName, vtxSettingsConfig()->power); + uint8_t vtxPower = vtxSettingsConfig()->power; + if (vtxSettingsConfig()->lowPowerDisarm) { + vtxCommonGetPowerIndex(&vtxPower); + } + tfp_sprintf(buff, "%c:%s:%d", vtxBandLetter, vtxChannelName, vtxPower); break; } #endif diff --git a/src/main/io/vtx.c b/src/main/io/vtx.c index a50779875b..a0fab8881d 100644 --- a/src/main/io/vtx.c +++ b/src/main/io/vtx.c @@ -16,6 +16,7 @@ */ #include +#include #include "platform.h" @@ -50,6 +51,7 @@ PG_RESET_TEMPLATE(vtxSettingsConfig_t, vtxSettingsConfig, typedef enum { VTX_PARAM_BANDCHAN = 0, VTX_PARAM_POWER, + VTX_PARAM_CONFIRM, VTX_PARAM_COUNT } vtxScheduleParams_e; @@ -61,6 +63,8 @@ void vtxInit(void) uint8_t index = 0; vtxParamSchedule[index++] = VTX_PARAM_BANDCHAN; vtxParamSchedule[index++] = VTX_PARAM_POWER; + vtxParamSchedule[index++] = VTX_PARAM_CONFIRM; + vtxParamScheduleCount = index; // sync frequency in parameter group when band/channel are specified @@ -102,10 +106,12 @@ static bool vtxProcessFrequency(void) { static bool vtxProcessPower(void) { uint8_t vtxPower; - uint8_t newPower = vtxSettingsConfig()->power; + uint8_t newPower; if (vtxCommonGetPowerIndex(&vtxPower)) { if (!ARMING_FLAG(ARMED) && vtxSettingsConfig()->lowPowerDisarm) { - newPower = VTX_SETTINGS_MIN_POWER; + newPower = VTX_SETTINGS_DEFAULT_POWER; + } else { + newPower = vtxSettingsConfig()->power; } if (vtxPower != newPower) { vtxCommonSetPowerByIndex(newPower); @@ -115,6 +121,29 @@ static bool vtxProcessPower(void) { return false; } +static bool vtxProcessStateUpdate(void) { + const vtxSettingsConfig_t vtxSettingsState = { + .band = vtxSettingsConfig()->band, + .channel = vtxSettingsConfig()->channel, + .power = vtxSettingsConfig()->power, + .freq = vtxSettingsConfig()->freq, + .lowPowerDisarm = vtxSettingsConfig()->lowPowerDisarm, + }; + vtxSettingsConfig_t vtxState = vtxSettingsState; + + if (vtxSettingsState.band) { + vtxCommonGetBandAndChannel(&vtxState.band, &vtxState.channel); +#if defined(VTX_SETTINGS_FREQCMD) + } else { + vtxCommonGetFrequency(&vtxState.freq); +#endif + } + + vtxCommonGetPowerIndex(&vtxState.power); + + return (bool) memcmp(&vtxSettingsState, &vtxState, sizeof(vtxSettingsConfig_t)); +} + void vtxProcessSchedule(timeUs_t currentTimeUs) { static timeUs_t lastCycleTimeUs; @@ -138,6 +167,9 @@ void vtxProcessSchedule(timeUs_t currentTimeUs) case VTX_PARAM_POWER: vtxUpdatePending = vtxProcessPower(); break; + case VTX_PARAM_CONFIRM: + vtxUpdatePending = vtxProcessStateUpdate(); + break; default: break; }