BLE download from Heinrichs Weikamp dive computers

Matthias Heinrichs matthias.heinrichs at
Thu Jun 29 08:14:52 PDT 2017

Hi all and sorry for the late reply here,

Am 29.06.2017 um 16:37 schrieb Dirk Hohndel:
> On Thu, Jun 29, 2017 at 02:19:25PM +0200, Jan Mulder wrote:
>> basically sure that the service 0000fefb... is the right one. In the code in
>> master this one is discarded as standard, but by using this anyway I am able
>> to get the OSTC3 in download mode. I did not succeed up to now to receive
>> data from the OSTC3, so obviously, the parsing fails right at the start.

If the OSTC showed "Download mode enabled" you successfully transmitted 
the initial byte to the OSTC (0xBB) and you should get a 0xBB (command 
echo) and a 0x4D "("Ready") back. Try a 0x6D next, the OSTC will respond 
with a 0x6D (echo) and 4096bytes of dive log headers.

> Matthias, can you confirm that 0000fefb-0000-1000-8000-00805f9b34fb is the
> UUID we should be connecting to? Is this a fixed UUID or does it ever
> change? Any special tricks we need to get data back from the dive
> computer?

It's the same for all computers and that's what I found looking into all 
the documentation we have:

This is the TerminalIO GATT service containing all TerminalIO 

UART Data TX Characteristic:
UUID: 00000002-0000-1000-8000-008025000000
Type: uint8 array (20 bytes)
Properties: Notify
The TerminalIO client uses the UART Data TX characteristic to receive 
UART data from the server (peripheral) via notifications.

UART Data RX Characteristic:
UUID: 00000001-0000-1000-8000-008025000000
Type: uint8 array (20 bytes)
Properties: Write without response
The TerminalIO client uses the UART Data RX characteristic to write UART 
data to the server (peripheral).

UART Credits TX Characteristic:
UUID: 00000004-0000-1000-8000-008025000000
Type: uint8 (1 byte)
Properties: Indicate
The TerminalIO client uses the UART Credits TX characteristic to receive 
UART credits (0 - 255) from the server (peripheral) via indications.

UART Credits RX Characteristic
UUID: 00000003-0000-1000-8000-008025000000
Type: uint8 (1 byte)
Properties: Write
The TerminalIO client uses the UART Credits RX characteristic to grant 
UART credits (0 - 255) to the server (peripheral).

So pretty much the same what you found out already.

>> I looked around for any dive log software for the OSTC family, but I get the
>> impression that Subsurface is leading here, so no BLE capable stuff found
>> that can act as a reference.

"Divemate" works via BLE but the code is no open source, unfortunately.

> Also a question to Matthias - what software is the reference for BLE
> downloads?

BLE to PC/MAC? None. BLE to iOS or Android: Divemate.

We also have some documents for Android and iOS implementation:

We got these in 2015, so not sure how useful they are...


heinrichs weikamp gmbh * Adlerstr. 7 * 79098 Freiburg * Germany

Amtsgericht Freiburg HRB 713558 * Gerichtsstand Freiburg im Breisgau
Geschäftsführer: Matthias Heinrichs, Christian Weikamp

More information about the subsurface mailing list