问题描述
PyUSB 有一个名为 usb.util.find_descriptor
的小实用函数,顾名思义,它允许我搜索具有特定条件的描述,例如:
ep = usb.util.find_descriptor(
intf,# match the first OUT endpoint
custom_match = \
lambda e: \
usb.util.endpoint_direction(e.bEndpointAddress) == \
usb.util.ENDPOINT_OUT)
我需要在使用 libusb 构建的 C++ 应用程序中使用相同的功能。但是我在 libusb API specification 中没有看到任何类似的东西。在 libusb 之上实现相同功能的最简单方法是什么?
我使用的是 Linux,如果这有区别的话。但是,除非严格要求,否则我宁愿不添加任何额外的依赖项。
更新:
这是我目前所拥有的:
libusb_config_descriptor* config;
int ret = libusb_get_config_descriptor(m_dev,0 /* config_index */,&config);
if (ret != LIBUSB_SUCCESS) {
raise_exception(std::runtime_error,"libusb_get_config_descriptor() Failed: " << usb_strerror(ret));
}
// Do not assume endpoint_in is 1
const libusb_interface *interface = config->interface;
const libusb_interface_descriptor configuration = interface->altsetting[0];
for(int i = 0; i < configuration.bNumEndpoints; ++i) {
const libusb_endpoint_descriptor endpoint = configuration.endpoint[i];
if ((endpoint.bEndpointAddress & LIBUSB_ENDPOINT_IN) == LIBUSB_ENDPOINT_IN) {
endpoint_in = endpoint.bEndpointAddress >> 8; // 3 first bytes
log_debug("endpoint_in: " << endpoint_in);
}
}
迭代就是这样工作的,尽管它看起来很丑陋,而且大部分是不可重用的。此外,使用以下命令提取端点编号:
endpoint_in = endpoint.bEndpointAddress >> 8; // 3 first bytes
似乎不起作用。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)