2
votes

I'm creating a very simple Arduino BT keyboard for iOS using a RN-42-HID Bluetooth module. I've been able to connect to an iPad and send it a few HID reports.

So far, I can make the cursor go left, right, up and down, as well as select a certain app. Yay! I do this using the HID raw reports as detailed by Roving Network's HID manual.

I've been trying to figure out how to make my iPad go to the home screen, or change the page. When I connect with a regular BT keyboard, with VoiceOver enabled, the BT keyboard combination of "ctrl + alt + H" makes the iPad return to the home page.

When I send the corresponding HID raw report, the iPad doesn't return home.

const byte HOME1[] = { //equivalent to keyboard ctrl + opt/alt + h
  0xFD,0x09,0x01,0x05,0x00,0x0B,0x00,0x00,0x00,0x00,0x00};

It sees the "H", and prints "H" when I have a text field open, but it just doesn't return to the home page.

I've also tried sending the modifier keys just as a combination of 3 scan codes at the same time, but that didn't work on the iPad, either.

const byte HOME2[] = { //equivalent to keyboard ctrl + opt/alt + h
  0xFD,0x09,0x01,0x00,0x00,0xE0,0xE2,0x0B,0x00,0x00,0x00};

Am I sending the report in the right format? Am I sending the right scan codes?

Even if you don't have the actual scan code, it would be nice if there was a way to figure out what code activates the home page. Does anyone know how I can find the scan code for the home button (and for page turn, which also involves the alt button)?

2

2 Answers

1
votes

I had a similar issue but with a different combination of keys. I found that i had to split the action into 3 steps: Ctrl+alt+ "letter", then Ctrl+alt, then all buttons released. So just looking at your code, maybe try sending this sequence:

0xFD,0x09,0x01,0x05,0x00,0x0B,0x00,0x00,0x00,0x00,0x00 //ctrl + alt + h

0xFD,0x09,0x01,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00 //ctrl + alt

0xFD,0x09,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 //all released.

0
votes

I'm not sure of a raw report, but I did manage it with [0xFD,0x03,0x03,0x01,0x00] (down), and [0xFD,0x03,0x03,0x00,0x00] (up)