我正在尝试使用libusb-win32通过USB到DMX512接口将原始数据发送到我的计算机设置的灯光。到目前为止,一切似乎都运行良好,除了某些原因,程序无法识别适配器上的任何端点。 以下是我的代码片段:
// initialize
usb_init();
usb_find_busses();
usb_find_devices();
usb_bus busses = *usb_get_busses();
// open the device
struct usb_device *dev = busses.devices;
usb_dev_handle *h = usb_open(dev);
usb_claim_interface(h, 0);
...
// close the device
usb_release_interface(h, 0);
usb_close(h);
当我查看调试器中的结构时,这是其中的数据:
dev {
next //<NULL>
prev //<NULL>
filename //0x008a9938
bus //0x008a9710
descriptor //{bLength = 18 ... }
config {
bLength //9
bDescriptorType //2
wTotalLength //18
bNumInterfaces //1
bConfigurationValue //1
iConfiguration //0
bmAttributes //128
MaxPower //250
interface {
altsetting {
bLength //9
bDescriptorType //4
bInterfaceNumber //0
bAlternateSetting //0
bNumEndpoints //0
bInterfaceClass //0
bInterfaceSubClass //0
bInterfaceProtocol //0
iInterface //0
endpoint //<NULL>
extra //<NULL>
extralen //0
}
num_altsetting //1
}
extra //<NULL>
extralen //0
}
dev //<NULL>
devnum //1
num_children //0
children //<NULL>
}
可以看出,没有识别出端点,最重要的是只有一个设备,一个配置,一个接口和一个altset,这就是为什么我处于死胡同。
所以我试图找出用于写入USB的端点地址,或者我的适配器是否可能与此库不兼容。
提前致谢
答案 0 :(得分:1)
这仅表示您仅限于端点0x00上的控制传输通信。每个设备都必须具有端点0并接受通过此端点的控制传输(因为这是主机控制器将与之对话以枚举或配置设备的端点)。控制传输可以在一个端点上进行读写。
您对如何控制此设备或任何嗅探的USB传输没有任何描述?通过随机测试确定使用控制转移的所有数据将花费长时间。 ;)
答案 1 :(得分:0)
就像跟进一样,我确实设法让灯光正常工作。 Dryman是正确的,因为我不得不在端点0x00上使用控制传输。我实际上甚至不需要像我在问题的示例代码中那样声明接口。它真的只是使用以下代码行:
usb_control_msg(h, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT, cmd_SetSingleChannel, value, channel, buffer, sizeof(buffer), 5000);
h
是我的设备句柄,cmd_SetSingleChannel
是一个值为1的整数,value
是一个整数,表示您正在设置的通道的值{{1是一个整数,表示您正在设置的通道,channel
是一个大小为8的空char数组。