Test gamepad name

This commit is contained in:
Marc Riera Irigoyen 2022-10-09 23:45:12 +02:00
parent 0c9428fdd8
commit 139875808a
6 changed files with 110 additions and 24 deletions

16
.vscode/launch.json vendored Normal file
View file

@ -0,0 +1,16 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Run main program",
"type": "python",
"request": "launch",
"program": "ddgo-converter.py",
"console": "integratedTerminal",
"justMyCode": true
}
]
}

View file

@ -3,11 +3,12 @@
import sys import sys
from PyQt5.QtWidgets import QApplication from PyQt5.QtWidgets import QApplication
from gui.main import MainWindow from gui.main import MainWindow
from handlers.gamepad import GamepadHandler
class App(QApplication): class App(QApplication):
def __init__(self, sys_argv): def __init__(self, sys_argv):
super(App, self).__init__(sys_argv) super(App, self).__init__(sys_argv)
self.main_view = MainWindow(None) self.main_view = MainWindow(GamepadHandler)
self.main_view.show() self.main_view.show()
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -1,17 +1,22 @@
import sys import sys
from PyQt5 import uic from PyQt5 import uic
from PyQt5.QtWidgets import QMainWindow from PyQt5.QtWidgets import QMainWindow, QTableWidgetItem
from gui.main_ui import Ui_MainWindow from gui.main_ui import Ui_MainWindow
from handlers.gamepad import Gamepad
class MainWindow(QMainWindow): class MainWindow(QMainWindow):
def __init__(self, main_controller): def __init__(self, gamepad_handler):
super().__init__() super().__init__()
self._main_controller = main_controller self._gamepad_handler = gamepad_handler
self._gui = Ui_MainWindow() self._gui = Ui_MainWindow()
self._gui.setupUi(self) self._gui.setupUi(self)
self._gui.pushButton_emulatedControllerStart.clicked.connect(self.startPressed) self._gui.pushButton_physicalControllerRefresh.clicked.connect(self.controller_list_refresh)
def startPressed(self): def controller_list_refresh(self):
self._gui.statusbar.showMessage("Hello!") self._gui.tableWidget_physicalControllerList.setRowCount(0)
for gamepad in self._gamepad_handler.find_gamepads():
rowCount = self._gui.tableWidget_physicalControllerList.rowCount()
self._gui.tableWidget_physicalControllerList.insertRow(rowCount)
self._gui.tableWidget_physicalControllerList.setItem(rowCount , 1, QTableWidgetItem(gamepad.name))

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'ui/main_ui.ui' # Form implementation generated from reading ui file 'gui/main_ui.ui'
# #
# Created by: PyQt5 UI code generator 5.15.7 # Created by: PyQt5 UI code generator 5.15.7
# #
@ -27,8 +27,8 @@ class Ui_MainWindow(object):
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setContentsMargins(9, 9, 9, 9) self.gridLayout.setContentsMargins(9, 9, 9, 9)
self.gridLayout.setObjectName("gridLayout") self.gridLayout.setObjectName("gridLayout")
self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout_main = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout") self.verticalLayout_main.setObjectName("verticalLayout_main")
self.groupBox_physicalControllers = QtWidgets.QGroupBox(self.centralwidget) self.groupBox_physicalControllers = QtWidgets.QGroupBox(self.centralwidget)
self.groupBox_physicalControllers.setObjectName("groupBox_physicalControllers") self.groupBox_physicalControllers.setObjectName("groupBox_physicalControllers")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox_physicalControllers) self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox_physicalControllers)
@ -47,7 +47,18 @@ class Ui_MainWindow(object):
self.tableWidget_physicalControllerList.setHorizontalHeaderItem(2, item) self.tableWidget_physicalControllerList.setHorizontalHeaderItem(2, item)
self.tableWidget_physicalControllerList.horizontalHeader().setStretchLastSection(True) self.tableWidget_physicalControllerList.horizontalHeader().setStretchLastSection(True)
self.verticalLayout_2.addWidget(self.tableWidget_physicalControllerList) self.verticalLayout_2.addWidget(self.tableWidget_physicalControllerList)
self.verticalLayout.addWidget(self.groupBox_physicalControllers) self.horizontalLayout_physicalControllerActions = QtWidgets.QHBoxLayout()
self.horizontalLayout_physicalControllerActions.setObjectName("horizontalLayout_physicalControllerActions")
self.pushButton_physicalControllerRefresh = QtWidgets.QPushButton(self.groupBox_physicalControllers)
self.pushButton_physicalControllerRefresh.setObjectName("pushButton_physicalControllerRefresh")
self.horizontalLayout_physicalControllerActions.addWidget(self.pushButton_physicalControllerRefresh)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_physicalControllerActions.addItem(spacerItem)
self.pushButton_physicalControllerConfig = QtWidgets.QPushButton(self.groupBox_physicalControllers)
self.pushButton_physicalControllerConfig.setObjectName("pushButton_physicalControllerConfig")
self.horizontalLayout_physicalControllerActions.addWidget(self.pushButton_physicalControllerConfig)
self.verticalLayout_2.addLayout(self.horizontalLayout_physicalControllerActions)
self.verticalLayout_main.addWidget(self.groupBox_physicalControllers)
self.groupBox_emulatedController = QtWidgets.QGroupBox(self.centralwidget) self.groupBox_emulatedController = QtWidgets.QGroupBox(self.centralwidget)
self.groupBox_emulatedController.setObjectName("groupBox_emulatedController") self.groupBox_emulatedController.setObjectName("groupBox_emulatedController")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.groupBox_emulatedController) self.horizontalLayout = QtWidgets.QHBoxLayout(self.groupBox_emulatedController)
@ -69,13 +80,13 @@ class Ui_MainWindow(object):
self.comboBox_emulatedControllerModel.setObjectName("comboBox_emulatedControllerModel") self.comboBox_emulatedControllerModel.setObjectName("comboBox_emulatedControllerModel")
self.comboBox_emulatedControllerModel.addItem("") self.comboBox_emulatedControllerModel.addItem("")
self.horizontalLayout.addWidget(self.comboBox_emulatedControllerModel) self.horizontalLayout.addWidget(self.comboBox_emulatedControllerModel)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem) self.horizontalLayout.addItem(spacerItem1)
self.pushButton_emulatedControllerStart = QtWidgets.QPushButton(self.groupBox_emulatedController) self.pushButton_emulatedControllerStart = QtWidgets.QPushButton(self.groupBox_emulatedController)
self.pushButton_emulatedControllerStart.setObjectName("pushButton_emulatedControllerStart") self.pushButton_emulatedControllerStart.setObjectName("pushButton_emulatedControllerStart")
self.horizontalLayout.addWidget(self.pushButton_emulatedControllerStart) self.horizontalLayout.addWidget(self.pushButton_emulatedControllerStart)
self.verticalLayout.addWidget(self.groupBox_emulatedController) self.verticalLayout_main.addWidget(self.groupBox_emulatedController)
self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1) self.gridLayout.addLayout(self.verticalLayout_main, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget) MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar") self.statusbar.setObjectName("statusbar")
@ -89,11 +100,13 @@ class Ui_MainWindow(object):
MainWindow.setWindowTitle(_translate("MainWindow", "Densha de GO! Controller Converter")) MainWindow.setWindowTitle(_translate("MainWindow", "Densha de GO! Controller Converter"))
self.groupBox_physicalControllers.setTitle(_translate("MainWindow", "Physical controllers")) self.groupBox_physicalControllers.setTitle(_translate("MainWindow", "Physical controllers"))
item = self.tableWidget_physicalControllerList.horizontalHeaderItem(0) item = self.tableWidget_physicalControllerList.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "Name"))
item = self.tableWidget_physicalControllerList.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "ID")) item.setText(_translate("MainWindow", "ID"))
item = self.tableWidget_physicalControllerList.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "Name"))
item = self.tableWidget_physicalControllerList.horizontalHeaderItem(2) item = self.tableWidget_physicalControllerList.horizontalHeaderItem(2)
item.setText(_translate("MainWindow", "Status")) item.setText(_translate("MainWindow", "Status"))
self.pushButton_physicalControllerRefresh.setText(_translate("MainWindow", "Refresh"))
self.pushButton_physicalControllerConfig.setText(_translate("MainWindow", "Configuration"))
self.groupBox_emulatedController.setTitle(_translate("MainWindow", "Emulated controller")) self.groupBox_emulatedController.setTitle(_translate("MainWindow", "Emulated controller"))
self.label_emulatedControllerModel.setText(_translate("MainWindow", "Model")) self.label_emulatedControllerModel.setText(_translate("MainWindow", "Model"))
self.comboBox_emulatedControllerModel.setItemText(0, _translate("MainWindow", "Two-handle controller for PC (DGOC-44U)")) self.comboBox_emulatedControllerModel.setItemText(0, _translate("MainWindow", "Two-handle controller for PC (DGOC-44U)"))

