1
0
Fork 0
mirror of https://github.com/betaflight/betaflight-configurator.git synced 2025-07-17 13:25:24 +03:00

CF/BF - Update configurator for API 1.33.0.

This commit is contained in:
Hydra 2017-03-19 23:03:28 +00:00 committed by Michael Keller
parent 57b9c58a22
commit 49100d29bd
24 changed files with 1168 additions and 1019 deletions

View file

@ -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;