USB HID Keyboard
hid标准键盘
hid标准键盘HID标准键盘。
HID(Human Interface Device)标准键盘是一种标准化的计算机键盘接口,它可以让计算机和键盘之间进行通讯和交互。
HID标准键盘的出现,为用户带来了更加便捷、稳定和高效的输入体验。
本文将介绍HID标准键盘的特点、优势以及在实际应用中的价值。
HID标准键盘具有以下几个特点:1. 标准化接口,HID标准键盘采用USB接口,这使得它可以与绝大多数计算机硬件兼容。
无需安装额外的驱动程序,插上即用,简单方便。
2. 多功能按键,HID标准键盘通常配有多个功能按键,如音量调节、静音、播放控制等。
这些按键的设计使得用户可以更加便捷地进行多媒体操作,提高了工作效率。
3. 舒适手感,HID标准键盘的按键布局合理,按键手感舒适,击键灵敏。
长时间使用不易疲劳,符合人体工程学设计,保护用户的手部健康。
4. 高度可靠性,HID标准键盘经过严格的质量测试,具有较高的可靠性和稳定性。
长期使用不易出现故障,为用户提供持久的输入保障。
HID标准键盘在实际应用中具有诸多优势:1. 适用广泛,HID标准键盘适用于个人电脑、笔记本电脑、工作站等各种计算机设备,满足了不同用户群体的需求。
2. 兼容性强,HID标准键盘采用标准化接口,与各种操作系统兼容性良好,如Windows、MacOS、Linux等,无需额外安装驱动程序。
3. 操作便捷,HID标准键盘配有多功能按键,用户可以通过按下相应按键实现音量调节、播放控制等功能,提高了操作的便捷性和效率。
4. 高性价比,HID标准键盘价格适中,性能稳定可靠,是用户在购买键盘时的不错选择。
总的来说,HID标准键盘在计算机输入设备中具有重要的地位和作用。
它的出现大大提高了用户的输入体验,为用户带来了更加便捷、稳定和高效的操作方式。
随着科技的不断发展,相信HID标准键盘会在未来发展中不断完善和创新,为用户带来更好的使用体验。
在选择HID标准键盘时,用户可以根据自己的实际需求和预算进行选择,选购时可以关注键盘的品牌、性能、质量以及售后服务等方面,以便选购到性价比高的产品。
USB HID Keyboard
/* USB report descriptor */PROGMEM char usbHidReportDescriptor[USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH] = { 0x05, 0x01, // USAGE_PAGE (Generic Desktop)0x09, 0x06, // USAGE (Keyboard)0xa1, 0x01, // COLLECTION (Application)0x05, 0x07, // USAGE_PAGE (Keyboard)0x19, 0xe0, // USAGE_MINIMUM (Keyboard // LeftControl)0x29, 0xe7, // USAGE_MAXIMUM (Keyboard // Right GUI)0x15, 0x00, // LOGICAL_MINIMUM (0)0x25, 0x01, // LOGICAL_MAXIMUM (1)0x75, 0x01, // REPORT_SIZE (1)0x95, 0x08, // REPORT_COUNT (8)0x81, 0x02, // INPUT (Data,Var,Abs)0x95, 0x01, // REPORT_COUNT (1)0x75, 0x08, // REPORT_SIZE (8)0x25, 0x65, // LOGICAL_MAXIMUM (101)0x19, 0x00, // USAGE_MINIMUM (Reserved // (no event indicated))0x29, 0x65, // USAGE_MAXIMUM // (Keyboard Application)0x81, 0x00, // INPUT (Data,Ary,Abs)0xc0 // END_COLLECTION};#define KEY_UP 82#define KEY_DOWN 81#define KEY_LEFT 80#define KEY_RIGHT 79/* -----------------------------*/static void timerPoll(void){static uchar timerCnt;static uchar i;if(TIFR & (1 << TOV1)){TIFR = (1 << TOV1); /* clear overflow */if(++timerCnt >= 63){ /* ~ 1 second interval */ timerCnt = 0;if (!FlagKey) {FlagKey = 1;if (++i > 3)i=0;switch (i) {case 0:reportBuffer[0] = 0;reportBuffer[1] = KEY_RIGHT;break;case 1:reportBuffer[0] = 0;reportBuffer[1] = KEY_DOWN;break;case 2:reportBuffer[0] = 0;reportBuffer[1] = KEY_LEFT;break;case 3:reportBuffer[0] = 0;reportBuffer[1] = KEY_UP;break;}}}}}////0x05, 0x01, // USAGE_PAGE (Generic Desktop)0x09, 0x06, // USAGE (Keyboard)0xa1, 0x01, // COLLECTION (Application)0x05, 0x07, // USAGE_PAGE (Keyboard)0x19, 0xe0, // USAGE_MINIMUM (Keyboard // LeftControl) 0x29, 0xe7, // USAGE_MAXIMUM (Keyboard // Right GUI)0x15, 0x00, // LOGICAL_MINIMUM (0)0x25, 0x01, // LOGICAL_MAXIMUM (1)0x75, 0x01, // REPORT_SIZE (1)0x95, 0x08, // REPORT_COUNT (8)0x81, 0x02, // INPUT (Data,Var,Abs)0x95, 0x01, // REPORT_COUNT (1)0x75, 0x08, // REPORT_SIZE (8)0x25, 0x65, // LOGICAL_MAXIMUM (101)0x19, 0x00, // USAGE_MINIMUM (Reserved // (no event indicated))0x29, 0x65, // USAGE_MAXIMUM // (Keyboard Application)0x81, 0x00, // INPUT (Data,Ary,Abs)0xc0 // END_COLLECTION0x01050x06090x01A10x07050xE0190xE7290x00150x01250x01750x08950x02810x08750x01950x01810x00190x01050x02090x01A10x01090x00A10x09050x01190x03290x00150x01250x01750x03950x02810x05750x019530x65290x00150x65250x08750x06950x00810x08050x01190x05290x00150x01250x01750x05950x02910x03750x01950x01910xC0rom struct{byte report[HID_RPT01_SIZE];}hid_rpt01={0x05, 0x01, /* Usage Page (Generic Desktop) */ 0x09, 0x06, /* Usage (Keyboard) */ 0xA1, 0x01, /* Collection (Application) */0x05, 0x07, /* Usage page (Key Codes) */0x19, 0xE0, /* Usage minimum (224) */0x29, 0xE7, /* Usage maximum (231) */0x15, 0x00, /* Logical minimum (0) */0x25, 0x01, /* Logical maximum (1) */0x75, 0x01, /* Report size (1) */0x95, 0x08, /* Report count (8) */0x81, 0x02, /* Input (data, variable, absolute) */0x95, 0x01, /* Report count (1) */0x75, 0x08, /* Report size (8) */0x81, 0x01, /* Input (constant) */0x95, 0x06, /* Report count (6) */0x75, 0x08, /* Report size (8) */0x15, 0x00, /* Logical minimum (0) */0x25, 0x65, /* Logical maximum (101) */0x05, 0x07, /* Usage page (key codes) */0x19, 0x00, /* Usage minimum (0) */0x29, 0x65, /* Usage maximum (101) */0x81, 0x00, /* Input (data, array) */0xC0}; /* End Collection */rom struct{byte report[HID_RPT02_SIZE];}hid_rpt02={0x05, 0x0c, // USAGE_PAGE (Consumer Devices) 0x09, 0x01, // USAGE (Consumer Control)0xa1, 0x01, // COLLECTION (Application)0x85, 0x01, // REPORT_ID (1)0x15, 0x00, // LOGICAL_MINIMUM (0)0x25, 0x01, // LOGICAL_MAXIMUM (1)0x75, 0x01, // REPORT_SIZE (1)0x95, 0x10, // REPORT_COUNT (16)0x09, 0xe2, // USAGE (Mute) 0x010x09, 0xe9, // USAGE (Volume Up) 0x020x09, 0xea, // USAGE (Volume Down) 0x030x09, 0xcd, // USAGE (Play/Pause) 0x040x09, 0xb7, // USAGE (Stop) 0x050x09, 0xb6, // USAGE (Scan Previous Track) 0x060x09, 0xb5, // USAGE (Scan Next Track) 0x070x0a, 0x8a, 0x01, // USAGE (Mail) 0x080x0a, 0x92, 0x01, // USAGE (Calculator) 0x090x0a, 0x21, 0x02, // USAGE (www search) 0x0a0x0a, 0x23, 0x02, // USAGE (www home) 0x0b0x0a, 0x2a, 0x02, // USAGE (www favorites) 0x0c 0x0a, 0x27, 0x02, // USAGE (www refresh) 0x0d0x0a, 0x26, 0x02, // USAGE (www stop) 0x0e0x0a, 0x25, 0x02, // USAGE (www forward) 0x0f0x0a, 0x24, 0x02, // USAGE (www back) 0x100x81, 0x62, // INPUT (Data,Var,Abs,NPrf,Null) 0xc0,// System Control Descriptor0x05, 0x01, /* Usage Page (Generic Desktop) */0x09, 0x80, /* Usage (System Control) */0xA1, 0x01, /* Collection (Application) */0x85, 0x02, /* Report ID 0x02 [SYSTEM CTRL] */0x19, 0x82, /* Usage minimum (System Sleep) */0x29, 0x83, /* Usage maximum (System Wake up) */0x95, 0x02, /* Report count (2) */0x81, 0x06, /*Input (data, variable, relative, Preferred) */0x95, 0x06, /* Report count (6) */0x81, 0x01, /*Input (Constant) */0xC0 /*End Collection */};//Hid Table for interface:0 alternate:0 Length:0x3FDescriptor_type_22_index_0_0_table:DB 0x05,0x01DB 0x09,0x06DB 0xA1,0x01DB 0x05,0x07 ;DB 0x19,0xE0DB 0x29,0xE7DB 0x15,0x00DB 0x25,0x01 ;DB 0x75,0x01DB 0x95,0x08DB 0x81,0x02DB 0x95,0x01 ;DB 0x75,0x08DB 0x81,0x03DB 0x95,0x05DB 0x75,0x01 ;DB 0x05,0x08DB 0x19,0x01DB 0x29,0x05DB 0x91,0x02 ;DB 0x95,0x01DB 0x75,0x03DB 0x91,0x03DB 0x95,0x06 ;DB 0x75,0x08DB 0x15,0x00DB 0x25,0x65DB 0x05,0x07 ;DB 0x19,0x00DB 0x29,0x65DB 0x81,0x00DB 0xC0db 5h, 1h ; USAGE_PAGE (Generic Desktop)db 9h, 6h ; USAGE (Keyboard)db a1h, 1h ; COLLECTION (Application)db 5h, 7h ; USAGE_PAGE (Keyboard)db 19h, e0h ; USAGE_MINIMUM (Keyboard LeftControl)db 29h, e7h ; USAGE_MAXIMUM (Keyboard Right GUI)db 15h, 0h ; LOGICAL_MINIMUM (0)db 25h, 1h ; LOGICAL_MAXIMUM (1)db 75h, 1h ; REPORT_SIZE (1)db 95h, 8h ; REPORT_COUNT (8)db 81h, 2h ; INPUT (Data,Var,Abs)db 95h, 1h ; REPORT_COUNT (1)db 75h, 8h ; REPORT_SIZE (8)db 81h, 3h ; INPUT (Cnst,Var,Abs)db 95h, 5h ; REPORT_COUNT (5)db 75h, 1h ; REPORT_SIZE (1)db 5h, 8h ; USAGE_PAGE (LEDs)db 19h, 1h ; USAGE_MINIMUM (Num Lock)db 29h, 5h ; USAGE_MAXIMUM (Kana)db 91h, 2h ; OUTPUT (Data,Var,Abs)db 95h, 1h ; REPORT_COUNT (1)db 75h, 3h ; REPORT_SIZE (3)db 91h, 3h ; OUTPUT (Cnst,Var,Abs)db 95h, 6h ; REPORT_COUNT (6)db 75h, 8h ; REPORT_SIZE (8)db 15h, 0h ; LOGICAL_MINIMUM (0)db 25h, 65h ; LOGICAL_MAXIMUM (101)db 5h, 7h ; USAGE_PAGE (Keyboard)db 19h, 0h ; USAGE_MINIMUM (Reserved (no event indicated))db 29h, 65h ; USAGE_MAXIMUM (Keyboard Application)db 81h, 0h ; INPUT (Data,Ary,Abs)db c0h ; END_COLLECTIONUsage Page and Usages for Audio ControlA device wanting to be to recognized as a HID audio control device must declare itself as being a Consumer Control device (usage 0x01), as defined in the Consumer Page (page 0x0C) in the Universal Serial Bus HID Usage Tables Version 1.0 specification. This means that its top-level application collection should be Usage Page (Consumer), Usage (Consumer Control).When such a device is enumerated by the operating system, the supporting software (HIDSERVE.EXE) is installed and loaded on the host system. Table 1 outlines the Consumer Page audio controls that are supported in Windows 2000.Table 1. Consumer Page audio controls supported in Windows 2000.Usage Usage Name Usage Type0xE0 Volume* Linear Control (LC)0xE2 Mute* On/Off Control (OOC)0xE3 Bass Linear Control (LC)0xE4 Treble Linear Control (LC)0xE5 Bass Boost* On/Off Control (OOC)0xE7 Loudness On/Off Control (OOC)0xE9 Volume Increment* Re-trigger Control (RTC)0xEA Volume Decrement* Re-trigger Control (RTC)0x152 Bass Increment Re-trigger Control (RTC)0x153 Bass Decrement Re-trigger Control (RTC)0x154 Treble Increment Re-trigger Control (RTC)0x155 Treble Decrement Re-trigger Control (RTC)*) These controls are supported in Windows 98 (original release and Service Pack 1 release).The Volume, Bass, and Treble usages (of type LC) should be deployed for controls that generate both increment and decrement data represented by a 2-bit value, whereas the associated Increment and Decrement usages (of type RTC) should be deployed for pairs of one-bit controls (traditional button controls). The hardware design and implementation determines what usage types are appropriate for the HID firmware implementation for a particular device.It's also important to notice that any re-triggering of events should be done by software timers in the host system, and not by hardware timers in the device itself. For example, if the user keeps pressing the Volume Increment button, the device should only generate one input reportwith this state information. Host software will perform the actual re-triggering of events that will lead to continuous increments of the volume until the device generates another input report indicating that the button has been released or until the maximum volume has been reached.Key Codes For Scan Code Set 2:Key Codes for USB Usage Tables:。
hid标准键盘
hid标准键盘HID标准键盘。
HID(Human Interface Device)标准键盘,是一种符合HID标准的人机接口设备,它通过USB接口连接到计算机,可以实现与计算机的数据交互和控制。
HID标准键盘在计算机及各种电子设备中得到广泛应用,其设计合理、稳定可靠,操作简便,是人们日常办公和生活中不可或缺的设备之一。
HID标准键盘采用了符合HID标准的通讯协议,可以与计算机进行稳定快速的数据交互。
在使用HID标准键盘时,用户只需将键盘通过USB接口连接到计算机上,无需安装任何驱动程序,即可实现键盘与计算机的连接和通讯。
这使得HID标准键盘具有了很强的兼容性和即插即用的特点,大大方便了用户的使用。
HID标准键盘的按键布局合理,手感舒适,操作灵活。
键盘上的按键布局符合人体工程学原理,可以减少用户在长时间使用键盘时的手部疲劳感。
键盘按键采用了机械式结构设计,按键触感明显,按键反馈准确,使用寿命长。
同时,HID标准键盘还具有防水防尘的特性,可以有效防止水和灰尘对键盘的侵害,保证键盘的稳定性和可靠性。
HID标准键盘具有多种快捷键和多媒体功能按键,可以方便用户进行各种操作。
在键盘上设置了音量调节、静音、播放/暂停、上一曲/下一曲等多媒体功能按键,用户可以通过这些按键方便地控制音乐播放和音量调节。
此外,HID标准键盘还设置了常用的快捷键,如复制、粘贴、剪切等,可以提高用户的办公效率。
HID标准键盘的外观设计简约大方,造型美观。
键盘外壳采用高强度塑料材料制成,外观光滑,手感舒适。
键盘底部设计了防滑垫,可以有效防止键盘在使用过程中的滑动,保证键盘的稳定性。
键盘的线缆采用了耐磨损的材料,具有较强的抗拉扯性能,可以有效延长键盘的使用寿命。
总的来说,HID标准键盘作为一种符合HID标准的人机接口设备,具有稳定可靠、操作简便、兼容性强等特点,得到了广泛的应用。
它在办公、学习、娱乐等场合都发挥着重要的作用,为用户提供了便利和舒适的使用体验。
USB_HID协议中文版——USB接口HID设备
USB_HID协议中文版——USB接口HID设备
一、什么是USBHID协议
USB HID(Human Interface Device)协议是一种应用在USB接口上
的应用层通信协议,它不仅定义了用于特定应用的设备的接口规范,而且
可以帮助开发者更快捷、更准确地实现其产品化。
USB HID是USB接口应用层通信协议中最常用的一种协议,它通过主
机和设备之间的endpoints来建立简单的通信框架,从而实现设备连接和
输入输出控制。
最初被设计用于用户界面(如鼠标、键盘等),但它的应
用领域已经不仅限于此,无论是电源管理控制、温度控制器、读卡器、按键、触摸板或其他交互式设备,都可以通过USB HID来实现。
二、USBHID协议框架
USBHID协议规范定义了主机与设备之间的通信机制,其使用形式类
似于USB驱动程序,主要有以下几个部分:
1、Device Definition:描述支持HID协议的设备的特性,包括设备
所具备的功能,如鼠标按键、键盘、触摸板等;
2、Descriptor:定义设备的接口,描述设备与用户界面之间的结构
关系;
3、Report Descriptor:描述报告的格式,定义HID设备的所有输入
和输出数据;
4、Input Report:指从键盘、鼠标、按钮等设备向主机发送的数据;
5、Output Report:指从主机向设备发送的数据,以从设备更改状态
或进行其他操作;
6、Feature Report:当输入输出数据不足以满足需求时。
USBHID协议中文版__USB接口HID设备
USBHID协议中文版__USB接口HID设备##USBHID协议
USBHID协议(Universal Serial Bus Human Interface Device)是
USB设备的一种常用协议,它主要用于连接和控制人与计算机的交互设备,如键盘、鼠标、游戏手柄、虚拟摇杆、扫描仪和图形表格等设备。
它主要
用于USB设备的连接和控制,以及电脑上支持的操作系统,如Windows、Mac OS、Linux。
USBHID协议使用HID类设备来提高人机交互的效率,有效地减少计
算机程序的数据处理时间。
使用HID类设备的程序可以实时地进行输入,
计算机也可以实时地反馈反应。
通过使用HID类设备,可以有效地提高用
户体验。
USBHID协议具有许多优点,如:支持所有兼容USB的操作系统,不
需要额外的驱动程序,可以支持各种类型的HID设备,延长设备的稳定性,减少传输延迟,减少接口占用,支持许多不同的传输速率,可以支持许多
不同的设备和设备类型,支持多种接口,支持大量的数据通信,以及减少
计算机程序数据处理时间等优点。
另外,USBHID协议也给使用这些设备带来了极大的便利,如:可以
将设备连接到计算机,让设备能够立即响应输入;可以使用设备时装载更
多的功能;可以在多个设备之间进行快速传输;可以有意识地管理电源;
可以支持多种设备,如跳线选择器。
USB HID协议中文版——USB接口HID设备
第8章USB接口HID设备HID(Human Interface Device,人机接口设备)是USB设备中常用的设备类型,是直接与人交互的USB设备,例如键盘、鼠标与游戏杆等。
在USB设备中,HID设备的成本较低。
另外,HID设备并不一定要有人机交互功能,只要符合HID类别规范的设备都是HID设备。
Wndows操作系统最先支持的HID设备。
在windows 98以及后来的版本中内置有HID 设备的驱动程序,应用程序可以直接使用这些驱动程序来与设备通信。
在设计一个USB接口的计算机外部设备时,如果HID类型的设备可以满足需要,可以将其设计为HID类型设备,这样可以省去比较复杂的USB驱动程序的编写,直接利用Windows操作系统对标准的HID类型USB设备的支持。
8.1 HID设备简介8.1.1 HID设备的特点•交换的数据储存在称为报表(Report)的结构内,设备的固件必须支持HlD报表的格式。
主机通过控制和中断传输中的传送和请求报表来传送和接收数据。
报表的格式非常灵活。
•每一笔事务可以携带小量或中量的数据。
低速设备每一笔事务最大是8B,全速设备每一笔事务最大是64B,高速设备每一笔事务最大是1024B。
一个报表可以使用多笔事务。
•设备可以在未预期的时间传送信息给主机,例如键盘的按键或是鼠标的移动。
所以主机会定时轮询设备,以取得最新的数据。
•HID设备的最大传输速度有限制。
主机可以保证低速的中断端点每10ms内最多1笔事务,每一秒最多是800B。
保证全速端点每lms一笔事务,每一秒最多是64000B。
保证高速端点每125 us三笔事务,每一秒最多是24.576MB。
•HID设备没有保证的传输速率。
如果设备是设置在10ms的时距,事务之间的时间可能等于或小于10ms。
除非设备是设置在全速时在每个帧传输数据,或是在高速时在每个微帧传输数据。
这是最快的轮询速率,所以端点可以保证有正确的带宽可供使用。
hid标准键盘什么意思
hid标准键盘什么意思HID标准键盘是指采用HID(Human Interface Device)协议的标准键盘。
HID 是一种通用的设备通信协议,它允许计算机与外部设备(如键盘、鼠标、游戏手柄等)进行通信和交互。
因此,HID标准键盘是指符合HID协议的键盘,它可以通过USB接口连接到计算机,并且可以直接被操作系统识别,无需安装额外的驱动程序。
HID标准键盘通常具有以下特点:1. 插即用,HID标准键盘可以实现即插即用的功能,即插入计算机的USB接口后,操作系统会自动识别并安装相应的驱动程序,无需用户手动安装。
2. 兼容性好,由于HID是一个通用的设备通信协议,因此符合HID协议的键盘可以在不同的操作系统上使用,如Windows、Mac OS、Linux等,而且不同的厂商生产的HID标准键盘也可以实现通用性。
3. 简化开发,对于设备厂商来说,采用HID协议可以简化设备的开发流程,因为不需要开发特定的驱动程序,而是直接利用操作系统提供的通用驱动程序进行通信。
4. 低成本,由于HID标准键盘无需额外的驱动程序和复杂的通信协议,因此可以降低设备的成本,使得HID标准键盘在市场上具有一定的竞争优势。
HID标准键盘在实际应用中具有广泛的用途,主要体现在以下几个方面:1. 个人电脑,作为最常见的外部输入设备,HID标准键盘广泛应用于个人电脑上,用户可以通过键盘进行文字输入、快捷键操作等。
2. 工作站,在一些专业的工作场景中,HID标准键盘也扮演着重要的角色,如金融交易员、程序员、设计师等,他们对键盘的输入效率和稳定性有较高的要求。
3. 游戏设备,许多游戏玩家对键盘的反应速度和手感有较高的要求,因此一些专为游戏设计的HID标准键盘也受到了玩家的青睐。
4. 工业控制,在工业自动化控制领域,HID标准键盘也被广泛应用,用于控制设备、输入指令等操作。
总的来说,HID标准键盘作为一种通用的输入设备,具有诸多优点,如插即用、兼容性好、简化开发、低成本等,因此在各个领域都有着广泛的应用前景。
USBHID键盘报告范文描述符
USBHID键盘报告范文描述符HIDScript脚本语言的理解:Globalitem--全局项Mainitem--主项localitem--局部项对于Main项,parer解释器,将顺序解释集合中的数据,并且,解释器解释完的数据,将按Main项出现的先后顺序,主要是Input和Output项,顺序拼接生成对应的数据bit位,解释器将以关键字Collection开始解释并拼接bit位信息,关键字EndCollection将结束paer解释器的工作,我把关键字Collection和关键字EndCollection叫做\集合\,关键字Collection和关键字EndCollection都是Mainitem主项,对应的控制字分别为:101000nn和110000nn,如果Collection后边有1个参数数据,那么即为:10100001=0某A1,如Collection(Application)翻译成控制码后为:0某A1,0某01;0某A1的1表示有1个参数数据,0某01表示Application在HID协议中规定的索引值为0某01,pc的HID驱动程序在parer解释器中会通过0某01得知,是对Application进行数据流位生成,就是说HID报告描述符(ReportDecriptor)所描述的数据流是为了Application使用的,Application在中包含两种设备:moue和keyboard,至于Collection(Application)里边描述的是moue还是keyboard,将具体的由Uage进一步限定,如:Uage(KeyBoard),也就是说明确告诉pc的HID驱动程序的paer解释器,接下来的这段信息最后生成出来的bit位数据信息,将交由pc的HID驱动程序中KeyBoard对应的API函数处理,当然这只是HID硬件设备开发者给pc的HID驱动程序的paer解释器提供的一个建议值,比如我们做DDK下的HID驱动二次开发,那么我们可以很随意,但是HID硬件设备开发者,建议使用的HID驱动程序API接口,最好遵守,因为HID硬件设备开发者比DDK开发人员更清楚送上来的bit数据流的真正物理意义.Input和Output是用来真正生成bit位流数据域的关键字,他们描述的东西是最后通过ub总线实实在在发送到pc或者从pc接收的数据位,当然这些bit数据流数据域所代表的意义以及某段bit位们所代表的意思以及这些bit将交由pc上HID驱动程序的哪一个API接口来做进一步解析(是moue还是keyboard),需要其他描述符来描述,比如前边的Uage就是其中的1个描述符,如果一个HID设备同时提供2种不同的功能,那么就会分别生成2个bit位流数据域,每个bit位流数据,将交由不同的驱动解析,比如,一个keyboard可能还集成了一个附属的鼠标功能,那么键盘数据信息将由HIDcript脚本描述的keyboard对应bit数据位流传送,moue数据将由HIDcript脚本描述的moue对应bit数据位流传送,但同一个Input 管道怎么能传送两个独立的数据流呢,答案很简单:不能,所以又引入了一个ReportID的概念,ID 用来标识多条独立的bit数据流,pc的HID驱动程序根据ID,将这些独立的bit数据流们路由到相应的API处理函数上去,进而不同的bit数据流数据最终都能够被自己对应的API驱动函数正确接收并解析处理.对于2字节、4字节等多字节数据的传输,是按小端模式little-endian进行的.这些多字节数据的最小值由LogicalMinimum定义,最大值由LogicalMa 某imum定义,如果两个值均为非负值,那么bit位流数据就是无符号数,如果没有明确指定,那么作为有符号数处理,另外HID1.1协议不允许传输浮点数据.硬件开发者应该时刻清除自己写的HIDcript脚本所描述的数据流将来应该由PC上的HID驱动程序怎么使用,另外对于硬件开发者来说,对于不允许PC驱动修改的bit 位数据,HID1.1协议制定者强烈建议采用NULL数值,最好不要随便填其他值.----------------------------------------------Mainitem--主项当前一共5个:1)Input2)Output3)Feature4)Collection5)EndCollection----------------------------------------------Globalitem--全局项当前一共13个:1)UagePage2)LogicalMinimum---var变量或array数组的逻辑最小值3)LogicalMa某imum4)PhyicalMinimum5)PhyicalMa某imum6)UnitE某ponent---单位的指数值,是10的指数7)Unit---单位索引号:可以是时间单位、电流单位、电压单位和距离单位等等.8)ReportSize9)ReportID---数据流的ID值设置10)ReportCount11)Puh12)Pop13)Reeved---保留----------------------------------------------localitem--局部项当前一共11个:1)Uage---定义UagePage下面某个功能item的起始索引值,比如Keyboard功能,LED功能等,这也告诉pc的HID解释器,Input或Output变量或数组的相应生成数据位用来描述Uage引用到的那个功能,如:用来描述Keyboard功能或LED功能等.2)UageMinimum---定义与array或bitmap关联的uage定义的某个功能下的起始值Uage作为UagePage的一个子功能索引号,同时Uage自己也有很多子功能,或者说有很多个子值,这里就是定义这些子值的范围值,之后和用Input或Output生成bit位数据流,进行相应关联.(可以用多维数组来说明,可能会更明确一点)前一个基础上Uage(6),当然在HIDDecriptorTool里边6有它的字符串名,即:Uage(Keyboard),然后80就是Keyboard里边的一个索引取值,查找之后是:KeyBoardLeftArrow,所以Uage_Minimum(80)就等于Uage_Minimum(KeyBoardLeftArrow)Uage的顺序先后和ReportCount定义的bit位组的先后顺序依次一一对应,UageMinimum和UageMa某imum之间的Uage的索引值也将依次与ReportCount定义的bit位组的先后顺序依次一一对应上。
hid标准键盘是什么
hid标准键盘是什么
HID标准键盘是什么?
HID标准键盘是一种使用人体接口设备(HID)协议的键盘,它是一种通用的键盘设备,可以在各种操作系统和平台上使用。
HID标准键盘通常使用USB接口连接到计算机或其他设备上,它可以通过简单的插拔方式进行连接,而无需安装额外的驱动程序。
HID标准键盘与传统的PS/2接口键盘相比具有许多优势。
首先,HID标准键盘可以实现热插拔功能,用户可以在计算机运行时随时连接或断开键盘,而不会对系统造成影响。
其次,HID标准键盘支持多种功能,例如多媒体快捷键、多国语言布局等,可以满足用户不同的需求。
此外,HID标准键盘还可以实现更高的数据传输速率和更稳定的连接,提高了用户的输入体验。
HID标准键盘的设计也非常注重人体工程学,按键布局合理,手感舒适,可以减少用户长时间使用键盘时的疲劳感。
键盘的外形设计也多样化,有线、无线、薄型、机械键盘等多种选择,满足不同用户的审美和使用需求。
在实际使用中,HID标准键盘可以广泛应用于个人电脑、笔记本电脑、平板电脑等设备上,也可以连接到智能电视、游戏机、工控设备等其他设备上进行使用。
由于其通用性和便利性,HID标准键盘受到了广大用户的青睐。
总的来说,HID标准键盘是一种通用、便捷、高效的键盘设备,它的出现极大地方便了用户的日常使用,提高了工作效率,是现代信息化社会中不可或缺的一部分。
随着科技的不断发展,相信HID标准键盘在未来会有更广阔的应用空间,为用户带来更多的便利和惊喜。
关于USBHID协议以及鼠标键盘描述符的解释【转】
关于USBHID协议以及⿏标键盘描述符的解释【转】转⾃:⼀.HID设备识别前⾯有提到关于SCSI协议的USB设备实现。
现在来谈谈USBHID设备。
HID全称Human Interface Device。
HID协议⾥增加了HID描述符和报告描述符,以及特定的关于HID的类请求。
HID设备的通信是通过报表来进⾏的。
据说,报告描述符是USB设备中最难的描述符了。
关于HID描述符可以参考HID协议。
接下来我们谈谈报告描述符。
⼆.报告描述符每⼀个HID设备都有⾃⼰的报告描述符。
报告描述符有三种类项⽬:Main类项⽬,Global类项⽬,Local类项⽬。
具体看下表Global作⽤域是遇到下⼀个同名Global,Local作⽤域是遇到下⼀个Main(Input,Output,Feature)。
Usage Min-Max表⽰有⼏种功能,Logical Min-Max表⽰有⼏种状态。
每个报告描述符都有报告ID,报告ID是⽤来区别复合设备的。
在报告描述符⾥没有写报告ID,默认报告ID是0。
USB的控制端点可以进⾏Input,Output,Feature项⽬的传输,中断端点可以进⾏Input,Output传输。
三.⿏标和键盘的报告描述符(1)键盘的报告描述符1. 0x05,0x01,// Global Generic Desktop2. 0x09,0x06,// Local KeyBoard3. 0xA1,0x01,// Main app collection4. 0x05,0x07,// Global KeyBoard5. //////////////////////////////////第1字节6. 0x19,0xe0,// Local Usage Min (KeyBoard LeftControl)7. 0x29,0xe7,// Local Usage Max (KeyBoard Right GUI)8. 0x15,0x00,// Global Logical Min9. 0x25,0x01,// Global Logical Max10. 0x95,0x08,// Global ReportCount11. 0x75,0x01,// Global ReportSize12. 0x81,0x02,// Main Input(Data,Var,Abs)13. //////////////////////////////////第2字节14. 0x95,0x01,// Global ReportCount15. 0x75,0x08,// Global ReportSize16. 0x81,0x03,// Main Input(Cnst,Var,Abs)17. //////////////////////////////////第3-8字节18. 0x95,0x06,// Global ReportCount19. 0x75,0x08,// Global ReportSize20. 0x15,0x00,// Global Logical Min21. 0x26,0xff,0x00,//Global Logical Max22. 0x19,0x00,// Local Usage Min23. 0x29,0x65,// Local Usage Max24. 0x81,0x00,// Main Output(Data,Ary,Abs)25. ////////////////////////////////1字节输出报告26. 0x15,0x00,// Global Logical Min27. 0x25,0x01,// Global Logical Max28. 0x95,0x05,// Global ReportCount29. 0x75,0x01,// Global ReportSize30. 0x05,0x08,// Global LED31. 0x19,0x01,// Local Usage Min32. 0x29,0x05,// Local Usage Max33. 0x91,0x02,// Main Output(Data,Var,Abs)34. ////////////////////////////////补⾜上⾯变成1个字节35. 0x95,0x01,// Global ReportCount36. 0x75,0x03,// Global ReportSize37. 0x91,0x03,// Main Output(Cnst,Var,Abs)38. 0xc0 // Main End collection键盘的描述符共有8字节的输⼊报告和1字节的输出报告。
USB键盘不能用,设备管理器中显示:HID keyboard device 有惊叹号
定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96B-E325-11CE-BFC1-08002BE10318}
添加字符串UpperFilters项,内容是kbdclass卸载设备,重新启动。
实际应用了一下,果然好用,问题终于解决!
其实出现类ห้องสมุดไป่ตู้的情况,不仅仅是键盘,其他外设出现的几率也有,
比如光驱,不过解决方法和这个大致一样。
Class\{4D36E96B-E325-11CE-BFC1-08002BE10318}这里面的{4D36E96B-E325-11CE-BFC1-08002BE10318}这个表示是键盘,注册表里也有详细描述,Class下有很多这样的字符,打开一看就明白表示什么 。
(键盘)代码 19:由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备。
解决方法 收藏 VMware没卸载就让我直接删除掉了。在删除VMware一些残留的服务后,结果重新启动系统后,键盘不能用了,一敲键盘后,鼠标也不动了,造成系统假死状态。
如果不动键盘,鼠标仍然可以使用,关掉系统,重新插上键盘,开机故障依然,热插拔也无济于事,系统在启动,直到进入系统,都没有硬件错误提示,百思不得其解。
开始以为是键盘坏掉了,我的是双系统,另个系统是linux,进入linux,键盘可以使用,证明键盘是没有问题的。
无奈只能用鼠标查找故障。打开设备管理器看到键盘那项里是一个惊叹号!查看详细信息:设备管理器显示:代码 19:由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备删除这个设备,在扫描硬件更新,找到后依然是这个提示:代码 19:由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备,真是郁闷了。
USB复合设备
usb真是很强很大,强是现在很多产品都用她来做,为了方便,不用开发驱动。
大是因为usb 协议太多了,就光hid都有好多种。
还是扯回正题,这次总结复合型设备,前面总结了hid和mass storage设备,如果在正常情况下两个设备都正常了的,那么现在就可以来做做复合型设备了。
百度和google都没找到她的定义,那么我来定义一下(见笑),复合型设备:具有两种usb 设备功能的一种设备,无论是相同的设备功能,还是不同的设备功能,只要同时具有两种以上的功能就是复合型设备。
其实很直白,大家都看的出来。
现在就把hid keyboard and usb mass storage复合起来,组成一个设备。
首先要说的是既然是复合型设备,那么就有多个interface,这里有两个设备,那么就需要两个interface,需要几个设备描述符呢,一个就够了,那配置描述符呢,也只需要一个就好了,那需要几个端点描述符呢,这个嘛,我就不知道了(开玩笑,你在总结你不知道),这个就得讲讲usb的几种传输模式了。
在usb里面一共有四种传输:控制传输、中断传输、批量传输、等时传输。
控制和批量端点用于异步的数据传输,驱动需要他们就立马工作。
中断和等时端点是周期性的,即在固定时间段连续的传输数据。
是不是有点熟悉,的确,前面总结过的,在这里再提提。
所以有几个端点,还是得看你在用哪种传输模式,hid keyboard和usb mass storage他们使用的传输方式是中断传输和批量传输。
中断传输:interrupt in ,在这里只需要interrupt in就ok了,既只要一个端点,至于interrupt out 就不用管了。
批量传输:bulk in和bulk out,由于u盘是双向的,当然需要有两个端点哦,毕竟他们通信要有来回才行啊。
所以要复合hid keyboard和usb mass storage就需要三个端点。
好了,前面说来复合型设备的描述符分别是:设备描述符*1+配置描述符*1+端点描述符*3,那么到这里就完了吗,如果只是usb mass storage,在加一个端点就完了,但是这里是Hid,还需要一个子类,在hid里面还有很多子类,那么就需要区分他们,不然host不知道你是哪家的,好比有很多人叫张三,但是这个世界那么多是张三,你知道他应该是哪家的呢,还是只有slave主动说自己是谁方便。
USB键盘不能用,HIDKeyboardDevice出现感叹号
USB键盘不能用,HIDKeyboardDevice出现感叹号打开“设备管理器”中发现键盘设备“HID Keyboard Device”是感叹号显示,但USB和PS/2键盘插入后还是完全没有任何反应。
重新卸载再添加官方驱动也不行,虽然会提示说驱动安装成功。
好久没有优化过电脑了,感觉系统有些慢,于是就用优化工具优化了下电脑,也用超级兔子彻底的清理系统和注册表垃圾,也压缩优化了注册表了。
重启电脑后发现USb键盘竟然不能用了!在系统登录界面不能输入密码了,但鼠标即正常,更换其它USB键盘也不能用,于是想到用PS/2键盘试试,一试竟然也不行。
打开“设备管理器”中发现键盘设备“HID Keyboard Device”是感叹号显示,重新卸载再添加官方驱动也不行,虽然会提示说驱动安装成功。
电脑优化导致键盘不可用的解决办法1.因为没有办法输入密码,所以根本没有办法进入电脑,于是用U盘启动盘工具破解XP系统的密码,也就是清空在登录界面显示的用户名(本地管理员帐号)的密码,开机启动后用鼠标点击进入系统;2.再通过软键盘打开注册表,依次定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Cla ss\{4D36E96B-E325-11CE-BFC1-08002BE10318}键下,删除下面的“UpperFilters”字串。
其实我们检查可以发现“UpperFilters”类型不是“REG_SZ”,或者值不是kbdclass”;3.再卸载“设备管理器”中的键盘,然后重新启动电脑;4.再次打开注册表,还是定位到这个路径下,新建刚刚删除的“UpperFilters”字符串值,新赋予“数值数据”为“kbdclass”:5.打开“设备管理器”,发现键盘设备“HID Keyboard Device”不再是感叹号了,但我们的键盘还是不能用,所以再次卸载键盘设备“HID Keyboard Device”,再重新启动电脑,开机后OK啦!6.类似的,其它一些设备,如鼠标、光驱、U KEY等设备出现了驱动问题,也可以通过此法在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Cla ss下查找并参照这个方法来处理。
USBHID协议中文版USB接口HID设备
USBHID协议中文版USB接口HID设备
所谓HID,即Human Interface Devices),指的是专门为人机交互
设计的设备接口,它可以使用USB接口或PS/2接口,这里我们主要讨论USB接口HID设备。
1.键盘和鼠标:键盘和鼠标可以通过USB的HID协议实现自动识别和
控制,无需依赖任何驱动程序,如键盘可以输入大小写字母数字以及其他
特殊字符。
2.虚拟键盘:可以通过HID协议自动识别,支持多种按键的输入。
3.触摸板:支持多指、双指以及拖动等操作,并可以实现双击操作以
及放大、缩小操作。
4.游戏手柄:支持D-Pad、拨杆、方向按键等操作,包括一键发射、
等热键操作。
5.手写板:可以支持手写笔的输入,以实现写字、绘图等操作。
6.滚轮:可以支持滚轮操作,实现控制页面的缩放等操作。
7.触控笔:可以支持触控笔的输入,实现画笔、选择对象、更改等操作。
B硬件:支持USB接口的硬件设备,比如USB硬盘、DVD光驱等,也可以通过HID协议实现自动识别和控制。
USB 键盘不能使用
USB键盘不能使用;键盘突然不能使用;键盘不能打字.
百度上搜了半天没找到正确答案只好自己动手解决了.嘿嘿!这个答案可是网上唯一的答案.看看有多少兄弟能搜到这来.用的上的留个言!
提示:不是硬件问题能已通过硬盘替换法.
操作系统 Windows Vista Ultimate
出现症壮:
重启后USB键盘不能正常使用.在BIOS中可以使用.数安键和大小写键灯不亮. 在设置管理器中HID Keyboard Device(键盘设备)前面有个黄色感叹号.
出错原因:
由于设备驱动程序的前一个实例仍在内存中,Windows 无法加载这个硬件的设备驱动程(代码 38)
还有发现键盘驱动中加载有一个VMKBD.SYS.此为VM虚拟键盘驱动.
因为之前有一次非法关掉VM.之后又卸载重装过VM..可能是在非法关掉VM时.VM 虚拟键盘驱动被加载到系统中不能释放所以会出现..Windows 无法加载这个硬件的设备驱动程(代码 38)
解决方法:
直接完全卸载VM,重启系统就可以了. 当然.你如果现在想用VM可以直接现一次全新安装就可以了.下次千万别非法关掉VM就可以了
另类问题虚拟光驱软件daemon tools 引起的USB问题
USB设备与虚拟光驱软件有冲突,虚拟光驱软件卸载掉就可以了.。
USBHID设备类协议入门
USBHID设备类协议入门USB HID(Human Interface Device)设备类协议是一种用于连接人机界面设备(如键盘、鼠标、游戏控制器)到计算机的通信协议。
该协议定义了设备和主机之间的数据传输格式、命令和响应等规则,使得不同厂商的HID设备可以在不同操作系统上正常工作。
1.键盘设备:USBHID键盘设备协议定义了键盘数据的传输格式。
键盘通过发送按键代码和状态信息告知主机用户的输入。
主机则通过向键盘发送命令来控制LED指示灯的状态。
2.鼠标设备:USBHID鼠标设备协议定义了鼠标数据的传输格式。
鼠标传输的数据包括鼠标移动、按键和滚轮信息等。
主机通过解析这些数据来控制光标的移动和与鼠标相关的操作。
3.游戏控制器:USBHID游戏控制器设备协议支持各种类型的游戏控制器,如游戏手柄、方向盘和航空杆等。
该协议规定了游戏控制器的按键、摇杆和轴等输入数据的格式和传输方式。
4.触摸屏设备:USBHID触摸屏设备协议定义了触摸屏的输入数据格式。
触摸屏通过发送坐标和触摸状态信息来告知主机用户的触摸操作。
在USB HID设备类协议中,设备和主机之间的通信基于报告描述器(Report Descriptor)。
报告描述器定义了设备的输入和输出报告格式。
设备将报告描述器发送到主机,以便主机能够正确解析设备发送的数据。
总结来说,USBHID设备类协议是用于连接各种人机界面设备到计算机的协议。
它定义了设备和主机之间的通信规则和数据格式,以确保不同类型的设备在不同的操作系统上能够正常工作。
通过了解和遵守USBHID设备类协议,设备制造商可以确保产品的兼容性,并提供更好的用户体验。
hid标准键盘
hid标准键盘HID标准键盘。
HID(Human Interface Device)标准键盘是一种符合HID标准的计算机外设,它通过USB接口与计算机连接,为用户提供了一种便捷、高效的输入方式。
HID标准键盘在设计上遵循了人体工程学原理,使得用户在长时间使用键盘时能够更加舒适、自然地进行输入操作。
本文将对HID标准键盘的特点、优势以及选购建议进行介绍,希望能够帮助用户更好地了解和选择HID标准键盘。
HID标准键盘的特点。
HID标准键盘采用了符合人体工程学原理的设计,键盘布局合理,按键间距适中,按键手感舒适,能够有效减少用户长时间使用键盘时的手部疲劳感。
此外,HID标准键盘通常还配备了一些特殊功能键,如多媒体控制键、快捷键等,使得用户在操作计算机时更加便捷、高效。
HID标准键盘的优势。
相较于传统键盘,HID标准键盘具有诸多优势。
首先,HID标准键盘采用USB接口连接计算机,传输速率更快,响应更迅速,能够有效提升用户的输入效率。
其次,HID标准键盘在设计上更加人性化,符合人体工程学原理,能够有效减少用户长时间使用键盘时的手部疲劳感,保护用户的手部健康。
此外,HID标准键盘通常还具有防水、防尘等功能,能够有效延长键盘的使用寿命。
选购HID标准键盘的建议。
在选购HID标准键盘时,用户应该根据自己的实际需求进行选择。
首先,用户应该选择品牌知名、质量可靠的产品,以保证产品的质量和售后服务。
其次,用户可以根据自己的使用习惯和需求选择带有特殊功能键的HID标准键盘,如多媒体控制键、快捷键等,以提升自己在操作计算机时的便捷性和高效性。
最后,用户还可以根据自己的预算选择价格适中、性能稳定的HID标准键盘,以满足自己的实际需求。
总结。
HID标准键盘作为一种符合HID标准的计算机外设,具有符合人体工程学原理的设计、USB接口连接、便捷高效等优势,能够为用户提供舒适、自然的输入体验。
在选购HID标准键盘时,用户应该根据自己的实际需求选择合适的产品,以提升自己在操作计算机时的便捷性和高效性。
USBHID协议中文版——USB接口HID设备
USBHID协议中文版——USB接口HID设备USB HID(Human Interface Device)协议,即USB人机接口设备协议,是一种用于在计算机和外部设备之间进行通信的协议。
USB HID设备包括各种外部设备,如键盘、鼠标、游戏手柄等。
它将这些设备的输入信息以标准格式传输给计算机,并接收来自计算机的控制命令。
USBHID协议是USB规范的一部分,通过定义报告描述符和相关命令,定义了HID设备和主机之间的通信方式。
HID设备通过USB接口连接到计算机主机,主机通过发送控制命令来获取设备的状态信息或者向设备发送控制命令。
USBHID协议采用面向报告的架构。
报告是HID设备与主机之间通信的基本单位,它包含设备的输入或输出数据。
报告描述符定义了报告的结构和内容。
HID设备可以定义多个报告,每个报告有一个唯一的报告ID,主机通过这个ID来区分不同报告。
报告分为输入报告和输出报告两种类型,输入报告用于向主机提供设备的输入数据,输出报告用于接受来自主机的控制命令。
在USBHID协议中,主机与设备之间的通信是通过控制传输、中断传输和批量传输三种方式实现的。
控制传输用于获取设备的状态信息或者发送控制命令,中断传输用于实时传输设备的输入数据,批量传输用于传输大量的数据。
USBHID协议还定义了一些标准报告类型,如键盘报告、鼠标报告、游戏控制器报告等。
这些报告类型定义了这些设备的输入输出格式,以及设备状态的解析规则。
主机可以根据这些标准报告类型来识别设备以及解析设备的输入输出数据。
USBHID协议还支持设备的热插拔功能,即在计算机运行期间可以动态地插拔设备。
当设备插入计算机时,主机会检测到设备,并为设备分配一个唯一的地址。
当设备被拔出时,主机会释放该地址,从而实现设备的热插拔。
总之,USBHID协议是一种用于在计算机和外部设备之间进行通信的协议。
它定义了HID设备和主机之间的通信方式,以及设备的输入输出格式。
USB接口HID设备详细介绍
第8章USB接口HID设备HID(Human Interface Device,人机接口设备)是USB设备中常用的设备类型,是直接与人交互的USB设备,例如键盘、鼠标与游戏杆等。
在USB设备中,HID设备的成本较低。
另外,HID设备并不一定要有人机交互功能,只要符合HID类别规范的设备都是HID设备。
Wndows操作系统最先支持的HID设备。
在windows 98以及后来的版本中内置有HID 设备的驱动程序,应用程序可以直接使用这些驱动程序来与设备通信。
在设计一个USB接口的计算机外部设备时,如果HID类型的设备可以满足需要,可以将其设计为HID类型设备,这样可以省去比较复杂的USB驱动程序的编写,直接利用Windows操作系统对标准的HID类型USB设备的支持。
8.1 HID设备简介8.1.1 HID设备的特点•交换的数据储存在称为报表(Report)的结构内,设备的固件必须支持HlD报表的格式。
主机通过控制和中断传输中的传送和请求报表来传送和接收数据。
报表的格式非常灵活。
•每一笔事务可以携带小量或中量的数据。
低速设备每一笔事务最大是8B,全速设备每一笔事务最大是64B,高速设备每一笔事务最大是1024B。
一个报表可以使用多笔事务。
•设备可以在未预期的时间传送信息给主机,例如键盘的按键或是鼠标的移动。
所以主机会定时轮询设备,以取得最新的数据。
•HID设备的最大传输速度有限制。
主机可以保证低速的中断端点每10ms内最多1笔事务,每一秒最多是800B。
保证全速端点每lms一笔事务,每一秒最多是64000B。
保证高速端点每125 us三笔事务,每一秒最多是24.576MB。
•HID设备没有保证的传输速率。
如果设备是设置在10ms的时距,事务之间的时间可能等于或小于10ms。
除非设备是设置在全速时在每个帧传输数据,或是在高速时在每个微帧传输数据。
这是最快的轮询速率,所以端点可以保证有正确的带宽可供使用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/* USB report descriptor */PROGMEM char usbHidReportDescriptor[USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH] = { 0x05, 0x01, // USAGE_PAGE (Generic Desktop)0x09, 0x06, // USAGE (Keyboard)0xa1, 0x01, // COLLECTION (Application)0x05, 0x07, // USAGE_PAGE (Keyboard)0x19, 0xe0, // USAGE_MINIMUM (Keyboard // LeftControl)0x29, 0xe7, // USAGE_MAXIMUM (Keyboard // Right GUI)0x15, 0x00, // LOGICAL_MINIMUM (0)0x25, 0x01, // LOGICAL_MAXIMUM (1)0x75, 0x01, // REPORT_SIZE (1)0x95, 0x08, // REPORT_COUNT (8)0x81, 0x02, // INPUT (Data,Var,Abs)0x95, 0x01, // REPORT_COUNT (1)0x75, 0x08, // REPORT_SIZE (8)0x25, 0x65, // LOGICAL_MAXIMUM (101)0x19, 0x00, // USAGE_MINIMUM (Reserved // (no event indicated))0x29, 0x65, // USAGE_MAXIMUM // (Keyboard Application)0x81, 0x00, // INPUT (Data,Ary,Abs)0xc0 // END_COLLECTION};#define KEY_UP 82#define KEY_DOWN 81#define KEY_LEFT 80#define KEY_RIGHT 79/* -----------------------------*/static void timerPoll(void){static uchar timerCnt;static uchar i;if(TIFR & (1 << TOV1)){TIFR = (1 << TOV1); /* clear overflow */if(++timerCnt >= 63){ /* ~ 1 second interval */ timerCnt = 0;if (!FlagKey) {FlagKey = 1;if (++i > 3)i=0;switch (i) {case 0:reportBuffer[0] = 0;reportBuffer[1] = KEY_RIGHT;break;case 1:reportBuffer[0] = 0;reportBuffer[1] = KEY_DOWN;break;case 2:reportBuffer[0] = 0;reportBuffer[1] = KEY_LEFT;break;case 3:reportBuffer[0] = 0;reportBuffer[1] = KEY_UP;break;}}}}}////0x05, 0x01, // USAGE_PAGE (Generic Desktop)0x09, 0x06, // USAGE (Keyboard)0xa1, 0x01, // COLLECTION (Application)0x05, 0x07, // USAGE_PAGE (Keyboard)0x19, 0xe0, // USAGE_MINIMUM (Keyboard // LeftControl) 0x29, 0xe7, // USAGE_MAXIMUM (Keyboard // Right GUI)0x15, 0x00, // LOGICAL_MINIMUM (0)0x25, 0x01, // LOGICAL_MAXIMUM (1)0x75, 0x01, // REPORT_SIZE (1)0x95, 0x08, // REPORT_COUNT (8)0x81, 0x02, // INPUT (Data,Var,Abs)0x95, 0x01, // REPORT_COUNT (1)0x75, 0x08, // REPORT_SIZE (8)0x25, 0x65, // LOGICAL_MAXIMUM (101)0x19, 0x00, // USAGE_MINIMUM (Reserved // (no event indicated))0x29, 0x65, // USAGE_MAXIMUM // (Keyboard Application)0x81, 0x00, // INPUT (Data,Ary,Abs)0xc0 // END_COLLECTION0x01050x06090x01A10x07050xE0190xE7290x00150x01250x01750x08950x02810x08750x01950x01810x00190x01050x02090x01A10x01090x00A10x09050x01190x03290x00150x01250x01750x03950x02810x05750x019530x65290x00150x65250x08750x06950x00810x08050x01190x05290x00150x01250x01750x05950x02910x03750x01950x01910xC0rom struct{byte report[HID_RPT01_SIZE];}hid_rpt01={0x05, 0x01, /* Usage Page (Generic Desktop) */ 0x09, 0x06, /* Usage (Keyboard) */ 0xA1, 0x01, /* Collection (Application) */0x05, 0x07, /* Usage page (Key Codes) */0x19, 0xE0, /* Usage minimum (224) */0x29, 0xE7, /* Usage maximum (231) */0x15, 0x00, /* Logical minimum (0) */0x25, 0x01, /* Logical maximum (1) */0x75, 0x01, /* Report size (1) */0x95, 0x08, /* Report count (8) */0x81, 0x02, /* Input (data, variable, absolute) */0x95, 0x01, /* Report count (1) */0x75, 0x08, /* Report size (8) */0x81, 0x01, /* Input (constant) */0x95, 0x06, /* Report count (6) */0x75, 0x08, /* Report size (8) */0x15, 0x00, /* Logical minimum (0) */0x25, 0x65, /* Logical maximum (101) */0x05, 0x07, /* Usage page (key codes) */0x19, 0x00, /* Usage minimum (0) */0x29, 0x65, /* Usage maximum (101) */0x81, 0x00, /* Input (data, array) */0xC0}; /* End Collection */rom struct{byte report[HID_RPT02_SIZE];}hid_rpt02={0x05, 0x0c, // USAGE_PAGE (Consumer Devices) 0x09, 0x01, // USAGE (Consumer Control)0xa1, 0x01, // COLLECTION (Application)0x85, 0x01, // REPORT_ID (1)0x15, 0x00, // LOGICAL_MINIMUM (0)0x25, 0x01, // LOGICAL_MAXIMUM (1)0x75, 0x01, // REPORT_SIZE (1)0x95, 0x10, // REPORT_COUNT (16)0x09, 0xe2, // USAGE (Mute) 0x010x09, 0xe9, // USAGE (Volume Up) 0x020x09, 0xea, // USAGE (Volume Down) 0x030x09, 0xcd, // USAGE (Play/Pause) 0x040x09, 0xb7, // USAGE (Stop) 0x050x09, 0xb6, // USAGE (Scan Previous Track) 0x060x09, 0xb5, // USAGE (Scan Next Track) 0x070x0a, 0x8a, 0x01, // USAGE (Mail) 0x080x0a, 0x92, 0x01, // USAGE (Calculator) 0x090x0a, 0x21, 0x02, // USAGE (www search) 0x0a0x0a, 0x23, 0x02, // USAGE (www home) 0x0b0x0a, 0x2a, 0x02, // USAGE (www favorites) 0x0c 0x0a, 0x27, 0x02, // USAGE (www refresh) 0x0d0x0a, 0x26, 0x02, // USAGE (www stop) 0x0e0x0a, 0x25, 0x02, // USAGE (www forward) 0x0f0x0a, 0x24, 0x02, // USAGE (www back) 0x100x81, 0x62, // INPUT (Data,Var,Abs,NPrf,Null) 0xc0,// System Control Descriptor0x05, 0x01, /* Usage Page (Generic Desktop) */0x09, 0x80, /* Usage (System Control) */0xA1, 0x01, /* Collection (Application) */0x85, 0x02, /* Report ID 0x02 [SYSTEM CTRL] */0x19, 0x82, /* Usage minimum (System Sleep) */0x29, 0x83, /* Usage maximum (System Wake up) */0x95, 0x02, /* Report count (2) */0x81, 0x06, /*Input (data, variable, relative, Preferred) */0x95, 0x06, /* Report count (6) */0x81, 0x01, /*Input (Constant) */0xC0 /*End Collection */};//Hid Table for interface:0 alternate:0 Length:0x3FDescriptor_type_22_index_0_0_table:DB 0x05,0x01DB 0x09,0x06DB 0xA1,0x01DB 0x05,0x07 ;DB 0x19,0xE0DB 0x29,0xE7DB 0x15,0x00DB 0x25,0x01 ;DB 0x75,0x01DB 0x95,0x08DB 0x81,0x02DB 0x95,0x01 ;DB 0x75,0x08DB 0x81,0x03DB 0x95,0x05DB 0x75,0x01 ;DB 0x05,0x08DB 0x19,0x01DB 0x29,0x05DB 0x91,0x02 ;DB 0x95,0x01DB 0x75,0x03DB 0x91,0x03DB 0x95,0x06 ;DB 0x75,0x08DB 0x15,0x00DB 0x25,0x65DB 0x05,0x07 ;DB 0x19,0x00DB 0x29,0x65DB 0x81,0x00DB 0xC0db 5h, 1h ; USAGE_PAGE (Generic Desktop)db 9h, 6h ; USAGE (Keyboard)db a1h, 1h ; COLLECTION (Application)db 5h, 7h ; USAGE_PAGE (Keyboard)db 19h, e0h ; USAGE_MINIMUM (Keyboard LeftControl)db 29h, e7h ; USAGE_MAXIMUM (Keyboard Right GUI)db 15h, 0h ; LOGICAL_MINIMUM (0)db 25h, 1h ; LOGICAL_MAXIMUM (1)db 75h, 1h ; REPORT_SIZE (1)db 95h, 8h ; REPORT_COUNT (8)db 81h, 2h ; INPUT (Data,Var,Abs)db 95h, 1h ; REPORT_COUNT (1)db 75h, 8h ; REPORT_SIZE (8)db 81h, 3h ; INPUT (Cnst,Var,Abs)db 95h, 5h ; REPORT_COUNT (5)db 75h, 1h ; REPORT_SIZE (1)db 5h, 8h ; USAGE_PAGE (LEDs)db 19h, 1h ; USAGE_MINIMUM (Num Lock)db 29h, 5h ; USAGE_MAXIMUM (Kana)db 91h, 2h ; OUTPUT (Data,Var,Abs)db 95h, 1h ; REPORT_COUNT (1)db 75h, 3h ; REPORT_SIZE (3)db 91h, 3h ; OUTPUT (Cnst,Var,Abs)db 95h, 6h ; REPORT_COUNT (6)db 75h, 8h ; REPORT_SIZE (8)db 15h, 0h ; LOGICAL_MINIMUM (0)db 25h, 65h ; LOGICAL_MAXIMUM (101)db 5h, 7h ; USAGE_PAGE (Keyboard)db 19h, 0h ; USAGE_MINIMUM (Reserved (no event indicated))db 29h, 65h ; USAGE_MAXIMUM (Keyboard Application)db 81h, 0h ; INPUT (Data,Ary,Abs)db c0h ; END_COLLECTIONUsage Page and Usages for Audio ControlA device wanting to be to recognized as a HID audio control device must declare itself as being a Consumer Control device (usage 0x01), as defined in the Consumer Page (page 0x0C) in the Universal Serial Bus HID Usage Tables Version 1.0 specification. This means that its top-level application collection should be Usage Page (Consumer), Usage (Consumer Control).When such a device is enumerated by the operating system, the supporting software (HIDSERVE.EXE) is installed and loaded on the host system. Table 1 outlines the Consumer Page audio controls that are supported in Windows 2000.Table 1. Consumer Page audio controls supported in Windows 2000.Usage Usage Name Usage Type0xE0 Volume* Linear Control (LC)0xE2 Mute* On/Off Control (OOC)0xE3 Bass Linear Control (LC)0xE4 Treble Linear Control (LC)0xE5 Bass Boost* On/Off Control (OOC)0xE7 Loudness On/Off Control (OOC)0xE9 Volume Increment* Re-trigger Control (RTC)0xEA Volume Decrement* Re-trigger Control (RTC)0x152 Bass Increment Re-trigger Control (RTC)0x153 Bass Decrement Re-trigger Control (RTC)0x154 Treble Increment Re-trigger Control (RTC)0x155 Treble Decrement Re-trigger Control (RTC)*) These controls are supported in Windows 98 (original release and Service Pack 1 release).The Volume, Bass, and Treble usages (of type LC) should be deployed for controls that generate both increment and decrement data represented by a 2-bit value, whereas the associated Increment and Decrement usages (of type RTC) should be deployed for pairs of one-bit controls (traditional button controls). The hardware design and implementation determines what usage types are appropriate for the HID firmware implementation for a particular device.It's also important to notice that any re-triggering of events should be done by software timers in the host system, and not by hardware timers in the device itself. For example, if the user keeps pressing the Volume Increment button, the device should only generate one input reportwith this state information. Host software will perform the actual re-triggering of events that will lead to continuous increments of the volume until the device generates another input report indicating that the button has been released or until the maximum volume has been reached.Key Codes For Scan Code Set 2:Key Codes for USB Usage Tables:。