diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 9ed92cad..d9ce699c 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -661,6 +661,12 @@ "configurationMagDeclination": { "message": "Magnetometer Declination [deg]" }, + "configurationReverseMotorSwitch": { + "message": "Reverse motor direction" + }, + "configurationReverseMotorSwitchHelp": { + "message": "Enabling this will reverse the motor direction in Betaflight. You must reverse the ESCs as well. CAUTION: Make sure you test this with PROPS OFF!" + }, "configurationAutoDisarmDelay": { "message": "Disarm motors after set delay [seconds] (Requires MOTOR_STOP feature)" }, diff --git a/js/fc.js b/js/fc.js index f0cbbb53..d4e2e00e 100644 --- a/js/fc.js +++ b/js/fc.js @@ -84,7 +84,8 @@ var FC = { MIXER_CONFIG = { mixer: 0, - }; + reverseMotorDir: 0, + }; BOARD_ALIGNMENT_CONFIG = { roll: 0, diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js index 03bd4db4..a7ca2be4 100644 --- a/js/msp/MSPHelper.js +++ b/js/msp/MSPHelper.js @@ -554,6 +554,7 @@ MspHelper.prototype.process_data = function(dataHandler) { case MSPCodes.MSP_MIXER_CONFIG: MIXER_CONFIG.mixer = data.readU8(); + MIXER_CONFIG.reverseMotorDir = data.readU8(); break; case MSPCodes.MSP_FEATURE_CONFIG: @@ -1149,6 +1150,7 @@ MspHelper.prototype.crunch = function(code) { break; case MSPCodes.MSP_SET_MIXER_CONFIG: buffer.push8(MIXER_CONFIG.mixer) + .push8(MIXER_CONFIG.reverseMotorDir); break; case MSPCodes.MSP_SET_BOARD_ALIGNMENT_CONFIG: buffer.push16(BOARD_ALIGNMENT_CONFIG.roll) diff --git a/tabs/configuration.html b/tabs/configuration.html index 3fb62df4..973ca717 100644 --- a/tabs/configuration.html +++ b/tabs/configuration.html @@ -24,6 +24,18 @@ +
+
+
+ +
+ +
+
+
diff --git a/tabs/configuration.js b/tabs/configuration.js index fec13246..ffa48502 100644 --- a/tabs/configuration.js +++ b/tabs/configuration.js @@ -163,12 +163,24 @@ TABS.configuration.initialize = function (callback, scrollPosition) { }); } + function refreshMixerPreview() { + var mixer = MIXER_CONFIG.mixer + var reverse = MIXER_CONFIG.reverseMotorDir ? "_reversed" : ""; + + $('.mixerPreview img').attr('src', './resources/motor_order/' + mixerList[mixer - 1].image + reverse + '.svg'); + }; + + var reverseMotorSwitch_e = $('#reverseMotorSwitch'); + + reverseMotorSwitch_e.change(function() { + MIXER_CONFIG.reverseMotorDir = $(this).prop('checked') ? 1 : 0; + refreshMixerPreview(); + }); + reverseMotorSwitch_e.prop('checked', MIXER_CONFIG.reverseMotorDir != 0).change(); + mixer_list_e.change(function () { - var val = parseInt($(this).val()); - - MIXER_CONFIG.mixer = val; - - $('.mixerPreview img').attr('src', './resources/motor_order/' + mixerList[val - 1].image + '.svg'); + MIXER_CONFIG.mixer = parseInt($(this).val()); + refreshMixerPreview(); }); // select current mixer configuration