27 Commits

Author SHA1 Message Date
0dc32bd979 Merge pull request 'Updated mappings. /JL' (#20) from 0.1.11 into main
Reviewed-on: #20
2025-04-25 18:19:44 +02:00
17c947b6fb Updated mappings. /JL 2025-04-25 18:19:05 +02:00
085355e0f9 Merge pull request 'Working on Xbox mapping. /JL' (#19) from 0.1.10 into main
Reviewed-on: #19
2025-04-25 18:16:32 +02:00
029eb3095e Working on Xbox mapping. /JL 2025-04-25 18:03:44 +02:00
6eca515cf7 Merge pull request 'Updated Xbox controller. /JL' (#18) from 0.1.9 into main
Reviewed-on: #18
2025-04-20 23:37:38 +02:00
57d2d60f67 Updated Xbox controller. /JL 2025-04-20 23:37:16 +02:00
1ccceeeb06 Merge pull request 'Updated Xbox controller selection. /JL' (#17) from 0.1.8 into main
Reviewed-on: #17
2025-04-20 23:25:30 +02:00
ff3bfc66d2 Updated Xbox controller selection. /JL 2025-04-20 23:25:09 +02:00
5be0dace93 Merge pull request 'Added close() method to all controller classes. /JL' (#16) from 0.1.7 into main
Reviewed-on: #16
2025-04-20 23:21:01 +02:00
d6f72a8e74 Added close() method to all controller classes. /JL 2025-04-20 23:20:37 +02:00
5a5acdf583 Merge pull request 'Added stop_rumble() to all controller classes. /JL' (#15) from 0.1.6 into main
Reviewed-on: #15
2025-04-20 23:15:59 +02:00
9c66fe8930 Added stop_rumble() to all controller classes. /JL 2025-04-20 23:15:35 +02:00
3980bd92ca Merge pull request 'Update Xbox controller. /JL' (#14) from 0.1.5 into main
Reviewed-on: #14
2025-04-20 23:09:50 +02:00
75fb3f577b Update Xbox controller. /JL 2025-04-20 23:09:25 +02:00
b9a9d60e52 Merge pull request 'Added rumble functionality to Xbox controller. /JL' (#13) from 0.1.4 into main
Reviewed-on: #13
2025-04-20 23:05:17 +02:00
e0609fd526 Added rumble functionality to Xbox controller. /JL 2025-04-20 23:04:52 +02:00
e9a7764459 Merge pull request 'Fixed a bug to allow rumble values 255. /JL' (#12) from 0.1.3 into main
Reviewed-on: #12
2025-04-20 22:47:57 +02:00
8cba42f903 Fixed a bug to allow rumble values 255. /JL 2025-04-20 22:47:18 +02:00
58320211cd Merge pull request 'Added rumble functionality to DualSense controllers. /JL' (#11) from 0.1.2 into main
Reviewed-on: #11
2025-04-20 22:31:15 +02:00
4adc27aec5 Added rumble functionality to DualSense controllers. /JL 2025-04-20 22:30:36 +02:00
758f5b7b3d Merge pull request 'Added close() method to dualsense controller class #8. /JL' (#10) from 0.1.1 into main
Reviewed-on: #10
2025-04-20 12:55:09 +02:00
cccaf0c8cb Added close() method to dualsense controller class #8. /JL 2025-04-20 12:54:08 +02:00
19fee503fa Merge pull request '#8 Added close() to class. /JL' (#9) from 0.1.0 into main
Reviewed-on: #9
2025-04-20 12:48:41 +02:00
fd7a3ea0b5 #8 Added close() to class. /JL 2025-04-20 12:47:14 +02:00
6248124a20 Merge pull request '0.0.7' (#7) from 0.0.7 into main
Reviewed-on: #7
2025-04-20 12:09:11 +02:00
ce694b3625 Update DualSense controllers. /JL 2025-04-20 12:08:16 +02:00
1d65c88a7b Updated dualsense. /JL 2025-04-20 09:19:45 +02:00
11 changed files with 170 additions and 145 deletions

View File

@@ -9,7 +9,7 @@ from .xbox_series_x_controller import XboxSeriesXController
from .generic_controller import GenericController
from .logitech_dual_action_controller import LogitechDualActionController
__version__ = "0.0.4"
__version__ = "0.1.11"
CONTROLLERS = {
"DualSense Wireless Controller": DualSenseController,
@@ -18,7 +18,7 @@ CONTROLLERS = {
"Logitech Gamepad F510": LogitechF510Controller,
"Logitech Gamepad F710": LogitechF710Controller,
"Logitech Dual Action": LogitechDualActionController,
"X box Series X Controller": XboxSeriesXController
"Xbox Series X Controller": XboxSeriesXController
}
class Controllers:

View File

@@ -30,4 +30,12 @@ class ControlsBase(ABC):
@abstractmethod
def rumble(self):
pass
@abstractmethod
def stop_rumble(self):
pass
@abstractmethod
def close(self):
pass

View File

@@ -18,31 +18,32 @@ class DualSenseController(ControlsBase):
self.powerlevel = self.device.battery.Level
self.batterystate = BATTERY_STATE[str(self.device.battery.State)]
self.set_player_id(PlayerID.PLAYER_1)
self.numaxis: int = joy.get_numaxes()
self.axis: list = [joy.get_axis(a) for a in range(self.numaxis)]
self.numhats: int = joy.get_numhats()
self.hats: list = [joy.get_hat(h) for h in range(self.numhats)]
self.numbuttons: int = joy.get_numbuttons()
self.buttons: list = [joy.get_button(b) for b in range(self.numbuttons)]
self.mapping = {
"left stick x": self.axis[0],
"left stick y": self.axis[1],
"right stick x": self.axis[3],
"right stick y": self.axis[4],
"right trigger": self.buttons[5],
"left trigger": self.buttons[2],
"dhat x": self.hats[0][0],
"dhat y": self.hats[0][1],
"left button": self.buttons[4],
"right button": self.buttons[5],
"cross button": self.buttons[0],
"triangle button": self.buttons[2],
"circle button": self.buttons[1],
"square button": self.buttons[3],
"left stick button": self.buttons[11],
"right stick button": self.buttons[12],
"connect button": self.buttons[8],
"list button": self.buttons[9],
"logo button": self.buttons[10]
"l1 button": 4,
"r1 button": 5,
"cross button": 0,
"triangle button": 2,
"circle button": 1,
"square button": 3,
"left stick button": 11,
"right stick button": 12,
"connect button": 8,
"list button": 9,
"logo button": 10
}
print(f"{self.name} connected")
print(f"Power level: {self.powerlevel}")
print(f"Battery state: {self.batterystate}")
def close(self):
self.device.close()
def handle_input(self, event):
pass
@@ -67,9 +68,16 @@ class DualSenseController(ControlsBase):
def pause(self):
pass
def rumble(self):
pass
def rumble(self, left, right):
if not left in range(256) or not right in range(256):
raise ValueError("left and right values must be in the range 0 - 255")
self.device.setLeftMotor(left)
self.device.setRightMotor(right)
def stop_rumble(self):
self.device.setLeftMotor(0)
self.device.setRightMotor(0)
@property
def name(self) -> str:
return self._name

View File

@@ -10,6 +10,12 @@ class DualSenseEdgeController(ControlsBase):
self.powerlevel = self.device.battery.Level
self.batterystate = BATTERY_STATE[str(self.device.battery.State)]
self.set_player_id(PlayerID.PLAYER_1)
self.numaxis: int = joy.get_numaxes()
self.axis: list = [joy.get_axis(a) for a in range(self.numaxis)]
self.numhats: int = joy.get_numhats()
self.hats: list = [joy.get_hat(h) for h in range(self.numhats)]
self.numbuttons: int = joy.get_numbuttons()
self.buttons: list = [joy.get_button(b) for b in range(self.numbuttons)]
self.mapping = {
"left stick x": self.axis[0],
"left stick y": self.axis[1],
@@ -35,6 +41,9 @@ class DualSenseEdgeController(ControlsBase):
print(f"Power level: {self.powerlevel}")
print(f"Battery state: {self.batterystate}")
def close(self):
self.device.close()
def handle_input(self, event):
pass
@@ -59,9 +68,16 @@ class DualSenseEdgeController(ControlsBase):
def pause(self):
pass
def rumble(self):
pass
def rumble(self, left, right):
if not left in range(256) or not right in range(256):
raise ValueError("left and right values must be in the range 0 - 255")
self.device.setLeftMotor(left)
self.device.setRightMotor(right)
def stop_rumble(self):
self.device.setLeftMotor(0)
self.device.setRightMotor(0)
@property
def name(self) -> str:
return self._name

View File

@@ -14,28 +14,25 @@ class GenericController(ControlsBase):
self.numbuttons: int = self.device.get_numbuttons()
self.buttons: list = [self.device.get_button(b) for b in range(self.numbuttons)]
self.mapping = {
"left stick x": self.axis[0],
"left stick y": self.axis[1],
"right stick x": self.axis[2],
"right stick y": self.axis[3],
"right trigger": self.buttons[7],
"left trigger": self.buttons[6],
"dhat x": self.hats[0][0],
"dhat y": self.hats[0][1],
"left button": self.buttons[4],
"right button": self.buttons[5],
"X button": self.buttons[0],
"Y button": self.buttons[3],
"A button": self.buttons[1],
"B button": self.buttons[2],
"left stick button": self.buttons[10],
"right stick button": self.buttons[11],
"back button": self.buttons[8],
"start button": self.buttons[9],
"r2 trigger": 7,
"l2 trigger": 6,
"l1 button": 4,
"r1 button": 5,
"X button": 0,
"Y button": 3,
"A button": 1,
"B button": 2,
"left stick button": 10,
"right stick button": 11,
"back button": 8,
"start button": 9,
"logo button": None
}
print(f"{self.name} connected.")
def close(self):
pass
def handle_input(self, event):
pass
@@ -57,6 +54,9 @@ class GenericController(ControlsBase):
def rumble(self):
pass
def stop_rumble(self):
pass
@property
def name(self) -> str:
return self._name

View File

@@ -35,28 +35,25 @@ class LogitechDualActionController(ControlsBase):
self.buttons: list = [self.device.get_button(b) for b in range(self.numbuttons)]
self.input_mode = InputMode.DirectInput
self.mapping = {
"left stick x": self.axis[0],
"left stick y": self.axis[1],
"right stick x": self.axis[2],
"right stick y": self.axis[3],
"right trigger": self.buttons[7],
"left trigger": self.buttons[6],
"dhat x": self.hats[0][0],
"dhat y": self.hats[0][1],
"left button": self.buttons[4],
"right button": self.buttons[5],
"X button": self.buttons[0],
"Y button": self.buttons[3],
"A button": self.buttons[1],
"B button": self.buttons[2],
"left stick button": self.buttons[10],
"right stick button": self.buttons[11],
"back button": self.buttons[8],
"start button": self.buttons[9],
"r2 trigger": 7,
"l2 trigger": 6,
"l1 button": 4,
"r1 button": 5,
"X button": 0,
"Y button": 3,
"A button": 1,
"B button": 2,
"left stick button": 10,
"right stick button": 11,
"back button": 8,
"start button": 9,
"logo button": None
}
print(f"{self.name} connected.")
def close(self):
pass
def handle_input(self, event):
pass
@@ -78,6 +75,9 @@ class LogitechDualActionController(ControlsBase):
def rumble(self):
pass
def stop_rumble(self):
pass
@property
def name(self) -> str:
return self._name

View File

@@ -35,28 +35,23 @@ class LogitechF310Controller(ControlsBase):
self.buttons: list = [self.device.get_button(b) for b in range(self.numbuttons)]
self.input_mode = InputMode.XInput
self.mapping = {
"left stick x": self.axis[0],
"left stick y": self.axis[1],
"right stick x": self.axis[3],
"right stick y": self.axis[4],
"right trigger": self.axis[2],
"left trigger": self.axis[5],
"dhat x": self.hats[0][0],
"dhat y": self.hats[0][1],
"left button": self.buttons[4],
"right button": self.buttons[5],
"X button": self.buttons[2],
"Y button": self.buttons[3],
"A button": self.buttons[0],
"B button": self.buttons[1],
"left stick button": self.buttons[9],
"right stick button": self.buttons[10],
"back button": self.buttons[6],
"start button": self.buttons[7],
"logo button": self.buttons[8]
"l1 button": 4,
"r1 button": 5,
"X button": 2,
"Y button": 3,
"A button": 0,
"B button": 1,
"left stick button": 9,
"right stick button": 10,
"back button": 6,
"start button": 7,
"logo button": 8
}
print(f"{self.name} connected.")
def close(self):
pass
def handle_input(self, event):
pass
@@ -78,6 +73,9 @@ class LogitechF310Controller(ControlsBase):
def rumble(self):
pass
def stop_rumble(self):
pass
@property
def name(self) -> str:
return self._name

View File

@@ -37,28 +37,23 @@ class LogitechF510Controller(ControlsBase):
self.buttons: list = []
self.input_mode: InputMode.DirectInput
self.mapping = {
"left stick x": self.axis[0],
"left stick y": self.axis[1],
"right stick x": self.axis[3],
"right stick y": self.axis[4],
"right trigger": self.axis[2],
"left trigger": self.axis[5],
"dhat x": self.hats[0][0],
"dhat y": self.hats[0][1],
"left button": self.buttons[4],
"right button": self.buttons[5],
"X button": self.buttons[2],
"Y button": self.buttons[3],
"A button": self.buttons[0],
"B button": self.buttons[1],
"left stick button": self.buttons[9],
"right stick button": self.buttons[10],
"back button": self.buttons[6],
"start button": self.buttons[7],
"logo button": self.buttons[8]
"l1 button": 4,
"r1 button": 5,
"X button": 2,
"Y button": 3,
"A button": 0,
"B button": 1,
"left stick button": 9,
"right stick button": 10,
"back button": 6,
"start button": 7,
"logo button": 8
}
print(f"{self.name} connected.")
def close(self):
pass
def handle_input(self, event):
pass
@@ -80,6 +75,9 @@ class LogitechF510Controller(ControlsBase):
def rumble(self):
pass
def stop_rumble(self):
pass
@property
def name(self) -> str:
return self._name

View File

@@ -37,28 +37,23 @@ class LogitechF710Controller(ControlsBase):
self.buttons: list = []
self.input_mode: InputMode.DirectInput
self.mapping = {
"left stick x": self.axis[0],
"left stick y": self.axis[1],
"right stick x": self.axis[3],
"right stick y": self.axis[4],
"right trigger": self.axis[2],
"left trigger": self.axis[5],
"dhat x": self.hats[0][0],
"dhat y": self.hats[0][1],
"left button": self.buttons[4],
"right button": self.buttons[5],
"X button": self.buttons[2],
"Y button": self.buttons[3],
"A button": self.buttons[0],
"B button": self.buttons[1],
"left stick button": self.buttons[9],
"right stick button": self.buttons[10],
"back button": self.buttons[6],
"start button": self.buttons[7],
"logo button": self.buttons[8]
"l1 button": 4,
"r1 button": 5,
"X button": 2,
"Y button": 3,
"A button": 0,
"B button": 1,
"left stick button": 9,
"right stick button": 10,
"back button": 6,
"start button": 7,
"logo button": 8
}
print(f"{self.name} connected.")
def close(self):
pass
def handle_input(self, event):
pass
@@ -80,6 +75,9 @@ class LogitechF710Controller(ControlsBase):
def rumble(self):
pass
def stop_rumble(self):
pass
@property
def name(self) -> str:
return self._name

View File

@@ -1,7 +1,6 @@
import time
import threading
from pygameControls.controlsbase import ControlsBase
class XboxSeriesXController:
class XboxSeriesXController(ControlsBase):
def __init__(self, joy):
self.device = joy
self.instance_id: int = self.device.get_instance_id()
@@ -14,29 +13,24 @@ class XboxSeriesXController:
self.numbuttons: int = self.device.get_numbuttons()
self.buttons: list = [self.device.get_button(b) for b in range(self.numbuttons)]
self.mapping = {
"left stick x": self.axis[0],
"left stick y": self.axis[1],
"right stick x": self.axis[2],
"right stick y": self.axis[3],
"right trigger": self.axis[4],
"left trigger": self.axis[5],
"dhat x": self.hats[0][0],
"dhat y": self.hats[0][1],
"left button": self.buttons[6],
"right button": self.buttons[7],
"X button": self.buttons[3],
"Y button": self.buttons[4],
"A button": self.buttons[0],
"B button": self.buttons[1],
"left stick button": self.buttons[13],
"right stick button": self.buttons[14],
"logo button": self.buttons[12],
"share button": self.buttons[15],
"list button": self.buttons[11],
"copy button": self.buttons[10]
"l1 button": 6,
"r1 button": 7,
"X button": 3,
"Y button": 4,
"A button": 0,
"B button": 1,
"left stick button": 13,
"right stick button": 14,
"logo button": 12,
"share button": 15,
"list button": 11,
"copy button": 10
}
print(f"{self.name} connected.")
def close(self):
self.device.quit()
def handle_input(self, event):
pass
@@ -55,9 +49,14 @@ class XboxSeriesXController:
def pause(self):
pass
def rumble(self):
pass
def rumble(self, left, right, duration=0):
if not left in range(256) or not right in range(256):
raise ValueError("left and right values must be in the range 0 - 255")
self.device.rumble(left / 255, right / 255, duration)
def stop_rumble(self):
self.device.stop_rumble()
@property
def name(self) -> str:
return self._name

View File

@@ -3,7 +3,7 @@ if __name__ == "__main__":
setup(
name='pygameControls',
version='0.0.5',
version='0.1.11',
packages=find_packages(),
install_requires=[],
author='Jan Lerking',