-
Notifications
You must be signed in to change notification settings - Fork 180
Description
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.