描述符
/* USB 键盘HID描述符 */
/* HID Report Descriptor Keyboard */
const u8 Keyboard_ReportDescriptor[] =
{
0x05, 0x01, // Usage Page (Generic Desktop)
0x09, 0x06, // Usage (Generic Device Controls)
0xA1, 0x01, // Collection (Application)
0x85, REPORT_ID, // REPORT_ID
0x05, 0x07, // Usage Page (Keyboard/Keypad)
0x19, 0xE0, // Usage Minimum (Button 224)
0x29, 0xE7, // Usage Maximum (Button 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,Var,Abs,NWrp,Lin,Pref,NNul,Bit)
0x95, 0x01, // Report Count (1)
0x75, 0x08, // Report Size (8)
0x81, 0x01, // Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit)
0x95, 0x05, // Report Count (5)
0x75, 0x01, // Report Size (1)
0x05, 0x08, // Usage Page (LEDs)
0x19, 0x01, // Usage Minimum (Button 1)
0x29, 0x05, // Usage Maximum (Button 5)
0x91, 0x02, // Output (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit)
0x95, 0x01, // Report Count (1)
0x75, 0x03, // Report Size (3)
0x91, 0x01, // Output (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit)
0x95, 0x06, // Report Count (6)
0x75, 0x08, // Report Size (8)
0x15, 0x00, // Logical Minimum (0)
0x26, 0xFF, 0x00, // Logical Maximum (255)
0x05, 0x07, // Usage Page (Keyboard/Keypad)
0x19, 0x00, // Usage Minimum (Button 0)
0x2A, 0xFF, 0x00, // Usage Maximum (Button 255)
0x81, 0x00, // Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit)
0xC0 // End Collection
}
报文说明
键盘发送给PC的数据每次9个字节
Byte0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 Byte8
定义分别是:
Byte0 -- Report ID
Byte1 --
|--Bit0: Left Control是否按下,按下为1
|--Bit1: Left Shift 是否按下,按下为1
|--Bit2: Left Alt 是否按下,按下为1
|--Bit3: Left GUI 是否按下,按下为1
|--Bit4: Right Control是否按下,按下为1
|--Bit5: Right Shift 是否按下,按下为1
|--Bit6: Right Alt 是否按下,按下为1
|--Bit7: Right GUI 是否按下,按下为1
Byte2 -- 填0,保留位
Byte3~Byte8 -- 这六个为普通按键
例如(假设Report ID等于c4):
按键:左Ctrl + 1
按下报文: c4 01 00 1e 00 00 00 00 00
释放报文: c4 00 00 00 00 00 00 00 00
按键:左Ctrl + 2
按下报文: c4 01 00 1f 00 00 00 00 00
释放报文: c4 00 00 00 00 00 00 00 00
按键:左Ctrl + 右Shift + 3 + 4
按下报文: c4 21 00 20 21 00 00 00 00
释放报文: c4 00 00 00 00 00 00 00 00
按键:5
报文按下: c4 00 00 22 00 00 00 00 00
报文释放: c4 00 00 00 00 00 00 00 00
对于键码,HID和PS2的键盘有所不同,其它键码请参照 USB HID to PS2 Scan Code Translation Table.pdf 的“Key Name”列和“HID Usage ID”列;
补充
2017年7月12日
1、如果发送X键按下报文后不发送释放报文,则设备一直处于连按X键状态,值到发送释放报文或直接断开设备;
2、如果发送X1键按下报文后不发送释放报文,而发送其他按键X2键按下报文,则X1键被释放,设备一直处于连按X2键状态,值到发送释放报文或直接断开设备;
2017年5月22日
1、可能是因为驱动冲突吧,用在声波ST7000MAC WinXP下时,需修改下PID。