This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

HID over GATT : report wrongly interpreted if there is no keyboard

Hello,

I would like to know if anyone else has faced this issue. Indeed, if i want all the consumer control interpreted in the right way, i need to add a keyboard in my report map. If i don't do that (adding a keyboard map), some commands will be wrongly interpreted such as the "scan next" and "scan previous" that are respectively replaced with "volume down" and "volume up". On some phone, this configuration (without keyboard) can work very well.

My purpose is to not have the keyboard map because my phone ask for the configuration of a physical keyboard if it identifies a keyboard in the HID report map.

Here is my map :

    0x05, 0x0C,   // Usage Pg (Consumer Devices)
    0x09, 0x01,   // Usage (Consumer Control)
    0xA1, 0x01,   // Collection (Application)
    0x85, 0x01,   // Report Id (2)

    0x09, 0x02,   //   Usage (Numeric Key Pad)
    0xA1, 0x02,   //   Collection (Logical)
    0x05, 0x09,   //     Usage Pg (Button)
    0x19, 0x01,   //     Usage Min (Button 1)
    0x29, 0x0A,   //     Usage Max (Button 10)
    0x15, 0x01,   //     Logical Min (1)
    0x25, 0x0A,   //     Logical Max (10)
    0x75, 0x04,   //     Report Size (4)
    0x95, 0x01,   //     Report Count (1)
    0x81, 0x40,   //     Input (Data, Ary, Abs, Null state))
    0xC0,         //     End Collection

    0x05, 0x0C,   //   Usage Pg (Consumer Devices)

    0x09, 0x86,   //   Usage (Channel)
    0x09, 0xE0,   //   Usage (Volume)
    0x15, 0xFF,   //   Logical Min (-1)
    0x25, 0x01,   //   Logical Max (1)
    0x75, 0x02,   //   Report Size (2)
    0x95, 0x02,   //   Report Count (2)
    0x81, 0x26,   //   Input (Data, Var, Rel, Null)

    0x09, 0xE2,   //   Usage (Mute)
    0x09, 0x30,   //   Usage (Power)
    0x09, 0x83,   //   Usage (Recall Last)
    0x09, 0xCF,   //   Usage (Voice assistant)
    0x09, 0xB0,   //   Usage (Play)
    0x09, 0xB1,   //   Usage (Pause)
    0x09, 0xB2,   //   Usage (Record)
    0x09, 0xB3,   //   Usage (Fast Forward)
    0x09, 0xB4,   //   Usage (Rewind)
    0x09, 0xB5,   //   Usage (Scan Next)
    0x09, 0xB6,   //   Usage (Scan Prev)
    0x09, 0xB7,   //   Usage (Stop)
    0x09, 0xE9,   //   Usage (Volume Up)
    0x09, 0xEA,   //   Usage (Volume Down)
    0x15, 0x01,   //   Logical Min (1)
    0x25, 0x0E,   //   Logical Max (14)
    0x75, 0x04,   //   Report Size (4)
    0x95, 0x01,   //   Report Count (1)
    0x81, 0x40,   //   Input (Data, Ary, Abs, Null state)

    0x09, 0x80,   //   Usage (Selection)
    0xA1, 0x02,   //   Collection (Logical)
    0x05, 0x09,   //     Usage Pg (Button)
    0x19, 0x01,   //     Usage Min (Button 1)
    0x29, 0x03,   //     Usage Max (Button 3)
    0x15, 0x01,   //     Logical Min (1)
    0x25, 0x03,   //     Logical Max (3)
    0x75, 0x02,   //     Report Size (2)
    0x95, 0x01,   //     Report Count (1)
    0x81, 0x40,   //     Input (Data, Ary, Abs, Null state)
    0xC0,         //     End Collection

    0x75, 0x02,   //   Report Size (8)
    0x95, 0x02,   //   Report Count (1)
    0x81, 0x03,   //   Input (Const, Var, Abs)
    0xC0,         //   End Collection

Regards,

Aurélien

Parents Reply Children
  • Hi,

    Thank you very much for the reply. Indeed, this is exactly the issue i'm facing with since a few days. i don't know why i did't succeed to find this post during my research.

    I will try the report map but according to the feedback of some developers, it does not work on iphone :(

    But i ll try anyway.

    Thank you very much,

    Regards,

    Aurélien

    Edit : observed with iphone 8 and xiaomi mix 2

Related