Skip to content

Commit cb37527

Browse files
committed
Reverse can be applied to multiple channels - display for now
1 parent b6070a5 commit cb37527

File tree

2 files changed

+35
-19
lines changed

2 files changed

+35
-19
lines changed

src/js/msp/MSPHelper.js

+14
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,19 @@ MspHelper.prototype.process_data = function (dataHandler) {
604604
}
605605
break;
606606
case MSPCodes.MSP_SERVO_MIX_RULES:
607+
FC.SERVO_RULES = []; // empty the array as new data is coming in
608+
for (let i = 0; i < 16; i++) {
609+
const array = {
610+
targetChannel: data.readU8(),
611+
inputSource: data.readU8(),
612+
rate: data.readU8(),
613+
speed: data.readU8(),
614+
min: data.readU8(),
615+
max: data.readU8(),
616+
box: data.readU8(),
617+
};
618+
FC.SERVO_RULES.push(array);
619+
}
607620
break;
608621

609622
case MSPCodes.MSP_SERVO_CONFIGURATIONS:
@@ -2521,6 +2534,7 @@ MspHelper.prototype.sendServoConfigurations = function (onCompleteCallback) {
25212534
if (out == undefined) {
25222535
out = 255; // Cleanflight defines "CHANNEL_FORWARDING_DISABLED" as "(uint8_t)0xFF"
25232536
}
2537+
25242538
buffer.push8(out).push32(servoConfiguration.reversedInputSources);
25252539

25262540
// prepare for next iteration

src/js/tabs/servos.js

+21-19
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { gui_log } from "../gui_log";
88
import $ from "jquery";
99

1010
const servos = {};
11+
1112
servos.initialize = function (callback) {
1213
if (GUI.active_tab !== "servos") {
1314
GUI.active_tab = "servos";
@@ -42,20 +43,22 @@ servos.initialize = function (callback) {
4243

4344
$(".tab-servos").addClass("supported");
4445

45-
let servoCheckbox = "";
46+
// setup header
4647
let servoHeader = "";
4748
for (let i = 0; i < FC.RC.active_channels - 4; i++) {
4849
servoHeader += `<th>A${i + 1}</th>`;
4950
}
51+
5052
servoHeader += '<th style="width: 110px" i18n="servosRateAndDirection"></th>';
51-
servoHeader += '<th style="width: 110px" i18n="servosReverse"></th>';
5253

54+
$("div.tab-servos table.fields tr.main").append(servoHeader);
55+
56+
// setup checkboxes
57+
let servoCheckbox = "";
5358
for (let i = 0; i < FC.RC.active_channels; i++) {
54-
servoCheckbox += `<td class="channel"><input type="checkbox"/></td>`;
59+
servoCheckbox += `<td class="channel" id="channel${i}"><input type="checkbox"/></td>`;
5560
}
5661

57-
$("div.tab-servos table.fields tr.main").append(servoHeader);
58-
5962
/*
6063
* function: void process_servos(string, object)
6164
*/
@@ -69,8 +72,7 @@ servos.initialize = function (callback) {
6972
element += `<td class="min">${subElement}${FC.SERVO_CONFIG[obj].min}" /></td>`;
7073
element += `<td class="middle">${subElement}${FC.SERVO_CONFIG[obj].middle}" /></td>`;
7174
element += `<td class="max">${subElement}${FC.SERVO_CONFIG[obj].max}" /></td>`;
72-
element += `${servoCheckbox}<td class="direction"></td>`;
73-
element += `<td class="reverse"></td></tr>`;
75+
element += `${servoCheckbox}<td class="direction"></td></tr>`;
7476

7577
$("div.tab-servos table.fields").append(element);
7678

@@ -95,17 +97,18 @@ servos.initialize = function (callback) {
9597

9698
$("div.tab-servos table.fields tr:last").data("info", { obj: obj });
9799

98-
// adding select box for servo reverse
99-
$("div.tab-servos table.fields tr:last td.reverse").append(
100-
'<select class="reverse" name="reverse"></select>',
101-
);
102-
103-
const reverse = $("div.tab-servos table.fields tr:last td.reverse select");
104-
105-
reverse.append(`<option value="0">${i18n.getMessage("servosNormal")}</option>`);
106-
reverse.append(`<option value="1">${i18n.getMessage("servosReverse")}</option>`);
107-
108-
reverse.val(FC.SERVO_CONFIG[obj].reversedInputSources);
100+
// check if input sources are reversed
101+
for (const rule of FC.SERVO_RULES) {
102+
const inputSource = rule.inputSource;
103+
const reversed = FC.SERVO_CONFIG[obj].reversedInputSources & (1 << inputSource);
104+
if (reversed) {
105+
FC.SERVO_CONFIG[obj].reversedInputSources |= 1 << inputSource;
106+
const inputSourceElement = $(`#channel${inputSource}`).find("input");
107+
if (inputSourceElement) {
108+
inputSourceElement.prop("checked", true).parent().css("background-color", "red");
109+
}
110+
}
111+
}
109112

110113
// UI hooks
111114

@@ -138,7 +141,6 @@ servos.initialize = function (callback) {
138141
FC.SERVO_CONFIG[info.obj].max = parseInt($(".max input", this).val());
139142

140143
FC.SERVO_CONFIG[info.obj].rate = parseInt($(".direction select", this).val());
141-
FC.SERVO_CONFIG[info.obj].reversedInputSources = parseInt($(".reverse select", this).val());
142144
});
143145

144146
//

0 commit comments

Comments
 (0)