Fixed vtx_low_power_disarm

This commit is contained in:
Curtis Bangert 2017-11-11 21:07:41 -05:00
parent 1c5c7476c1
commit f35ec19b15
2 changed files with 39 additions and 3 deletions

View File

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

View File

@ -16,6 +16,7 @@
*/
#include <stdint.h>
#include <string.h>
#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;
}