1
0
Fork 0
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:
Alberto García Hierro 2018-06-22 09:20:38 +01:00 committed by GitHub
commit f13231be9a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 236 additions and 3 deletions

View file

@ -834,7 +834,42 @@
"configurationButtonSave": { "configurationButtonSave": {
"message": "Save and Reboot" "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": { "portsHelp": {
"message": "<strong>Note:</strong> not all combinations are valid. When the flight controller firmware detects this the serial port configuration will be reset." "message": "<strong>Note:</strong> not all combinations are valid. When the flight controller firmware detects this the serial port configuration will be reset."
}, },

View file

@ -97,6 +97,7 @@ sources.js = [
'./js/tasks.js', './js/tasks.js',
'./js/servoMixerRuleCollection.js', './js/servoMixerRuleCollection.js',
'./js/motorMixerRuleCollection.js', './js/motorMixerRuleCollection.js',
'./js/vtx.js',
'./main.js', './main.js',
'./tabs/*.js', './tabs/*.js',
'./js/eventFrequencyAnalyzer.js', './js/eventFrequencyAnalyzer.js',

View file

@ -39,6 +39,7 @@ var CONFIG,
RX_CONFIG, RX_CONFIG,
FAILSAFE_CONFIG, FAILSAFE_CONFIG,
RXFAIL_CONFIG, RXFAIL_CONFIG,
VTX_CONFIG,
ADVANCED_CONFIG, ADVANCED_CONFIG,
INAV_PID_CONFIG, INAV_PID_CONFIG,
PID_ADVANCED, PID_ADVANCED,
@ -298,6 +299,15 @@ var FC = {
capacity_unit: 0 capacity_unit: 0
}; };
VTX_CONFIG = {
device_type: VTXDEV_UNKNOWN,
band: 0,
channel: 1,
power: 0,
pitmode: 0,
low_power_disarm: 0,
};
ADVANCED_CONFIG = { ADVANCED_CONFIG = {
gyroSyncDenominator: null, gyroSyncDenominator: null,
pidProcessDenom: null, pidProcessDenom: null,

View file

@ -66,6 +66,8 @@ var MSPCodes = {
MSP_SET_OSD_CONFIG: 85, MSP_SET_OSD_CONFIG: 85,
MSP_OSD_CHAR_READ: 86, MSP_OSD_CHAR_READ: 86,
MSP_OSD_CHAR_WRITE: 87, MSP_OSD_CHAR_WRITE: 87,
MSP_VTX_CONFIG: 88,
MSP_SET_VTX_CONFIG: 89,
MSP_ADVANCED_CONFIG: 90, MSP_ADVANCED_CONFIG: 90,
MSP_SET_ADVANCED_CONFIG: 91, MSP_SET_ADVANCED_CONFIG: 91,
MSP_FILTER_CONFIG: 92, MSP_FILTER_CONFIG: 92,

View file

@ -1077,7 +1077,18 @@ var mspHelper = (function (gui) {
case MSPCodes.MSP_SET_TRANSPONDER_CONFIG: case MSPCodes.MSP_SET_TRANSPONDER_CONFIG:
console.log("Transponder config saved"); console.log("Transponder config saved");
break; 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: case MSPCodes.MSP_ADVANCED_CONFIG:
ADVANCED_CONFIG.gyroSyncDenominator = data.getUint8(offset); ADVANCED_CONFIG.gyroSyncDenominator = data.getUint8(offset);
offset++; offset++;
@ -1094,6 +1105,10 @@ var mspHelper = (function (gui) {
ADVANCED_CONFIG.gyroSync = data.getUint8(offset); ADVANCED_CONFIG.gyroSync = data.getUint8(offset);
break; break;
case MSPCodes.MSP_SET_VTX_CONFIG:
console.log("VTX config saved");
break;
case MSPCodes.MSP_SET_ADVANCED_CONFIG: case MSPCodes.MSP_SET_ADVANCED_CONFIG:
console.log("Advanced config saved"); console.log("Advanced config saved");
break; break;
@ -1418,6 +1433,18 @@ var mspHelper = (function (gui) {
buffer.push(lowByte(BF_CONFIG.currentoffset)); buffer.push(lowByte(BF_CONFIG.currentoffset));
buffer.push(highByte(BF_CONFIG.currentoffset)); buffer.push(highByte(BF_CONFIG.currentoffset));
break; 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: case MSPCodes.MSP_SET_PID:
for (i = 0; i < PIDs.length; i++) { for (i = 0; i < PIDs.length; i++) {
buffer.push(parseInt(PIDs[i][0])); 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; return self;
})(GUI); })(GUI);

23
js/vtx.js Normal file
View 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;

View file

@ -232,6 +232,44 @@
</div> </div>
</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> </div>
<!--Right column begins here--> <!--Right column begins here-->

View file

@ -34,6 +34,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
mspHelper.loadAdvancedConfig, mspHelper.loadAdvancedConfig,
mspHelper.loadINAVPidConfig, mspHelper.loadINAVPidConfig,
mspHelper.loadSensorConfig, mspHelper.loadSensorConfig,
mspHelper.loadVTXConfig,
loadCraftName loadCraftName
]; ];
@ -60,6 +61,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
mspHelper.saveAdvancedConfig, mspHelper.saveAdvancedConfig,
mspHelper.saveINAVPidConfig, mspHelper.saveINAVPidConfig,
mspHelper.saveSensorConfig, mspHelper.saveSensorConfig,
mspHelper.saveVTXConfig,
saveCraftName, saveCraftName,
]; ];
@ -269,6 +271,79 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
gps_ubx_sbas_e.val(MISC.gps_ubx_sbas); 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 // generate serial RX
var serialRxTypes = FC.getSerialRxTypes(); var serialRxTypes = FC.getSerialRxTypes();

View file

@ -833,7 +833,13 @@ OSD.constants = {
name: 'VTX_CHANNEL', name: 'VTX_CHANNEL',
id: 10, id: 10,
positionable: true, 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;
},
}, },
] ]
}, },