本帖最后由 wang12zhe 于 2020-12-3 08:54 编辑
这几天在研究Linux 下的USB Gadget HID 设备,想自定义一个HID设备和上位机通信,
步骤1
根据源码里\Documentation\usb\gadget_hid.txt 文档描述帮参考https://blog.csdn.net/luckywang1103/article/details/41282551 的文章后,在出厂源码的基础上进行修改
自己将hidg_func_description实现成如下的样子
static struct hidg_func_descriptor my_hid_data = {
.subclass = 0, /* No subclass */
.protocol = 1, /* Keyboard */
.report_length = 8,
.report_desc_length = 63,
.report_desc = {
// Custom communication
0x06,0xA0,0xFF,//用法页(FFA0h, vendor defined)
0x09, 0x01,//用法(vendor defined)
0xA1, 0x01,//集合(Application)
0x09, 0x02 ,//用法(vendor defined)
0xA1, 0x00,//集合(Physical)
0x06,0xA1,0xFF,//用法页(vendor defined)
//输入报告
0x09, 0x03 ,//用法(vendor defined)
0x09, 0x04,//用法(vendor defined)
0x15, 0x80,//逻辑最小值(0x80 or -128)
0x25, 0x7F,//逻辑最大值(0x7F or 127)
0x35, 0x00,//物理最小值(0)
0x45, 0xFF,//物理最大值(255)
0x75, 0x08,//报告长度Report size (8位)
0x95, 0x40,//报告数值(64 fields)
0x81, 0x02,//输入(data, variable, absolute)
//输出报告
0x09, 0x05,//用法(vendor defined)
0x09, 0x06,//用法(vendor defined)
0x15, 0x80,//逻辑最小值(0x80 or -128)
0x25, 0x7F,//逻辑最大值(0x7F or 127)
0x35, 0x00,//物理最小值(0)
0x45,0xFF,//物理最大值(255)
0x75,0x08,//报告长度(8位)
0x95, 0x40,//报告数值(64 fields)
0x91, 0x02,//输出(data, variable, absolute)
0xC0,//集合结束(Physical)
0xC0//集合结束(Application)
}
};
然后编译并加载模块后,通过OTG 线将开发板街道电脑上,在Win10的设备管理器发现了这个HID 设备,但是显示驱动不正常,下图中带黄色的感叹号图标的就是识别到的HID 设备
问题1. 为什么Windows里不能识别这个USB设备,如何才能让Windows 识别该设备并正常通信?
问题2.
我尝试修改 hidg_func_description 里的report_desc,参考网上的report_desc的值(对应着键盘和鼠标),WIN10里能正常识别,但USB 调试助手无法打开对应的设备,这个问题是不是因为Windows独占了键盘和鼠标?
有大神做过相应的应用吗,还请不吝赐教
|