Hi all,
I'd like to add a concrete use case to the long-standing request for BLE writes larger than 20 bytes in Toybox.BluetoothLowEnergy.
I'm a physician and a runner/triathlete. I'm building a personal Connect IQ app on my Forerunner 965 (API 5.2) that connects directly to my continuous glucose monitor (SIBIONICS GS1), so I can see my glucose during training without carrying a phone. For swimming and running, the phone is simply not an option.
What already works on the watch:
- Scanning, connecting, service discovery (0xFF30)
- Enabling notifications on 0xFF31 and receiving packets
- Short commands (7 bytes) written to 0xFF32 are accepted by the sensor
What blocks me:
The sensor requires a 26-byte authentication frame before it releases any glucose data. Connect IQ throws InvalidRequestException for any write above 20 bytes, both with WRITE_TYPE_DEFAULT and WRITE_TYPE_WITH_RESPONSE. Splitting the frame into 20 + 6 bytes doesn't work — the sensor discards it and asks to authenticate again. Android and iOS handle this transparently via ATT MTU exchange or long writes, so the exact same sensor works on any phone.
In other words, the watch is 6 bytes away from being a standalone glucose display.
What would solve it (any of these):
1. Negotiate a larger ATT MTU on connection (or expose a requestMtu() call), and allow writes up to MTU − 3
2. Support ATT Prepare Write / Execute Write (long writes) for characteristic writes
This isn't specific to one brand: many CGMs and medical/fitness sensors use frames larger than 20 bytes, and athletes with diabetes are exactly the users who benefit most from a phone-free setup on a Garmin watch.
Is there any update on whether this is planned for System 7 or a future firmware for the Forerunner 965?
Thanks,
Bruno