首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用libusb-win32与USB to DMX512接口通信,找不到任何端点

使用libusb-win32与USB to DMX512接口通信,找不到任何端点
EN

Stack Overflow用户
提问于 2016-06-10 03:04:10
回答 2查看 546关注 0票数 0

我正在尝试使用libusb-win32通过USB to DMX512接口将原始数据从我的计算机发送到一组灯光。到目前为止,一切似乎都很正常,除了由于某种原因,程序不能识别适配器上的任何端点。下面是我的代码片段:

代码语言:javascript
运行
复制
// 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);

当我在调试器中查看结构时,下面是其中的数据:

代码语言:javascript
运行
复制
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>
}

可以看到,没有识别的端点,最重要的是只有一个设备,一个配置,一个接口和一个替代设置,这就是为什么我走到了死胡同。

因此,我正在尝试找出用于写入USB的端点地址,或者是否有可能我拥有的适配器与该库不兼容。

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2016-06-10 15:51:51

这仅仅意味着您仅限于在端点0x00上通过控制传输进行通信。每个设备都必须有一个端点0,并接受通过该端点的控制转移(因为这是主机控制器将与之对话以枚举或配置设备的端点)。控制传输可以在一个端点上读取和写入。

你没有关于如何控制这个设备或任何嗅探到的usb传输的描述吗?通过随机测试找出要使用控制传输的所有数据将花费很长的时间。;)

票数 1
EN

Stack Overflow用户

发布于 2016-06-17 03:02:01

作为后续工作,我确实设法让灯工作了。Dryman是正确的,我必须在端点0x00上使用控制转移。实际上,我甚至不需要像在示例代码中那样声明这个问题的接口。它实际上只是使用了下面这行代码:

代码语言:javascript
运行
复制
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是一个表示您正在设置的通道的值的整数,channel是一个表示正在设置的通道的整数,buffer是一个大小为8的空字符数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37734216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档