2016-12-10 44 views
6

Napisałem skrypt python, który sonduje evdev dla skanera kodów kreskowych HID (emuluje klawiaturę): skrypt działa dobrze na platformach Linux (Ubuntu). Czy istnieje odpowiednik Pythona OS X dla evdev, który pozwoliłby na mniejsze przenoszenie istniejącego skryptu Pythona?Python evdev odpowiednik dla OSX

Jeśli masz doświadczenie w Pythonie i skonfigurowałeś je dla wejścia urządzenia HID, proszę to zaznaczyć w swojej odpowiedzi.

+0

Nie jestem odpowiedzią, ale znalazłem [to] (http://www.signal11.us/oss/hidapi/) i polecenie 'ioreg -rtn IOHIDKeyboard'. – Potatoswatter

+1

Czy próbowałeś https://github.com/apmorton/pyhidapi? – pigletfly

Odpowiedz

2

Domyślam się, że nie ma portu evdev dla mac OS, ponieważ ostatni zależy od jądra Linuksa. Jeśli chcesz zaimplementować jakąś logikę biznesową na HID w mac OS, powinieneś użyć, jak w komentarzach sugerujących jakąś abstrakcję wysokiego poziomu. Ale jeśli chcesz evdev na niskim poziomie, myślę, że łatwo to zrobić using the Docker. Nie mam doświadczenia z urządzeniami HID na Mac OS, ale rozwiązałem ten sam problem z innym sterownikiem.

4

Mam prosty test działający przy użyciu cython-hidapi (instalowalny jako pip install hidapi - zauważ, że jest inny niż ten powiązany w komentarzach, ale wydaje się być podobny w funkcji). Zainstalowałem także hidapi-devel z Macports, ale nie jestem pewien, czy jest to konieczne, ponieważ nadal działa po dezaktywacji portu.

Modyfikując przykład try.py użyć VID/PID bezprzewodowego urządzenia klawiatura/mysz Microsoft USB następująco

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() 

i działa z $ sudo python try.py udało mi się uzyskać następujące dane wyjściowe:

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 

Poszczególne urządzenie, którego używam, wydaje się wymieniać jako wiele różnych urządzeń HID dla klawiatury &, więc wydaje się, że jest to trochę przypadkowe, ale otrzymujesz skaner kodów kreskowych. powinno być całkiem proste.