work-in-progress changes to go with the corresponding serial-cleanup
firmware branch.10.3.x-maintenance
parent
9b92fee497
commit
c423aaf44d
|
@ -507,7 +507,7 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
"portsHelp": {
|
"portsHelp": {
|
||||||
"message": "Configure serial ports. <strong>Note:</strong> that not all ports support all scenarios and not all combinations of scenarios are valid. When the flight controller firmware detects this the serial port configuration will be reset."
|
"message": "Configure serial ports. <strong>Note:</strong> not all combinations are valid. When the flight controller firmware detects this the serial port configuration will be reset."
|
||||||
},
|
},
|
||||||
"portsButtonSave": {
|
"portsButtonSave": {
|
||||||
"message": "Save and Reboot"
|
"message": "Save and Reboot"
|
||||||
|
|
36
js/msp.js
36
js/msp.js
|
@ -102,6 +102,15 @@ var MSP = {
|
||||||
ledDirectionLetters: ['n', 'e', 's', 'w', 'u', 'd'], // in LSB bit order
|
ledDirectionLetters: ['n', 'e', 's', 'w', 'u', 'd'], // in LSB bit order
|
||||||
ledFunctionLetters: ['i', 'w', 'f', 'a', 't', 'r', 'c'], // in LSB bit order
|
ledFunctionLetters: ['i', 'w', 'f', 'a', 't', 'r', 'c'], // in LSB bit order
|
||||||
|
|
||||||
|
supportedBaudRates: [ // 0 based index.
|
||||||
|
'AUTO',
|
||||||
|
'9600',
|
||||||
|
'19200',
|
||||||
|
'38400',
|
||||||
|
'57600',
|
||||||
|
'115200'
|
||||||
|
],
|
||||||
|
|
||||||
read: function (readInfo) {
|
read: function (readInfo) {
|
||||||
var data = new Uint8Array(readInfo.data);
|
var data = new Uint8Array(readInfo.data);
|
||||||
|
|
||||||
|
@ -557,6 +566,8 @@ var MSP = {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MSP_codes.MSP_CF_SERIAL_CONFIG:
|
case MSP_codes.MSP_CF_SERIAL_CONFIG:
|
||||||
|
|
||||||
|
if (CONFIG.apiVersion < 1.6) {
|
||||||
SERIAL_CONFIG.ports = [];
|
SERIAL_CONFIG.ports = [];
|
||||||
var offset = 0;
|
var offset = 0;
|
||||||
var serialPortCount = (data.byteLength - (4 * 4)) / 2;
|
var serialPortCount = (data.byteLength - (4 * 4)) / 2;
|
||||||
|
@ -575,6 +586,26 @@ var MSP = {
|
||||||
offset+= 4;
|
offset+= 4;
|
||||||
SERIAL_CONFIG.gpsPassthroughBaudRate = data.getUint32(offset, 1);
|
SERIAL_CONFIG.gpsPassthroughBaudRate = data.getUint32(offset, 1);
|
||||||
offset+= 4;
|
offset+= 4;
|
||||||
|
} else {
|
||||||
|
SERIAL_CONFIG.ports = [];
|
||||||
|
var offset = 0;
|
||||||
|
var bytesPerPort = 1 + 2 + (1 * 4);
|
||||||
|
var serialPortCount = data.byteLength / bytesPerPort;
|
||||||
|
|
||||||
|
for (var i = 0; i < serialPortCount; i++) {
|
||||||
|
var serialPort = {
|
||||||
|
identifier: data.getUint8(offset, 1),
|
||||||
|
functionMask: data.getUint16(offset + 1, 1),
|
||||||
|
msp_baudrate: MSP.supportedBaudRates[data.getUint8(offset + 3, 1)],
|
||||||
|
gps_baudrate: MSP.supportedBaudRates[data.getUint8(offset + 4, 1)],
|
||||||
|
telemetry_baudrate: MSP.supportedBaudRates[data.getUint8(offset + 5, 1)],
|
||||||
|
blackbox_baudrate: MSP.supportedBaudRates[data.getUint8(offset + 6, 1)]
|
||||||
|
}
|
||||||
|
|
||||||
|
offset += bytesPerPort;
|
||||||
|
SERIAL_CONFIG.ports.push(serialPort);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MSP_codes.MSP_SET_CF_SERIAL_CONFIG:
|
case MSP_codes.MSP_SET_CF_SERIAL_CONFIG:
|
||||||
|
@ -952,6 +983,8 @@ MSP.crunch = function (code) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MSP_codes.MSP_SET_CF_SERIAL_CONFIG:
|
case MSP_codes.MSP_SET_CF_SERIAL_CONFIG:
|
||||||
|
if (CONFIG.apiVersion < 1.6) {
|
||||||
|
|
||||||
for (var i = 0; i < SERIAL_CONFIG.ports.length; i++) {
|
for (var i = 0; i < SERIAL_CONFIG.ports.length; i++) {
|
||||||
buffer.push(SERIAL_CONFIG.ports[i].scenario);
|
buffer.push(SERIAL_CONFIG.ports[i].scenario);
|
||||||
}
|
}
|
||||||
|
@ -974,6 +1007,9 @@ MSP.crunch = function (code) {
|
||||||
buffer.push(specificByte(SERIAL_CONFIG.gpsPassthroughBaudRate, 1));
|
buffer.push(specificByte(SERIAL_CONFIG.gpsPassthroughBaudRate, 1));
|
||||||
buffer.push(specificByte(SERIAL_CONFIG.gpsPassthroughBaudRate, 2));
|
buffer.push(specificByte(SERIAL_CONFIG.gpsPassthroughBaudRate, 2));
|
||||||
buffer.push(specificByte(SERIAL_CONFIG.gpsPassthroughBaudRate, 3));
|
buffer.push(specificByte(SERIAL_CONFIG.gpsPassthroughBaudRate, 3));
|
||||||
|
} else {
|
||||||
|
console.log('unsupported');
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -15,7 +15,11 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function load_serial_config() {
|
function load_serial_config() {
|
||||||
|
if (CONFIG.apiVersion < 1.6) {
|
||||||
MSP.send_message(MSP_codes.MSP_CF_SERIAL_CONFIG, false, false, load_rc_map);
|
MSP.send_message(MSP_codes.MSP_CF_SERIAL_CONFIG, false, false, load_rc_map);
|
||||||
|
} else {
|
||||||
|
load_rc_map();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function load_rc_map() {
|
function load_rc_map() {
|
||||||
|
@ -148,14 +152,24 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
|
||||||
MISC.gps_type = parseInt($(this).val());
|
MISC.gps_type = parseInt($(this).val());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
gps_protocol_e.val(MISC.gps_type);
|
||||||
|
|
||||||
|
|
||||||
var gps_baudrate_e = $('select.gps_baudrate');
|
var gps_baudrate_e = $('select.gps_baudrate');
|
||||||
for (var i = 0; i < gpsBaudRates.length; i++) {
|
for (var i = 0; i < gpsBaudRates.length; i++) {
|
||||||
gps_baudrate_e.append('<option value="' + gpsBaudRates[i] + '">' + gpsBaudRates[i] + '</option>');
|
gps_baudrate_e.append('<option value="' + gpsBaudRates[i] + '">' + gpsBaudRates[i] + '</option>');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (CONFIG.apiVersion < 1.6) {
|
||||||
gps_baudrate_e.change(function () {
|
gps_baudrate_e.change(function () {
|
||||||
SERIAL_CONFIG.gpsBaudRate = parseInt($(this).val());
|
SERIAL_CONFIG.gpsBaudRate = parseInt($(this).val());
|
||||||
});
|
});
|
||||||
|
gps_baudrate_e.val(SERIAL_CONFIG.gpsBaudRate);
|
||||||
|
} else {
|
||||||
|
gps_baudrate_e.prop("disabled", true);
|
||||||
|
gps_baudrate_e.parent().hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
var gps_ubx_sbas_e = $('select.gps_ubx_sbas');
|
var gps_ubx_sbas_e = $('select.gps_ubx_sbas');
|
||||||
for (var i = 0; i < gpsSbas.length; i++) {
|
for (var i = 0; i < gpsSbas.length; i++) {
|
||||||
|
@ -166,11 +180,9 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
|
||||||
MISC.gps_ubx_sbas = parseInt($(this).val());
|
MISC.gps_ubx_sbas = parseInt($(this).val());
|
||||||
});
|
});
|
||||||
|
|
||||||
// select current gps configuration
|
|
||||||
gps_protocol_e.val(MISC.gps_type);
|
|
||||||
gps_baudrate_e.val(SERIAL_CONFIG.gpsBaudRate);
|
|
||||||
gps_ubx_sbas_e.val(MISC.gps_ubx_sbas);
|
gps_ubx_sbas_e.val(MISC.gps_ubx_sbas);
|
||||||
|
|
||||||
|
|
||||||
// generate serial RX
|
// generate serial RX
|
||||||
var serialRXtypes = [
|
var serialRXtypes = [
|
||||||
'SPEKTRUM1024',
|
'SPEKTRUM1024',
|
||||||
|
@ -290,7 +302,11 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
|
||||||
MISC.multiwiicurrentoutput = ~~$('input[name="multiwiicurrentoutput"]').is(':checked'); // ~~ boolean to decimal conversion
|
MISC.multiwiicurrentoutput = ~~$('input[name="multiwiicurrentoutput"]').is(':checked'); // ~~ boolean to decimal conversion
|
||||||
|
|
||||||
function save_serial_config() {
|
function save_serial_config() {
|
||||||
|
if (CONFIG.apiVersion < 1.6) {
|
||||||
MSP.send_message(MSP_codes.MSP_SET_CF_SERIAL_CONFIG, MSP.crunch(MSP_codes.MSP_SET_CF_SERIAL_CONFIG), false, save_misc);
|
MSP.send_message(MSP_codes.MSP_SET_CF_SERIAL_CONFIG, MSP.crunch(MSP_codes.MSP_SET_CF_SERIAL_CONFIG), false, save_misc);
|
||||||
|
} else {
|
||||||
|
save_misc();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function save_misc() {
|
function save_misc() {
|
||||||
|
|
|
@ -35,6 +35,14 @@
|
||||||
background-color: #ececec;
|
background-color: #ececec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tab-ports .function input {
|
||||||
|
vertical-align: -2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-ports .function label {
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
.tab-ports select {
|
.tab-ports select {
|
||||||
border: 1px solid silver;
|
border: 1px solid silver;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,11 @@
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Identifier</td>
|
<td>Identifier</td>
|
||||||
<td>Scenario</td>
|
<td>Data</td>
|
||||||
|
<td>Logging</td>
|
||||||
|
<td>Telemetry</td>
|
||||||
|
<td>RX</td>
|
||||||
|
<td>GPS</td>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
@ -28,8 +32,25 @@
|
||||||
<td class="identifierCell">
|
<td class="identifierCell">
|
||||||
<p class="identifier"></p>
|
<p class="identifier"></p>
|
||||||
</td>
|
</td>
|
||||||
<td class="scenarioCell">
|
<td class="functionsCell-data">
|
||||||
<select class="scenario">
|
<select class="msp_baudrate">
|
||||||
|
<!-- list generated here -->
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td class="functionsCell-logging">
|
||||||
|
<select class="blackbox_baudrate">
|
||||||
|
<!-- list generated here -->
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td class="functionsCell-telemetry">
|
||||||
|
<select class="telemetry_baudrate">
|
||||||
|
<!-- list generated here -->
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td class="functionsCell-rx">
|
||||||
|
</td>
|
||||||
|
<td class="functionsCell-gps">
|
||||||
|
<select class="gps_baudrate">
|
||||||
<!-- list generated here -->
|
<!-- list generated here -->
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
|
|
|
@ -7,6 +7,48 @@ TABS.ports.initialize = function (callback, scrollPosition) {
|
||||||
|
|
||||||
var board_definition = {};
|
var board_definition = {};
|
||||||
|
|
||||||
|
var functionRules = [
|
||||||
|
{name: 'MSP', groups: ['data', 'msp'], maxPorts: 2},
|
||||||
|
{name: 'GPS', groups: ['gps'], maxPorts: 1},
|
||||||
|
{name: 'FrSky', groups: ['telemetry'], sharableWith: ['msp'], notSharableWith: ['blackbox'], maxPorts: 1},
|
||||||
|
{name: 'HoTT', groups: ['telemetry'], sharableWith: ['msp'], notSharableWith: ['blackbox'], maxPorts: 1},
|
||||||
|
{name: 'MSP', groups: ['telemetry'], sharableWith: ['msp'], notSharableWith: ['blackbox'], maxPorts: 1},
|
||||||
|
{name: 'SmartPort', groups: ['telemetry'], maxPorts: 1},
|
||||||
|
{name: 'Serial RX', groups: ['rx'], maxPorts: 1},
|
||||||
|
{name: 'Blackbox', groups: ['logging', 'blackbox'], sharableWith: ['msp'], notSharableWith: ['telemetry'], maxPorts: 1},
|
||||||
|
];
|
||||||
|
|
||||||
|
var mspBaudRates = [
|
||||||
|
'9600',
|
||||||
|
'19200',
|
||||||
|
'38400',
|
||||||
|
'57600',
|
||||||
|
'115200'
|
||||||
|
];
|
||||||
|
|
||||||
|
var gpsBaudRates = [
|
||||||
|
'9600',
|
||||||
|
'19200',
|
||||||
|
'38400',
|
||||||
|
'57600',
|
||||||
|
'115200'
|
||||||
|
];
|
||||||
|
|
||||||
|
var telemetryBaudRates = [
|
||||||
|
'AUTO',
|
||||||
|
'9600',
|
||||||
|
'19200',
|
||||||
|
'38400',
|
||||||
|
'57600',
|
||||||
|
'115200'
|
||||||
|
];
|
||||||
|
|
||||||
|
var blackboxBaudRates = [
|
||||||
|
'115200'
|
||||||
|
];
|
||||||
|
|
||||||
|
var columns = ['data', 'logging', 'gps', 'telemetry', 'rx'];
|
||||||
|
|
||||||
if (GUI.active_tab != 'ports') {
|
if (GUI.active_tab != 'ports') {
|
||||||
GUI.active_tab = 'ports';
|
GUI.active_tab = 'ports';
|
||||||
googleAnalytics.sendAppView('Ports');
|
googleAnalytics.sendAppView('Ports');
|
||||||
|
@ -25,22 +67,8 @@ TABS.ports.initialize = function (callback, scrollPosition) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function addSerialPortScenarios() {
|
function update_ui() {
|
||||||
|
|
||||||
var scenarioNames = [
|
|
||||||
'Unused',
|
|
||||||
'MSP, CLI, Telemetry (when armed), GPS Passthrough',
|
|
||||||
'GPS',
|
|
||||||
'Serial RX',
|
|
||||||
'Telemetry',
|
|
||||||
'MSP, CLI, GPS Passthrough',
|
|
||||||
'CLI',
|
|
||||||
'GPS Passthrough',
|
|
||||||
'MSP',
|
|
||||||
'SmartPort Telemetry',
|
|
||||||
'Blackbox',
|
|
||||||
'MSP, CLI, Blackbox (when armed), GPS Passthrough'
|
|
||||||
];
|
|
||||||
|
|
||||||
var portIdentifierToNameMapping = {
|
var portIdentifierToNameMapping = {
|
||||||
0: 'UART1',
|
0: 'UART1',
|
||||||
|
@ -52,10 +80,37 @@ TABS.ports.initialize = function (callback, scrollPosition) {
|
||||||
31: 'SOFTSERIAL2'
|
31: 'SOFTSERIAL2'
|
||||||
};
|
};
|
||||||
|
|
||||||
var scenario_e = $('#tab-ports-templates select.scenario');
|
var gps_baudrate_e = $('select.gps_baudrate');
|
||||||
|
for (var i = 0; i < gpsBaudRates.length; i++) {
|
||||||
|
gps_baudrate_e.append('<option value="' + gpsBaudRates[i] + '">' + gpsBaudRates[i] + '</option>');
|
||||||
|
}
|
||||||
|
|
||||||
for (var i = 0; i < scenarioNames.length; i++) {
|
var msp_baudrate_e = $('select.msp_baudrate');
|
||||||
scenario_e.append('<option value="' + i + '">' + scenarioNames[i] + '</option>');
|
for (var i = 0; i < mspBaudRates.length; i++) {
|
||||||
|
msp_baudrate_e.append('<option value="' + mspBaudRates[i] + '">' + mspBaudRates[i] + '</option>');
|
||||||
|
}
|
||||||
|
|
||||||
|
var telemetry_baudrate_e = $('select.telemetry_baudrate');
|
||||||
|
for (var i = 0; i < telemetryBaudRates.length; i++) {
|
||||||
|
telemetry_baudrate_e.append('<option value="' + telemetryBaudRates[i] + '">' + telemetryBaudRates[i] + '</option>');
|
||||||
|
}
|
||||||
|
|
||||||
|
var blackbox_baudrate_e = $('select.blackbox_baudrate');
|
||||||
|
for (var i = 0; i < blackboxBaudRates.length; i++) {
|
||||||
|
blackbox_baudrate_e.append('<option value="' + blackboxBaudRates[i] + '">' + blackboxBaudRates[i] + '</option>');
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var columnIndex = 0; columnIndex < columns.length; columnIndex++) {
|
||||||
|
var column = columns[columnIndex];
|
||||||
|
|
||||||
|
var functions_e = $('#tab-ports-templates .functionsCell-' + column);
|
||||||
|
|
||||||
|
for (var i = 0; i < functionRules.length; i++) {
|
||||||
|
if (functionRules[i].groups.indexOf(column) >= 0) {
|
||||||
|
functions_e.prepend('<span class="function"><input type="checkbox" id="checkbox-' + columnIndex + '-' + i + '" value="' + i + '" /><label for="checkbox-' + columnIndex + '-' + i + '"> ' + functionRules[i].name + '</label></span>');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var ports_e = $('.tab-ports .ports');
|
var ports_e = $('.tab-ports .ports');
|
||||||
|
@ -66,7 +121,8 @@ TABS.ports.initialize = function (callback, scrollPosition) {
|
||||||
|
|
||||||
var serialPort = SERIAL_CONFIG.ports[portIndex];
|
var serialPort = SERIAL_CONFIG.ports[portIndex];
|
||||||
|
|
||||||
port_configuration_e.find('select').val(serialPort.scenario);
|
// TODO check functions
|
||||||
|
// TODO set baudrate
|
||||||
port_configuration_e.find('.identifier').text(portIdentifierToNameMapping[serialPort.identifier])
|
port_configuration_e.find('.identifier').text(portIdentifierToNameMapping[serialPort.identifier])
|
||||||
|
|
||||||
port_configuration_e.data('index', portIndex);
|
port_configuration_e.data('index', portIndex);
|
||||||
|
@ -80,7 +136,7 @@ TABS.ports.initialize = function (callback, scrollPosition) {
|
||||||
|
|
||||||
localize();
|
localize();
|
||||||
|
|
||||||
addSerialPortScenarios();
|
update_ui();
|
||||||
|
|
||||||
$('a.save').click(on_save_handler);
|
$('a.save').click(on_save_handler);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue