From 13ccbdcc3adac7c5d674a24e22bcb3f2f7761dd3 Mon Sep 17 00:00:00 2001 From: gbrown5 <30328308+gbrown5@users.noreply.github.com> Date: Thu, 20 Jul 2017 17:44:59 -0400 Subject: [PATCH 1/2] Add files via upload -Fixed program lags -Added configurable controls. See GamepadConfig.ini -Added ability to set a background/overaly image on the touchpad window so the user can better judge where to click. --- main.cpp | 208 +++++++++++++++++++++++++++---------------------------- 1 file changed, 104 insertions(+), 104 deletions(-) diff --git a/main.cpp b/main.cpp index ba3089d..5541e55 100644 --- a/main.cpp +++ b/main.cpp @@ -16,9 +16,13 @@ #include #include #include +#include #include #include #include +#include +#include +#include #include #include @@ -39,64 +43,99 @@ QGamepadManager::GamepadButtons buttons = 0; u32 interfaceButtons = 0; QString ipAddress; int yAxisMultiplier = 1; -bool abInverse = false; -bool xyInverse = false; bool touchScreenPressed; QPoint touchScreenPosition; QSettings settings("TuxSH", "InputRedirectionClient-Qt"); +QGamepadManager::GamepadButton getButton(QString dsBtn) +{ + QString gpPadBtn; + QVariant val; + QSettings settings("GamepadControls.ini", QSettings::IniFormat); + + val = settings.value(dsBtn); + gpPadBtn = val.toString(); + + QGamepadManager::GamepadButton btnConv; + + if(gpPadBtn == "360_A") btnConv = QGamepadManager::ButtonA; + else + if(gpPadBtn == "360_B") btnConv = QGamepadManager::ButtonB; + else + if(gpPadBtn == "360_X") btnConv = QGamepadManager::ButtonX; + else + if(gpPadBtn == "360_Y") btnConv = QGamepadManager::ButtonY; + else + if(gpPadBtn == "360_BACK") btnConv = QGamepadManager::ButtonSelect; + else + if(gpPadBtn == "360_START") btnConv = QGamepadManager::ButtonStart; + else + if(gpPadBtn == "360_D_UP") btnConv = QGamepadManager::ButtonUp; + else + if(gpPadBtn == "360_D_DOWN") btnConv = QGamepadManager::ButtonDown; + else + if(gpPadBtn == "360_D_LEFT") btnConv = QGamepadManager::ButtonLeft; + else + if(gpPadBtn == "360_D_RIGHT") btnConv = QGamepadManager::ButtonRight; + else + if(gpPadBtn == "360_R1") btnConv = QGamepadManager::ButtonR1; + else + if(gpPadBtn == "360_R2") btnConv = QGamepadManager::ButtonR2; + else + if(gpPadBtn == "360_R3") btnConv = QGamepadManager::ButtonR3; + else + if(gpPadBtn == "360_L1") btnConv = QGamepadManager::ButtonL1; + else + if(gpPadBtn == "360_L2") btnConv = QGamepadManager::ButtonL2; + else + if(gpPadBtn == "360_L3") btnConv = QGamepadManager::ButtonL3; + else + btnConv = QGamepadManager::ButtonGuide; + + return btnConv; +} + void sendFrame(void) { static const QGamepadManager::GamepadButton hidButtonsAB[] = { - QGamepadManager::ButtonA, - QGamepadManager::ButtonB, + getButton("Button/3DS_A"), //3ds_A + getButton("Button/3DS_B"), //3ds_B }; static const QGamepadManager::GamepadButton hidButtonsMiddle[] = { - QGamepadManager::ButtonSelect, - QGamepadManager::ButtonStart, - QGamepadManager::ButtonRight, - QGamepadManager::ButtonLeft, - QGamepadManager::ButtonUp, - QGamepadManager::ButtonDown, - QGamepadManager::ButtonR1, - QGamepadManager::ButtonL1, + getButton("Button/3DS_SELECT"), + getButton("Button/3DS_START"), + getButton("Button/3DS_D_RIGHT"), + getButton("Button/3DS_D_LEFT"), + getButton("Button/3DS_D_UP"), + getButton("Button/3DS_D_DOWN"), + getButton("Button/3DS_R"), + getButton("Button/3DS_L"), }; static const QGamepadManager::GamepadButton hidButtonsXY[] = { - QGamepadManager::ButtonX, - QGamepadManager::ButtonY, + getButton("Button/3DS_X"), + getButton("Button/3DS_Y"), }; static const QGamepadManager::GamepadButton irButtons[] = { - QGamepadManager::ButtonR2, - QGamepadManager::ButtonL2, + QGamepadManager::ButtonGuide, + QGamepadManager::ButtonGuide, }; static const QGamepadManager::GamepadButton speButtons[] = { - QGamepadManager::ButtonL3, - QGamepadManager::ButtonR3, - QGamepadManager::ButtonGuide, + getButton("Button/3DS_HOME"), + getButton("Button/3DS_POWER"), + getButton("Button/3DS_LPOWER"), }; u32 hidPad = 0xfff; - if(!abInverse) - { - for(u32 i = 0; i < 2; i++) - { - if(buttons & (1 << hidButtonsAB[i])) - hidPad &= ~(1 << i); - } - } - else + for(u32 i = 0; i < 2; i++) { - for(u32 i = 0; i < 2; i++) - { - if(buttons & (1 << hidButtonsAB[1-i])) + if(buttons & (1 << hidButtonsAB[i])) hidPad &= ~(1 << i); - } } for(u32 i = 2; i < 10; i++) @@ -105,22 +144,11 @@ void sendFrame(void) hidPad &= ~(1 << i); } - if(!xyInverse) - { - for(u32 i = 10; i < 12; i++) - { + for(u32 i = 10; i < 12; i++) + { if(buttons & (1 << hidButtonsXY[i-10])) hidPad &= ~(1 << i); - } - } - else - { - for(u32 i = 10; i < 12; i++) - { - if(buttons & (1 << hidButtonsXY[1-(i-10)])) - hidPad &= ~(1 << i); - } - } + } u32 irButtonsState = 0; for(u32 i = 0; i < 2; i++) @@ -177,6 +205,7 @@ void sendFrame(void) qToLittleEndian(cppState, (uchar *)ba.data() + 12); qToLittleEndian(specialButtonsState, (uchar *)ba.data() + 16); QUdpSocket().writeDatagram(ba, QHostAddress(ipAddress), 4950); + } struct GamepadMonitor : public QObject { @@ -227,11 +256,24 @@ struct GamepadMonitor : public QObject { }; struct TouchScreen : public QDialog { +private: + QLabel *bgLabel; +public: TouchScreen(QWidget *parent = nullptr) : QDialog(parent) { this->setFixedSize(TOUCH_SCREEN_WIDTH, TOUCH_SCREEN_HEIGHT); this->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint); this->setWindowTitle(tr("InputRedirectionClient-Qt - Touch screen")); + + QString curPath = qApp->QCoreApplication::applicationDirPath()+"/Touchscreen.jpg"; + QPixmap bkgnd(curPath); + + bgLabel = new QLabel(this); + bgLabel->setFixedHeight(TOUCH_SCREEN_HEIGHT); + bgLabel->setFixedWidth(TOUCH_SCREEN_WIDTH); + bgLabel->setPixmap(bkgnd); + bgLabel->setScaledContents(true); + bgLabel->setSizePolicy( QSizePolicy::Ignored, QSizePolicy::Ignored ); } void mousePressEvent(QMouseEvent *ev) @@ -242,6 +284,20 @@ struct TouchScreen : public QDialog { touchScreenPosition = ev->pos(); sendFrame(); } + + if(ev->button() == Qt::RightButton) + { + + QString strPic = QFileDialog::getOpenFileName(this, + tr("Open Touchscreen Image (320x240)"), "MyDocuments", + tr("Image Files (*.jpg *.jpeg *.png *.bmp *.gif *.pbm *.pgm *.ppm *.xbm *.xpm)")); + + if(!strPic.isNull()) + { + QPixmap newPic(strPic); + bgLabel->setPixmap(newPic); + } + } } void mouseMoveEvent(QMouseEvent *ev) @@ -270,25 +326,13 @@ struct TouchScreen : public QDialog { } }; -struct FrameTimer : public QTimer { - FrameTimer(QObject *parent = nullptr) : QTimer(parent) - { - connect(this, &QTimer::timeout, this, - [](void) - { - sendFrame(); - }); - } -}; - - class Widget : public QWidget { private: QVBoxLayout *layout; QFormLayout *formLayout; QLineEdit *addrLineEdit; - QCheckBox *invertYCheckbox, *invertABCheckbox, *invertXYCheckbox; + QCheckBox *invertYCheckbox; QPushButton *homeButton, *powerButton, *longPowerButton; TouchScreen *touchScreen; public: @@ -300,14 +344,10 @@ class Widget : public QWidget addrLineEdit->setClearButtonEnabled(true); invertYCheckbox = new QCheckBox(this); - invertABCheckbox = new QCheckBox(this); - invertXYCheckbox = 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); homeButton = new QPushButton(tr("&HOME"), this); powerButton = new QPushButton(tr("&POWER"), this); @@ -342,40 +382,6 @@ class Widget : public QWidget } }); - connect(invertABCheckbox, &QCheckBox::stateChanged, this, - [](int state) - { - switch(state) - { - case Qt::Unchecked: - abInverse = false; - settings.setValue("invertAB", false); - break; - case Qt::Checked: - abInverse = true; - settings.setValue("invertAB", true); - break; - default: break; - } - }); - - connect(invertXYCheckbox, &QCheckBox::stateChanged, this, - [](int state) - { - switch(state) - { - case Qt::Unchecked: - xyInverse = false; - settings.setValue("invertXY", false); - break; - case Qt::Checked: - xyInverse = true; - settings.setValue("invertXY", true); - break; - default: break; - } - }); - connect(homeButton, &QPushButton::pressed, this, [](void) { @@ -418,13 +424,12 @@ class Widget : public QWidget sendFrame(); }); + touchScreen = new TouchScreen(nullptr); this->setWindowTitle(tr("InputRedirectionClient-Qt")); addrLineEdit->setText(settings.value("ipAddress", "").toString()); invertYCheckbox->setChecked(settings.value("invertY", false).toBool()); - invertABCheckbox->setChecked(settings.value("invertAB", false).toBool()); - invertXYCheckbox->setChecked(settings.value("invertXY", false).toBool()); } void show(void) @@ -448,18 +453,13 @@ class Widget : public QWidget sendFrame(); delete touchScreen; } - }; - int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; GamepadMonitor m(&w); - FrameTimer t(&w); - TouchScreen ts; - t.start(50); w.show(); return a.exec(); From a8b6953ad602d21739e745737d19cd910e8fe100 Mon Sep 17 00:00:00 2001 From: gbrown5 <30328308+gbrown5@users.noreply.github.com> Date: Sat, 22 Jul 2017 08:58:00 -0400 Subject: [PATCH 2/2] Added ZL and ZR buttons for new 3ds -Added support for the ZL and ZR buttons for new 3DS. (3DS_ZR, 3DS_ZL) --- main.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/main.cpp b/main.cpp index 5541e55..c0fb1d4 100644 --- a/main.cpp +++ b/main.cpp @@ -4,12 +4,10 @@ #include #include -#include #include #include #include #include -#include #include #include #include @@ -100,8 +98,8 @@ QGamepadManager::GamepadButton getButton(QString dsBtn) void sendFrame(void) { static const QGamepadManager::GamepadButton hidButtonsAB[] = { - getButton("Button/3DS_A"), //3ds_A - getButton("Button/3DS_B"), //3ds_B + getButton("Button/3DS_A"), + getButton("Button/3DS_B"), }; static const QGamepadManager::GamepadButton hidButtonsMiddle[] = { @@ -121,8 +119,8 @@ void sendFrame(void) }; static const QGamepadManager::GamepadButton irButtons[] = { - QGamepadManager::ButtonGuide, - QGamepadManager::ButtonGuide, + getButton("Button/3DS_ZR"), + getButton("Button/3DS_ZL"), }; static const QGamepadManager::GamepadButton speButtons[] = {