Python evdev эквивалент для OSX

Я написал скрипт на python, который опрашивает evdev для сканера штрих-кода HID (эмулирует клавиатуру): скрипт хорошо работает на платформах Linux (Ubuntu). Существует ли эквивалент evthon для OS X для evdev, который позволил бы незначительное портирование существующего сценария python?

Если у вас есть опыт работы с Python и вы настроили его для ввода с устройства HID, укажите это в своем ответе.

2 ответа

Решение

Я получил простой тест, работающий с использованием Cython-Hidapi (устанавливается как pip install hidapi - обратите внимание, что это отличается от того, что указано в комментариях, но, похоже, похоже на функцию). Я также установил hidapi-devel из macports, но я не уверен, что это необходимо, так как он продолжает работать после деактивации порта.

Изменив пример try.py, чтобы использовать VID/PID беспроводного устройства клавиатуры / мыши Microsoft USB следующим образом

from __future__ import print_function

import hid
import time

print("Opening the device")

h = hid.device()
h.open(1118, 2048) # A Microsoft wireless combo keyboard & mouse

print("Manufacturer: %s" % h.get_manufacturer_string())
print("Product: %s" % h.get_product_string())
print("Serial No: %s" % h.get_serial_number_string())

try:
    while True:
        d = h.read(64)
        if d:
            print('read: "{}"'.format(d))
finally:
    print("Closing the device")
    h.close()

И работает с $ sudo python try.py Мне удалось получить следующий вывод:

Opening the device
Manufacturer: Microsoft
Product: Microsoft® Nano Transceiver v2.0
Serial No: None
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 0, 0, 0, 0, 0, 0]"

--8<-- snip lots of repeated lines --8<--

read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 21, 0, 0, 0, 0, 0]"
read: "[0, 0, 21, 0, 0, 0, 0, 0]"
read: "[0, 0, 21, 0, 0, 0, 0, 0]"
read: "[0, 0, 21, 0, 0, 0, 0, 0]"
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 4, 0, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 0, 0, 0, 0, 0]"
read: "[0, 0, 4, 0, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 7, 0, 0, 0]"
read: "[0, 0, 4, 9, 7, 0, 0, 0]"
read: "[0, 0, 7, 0, 0, 0, 0, 0]"
^CClosing the device
Traceback (most recent call last):
  File "try.py", line 17, in <module>
    d = h.read(64)
KeyboardInterrupt

Конкретное устройство, которое я использую, похоже, перечисляет как несколько устройств HID для клавиатуры и мыши среди других вещей, так что, кажется, это немного случайно, какое вы получаете, но для сканера штрих-кода это должно быть довольно просто.

Я думаю, что нет порта evdev для Mac OS, потому что последний зависит от ядра Linux. Если вы хотите реализовать некоторую бизнес-логику для HID в Mac OS, вам следует использовать, как в комментариях, предложенную некоторую абстракцию высокого уровня. Но если вы хотите evdev на низком уровне, я думаю, что простой способ сделать это с помощью Docker. У меня нет опыта работы с HID-устройствами на Mac OS, но я решил ту же проблему с другим драйвером.

Другие вопросы по тегам