44 { stickFunctionMax, StateMachineStepStickNeutral, &RemoteControlCalibrationController::_inputCenterWaitBegin, &RemoteControlCalibrationController::_saveAllTrims },
45 { stickFunctionThrottle, StateMachineStepThrottleUp, &RemoteControlCalibrationController::_inputStickDetect,
nullptr },
46 { stickFunctionThrottle, StateMachineStepThrottleDown, &RemoteControlCalibrationController::_inputStickMin,
nullptr },
47 { stickFunctionYaw, StateMachineStepYawRight, &RemoteControlCalibrationController::_inputStickDetect,
nullptr },
48 { stickFunctionYaw, StateMachineStepYawLeft, &RemoteControlCalibrationController::_inputStickMin,
nullptr },
49 { stickFunctionRoll, StateMachineStepRollRight, &RemoteControlCalibrationController::_inputStickDetect,
nullptr },
50 { stickFunctionRoll, StateMachineStepRollLeft, &RemoteControlCalibrationController::_inputStickMin,
nullptr },
51 { stickFunctionPitch, StateMachineStepPitchUp, &RemoteControlCalibrationController::_inputStickDetect,
nullptr },
52 { stickFunctionPitch, StateMachineStepPitchDown, &RemoteControlCalibrationController::_inputStickMin,
nullptr },
53 { stickFunctionPitchExtension, StateMachineStepExtensionHighVert, &RemoteControlCalibrationController::_inputStickDetect,
nullptr },
54 { stickFunctionPitchExtension, StateMachineStepExtensionLowVert, &RemoteControlCalibrationController::_inputStickMin,
nullptr },
55 { stickFunctionRollExtension, StateMachineStepExtensionHighHorz, &RemoteControlCalibrationController::_inputStickDetect,
nullptr },
56 { stickFunctionRollExtension, StateMachineStepExtensionLowHorz, &RemoteControlCalibrationController::_inputStickMin,
nullptr },
57 { stickFunctionAdditionalAxis1, StateMachineStepExtensionHighHorz, &RemoteControlCalibrationController::_inputStickDetect,
nullptr },
58 { stickFunctionAdditionalAxis1, StateMachineStepExtensionLowHorz, &RemoteControlCalibrationController::_inputStickMin,
nullptr },
59 { stickFunctionAdditionalAxis2, StateMachineStepExtensionHighHorz, &RemoteControlCalibrationController::_inputStickDetect,
nullptr },
60 { stickFunctionAdditionalAxis2, StateMachineStepExtensionLowHorz, &RemoteControlCalibrationController::_inputStickMin,
nullptr },
61 { stickFunctionAdditionalAxis3, StateMachineStepExtensionHighHorz, &RemoteControlCalibrationController::_inputStickDetect,
nullptr },
62 { stickFunctionAdditionalAxis3, StateMachineStepExtensionLowHorz, &RemoteControlCalibrationController::_inputStickMin,
nullptr },
63 { stickFunctionAdditionalAxis4, StateMachineStepExtensionHighHorz, &RemoteControlCalibrationController::_inputStickDetect,
nullptr },
64 { stickFunctionAdditionalAxis4, StateMachineStepExtensionLowHorz, &RemoteControlCalibrationController::_inputStickMin,
nullptr },
65 { stickFunctionAdditionalAxis5, StateMachineStepExtensionHighHorz, &RemoteControlCalibrationController::_inputStickDetect,
nullptr },
66 { stickFunctionAdditionalAxis5, StateMachineStepExtensionLowHorz, &RemoteControlCalibrationController::_inputStickMin,
nullptr },
67 { stickFunctionAdditionalAxis6, StateMachineStepExtensionHighHorz, &RemoteControlCalibrationController::_inputStickDetect,
nullptr },
68 { stickFunctionAdditionalAxis6, StateMachineStepExtensionLowHorz, &RemoteControlCalibrationController::_inputStickMin,
nullptr },
70 { stickFunctionMax, StateMachineStepSwitchMinMax, &RemoteControlCalibrationController::_inputSwitchMinMax, &RemoteControlCalibrationController::_advanceState },
71 { stickFunctionMax, StateMachineStepComplete,
nullptr, &RemoteControlCalibrationController::_saveCalibrationValues },
74 _resetInternalCalibrationValues();
75 _loadCalibrationUISettings();
77 _stickDisplayPositions = { _stickDisplayPositionCentered.horizontal, _stickDisplayPositionCentered.vertical,
78 _stickDisplayPositionCentered.horizontal, _stickDisplayPositionCentered.vertical };
80 if (_vehicle->rover()) {
81 _centeredThrottle =
true;
84 _stepFunctionToMsgStringMap = {
104 _bothStickDisplayPositionThrottleCenteredMap = {
105 { StateMachineStepStickNeutral, {
106 { 1, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
107 { 2, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
108 { 3, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
109 { 4, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
111 { StateMachineStepThrottleUp, {
112 { 1, { _stickDisplayPositionCentered, _stickDisplayPositionXCenteredYUp } },
113 { 2, { _stickDisplayPositionXCenteredYUp, _stickDisplayPositionCentered } },
114 { 3, { _stickDisplayPositionCentered, _stickDisplayPositionXCenteredYUp } },
115 { 4, { _stickDisplayPositionXCenteredYUp, _stickDisplayPositionCentered } },
117 { StateMachineStepThrottleDown, {
118 { 1, { _stickDisplayPositionCentered, _stickDisplayPositionXCenteredYDown } },
119 { 2, { _stickDisplayPositionXCenteredYDown, _stickDisplayPositionCentered } },
120 { 3, { _stickDisplayPositionCentered, _stickDisplayPositionXCenteredYDown } },
121 { 4, { _stickDisplayPositionXCenteredYDown, _stickDisplayPositionCentered } },
123 { StateMachineStepYawRight, {
124 { 1, { _stickDisplayPositionXRightYCentered, _stickDisplayPositionCentered } },
125 { 2, { _stickDisplayPositionXRightYCentered, _stickDisplayPositionCentered } },
126 { 3, { _stickDisplayPositionCentered, _stickDisplayPositionXRightYCentered } },
127 { 4, { _stickDisplayPositionCentered, _stickDisplayPositionXRightYCentered } },
129 { StateMachineStepYawLeft, {
130 { 1, { _stickDisplayPositionXLeftYCentered, _stickDisplayPositionCentered } },
131 { 2, { _stickDisplayPositionXLeftYCentered, _stickDisplayPositionCentered } },
132 { 3, { _stickDisplayPositionCentered, _stickDisplayPositionXLeftYCentered } },
133 { 4, { _stickDisplayPositionCentered, _stickDisplayPositionXLeftYCentered } },
135 { StateMachineStepRollRight, {
136 { 1, { _stickDisplayPositionCentered, _stickDisplayPositionXRightYCentered } },
137 { 2, { _stickDisplayPositionCentered, _stickDisplayPositionXRightYCentered } },
138 { 3, { _stickDisplayPositionXRightYCentered, _stickDisplayPositionCentered } },
139 { 4, { _stickDisplayPositionXRightYCentered, _stickDisplayPositionCentered } },
141 { StateMachineStepRollLeft, {
142 { 1, { _stickDisplayPositionCentered, _stickDisplayPositionXLeftYCentered } },
143 { 2, { _stickDisplayPositionCentered, _stickDisplayPositionXLeftYCentered } },
144 { 3, { _stickDisplayPositionXLeftYCentered, _stickDisplayPositionCentered } },
145 { 4, { _stickDisplayPositionXLeftYCentered, _stickDisplayPositionCentered } },
147 { StateMachineStepPitchUp, {
148 { 1, { _stickDisplayPositionXCenteredYUp, _stickDisplayPositionCentered } },
149 { 2, { _stickDisplayPositionCentered, _stickDisplayPositionXCenteredYUp } },
150 { 3, { _stickDisplayPositionXCenteredYUp, _stickDisplayPositionCentered } },
151 { 4, { _stickDisplayPositionCentered, _stickDisplayPositionXCenteredYUp } },
153 { StateMachineStepPitchDown, {
154 { 1, { _stickDisplayPositionXCenteredYDown, _stickDisplayPositionCentered } },
155 { 2, { _stickDisplayPositionCentered, _stickDisplayPositionXCenteredYDown } },
156 { 3, { _stickDisplayPositionXCenteredYDown, _stickDisplayPositionCentered } },
157 { 4, { _stickDisplayPositionCentered, _stickDisplayPositionXCenteredYDown } },
159 { StateMachineStepPitchCenter, {
160 { 1, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
161 { 2, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
162 { 3, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
163 { 4, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
165 { StateMachineStepExtensionHighHorz, {
166 { 1, { _stickDisplayPositionXRightYCentered, _stickDisplayPositionCentered } },
167 { 2, { _stickDisplayPositionXRightYCentered, _stickDisplayPositionCentered } },
168 { 3, { _stickDisplayPositionXRightYCentered, _stickDisplayPositionCentered } },
169 { 4, { _stickDisplayPositionXRightYCentered, _stickDisplayPositionCentered } },
171 { StateMachineStepExtensionHighVert, {
172 { 1, { _stickDisplayPositionXCenteredYUp, _stickDisplayPositionXCenteredYUp } },
173 { 2, { _stickDisplayPositionXCenteredYUp, _stickDisplayPositionXCenteredYUp } },
174 { 3, { _stickDisplayPositionXCenteredYUp, _stickDisplayPositionXCenteredYUp } },
175 { 4, { _stickDisplayPositionXCenteredYUp, _stickDisplayPositionXCenteredYUp } },
177 { StateMachineStepExtensionLowHorz, {
178 { 1, { _stickDisplayPositionXLeftYCentered, _stickDisplayPositionCentered } },
179 { 2, { _stickDisplayPositionXLeftYCentered, _stickDisplayPositionCentered } },
180 { 3, { _stickDisplayPositionXLeftYCentered, _stickDisplayPositionCentered } },
181 { 4, { _stickDisplayPositionXLeftYCentered, _stickDisplayPositionCentered } },
183 { StateMachineStepExtensionLowVert, {
184 { 1, { _stickDisplayPositionXCenteredYDown, _stickDisplayPositionCentered } },
185 { 2, { _stickDisplayPositionXCenteredYDown, _stickDisplayPositionCentered } },
186 { 3, { _stickDisplayPositionXCenteredYDown, _stickDisplayPositionCentered } },
187 { 4, { _stickDisplayPositionXCenteredYDown, _stickDisplayPositionCentered } },
189 { StateMachineStepSwitchMinMax, {
190 { 1, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
191 { 2, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
192 { 3, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
193 { 4, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
195 { StateMachineStepComplete, {
196 { 1, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
197 { 2, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
198 { 3, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
199 { 4, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
204 _bothStickDisplayPositionThrottleDownMap = {
205 { StateMachineStepStickNeutral, {
206 { 1, { _stickDisplayPositionCentered, _stickDisplayPositionXCenteredYDown } },
207 { 2, { _stickDisplayPositionXCenteredYDown, _stickDisplayPositionCentered } },
208 { 3, { _stickDisplayPositionCentered, _stickDisplayPositionXCenteredYDown } },
209 { 4, { _stickDisplayPositionXCenteredYDown, _stickDisplayPositionCentered } },
211 { StateMachineStepThrottleUp, {
212 { 1, { _stickDisplayPositionCentered, _stickDisplayPositionXCenteredYUp } },
213 { 2, { _stickDisplayPositionXCenteredYUp, _stickDisplayPositionCentered } },
214 { 3, { _stickDisplayPositionCentered, _stickDisplayPositionXCenteredYUp } },
215 { 4, { _stickDisplayPositionXCenteredYUp, _stickDisplayPositionCentered } },
217 { StateMachineStepThrottleDown, {
218 { 1, { _stickDisplayPositionCentered, _stickDisplayPositionXCenteredYDown } },
219 { 2, { _stickDisplayPositionXCenteredYDown, _stickDisplayPositionCentered } },
220 { 3, { _stickDisplayPositionCentered, _stickDisplayPositionXCenteredYDown } },
221 { 4, { _stickDisplayPositionXCenteredYDown, _stickDisplayPositionCentered } },
223 { StateMachineStepYawRight, {
224 { 1, { _stickDisplayPositionXRightYCentered, _stickDisplayPositionCentered } },
225 { 2, { _stickDisplayPositionXRightYCentered, _stickDisplayPositionCentered } },
226 { 3, { _stickDisplayPositionCentered, _stickDisplayPositionXRightYCentered } },
227 { 4, { _stickDisplayPositionCentered, _stickDisplayPositionXRightYCentered } },
229 { StateMachineStepYawLeft, {
230 { 1, { _stickDisplayPositionXLeftYCentered, _stickDisplayPositionCentered } },
231 { 2, { _stickDisplayPositionXLeftYCentered, _stickDisplayPositionCentered } },
232 { 3, { _stickDisplayPositionCentered, _stickDisplayPositionXLeftYCentered } },
233 { 4, { _stickDisplayPositionCentered, _stickDisplayPositionXLeftYCentered } },
235 { StateMachineStepRollRight, {
236 { 1, { _stickDisplayPositionCentered, _stickDisplayPositionXRightYCentered } },
237 { 2, { _stickDisplayPositionCentered, _stickDisplayPositionXRightYCentered } },
238 { 3, { _stickDisplayPositionXRightYCentered, _stickDisplayPositionCentered } },
239 { 4, { _stickDisplayPositionXRightYCentered, _stickDisplayPositionCentered } },
241 { StateMachineStepRollLeft, {
242 { 1, { _stickDisplayPositionCentered, _stickDisplayPositionXLeftYCentered } },
243 { 2, { _stickDisplayPositionCentered, _stickDisplayPositionXLeftYCentered } },
244 { 3, { _stickDisplayPositionXLeftYCentered, _stickDisplayPositionCentered } },
245 { 4, { _stickDisplayPositionXLeftYCentered, _stickDisplayPositionCentered } },
247 { StateMachineStepPitchUp, {
248 { 1, { _stickDisplayPositionXCenteredYUp, _stickDisplayPositionCentered } },
249 { 2, { _stickDisplayPositionCentered, _stickDisplayPositionXCenteredYUp } },
250 { 3, { _stickDisplayPositionXCenteredYUp, _stickDisplayPositionCentered } },
251 { 4, { _stickDisplayPositionCentered, _stickDisplayPositionXCenteredYUp } },
253 { StateMachineStepPitchDown, {
254 { 1, { _stickDisplayPositionXCenteredYDown, _stickDisplayPositionCentered } },
255 { 2, { _stickDisplayPositionCentered, _stickDisplayPositionXCenteredYDown } },
256 { 3, { _stickDisplayPositionXCenteredYDown, _stickDisplayPositionCentered } },
257 { 4, { _stickDisplayPositionCentered, _stickDisplayPositionXCenteredYDown } },
259 { StateMachineStepPitchCenter, {
260 { 1, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
261 { 2, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
262 { 3, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
263 { 4, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
265 { StateMachineStepExtensionHighHorz, {
266 { 1, { _stickDisplayPositionXRightYCentered, _stickDisplayPositionCentered } },
267 { 2, { _stickDisplayPositionXRightYCentered, _stickDisplayPositionCentered } },
268 { 3, { _stickDisplayPositionXRightYCentered, _stickDisplayPositionCentered } },
269 { 4, { _stickDisplayPositionXRightYCentered, _stickDisplayPositionCentered } },
271 { StateMachineStepExtensionHighVert, {
272 { 1, { _stickDisplayPositionXCenteredYUp, _stickDisplayPositionXCenteredYUp } },
273 { 2, { _stickDisplayPositionXCenteredYUp, _stickDisplayPositionXCenteredYUp } },
274 { 3, { _stickDisplayPositionXCenteredYUp, _stickDisplayPositionXCenteredYUp } },
275 { 4, { _stickDisplayPositionXCenteredYUp, _stickDisplayPositionXCenteredYUp } },
277 { StateMachineStepExtensionLowHorz, {
278 { 1, { _stickDisplayPositionXLeftYCentered, _stickDisplayPositionCentered } },
279 { 2, { _stickDisplayPositionXLeftYCentered, _stickDisplayPositionCentered } },
280 { 3, { _stickDisplayPositionXLeftYCentered, _stickDisplayPositionCentered } },
281 { 4, { _stickDisplayPositionXLeftYCentered, _stickDisplayPositionCentered } },
283 { StateMachineStepExtensionLowVert, {
284 { 1, { _stickDisplayPositionXCenteredYDown, _stickDisplayPositionCentered } },
285 { 2, { _stickDisplayPositionXCenteredYDown, _stickDisplayPositionCentered } },
286 { 3, { _stickDisplayPositionXCenteredYDown, _stickDisplayPositionCentered } },
287 { 4, { _stickDisplayPositionXCenteredYDown, _stickDisplayPositionCentered } },
289 { StateMachineStepSwitchMinMax, {
290 { 1, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
291 { 2, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
292 { 3, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
293 { 4, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
295 { StateMachineStepComplete, {
296 { 1, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
297 { 2, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
298 { 3, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },
299 { 4, { _stickDisplayPositionCentered, _stickDisplayPositionCentered } },