Я пытаюсь заставить Raspberry Pi общаться с четырьмя одинаковыми USB-устройствами, используя HIDAPI (контроллеры PlayStation Buzz). Обычный метод использования open () заключается в передаче идентификатора производителя и продукта, но, поскольку у меня есть идентичные устройства, я не могу этого сделать, поскольку все команды открытия будут одинаковыми. Альтернативный способ заключается в открытии () с использованием пути, я пытался сделать это, но он продолжает сбой.
У меня есть класс Buzzer, который обрабатывает настройку настройки зуммера (ов) Класс устройства, который будет иметь декодирование сообщений от контроллера Buzz, а также должен обрабатывать свет. У меня есть немного python, чтобы прочитать контроллеры и попытаться открыть первое в списке и включить свет. Я сократил количество устройств до одного контроллера, чтобы упростить процесс.
Я довольно новичок в python, и у меня есть другой код, работающий с hid.open (поставщик, продукт). Я просто продолжаю нажимать блок с использованием пути.
Любой совет?
Спасибо
Main
import DeviceClass
my_buzz = BuzzerClass.BuzzerClass()
if my_buzz.device_count()>0:
d=my_buzz.pathname_list()
print("List size ="+ str(len(d)))
else:
print("No devices connected!")
print ("pathname - " + str(d[0]))
buzzer=DeviceClass.DeviceClass()
buzzer.open_device(d[0])
buzzer.flashlights()
Класс устройства
import hid
class DeviceClass:
lights_off = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
lights_on = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]
def __init__(self):
self.hid = hid.device()
def open_device(self, pathname):
self.hid.open(pathname)
self.hid.set_nonblocking(1)
self.hid.write(self.light_array)
def flashlights(self):
self.hid.write(self.lights_off)
self.hid.write(self.lights_on)
Зуммер класса
import hid
class BuzzerClass:
# Namtai details are Vendor=1356 Product =4096
# Logitech details are Vendor=1356 Product =2
def __init__(self):
self.pathname = ""
self.idVendor1 = 1356
self.idProduct1 = 4096
self.idVendor2 = 1356
self.idProduct2 = 2
# Check to see if any devices are connected and add any connected devices to
# the buzz_controllers() list
# Return the list of connected items
def connected_devices(self):
buzz_controllers = []
#Get the list of Namtai controllers
if hid.enumerate(self.idVendor1, self.idProduct1):
# print("Namtai connected")
for d in hid.enumerate(self.idVendor1, self.idProduct1):
buzz_controllers.append(d)
#Get the list of Logitech controllers
if hid.enumerate(self.idVendor2, self.idProduct2):
# print("Logitech connected")
for d in hid.enumerate(self.idVendor2, self.idProduct2):
buzz_controllers.append(d)
return (buzz_controllers)
# calls connected_devices() and return the number of connected devices
def device_count(self):
return len(self.connected_devices())
# call connected devices and extract pathnames and place in list. return list of pathnames.
def pathname_list(self):
pathnames = []
for d in self.connected_devices():
keys = list(d.keys())
for key in keys:
if "path" in key:
print(str(d[key]))
pathnames.append(d[key])
return pathnames
Корпус
Python 3.6.9 (default, Apr 18 2020, 01:56:04)
[GCC 8.4.0] on andrew-desktop, Standard
>>> b'0007:0008:00'
List size =1
pathname - b'0007:0008:00'
Exception "unhandled TypeError"
an integer is required
File: /usr/local/lib/python3.6/dist-packages/hid.cpython-36m-x86_64-linux-gnu.so, Line: 47
>>>