View file

@ -46,7 +46,7 @@
<number>9</number> <number>9</number>
</property> </property>
<item row="0" column="0"> <item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout_main">
<item> <item>
<widget class="QGroupBox" name="groupBox_physicalControllers"> <widget class="QGroupBox" name="groupBox_physicalControllers">
<property name="title"> <property name="title">
@ -66,12 +66,12 @@
</attribute> </attribute>
<column> <column>
<property name="text"> <property name="text">
<string>Name</string> <string>ID</string>
</property> </property>
</column> </column>
<column> <column>
<property name="text"> <property name="text">
<string>ID</string> <string>Name</string>
</property> </property>
</column> </column>
<column> <column>
@ -81,6 +81,37 @@
</column> </column>
</widget> </widget>
</item> </item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_physicalControllerActions">
<item>
<widget class="QPushButton" name="pushButton_physicalControllerRefresh">
<property name="text">
<string>Refresh</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_physicalControllerActions">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="pushButton_physicalControllerConfig">
<property name="text">
<string>Configuration</string>
</property>
</widget>
</item>
</layout>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
@ -119,7 +150,7 @@
</widget> </widget>
</item> </item>
<item> <item>
<spacer name="horizontalSpacer"> <spacer name="horizontalSpacer_emulatedController">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>

