From d004cf5fb718e1830b0ee1e48d2786a96c3529a6 Mon Sep 17 00:00:00 2001 From: codecae Date: Mon, 5 Mar 2018 14:27:50 -0500 Subject: [PATCH] Improved VTX update scheduling to reduce update delays (#5340) --- src/main/io/vtx.c | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/src/main/io/vtx.c b/src/main/io/vtx.c index de2be71d17..465cc9cd63 100644 --- a/src/main/io/vtx.c +++ b/src/main/io/vtx.c @@ -218,30 +218,34 @@ void vtxUpdate(timeUs_t currentTimeUs) // Check input sources for config updates vtxControlInputPoll(); + const uint8_t startingSchedule = currentSchedule; bool vtxUpdatePending = false; - switch (currentSchedule) { - case VTX_PARAM_POWER: - vtxUpdatePending = vtxProcessPower(vtxDevice); - break; - case VTX_PARAM_BANDCHAN: - if (vtxGetSettings().band) { - vtxUpdatePending = vtxProcessBandAndChannel(vtxDevice); + do { + switch (currentSchedule) { + case VTX_PARAM_POWER: + vtxUpdatePending = vtxProcessPower(vtxDevice); + break; + case VTX_PARAM_BANDCHAN: + if (vtxGetSettings().band) { + vtxUpdatePending = vtxProcessBandAndChannel(vtxDevice); #if defined(VTX_SETTINGS_FREQCMD) - } else { - vtxUpdatePending = vtxProcessFrequency(vtxDevice); + } else { + vtxUpdatePending = vtxProcessFrequency(vtxDevice); #endif + } + break; + case VTX_PARAM_PITMODE: + vtxUpdatePending = vtxProcessPitMode(vtxDevice); + break; + case VTX_PARAM_CONFIRM: + vtxUpdatePending = vtxProcessStateUpdate(vtxDevice); + break; + default: + break; } - break; - case VTX_PARAM_PITMODE: - vtxUpdatePending = vtxProcessPitMode(vtxDevice); - break; - case VTX_PARAM_CONFIRM: - vtxUpdatePending = vtxProcessStateUpdate(vtxDevice); - break; - default: - break; - } - currentSchedule = (currentSchedule + 1) % VTX_PARAM_COUNT; + currentSchedule = (currentSchedule + 1) % VTX_PARAM_COUNT; + } while (!vtxUpdatePending && currentSchedule != startingSchedule); + if (!ARMING_FLAG(ARMED) || vtxUpdatePending) { vtxCommonProcess(vtxDevice, currentTimeUs); }