鼠标与触摸屏格式说明

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

鼠标与触摸屏格式说明

USB 鼠标数据格式

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

字节说明
字节1bit7 为1时,表示Y坐标的变化量超出-256~255的范围;为0时,表示没有超出。
bit6 为1时,表示X坐标的变化量超出-256~255的范围;为0时,表示没有超出。
bit5 Y坐标变化的符号位,1表示鼠标向下移动,0表示鼠标向上移动。
bit4 X坐标变化的符号位,1表示鼠标向左移动,0表示鼠标向右移动。
bit3 固定为1。
bit2 置1时表示中键被按下。
bit1 置1时表示右键被按下。
bit0 置1时表示左键被按下。
字节2X坐标变化量,与字节1的bit4组成9位符号数,负数表示向左移,正数表右移。用补码表示变化量。
字节3Y坐标变化量,与字节1的bit5组成9位符号数,负数表示向左移,正数表右移。用补码表示变化量。
字节4滚轮变化量,0x01表示滚轮向前滚动一格;0xFF表示滚轮向后滚动一格;0x80为中间值,不滚动。

触摸屏数据格式

触摸屏一般提供了可以读取坐标数值的寄存器,驱动读取坐标值后一般会参照鼠标数据将触摸坐标数据提交至上层(系统中间层或应用程序)。提交时,触摸按下事件设定为鼠标左键按下事件、触摸抬起事件设定为鼠标左键抬起事件。

鼠标与触摸屏事件结构体定义

鼠标和触摸屏驱动使用的事件结构体位于“libsylixos/SylixOS/system/device/input”下,input 设备驱动应按照如下的 mouse_event_notify 结构向系统提交一个事件:

typedef struct mouse_event_notify {
    int32_t                ctype;                                  
    int32_t                kstat;                                         
    int32_t                wscroll[MOUSE_MAX_WHEEL];           
    int32_t                xmovement;                                     
    int32_t                ymovement;
    /*
     *  if use absolutely coordinate (such as touch screen)
     *  if you use touch screen:
     *  (kstat & MOUSE_LEFT) != 0 (press)
     *  (kstat & MOUSE_LEFT) == 0 (release)
     */
#define xanalog            xmovement                                     
#define yanalog            ymovement
} mouse_event_notify;
  • ctype:表示坐标类型,分为相对坐标和绝对坐标,一般鼠标使用相对坐标,触摸屏使用绝对坐标,坐标类型的定义如下表所示。
状态位名称含义
MOUSE_CTYPE_REL相对坐标
MOUSE_CTYPE_ABS绝对坐标
  • kstat:表示按键状态,按键包括如下表所示 8 种类型。对于触摸屏用“左键”表示手指按下或松开;第 4 键 ~ 第 8 键是用于满足特殊的鼠标,如游戏鼠标。每一个按键状态用一个数据位表示,0 表示弹起,1 表示按下。
状态位名称含义
MOUSE_LEFT左键
MOUSE_RIGHT右键
MOUSE_MIDDLE中键
MOUSE_BUTTON4~MOUSE_BUTTON8额外的 5 个预定义按键
  • wscroll:表示滚轮变化值。
  • xmovement:表示 X 相对偏移。
  • ymovement:表示 Y 相对偏移。
  • 当为绝对坐标时,系统建议程序使用 xanalog 和 yanalog(虽然目前其与 xmovement 和 ymovement 是同一个成员变量),以使程序更加直观易读。
文档内容是否对您有所帮助?
有帮助
没帮助