1

I am developing a HID device on the NRF52810. After testing the work of HID on IOS, I found out that the virtual keyboard disappears when the HID device is connected and it is impossible to return it to the iphone.

After reading the documentation for the HID, I did not find the right command.

I found a BLE keyboard that has this key to enable the virtual keyboard. After testing the keyboard, I found out the following things: 1) On windows, this button launches the context menu, key code 0x65 2) On android, this button launches the context menu 3) On ios, hides and opens the virtual keyboard

I tried to send this code (0x65) through my device. And as expected on windows and android opens a context menu. However, on ios it is not recognized. The keyboard does not appear, programs see the key as undefined.

Does anyone know what the problem is? What code do I need to send to IOS to open the virtual keyboard? Can there be a problem in the HID descriptor?

    0x05, 0x01,       // Usage Page (Generic Desktop)
    0x09, 0x06,       // Usage (Keyboard)
    0xA1, 0x01,       // Collection (Application)
        0x85, 0x01,       // Report id(1)
        0x15, 0x00,       // Logical Minimum (0)
        0x25, 0x01,       // Logical Maximum (1)
        0x95, 0x05,       // Report Count (5)
        0x75, 0x01,       // Report Size (1)
        0x05, 0x08,       // Usage Page (Page# for LEDs)
        0x19, 0x01,       // Usage Minimum (1)
        0x29, 0x05,       // Usage Maximum (5)
        0x91, 0x02,       // Output (Data, Variable, Absolute), Led report
        0x95, 0x01,       // Report Count (1)
        0x75, 0x03,       // Report Size (3)
        0x91, 0x01,       // Output (Data, Variable, Absolute), Led report padding

        0x95, 0x04,       // Report Count (5)
        0x75, 0x08,       // Report Size (8)
        0x15, 0x00,       // Logical Minimum (0)
        0x25, 0xFF,       // Logical Maximum (255)
        0x05, 0x07,       // Usage Page (Key codes)
        0x19, 0x00,       // Usage Minimum (0)
        0x29, 0xFF,       // Usage Maximum (255)
        0x81, 0x00,       // Input (Data, Array) Key array(6 bytes)
    0xC0,              // End Collection (Application)

    0x05, 0x01,         // Usage Page (Desktop),
    0x09, 0x80,         // Usage (Generic Desktop),
    0xA1, 0x01,         // Collection (Application),
        0x85, 0x02,         // Report id(2)
        0x75, 0x01,         // Report Size (1)
        0x95, 0x08,         // Report Count (8)
        0x15, 0x00,         // Logical Minimum (0)
        0x25, 0x01,         // Logical Maximum (1)
        0x09, 0x81,         // Usage (System Power Down)
        0x09, 0x82,         // Usage (System Sleep)
        0x09, 0x83,         // Usage (System Wake Up)
        0x09, 0x84,         // Usage (System Context Menu)
        0x09, 0x85,         // Usage (System Main Menu)
        0x09, 0x86,         // Usage (System App Menu)
        0x09, 0x87,         // Usage (System Menu Help)
        0x09, 0x88,         // Usage (System Menu Exit)
        0x81, 0x02,         // Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit)
    0xC0,               // End Collection,
  • Can anyone have a similar keyboard? You can try to find out the scan key code to make sure that I am giving everything correctly. Then I can understand that the problem is in the descriptor – Юра Моргунов Apr 22 '20 at 12:25

1 Answers1

1

I realise this was asked 9 months ago, but I wanted to add the answer anyway since I was trying to do the same and figured it out recently. I managed it using the Consumer Control usage page, with the specific usage:

0x0A, 0xAE, 0x01, // Usage (AL Keyboard Layout)

For more information, see HID Usage Tables section 15.15.

G4A
  • 195
  • 1
  • 1
  • 10