GD407 USB CUSTOM HID 不能识别

[复制链接]
557|14
手机看帖
扫描二维码
随时随地手机跟帖
shanzhihun|  楼主 | 2020-10-28 14:01 | 显示全部楼层 |阅读模式
typedef struct
{
    usb_descriptor_configuration_struct        Config;

    usb_descriptor_interface_struct            HID_Interface;            
    usb_hid_descriptor_hid_struct              HID_VendorHID;
    usb_descriptor_endpoint_struct             HID_ReportINEndpoint;
    usb_descriptor_endpoint_struct             HID_ReportOUTEndpoint;
} usb_descriptor_configuration_set_struct;
上面是提供的自定义HID例程上的结构体定义,直接可以识别和发送接收数据。
后来需要个接口,我就重新加了接口    usb_descriptor_interface_struct            HID_Interface, HID1_Interface;    ,其他什么都没变,就不能识别USB
下面是改的
typedef struct
{
    usb_descriptor_configuration_struct        Config;

    usb_descriptor_interface_struct            HID_Interface, HID1_Interface;            
    usb_hid_descriptor_hid_struct              HID_VendorHID;
    usb_descriptor_endpoint_struct             HID_ReportINEndpoint;
    usb_descriptor_endpoint_struct             HID_ReportOUTEndpoint;
} usb_descriptor_configuration_set_struct;

使用特权

评论回复
shanzhihun|  楼主 | 2020-10-28 14:03 | 显示全部楼层
不知道什么原因,请大侠指点一二

使用特权

评论回复
sonicll| | 2020-10-28 15:15 | 显示全部楼层
你添加了接口以后,Config配置描述符里的wTotalLength和bNumInterfaces,也需要修改才行,这两个参数一个是配置描述符的总长度,一个是接口数量

使用特权

评论回复
shanzhihun|  楼主 | 2020-10-28 17:01 | 显示全部楼层
sonicll 发表于 2020-10-28 15:15
你添加了接口以后,Config配置描述符里的wTotalLength和bNumInterfaces,也需要修改才行,这两个参数一个是 ...

感谢您的回复。我只是在头文件结构体定义里面加了个HID1_Interface,   描述符啥都没改,也没加新的接口。 我没有在配置里面添加新的描述符。所以接口数量和长度应该不应改吧,不过改了也实验了,不识别,只要把HID1_Interface,这个定义去掉就可以了。

使用特权

评论回复
原来是wjc| | 2020-10-28 23:56 | 显示全部楼层
原来Config配置描述符里的也要修改啊。

使用特权

评论回复
原来是wjc| | 2020-10-28 23:58 | 显示全部楼层
感谢沙发讲解,地板听的很开心。

使用特权

评论回复
原来是wjc| | 2020-10-28 23:59 | 显示全部楼层
接口数量和长度改了也不识别这一点其实确实是。

使用特权

评论回复
shanzhihun|  楼主 | 2020-10-29 10:36 | 显示全部楼层
原来是wjc 发表于 2020-10-28 23:59
接口数量和长度改了也不识别这一点其实确实是。

不能 光笑,支个招啊

使用特权

评论回复
shanzhihun|  楼主 | 2020-10-29 13:17 | 显示全部楼层
今天测试又发现个现象,原来USB都能识别,现在我把结构体里面的定义顺序换一下比如把  usb_descriptor_interface_struct  HID_Interface;    移到  usb_descriptor_endpoint_struct             HID_ReportOUTEndpoint;下面定义,其他都没有改变 ,USB也不能识别。
typedef struct
{
    usb_descriptor_configuration_struct        Config;

   // usb_descriptor_interface_struct            HID_Interface;            
    usb_hid_descriptor_hid_struct              HID_VendorHID;
    usb_descriptor_endpoint_struct             HID_ReportINEndpoint;
    usb_descriptor_endpoint_struct             HID_ReportOUTEndpoint;
   usb_descriptor_interface_struct            HID_Interface;

} usb_descriptor_configuration_set_struct;

使用特权

评论回复
sonicll| | 2020-10-29 13:32 | 显示全部楼层
shanzhihun 发表于 2020-10-29 13:17
今天测试又发现个现象,原来USB都能识别,现在我把结构体里面的定义顺序换一下比如把  usb_descriptor_inte ...

这个肯定不能移动的,USB描述符的格式都是有标准的,学习一下USB的描述符吧

使用特权

评论回复
shanzhihun|  楼主 | 2020-10-29 13:41 | 显示全部楼层
我增加接口typedef struct
{
    usb_descriptor_configuration_struct Config;

    usb_descriptor_interface_struct            HID_Interface;
    usb_hid_descriptor_hid_struct              HID_VendorHID;
    usb_descriptor_endpoint_struct             HID_ReportINEndpoint;
    usb_descriptor_endpoint_struct             HID_ReportOUTEndpoint;
#if 1
        usb_descriptor_interface_struct            HID1_Interface;
    usb_hid_descriptor_hid_struct              HID1_VendorHID;
    usb_descriptor_endpoint_struct             HID1_ReportINEndpoint;
    usb_descriptor_endpoint_struct             HID1_ReportOUTEndpoint;
#endif
} usb_descriptor_configuration_set_struct;
其他都没变,也不能识别。

使用特权

评论回复
sonicll| | 2020-10-29 13:54 | 显示全部楼层
shanzhihun 发表于 2020-10-29 13:41
我增加接口typedef struct
{
    usb_descriptor_configuration_struct Config;

USB描述符的每个字节都是有确切含义的,你改了这个结构体,不给结构体实体的成员设置正确的数值的话,PC端肯定会解包错误的,真心建议你学习一下USB的基础知识,这样乱改,效率实在太低

使用特权

评论回复
shanzhihun|  楼主 | 2020-11-2 17:01 | 显示全部楼层
sonicll 发表于 2020-10-29 13:54
USB描述符的每个字节都是有确切含义的,你改了这个结构体,不给结构体实体的成员设置正确的数值的话,PC ...

发个原文件,能帮忙看下吗。

使用特权

评论回复
shanzhihun|  楼主 | 2020-11-2 17:02 | 显示全部楼层
本帖最后由 shanzhihun 于 2020-11-2 17:41 编辑
sonicll 发表于 2020-10-29 13:54
USB描述符的每个字节都是有确切含义的,你改了这个结构体,不给结构体实体的成员设置正确的数值的话,PC ...


使用特权

评论回复
shanzhihun|  楼主 | 2020-11-2 17:18 | 显示全部楼层
本帖最后由 shanzhihun 于 2020-11-2 17:24 编辑

刚才试了一下修改USB 的PID的值,其它都没改变,就可以识别成两个接口了。不知道为什么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

41

帖子

2

粉丝