2012-12-13 58 views
1

我需要获取有关Wheell单击并从不同鼠标释放的信息。我在嵌入式设备上工作,可以访问原始形式的所有数据 - 字节流。HID报告描述符解析器:如何找到“点击”位位置

AFAIK所有传输的字节在HID报告描述符鼠标中描述。我有两个HID报告描述符和2点不同的鼠标传输的帧,但我不知道怎么去理解他们:

HID罗技:

Interface 0 HID Report Descriptor Mouse 
Item Tag (Value) Raw Data 
Usage Page (Generic Desktop) 05 01 
Usage (Mouse) 09 02 
Collection (Application) A1 01 
    Usage (Pointer) 09 01 
    Collection (Physical) A1 00 
     Usage Page (Button) 05 09 
     Usage Minimum (Button 1) 19 01 
     Usage Maximum (Button 3) 29 03 
     Logical Minimum (0) 15 00 
     Logical Maximum (1) 25 01 
     Report Size (1) 75 01 
     Report Count (3) 95 03 
     Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02 
     Report Size (5) 75 05 
     Report Count (1) 95 01 
     Input (Cnst,Ary,Abs) 81 01 
     Usage Page (Generic Desktop) 05 01 
     Usage (X) 09 30 
     Usage (Y) 09 31 
     Usage (Wheel) 09 38 
     Logical Minimum (-127) 15 81 
     Logical Maximum (127) 25 7F 
     Report Size (8) 75 08 
     Report Count (3) 95 03 
     Input (Data,Var,Rel,NWrp,Lin,Pref,NNul,Bit) 81 06 
    End Collection C0 
End Collection C0 

罗技帧4字节,首先为按钮:

00 00 00 00 : Button OFF (on release), X=0, Y=0, Whell=0 
01 00 00 00 : Button 1 ON, X=0, Y=0, Whell=0 
02 00 00 00 : Button 2 ON, X=0, Y=0, Whell=0 

HID YACOSS:

Interface 0 HID Report Descriptor Mouse 
Item Tag (Value) Raw Data 
Usage Page (Generic Desktop) 05 01 
Usage (Mouse) 09 02 
Collection (Application) A1 01 
    Report ID (1) 85 01 
    Usage (Pointer) 09 01 
    Collection (Physical) A1 00 
     Usage Page (Button) 05 09 
     Usage Minimum (Button 1) 19 01 
     Usage Maximum (Button 3) 29 03 
     Logical Minimum (0) 15 00 
     Logical Maximum (1) 25 01 
     Report Count (3) 95 03 
     Report Size (1) 75 01 
     Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02 
     Report Count (1) 95 01 
     Report Size (5) 75 05 
     Input (Cnst,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 03 
     Usage Page (Generic Desktop) 05 01 
     Logical Minimum (-2047) 16 01 F8 
     Logical Maximum (2047) 26 FF 07 
     Report Size (12) 75 0C 
     Report Count (2) 95 02 
    Usage (X) 09 30 
    Usage (Y) 09 31 
    Input (Data,Var,Rel,NWrp,Lin,Pref,NNul,Bit) 81 06 
    Logical Minimum (-127) 15 81 
    Logical Maximum (127) 25 7F 
    Report Size (8) 75 08 
    Report Count (1) 95 01 
    Usage (Wheel) 09 38 
    Input (Data,Var,Rel,NWrp,Lin,Pref,NNul,Bit) 81 06 
    End Collection C0 
    Usage Page (Consumer Devices) 05 0C 
    Usage (AC Pan) 0A 38 02 
    Report Count (1) 95 01 
    Input (Data,Var,Rel,NWrp,Lin,Pref,NNul,Bit) 81 06 
End Collection C0 
Usage Page 06 F3 F1 
Usage 0A F3 F1 
Collection (Application) A1 01 
    Report ID (2) 85 02 
    Usage 09 00 
    Report Count (1) 95 01 
    Report Size (8) 75 08 
    Logical Minimum (0) 15 00 
    Logical Maximum (255) 26 FF 00 
    Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02 
End Collection C0 

YACOSS帧7个字节,第二个用于按钮:

01 00 00 00 00 00 00 Button 1 OFF (released), X=0, Y=0, Wheel=0, AC Pan=0 
01 01 00 00 00 00 00 Button 1 ON , X=0, Y=0, Wheel=0, AC Pan=0 
01 02 00 00 00 00 00 Button 2 ON , X=0, Y=0, Wheel=0, AC Pan=0 

回答

2

报告描述符格式在Device Class definiton for HID中进行了说明。小鼠也在HID使用表格doc中报道。所有这一切都可以在一个usb.org HID页面 - >http://www.usb.org/developers/docs/hidpage/

我博客上嵌入HID,包括报告描述,在这里 - >http://www.circuitsathome.com/category/mcu/arduino/usb-shield/hid

另外,如果你只需要一个特定的功能,从鼠标,如X,Y,轮子和3个按钮,可以将其初始化为启动设备。任何鼠标都将具有相同的报告结构(请参阅引导鼠标),并且可以将其硬编码到您的应用程序中。