mirror of
https://github.com/iNavFlight/inav-configurator.git
synced 2025-07-25 01:05:12 +03:00
Furter decouple the serial port handling from the ports tab
This commit is contained in:
parent
a65ff23f8d
commit
9f065fc1a6
4 changed files with 202 additions and 185 deletions
|
@ -87,6 +87,7 @@ sources.js = [
|
||||||
'./js/simple_smooth_filter.js',
|
'./js/simple_smooth_filter.js',
|
||||||
'./js/walking_average_filter.js',
|
'./js/walking_average_filter.js',
|
||||||
'./js/gui.js',
|
'./js/gui.js',
|
||||||
|
'./js/serialPortHelper.js',
|
||||||
'./js/msp/MSPCodes.js',
|
'./js/msp/MSPCodes.js',
|
||||||
'./js/msp/MSPHelper.js',
|
'./js/msp/MSPHelper.js',
|
||||||
'./js/msp/MSPchainer.js',
|
'./js/msp/MSPchainer.js',
|
||||||
|
|
|
@ -20,33 +20,6 @@ var mspHelper = (function (gui) {
|
||||||
'921600'
|
'921600'
|
||||||
];
|
];
|
||||||
|
|
||||||
self.SERIAL_PORT_FUNCTIONS = {
|
|
||||||
'MSP': 0,
|
|
||||||
'GPS': 1,
|
|
||||||
'TELEMETRY_FRSKY': 2,
|
|
||||||
'TELEMETRY_HOTT': 3,
|
|
||||||
'TELEMETRY_LTM': 4, // LTM replaced MSP
|
|
||||||
'TELEMETRY_SMARTPORT': 5,
|
|
||||||
'RX_SERIAL': 6,
|
|
||||||
'BLACKBOX': 7,
|
|
||||||
'TELEMETRY_MAVLINK': 8,
|
|
||||||
'TELEMETRY_IBUS': 9,
|
|
||||||
'RUNCAM_DEVICE_CONTROL': 10,
|
|
||||||
'TBS_SMARTAUDIO': 11,
|
|
||||||
'IRC_TRAMP': 12,
|
|
||||||
'OPFLOW': 14,
|
|
||||||
'LOG': 15,
|
|
||||||
'RANGEFINDER': 16,
|
|
||||||
'VTX_FFPV': 17,
|
|
||||||
'ESC': 18,
|
|
||||||
'GSM_SMS': 19,
|
|
||||||
'FRSKY_OSD': 20,
|
|
||||||
'DJI_FPV': 21,
|
|
||||||
'SBUS_OUTPUT': 22,
|
|
||||||
'SMARTPORT_MASTER': 23,
|
|
||||||
'MSP_DISPLAYPORT': 25,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Required for MSP_DEBUGMSG because console.log() doesn't allow omitting
|
// Required for MSP_DEBUGMSG because console.log() doesn't allow omitting
|
||||||
// the newline at the end, so we keep the pending message here until we find a
|
// the newline at the end, so we keep the pending message here until we find a
|
||||||
// '\0', then print it. Messages sent by MSP_DEBUGMSG are guaranteed to
|
// '\0', then print it. Messages sent by MSP_DEBUGMSG are guaranteed to
|
||||||
|
@ -849,7 +822,7 @@ var mspHelper = (function (gui) {
|
||||||
|
|
||||||
var serialPort = {
|
var serialPort = {
|
||||||
identifier: data.getUint8(offset),
|
identifier: data.getUint8(offset),
|
||||||
functions: mspHelper.serialPortFunctionMaskToFunctions(data.getUint32(offset + 1, true)),
|
functions: helper.serialPortHelper.maskToFunctions(data.getUint32(offset + 1, true)),
|
||||||
msp_baudrate: BAUD_RATES[data.getUint8(offset + 5)],
|
msp_baudrate: BAUD_RATES[data.getUint8(offset + 5)],
|
||||||
sensors_baudrate: BAUD_RATES[data.getUint8(offset + 6)],
|
sensors_baudrate: BAUD_RATES[data.getUint8(offset + 6)],
|
||||||
telemetry_baudrate: BAUD_RATES[data.getUint8(offset + 7)],
|
telemetry_baudrate: BAUD_RATES[data.getUint8(offset + 7)],
|
||||||
|
@ -1933,7 +1906,7 @@ var mspHelper = (function (gui) {
|
||||||
|
|
||||||
buffer.push(serialPort.identifier);
|
buffer.push(serialPort.identifier);
|
||||||
|
|
||||||
var functionMask = mspHelper.SERIAL_PORT_FUNCTIONSToMask(serialPort.functions);
|
var functionMask = helper.serialPortHelper.functionsToMask(serialPort.functions);
|
||||||
buffer.push(specificByte(functionMask, 0));
|
buffer.push(specificByte(functionMask, 0));
|
||||||
buffer.push(specificByte(functionMask, 1));
|
buffer.push(specificByte(functionMask, 1));
|
||||||
buffer.push(specificByte(functionMask, 2));
|
buffer.push(specificByte(functionMask, 2));
|
||||||
|
@ -2676,35 +2649,6 @@ var mspHelper = (function (gui) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* @return {number}
|
|
||||||
*/
|
|
||||||
self.SERIAL_PORT_FUNCTIONSToMask = function (functions) {
|
|
||||||
var mask = 0;
|
|
||||||
for (var index = 0; index < functions.length; index++) {
|
|
||||||
var key = functions[index];
|
|
||||||
var bitIndex = mspHelper.SERIAL_PORT_FUNCTIONS[key];
|
|
||||||
if (bitIndex >= 0) {
|
|
||||||
mask = bit_set(mask, bitIndex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return mask;
|
|
||||||
};
|
|
||||||
|
|
||||||
self.serialPortFunctionMaskToFunctions = function (functionMask) {
|
|
||||||
var functions = [];
|
|
||||||
|
|
||||||
var keys = Object.keys(mspHelper.SERIAL_PORT_FUNCTIONS);
|
|
||||||
for (var index = 0; index < keys.length; index++) {
|
|
||||||
var key = keys[index];
|
|
||||||
var bit = mspHelper.SERIAL_PORT_FUNCTIONS[key];
|
|
||||||
if (bit_check(functionMask, bit)) {
|
|
||||||
functions.push(key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return functions;
|
|
||||||
};
|
|
||||||
|
|
||||||
self.sendServoMixRules = function (onCompleteCallback) {
|
self.sendServoMixRules = function (onCompleteCallback) {
|
||||||
// TODO implement
|
// TODO implement
|
||||||
onCompleteCallback();
|
onCompleteCallback();
|
||||||
|
|
191
js/serialPortHelper.js
Normal file
191
js/serialPortHelper.js
Normal file
|
@ -0,0 +1,191 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var helper = helper || {};
|
||||||
|
|
||||||
|
helper.serialPortHelper = (function () {
|
||||||
|
|
||||||
|
let publicScope = {},
|
||||||
|
privateScope = {};
|
||||||
|
|
||||||
|
privateScope.namesGenerated = false;
|
||||||
|
|
||||||
|
// This is a list of all the rules for the serial ports as well as their names
|
||||||
|
privateScope.rules = [
|
||||||
|
{ name: 'MSP', groups: ['data', 'msp'], maxPorts: 2 },
|
||||||
|
{ name: 'GPS', groups: ['sensors'], maxPorts: 1, defaultBaud: 115200 },
|
||||||
|
{ name: 'TELEMETRY_FRSKY', groups: ['telemetry'], sharableWith: ['msp'], notSharableWith: ['blackbox'], maxPorts: 1 },
|
||||||
|
{ name: 'TELEMETRY_HOTT', groups: ['telemetry'], sharableWith: ['msp'], notSharableWith: ['blackbox'], maxPorts: 1 },
|
||||||
|
{ name: 'TELEMETRY_SMARTPORT', groups: ['telemetry'], maxPorts: 1 },
|
||||||
|
{ name: 'TELEMETRY_LTM', groups: ['telemetry'], sharableWith: ['msp'], notSharableWith: ['blackbox'], maxPorts: 1 },
|
||||||
|
{ name: 'RX_SERIAL', groups: ['rx'], maxPorts: 1 },
|
||||||
|
{ name: 'BLACKBOX', groups: ['peripherals'], sharableWith: ['msp'], notSharableWith: ['telemetry'], maxPorts: 1 },
|
||||||
|
{
|
||||||
|
name: 'TELEMETRY_MAVLINK',
|
||||||
|
groups: ['telemetry'],
|
||||||
|
sharableWith: ['msp'],
|
||||||
|
notSharableWith: ['blackbox'],
|
||||||
|
maxPorts: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'TELEMETRY_IBUS',
|
||||||
|
groups: ['telemetry'],
|
||||||
|
sharableWith: ['msp'],
|
||||||
|
notSharableWith: ['blackbox'],
|
||||||
|
maxPorts: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'RANGEFINDER',
|
||||||
|
groups: ['sensors'],
|
||||||
|
maxPorts: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'GSM_SMS',
|
||||||
|
groups: ['telemetry'],
|
||||||
|
maxPorts: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'RUNCAM_DEVICE_CONTROL',
|
||||||
|
groups: ['peripherals'],
|
||||||
|
maxPorts: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'TBS_SMARTAUDIO',
|
||||||
|
groups: ['peripherals'],
|
||||||
|
maxPorts: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'IRC_TRAMP',
|
||||||
|
groups: ['peripherals'],
|
||||||
|
maxPorts: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'VTX_FFPV',
|
||||||
|
groups: ['peripherals'],
|
||||||
|
maxPorts: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'ESC',
|
||||||
|
groups: ['peripherals'],
|
||||||
|
maxPorts: 1,
|
||||||
|
defaultBaud: 115200
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'OPFLOW',
|
||||||
|
groups: ['sensors'],
|
||||||
|
maxPorts: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'FRSKY_OSD',
|
||||||
|
groups: ['peripherals'],
|
||||||
|
maxPorts: 1,
|
||||||
|
defaultBaud: 250000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'DJI_FPV',
|
||||||
|
groups: ['peripherals'],
|
||||||
|
maxPorts: 1,
|
||||||
|
defaultBaud: 115200
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'MSP_DISPLAYPORT',
|
||||||
|
groups: ['peripherals'],
|
||||||
|
maxPorts: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'SMARTPORT_MASTER',
|
||||||
|
groups: ['peripherals'],
|
||||||
|
maxPorts: 1,
|
||||||
|
defaultBaud: 57600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'SBUS_OUTPUT',
|
||||||
|
groups: ['peripherals'],
|
||||||
|
maxPorts: 1,
|
||||||
|
defaultBaud: 115200
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
// This is a mapping of the function names to their IDs required by the firmware and MSP protocol
|
||||||
|
privateScope.functionIDs = {
|
||||||
|
'MSP': 0,
|
||||||
|
'GPS': 1,
|
||||||
|
'TELEMETRY_FRSKY': 2,
|
||||||
|
'TELEMETRY_HOTT': 3,
|
||||||
|
'TELEMETRY_LTM': 4, // LTM replaced MSP
|
||||||
|
'TELEMETRY_SMARTPORT': 5,
|
||||||
|
'RX_SERIAL': 6,
|
||||||
|
'BLACKBOX': 7,
|
||||||
|
'TELEMETRY_MAVLINK': 8,
|
||||||
|
'TELEMETRY_IBUS': 9,
|
||||||
|
'RUNCAM_DEVICE_CONTROL': 10,
|
||||||
|
'TBS_SMARTAUDIO': 11,
|
||||||
|
'IRC_TRAMP': 12,
|
||||||
|
'OPFLOW': 14,
|
||||||
|
'LOG': 15,
|
||||||
|
'RANGEFINDER': 16,
|
||||||
|
'VTX_FFPV': 17,
|
||||||
|
'ESC': 18,
|
||||||
|
'GSM_SMS': 19,
|
||||||
|
'FRSKY_OSD': 20,
|
||||||
|
'DJI_FPV': 21,
|
||||||
|
'SBUS_OUTPUT': 22,
|
||||||
|
'SMARTPORT_MASTER': 23,
|
||||||
|
'MSP_DISPLAYPORT': 25,
|
||||||
|
};
|
||||||
|
|
||||||
|
privateScope.generateNames = function () {
|
||||||
|
if (privateScope.namesGenerated) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < privateScope.rules.length; i++) {
|
||||||
|
privateScope.rules[i].displayName = chrome.i18n.getMessage('portsFunction_' + privateScope.rules[i].name);
|
||||||
|
}
|
||||||
|
|
||||||
|
privateScope.namesGenerated = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
publicScope.getRules = function () {
|
||||||
|
privateScope.generateNames();
|
||||||
|
|
||||||
|
return privateScope.rules;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {array} functions
|
||||||
|
* @returns {number}
|
||||||
|
*/
|
||||||
|
publicScope.functionsToMask = function (functions) {
|
||||||
|
let mask = 0;
|
||||||
|
for (let index = 0; index < functions.length; index++) {
|
||||||
|
let key = functions[index];
|
||||||
|
let bitIndex = privateScope.functionIDs[key];
|
||||||
|
if (bitIndex >= 0) {
|
||||||
|
mask = bit_set(mask, bitIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return mask;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {number} mask
|
||||||
|
* @returns {array}
|
||||||
|
*/
|
||||||
|
publicScope.maskToFunctions = function (mask) {
|
||||||
|
let functions = [];
|
||||||
|
|
||||||
|
let keys = Object.keys(privateScope.functionIDs);
|
||||||
|
for (let index = 0; index < keys.length; index++) {
|
||||||
|
let key = keys[index];
|
||||||
|
let bit = privateScope.functionIDs[key];
|
||||||
|
if (bit_check(mask, bit)) {
|
||||||
|
functions.push(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return functions;
|
||||||
|
};
|
||||||
|
|
||||||
|
return publicScope;
|
||||||
|
})();
|
135
tabs/ports.js
135
tabs/ports.js
|
@ -2,129 +2,8 @@
|
||||||
|
|
||||||
TABS.ports = {};
|
TABS.ports = {};
|
||||||
|
|
||||||
var portFunctionRules;
|
|
||||||
|
|
||||||
TABS.ports.initialize = function (callback) {
|
TABS.ports.initialize = function (callback) {
|
||||||
|
|
||||||
/* ** portFunctionRules Notes **
|
|
||||||
Do not set a defaultBaud for functions in the telemetry group.
|
|
||||||
These should default to AUTO, which is handled in the onchange function. The baud rate is then set by the firmware.
|
|
||||||
*/
|
|
||||||
portFunctionRules = [
|
|
||||||
{name: 'MSP', groups: ['data', 'msp'], maxPorts: 2},
|
|
||||||
{name: 'GPS', groups: ['sensors'], maxPorts: 1, defaultBaud: 115200},
|
|
||||||
{name: 'TELEMETRY_FRSKY', groups: ['telemetry'], sharableWith: ['msp'], notSharableWith: ['blackbox'], maxPorts: 1},
|
|
||||||
{name: 'TELEMETRY_HOTT', groups: ['telemetry'], sharableWith: ['msp'], notSharableWith: ['blackbox'], maxPorts: 1},
|
|
||||||
{name: 'TELEMETRY_SMARTPORT', groups: ['telemetry'], maxPorts: 1},
|
|
||||||
{name: 'TELEMETRY_LTM', groups: ['telemetry'], sharableWith: ['msp'], notSharableWith: ['blackbox'], maxPorts: 1},
|
|
||||||
{name: 'RX_SERIAL', groups: ['rx'], maxPorts: 1},
|
|
||||||
{name: 'BLACKBOX', groups: ['peripherals'], sharableWith: ['msp'], notSharableWith: ['telemetry'], maxPorts: 1}
|
|
||||||
];
|
|
||||||
|
|
||||||
portFunctionRules.push({
|
|
||||||
name: 'TELEMETRY_MAVLINK',
|
|
||||||
groups: ['telemetry'],
|
|
||||||
sharableWith: ['msp'],
|
|
||||||
notSharableWith: ['blackbox'],
|
|
||||||
maxPorts: 1
|
|
||||||
});
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Support for FlySky iBus Telemetry
|
|
||||||
*/
|
|
||||||
portFunctionRules.push({
|
|
||||||
name: 'TELEMETRY_IBUS',
|
|
||||||
groups: ['telemetry'],
|
|
||||||
sharableWith: ['msp'],
|
|
||||||
notSharableWith: ['blackbox'],
|
|
||||||
maxPorts: 1
|
|
||||||
});
|
|
||||||
|
|
||||||
portFunctionRules.push({
|
|
||||||
name: 'RANGEFINDER',
|
|
||||||
groups: ['sensors'],
|
|
||||||
maxPorts: 1 }
|
|
||||||
);
|
|
||||||
|
|
||||||
portFunctionRules.push({
|
|
||||||
name: 'GSM_SMS',
|
|
||||||
groups: ['telemetry'],
|
|
||||||
maxPorts: 1 }
|
|
||||||
);
|
|
||||||
|
|
||||||
// support configure RunCam Device
|
|
||||||
portFunctionRules.push({
|
|
||||||
name: 'RUNCAM_DEVICE_CONTROL',
|
|
||||||
groups: ['peripherals'],
|
|
||||||
maxPorts: 1 }
|
|
||||||
);
|
|
||||||
|
|
||||||
portFunctionRules.push({
|
|
||||||
name: 'TBS_SMARTAUDIO',
|
|
||||||
groups: ['peripherals'],
|
|
||||||
maxPorts: 1 }
|
|
||||||
);
|
|
||||||
portFunctionRules.push({
|
|
||||||
name: 'IRC_TRAMP',
|
|
||||||
groups: ['peripherals'],
|
|
||||||
maxPorts: 1 }
|
|
||||||
);
|
|
||||||
portFunctionRules.push({
|
|
||||||
name: 'VTX_FFPV',
|
|
||||||
groups: ['peripherals'],
|
|
||||||
maxPorts: 1 }
|
|
||||||
);
|
|
||||||
|
|
||||||
portFunctionRules.push({
|
|
||||||
name: 'OPFLOW',
|
|
||||||
groups: ['sensors'],
|
|
||||||
maxPorts: 1 }
|
|
||||||
);
|
|
||||||
|
|
||||||
portFunctionRules.push({
|
|
||||||
name: 'ESC',
|
|
||||||
groups: ['peripherals'],
|
|
||||||
maxPorts: 1,
|
|
||||||
defaultBaud: 115200 }
|
|
||||||
);
|
|
||||||
|
|
||||||
portFunctionRules.push({
|
|
||||||
name: 'FRSKY_OSD',
|
|
||||||
groups: ['peripherals'],
|
|
||||||
maxPorts: 1,
|
|
||||||
defaultBaud: 250000 }
|
|
||||||
);
|
|
||||||
|
|
||||||
portFunctionRules.push({
|
|
||||||
name: 'DJI_FPV',
|
|
||||||
groups: ['peripherals'],
|
|
||||||
maxPorts: 1,
|
|
||||||
defaultBaud: 115200 }
|
|
||||||
);
|
|
||||||
|
|
||||||
portFunctionRules.push({
|
|
||||||
name: 'MSP_DISPLAYPORT',
|
|
||||||
groups: ['peripherals'],
|
|
||||||
maxPorts: 1 }
|
|
||||||
);
|
|
||||||
|
|
||||||
portFunctionRules.push({
|
|
||||||
name: 'SMARTPORT_MASTER',
|
|
||||||
groups: ['peripherals'],
|
|
||||||
maxPorts: 1,
|
|
||||||
defaultBaud: 57600 }
|
|
||||||
);
|
|
||||||
portFunctionRules.push({
|
|
||||||
name: 'SBUS_OUTPUT',
|
|
||||||
groups: ['peripherals'],
|
|
||||||
maxPorts: 1,
|
|
||||||
defaultBaud: 115200 }
|
|
||||||
);
|
|
||||||
|
|
||||||
for (var i = 0; i < portFunctionRules.length; i++) {
|
|
||||||
portFunctionRules[i].displayName = chrome.i18n.getMessage('portsFunction_' + portFunctionRules[i].name);
|
|
||||||
}
|
|
||||||
|
|
||||||
var mspBaudRates = [
|
var mspBaudRates = [
|
||||||
'9600',
|
'9600',
|
||||||
'19200',
|
'19200',
|
||||||
|
@ -249,8 +128,8 @@ TABS.ports.initialize = function (callback) {
|
||||||
let functions_e_id = "portFunc-" + column + "-" + portIndex;
|
let functions_e_id = "portFunc-" + column + "-" + portIndex;
|
||||||
functions_e.attr("id", functions_e_id);
|
functions_e.attr("id", functions_e_id);
|
||||||
|
|
||||||
for (i = 0; i < portFunctionRules.length; i++) {
|
for (i = 0; i < helper.serialPortHelper.getRules().length; i++) {
|
||||||
var functionRule = portFunctionRules[i];
|
var functionRule = helper.serialPortHelper.getRules()[i];
|
||||||
var functionName = functionRule.name;
|
var functionName = functionRule.name;
|
||||||
|
|
||||||
if (functionRule.groups.indexOf(column) == -1) {
|
if (functionRule.groups.indexOf(column) == -1) {
|
||||||
|
@ -379,10 +258,12 @@ function updateDefaultBaud(baudSelect, column) {
|
||||||
let portName = section.find('.function-' + column).val();
|
let portName = section.find('.function-' + column).val();
|
||||||
let baudRate = (column === 'telemetry') ? "AUTO" : 115200;;
|
let baudRate = (column === 'telemetry') ? "AUTO" : 115200;;
|
||||||
|
|
||||||
for (i = 0; i < portFunctionRules.length; i++) {
|
let rules = helper.serialPortHelper.getRules();
|
||||||
if (portFunctionRules[i].name === portName) {
|
|
||||||
if (typeof portFunctionRules[i].defaultBaud !== 'undefined') {
|
for (i = 0; i < rules.length; i++) {
|
||||||
baudRate = portFunctionRules[i].defaultBaud;
|
if (rules[i].name === portName) {
|
||||||
|
if (typeof rules[i].defaultBaud !== 'undefined') {
|
||||||
|
baudRate = rules[i].defaultBaud;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue