From 5aae7964bcc9da2ce3acd118fe5be02ca1946011 Mon Sep 17 00:00:00 2001 From: TheNain38 Date: Sun, 2 Jul 2017 20:44:49 +0200 Subject: [PATCH] Add possibility to invert bumpers and triggers --- main.cpp | 76 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 66 insertions(+), 10 deletions(-) diff --git a/main.cpp b/main.cpp index ba3089d..98868cc 100644 --- a/main.cpp +++ b/main.cpp @@ -41,6 +41,7 @@ QString ipAddress; int yAxisMultiplier = 1; bool abInverse = false; bool xyInverse = false; +bool rlr2l2Inverse = false; bool touchScreenPressed; QPoint touchScreenPosition; @@ -49,22 +50,29 @@ QSettings settings("TuxSH", "InputRedirectionClient-Qt"); void sendFrame(void) { + // 0-2 static const QGamepadManager::GamepadButton hidButtonsAB[] = { QGamepadManager::ButtonA, QGamepadManager::ButtonB, }; - - static const QGamepadManager::GamepadButton hidButtonsMiddle[] = { + // 2-4 + static const QGamepadManager::GamepadButton hidButtonsSelectStart[] = { QGamepadManager::ButtonSelect, QGamepadManager::ButtonStart, + }; + // 4-8 + static const QGamepadManager::GamepadButton hidButtonsDPad[] = { QGamepadManager::ButtonRight, QGamepadManager::ButtonLeft, QGamepadManager::ButtonUp, QGamepadManager::ButtonDown, + }; + // 8-10 + static const QGamepadManager::GamepadButton hidButtonsRL[] = { QGamepadManager::ButtonR1, QGamepadManager::ButtonL1, }; - + // 10-12 static const QGamepadManager::GamepadButton hidButtonsXY[] = { QGamepadManager::ButtonX, QGamepadManager::ButtonY, @@ -99,12 +107,32 @@ void sendFrame(void) } } - for(u32 i = 2; i < 10; i++) + for(u32 i = 2; i < 4; i++) { - if(buttons & (1 << hidButtonsMiddle[i-2])) + if(buttons & (1 << hidButtonsSelectStart[i-2])) hidPad &= ~(1 << i); } + for(u32 i = 4; i < 8; i++) + { + if(buttons & (1 << hidButtonsDPad[i-4])) + hidPad &= ~(1 << i); + } + + if(!rlr2l2Inverse) { + for(u32 i = 8; i < 10; i++) + { + if(buttons & (1 << hidButtonsRL[i-8])) + hidPad &= ~(1 << i); + } + } else { + for(u32 i = 8; i < 10; i++) + { + if(buttons & (1 << irButtons[i-8])) + hidPad &= ~(1 << i); + } + } + if(!xyInverse) { for(u32 i = 10; i < 12; i++) @@ -123,10 +151,18 @@ void sendFrame(void) } u32 irButtonsState = 0; - for(u32 i = 0; i < 2; i++) - { - if(buttons & (1 << irButtons[i])) - irButtonsState |= 1 << (i + 1); + if(!rlr2l2Inverse) { + for(u32 i = 0; i < 2; i++) + { + if(buttons & (1 << irButtons[i])) + irButtonsState |= 1 << (i + 1); + } + } else { + for(u32 i = 0; i < 2; i++) + { + if(buttons & (1 << hidButtonsRL[i])) + irButtonsState |= 1 << (i + 1); + } } u32 specialButtonsState = 0; @@ -288,7 +324,7 @@ class Widget : public QWidget QVBoxLayout *layout; QFormLayout *formLayout; QLineEdit *addrLineEdit; - QCheckBox *invertYCheckbox, *invertABCheckbox, *invertXYCheckbox; + QCheckBox *invertYCheckbox, *invertABCheckbox, *invertXYCheckbox, *invertRLR2L2Checkbox; QPushButton *homeButton, *powerButton, *longPowerButton; TouchScreen *touchScreen; public: @@ -302,12 +338,14 @@ class Widget : public QWidget invertYCheckbox = new QCheckBox(this); invertABCheckbox = new QCheckBox(this); invertXYCheckbox = new QCheckBox(this); + invertRLR2L2Checkbox = new QCheckBox(this); formLayout = new QFormLayout; formLayout->addRow(tr("IP &address"), addrLineEdit); formLayout->addRow(tr("&Invert Y axis"), invertYCheckbox); formLayout->addRow(tr("Invert A<->&B"), invertABCheckbox); formLayout->addRow(tr("Invert X<->&Y"), invertXYCheckbox); + formLayout->addRow(tr("Invert Bumpers<->&Triggers"), invertRLR2L2Checkbox); homeButton = new QPushButton(tr("&HOME"), this); powerButton = new QPushButton(tr("&POWER"), this); @@ -376,6 +414,23 @@ class Widget : public QWidget } }); + connect(invertRLR2L2Checkbox, &QCheckBox::stateChanged, this, + [](int state) + { + switch(state) + { + case Qt::Unchecked: + rlr2l2Inverse = false; + settings.setValue("invertRLR2L2", false); + break; + case Qt::Checked: + rlr2l2Inverse = true; + settings.setValue("invertRLR2L2", true); + break; + default: break; + } + }); + connect(homeButton, &QPushButton::pressed, this, [](void) { @@ -425,6 +480,7 @@ class Widget : public QWidget invertYCheckbox->setChecked(settings.value("invertY", false).toBool()); invertABCheckbox->setChecked(settings.value("invertAB", false).toBool()); invertXYCheckbox->setChecked(settings.value("invertXY", false).toBool()); + invertRLR2L2Checkbox->setChecked(settings.value("invertRLR2L2", false).toBool()); } void show(void)