mirror of
https://github.com/betaflight/betaflight-configurator.git
synced 2025-07-24 00:35:26 +03:00
commit
49c7da5683
3 changed files with 104 additions and 1 deletions
|
@ -4993,7 +4993,7 @@
|
|||
},
|
||||
|
||||
"vtxHelp": {
|
||||
"message": "Here you can configure the values for your Video Transmitter (VTX). You can view and change the transmission values, including the VTX Tables, if the flight controller and the VTX support it.<br>To set up your VTX use the following steps:<br>1. Go to <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/betaflight/betaflight/wiki/VTX-tables\">this</a> page;<br>2. Find the appropriate VTX configuration file for your country and your VTX model and download it;<br>3. Click '$t(vtxButtonLoadFile.message)' below, select the VTX configuration file, load it;<br>4. Verify that the settings are correct;<br>5. Click '$t(vtxButtonSave.message)' to store the VTX settings on the flight controller.",
|
||||
"message": "Here you can configure the values for your Video Transmitter (VTX). You can view and change the transmission values, including the VTX Tables, if the flight controller and the VTX support it.<br>To set up your VTX use the following steps:<br>1. Go to <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/betaflight/betaflight/wiki/VTX-tables\">this</a> page;<br>2. Find the appropriate VTX configuration file for your country and your VTX model and download it;<br>3. Click '$t(vtxButtonLoadFile.message)' below, select the VTX configuration file, load it;<br>4. Verify that the settings are correct;<br>5. Click '$t(vtxButtonSave.message)' to store the VTX settings on the flight controller.<br>6. Optionally click '$t(vtxButtonSaveLua.message)' to save a lua configuration file you can use with the betaflight lua scripts (See more <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/betaflight/betaflight-tx-lua-scripts/\">here</a>.)",
|
||||
"description": "Introduction message in the VTX tab"
|
||||
},
|
||||
"vtxMessageNotSupported": {
|
||||
|
@ -5225,6 +5225,14 @@
|
|||
"message": "Save to file",
|
||||
"description": "Save to file button in the VTX tab"
|
||||
},
|
||||
"vtxButtonSaveLua": {
|
||||
"message": "Save Lua Script",
|
||||
"description": "Save Lua script button in the VTX tab"
|
||||
},
|
||||
"vtxLuaFileHelp" :{
|
||||
"message": "The '$t(vtxButtonSaveLua.message)' button will allow you to save a <i>craftname</i>.lua file containing the vtx table configuration that can be used with the betaflight lua scripts. (See more <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/betaflight/betaflight-tx-lua-scripts/\">here</a>.)",
|
||||
"description": "Tooltip message for the Save Lua script button in the VTX tab"
|
||||
},
|
||||
"vtxButtonLoadFile": {
|
||||
"message": "Load from file",
|
||||
"description": "Load to file button in the VTX tab"
|
||||
|
|
|
@ -496,6 +496,10 @@ TABS.vtx.initialize = function (callback) {
|
|||
save_json();
|
||||
});
|
||||
|
||||
$('a.save_lua').click(function () {
|
||||
save_lua();
|
||||
});
|
||||
|
||||
$('a.load_file').click(function () {
|
||||
load_json();
|
||||
});
|
||||
|
@ -512,6 +516,65 @@ TABS.vtx.initialize = function (callback) {
|
|||
|
||||
}
|
||||
|
||||
function save_lua() {
|
||||
let suggestedName = 'model01';
|
||||
let suffix = 'lua';
|
||||
|
||||
var filename;
|
||||
if(CONFIG.name && CONFIG.name.trim() !== '') {
|
||||
filename = CONFIG.name.trim().replace(' ', '_');
|
||||
}else{
|
||||
filename = suggestedName
|
||||
}
|
||||
filename += '.' + suffix;
|
||||
|
||||
let accepts = [{
|
||||
description: suffix.toUpperCase() + ' files', extensions: [suffix],
|
||||
}];
|
||||
|
||||
chrome.fileSystem.chooseEntry({type: 'saveFile', suggestedName: filename, accepts: accepts}, function(entry) {
|
||||
|
||||
if (chrome.runtime.lastError) {
|
||||
console.error(chrome.runtime.lastError.message);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!entry) {
|
||||
console.log('No file selected');
|
||||
return;
|
||||
}
|
||||
|
||||
entry.createWriter(function (writer) {
|
||||
|
||||
writer.onerror = function(){
|
||||
console.error('Failed to write VTX table lua file');
|
||||
GUI.log(i18n.getMessage('vtxSavedFileKo'));
|
||||
};
|
||||
|
||||
writer.onwriteend = function() {
|
||||
dump_html_to_msp();
|
||||
let vtxConfig = createVtxConfigInfo();
|
||||
let text = creatLuaTables(vtxConfig);
|
||||
let data = new Blob([text], { type: "application/text" });
|
||||
|
||||
// we get here at the end of the truncate method, change to the new end
|
||||
writer.onwriteend = function() {
|
||||
analytics.sendEvent(analytics.EVENT_CATEGORIES.FLIGHT_CONTROLLER, 'VtxTableLuaSave', text.length);
|
||||
console.log('Write VTX table lua file end');
|
||||
GUI.log(i18n.getMessage('vtxSavedFileOk'));
|
||||
}
|
||||
|
||||
writer.write(data);
|
||||
};
|
||||
|
||||
writer.truncate(0);
|
||||
|
||||
}, function (){
|
||||
console.error('Failed to get VTX table lua file writer');
|
||||
GUI.log(i18n.getMessage('vtxSavedFileKo'));
|
||||
});
|
||||
});
|
||||
}
|
||||
function save_json() {
|
||||
let suggestedName = 'vtxtable';
|
||||
let suffix = 'json';
|
||||
|
@ -550,6 +613,7 @@ TABS.vtx.initialize = function (callback) {
|
|||
// we get here at the end of the truncate method, change to the new end
|
||||
writer.onwriteend = function() {
|
||||
analytics.sendEvent(analytics.EVENT_CATEGORIES.FLIGHT_CONTROLLER, 'VtxTableSave', text.length);
|
||||
console.log(vtxConfig)
|
||||
console.log('Write VTX file end');
|
||||
GUI.log(i18n.getMessage('vtxSavedFileOk'));
|
||||
}
|
||||
|
@ -807,6 +871,33 @@ TABS.vtx.initialize = function (callback) {
|
|||
return vtxConfig;
|
||||
}
|
||||
|
||||
function creatLuaTables(vtxConfig) {
|
||||
let bandsString = "bandTable = { [0]=\"U\"";
|
||||
let frequencieString = "frequencyTable = {\n";
|
||||
let freqBandsString = "frequenciesPerBand = ";
|
||||
let powersString = "powerTable = { ";
|
||||
let bands_list = vtxConfig.vtx_table.bands_list;
|
||||
let power_list = vtxConfig.vtx_table.powerlevels_list;
|
||||
var index, len, i, l;
|
||||
for (index = 0, len = bands_list.length; index < len; ++index) {
|
||||
bandsString += ", \"" + bands_list[index].letter + "\"";
|
||||
frequencieString += " { ";
|
||||
for (i = 0, l = bands_list[index].frequencies.length; i < l; ++i) {
|
||||
frequencieString += bands_list[index].frequencies[i] + ", ";
|
||||
}
|
||||
frequencieString += "},\n";
|
||||
}
|
||||
bandsString += " }\n";
|
||||
frequencieString += "}\n";
|
||||
freqBandsString += bands_list[1].frequencies.length + "\n";
|
||||
for (index = 0, len = power_list.length; index < len; ++index) {
|
||||
powersString += "[" + power_list[index].value + "]=" + power_list[index].label + ", ";
|
||||
}
|
||||
powersString += "}\n";
|
||||
let text = frequencieString + freqBandsString + bandsString + powersString;
|
||||
return text;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
TABS.vtx.cleanup = function (callback) {
|
||||
|
|
|
@ -252,6 +252,10 @@
|
|||
</div>
|
||||
|
||||
<div class="content_toolbar">
|
||||
<div class="btn save_lua_btn">
|
||||
<a class="save_lua" id="save_lua_button" href="#" i18n="vtxButtonSaveLua"></a>
|
||||
<div id="vtxLuaFileTooltip" class="helpicon cf_tip" i18n_title="vtxLuaFileHelp"></div>
|
||||
</div>
|
||||
<div class="btn save_file_btn">
|
||||
<a class="save_file" id="save_file_button" href="#" i18n="vtxButtonSaveFile"></a>
|
||||
</div>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue