21
.github/workflows/python-mypy.yml
vendored
21
.github/workflows/python-mypy.yml
vendored
@@ -1,21 +0,0 @@
|
||||
name: Mypy
|
||||
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
name: Mypy
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: '3.x'
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install mypy
|
||||
- name: mypy
|
||||
run: |
|
||||
mypy pydualsense/
|
3
.gitignore
vendored
3
.gitignore
vendored
@@ -149,6 +149,9 @@ dmypy.json
|
||||
!.vscode/extensions.json
|
||||
*.code-workspace
|
||||
|
||||
### pycharm ###
|
||||
.idea/*
|
||||
|
||||
# End of https://www.toptal.com/developers/gitignore/api/python,vscode
|
||||
|
||||
pydualsense/interface.py
|
||||
|
@@ -12,7 +12,7 @@ pip install pydualsense
|
||||
|
||||
```python
|
||||
|
||||
from pydualsense import pydualsense
|
||||
from pydualsense import pydualsense, TriggerModes
|
||||
|
||||
ds = pydualsense() # open controller
|
||||
ds.init() # initialize controller
|
||||
|
18
pydualsense/hidguardian.py
Normal file
18
pydualsense/hidguardian.py
Normal file
@@ -0,0 +1,18 @@
|
||||
import winreg
|
||||
import sys
|
||||
|
||||
def check_hide() -> bool:
|
||||
"""check if hidguardian is used and controller is hidden
|
||||
"""
|
||||
if sys.platform.startswith('win32'):
|
||||
try:
|
||||
access_reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
|
||||
access_key = winreg.OpenKey(access_reg, 'SYSTEM\CurrentControlSet\Services\HidGuardian\Parameters', 0, winreg.KEY_READ)
|
||||
affected_devices = winreg.QueryValueEx(access_key, 'AffectedDevices')[0]
|
||||
if "054C" in affected_devices and "0CE6" in affected_devices:
|
||||
return True
|
||||
return False
|
||||
except OSError as e:
|
||||
print(e)
|
||||
|
||||
return False
|
@@ -1,14 +1,12 @@
|
||||
|
||||
# needed for python > 3.8
|
||||
import os, sys
|
||||
if sys.version_info >= (3,8):
|
||||
if sys.platform.startswith('win32') and sys.version_info >= (3,8):
|
||||
os.add_dll_directory(os.getcwd())
|
||||
|
||||
import hid # type: ignore
|
||||
from .enums import (LedOptions, PlayerID,
|
||||
PulseOptions, TriggerModes, Brightness)
|
||||
import hidapi
|
||||
from .enums import (LedOptions, PlayerID, PulseOptions, TriggerModes, Brightness) # type: ignore
|
||||
import threading
|
||||
import winreg
|
||||
class pydualsense:
|
||||
|
||||
def __init__(self, verbose: bool = False) -> None:#
|
||||
@@ -24,7 +22,7 @@ class pydualsense:
|
||||
def init(self):
|
||||
"""initialize module and device states
|
||||
"""
|
||||
self.device: hid.Device = self.__find_device()
|
||||
self.device: hidapi.Device = self.__find_device()
|
||||
self.light = DSLight() # control led light of ds
|
||||
self.audio = DSAudio() # ds audio setting
|
||||
self.triggerL = DSTrigger() # left trigger
|
||||
@@ -38,8 +36,6 @@ class pydualsense:
|
||||
self.report_thread = threading.Thread(target=self.sendReport)
|
||||
self.report_thread.start()
|
||||
|
||||
self.init = True
|
||||
|
||||
def close(self):
|
||||
"""
|
||||
Stops the report thread and closes the HID device
|
||||
@@ -48,24 +44,8 @@ class pydualsense:
|
||||
self.report_thread.join()
|
||||
self.device.close()
|
||||
|
||||
def _check_hide(self) -> bool:
|
||||
"""check if hidguardian is used and controller is hidden
|
||||
"""
|
||||
if sys.platform.startswith('win32'):
|
||||
try:
|
||||
access_reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
|
||||
access_key = winreg.OpenKey(access_reg, 'SYSTEM\CurrentControlSet\Services\HidGuardian\Parameters', 0, winreg.KEY_READ)
|
||||
affected_devices = winreg.QueryValueEx(access_key, 'AffectedDevices')[0]
|
||||
if "054C" in affected_devices and "0CE6" in affected_devices:
|
||||
return True
|
||||
return False
|
||||
except OSError as e:
|
||||
print(e)
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def __find_device(self) -> hid.Device:
|
||||
def __find_device(self) -> hidapi.Device:
|
||||
"""
|
||||
find HID device and open it
|
||||
|
||||
@@ -78,19 +58,21 @@ class pydualsense:
|
||||
"""
|
||||
# TODO: detect connection mode, bluetooth has a bigger write buffer
|
||||
# TODO: implement multiple controllers working
|
||||
if self._check_hide():
|
||||
raise Exception('HIDGuardian detected. Delete the controller from HIDGuardian and restart PC to connect to controller')
|
||||
detected_device: hid.Device = None
|
||||
devices = hid.enumerate(vid=0x054c)
|
||||
if sys.platform.startswith('win32'):
|
||||
import pydualsense.hidguardian as hidguardian
|
||||
if hidguardian.check_hide():
|
||||
raise Exception('HIDGuardian detected. Delete the controller from HIDGuardian and restart PC to connect to controller')
|
||||
detected_device: hidapi.Device = None
|
||||
devices = hidapi.enumerate(vendor_id=0x054c)
|
||||
for device in devices:
|
||||
if device['vendor_id'] == 0x054c and device['product_id'] == 0x0CE6:
|
||||
if device.vendor_id == 0x054c and device.product_id == 0x0CE6:
|
||||
detected_device = device
|
||||
|
||||
|
||||
if detected_device == None:
|
||||
raise Exception('No device detected')
|
||||
|
||||
dual_sense = hid.Device(vid=detected_device['vendor_id'], pid=detected_device['product_id'])
|
||||
dual_sense = hidapi.Device(vendor_id=detected_device.vendor_id, product_id=detected_device.product_id)
|
||||
return dual_sense
|
||||
|
||||
def setLeftMotor(self, intensity: int):
|
||||
@@ -138,7 +120,7 @@ class pydualsense:
|
||||
|
||||
# read data from the input report of the controller
|
||||
inReport = self.device.read(self.receive_buffer_size)
|
||||
|
||||
print(inReport)
|
||||
# decrypt the packet and bind the inputs
|
||||
self.readInput(inReport)
|
||||
|
||||
@@ -538,4 +520,4 @@ class DSTrigger:
|
||||
if not isinstance(mode, TriggerModes):
|
||||
raise TypeError('Trigger mode parameter needs to be of type `TriggerModes`')
|
||||
|
||||
self.mode = mode
|
||||
self.mode = mode
|
||||
|
4
setup.py
4
setup.py
@@ -6,7 +6,7 @@ with open("README.md", "r") as fh:
|
||||
|
||||
setup(
|
||||
name='pydualsense',
|
||||
version='0.4.2',
|
||||
version='0.5.1',
|
||||
description='use your DualSense (PS5) controller with python',
|
||||
long_description=long_description,
|
||||
long_description_content_type="text/markdown",
|
||||
@@ -14,5 +14,5 @@ setup(
|
||||
author='Florian K',
|
||||
license='MIT License',
|
||||
packages=setuptools.find_packages(),
|
||||
install_requires=['hid>=1.0.4']
|
||||
install_requires=['hidapi-usb', 'cffi']
|
||||
)
|
||||
|
Reference in New Issue
Block a user