Skip to content

BLE connection error with GoPro Max (1st Gen, Lab Firmware 02.02.70) #829

@cmhdez

Description

@cmhdez

I want to make it clear upfront that I am testing with a first-generation GoPro Max running Lab Firmware v02.02.70. I understand that this camera is not listed in the official compatibility list, but I wanted to document my findings and seek help — especially since the GoPro Max 2 is coming soon, and additional support for the Max line would be greatly appreciated.

When attempting to connect over BLE using the sdk_wireless_camera_control demo, I consistently receive an “Encryption is insufficient” error when the SDK tries to read a GATT descriptor.

Environment
• Camera: GoPro Max (1st Gen)
• Firmware: Lab Firmware 02.02.70
• Platform: macOS (please specify version, e.g. macOS Sonoma 14.x)
• Python: 3.13.7 (in venv)
• SDK: latest open_gopro from PyPI (Requirement already satisfied)

Logs / Error Traceback
INFO 08:37:08.271 Discovered: 178FDB13-3AF2-F37F-5360-EFA360BD2C09: GoPro 2093 bleak_wrapper.py:134
INFO 08:37:08.275 Found 1 matching devices. bleak_wrapper.py:149
INFO 08:37:08.276 Establishing the BLE connection client.py:108
INFO 08:37:08.277 Establishing BLE connection to 178FDB13-3AF2-F37F-5360-EFA360BD2C09: GoPro 2093... bleak_wrapper.py:216
INFO 08:37:08.964 Discovering characteristics... bleak_wrapper.py:361
ERROR 08:37:39.173 Error while opening: BleakError('Failed to read descriptor 50: Error gopro_wireless.py:427
Domain=CBATTErrorDomain Code=15 "Encryption is insufficient."
UserInfo={NSLocalizedDescription=Encryption is insufficient.}')
Traceback (most recent call last):
File "/Users/cmhdez/Sites/OpenGoPro/demos/python/sdk_wireless_camera_control/venv/lib/python3.13/site-packages/open_gopro/gopro_wireless.py", line 391, in open
await self._open_ble(timeout, retries)
File "/Users/cmhdez/Sites/OpenGoPro/demos/python/sdk_wireless_camera_control/venv/lib/python3.13/site-packages/open_gopro/gopro_wireless.py", line 605, in _open_ble
await self._ble.open(timeout, retries)
File "/Users/cmhdez/Sites/OpenGoPro/demos/python/sdk_wireless_camera_control/venv/lib/python3.13/site-packages/open_gopro/network/ble/client.py", line 122, in open
self._gatt_table = await self._controller.discover_chars(self._handle, self.uuids)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/cmhdez/Sites/OpenGoPro/demos/python/sdk_wireless_camera_control/venv/lib/python3.13/site-packages/open_gopro/network/ble/adapters/bleak_wrapper.py", line 385, in discover_chars
value=await handle.read_gatt_descriptor(descriptor.handle),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/cmhdez/Sites/OpenGoPro/demos/python/sdk_wireless_camera_control/venv/lib/python3.13/site-packages/bleak/init.py", line 875, in read_gatt_descriptor
return await self._backend.read_gatt_descriptor(handle, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/cmhdez/Sites/OpenGoPro/demos/python/sdk_wireless_camera_control/venv/lib/python3.13/site-packages/bleak/backends/corebluetooth/client.py", line 307, in read_gatt_descriptor
output = await self._delegate.read_descriptor(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
descriptor.obj, use_cached=use_cached
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/Users/cmhdez/Sites/OpenGoPro/demos/python/sdk_wireless_camera_control/venv/lib/python3.13/site-packages/bleak/backends/corebluetooth/PeripheralDelegate.py", line 175, in read_descriptor
return await future
^^^^^^^^^^^^
bleak.exc.BleakError: Failed to read descriptor 50: Error Domain=CBATTErrorDomain Code=15 "Encryption is insufficient." UserInfo={NSLocalizedDescription=Encryption is insufficient.}
...
bleak.exc.BleakError: Failed to read descriptor 50: Error Domain=CBATTErrorDomain Code=15 "Encryption is insufficient." UserInfo={NSLocalizedDescription=Encryption is insufficient.}

Steps to Reproduce
1. Clone OpenGoPro repo and set up virtual environment.
2. Install SDK via pip install . inside sdk_wireless_camera_control.
3. Run python main.py with GoPro Max (1st Gen) in pairing mode.
4. Observe BLE discovery succeeds, but fails when reading descriptor with “Encryption is insufficient.”

Expected Behavior

SDK should be able to complete BLE handshake and allow control commands (if supported by camera).

Actual Behavior

BLE discovery succeeds, but fails immediately with Encryption is insufficient error while reading descriptor 50.

Additional Notes
• I know the 1st Gen Max is not officially supported, but I thought this might be useful to document.
• If there’s a workaround (e.g., forcing Wi-Fi connection first, skipping certain descriptors, or different pairing flow), I’d be happy to test and report back.
• Any guidance would be greatly appreciated as this could help ensure compatibility for the upcoming Max 2 as well.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingtriageNeeds to be reviewed and assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions