如何解决libusb 相当于 PyUSB usb.util.find_descriptor
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 举报,一经查实,本站将立刻删除。