- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在Linux上使用LibUSB开发USB驱动程序,但是现在我想为Windows编译我的一个驱动程序(这是我第一次这样做)。
我的环境
我正在使用MinGW编译器(也使用Dev-cpp IDE)在Windows 7上进行操作,并且正在使用从this link下载的预编译libusb库。
我的设备:这是HID触摸设备。因此,Windows不需要驱动程序。我还有一个额外的端点来获取某些调试数据。
我的代码:
我已编译代码以列出连接到 native 的所有设备和USB设备,并且该代码有效。现在,我添加了代码以打开设备,以便获得设备句柄并开始通信。但是该函数返回-12,即LIBUSB_ERROR_NOT_SUPPORTED。
我该如何解决这个问题?
我通过Internet搜索,但没有找到解决该问题的明确解决方案。虽然它的代码可以在Linux上很好地工作。
附言:我已在下面添加了整个代码。 DoList();
函数可以正常工作,但是GetTRSDevice();
函数在libusb_open(dev, &handle);
处失败。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libusb.h>
libusb_device_handle* deviceHandle = NULL;
int DoList();
libusb_device_handle* GetTRSDevice(void);
int main()
{
int ret = libusb_init(NULL);
if (ret < 0) {
printf("Failed to init libusb");
return ret;
}
DoList();
deviceHandle = GetTRSDevice();
if(!deviceHandle) {
printf("Failed to locate device");
goto fail_dev_open;
}
printf("Device opened");
libusb_close(deviceHandle);
fail_dev_open:
libusb_exit(NULL);
return(ret);
}
int DoList()
{
libusb_device **devs;
ssize_t cnt;
cnt = libusb_get_device_list(NULL, &devs);
if (cnt < 0)
return (int) cnt;
libusb_device *dev;
int i = 0;
while ((dev = devs[i++]) != NULL) {
struct libusb_device_descriptor desc;
int r = libusb_get_device_descriptor(dev, &desc);
if (r < 0) {
fprintf(stderr, "failed to get device descriptor");
return(-1);
}
printf("%04x:%04x (bus %d, device %d)\n",
desc.idVendor, desc.idProduct,
libusb_get_bus_number(dev), libusb_get_device_address(dev));
}
libusb_free_device_list(devs, 1);
return 0;
}
libusb_device_handle* GetTRSDevice(void)
{
int i = 0;
ssize_t cnt;
libusb_device *dev;
libusb_device **devs;
libusb_device_handle* handle = NULL;
cnt = libusb_get_device_list(NULL, &devs);
if (cnt < 0) {
printf("Failed libusb_get_device_list");
return(0);
}
while ((dev = devs[i++]) != NULL) {
struct libusb_device_descriptor desc;
int ret = libusb_get_device_descriptor(dev, &desc);
if (ret < 0) {
printf("Failed libusb_get_device_descriptor");
continue;
}
if(desc.idVendor == 0X238f && desc.idProduct == 1) {
int ret = libusb_open(dev, &handle);
if (ret < 0) {
printf("Failed libusb_open: %d\n\r",ret);
break;
}
#ifndef WIN32
libusb_detach_kernel_driver(handle, 0);
#endif
ret = libusb_claim_interface(handle,0);
if (ret < 0) {
libusb_close(handle);
handle=NULL;
break;
}
break;
}
}
libusb_free_device_list(devs, 1);
return(handle);
}
最佳答案
似乎您需要安装winusb驱动程序-libusb可以在没有此驱动程序的情况下获取有关设备的信息,但无法打开它们。
http://libusb.6.n5.nabble.com/LIBUSB-ERROR-NOT-SUPPORTED-td5617169.html:
On Wed, Apr 4, 2012 at 11:52 PM, Quân Phạm Minh <[hidden email]> wrote:
although I never install winusb driver but I use libusb to get information of my usb (kingston usb, and already recognize by system)
是的,那是可能的。但是您无法打开设备并继续进行操作
事物。对于新用户而言,这是令人困惑的部分
libusb Windows后端,同样适用于Mac OSX。 libusb
可以获取带有不正确驱动程序的设备的一些基本信息
(例如:USB大容量存储设备),但将无法打开
设备,而无需将驱动程序更改为受支持的驱动程序。
-小凡
关于libusb_open在Windows 7上返回 'LIBUSB_ERROR_NOT_SUPPORTED',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17350177/
我在使用 jni 的 Android 应用程序中使用 libusb。我能够使用 libusb 找到设备。但打不开。 TestExP.c #include #include #include #i
我正在尝试设置一个 eclipse 开发环境来使用 stm32f303 nucleo 32 板。 http://www.st.com/en/evaluation-tools/nucleo-f303k8
我正在尝试安装 cython-hidapi 以在 Ubuntu 12.04 上读取 USB。我已按照 https://github.com/gbishop/cython-hidapi 的说明进行操作并
我是一名优秀的程序员,十分优秀!