From b4936958f81b997d99603859970c109e95ca341a Mon Sep 17 00:00:00 2001 From: Hydra Date: Sun, 26 Feb 2017 01:16:20 +0000 Subject: [PATCH 01/41] CF/BF - fix some usages of flightControllerVersion which should have used MSP API version. FYI: 3.1.0 = api 1.31 - https://github.com/betaflight/betaflight/blob/v3.1.6/src/main/msp/msp_protocol.h 3.0.1 = api 1.21 - https://github.com/betaflight/betaflight/blob/v3.0.1/src/main/io/msp_protocol.h 3.0.0 = api 1.20 - https://github.com/betaflight/betaflight/blob/v3.0.0/src/main/io/msp_protocol.h 2.9.1 = api 1.16 - https://github.com/betaflight/betaflight/blob/v2.9.1/src/main/io/serial_msp.h 2.8.0 = api 1.16 - https://github.com/betaflight/betaflight/blob/v.2.8.0/src/main/io/serial_msp.h 2.4.0 = api 1.16 - https://github.com/betaflight/betaflight/blob/v2.4.0/src/main/io/serial_msp.h --- js/Features.js | 14 ++++----- js/RateCurve.js | 2 +- js/msp/MSPHelper.js | 14 ++++----- js/serial_backend.js | 12 ++++---- tabs/adjustments.js | 2 +- tabs/configuration.js | 51 ++++++++++++++++++------------- tabs/motors.js | 2 +- tabs/onboard_logging.js | 4 +-- tabs/osd.js | 18 +++++------ tabs/pid_tuning.js | 68 ++++++++++++++++++++--------------------- tabs/ports.js | 4 +-- tabs/receiver.js | 22 ++++++++----- 12 files changed, 115 insertions(+), 98 deletions(-) diff --git a/js/Features.js b/js/Features.js index cbe598cb..a08ddad2 100644 --- a/js/Features.js +++ b/js/Features.js @@ -35,7 +35,7 @@ var Features = function (config) { ); } - if (semver.gte(config.apiVersion, "1.15.0")) { + if (semver.gte(CONFIG.apiVersion, "1.15.0")) { features.push( {bit: 8, group: 'rxFailsafe', name: 'FAILSAFE', haveTip: true} ); @@ -45,21 +45,21 @@ var Features = function (config) { ); } - if (semver.gte(config.apiVersion, "1.16.0")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { features.push( {bit: 21, group: 'other', name: 'TRANSPONDER', haveTip: true} ); } if (config.flightControllerVersion !== '') { - if (semver.gte(config.flightControllerVersion, "2.8.0")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { features.push( {bit: 22, group: 'other', name: 'AIRMODE'} ); } - if (semver.gte(config.flightControllerVersion, "2.8.0")) { - if (!semver.gte(config.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { + if (semver.lt(CONFIG.apiVersion, "1.20.0")) { features.push( {bit: 23, group: 'pidTuning', name: 'SUPEREXPO_RATES'} ); @@ -70,13 +70,13 @@ var Features = function (config) { } } - if (semver.gte(config.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { features.push( {bit: 18, group: 'other', name: 'OSD'} ); } - if (semver.gte(config.flightControllerVersion, "3.1.0")) { + if (semver.gte(CONFIG.apiVersion, "1.31.0")) { features.push( {bit: 27, group: 'other', name: 'ESC_SENSOR'} ) diff --git a/js/RateCurve.js b/js/RateCurve.js index 291f93c1..dfcc2ac6 100755 --- a/js/RateCurve.js +++ b/js/RateCurve.js @@ -92,7 +92,7 @@ RateCurve.prototype.rcCommandRawToDegreesPerSecond = function (rcData, rate, rcR var expoPower; var rcRateConstant; - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { expoPower = 3; rcRateConstant = 200; } else { diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js index 43245b12..35ebea42 100644 --- a/js/msp/MSPHelper.js +++ b/js/msp/MSPHelper.js @@ -75,7 +75,7 @@ MspHelper.prototype.process_data = function(dataHandler) { CONFIG.mode = data.readU32(); CONFIG.profile = data.readU8(); CONFIG.cpuload = data.readU16(); - if (semver.gt(CONFIG.flightControllerVersion, "2.9.1")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { CONFIG.numProfiles = data.readU8(); CONFIG.rateProfile = data.readU8(); @@ -178,7 +178,7 @@ MspHelper.prototype.process_data = function(dataHandler) { } if (semver.gte(CONFIG.apiVersion, "1.10.0")) { RC_tuning.RC_YAW_EXPO = parseFloat((data.readU8() / 100).toFixed(2)); - if (semver.gte(CONFIG.flightControllerVersion, "2.9.1")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { RC_tuning.rcYawRate = parseFloat((data.readU8() / 100).toFixed(2)); } else { RC_tuning.rcYawRate = 0; @@ -685,7 +685,7 @@ MspHelper.prototype.process_data = function(dataHandler) { ADVANCED_TUNING.yaw_p_limit = data.readU16(); ADVANCED_TUNING.deltaMethod = data.readU8(); ADVANCED_TUNING.vbatPidCompensation = data.readU8(); - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { ADVANCED_TUNING.ptermSetpointWeight = data.readU8(); ADVANCED_TUNING.dtermSetpointWeight = data.readU8(); ADVANCED_TUNING.toleranceBand = data.readU8(); @@ -1024,7 +1024,7 @@ MspHelper.prototype.crunch = function(code) { } if (semver.gte(CONFIG.apiVersion, "1.10.0")) { buffer.push8(Math.round(RC_tuning.RC_YAW_EXPO * 100)); - if (semver.gte(CONFIG.flightControllerVersion, "2.9.1")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { buffer.push8(Math.round(RC_tuning.rcYawRate * 100)); } } @@ -1209,7 +1209,7 @@ MspHelper.prototype.crunch = function(code) { } break; case MSPCodes.MSP_SET_PID_ADVANCED: - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { buffer.push16(ADVANCED_TUNING.rollPitchItermIgnoreRate) .push16(ADVANCED_TUNING.yawItermIgnoreRate) .push16(ADVANCED_TUNING.yaw_p_limit) @@ -1284,7 +1284,7 @@ MspHelper.prototype.setRawRx = function(channels) { MspHelper.prototype.dataflashRead = function(address, blockSize, onDataCallback) { var outData = [address & 0xFF, (address >> 8) & 0xFF, (address >> 16) & 0xFF, (address >> 24) & 0xFF]; - if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) { + if (semver.gte(CONFIG.apiVersion, "1.31.0")) { outData = outData.concat([blockSize & 0xFF, (blockSize >> 8) & 0xFF]); } @@ -1295,7 +1295,7 @@ MspHelper.prototype.dataflashRead = function(address, blockSize, onDataCallback) var headerSize = 4; var dataSize = response.data.buffer.byteLength - headerSize; var dataCompressionType = 0; - if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) { + if (semver.gte(CONFIG.apiVersion, "1.31.0")) { headerSize = headerSize + 3; dataSize = response.data.readU16(); dataCompressionType = response.data.readU8(); diff --git a/js/serial_backend.js b/js/serial_backend.js index 6bbbb1db..b045a8f0 100755 --- a/js/serial_backend.js +++ b/js/serial_backend.js @@ -74,7 +74,7 @@ $(document).ready(function () { // Reset various UI elements $('span.i2c-error').text(0); $('span.cycle-time').text(0); - if (CONFIG.flightControllerVersion !== '' && semver.gte(CONFIG.flightControllerVersion, "3.0.0")) + if (semver.gte(CONFIG.apiVersion, "1.20.0")) $('span.cpu-load').text(''); // unlock port select & baud @@ -271,12 +271,12 @@ function onConnect() { $('#tabs ul.mode-connected').show(); - if (semver.gte(CONFIG.flightControllerVersion, "2.9.1")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { MSP.send_message(MSPCodes.MSP_STATUS_EX, false, false); } else { MSP.send_message(MSPCodes.MSP_STATUS, false, false); - if (semver.gte(CONFIG.flightControllerVersion, "2.4.0")) { + if (CONFIG.flightControllerIdentifier === 'BTFL' && semver.gte(CONFIG.flightControllerVersion, "2.4.0")) { CONFIG.numProfiles = 2; $('.tab-pid_tuning select[name="profile"] .profile3').hide(); } else { @@ -460,10 +460,10 @@ function update_live_status() { if (GUI.active_tab != 'cli') { MSP.send_message(MSPCodes.MSP_BOXNAMES, false, false); - if (semver.gte(CONFIG.flightControllerVersion, "2.9.1")) - MSP.send_message(MSPCodes.MSP_STATUS_EX, false, false); + if (semver.gte(CONFIG.apiVersion, "1.32.0")) + MSP.send_message(MSPCodes.MSP_STATUS_EX, false, false); else - MSP.send_message(MSPCodes.MSP_STATUS, false, false); + MSP.send_message(MSPCodes.MSP_STATUS, false, false); MSP.send_message(MSPCodes.MSP_ANALOG, false, false); } diff --git a/tabs/adjustments.js b/tabs/adjustments.js index 12eeebe7..21e750c0 100644 --- a/tabs/adjustments.js +++ b/tabs/adjustments.js @@ -273,7 +273,7 @@ TABS.adjustments.cleanup = function (callback) { TABS.adjustments.adjust_template = function () { var availableFunctionCount; - if (semver.lt(CONFIG.flightControllerVersion, '3.1.0')) { + if (semver.lt(CONFIG.apiVersion, "1.31.0")) { availableFunctionCount = 21; // Available in betaflight 2.9 } else { availableFunctionCount = 24; // RC rate Yaw / D setpoint / D setpoint transition added to 3.1.0 diff --git a/tabs/configuration.js b/tabs/configuration.js index 26b74fcc..5168e10b 100644 --- a/tabs/configuration.js +++ b/tabs/configuration.js @@ -74,7 +74,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { function esc_protocol() { var next_callback = sensor_config; - if (semver.gte(CONFIG.flightControllerVersion, "2.8.1")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { MSP.send_message(MSPCodes.MSP_ADVANCED_CONFIG, false, false, next_callback); } else { next_callback(); @@ -83,7 +83,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { function sensor_config() { var next_callback = load_sensor_alignment; - if (semver.gte(CONFIG.flightControllerVersion, "2.8.2")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { MSP.send_message(MSPCodes.MSP_SENSOR_CONFIG, false, false, next_callback); } else { next_callback(); @@ -101,7 +101,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { function load_name() { var next_callback = load_battery; - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { MSP.send_message(MSPCodes.MSP_NAME, false, false, next_callback); } else { next_callback(); @@ -110,7 +110,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { function load_battery() { var next_callback = load_current; - if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) { + if (semver.gte(CONFIG.apiVersion, "1.31.0")) { MSP.send_message(MSPCodes.MSP_VOLTAGE_METER_CONFIG, false, false, next_callback); } else { next_callback(); @@ -119,7 +119,11 @@ TABS.configuration.initialize = function (callback, scrollPosition) { function load_current() { var next_callback = load_rx_config; - MSP.send_message(MSPCodes.MSP_CURRENT_METER_CONFIG, false, false, next_callback); + if (semver.gte(CONFIG.apiVersion, "1.31.0")) { + MSP.send_message(MSPCodes.MSP_CURRENT_METER_CONFIG, false, false, next_callback); + } else { + next_callback(); + } } function load_rx_config() { @@ -209,11 +213,11 @@ TABS.configuration.initialize = function (callback, scrollPosition) { 'MULTISHOT' ]; - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { escprotocols.push('BRUSHED'); } - if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) { + if (semver.gte(CONFIG.apiVersion, "1.31.0")) { escprotocols.push('DSHOT150'); escprotocols.push('DSHOT300'); escprotocols.push('DSHOT600'); @@ -343,13 +347,13 @@ TABS.configuration.initialize = function (callback, scrollPosition) { $('input[id="magHardwareSwitch"]').prop('checked', SENSOR_CONFIG.mag_hardware !== 1); // Only show these sections for supported FW - if (semver.lt(CONFIG.flightControllerVersion, "2.8.1")) { + if (semver.lt(CONFIG.apiVersion, "1.16.0")) { $('.selectProtocol').hide(); $('.checkboxPwm').hide(); $('.selectPidProcessDenom').hide(); } - if (semver.lt(CONFIG.flightControllerVersion, "2.8.2")) { + if (semver.lt(CONFIG.apiVersion, "1.16.0")) { $('.hardwareSelection').hide(); } @@ -362,7 +366,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { $('div.fpvCamAngleDegrees').hide(); } - if (semver.lt(CONFIG.flightControllerVersion, "3.0.0")) { + if (semver.lt(CONFIG.apiVersion, "1.20.0")) { $('.miscSettings').hide(); } @@ -444,11 +448,12 @@ TABS.configuration.initialize = function (callback, scrollPosition) { serialRXtypes.push('IBUS'); } - if (semver.gte(CONFIG.flightControllerVersion, "2.6.0")) { + if ((CONFIG.flightControllerIdentifier === 'BTFL' && semver.gte(CONFIG.flightControllerVersion, "2.6.0")) || + (CONFIG.flightControllerIdentifier === 'CLFL' && semver.gte(CONFIG.apiVersion, "1.31.0"))) { serialRXtypes.push('JETIEXBUS'); } - if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) { + if (semver.gte(CONFIG.apiVersion, "1.31.0")) { serialRXtypes.push('CRSF'); } @@ -504,7 +509,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { $('input[name="mincommand"]').val(MISC.mincommand); // fill battery - if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) { + if (semver.gte(CONFIG.apiVersion, "1.31.0")) { var batteryMeterTypes = [ 'Onboard ADC', 'ESC Sensor' @@ -536,7 +541,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { 'Virtual' ]; - if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) { + if (semver.gte(CONFIG.apiVersion, "1.31.0")) { currentMeterTypes.push('ESC Sensor'); } @@ -586,7 +591,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { if (BF_CONFIG.features.isEnabled('VBAT')) { $('.vbatmonitoring').show(); - if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) { + if (semver.gte(CONFIG.apiVersion, "1.31.0")) { $('select.batterymetertype').show(); if (MISC.batterymetertype !== 0) { @@ -795,7 +800,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } function save_esc_protocol() { var next_callback = save_acc_trim; - if (semver.gte(CONFIG.flightControllerVersion, "2.8.1")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { MSP.send_message(MSPCodes.MSP_SET_ADVANCED_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_ADVANCED_CONFIG), false, next_callback); } else { next_callback(); @@ -813,7 +818,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { function save_looptime_config() { var next_callback = save_sensor_config; - if (semver.lt(CONFIG.flightControllerVersion, "2.8.1")) { + if (semver.lt(CONFIG.apiVersion, "1.16.0")) { FC_CONFIG.loopTime = PID_ADVANCED_CONFIG.gyro_sync_denom * 125; MSP.send_message(MSPCodes.MSP_SET_LOOP_TIME, mspHelper.crunch(MSPCodes.MSP_SET_LOOP_TIME), false, next_callback); } else { @@ -823,7 +828,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { function save_sensor_config() { var next_callback = save_name; - if (semver.gte(CONFIG.flightControllerVersion, "2.8.2")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { SENSOR_CONFIG.acc_hardware = $('input[id="accHardwareSwitch"]').is(':checked') ? 0 : 1; SENSOR_CONFIG.baro_hardware = $('input[id="baroHardwareSwitch"]').is(':checked') ? 0 : 1; SENSOR_CONFIG.mag_hardware = $('input[id="magHardwareSwitch"]').is(':checked') ? 0 : 1; @@ -836,7 +841,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { function save_name() { var next_callback = save_battery; - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { CONFIG.name = $.trim($('input[name="vesselName"]').val()); MSP.send_message(MSPCodes.MSP_SET_NAME, mspHelper.crunch(MSPCodes.MSP_SET_NAME), false, next_callback); } else { @@ -846,7 +851,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { function save_battery() { var next_callback = save_current; - if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) { + if (semver.gte(CONFIG.apiVersion, "1.31.0")) { MSP.send_message(MSPCodes.MSP_SET_VOLTAGE_METER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_VOLTAGE_METER_CONFIG), false, next_callback); } else { next_callback(); @@ -855,7 +860,11 @@ TABS.configuration.initialize = function (callback, scrollPosition) { function save_current() { var next_callback = save_rx_config; - MSP.send_message(MSPCodes.MSP_SET_CURRENT_METER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_CURRENT_METER_CONFIG), false, next_callback); + if (semver.gte(CONFIG.apiVersion, "1.31.0")) { + MSP.send_message(MSPCodes.MSP_SET_CURRENT_METER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_CURRENT_METER_CONFIG), false, next_callback); + } else { + next_callback(); + } } function save_rx_config() { diff --git a/tabs/motors.js b/tabs/motors.js index 0f136db2..05121c21 100644 --- a/tabs/motors.js +++ b/tabs/motors.js @@ -37,7 +37,7 @@ TABS.motors.initialize = function (callback) { function esc_protocol() { var next_callback = get_motor_data; - if (semver.gte(CONFIG.flightControllerVersion, "2.8.1")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { MSP.send_message(MSPCodes.MSP_ADVANCED_CONFIG, false, false, next_callback); } else { next_callback(); diff --git a/tabs/onboard_logging.js b/tabs/onboard_logging.js index 2c0aa43a..155bb0db 100644 --- a/tabs/onboard_logging.js +++ b/tabs/onboard_logging.js @@ -31,7 +31,7 @@ TABS.onboard_logging.initialize = function (callback) { var load_name = function () { var next_callback = load_html; - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { MSP.send_message(MSPCodes.MSP_NAME, false, false, next_callback); } else { next_callback(); @@ -348,7 +348,7 @@ TABS.onboard_logging.initialize = function (callback) { function flash_save_begin() { if (GUI.connected_to) { if (BOARD.find_board_definition(CONFIG.boardIdentifier).vcp) { - if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) { + if (semver.gte(CONFIG.apiVersion, "1.31.0")) { self.blockSize = self.VCP_BLOCK_SIZE; } else { self.blockSize = self.VCP_BLOCK_SIZE_3_0; diff --git a/tabs/osd.js b/tabs/osd.js index fe9f8824..ece903db 100755 --- a/tabs/osd.js +++ b/tabs/osd.js @@ -434,7 +434,7 @@ OSD.constants = { OSD.chooseFields = function () { var F = OSD.constants.ALL_DISPLAY_FIELDS; // version 3.0.1 - if (semver.gte(CONFIG.flightControllerVersion, "3.0.1")) { + if (semver.gte(CONFIG.apiVersion, "1.21.0")) { OSD.constants.DISPLAY_FIELDS = [ F.RSSI_VALUE, F.MAIN_BATT_VOLTAGE, @@ -453,7 +453,7 @@ OSD.chooseFields = function () { F.GPS_SATS, F.ALTITUDE ]; - if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) { + if (semver.gte(CONFIG.apiVersion, "1.31.0")) { OSD.constants.DISPLAY_FIELDS = OSD.constants.DISPLAY_FIELDS.concat([ F.PID_ROLL, F.PID_PITCH, @@ -530,7 +530,7 @@ OSD.msp = { unpack: { position: function(bits, c) { var display_item = {}; - if (semver.gte(CONFIG.flightControllerVersion, "3.0.1")) { + if (semver.gte(CONFIG.apiVersion, "1.21.0")) { // size * y + x display_item.position = FONT.constants.SIZES.LINE * ((bits >> 5) & 0x001F) + (bits & 0x001F); display_item.isVisible = (bits & OSD.constants.VISIBLE) != 0; @@ -545,7 +545,7 @@ OSD.msp = { position: function(display_item) { var isVisible = display_item.isVisible; var position = display_item.position; - if (semver.gte(CONFIG.flightControllerVersion, "3.0.1")) { + if (semver.gte(CONFIG.apiVersion, "1.21.0")) { return (isVisible ? 0x0800 : 0) | (((position / FONT.constants.SIZES.LINE) & 0x001F) << 5) | (position % FONT.constants.SIZES.LINE); } else { return isVisible ? (position == -1 ? 0 : position): -1; @@ -555,7 +555,7 @@ OSD.msp = { }, encodeOther: function() { var result = [-1, OSD.data.video_system]; - if (semver.gte(CONFIG.flightControllerVersion, "3.0.1")) { + if (semver.gte(CONFIG.apiVersion, "1.21.0")) { result.push8(OSD.data.unit_mode); // watch out, order matters! match the firmware result.push8(OSD.data.alarms.rssi.value); @@ -578,7 +578,7 @@ OSD.msp = { d.compiled_in = view.readU8(); d.video_system = view.readU8(); - if (semver.gte(CONFIG.flightControllerVersion, "3.0.1")) { + if (semver.gte(CONFIG.apiVersion, "1.21.0")) { d.unit_mode = view.readU8(); d.alarms = {}; d.alarms['rssi'] = { display_name: 'Rssi', value: view.readU8() }; @@ -590,7 +590,7 @@ OSD.msp = { // start at the offset from the other fields while (view.offset < view.byteLength && d.display_items.length < OSD.constants.DISPLAY_FIELDS.length) { var v = null; - if (semver.gte(CONFIG.flightControllerVersion, "3.0.1")) { + if (semver.gte(CONFIG.apiVersion, "1.21.0")) { v = view.readU16(); } else { v = view.read16(); @@ -644,7 +644,7 @@ OSD.GUI.preview = { if (overflows_line < 0) { position += overflows_line; } - if (semver.gte(CONFIG.flightControllerVersion, "3.0.1")) { + if (semver.gte(CONFIG.apiVersion, "1.21.0")) { // unsigned now } else { if (position > OSD.data.display_size.total/2) { @@ -723,7 +723,7 @@ TABS.osd.initialize = function (callback) { }); }); - if (semver.gte(CONFIG.flightControllerVersion, "3.0.1")) { + if (semver.gte(CONFIG.apiVersion, "1.21.0")) { // units $('.units-container').show(); var $unitMode = $('.units').empty(); diff --git a/tabs/pid_tuning.js b/tabs/pid_tuning.js index 78a98cd7..4d8947e7 100755 --- a/tabs/pid_tuning.js +++ b/tabs/pid_tuning.js @@ -26,7 +26,7 @@ TABS.pid_tuning.initialize = function (callback) { }).then(function() { return MSP.promise(MSPCodes.MSP_PID); }).then(function() { - if (semver.gte(CONFIG.flightControllerVersion, "2.8.2")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { return MSP.promise(MSPCodes.MSP_PID_ADVANCED); } }).then(function() { @@ -35,7 +35,7 @@ TABS.pid_tuning.initialize = function (callback) { return MSP.promise(MSPCodes.MSP_FILTER_CONFIG); }).then(function() { var promise = true; - if (CONFIG.flightControllerIdentifier === "BTFL" && semver.gte(CONFIG.flightControllerVersion, "2.8.0")) { + if (CONFIG.flightControllerIdentifier === "BTFL" && semver.gte(CONFIG.apiVersion, "1.16.0")) { promise = MSP.promise(MSPCodes.MSP_BF_CONFIG); } @@ -53,7 +53,7 @@ TABS.pid_tuning.initialize = function (callback) { function pid_and_rc_to_form() { self.setProfile(); - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { self.setRateProfile(); } @@ -216,15 +216,15 @@ TABS.pid_tuning.initialize = function (callback) { $('.pid_tuning input[name="rc_expo"]').attr("rowspan", "3"); } - if (semver.gte(CONFIG.flightControllerVersion, "2.8.1")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { $('input[id="vbatpidcompensation"]').prop('checked', ADVANCED_TUNING.vbatPidCompensation !== 0); } - if (semver.gte(CONFIG.flightControllerVersion, "2.8.2")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { $('#pid-tuning .delta select').val(ADVANCED_TUNING.deltaMethod); } - if (semver.gte(CONFIG.flightControllerVersion, '2.9.0')) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { $('.pid_tuning input[name="rc_rate_yaw"]').val(RC_tuning.rcYawRate.toFixed(2)); $('.pid_filter input[name="gyroLowpassFrequency"]').val(FILTER_CONFIG.gyro_soft_lpf_hz); $('.pid_filter input[name="dtermLowpassFrequency"]').val(FILTER_CONFIG.dterm_lpf_hz); @@ -235,14 +235,14 @@ TABS.pid_tuning.initialize = function (callback) { $('.pid_tuning input[name="rc_rate_yaw"]').hide(); } - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0") - || semver.gte(CONFIG.flightControllerVersion, "2.8.0") && BF_CONFIG.features.isEnabled('SUPEREXPO_RATES')) { + if (semver.gte(CONFIG.apiVersion, "1.20.0") + || semver.gte(CONFIG.apiVersion, "1.16.0") && BF_CONFIG.features.isEnabled('SUPEREXPO_RATES')) { $('#pid-tuning .rate').text(chrome.i18n.getMessage("pidTuningSuperRate")); } else { $('#pid-tuning .rate').text(chrome.i18n.getMessage("pidTuningRate")); } - if (semver.gte(CONFIG.flightControllerVersion, '3.0.0')) { + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { $('.pid_filter input[name="gyroNotch1Frequency"]').val(FILTER_CONFIG.gyro_soft_notch_hz_1); $('.pid_filter input[name="gyroNotch1Cutoff"]').val(FILTER_CONFIG.gyro_soft_notch_cutoff_1); $('.pid_filter input[name="dTermNotchFrequency"]').val(FILTER_CONFIG.dterm_notch_hz); @@ -257,7 +257,7 @@ TABS.pid_tuning.initialize = function (callback) { $('.pid_filter .newFilter').hide(); } - if (semver.gte(CONFIG.flightControllerVersion, '3.0.1')) { + if (semver.gte(CONFIG.apiVersion, "1.21.0")) { $('.pid_filter input[name="gyroNotch2Frequency"]').val(FILTER_CONFIG.gyro_soft_notch_hz_2); $('.pid_filter input[name="gyroNotch2Cutoff"]').val(FILTER_CONFIG.gyro_soft_notch_cutoff_2); } else { @@ -350,19 +350,19 @@ TABS.pid_tuning.initialize = function (callback) { FILTER_CONFIG.dterm_lpf_hz = parseInt($('.pid_filter input[name="dtermLowpassFrequency"]').val()); FILTER_CONFIG.yaw_lpf_hz = parseInt($('.pid_filter input[name="yawLowpassFrequency"]').val()); - if (semver.gte(CONFIG.flightControllerVersion, "2.8.0") && !semver.gte(CONFIG.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0") && !semver.gte(CONFIG.apiVersion, "1.20.0")) { BF_CONFIG.features.updateData($('input[name="SUPEREXPO_RATES"]')); } - if (semver.gte(CONFIG.flightControllerVersion, "2.8.1")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { ADVANCED_TUNING.vbatPidCompensation = $('input[id="vbatpidcompensation"]').is(':checked') ? 1 : 0; } - if (semver.gte(CONFIG.flightControllerVersion, "2.8.2")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { ADVANCED_TUNING.deltaMethod = $('#pid-tuning .delta select').val(); } - if (semver.gte(CONFIG.flightControllerVersion, '3.0.0')) { + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { ADVANCED_TUNING.ptermSetpointWeight = parseInt($('input[name="ptermSetpoint-number"]').val() * 100); ADVANCED_TUNING.dtermSetpointWeight = parseInt($('input[name="dtermSetpoint-number"]').val() * 100); @@ -370,7 +370,7 @@ TABS.pid_tuning.initialize = function (callback) { FILTER_CONFIG.gyro_soft_notch_cutoff_1 = parseInt($('.pid_filter input[name="gyroNotch1Cutoff"]').val()); FILTER_CONFIG.dterm_notch_hz = parseInt($('.pid_filter input[name="dTermNotchFrequency"]').val()); FILTER_CONFIG.dterm_notch_cutoff = parseInt($('.pid_filter input[name="dTermNotchCutoff"]').val()); - if (semver.gte(CONFIG.flightControllerVersion, '3.0.1')) { + if (semver.gte(CONFIG.apiVersion, "1.21.0")) { FILTER_CONFIG.gyro_soft_notch_hz_2 = parseInt($('.pid_filter input[name="gyroNotch2Frequency"]').val()); FILTER_CONFIG.gyro_soft_notch_cutoff_2 = parseInt($('.pid_filter input[name="gyroNotch2Cutoff"]').val()); } @@ -447,7 +447,7 @@ TABS.pid_tuning.initialize = function (callback) { } var useLegacyCurve = false; - if (!semver.gte(CONFIG.flightControllerVersion, "2.8.0")) { + if (!semver.gte(CONFIG.apiVersion, "1.16.0")) { useLegacyCurve = true; } @@ -469,7 +469,7 @@ TABS.pid_tuning.initialize = function (callback) { } function process_html() { - if (semver.gte(CONFIG.flightControllerVersion, "2.8.0") && !semver.gte(CONFIG.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0") && !semver.gte(CONFIG.apiVersion, "1.20.0")) { BF_CONFIG.features.generateElements($('.tab-pid_tuning .features')); } else { $('.tab-pid_tuning .pidTuningFeatures').hide(); @@ -497,11 +497,11 @@ TABS.pid_tuning.initialize = function (callback) { self.currentRates.pitch_rate = RC_tuning.roll_pitch_rate; } - if (semver.lt(CONFIG.flightControllerVersion, "2.8.1")) { + if (semver.lt(CONFIG.apiVersion, "1.16.0")) { self.currentRates.rc_rate_yaw = self.currentRates.rc_rate; } - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { self.currentRates.superexpo = true; } @@ -566,7 +566,7 @@ TABS.pid_tuning.initialize = function (callback) { }); }); - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { $('.tab-pid_tuning select[name="rate_profile"]').change(function () { self.currentRateProfile = parseInt($(this).val()); self.updating = true; @@ -603,7 +603,7 @@ TABS.pid_tuning.initialize = function (callback) { $('#pid-tuning .dtermSetpoint').hide(); } - if (!semver.gte(CONFIG.flightControllerVersion, "2.8.2")) { + if (!semver.gte(CONFIG.apiVersion, "1.16.0")) { $('#pid-tuning .delta').hide(); $('.tab-pid_tuning .note').hide(); } @@ -620,7 +620,7 @@ TABS.pid_tuning.initialize = function (callback) { var pidController_e = $('select[name="controller"]'); - if (semver.lt(CONFIG.flightControllerVersion, "3.1.0")) { + if (semver.lt(CONFIG.apiVersion, "1.31.0")) { var pidControllerList; @@ -633,7 +633,7 @@ TABS.pid_tuning.initialize = function (callback) { {name: "MultiWii (2.3 - hybrid)"}, {name: "Harakiri"} ] - } else if (semver.lt(CONFIG.flightControllerVersion, "3.0.0")) { + } else if (semver.lt(CONFIG.apiVersion, "1.20.0")) { pidControllerList = [ {name: ""}, {name: "Integer"}, @@ -707,7 +707,7 @@ TABS.pid_tuning.initialize = function (callback) { updateNeeded = true; } - if (targetElement.attr('name') === 'rc_rate' && semver.lt(CONFIG.flightControllerVersion, "2.8.1")) { + if (targetElement.attr('name') === 'rc_rate' && semver.lt(CONFIG.apiVersion, "1.16.0")) { self.currentRates.rc_rate_yaw = targetValue; } @@ -823,13 +823,13 @@ TABS.pid_tuning.initialize = function (callback) { } }); - if (semver.gte(CONFIG.flightControllerVersion, "2.8.2")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { $('#pid-tuning .delta select').change(function() { self.setDirty(true); }); } - if (semver.lt(CONFIG.flightControllerVersion, "3.1.0")) { + if (semver.lt(CONFIG.apiVersion, "1.31.0")) { pidController_e.change(function () { self.setDirty(true); @@ -845,7 +845,7 @@ TABS.pid_tuning.initialize = function (callback) { Promise.resolve(true) .then(function () { var promise; - if (semver.gte(CONFIG.apiVersion, CONFIGURATOR.pidControllerChangeMinApiVersion) && semver.lt(CONFIG.flightControllerVersion, "3.1.0")) { + if (semver.gte(CONFIG.apiVersion, CONFIGURATOR.pidControllerChangeMinApiVersion) && semver.lt(CONFIG.apiVersion, "1.31.0")) { PID.controller = pidController_e.val(); promise = MSP.promise(MSPCodes.MSP_SET_PID_CONTROLLER, mspHelper.crunch(MSPCodes.MSP_SET_PID_CONTROLLER)); } @@ -853,17 +853,17 @@ TABS.pid_tuning.initialize = function (callback) { }).then(function () { return MSP.promise(MSPCodes.MSP_SET_PID, mspHelper.crunch(MSPCodes.MSP_SET_PID)); }).then(function () { - if (semver.gte(CONFIG.flightControllerVersion, "2.8.2")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { return MSP.promise(MSPCodes.MSP_SET_PID_ADVANCED, mspHelper.crunch(MSPCodes.MSP_SET_PID_ADVANCED)); } }).then(function () { - if (semver.gte(CONFIG.flightControllerVersion, "2.8.1")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { return MSP.promise(MSPCodes.MSP_SET_FILTER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_FILTER_CONFIG)); } }).then(function () { return MSP.promise(MSPCodes.MSP_SET_RC_TUNING, mspHelper.crunch(MSPCodes.MSP_SET_RC_TUNING)); }).then(function () { - if (semver.gte(CONFIG.flightControllerVersion, "2.8.0")) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { return MSP.promise(MSPCodes.MSP_SET_BF_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_BF_CONFIG)); } }).then(function () { @@ -973,7 +973,7 @@ TABS.pid_tuning.setDirty = function (isDirty) { self.dirty = isDirty; $('.tab-pid_tuning select[name="profile"]').prop('disabled', isDirty); - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { $('.tab-pid_tuning select[name="rate_profile"]').prop('disabled', isDirty); } }; @@ -982,7 +982,7 @@ TABS.pid_tuning.checkUpdateProfile = function (updateRateProfile) { var self = this; if (GUI.active_tab === 'pid_tuning') { - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0") + if (semver.gte(CONFIG.apiVersion, "1.20.0") && CONFIG.numProfiles === 2) { $('.tab-pid_tuning select[name="profile"] .profile3').hide(); } @@ -996,7 +996,7 @@ TABS.pid_tuning.checkUpdateProfile = function (updateRateProfile) { } var changedRateProfile = false; - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0") + if (semver.gte(CONFIG.apiVersion, "1.20.0") && updateRateProfile && self.currentRateProfile !== CONFIG.rateProfile) { self.setRateProfile(); @@ -1036,7 +1036,7 @@ TABS.pid_tuning.checkRC = function() { }; TABS.pid_tuning.updatePidControllerParameters = function () { - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0") && semver.lt(CONFIG.flightControllerVersion, "3.1.0") && $('.tab-pid_tuning select[name="controller"]').val() === '0') { + if (semver.gte(CONFIG.apiVersion, "1.20.0") && semver.lt(CONFIG.apiVersion, "1.31.0") && $('.tab-pid_tuning select[name="controller"]').val() === '0') { $('.pid_tuning .YAW_JUMP_PREVENTION').show(); $('#pid-tuning .delta').show(); diff --git a/tabs/ports.js b/tabs/ports.js index 16979bf0..de052a1e 100644 --- a/tabs/ports.js +++ b/tabs/ports.js @@ -30,7 +30,7 @@ TABS.ports.initialize = function (callback, scrollPosition) { functionRules.push(mavlinkFunctionRule); } - if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) { + if (semver.gte(CONFIG.apiVersion, "1.31.0")) { functionRules.push({ name: 'ESC_SENSOR', groups: ['sensors'], maxPorts: 1 }); functionRules.push({ name: 'TBS_SMARTAUDIO', groups: ['peripherals'], maxPorts: 1 }); } @@ -57,7 +57,7 @@ TABS.ports.initialize = function (callback, scrollPosition) { '250000' ]; - if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) { + if (semver.gte(CONFIG.apiVersion, "1.31.0")) { mspBaudRates = mspBaudRates.concat(['500000', '1000000']); } diff --git a/tabs/receiver.js b/tabs/receiver.js index f55e9eeb..2bbb0bb3 100644 --- a/tabs/receiver.js +++ b/tabs/receiver.js @@ -46,7 +46,7 @@ TABS.receiver.initialize = function (callback) { function load_rx_config() { var next_callback = load_html; - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { MSP.send_message(MSPCodes.MSP_RX_CONFIG, false, false, next_callback); } else { next_callback(); @@ -87,7 +87,7 @@ TABS.receiver.initialize = function (callback) { } - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { $('select[name="rcInterpolation-select"]').val(RX_CONFIG.rcInterpolation); $('input[name="rcInterpolationInterval-number"]').val(RX_CONFIG.rcInterpolationInterval); @@ -253,7 +253,7 @@ TABS.receiver.initialize = function (callback) { // catch rssi aux MISC.rssi_channel = parseInt($('select[name="rssi_channel"]').val()); - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { RX_CONFIG.rcInterpolation = parseInt($('select[name="rcInterpolation-select"]').val()); RX_CONFIG.rcInterpolationInterval = parseInt($('input[name="rcInterpolationInterval-number"]').val()); } @@ -273,7 +273,7 @@ TABS.receiver.initialize = function (callback) { function save_rx_config() { var next_callback = save_to_eeprom; - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { MSP.send_message(MSPCodes.MSP_SET_RX_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_RX_CONFIG), false, next_callback); } else { next_callback(); @@ -447,11 +447,19 @@ TABS.receiver.initModelPreview = function () { this.model = new Model($('.model_preview'), $('.model_preview canvas')); this.useSuperExpo = false; - if (semver.gte(CONFIG.flightControllerVersion, '2.8.0')) { + if (semver.gte(CONFIG.apiVersion, "1.16.0")) { this.useSuperExpo = BF_CONFIG.features.isEnabled('SUPEREXPO_RATES'); } - this.rateCurve = new RateCurve(CONFIG.flightControllerIdentifier !== 'BTFL' || semver.lt(CONFIG.flightControllerVersion, '2.8.0')); + var useOldRateCurve = false; + if (CONFIG.flightControllerIdentifier == 'CLFL' && semver.lt(CONFIG.apiVersion, '2.0.0') { + useOldRateCurve = true; + } + if (CONFIG.flightControllerIdentifier == 'BTFL' && semver.lt(CONFIG.flightControllerVersionn, '2.8.0') { + useOldRateCurve = true; + } + + this.rateCurve = new RateCurve(useOldRateCurve); $(window).on('resize', $.proxy(this.model.resize, this.model)); }; @@ -485,7 +493,7 @@ TABS.receiver.cleanup = function (callback) { }; TABS.receiver.updateRcInterpolationParameters = function () { - if (semver.gte(CONFIG.flightControllerVersion, "3.0.0")) { + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { if ($('select[name="rcInterpolation-select"]').val() === '3') { $('.tab-receiver .rcInterpolationInterval').show(); } else { From fc4af38fbd4f3a8ec2ce801c8c0c08131ee572e8 Mon Sep 17 00:00:00 2001 From: Hydra Date: Sun, 26 Feb 2017 16:46:24 +0000 Subject: [PATCH 02/41] typo fixes for 305f827654057618858e10f48a0473fd50d748ca --- tabs/receiver.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tabs/receiver.js b/tabs/receiver.js index 2bbb0bb3..a6b3df3c 100644 --- a/tabs/receiver.js +++ b/tabs/receiver.js @@ -452,10 +452,10 @@ TABS.receiver.initModelPreview = function () { } var useOldRateCurve = false; - if (CONFIG.flightControllerIdentifier == 'CLFL' && semver.lt(CONFIG.apiVersion, '2.0.0') { + if (CONFIG.flightControllerIdentifier == 'CLFL' && semver.lt(CONFIG.apiVersion, '2.0.0')) { useOldRateCurve = true; } - if (CONFIG.flightControllerIdentifier == 'BTFL' && semver.lt(CONFIG.flightControllerVersionn, '2.8.0') { + if (CONFIG.flightControllerIdentifier == 'BTFL' && semver.lt(CONFIG.flightControllerVersion, '2.8.0')) { useOldRateCurve = true; } From ff6b3e49bea339ad9450883a07f1b93a73adc92a Mon Sep 17 00:00:00 2001 From: mikeller Date: Fri, 24 Feb 2017 09:39:38 +1300 Subject: [PATCH 03/41] Replaced accelerometer graph on motors tab with gyroscope graph. --- _locales/en/messages.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index f8ed4ab9..a708eef1 100755 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -1258,6 +1258,12 @@ "motorsGyroscopeReset": { "message": "[Reset]" }, + "motorsGyroscope": { + "message": "Gyroscope - " + }, + "motorsGyroscopeReset": { + "message": "[Reset]" + }, "gpsHead": { "message": "GPS" }, From c09416de51f55968e36aa40efb3c30933fe0c69b Mon Sep 17 00:00:00 2001 From: keyser84 Date: Thu, 2 Mar 2017 22:31:39 +0000 Subject: [PATCH 04/41] Replace invalid filesystem characters --- js/backup_restore.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/js/backup_restore.js b/js/backup_restore.js index 3de8d816..0257562d 100644 --- a/js/backup_restore.js +++ b/js/backup_restore.js @@ -168,6 +168,9 @@ function configuration_backup(callback) { var filename = generateFilename(prefix, suffix); + // replace invalid filesystem characters + now = now.replace(new RegExp(':', 'g'), '_'); + // create or load the file chrome.fileSystem.chooseEntry({type: 'saveFile', suggestedName: filename, accepts: [{ extensions: [suffix] }]}, function (fileEntry) { if (chrome.runtime.lastError) { From 57b9c58a22490cfafcd777a36b2174e48041d027 Mon Sep 17 00:00:00 2001 From: Michael Keller Date: Fri, 3 Mar 2017 13:35:24 +1300 Subject: [PATCH 05/41] Fixed backup / restore, unified file name generation. --- js/backup_restore.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/js/backup_restore.js b/js/backup_restore.js index 0257562d..3de8d816 100644 --- a/js/backup_restore.js +++ b/js/backup_restore.js @@ -168,9 +168,6 @@ function configuration_backup(callback) { var filename = generateFilename(prefix, suffix); - // replace invalid filesystem characters - now = now.replace(new RegExp(':', 'g'), '_'); - // create or load the file chrome.fileSystem.chooseEntry({type: 'saveFile', suggestedName: filename, accepts: [{ extensions: [suffix] }]}, function (fileEntry) { if (chrome.runtime.lastError) { From 49100d29bd2ed7482e7470693f6297ec14a8da1b Mon Sep 17 00:00:00 2001 From: Hydra Date: Sun, 19 Mar 2017 23:03:28 +0000 Subject: [PATCH 06/41] CF/BF - Update configurator for API 1.33.0. --- _locales/en/messages.json | 65 ++++-- eventPage.js | 2 +- js/backup_restore.js | 65 +++--- js/fc.js | 141 +++++++++---- js/model.js | 2 +- js/msp.js | 3 + js/msp/MSPCodes.js | 50 +++-- js/msp/MSPHelper.js | 396 ++++++++++++++++++++++------------ js/serial_backend.js | 25 +-- main.js | 8 +- tabs/configuration.css | 2 +- tabs/configuration.html | 253 +++++++++++----------- tabs/configuration.js | 415 ++++++++++++++++++------------------ tabs/failsafe.html | 31 +-- tabs/failsafe.js | 433 ++++++++++++++++++-------------------- tabs/logging.js | 12 +- tabs/motors.js | 63 +++--- tabs/onboard_logging.js | 44 +--- tabs/pid_tuning.js | 40 +--- tabs/receiver.css | 1 + tabs/receiver.html | 56 +++-- tabs/receiver.js | 58 ++--- tabs/servos.js | 12 +- tabs/setup.js | 10 +- 24 files changed, 1168 insertions(+), 1019 deletions(-) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index a708eef1..4ec3b646 100755 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -667,14 +667,17 @@ "configurationThrottleMinimumCommandHelp": { "message": "This is the value that is sent to the ESCs when the craft is disarmed. Set this to a value that has the motors stopped (1000 for most ESCs)." }, - "configurationBatteryVoltage": { - "message": "Battery Voltage" + "configurationBattery": { + "message": "Battery" }, - "configurationBatteryCurrent": { - "message": "Battery Current" + "configurationVoltage": { + "message": "Voltage" }, - "configurationBatteryMeterType": { - "message": "Battery Meter Type" + "configurationCurrent": { + "message": "Current" + }, + "configurationBatteryVoltageMeterSource": { + "message": "Voltage Meter Source" }, "configurationBatteryMinimum": { "message": "Minimum Cell Voltage" @@ -688,8 +691,8 @@ "configurationBatteryScale": { "message": "Voltage Scale" }, - "configurationCurrentMeterType": { - "message": "Current Meter Type" + "configurationBatteryCurrentMeterSource": { + "message": "Current Meter Source" }, "configurationCurrent": { "message": "Current Sensor" @@ -700,11 +703,8 @@ "configurationCurrentOffset": { "message": "Offset in millivolt steps" }, - "configurationBatteryMultiwiiCurrent": { - "message": "Enable support for legacy Multiwii MSP current output" - }, "configuration3d": { - "message": "3D" + "message": "3D ESC/Motor Features" }, "configuration3dDeadbandLow": { "message": "3D Deadband Low" @@ -984,11 +984,23 @@ "receiverThrottleExpo": { "message": "Throttle EXPO" }, - "receiverMidRc": { - "message": "Center value for RC channels" + "receiverStickMin": { + "message": "Stick Min" }, - "receiverMidRcHelp": { - "message": "This is the center value for all RC channels. Set this to the value that your transmitter sends when the stick is centered for a channel. To adjust the thrust at throttle mid position, change the 'Trottle MID' value on the PID Tuning tab." + "receiverHelpStickMin": { + "message": "The value (in us) used to determine if a stick is low." + }, + "receiverStickCenter": { + "message": "Stick Center" + }, + "receiverHelpStickCenter": { + "message": "The value (in us) used to determine if a stick is centered." + }, + "receiverStickMax": { + "message": "Stick Max" + }, + "receiverHelpStickMax": { + "message": "The value (in us) used to determine if a stick is high." }, "receiverDeadband": { "message": "RC Deadband" @@ -996,12 +1008,18 @@ "receiverHelpDeadband": { "message": "These are values (in us) by how much RC input can be different before it's considered valid. For transmitters with jitter on outputs, this value can be increased if rc inputs twitch while idle." }, - "receiverHelpYawDeadband": { - "message": "These are values (in us) by how much RC input can be different before it's considered valid. For transmitters with jitter on outputs, this value can be increased if rc inputs twitch while idle. This setting is for Yaw only." - }, "receiverYawDeadband": { "message": "Yaw Deadband" }, + "receiverHelpYawDeadband": { + "message": "These are values (in us) by how much RC input can be different before it's considered valid. For transmitters with jitter on outputs, this value can be increased if rc inputs twitch while idle. This setting is for Yaw only." + }, + "recevier3dDeadbandThrottle": { + "message": "3D Throttle Deadband" + }, + "receiverHelp3dDeadbandThrottle": { + "message": "These are values (in us). To widen the neutral zone increased the value. This setting is for 3D throttle only." + }, "receiverChannelMap": { "message": "Channel Map" }, @@ -1948,10 +1966,13 @@ "pidTuningRatesTip": { "message": "Play with the rates and see how those affect the stick curve" }, - "configurationMisc": { - "message": "Misc" + "configurationCamera": { + "message": "Camera" }, - "configurationVesselName": { + "configurationPersonalization": { + "message": "Personalization" + }, + "craftName": { "message": "Craft name" }, "configurationFpvCamAngleDegrees": { diff --git a/eventPage.js b/eventPage.js index 2747f787..55e578a1 100755 --- a/eventPage.js +++ b/eventPage.js @@ -19,7 +19,7 @@ function startApplication() { // save connectionId in separate variable before createdWindow.contentWindow is destroyed var connectionId = createdWindow.contentWindow.serial.connectionId, valid_connection = createdWindow.contentWindow.CONFIGURATOR.connectionValid, - mincommand = createdWindow.contentWindow.MISC.mincommand; + mincommand = createdWindow.contentWindow.MOTOR_CONFIG.mincommand; if (connectionId && valid_connection) { // code below is handmade MSP message (without pretty JS wrapper), it behaves exactly like MSP.send_message diff --git a/js/backup_restore.js b/js/backup_restore.js index 3de8d816..c16e5fc4 100644 --- a/js/backup_restore.js +++ b/js/backup_restore.js @@ -22,9 +22,7 @@ function configuration_backup(callback) { ]; function update_profile_specific_data_list() { - if (semver.lt(CONFIG.apiVersion, "1.12.0")) { - profileSpecificData.push(MSPCodes.MSP_CHANNEL_FORWARDING); - } else { + if (semver.gt(CONFIG.apiVersion, "1.12.0")) { profileSpecificData.push(MSPCodes.MSP_SERVO_MIX_RULES); } if (semver.gte(CONFIG.apiVersion, "1.15.0")) { @@ -71,7 +69,7 @@ function configuration_backup(callback) { }); if (semver.gte(CONFIG.apiVersion, "1.15.0")) { - configuration.profiles[fetchingProfile].RCdeadband = jQuery.extend(true, {}, RC_deadband); + configuration.profiles[fetchingProfile].RCdeadband = jQuery.extend(true, {}, RC_DEADBAND_CONFIG); } codeKey = 0; fetchingProfile++; @@ -89,9 +87,7 @@ function configuration_backup(callback) { } var uniqueData = [ - MSPCodes.MSP_MISC, MSPCodes.MSP_RX_MAP, - MSPCodes.MSP_BF_CONFIG, MSPCodes.MSP_CF_SERIAL_CONFIG, MSPCodes.MSP_LED_STRIP_CONFIG, MSPCodes.MSP_LED_COLORS @@ -103,7 +99,7 @@ function configuration_backup(callback) { uniqueData.push(MSPCodes.MSP_ARMING_CONFIG); } if (semver.gte(CONFIG.apiVersion, "1.14.0")) { - uniqueData.push(MSPCodes.MSP_3D); + uniqueData.push(MSPCodes.MSP_MOTOR_3D_CONFIG); } if (semver.gte(CONFIG.apiVersion, "1.15.0")) { uniqueData.push(MSPCodes.MSP_SENSOR_ALIGNMENT); @@ -128,9 +124,7 @@ function configuration_backup(callback) { fetch_unique_data_item(); }); } else { - configuration.MISC = jQuery.extend(true, {}, MISC); configuration.RCMAP = jQuery.extend(true, [], RC_MAP); - configuration.BF_CONFIG = jQuery.extend(true, {}, BF_CONFIG); configuration.SERIAL_CONFIG = jQuery.extend(true, {}, SERIAL_CONFIG); configuration.LED_STRIP = jQuery.extend(true, [], LED_STRIP); configuration.LED_COLORS = jQuery.extend(true, [], LED_COLORS); @@ -143,7 +137,7 @@ function configuration_backup(callback) { configuration.ARMING_CONFIG = jQuery.extend(true, {}, ARMING_CONFIG); } if (semver.gte(CONFIG.apiVersion, "1.14.0")) { - configuration._3D = jQuery.extend(true, {}, _3D); + configuration.MOTOR_3D_CONFIG = jQuery.extend(true, {}, MOTOR_3D_CONFIG); } if (semver.gte(CONFIG.apiVersion, "1.15.0")) { configuration.SENSOR_ALIGNMENT = jQuery.extend(true, {}, SENSOR_ALIGNMENT); @@ -151,6 +145,10 @@ function configuration_backup(callback) { configuration.FAILSAFE_CONFIG = jQuery.extend(true, {}, FAILSAFE_CONFIG); configuration.RXFAIL_CONFIG = jQuery.extend(true, [], RXFAIL_CONFIG); } + if (semver.gte(CONFIG.apiVersion, "1.33.0")) { + configuration.RSSI_CONFIG = jQuery.extend(true, {}, RSSI_CONFIG); + configuration.FEATURE_CONFIG = jQuery.extend(true, {}, FEATURE_CONFIG); + } save(); } @@ -163,13 +161,17 @@ function configuration_backup(callback) { function save() { var chosenFileEntry = null; - var prefix = 'betaflight_backup'; + var prefix = CONFIG.flightControllerIdentifier + '_backup'; var suffix = 'json'; var filename = generateFilename(prefix, suffix); + var accepts = [{ + extensions: [suffix] + }]; + // create or load the file - chrome.fileSystem.chooseEntry({type: 'saveFile', suggestedName: filename, accepts: [{ extensions: [suffix] }]}, function (fileEntry) { + chrome.fileSystem.chooseEntry({type: 'saveFile', suggestedName: filename, accepts: accepts}, function (fileEntry) { if (chrome.runtime.lastError) { console.error(chrome.runtime.lastError.message); return; @@ -328,7 +330,7 @@ function configuration_restore(callback) { if (!compareVersions(migratedVersion, '0.59.1')) { // variable was renamed - configuration.MISC.rssi_channel = configuration.MISC.rssi_aux_channel; + configuration.RSSI_CONFIG.channel = configuration.MISC.rssi_aux_channel; configuration.MISC.rssi_aux_channel = undefined; migratedVersion = '0.59.1'; @@ -527,11 +529,11 @@ function configuration_restore(callback) { if (compareVersions(migratedVersion, '0.66.0') && !compareVersions(configuration.apiVersion, '1.14.0')) { // api 1.14 exposes 3D configuration - if (configuration._3D == undefined) { - configuration._3D = { + if (configuration.MOTOR_3D_CONFIG == undefined) { + configuration.MOTOR_3D_CONFIG = { deadband3d_low: 1406, deadband3d_high: 1514, - neutral3d: 1460, + neutral: 1460, deadband3d_throttle: 50 }; } @@ -566,9 +568,9 @@ function configuration_restore(callback) { configuration.RX_CONFIG = { serialrx_provider: 0, spektrum_sat_bind: 0, - midrc: 1500, - mincheck: 1100, - maxcheck: 1900, + stick_center: 1500, + stick_min: 1100, + stick_max: 1900, rx_min_usec: 885, rx_max_usec: 2115 }; @@ -607,8 +609,8 @@ function configuration_restore(callback) { if (compareVersions(migratedVersion, '1.2.0')) { // old version of the configurator incorrectly had a 'disabled' option for GPS SBAS mode. - if (MISC.gps_ubx_sbas < 0) { - MISC.gps_ubx_sbas = 0; + if (GPS_CONFIG.ublox_sbas < 0) { + GPS_CONFIG.ublox_sbas = 0; } migratedVersion = '1.2.0'; @@ -681,7 +683,7 @@ function configuration_restore(callback) { SERVO_RULES = configuration.profiles[profile].ServoRules; MODE_RANGES = configuration.profiles[profile].ModeRanges; ADJUSTMENT_RANGES = configuration.profiles[profile].AdjustmentRanges; - RC_deadband = configuration.profiles[profile].RCdeadband; + RC_DEADBAND_CONFIG = configuration.profiles[profile].RCdeadband; } function upload_using_specific_commands() { @@ -729,9 +731,7 @@ function configuration_restore(callback) { var codeKey = 0; var uniqueData = [ - MSPCodes.MSP_SET_MISC, MSPCodes.MSP_SET_RX_MAP, - MSPCodes.MSP_SET_BF_CONFIG, MSPCodes.MSP_SET_CF_SERIAL_CONFIG ]; @@ -741,30 +741,41 @@ function configuration_restore(callback) { uniqueData.push(MSPCodes.MSP_SET_ARMING_CONFIG); } if (semver.gte(CONFIG.apiVersion, "1.14.0")) { - uniqueData.push(MSPCodes.MSP_SET_3D); + uniqueData.push(MSPCodes.MSP_SET_MOTOR_3D_CONFIG); } if (semver.gte(CONFIG.apiVersion, "1.15.0")) { uniqueData.push(MSPCodes.MSP_SET_SENSOR_ALIGNMENT); uniqueData.push(MSPCodes.MSP_SET_RX_CONFIG); uniqueData.push(MSPCodes.MSP_SET_FAILSAFE_CONFIG); } + if (semver.gte(CONFIG.apiVersion, "1.33.0")) { + uniqueData.push(MSPCodes.MSP_SET_FEATURE_CONFIG); + uniqueData.push(MSPCodes.MSP_SET_MOTOR_CONFIG); + uniqueData.push(MSPCodes.MSP_SET_GPS_CONFIG); + uniqueData.push(MSPCodes.MSP_SET_COMPASS_CONFIG); + uniqueData.push(MSPCodes.MSP_SET_RSSI_CONFIG); + } } function load_objects() { MISC = configuration.MISC; RC_MAP = configuration.RCMAP; - BF_CONFIG = configuration.BF_CONFIG; SERIAL_CONFIG = configuration.SERIAL_CONFIG; LED_STRIP = configuration.LED_STRIP; LED_COLORS = configuration.LED_COLORS; LED_MODE_COLORS = configuration.LED_MODE_COLORS; ARMING_CONFIG = configuration.ARMING_CONFIG; FC_CONFIG = configuration.FC_CONFIG; - _3D = configuration._3D; + MOTOR_3D_CONFIG = configuration.MOTOR_3D_CONFIG; SENSOR_ALIGNMENT = configuration.SENSOR_ALIGNMENT; RX_CONFIG = configuration.RX_CONFIG; FAILSAFE_CONFIG = configuration.FAILSAFE_CONFIG; RXFAIL_CONFIG = configuration.RXFAIL_CONFIG; + FEATURE_CONFIG = configuration.FEATURE_CONFIG; + MOTOR_CONFIG = configuration.MOTOR_CONFIG; + GPS_CONFIG = configuration.GPS_CONFIG; + COMPASS_CONFIG = configuration.COMPASS_CONFIG; + RSSI_CONFIG = configuration.RSSI_CONFIG; } function send_unique_data_item() { diff --git a/js/fc.js b/js/fc.js index 1e73ff49..d83ad3f5 100644 --- a/js/fc.js +++ b/js/fc.js @@ -1,8 +1,11 @@ 'use strict'; // define all the global variables that are uses to hold FC state -var CONFIG; -var BF_CONFIG; +var CONFIG; // FIXME rename to STATUS +var FEATURE_CONFIG; +//var BF_CONFIG; // FIXME remove all references to this and delete it +var MIXER_CONFIG; +var BOARD_ALIGNMENT_CONFIG; var LED_STRIP; var LED_COLORS; var LED_MODE_COLORS; @@ -24,15 +27,25 @@ var MOTOR_DATA; var SERVO_DATA; var GPS_DATA; var ANALOG; +var VOLTAGE_METERS; +var VOLTAGE_METER_CONFIGS; +var CURRENT_METERS; +var CURRENT_METER_CONFIGS; +var BATTERY_STATE; +var BATTERY_CONFIG; var ARMING_CONFIG; var FC_CONFIG; -var MISC; -var _3D; +var MOTOR_CONFIG; +var GPS_CONFIG; +var COMPASS_CONFIG; +var RSSI_CONFIG; +//var MISC; // FIXME remove all references to this and delete it +var MOTOR_3D_CONFIG; var DATAFLASH; var SDCARD; var BLACKBOX; var TRANSPONDER; -var RC_deadband; +var RC_DEADBAND_CONFIG; var SENSOR_ALIGNMENT; var RX_CONFIG; var FAILSAFE_CONFIG; @@ -64,18 +77,33 @@ var FC = { numProfiles: 3, rateProfile: 0 }; - - BF_CONFIG = { - mixerConfiguration: 0, - features: new Features(CONFIG), - board_align_roll: 0, - board_align_pitch: 0, - board_align_yaw: 0, - currentscale: 0, - currentoffset: 0, - currentmetertype: 0, - batterycapacity: 0, + + FEATURE_CONFIG = { + features: 0, }; + + MIXER_CONFIG = { + mixer: 0, + }; + + BOARD_ALIGNMENT_CONFIG = { + roll: 0, + pitch: 0, + yaw: 0, + }; + + // FIXME remove all references to this and delete it +// BF_CONFIG = { +// mixer: 0, +// features: new Features(CONFIG), +// board_align_roll: 0, +// board_align_pitch: 0, +// board_align_yaw: 0, +// currentscale: 0, +// currentoffset: 0, +// currentMeterSource: 0, +// batterycapacity: 0, +// }; LED_STRIP = []; LED_COLORS = []; @@ -171,9 +199,24 @@ var FC = { mAhdrawn: 0, rssi: 0, amperage: 0, - last_received_timestamp: Date.now() + last_received_timestamp: Date.now() // FIXME this code lies, it's never been received at this point }; + VOLTAGE_METERS = []; + VOLTAGE_METER_CONFIGS = []; + CURRENT_METERS = []; + CURRENT_METER_CONFIGS = []; + + BATTERY_STATE = {}; + BATTERY_CONFIG = { + vbatmincellvoltage: 0, + vbatmaxcellvoltage: 0, + vbatwarningcellvoltage: 0, + capacity: 0, + voltageMeterSource: 0, + currentMeterSource: 0 + }; + ARMING_CONFIG = { auto_disarm_delay: 0, disarm_kill_switch: 0 @@ -182,31 +225,50 @@ var FC = { FC_CONFIG = { loopTime: 0 }; - - MISC = { + + MOTOR_CONFIG = { minthrottle: 0, maxthrottle: 0, mincommand: 0, - failsafe_throttle: 0, - gps_type: 0, - gps_baudrate: 0, - gps_ubx_sbas: 0, - multiwiicurrentoutput: 0, - rssi_channel: 0, - placeholder2: 0, + }; + + GPS_CONFIG = { + provider: 0, + ublox_sbas: 0, + }; + + COMPASS_CONFIG = { mag_declination: 0, // not checked - vbatscale: 0, - vbatmincellvoltage: 0, - vbatmaxcellvoltage: 0, - vbatwarningcellvoltage: 0, - batterymetertype: 1, // 1=ADC, 2=ESC }; - _3D = { + RSSI_CONFIG = { + channel: 0, + }; + + // FIXME remove all references to this and delete it +// MISC = { +// minthrottle: 0, +// maxthrottle: 0, +// mincommand: 0, +// failsafe_throttle: 0, +// gps_type: 0, +// gps_baudrate: 0, +// gps_ubx_sbas: 0, +// multiwiicurrentoutput: 0, +// rssi_channel: 0, +// placeholder2: 0, +// mag_declination: 0, // not checked +// vbatscale: 0, +// vbatmincellvoltage: 0, +// vbatmaxcellvoltage: 0, +// vbatwarningcellvoltage: 0, +// batterymetertype: 1, // 1=ADC, 2=ESC +// }; + + MOTOR_3D_CONFIG = { deadband3d_low: 0, deadband3d_high: 0, - neutral3d: 0, - deadband3d_throttle: 0 + neutral: 0, }; DATAFLASH = { @@ -237,10 +299,11 @@ var FC = { data: [] }; - RC_deadband = { + RC_DEADBAND_CONFIG = { deadband: 0, yaw_deadband: 0, - alt_hold_deadband: 0 + alt_hold_deadband: 0, + deadband3d_throttle: 0 }; SENSOR_ALIGNMENT = { @@ -296,9 +359,9 @@ var FC = { RX_CONFIG = { serialrx_provider: 0, - maxcheck: 0, - midrc: 0, - mincheck: 0, + stick_max: 0, + stick_center: 0, + stick_min: 0, spektrum_sat_bind: 0, rx_min_usec: 0, rx_max_usec: 0, diff --git a/js/model.js b/js/model.js index 8f80deb9..9492b674 100644 --- a/js/model.js +++ b/js/model.js @@ -47,7 +47,7 @@ var Model = function (wrapper, canvas) { this.renderer.setSize(this.wrapper.width() * 2, this.wrapper.height() * 2); // load the model including materials - var model_file = useWebGLRenderer ? mixerList[BF_CONFIG.mixerConfiguration - 1].model : 'fallback'; + var model_file = useWebGLRenderer ? mixerList[MIXER_CONFIG.mixer - 1].model : 'fallback'; // Temporary workaround for 'custom' model until akfreak's custom model is merged. if (model_file == 'custom') { model_file = 'fallback'; } diff --git a/js/msp.js b/js/msp.js index ab7c4121..ba44b46f 100755 --- a/js/msp.js +++ b/js/msp.js @@ -148,6 +148,9 @@ var MSP = { this.listeners = []; }, send_message: function (code, data, callback_sent, callback_msp, callback_onerror) { + if (code === undefined) { + debugger; + } var bufferOut, bufView; diff --git a/js/msp/MSPCodes.js b/js/msp/MSPCodes.js index ce272c2d..85c469cd 100644 --- a/js/msp/MSPCodes.js +++ b/js/msp/MSPCodes.js @@ -11,21 +11,26 @@ var MSPCodes = { MSP_NAME: 10, MSP_SET_NAME: 11, - MSP_CHANNEL_FORWARDING: 32, - MSP_SET_CHANNEL_FORWARDING: 33, + MSP_BATTERY_CONFIG: 32, + MSP_SET_BATTERY_CONFIG: 33, MSP_MODE_RANGES: 34, MSP_SET_MODE_RANGE: 35, - + MSP_FEATURE_CONFIG: 36, + MSP_SET_FEATURE_CONFIG: 37, + MSP_BOARD_ALIGNMENT_CONFIG: 38, + MSP_SET_BOARD_ALIGNMENT_CONFIG: 39, MSP_CURRENT_METER_CONFIG: 40, MSP_SET_CURRENT_METER_CONFIG: 41, - + MSP_MIXER_CONFIG: 42, + MSP_SET_MIXER_CONFIG: 43, MSP_RX_CONFIG: 44, MSP_SET_RX_CONFIG: 45, MSP_LED_COLORS: 46, MSP_SET_LED_COLORS: 47, MSP_LED_STRIP_CONFIG: 48, MSP_SET_LED_STRIP_CONFIG: 49, - + MSP_RSSI_CONFIG: 50, + MSP_SET_RSSI_CONFIG: 51, MSP_ADJUSTMENT_RANGES: 52, MSP_SET_ADJUSTMENT_RANGE: 53, MSP_CF_SERIAL_CONFIG: 54, @@ -39,8 +44,8 @@ var MSPCodes = { MSP_SET_ARMING_CONFIG: 62, MSP_RX_MAP: 64, MSP_SET_RX_MAP: 65, - MSP_BF_CONFIG: 66, - MSP_SET_BF_CONFIG: 67, + //MSP_BF_CONFIG: 66, // DEPRECATED + //MSP_SET_BF_CONFIG: 67, // DEPRECATED MSP_SET_REBOOT: 68, MSP_BF_BUILD_INFO: 69, // Not used MSP_DATAFLASH_SUMMARY: 70, @@ -71,9 +76,9 @@ var MSPCodes = { MSP_SET_PID_ADVANCED: 95, MSP_SENSOR_CONFIG: 96, MSP_SET_SENSOR_CONFIG: 97, - // MSP_SPECIAL_PARAMETERS: 98, removed - //MSP_SET_SPECIAL_PARAMETERS: 99, removed - MSP_IDENT: 100, // Not used + //MSP_SPECIAL_PARAMETERS: 98, // DEPRECATED + //MSP_SET_SPECIAL_PARAMETERS: 99, // DEPRECATED + //MSP_IDENT: 100, // DEPRECTED MSP_STATUS: 101, MSP_RAW_IMU: 102, MSP_SERVO: 103, @@ -86,19 +91,25 @@ var MSPCodes = { MSP_ANALOG: 110, MSP_RC_TUNING: 111, MSP_PID: 112, - MSP_BOX: 113, // Not used - MSP_MISC: 114, - MSP_MOTOR_PINS: 115, // Not used + //MSP_BOX: 113, // DEPRECATED + //MSP_MISC: 114, // DEPRECATED MSP_BOXNAMES: 116, MSP_PIDNAMES: 117, MSP_WP: 118, // Not used MSP_BOXIDS: 119, MSP_SERVO_CONFIGURATIONS: 120, - MSP_3D: 124, + MSP_MOTOR_3D_CONFIG: 124, MSP_RC_DEADBAND: 125, MSP_SENSOR_ALIGNMENT: 126, MSP_LED_STRIP_MODECOLOR: 127, + MSP_VOLTAGE_METERS: 128, + MSP_CURRENT_METERS: 129, + MSP_BATTERY_STATE: 130, + MSP_MOTOR_CONFIG: 131, + MSP_GPS_CONFIG: 132, + MSP_COMPASS_CONFIG: 133, + MSP_STATUS_EX: 150, MSP_UID: 160, @@ -109,22 +120,25 @@ var MSPCodes = { MSP_SET_RAW_RC: 200, MSP_SET_RAW_GPS: 201, // Not used MSP_SET_PID: 202, - MSP_SET_BOX: 203, + //MSP_SET_BOX: 203, // DEPRECATED MSP_SET_RC_TUNING: 204, MSP_ACC_CALIBRATION: 205, MSP_MAG_CALIBRATION: 206, - MSP_SET_MISC: 207, + //MSP_SET_MISC: 207, // DEPRECATED MSP_RESET_CONF: 208, MSP_SET_WP: 209, // Not used MSP_SELECT_SETTING: 210, - MSP_SET_HEAD: 211, // Not used + MSP_SET_HEADING: 211, // Not used MSP_SET_SERVO_CONFIGURATION: 212, MSP_SET_MOTOR: 214, - MSP_SET_3D: 217, + MSP_SET_MOTOR_3D_CONFIG: 217, MSP_SET_RC_DEADBAND: 218, MSP_SET_RESET_CURR_PID: 219, MSP_SET_SENSOR_ALIGNMENT: 220, MSP_SET_LED_STRIP_MODECOLOR: 221, + MSP_SET_MOTOR_CONFIG: 222, + MSP_SET_GPS_CONFIG: 223, + MSP_SET_COMPASS_CONFIG: 224, MSP_SET_ACC_TRIM: 239, MSP_ACC_TRIM: 240, diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js index 35ebea42..bd78b7f4 100644 --- a/js/msp/MSPHelper.js +++ b/js/msp/MSPHelper.js @@ -52,6 +52,9 @@ MspHelper.prototype.process_data = function(dataHandler) { var data = dataHandler.dataView; // DataView (allowing us to view arrayBuffer as struct/union) var code = dataHandler.code; + if (code === 0) { + debugger; + } var crcError = dataHandler.crcError; if (!crcError) { if (!dataHandler.unsupported) switch (code) { @@ -148,12 +151,96 @@ MspHelper.prototype.process_data = function(dataHandler) { case MSPCodes.MSP_SONAR: SENSOR_DATA.sonar = data.read32(); break; - case MSPCodes.MSP_ANALOG: + case MSPCodes.MSP_ANALOG: ANALOG.voltage = data.readU8() / 10.0; ANALOG.mAhdrawn = data.readU16(); ANALOG.rssi = data.readU16(); // 0-1023 ANALOG.amperage = data.read16() / 100; // A ANALOG.last_received_timestamp = Date.now(); + break; +// case MSPCodes.MSP_VOLTAGE_METERS: +// VOLTAGE_METERS = []; +// for (var i = 0; i < (message_length); i++) { +// var voltageMeter = {}; +// voltageMeter.voltage = data.readU8() / 10.0; +// +// VOLTAGE_METERS.push(voltageMeter) +// } +// break; +// case MSPCodes.MSP_CURRENT_METERS: +// CURRENT_METERS = []; +// for (var i = 0; i < (message_length / 6); i++) { +// var amperageMeter = {}; +// amperageMeter.amperage = data.read16() / 1000; // A +// offset += 2; +// amperageMeter.mAhDrawn = data.readU32(); // A +// offset += 4; +// +// CURRENT_METERS.push(amperageMeter); +// } +// break; + case MSPCodes.MSP_BATTERY_STATE: + BATTERY_STATE.cellCount = data.readU8(); + BATTERY_STATE.capacity = data.readU16(); // mAh + + BATTERY_STATE.voltage = data.readU8() / 10.0; // V + BATTERY_STATE.mAhDrawn = data.readU16(); // mAh + BATTERY_STATE.amperage = data.readU16() / 100; // A + break; + + case MSPCodes.MSP_VOLTAGE_METER_CONFIG: + VOLTAGE_METER_CONFIGS = []; + var voltage_meter_count = data.readU8(); + + for (var i = 0; i < voltage_meter_count; i++) { + var subframe_length = data.readU8(); + if (subframe_length != 5) { + for (var j = 0; j < subframe_length; j++) { + data.readU8(); + } + } else { + var voltageMeterConfig = {}; + voltageMeterConfig.id = data.readU8(); + voltageMeterConfig.sensorType = data.readU8(); + voltageMeterConfig.vbatscale = data.readU8(); + voltageMeterConfig.vbatresdivval = data.readU8(); + voltageMeterConfig.vbatresdivmultiplier = data.readU8(); + + VOLTAGE_METER_CONFIGS.push(voltageMeterConfig); + } + } + break; + case MSPCodes.MSP_CURRENT_METER_CONFIG: + var offset = 0; + CURRENT_METER_CONFIGS = []; + var current_meter_count = data.readU8(); + for (var i = 0; i < current_meter_count; i++) { + var currentMeterConfig = {}; + var subframe_length = data.readU8(); + + if (subframe_length != 6) { + for (var j = 0; j < subframe_length; j++) { + data.readU8(); + } + } else { + currentMeterConfig.id = data.readU8(); + currentMeterConfig.sensorType = data.readU8(); + currentMeterConfig.scale = data.readU16(); + currentMeterConfig.offset = data.readU16(); + + CURRENT_METER_CONFIGS.push(currentMeterConfig); + } + } + break; + + case MSPCodes.MSP_BATTERY_CONFIG: + BATTERY_CONFIG.vbatmincellvoltage = data.readU8() / 10; // 10-50 + BATTERY_CONFIG.vbatmaxcellvoltage = data.readU8() / 10; // 10-50 + BATTERY_CONFIG.vbatwarningcellvoltage = data.readU8() / 10; // 10-50 + BATTERY_CONFIG.capacity = data.readU16(); + BATTERY_CONFIG.voltageMeterSource = data.readU8(); + BATTERY_CONFIG.currentMeterSource = data.readU8(); + break; case MSPCodes.MSP_RC_TUNING: RC_tuning.RC_RATE = parseFloat((data.readU8() / 100).toFixed(2)); @@ -203,53 +290,47 @@ MspHelper.prototype.process_data = function(dataHandler) { ARMING_CONFIG.disarm_kill_switch = data.readU8(); } break; - case MSPCodes.MSP_LOOP_TIME: - if (semver.gte(CONFIG.apiVersion, "1.8.0")) { - FC_CONFIG.loopTime = data.readU16(); - } + case MSPCodes.MSP_MOTOR_CONFIG: + MOTOR_CONFIG.minthrottle = data.readU16(); // 0-2000 + MOTOR_CONFIG.maxthrottle = data.readU16(); // 0-2000 + MOTOR_CONFIG.mincommand = data.readU16(); // 0-2000 break; - case MSPCodes.MSP_MISC: // 22 bytes - RX_CONFIG.midrc = data.readU16(); - MISC.minthrottle = data.readU16(); // 0-2000 - MISC.maxthrottle = data.readU16(); // 0-2000 - MISC.mincommand = data.readU16(); // 0-2000 - MISC.failsafe_throttle = data.readU16(); // 1000-2000 - MISC.gps_type = data.readU8(); - MISC.gps_baudrate = data.readU8(); - MISC.gps_ubx_sbas = data.readU8(); - MISC.multiwiicurrentoutput = data.readU8(); - MISC.rssi_channel = data.readU8(); - MISC.placeholder2 = data.readU8(); - if (semver.lt(CONFIG.apiVersion, "1.18.0")) - MISC.mag_declination = data.read16() / 10; // -1800-1800 - else - MISC.mag_declination = data.read16() / 100; // -18000-18000 - MISC.vbatscale = data.readU8(); // 10-200 - MISC.vbatmincellvoltage = data.readU8() / 10; // 10-50 - MISC.vbatmaxcellvoltage = data.readU8() / 10; // 10-50 - MISC.vbatwarningcellvoltage = data.readU8() / 10; // 10-50 + case MSPCodes.MSP_COMPASS_CONFIG: + COMPASS_CONFIG.mag_declination = data.read16() / 100; // -18000-18000 break; - case MSPCodes.MSP_VOLTAGE_METER_CONFIG: - MISC.vbatscale = data.readU8(); // 10-200 - MISC.vbatmincellvoltage = data.readU8() / 10; // 10-50 - MISC.vbatmaxcellvoltage = data.readU8() / 10; // 10-50 - MISC.vbatwarningcellvoltage = data.readU8() / 10; // 10-50 - if (semver.gte(CONFIG.apiVersion, "1.23.0")) { - MISC.batterymetertype = data.readU8(); - } + case MSPCodes.MSP_GPS_CONFIG: + GPS_CONFIG.provider = data.readU8(); + GPS_CONFIG.ublox_sbas = data.readU8(); break; - case MSPCodes.MSP_CURRENT_METER_CONFIG: - BF_CONFIG.currentscale = data.read16(); - BF_CONFIG.currentoffset = data.read16(); - BF_CONFIG.currentmetertype = data.readU8(); - BF_CONFIG.batterycapacity = data.readU16(); + case MSPCodes.MSP_RSSI_CONFIG: + RSSI_CONFIG.channel = data.readU8(); break; - case MSPCodes.MSP_3D: - _3D.deadband3d_low = data.readU16(); - _3D.deadband3d_high = data.readU16(); - _3D.neutral3d = data.readU16(); +// case MSPCodes.MSP_MISC: +// RX_CONFIG.stick_center = data.readU16(); +// MOTOR_CONFIG.minthrottle = data.readU16(); // 0-2000 +// MOTOR_CONFIG.maxthrottle = data.readU16(); // 0-2000 +// MOTOR_CONFIG.mincommand = data.readU16(); // 0-2000 +// MISC.failsafe_throttle = data.readU16(); // 1000-2000 +// GPS_CONFIG.provider = data.readU8(); +// GPS_CONFIG.baudrate = data.readU8(); +// GPS_CONFIG.ublox_sbas = data.readU8(); +// MISC.multiwiicurrentoutput = data.readU8(); +// MISC.placeholder2 = data.readU8(); +// if (semver.lt(CONFIG.apiVersion, "1.18.0")) +// COMPASS_CONFIG.mag_declination = data.read16() / 10; // -1800-1800 +// else +// COMPASS_CONFIG.mag_declination = data.read16() / 100; // -18000-18000 +// MISC.vbatscale = data.readU8(); // 10-200 +// BATTERY_CONFIG.vbatmincellvoltage = data.readU8() / 10; // 10-50 +// BATTERY_CONFIG.vbatmaxcellvoltage = data.readU8() / 10; // 10-50 +// BATTERY_CONFIG.vbatwarningcellvoltage = data.readU8() / 10; // 10-50 +// break; + case MSPCodes.MSP_MOTOR_3D_CONFIG: + MOTOR_3D_CONFIG.deadband3d_low = data.readU16(); + MOTOR_3D_CONFIG.deadband3d_high = data.readU16(); + MOTOR_3D_CONFIG.neutral = data.readU16(); if (semver.lt(CONFIG.apiVersion, "1.17.0")) { - _3D.deadband3d_throttle = data.readU16(); + RC_DEADBAND_CONFIG.deadband3d_throttle = data.readU16(); } break; case MSPCodes.MSP_BOXNAMES: @@ -341,12 +422,12 @@ MspHelper.prototype.process_data = function(dataHandler) { } break; case MSPCodes.MSP_RC_DEADBAND: - RC_deadband.deadband = data.readU8(); - RC_deadband.yaw_deadband = data.readU8(); - RC_deadband.alt_hold_deadband = data.readU8(); + RC_DEADBAND_CONFIG.deadband = data.readU8(); + RC_DEADBAND_CONFIG.yaw_deadband = data.readU8(); + RC_DEADBAND_CONFIG.alt_hold_deadband = data.readU8(); if (semver.gte(CONFIG.apiVersion, "1.17.0")) { - _3D.deadband3d_throttle = data.readU16(); + RC_DEADBAND_CONFIG.deadband3d_throttle = data.readU16(); } break; case MSPCodes.MSP_SENSOR_ALIGNMENT: @@ -371,8 +452,20 @@ MspHelper.prototype.process_data = function(dataHandler) { case MSPCodes.MSP_MAG_CALIBRATION: console.log('Mag calibration executed'); break; - case MSPCodes.MSP_SET_MISC: - console.log('MISC Configuration saved'); + case MSPCodes.MSP_SET_MOTOR_CONFIG: + console.log('Motor Configuration saved'); + break; + case MSPCodes.MSP_SET_GPS_CONFIG: + console.log('GPS Configuration saved'); + break; + case MSPCodes.MSP_SET_RSSI_CONFIG: + console.log('RSSI Configuration saved'); + break; +// case MSPCodes.MSP_SET_MISC: +// console.log('MISC Configuration saved'); +// break; + case MSPCodes.MSP_SET_FEATURE_CONFIG: + console.log('Features saved'); break; case MSPCodes.MSP_RESET_CONF: console.log('Settings Reset'); @@ -387,7 +480,7 @@ MspHelper.prototype.process_data = function(dataHandler) { console.log('Settings Saved in EEPROM'); break; case MSPCodes.MSP_SET_CURRENT_METER_CONFIG: - console.log('Current Settings saved'); + console.log('Amperage Settings saved'); break; case MSPCodes.MSP_SET_VOLTAGE_METER_CONFIG: console.log('Voltage config saved'); @@ -433,20 +526,33 @@ MspHelper.prototype.process_data = function(dataHandler) { case MSPCodes.MSP_SET_RX_MAP: console.log('RCMAP saved'); break; - case MSPCodes.MSP_BF_CONFIG: - BF_CONFIG.mixerConfiguration = data.readU8(); - BF_CONFIG.features.setMask(data.readU32()); - RX_CONFIG.serialrx_provider = data.readU8(); - BF_CONFIG.board_align_roll = data.read16(); // -180 - 360 - BF_CONFIG.board_align_pitch = data.read16(); // -180 - 360 - BF_CONFIG.board_align_yaw = data.read16(); // -180 - 360 - BF_CONFIG.currentscale = data.read16(); - BF_CONFIG.currentoffset = data.read16(); - - updateTabList(BF_CONFIG.features); - + case MSPCodes.MSP_MIXER_CONFIG: + MIXER_CONFIG.mixer = data.readU8(); break; - case MSPCodes.MSP_SET_BF_CONFIG: + + case MSPCodes.MSP_FEATURE_CONFIG: + FEATURE_CONFIG.features.setMask(data.readU32()); + + updateTabList(FEATURE_CONFIG.features); + break; + +// case MSPCodes.MSP_BF_CONFIG: +// MIXER_CONFIG.mixer = data.readU8(); +// FEATURE_CONFIG.features.setMask(data.readU32()); +// RX_CONFIG.serialrx_provider = data.readU8(); +// BOARD_ALIGNMENT_CONFIG.roll = data.read16(); // -180 - 360 +// BOARD_ALIGNMENT_CONFIG.pitch = data.read16(); // -180 - 360 +// BOARD_ALIGNMENT_CONFIG.yaw = data.read16(); // -180 - 360 +// BF_CONFIG.currentscale = data.read16(); +// BF_CONFIG.currentoffset = data.read16(); +// +// updateTabList(FEATURE_CONFIG.features); +// +// break; + case MSPCodes.MSP_BOARD_ALIGNMENT_CONFIG: + BOARD_ALIGNMENT_CONFIG.roll = data.read16(); // -180 - 360 + BOARD_ALIGNMENT_CONFIG.pitch = data.read16(); // -180 - 360 + BOARD_ALIGNMENT_CONFIG.yaw = data.read16(); // -180 - 360 break; case MSPCodes.MSP_SET_REBOOT: console.log('Reboot request accepted'); @@ -582,22 +688,11 @@ MspHelper.prototype.process_data = function(dataHandler) { } break; - case MSPCodes.MSP_CHANNEL_FORWARDING: - for (var i = 0; i < data.byteLength && i < SERVO_CONFIG.length; i ++) { - var channelIndex = data.readU8(); - if (channelIndex < 255) { - SERVO_CONFIG[i].indexOfChannelToForward = channelIndex; - } else { - SERVO_CONFIG[i].indexOfChannelToForward = undefined; - } - } - break; - case MSPCodes.MSP_RX_CONFIG: RX_CONFIG.serialrx_provider = data.readU8(); - RX_CONFIG.maxcheck = data.readU16(); - RX_CONFIG.midrc = data.readU16(); - RX_CONFIG.mincheck = data.readU16(); + RX_CONFIG.stick_max = data.readU16(); + RX_CONFIG.stick_center = data.readU16(); + RX_CONFIG.stick_min = data.readU16(); RX_CONFIG.spektrum_sat_bind = data.readU8(); RX_CONFIG.rx_min_usec = data.readU16(); RX_CONFIG.rx_max_usec = data.readU16(); @@ -907,7 +1002,7 @@ MspHelper.prototype.process_data = function(dataHandler) { case MSPCodes.MSP_SET_RESET_CURR_PID: console.log('Current PID profile reset'); break; - case MSPCodes.MSP_SET_3D: + case MSPCodes.MSP_SET_MOTOR_3D_CONFIG: console.log('3D settings saved'); break; case MSPCodes.MSP_SET_RC_DEADBAND: @@ -985,16 +1080,25 @@ MspHelper.prototype.crunch = function(code) { var buffer = []; var self = this; switch (code) { - case MSPCodes.MSP_SET_BF_CONFIG: - var featureMask = BF_CONFIG.features.getMask(); - buffer.push8(BF_CONFIG.mixerConfiguration) - .push32(featureMask) - .push8(RX_CONFIG.serialrx_provider) - .push16(BF_CONFIG.board_align_roll) - .push16(BF_CONFIG.board_align_pitch) - .push16(BF_CONFIG.board_align_yaw) - .push16(BF_CONFIG.currentscale) - .push16(BF_CONFIG.currentoffset); + case MSPCodes.MSP_SET_FEATURE_CONFIG: + var featureMask = FEATURE_CONFIG.features.getMask(); + buffer.push32(featureMask); + break; +// case MSPCodes.MSP_SET_BF_CONFIG: +// var featureMask = FEATURE_CONFIG.features.getMask(); +// buffer.push8(MIXER_CONFIG.mixer) +// .push32(featureMask) +// .push8(RX_CONFIG.serialrx_provider) +// .push16(BOARD_ALIGNMENT_CONFIG.roll) +// .push16(BOARD_ALIGNMENT_CONFIG.pitch) +// .push16(BOARD_ALIGNMENT_CONFIG.yaw) +// .push16(BF_CONFIG.currentscale) +// .push16(BF_CONFIG.currentoffset); +// break; + case MSPCodes.MSP_SET_BOARD_ALIGNMENT_CONFIG: + buffer.push16(BOARD_ALIGNMENT_CONFIG.roll) + .push16(BOARD_ALIGNMENT_CONFIG.pitch) + .push16(BOARD_ALIGNMENT_CONFIG.yaw); break; case MSPCodes.MSP_SET_PID_CONTROLLER: buffer.push8(PID.controller); @@ -1042,51 +1146,71 @@ MspHelper.prototype.crunch = function(code) { buffer.push8(ARMING_CONFIG.auto_disarm_delay) .push8(ARMING_CONFIG.disarm_kill_switch); break; - case MSPCodes.MSP_SET_LOOP_TIME: - buffer.push16(FC_CONFIG.loopTime); + case MSPCodes.MSP_SET_MOTOR_CONFIG: + buffer.push16(MOTOR_CONFIG.minthrottle) + .push16(MOTOR_CONFIG.maxthrottle) + .push16(MOTOR_CONFIG.mincommand); + break; + case MSPCodes.MSP_SET_GPS_CONFIG: + buffer.push8(GPS_CONFIG.provider) + .push8(GPS_CONFIG.ublox_sbas); break; - case MSPCodes.MSP_SET_MISC: - buffer.push16(RX_CONFIG.midrc) - .push16(MISC.minthrottle) - .push16(MISC.maxthrottle) - .push16(MISC.mincommand) - .push16(MISC.failsafe_throttle) - .push8(MISC.gps_type) - .push8(MISC.gps_baudrate) - .push8(MISC.gps_ubx_sbas) - .push8(MISC.multiwiicurrentoutput) - .push8(MISC.rssi_channel) - .push8(MISC.placeholder2); - if (semver.lt(CONFIG.apiVersion, "1.18.0")) { - buffer.push16(Math.round(MISC.mag_declination * 10)); - } else { - buffer.push16(Math.round(MISC.mag_declination * 100)); - } - buffer.push8(MISC.vbatscale) - .push8(Math.round(MISC.vbatmincellvoltage * 10)) - .push8(Math.round(MISC.vbatmaxcellvoltage * 10)) - .push8(Math.round(MISC.vbatwarningcellvoltage * 10)); + case MSPCodes.MSP_SET_COMPASS_CONFIG: + buffer.push16(Math.round(COMPASS_CONFIG.mag_declination * 100)); break; - case MSPCodes.MSP_SET_VOLTAGE_METER_CONFIG: - buffer.push8(MISC.vbatscale) - .push8(Math.round(MISC.vbatmincellvoltage * 10)) - .push8(Math.round(MISC.vbatmaxcellvoltage * 10)) - .push8(Math.round(MISC.vbatwarningcellvoltage * 10)); - if (semver.gte(CONFIG.apiVersion, "1.23.0")) { - buffer.push8(MISC.batterymetertype); - } + case MSPCodes.MSP_SET_RSSI_CONFIG: + buffer.push8(RSSI_CONFIG.channel); break; - case MSPCodes.MSP_SET_CURRENT_METER_CONFIG: - buffer.push16(BF_CONFIG.currentscale) - .push16(BF_CONFIG.currentoffset) - .push8(BF_CONFIG.currentmetertype) - .push16(BF_CONFIG.batterycapacity) +// case MSPCodes.MSP_SET_MISC: +// buffer.push16(RX_CONFIG.stick_center) +// .push16(MOTOR_CONFIG.minthrottle) +// .push16(MOTOR_CONFIG.maxthrottle) +// .push16(MOTOR_CONFIG.mincommand) +// .push16(MISC.failsafe_throttle) +// .push8(GPS_CONFIG.provider) +// .push8(GPS_CONFIG.baudrate) +// .push8(GPS_CONFIG.ublox_sbas) +// .push8(MISC.multiwiicurrentoutput) +// .push8(RSSI_CONFIG.channel) +// .push8(MISC.placeholder2); +// if (semver.lt(CONFIG.apiVersion, "1.18.0")) { +// buffer.push16(Math.round(COMPASS_CONFIG.mag_declination * 10)); +// } else { +// buffer.push16(Math.round(COMPASS_CONFIG.mag_declination * 100)); +// } +// buffer.push8(MISC.vbatscale) +// .push8(Math.round(BATTERY_CONFIG.vbatmincellvoltage * 10)) +// .push8(Math.round(BATTERY_CONFIG.vbatmaxcellvoltage * 10)) +// .push8(Math.round(BATTERY_CONFIG.vbatwarningcellvoltage * 10)); +// break; + case MSPCodes.MSP_SET_BATTERY_CONFIG: + buffer.push8(Math.round(BATTERY_CONFIG.vbatmincellvoltage * 10)) + .push8(Math.round(BATTERY_CONFIG.vbatmaxcellvoltage * 10)) + .push8(Math.round(BATTERY_CONFIG.vbatwarningcellvoltage * 10)) + .push16(BATTERY_CONFIG.batterycapacity) + .push8(BATTERY_CONFIG.voltageMeterSource) + .push8(BATTERY_CONFIG.currentMeterSource); break; +// case MSPCodes.MSP_SET_VOLTAGE_METER_CONFIG: +// buffer.push8(MISC.vbatscale) +// .push8(Math.round(BATTERY_CONFIG.vbatmincellvoltage * 10)) +// .push8(Math.round(BATTERY_CONFIG.vbatmaxcellvoltage * 10)) +// .push8(Math.round(BATTERY_CONFIG.vbatwarningcellvoltage * 10)); +// if (semver.gte(CONFIG.apiVersion, "1.23.0")) { +// buffer.push8(BATTERY_CONFIG.voltageMeterSource); +// } +// break; +// case MSPCodes.MSP_SET_CURRENT_METER_CONFIG: +// buffer.push16(BF_CONFIG.currentscale) +// .push16(BF_CONFIG.currentoffset) +// .push8(BATTERY_CONFIG.currentMeterSource) +// .push16(BF_CONFIG.batterycapacity) +// break; case MSPCodes.MSP_SET_RX_CONFIG: buffer.push8(RX_CONFIG.serialrx_provider) - .push16(RX_CONFIG.maxcheck) - .push16(RX_CONFIG.midrc) - .push16(RX_CONFIG.mincheck) + .push16(RX_CONFIG.stick_max) + .push16(RX_CONFIG.stick_center) + .push16(RX_CONFIG.stick_min) .push8(RX_CONFIG.spektrum_sat_bind) .push16(RX_CONFIG.rx_min_usec) .push16(RX_CONFIG.rx_max_usec); @@ -1156,21 +1280,21 @@ MspHelper.prototype.crunch = function(code) { } break; - case MSPCodes.MSP_SET_3D: - buffer.push16(_3D.deadband3d_low) - .push16(_3D.deadband3d_high) - .push16(_3D.neutral3d); + case MSPCodes.MSP_SET_MOTOR_3D_CONFIG: + buffer.push16(MOTOR_3D_CONFIG.deadband3d_low) + .push16(MOTOR_3D_CONFIG.deadband3d_high) + .push16(MOTOR_3D_CONFIG.neutral); if (semver.lt(CONFIG.apiVersion, "1.17.0")) { - buffer.push16(_3D.deadband3d_throttle); + buffer.push16(RC_DEADBAND_CONFIG.deadband3d_throttle); } break; case MSPCodes.MSP_SET_RC_DEADBAND: - buffer.push8(RC_deadband.deadband) - .push8(RC_deadband.yaw_deadband) - .push8(RC_deadband.alt_hold_deadband); + buffer.push8(RC_DEADBAND_CONFIG.deadband) + .push8(RC_DEADBAND_CONFIG.yaw_deadband) + .push8(RC_DEADBAND_CONFIG.alt_hold_deadband); if (semver.gte(CONFIG.apiVersion, "1.17.0")) { - buffer.push16(_3D.deadband3d_throttle); + buffer.push16(RC_DEADBAND_CONFIG.deadband3d_throttle); } break; diff --git a/js/serial_backend.js b/js/serial_backend.js index b045a8f0..9843501d 100755 --- a/js/serial_backend.js +++ b/js/serial_backend.js @@ -267,24 +267,11 @@ function onConnect() { $('#tabs ul.mode-connected-cli').show(); if (CONFIG.flightControllerVersion !== '') { - BF_CONFIG.features = new Features(CONFIG); + FEATURE_CONFIG.features = new Features(CONFIG); $('#tabs ul.mode-connected').show(); - if (semver.gte(CONFIG.apiVersion, "1.16.0")) { - MSP.send_message(MSPCodes.MSP_STATUS_EX, false, false); - } else { - MSP.send_message(MSPCodes.MSP_STATUS, false, false); - - if (CONFIG.flightControllerIdentifier === 'BTFL' && semver.gte(CONFIG.flightControllerVersion, "2.4.0")) { - CONFIG.numProfiles = 2; - $('.tab-pid_tuning select[name="profile"] .profile3').hide(); - } else { - CONFIG.numProfiles = 3; - $('.tab-pid_tuning select[name="rate_profile"]').hide(); - } - } - + MSP.send_message(MSPCodes.MSP_STATUS_EX, false, false); MSP.send_message(MSPCodes.MSP_DATAFLASH_SUMMARY, false, false); startLiveDataRefreshTimer(); @@ -492,13 +479,13 @@ function update_live_status() { } } if (ANALOG != undefined) { - var nbCells = Math.floor(ANALOG.voltage / MISC.vbatmaxcellvoltage) + 1; + var nbCells = Math.floor(ANALOG.voltage / BATTERY_CONFIG.vbatmaxcellvoltage) + 1; if (ANALOG.voltage == 0) nbCells = 1; - var min = MISC.vbatmincellvoltage * nbCells; - var max = MISC.vbatmaxcellvoltage * nbCells; - var warn = MISC.vbatwarningcellvoltage * nbCells; + var min = BATTERY_CONFIG.vbatmincellvoltage * nbCells; + var max = BATTERY_CONFIG.vbatmaxcellvoltage * nbCells; + var warn = BATTERY_CONFIG.vbatwarningcellvoltage * nbCells; $(".battery-status").css({ width: ((ANALOG.voltage - min) / (max - min) * 100) + "%", diff --git a/main.js b/main.js index d69325ed..542cb748 100644 --- a/main.js +++ b/main.js @@ -228,8 +228,8 @@ $(document).ready(function () { chrome.storage.local.set({'permanentExpertMode': checked}); $('input[name="expertModeCheckbox"]').prop('checked', checked).change(); - if (BF_CONFIG) { - updateTabList(BF_CONFIG.features); + if (FEATURE_CONFIG) { + updateTabList(FEATURE_CONFIG.features); } }).change(); @@ -362,8 +362,8 @@ $(document).ready(function () { } $('input[name="expertModeCheckbox"]').change(function () { - if (BF_CONFIG) { - updateTabList(BF_CONFIG.features); + if (FEATURE_CONFIG) { + updateTabList(FEATURE_CONFIG.features); } }).change(); }); diff --git a/tabs/configuration.css b/tabs/configuration.css index 755f5ce8..43b3a040 100644 --- a/tabs/configuration.css +++ b/tabs/configuration.css @@ -292,7 +292,7 @@ width: 150px; } -.tab-configuration .currentmetertype { +.tab-configuration .currentMeterSource { border: 1px solid silver; margin-right: 5px; float: left; diff --git a/tabs/configuration.html b/tabs/configuration.html index 4c704450..9df12a8f 100644 --- a/tabs/configuration.html +++ b/tabs/configuration.html @@ -121,7 +121,8 @@
-
+ +
@@ -179,8 +180,6 @@
-
-
@@ -199,50 +198,47 @@
-
-
-
+
+
-
-
-
- - -
-
-
-
-

