键盘数据格式说明

更新时间:
2024-03-14
下载文档

键盘数据格式说明

USB 键盘数据格式

USB 键盘数据格式由 USB HID 协议定义,该协议定义键盘数据包含 8 个字节,其格式如下表所示。

字节bit位76543210
字节1含义Right GUIRight AltRight ShiftRight CtrlLeft GUILeft AltLeft ShiftLeft Ctrl
字节2/00000000
字节3 ~ 字节8按键键值按键键值按键键值按键键值按键键值按键键值按键键值按键键值按键键值

普通按键的相关键值可以参考《 USB HID to PS/2 Scan Code Translation Table 》,部分键码如下表所示。

键值键盘区域含义键值键盘区域含义
0x04Keyboarda and A0x53KeypadNum Lock and Clear
0x1EKeyboard1 and !0x58KeypadENTER
0x28KeyboardReturn0x59Keypad1
0x2CKeyboardSpacebar0xB6Keypad(
0x3AKeyboardF10xBBKeypadBackspace
0x4BKeyboardPageUp0xD7Keypad+

例如,键盘发送一帧如下的数据:0x02 0x00 0x04 0x05 0x00 0x00 0x00 0x00 表示同时按下了 Left Shift +‘a’+‘b’ 三个键。

键盘事件结构体定义

根据 USB 键盘的数据格式,SylixOS 定义了 keyboard_event_notify 结构,当每产生一个键盘事件时,驱动应向系统通知一个事件的发生。

#include <SylixOS.h> 
typedef struct keyboard_event_notify {
    int32_t                 nmsg;                       /*  消息数量,通常为1           */
    int32_t                 type;                       /*  按键状态,按下或松开         */
    int32_t                 ledstate;                   /*  LED状态                   */
    int32_t                 fkstat;                     /*  功能键状态                 */
    int32_t                keymsg[KE_MAX_KEY_ST * 2];   /*  按键键值                  */
} keyboard_event_notify;
  • nmsg:表示消息数量,通常为 1。
  • type:表示按键状态,有如下表所示 2 种情况。
状态位名称含义
KE_PRESS按键按下
KE_RELEASE按键松开
  • ledstate:表示 LED 状态,如果对应的位为 0,表示 LED 按键处于打开状态,反之则处于关闭状态。在打开状态下,通常键盘驱动程序会将相应的 LED 指示灯打开。LED 状态有如下表所示 3 种情况。
状态位名称含义
KE_LED_NUMLOCK用于标识数字小键盘是否使能
KE_LED_CAPSLOCK用于标识字母大写状态是否使能
KE_LED_SCROLLLOCK用于标识滚动锁定状态是否使能
  • fkstat:表示功能键状态,如果对应的位为 0,表示功能键按下,反之则没有按下,功能键状态位有如下表所示 6 种。
状态位名称含义
KE_FK_CTRL用于标识左 Ctrl 键是否按下
KE_FK_ALT用于标识左 Alt 键是否按下
KE_FK_SHIFT用于标识左 Shift 键是否按下
KE_FK_CTRLR用于标识右 Ctrl 键是否按下
KE_FK_ALTR用于标识右 Alt 键是否按下
KE_FK_SHIFTR用于标识右 Shift 键是否按下
  • keymsg:表示普通按键键值,其每两个元素为一组。
  • event.keymsg[n](n = 0,2,4 ……)表示 SylixOS 键盘键码。
  • event.keymsg[n + 1](n = 0,2,4 ……)表示标准键盘键码。
文档内容是否对您有所帮助?
有帮助
没帮助