8#include <QtCore/QSettings>
19 _calDefaultMinValue = -32768;
20 _calDefaultMaxValue = 32767;
21 _calRoughCenterDelta = 700;
22 _calMoveDelta = 32768/2;
23 _calSettleDelta = 1000;
24 _stickDetectSettleMSecs = 300;
26 int valueRange = _calDefaultMaxValue - _calDefaultMinValue;
27 _calValidMinValue = _calDefaultMinValue + (valueRange * 0.3f);
28 _calValidMaxValue = _calDefaultMaxValue - (valueRange * 0.3f);
34 _joystick->_stopPollingForConfiguration();
41 qCWarning(JoystickConfigControllerLog) <<
"No joystick set!";
45 qCDebug(JoystickConfigControllerLog) <<
"Starting joystick configuration for joystick:" << _joystick->
name();
46 RemoteControlCalibrationController::start();
47 _joystick->_startPollingForConfiguration();
50void JoystickConfigController::_setJoystick(
Joystick* joystick)
53 qCWarning(JoystickConfigControllerLog) <<
"Cannot set joystick: null joystick";
57 qCWarning(JoystickConfigControllerLog) <<
"Joystick should only be set a single time";
62 _readStoredCalibrationValues();
67 emit pitchExtensionEnabledChanged(pitchExtensionEnabled());
68 emit anyExtensionEnabledChanged(anyExtensionEnabled());
71 emit rollExtensionEnabledChanged(rollExtensionEnabled());
72 emit anyExtensionEnabledChanged(anyExtensionEnabled());
75 emit aux1ExtensionEnabledChanged(aux1ExtensionEnabled());
76 emit anyExtensionEnabledChanged(anyExtensionEnabled());
79 emit aux2ExtensionEnabledChanged(aux2ExtensionEnabled());
80 emit anyExtensionEnabledChanged(anyExtensionEnabled());
83 emit aux3ExtensionEnabledChanged(aux3ExtensionEnabled());
84 emit anyExtensionEnabledChanged(anyExtensionEnabled());
87 emit aux4ExtensionEnabledChanged(aux4ExtensionEnabled());
88 emit anyExtensionEnabledChanged(anyExtensionEnabled());
91 emit aux5ExtensionEnabledChanged(aux5ExtensionEnabled());
92 emit anyExtensionEnabledChanged(anyExtensionEnabled());
95 emit aux6ExtensionEnabledChanged(aux6ExtensionEnabled());
96 emit anyExtensionEnabledChanged(anyExtensionEnabled());
102void JoystickConfigController::_saveStoredCalibrationValues()
105 qCWarning(JoystickConfigControllerLog) <<
"Internal Error: No joystick to save calibration for";
109 qCDebug(JoystickConfigControllerLog) << _joystick->
name();
116 for (
int chan = 0; chan < _joystick->
axisCount(); chan++) {
120 qCDebug(JoystickConfigControllerLog)
123 <<
"min:" << channelInfo->channelMin
124 <<
"max:" << channelInfo->channelMax
125 <<
"trim:" << channelInfo->channelTrim
126 <<
"reversed:" << channelInfo->channelReversed
127 <<
"deadband:" << channelInfo->
deadband;
129 joystickAxisInfo.
center = channelInfo->channelTrim;
130 joystickAxisInfo.
min = channelInfo->channelMin;
131 joystickAxisInfo.
max = channelInfo->channelMax;
132 joystickAxisInfo.
reversed = channelInfo->channelReversed;
133 joystickAxisInfo.
deadband = channelInfo->deadband;
139 _joystick->_saveFromCalibrationDataIntoSettings();
142 _readStoredCalibrationValues();
145void JoystickConfigController::_readStoredCalibrationValues()
148 qCWarning(JoystickConfigControllerLog) <<
"Internal Error: No joystick to read calibration for";
155 for (
int i = 0; i <
_chanMax; i++) {
159 for (
size_t i = 0; i < stickFunctionMax; i++) {
163 for (
int i = 0; i < _joystick->
axisCount(); ++i) {
167 info->channelTrim = calibration.
center;
168 info->channelMin = calibration.
min;
169 info->channelMax = calibration.
max;
170 info->channelReversed = calibration.
reversed;
171 info->deadband = calibration.
deadband;
175 auto stickFunction =
static_cast<StickFunction
>(stickFunctionInt);
177 if (functionChannel >= 0 && functionChannel <
_chanMax) {
187bool JoystickConfigController::_stickFunctionEnabled(StickFunction stickFunction)
193 switch (stickFunction) {
194 case stickFunctionRollExtension:
196 case stickFunctionPitchExtension:
198 case stickFunctionAux1Extension:
200 case stickFunctionAux2Extension:
202 case stickFunctionAux3Extension:
204 case stickFunctionAux4Extension:
206 case stickFunctionAux5Extension:
208 case stickFunctionAux6Extension:
210 case stickFunctionRoll:
211 case stickFunctionPitch:
212 case stickFunctionYaw:
213 case stickFunctionThrottle:
215 case stickFunctionMax:
216 qCWarning(JoystickConfigControllerLog) <<
"Invalid stick function requested: stickFunctionMax";
#define QGC_LOGGING_CATEGORY(name, categoryStr)
void rawValueChanged(const QVariant &value)
~JoystickConfigController()
void joystickChanged(Joystick *joystick)
Joystick *joystick READ joystick WRITE _setJoystick NOTIFY joystickChanged REQUIRED Joystick * joystick() const
void start() final override
Fact *enableManualControlAux2 READ enableManualControlAux2 CONSTANT Fact * enableManualControlAux2()
Fact *transmitterMode READ transmitterMode CONSTANT Fact * transmitterMode()
Fact *enableManualControlAux6 READ enableManualControlAux6 CONSTANT Fact * enableManualControlAux6()
Fact *calibrated READ calibrated CONSTANT Fact * calibrated()
Fact *enableManualControlRollExtension READ enableManualControlRollExtension CONSTANT Fact * enableManualControlRollExtension()
Fact *enableManualControlPitchExtension READ enableManualControlPitchExtension CONSTANT Fact * enableManualControlPitchExtension()
Fact *enableManualControlAux3 READ enableManualControlAux3 CONSTANT Fact * enableManualControlAux3()
Fact *enableManualControlAux4 READ enableManualControlAux4 CONSTANT Fact * enableManualControlAux4()
Fact *enableManualControlAux5 READ enableManualControlAux5 CONSTANT Fact * enableManualControlAux5()
Fact *enableManualControlAux1 READ enableManualControlAux1 CONSTANT Fact * enableManualControlAux1()
void setFunctionForChannel(RemoteControlCalibrationController::StickFunction stickFunction, int channel)
int getChannelForFunction(RemoteControlCalibrationController::StickFunction stickFunction) const
QString name READ name int axisCount
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 rawChannelValuesChanged(QVector< int > channelValues)
void _validateAndAdjustCalibrationValues()
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.
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()
enum StickFunction stickFunction
Function mapped to this channel, stickFunctionMax for none.