Mares Quad with BLE Interface
Jef Driesen
jef at libdivecomputer.org
Fri Apr 13 05:32:51 PDT 2018
On 2018-04-12 20:57, Linus Torvalds wrote:
> On Thu, Apr 12, 2018 at 10:52 AM, Allen Hall <revenant83 at hotmail.com>
> wrote:
>> BLE communications log is attached. I may be able to tease out more
>> verbose
>> info if needed, but this looks pretty complete to me.
>
> This looks like it does contain all the information. I won't have time
> to look at it until next week, but maybe Jef will.
>
> The one question I have, is what the iOS encoding is for the data. The
> logs show the actual data transfers as strings like this:
>
> "value":"BQAAAAAdAGgfAwBIAAAAAAAAAO8="
>
> and I'm *guessing* that is just a base64 encoding, but it would be
> good to validate in case somebody knows the iphone logging model..
>
> If it's base64-encoded, then it decodes to 20 bytes :
>
> 0000000 05 00 00 00 00 1d 00 68 1f 03 00 48 00 00 00 00
> 0000020 00 00 00 ef
>
> and this all should be possible to figure out.
>
> In fact, I wrote a really stupid script to turn that into something
> slightly more legible:
>
> zcat < mares_bluelink_pro_ble.log.gz |
> grep '"value"' |
> sed 's/^.*{/{/' |
> while IFS=, read a b c d e f g h
> do
> val=$(echo "$d" | sed 's/"value"://' | tr -d '"')
> echo "$c $e:"
> echo $val | base64 -d | od -t x1
> done | less -S
>
> and it superficially looks like it's the standard Mares Icon HD
> protocol to me. I see one-byte 'aa' responses (which is just the ACK
> character). And I see sequences like this:
>
> "characteristic":"99A91EBD-B21F-1689-BB43-681F1F55E966"
> "status":"written":
> 0000000 e7 42
> 0000002
> "characteristic":"1D1AAE28-D2A8-91A1-1242-9D2973FBE571"
> "status":"subscribedResult":
> 0000000 aa
> 0000001
> "characteristic":"99A91EBD-B21F-1689-BB43-681F1F55E966"
> "status":"written":
> 0000000 78 ad 00 00 04 00 00 00
> 0000010
> "characteristic":"1D1AAE28-D2A8-91A1-1242-9D2973FBE571"
> "status":"subscribedResult":
> 0000000 78 13 00 00 ea
> 0000005
> "characteristic":"99A91EBD-B21F-1689-BB43-681F1F55E966"
> "status":"written":
> 0000000 e7 42
> 0000002
> "characteristic":"1D1AAE28-D2A8-91A1-1242-9D2973FBE571"
> "status":"subscribedResult":
> 0000000 aa
> 0000001
> "characteristic":"99A91EBD-B21F-1689-BB43-681F1F55E966"
> "status":"written":
> 0000000 1c ad 00 00 5c 00 00 00
> 0000010
> "characteristic":"1D1AAE28-D2A8-91A1-1242-9D2973FBE571"
> "status":"subscribedResult":
> 0000000 f0 00 a3 01 79 00 02 00 14 00 0e 00 00 00 74 00
> 0000020 40 95 00 00
> 0000024
> "characteristic":"1D1AAE28-D2A8-91A1-1242-9D2973FBE571"
> "status":"subscribedResult":
> 0000000 1e 00 78 05 20 80 78 05 32 80 78
> 0000013
> "characteristic":"1D1AAE28-D2A8-91A1-1242-9D2973FBE571"
> "status":"subscribedResult":
> 0000000 05 00 00 00 00 1d 00 68 1f 03 00 48 00 00 00 00
> 0000020 00 00 00 ef
> 0000024
> "characteristic":"1D1AAE28-D2A8-91A1-1242-9D2973FBE571"
> "status":"subscribedResult":
> 0000000 18 ef 18 ef 18 ef 18 ef 18 ef 18 ef 18 ef 18 ef
> 0000020 18 ef 18 f7
> 0000024
> "characteristic":"1D1AAE28-D2A8-91A1-1242-9D2973FBE571"
> "status":"subscribedResult":
> 0000000 00 0d 01 cc 00 fa 00 00 00 00 00 00 00 00 00 00
> 0000020 00 00 00 00
> 0000024
> "characteristic":"1D1AAE28-D2A8-91A1-1242-9D2973FBE571"
> "status":"subscribedResult":
> 0000000 00 ea
> 0000002
>
> where that "e7 42" is "device read", it gets "aa" back, then we send
> eight bytes of data (address and length, little-endian 4-byte each),
> then we get the data followed by "ea".
>
> (The "status":"written" is the phone sending, the
> "status":"subscribedResult" is the dive computer answering).
>
> That all looks exactly like the Icon HD serial protocol.
>
> Jef, any additional comments?
>
> Anyway, I suspect it all might just automatically work if we just add
> the Mares to the list of bluetooth targets. The BLE GATT layout looks
> like the normal "hacky serial over GATT" and might even match what we
> already try to do.
I haven't looked at the logfile in detail, but based on your description
it looks indeed like the standard iconhd protocol. That's also what I
expected: same protocol but send over BLE instead of usb-serial.
The base64 encoding is probably done by the iOS logger. I see absolutely
no reason to use base64 encoding over ble. It's perfectly possible to
send binary data over ble, and the large base64 overhead (about 33%)
would only make the relative slow ble even slower.
Jef
More information about the subsurface
mailing list