库libusb提供对USB设备的跨平台访问。
起点是获取连接的USB设备列表。
下面的代码试图从libusb获取这样的列表,但崩溃了。
这个问题与is_required
的定义有关。
和类型libusb_get_device_list
虽然其他事情也可能是错误的。
如何正确定义_libusb_device_list**
?
C函数的文档在这里:http://libusb.sourceforge.net/api-1.0/group__dev.html#gac0fe4b65914c5ed036e6cbec61cb0b97
libusb_get_device_list
答案 0 :(得分:3)
您的签名是正确的(尽管您的参数名称不太正确 - 输出参数是NULL
- 终止的数组,而不是链接列表)。但是,即使您不使用上下文,libusb也要求您调用libusb_init
。使用libusb_init
调用NULL
将初始化默认上下文。
您需要使用libusb_init
调用NULL
来初始化默认上下文:
(define-usb libusb_init/default (_fun (_pointer = #f) -> _int)
#:c-id libusb_init)
(libusb_init/default)
...或者调用它来生成以后可以提供给libusb_get_device_list
的上下文:
(define-usb libusb_init (_fun (ctx : (_ptr o _libusb_context))
-> (status : _int)
-> (values ctx status)))
(define-values [ctx status] (libusb_init))