mirror of
https://github.com/iNavFlight/inav-configurator.git
synced 2025-07-14 20:10:11 +03:00
Merge pull request #481 from iNavFlight/agh_vtx_settings
Add support for latest VTX changes
This commit is contained in:
commit
f13231be9a
9 changed files with 236 additions and 3 deletions
|
@ -834,7 +834,42 @@
|
|||
"configurationButtonSave": {
|
||||
"message": "Save and Reboot"
|
||||
},
|
||||
|
||||
"configurationVTX": {
|
||||
"message": "VTX"
|
||||
},
|
||||
"configurationVTXBand": {
|
||||
"message": "Band"
|
||||
},
|
||||
"configurationNoBand": {
|
||||
"message": "None"
|
||||
},
|
||||
"configurationVTXNoBandHelp": {
|
||||
"message": "VTX frequency has been set manually. Selecting a band will overwrite the configured frequency."
|
||||
},
|
||||
"configurationVTXChannel": {
|
||||
"message": "Channel"
|
||||
},
|
||||
"configurationVTXPower": {
|
||||
"message": "Power Level"
|
||||
},
|
||||
"configurationVTXPowerHelp": {
|
||||
"message": "VTX power level. The exact power in mw (or dBm) will depend on the specific hardware. Check your VTX manual."
|
||||
},
|
||||
"configurationVTXLowerPowerDisarm": {
|
||||
"message": "Use low power while the craft is disarmed"
|
||||
},
|
||||
"configurationVTXLowerPowerDisarmHelp": {
|
||||
"message": "Enabling this option will make the VTX use its lowest power while the craft is disarmed. Use 'Until first arm' to make it use the lowest power only until you arm for the first time."
|
||||
},
|
||||
"configurationVTXLowPowerDisarmValue_0": {
|
||||
"message": "Disabled"
|
||||
},
|
||||
"configurationVTXLowPowerDisarmValue_1": {
|
||||
"message": "Always"
|
||||
},
|
||||
"configurationVTXLowPowerDisarmValue_2": {
|
||||
"message": "Until first arm"
|
||||
},
|
||||
"portsHelp": {
|
||||
"message": "<strong>Note:</strong> not all combinations are valid. When the flight controller firmware detects this the serial port configuration will be reset."
|
||||
},
|
||||
|
|
|
@ -97,6 +97,7 @@ sources.js = [
|
|||
'./js/tasks.js',
|
||||
'./js/servoMixerRuleCollection.js',
|
||||
'./js/motorMixerRuleCollection.js',
|
||||
'./js/vtx.js',
|
||||
'./main.js',
|
||||
'./tabs/*.js',
|
||||
'./js/eventFrequencyAnalyzer.js',
|
||||
|
|
10
js/fc.js
10
js/fc.js
|
@ -39,6 +39,7 @@ var CONFIG,
|
|||
RX_CONFIG,
|
||||
FAILSAFE_CONFIG,
|
||||
RXFAIL_CONFIG,
|
||||
VTX_CONFIG,
|
||||
ADVANCED_CONFIG,
|
||||
INAV_PID_CONFIG,
|
||||
PID_ADVANCED,
|
||||
|
@ -298,6 +299,15 @@ var FC = {
|
|||
capacity_unit: 0
|
||||
};
|
||||
|
||||
VTX_CONFIG = {
|
||||
device_type: VTXDEV_UNKNOWN,
|
||||
band: 0,
|
||||
channel: 1,
|
||||
power: 0,
|
||||
pitmode: 0,
|
||||
low_power_disarm: 0,
|
||||
};
|
||||
|
||||
ADVANCED_CONFIG = {
|
||||
gyroSyncDenominator: null,
|
||||
pidProcessDenom: null,
|
||||
|
|
|
@ -66,6 +66,8 @@ var MSPCodes = {
|
|||
MSP_SET_OSD_CONFIG: 85,
|
||||
MSP_OSD_CHAR_READ: 86,
|
||||
MSP_OSD_CHAR_WRITE: 87,
|
||||
MSP_VTX_CONFIG: 88,
|
||||
MSP_SET_VTX_CONFIG: 89,
|
||||
MSP_ADVANCED_CONFIG: 90,
|
||||
MSP_SET_ADVANCED_CONFIG: 91,
|
||||
MSP_FILTER_CONFIG: 92,
|
||||
|
|
|
@ -1077,7 +1077,18 @@ var mspHelper = (function (gui) {
|
|||
case MSPCodes.MSP_SET_TRANSPONDER_CONFIG:
|
||||
console.log("Transponder config saved");
|
||||
break;
|
||||
|
||||
case MSPCodes.MSP_VTX_CONFIG:
|
||||
VTX_CONFIG.device_type = data.getUint8(offset++);
|
||||
if (VTX_CONFIG.device_type != VTXDEV_UNKNOWN) {
|
||||
VTX_CONFIG.band = data.getUint8(offset++);
|
||||
VTX_CONFIG.channel = data.getUint8(offset++);
|
||||
VTX_CONFIG.power = data.getUint8(offset++);
|
||||
VTX_CONFIG.pitmode = data.getUint8(offset++);
|
||||
// Ignore wether the VTX is ready for now
|
||||
offset++;
|
||||
VTX_CONFIG.low_power_disarm = data.getUint8(offset++);
|
||||
}
|
||||
break;
|
||||
case MSPCodes.MSP_ADVANCED_CONFIG:
|
||||
ADVANCED_CONFIG.gyroSyncDenominator = data.getUint8(offset);
|
||||
offset++;
|
||||
|
@ -1094,6 +1105,10 @@ var mspHelper = (function (gui) {
|
|||
ADVANCED_CONFIG.gyroSync = data.getUint8(offset);
|
||||
break;
|
||||
|
||||
case MSPCodes.MSP_SET_VTX_CONFIG:
|
||||
console.log("VTX config saved");
|
||||
break;
|
||||
|
||||
case MSPCodes.MSP_SET_ADVANCED_CONFIG:
|
||||
console.log("Advanced config saved");
|
||||
break;
|
||||
|
@ -1418,6 +1433,18 @@ var mspHelper = (function (gui) {
|
|||
buffer.push(lowByte(BF_CONFIG.currentoffset));
|
||||
buffer.push(highByte(BF_CONFIG.currentoffset));
|
||||
break;
|
||||
case MSPCodes.MSP_SET_VTX_CONFIG:
|
||||
if (VTX_CONFIG.band > 0) {
|
||||
buffer.push16(((VTX_CONFIG.band - 1) * 8) + (VTX_CONFIG.channel - 1));
|
||||
} else {
|
||||
// This tells the firmware to ignore this value.
|
||||
buffer.push16(VTX_MAX_FREQUENCY_MHZ + 1);
|
||||
}
|
||||
buffer.push(VTX_CONFIG.power);
|
||||
// Don't enable PIT mode
|
||||
buffer.push(0);
|
||||
buffer.push(VTX_CONFIG.low_power_disarm);
|
||||
break;
|
||||
case MSPCodes.MSP_SET_PID:
|
||||
for (i = 0; i < PIDs.length; i++) {
|
||||
buffer.push(parseInt(PIDs[i][0]));
|
||||
|
@ -3027,5 +3054,21 @@ var mspHelper = (function (gui) {
|
|||
}
|
||||
};
|
||||
|
||||
self.loadVTXConfig = function (callback) {
|
||||
if (semver.gte(CONFIG.flightControllerVersion, "2.0.0")) {
|
||||
MSP.send_message(MSPCodes.MSP_VTX_CONFIG, false, false, callback);
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
self.saveVTXConfig = function(callback) {
|
||||
if (semver.gte(CONFIG.flightControllerVersion, "2.0.0")) {
|
||||
MSP.send_message(MSPCodes.MSP_SET_VTX_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_VTX_CONFIG), false, callback);
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
}
|
||||
|
||||
return self;
|
||||
})(GUI);
|
||||
|
|
23
js/vtx.js
Normal file
23
js/vtx.js
Normal file
|
@ -0,0 +1,23 @@
|
|||
var VTXDEV_UNKNOWN = 0xFF;
|
||||
|
||||
var VTX_BANDS = [
|
||||
{code: 1, name: 'Boscam A'},
|
||||
{code: 2, name: 'Boscam B'},
|
||||
{code: 3, name: 'Boscam E'},
|
||||
{code: 4, name: 'Fatshark'},
|
||||
{code: 5, name: 'Raceband'},
|
||||
];
|
||||
|
||||
var VTX_BAND_MIN = 1;
|
||||
var VTX_BAND_MAX = 5;
|
||||
|
||||
var VTX_CHANNEL_MIN = 1;
|
||||
var VTX_CHANNEL_MAX = 8;
|
||||
|
||||
var VTX_POWER_MIN = 0;
|
||||
var VTX_POWER_MAX = 4;
|
||||
|
||||
var VTX_LOW_POWER_DISARM_MIN = 0;
|
||||
var VTX_LOW_POWER_DISARM_MAX = 2;
|
||||
|
||||
var VTX_MAX_FREQUENCY_MHZ = 5999;
|
|
@ -232,6 +232,44 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="config-section gui_box grey config-vtx">
|
||||
<div class="gui_box_titlebar">
|
||||
<div class="spacer_box_title" data-i18n="configurationVTX"></div>
|
||||
</div>
|
||||
<div class="spacer_box">
|
||||
<div class="note" id="vtx_no_band">
|
||||
<div class="note_spacer">
|
||||
<p data-i18n="configurationVTXNoBandHelp"></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="select vtx_band_wrapper">
|
||||
<select id="vtx_band"></select>
|
||||
<label for="vtx_band">
|
||||
<span data-i18n="configurationVTXBand"></span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="select vtx_channel_wrapper">
|
||||
<select id="vtx_channel"></select>
|
||||
<label for="vtx_channel"> <span data-i18n="configurationVTXChannel"></span></label>
|
||||
</div>
|
||||
|
||||
<div class="select">
|
||||
<select id="vtx_power"></select>
|
||||
<label for="vtx_power"><span data-i18n="configurationVTXPower"></span></label>
|
||||
<div class="helpicon cf_tip" data-i18n_title="configurationVTXPowerHelp"></div>
|
||||
</div>
|
||||
|
||||
<div class="select">
|
||||
<select id="vtx_low_power_disarm"></select>
|
||||
<label for="vtx_power"><span data-i18n="configurationVTXLowerPowerDisarm"></span></label>
|
||||
<div class="helpicon cf_tip" data-i18n_title="configurationVTXLowerPowerDisarmHelp"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!--Right column begins here-->
|
||||
|
|
|
@ -34,6 +34,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
|
|||
mspHelper.loadAdvancedConfig,
|
||||
mspHelper.loadINAVPidConfig,
|
||||
mspHelper.loadSensorConfig,
|
||||
mspHelper.loadVTXConfig,
|
||||
loadCraftName
|
||||
];
|
||||
|
||||
|
@ -60,6 +61,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
|
|||
mspHelper.saveAdvancedConfig,
|
||||
mspHelper.saveINAVPidConfig,
|
||||
mspHelper.saveSensorConfig,
|
||||
mspHelper.saveVTXConfig,
|
||||
saveCraftName,
|
||||
];
|
||||
|
||||
|
@ -269,6 +271,79 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
|
|||
|
||||
gps_ubx_sbas_e.val(MISC.gps_ubx_sbas);
|
||||
|
||||
// VTX
|
||||
var config_vtx = $('.config-vtx');
|
||||
if (VTX_CONFIG.device_type != VTXDEV_UNKNOWN) {
|
||||
|
||||
var vtx_band = $('#vtx_band');
|
||||
vtx_band.empty();
|
||||
var vtx_no_band_note = $('#vtx_no_band');
|
||||
if (VTX_CONFIG.band < VTX_BAND_MIN || VTX_CONFIG.band > VTX_BAND_MAX) {
|
||||
var noBandName = chrome.i18n.getMessage("configurationNoBand");
|
||||
$('<option value="0">' + noBandName + '</option>').appendTo(vtx_band);
|
||||
vtx_no_band_note.show();
|
||||
} else {
|
||||
vtx_no_band_note.hide();
|
||||
}
|
||||
for (var ii = 0; ii < VTX_BANDS.length; ii++) {
|
||||
var band_name = VTX_BANDS[ii].name;
|
||||
var option = $('<option value="' + VTX_BANDS[ii].code + '">' + band_name + '</option>');
|
||||
if (VTX_BANDS[ii].code == VTX_CONFIG.band) {
|
||||
option.prop('selected', true);
|
||||
}
|
||||
option.appendTo(vtx_band);
|
||||
}
|
||||
vtx_band.change(function () {
|
||||
VTX_CONFIG.band = parseInt($(this).val());
|
||||
});
|
||||
|
||||
var vtx_channel = $('#vtx_channel');
|
||||
vtx_channel.empty();
|
||||
for (var ii = VTX_CHANNEL_MIN; ii <= VTX_CHANNEL_MAX; ii++) {
|
||||
var option = $('<option value="' + ii + '">' + ii + '</option>');
|
||||
if (ii == VTX_CONFIG.channel) {
|
||||
option.prop('selected', true);
|
||||
}
|
||||
option.appendTo(vtx_channel);
|
||||
}
|
||||
vtx_channel.change(function () {
|
||||
VTX_CONFIG.channel = parseInt($(this).val());
|
||||
});
|
||||
|
||||
var vtx_power = $('#vtx_power');
|
||||
vtx_power.empty();
|
||||
for (var ii = VTX_POWER_MIN; ii <= VTX_POWER_MAX; ii++) {
|
||||
var option = $('<option value="' + ii + '">' + ii + '</option>');
|
||||
if (ii == VTX_CONFIG.power) {
|
||||
option.prop('selected', true);
|
||||
}
|
||||
option.appendTo(vtx_power);
|
||||
}
|
||||
vtx_power.change(function () {
|
||||
VTX_CONFIG.power = parseInt($(this).val());
|
||||
});
|
||||
|
||||
var vtx_low_power_disarm = $('#vtx_low_power_disarm');
|
||||
vtx_low_power_disarm.empty();
|
||||
for (var ii = VTX_LOW_POWER_DISARM_MIN; ii <= VTX_LOW_POWER_DISARM_MAX; ii++) {
|
||||
var name = chrome.i18n.getMessage("configurationVTXLowPowerDisarmValue_" + ii);
|
||||
if (!name) {
|
||||
name = ii;
|
||||
}
|
||||
var option = $('<option value="' + ii + '">' + name + '</option>');
|
||||
if (ii == VTX_CONFIG.low_power_disarm) {
|
||||
option.prop('selected', true);
|
||||
}
|
||||
option.appendTo(vtx_low_power_disarm);
|
||||
}
|
||||
vtx_low_power_disarm.change(function () {
|
||||
VTX_CONFIG.low_power_disarm = parseInt($(this).val());
|
||||
});
|
||||
|
||||
config_vtx.show();
|
||||
} else {
|
||||
config_vtx.hide();
|
||||
}
|
||||
|
||||
// generate serial RX
|
||||
var serialRxTypes = FC.getSerialRxTypes();
|
||||
|
|
|
@ -833,7 +833,13 @@ OSD.constants = {
|
|||
name: 'VTX_CHANNEL',
|
||||
id: 10,
|
||||
positionable: true,
|
||||
preview: 'CH:F7'
|
||||
preview: function(osd_data) {
|
||||
var preview = 'CH:F7';
|
||||
if (semver.gte(CONFIG.flightControllerVersion, '2.0.0')) {
|
||||
preview += ':1';
|
||||
}
|
||||
return preview;
|
||||
},
|
||||
},
|
||||
]
|
||||
},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue