【问题标题】:HID descriptor of a remote control device遥控设备的 HID 描述符
【发布时间】:2019-10-25 22:24:36
【问题描述】:

我正在 Android 上开发一个远程控制应用程序。

这是我的隐藏描述符。我能够发送关键事件:音量减小/增大、dpad 中心/向上/向下/向左/向右。

private static final byte[] REPORT_MAP_REMOTE_WORKING = {
            USAGE_PAGE, 0x0c, // Usage Page (Consumer Devices)
            USAGE, 0x01, // Usage (Consumer Control)
            COLLECTION, 0x01, // Collection (Application)
            REPORT_ID, 0x01, // // Report ID
            LOGICAL_MINIMUM, 0x00, // // Logical Minimum (0)
            LOGICAL_MAXIMUM, 0x01, // // Logical Maximum (1)

            // VOLUME UP - 0 byte 0 bit - 0x01
            USAGE, (byte) 0xe9,

            // VOLUME DOWN - 0 byte 1 bit - 0x02
            USAGE, (byte) 0xea,
            REPORT_SIZE, 0x01,
            REPORT_COUNT, 0x02,
            INPUT, 0x06, // Input (Data, Variable, Relative)

            // DPAD CENTER - 0 byte 2 bit - 0x04
            USAGE, (byte) 0x41,
            REPORT_COUNT, COUNT_01,
            INPUT, 0x06, // Input (Data, Variable, Relative)

            // DPAD UP - 0 byte 3 bit - 0x08
            USAGE, (byte) 0x42,
            REPORT_COUNT, COUNT_01,
            INPUT, 0x06, // Input (Data, Variable, Relative)

            // DPAD DOWN - 0 byte 4 bit - 0x10
            USAGE, (byte) 0x43,
            REPORT_COUNT, COUNT_01,
            INPUT, 0x06, // Input (Data, Variable, Relative)

            // DPAD LEFT - 0 byte 5 bit - 0x20
            USAGE, (byte) 0x44,
            REPORT_COUNT, COUNT_01,
            INPUT, 0x06, // Input (Data, Variable, Relative)

            // DPAD RIGHT - 0 byte 6 bit - 0x40
            USAGE, (byte) 0x45,
            REPORT_COUNT, COUNT_01,
            INPUT, 0x06, // Input (Data, Variable, Relative)

            // VOLUME MUTE - 0 byte 7 bit - 0x80
            USAGE, (byte) 0xe2,
            REPORT_COUNT, COUNT_01,
            INPUT, 0x06, // Input (Data, Variable, Relative)

            END_COLLECTION, // End Collection
    };

如何编辑此描述符以发送与任何遥控器上相应颜色按钮(红色、绿色、黄色、蓝色)对应的事件?

【问题讨论】:

    标签: android bluetooth hid television


    【解决方案1】:

    红色/绿色/蓝色/黄色按钮也是消费者页面上的用法。 试试这个:

    //--------------------------------------------------------------------------------
    // Report descriptor data in hex (length 47 bytes)
    //--------------------------------------------------------------------------------
    
    
    // 050C0901 A1018501 15002501 09E909EA 09410942 09430944 094509E2 0969096A
    // 096B096C 7501950C 81069504 8101C0    
    
    
    //--------------------------------------------------------------------------------
    // Decoded Application Collection
    //--------------------------------------------------------------------------------
    
    /*
    05 0C        (GLOBAL) USAGE_PAGE         0x000C Consumer Device Page 
    09 01        (LOCAL)  USAGE              0x000C0001 Consumer Control (Application Collection)  
    A1 01        (MAIN)   COLLECTION         0x01 Application (Usage=0x000C0001: Page=Consumer Device Page, Usage=Consumer Control, Type=Application Collection)
    85 01          (GLOBAL) REPORT_ID          0x01 (1)  
    15 00          (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
    25 01          (GLOBAL) LOGICAL_MAXIMUM    0x01 (1)  
    09 E9          (LOCAL)  USAGE              0x000C00E9 Volume Increment (Re-trigger Control)  
    09 EA          (LOCAL)  USAGE              0x000C00EA Volume Decrement (Re-trigger Control)  
    09 41          (LOCAL)  USAGE              0x000C0041 Menu Pick (One Shot Control)  
    09 42          (LOCAL)  USAGE              0x000C0042 Menu Up (One Shot Control)  
    09 43          (LOCAL)  USAGE              0x000C0043 Menu Down (One Shot Control)  
    09 44          (LOCAL)  USAGE              0x000C0044 Menu Left (One Shot Control)  
    09 45          (LOCAL)  USAGE              0x000C0045 Menu Right (One Shot Control)  
    09 E2          (LOCAL)  USAGE              0x000C00E2 Mute (On/Off Control)  
    09 69          (LOCAL)  USAGE              0x000C0069 Red Menu Button (Momentary Control)  
    09 6A          (LOCAL)  USAGE              0x000C006A Green Menu Button (Momentary Control)  
    09 6B          (LOCAL)  USAGE              0x000C006B Blue Menu Button (Momentary Control)  
    09 6C          (LOCAL)  USAGE              0x000C006C Yellow Menu Button (Momentary Control)  
    75 01          (GLOBAL) REPORT_SIZE        0x01 (1) Number of bits per field  
    95 0C          (GLOBAL) REPORT_COUNT       0x0C (12) Number of fields  
    81 06          (MAIN)   INPUT              0x00000006 (12 fields x 1 bit) 0=Data 1=Variable 1=Relative 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap 
    95 04          (GLOBAL) REPORT_COUNT       0x04 (4) Number of fields  
    81 01          (MAIN)   INPUT              0x00000001 (4 fields x 1 bit) 1=Constant 0=Array 0=Absolute 
    C0           (MAIN)   END_COLLECTION     Application 
    */
    
    //--------------------------------------------------------------------------------
    // Consumer Device Page inputReport 01 (Device --> Host)
    //--------------------------------------------------------------------------------
    
    typedef struct
    {
      uint8_t  reportId;                                 // Report ID = 0x01 (1)
                                                         // Collection: CA:ConsumerControl
      uint8_t  CD_ConsumerControlVolumeIncrement : 1;    // Usage 0x000C00E9: Volume Increment, Value = 0 to 1
      uint8_t  CD_ConsumerControlVolumeDecrement : 1;    // Usage 0x000C00EA: Volume Decrement, Value = 0 to 1
      uint8_t  CD_ConsumerControlMenuPick : 1;           // Usage 0x000C0041: Menu Pick, Value = 0 to 1
      uint8_t  CD_ConsumerControlMenuUp : 1;             // Usage 0x000C0042: Menu Up, Value = 0 to 1
      uint8_t  CD_ConsumerControlMenuDown : 1;           // Usage 0x000C0043: Menu Down, Value = 0 to 1
      uint8_t  CD_ConsumerControlMenuLeft : 1;           // Usage 0x000C0044: Menu Left, Value = 0 to 1
      uint8_t  CD_ConsumerControlMenuRight : 1;          // Usage 0x000C0045: Menu Right, Value = 0 to 1
      uint8_t  CD_ConsumerControlMute : 1;               // Usage 0x000C00E2: Mute, Value = 0 to 1
      uint8_t  CD_ConsumerControlRedMenuButton : 1;      // Usage 0x000C0069: Red Menu Button, Value = 0 to 1
      uint8_t  CD_ConsumerControlGreenMenuButton : 1;    // Usage 0x000C006A: Green Menu Button, Value = 0 to 1
      uint8_t  CD_ConsumerControlBlueMenuButton : 1;     // Usage 0x000C006B: Blue Menu Button, Value = 0 to 1
      uint8_t  CD_ConsumerControlYellowMenuButton : 1;   // Usage 0x000C006C: Yellow Menu Button, Value = 0 to 1
      uint8_t  : 1;                                      // Pad
      uint8_t  : 1;                                      // Pad
      uint8_t  : 1;                                      // Pad
      uint8_t  : 1;                                      // Pad
    } inputReport01_t;
    

    【讨论】:

    • 它对我不起作用。使用此描述符,我可以发送事件:音量减小/增大、菜单拾取/增大/向下/向左/向右,但不能发送红色、绿色、蓝色和黄色按钮。另外,我在消费者页面中没有找到使用 ID:69、6A、6B、6C:usb.org/sites/default/files/documents/hut1_12v2.pdf
    • 颜色按钮在名为“审查请求 36:消费电子设备(颜色按钮)”的单独文档中定义,地址为 usb.org/sites/default/files/color_buttons_0.pdf。 (显然,委员会很难在 github 上维护一个简单的使用表,以便我们都可以看到发生了什么变化以及何时发生变化)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 2016-09-24
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    相关资源
    最近更新 更多