Refactor programming defines and extract definitions to separate modules

pull/2092/head
Pawel Spychalski (DzikuVx) 4 months ago
parent 71817afc08
commit 18912e031d

@ -961,464 +961,6 @@ var FC = {
isModeEnabled: function (name) {
return this.isModeBitSet(this.getModeId(name));
},
getLogicOperators: function () {
return {
0: {
name: "True",
operandType: "Active",
hasOperand: [false, false],
output: "boolean"
},
1: {
name: "Equal (A = B)",
operandType: "Comparison",
hasOperand: [true, true],
output: "boolean"
},
2: {
name: "Greater Than (A > B)",
operandType: "Comparison",
hasOperand: [true, true],
output: "boolean"
},
3: {
name: "Lower Than (A < B)",
operandType: "Comparison",
hasOperand: [true, true],
output: "boolean"
},
4: {
name: "Low",
operandType: "RC Switch Check",
hasOperand: [true, false],
output: "boolean"
},
5: {
name: "Mid",
operandType: "RC Switch Check",
hasOperand: [true, false],
output: "boolean"
},
6: {
name: "High",
operandType: "RC Switch Check",
hasOperand: [true, false],
output: "boolean"
},
7: {
name: "AND",
operandType: "Logic Switches",
hasOperand: [true, true],
output: "boolean"
},
8: {
name: "OR",
operandType: "Logic Switches",
hasOperand: [true, true],
output: "boolean"
},
9: {
name: "XOR",
operandType: "Logic Switches",
hasOperand: [true, true],
output: "boolean"
},
10: {
name: "NAND",
operandType: "Logic Switches",
hasOperand: [true, true],
output: "boolean"
},
11: {
name: "NOR",
operandType: "Logic Switches",
hasOperand: [true, true],
output: "boolean"
},
12: {
name: "NOT",
operandType: "Logic Switches",
hasOperand: [true, false],
output: "boolean"
},
13: {
name: "Sticky",
operandType: "Logic Switches",
hasOperand: [true, true],
output: "boolean"
},
14: {
name: "Basic: Add",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
15: {
name: "Basic: Subtract",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
16: {
name: "Basic: Multiply",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
17: {
name: "Basic: Divide",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
40: {
name: "Modulo",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
18: {
name: "Set GVAR",
operandType: "Variables",
hasOperand: [true, true],
output: "none"
},
19: {
name: "Increase GVAR",
operandType: "Variables",
hasOperand: [true, true],
output: "none"
},
20: {
name: "Decrease GVAR",
operandType: "Variables",
hasOperand: [true, true],
output: "none"
},
21: {
name: "Set IO Port",
operandType: "Set Flight Parameter",
hasOperand: [true, true],
output: "none"
},
22: {
name: "Override Arming Safety",
operandType: "Set Flight Parameter",
hasOperand: [false, false],
output: "boolean"
},
23: {
name: "Override Throttle Scale",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "boolean"
},
29: {
name: "Override Throttle",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "boolean"
},
24: {
name: "Swap Roll & Yaw",
operandType: "Set Flight Parameter",
hasOperand: [false, false],
output: "boolean"
},
25: {
name: "Set VTx Power Level",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "boolean"
},
30: {
name: "Set VTx Band",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "boolean"
},
31: {
name: "Set VTx Channel",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "boolean"
},
26: {
name: "Invert Roll",
operandType: "Set Flight Parameter",
hasOperand: [false, false],
output: "boolean"
},
27: {
name: "Invert Pitch",
operandType: "Set Flight Parameter",
hasOperand: [false, false],
output: "boolean"
},
28: {
name: "Invert Yaw",
operandType: "Set Flight Parameter",
hasOperand: [false, false],
output: "boolean"
},
32: {
name: "Set OSD Layout",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "boolean"
},
33: {
name: "Trigonometry: Sine",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
34: {
name: "Trigonometry: Cosine",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
35: {
name: "Trigonometry: Tangent",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
36: {
name: "Map Input",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
37: {
name: "Map Output",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
38: {
name: "Override RC Channel",
operandType: "Set Flight Parameter",
hasOperand: [true, true],
output: "boolean"
},
41: {
name: "Override Loiter Radius",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "boolean"
},
42: {
name: "Set Profile",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "boolean"
},
43: {
name: "Use Lowest Value",
operandType: "Comparison",
hasOperand: [true, true],
output: "raw"
},
44: {
name: "Use Highest Value",
operandType: "Comparison",
hasOperand: [true, true],
output: "raw"
},
45: {
name: "Flight Axis Angle Override",
operandType: "Set Flight Parameter",
hasOperand: [true, true],
output: "boolean"
},
46: {
name: "Flight Axis Rate Override",
operandType: "Set Flight Parameter",
hasOperand: [true, true],
output: "boolean"
},
47: {
name: "Edge",
operandType: "Logic Switches",
hasOperand: [true, true],
output: "boolean"
},
48: {
name: "Delay",
operandType: "Logic Switches",
hasOperand: [true, true],
output: "boolean"
},
49: {
name: "Timer",
operandType: "Logic Switches",
hasOperand: [true, true],
output: "boolean"
},
50: {
name: "Delta (|A| >= B)",
operandType: "Comparison",
hasOperand: [true, true],
output: "boolean"
},
51: {
name: "Approx Equals (A ~ B)",
operandType: "Comparison",
hasOperand: [true, true],
output: "boolean"
},
52: {
name: "LED Pin PWM",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "raw"
},
53: {
name: "Disable GPS Sensor Fix",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "boolean"
},
54: {
name: "Mag calibration",
operandType: "Set Flight Parameter",
hasOperand: [false, false],
output: "boolean"
},
}
},
getOperandTypes: function () {
return {
0: {
name: "Value",
type: "value",
min: -1000000,
max: 1000000,
step: 1,
default: 0
},
1: {
name: "Get RC Channel",
type: "range",
range: [1, 16],
default: 1
},
2: {
name: "Flight",
type: "dictionary",
default: 0,
values: {
0: "ARM timer [s]",
1: "Home distance [m]",
2: "Trip distance [m]",
3: "RSSI",
4: "Vbat [centi-Volt] [1V = 100]",
5: "Cell voltage [centi-Volt] [1V = 100]",
6: "Current [centi-Amp] [1A = 100]",
7: "Current drawn [mAh]",
8: "GPS Sats",
9: "Ground speed [cm/s]",
10: "3D speed [cm/s]",
11: "Air speed [cm/s]",
12: "Altitude [cm]",
13: "Vertical speed [cm/s]",
14: "Throttle position [%]",
15: "Roll [deg]",
16: "Pitch [deg]",
17: "Is Armed",
18: "Is Autolaunch",
19: "Is Controlling Altitude",
20: "Is Controlling Position",
21: "Is Emergency Landing",
22: "Is RTH",
23: "Is Landing",
24: "Is Failsafe",
25: "Stabilized Roll",
26: "Stabilized Pitch",
27: "Stabilized Yaw",
28: "3D home distance [m]",
29: "CRSF LQ",
30: "CRSF SNR",
31: "GPS Valid Fix",
32: "Loiter Radius [cm]",
33: "Active PIDProfile",
34: "Battery cells",
35: "AGL status [0/1]",
36: "AGL [cm]",
37: "Rangefinder [cm]",
38: "Active MixerProfile",
39: "MixerTransition Active",
40: "Yaw [deg]",
41: "FW Land State"
}
},
3: {
name: "Flight Mode",
type: "dictionary",
default: 0,
values: {
0: "Failsafe",
1: "Manual",
2: "RTH",
3: "Position Hold",
4: "Cruise",
5: "Altitude Hold",
6: "Angle",
7: "Horizon",
8: "Air",
9: "USER 1",
10: "USER 2",
11: "Course Hold",
12: "USER 3",
13: "USER 4",
14: "Acro",
15: "Waypoint Mission",
}
},
4: {
name: "Logic Condition",
type: "range",
range: [0, (this.LOGIC_CONDITIONS.getMaxLogicConditionCount()-1)],
default: 0
},
5: {
name: "Get Global Variable",
type: "range",
range: [0, 7],
default: 0
},
6: {
name: "Programming PID",
type: "range",
range: [0, 3],
default: 0
},
7: {
name: "Waypoints",
type: "dictionary",
default: 0,
values: {
0: "Is WP",
1: "Current Waypoint Index",
2: "Current Waypoint Action",
3: "Next Waypoint Action",
4: "Distance to next Waypoint [m]",
5: "Distance from last Waypoint [m]",
6: "Current WP has User Action 1",
7: "Current WP has User Action 2",
8: "Current WP has User Action 3",
9: "Current WP has User Action 4",
10: "Next WP has User Action 1",
11: "Next WP has User Action 2",
12: "Next WP has User Action 3",
13: "Next WP has User Action 4",
}
},
}
},
getBatteryProfileParameters: function () {
return [
'bat_cells',

@ -2,6 +2,8 @@
const FC = require('./fc');
const { GUI } = require('./../js/gui');
const { LOGIC_OPERATORS } = require('./logicConditionOperators');
const { OPERAND_TYPES } = require('./logicConditionOperantTypes');
let LogicCondition = function (enabled, activatorId, operation, operandAType, operandAValue, operandBType, operandBValue, flags) {
let self = {};
@ -79,7 +81,7 @@ let LogicCondition = function (enabled, activatorId, operation, operandAType, op
};
self.getOperatorMetadata = function () {
return FC.getLogicOperators()[self.getOperation()];
return LOGIC_OPERATORS[self.getOperation()];
};
self.hasOperand = function (val) {
@ -103,7 +105,7 @@ let LogicCondition = function (enabled, activatorId, operation, operandAType, op
let $cT = $(event.currentTarget),
operand = $cT.data("operand"),
$container = $cT.parent(),
operandMetadata = FC.getOperandTypes()[$cT.val()];
operandMetadata = OPERAND_TYPES[$cT.val()];
if (operand == 0) {
self.setOperandAType($cT.val());
@ -145,9 +147,9 @@ let LogicCondition = function (enabled, activatorId, operation, operandAType, op
$container.append('<select class="logic_element__operand--type" data-operand="' + operand + '"></select>');
let $t = $container.find('.logic_element__operand--type');
for (let k in FC.getOperandTypes()) {
if (FC.getOperandTypes().hasOwnProperty(k)) {
let op = FC.getOperandTypes()[k];
for (let k in OPERAND_TYPES) {
if (OPERAND_TYPES.hasOwnProperty(k)) {
let op = OPERAND_TYPES[k];
if (type == k) {
$t.append('<option value="' + k + '" selected>' + op.name + '</option>');
@ -173,7 +175,7 @@ let LogicCondition = function (enabled, activatorId, operation, operandAType, op
self.renderStatus = function () {
let $e = $row.find('.logic_cell__status'),
displayType = FC.getLogicOperators()[self.getOperation()].output;
displayType = LOGIC_OPERATORS[self.getOperation()].output;
if (self.getEnabled() && displayType == "boolean") {
$e.html('<div class="logic_cell__active_marker"></div>');
@ -189,7 +191,7 @@ let LogicCondition = function (enabled, activatorId, operation, operandAType, op
return;
}
let displayType = FC.getLogicOperators()[self.getOperation()].output,
let displayType = LOGIC_OPERATORS[self.getOperation()].output,
$marker;
if (self.getEnabled() && displayType == "boolean") {
@ -261,9 +263,9 @@ let LogicCondition = function (enabled, activatorId, operation, operandAType, op
let lcOperators = [];
for (let lcID in FC.getLogicOperators()) {
if (FC.getLogicOperators().hasOwnProperty(lcID)) {
let op = FC.getLogicOperators()[lcID];
for (let lcID in LOGIC_OPERATORS) {
if (LOGIC_OPERATORS.hasOwnProperty(lcID)) {
let op = LOGIC_OPERATORS[lcID];
lcOperators[parseInt(lcID, 10)] = {
id: parseInt(lcID, 10),
name: op.name,

@ -0,0 +1,131 @@
'use strict';
const OPERAND_TYPES = {
0: {
name: "Value",
type: "value",
min: -1000000,
max: 1000000,
step: 1,
default: 0
},
1: {
name: "Get RC Channel",
type: "range",
range: [1, 16],
default: 1
},
2: {
name: "Flight",
type: "dictionary",
default: 0,
values: {
0: "ARM timer [s]",
1: "Home distance [m]",
2: "Trip distance [m]",
3: "RSSI",
4: "Vbat [centi-Volt] [1V = 100]",
5: "Cell voltage [centi-Volt] [1V = 100]",
6: "Current [centi-Amp] [1A = 100]",
7: "Current drawn [mAh]",
8: "GPS Sats",
9: "Ground speed [cm/s]",
10: "3D speed [cm/s]",
11: "Air speed [cm/s]",
12: "Altitude [cm]",
13: "Vertical speed [cm/s]",
14: "Throttle position [%]",
15: "Roll [deg]",
16: "Pitch [deg]",
17: "Is Armed",
18: "Is Autolaunch",
19: "Is Controlling Altitude",
20: "Is Controlling Position",
21: "Is Emergency Landing",
22: "Is RTH",
23: "Is Landing",
24: "Is Failsafe",
25: "Stabilized Roll",
26: "Stabilized Pitch",
27: "Stabilized Yaw",
28: "3D home distance [m]",
29: "CRSF LQ",
30: "CRSF SNR",
31: "GPS Valid Fix",
32: "Loiter Radius [cm]",
33: "Active PIDProfile",
34: "Battery cells",
35: "AGL status [0/1]",
36: "AGL [cm]",
37: "Rangefinder [cm]",
38: "Active MixerProfile",
39: "MixerTransition Active",
40: "Yaw [deg]",
41: "FW Land State"
}
},
3: {
name: "Flight Mode",
type: "dictionary",
default: 0,
values: {
0: "Failsafe",
1: "Manual",
2: "RTH",
3: "Position Hold",
4: "Cruise",
5: "Altitude Hold",
6: "Angle",
7: "Horizon",
8: "Air",
9: "USER 1",
10: "USER 2",
11: "Course Hold",
12: "USER 3",
13: "USER 4",
14: "Acro",
15: "Waypoint Mission",
}
},
4: {
name: "Logic Condition",
type: "range",
range: [0, 63],
default: 0
},
5: {
name: "Get Global Variable",
type: "range",
range: [0, 7],
default: 0
},
6: {
name: "Programming PID",
type: "range",
range: [0, 3],
default: 0
},
7: {
name: "Waypoints",
type: "dictionary",
default: 0,
values: {
0: "Is WP",
1: "Current Waypoint Index",
2: "Current Waypoint Action",
3: "Next Waypoint Action",
4: "Distance to next Waypoint [m]",
5: "Distance from last Waypoint [m]",
6: "Current WP has User Action 1",
7: "Current WP has User Action 2",
8: "Current WP has User Action 3",
9: "Current WP has User Action 4",
10: "Next WP has User Action 1",
11: "Next WP has User Action 2",
12: "Next WP has User Action 3",
13: "Next WP has User Action 4",
}
},
};
module.exports = { OPERAND_TYPES };

@ -0,0 +1,331 @@
'use strict';
const LOGIC_OPERATORS = {
0: {
name: "True",
operandType: "Active",
hasOperand: [false, false],
output: "boolean"
},
1: {
name: "Equal (A = B)",
operandType: "Comparison",
hasOperand: [true, true],
output: "boolean"
},
2: {
name: "Greater Than (A > B)",
operandType: "Comparison",
hasOperand: [true, true],
output: "boolean"
},
3: {
name: "Lower Than (A < B)",
operandType: "Comparison",
hasOperand: [true, true],
output: "boolean"
},
4: {
name: "Low",
operandType: "RC Switch Check",
hasOperand: [true, false],
output: "boolean"
},
5: {
name: "Mid",
operandType: "RC Switch Check",
hasOperand: [true, false],
output: "boolean"
},
6: {
name: "High",
operandType: "RC Switch Check",
hasOperand: [true, false],
output: "boolean"
},
7: {
name: "AND",
operandType: "Logic Switches",
hasOperand: [true, true],
output: "boolean"
},
8: {
name: "OR",
operandType: "Logic Switches",
hasOperand: [true, true],
output: "boolean"
},
9: {
name: "XOR",
operandType: "Logic Switches",
hasOperand: [true, true],
output: "boolean"
},
10: {
name: "NAND",
operandType: "Logic Switches",
hasOperand: [true, true],
output: "boolean"
},
11: {
name: "NOR",
operandType: "Logic Switches",
hasOperand: [true, true],
output: "boolean"
},
12: {
name: "NOT",
operandType: "Logic Switches",
hasOperand: [true, false],
output: "boolean"
},
13: {
name: "Sticky",
operandType: "Logic Switches",
hasOperand: [true, true],
output: "boolean"
},
14: {
name: "Basic: Add",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
15: {
name: "Basic: Subtract",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
16: {
name: "Basic: Multiply",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
17: {
name: "Basic: Divide",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
40: {
name: "Modulo",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
18: {
name: "Set GVAR",
operandType: "Variables",
hasOperand: [true, true],
output: "none"
},
19: {
name: "Increase GVAR",
operandType: "Variables",
hasOperand: [true, true],
output: "none"
},
20: {
name: "Decrease GVAR",
operandType: "Variables",
hasOperand: [true, true],
output: "none"
},
21: {
name: "Set IO Port",
operandType: "Set Flight Parameter",
hasOperand: [true, true],
output: "none"
},
22: {
name: "Override Arming Safety",
operandType: "Set Flight Parameter",
hasOperand: [false, false],
output: "boolean"
},
23: {
name: "Override Throttle Scale",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "boolean"
},
29: {
name: "Override Throttle",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "boolean"
},
24: {
name: "Swap Roll & Yaw",
operandType: "Set Flight Parameter",
hasOperand: [false, false],
output: "boolean"
},
25: {
name: "Set VTx Power Level",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "boolean"
},
30: {
name: "Set VTx Band",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "boolean"
},
31: {
name: "Set VTx Channel",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "boolean"
},
26: {
name: "Invert Roll",
operandType: "Set Flight Parameter",
hasOperand: [false, false],
output: "boolean"
},
27: {
name: "Invert Pitch",
operandType: "Set Flight Parameter",
hasOperand: [false, false],
output: "boolean"
},
28: {
name: "Invert Yaw",
operandType: "Set Flight Parameter",
hasOperand: [false, false],
output: "boolean"
},
32: {
name: "Set OSD Layout",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "boolean"
},
33: {
name: "Trigonometry: Sine",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
34: {
name: "Trigonometry: Cosine",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
35: {
name: "Trigonometry: Tangent",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
36: {
name: "Map Input",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
37: {
name: "Map Output",
operandType: "Maths",
hasOperand: [true, true],
output: "raw"
},
38: {
name: "Override RC Channel",
operandType: "Set Flight Parameter",
hasOperand: [true, true],
output: "boolean"
},
41: {
name: "Override Loiter Radius",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "boolean"
},
42: {
name: "Set Profile",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "boolean"
},
43: {
name: "Use Lowest Value",
operandType: "Comparison",
hasOperand: [true, true],
output: "raw"
},
44: {
name: "Use Highest Value",
operandType: "Comparison",
hasOperand: [true, true],
output: "raw"
},
45: {
name: "Flight Axis Angle Override",
operandType: "Set Flight Parameter",
hasOperand: [true, true],
output: "boolean"
},
46: {
name: "Flight Axis Rate Override",
operandType: "Set Flight Parameter",
hasOperand: [true, true],
output: "boolean"
},
47: {
name: "Edge",
operandType: "Logic Switches",
hasOperand: [true, true],
output: "boolean"
},
48: {
name: "Delay",
operandType: "Logic Switches",
hasOperand: [true, true],
output: "boolean"
},
49: {
name: "Timer",
operandType: "Logic Switches",
hasOperand: [true, true],
output: "boolean"
},
50: {
name: "Delta (|A| >= B)",
operandType: "Comparison",
hasOperand: [true, true],
output: "boolean"
},
51: {
name: "Approx Equals (A ~ B)",
operandType: "Comparison",
hasOperand: [true, true],
output: "boolean"
},
52: {
name: "LED Pin PWM",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "raw"
},
53: {
name: "Disable GPS Sensor Fix",
operandType: "Set Flight Parameter",
hasOperand: [true, false],
output: "boolean"
},
54: {
name: "Mag calibration",
operandType: "Set Flight Parameter",
hasOperand: [false, false],
output: "boolean"
}
};
module.exports = { LOGIC_OPERATORS };

@ -2,6 +2,7 @@
const FC = require('./fc');
const { GUI } = require('./gui');
const { OPERAND_TYPES } = require('./logicConditionOperantTypes');
let ProgrammingPid = function (enabled, setpointType, setpointValue, measurementType, measurementValue, gainP, gainI, gainD, gainFF) {
let self = {};
@ -159,7 +160,7 @@ let ProgrammingPid = function (enabled, setpointType, setpointValue, measurement
let $cT = $(event.currentTarget),
operand = $cT.data("operand"),
$container = $cT.parent(),
operandMetadata = FC.getOperandTypes()[$cT.val()];
operandMetadata = OPERAND_TYPES[$cT.val()];
if (operand == 0) {
self.setSetpointType($cT.val());
@ -189,9 +190,9 @@ let ProgrammingPid = function (enabled, setpointType, setpointValue, measurement
$container.append('<select class="logic_element__operand--type" data-operand="' + operand + '"></select>');
let $t = $container.find('.logic_element__operand--type');
for (let k in FC.getOperandTypes()) {
if (FC.getOperandTypes().hasOwnProperty(k)) {
let op = FC.getOperandTypes()[k];
for (let k in OPERAND_TYPES) {
if (OPERAND_TYPES.hasOwnProperty(k)) {
let op = OPERAND_TYPES[k];
if (type == k) {
$t.append('<option value="' + k + '" selected>' + op.name + '</option>');

Loading…
Cancel
Save