9#include <QtCore/QSettings>
20 _calDefaultMinValue = -32768;
21 _calDefaultMaxValue = 32767;
22 _calRoughCenterDelta = 700;
23 _calMoveDelta = 32768/2;
24 _calSettleDelta = 1000;
25 _stickDetectSettleMSecs = 300;
27 int valueRange = _calDefaultMaxValue - _calDefaultMinValue;
28 _calValidMinValue = _calDefaultMinValue + (valueRange * 0.3f);
29 _calValidMaxValue = _calDefaultMaxValue - (valueRange * 0.3f);
35 _joystick->_stopPollingForConfiguration();
42 qCWarning(JoystickConfigControllerLog) <<
"No joystick set!";
46 qCDebug(JoystickConfigControllerLog) <<
"Starting joystick configuration for joystick:" << _joystick->
name();
48 _joystick->_startPollingForConfiguration();
51void JoystickConfigController::_setJoystick(
Joystick* joystick)
54 qCWarning(JoystickConfigControllerLog) <<
"Cannot set joystick: null joystick";
58 qCWarning(JoystickConfigControllerLog) <<
"Joystick should only be set a single time";
63 _readStoredCalibrationValues();
68 emit pitchExtensionEnabledChanged(pitchExtensionEnabled());
71 emit rollExtensionEnabledChanged(rollExtensionEnabled());
74 emit additionalAxis1EnabledChanged(additionalAxis1Enabled());
77 emit additionalAxis2EnabledChanged(additionalAxis2Enabled());
80 emit additionalAxis3EnabledChanged(additionalAxis3Enabled());
83 emit additionalAxis4EnabledChanged(additionalAxis4Enabled());
86 emit additionalAxis5EnabledChanged(additionalAxis5Enabled());
89 emit additionalAxis6EnabledChanged(additionalAxis6Enabled());
95void JoystickConfigController::_saveStoredCalibrationValues()
98 qCWarning(JoystickConfigControllerLog) <<
"Internal Error: No joystick to save calibration for";
102 qCDebug(JoystickConfigControllerLog) << _joystick->
name();
106 _joystick->
settings()->calibrated()->setRawValue(
true);
109 for (
int chan = 0; chan < _joystick->
axisCount(); chan++) {
113 qCDebug(JoystickConfigControllerLog)
116 <<
"min:" << channelInfo->channelMin
117 <<
"max:" << channelInfo->channelMax
118 <<
"trim:" << channelInfo->channelTrim
119 <<
"reversed:" << channelInfo->channelReversed
120 <<
"deadband:" << channelInfo->
deadband;
122 joystickAxisInfo.
center = channelInfo->channelTrim;
123 joystickAxisInfo.
min = channelInfo->channelMin;
124 joystickAxisInfo.
max = channelInfo->channelMax;
125 joystickAxisInfo.
reversed = channelInfo->channelReversed;
126 joystickAxisInfo.
deadband = channelInfo->deadband;
132 _joystick->_saveFromCalibrationDataIntoSettings();
135 _readStoredCalibrationValues();
138void JoystickConfigController::_readStoredCalibrationValues()
141 qCWarning(JoystickConfigControllerLog) <<
"Internal Error: No joystick to read calibration for";
148 for (
int i = 0; i <
_chanMax; i++) {
156 for (
int i = 0; i < _joystick->
axisCount(); ++i) {
160 info->channelTrim = calibration.
center;
161 info->channelMin = calibration.
min;
162 info->channelMax = calibration.
max;
163 info->channelReversed = calibration.
reversed;
164 info->deadband = calibration.
deadband;
168 auto stickFunction =
static_cast<StickFunction>(stickFunctionInt);
170 if (functionChannel >= 0 && functionChannel <
_chanMax) {
180bool JoystickConfigController::_stickFunctionEnabled(StickFunction stickFunction)
186 switch (stickFunction) {
188 return _joystick->
settings()->enableManualControlRollExtension()->rawValue().toBool();
190 return _joystick->
settings()->enableManualControlPitchExtension()->rawValue().toBool();
192 return _joystick->
settings()->enableAdditionalAxis1()->rawValue().toBool();
194 return _joystick->
settings()->enableAdditionalAxis2()->rawValue().toBool();
196 return _joystick->
settings()->enableAdditionalAxis3()->rawValue().toBool();
198 return _joystick->
settings()->enableAdditionalAxis4()->rawValue().toBool();
200 return _joystick->
settings()->enableAdditionalAxis5()->rawValue().toBool();
202 return _joystick->
settings()->enableAdditionalAxis6()->rawValue().toBool();
209 qCWarning(JoystickConfigControllerLog) <<
"Invalid stick function requested: stickFunctionMax";
#define QGC_LOGGING_CATEGORY(name, categoryStr)
void rawValueChanged(const QVariant &value)
Joystick * joystick() const
~JoystickConfigController()
void joystickChanged(Joystick *joystick)
void start() final override
void setFunctionForChannel(RemoteControlCalibrationController::StickFunction stickFunction, int channel)
int getChannelForFunction(RemoteControlCalibrationController::StickFunction stickFunction) const
Joystick::AxisCalibration_t getAxisCalibration(int axis) const
void setAxisCalibration(int axis, const AxisCalibration_t &calibration)
JoystickSettings * settings()
void rawChannelValuesChanged(QVector< int > channelValues)
Signalled during PollingForConfiguration.
Abstract base class for calibrating RC and Joystick controller.
QString _stickFunctionToString(StickFunction stickFunction)
void _validateAndAdjustCalibrationValues()
StickFunction
These identify the various controls functions. They are also used as indices into the _rgFunctioInfo ...
@ stickFunctionAdditionalAxis6
@ stickFunctionRollExtension
@ stickFunctionAdditionalAxis1
@ stickFunctionAdditionalAxis4
@ stickFunctionAdditionalAxis2
@ stickFunctionAdditionalAxis3
@ stickFunctionAdditionalAxis5
@ stickFunctionPitchExtension
void setTransmitterMode(int mode)
static constexpr int _chanMax
A set of information associated with a radio channel.
virtual bool _stickFunctionEnabled(StickFunction stickFunction)
Returns true if the stick function is enabled.
virtual Q_INVOKABLE void start()
int transmitterMode() const
ChannelInfo _rgChannelInfo[_chanMax]
Information associated with each rc channel.
int _rgFunctionChannelMapping[stickFunctionMax]
Maps from StickFunction to channel index. _chanMax indicates channel not set for this function.
void _signalAllAttitudeValueChanges()
void _rawChannelValuesChanged(QVector< int > channelValues)
enum StickFunction stickFunction
Function mapped to this channel, stickFunctionMax for none.