View file

@ -1,8 +1,27 @@
#!/usr/bin/env python
from evdev import InputDevice, list_devices, ecodes as e, UInput, AbsInfo from evdev import InputDevice, list_devices, ecodes as e, UInput, AbsInfo
cap = { class GamepadHandler:
def __init__(self):
super().__init__()
def find_gamepads():
gamepads = []
devices = [InputDevice(path) for path in list_devices()]
for device in devices:
gamepads.append(Gamepad(device.info.vendor, device.info.product, device.name))
return gamepads
class Gamepad:
def __init__(self, vid, pid, name):
super().__init__()
self.vid = vid
self.pid = pid
self.name = name
""" cap = {
e.EV_KEY : [e.BTN_NORTH, e.BTN_SOUTH, e.BTN_EAST, e.BTN_WEST, e.BTN_SELECT, e.BTN_START], e.EV_KEY : [e.BTN_NORTH, e.BTN_SOUTH, e.BTN_EAST, e.BTN_WEST, e.BTN_SELECT, e.BTN_START],
e.EV_ABS : [(e.ABS_X, AbsInfo(0, 0, 255, 0, 0, 0)), (e.ABS_Y, AbsInfo(0, 0, 255, 0, 0, 0))] e.EV_ABS : [(e.ABS_X, AbsInfo(0, 0, 255, 0, 0, 0)), (e.ABS_Y, AbsInfo(0, 0, 255, 0, 0, 0))]
} }
@ -149,3 +168,4 @@ for event in mascon_switch.read_loop():
ui.write(e.EV_ABS, e.ABS_X, 0x79) ui.write(e.EV_ABS, e.ABS_X, 0x79)
ui.write(e.EV_ABS, e.ABS_Y, 0x00) ui.write(e.EV_ABS, e.ABS_Y, 0x00)
ui.syn() ui.syn()
"""