diff --git a/ground/src/plugins/gcscontrol/gcscontrolgadget.cpp b/ground/src/plugins/gcscontrol/gcscontrolgadget.cpp index 3a156f307..2c67db21a 100644 --- a/ground/src/plugins/gcscontrol/gcscontrolgadget.cpp +++ b/ground/src/plugins/gcscontrol/gcscontrolgadget.cpp @@ -75,6 +75,8 @@ void GCSControlGadget::loadConfiguration(IUAVGadgetConfiguration* config) buttonSettings[i].ActionID=GCSControlConfig->getbuttonSettings(i).ActionID; buttonSettings[i].FunctionID=GCSControlConfig->getbuttonSettings(i).FunctionID; buttonSettings[i].Amount=GCSControlConfig->getbuttonSettings(i).Amount; + buttonSettings[i].Amount=GCSControlConfig->getbuttonSettings(i).Amount; + channelReverse[i]=GCSControlConfig->getChannelsReverse().at(i); } } @@ -251,7 +253,6 @@ void GCSControlGadget::buttonState(ButtonNumber number, bool pressed) break; } - obj->updated(); } //buttonSettings[number].ActionID NIDT @@ -273,7 +274,14 @@ void GCSControlGadget::axesValues(QListInt16 values) double yValue = (yawChannel > -1) ? values[yawChannel] : 0; double tValue = (throttleChannel > -1) ? values[throttleChannel] : 0; double max = 32767; - if(joystickTime.elapsed() > JOYSTICK_UPDATE_RATE) { + + if (rollChannel > -1) if(channelReverse[rollChannel]==true)rValue = -rValue; + if (pitchChannel > -1) if(channelReverse[pitchChannel]==true)pValue = -pValue; + if (yawChannel > -1) if(channelReverse[yawChannel]==true)yValue = -yValue; + if (throttleChannel > -1) if(channelReverse[throttleChannel]==true)tValue = -tValue; + + + if(joystickTime.elapsed() > JOYSTICK_UPDATE_RATE) { joystickTime.restart(); // Remap RPYT to left X/Y and right X/Y depending on mode // Mode 1: LeftX = Yaw, LeftY = Pitch, RightX = Roll, RightY = Throttle diff --git a/ground/src/plugins/gcscontrol/gcscontrolgadget.h b/ground/src/plugins/gcscontrol/gcscontrolgadget.h index cb77502ff..dc1da7846 100644 --- a/ground/src/plugins/gcscontrol/gcscontrolgadget.h +++ b/ground/src/plugins/gcscontrol/gcscontrolgadget.h @@ -71,6 +71,7 @@ private: buttonSettingsStruct buttonSettings[8]; double bound(double input); double wrap(double input); + bool channelReverse[8]; signals: void sticksChangedRemotely(double leftX, double leftY, double rightX, double rightY); diff --git a/ground/src/plugins/gcscontrol/gcscontrolgadgetconfiguration.cpp b/ground/src/plugins/gcscontrol/gcscontrolgadgetconfiguration.cpp index 7a3a3e107..24a72e62a 100644 --- a/ground/src/plugins/gcscontrol/gcscontrolgadgetconfiguration.cpp +++ b/ground/src/plugins/gcscontrol/gcscontrolgadgetconfiguration.cpp @@ -44,6 +44,7 @@ GCSControlGadgetConfiguration::GCSControlGadgetConfiguration(QString classId, QS buttonSettings[i].ActionID=0; buttonSettings[i].FunctionID=0; buttonSettings[i].Amount=0; + channelReverse[i] = 0; } //if a saved configuration exists load it if(qSettings != 0) { @@ -59,6 +60,7 @@ GCSControlGadgetConfiguration::GCSControlGadgetConfiguration(QString classId, QS buttonSettings[i].ActionID = qSettings->value(QString().sprintf("button%dAction",i)).toInt(); buttonSettings[i].FunctionID = qSettings->value(QString().sprintf("button%dFunction",i)).toInt(); buttonSettings[i].Amount = qSettings->value(QString().sprintf("button%dAmount",i)).toDouble(); + channelReverse[i] = qSettings->value(QString().sprintf("channel%dReverse",i)).toBool(); } } @@ -77,7 +79,14 @@ QList GCSControlGadgetConfiguration::getChannelsMapping() ql << rollChannel << pitchChannel << yawChannel << throttleChannel; return ql; } +QList GCSControlGadgetConfiguration::getChannelsReverse() +{ + QList ql; + int i; + for (i=0;i<8;i++)ql << channelReverse[i]; + return ql; +} /** * Clones a configuration. @@ -93,6 +102,16 @@ IUAVGadgetConfiguration *GCSControlGadgetConfiguration::clone() m->yawChannel = yawChannel; m->throttleChannel = throttleChannel; + int i; + for (i=0;i<8;i++) + { + m->buttonSettings[i].ActionID = buttonSettings[i].ActionID; + m->buttonSettings[i].FunctionID = buttonSettings[i].FunctionID; + m->buttonSettings[i].Amount = buttonSettings[i].Amount; + m->channelReverse[i] = channelReverse[i]; + } + + return m; } @@ -113,6 +132,7 @@ void GCSControlGadgetConfiguration::saveConfig(QSettings* settings) const { settings->setValue(QString().sprintf("button%dAction",i), buttonSettings[i].ActionID); settings->setValue(QString().sprintf("button%dFunction",i), buttonSettings[i].FunctionID); settings->setValue(QString().sprintf("button%dAmount",i), buttonSettings[i].Amount); + settings->setValue(QString().sprintf("channel%dReverse",i), channelReverse[i]); } } diff --git a/ground/src/plugins/gcscontrol/gcscontrolgadgetconfiguration.h b/ground/src/plugins/gcscontrol/gcscontrolgadgetconfiguration.h index 971b8387f..c3ca4c6d3 100644 --- a/ground/src/plugins/gcscontrol/gcscontrolgadgetconfiguration.h +++ b/ground/src/plugins/gcscontrol/gcscontrolgadgetconfiguration.h @@ -51,11 +51,13 @@ class GCSControlGadgetConfiguration : public IUAVGadgetConfiguration void setRPYTchannels(int roll, int pitch, int yaw, int throttle); int getControlsMode() { return controlsMode; } QList getChannelsMapping(); + QList getChannelsReverse(); buttonSettingsStruct getbuttonSettings(int i){return buttonSettings[i];} void setbuttonSettingsAction(int i, int ActionID ){buttonSettings[i].ActionID=ActionID;return;} void setbuttonSettingsFunction(int i, int FunctionID ){buttonSettings[i].FunctionID=FunctionID;return;} void setbuttonSettingsAmount(int i, double Amount ){buttonSettings[i].Amount=Amount;return;} + void setChannelReverse(int i, bool Reverse ){channelReverse[i]=Reverse;return;} void saveConfig(QSettings* settings) const; @@ -69,6 +71,7 @@ class GCSControlGadgetConfiguration : public IUAVGadgetConfiguration int yawChannel; int throttleChannel; buttonSettingsStruct buttonSettings[8]; + bool channelReverse[8]; }; diff --git a/ground/src/plugins/gcscontrol/gcscontrolgadgetoptionspage.cpp b/ground/src/plugins/gcscontrol/gcscontrolgadgetoptionspage.cpp index 13d84d060..6e4f6c938 100644 --- a/ground/src/plugins/gcscontrol/gcscontrolgadgetoptionspage.cpp +++ b/ground/src/plugins/gcscontrol/gcscontrolgadgetoptionspage.cpp @@ -86,6 +86,7 @@ void GCSControlGadgetOptionsPage::axesValues(QListInt16 values) int i=0; foreach (qint16 value, values) { if (i>7) break; // We only support 7 channels + if (chRevList.at(i)->isChecked()==1)value = 65535 - value; if (pbList.at(i)->minimum() > value) pbList.at(i)->setMinimum(value); if (pbList.at(i)->maximum() < value) @@ -106,7 +107,8 @@ QWidget *GCSControlGadgetOptionsPage::createPage(QWidget *parent) - QList chList; + //QList chList; + chList.clear(); chList << options_page->channel0 << options_page->channel1 << options_page->channel2 << options_page->channel3 << options_page->channel4 << options_page->channel5 << @@ -116,9 +118,15 @@ QWidget *GCSControlGadgetOptionsPage::createPage(QWidget *parent) foreach (QComboBox* qb, chList) { qb->addItems(chOptions); } + //QList chRevList; + chRevList.clear(); + chRevList << options_page->revCheckBox_1 << options_page->revCheckBox_2 << + options_page->revCheckBox_3 << options_page->revCheckBox_4 << + options_page->revCheckBox_5 << options_page->revCheckBox_6 << + options_page->revCheckBox_7 << options_page->revCheckBox_8; - - QList buttonFunctionList; + //QList buttonFunctionList; + buttonFunctionList.clear(); buttonFunctionList << options_page->buttonFunction0 << options_page->buttonFunction1 << options_page->buttonFunction2 << options_page->buttonFunction3 << options_page->buttonFunction4 << options_page->buttonFunction5 << @@ -128,7 +136,8 @@ QWidget *GCSControlGadgetOptionsPage::createPage(QWidget *parent) foreach (QComboBox* qb, buttonFunctionList) { qb->addItems(buttonOptions); } - QList buttonActionList; + //QList buttonActionList; + buttonActionList.clear(); buttonActionList << options_page->buttonAction0 << options_page->buttonAction1 << options_page->buttonAction2 << options_page->buttonAction3 << options_page->buttonAction4 << options_page->buttonAction5 << @@ -138,11 +147,18 @@ QWidget *GCSControlGadgetOptionsPage::createPage(QWidget *parent) foreach (QComboBox* qb, buttonActionList) { qb->addItems(buttonActionOptions); } - QList buttonValueList; + //QList buttonValueList; + buttonValueList.clear(); buttonValueList << options_page->buttonAmount0 << options_page->buttonAmount1 << options_page->buttonAmount2 << options_page->buttonAmount3 << options_page->buttonAmount4 << options_page->buttonAmount5 << options_page->buttonAmount6 << options_page->buttonAmount7; + //QList buttonLabelList; + buttonLabelList.clear(); + buttonLabelList << options_page->buttonLabel0 << options_page->buttonLabel1 << + options_page->buttonLabel2 << options_page->buttonLabel3 << + options_page->buttonLabel4 << options_page->buttonLabel5 << + options_page->buttonLabel6 << options_page->buttonLabel7; for (i=0;i<8;i++) { @@ -178,6 +194,11 @@ QWidget *GCSControlGadgetOptionsPage::createPage(QWidget *parent) if (ql.at(i) > -1) chList.at(ql.at(i))->setCurrentIndex(i+1); } + QList qlChRev = m_config->getChannelsReverse(); + for (i=0; i<8; i++) + { + chRevList.at(i)->setChecked(qlChRev.at(i));; + } connect(sdlGamepad,SIGNAL(axesValues(QListInt16)),this,SLOT(axesValues(QListInt16))); connect(sdlGamepad,SIGNAL(buttonState(ButtonNumber,bool)),this,SLOT(buttonState(ButtonNumber,bool))); @@ -194,7 +215,7 @@ QWidget *GCSControlGadgetOptionsPage::createPage(QWidget *parent) void GCSControlGadgetOptionsPage::apply() { m_config->setControlsMode(options_page->controlsMode->currentIndex()+1); - QList chList; + /*QList chList; chList << options_page->channel0 << options_page->channel1 << options_page->channel2 << options_page->channel3 << options_page->channel4 << options_page->channel5 << @@ -214,7 +235,7 @@ void GCSControlGadgetOptionsPage::apply() options_page->buttonAmount2 << options_page->buttonAmount3 << options_page->buttonAmount4 << options_page->buttonAmount5 << options_page->buttonAmount6 << options_page->buttonAmount7; - +*/ int roll=-1 , pitch=-1, yaw=-1, throttle=-1; for (int i=0; isetbuttonSettingsAction(j,buttonActionList.at(j)->currentIndex()); m_config->setbuttonSettingsFunction(j,buttonFunctionList.at(j)->currentIndex()); m_config->setbuttonSettingsAmount(j,buttonValueList.at(j)->value()); + m_config->setChannelReverse(j,chRevList.at(j)->isChecked()); } } @@ -256,7 +278,7 @@ void GCSControlGadgetOptionsPage::finish() void GCSControlGadgetOptionsPage::updateButtonFunction() { int i; - QList buttonFunctionList; + /*QList buttonFunctionList; buttonFunctionList << options_page->buttonFunction0 << options_page->buttonFunction1 << options_page->buttonFunction2 << options_page->buttonFunction3 << options_page->buttonFunction4 << options_page->buttonFunction5 << @@ -276,7 +298,7 @@ void GCSControlGadgetOptionsPage::updateButtonFunction() options_page->buttonLabel2 << options_page->buttonLabel3 << options_page->buttonLabel4 << options_page->buttonLabel5 << options_page->buttonLabel6 << options_page->buttonLabel7; - +*/ for (i=0;i<8;i++) { if (buttonActionList.at(i)->currentText().compare("Does nothing")==0) @@ -307,7 +329,7 @@ void GCSControlGadgetOptionsPage::updateButtonAction(int controlID) { int i; QStringList buttonOptions; - QList buttonFunctionList; + /*QList buttonFunctionList; buttonFunctionList << options_page->buttonFunction0 << options_page->buttonFunction1 << options_page->buttonFunction2 << options_page->buttonFunction3 << options_page->buttonFunction4 << options_page->buttonFunction5 << @@ -327,7 +349,7 @@ void GCSControlGadgetOptionsPage::updateButtonAction(int controlID) options_page->buttonLabel2 << options_page->buttonLabel3 << options_page->buttonLabel4 << options_page->buttonLabel5 << options_page->buttonLabel6 << options_page->buttonLabel7; - +*/ //for (i=0;i<8;i++) i=controlID; { diff --git a/ground/src/plugins/gcscontrol/gcscontrolgadgetoptionspage.h b/ground/src/plugins/gcscontrol/gcscontrolgadgetoptionspage.h index eb5a1fbde..5355cd2fc 100644 --- a/ground/src/plugins/gcscontrol/gcscontrolgadgetoptionspage.h +++ b/ground/src/plugins/gcscontrol/gcscontrolgadgetoptionspage.h @@ -32,6 +32,10 @@ #include "gcscontrolplugin.h" #include "sdlgamepad/sdlgamepad.h" #include +#include +#include +#include +#include namespace Core { class IUAVGadgetConfiguration; @@ -61,6 +65,13 @@ private: GCSControlGadgetConfiguration *m_config; SDLGamepad *sdlGamepad; + QList chList; + QList chRevList; + QList buttonFunctionList; + QList buttonActionList; + QList buttonValueList; + QList buttonLabelList; + protected slots: // signals from joystick void gamepads(quint8 count); diff --git a/ground/src/plugins/gcscontrol/gcscontrolgadgetoptionspage.ui b/ground/src/plugins/gcscontrol/gcscontrolgadgetoptionspage.ui index f91bec459..6dee5ce9b 100644 --- a/ground/src/plugins/gcscontrol/gcscontrolgadgetoptionspage.ui +++ b/ground/src/plugins/gcscontrol/gcscontrolgadgetoptionspage.ui @@ -99,6 +99,33 @@ + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Available controllers + + + + + + + false + + + @@ -115,7 +142,7 @@ - Joystick + Joystick Axes @@ -127,14 +154,14 @@ - + Rev - + Rev @@ -218,42 +245,42 @@ - + Rev - + Rev - + Rev - + Rev - + Rev - + Rev @@ -270,39 +297,9 @@ - - - Audio - - - - 0 - - - - - Audio: soundcard-based PPM decoding for trainer port. Not implemented yet. - - - - - - - Qt::Vertical - - - - 20 - 276 - - - - - - - Buttons + Joystick Buttons @@ -979,6 +976,36 @@ + + + Audio + + + + 0 + + + + + Audio: soundcard-based PPM decoding for trainer port. Not implemented yet. + + + + + + + Qt::Vertical + + + + 20 + 276 + + + + + +