-
-
- - -
-
-
-
-
-
+
- - - - - + + + + + - +
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
@@ -306,6 +302,32 @@
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+
+
@@ -331,10 +353,39 @@
-
-
+
+ + +
+
-
+
+
+
+ + +
+
+
+
+

+
+
+ + +
+
+ +
+
+
+
+
+
@@ -345,14 +396,32 @@ - +
+
+
+
+
+ + +
+
+
+
+
+
+
+
+
@@ -370,14 +439,23 @@ i18n="configurationBatteryWarning">
+
+
+
+
+
+
+
+
@@ -387,24 +465,6 @@
- - - - - - - - - - - -
-
- -
-
-
-
- -
- -
-
+
+
+
@@ -481,67 +535,8 @@
-
-
-
-
-
- - - - - - - - - - - -
-
-
- -
-
- -
-
- -
-
- -
-
-
-
-
-
-
-
-
-
- -
-
- -
-
-
-
diff --git a/tabs/configuration.js b/tabs/configuration.js index 5168e10b..a096bc38 100644 --- a/tabs/configuration.js +++ b/tabs/configuration.js @@ -12,24 +12,39 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } function load_config() { - MSP.send_message(MSPCodes.MSP_BF_CONFIG, false, false, load_serial_config); + MSP.send_message(MSPCodes.MSP_FEATURE_CONFIG, false, false, load_serial_config); } function load_serial_config() { - var next_callback = load_rc_map; - if (semver.lt(CONFIG.apiVersion, "1.6.0")) { - MSP.send_message(MSPCodes.MSP_CF_SERIAL_CONFIG, false, false, next_callback); - } else { - next_callback(); - } + MSP.send_message(MSPCodes.MSP_CF_SERIAL_CONFIG, false, false, load_board_alignment_config); } + function load_board_alignment_config() { + MSP.send_message(MSPCodes.MSP_BOARD_ALIGNMENT_CONFIG, false, false, load_rc_map); + } + function load_rc_map() { - MSP.send_message(MSPCodes.MSP_RX_MAP, false, false, load_misc); + MSP.send_message(MSPCodes.MSP_RX_MAP, false, false, load_mixer_config); } - function load_misc() { - MSP.send_message(MSPCodes.MSP_MISC, false, false, load_acc_trim); + function load_mixer_config() { + MSP.send_message(MSPCodes.MSP_MIXER_CONFIG, false, false, load_rssi_config); + } + + function load_rssi_config() { + MSP.send_message(MSPCodes.MSP_RSSI_CONFIG, false, false, load_motor_config); + } + + function load_motor_config() { + MSP.send_message(MSPCodes.MSP_MOTOR_CONFIG, false, false, load_compass_config); + } + + function load_compass_config() { + MSP.send_message(MSPCodes.MSP_COMPASS_CONFIG, false, false, load_gps_config); + } + + function load_gps_config() { + MSP.send_message(MSPCodes.MSP_GPS_CONFIG, false, false, load_acc_trim); } function load_acc_trim() { @@ -37,18 +52,9 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } function load_arming_config() { - var next_callback = load_loop_time; - if (semver.gte(CONFIG.apiVersion, "1.8.0")) { - MSP.send_message(MSPCodes.MSP_ARMING_CONFIG, false, false, next_callback); - } else { - next_callback(); - } - } - - function load_loop_time() { var next_callback = load_3d; if (semver.gte(CONFIG.apiVersion, "1.8.0")) { - MSP.send_message(MSPCodes.MSP_LOOP_TIME, false, false, next_callback); + MSP.send_message(MSPCodes.MSP_ARMING_CONFIG, false, false, next_callback); } else { next_callback(); } @@ -57,7 +63,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { function load_3d() { var next_callback = load_rc_deadband; if (semver.gte(CONFIG.apiVersion, "1.14.0")) { - MSP.send_message(MSPCodes.MSP_3D, false, false, next_callback); + MSP.send_message(MSPCodes.MSP_MOTOR_3D_CONFIG, false, false, next_callback); } else { next_callback(); } @@ -109,8 +115,17 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } function load_battery() { + var next_callback = load_voltage; + if (semver.gte(CONFIG.apiVersion, "1.33.0")) { + MSP.send_message(MSPCodes.MSP_BATTERY_CONFIG, false, false, next_callback); + } else { + next_callback(); + } + } + + function load_voltage() { var next_callback = load_current; - if (semver.gte(CONFIG.apiVersion, "1.31.0")) { + if (semver.gte(CONFIG.apiVersion, "1.33.0")) { MSP.send_message(MSPCodes.MSP_VOLTAGE_METER_CONFIG, false, false, next_callback); } else { next_callback(); @@ -119,7 +134,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { function load_current() { var next_callback = load_rx_config; - if (semver.gte(CONFIG.apiVersion, "1.31.0")) { + if (semver.gte(CONFIG.apiVersion, "1.33.0")) { MSP.send_message(MSPCodes.MSP_CURRENT_METER_CONFIG, false, false, next_callback); } else { next_callback(); @@ -162,17 +177,17 @@ TABS.configuration.initialize = function (callback, scrollPosition) { mixer_list_e.change(function () { var val = parseInt($(this).val()); - BF_CONFIG.mixerConfiguration = val; + MIXER_CONFIG.mixer = val; $('.mixerPreview img').attr('src', './resources/motor_order/' + mixerList[val - 1].image + '.svg'); }); // select current mixer configuration - mixer_list_e.val(BF_CONFIG.mixerConfiguration).change(); + mixer_list_e.val(MIXER_CONFIG.mixer).change(); var features_e = $('.tab-configuration .features'); - BF_CONFIG.features.generateElements(features_e); + FEATURE_CONFIG.features.generateElements(features_e); // translate to user-selected language localize(); @@ -357,7 +372,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { $('.hardwareSelection').hide(); } - $('input[name="vesselName"]').val(CONFIG.name); + $('input[name="craftName"]').val(CONFIG.name); if (semver.gte(CONFIG.apiVersion, "1.31.0")) { @@ -399,10 +414,10 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } gps_protocol_e.change(function () { - MISC.gps_type = parseInt($(this).val()); + GPS_CONFIG.provider = parseInt($(this).val()); }); - gps_protocol_e.val(MISC.gps_type); + gps_protocol_e.val(GPS_CONFIG.provider); var gps_baudrate_e = $('select.gps_baudrate'); @@ -427,10 +442,10 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } gps_ubx_sbas_e.change(function () { - MISC.gps_ubx_sbas = parseInt($(this).val()); + GPS_CONFIG.ublox_sbas = parseInt($(this).val()); }); - gps_ubx_sbas_e.val(MISC.gps_ubx_sbas); + gps_ubx_sbas_e.val(GPS_CONFIG.ublox_sbas); // generate serial RX @@ -483,16 +498,16 @@ TABS.configuration.initialize = function (callback, scrollPosition) { $('#content').scrollTop((scrollPosition) ? scrollPosition : 0); // fill board alignment - $('input[name="board_align_roll"]').val(BF_CONFIG.board_align_roll); - $('input[name="board_align_pitch"]').val(BF_CONFIG.board_align_pitch); - $('input[name="board_align_yaw"]').val(BF_CONFIG.board_align_yaw); + $('input[name="board_align_roll"]').val(BOARD_ALIGNMENT_CONFIG.roll); + $('input[name="board_align_pitch"]').val(BOARD_ALIGNMENT_CONFIG.pitch); + $('input[name="board_align_yaw"]').val(BOARD_ALIGNMENT_CONFIG.yaw); // fill accel trims $('input[name="roll"]').val(CONFIG.accelerometerTrims[1]); $('input[name="pitch"]').val(CONFIG.accelerometerTrims[0]); // fill magnetometer - $('input[name="mag_declination"]').val(MISC.mag_declination.toFixed(2)); + $('input[name="mag_declination"]').val(COMPASS_CONFIG.mag_declination.toFixed(2)); //fill motor disarm params and FC loop time if(semver.gte(CONFIG.apiVersion, "1.8.0")) { @@ -504,13 +519,16 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } // fill throttle - $('input[name="minthrottle"]').val(MISC.minthrottle); - $('input[name="maxthrottle"]').val(MISC.maxthrottle); - $('input[name="mincommand"]').val(MISC.mincommand); + $('input[name="minthrottle"]').val(MOTOR_CONFIG.minthrottle); + $('input[name="maxthrottle"]').val(MOTOR_CONFIG.maxthrottle); + $('input[name="mincommand"]').val(MOTOR_CONFIG.mincommand); // fill battery - if (semver.gte(CONFIG.apiVersion, "1.31.0")) { + if (semver.lt(CONFIG.apiVersion, "1.33.0")) { + $('div.battery').hide(); + } else { var batteryMeterTypes = [ + 'None', 'Onboard ADC', 'ESC Sensor' ]; @@ -521,58 +539,63 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } batteryMeterType_e.change(function () { - MISC.batterymetertype = parseInt($(this).val()); + BATTERY_CONFIG.voltageMeterSource = parseInt($(this).val()); checkUpdateVbatControls(); }); - batteryMeterType_e.val(MISC.batterymetertype).change(); - } else { - $('div.batterymetertype').hide(); + batteryMeterType_e.val(BATTERY_CONFIG.voltageMeterSource).change(); + + $('input[name="mincellvoltage"]').val(BATTERY_CONFIG.vbatmincellvoltage); + $('input[name="maxcellvoltage"]').val(BATTERY_CONFIG.vbatmaxcellvoltage); + $('input[name="warningcellvoltage"]').val(BATTERY_CONFIG.vbatwarningcellvoltage); + + + // FIXME move + //$('input[name="voltagescale"]').val(MISC.vbatscale); + + // fill current + var currentMeterTypes = [ + 'None', + 'Onboard ADC', + 'Virtual', + 'ESC Sensor' + ]; + + var currentMeterType_e = $('select.currentMeterSource'); + for (i = 0; i < currentMeterTypes.length; i++) { + currentMeterType_e.append(''); + } + + currentMeterType_e.change(function () { + BATTERY_CONFIG.currentMeterSource = parseInt($(this).val()); + checkUpdateCurrentControls(); + }); + currentMeterType_e.val(BATTERY_CONFIG.currentMeterSource).change(); + + // FIXME this is a hack - just for display purposes until the battery code is moved to a new tab. + var meter = CURRENT_METER_CONFIGS[0]; + + var currentScale_e = $('input[name="currentscale"]'); + currentScale_e.val(meter.scale); + currentScale_e.prop("disabled", true); + + var currentOffset_e = $('input[name="currentoffset"]'); + currentOffset_e.val(meter.offset); + currentOffset_e.prop("disabled", true); + } - $('input[name="mincellvoltage"]').val(MISC.vbatmincellvoltage); - $('input[name="maxcellvoltage"]').val(MISC.vbatmaxcellvoltage); - $('input[name="warningcellvoltage"]').val(MISC.vbatwarningcellvoltage); - $('input[name="voltagescale"]').val(MISC.vbatscale); - - // fill current - var currentMeterTypes = [ - 'None', - 'Onboard ADC', - 'Virtual' - ]; - - if (semver.gte(CONFIG.apiVersion, "1.31.0")) { - currentMeterTypes.push('ESC Sensor'); - } - - var currentMeterType_e = $('select.currentmetertype'); - for (i = 0; i < currentMeterTypes.length; i++) { - currentMeterType_e.append(''); - } - - currentMeterType_e.change(function () { - BF_CONFIG.currentmetertype = parseInt($(this).val()); - checkUpdateCurrentControls(); - }); - currentMeterType_e.val(BF_CONFIG.currentmetertype).change(); - - $('input[name="currentscale"]').val(BF_CONFIG.currentscale); - $('input[name="currentoffset"]').val(BF_CONFIG.currentoffset); - $('input[name="multiwiicurrentoutput"]').prop('checked', MISC.multiwiicurrentoutput !== 0); - //fill 3D if (semver.lt(CONFIG.apiVersion, "1.14.0")) { $('.tab-configuration ._3d').hide(); } else { - $('input[name="3ddeadbandlow"]').val(_3D.deadband3d_low); - $('input[name="3ddeadbandhigh"]').val(_3D.deadband3d_high); - $('input[name="3dneutral"]').val(_3D.neutral3d); - $('input[name="3ddeadbandthrottle"]').val(_3D.deadband3d_throttle); + $('input[name="3ddeadbandlow"]').val(MOTOR_3D_CONFIG.deadband3d_low); + $('input[name="3ddeadbandhigh"]').val(MOTOR_3D_CONFIG.deadband3d_high); + $('input[name="3dneutral"]').val(MOTOR_3D_CONFIG.neutral); } // UI hooks function checkShowDisarmDelay() { - if (BF_CONFIG.features.isEnabled('MOTOR_STOP')) { + if (FEATURE_CONFIG.features.isEnabled('MOTOR_STOP')) { $('div.disarmdelay').show(); } else { $('div.disarmdelay').hide(); @@ -580,7 +603,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } function checkShowSerialRxBox() { - if (BF_CONFIG.features.isEnabled('RX_SERIAL')) { + if (FEATURE_CONFIG.features.isEnabled('RX_SERIAL')) { $('div.serialRXBox').show(); } else { $('div.serialRXBox').hide(); @@ -588,39 +611,41 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } function checkUpdateVbatControls() { - if (BF_CONFIG.features.isEnabled('VBAT')) { - $('.vbatmonitoring').show(); + // FIXME move + if (semver.gte(CONFIG.apiVersion, "1.33.0")) { + $('.battery').show(); + $('select.batterymetertype').show(); - if (semver.gte(CONFIG.apiVersion, "1.31.0")) { - $('select.batterymetertype').show(); - - if (MISC.batterymetertype !== 0) { - $('.vbatCalibration').hide(); - } - } else { - $('select.batterymetertype').hide(); + if (BATTERY_CONFIG.voltageMeterSource !== 0) { + $('.vbatCalibration').hide(); } } else { - $('.vbatmonitoring').hide(); + $('.battery').hide(); } } function checkUpdateCurrentControls() { - if (BF_CONFIG.features.isEnabled('CURRENT_METER')) { + // FIXME move + if (semver.gte(CONFIG.apiVersion, "1.33.0")) { $('.currentMonitoring').show(); - switch(BF_CONFIG.currentmetertype) { - case 0: - $('.currentCalibration').hide(); - $('.currentOutput').hide(); + switch(BATTERY_CONFIG.currentMeterSource) { + case 1: // ADC + $('.currentCalibration').show(); + $('.currentOutput').show(); break; - case 3: + + case 0: // None + case 2: // Virtual / FIXME not supported yet $('.currentCalibration').hide(); - } - - if (BF_CONFIG.currentmetertype !== 1 && BF_CONFIG.currentmetertype !== 2) { - $('.currentCalibration').hide(); + $('.currentOutput').hide(); + break; + + case 3: // ESC + $('.currentCalibration').hide(); + $('.currentOutput').show(); + break; } } else { $('.currentMonitoring').hide(); @@ -628,7 +653,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } function checkUpdateGpsControls() { - if (BF_CONFIG.features.isEnabled('GPS')) { + if (FEATURE_CONFIG.features.isEnabled('GPS')) { $('.gpsSettings').show(); } else { $('.gpsSettings').hide(); @@ -636,7 +661,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } function checkUpdate3dControls() { - if (BF_CONFIG.features.isEnabled('3D')) { + if (FEATURE_CONFIG.features.isEnabled('3D')) { $('._3dSettings').show(); } else { $('._3dSettings').hide(); @@ -646,8 +671,8 @@ TABS.configuration.initialize = function (callback, scrollPosition) { $('input.feature', features_e).change(function () { var element = $(this); - BF_CONFIG.features.updateData(element); - updateTabList(BF_CONFIG.features); + FEATURE_CONFIG.features.updateData(element); + updateTabList(FEATURE_CONFIG.features); switch (element.attr('name')) { case 'MOTOR_STOP': @@ -678,8 +703,8 @@ TABS.configuration.initialize = function (callback, scrollPosition) { $(features_e).filter('select').change(function () { var element = $(this); - BF_CONFIG.features.updateData(element); - updateTabList(BF_CONFIG.features); + FEATURE_CONFIG.features.updateData(element); + updateTabList(FEATURE_CONFIG.features); switch (element.attr('name')) { case 'rxMode': @@ -708,13 +733,13 @@ TABS.configuration.initialize = function (callback, scrollPosition) { $('a.save').click(function () { // gather data that doesn't have automatic change event bound - BF_CONFIG.board_align_roll = parseInt($('input[name="board_align_roll"]').val()); - BF_CONFIG.board_align_pitch = parseInt($('input[name="board_align_pitch"]').val()); - BF_CONFIG.board_align_yaw = parseInt($('input[name="board_align_yaw"]').val()); + BOARD_ALIGNMENT_CONFIG.roll = parseInt($('input[name="board_align_roll"]').val()); + BOARD_ALIGNMENT_CONFIG.pitch = parseInt($('input[name="board_align_pitch"]').val()); + BOARD_ALIGNMENT_CONFIG.yaw = parseInt($('input[name="board_align_yaw"]').val()); CONFIG.accelerometerTrims[1] = parseInt($('input[name="roll"]').val()); CONFIG.accelerometerTrims[0] = parseInt($('input[name="pitch"]').val()); - MISC.mag_declination = parseFloat($('input[name="mag_declination"]').val()); + COMPASS_CONFIG.mag_declination = parseFloat($('input[name="mag_declination"]').val()); // motor disarm if(semver.gte(CONFIG.apiVersion, "1.8.0")) { @@ -722,24 +747,28 @@ TABS.configuration.initialize = function (callback, scrollPosition) { ARMING_CONFIG.disarm_kill_switch = $('input[id="disarmkillswitch"]').is(':checked') ? 1 : 0; } - MISC.minthrottle = parseInt($('input[name="minthrottle"]').val()); - MISC.maxthrottle = parseInt($('input[name="maxthrottle"]').val()); - MISC.mincommand = parseInt($('input[name="mincommand"]').val()); + MOTOR_CONFIG.minthrottle = parseInt($('input[name="minthrottle"]').val()); + MOTOR_CONFIG.maxthrottle = parseInt($('input[name="maxthrottle"]').val()); + MOTOR_CONFIG.mincommand = parseInt($('input[name="mincommand"]').val()); - MISC.vbatmincellvoltage = parseFloat($('input[name="mincellvoltage"]').val()); - MISC.vbatmaxcellvoltage = parseFloat($('input[name="maxcellvoltage"]').val()); - MISC.vbatwarningcellvoltage = parseFloat($('input[name="warningcellvoltage"]').val()); - MISC.vbatscale = parseInt($('input[name="voltagescale"]').val()); - - BF_CONFIG.currentscale = parseInt($('input[name="currentscale"]').val()); - BF_CONFIG.currentoffset = parseInt($('input[name="currentoffset"]').val()); - MISC.multiwiicurrentoutput = $('input[name="multiwiicurrentoutput"]').is(':checked') ? 1 : 0; + if(semver.gte(CONFIG.apiVersion, "1.33.0")) { + BATTERY_CONFIG.vbatmincellvoltage = parseFloat($('input[name="mincellvoltage"]').val()); + BATTERY_CONFIG.vbatmaxcellvoltage = parseFloat($('input[name="maxcellvoltage"]').val()); + BATTERY_CONFIG.vbatwarningcellvoltage = parseFloat($('input[name="warningcellvoltage"]').val()); + + // FIXME move + //MISC.vbatscale = parseInt($('input[name="voltagescale"]').val()); + + // FIXME this is a hack + var meter = CURRENT_METER_CONFIGS[0]; + meter.currentscale = parseInt($('input[name="currentscale"]').val()); + meter.currentoffset = parseInt($('input[name="currentoffset"]').val()); + } if(semver.gte(CONFIG.apiVersion, "1.14.0")) { - _3D.deadband3d_low = parseInt($('input[name="3ddeadbandlow"]').val()); - _3D.deadband3d_high = parseInt($('input[name="3ddeadbandhigh"]').val()); - _3D.neutral3d = parseInt($('input[name="3dneutral"]').val()); - _3D.deadband3d_throttle = ($('input[name="3ddeadbandthrottle"]').val()); + MOTOR_3D_CONFIG.deadband3d_low = parseInt($('input[name="3ddeadbandlow"]').val()); + MOTOR_3D_CONFIG.deadband3d_high = parseInt($('input[name="3ddeadbandhigh"]').val()); + MOTOR_3D_CONFIG.neutral = parseInt($('input[name="3dneutral"]').val()); } SENSOR_ALIGNMENT.align_gyro = parseInt(orientation_gyro_e.val()); @@ -761,121 +790,108 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } function save_serial_config() { - if (semver.lt(CONFIG.apiVersion, "1.6.0")) { - MSP.send_message(MSPCodes.MSP_SET_CF_SERIAL_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_CF_SERIAL_CONFIG), false, save_misc); - } else { - save_misc(); - } + var next_callback = save_feature_config; + MSP.send_message(MSPCodes.MSP_SET_CF_SERIAL_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_CF_SERIAL_CONFIG), false, next_callback); } - function save_misc() { - MSP.send_message(MSPCodes.MSP_SET_MISC, mspHelper.crunch(MSPCodes.MSP_SET_MISC), false, save_3d); + function save_feature_config() { + var next_callback = save_board_alignment_config; + MSP.send_message(MSPCodes.MSP_SET_FEATURE_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_FEATURE_CONFIG), false, next_callback); } - function save_3d() { + function save_board_alignment_config() { + var next_callback = save_motor_config; + MSP.send_message(MSPCodes.MSP_SET_BOARD_ALIGNMENT_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_BOARD_ALIGNMENT_CONFIG), false, next_callback); + } + + function save_motor_config() { + var next_callback = save_motor_3d_config; + MSP.send_message(MSPCodes.MSP_SET_MOTOR_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_MOTOR_CONFIG), false, next_callback); + } + + function save_motor_3d_config() { var next_callback = save_rc_deadband; - if(semver.gte(CONFIG.apiVersion, "1.14.0")) { - MSP.send_message(MSPCodes.MSP_SET_3D, mspHelper.crunch(MSPCodes.MSP_SET_3D), false, next_callback); - } else { - next_callback(); - } + MSP.send_message(MSPCodes.MSP_SET_MOTOR_3D_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_MOTOR_3D_CONFIG), false, next_callback); } function save_rc_deadband() { var next_callback = save_sensor_alignment; - if(semver.gte(CONFIG.apiVersion, "1.17.0")) { - MSP.send_message(MSPCodes.MSP_SET_RC_DEADBAND, mspHelper.crunch(MSPCodes.MSP_SET_RC_DEADBAND), false, next_callback); - } else { - next_callback(); - } + MSP.send_message(MSPCodes.MSP_SET_RC_DEADBAND, mspHelper.crunch(MSPCodes.MSP_SET_RC_DEADBAND), false, next_callback); } function save_sensor_alignment() { var next_callback = save_esc_protocol; - if(semver.gte(CONFIG.apiVersion, "1.15.0")) { - MSP.send_message(MSPCodes.MSP_SET_SENSOR_ALIGNMENT, mspHelper.crunch(MSPCodes.MSP_SET_SENSOR_ALIGNMENT), false, next_callback); - } else { - next_callback(); - } + MSP.send_message(MSPCodes.MSP_SET_SENSOR_ALIGNMENT, mspHelper.crunch(MSPCodes.MSP_SET_SENSOR_ALIGNMENT), false, next_callback); } function save_esc_protocol() { var next_callback = save_acc_trim; - if (semver.gte(CONFIG.apiVersion, "1.16.0")) { - MSP.send_message(MSPCodes.MSP_SET_ADVANCED_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_ADVANCED_CONFIG), false, next_callback); - } else { - next_callback(); - } + MSP.send_message(MSPCodes.MSP_SET_ADVANCED_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_ADVANCED_CONFIG), false, next_callback); } function save_acc_trim() { - MSP.send_message(MSPCodes.MSP_SET_ACC_TRIM, mspHelper.crunch(MSPCodes.MSP_SET_ACC_TRIM), false - , semver.gte(CONFIG.apiVersion, "1.8.0") ? save_arming_config : save_to_eeprom); + var next_callback = save_arming_config; + MSP.send_message(MSPCodes.MSP_SET_ACC_TRIM, mspHelper.crunch(MSPCodes.MSP_SET_ACC_TRIM), false, next_callback); } function save_arming_config() { - MSP.send_message(MSPCodes.MSP_SET_ARMING_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_ARMING_CONFIG), false, save_looptime_config); + MSP.send_message(MSPCodes.MSP_SET_ARMING_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_ARMING_CONFIG), false, save_sensor_config); } - function save_looptime_config() { - var next_callback = save_sensor_config; - if (semver.lt(CONFIG.apiVersion, "1.16.0")) { - FC_CONFIG.loopTime = PID_ADVANCED_CONFIG.gyro_sync_denom * 125; - MSP.send_message(MSPCodes.MSP_SET_LOOP_TIME, mspHelper.crunch(MSPCodes.MSP_SET_LOOP_TIME), false, next_callback); - } else { - next_callback(); - } - } function save_sensor_config() { var next_callback = save_name; - if (semver.gte(CONFIG.apiVersion, "1.16.0")) { - SENSOR_CONFIG.acc_hardware = $('input[id="accHardwareSwitch"]').is(':checked') ? 0 : 1; - SENSOR_CONFIG.baro_hardware = $('input[id="baroHardwareSwitch"]').is(':checked') ? 0 : 1; - SENSOR_CONFIG.mag_hardware = $('input[id="magHardwareSwitch"]').is(':checked') ? 0 : 1; - MSP.send_message(MSPCodes.MSP_SET_SENSOR_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_SENSOR_CONFIG), false, next_callback); - } else { - next_callback(); - } + SENSOR_CONFIG.acc_hardware = $('input[id="accHardwareSwitch"]').is(':checked') ? 0 : 1; + SENSOR_CONFIG.baro_hardware = $('input[id="baroHardwareSwitch"]').is(':checked') ? 0 : 1; + SENSOR_CONFIG.mag_hardware = $('input[id="magHardwareSwitch"]').is(':checked') ? 0 : 1; + MSP.send_message(MSPCodes.MSP_SET_SENSOR_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_SENSOR_CONFIG), false, next_callback); } function save_name() { - var next_callback = save_battery; + var next_callback = save_rx_config; + CONFIG.name = $.trim($('input[name="craftName"]').val()); + MSP.send_message(MSPCodes.MSP_SET_NAME, mspHelper.crunch(MSPCodes.MSP_SET_NAME), false, next_callback); + } + + function save_rx_config() { + var next_callback = save_battery; if (semver.gte(CONFIG.apiVersion, "1.20.0")) { - CONFIG.name = $.trim($('input[name="vesselName"]').val()); - MSP.send_message(MSPCodes.MSP_SET_NAME, mspHelper.crunch(MSPCodes.MSP_SET_NAME), false, next_callback); + MSP.send_message(MSPCodes.MSP_SET_RX_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_RX_CONFIG), false, next_callback); } else { next_callback(); } } function save_battery() { - var next_callback = save_current; - if (semver.gte(CONFIG.apiVersion, "1.31.0")) { - MSP.send_message(MSPCodes.MSP_SET_VOLTAGE_METER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_VOLTAGE_METER_CONFIG), false, next_callback); - } else { - next_callback(); - } - } - - function save_current() { - var next_callback = save_rx_config; - if (semver.gte(CONFIG.apiVersion, "1.31.0")) { - MSP.send_message(MSPCodes.MSP_SET_CURRENT_METER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_CURRENT_METER_CONFIG), false, next_callback); - } else { - next_callback(); - } - } - - function save_rx_config() { var next_callback = save_to_eeprom; - if (semver.gte(CONFIG.apiVersion, "1.31.0")) { - MSP.send_message(MSPCodes.MSP_SET_RX_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_RX_CONFIG), false, next_callback); + if (semver.gte(CONFIG.apiVersion, "1.33.0")) { + MSP.send_message(MSPCodes.MSP_SET_BATTERY_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_BATTERY_CONFIG), false, next_callback); } else { next_callback(); } } + // FIXME voltage/current configuation saving not implemented for >= 1.33.0 and broken/disabled for <= 1.33.0 + +// function save_voltage() { +// var next_callback = save_current; +// if (semver.lt(CONFIG.apiVersion, "1.33.0")) { +// MSP.send_message(MSPCodes.MSP_SET_VOLTAGE_METER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_VOLTAGE_METER_CONFIG), false, next_callback); +// } else { +// next_callback(); +// } +// } +// +// function save_current() { +// var next_callback = save_to_eeprom; +// if (semver.gte(CONFIG.apiVersion, "1.33.0")) { +// MSP.send_message(MSPCodes.MSP_SET_CURRENT_METER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_CURRENT_METER_CONFIG), false, next_callback); +// } else { +// next_callback(); +// } +// } + + function save_to_eeprom() { MSP.send_message(MSPCodes.MSP_EEPROM_WRITE, false, false, reboot); } @@ -906,9 +922,8 @@ TABS.configuration.initialize = function (callback, scrollPosition) { },1500); // 1500 ms seems to be just the right amount of delay to prevent data request timeouts } } - - MSP.send_message(MSPCodes.MSP_SET_BF_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_BF_CONFIG), false, save_serial_config); - + + save_serial_config(); }); // status data pulled via separate timer with static speed diff --git a/tabs/failsafe.html b/tabs/failsafe.html index 55e5a8c1..fb00ecdc 100644 --- a/tabs/failsafe.html +++ b/tabs/failsafe.html @@ -4,37 +4,14 @@
-
+

-
-
-

-

-
-
-
-
-
-
-
- - - - -
-
- -
-
-
-
+
@@ -52,7 +29,7 @@
-
+
@@ -65,7 +42,7 @@
-
+
diff --git a/tabs/failsafe.js b/tabs/failsafe.js index 28a9fcce..af914804 100644 --- a/tabs/failsafe.js +++ b/tabs/failsafe.js @@ -34,33 +34,31 @@ TABS.failsafe.initialize = function (callback, scrollPosition) { } function get_rc_data() { - MSP.send_message(MSPCodes.MSP_RC, false, false, load_config); + MSP.send_message(MSPCodes.MSP_RC, false, false, load_feature_config); } - // BEGIN Support for pre API version 1.15.0 - function load_config() { - MSP.send_message(MSPCodes.MSP_BF_CONFIG, false, false, load_misc); + function load_feature_config() { + MSP.send_message(MSPCodes.MSP_FEATURE_CONFIG, false, false, load_motor_config); } - function load_misc() { - MSP.send_message(MSPCodes.MSP_MISC, false, false, load_html); + function load_motor_config() { + MSP.send_message(MSPCodes.MSP_MOTOR_CONFIG, false, false, load_compass_config); + } + + function load_compass_config() { + MSP.send_message(MSPCodes.MSP_COMPASS_CONFIG, false, false, load_gps_config); + } + + function load_gps_config() { + MSP.send_message(MSPCodes.MSP_GPS_CONFIG, false, false, load_html); } - // END (Support for pre API version 1.15.0 function load_html() { $('#content').load("./tabs/failsafe.html", process_html); } - var apiVersionGte1_15_0 = semver.gte(CONFIG.apiVersion, "1.15.0"); - // Uncomment next line for testing older functionality on newer API version - //apiVersionGte1_15_0 = false; - - if(apiVersionGte1_15_0) { - load_rx_config(); - } else { - load_config(); - } + load_rx_config(); function process_html() { // fill stage 2 fields @@ -72,244 +70,221 @@ TABS.failsafe.initialize = function (callback, scrollPosition) { } } - // Conditionally hide the old or the new control pane's - if(apiVersionGte1_15_0) { - var oldPane = $('div.oldpane'); - oldPane.prop("disabled", true); - oldPane.hide(); - } else { - var newPane = $('div.newpane'); - newPane.prop("disabled", true); - newPane.hide(); + // FIXME cleanup oldpane html and css + var oldPane = $('div.oldpane'); + oldPane.prop("disabled", true); + oldPane.hide(); + + // generate labels for assigned aux modes + var auxAssignment = [], + i, + element; + + for (var channelIndex = 0; channelIndex < RC.active_channels - 4; channelIndex++) { + auxAssignment.push(""); } - if (apiVersionGte1_15_0) { - // generate labels for assigned aux modes - var auxAssignment = [], - i, - element; + for (var modeIndex = 0; modeIndex < AUX_CONFIG.length; modeIndex++) { - for (var channelIndex = 0; channelIndex < RC.active_channels - 4; channelIndex++) { - auxAssignment.push(""); - } + var modeId = AUX_CONFIG_IDS[modeIndex]; - for (var modeIndex = 0; modeIndex < AUX_CONFIG.length; modeIndex++) { + // scan mode ranges to find assignments + for (var modeRangeIndex = 0; modeRangeIndex < MODE_RANGES.length; modeRangeIndex++) { + var modeRange = MODE_RANGES[modeRangeIndex]; - var modeId = AUX_CONFIG_IDS[modeIndex]; - - // scan mode ranges to find assignments - for (var modeRangeIndex = 0; modeRangeIndex < MODE_RANGES.length; modeRangeIndex++) { - var modeRange = MODE_RANGES[modeRangeIndex]; - - if (modeRange.id != modeId) { - continue; - } - - var range = modeRange.range; - if (!(range.start < range.end)) { - continue; // invalid! - } - - auxAssignment[modeRange.auxChannelIndex] += "" + AUX_CONFIG[modeIndex] + ""; + if (modeRange.id != modeId) { + continue; } - } - // generate full channel list - var channelNames = [ - chrome.i18n.getMessage('controlAxisRoll'), - chrome.i18n.getMessage('controlAxisPitch'), - chrome.i18n.getMessage('controlAxisYaw'), - chrome.i18n.getMessage('controlAxisThrottle') - ], - fullChannels_e = $('div.activechannellist'), - aux_index = 1, - aux_assignment_index = 0; - - for (i = 0; i < RXFAIL_CONFIG.length; i++) { - if (i < channelNames.length) { - fullChannels_e.append('\ -
\ -
\ - ' + channelNames[i] + '\ -
\ -
\ - \ -
\ -
\ - '); - } else { - fullChannels_e.append('\ -
\ -
\ - ' + chrome.i18n.getMessage("controlAxisAux" + (aux_index++)) + '\ - ' + auxAssignment[aux_assignment_index++] + '\ -
\ -
\ - \ -
\ -
\ -
\ - '); + var range = modeRange.range; + if (!(range.start < range.end)) { + continue; // invalid! } + + auxAssignment[modeRange.auxChannelIndex] += "" + AUX_CONFIG[modeIndex] + ""; } - - var channel_mode_array = []; - $('.number', fullChannels_e).each(function () { - channel_mode_array.push($('select.aux_set' , this)); - }); - - var channel_value_array = []; - $('.number', fullChannels_e).each(function () { - channel_value_array.push($('input[name="aux_value"]' , this)); - }); - - var channelMode = $('select.aux_set'); - var channelValue = $('input[name="aux_value"]'); - - // UI hooks - channelMode.change(function () { - var currentMode = parseInt($(this).val()); - var i = parseInt($(this).prop("id")); - RXFAIL_CONFIG[i].mode = currentMode; - if (currentMode == 2) { - channel_value_array[i].prop("disabled", false); - channel_value_array[i].show(); - } else { - channel_value_array[i].prop("disabled", true); - channel_value_array[i].hide(); - } - }); - - // UI hooks - channelValue.change(function () { - var i = parseInt($(this).prop("id")); - RXFAIL_CONFIG[i].value = parseInt($(this).val()); - }); - - // for some odd reason chrome 38+ changes scroll according to the touched select element - // i am guessing this is a bug, since this wasn't happening on 37 - // code below is a temporary fix, which we will be able to remove in the future (hopefully) - $('#content').scrollTop((scrollPosition) ? scrollPosition : 0); - - // fill stage 1 Valid Pulse Range Settings - $('input[name="rx_min_usec"]').val(RX_CONFIG.rx_min_usec); - $('input[name="rx_max_usec"]').val(RX_CONFIG.rx_max_usec); - - // fill fallback settings (mode and value) for all channels - for (i = 0; i < RXFAIL_CONFIG.length; i++) { - channel_value_array[i].val(RXFAIL_CONFIG[i].value); - channel_mode_array[i].val(RXFAIL_CONFIG[i].mode); - channel_mode_array[i].change(); - } - - BF_CONFIG.features.generateElements($('.tab-failsafe .featuresNew')); - - var failsafeFeature = $('input[name="FAILSAFE"]'); - failsafeFeature.change(function () { - toggleStage2($(this).is(':checked')); - }); - toggleStage2(BF_CONFIG.features.isEnabled('FAILSAFE')); - - $('input[name="failsafe_throttle"]').val(FAILSAFE_CONFIG.failsafe_throttle); - $('input[name="failsafe_off_delay"]').val(FAILSAFE_CONFIG.failsafe_off_delay); - $('input[name="failsafe_throttle_low_delay"]').val(FAILSAFE_CONFIG.failsafe_throttle_low_delay); - $('input[name="failsafe_delay"]').val(FAILSAFE_CONFIG.failsafe_delay); - - // set stage 2 failsafe procedure - $('input[type="radio"].procedure').change(function () { - var element = $(this), - checked = element.is(':checked'), - id = element.attr('id'); - switch(id) { - case 'drop': - if (checked) { - $('input[name="failsafe_throttle"]').prop("disabled", true); - $('input[name="failsafe_off_delay"]').prop("disabled", true); - } - break; - - case 'land': - if (checked) { - $('input[name="failsafe_throttle"]').prop("disabled", false); - $('input[name="failsafe_off_delay"]').prop("disabled", false); - } - break; - } - }); - - switch(FAILSAFE_CONFIG.failsafe_procedure) { - default: - case 0: - element = $('input[id="land"]') ; - element.prop('checked', true); - element.change(); - break; - case 1: - element = $('input[id="drop"]'); - element.prop('checked', true); - element.change(); - break; - } - - // set stage 2 kill switch option - $('input[name="failsafe_kill_switch"]').prop('checked', FAILSAFE_CONFIG.failsafe_kill_switch); - - } else { - BF_CONFIG.features.generateElements($('.tab-failsafe .featuresOld')); - // fill failsafe_throttle field (pre API 1.15.0) - $('input[name="failsafe_throttle_old"]').val(MISC.failsafe_throttle); } + // generate full channel list + var channelNames = [ + chrome.i18n.getMessage('controlAxisRoll'), + chrome.i18n.getMessage('controlAxisPitch'), + chrome.i18n.getMessage('controlAxisYaw'), + chrome.i18n.getMessage('controlAxisThrottle') + ], + fullChannels_e = $('div.activechannellist'), + aux_index = 1, + aux_assignment_index = 0; + + for (i = 0; i < RXFAIL_CONFIG.length; i++) { + if (i < channelNames.length) { + fullChannels_e.append('\ +
\ +
\ + ' + channelNames[i] + '\ +
\ +
\ + \ +
\ +
\ + '); + } else { + fullChannels_e.append('\ +
\ +
\ + ' + chrome.i18n.getMessage("controlAxisAux" + (aux_index++)) + '\ + ' + auxAssignment[aux_assignment_index++] + '\ +
\ +
\ + \ +
\ +
\ +
\ + '); + } + } + + var channel_mode_array = []; + $('.number', fullChannels_e).each(function () { + channel_mode_array.push($('select.aux_set' , this)); + }); + + var channel_value_array = []; + $('.number', fullChannels_e).each(function () { + channel_value_array.push($('input[name="aux_value"]' , this)); + }); + + var channelMode = $('select.aux_set'); + var channelValue = $('input[name="aux_value"]'); + + // UI hooks + channelMode.change(function () { + var currentMode = parseInt($(this).val()); + var i = parseInt($(this).prop("id")); + RXFAIL_CONFIG[i].mode = currentMode; + if (currentMode == 2) { + channel_value_array[i].prop("disabled", false); + channel_value_array[i].show(); + } else { + channel_value_array[i].prop("disabled", true); + channel_value_array[i].hide(); + } + }); + + // UI hooks + channelValue.change(function () { + var i = parseInt($(this).prop("id")); + RXFAIL_CONFIG[i].value = parseInt($(this).val()); + }); + + // for some odd reason chrome 38+ changes scroll according to the touched select element + // i am guessing this is a bug, since this wasn't happening on 37 + // code below is a temporary fix, which we will be able to remove in the future (hopefully) + $('#content').scrollTop((scrollPosition) ? scrollPosition : 0); + + // fill stage 1 Valid Pulse Range Settings + $('input[name="rx_min_usec"]').val(RX_CONFIG.rx_min_usec); + $('input[name="rx_max_usec"]').val(RX_CONFIG.rx_max_usec); + + // fill fallback settings (mode and value) for all channels + for (i = 0; i < RXFAIL_CONFIG.length; i++) { + channel_value_array[i].val(RXFAIL_CONFIG[i].value); + channel_mode_array[i].val(RXFAIL_CONFIG[i].mode); + channel_mode_array[i].change(); + } + + FEATURE_CONFIG.features.generateElements($('.tab-failsafe .featuresNew')); + + var failsafeFeature = $('input[name="FAILSAFE"]'); + failsafeFeature.change(function () { + toggleStage2($(this).is(':checked')); + }); + toggleStage2(FEATURE_CONFIG.features.isEnabled('FAILSAFE')); + + $('input[name="failsafe_throttle"]').val(FAILSAFE_CONFIG.failsafe_throttle); + $('input[name="failsafe_off_delay"]').val(FAILSAFE_CONFIG.failsafe_off_delay); + $('input[name="failsafe_throttle_low_delay"]').val(FAILSAFE_CONFIG.failsafe_throttle_low_delay); + $('input[name="failsafe_delay"]').val(FAILSAFE_CONFIG.failsafe_delay); + + // set stage 2 failsafe procedure + $('input[type="radio"].procedure').change(function () { + var element = $(this), + checked = element.is(':checked'), + id = element.attr('id'); + switch(id) { + case 'drop': + if (checked) { + $('input[name="failsafe_throttle"]').prop("disabled", true); + $('input[name="failsafe_off_delay"]').prop("disabled", true); + } + break; + + case 'land': + if (checked) { + $('input[name="failsafe_throttle"]').prop("disabled", false); + $('input[name="failsafe_off_delay"]').prop("disabled", false); + } + break; + } + }); + + switch(FAILSAFE_CONFIG.failsafe_procedure) { + default: + case 0: + element = $('input[id="land"]') ; + element.prop('checked', true); + element.change(); + break; + case 1: + element = $('input[id="drop"]'); + element.prop('checked', true); + element.change(); + break; + } + + // set stage 2 kill switch option + $('input[name="failsafe_kill_switch"]').prop('checked', FAILSAFE_CONFIG.failsafe_kill_switch); + + $('a.save').click(function () { // gather data that doesn't have automatic change event bound - BF_CONFIG.features.updateData($('input[name="FAILSAFE"]')); + FEATURE_CONFIG.features.updateData($('input[name="FAILSAFE"]')); - if(apiVersionGte1_15_0) { - RX_CONFIG.rx_min_usec = parseInt($('input[name="rx_min_usec"]').val()); - RX_CONFIG.rx_max_usec = parseInt($('input[name="rx_max_usec"]').val()); + RX_CONFIG.rx_min_usec = parseInt($('input[name="rx_min_usec"]').val()); + RX_CONFIG.rx_max_usec = parseInt($('input[name="rx_max_usec"]').val()); - FAILSAFE_CONFIG.failsafe_throttle = parseInt($('input[name="failsafe_throttle"]').val()); - FAILSAFE_CONFIG.failsafe_off_delay = parseInt($('input[name="failsafe_off_delay"]').val()); - FAILSAFE_CONFIG.failsafe_throttle_low_delay = parseInt($('input[name="failsafe_throttle_low_delay"]').val()); - FAILSAFE_CONFIG.failsafe_delay = parseInt($('input[name="failsafe_delay"]').val()); + FAILSAFE_CONFIG.failsafe_throttle = parseInt($('input[name="failsafe_throttle"]').val()); + FAILSAFE_CONFIG.failsafe_off_delay = parseInt($('input[name="failsafe_off_delay"]').val()); + FAILSAFE_CONFIG.failsafe_throttle_low_delay = parseInt($('input[name="failsafe_throttle_low_delay"]').val()); + FAILSAFE_CONFIG.failsafe_delay = parseInt($('input[name="failsafe_delay"]').val()); - if( $('input[id="land"]').is(':checked')) { - FAILSAFE_CONFIG.failsafe_procedure = 0; - } else if( $('input[id="drop"]').is(':checked')) { - FAILSAFE_CONFIG.failsafe_procedure = 1; - } - - FAILSAFE_CONFIG.failsafe_kill_switch = $('input[name="failsafe_kill_switch"]').is(':checked') ? 1 : 0; - } else { - // get failsafe_throttle field value (pre API 1.15.0) - MISC.failsafe_throttle = parseInt($('input[name="failsafe_throttle_old"]').val()); + if( $('input[id="land"]').is(':checked')) { + FAILSAFE_CONFIG.failsafe_procedure = 0; + } else if( $('input[id="drop"]').is(':checked')) { + FAILSAFE_CONFIG.failsafe_procedure = 1; } + FAILSAFE_CONFIG.failsafe_kill_switch = $('input[name="failsafe_kill_switch"]').is(':checked') ? 1 : 0; + function save_failssafe_config() { MSP.send_message(MSPCodes.MSP_SET_FAILSAFE_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_FAILSAFE_CONFIG), false, save_rxfail_config); } function save_rxfail_config() { - mspHelper.sendRxFailConfig(save_bf_config); + mspHelper.sendRxFailConfig(save_feature_config); } - function save_bf_config() { - MSP.send_message(MSPCodes.MSP_SET_BF_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_BF_CONFIG), false, save_to_eeprom); + function save_feature_config() { + MSP.send_message(MSPCodes.MSP_SET_FEATURE_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_FEATURE_CONFIG), false, save_to_eeprom); } - // BEGIN pre API 1.15.0 save functions - function save_misc() { - MSP.send_message(MSPCodes.MSP_SET_MISC, mspHelper.crunch(MSPCodes.MSP_SET_MISC), false, save_to_eeprom); - } - // END pre API 1.15.0 save functions - function save_to_eeprom() { MSP.send_message(MSPCodes.MSP_EEPROM_WRITE, false, false, reboot); } @@ -341,11 +316,7 @@ TABS.failsafe.initialize = function (callback, scrollPosition) { } } - if(apiVersionGte1_15_0) { - MSP.send_message(MSPCodes.MSP_SET_RX_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_RX_CONFIG), false, save_failssafe_config); - } else { - MSP.send_message(MSPCodes.MSP_SET_BF_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_BF_CONFIG), false, save_misc); - } + MSP.send_message(MSPCodes.MSP_SET_RX_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_RX_CONFIG), false, save_failssafe_config); }); // translate to user-selected language diff --git a/tabs/logging.js b/tabs/logging.js index 25551776..d6c04af4 100644 --- a/tabs/logging.js +++ b/tabs/logging.js @@ -229,8 +229,18 @@ TABS.logging.initialize = function (callback) { fileWriter = null; function prepare_file() { + + var prefix = CONFIG.flightControllerIdentifier + '_log'; + var suffix = 'csv'; + + var filename = generateFilename(prefix, suffix); + + var accepts = [{ + extensions: [suffix], + }]; + // create or load the file - chrome.fileSystem.chooseEntry({type: 'saveFile', suggestedName: 'betaflight_data_log', accepts: [{extensions: ['csv']}]}, function(entry) { + chrome.fileSystem.chooseEntry({type: 'saveFile', suggestedName: filename, accepts: accepts}, function(entry) { if (!entry) { console.log('No file selected'); return; diff --git a/tabs/motors.js b/tabs/motors.js index 05121c21..d8eeba0d 100644 --- a/tabs/motors.js +++ b/tabs/motors.js @@ -12,40 +12,29 @@ TABS.motors.initialize = function (callback) { self.armed = false; self.feature3DSupported = false; self.allowTestMode = true; + self.feature3DSupported = true; if (GUI.active_tab != 'motors') { GUI.active_tab = 'motors'; } function get_arm_status() { - MSP.send_message(MSPCodes.MSP_STATUS, false, false, load_config); + MSP.send_message(MSPCodes.MSP_STATUS, false, false, load_feature_config); } - function load_config() { - MSP.send_message(MSPCodes.MSP_BF_CONFIG, false, false, load_3d); + function load_feature_config() { + MSP.send_message(MSPCodes.MSP_FEATURE_CONFIG, false, false, load_motor_3d_config); } - function load_3d() { - var next_callback = esc_protocol; - if (semver.gte(CONFIG.apiVersion, "1.14.0")) { - self.feature3DSupported = true; - MSP.send_message(MSPCodes.MSP_3D, false, false, next_callback); - } else { - next_callback(); - } + function load_motor_3d_config() { + MSP.send_message(MSPCodes.MSP_MOTOR_3D_CONFIG, false, false, load_esc_protocol); } - function esc_protocol() { - var next_callback = get_motor_data; - if (semver.gte(CONFIG.apiVersion, "1.16.0")) { - MSP.send_message(MSPCodes.MSP_ADVANCED_CONFIG, false, false, next_callback); - } else { - next_callback(); - } + function load_esc_protocol() { + MSP.send_message(MSPCodes.MSP_ADVANCED_CONFIG, false, false, load_motor_data); } - function get_motor_data() { - update_arm_status(); + function load_motor_data() { MSP.send_message(MSPCodes.MSP_MOTOR, false, false, load_html); } @@ -53,7 +42,7 @@ TABS.motors.initialize = function (callback) { $('#content').load("./tabs/motors.html", process_html); } - MSP.send_message(MSPCodes.MSP_MISC, false, false, get_arm_status); + MSP.send_message(MSPCodes.MSP_MOTOR_CONFIG, false, false, get_arm_status); function update_arm_status() { self.armed = bit_check(CONFIG.mode, 0); @@ -185,8 +174,10 @@ TABS.motors.initialize = function (callback) { function process_html() { // translate to user-selected language localize(); + + update_arm_status(); - self.feature3DEnabled = BF_CONFIG.features.isEnabled('3D'); + self.feature3DEnabled = FEATURE_CONFIG.features.isEnabled('3D'); if (self.feature3DEnabled && !self.feature3DSupported) { self.allowTestMode = false; @@ -201,7 +192,7 @@ TABS.motors.initialize = function (callback) { $('#motorsEnableTestMode').prop('checked', false) .prop('disabled', true); - update_model(BF_CONFIG.mixerConfiguration); + update_model(MIXER_CONFIG.mixer); // Always start with default/empty sensor data array, clean slate all initSensorData(); @@ -330,19 +321,19 @@ TABS.motors.initialize = function (callback) { '); } - $('div.sliders input').prop('min', MISC.mincommand) - .prop('max', MISC.maxthrottle); - $('div.values li:not(:last)').text(MISC.mincommand); + $('div.sliders input').prop('min', MOTOR_CONFIG.mincommand) + .prop('max', MOTOR_CONFIG.maxthrottle); + $('div.values li:not(:last)').text(MOTOR_CONFIG.mincommand); if(self.feature3DEnabled && self.feature3DSupported) { //Arbitrary sanity checks //Note: values may need to be revisited - if(_3D.neutral3d > 1575 || _3D.neutral3d < 1425) - _3D.neutral3d = 1500; + if(MOTOR_3D_CONFIG.neutral > 1575 || MOTOR_3D_CONFIG.neutral < 1425) + MOTOR_3D_CONFIG.neutral = 1500; - $('div.sliders input').val(_3D.neutral3d); + $('div.sliders input').val(MOTOR_3D_CONFIG.neutral); } else { - $('div.sliders input').val(MISC.mincommand); + $('div.sliders input').val(MOTOR_CONFIG.mincommand); } if(self.allowTestMode){ @@ -397,9 +388,9 @@ TABS.motors.initialize = function (callback) { // change all values to default if (self.feature3DEnabled && self.feature3DSupported) { - $('div.sliders input').val(_3D.neutral3d); + $('div.sliders input').val(MOTOR_3D_CONFIG.neutral); } else { - $('div.sliders input').val(MISC.mincommand); + $('div.sliders input').val(MOTOR_CONFIG.mincommand); } $('div.sliders input').trigger('input'); @@ -411,11 +402,11 @@ TABS.motors.initialize = function (callback) { for (var i = 0; i < number_of_valid_outputs; i++) { if (!self.feature3DEnabled) { - if (MOTOR_DATA[i] > MISC.mincommand) { + if (MOTOR_DATA[i] > MOTOR_CONFIG.mincommand) { motors_running = true; } } else { - if ((MOTOR_DATA[i] < _3D.deadband3d_low) || (MOTOR_DATA[i] > _3D.deadband3d_high)) { + if ((MOTOR_DATA[i] < MOTOR_3D_CONFIG.deadband3d_low) || (MOTOR_DATA[i] > MOTOR_3D_CONFIG.deadband3d_high)) { motors_running = true; } } @@ -473,8 +464,8 @@ TABS.motors.initialize = function (callback) { full_block_scale = 1000; motorOffset = 1000; } else { - full_block_scale = MISC.maxthrottle - MISC.mincommand; - motorOffset = MISC.mincommand; + full_block_scale = MOTOR_CONFIG.maxthrottle - MOTOR_CONFIG.mincommand; + motorOffset = MOTOR_CONFIG.mincommand; } function update_ui() { diff --git a/tabs/onboard_logging.js b/tabs/onboard_logging.js index 155bb0db..76a6402e 100644 --- a/tabs/onboard_logging.js +++ b/tabs/onboard_logging.js @@ -4,7 +4,6 @@ var sdcardTimer; TABS.onboard_logging = { - available: false, blockSize: 128, BLOCK_SIZE: 4096, @@ -21,39 +20,17 @@ TABS.onboard_logging.initialize = function (callback) { } if (CONFIGURATOR.connectionValid) { - // Blackbox was introduced in 1.5.0, dataflash API was introduced in 1.8.0, BLACKBOX/SDCARD MSP APIs in 1.11.0 - TABS.onboard_logging.available = semver.gte(CONFIG.flightControllerVersion, "1.5.0"); - - if (!TABS.onboard_logging.available) { - load_html(); - return; - } - var load_name = function () { - var next_callback = load_html; - if (semver.gte(CONFIG.apiVersion, "1.20.0")) { - MSP.send_message(MSPCodes.MSP_NAME, false, false, next_callback); - } else { - next_callback(); - } - }; - - MSP.send_message(MSPCodes.MSP_BF_CONFIG, false, false, function() { - if (semver.gte(CONFIG.flightControllerVersion, "1.8.0")) { - MSP.send_message(MSPCodes.MSP_DATAFLASH_SUMMARY, false, false, function() { - if (semver.gte(CONFIG.flightControllerVersion, "1.11.0")) { - MSP.send_message(MSPCodes.MSP_SDCARD_SUMMARY, false, false, function() { - MSP.send_message(MSPCodes.MSP_BLACKBOX_CONFIG, false, false, function() { - MSP.send_message(MSPCodes.MSP_ADVANCED_CONFIG, false, false, load_name); - }); + MSP.send_message(MSPCodes.MSP_FEATURE_CONFIG, false, false, function() { + MSP.send_message(MSPCodes.MSP_DATAFLASH_SUMMARY, false, false, function() { + MSP.send_message(MSPCodes.MSP_SDCARD_SUMMARY, false, false, function() { + MSP.send_message(MSPCodes.MSP_BLACKBOX_CONFIG, false, false, function() { + MSP.send_message(MSPCodes.MSP_ADVANCED_CONFIG, false, false, function() { + MSP.send_message(MSPCodes.MSP_NAME, false, false, load_html); }); - } else { - load_html(); - } + }); }); - } else { - load_html(); - } + }); }); } @@ -109,11 +86,8 @@ TABS.onboard_logging.initialize = function (callback) { * * The best we can do on those targets is check the BLACKBOX feature bit to identify support for Blackbox instead. */ - if (BLACKBOX.supported || DATAFLASH.supported - || semver.gte(CONFIG.flightControllerVersion, "1.5.0") && semver.lte(CONFIG.flightControllerVersion, "1.10.0") && BF_CONFIG.features.isEnabled('BLACKBOX')) { + if ((BLACKBOX.supported || DATAFLASH.supported) && FEATURE_CONFIG.features.isEnabled('BLACKBOX')) { blackboxSupport = 'yes'; - } else if (semver.gte(CONFIG.flightControllerVersion, "1.5.0") && semver.lte(CONFIG.flightControllerVersion, "1.10.0")) { - blackboxSupport = 'maybe'; } else { blackboxSupport = 'no'; } diff --git a/tabs/pid_tuning.js b/tabs/pid_tuning.js index 4d8947e7..7c678a36 100755 --- a/tabs/pid_tuning.js +++ b/tabs/pid_tuning.js @@ -34,19 +34,7 @@ TABS.pid_tuning.initialize = function (callback) { }).then(function() { return MSP.promise(MSPCodes.MSP_FILTER_CONFIG); }).then(function() { - var promise = true; - if (CONFIG.flightControllerIdentifier === "BTFL" && semver.gte(CONFIG.apiVersion, "1.16.0")) { - promise = MSP.promise(MSPCodes.MSP_BF_CONFIG); - } - - return promise; - }).then(function() { - var promise = true; - if (semver.gte(CONFIG.apiVersion, "1.15.0")) { - promise = MSP.promise(MSPCodes.MSP_RC_DEADBAND); - } - - return promise; + return MSP.promise(MSPCodes.MSP_RC_DEADBAND); }).then(function() { $('#content').load("./tabs/pid_tuning.html", process_html); }); @@ -236,7 +224,7 @@ TABS.pid_tuning.initialize = function (callback) { } if (semver.gte(CONFIG.apiVersion, "1.20.0") - || semver.gte(CONFIG.apiVersion, "1.16.0") && BF_CONFIG.features.isEnabled('SUPEREXPO_RATES')) { + || semver.gte(CONFIG.apiVersion, "1.16.0") && FEATURE_CONFIG.features.isEnabled('SUPEREXPO_RATES')) { $('#pid-tuning .rate').text(chrome.i18n.getMessage("pidTuningSuperRate")); } else { $('#pid-tuning .rate').text(chrome.i18n.getMessage("pidTuningRate")); @@ -351,7 +339,7 @@ TABS.pid_tuning.initialize = function (callback) { FILTER_CONFIG.yaw_lpf_hz = parseInt($('.pid_filter input[name="yawLowpassFrequency"]').val()); if (semver.gte(CONFIG.apiVersion, "1.16.0") && !semver.gte(CONFIG.apiVersion, "1.20.0")) { - BF_CONFIG.features.updateData($('input[name="SUPEREXPO_RATES"]')); + FEATURE_CONFIG.features.updateData($('input[name="SUPEREXPO_RATES"]')); } if (semver.gte(CONFIG.apiVersion, "1.16.0")) { @@ -407,7 +395,7 @@ TABS.pid_tuning.initialize = function (callback) { $('#pid_mag').show(); showTitle = true; } - if (BF_CONFIG.features.isEnabled('GPS')) { + if (FEATURE_CONFIG.features.isEnabled('GPS')) { $('#pid_gps').show(); showTitle = true; } @@ -470,7 +458,7 @@ TABS.pid_tuning.initialize = function (callback) { function process_html() { if (semver.gte(CONFIG.apiVersion, "1.16.0") && !semver.gte(CONFIG.apiVersion, "1.20.0")) { - BF_CONFIG.features.generateElements($('.tab-pid_tuning .features')); + FEATURE_CONFIG.features.generateElements($('.tab-pid_tuning .features')); } else { $('.tab-pid_tuning .pidTuningFeatures').hide(); } @@ -487,9 +475,9 @@ TABS.pid_tuning.initialize = function (callback) { rc_rate_yaw: RC_tuning.rcYawRate, rc_expo: RC_tuning.RC_EXPO, rc_yaw_expo: RC_tuning.RC_YAW_EXPO, - superexpo: BF_CONFIG.features.isEnabled('SUPEREXPO_RATES'), - deadband: RC_deadband.deadband, - yawDeadband: RC_deadband.yaw_deadband + superexpo: FEATURE_CONFIG.features.isEnabled('SUPEREXPO_RATES'), + deadband: RC_DEADBAND_CONFIG.deadband, + yawDeadband: RC_DEADBAND_CONFIG.yaw_deadband }; if (semver.lt(CONFIG.apiVersion, "1.7.0")) { @@ -853,19 +841,11 @@ TABS.pid_tuning.initialize = function (callback) { }).then(function () { return MSP.promise(MSPCodes.MSP_SET_PID, mspHelper.crunch(MSPCodes.MSP_SET_PID)); }).then(function () { - if (semver.gte(CONFIG.apiVersion, "1.16.0")) { - return MSP.promise(MSPCodes.MSP_SET_PID_ADVANCED, mspHelper.crunch(MSPCodes.MSP_SET_PID_ADVANCED)); - } + return MSP.promise(MSPCodes.MSP_SET_PID_ADVANCED, mspHelper.crunch(MSPCodes.MSP_SET_PID_ADVANCED)); }).then(function () { - if (semver.gte(CONFIG.apiVersion, "1.16.0")) { - return MSP.promise(MSPCodes.MSP_SET_FILTER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_FILTER_CONFIG)); - } + return MSP.promise(MSPCodes.MSP_SET_FILTER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_FILTER_CONFIG)); }).then(function () { return MSP.promise(MSPCodes.MSP_SET_RC_TUNING, mspHelper.crunch(MSPCodes.MSP_SET_RC_TUNING)); - }).then(function () { - if (semver.gte(CONFIG.apiVersion, "1.16.0")) { - return MSP.promise(MSPCodes.MSP_SET_BF_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_BF_CONFIG)); - } }).then(function () { return MSP.promise(MSPCodes.MSP_EEPROM_WRITE); }).then(function () { diff --git a/tabs/receiver.css b/tabs/receiver.css index 9c97a8ce..e8dd4497 100644 --- a/tabs/receiver.css +++ b/tabs/receiver.css @@ -164,6 +164,7 @@ border-right: 1px solid silver; } .tab-receiver .tunings table { + width: 100%; border-collapse: collapse; } diff --git a/tabs/receiver.html b/tabs/receiver.html index 40e2f8c9..db80ae35 100644 --- a/tabs/receiver.html +++ b/tabs/receiver.html @@ -27,45 +27,65 @@
- +
- - - + + + + + +
- - -
-
- -
+
+
-
+
+ +
+
+
+ +
+
+
+
+ + + + + + + + + +
+
-
-
+
-
-
+
+ +
+
- +
diff --git a/tabs/receiver.js b/tabs/receiver.js index a6b3df3c..3833a238 100644 --- a/tabs/receiver.js +++ b/tabs/receiver.js @@ -15,24 +15,19 @@ TABS.receiver.initialize = function (callback) { } function get_rc_data() { - MSP.send_message(MSPCodes.MSP_RC, false, false, get_rc_tuning_data); + MSP.send_message(MSPCodes.MSP_RC, false, false, get_rssi_config); } - function get_rc_tuning_data() { - MSP.send_message(MSPCodes.MSP_RC_TUNING, false, false, get_bt_config_data); + function get_rssi_config() { + MSP.send_message(MSPCodes.MSP_RSSI_CONFIG, false, false, get_rc_tuning); } - function get_bt_config_data() { - MSP.send_message(MSPCodes.MSP_BF_CONFIG, false, false, get_rc_map); + function get_rc_tuning() { + MSP.send_message(MSPCodes.MSP_RC_TUNING, false, false, get_rc_map); } function get_rc_map() { - MSP.send_message(MSPCodes.MSP_RX_MAP, false, false, load_config); - } - - // Fetch features so we can check if RX_MSP is enabled: - function load_config() { - MSP.send_message(MSPCodes.MSP_BF_CONFIG, false, false, load_rc_configs); + MSP.send_message(MSPCodes.MSP_RX_MAP, false, false, load_rc_configs); } function load_rc_configs() { @@ -57,7 +52,7 @@ TABS.receiver.initialize = function (callback) { $('#content').load("./tabs/receiver.html", process_html); } - MSP.send_message(MSPCodes.MSP_MISC, false, false, get_rc_data); + MSP.send_message(MSPCodes.MSP_FEATURE_CONFIG, false, false, get_rc_data); function process_html() { // translate to user-selected language @@ -74,9 +69,9 @@ TABS.receiver.initialize = function (callback) { if (semver.lt(CONFIG.apiVersion, "1.15.0")) { $('.deadband').hide(); } else { - $('.deadband input[name="midrc"]').val(RX_CONFIG.midrc); - $('.deadband input[name="yaw_deadband"]').val(RC_deadband.yaw_deadband); - $('.deadband input[name="deadband"]').val(RC_deadband.deadband); + $('.deadband input[name="yaw_deadband"]').val(RC_DEADBAND_CONFIG.yaw_deadband); + $('.deadband input[name="deadband"]').val(RC_DEADBAND_CONFIG.deadband); + $('.deadband input[name="3ddeadbandthrottle"]').val(RC_DEADBAND_CONFIG.deadband3d_throttle); $('.deadband input[name="deadband"]').change(function () { this.deadband = parseInt($(this).val()); @@ -84,7 +79,14 @@ TABS.receiver.initialize = function (callback) { $('.deadband input[name="yaw_deadband"]').change(function () { this.yawDeadband = parseInt($(this).val()); }).change(); - + } + + if (semver.lt(CONFIG.apiVersion, "1.15.0")) { + $('.sticks').hide(); + } else { + $('.sticks input[name="stick_min"]').val(RX_CONFIG.stick_min); + $('.sticks input[name="stick_center"]').val(RX_CONFIG.stick_center); + $('.sticks input[name="stick_max"]').val(RX_CONFIG.stick_max); } if (semver.gte(CONFIG.apiVersion, "1.20.0")) { @@ -226,7 +228,7 @@ TABS.receiver.initialize = function (callback) { rssi_channel_e.append(''); } - $('select[name="rssi_channel"]').val(MISC.rssi_channel); + $('select[name="rssi_channel"]').val(RSSI_CONFIG.channel); var rateHeight = TABS.receiver.rateChartHeight; @@ -237,9 +239,12 @@ TABS.receiver.initialize = function (callback) { $('a.update').click(function () { if (semver.gte(CONFIG.apiVersion, "1.15.0")) { - RX_CONFIG.midrc = parseInt($('.deadband input[name="midrc"]').val()); - RC_deadband.yaw_deadband = parseInt($('.deadband input[name="yaw_deadband"]').val()); - RC_deadband.deadband = parseInt($('.deadband input[name="deadband"]').val()); + RX_CONFIG.stick_max = parseInt($('.sticks input[name="stick_max"]').val()); + RX_CONFIG.stick_center = parseInt($('.sticks input[name="stick_center"]').val()); + RX_CONFIG.stick_min = parseInt($('.sticks input[name="stick_min"]').val()); + RC_DEADBAND_CONFIG.yaw_deadband = parseInt($('.deadband input[name="yaw_deadband"]').val()); + RC_DEADBAND_CONFIG.deadband = parseInt($('.deadband input[name="deadband"]').val()); + RC_DEADBAND_CONFIG.deadband3d_throttle = ($('.deadband input[name="3ddeadbandthrottle"]').val()); } // catch rc map @@ -251,15 +256,16 @@ TABS.receiver.initialize = function (callback) { } // catch rssi aux - MISC.rssi_channel = parseInt($('select[name="rssi_channel"]').val()); + RSSI_CONFIG.channel = parseInt($('select[name="rssi_channel"]').val()); + if (semver.gte(CONFIG.apiVersion, "1.20.0")) { RX_CONFIG.rcInterpolation = parseInt($('select[name="rcInterpolation-select"]').val()); RX_CONFIG.rcInterpolationInterval = parseInt($('input[name="rcInterpolationInterval-number"]').val()); } - function save_misc() { - MSP.send_message(MSPCodes.MSP_SET_MISC, mspHelper.crunch(MSPCodes.MSP_SET_MISC), false, save_rc_configs); + function save_rssi_config() { + MSP.send_message(MSPCodes.MSP_SET_RSSI_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_RSSI_CONFIG), false, save_rc_configs); } function save_rc_configs() { @@ -286,7 +292,7 @@ TABS.receiver.initialize = function (callback) { }); } - MSP.send_message(MSPCodes.MSP_SET_RX_MAP, mspHelper.crunch(MSPCodes.MSP_SET_RX_MAP), false, save_misc); + MSP.send_message(MSPCodes.MSP_SET_RX_MAP, mspHelper.crunch(MSPCodes.MSP_SET_RX_MAP), false, save_rssi_config); }); $("a.sticks").click(function() { @@ -316,7 +322,7 @@ TABS.receiver.initialize = function (callback) { }); // Only show the MSP control sticks if the MSP Rx feature is enabled - $(".sticks_btn").toggle(BF_CONFIG.features.isEnabled('RX_MSP')); + $(".sticks_btn").toggle(FEATURE_CONFIG.features.isEnabled('RX_MSP')); $('select[name="rx_refresh_rate"]').change(function () { var plot_update_rate = parseInt($(this).val(), 10); @@ -448,7 +454,7 @@ TABS.receiver.initModelPreview = function () { this.useSuperExpo = false; if (semver.gte(CONFIG.apiVersion, "1.16.0")) { - this.useSuperExpo = BF_CONFIG.features.isEnabled('SUPEREXPO_RATES'); + this.useSuperExpo = FEATURE_CONFIG.features.isEnabled('SUPEREXPO_RATES'); } var useOldRateCurve = false; diff --git a/tabs/servos.js b/tabs/servos.js index 3ea0ed86..87e32520 100755 --- a/tabs/servos.js +++ b/tabs/servos.js @@ -13,17 +13,7 @@ TABS.servos.initialize = function (callback) { } function get_servo_mix_rules() { - MSP.send_message(MSPCodes.MSP_SERVO_MIX_RULES, false, false, get_channel_forwarding); - } - - function get_channel_forwarding() { - var nextFunction = get_rc_data; - - if (semver.lt(CONFIG.apiVersion, "1.12.0")) { - MSP.send_message(MSPCodes.MSP_CHANNEL_FORWARDING, false, false, nextFunction); - } else { - nextFunction(); - } + MSP.send_message(MSPCodes.MSP_SERVO_MIX_RULES, false, false, get_rc_data); } function get_rc_data() { diff --git a/tabs/setup.js b/tabs/setup.js index 66f54c24..e48924d3 100755 --- a/tabs/setup.js +++ b/tabs/setup.js @@ -12,15 +12,11 @@ TABS.setup.initialize = function (callback) { } function load_status() { - MSP.send_message(MSPCodes.MSP_STATUS, false, false, load_config); + MSP.send_message(MSPCodes.MSP_STATUS, false, false, load_mixer_config); } - function load_config() { - MSP.send_message(MSPCodes.MSP_BF_CONFIG, false, false, load_misc_data); - } - - function load_misc_data() { - MSP.send_message(MSPCodes.MSP_MISC, false, false, load_html); + function load_mixer_config() { + MSP.send_message(MSPCodes.MSP_MIXER_CONFIG, false, false, load_html); } function load_html() { From 5f0149d1618b6233d1bd59e75b088c114c3518ae Mon Sep 17 00:00:00 2001 From: Hydra Date: Thu, 23 Mar 2017 21:17:47 +0000 Subject: [PATCH 07/41] CF/BF - Delete unused angleAtMin/Max from configurator to match API 1.33.0 --- js/msp/MSPCodes.js | 6 +++--- js/msp/MSPHelper.js | 27 +++++++++++++++++++++++---- tabs/servos.html | 2 -- tabs/servos.js | 4 ---- 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/js/msp/MSPCodes.js b/js/msp/MSPCodes.js index 85c469cd..73025329 100644 --- a/js/msp/MSPCodes.js +++ b/js/msp/MSPCodes.js @@ -98,13 +98,13 @@ var MSPCodes = { MSP_WP: 118, // Not used MSP_BOXIDS: 119, MSP_SERVO_CONFIGURATIONS: 120, - MSP_MOTOR_3D_CONFIG: 124, + MSP_MOTOR_3D_CONFIG: 124, MSP_RC_DEADBAND: 125, MSP_SENSOR_ALIGNMENT: 126, MSP_LED_STRIP_MODECOLOR: 127, MSP_VOLTAGE_METERS: 128, - MSP_CURRENT_METERS: 129, + MSP_CURRENT_METERS: 129, MSP_BATTERY_STATE: 130, MSP_MOTOR_CONFIG: 131, MSP_GPS_CONFIG: 132, @@ -131,7 +131,7 @@ var MSPCodes = { MSP_SET_HEADING: 211, // Not used MSP_SET_SERVO_CONFIGURATION: 212, MSP_SET_MOTOR: 214, - MSP_SET_MOTOR_3D_CONFIG: 217, + MSP_SET_MOTOR_3D_CONFIG: 217, MSP_SET_RC_DEADBAND: 218, MSP_SET_RESET_CURR_PID: 219, MSP_SET_SENSOR_ALIGNMENT: 220, diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js index bd78b7f4..5a41a8cf 100644 --- a/js/msp/MSPHelper.js +++ b/js/msp/MSPHelper.js @@ -377,8 +377,24 @@ MspHelper.prototype.process_data = function(dataHandler) { case MSPCodes.MSP_SERVO_CONFIGURATIONS: SERVO_CONFIG = []; // empty the array as new data is coming in + if (semver.gte(CONFIG.apiVersion, "1.33.0")) { + if (data.byteLength % 12 == 0) { + for (var i = 0; i < data.byteLength; i += 12) { + var arr = { + 'min': data.readU16(), + 'max': data.readU16(), + 'middle': data.readU16(), + 'rate': data.read8(), + 'angleAtMin': -90, + 'angleAtMax': 90, + 'indexOfChannelToForward': data.readU8(), + 'reversedInputSources': data.readU32() + }; - if (semver.gte(CONFIG.apiVersion, "1.12.0")) { + SERVO_CONFIG.push(arr); + } + } + } else if (semver.gte(CONFIG.apiVersion, "1.12.0")) { if (data.byteLength % 14 == 0) { for (var i = 0; i < data.byteLength; i += 14) { var arr = { @@ -1479,9 +1495,12 @@ MspHelper.prototype.sendServoConfigurations = function(onCompleteCallback) { .push16(servoConfiguration.min) .push16(servoConfiguration.max) .push16(servoConfiguration.middle) - .push8(servoConfiguration.rate) - .push8(servoConfiguration.angleAtMin) - .push8(servoConfiguration.angleAtMax); + .push8(servoConfiguration.rate); + + if (semver.gte(CONFIG.apiVersion, "1.33.0")) { + buffer.push8(servoConfiguration.angleAtMin) + .push8(servoConfiguration.angleAtMax); + } var out = servoConfiguration.indexOfChannelToForward; if (out == undefined) { diff --git a/tabs/servos.html b/tabs/servos.html index f44da5e7..c3bf0a6d 100755 --- a/tabs/servos.html +++ b/tabs/servos.html @@ -12,8 +12,6 @@ - - diff --git a/tabs/servos.js b/tabs/servos.js index 87e32520..f3ca235a 100755 --- a/tabs/servos.js +++ b/tabs/servos.js @@ -66,8 +66,6 @@ TABS.servos.initialize = function (callback) { \ \ \ - \ - \ ' + servoCheckbox + '\ \ @@ -121,8 +119,6 @@ TABS.servos.initialize = function (callback) { SERVO_CONFIG[info.obj].middle = parseInt($('.middle input', this).val()); SERVO_CONFIG[info.obj].min = parseInt($('.min input', this).val()); SERVO_CONFIG[info.obj].max = parseInt($('.max input', this).val()); - SERVO_CONFIG[info.obj].angleAtMin = -parseInt($('.angleAtMin input', this).val()); - SERVO_CONFIG[info.obj].angleAtMax = parseInt($('.angleAtMax input', this).val()); var val = parseInt($('.direction select', this).val()); SERVO_CONFIG[info.obj].rate = val; From 19f320e2f6d6a5a6f430b73a9ab51f9f34b1a3f1 Mon Sep 17 00:00:00 2001 From: Hydra Date: Sat, 1 Apr 2017 16:50:42 +0100 Subject: [PATCH 08/41] CF/BF - fix blackbox logging to use the right device numbers. --- tabs/onboard_logging.js | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/tabs/onboard_logging.js b/tabs/onboard_logging.js index 76a6402e..473b350a 100644 --- a/tabs/onboard_logging.js +++ b/tabs/onboard_logging.js @@ -86,7 +86,7 @@ TABS.onboard_logging.initialize = function (callback) { * * The best we can do on those targets is check the BLACKBOX feature bit to identify support for Blackbox instead. */ - if ((BLACKBOX.supported || DATAFLASH.supported) && FEATURE_CONFIG.features.isEnabled('BLACKBOX')) { + if ((BLACKBOX.supported || DATAFLASH.supported) && (semver.gte(CONFIG.apiVersion, "1.33.0") || FEATURE_CONFIG.features.isEnabled('BLACKBOX'))) { blackboxSupport = 'yes'; } else { blackboxSupport = 'no'; @@ -149,15 +149,25 @@ TABS.onboard_logging.initialize = function (callback) { function populateDevices(deviceSelect) { deviceSelect.empty(); - - deviceSelect.append(''); - if (DATAFLASH.ready) { - deviceSelect.append(''); + + if (semver.gte(CONFIG.apiVersion, "1.33.0")) { + deviceSelect.append(''); + if (DATAFLASH.ready) { + deviceSelect.append(''); + } + if (SDCARD.supported) { + deviceSelect.append(''); + } + deviceSelect.append(''); + } else { + deviceSelect.append(''); + if (DATAFLASH.ready) { + deviceSelect.append(''); + } + if (SDCARD.supported) { + deviceSelect.append(''); + } } - if (SDCARD.supported) { - deviceSelect.append(''); - } - deviceSelect.append(''); deviceSelect.val(BLACKBOX.blackboxDevice); } From 8c03de88c004470311d5420cf327577d0d217787 Mon Sep 17 00:00:00 2001 From: Hydra Date: Sat, 1 Apr 2017 19:58:38 +0100 Subject: [PATCH 09/41] CF/BF - Support configuration of iLAP transponder code. More work is required to support ARCITIMER. --- js/fc.js | 4 +++- js/msp/MSPHelper.js | 36 ++++++++++++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/js/fc.js b/js/fc.js index d83ad3f5..74dde279 100644 --- a/js/fc.js +++ b/js/fc.js @@ -296,7 +296,9 @@ var FC = { TRANSPONDER = { supported: false, - data: [] + data: [], + provider: 0, + providers: [] }; RC_DEADBAND_CONFIG = { diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js index 5a41a8cf..f3245091 100644 --- a/js/msp/MSPHelper.js +++ b/js/msp/MSPHelper.js @@ -986,9 +986,38 @@ MspHelper.prototype.process_data = function(dataHandler) { console.log("Blackbox config saved"); break; case MSPCodes.MSP_TRANSPONDER_CONFIG: - TRANSPONDER.supported = (data.readU8() & 1) != 0; + var bytesRemaining = data.byteLength; + if (semver.gte(CONFIG.apiVersion, "1.33.0")) { + var providerCount = data.readU8(); + bytesRemaining--; + + TRANSPONDER.supported = providerCount > 0; + TRANSPONDER.providers = []; + + for (var i = 0; i < providerCount; i++) { + var provider = { + id: data.readU8(), + dataLength: data.readU8() + }; + bytesRemaining -= 2; + + TRANSPONDER.providers.push(provider); + } + TRANSPONDER.provider = data.readU8(); + bytesRemaining--; + + } else { + TRANSPONDER.supported = (data.readU8() & 1) != 0; + bytesRemaining--; + + // only ILAP was supported prior to 1.33.0 + TRANSPONDER.providers = [{ + id: 1, // ILAP + dataLength: 6 + }]; + TRANSPONDER.provider = TRANSPONDER.providers[0].id; + } TRANSPONDER.data = []; - var bytesRemaining = data.byteLength - 1; for (var i = 0; i < bytesRemaining; i++) { TRANSPONDER.data.push(data.readU8()); } @@ -1256,6 +1285,9 @@ MspHelper.prototype.crunch = function(code) { break; case MSPCodes.MSP_SET_TRANSPONDER_CONFIG: + if (semver.gte(CONFIG.apiVersion, "1.33.0")) { + buffer.push8(TRANSPONDER.provider); // + } for (var i = 0; i < TRANSPONDER.data.length; i++) { buffer.push8(TRANSPONDER.data[i]); } From 43f146845186856c1eb2e387e8f09b07a9524ee9 Mon Sep 17 00:00:00 2001 From: Hydra Date: Sat, 1 Apr 2017 21:59:44 +0100 Subject: [PATCH 10/41] CF/BF - Add VTX to features list. --- js/Features.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/js/Features.js b/js/Features.js index a08ddad2..1a975c5a 100644 --- a/js/Features.js +++ b/js/Features.js @@ -72,7 +72,8 @@ var Features = function (config) { if (semver.gte(CONFIG.apiVersion, "1.20.0")) { features.push( - {bit: 18, group: 'other', name: 'OSD'} + {bit: 18, group: 'other', name: 'OSD'}, + {bit: 24, group: 'other', name: 'VTX'} ); } From 1752c5d39d89428a2c42c132c1a5916f8b37f949 Mon Sep 17 00:00:00 2001 From: Hydra Date: Sat, 1 Apr 2017 22:01:16 +0100 Subject: [PATCH 11/41] CF/BF - Initial port of power/battery tab from CF 1.x. The voltage and amperage meters cannot yet be configured and are disabled. --- _locales/en/messages.json | 128 +++++++++++++ images/icons/cf_icon_power_grey.svg | 14 ++ images/icons/cf_icon_power_white.svg | 14 ++ js/gui.js | 1 + js/msp/MSPHelper.js | 46 ++--- main.css | 13 ++ main.html | 4 + main.js | 3 + tabs/power.css | 80 ++++++++ tabs/power.html | 167 ++++++++++++++++ tabs/power.js | 275 +++++++++++++++++++++++++++ 11 files changed, 723 insertions(+), 22 deletions(-) create mode 100644 images/icons/cf_icon_power_grey.svg create mode 100644 images/icons/cf_icon_power_white.svg create mode 100644 tabs/power.css create mode 100644 tabs/power.html create mode 100644 tabs/power.js diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 4ec3b646..649af5a2 100755 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -100,6 +100,9 @@ "tabOsd": { "message": "OSD" }, + "tabPower": { + "message": "Power & Battery" + }, "tabGPS": { "message": "GPS" }, @@ -556,6 +559,9 @@ "featureOSD": { "message": "On Screen Display" }, + "featureVTX": { + "message": "Video Transmitter" + }, "featureFAILSAFE": { "message": "Enable Failsafe Stage 2" }, @@ -1885,6 +1891,128 @@ "failsafeKillSwitchHelp": { "message": "Set this option to make the failsafe switch, configured in the modes tab, act as a direct kill switch, bypassing the selected failsafe procedure. Note: Arming is blocked with the failsafe kill switch in the ON position" }, + "powerFirmwareUpgradeRequired": { + "message": "Firmware upgrade required. Battery/Amperage/Voltage configurations using API < 1.22.0 is not supported." + }, + + "powerButtonSave": { + "message": "Save" + }, + + "powerVoltageHead": { + "message": "Voltage" + }, + "powerVoltageValue": { + "message": "$1 V" + }, + "powerAmperageValue": { + "message": "$1 A" + }, + "powerVoltageId10": { + "message": "Battery" + }, + "powerVoltageId20": { + "message": "5V" + }, + "powerVoltageId30": { + "message": "9V" + }, + "powerVoltageId40": { + "message": "12V" + }, + "powerVoltageId50": { + "message": "ESC Combined" + }, + "powerVoltageId60": { + "message": "ESC Motor 1" + }, + "powerVoltageId61": { + "message": "ESC Motor 2" + }, + "powerVoltageId62": { + "message": "ESC Motor 3" + }, + "powerVoltageId63": { + "message": "ESC Motor 4" + }, + "powerVoltageId80": { + "message": "Cell 1" + }, + "powerVoltageId81": { + "message": "Cell 2" + }, + "powerVoltageId82": { + "message": "Cell 3" + }, + "powerVoltageId83": { + "message": "Cell 4" + }, + "powerVoltageId84": { + "message": "Cell 5" + }, + "powerVoltageId85": { + "message": "Cell 6" + }, + + + "powerVoltageScale": { + "message": "Scale" + }, + "powerVoltageDivider": { + "message": "Divider Value" + }, + "powerVoltageMultiplier": { + "message": "Multiplier Value" + }, + + "powerAmperageHead": { + "message": "Amperage" + }, + "powerAmperageId10": { + "message": "Battery" + }, + "powerAmperageId50": { + "message": "ESC Combined" + }, + "powerAmperageId80": { + "message": "Virtual" + }, + "powerMahValue": { + "message": "$1 mAh" + }, + + "powerAmperageScale": { + "message": "Scale the output voltage to milliamps [1/10th mV/A]" + }, + "powerAmperageOffset": { + "message": "Offset in millivolt steps" + }, + + "powerBatteryHead": { + "message": "Battery" + }, + "powerBatteryConnected": { + "message": "Connected" + }, + "powerBatteryConnectedValueYes": { + "message": "Yes (Cells: $1)" + }, + "powerBatteryConnectedValueNo": { + "message": "No" + }, + "powerBatteryVoltage": { + "message": "Voltage" + }, + "powerBatteryCurrentDrawn": { + "message": "mAh used" + }, + "powerBatteryAmperage": { + "message": "Amperage" + }, + "powerBatteryCapacity": { + "message": "Capacity (mAh)" + }, + "mainHelpArmed": { "message": "Motor Arming" }, diff --git a/images/icons/cf_icon_power_grey.svg b/images/icons/cf_icon_power_grey.svg new file mode 100644 index 00000000..2cb96635 --- /dev/null +++ b/images/icons/cf_icon_power_grey.svg @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/images/icons/cf_icon_power_white.svg b/images/icons/cf_icon_power_white.svg new file mode 100644 index 00000000..1af9f1f7 --- /dev/null +++ b/images/icons/cf_icon_power_white.svg @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/js/gui.js b/js/gui.js index bd28f75d..1767ae8c 100644 --- a/js/gui.js +++ b/js/gui.js @@ -21,6 +21,7 @@ var GUI_control = function () { 'failsafe', 'transponder', 'osd', + 'power', 'adjustments', 'auxiliary', 'cli', diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js index f3245091..e2d47803 100644 --- a/js/msp/MSPHelper.js +++ b/js/msp/MSPHelper.js @@ -158,27 +158,29 @@ MspHelper.prototype.process_data = function(dataHandler) { ANALOG.amperage = data.read16() / 100; // A ANALOG.last_received_timestamp = Date.now(); break; -// case MSPCodes.MSP_VOLTAGE_METERS: -// VOLTAGE_METERS = []; -// for (var i = 0; i < (message_length); i++) { -// var voltageMeter = {}; -// voltageMeter.voltage = data.readU8() / 10.0; -// -// VOLTAGE_METERS.push(voltageMeter) -// } -// break; -// case MSPCodes.MSP_CURRENT_METERS: -// CURRENT_METERS = []; -// for (var i = 0; i < (message_length / 6); i++) { -// var amperageMeter = {}; -// amperageMeter.amperage = data.read16() / 1000; // A -// offset += 2; -// amperageMeter.mAhDrawn = data.readU32(); // A -// offset += 4; -// -// CURRENT_METERS.push(amperageMeter); -// } -// break; + case MSPCodes.MSP_VOLTAGE_METERS: + VOLTAGE_METERS = []; + var voltageMeterLength = 2; + for (var i = 0; i < (data.byteLength / voltageMeterLength); i++) { + var voltageMeter = {}; + voltageMeter.id = data.readU8(); + voltageMeter.voltage = data.readU8() / 10.0; + + VOLTAGE_METERS.push(voltageMeter) + } + break; + case MSPCodes.MSP_CURRENT_METERS: + CURRENT_METERS = []; + var currentMeterLength = 5; + for (var i = 0; i < (data.byteLength / currentMeterLength); i++) { + var currentMeter = {}; + currentMeter.id = data.readU8(); + currentMeter.mAhDrawn = data.readU16(); // mAh + currentMeter.amperage = data.readU16() / 1000; // A + + CURRENT_METERS.push(currentMeter); + } + break; case MSPCodes.MSP_BATTERY_STATE: BATTERY_STATE.cellCount = data.readU8(); BATTERY_STATE.capacity = data.readU16(); // mAh @@ -1232,7 +1234,7 @@ MspHelper.prototype.crunch = function(code) { buffer.push8(Math.round(BATTERY_CONFIG.vbatmincellvoltage * 10)) .push8(Math.round(BATTERY_CONFIG.vbatmaxcellvoltage * 10)) .push8(Math.round(BATTERY_CONFIG.vbatwarningcellvoltage * 10)) - .push16(BATTERY_CONFIG.batterycapacity) + .push16(BATTERY_CONFIG.capacity) .push8(BATTERY_CONFIG.voltageMeterSource) .push8(BATTERY_CONFIG.currentMeterSource); break; diff --git a/main.css b/main.css index 5255facc..ca7290c6 100644 --- a/main.css +++ b/main.css @@ -811,6 +811,19 @@ li.active .ic_transponder { background-image: url(images/icons/icon_osd_white.svg); } +.ic_power { + background-image: url(images/icons/cf_icon_power_grey.svg); + background-position-y: 9px; +} + +.ic_power:hover { + background-image: url(images/icons/cf_icon_power_white.svg); +} + +li.active .ic_power { + background-image: url(images/icons/cf_icon_power_white.svg); +} + /* SPARE Tab-Icons */ .ic_failsafe { background-image: url(images/icons/cf_icon_failsafe_grey.svg); diff --git a/main.html b/main.html index 8937488d..d3d187fe 100755 --- a/main.html +++ b/main.html @@ -27,6 +27,7 @@ + @@ -87,6 +88,7 @@ + @@ -216,6 +218,8 @@
  • +
  • +
    + + +
    +
    +
    +
    +
    +
    +
  • CH1 CH2 CH3\
    + + +
    +
    +
    +
    +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    + +
    +
    +
    + +
    + + + + + + + + +
    + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    ?
    + +
    +
    + +
    +
    + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    \ No newline at end of file diff --git a/tabs/power.js b/tabs/power.js new file mode 100644 index 00000000..142ff05f --- /dev/null +++ b/tabs/power.js @@ -0,0 +1,275 @@ +'use strict'; + +TABS.power = { + supported: false, +}; + +TABS.power.initialize = function (callback) { + var self = this; + + if (GUI.active_tab != 'power') { + GUI.active_tab = 'power'; + googleAnalytics.sendAppView('Power'); + } + + function load_status() { + MSP.send_message(MSPCodes.MSP_STATUS, false, false, load_voltage_meters); + } + + function load_voltage_meters() { + MSP.send_message(MSPCodes.MSP_VOLTAGE_METERS, false, false, load_current_meters); + } + + function load_current_meters() { + MSP.send_message(MSPCodes.MSP_CURRENT_METERS, false, false, load_current_meter_configs); + } + + function load_current_meter_configs() { + MSP.send_message(MSPCodes.MSP_CURRENT_METER_CONFIG, false, false, load_voltage_meter_configs); + } + + function load_voltage_meter_configs() { + MSP.send_message(MSPCodes.MSP_VOLTAGE_METER_CONFIG, false, false, load_battery_state); + } + + function load_battery_state() { + MSP.send_message(MSPCodes.MSP_BATTERY_STATE, false, false, load_battery_config); + } + + function load_battery_config() { + MSP.send_message(MSPCodes.MSP_BATTERY_CONFIG, false, false, load_html); + } + + function load_html() { + $('#content').load("./tabs/power.html", process_html); + } + + this.supported = semver.gte(CONFIG.apiVersion, "1.22.0"); + + if (!this.supported) { + load_html(); + } else { + load_status(); + } + + function update_ui() { + if (!TABS.power.supported) { + $(".tab-power").removeClass("supported"); + return; + } + $(".tab-power").addClass("supported"); + + // voltage meters + + var template = $('#tab-power-templates .voltage-meters .voltage-meter'); + var destination = $('.tab-power .voltage-meters'); + + for (var index = 0; index < VOLTAGE_METERS.length; index++) { + var meterElement = template.clone(); + $(meterElement).attr('id', 'voltage-meter-' + index); + + var message = chrome.i18n.getMessage('powerVoltageId' + VOLTAGE_METERS[index].id); + $(meterElement).find('.label').text(message) + destination.append(meterElement); + } + + var template = $('#tab-power-templates .voltage-configuration'); + for (var index = 0; index < VOLTAGE_METER_CONFIGS.length; index++) { + var destination = $('#voltage-meter-' + index + ' .configuration'); + var element = template.clone(); + + var attributeNames = ["vbatscale", "vbatresdivval", "vbatresdivmultiplier"]; + for (let attributeName of attributeNames) { + $(element).find('input[name="' + attributeName + '"]').attr('name', attributeName + '-' + index); + } + destination.append(element); + + $('input[name="vbatscale-' + index + '"]').val(VOLTAGE_METER_CONFIGS[index].vbatscale).attr('disabled','disabled'); + $('input[name="vbatresdivval-' + index + '"]').val(VOLTAGE_METER_CONFIGS[index].vbatresdivval).attr('disabled','disabled'); + $('input[name="vbatresdivmultiplier-' + index + '"]').val(VOLTAGE_METER_CONFIGS[index].vbatresdivmultiplier).attr('disabled','disabled'); + } + + // amperage meters + + var template = $('#tab-power-templates .amperage-meters .amperage-meter'); + var destination = $('.tab-power .amperage-meters'); + + for (var index = 0; index < CURRENT_METERS.length; index++) { + var meterElement = template.clone(); + $(meterElement).attr('id', 'amperage-meter-' + index); + + var message = chrome.i18n.getMessage('powerAmperageId' + CURRENT_METERS[index].id); + $(meterElement).find('.label').text(message) + destination.append(meterElement); + } + + var template = $('#tab-power-templates .amperage-configuration'); + for (var index = 0; index < CURRENT_METER_CONFIGS.length; index++) { + var destination = $('#amperage-meter-' + index + ' .configuration'); + var element = template.clone(); + + var attributeNames = ["amperagescale", "amperageoffset"]; + for (let attributeName of attributeNames) { + $(element).find('input[name="' + attributeName + '"]').attr('name', attributeName + '-' + index); + } + destination.append(element); + + $('input[name="amperagescale-' + index + '"]').val(CURRENT_METER_CONFIGS[index].scale).attr('disabled','disabled'); + $('input[name="amperageoffset-' + index + '"]').val(CURRENT_METER_CONFIGS[index].offset).attr('disabled','disabled'); + } + + + // battery + + var template = $('#tab-power-templates .battery-states .battery-state'); + var destination = $('.tab-power .battery-state'); + var element = template.clone(); + $(element).find('.connection-state').attr('id', 'battery-connection-state'); + $(element).find('.voltage').attr('id', 'battery-voltage'); + $(element).find('.mah-drawn').attr('id', 'battery-mah-drawn'); + $(element).find('.amperage').attr('id', 'battery-amperage'); + + destination.append(element.children()); + + var template = $('#tab-power-templates .battery-configuration'); + var destination = $('.tab-power .battery .configuration'); + var element = template.clone(); + destination.append(element); + + $('input[name="mincellvoltage"]').val(BATTERY_CONFIG.vbatmincellvoltage); + $('input[name="maxcellvoltage"]').val(BATTERY_CONFIG.vbatmaxcellvoltage); + $('input[name="warningcellvoltage"]').val(BATTERY_CONFIG.vbatwarningcellvoltage); + $('input[name="capacity"]').val(BATTERY_CONFIG.capacity); + + var batteryMeterTypes = [ + 'None', + 'Onboard ADC', + 'ESC Sensor' + ]; + + var batteryMeterType_e = $('select.batterymetersource'); + for (var i = 0; i < batteryMeterTypes.length; i++) { + batteryMeterType_e.append(''); + } + + batteryMeterType_e.change(function () { + BATTERY_CONFIG.voltageMeterSource = parseInt($(this).val()); + }); + batteryMeterType_e.val(BATTERY_CONFIG.voltageMeterSource).change(); + + // fill current + var currentMeterTypes = [ + 'None', + 'Onboard ADC', + 'Virtual', + 'ESC Sensor' + ]; + + var currentMeterType_e = $('select.currentmetersource'); + for (var i = 0; i < currentMeterTypes.length; i++) { + currentMeterType_e.append(''); + } + + currentMeterType_e.change(function () { + BATTERY_CONFIG.currentMeterSource = parseInt($(this).val()); + }); + currentMeterType_e.val(BATTERY_CONFIG.currentMeterSource).change(); + + + + function get_slow_data() { + MSP.send_message(MSPCodes.MSP_VOLTAGE_METERS, false, false, function () { + for (var i = 0; i < VOLTAGE_METERS.length; i++) { + var elementName = '#voltage-meter-' + i + ' .value'; + var element = $(elementName); + element.text(chrome.i18n.getMessage('powerVoltageValue', [VOLTAGE_METERS[i].voltage])); + } + }); + + MSP.send_message(MSPCodes.MSP_CURRENT_METERS, false, false, function () { + for (var i = 0; i < CURRENT_METERS.length; i++) { + var elementName = '#amperage-meter-' + i + ' .value'; + var element = $(elementName); + element.text(chrome.i18n.getMessage('powerAmperageValue', [CURRENT_METERS[i].amperage.toFixed(2)])); + } + }); + + MSP.send_message(MSPCodes.MSP_BATTERY_STATE, false, false, function () { + var elementPrefix = '#battery'; + var element; + + element = $(elementPrefix + '-connection-state .value'); + element.text(BATTERY_STATE.cellCount > 0 ? chrome.i18n.getMessage('powerBatteryConnectedValueYes', [BATTERY_STATE.cellCount]) : chrome.i18n.getMessage('powerBatteryConnectedValueNo')); + element = $(elementPrefix + '-voltage .value'); + element.text(chrome.i18n.getMessage('powerVoltageValue', [BATTERY_STATE.voltage])); + element = $(elementPrefix + '-mah-drawn .value'); + element.text(chrome.i18n.getMessage('powerMahValue', [BATTERY_STATE.mAhDrawn])); + element = $(elementPrefix + '-amperage .value'); + element.text(chrome.i18n.getMessage('powerAmperageValue', [BATTERY_STATE.amperage])); + }); + + } + + $('a.save').click(function () { + + /* FIXME update for api 1.33.0 + for (var index = 0; index < VOLTAGE_METER_CONFIGS.length; index++) { + VOLTAGE_METER_CONFIGS[index].vbatscale = parseInt($('input[name="vbatscale-' + index + '"]').val()); + VOLTAGE_METER_CONFIGS[index].vbatresdivval = parseInt($('input[name="vbatresdivval-' + index + '"]').val()); + VOLTAGE_METER_CONFIGS[index].vbatresdivmultiplier = parseInt($('input[name="vbatresdivmultiplier-' + index + '"]').val()); + } + + for (var index = 0; index < CURRENT_METER_CONFIGS.length; index++) { + CURRENT_METER_CONFIGS[index].scale = parseInt($('input[name="amperagescale-' + index + '"]').val()); + CURRENT_METER_CONFIGS[index].offset = parseInt($('input[name="amperageoffset-' + index + '"]').val()); + } + */ + + BATTERY_CONFIG.vbatmincellvoltage = parseFloat($('input[name="mincellvoltage"]').val()); + BATTERY_CONFIG.vbatmaxcellvoltage = parseFloat($('input[name="maxcellvoltage"]').val()); + BATTERY_CONFIG.vbatwarningcellvoltage = parseFloat($('input[name="warningcellvoltage"]').val()); + BATTERY_CONFIG.capacity = parseInt($('input[name="capacity"]').val()); + + /* FIXME update for api 1.33.0 + function save_voltage_config() { + MSP.sendVoltageMeterConfigs(save_amperage_config); + } + + function save_amperage_config() { + MSP.sendAmperageMeterConfigs(save_battery_config); + } + */ + + function save_battery_config() { + MSP.send_message(MSPCodes.MSP_SET_BATTERY_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_BATTERY_CONFIG), false, save_to_eeprom); + } + + function save_to_eeprom() { + MSP.send_message(MSPCodes.MSP_EEPROM_WRITE, false, false, save_completed); + } + + function save_completed() { + GUI.log(chrome.i18n.getMessage('configurationEepromSaved')); + + TABS.power.initialize(); + } + + save_battery_config(); + }); + + GUI.interval_add('setup_data_pull_slow', get_slow_data, 200, true); // 5hz + } + + function process_html() { + update_ui(); + + // translate to user-selected language + localize(); + + GUI.content_ready(callback); + } +}; + +TABS.power.cleanup = function (callback) { + if (callback) callback(); +}; From 159673533bafeb7a04aade9457f6265bcdc5ef68 Mon Sep 17 00:00:00 2001 From: Hydra Date: Sat, 1 Apr 2017 22:09:41 +0100 Subject: [PATCH 12/41] CF/BF - Delete the old battery/current/voltage settings from the configuration tab. --- _locales/en/messages.json | 60 ++++-------- tabs/configuration.html | 81 +-------------- tabs/configuration.js | 201 +------------------------------------- tabs/power.html | 10 +- 4 files changed, 29 insertions(+), 323 deletions(-) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 649af5a2..bc4e49e1 100755 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -673,42 +673,6 @@ "configurationThrottleMinimumCommandHelp": { "message": "This is the value that is sent to the ESCs when the craft is disarmed. Set this to a value that has the motors stopped (1000 for most ESCs)." }, - "configurationBattery": { - "message": "Battery" - }, - "configurationVoltage": { - "message": "Voltage" - }, - "configurationCurrent": { - "message": "Current" - }, - "configurationBatteryVoltageMeterSource": { - "message": "Voltage Meter Source" - }, - "configurationBatteryMinimum": { - "message": "Minimum Cell Voltage" - }, - "configurationBatteryMaximum": { - "message": "Maximum Cell Voltage" - }, - "configurationBatteryWarning": { - "message": "Warning Cell Voltage" - }, - "configurationBatteryScale": { - "message": "Voltage Scale" - }, - "configurationBatteryCurrentMeterSource": { - "message": "Current Meter Source" - }, - "configurationCurrent": { - "message": "Current Sensor" - }, - "configurationCurrentScale": { - "message": "Scale the output voltage to milliamps [1/10th mV/A]" - }, - "configurationCurrentOffset": { - "message": "Offset in millivolt steps" - }, "configuration3d": { "message": "3D ESC/Motor Features" }, @@ -1891,14 +1855,28 @@ "failsafeKillSwitchHelp": { "message": "Set this option to make the failsafe switch, configured in the modes tab, act as a direct kill switch, bypassing the selected failsafe procedure. Note: Arming is blocked with the failsafe kill switch in the ON position" }, - "powerFirmwareUpgradeRequired": { - "message": "Firmware upgrade required. Battery/Amperage/Voltage configurations using API < 1.22.0 is not supported." - }, - + "powerButtonSave": { "message": "Save" }, - + "powerFirmwareUpgradeRequired": { + "message": "Firmware upgrade required. Battery/Amperage/Voltage configurations using API < 1.22.0 is not supported." + }, + "powerBatteryVoltageMeterSource": { + "message": "Voltage Meter Source" + }, + "powerBatteryCurrentMeterSource": { + "message": "Current Meter Source" + }, + "powerBatteryMinimum": { + "message": "Minimum Cell Voltage" + }, + "powerBatteryMaximum": { + "message": "Maximum Cell Voltage" + }, + "powerBatteryWarning": { + "message": "Warning Cell Voltage" + }, "powerVoltageHead": { "message": "Voltage" }, diff --git a/tabs/configuration.html b/tabs/configuration.html index 9df12a8f..2d802242 100644 --- a/tabs/configuration.html +++ b/tabs/configuration.html @@ -379,7 +379,6 @@
    -
    @@ -405,85 +404,7 @@
    - -
    -
    -
    -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    -
    +
    diff --git a/tabs/configuration.js b/tabs/configuration.js index a096bc38..eaa8d195 100644 --- a/tabs/configuration.js +++ b/tabs/configuration.js @@ -106,7 +106,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } function load_name() { - var next_callback = load_battery; + var next_callback = load_rx_config; if (semver.gte(CONFIG.apiVersion, "1.20.0")) { MSP.send_message(MSPCodes.MSP_NAME, false, false, next_callback); } else { @@ -114,33 +114,6 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } } - function load_battery() { - var next_callback = load_voltage; - if (semver.gte(CONFIG.apiVersion, "1.33.0")) { - MSP.send_message(MSPCodes.MSP_BATTERY_CONFIG, false, false, next_callback); - } else { - next_callback(); - } - } - - function load_voltage() { - var next_callback = load_current; - if (semver.gte(CONFIG.apiVersion, "1.33.0")) { - MSP.send_message(MSPCodes.MSP_VOLTAGE_METER_CONFIG, false, false, next_callback); - } else { - next_callback(); - } - } - - function load_current() { - var next_callback = load_rx_config; - if (semver.gte(CONFIG.apiVersion, "1.33.0")) { - MSP.send_message(MSPCodes.MSP_CURRENT_METER_CONFIG, false, false, next_callback); - } else { - next_callback(); - } - } - function load_rx_config() { var next_callback = load_html; if (semver.gte(CONFIG.apiVersion, "1.31.0")) { @@ -150,14 +123,6 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } } - //Update Analog/Battery Data - function load_analog() { - MSP.send_message(MSPCodes.MSP_ANALOG, false, false, function () { - $('input[name="batteryvoltage"]').val([ANALOG.voltage.toFixed(1)]); - $('input[name="batterycurrent"]').val([ANALOG.amperage.toFixed(2)]); - }); - } - function load_html() { $('#content').load("./tabs/configuration.html", process_html); } @@ -523,67 +488,6 @@ TABS.configuration.initialize = function (callback, scrollPosition) { $('input[name="maxthrottle"]').val(MOTOR_CONFIG.maxthrottle); $('input[name="mincommand"]').val(MOTOR_CONFIG.mincommand); - // fill battery - if (semver.lt(CONFIG.apiVersion, "1.33.0")) { - $('div.battery').hide(); - } else { - var batteryMeterTypes = [ - 'None', - 'Onboard ADC', - 'ESC Sensor' - ]; - - var batteryMeterType_e = $('select.batterymetertype'); - for (i = 0; i < batteryMeterTypes.length; i++) { - batteryMeterType_e.append(''); - } - - batteryMeterType_e.change(function () { - BATTERY_CONFIG.voltageMeterSource = parseInt($(this).val()); - checkUpdateVbatControls(); - }); - batteryMeterType_e.val(BATTERY_CONFIG.voltageMeterSource).change(); - - $('input[name="mincellvoltage"]').val(BATTERY_CONFIG.vbatmincellvoltage); - $('input[name="maxcellvoltage"]').val(BATTERY_CONFIG.vbatmaxcellvoltage); - $('input[name="warningcellvoltage"]').val(BATTERY_CONFIG.vbatwarningcellvoltage); - - - // FIXME move - //$('input[name="voltagescale"]').val(MISC.vbatscale); - - // fill current - var currentMeterTypes = [ - 'None', - 'Onboard ADC', - 'Virtual', - 'ESC Sensor' - ]; - - var currentMeterType_e = $('select.currentMeterSource'); - for (i = 0; i < currentMeterTypes.length; i++) { - currentMeterType_e.append(''); - } - - currentMeterType_e.change(function () { - BATTERY_CONFIG.currentMeterSource = parseInt($(this).val()); - checkUpdateCurrentControls(); - }); - currentMeterType_e.val(BATTERY_CONFIG.currentMeterSource).change(); - - // FIXME this is a hack - just for display purposes until the battery code is moved to a new tab. - var meter = CURRENT_METER_CONFIGS[0]; - - var currentScale_e = $('input[name="currentscale"]'); - currentScale_e.val(meter.scale); - currentScale_e.prop("disabled", true); - - var currentOffset_e = $('input[name="currentoffset"]'); - currentOffset_e.val(meter.offset); - currentOffset_e.prop("disabled", true); - - } - //fill 3D if (semver.lt(CONFIG.apiVersion, "1.14.0")) { $('.tab-configuration ._3d').hide(); @@ -610,48 +514,6 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } } - function checkUpdateVbatControls() { - // FIXME move - if (semver.gte(CONFIG.apiVersion, "1.33.0")) { - $('.battery').show(); - $('select.batterymetertype').show(); - - if (BATTERY_CONFIG.voltageMeterSource !== 0) { - $('.vbatCalibration').hide(); - } - } else { - $('.battery').hide(); - } - } - - function checkUpdateCurrentControls() { - // FIXME move - if (semver.gte(CONFIG.apiVersion, "1.33.0")) { - $('.currentMonitoring').show(); - - switch(BATTERY_CONFIG.currentMeterSource) { - case 1: // ADC - $('.currentCalibration').show(); - $('.currentOutput').show(); - - break; - - case 0: // None - case 2: // Virtual / FIXME not supported yet - $('.currentCalibration').hide(); - $('.currentOutput').hide(); - break; - - case 3: // ESC - $('.currentCalibration').hide(); - $('.currentOutput').show(); - break; - } - } else { - $('.currentMonitoring').hide(); - } - } - function checkUpdateGpsControls() { if (FEATURE_CONFIG.features.isEnabled('GPS')) { $('.gpsSettings').show(); @@ -677,24 +539,16 @@ TABS.configuration.initialize = function (callback, scrollPosition) { switch (element.attr('name')) { case 'MOTOR_STOP': checkShowDisarmDelay(); - break; - case 'VBAT': - checkUpdateVbatControls(); - break; - case 'CURRENT_METER': - checkUpdateCurrentControls(); - - break; case 'GPS': checkUpdateGpsControls(); - break; + case '3D': checkUpdate3dControls(); - break; + default: break; } @@ -718,8 +572,6 @@ TABS.configuration.initialize = function (callback, scrollPosition) { checkShowDisarmDelay(); checkShowSerialRxBox(); - checkUpdateVbatControls(); - checkUpdateCurrentControls(); checkUpdateGpsControls(); checkUpdate3dControls(); @@ -751,20 +603,6 @@ TABS.configuration.initialize = function (callback, scrollPosition) { MOTOR_CONFIG.maxthrottle = parseInt($('input[name="maxthrottle"]').val()); MOTOR_CONFIG.mincommand = parseInt($('input[name="mincommand"]').val()); - if(semver.gte(CONFIG.apiVersion, "1.33.0")) { - BATTERY_CONFIG.vbatmincellvoltage = parseFloat($('input[name="mincellvoltage"]').val()); - BATTERY_CONFIG.vbatmaxcellvoltage = parseFloat($('input[name="maxcellvoltage"]').val()); - BATTERY_CONFIG.vbatwarningcellvoltage = parseFloat($('input[name="warningcellvoltage"]').val()); - - // FIXME move - //MISC.vbatscale = parseInt($('input[name="voltagescale"]').val()); - - // FIXME this is a hack - var meter = CURRENT_METER_CONFIGS[0]; - meter.currentscale = parseInt($('input[name="currentscale"]').val()); - meter.currentoffset = parseInt($('input[name="currentoffset"]').val()); - } - if(semver.gte(CONFIG.apiVersion, "1.14.0")) { MOTOR_3D_CONFIG.deadband3d_low = parseInt($('input[name="3ddeadbandlow"]').val()); MOTOR_3D_CONFIG.deadband3d_high = parseInt($('input[name="3ddeadbandhigh"]').val()); @@ -854,7 +692,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } function save_rx_config() { - var next_callback = save_battery; + var next_callback = save_to_eeprom; if (semver.gte(CONFIG.apiVersion, "1.20.0")) { MSP.send_message(MSPCodes.MSP_SET_RX_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_RX_CONFIG), false, next_callback); } else { @@ -862,36 +700,6 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } } - function save_battery() { - var next_callback = save_to_eeprom; - if (semver.gte(CONFIG.apiVersion, "1.33.0")) { - MSP.send_message(MSPCodes.MSP_SET_BATTERY_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_BATTERY_CONFIG), false, next_callback); - } else { - next_callback(); - } - } - - // FIXME voltage/current configuation saving not implemented for >= 1.33.0 and broken/disabled for <= 1.33.0 - -// function save_voltage() { -// var next_callback = save_current; -// if (semver.lt(CONFIG.apiVersion, "1.33.0")) { -// MSP.send_message(MSPCodes.MSP_SET_VOLTAGE_METER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_VOLTAGE_METER_CONFIG), false, next_callback); -// } else { -// next_callback(); -// } -// } -// -// function save_current() { -// var next_callback = save_to_eeprom; -// if (semver.gte(CONFIG.apiVersion, "1.33.0")) { -// MSP.send_message(MSPCodes.MSP_SET_CURRENT_METER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_CURRENT_METER_CONFIG), false, next_callback); -// } else { -// next_callback(); -// } -// } - - function save_to_eeprom() { MSP.send_message(MSPCodes.MSP_EEPROM_WRITE, false, false, reboot); } @@ -930,7 +738,6 @@ TABS.configuration.initialize = function (callback, scrollPosition) { GUI.interval_add('status_pull', function status_pull() { MSP.send_message(MSPCodes.MSP_STATUS); }, 250, true); - GUI.interval_add('config_load_analog', load_analog, 250, true); // 4 fps GUI.content_ready(callback); } }; diff --git a/tabs/power.html b/tabs/power.html index 301c8c89..e7252fe4 100644 --- a/tabs/power.html +++ b/tabs/power.html @@ -102,29 +102,29 @@
    From 1a87198bba2abccbbdcdfef629ef28e7741c3294 Mon Sep 17 00:00:00 2001 From: Hydra Date: Sun, 2 Apr 2017 11:27:52 +0100 Subject: [PATCH 13/41] CF/BF - Allow mixer to be changed - due to removal of MSP_MISC. --- js/msp/MSPHelper.js | 6 ++++++ tabs/configuration.js | 7 ++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js index e2d47803..b1e9e4e9 100644 --- a/js/msp/MSPHelper.js +++ b/js/msp/MSPHelper.js @@ -1052,6 +1052,9 @@ MspHelper.prototype.process_data = function(dataHandler) { case MSPCodes.MSP_SET_MOTOR_3D_CONFIG: console.log('3D settings saved'); break; + case MSPCodes.MSP_SET_MIXER_CONFIG: + console.log('Mixer config saved'); + break; case MSPCodes.MSP_SET_RC_DEADBAND: console.log('Rc controls settings saved'); break; @@ -1131,6 +1134,9 @@ MspHelper.prototype.crunch = function(code) { var featureMask = FEATURE_CONFIG.features.getMask(); buffer.push32(featureMask); break; + case MSPCodes.MSP_SET_MIXER_CONFIG: + buffer.push8(MIXER_CONFIG.mixer) + break; // case MSPCodes.MSP_SET_BF_CONFIG: // var featureMask = FEATURE_CONFIG.features.getMask(); // buffer.push8(MIXER_CONFIG.mixer) diff --git a/tabs/configuration.js b/tabs/configuration.js index eaa8d195..70dbe5b3 100644 --- a/tabs/configuration.js +++ b/tabs/configuration.js @@ -633,10 +633,15 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } function save_feature_config() { - var next_callback = save_board_alignment_config; + var next_callback = save_mixer_config; MSP.send_message(MSPCodes.MSP_SET_FEATURE_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_FEATURE_CONFIG), false, next_callback); } + function save_mixer_config() { + var next_callback = save_board_alignment_config; + MSP.send_message(MSPCodes.MSP_SET_MIXER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_MIXER_CONFIG), false, next_callback); + } + function save_board_alignment_config() { var next_callback = save_motor_config; MSP.send_message(MSPCodes.MSP_SET_BOARD_ALIGNMENT_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_BOARD_ALIGNMENT_CONFIG), false, next_callback); From a7703a995dd86c07902a24e60a936e4c719a4cc2 Mon Sep 17 00:00:00 2001 From: Michael Keller Date: Sun, 2 Apr 2017 12:19:07 +0100 Subject: [PATCH 14/41] CF/BF - delete old unused commented out code. --- js/fc.js | 37 +-------------------- js/msp/MSPHelper.js | 80 ++++----------------------------------------- 2 files changed, 8 insertions(+), 109 deletions(-) diff --git a/js/fc.js b/js/fc.js index 74dde279..3d4363cc 100644 --- a/js/fc.js +++ b/js/fc.js @@ -1,9 +1,8 @@ 'use strict'; // define all the global variables that are uses to hold FC state -var CONFIG; // FIXME rename to STATUS +var CONFIG; var FEATURE_CONFIG; -//var BF_CONFIG; // FIXME remove all references to this and delete it var MIXER_CONFIG; var BOARD_ALIGNMENT_CONFIG; var LED_STRIP; @@ -39,7 +38,6 @@ var MOTOR_CONFIG; var GPS_CONFIG; var COMPASS_CONFIG; var RSSI_CONFIG; -//var MISC; // FIXME remove all references to this and delete it var MOTOR_3D_CONFIG; var DATAFLASH; var SDCARD; @@ -92,19 +90,6 @@ var FC = { yaw: 0, }; - // FIXME remove all references to this and delete it -// BF_CONFIG = { -// mixer: 0, -// features: new Features(CONFIG), -// board_align_roll: 0, -// board_align_pitch: 0, -// board_align_yaw: 0, -// currentscale: 0, -// currentoffset: 0, -// currentMeterSource: 0, -// batterycapacity: 0, -// }; - LED_STRIP = []; LED_COLORS = []; LED_MODE_COLORS = []; @@ -244,26 +229,6 @@ var FC = { RSSI_CONFIG = { channel: 0, }; - - // FIXME remove all references to this and delete it -// MISC = { -// minthrottle: 0, -// maxthrottle: 0, -// mincommand: 0, -// failsafe_throttle: 0, -// gps_type: 0, -// gps_baudrate: 0, -// gps_ubx_sbas: 0, -// multiwiicurrentoutput: 0, -// rssi_channel: 0, -// placeholder2: 0, -// mag_declination: 0, // not checked -// vbatscale: 0, -// vbatmincellvoltage: 0, -// vbatmaxcellvoltage: 0, -// vbatwarningcellvoltage: 0, -// batterymetertype: 1, // 1=ADC, 2=ESC -// }; MOTOR_3D_CONFIG = { deadband3d_low: 0, diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js index b1e9e4e9..71843d9e 100644 --- a/js/msp/MSPHelper.js +++ b/js/msp/MSPHelper.js @@ -307,26 +307,6 @@ MspHelper.prototype.process_data = function(dataHandler) { case MSPCodes.MSP_RSSI_CONFIG: RSSI_CONFIG.channel = data.readU8(); break; -// case MSPCodes.MSP_MISC: -// RX_CONFIG.stick_center = data.readU16(); -// MOTOR_CONFIG.minthrottle = data.readU16(); // 0-2000 -// MOTOR_CONFIG.maxthrottle = data.readU16(); // 0-2000 -// MOTOR_CONFIG.mincommand = data.readU16(); // 0-2000 -// MISC.failsafe_throttle = data.readU16(); // 1000-2000 -// GPS_CONFIG.provider = data.readU8(); -// GPS_CONFIG.baudrate = data.readU8(); -// GPS_CONFIG.ublox_sbas = data.readU8(); -// MISC.multiwiicurrentoutput = data.readU8(); -// MISC.placeholder2 = data.readU8(); -// if (semver.lt(CONFIG.apiVersion, "1.18.0")) -// COMPASS_CONFIG.mag_declination = data.read16() / 10; // -1800-1800 -// else -// COMPASS_CONFIG.mag_declination = data.read16() / 100; // -18000-18000 -// MISC.vbatscale = data.readU8(); // 10-200 -// BATTERY_CONFIG.vbatmincellvoltage = data.readU8() / 10; // 10-50 -// BATTERY_CONFIG.vbatmaxcellvoltage = data.readU8() / 10; // 10-50 -// BATTERY_CONFIG.vbatwarningcellvoltage = data.readU8() / 10; // 10-50 -// break; case MSPCodes.MSP_MOTOR_3D_CONFIG: MOTOR_3D_CONFIG.deadband3d_low = data.readU16(); MOTOR_3D_CONFIG.deadband3d_high = data.readU16(); @@ -479,9 +459,6 @@ MspHelper.prototype.process_data = function(dataHandler) { case MSPCodes.MSP_SET_RSSI_CONFIG: console.log('RSSI Configuration saved'); break; -// case MSPCodes.MSP_SET_MISC: -// console.log('MISC Configuration saved'); -// break; case MSPCodes.MSP_SET_FEATURE_CONFIG: console.log('Features saved'); break; @@ -544,34 +521,23 @@ MspHelper.prototype.process_data = function(dataHandler) { case MSPCodes.MSP_SET_RX_MAP: console.log('RCMAP saved'); break; + case MSPCodes.MSP_MIXER_CONFIG: MIXER_CONFIG.mixer = data.readU8(); break; - case MSPCodes.MSP_FEATURE_CONFIG: - FEATURE_CONFIG.features.setMask(data.readU32()); + case MSPCodes.MSP_FEATURE_CONFIG: + FEATURE_CONFIG.features.setMask(data.readU32()); - updateTabList(FEATURE_CONFIG.features); - break; + updateTabList(FEATURE_CONFIG.features); + break; -// case MSPCodes.MSP_BF_CONFIG: -// MIXER_CONFIG.mixer = data.readU8(); -// FEATURE_CONFIG.features.setMask(data.readU32()); -// RX_CONFIG.serialrx_provider = data.readU8(); -// BOARD_ALIGNMENT_CONFIG.roll = data.read16(); // -180 - 360 -// BOARD_ALIGNMENT_CONFIG.pitch = data.read16(); // -180 - 360 -// BOARD_ALIGNMENT_CONFIG.yaw = data.read16(); // -180 - 360 -// BF_CONFIG.currentscale = data.read16(); -// BF_CONFIG.currentoffset = data.read16(); -// -// updateTabList(FEATURE_CONFIG.features); -// -// break; case MSPCodes.MSP_BOARD_ALIGNMENT_CONFIG: BOARD_ALIGNMENT_CONFIG.roll = data.read16(); // -180 - 360 BOARD_ALIGNMENT_CONFIG.pitch = data.read16(); // -180 - 360 BOARD_ALIGNMENT_CONFIG.yaw = data.read16(); // -180 - 360 break; + case MSPCodes.MSP_SET_REBOOT: console.log('Reboot request accepted'); break; @@ -1137,17 +1103,6 @@ MspHelper.prototype.crunch = function(code) { case MSPCodes.MSP_SET_MIXER_CONFIG: buffer.push8(MIXER_CONFIG.mixer) break; -// case MSPCodes.MSP_SET_BF_CONFIG: -// var featureMask = FEATURE_CONFIG.features.getMask(); -// buffer.push8(MIXER_CONFIG.mixer) -// .push32(featureMask) -// .push8(RX_CONFIG.serialrx_provider) -// .push16(BOARD_ALIGNMENT_CONFIG.roll) -// .push16(BOARD_ALIGNMENT_CONFIG.pitch) -// .push16(BOARD_ALIGNMENT_CONFIG.yaw) -// .push16(BF_CONFIG.currentscale) -// .push16(BF_CONFIG.currentoffset); -// break; case MSPCodes.MSP_SET_BOARD_ALIGNMENT_CONFIG: buffer.push16(BOARD_ALIGNMENT_CONFIG.roll) .push16(BOARD_ALIGNMENT_CONFIG.pitch) @@ -1214,28 +1169,6 @@ MspHelper.prototype.crunch = function(code) { case MSPCodes.MSP_SET_RSSI_CONFIG: buffer.push8(RSSI_CONFIG.channel); break; -// case MSPCodes.MSP_SET_MISC: -// buffer.push16(RX_CONFIG.stick_center) -// .push16(MOTOR_CONFIG.minthrottle) -// .push16(MOTOR_CONFIG.maxthrottle) -// .push16(MOTOR_CONFIG.mincommand) -// .push16(MISC.failsafe_throttle) -// .push8(GPS_CONFIG.provider) -// .push8(GPS_CONFIG.baudrate) -// .push8(GPS_CONFIG.ublox_sbas) -// .push8(MISC.multiwiicurrentoutput) -// .push8(RSSI_CONFIG.channel) -// .push8(MISC.placeholder2); -// if (semver.lt(CONFIG.apiVersion, "1.18.0")) { -// buffer.push16(Math.round(COMPASS_CONFIG.mag_declination * 10)); -// } else { -// buffer.push16(Math.round(COMPASS_CONFIG.mag_declination * 100)); -// } -// buffer.push8(MISC.vbatscale) -// .push8(Math.round(BATTERY_CONFIG.vbatmincellvoltage * 10)) -// .push8(Math.round(BATTERY_CONFIG.vbatmaxcellvoltage * 10)) -// .push8(Math.round(BATTERY_CONFIG.vbatwarningcellvoltage * 10)); -// break; case MSPCodes.MSP_SET_BATTERY_CONFIG: buffer.push8(Math.round(BATTERY_CONFIG.vbatmincellvoltage * 10)) .push8(Math.round(BATTERY_CONFIG.vbatmaxcellvoltage * 10)) @@ -1244,6 +1177,7 @@ MspHelper.prototype.crunch = function(code) { .push8(BATTERY_CONFIG.voltageMeterSource) .push8(BATTERY_CONFIG.currentMeterSource); break; +// FIXME - Needs updating before it can be used. // case MSPCodes.MSP_SET_VOLTAGE_METER_CONFIG: // buffer.push8(MISC.vbatscale) // .push8(Math.round(BATTERY_CONFIG.vbatmincellvoltage * 10)) From 5ab9d07ff7d8afaf3c7b7a233725f3164d7f4399 Mon Sep 17 00:00:00 2001 From: Hydra Date: Sun, 2 Apr 2017 12:37:38 +0100 Subject: [PATCH 15/41] CF/BF - ensure battery config is checked on connect so the battery bargraph can be calculated. --- js/serial_backend.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/js/serial_backend.js b/js/serial_backend.js index 9843501d..b843edaf 100755 --- a/js/serial_backend.js +++ b/js/serial_backend.js @@ -271,6 +271,9 @@ function onConnect() { $('#tabs ul.mode-connected').show(); + if (semver.gte(CONFIG.apiVersion, "1.33.0")) { + MSP.send_message(MSPCodes.MSP_BATTERY_CONFIG, false, false); + } MSP.send_message(MSPCodes.MSP_STATUS_EX, false, false); MSP.send_message(MSPCodes.MSP_DATAFLASH_SUMMARY, false, false); From 2241f33ca2faa6265eb5a944ef6578ef10221a3f Mon Sep 17 00:00:00 2001 From: Hydra Date: Sun, 2 Apr 2017 13:13:02 +0100 Subject: [PATCH 16/41] CF/BF - Reinstate support for MSP_MISC and some older versions of betaflight. Also fix missing save of GPS and Compass configuration. --- js/fc.js | 12 ++++++++ js/msp/MSPCodes.js | 8 +++--- js/msp/MSPHelper.js | 53 +++++++++++++++++++++++++++++++++- tabs/configuration.js | 67 +++++++++++++++++++++++++++++++++++++++---- 4 files changed, 129 insertions(+), 11 deletions(-) diff --git a/js/fc.js b/js/fc.js index 3d4363cc..47e3fdf6 100644 --- a/js/fc.js +++ b/js/fc.js @@ -34,6 +34,7 @@ var BATTERY_STATE; var BATTERY_CONFIG; var ARMING_CONFIG; var FC_CONFIG; +var MISC; // DEPRECATED var MOTOR_CONFIG; var GPS_CONFIG; var COMPASS_CONFIG; @@ -211,6 +212,17 @@ var FC = { loopTime: 0 }; + MISC = { + // DEPRECATED = only used to store values that are written back to the fc as-is, do NOT use for any other purpose + failsafe_throttle: 0, + gps_baudrate: 0, + multiwiicurrentoutput: 0, + placeholder2: 0, + vbatscale: 0, + vbatmincellvoltage: 0, + vbatmaxcellvoltage: 0, + vbatwarningcellvoltage: 0, + }; MOTOR_CONFIG = { minthrottle: 0, maxthrottle: 0, diff --git a/js/msp/MSPCodes.js b/js/msp/MSPCodes.js index 73025329..89b49a16 100644 --- a/js/msp/MSPCodes.js +++ b/js/msp/MSPCodes.js @@ -44,8 +44,8 @@ var MSPCodes = { MSP_SET_ARMING_CONFIG: 62, MSP_RX_MAP: 64, MSP_SET_RX_MAP: 65, - //MSP_BF_CONFIG: 66, // DEPRECATED - //MSP_SET_BF_CONFIG: 67, // DEPRECATED + MSP_BF_CONFIG: 66, // DEPRECATED + MSP_SET_BF_CONFIG: 67, // DEPRECATED MSP_SET_REBOOT: 68, MSP_BF_BUILD_INFO: 69, // Not used MSP_DATAFLASH_SUMMARY: 70, @@ -92,7 +92,7 @@ var MSPCodes = { MSP_RC_TUNING: 111, MSP_PID: 112, //MSP_BOX: 113, // DEPRECATED - //MSP_MISC: 114, // DEPRECATED + MSP_MISC: 114, // DEPRECATED MSP_BOXNAMES: 116, MSP_PIDNAMES: 117, MSP_WP: 118, // Not used @@ -124,7 +124,7 @@ var MSPCodes = { MSP_SET_RC_TUNING: 204, MSP_ACC_CALIBRATION: 205, MSP_MAG_CALIBRATION: 206, - //MSP_SET_MISC: 207, // DEPRECATED + MSP_SET_MISC: 207, // DEPRECATED MSP_RESET_CONF: 208, MSP_SET_WP: 209, // Not used MSP_SELECT_SETTING: 210, diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js index 71843d9e..c8ccaf00 100644 --- a/js/msp/MSPHelper.js +++ b/js/msp/MSPHelper.js @@ -151,7 +151,7 @@ MspHelper.prototype.process_data = function(dataHandler) { case MSPCodes.MSP_SONAR: SENSOR_DATA.sonar = data.read32(); break; - case MSPCodes.MSP_ANALOG: + case MSPCodes.MSP_ANALOG: ANALOG.voltage = data.readU8() / 10.0; ANALOG.mAhdrawn = data.readU16(); ANALOG.rssi = data.readU16(); // 0-1023 @@ -292,6 +292,32 @@ MspHelper.prototype.process_data = function(dataHandler) { ARMING_CONFIG.disarm_kill_switch = data.readU8(); } break; + case MSPCodes.MSP_LOOP_TIME: + if (semver.gte(CONFIG.apiVersion, "1.8.0")) { + FC_CONFIG.loopTime = data.readU16(); + } + break; + case MSPCodes.MSP_MISC: // 22 bytes + RX_CONFIG.midrc = data.readU16(); + MOTOR_CONFIG.minthrottle = data.readU16(); // 0-2000 + MOTOR_CONFIG.maxthrottle = data.readU16(); // 0-2000 + MOTOR_CONFIG.mincommand = data.readU16(); // 0-2000 + MISC.failsafe_throttle = data.readU16(); // 1000-2000 + GPS_CONFIG.provider = data.readU8(); + MISC.gps_baudrate = data.readU8(); + GPS_CONFIG.ublox_sbas = data.readU8(); + MISC.multiwiicurrentoutput = data.readU8(); + RSSI_CONFIG.channel = data.readU8(); + MISC.placeholder2 = data.readU8(); + if (semver.lt(CONFIG.apiVersion, "1.18.0")) + COMPASS_CONFIG.mag_declination = data.read16() / 10; // -1800-1800 + else + COMPASS_CONFIG.mag_declination = data.read16() / 100; // -18000-18000 + MISC.vbatscale = data.readU8(); // was MISC.vbatscale - 10-200 + MISC.vbatmincellvoltage = data.readU8() / 10; // 10-50 + MISC.vbatmaxcellvoltage = data.readU8() / 10; // 10-50 + MISC.vbatwarningcellvoltage = data.readU8() / 10; // 10-50 + break; case MSPCodes.MSP_MOTOR_CONFIG: MOTOR_CONFIG.minthrottle = data.readU16(); // 0-2000 MOTOR_CONFIG.maxthrottle = data.readU16(); // 0-2000 @@ -1154,6 +1180,31 @@ MspHelper.prototype.crunch = function(code) { buffer.push8(ARMING_CONFIG.auto_disarm_delay) .push8(ARMING_CONFIG.disarm_kill_switch); break; + case MSPCodes.MSP_SET_LOOP_TIME: + buffer.push16(FC_CONFIG.loopTime); + break; + case MSPCodes.MSP_SET_MISC: + buffer.push16(RX_CONFIG.midrc) + .push16(MOTOR_CONFIG.minthrottle) + .push16(MOTOR_CONFIG.maxthrottle) + .push16(MOTOR_CONFIG.mincommand) + .push16(MISC.failsafe_throttle) + .push8(GPS_CONFIG.provider) + .push8(MISC.gps_baudrate) + .push8(GPS_CONFIG.ublox_sbas) + .push8(MISC.multiwiicurrentoutput) + .push8(RSSI_CONFIG.channel) + .push8(MISC.placeholder2); + if (semver.lt(CONFIG.apiVersion, "1.18.0")) { + buffer.push16(Math.round(COMPASS_CONFIG.mag_declination * 10)); + } else { + buffer.push16(Math.round(COMPASS_CONFIG.mag_declination * 100)); + } + buffer.push8(MISC.vbatscale) + .push8(Math.round(MISC.vbatmincellvoltage * 10)) + .push8(Math.round(MISC.vbatmaxcellvoltage * 10)) + .push8(Math.round(MISC.vbatwarningcellvoltage * 10)); + break; case MSPCodes.MSP_SET_MOTOR_CONFIG: buffer.push16(MOTOR_CONFIG.minthrottle) .push16(MOTOR_CONFIG.maxthrottle) diff --git a/tabs/configuration.js b/tabs/configuration.js index 70dbe5b3..061948ce 100644 --- a/tabs/configuration.js +++ b/tabs/configuration.js @@ -36,21 +36,45 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } function load_motor_config() { - MSP.send_message(MSPCodes.MSP_MOTOR_CONFIG, false, false, load_compass_config); + var next_callback = load_compass_config; + if(semver.gte(CONFIG.apiVersion, "1.33.0")) { + MSP.send_message(MSPCodes.MSP_MOTOR_CONFIG, false, false, next_callback); + } else { + next_callback(); + } } function load_compass_config() { - MSP.send_message(MSPCodes.MSP_COMPASS_CONFIG, false, false, load_gps_config); + var next_callback = load_gps_config; + if(semver.gte(CONFIG.apiVersion, "1.33.0")) { + MSP.send_message(MSPCodes.MSP_COMPASS_CONFIG, false, false, load_gps_config); + } else { + next_callback(); + } } function load_gps_config() { - MSP.send_message(MSPCodes.MSP_GPS_CONFIG, false, false, load_acc_trim); + var next_callback = load_acc_trim; + if(semver.gte(CONFIG.apiVersion, "1.33.0")) { + MSP.send_message(MSPCodes.MSP_GPS_CONFIG, false, false, load_acc_trim); + } else { + next_callback(); + } } function load_acc_trim() { - MSP.send_message(MSPCodes.MSP_ACC_TRIM, false, false, load_arming_config); + MSP.send_message(MSPCodes.MSP_ACC_TRIM, false, false, load_misc); } + function load_misc() { + var next_callback = load_arming_config; + if (semver.lt(CONFIG.apiVersion, "1.33.0")) { + MSP.send_message(MSPCodes.MSP_MISC, false, false, next_callback); + } else { + next_callback(); + } + } + function load_arming_config() { var next_callback = load_3d; if (semver.gte(CONFIG.apiVersion, "1.8.0")) { @@ -633,10 +657,19 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } function save_feature_config() { - var next_callback = save_mixer_config; + var next_callback = save_misc; MSP.send_message(MSPCodes.MSP_SET_FEATURE_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_FEATURE_CONFIG), false, next_callback); } + function save_misc() { + var next_callback = save_mixer_config; + if(semver.lt(CONFIG.apiVersion, "1.33.0")) { + MSP.send_message(MSPCodes.MSP_SET_MISC, mspHelper.crunch(MSPCodes.MSP_SET_MISC), false, next_callback); + } else { + next_callback(); + } + } + function save_mixer_config() { var next_callback = save_board_alignment_config; MSP.send_message(MSPCodes.MSP_SET_MIXER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_MIXER_CONFIG), false, next_callback); @@ -648,8 +681,30 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } function save_motor_config() { + var next_callback = save_gps_config; + if(semver.gte(CONFIG.apiVersion, "1.33.0")) { + MSP.send_message(MSPCodes.MSP_SET_MOTOR_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_MOTOR_CONFIG), false, next_callback); + } else { + next_callback(); + } + } + + function save_gps_config() { + var next_callback = save_compass_config; + if(semver.gte(CONFIG.apiVersion, "1.33.0")) { + MSP.send_message(MSPCodes.MSP_SET_GPS_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_GPS_CONFIG), false, next_callback); + } else { + next_callback(); + } + } + + function save_compass_config() { var next_callback = save_motor_3d_config; - MSP.send_message(MSPCodes.MSP_SET_MOTOR_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_MOTOR_CONFIG), false, next_callback); + if(semver.gte(CONFIG.apiVersion, "1.33.0")) { + MSP.send_message(MSPCodes.MSP_SET_COMPASS_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_COMPASS_CONFIG), false, next_callback); + } else { + next_callback(); + } } function save_motor_3d_config() { From b9691f0dbde7ec65e322ae5621ec3986e14b90cf Mon Sep 17 00:00:00 2001 From: Hydra Date: Sun, 2 Apr 2017 17:29:27 +0100 Subject: [PATCH 17/41] CF/BF - Limit support to CF v2.0.0 onwards and BF v3.0.0 onwards ONLY. --- js/serial_backend.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/serial_backend.js b/js/serial_backend.js index b843edaf..edc21b41 100755 --- a/js/serial_backend.js +++ b/js/serial_backend.js @@ -221,7 +221,7 @@ function onOpen(openInfo) { $('#tabs ul.mode-connected .tab_setup a').click(); }); }); - }); + } }); } else { GUI.show_modal(chrome.i18n.getMessage('warningTitle'), From 971a7c44ab5b3021f3e76f18d90ef6d608673f34 Mon Sep 17 00:00:00 2001 From: Hydra Date: Sun, 2 Apr 2017 17:33:02 +0100 Subject: [PATCH 18/41] CF/BF - Bump API version for power and battery tab to be 1.33.0. --- tabs/power.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tabs/power.js b/tabs/power.js index 142ff05f..cb0a04f6 100644 --- a/tabs/power.js +++ b/tabs/power.js @@ -44,7 +44,7 @@ TABS.power.initialize = function (callback) { $('#content').load("./tabs/power.html", process_html); } - this.supported = semver.gte(CONFIG.apiVersion, "1.22.0"); + this.supported = semver.gte(CONFIG.apiVersion, "1.33.0"); if (!this.supported) { load_html(); From b4f3452ad4883051305f516737ac997a4ccb59d1 Mon Sep 17 00:00:00 2001 From: Hydra Date: Sun, 2 Apr 2017 17:55:53 +0100 Subject: [PATCH 19/41] CF/BF - add more translations for ESC voltage/current meters. --- _locales/en/messages.json | 60 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index bc4e49e1..5c643696 100755 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -1913,6 +1913,30 @@ "powerVoltageId63": { "message": "ESC Motor 4" }, + "powerVoltageId64": { + "message": "ESC Motor 5" + }, + "powerVoltageId65": { + "message": "ESC Motor 6" + }, + "powerVoltageId66": { + "message": "ESC Motor 7" + }, + "powerVoltageId67": { + "message": "ESC Motor 8" + }, + "powerVoltageId68": { + "message": "ESC Motor 9" + }, + "powerVoltageId69": { + "message": "ESC Motor 10" + }, + "powerVoltageId70": { + "message": "ESC Motor 11" + }, + "powerVoltageId71": { + "message": "ESC Motor 12" + }, "powerVoltageId80": { "message": "Cell 1" }, @@ -1952,6 +1976,42 @@ "powerAmperageId50": { "message": "ESC Combined" }, + "powerAmperageId60": { + "message": "ESC Motor 1" + }, + "powerAmperageId61": { + "message": "ESC Motor 2" + }, + "powerAmperageId62": { + "message": "ESC Motor 3" + }, + "powerAmperageId63": { + "message": "ESC Motor 4" + }, + "powerAmperageId64": { + "message": "ESC Motor 5" + }, + "powerAmperageId65": { + "message": "ESC Motor 6" + }, + "powerAmperageId66": { + "message": "ESC Motor 7" + }, + "powerAmperageId67": { + "message": "ESC Motor 8" + }, + "powerAmperageId68": { + "message": "ESC Motor 9" + }, + "powerAmperageId69": { + "message": "ESC Motor 10" + }, + "powerAmperageId70": { + "message": "ESC Motor 11" + }, + "powerAmperageId71": { + "message": "ESC Motor 12" + }, "powerAmperageId80": { "message": "Virtual" }, From 248f2ec727dfe9cc970066b1ad2147df3da44054 Mon Sep 17 00:00:00 2001 From: Hydra Date: Sun, 2 Apr 2017 18:45:03 +0100 Subject: [PATCH 20/41] CF/BF - Update OSD examples to match latest firmware. --- tabs/osd.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tabs/osd.js b/tabs/osd.js index ece903db..6d11fb1d 100755 --- a/tabs/osd.js +++ b/tabs/osd.js @@ -25,6 +25,7 @@ SYM.PB_FULL = 0x8B; SYM.PB_EMPTY = 0x8D; SYM.PB_END = 0x8E; SYM.PB_CLOSE = 0x8F; +SYM.BATTERY = 0x96; var FONT = FONT || {}; @@ -246,7 +247,7 @@ OSD.constants = { name: 'MAIN_BATT_VOLTAGE', default_position: -29, positionable: true, - preview: FONT.symbol(SYM.VOLT) + '16.8' + preview: FONT.symbol(SYM.BATTERY) + '16.8' + FONT.symbol(SYM.VOLT) }, RSSI_VALUE: { name: 'RSSI_VALUE', @@ -276,7 +277,7 @@ OSD.constants = { name: 'VTX_CHANNEL', default_position: 1, positionable: true, - preview: 'CH:1' + preview: 'R:2' }, VOLTAGE_WARNING: { name: 'VOLTAGE_WARNING', @@ -327,7 +328,7 @@ OSD.constants = { name: 'CRAFT_NAME', default_position: -77, positionable: true, - preview: '[CRAFT_NAME]' + preview: 'CRAFT_NAME' }, ALTITUDE: { name: 'ALTITUDE', @@ -341,13 +342,13 @@ OSD.constants = { name: 'ONTIME', default_position: -1, positionable: true, - preview: FONT.symbol(SYM.ON_M) + ' 4:11' + preview: FONT.symbol(SYM.ON_M) + '05:42' }, FLYTIME: { name: 'FLYTIME', default_position: -1, positionable: true, - preview: FONT.symbol(SYM.FLY_M) + ' 4:11' + preview: FONT.symbol(SYM.FLY_M) + '04:11' }, FLYMODE: { name: 'FLYMODE', @@ -407,7 +408,7 @@ OSD.constants = { name: 'AVG_CELL_VOLTAGE', default_position: 12 << 5, positionable: true, - preview: '3.98V' + preview: FONT.symbol(SYM.BATTERY) + '3.98' + FONT.symbol(SYM.VOLT) }, PITCH_ANGLE: { name: 'PITCH_ANGLE', From 158b36cd9cb59ce5016eeb107a2f903280e3e300 Mon Sep 17 00:00:00 2001 From: Hydra Date: Sun, 2 Apr 2017 19:19:10 +0100 Subject: [PATCH 21/41] CF/BF - Add support for updated MSP_GPS_CONFIG in API v1.34.0 --- _locales/en/messages.json | 6 ++++++ js/fc.js | 2 ++ js/msp/MSPHelper.js | 8 ++++++++ tabs/configuration.html | 16 ++++++++++++++++ tabs/configuration.js | 18 ++++++++++++++++-- 5 files changed, 48 insertions(+), 2 deletions(-) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 5c643696..37166a26 100755 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -712,6 +712,12 @@ "configurationGPSubxSbas": { "message": "Ground Assistance Type" }, + "configurationGPSAutoBaud": { + "message": "Auto Baud" + }, + "configurationGPSAutoConfig": { + "message": "Auto Config" + }, "configurationGPSHelp": { "message": "Note: Remember to configure a Serial Port (via Ports tab) when using GPS feature." }, diff --git a/js/fc.js b/js/fc.js index 47e3fdf6..2ace3630 100644 --- a/js/fc.js +++ b/js/fc.js @@ -232,6 +232,8 @@ var FC = { GPS_CONFIG = { provider: 0, ublox_sbas: 0, + auto_config: 0, + auto_baud: 0, }; COMPASS_CONFIG = { diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js index c8ccaf00..6141451f 100644 --- a/js/msp/MSPHelper.js +++ b/js/msp/MSPHelper.js @@ -329,6 +329,10 @@ MspHelper.prototype.process_data = function(dataHandler) { case MSPCodes.MSP_GPS_CONFIG: GPS_CONFIG.provider = data.readU8(); GPS_CONFIG.ublox_sbas = data.readU8(); + if (semver.gte(CONFIG.apiVersion, "1.34.0")) { + GPS_CONFIG.auto_config = data.readU8(); + GPS_CONFIG.auto_baud = data.readU8(); + } break; case MSPCodes.MSP_RSSI_CONFIG: RSSI_CONFIG.channel = data.readU8(); @@ -1213,6 +1217,10 @@ MspHelper.prototype.crunch = function(code) { case MSPCodes.MSP_SET_GPS_CONFIG: buffer.push8(GPS_CONFIG.provider) .push8(GPS_CONFIG.ublox_sbas); + if (semver.gte(CONFIG.apiVersion, "1.34.0")) { + buffer.push8(GPS_CONFIG.auto_config) + .push8(GPS_CONFIG.auto_baud); + } break; case MSPCodes.MSP_SET_COMPASS_CONFIG: buffer.push16(Math.round(COMPASS_CONFIG.mag_declination * 100)); diff --git a/tabs/configuration.html b/tabs/configuration.html index 2d802242..a872dd61 100644 --- a/tabs/configuration.html +++ b/tabs/configuration.html @@ -442,6 +442,22 @@
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    - -
    + +
    +
    +
    +
    +

    +
    +
    +
    +
    -
    + +
    + +
    +
    - +

    - +
    +
    -
    +
    +
    diff --git a/tabs/transponder.js b/tabs/transponder.js index 8135c4ab..4e40669a 100644 --- a/tabs/transponder.js +++ b/tabs/transponder.js @@ -1,19 +1,50 @@ 'use strict'; + TABS.transponder = { available: false }; TABS.transponder.initialize = function (callback, scrollPosition) { - var self = this; + + var dataTypes = { + NONE : 0, + TEXT : 1, + LIST : 2, + }; + + var transponderConfigurations = { + 0: { + dataType: dataTypes.NONE // empty + }, //NONE + 1: { + dataType: dataTypes.TEXT // + }, //ilap + 2: { + dataType: dataTypes.LIST, // + dataOptions: { + 'ID 1' : 'E00370FC0FFE07E0FF', + 'ID 2' : '007C003EF800FC0FFE', + 'ID 3' : 'F8811FF8811FFFC7FF', + 'ID 4' : '007C003EF81F800FFE', + 'ID 5' : 'F00FFF00FFF00FF0FF', + 'ID 6' : '007CF0C1071F7C00F0', + 'ID 7' : 'E003F03F00FF03F0C1', + 'ID 8' : '00FC0FFE071F3E00FE', + 'ID 9' : 'E083BFF00F9E38C0FF', + } + }, //arcitimer + }; if (GUI.active_tab != 'transponder') { GUI.active_tab = 'transponder'; + googleAnalytics.sendAppView('Transponder'); } - // transponder supported added in MSP API Version 1.16.0 - TABS.transponder.available = semver.gte(CONFIG.apiVersion, "1.16.0"); - + if (CONFIG) { + TABS.transponder.available = semver.gte(CONFIG.apiVersion, "1.16.0"); + } + ////////////// if (!TABS.transponder.available) { load_html(); return; @@ -23,13 +54,11 @@ TABS.transponder.initialize = function (callback, scrollPosition) { $('#content').load("./tabs/transponder.html", process_html); } - // get the transponder data and a flag to see if transponder support is enabled on the FC - MSP.send_message(MSPCodes.MSP_TRANSPONDER_CONFIG, false, false, load_html); - + //HELPERS // Convert a hex string to a byte array function hexToBytes(hex) { for (var bytes = [], c = 0; c < hex.length; c += 2) - bytes.push(~parseInt(hex.substr(c, 2), 16)); + bytes.push(~parseInt(hex.substr(c, 2), 16)); return bytes; } @@ -37,63 +66,203 @@ TABS.transponder.initialize = function (callback, scrollPosition) { n = n + ''; return n.length >= width ? n : new Array(width - n.length + 1).join('0') + n; } - + // Convert a byte array to a hex string function bytesToHex(bytes) { for (var hex = [], i = 0; i < bytes.length; i++) { - hex.push(pad(((~bytes[i]) & 0xFF).toString(16),2)); + hex.push(pad(((~bytes[i]) & 0xFF).toString(16), 2)); } return hex.join("").toUpperCase(); } - function process_html() { - // translate to user-selected language - localize(); - - $(".tab-transponder") - .toggleClass("transponder-supported", TABS.transponder.available && TRANSPONDER.supported); - - if (TABS.transponder.available) { - - var data = bytesToHex(TRANSPONDER.data); - - $('input[name="data"]').val(data); - $('input[name="data"]').prop('maxLength', data.length); - - $('a.save').click(function () { - - - // gather data that doesn't have automatic change event bound - - var dataString = $('input[name="data"]').val(); - var expectedLength = TRANSPONDER.data.length; - var hexRegExp = new RegExp('[0-9a-fA-F]{' + (expectedLength * 2) + '}', 'gi'); - if (!dataString.match(hexRegExp)) { - GUI.log(chrome.i18n.getMessage('transponderDataInvalid')); - return; + ///////////// + + function fillByTransponderProviders(transponderProviders, transponderProviderID, toggleTransponderType){ + var transponderTypeSelect = $('#transponder_type_select'); + transponderTypeSelect.attr('data-defaultValue', transponderProviderID); + transponderTypeSelect.off('change').change(toggleTransponderType); + transponderTypeSelect.html(''); + + //build radio buttons + transponderTypeSelect.append( + $('
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    diff --git a/tabs/transponder.js b/tabs/transponder.js index 4e40669a..64ca0d75 100644 --- a/tabs/transponder.js +++ b/tabs/transponder.js @@ -5,15 +5,18 @@ TABS.transponder = { available: false }; -TABS.transponder.initialize = function (callback, scrollPosition) { +TABS.transponder.initialize = function(callback, scrollPosition) { - var dataTypes = { - NONE : 0, - TEXT : 1, - LIST : 2, + let _persistentInputValues = {}; + + let dataTypes = { + NONE: 0, + TEXT: 1, + LIST: 2, }; - var transponderConfigurations = { + // CONFIGURATION HERE FOR ADD NEW TRANSPONDER + let transponderConfigurations = { 0: { dataType: dataTypes.NONE // empty }, //NONE @@ -23,29 +26,30 @@ TABS.transponder.initialize = function (callback, scrollPosition) { 2: { dataType: dataTypes.LIST, // dataOptions: { - 'ID 1' : 'E00370FC0FFE07E0FF', - 'ID 2' : '007C003EF800FC0FFE', - 'ID 3' : 'F8811FF8811FFFC7FF', - 'ID 4' : '007C003EF81F800FFE', - 'ID 5' : 'F00FFF00FFF00FF0FF', - 'ID 6' : '007CF0C1071F7C00F0', - 'ID 7' : 'E003F03F00FF03F0C1', - 'ID 8' : '00FC0FFE071F3E00FE', - 'ID 9' : 'E083BFF00F9E38C0FF', + 'ID 1': 'E00370FC0FFE07E0FF', + 'ID 2': '007C003EF800FC0FFE', + 'ID 3': 'F8811FF8811FFFC7FF', + 'ID 4': '007C003EF81F800FFE', + 'ID 5': 'F00FFF00FFF00FF0FF', + 'ID 6': '007CF0C1071F7C00F0', + 'ID 7': 'E003F03F00FF03F0C1', + 'ID 8': '00FC0FFE071F3E00FE', + 'ID 9': 'E083BFF00F9E38C0FF', } }, //arcitimer }; + ///////////////////////////////////////////// - if (GUI.active_tab != 'transponder') { + if ( GUI.active_tab != 'transponder' ) { GUI.active_tab = 'transponder'; googleAnalytics.sendAppView('Transponder'); } // transponder supported added in MSP API Version 1.16.0 - if (CONFIG) { + if ( CONFIG ) { TABS.transponder.available = semver.gte(CONFIG.apiVersion, "1.16.0"); } ////////////// - if (!TABS.transponder.available) { + if ( !TABS.transponder.available ) { load_html(); return; } @@ -57,8 +61,11 @@ TABS.transponder.initialize = function (callback, scrollPosition) { //HELPERS // Convert a hex string to a byte array function hexToBytes(hex) { - for (var bytes = [], c = 0; c < hex.length; c += 2) + var bytes = []; + for ( let c = 0; c < hex.length; c += 2 ) { bytes.push(~parseInt(hex.substr(c, 2), 16)); + } + return bytes; } @@ -69,15 +76,17 @@ TABS.transponder.initialize = function (callback, scrollPosition) { // Convert a byte array to a hex string function bytesToHex(bytes) { - for (var hex = [], i = 0; i < bytes.length; i++) { + var hex = []; + for ( let i = 0; i < bytes.length; i++ ) { hex.push(pad(((~bytes[i]) & 0xFF).toString(16), 2)); } return hex.join("").toUpperCase(); } + ///////////// - function fillByTransponderProviders(transponderProviders, transponderProviderID, toggleTransponderType){ - var transponderTypeSelect = $('#transponder_type_select'); + function fillByTransponderProviders(transponderProviders, transponderProviderID, toggleTransponderType) { + let transponderTypeSelect = $('#transponder_type_select'); transponderTypeSelect.attr('data-defaultValue', transponderProviderID); transponderTypeSelect.off('change').change(toggleTransponderType); transponderTypeSelect.html(''); @@ -87,10 +96,10 @@ TABS.transponder.initialize = function (callback, scrollPosition) { $('