Commit a90073a1 authored by Don Gagne's avatar Don Gagne

Merge pull request #887 from DonLakeFlyer/RadioCal

Radio calibration fixes
parents c929d0e8 00709a4e
This diff is collapsed.
...@@ -83,6 +83,7 @@ private: ...@@ -83,6 +83,7 @@ private:
}; };
struct ChannelSettings { struct ChannelSettings {
int function;
int rcMin; int rcMin;
int rcMax; int rcMax;
int rcTrim; int rcTrim;
...@@ -122,13 +123,12 @@ private: ...@@ -122,13 +123,12 @@ private:
static const int _testTrimValue; static const int _testTrimValue;
static const int _testThrottleTrimValue; static const int _testThrottleTrimValue;
static const int _availableChannels = 8; ///< 8 channel RC Trasmitter static const int _availableChannels = 18; ///< Simulate 18 channel RC Transmitter
static const int _requiredChannels = 5; ///< Required channels are 0-4
static const int _minMaxChannels = _requiredChannels + 1; ///< Send min/max to channels 0-5
static const int _attitudeChannels = 4; ///< Attitude channels are 0-3
static const struct ChannelSettings _rgChannelSettingsPreValidate[_availableChannels]; static const struct ChannelSettings _rgChannelSettingsPreValidate[_availableChannels];
static const struct ChannelSettings _rgChannelSettingsPostValidate[PX4RCCalibration::_chanMax]; static const struct ChannelSettings _rgChannelSettingsPostValidate[PX4RCCalibration::_chanMax];
static const int _rgFunctionChannelMap[PX4RCCalibration::rcCalFunctionMax];
}; };
DECLARE_TEST(PX4RCCalibrationTest) DECLARE_TEST(PX4RCCalibrationTest)
......
...@@ -360,6 +360,7 @@ void PX4RCCalibration::_remoteControlChannelRawChanged(int chan, float fval) ...@@ -360,6 +360,7 @@ void PX4RCCalibration::_remoteControlChannelRawChanged(int chan, float fval)
// We always update raw values // We always update raw values
_rcRawValue[chan] = fval; _rcRawValue[chan] = fval;
//qDebug() << "Raw value" << chan << fval;
// Update state machine // Update state machine
switch (_rcCalState) { switch (_rcCalState) {
...@@ -392,7 +393,7 @@ void PX4RCCalibration::_remoteControlChannelRawChanged(int chan, float fval) ...@@ -392,7 +393,7 @@ void PX4RCCalibration::_remoteControlChannelRawChanged(int chan, float fval)
_updateView(); _updateView();
// Confirm found channel // Confirm found channel
QString msg = tr("Found %1 [Channel %2]").arg(_rgFunctionInfo[_rcCalStateCurrentChannel].functionName).arg(chan); QString msg = tr("Found %1 [Channel %2]").arg(_rgFunctionInfo[_rcCalStateCurrentChannel].functionName).arg(chan + 1);
_ui->rcCalFound->setText(msg); _ui->rcCalFound->setText(msg);
//qDebug() << msg; //qDebug() << msg;
_ui->rcCalTryAgain->setEnabled(true); _ui->rcCalTryAgain->setEnabled(true);
...@@ -429,11 +430,12 @@ void PX4RCCalibration::_remoteControlChannelRawChanged(int chan, float fval) ...@@ -429,11 +430,12 @@ void PX4RCCalibration::_remoteControlChannelRawChanged(int chan, float fval)
Q_ASSERT(_rcCalStateCurrentChannel >= 0 && _rcCalStateCurrentChannel < rcCalFunctionMax); Q_ASSERT(_rcCalStateCurrentChannel >= 0 && _rcCalStateCurrentChannel < rcCalFunctionMax);
if (chan == _rgFunctionChannelMapping[_rcCalStateCurrentChannel]) { if (chan == _rgFunctionChannelMapping[_rcCalStateCurrentChannel]) {
// If the channel moved considerably use it to determine inversion // If the channel moved considerably use it to determine inversion
//qDebug() << "Detect inversion" << chan << _rcValueSave[chan] << fval << _rcCalMoveDelta;
if (fabsf(_rcValueSave[chan] - fval) > _rcCalMoveDelta) { if (fabsf(_rcValueSave[chan] - fval) > _rcCalMoveDelta) {
// Request was made to move channel to a lower value. If value goes up the channel is reversed. // Request was made to move channel to a lower value. If value goes up the channel is reversed.
bool reversed = fval > _rcValueSave[chan]; bool reversed = fval > _rcValueSave[chan];
_rgChannelInfo[_rcCalStateCurrentChannel].reversed = reversed; _rgChannelInfo[chan].reversed = reversed;
_updateView(); _updateView();
// Confirm inversion detection // Confirm inversion detection
...@@ -510,7 +512,13 @@ void PX4RCCalibration::_updateView() ...@@ -510,7 +512,13 @@ void PX4RCCalibration::_updateView()
if (info->function == rcCalFunctionMax) { if (info->function == rcCalFunctionMax) {
name = tr("Channel %1").arg(oneBasedChannel); name = tr("Channel %1").arg(oneBasedChannel);
} else { } else {
name = tr("%1 [Channel %2]").arg(_rgFunctionInfo[info->function].functionName).arg(oneBasedChannel); QString label;
if (info->reversed) {
label = tr("%1 [Channel %2,Rev]");
} else {
label = tr("%1 [Channel %2]");
}
name = label.arg(_rgFunctionInfo[info->function].functionName).arg(oneBasedChannel);
} }
_rgRadioWidget[chan]->setTitle(name); _rgRadioWidget[chan]->setTitle(name);
} }
...@@ -650,6 +658,7 @@ void PX4RCCalibration::_rcCalBegin(void) ...@@ -650,6 +658,7 @@ void PX4RCCalibration::_rcCalBegin(void)
/// @brief Saves the current channel values, so that we can detect when the use moves an input. /// @brief Saves the current channel values, so that we can detect when the use moves an input.
void PX4RCCalibration::_rcCalSaveCurrentValues(void) void PX4RCCalibration::_rcCalSaveCurrentValues(void)
{ {
//qDebug() << "_rcCalSaveCurrentValues";
for (unsigned i = 0; i < _chanMax; i++) { for (unsigned i = 0; i < _chanMax; i++) {
_rcValueSave[i] = _rcRawValue[i]; _rcValueSave[i] = _rcRawValue[i];
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment