1
0
Fork 0
mirror of https://github.com/iNavFlight/inav-configurator.git synced 2025-07-23 00:05:19 +03:00

msp cleanup

This commit is contained in:
Pawel Spychalski (DzikuVx) 2016-11-23 20:00:04 +01:00
parent 18a00dedf8
commit 9a5e3dbeae
7 changed files with 266 additions and 396 deletions

View file

@ -345,5 +345,15 @@ GUI_control.prototype.content_ready = function (callback) {
if (callback) callback(); if (callback) callback();
}; };
GUI_control.prototype.updateStatusBar = function() {
$('span.i2c-error').text(CONFIG.i2cError);
$('span.cycle-time').text(CONFIG.cycleTime);
$('span.cpu-load').text(chrome.i18n.getMessage('statusbar_cpu_load', [CONFIG.cpuload]));
};
GUI_control.prototype.updateProfileChange = function() {
$('#profilechange').val(CONFIG.profile);
};
// initialize object into GUI variable // initialize object into GUI variable
var GUI = new GUI_control(); var GUI = new GUI_control();

View file

@ -87,7 +87,7 @@ var MSP = {
case 6: case 6:
if (this.message_checksum == data[i]) { if (this.message_checksum == data[i]) {
// message received, process // message received, process
mspHelper.processData(this.code, this.message_buffer, this.message_length_expected); mspHelper.processData(this);
} else { } else {
console.log('code: ' + this.code + ' - crc failed'); console.log('code: ' + this.code + ' - crc failed');
@ -109,12 +109,13 @@ var MSP = {
send_message: function (code, data, callback_sent, callback_msp) { send_message: function (code, data, callback_sent, callback_msp) {
var bufferOut, var bufferOut,
bufView; bufView,
i;
// always reserve 6 bytes for protocol overhead ! // always reserve 6 bytes for protocol overhead !
if (data) { if (data) {
var size = data.length + 6, var size = data.length + 6,
checksum = 0; checksum;
bufferOut = new ArrayBuffer(size); bufferOut = new ArrayBuffer(size);
bufView = new Uint8Array(bufferOut); bufView = new Uint8Array(bufferOut);
@ -127,7 +128,7 @@ var MSP = {
checksum = bufView[3] ^ bufView[4]; checksum = bufView[3] ^ bufView[4];
for (var i = 0; i < data.length; i++) { for (i = 0; i < data.length; i++) {
bufView[i + 5] = data[i]; bufView[i + 5] = data[i];
checksum ^= bufView[i + 5]; checksum ^= bufView[i + 5];
@ -152,7 +153,7 @@ var MSP = {
var obj = {'code': code, 'requestBuffer': bufferOut, 'callback': (callback_msp) ? callback_msp : false, 'timer': false}; var obj = {'code': code, 'requestBuffer': bufferOut, 'callback': (callback_msp) ? callback_msp : false, 'timer': false};
var requestExists = false; var requestExists = false;
for (var i = 0; i < MSP.callbacks.length; i++) { for (i = 0; i < MSP.callbacks.length; i++) {
if (i < MSP.callbacks.length) { if (i < MSP.callbacks.length) {
if (MSP.callbacks[i].code == code) { if (MSP.callbacks[i].code == code) {
// request already exist, we will just attach // request already exist, we will just attach

View file

@ -1,6 +1,7 @@
'use strict' /*global $, SERVO_DATA, PID_names, ADJUSTMENT_RANGES, RXFAIL_CONFIG, SERVO_CONFIG*/
'use strict';
var mspHelper = (function () { var mspHelper = (function (gui) {
var self = {}; var self = {};
self.BAUD_RATES = [ self.BAUD_RATES = [
@ -11,8 +12,8 @@ var mspHelper = (function () {
'57600', '57600',
'115200', '115200',
'230400', '230400',
'250000', '250000'
] ];
self.SERIAL_PORT_FUNCTIONS = { self.SERIAL_PORT_FUNCTIONS = {
'MSP': 0, 'MSP': 0,
@ -24,13 +25,20 @@ var mspHelper = (function () {
'RX_SERIAL': 6, 'RX_SERIAL': 6,
'BLACKBOX': 7, 'BLACKBOX': 7,
'TELEMETRY_MAVLINK': 8, 'TELEMETRY_MAVLINK': 8,
'TELEMETRY_IBUS': 9, 'TELEMETRY_IBUS': 9
} };
self.processData: function (code, message_buffer, message_length) { /**
var data = new DataView(message_buffer, 0); // DataView (allowing us to view arrayBuffer as struct/union) *
* @param {MSP} dataHandler
*/
self.processData = function (dataHandler) {
var data = new DataView(dataHandler.message_buffer, 0), // DataView (allowing us to view arrayBuffer as struct/union)
offset = 0,
needle = 0,
i = 0;
if (!this.unsupported) switch (code) { if (!dataHandler.unsupported) switch (dataHandler.code) {
case MSPCodes.MSP_IDENT: case MSPCodes.MSP_IDENT:
console.log('Using deprecated msp command: MSP_IDENT'); console.log('Using deprecated msp command: MSP_IDENT');
// Deprecated // Deprecated
@ -45,11 +53,9 @@ var mspHelper = (function () {
CONFIG.activeSensors = data.getUint16(4, 1); CONFIG.activeSensors = data.getUint16(4, 1);
CONFIG.mode = data.getUint32(6, 1); CONFIG.mode = data.getUint32(6, 1);
CONFIG.profile = data.getUint8(10); CONFIG.profile = data.getUint8(10);
$('select[name="profilechange"]').val(CONFIG.profile); gui.updateProfileChange();
gui.updateStatusBar();
sensor_status(CONFIG.activeSensors); sensor_status(CONFIG.activeSensors);
$('span.i2c-error').text(CONFIG.i2cError);
$('span.cycle-time').text(CONFIG.cycleTime);
break; break;
case MSPCodes.MSP_STATUS_EX: case MSPCodes.MSP_STATUS_EX:
CONFIG.cycleTime = data.getUint16(0, 1); CONFIG.cycleTime = data.getUint16(0, 1);
@ -60,9 +66,7 @@ var mspHelper = (function () {
CONFIG.cpuload = data.getUint16(11, 1); CONFIG.cpuload = data.getUint16(11, 1);
sensor_status(CONFIG.activeSensors); sensor_status(CONFIG.activeSensors);
$('span.i2c-error').text(CONFIG.i2cError); gui.updateStatusBar();
$('span.cycle-time').text(CONFIG.cycleTime);
$('span.cpu-load').text(chrome.i18n.getMessage('statusbar_cpu_load', [CONFIG.cpuload]));
break; break;
case MSPCodes.MSP_RAW_IMU: case MSPCodes.MSP_RAW_IMU:
@ -83,27 +87,25 @@ var mspHelper = (function () {
SENSOR_DATA.magnetometer[2] = data.getInt16(16, 1) / 1090; SENSOR_DATA.magnetometer[2] = data.getInt16(16, 1) / 1090;
break; break;
case MSPCodes.MSP_SERVO: case MSPCodes.MSP_SERVO:
var servoCount = message_length / 2; var servoCount = dataHandler.message_length_expected / 2;
var needle = 0; for (i = 0; i < servoCount; i++) {
for (var i = 0; i < servoCount; i++) {
SERVO_DATA[i] = data.getUint16(needle, 1); SERVO_DATA[i] = data.getUint16(needle, 1);
needle += 2; needle += 2;
} }
break; break;
case MSPCodes.MSP_MOTOR: case MSPCodes.MSP_MOTOR:
var motorCount = message_length / 2; var motorCount = dataHandler.message_length_expected / 2;
var needle = 0; for (i = 0; i < motorCount; i++) {
for (var i = 0; i < motorCount; i++) {
MOTOR_DATA[i] = data.getUint16(needle, 1); MOTOR_DATA[i] = data.getUint16(needle, 1);
needle += 2; needle += 2;
} }
break; break;
case MSPCodes.MSP_RC: case MSPCodes.MSP_RC:
RC.active_channels = message_length / 2; RC.active_channels = dataHandler.message_length_expected / 2;
for (var i = 0; i < RC.active_channels; i++) { for (i = 0; i < RC.active_channels; i++) {
RC.channels[i] = data.getUint16((i * 2), 1); RC.channels[i] = data.getUint16((i * 2), 1);
} }
break; break;
@ -147,18 +149,12 @@ var mspHelper = (function () {
ANALOG.mAhdrawn = data.getUint16(1, 1); ANALOG.mAhdrawn = data.getUint16(1, 1);
ANALOG.rssi = data.getUint16(3, 1); // 0-1023 ANALOG.rssi = data.getUint16(3, 1); // 0-1023
ANALOG.amperage = data.getInt16(5, 1) / 100; // A ANALOG.amperage = data.getInt16(5, 1) / 100; // A
this.analog_last_received_timestamp = Date.now(); dataHandler.analog_last_received_timestamp = Date.now();
break; break;
case MSPCodes.MSP_RC_TUNING: case MSPCodes.MSP_RC_TUNING:
var offset = 0;
RC_tuning.RC_RATE = parseFloat((data.getUint8(offset++) / 100).toFixed(2)); RC_tuning.RC_RATE = parseFloat((data.getUint8(offset++) / 100).toFixed(2));
RC_tuning.RC_EXPO = parseFloat((data.getUint8(offset++) / 100).toFixed(2)); RC_tuning.RC_EXPO = parseFloat((data.getUint8(offset++) / 100).toFixed(2));
if (semver.lt(CONFIG.apiVersion, "1.7.0")) { if (FC.isRatesInDps()) {
RC_tuning.roll_pitch_rate = parseFloat((data.getUint8(offset++) / 100).toFixed(2));
RC_tuning.pitch_rate = 0;
RC_tuning.roll_rate = 0;
RC_tuning.yaw_rate = parseFloat((data.getUint8(offset++) / 100).toFixed(2));
} else if (FC.isRatesInDps()) {
RC_tuning.roll_pitch_rate = 0; RC_tuning.roll_pitch_rate = 0;
RC_tuning.roll_rate = parseFloat((data.getUint8(offset++) * 10)); RC_tuning.roll_rate = parseFloat((data.getUint8(offset++) * 10));
RC_tuning.pitch_rate = parseFloat((data.getUint8(offset++) * 10)); RC_tuning.pitch_rate = parseFloat((data.getUint8(offset++) * 10));
@ -173,50 +169,26 @@ var mspHelper = (function () {
RC_tuning.dynamic_THR_PID = parseInt(data.getUint8(offset++)); RC_tuning.dynamic_THR_PID = parseInt(data.getUint8(offset++));
RC_tuning.throttle_MID = parseFloat((data.getUint8(offset++) / 100).toFixed(2)); RC_tuning.throttle_MID = parseFloat((data.getUint8(offset++) / 100).toFixed(2));
RC_tuning.throttle_EXPO = parseFloat((data.getUint8(offset++) / 100).toFixed(2)); RC_tuning.throttle_EXPO = parseFloat((data.getUint8(offset++) / 100).toFixed(2));
if (semver.gte(CONFIG.apiVersion, "1.7.0")) {
RC_tuning.dynamic_THR_breakpoint = data.getUint16(offset, 1); RC_tuning.dynamic_THR_breakpoint = data.getUint16(offset, 1);
offset += 2; offset += 2;
} else {
RC_tuning.dynamic_THR_breakpoint = 0;
}
if (semver.gte(CONFIG.apiVersion, "1.10.0")) {
RC_tuning.RC_YAW_EXPO = parseFloat((data.getUint8(offset++) / 100).toFixed(2)); RC_tuning.RC_YAW_EXPO = parseFloat((data.getUint8(offset++) / 100).toFixed(2));
} else {
RC_tuning.RC_YAW_EXPO = 0;
}
break; break;
case MSPCodes.MSP_PID: case MSPCodes.MSP_PID:
// PID data arrived, we need to scale it and save to appropriate bank / array // PID data arrived, we need to scale it and save to appropriate bank / array
for (var i = 0, needle = 0; i < (message_length / 3); i++, needle += 3) { for (i = 0, needle = 0; i < (dataHandler.message_length_expected / 3); i++, needle += 3) {
PIDs[i][0] = data.getUint8(needle); PIDs[i][0] = data.getUint8(needle);
PIDs[i][1] = data.getUint8(needle + 1); PIDs[i][1] = data.getUint8(needle + 1);
PIDs[i][2] = data.getUint8(needle + 2); PIDs[i][2] = data.getUint8(needle + 2);
} }
break; break;
// Disabled, cleanflight does not use MSP_BOX.
/*
case MSPCodes.MSP_BOX:
AUX_CONFIG_values = []; // empty the array as new data is coming in
// fill in current data
for (var i = 0; i < data.byteLength; i += 2) { // + 2 because uint16_t = 2 bytes
AUX_CONFIG_values.push(data.getUint16(i, 1));
}
break;
*/
case MSPCodes.MSP_ARMING_CONFIG: case MSPCodes.MSP_ARMING_CONFIG:
if (semver.gte(CONFIG.apiVersion, "1.8.0")) {
ARMING_CONFIG.auto_disarm_delay = data.getUint8(0, 1); ARMING_CONFIG.auto_disarm_delay = data.getUint8(0, 1);
ARMING_CONFIG.disarm_kill_switch = data.getUint8(1); ARMING_CONFIG.disarm_kill_switch = data.getUint8(1);
}
break; break;
case MSPCodes.MSP_LOOP_TIME: case MSPCodes.MSP_LOOP_TIME:
if (semver.gte(CONFIG.apiVersion, "1.8.0")) {
FC_CONFIG.loopTime = data.getInt16(0, 1); FC_CONFIG.loopTime = data.getInt16(0, 1);
}
break; break;
case MSPCodes.MSP_MISC: // 22 bytes case MSPCodes.MSP_MISC: // 22 bytes
var offset = 0;
MISC.midrc = data.getInt16(offset, 1); MISC.midrc = data.getInt16(offset, 1);
offset += 2; offset += 2;
MISC.minthrottle = data.getUint16(offset, 1); // 0-2000 MISC.minthrottle = data.getUint16(offset, 1); // 0-2000
@ -241,7 +213,6 @@ var mspHelper = (function () {
MISC.vbatwarningcellvoltage = data.getUint8(offset++, 1) / 10; // 10-50 MISC.vbatwarningcellvoltage = data.getUint8(offset++, 1) / 10; // 10-50
break; break;
case MSPCodes.MSP_3D: case MSPCodes.MSP_3D:
var offset = 0;
_3D.deadband3d_low = data.getUint16(offset, 1); _3D.deadband3d_low = data.getUint16(offset, 1);
offset += 2; offset += 2;
_3D.deadband3d_high = data.getUint16(offset, 1); _3D.deadband3d_high = data.getUint16(offset, 1);
@ -257,10 +228,11 @@ var mspHelper = (function () {
console.log(data); console.log(data);
break; break;
case MSPCodes.MSP_BOXNAMES: case MSPCodes.MSP_BOXNAMES:
//noinspection JSUndeclaredVariable
AUX_CONFIG = []; // empty the array as new data is coming in AUX_CONFIG = []; // empty the array as new data is coming in
var buff = []; var buff = [];
for (var i = 0; i < data.byteLength; i++) { for (i = 0; i < data.byteLength; i++) {
if (data.getUint8(i) == 0x3B) { // ; (delimeter char) if (data.getUint8(i) == 0x3B) { // ; (delimeter char)
AUX_CONFIG.push(String.fromCharCode.apply(null, buff)); // convert bytes into ASCII and save as strings AUX_CONFIG.push(String.fromCharCode.apply(null, buff)); // convert bytes into ASCII and save as strings
@ -272,11 +244,12 @@ var mspHelper = (function () {
} }
break; break;
case MSPCodes.MSP_PIDNAMES: case MSPCodes.MSP_PIDNAMES:
//noinspection JSUndeclaredVariable
PID_names = []; // empty the array as new data is coming in PID_names = []; // empty the array as new data is coming in
var buff = []; var buff = [];
for (var i = 0; i < data.byteLength; i++) { for (i = 0; i < data.byteLength; i++) {
if (data.getUint8(i) == 0x3B) { // ; (delimeter char) if (data.getUint8(i) == 0x3B) { // ; (delimiter char)
PID_names.push(String.fromCharCode.apply(null, buff)); // convert bytes into ASCII and save as strings PID_names.push(String.fromCharCode.apply(null, buff)); // convert bytes into ASCII and save as strings
// empty buffer // empty buffer
@ -290,9 +263,10 @@ var mspHelper = (function () {
console.log(data); console.log(data);
break; break;
case MSPCodes.MSP_BOXIDS: case MSPCodes.MSP_BOXIDS:
//noinspection JSUndeclaredVariable
AUX_CONFIG_IDS = []; // empty the array as new data is coming in AUX_CONFIG_IDS = []; // empty the array as new data is coming in
for (var i = 0; i < data.byteLength; i++) { for (i = 0; i < data.byteLength; i++) {
AUX_CONFIG_IDS.push(data.getUint8(i)); AUX_CONFIG_IDS.push(data.getUint8(i));
} }
break; break;
@ -300,11 +274,11 @@ var mspHelper = (function () {
break; break;
case MSPCodes.MSP_SERVO_CONFIGURATIONS: case MSPCodes.MSP_SERVO_CONFIGURATIONS:
//noinspection JSUndeclaredVariable
SERVO_CONFIG = []; // empty the array as new data is coming in SERVO_CONFIG = []; // empty the array as new data is coming in
if (semver.gte(CONFIG.apiVersion, "1.12.0")) {
if (data.byteLength % 14 == 0) { if (data.byteLength % 14 == 0) {
for (var i = 0; i < data.byteLength; i += 14) { for (i = 0; i < data.byteLength; i += 14) {
var arr = { var arr = {
'min': data.getInt16(i + 0, 1), 'min': data.getInt16(i + 0, 1),
'max': data.getInt16(i + 2, 1), 'max': data.getInt16(i + 2, 1),
@ -319,40 +293,13 @@ var mspHelper = (function () {
SERVO_CONFIG.push(arr); SERVO_CONFIG.push(arr);
} }
} }
} else {
if (data.byteLength % 7 == 0) {
for (var i = 0; i < data.byteLength; i += 7) {
var arr = {
'min': data.getInt16(i + 0, 1),
'max': data.getInt16(i + 2, 1),
'middle': data.getInt16(i + 4, 1),
'rate': data.getInt8(i + 6),
'angleAtMin': 45,
'angleAtMax': 45,
'indexOfChannelToForward': undefined,
'reversedInputSources': 0
};
SERVO_CONFIG.push(arr);
}
}
if (semver.eq(CONFIG.apiVersion, '1.10.0')) {
// drop two unused servo configurations due to MSP rx buffer to small)
while (SERVO_CONFIG.length > 8) {
SERVO_CONFIG.pop();
}
}
}
break; break;
case MSPCodes.MSP_RC_DEADBAND: case MSPCodes.MSP_RC_DEADBAND:
var offset = 0;
RC_deadband.deadband = data.getUint8(offset++, 1); RC_deadband.deadband = data.getUint8(offset++, 1);
RC_deadband.yaw_deadband = data.getUint8(offset++, 1); RC_deadband.yaw_deadband = data.getUint8(offset++, 1);
RC_deadband.alt_hold_deadband = data.getUint8(offset++, 1); RC_deadband.alt_hold_deadband = data.getUint8(offset++, 1);
break; break;
case MSPCodes.MSP_SENSOR_ALIGNMENT: case MSPCodes.MSP_SENSOR_ALIGNMENT:
var offset = 0;
SENSOR_ALIGNMENT.align_gyro = data.getUint8(offset++, 1); SENSOR_ALIGNMENT.align_gyro = data.getUint8(offset++, 1);
SENSOR_ALIGNMENT.align_acc = data.getUint8(offset++, 1); SENSOR_ALIGNMENT.align_acc = data.getUint8(offset++, 1);
SENSOR_ALIGNMENT.align_mag = data.getUint8(offset++, 1); SENSOR_ALIGNMENT.align_mag = data.getUint8(offset++, 1);
@ -364,16 +311,11 @@ var mspHelper = (function () {
case MSPCodes.MSP_SET_PID: case MSPCodes.MSP_SET_PID:
console.log('PID settings saved'); console.log('PID settings saved');
break; break;
/*
case MSPCodes.MSP_SET_BOX:
console.log('AUX Configuration saved');
break;
*/
case MSPCodes.MSP_SET_RC_TUNING: case MSPCodes.MSP_SET_RC_TUNING:
console.log('RC Tuning saved'); console.log('RC Tuning saved');
break; break;
case MSPCodes.MSP_ACC_CALIBRATION: case MSPCodes.MSP_ACC_CALIBRATION:
console.log('Accel calibration executed'); console.log('Accelerometer calibration executed');
break; break;
case MSPCodes.MSP_MAG_CALIBRATION: case MSPCodes.MSP_MAG_CALIBRATION:
console.log('Mag calibration executed'); console.log('Mag calibration executed');
@ -396,7 +338,7 @@ var mspHelper = (function () {
case MSPCodes.MSP_DEBUGMSG: case MSPCodes.MSP_DEBUGMSG:
break; break;
case MSPCodes.MSP_DEBUG: case MSPCodes.MSP_DEBUG:
for (var i = 0; i < 4; i++) for (i = 0; i < 4; i++)
SENSOR_DATA.debug[i] = data.getInt16((2 * i), 1); SENSOR_DATA.debug[i] = data.getInt16((2 * i), 1);
break; break;
case MSPCodes.MSP_SET_MOTOR: case MSPCodes.MSP_SET_MOTOR:
@ -417,9 +359,10 @@ var mspHelper = (function () {
break; break;
// Additional private MSP for baseflight configurator // Additional private MSP for baseflight configurator
case MSPCodes.MSP_RX_MAP: case MSPCodes.MSP_RX_MAP:
//noinspection JSUndeclaredVariable
RC_MAP = []; // empty the array as new data is coming in RC_MAP = []; // empty the array as new data is coming in
for (var i = 0; i < data.byteLength; i++) { for (i = 0; i < data.byteLength; i++) {
RC_MAP.push(data.getUint8(i)); RC_MAP.push(data.getUint8(i));
} }
break; break;
@ -447,14 +390,12 @@ var mspHelper = (function () {
// //
case MSPCodes.MSP_API_VERSION: case MSPCodes.MSP_API_VERSION:
var offset = 0;
CONFIG.mspProtocolVersion = data.getUint8(offset++); CONFIG.mspProtocolVersion = data.getUint8(offset++);
CONFIG.apiVersion = data.getUint8(offset++) + '.' + data.getUint8(offset++) + '.0'; CONFIG.apiVersion = data.getUint8(offset++) + '.' + data.getUint8(offset++) + '.0';
break; break;
case MSPCodes.MSP_FC_VARIANT: case MSPCodes.MSP_FC_VARIANT:
var identifier = ''; var identifier = '';
var offset;
for (offset = 0; offset < 4; offset++) { for (offset = 0; offset < 4; offset++) {
identifier += String.fromCharCode(data.getUint8(offset)); identifier += String.fromCharCode(data.getUint8(offset));
} }
@ -462,22 +403,19 @@ var mspHelper = (function () {
break; break;
case MSPCodes.MSP_FC_VERSION: case MSPCodes.MSP_FC_VERSION:
var offset = 0;
CONFIG.flightControllerVersion = data.getUint8(offset++) + '.' + data.getUint8(offset++) + '.' + data.getUint8(offset++); CONFIG.flightControllerVersion = data.getUint8(offset++) + '.' + data.getUint8(offset++) + '.' + data.getUint8(offset++);
break; break;
case MSPCodes.MSP_BUILD_INFO: case MSPCodes.MSP_BUILD_INFO:
var offset = 0;
var dateLength = 11; var dateLength = 11;
var buff = []; var buff = [];
for (var i = 0; i < dateLength; i++) { for (i = 0; i < dateLength; i++) {
buff.push(data.getUint8(offset++)); buff.push(data.getUint8(offset++));
} }
buff.push(32); // ascii space buff.push(32); // ascii space
var timeLength = 8; var timeLength = 8;
for (var i = 0; i < timeLength; i++) { for (i = 0; i < timeLength; i++) {
buff.push(data.getUint8(offset++)); buff.push(data.getUint8(offset++));
} }
CONFIG.buildInfo = String.fromCharCode.apply(null, buff); CONFIG.buildInfo = String.fromCharCode.apply(null, buff);
@ -485,13 +423,12 @@ var mspHelper = (function () {
case MSPCodes.MSP_BOARD_INFO: case MSPCodes.MSP_BOARD_INFO:
var identifier = ''; var identifier = '';
var offset;
for (offset = 0; offset < 4; offset++) { for (offset = 0; offset < 4; offset++) {
identifier += String.fromCharCode(data.getUint8(offset)); identifier += String.fromCharCode(data.getUint8(offset));
} }
CONFIG.boardIdentifier = identifier; CONFIG.boardIdentifier = identifier;
CONFIG.boardVersion = data.getUint16(offset, 1); CONFIG.boardVersion = data.getUint16(offset, 1);
offset+=2; offset += 2;
break; break;
case MSPCodes.MSP_SET_CHANNEL_FORWARDING: case MSPCodes.MSP_SET_CHANNEL_FORWARDING:
@ -499,33 +436,11 @@ var mspHelper = (function () {
break; break;
case MSPCodes.MSP_CF_SERIAL_CONFIG: case MSPCodes.MSP_CF_SERIAL_CONFIG:
if (semver.lt(CONFIG.apiVersion, "1.6.0")) {
SERIAL_CONFIG.ports = []; SERIAL_CONFIG.ports = [];
var offset = 0; var bytesPerPort = 1 + 2 + 4;
var serialPortCount = (data.byteLength - (4 * 4)) / 2;
for (var i = 0; i < serialPortCount; i++) {
var serialPort = {
identifier: data.getUint8(offset++, 1),
scenario: data.getUint8(offset++, 1)
}
SERIAL_CONFIG.ports.push(serialPort);
}
SERIAL_CONFIG.mspBaudRate = data.getUint32(offset, 1);
offset+= 4;
SERIAL_CONFIG.cliBaudRate = data.getUint32(offset, 1);
offset+= 4;
SERIAL_CONFIG.gpsBaudRate = data.getUint32(offset, 1);
offset+= 4;
SERIAL_CONFIG.gpsPassthroughBaudRate = data.getUint32(offset, 1);
offset+= 4;
} else {
SERIAL_CONFIG.ports = [];
var offset = 0;
var bytesPerPort = 1 + 2 + (1 * 4);
var serialPortCount = data.byteLength / bytesPerPort; var serialPortCount = data.byteLength / bytesPerPort;
for (var i = 0; i < serialPortCount; i++) { for (i = 0; i < serialPortCount; i++) {
var serialPort = { var serialPort = {
identifier: data.getUint8(offset, 1), identifier: data.getUint8(offset, 1),
functions: mspHelper.serialPortFunctionMaskToFunctions(data.getUint16(offset + 1, 1)), functions: mspHelper.serialPortFunctionMaskToFunctions(data.getUint16(offset + 1, 1)),
@ -533,12 +448,11 @@ var mspHelper = (function () {
gps_baudrate: mspHelper.BAUD_RATES[data.getUint8(offset + 4, 1)], gps_baudrate: mspHelper.BAUD_RATES[data.getUint8(offset + 4, 1)],
telemetry_baudrate: mspHelper.BAUD_RATES[data.getUint8(offset + 5, 1)], telemetry_baudrate: mspHelper.BAUD_RATES[data.getUint8(offset + 5, 1)],
blackbox_baudrate: mspHelper.BAUD_RATES[data.getUint8(offset + 6, 1)] blackbox_baudrate: mspHelper.BAUD_RATES[data.getUint8(offset + 6, 1)]
} };
offset += bytesPerPort; offset += bytesPerPort;
SERIAL_CONFIG.ports.push(serialPort); SERIAL_CONFIG.ports.push(serialPort);
} }
}
break; break;
case MSPCodes.MSP_SET_CF_SERIAL_CONFIG: case MSPCodes.MSP_SET_CF_SERIAL_CONFIG:
@ -546,12 +460,12 @@ var mspHelper = (function () {
break; break;
case MSPCodes.MSP_MODE_RANGES: case MSPCodes.MSP_MODE_RANGES:
//noinspection JSUndeclaredVariable
MODE_RANGES = []; // empty the array as new data is coming in MODE_RANGES = []; // empty the array as new data is coming in
var modeRangeCount = data.byteLength / 4; // 4 bytes per item. var modeRangeCount = data.byteLength / 4; // 4 bytes per item.
var offset = 0; for (i = 0; offset < data.byteLength && i < modeRangeCount; i++) {
for (var i = 0; offset < data.byteLength && i < modeRangeCount; i++) {
var modeRange = { var modeRange = {
id: data.getUint8(offset++, 1), id: data.getUint8(offset++, 1),
auxChannelIndex: data.getUint8(offset++, 1), auxChannelIndex: data.getUint8(offset++, 1),
@ -565,12 +479,12 @@ var mspHelper = (function () {
break; break;
case MSPCodes.MSP_ADJUSTMENT_RANGES: case MSPCodes.MSP_ADJUSTMENT_RANGES:
//noinspection JSUndeclaredVariable
ADJUSTMENT_RANGES = []; // empty the array as new data is coming in ADJUSTMENT_RANGES = []; // empty the array as new data is coming in
var adjustmentRangeCount = data.byteLength / 6; // 6 bytes per item. var adjustmentRangeCount = data.byteLength / 6; // 6 bytes per item.
var offset = 0; for (i = 0; offset < data.byteLength && i < adjustmentRangeCount; i++) {
for (var i = 0; offset < data.byteLength && i < adjustmentRangeCount; i++) {
var adjustmentRange = { var adjustmentRange = {
slotIndex: data.getUint8(offset++, 1), slotIndex: data.getUint8(offset++, 1),
auxChannelIndex: data.getUint8(offset++, 1), auxChannelIndex: data.getUint8(offset++, 1),
@ -586,7 +500,7 @@ var mspHelper = (function () {
break; break;
case MSPCodes.MSP_CHANNEL_FORWARDING: case MSPCodes.MSP_CHANNEL_FORWARDING:
for (var i = 0; i < data.byteLength && i < SERVO_CONFIG.length; i ++) { for (i = 0; i < data.byteLength && i < SERVO_CONFIG.length; i++) {
var channelIndex = data.getUint8(i); var channelIndex = data.getUint8(i);
if (channelIndex < 255) { if (channelIndex < 255) {
SERVO_CONFIG[i].indexOfChannelToForward = channelIndex; SERVO_CONFIG[i].indexOfChannelToForward = channelIndex;
@ -597,7 +511,6 @@ var mspHelper = (function () {
break; break;
case MSPCodes.MSP_RX_CONFIG: case MSPCodes.MSP_RX_CONFIG:
var offset = 0;
RX_CONFIG.serialrx_provider = data.getUint8(offset, 1); RX_CONFIG.serialrx_provider = data.getUint8(offset, 1);
offset++; offset++;
RX_CONFIG.maxcheck = data.getUint16(offset, 1); RX_CONFIG.maxcheck = data.getUint16(offset, 1);
@ -622,7 +535,6 @@ var mspHelper = (function () {
break; break;
case MSPCodes.MSP_FAILSAFE_CONFIG: case MSPCodes.MSP_FAILSAFE_CONFIG:
var offset = 0;
FAILSAFE_CONFIG.failsafe_delay = data.getUint8(offset, 1); FAILSAFE_CONFIG.failsafe_delay = data.getUint8(offset, 1);
offset++; offset++;
FAILSAFE_CONFIG.failsafe_off_delay = data.getUint8(offset, 1); FAILSAFE_CONFIG.failsafe_off_delay = data.getUint8(offset, 1);
@ -640,12 +552,12 @@ var mspHelper = (function () {
break; break;
case MSPCodes.MSP_RXFAIL_CONFIG: case MSPCodes.MSP_RXFAIL_CONFIG:
//noinspection JSUndeclaredVariable
RXFAIL_CONFIG = []; // empty the array as new data is coming in RXFAIL_CONFIG = []; // empty the array as new data is coming in
var channelCount = data.byteLength / 3; var channelCount = data.byteLength / 3;
var offset = 0; for (i = 0; offset < data.byteLength && i < channelCount; i++, offset++) {
for (var i = 0; offset < data.byteLength && i < channelCount; i++, offset++) {
var rxfailChannel = { var rxfailChannel = {
mode: data.getUint8(offset++, 1), mode: data.getUint8(offset++, 1),
value: data.getUint16(offset++, 1) value: data.getUint16(offset++, 1)
@ -656,14 +568,14 @@ var mspHelper = (function () {
case MSPCodes.MSP_LED_STRIP_CONFIG: case MSPCodes.MSP_LED_STRIP_CONFIG:
//noinspection JSUndeclaredVariable
LED_STRIP = []; LED_STRIP = [];
var ledCount = data.byteLength / 7; // v1.4.0 and below incorrectly reported 4 bytes per led. var ledCount = data.byteLength / 7; // v1.4.0 and below incorrectly reported 4 bytes per led.
if (semver.gte(CONFIG.apiVersion, "1.20.0")) if (semver.gte(CONFIG.apiVersion, "1.20.0"))
ledCount = data.byteLength / 4; ledCount = data.byteLength / 4;
var offset = 0; for (i = 0; offset < data.byteLength && i < ledCount; i++) {
for (var i = 0; offset < data.byteLength && i < ledCount; i++) {
if (semver.lt(CONFIG.apiVersion, "1.20.0")) { if (semver.lt(CONFIG.apiVersion, "1.20.0")) {
var directionMask = data.getUint16(offset, 1); var directionMask = data.getUint16(offset, 1);
@ -697,7 +609,7 @@ var mspHelper = (function () {
LED_STRIP.push(led); LED_STRIP.push(led);
} else { } else {
var mask = data.getUint32(offset, 1); var mask = data.getUint32(offset, 1);
offset +=4; offset += 4;
var functionId = (mask >> 8) & 0xF; var functionId = (mask >> 8) & 0xF;
var functions = []; var functions = [];
@ -740,12 +652,12 @@ var mspHelper = (function () {
break; break;
case MSPCodes.MSP_LED_COLORS: case MSPCodes.MSP_LED_COLORS:
//noinspection JSUndeclaredVariable
LED_COLORS = []; LED_COLORS = [];
var colorCount = data.byteLength / 4; var colorCount = data.byteLength / 4;
var offset = 0; for (i = 0; offset < data.byteLength && i < colorCount; i++) {
for (var i = 0; offset < data.byteLength && i < colorCount; i++) {
var h = data.getUint16(offset, 1); var h = data.getUint16(offset, 1);
var s = data.getUint8(offset + 2, 1); var s = data.getUint8(offset + 2, 1);
@ -768,12 +680,12 @@ var mspHelper = (function () {
case MSPCodes.MSP_LED_STRIP_MODECOLOR: case MSPCodes.MSP_LED_STRIP_MODECOLOR:
if (semver.gte(CONFIG.apiVersion, "1.19.0")) { if (semver.gte(CONFIG.apiVersion, "1.19.0")) {
//noinspection JSUndeclaredVariable
LED_MODE_COLORS = []; LED_MODE_COLORS = [];
var colorCount = data.byteLength / 3; var colorCount = data.byteLength / 3;
var offset = 0; for (i = 0; offset < data.byteLength && i < colorCount; i++) {
for (var i = 0; offset < data.byteLength && i < colorCount; i++) {
var mode = data.getUint8(offset++, 1); var mode = data.getUint8(offset++, 1);
var direction = data.getUint8(offset++, 1); var direction = data.getUint8(offset++, 1);
@ -793,12 +705,9 @@ var mspHelper = (function () {
console.log('Led strip mode colors saved'); console.log('Led strip mode colors saved');
break; break;
case MSPCodes.MSP_DATAFLASH_SUMMARY: case MSPCodes.MSP_DATAFLASH_SUMMARY:
if (data.byteLength >= 13) { if (data.byteLength >= 13) {
var var flags = data.getUint8(0);
flags = data.getUint8(0);
DATAFLASH.ready = (flags & 1) != 0; DATAFLASH.ready = (flags & 1) != 0;
DATAFLASH.supported = (flags & 2) != 0 || DATAFLASH.ready; DATAFLASH.supported = (flags & 2) != 0 || DATAFLASH.ready;
DATAFLASH.sectors = data.getUint32(1, 1); DATAFLASH.sectors = data.getUint32(1, 1);
@ -839,11 +748,10 @@ var mspHelper = (function () {
console.log("Blackbox config saved"); console.log("Blackbox config saved");
break; break;
case MSPCodes.MSP_TRANSPONDER_CONFIG: case MSPCodes.MSP_TRANSPONDER_CONFIG:
var offset = 0;
TRANSPONDER.supported = (data.getUint8(offset++) & 1) != 0; TRANSPONDER.supported = (data.getUint8(offset++) & 1) != 0;
TRANSPONDER.data = []; TRANSPONDER.data = [];
var bytesRemaining = data.byteLength - offset; var bytesRemaining = data.byteLength - offset;
for (var i = 0; i < bytesRemaining; i++) { for (i = 0; i < bytesRemaining; i++) {
TRANSPONDER.data.push(data.getUint8(offset++)); TRANSPONDER.data.push(data.getUint8(offset++));
} }
break; break;
@ -852,7 +760,6 @@ var mspHelper = (function () {
break; break;
case MSPCodes.MSP_ADVANCED_CONFIG: case MSPCodes.MSP_ADVANCED_CONFIG:
var offset = 0;
ADVANCED_CONFIG.gyroSyncDenominator = data.getUint8(offset, 1); ADVANCED_CONFIG.gyroSyncDenominator = data.getUint8(offset, 1);
offset++; offset++;
ADVANCED_CONFIG.pidProcessDenom = data.getUint8(offset, 1); ADVANCED_CONFIG.pidProcessDenom = data.getUint8(offset, 1);
@ -953,33 +860,34 @@ var mspHelper = (function () {
case MSPCodes.MSP_OSD_CONFIG: case MSPCodes.MSP_OSD_CONFIG:
break; break;
default: default:
console.log('Unknown code detected: ' + code); console.log('Unknown code detected: ' + dataHandler.code);
} else { } else {
console.log('FC reports unsupported message error: ' + code); console.log('FC reports unsupported message error: ' + dataHandler.code);
} }
// trigger callbacks, cleanup/remove callback after trigger // trigger callbacks, cleanup/remove callback after trigger
for (var i = this.callbacks.length - 1; i >= 0; i--) { // itterating in reverse because we use .splice which modifies array length for (i = dataHandler.callbacks.length - 1; i >= 0; i--) { // iterating in reverse because we use .splice which modifies array length
if (i < this.callbacks.length) { if (i < dataHandler.callbacks.length) {
if (this.callbacks[i].code == code) { if (dataHandler.callbacks[i].code == dataHandler.code) {
// save callback reference // save callback reference
var callback = this.callbacks[i].callback; var callback = dataHandler.callbacks[i].callback;
// remove timeout // remove timeout
clearInterval(this.callbacks[i].timer); clearInterval(dataHandler.callbacks[i].timer);
// remove object from array // remove object from array
this.callbacks.splice(i, 1); dataHandler.callbacks.splice(i, 1);
// fire callback // fire callback
if (callback) callback({'command': code, 'data': data, 'length': message_length}); if (callback) callback({'command': dataHandler.code, 'data': data, 'length': dataHandler.message_length_expected});
}
} }
} }
} }
};
self.crunch: function (code) { self.crunch = function (code) {
var buffer = []; var buffer = [],
i;
switch (code) { switch (code) {
case MSPCodes.MSP_SET_BF_CONFIG: case MSPCodes.MSP_SET_BF_CONFIG:
@ -1001,7 +909,7 @@ var mspHelper = (function () {
buffer.push(highByte(BF_CONFIG.currentoffset)); buffer.push(highByte(BF_CONFIG.currentoffset));
break; break;
case MSPCodes.MSP_SET_PID: case MSPCodes.MSP_SET_PID:
for (var i = 0; i < PIDs.length; i++) { for (i = 0; i < PIDs.length; i++) {
buffer.push(parseInt(PIDs[i][0])); buffer.push(parseInt(PIDs[i][0]));
buffer.push(parseInt(PIDs[i][1])); buffer.push(parseInt(PIDs[i][1]));
buffer.push(parseInt(PIDs[i][2])); buffer.push(parseInt(PIDs[i][2]));
@ -1034,17 +942,9 @@ var mspHelper = (function () {
buffer.push(Math.round(RC_tuning.RC_YAW_EXPO * 100)); buffer.push(Math.round(RC_tuning.RC_YAW_EXPO * 100));
} }
break; break;
// Disabled, cleanflight does not use MSP_SET_BOX.
/*
case MSPCodes.MSP_SET_BOX:
for (var i = 0; i < AUX_CONFIG_values.length; i++) {
buffer.push(lowByte(AUX_CONFIG_values[i]));
buffer.push(highByte(AUX_CONFIG_values[i]));
}
break;
*/
case MSPCodes.MSP_SET_RX_MAP: case MSPCodes.MSP_SET_RX_MAP:
for (var i = 0; i < RC_MAP.length; i++) { for (i = 0; i < RC_MAP.length; i++) {
buffer.push(RC_MAP[i]); buffer.push(RC_MAP[i]);
} }
break; break;
@ -1127,13 +1027,13 @@ var mspHelper = (function () {
break; break;
case MSPCodes.MSP_SET_TRANSPONDER_CONFIG: case MSPCodes.MSP_SET_TRANSPONDER_CONFIG:
for (var i = 0; i < TRANSPONDER.data.length; i++) { for (i = 0; i < TRANSPONDER.data.length; i++) {
buffer.push(TRANSPONDER.data[i]); buffer.push(TRANSPONDER.data[i]);
} }
break; break;
case MSPCodes.MSP_SET_CHANNEL_FORWARDING: case MSPCodes.MSP_SET_CHANNEL_FORWARDING:
for (var i = 0; i < SERVO_CONFIG.length; i++) { for (i = 0; i < SERVO_CONFIG.length; i++) {
var out = SERVO_CONFIG[i].indexOfChannelToForward; var out = SERVO_CONFIG[i].indexOfChannelToForward;
if (out == undefined) { if (out == undefined) {
out = 255; // Cleanflight defines "CHANNEL_FORWARDING_DISABLED" as "(uint8_t)0xFF" out = 255; // Cleanflight defines "CHANNEL_FORWARDING_DISABLED" as "(uint8_t)0xFF"
@ -1142,32 +1042,7 @@ var mspHelper = (function () {
} }
break; break;
case MSPCodes.MSP_SET_CF_SERIAL_CONFIG: case MSPCodes.MSP_SET_CF_SERIAL_CONFIG:
if (semver.lt(CONFIG.apiVersion, "1.6.0")) { for (i = 0; i < SERIAL_CONFIG.ports.length; i++) {
for (var i = 0; i < SERIAL_CONFIG.ports.length; i++) {
buffer.push(SERIAL_CONFIG.ports[i].scenario);
}
buffer.push(specificByte(SERIAL_CONFIG.mspBaudRate, 0));
buffer.push(specificByte(SERIAL_CONFIG.mspBaudRate, 1));
buffer.push(specificByte(SERIAL_CONFIG.mspBaudRate, 2));
buffer.push(specificByte(SERIAL_CONFIG.mspBaudRate, 3));
buffer.push(specificByte(SERIAL_CONFIG.cliBaudRate, 0));
buffer.push(specificByte(SERIAL_CONFIG.cliBaudRate, 1));
buffer.push(specificByte(SERIAL_CONFIG.cliBaudRate, 2));
buffer.push(specificByte(SERIAL_CONFIG.cliBaudRate, 3));
buffer.push(specificByte(SERIAL_CONFIG.gpsBaudRate, 0));
buffer.push(specificByte(SERIAL_CONFIG.gpsBaudRate, 1));
buffer.push(specificByte(SERIAL_CONFIG.gpsBaudRate, 2));
buffer.push(specificByte(SERIAL_CONFIG.gpsBaudRate, 3));
buffer.push(specificByte(SERIAL_CONFIG.gpsPassthroughBaudRate, 0));
buffer.push(specificByte(SERIAL_CONFIG.gpsPassthroughBaudRate, 1));
buffer.push(specificByte(SERIAL_CONFIG.gpsPassthroughBaudRate, 2));
buffer.push(specificByte(SERIAL_CONFIG.gpsPassthroughBaudRate, 3));
} else {
for (var i = 0; i < SERIAL_CONFIG.ports.length; i++) {
var serialPort = SERIAL_CONFIG.ports[i]; var serialPort = SERIAL_CONFIG.ports[i];
buffer.push(serialPort.identifier); buffer.push(serialPort.identifier);
@ -1181,7 +1056,6 @@ var mspHelper = (function () {
buffer.push(mspHelper.BAUD_RATES.indexOf(serialPort.telemetry_baudrate)); buffer.push(mspHelper.BAUD_RATES.indexOf(serialPort.telemetry_baudrate));
buffer.push(mspHelper.BAUD_RATES.indexOf(serialPort.blackbox_baudrate)); buffer.push(mspHelper.BAUD_RATES.indexOf(serialPort.blackbox_baudrate));
} }
}
break; break;
case MSPCodes.MSP_SET_3D: case MSPCodes.MSP_SET_3D:
@ -1313,7 +1187,7 @@ var mspHelper = (function () {
* *
* Channels is an array of 16-bit unsigned integer channel values to be sent. 8 channels is probably the maximum. * Channels is an array of 16-bit unsigned integer channel values to be sent. 8 channels is probably the maximum.
*/ */
self.setRawRx: function(channels) { self.setRawRx = function (channels) {
var buffer = []; var buffer = [];
for (var i = 0; i < channels.length; i++) { for (var i = 0; i < channels.length; i++) {
@ -1322,21 +1196,21 @@ var mspHelper = (function () {
} }
MSP.send_message(MSPCodes.MSP_SET_RAW_RC, buffer, false); MSP.send_message(MSPCodes.MSP_SET_RAW_RC, buffer, false);
} };
self.sendBlackboxConfiguration: function(onDataCallback) { self.sendBlackboxConfiguration = function (onDataCallback) {
var message = [ var message = [
BLACKBOX.blackboxDevice & 0xFF, BLACKBOX.blackboxDevice & 0xFF,
BLACKBOX.blackboxRateNum & 0xFF, BLACKBOX.blackboxRateNum & 0xFF,
BLACKBOX.blackboxRateDenom & 0xFF BLACKBOX.blackboxRateDenom & 0xFF
]; ];
MSP.send_message(MSPCodes.MSP_SET_BLACKBOX_CONFIG, message, false, function(response) { MSP.send_message(MSPCodes.MSP_SET_BLACKBOX_CONFIG, message, false, function (response) {
onDataCallback(); onDataCallback();
}); });
} };
self.sendServoConfigurations: function(onCompleteCallback) { self.sendServoConfigurations = function (onCompleteCallback) {
var nextFunction = send_next_servo_configuration; var nextFunction = send_next_servo_configuration;
var servoIndex = 0; var servoIndex = 0;
@ -1352,24 +1226,6 @@ var mspHelper = (function () {
var buffer = []; var buffer = [];
if (semver.lt(CONFIG.apiVersion, "1.12.0")) {
// send all in one go
// 1.9.0 had a bug where the MSP input buffer was too small, limit to 8.
for (var i = 0; i < SERVO_CONFIG.length && i < 8; i++) {
buffer.push(lowByte(SERVO_CONFIG[i].min));
buffer.push(highByte(SERVO_CONFIG[i].min));
buffer.push(lowByte(SERVO_CONFIG[i].max));
buffer.push(highByte(SERVO_CONFIG[i].max));
buffer.push(lowByte(SERVO_CONFIG[i].middle));
buffer.push(highByte(SERVO_CONFIG[i].middle));
buffer.push(lowByte(SERVO_CONFIG[i].rate));
}
nextFunction = send_channel_forwarding;
} else {
// send one at a time, with index // send one at a time, with index
var servoConfiguration = SERVO_CONFIG[servoIndex]; var servoConfiguration = SERVO_CONFIG[servoIndex];
@ -1406,7 +1262,6 @@ var mspHelper = (function () {
if (servoIndex == SERVO_CONFIG.length) { if (servoIndex == SERVO_CONFIG.length) {
nextFunction = onCompleteCallback; nextFunction = onCompleteCallback;
} }
}
MSP.send_message(MSPCodes.MSP_SET_SERVO_CONFIGURATION, buffer, false, nextFunction); MSP.send_message(MSPCodes.MSP_SET_SERVO_CONFIGURATION, buffer, false, nextFunction);
} }
@ -1425,9 +1280,9 @@ var mspHelper = (function () {
MSP.send_message(MSPCodes.MSP_SET_CHANNEL_FORWARDING, buffer, false, nextFunction); MSP.send_message(MSPCodes.MSP_SET_CHANNEL_FORWARDING, buffer, false, nextFunction);
} }
} };
self.sendModeRanges: function(onCompleteCallback) { self.sendModeRanges = function (onCompleteCallback) {
var nextFunction = send_next_mode_range; var nextFunction = send_next_mode_range;
var modeRangeIndex = 0; var modeRangeIndex = 0;
@ -1457,15 +1312,15 @@ var mspHelper = (function () {
} }
MSP.send_message(MSPCodes.MSP_SET_MODE_RANGE, buffer, false, nextFunction); MSP.send_message(MSPCodes.MSP_SET_MODE_RANGE, buffer, false, nextFunction);
} }
} };
/** /**
* Send a request to read a block of data from the dataflash at the given address and pass that address and a dataview * Send a request to read a block of data from the dataflash at the given address and pass that address and a dataview
* of the returned data to the given callback (or null for the data if an error occured). * of the returned data to the given callback (or null for the data if an error occured).
*/ */
self.dataflashRead: function(address, onDataCallback) { self.dataflashRead = function (address, onDataCallback) {
MSP.send_message(MSPCodes.MSP_DATAFLASH_READ, [address & 0xFF, (address >> 8) & 0xFF, (address >> 16) & 0xFF, (address >> 24) & 0xFF], MSP.send_message(MSPCodes.MSP_DATAFLASH_READ, [address & 0xFF, (address >> 8) & 0xFF, (address >> 16) & 0xFF, (address >> 24) & 0xFF],
false, function(response) { false, function (response) {
var chunkAddress = response.data.getUint32(0, 1); var chunkAddress = response.data.getUint32(0, 1);
// Verify that the address of the memory returned matches what the caller asked for // Verify that the address of the memory returned matches what the caller asked for
@ -1479,9 +1334,9 @@ var mspHelper = (function () {
onDataCallback(address, null); onDataCallback(address, null);
} }
}); });
} };
self.sendRxFailConfig: function(onCompleteCallback) { self.sendRxFailConfig = function (onCompleteCallback) {
var nextFunction = send_next_rxfail_config; var nextFunction = send_next_rxfail_config;
var rxFailIndex = 0; var rxFailIndex = 0;
@ -1510,11 +1365,13 @@ var mspHelper = (function () {
} }
MSP.send_message(MSPCodes.MSP_SET_RXFAIL_CONFIG, buffer, false, nextFunction); MSP.send_message(MSPCodes.MSP_SET_RXFAIL_CONFIG, buffer, false, nextFunction);
} }
} };
self.SERIAL_PORT_FUNCTIONSToMask: function(functions) { /**
* @return {number}
*/
self.SERIAL_PORT_FUNCTIONSToMask = function (functions) {
var mask = 0; var mask = 0;
var keys = Object.keys(mspHelper.SERIAL_PORT_FUNCTIONS);
for (var index = 0; index < functions.length; index++) { for (var index = 0; index < functions.length; index++) {
var key = functions[index]; var key = functions[index];
var bitIndex = mspHelper.SERIAL_PORT_FUNCTIONS[key]; var bitIndex = mspHelper.SERIAL_PORT_FUNCTIONS[key];
@ -1523,9 +1380,9 @@ var mspHelper = (function () {
} }
} }
return mask; return mask;
} };
self.serialPortFunctionMaskToFunctions: function(functionMask) { self.serialPortFunctionMaskToFunctions = function (functionMask) {
var functions = []; var functions = [];
var keys = Object.keys(mspHelper.SERIAL_PORT_FUNCTIONS); var keys = Object.keys(mspHelper.SERIAL_PORT_FUNCTIONS);
@ -1537,14 +1394,14 @@ var mspHelper = (function () {
} }
} }
return functions; return functions;
} };
self.sendServoMixRules: function(onCompleteCallback) { self.sendServoMixRules = function (onCompleteCallback) {
// TODO implement // TODO implement
onCompleteCallback(); onCompleteCallback();
} };
self.sendAdjustmentRanges: function(onCompleteCallback) { self.sendAdjustmentRanges = function (onCompleteCallback) {
var nextFunction = send_next_adjustment_range; var nextFunction = send_next_adjustment_range;
var adjustmentRangeIndex = 0; var adjustmentRangeIndex = 0;
@ -1577,9 +1434,9 @@ var mspHelper = (function () {
} }
MSP.send_message(MSPCodes.MSP_SET_ADJUSTMENT_RANGE, buffer, false, nextFunction); MSP.send_message(MSPCodes.MSP_SET_ADJUSTMENT_RANGE, buffer, false, nextFunction);
} }
} };
self.sendLedStripColors: function(onCompleteCallback) { self.sendLedStripColors = function (onCompleteCallback) {
if (LED_COLORS.length == 0) { if (LED_COLORS.length == 0) {
onCompleteCallback(); onCompleteCallback();
} else { } else {
@ -1595,9 +1452,9 @@ var mspHelper = (function () {
} }
MSP.send_message(MSPCodes.MSP_SET_LED_COLORS, buffer, false, onCompleteCallback); MSP.send_message(MSPCodes.MSP_SET_LED_COLORS, buffer, false, onCompleteCallback);
} }
} };
self.sendLedStripConfig: function(onCompleteCallback) { self.sendLedStripConfig = function (onCompleteCallback) {
var nextFunction = send_next_led_strip_config; var nextFunction = send_next_led_strip_config;
@ -1703,9 +1560,9 @@ var mspHelper = (function () {
MSP.send_message(MSPCodes.MSP_SET_LED_STRIP_CONFIG, buffer, false, nextFunction); MSP.send_message(MSPCodes.MSP_SET_LED_STRIP_CONFIG, buffer, false, nextFunction);
} }
} };
self.sendLedStripModeColors: function(onCompleteCallback) { self.sendLedStripModeColors = function (onCompleteCallback) {
var nextFunction = send_next_led_strip_mode_color; var nextFunction = send_next_led_strip_mode_color;
var index = 0; var index = 0;
@ -1733,7 +1590,7 @@ var mspHelper = (function () {
MSP.send_message(MSPCodes.MSP_SET_LED_STRIP_MODECOLOR, buffer, false, nextFunction); MSP.send_message(MSPCodes.MSP_SET_LED_STRIP_MODECOLOR, buffer, false, nextFunction);
} }
} };
return self; return self;
})(); })(GUI);

View file

@ -1,3 +1,4 @@
/*global chrome, chrome.i18n*/
'use strict'; 'use strict';
$(document).ready(function () { $(document).ready(function () {
@ -307,6 +308,7 @@ function read_serial(info) {
} }
} }
//FIXME move it into GUI
function sensor_status(sensors_detected) { function sensor_status(sensors_detected) {
// initialize variable (if it wasn't) // initialize variable (if it wasn't)
if (!sensor_status.previous_sensors_detected) { if (!sensor_status.previous_sensors_detected) {

View file

@ -48,12 +48,12 @@
<script type="text/javascript" src="./js/libraries/jquery.ba-throttle-debounce.min.js"></script> <script type="text/javascript" src="./js/libraries/jquery.ba-throttle-debounce.min.js"></script>
<script type="text/javascript" src="./js/libraries/inflection.min.js"></script> <script type="text/javascript" src="./js/libraries/inflection.min.js"></script>
<script type="text/javascript" src="./js/injected_methods.js"></script> <script type="text/javascript" src="./js/injected_methods.js"></script>
<script type="text/javascript" src="./js/gui.js"></script>
<script type="text/javascript" src="./js/msp/MSPCodes.js"></script> <script type="text/javascript" src="./js/msp/MSPCodes.js"></script>
<script type="text/javascript" src="./js/msp/MSPHelper.js"></script> <script type="text/javascript" src="./js/msp/MSPHelper.js"></script>
<script type="text/javascript" src="./js/port_handler.js"></script> <script type="text/javascript" src="./js/port_handler.js"></script>
<script type="text/javascript" src="./js/port_usage.js"></script> <script type="text/javascript" src="./js/port_usage.js"></script>
<script type="text/javascript" src="./js/serial.js"></script> <script type="text/javascript" src="./js/serial.js"></script>
<script type="text/javascript" src="./js/gui.js"></script>
<script type="text/javascript" src="./js/model.js"></script> <script type="text/javascript" src="./js/model.js"></script>
<script type="text/javascript" src="./js/request_balancer.js"></script> <script type="text/javascript" src="./js/request_balancer.js"></script>
<script type="text/javascript" src="./js/serial_backend.js"></script> <script type="text/javascript" src="./js/serial_backend.js"></script>
@ -148,7 +148,7 @@
<div id="profile_change"> <div id="profile_change">
<div class="dropdown dropdown-dark"> <div class="dropdown dropdown-dark">
<form name="profile-change" id="profile-change"> <form name="profile-change" id="profile-change">
<select class="dropdown-select" name="profilechange"> <select class="dropdown-select" id="profilechange">
<option value="0">Profile 1</option> <option value="0">Profile 1</option>
<option value="1">Profile 2</option> <option value="1">Profile 2</option>
<option value="2">Profile 3</option> <option value="2">Profile 3</option>

View file

@ -350,7 +350,7 @@ $(document).ready(function () {
}); });
var profile_e = $('select[name="profilechange"]'); var profile_e = $('#profilechange');
profile_e.change(function () { profile_e.change(function () {
var profile = parseInt($(this).val()); var profile = parseInt($(this).val());

View file

@ -189,7 +189,7 @@ FONT.upload = function ($progress) {
}; };
FONT.preview = function ($el) { FONT.preview = function ($el) {
$el.empty() $el.empty();
for (var i = 0; i < SYM.LOGO; i++) { for (var i = 0; i < SYM.LOGO; i++) {
var url = FONT.data.character_image_urls[i]; var url = FONT.data.character_image_urls[i];
$el.append('<img src="' + url + '" title="0x' + i.toString(16) + '"></img>'); $el.append('<img src="' + url + '" title="0x' + i.toString(16) + '"></img>');