We would like the Fjorden Grip also to trigger the native iOS camera's shutter button, via sending a “volume up” command—similar to selfie sticks, which however use classic Bluetooth instead of BLE. Our implementation worked flawlessly in iOS 15, but stopped working in iOS 16. There is no documentation as to why. I wonder if anyone has encountered this issue, or understand what is happening?
----
To control the shutter button of the native iOS camera app, we have to implement an HID keyboard. This is only so that you can pair the grip via Settings.app, and then trigger the camera shutter. We are sending a volume up command, which then triggers the shutter. This is how all selfie-sticks work (via classic Bluetooth).
The grip advertises itself not as a full keyboard, but as a consumer control device.
The expected behavior is:
-
Pair grip via Settings.app → Bluetooth (our app/SDK is never involved)
-
Open Camera.app
-
Press the shutter button on the grip
-
The shutter button in Camera.app is triggered, similar to pressing a volume button on the phone
On iOS 15 (and iOS 16 during the beta cycle in the summer before it was released), this works perfectly. Since iOS 16 was released, nothing happens anymore when pressing the shutter button. Our HID report map:
static uint8_t report_map[] = {
0x05, 0x0C, // (GLOBAL) USAGE_PAGE 0x000C Consumer Device Page
0x09, 0x01, // (LOCAL) USAGE 0x000C0001 Consumer Control
0xA1, 0x01, // (MAIN) COLLECTION 0x01 Application
0x19, 0x00, // (LOCAL) USAGE_MINIMUM
0x2A, 0x9C, 0x02, // (LOCAL) USAGE_MAXIMUM
0x15, 0x00, // (GLOBAL) LOGICAL_MINIMUM
0x26, 0x9C, 0x02, // (GLOBAL) LOGICAL_MAXIMUM 0x029C (668)
0x95, 0x01, // (GLOBAL) REPORT_COUNT 0x01 (1) Number of fields
0x75, 0x10, // (GLOBAL) REPORT_SIZE 0x10 (16) Number of bits per field
0x81, 0x00, // (MAIN) INPUT
0xC0 // (MAIN) END_COLLECTION Application
};
I tried to find other selfie-sticks that work via BLE, but couldn't find any. Has anyone run into this issue?