3#include <QtCore/QElapsedTimer>
4#include <QtQmlIntegration/QtQmlIntegration>
5#include <QtQuick/QQuickItem>
16 Q_PROPERTY(QQuickItem* statusText MEMBER _statusText REQUIRED)
17 Q_PROPERTY(QQuickItem* cancelButton MEMBER _cancelButton REQUIRED)
18 Q_PROPERTY(QQuickItem* nextButton MEMBER _nextButton REQUIRED)
20 Q_PROPERTY(
int minChannelCount MEMBER
_chanMinimum CONSTANT)
118 virtual Q_INVOKABLE
void start();
300 void _processChannelValues(QVector<int> channelValues);
302 virtual void _saveStoredCalibrationValues() = 0;
303 virtual void _readStoredCalibrationValues() = 0;
308 struct StickDisplayPosition {
313 struct BothSticksDisplayPositions {
314 StickDisplayPosition leftStick;
315 StickDisplayPosition rightStick;
318 enum StateMachineStepFunction {
319 StateMachineStepStickNeutral,
320 StateMachineStepThrottleUp,
321 StateMachineStepThrottleDown,
322 StateMachineStepYawRight,
323 StateMachineStepYawLeft,
324 StateMachineStepRollRight,
325 StateMachineStepRollLeft,
326 StateMachineStepPitchUp,
327 StateMachineStepPitchDown,
328 StateMachineStepPitchCenter,
329 StateMachineStepSwitchMinMax,
330 StateMachineStepExtensionHighHorz,
331 StateMachineStepExtensionHighVert,
332 StateMachineStepExtensionLowHorz,
333 StateMachineStepExtensionLowVert,
334 StateMachineStepComplete
339 struct StateMachineEntry {
341 enum StateMachineStepFunction stepFunction;
342 inputFn channelInputFn;
343 buttonFn nextButtonFn;
346 const StateMachineEntry &_getStateMachineEntry(
int step)
const;
347 void _advanceState();
348 void _setupCurrentState();
349 void _inputCenterWaitBegin(
StickFunction stickFunction,
int channel,
int value);
350 void _inputStickDetect(
StickFunction stickFunction,
int channel,
int value);
351 void _inputStickMin(
StickFunction stickFunction,
int channel,
int value);
352 void _inputCenterWait(
StickFunction stickFunction,
int channel,
int value);
353 void _inputSwitchMinMax(
StickFunction stickFunction,
int channel,
int value);
354 void _applyOneSidedCalibration();
355 void _saveCalibrationValues();
356 void _saveAllTrims();
357 bool _stickSettleComplete(
int value);
358 void _startCalibration();
359 void _stopCalibration();
360 void _saveCurrentRawValues();
361 void _loadCalibrationUISettings();
362 void _saveCalibrationUISettings();
366 int _adjustChannelRawValue(
const ChannelInfo& info,
int rawValue)
const;
367 bool _isOneSidedCalibrationStep(
int step)
const;
369 int _currentStep = -1;
370 int _transmitterMode = 2;
374 rcCalStateChannelWait,
378 rcCalStateCenterThrottle,
379 rcCalStateDetectInversion,
387 int _stickDetectChannel = 0;
388 int _stickDetectValue = 0;
389 bool _stickDetectSettleStarted =
false;
390 QElapsedTimer _stickDetectSettleElapsed;
392 QQuickItem *_statusText =
nullptr;
393 QQuickItem *_cancelButton =
nullptr;
394 QQuickItem *_nextButton =
nullptr;
396 QList<int> _stickDisplayPositions;
397 bool _centeredThrottle =
false;
398 bool _joystickMode =
false;
399 bool _calibrating =
false;
400 bool _singleStickDisplay =
false;
401 QMap<StateMachineStepFunction, const char*> _stepFunctionToMsgStringMap;
402 QMap<StateMachineStepFunction, QMap<int, BothSticksDisplayPositions>> _bothStickDisplayPositionThrottleCenteredMap;
403 QMap<StateMachineStepFunction, QMap<int, BothSticksDisplayPositions>> _bothStickDisplayPositionThrottleDownMap;
405 QList<StateMachineEntry> _stateMachine;
407 static constexpr int _updateInterval = 150;
409 static constexpr const char *_settingsGroup =
"RadioCalibration";
410 static constexpr const char *_settingsKeyTransmitterMode =
"TransmitterMode";
413 static constexpr StickDisplayPosition _stickDisplayPositionCentered = {0, 0};
414 static constexpr StickDisplayPosition _stickDisplayPositionXCenteredYDown = {0, -1};
415 static constexpr StickDisplayPosition _stickDisplayPositionXCenteredYUp = {0, 1};
416 static constexpr StickDisplayPosition _stickDisplayPositionXLeftYCentered = {-1, 0};
417 static constexpr StickDisplayPosition _stickDisplayPositionXRightYCentered = { 1, 0};
418 static constexpr StickDisplayPosition _stickDisplayPositionXLeftYDown = {-1, -1};
419 static constexpr StickDisplayPosition _stickDisplayPositionXRightYDown = { 1, -1};
Used for handling missing Facts from C++ code.
Abstract base class for calibrating RC and Joystick controller.
void pitchDeadbandChanged(int deadband)
void additionalAxis2DeadbandChanged(int deadband)
QString _stickFunctionToString(StickFunction stickFunction)
void pitchChannelReversedChanged(bool reversed)
bool additionalAxis4ChannelReversed()
int _calValidMinValue
Largest valid minimum channel range value.
void joystickModeChanged(bool joystickMode)
void additionalAxis4EnabledChanged(bool enabled)
void _validateAndAdjustCalibrationValues()
void pitchExtensionDeadbandChanged(int deadband)
void rollExtensionChannelReversedChanged(bool reversed)
void channelCountChanged(int channelCount)
void rollExtensionEnabledChanged(bool enabled)
void yawDeadbandChanged(int deadband)
void throttleDeadbandChanged(int deadband)
static constexpr int _chanMinimum
Minimum numner of channels required to run.
bool pitchChannelMapped()
void pitchExtensionChannelReversedChanged(bool reversed)
bool pitchChannelReversed()
int adjustedAdditionalAxis4ChannelValue()
bool additionalAxis1Enabled()
bool additionalAxis1ChannelReversed()
bool additionalAxis4ChannelMapped()
bool rollExtensionChannelMapped()
bool additionalAxis6ChannelMapped()
int _calCenterPoint
Center point for calibration.
void additionalAxis4ChannelMappedChanged(bool mapped)
StickFunction
These identify the various controls functions. They are also used as indices into the _rgFunctioInfo ...
@ stickFunctionAdditionalAxis6
@ stickFunctionRollExtension
@ stickFunctionAdditionalAxis1
@ stickFunctionAdditionalAxis4
@ stickFunctionAdditionalAxis2
@ stickFunctionAdditionalAxis3
@ stickFunctionAdditionalAxis5
@ stickFunctionPitchExtension
int _calMoveDelta
Amount of delta past center which is considered stick movement.
int additionalAxis4Deadband()
void setJoystickMode(bool joystickMode)
Q_INVOKABLE void nextButtonClicked()
void singleStickDisplayChanged(bool singleStickDisplay)
void oneSidedButtonVisibleChanged(bool visible)
int adjustedAdditionalAxis2ChannelValue()
void additionalAxis1ChannelMappedChanged(bool mapped)
void adjustedThrottleChannelValueChanged(int rcValue)
void adjustedAdditionalAxis4ChannelValueChanged(int rcValue)
void additionalAxis5ChannelReversedChanged(bool reversed)
void _resetInternalCalibrationValues()
Resets internal calibration values to their initial state in preparation for a new calibration sequen...
bool oneSidedButtonVisible() const
bool pitchExtensionChannelMapped()
void setTransmitterMode(int mode)
int adjustedAdditionalAxis5ChannelValue()
void additionalAxis3DeadbandChanged(int deadband)
void additionalAxis5ChannelMappedChanged(bool mapped)
static constexpr int _chanMax
A set of information associated with a radio channel.
bool additionalAxis4Enabled()
bool joystickMode() const
int _calRoughCenterDelta
Delta around center point which is considered to be roughly centered.
int adjustedThrottleChannelValue()
int additionalAxis1Deadband()
void rollChannelMappedChanged(bool mapped)
void additionalAxis6ChannelMappedChanged(bool mapped)
int _stickDetectSettleMSecs
Time in ms stick must be stable before detection completes.
int adjustedAdditionalAxis6ChannelValue()
int rollExtensionDeadband()
int adjustedYawChannelValue()
bool throttleChannelReversed()
void additionalAxis2ChannelMappedChanged(bool mapped)
int additionalAxis3Deadband()
void additionalAxis6DeadbandChanged(int deadband)
Q_INVOKABLE void oneSidedButtonClicked()
void rollExtensionDeadbandChanged(int deadband)
void additionalAxis1EnabledChanged(bool enabled)
QList< int > stickDisplayPositions() const
void additionalAxis2ChannelReversedChanged(bool reversed)
void yawChannelReversedChanged(bool reversed)
bool centeredThrottle() const
bool additionalAxis5ChannelReversed()
void rollExtensionChannelMappedChanged(bool mapped)
void _clampedChannelValuesChanged(QVector< int > channelValues)
bool additionalAxis3Enabled()
bool additionalAxis5ChannelMapped()
int adjustedRollChannelValue()
void adjustedAdditionalAxis6ChannelValueChanged(int rcValue)
void adjustedRollChannelValueChanged(int rcValue)
void rollDeadbandChanged(int deadband)
bool additionalAxis3ChannelReversed()
bool additionalAxis2ChannelMapped()
void pitchExtensionEnabledChanged(bool enabled)
void adjustedYawChannelValueChanged(int rcValue)
virtual bool _stickFunctionEnabled(StickFunction stickFunction)
Returns true if the stick function is enabled.
bool additionalAxis3ChannelMapped()
void setCenteredThrottle(bool centered)
bool pitchExtensionChannelReversed()
int adjustedAdditionalAxis1ChannelValue()
int additionalAxis2Deadband()
void adjustedAdditionalAxis2ChannelValueChanged(int rcValue)
void additionalAxis3EnabledChanged(bool enabled)
bool additionalAxis2ChannelReversed()
virtual Q_INVOKABLE void start()
void additionalAxis4ChannelReversedChanged(bool reversed)
int transmitterMode() const
void additionalAxis4DeadbandChanged(int deadband)
void additionalAxis6ChannelReversedChanged(bool reversed)
Q_INVOKABLE void cancelButtonClicked()
void adjustedPitchChannelValueChanged(int rcValue)
int _calValidMaxValue
Smallest valid maximum channel range value.
int _calDefaultMinValue
Default value for Min if not set.
void pitchChannelMappedChanged(bool mapped)
bool rollExtensionChannelReversed()
bool throttleChannelMapped()
void additionalAxis3ChannelReversedChanged(bool reversed)
int adjustedRollExtensionChannelValue()
int _calSettleDelta
Amount of delta which is considered no stick movement.
void additionalAxis5DeadbandChanged(int deadband)
int adjustedAdditionalAxis3ChannelValue()
bool additionalAxis6ChannelReversed()
int additionalAxis5Deadband()
ChannelInfo _rgChannelInfo[_chanMax]
Information associated with each rc channel.
void additionalAxis1DeadbandChanged(int deadband)
void adjustedAdditionalAxis5ChannelValueChanged(int rcValue)
Q_INVOKABLE void copyTrims()
bool rollExtensionEnabled()
void additionalAxis1ChannelReversedChanged(bool reversed)
void calibratingChanged(bool calibrating)
void adjustedAdditionalAxis3ChannelValueChanged(int rcValue)
bool additionalAxis1ChannelMapped()
void rawChannelValueChanged(int channel, int value)
void adjustedRollExtensionChannelValueChanged(int rcValue)
void stickDisplayPositionsChanged()
void throttleChannelMappedChanged(bool mapped)
int _rgFunctionChannelMapping[stickFunctionMax]
Maps from StickFunction to channel index. _chanMax indicates channel not set for this function.
bool yawChannelReversed()
void additionalAxis6EnabledChanged(bool enabled)
void transmitterModeChanged()
int pitchExtensionDeadband()
int adjustedPitchExtensionChannelValue()
int _chanCount
Number of actual rc channels available.
void additionalAxis5EnabledChanged(bool enabled)
void rollChannelReversedChanged(bool reversed)
int _calDefaultMaxValue
Default value for Max if not set.
void centeredThrottleChanged(bool centeredThrottle)
void _signalAllAttitudeValueChanges()
bool pitchExtensionEnabled()
bool additionalAxis2Enabled()
bool additionalAxis6Enabled()
void throttleChannelReversedChanged(bool reversed)
void _rawChannelValuesChanged(QVector< int > channelValues)
void pitchExtensionChannelMappedChanged(bool mapped)
void additionalAxis2EnabledChanged(bool enabled)
bool rollChannelReversed()
void yawChannelMappedChanged(bool mapped)
int additionalAxis6Deadband()
~RemoteControlCalibrationController()
void calibrationCompleted()
void additionalAxis3ChannelMappedChanged(bool mapped)
void adjustedPitchExtensionChannelValueChanged(int rcValue)
bool singleStickDisplay() const
int adjustedPitchChannelValue()
void adjustedAdditionalAxis1ChannelValueChanged(int rcValue)
bool additionalAxis5Enabled()
static constexpr uint8_t maxRcChannels
int deadband
deadband around center
int channelTrim
Trim position (usually center for sticks)
enum StickFunction stickFunction
Function mapped to this channel, stickFunctionMax for none.