打印

USB自定义HID,在那里可以修改呢?HID是什么

[复制链接]
2474|15
手机看帖
扫描二维码
随时随地手机跟帖
沙发
jp_chen| | 2017-8-31 09:45 | 只看该作者
HID(Human Interface Device)人机接口设备类别是Windows最早支持的USB类别。由其名称可以了解HID设备是计算机直接与人交互的设备,例如键盘、鼠标和游戏杆等。

使用特权

评论回复
板凳
花落辞殇| | 2017-8-31 09:47 | 只看该作者
我们如何判断一个设备是不是HID设备呢?有什么标准码

使用特权

评论回复
地板
会飞的大白| | 2017-8-31 10:19 | 只看该作者
键盘鼠标都是人机交互的,没有人为操纵的,比如u盘,也是HID设备吗?

使用特权

评论回复
5
nobleliom| | 2017-8-31 10:22 | 只看该作者
HID设备并不一定要有人机交互功能,只要符合HID类别规范的设备都是HID设备

使用特权

评论回复
6
大白农| | 2017-8-31 12:46 | 只看该作者
HID类别规范是什么呢,在哪有定义

使用特权

评论回复
7
墙上的咖啡| | 2017-8-31 12:50 | 只看该作者
USB HID类是比较大的一个类,HID类设备属于人机交互操作的设备。用于控制计算机操作的一些方面,如USB鼠标,USB键盘,USB游戏操纵杆,USB触摸板,USB轨迹球、电话拨号设备、VCR遥控等等设备。另外,使用HID设备的一个好处就是,操作系统自带了HID类的驱动程序,而用户无需去开发很麻烦的驱动程序,只要直接使用API调用即可完成通信。所以很多简单的USB设备,喜欢枚举成HID设备,这样就可以不用安装驱动而直接使用

使用特权

评论回复
8
merry_zsp| | 2017-8-31 15:17 | 只看该作者
怎么修改成符合自己要求的HID设备呢?首先,HID设备必需有报告描述符,报告描述符描述的是数据的长度以及用途,所以最重要的就是修改报告描述符,然后修改端点描述符的大小就好了

使用特权

评论回复
9
hello牟| | 2017-8-31 15:21 | 只看该作者
如何判断自定义成功呢?

使用特权

评论回复
10
在路上的程序猿| | 2017-8-31 16:48 | 只看该作者
hello牟 发表于 2017-8-31 15:21
如何判断自定义成功呢?

如果能用USB枚举成功的话,就说明你定义成功了

使用特权

评论回复
11
新人求带| | 2017-8-31 16:51 | 只看该作者
usb还是很庞大的家族,建议你参考别人的例程进行修改,直接设备描述符的结构体中修改定义就好了

使用特权

评论回复
12
lt1231| | 2017-8-31 18:01 | 只看该作者
如果两个同样的设备插上去,能够准确的识别码?

使用特权

评论回复
13
gaoxiansheng| | 2017-8-31 18:04 | 只看该作者
lt1231 发表于 2017-8-31 18:01
如果两个同样的设备插上去,能够准确的识别码?

可以的,通过区分VID和PID就好了。

使用特权

评论回复
14
liutongda| | 2017-8-31 19:08 | 只看该作者
可以看看圈圈教你玩usb这本书,里面的介绍很详细的。

使用特权

评论回复
15
myidear| | 2017-8-31 19:11 | 只看该作者
//usb标准设备描述符
const U8 USB_DeviceDescriptor[] = {

    USB_DEVICE_DESC_SIZE,            //bLength字段。设备描述符的长度为18(0x12)字节
    USB_DEVICE_DESCRIPTOR_TYPE,          //bDescriptorType字段。设备描述符的编号为0x01
    WBVAL(0x0110),                        //bcdUSB字段。这里设置版本为USB1.1,即0x0110。
    0x00,                            //bDeviceClass字段。我们不在设备描述符中定义设备类,
    0x00,                              //bDeviceSubClass字段。bDeviceClass字段为0时,该字段也为0。
    0x00,                              //bDeviceProtocol字段。bDeviceClass字段为0时,该字段也为0。
    USB_MAX_PACKET0,                    //bMaxPacketSize0字段。端点0的最大包长度。
    WBVAL(0x8888),                      //idVender字段。厂商ID号,我们这里取0x8888,仅供实验用。
    WBVAL(0x8877),                      //idProduct字段。产品ID号,由于是第一个实验,我们这里取0x0001。\。
    WBVAL(0x0100),                    // 设备的版本
    0x01,                            //iManufacturer字段。厂商字符串的索引值,为了方便**和管理
    0x02,                            //iProduct字段。产品字符串的索引值。刚刚用了1,这里就取2吧。
    0x03,                              //iSerialNumber字段。设备的序列号字符串索引值。
    0x01                                //bNumConfigurations字段。该设备所具有的配置数。
};
修改这里的定义就好了,修改数组内容。

使用特权

评论回复
16
hello牟| | 2017-9-30 16:29 | 只看该作者
在路上的程序猿 发表于 2017-8-31 16:48
如果能用USB枚举成功的话,就说明你定义成功了

这只是初期的一小步,后面的步骤还多呢。

使用特权

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

本版积分规则

20

主题

133

帖子

0

粉丝