diff --git a/_locales/en/messages.json b/_locales/en/messages.json
index 5e43f245..a6a0602f 100644
--- a/_locales/en/messages.json
+++ b/_locales/en/messages.json
@@ -1495,10 +1495,10 @@
"message": "Master"
},
"motorsNotice": {
- "message": "Motor Test Mode Notice:
Moving the sliders will cause the motors to spin up.
In order to prevent injury remove ALL propellers before using this feature.
"
+ "message": "Motor Test Mode / Arming Notice:
Moving the sliders or arming your craft with the transmitter will cause the motors to spin up.
In order to prevent injury remove ALL propellers before using this feature.
"
},
"motorsEnableControl": {
- "message": "I understand the risks, propellers are removed - Enable motor control."
+ "message": "I understand the risks, propellers are removed - Enable motor control and arming."
},
"sensorsInfo": {
diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js
index 54983b68..03686914 100644
--- a/js/msp/MSPHelper.js
+++ b/js/msp/MSPHelper.js
@@ -2022,6 +2022,28 @@ MspHelper.prototype.sendRxFailConfig = function(onCompleteCallback) {
}
}
+MspHelper.prototype.setArmingEnabled = function(doEnable, onCompleteCallback) {
+ if (semver.gte(CONFIG.apiVersion, "1.37.0") && (doEnable === CONFIG.arming_disabled)) {
+ CONFIG.arming_disabled = !doEnable;
+
+ MSP.send_message(MSPCodes.MSP_ARMING_DISABLE, mspHelper.crunch(MSPCodes.MSP_ARMING_DISABLE), false, function () {
+ if (doEnable) {
+ GUI.log(chrome.i18n.getMessage('armingEnabled'));
+ } else {
+ GUI.log(chrome.i18n.getMessage('armingDisabled'));
+ }
+
+ if (onCompleteCallback) {
+ onCompleteCallback();
+ }
+ });
+ } else {
+ if (onCompleteCallback) {
+ onCompleteCallback();
+ }
+ }
+}
+
MSP.SDCARD_STATE_NOT_PRESENT = 0; //TODO, move these to better place
MSP.SDCARD_STATE_FATAL = 1;
MSP.SDCARD_STATE_CARD_INIT = 2;
diff --git a/js/serial_backend.js b/js/serial_backend.js
index c0cefdb3..c5c29533 100755
--- a/js/serial_backend.js
+++ b/js/serial_backend.js
@@ -59,7 +59,6 @@ $(document).ready(function () {
$('div#port-picker #port, div#port-picker #baud, div#port-picker #delay').prop('disabled', true);
$('div.connect_controls a.connect_state').text(chrome.i18n.getMessage('connecting'));
-
serial.connect(selected_port, {bitrate: selected_baud}, onOpen);
toggleStatus();
@@ -69,17 +68,11 @@ $(document).ready(function () {
GUI.tab_switch_cleanup();
GUI.tab_switch_in_progress = false;
- if (semver.gte(CONFIG.apiVersion, "1.37.0") && CONFIG.arming_disabled) {
- CONFIG.arming_disabled = false;
-
- MSP.send_message(MSPCodes.MSP_ARMING_DISABLE, mspHelper.crunch(MSPCodes.MSP_ARMING_DISABLE), false, function () {
- GUI.log(chrome.i18n.getMessage('armingEnabled'));
-
- finishClose(toggleStatus);
- });
- } else {
+ function onFinishCallback() {
finishClose(toggleStatus);
}
+
+ mspHelper.setArmingEnabled(true, onFinishCallback);
}
}
}
@@ -234,17 +227,8 @@ function onOpen(openInfo) {
MSP.send_message(MSPCodes.MSP_NAME, false, false, function () {
GUI.log(chrome.i18n.getMessage('craftNameReceived', [CONFIG.name]));
- if (semver.gte(CONFIG.apiVersion, "1.37.0")) {
- CONFIG.arming_disabled = true;
-
- MSP.send_message(MSPCodes.MSP_ARMING_DISABLE, mspHelper.crunch(MSPCodes.MSP_ARMING_DISABLE), false, function () {
- GUI.log(chrome.i18n.getMessage('armingDisabled'));
-
- finishOpen();
- });
- } else {
- finishOpen();
- }
+ CONFIG.arming_disabled = false;
+ mspHelper.setArmingEnabled(false, finishOpen);
});
} else {
finishOpen();
diff --git a/tabs/motors.js b/tabs/motors.js
index 5b4630f9..7dd60f4a 100644
--- a/tabs/motors.js
+++ b/tabs/motors.js
@@ -210,8 +210,7 @@ TABS.motors.initialize = function (callback) {
self.escProtocolIsDshot = false;
}
- $('#motorsEnableTestMode').prop('checked', false)
- .prop('disabled', true);
+ $('#motorsEnableTestMode').prop('checked', false);
update_model(MIXER_CONFIG.mixer);
@@ -461,10 +460,8 @@ TABS.motors.initialize = function (callback) {
}
}
- setSlidersDefault();
-
- $('#motorsEnableTestMode').change(function () {
- if ($(this).is(':checked')) {
+ function setSlidersEnabled(isEnabled) {
+ if (isEnabled && !self.armed) {
$('div.sliders input').slice(0, number_of_valid_outputs).prop('disabled', false);
// unlock master slider
@@ -477,6 +474,18 @@ TABS.motors.initialize = function (callback) {
}
$('div.sliders input').trigger('input');
+ }
+
+ setSlidersDefault();
+
+ $('#motorsEnableTestMode').change(function () {
+ var enabled = $(this).is(':checked');
+
+ setSlidersEnabled(enabled);
+
+ $('div.sliders input').trigger('input');
+
+ mspHelper.setArmingEnabled(enabled);
}).change();
var buffering_set_motor = [],
@@ -530,9 +539,8 @@ TABS.motors.initialize = function (callback) {
}
if (motors_running) {
- if (!self.armed) {
- $('#motorsEnableTestMode').prop('checked', true).change();
- }
+ $('#motorsEnableTestMode').prop('checked', true).change();
+
// motors are running adjust sliders to current values
var sliders = $('div.sliders input:not(.master)');
@@ -607,15 +615,9 @@ TABS.motors.initialize = function (callback) {
//keep the following here so at least we get a visual cue of our motor setup
update_arm_status();
- if (self.armed) {
- $('#motorsEnableTestMode').prop('disabled', true)
- .prop('checked', false);
- } else {
- $('#motorsEnableTestMode').prop('disabled', false);
- }
-
if (previousArmState != self.armed) {
console.log('arm state change detected');
+
$('#motorsEnableTestMode').change();
}
}