mirror of https://github.com/m-labs/artiq.git
59 lines
2.0 KiB
Python
59 lines
2.0 KiB
Python
import os
|
|
import atexit
|
|
import ctypes
|
|
import ctypes.util
|
|
|
|
if "." not in os.environ["PATH"].split(";"):
|
|
os.environ["PATH"] += ";."
|
|
dir = os.path.split(__file__)[0]
|
|
if dir not in os.environ["PATH"].split(";"):
|
|
os.environ["PATH"] += ";{}".format(dir)
|
|
|
|
for n in "hidapi-libusb hidapi-hidraw hidapi".split():
|
|
path = ctypes.util.find_library(n)
|
|
if path:
|
|
break
|
|
if not path:
|
|
raise ImportError("no hidapi library found")
|
|
hidapi = ctypes.CDLL(path)
|
|
|
|
|
|
class HidDeviceInfo(ctypes.Structure):
|
|
pass
|
|
|
|
|
|
HidDeviceInfo._fields_ = [
|
|
("path", ctypes.c_char_p),
|
|
("vendor_id", ctypes.c_ushort),
|
|
("product_id", ctypes.c_ushort),
|
|
("serial", ctypes.c_wchar_p),
|
|
("release", ctypes.c_ushort),
|
|
("manufacturer", ctypes.c_wchar_p),
|
|
("product", ctypes.c_wchar_p),
|
|
("usage_page", ctypes.c_ushort),
|
|
("usage", ctypes.c_ushort),
|
|
("interface", ctypes.c_int),
|
|
("next", ctypes.POINTER(HidDeviceInfo)),
|
|
]
|
|
|
|
|
|
hidapi.hid_enumerate.argtypes = [ctypes.c_ushort, ctypes.c_ushort]
|
|
hidapi.hid_enumerate.restype = ctypes.POINTER(HidDeviceInfo)
|
|
hidapi.hid_free_enumeration.argtypes = [ctypes.POINTER(HidDeviceInfo)]
|
|
hidapi.hid_open.argtypes = [ctypes.c_ushort, ctypes.c_ushort,
|
|
ctypes.c_wchar_p]
|
|
hidapi.hid_open.restype = ctypes.c_void_p
|
|
hidapi.hid_close.argtypes = [ctypes.c_void_p]
|
|
hidapi.hid_read_timeout.argtypes = [ctypes.c_void_p, ctypes.c_char_p,
|
|
ctypes.c_size_t, ctypes.c_int]
|
|
hidapi.hid_read.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_size_t]
|
|
hidapi.hid_write.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_size_t]
|
|
hidapi.hid_send_feature_report.argtypes = [ctypes.c_void_p, ctypes.c_char_p,
|
|
ctypes.c_size_t]
|
|
hidapi.hid_get_feature_report.argtypes = [ctypes.c_void_p, ctypes.c_char_p,
|
|
ctypes.c_size_t]
|
|
hidapi.hid_error.argtypes = [ctypes.c_void_p]
|
|
hidapi.hid_error.restype = ctypes.c_wchar_p
|
|
|
|
atexit.register(hidapi.hid_exit)
|