diff --git a/js/fc.js b/js/fc.js index 5866d2865..2f940e0c9 100644 --- a/js/fc.js +++ b/js/fc.js @@ -356,6 +356,10 @@ var FC = { power: 0, pitmode: 0, low_power_disarm: 0, + band_count: 0, + channel_count: 0, + power_count: 0, + power_min: 1, }; this.ADVANCED_CONFIG = { diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js index 785147ed2..3dc51b5af 100644 --- a/js/msp/MSPHelper.js +++ b/js/msp/MSPHelper.js @@ -1146,9 +1146,30 @@ var mspHelper = (function () { FC.VTX_CONFIG.channel = data.getUint8(offset++); FC.VTX_CONFIG.power = data.getUint8(offset++); FC.VTX_CONFIG.pitmode = data.getUint8(offset++); - // Ignore wether the VTX is ready for now + // Ignore whether the VTX is ready for now offset++; FC.VTX_CONFIG.low_power_disarm = data.getUint8(offset++); + + // Check if firmware supports VTX table (INAV 9.0+) + if (offset < data.byteLength) { + const vtxtable_available = data.getUint8(offset++); + if (vtxtable_available) { + if (offset + 2 < data.byteLength) { + FC.VTX_CONFIG.band_count = data.getUint8(offset++); + FC.VTX_CONFIG.channel_count = data.getUint8(offset++); + FC.VTX_CONFIG.power_count = data.getUint8(offset++); + } + + // Check if firmware sends powerMin (INAV 9.1+) + if (offset < data.byteLength) { + FC.VTX_CONFIG.power_min = data.getUint8(offset++); + } else { + // Firmware 9.0 doesn't send powerMin, use fallback + // MSP VTX supports power off (index 0), others start at 1 + FC.VTX_CONFIG.power_min = (FC.VTX_CONFIG.device_type == VTX.DEV_MSP) ? 0 : 1; + } + } + } } break; case MSPCodes.MSP_ADVANCED_CONFIG: diff --git a/js/vtx.js b/js/vtx.js index 55401248c..e42857c09 100644 --- a/js/vtx.js +++ b/js/vtx.js @@ -20,23 +20,6 @@ var VTX = (function() { self.CHANNEL_MIN = 1; self.CHANNEL_MAX = 8; - self.getMinPower = function(vtxDev) { - if (vtxDev == self.DEV_MSP) { - return 0; - } - return 1; - } - - self.getMaxPower = function(vtxDev) { - if ((vtxDev == self.DEV_SMARTAUDIO) || (vtxDev == self.DEV_TRAMP)) { - return 8; - } - if (vtxDev == self.DEV_MSP) { - return 4; - } - return 3; - } - self.LOW_POWER_DISARM_MIN = 0; self.LOW_POWER_DISARM_MAX = 2; diff --git a/tabs/configuration.js b/tabs/configuration.js index 8e8fcf4ab..e321c0bdd 100644 --- a/tabs/configuration.js +++ b/tabs/configuration.js @@ -163,9 +163,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { var vtx_power = $('#vtx_power'); vtx_power.empty(); - var minPower = VTX.getMinPower(FC.VTX_CONFIG.device_type); - var maxPower = VTX.getMaxPower(FC.VTX_CONFIG.device_type); - for (var ii = minPower; ii <= maxPower; ii++) { + for (var ii = FC.VTX_CONFIG.power_min; ii <= FC.VTX_CONFIG.power_count; ii++) { var option = $(''); if (ii == FC.VTX_CONFIG.power) { option.prop('selected', true);