McLean Extreme Integration

189 views
Skip to first unread message

David Carron

unread,
May 14, 2020, 11:56:29 AM5/14/20
to Subsurface Divelog
I'm working with Jef Dreisden on the integration of a new dive computer into libdivecomputer and I see that  subsurface a modified version, but I haven't had much luck finding details on the modifications.

Do I need to do anything extra in my parser to leverage the modifications, perhaps to allow user editting, providing extra information or functionality available from the dive computer?

Thank you

David


Dirk Hohndel

unread,
May 14, 2020, 12:06:35 PM5/14/20
to subsurfac...@googlegroups.com
You can see the additional changes in our git tree at https://github.com/subsurface/libdc/commits/Subsurface-DS9 
As it happens, Linus just a few days ago rebased everything on top of Jef's latest tree, so you can see our 27 commits at the very top.
Main differences were outlined in an email to both the Subsurface and libdivecomputer mailing lists, easily found in the mail archives


There are some different perceptions on which of those are "bug fixes" vs "introducing bugs". The majority of them focus on the key feature difference in that our fork supports a generic field cache and string fields in the dive computer parser, which allows the backend to report much richer information to the application. E.g. things like battery voltages, deco algorithm used, actual textual serial numbers, firmware / hw versions, etc. Also, I believe Jef never adopted the usb-storage backend or the support for the Garmin Descent that we have in Subsurface.

/D 

--
You received this message because you are subscribed to the Google Groups "Subsurface Divelog" group.
To unsubscribe from this group and stop receiving emails from it, send an email to subsurface-dive...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/subsurface-divelog/b7607770-8bb4-42f2-b23a-f09086230ce8%40googlegroups.com.

David Carron

unread,
May 14, 2020, 3:03:11 PM5/14/20
to Subsurface Divelog
That's great, thanks a lot. I'll take a look at the pipermail link.

Do you have a feel for how often recent additions to libdivecomputer get rolled in to subsurface?


Jason Bramwell

unread,
May 14, 2020, 3:23:23 PM5/14/20
to subsurfac...@googlegroups.com
If there is an addition that is valuable to Subsurface then I suspect it can be pulled in very quickly. If there is an addition that doesn’t immediately bring any benefit to Subsurface then I suspect it won’t get pulled in till there is a future addition that makes pulling it in worthwhile but yes updates do gut pulled in.

Jb

Sent from my iPhone

On 14 May 2020, at 20:03, David Carron <david.d...@gmail.com> wrote:


That's great, thanks a lot. I'll take a look at the pipermail link.

Do you have a feel for how often recent additions to libdivecomputer get rolled in to subsurface?


--
You received this message because you are subscribed to the Google Groups "Subsurface Divelog" group.
To unsubscribe from this group and stop receiving emails from it, send an email to subsurface-dive...@googlegroups.com.

Linus Torvalds

unread,
May 14, 2020, 3:23:26 PM5/14/20
to Subsurface Divelog
On Thu, May 14, 2020 at 12:03 PM David Carron <david.d...@gmail.com> wrote:
>
> Do you have a feel for how often recent additions to libdivecomputer get rolled in to subsurface?

It depends, and I do an update fairly randomly when I notice that Jef
has anything new that is meaningful.

But if you let us know about any new code you care about, I can do it
in a very timely manner (ie with a latency of a day or two). Of
course, that assumes there are no issues. And obviously an actual
_release_ of subsurface can then take a while, but a test build would
be available fairly quickly.

Also note that we can take new back-ends directly too. It is, after
all, how most of the backends I wrote made it in - and while some of
them are now part of upstream libdivecomputer, some of them still
haven't made it (ie Garmin Descent and Deepblu Cosmiq+).

So even just sending us a patch directly can work.

Linus

David Carron

unread,
May 15, 2020, 4:39:52 AM5/15/20
to Subsurface Divelog
The addition is just a back-end for the new computer, self contained in the typical mclean_extreme.c, mclean_extreme_parser.c and mclean_extreme.h files, plus the modifications for the parser registration.

The computer wire format supports a number of extra functions beyond libdivecomputer, and there's commented out code in the parser to extract that data.

If I send over the parser files is that enough for a test integration? What would you need for testing?

Thanks
David

On Thursday, May 14, 2020 at 9:23:26 PM UTC+2, Linus Torvalds wrote:

Linus Torvalds

unread,
May 15, 2020, 1:17:57 PM5/15/20
to Subsurface Divelog
On Fri, May 15, 2020 at 1:39 AM David Carron <david.d...@gmail.com> wrote:
>
> The addition is just a back-end for the new computer, self contained in the typical mclean_extreme.c, mclean_extreme_parser.c and mclean_extreme.h files, plus the modifications for the parser registration.
>
> The computer wire format supports a number of extra functions beyond libdivecomputer, and there's commented out code in the parser to extract that data.
>
> If I send over the parser files is that enough for a test integration? What would you need for testing?

Well, I can't actually test any of this without the dive computer, but
if you send over the new files and the modification to registration
(honestly, a diff of everything is the easiest way) I can at least
take a look.

Linus

David Carron

unread,
May 17, 2020, 5:01:43 AM5/17/20
to Subsurface Divelog
Linus,

I attached the three parser files and here's a diff -r of libdivecomputer-master and my local modified version of libdivecomputer.

Jeff has looked through the sources and has had a few comments which I'm going to fold in, but nothing that affects the basic structure or functionality.


diff -r libdivecomputer libdivecomputer-master
diff -r libdivecomputer/include/libdivecomputer/common.h libdivecomputer-master/include/libdivecomputer/common.h
107,108d106
<       /* McLean */
<       DC_FAMILY_MCLEAN_EXTREME = (16 << 16),
diff -r libdivecomputer/src/descriptor.c libdivecomputer-master/src/descriptor.c
48d47
< static int dc_filter_mclean(dc_transport_t transport, const void* userdata);
380,381d378
<       /* McLean Extreme */
<       { "McLean", "Extreme", DC_FAMILY_MCLEAN_EXTREME, 0, DC_TRANSPORT_BLUETOOTH, dc_filter_mclean },
587,602d583
< static int dc_filter_mclean(dc_transport_t transport, const void* userdata)
< {
<       static const char* const bluetooth[] = {
<               "Extreme",
<       };
<
<       if (transport == DC_TRANSPORT_BLUETOOTH) {
<               return DC_FILTER_INTERNAL(userdata, bluetooth, 0, dc_match_name);
<       }
<       else if (transport == DC_TRANSPORT_SERIAL) {
<               return DC_FILTER_INTERNAL(userdata, rfcomm, 1, dc_match_devname);
<       }
<
<       return 1;
< }
<
diff -r libdivecomputer/src/device.c libdivecomputer-master/src/device.c
60d59
< #include "mclean_extreme.h"
215,217d213
<       case DC_FAMILY_MCLEAN_EXTREME:
<               rc = mclean_extreme_device_open(&device, context, iostream);
<               break;
diff -r libdivecomputer/src/parser.c libdivecomputer-master/src/parser.c
60d59
< #include "mclean_extreme.h"
176,178d174
<       case DC_FAMILY_MCLEAN_EXTREME:
<               rc = mclean_extreme_parser_create(&parser, context);
<               break;


On Friday, May 15, 2020 at 7:17:57 PM UTC+2, Linus Torvalds wrote:
mclean_extreme.c
mclean_extreme.h
mclean_extreme_parser.c

Linus Torvalds

unread,
May 17, 2020, 4:09:35 PM5/17/20
to Subsurface Divelog
On Sun, May 17, 2020 at 2:01 AM David Carron <david.d...@gmail.com> wrote:
>
> diff -r libdivecomputer/include/libdivecomputer/common.h libdivecomputer-master/include/libdivecomputer/common.h

Heh. Please use "diff -ur" in the future. Legacy diffs are nasty, and
don't work very well if there are any other changes.

In fact, with "diff -urN", you get the new files in the diff too. Or
you could use "git", of course.

But no worries. I can see what you are doing, I'd just find it more
convenient other (more standard) ways..

Anyway, if you're getting this all merged through Jef, we'll take it
that way. Just holler when you notice to make it more timely.

Also, it would be lovely if you can then describe some of the other
fields that you do have helpers for, but where it's not obvious what
the "unit" is. They might make sense with the subsurface extended
string interfaces, ie things like the ppN2 limits etc. I see that it's
a single unsigned char, which makes me _suspect_ that a value like
"140" might mean a ppN2 of 1.4, but that's the kind of thing that we
couldn't rely on without somebody actually testing and confirming it.

Similar to things like "tndl()". That sounds like an odd value for the
dive (not odd for a _sample_), but is it minutes/seconds/what? From
the sizes, I'm guessing seconds (NDL in 16 bits, desat in 32 bits).
Things like desat times reported by the dive computer after a dive are
interesting to export, and work well in the string interface thing,
but units matter..

Same goes for gradient factors. Units for the low/high, but also what
is "gfs_index"? Is it some kind of "deco algorithm index" to tell
whether it's Bühlmann or VPM-B or what?

So i think we could take a little bit more of the data for the
extended string formats, but we'd need more information.

But no hurry. We can wait for Jef.

Linus

David Carron

unread,
May 17, 2020, 5:28:24 PM5/17/20
to Subsurface Divelog
It turns out Jeff isn't too keen on those convenience functions so they'll probably all disappear before the parser makes it into libdivecomputer and just show up as a description at the start of the source. I attached the documentation for them (complete with units) in any case.

It would be nice if we had an early build of subsurface which would help with our beta testing program for the computer, but as you say, no rush, I'm working through it with Jeff.

Thanks a lot
David

On Sunday, May 17, 2020 at 10:09:35 PM UTC+2, Linus Torvalds wrote:
wire format.txt

Dirk Hohndel

unread,
May 17, 2020, 5:32:35 PM5/17/20
to subsurfac...@googlegroups.com
It's really easy for us to get you such a build / builds.
Which OS(s) are you thinking about?

/D

--
You received this message because you are subscribed to the Google Groups "Subsurface Divelog" group.
To unsubscribe from this group and stop receiving emails from it, send an email to subsurface-dive...@googlegroups.com.
wire format.txt

Linus Torvalds

unread,
May 17, 2020, 7:40:30 PM5/17/20
to Subsurface Divelog
On Sun, May 17, 2020 at 2:28 PM David Carron <david.d...@gmail.com> wrote:
>
> It would be nice if we had an early build of subsurface which would help with our beta testing program for the computer, but as you say, no rush, I'm working through it with Jeff.

Just to check, I integrated your backend into my branch, and fixed up
a few things so that it compiles for me (I think you use Windows and a
C++ compiler judging my some of the things I had to fix up).

I can make this into a temporary build, but in order for me to do so I
want to make sure that this is all good copyright-wise. Jef doesn't
seem to care, but with subsurface we've had the "sign-off"
requirements for the certificate of origin of the code, so that
there's no worry that we have any unknown code from people who aren't
aware of open source rules.

Taking the explanation from the Linux kernel process, I'm just
appending the rule about having a "Signed-off-by:" line so that people
know that you know about optn source and licensing and that the code
you submitted is all above-board and not encumbered by any issues.

If you're ok by this, and send me that sign-off as an email for the
code you sent me (and the "wire format.txt" file that I'll also add to
this thing), I can put that in our libdivecomputer branch, and then we
can get you a subsurface binary to test that it works..

Linus

---

Sign your work - the Developer's Certificate of Origin
----------------------------------------------------------

To improve tracking of who did what, especially with patches that can
percolate to their final resting place in the kernel through several
layers of maintainers, we've introduced a "sign-off" procedure on
patches that are being emailed around.

The sign-off is a simple line at the end of the explanation for the
patch, which certifies that you wrote it or otherwise have the right to
pass it on as an open-source patch. The rules are pretty simple: if you
can certify the below:

Developer's Certificate of Origin 1.1
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or

(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or

(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.

(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.

then you just add a line saying::

Signed-off-by: Random J Developer <ran...@developer.example.org>

using your real name (sorry, no pseudonyms or anonymous contributions.)

David Carron

unread,
May 18, 2020, 3:30:49 AM5/18/20
to Subsurface Divelog
Dirk,

I'm going to say Windows is the real "must have", with Android a close "nice to have".

This is great, you guys are really incredibly helpful!

On Sunday, May 17, 2020 at 11:32:35 PM UTC+2, Dirk wrote:
It's really easy for us to get you such a build / builds.
Which OS(s) are you thinking about?

/D

To unsubscribe from this group and stop receiving emails from it, send an email to subsurface-divelog+unsub...@googlegroups.com.

David Carron

unread,
May 18, 2020, 3:42:09 AM5/18/20
to Subsurface Divelog
Linus,

I don't think I have your e-mail address, so I attached the sign-off to this post. 

The code shares some a common packet format with the tekdiving libdivecomputer parser written by Jeff (we're in a partnership with tekdiving and share the same hardware) so some parts of the extreme parser code are based on that. The rest is entirely original work. I left the original copyright message, with just Jeff's name, in the sources but I suppose it would be a good idea to add mine. 

You're right that it was a C++ compiler, but I hadn't realised that there were any Windows specifics in there. Could you send me your mods so that I can roll them into the version I'm working on with Jeff?


On Monday, May 18, 2020 at 1:40:30 AM UTC+2, Linus Torvalds wrote:
signoff.txt

Jef Driesen

unread,
May 18, 2020, 5:30:16 AM5/18/20
to subsurfac...@googlegroups.com, David Carron
On 18/05/2020 09:42, David Carron wrote:
> The code shares some a common packet format with the tekdiving libdivecomputer
> parser written by Jeff (we're in a partnership with tekdiving and share the same
> hardware) so some parts of the extreme parser code are based on that. The rest
> is entirely original work. I left the original copyright message, with just
> Jeff's name, in the sources but I suppose it would be a good idea to add mine.

Yes, of course you should use your name! If the amount of copied code
(excluding all the boilerplate code) is significant, then add your name. If not,
just replace my name with yours.

> You're right that it was a C++ compiler, but I hadn't realised that there were
> any Windows specifics in there. Could you send me your mods so that I can roll
> them into the version I'm working on with Jeff?

No need for that. I already took care of that as well :-)

Jef

Linus Torvalds

unread,
May 18, 2020, 1:00:52 PM5/18/20
to Subsurface Divelog, Dirk Hohndel
On Mon, May 18, 2020 at 12:42 AM David Carron <david.d...@gmail.com> wrote:
>
> Could you send me your mods so that I can roll them into the version I'm working on with Jeff?

They were trivial. I put the end result in a branch so that if Dirk
wants to trigger a Windows build of subsurface for you to test, he
can.

They're in the "McLean-Extreme" branch at github:

https://github.com/subsurface/libdc/tree/McLean-Extreme

with that top commit being your files and diff, slightly extended and
with the wire-format docs added.

The Windows C++'isms were trivial, like having an unnecessary dll
declaration and some global namespace marker. I didn't make them
separate changes, they're all baked into that top commit.

Dirk - I wasn't planning on doing an actual pull request for this -
let's see what happens in upstream libdivecomputer - but if you want
to make test binaries that branch should do it.

I obviously didn't test anything. Not that I have access to the dive
computer, but I didn't even do a test-build other than locally.

Linus

David Carron

unread,
May 20, 2020, 5:18:49 PM5/20/20
to Subsurface Divelog
Dirk, 

Could you do a Windows and/or Android build for me? I'm still working through code updates with Jeff but nothing really fundamental and I'd be very keen to try out the integration.

Thanks
David

On Sunday, May 17, 2020 at 11:32:35 PM UTC+2, Dirk wrote:
It's really easy for us to get you such a build / builds.
Which OS(s) are you thinking about?

/D

To unsubscribe from this group and stop receiving emails from it, send an email to subsurface-divelog+unsub...@googlegroups.com.

Dirk Hohndel

unread,
May 20, 2020, 5:49:09 PM5/20/20
to Subsurface Divelog
You can find Windows binaries here: https://github.com/subsurface/subsurface/suites/693628011/artifacts/6578957
This is a bit weird as it comes from our CI, so it's a zip file that has several different artifacts inside, one of them is the Subsurface installer

That's unsigned with invalid build number, so if you have Subsurface-mobile installed already, you'll need to uninstall it manually before you can test this APK

/D

To unsubscribe from this group and stop receiving emails from it, send an email to subsurface-dive...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/subsurface-divelog/f63b5740-8831-4dd7-80b2-04d45ca60747%40googlegroups.com.

David Carron

unread,
May 21, 2020, 3:34:16 AM5/21/20
to Subsurface Divelog
Dirk,

Thanks for the effort, but unfortunately I'm getting a 404 error for both of those URLs. In fact, I get a 404 for anything after and including https://github.com/subsurface/subsurface/suites/

Am I doing something wrong?


On Wednesday, May 20, 2020 at 11:49:09 PM UTC+2, Dirk wrote:
You can find Windows binaries here: https://github.com/subsurface/subsurface/suites/693628011/artifacts/6578957
This is a bit weird as it comes from our CI, so it's a zip file that has several different artifacts inside, one of them is the Subsurface installer

That's unsigned with invalid build number, so if you have Subsurface-mobile installed already, you'll need to uninstall it manually before you can test this APK

/D

Dirk Hohndel

unread,
May 21, 2020, 12:10:20 PM5/21/20
to subsurfac...@googlegroups.com
Hmm, odd, works for me even if I'm not logged into GitHub.
Anyway, you can find the two files here:


/D

To unsubscribe from this group and stop receiving emails from it, send an email to subsurface-dive...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/subsurface-divelog/9780b09f-5a33-4852-8bde-7a5ab60e8350%40googlegroups.com.

Miika Turkia

unread,
May 21, 2020, 1:05:54 PM5/21/20
to Subsurface Divelog
I suppose it had something to do with github. I got the same error message this morning when reading these mails. And works now with same links.

/D

/D

To unsubscribe from this group and stop receiving emails from it, send an email to subsurface-dive...@googlegroups.com.

--
You received this message because you are subscribed to the Google Groups "Subsurface Divelog" group.
To unsubscribe from this group and stop receiving emails from it, send an email to subsurface-dive...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/subsurface-divelog/f63b5740-8831-4dd7-80b2-04d45ca60747%40googlegroups.com.

--
You received this message because you are subscribed to the Google Groups "Subsurface Divelog" group.
To unsubscribe from this group and stop receiving emails from it, send an email to subsurface-dive...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/subsurface-divelog/9780b09f-5a33-4852-8bde-7a5ab60e8350%40googlegroups.com.

--
You received this message because you are subscribed to the Google Groups "Subsurface Divelog" group.
To unsubscribe from this group and stop receiving emails from it, send an email to subsurface-dive...@googlegroups.com.

David Carron

unread,
Jul 16, 2020, 5:51:21 AM7/16/20
to Subsurface Divelog
Hello again all,

The Extrême parser got folded in to the official libdivecomputer sources a little while ago now. Do you guys have a merge from libdivecomputer planned for an upcoming release?

Thanks

David

Linus Torvalds

unread,
Jul 16, 2020, 2:02:58 PM7/16/20
to Subsurface Divelog
On Thu, Jul 16, 2020 at 2:51 AM David Carron <david.d...@gmail.com> wrote:
>
> The Extrême parser got folded in to the official libdivecomputer sources a little while ago now. Do you guys have a merge from libdivecomputer planned for an upcoming release?

It should all be there in the latest binaries by now. It got merged
June 25th, anything released after that should

I'm not sure when Dirk updated the desktop version last, but I know
the mobile ones did get updated.

Obviously, we've not been able to test, so verifying that it works
(and perhaps looking at why it doesn't if it doesn't) would be
appreciated.

Linus

David Carron

unread,
Jul 17, 2020, 12:13:19 PM7/17/20
to Subsurface Divelog
Ok,

I just downloaded and installed android Subsurface-mobile from the google play store which reports its version 3.0.9(4.9.5.8) and the windows version 4.9.6 (released on Jun 20) but neither seem to include McLean as a manufacturer.

Am I doing something wrong?


On Thursday, July 16, 2020 at 8:02:58 PM UTC+2, Linus Torvalds wrote:

Linus Torvalds

unread,
Jul 17, 2020, 12:51:11 PM7/17/20
to Subsurface Divelog
On Fri, Jul 17, 2020 at 9:13 AM David Carron <david.d...@gmail.com> wrote:
>
> I just downloaded and installed android Subsurface-mobile from the google play store which reports its version 3.0.9(4.9.5.8) and the windows version 4.9.6 (released on Jun 20) but neither seem to include McLean as a manufacturer.
>
> Am I doing something wrong?

Oh. You may need to be on the beta list to get the more recent updates.

https://play.google.com/apps/testing/org.subsurfacedivelog.mobile

should get you started (but it can take a while to then start percolating).

You can download the nightly (well..) APK's manually too, I guess, but
it's usually not a great idea to install APK's outside the google
store, so I don't know if I should encourage that. Plus they can be
even more rough than the beta version. See

https://subsurface-divelog.org/downloads/test/

if you want to go that way (ie likely that topmost arm64 apk from Tuesday).

Linus

David Carron

unread,
Jul 25, 2020, 2:16:14 AM7/25/20
to Subsurface Divelog
Hello again

I got tired waiting for notifications from Google store so I downloaded and installed the apk from https://subsurface-divelog.org/downloads/test/.

It looks like I'm still getting the same behaviour: McLean doesn't show up as a manufacturer in the the download page.

During installation I wasn't asked for any special permissions which seems unusual, so perhaps I'm doing something wrong?

David Carron

unread,
Jul 25, 2020, 2:30:34 AM7/25/20
to Subsurface Divelog
Extra info:

I took a look at the log (is there a way to upload it?) and I'm seeing this:

...
BTDiscoveryReDeisconver.localDevice Dave's Phone is powered on, starting discovery
...
Found new device: "McLean Extreme" "04:91:62:91:17:C3"
Not recognised as dive computer

I probably have about 10 McLean Extreme's already paired and there's one of these messages for each of them, but nothing special concerning the one which actually turned on and next to the phone.

Linus Torvalds

unread,
Jul 25, 2020, 3:06:39 AM7/25/20
to Subsurface Divelog
On Fri, Jul 24, 2020 at 11:30 PM David Carron <david.d...@gmail.com> wrote:
>
> Found new device: "McLean Extreme" "04:91:62:91:17:C3"
> Not recognised as dive computer

Ahh. We don't have the BLE name recognition for the McLean Extreme, so
we don't recognize it as a dive computer.

Is the BLE name always that? It's easy to add. We don't use the
libdivecomputer filtering code, it's just never been a high enough
priority and is slightly inconvenient (we go the other way: from
device name to vendor/device, while the libdivecomputer filtering is
"given this dc_descriptor_t, is this bluetooth name valid?").

But you should be able to go to the subsurface settings, and under
Bluetooth you should see something like "Temporarily show all
bluetooth devices even if not recognized as dive computers".

Turn that on, and the bluetooth drop-down should show everything, even
things we don't recognize.

That said, if you don't see the McLean even as an option in the dive
computer vendor list, something is wrong. I see it right between
"Mares" and "Oceanic".

Can you send all the logs? Go to the menu, then "Help" -> "About" and
you should see a "Copy logs to clipboard" and then you can just paste
it into an email client.

It sounds like you have an old version. The fact that your phone
didn't complain when you installed the raw APK is also a bit odd.
Normally you have to explicitly enable "install from external sources"
or whatever to be able to install random APK's.

Linus

David Carron

unread,
Jul 26, 2020, 4:16:42 AM7/26/20
to Subsurface Divelog
So.

"McLean Extreme" is indeed the definitive Bluetooth name for the computer.

I uninstalled subsurface-mobile from my phone and downloaded the version:

My phone doesn't complain about unknown sources since I regularly download the extreme's firmware manager from my own drop box account, but I notice that during installation it did briefly offer to check the downloaded version of subsurace before continuing the installation.

I didn't log in to any subsurface cloud account, turned on the developer options and went to the "download from computer" page: no sign of McLean in the manufacturers :(.  With the dive computer next to the phone, blue tooth enabled, I pressed the "rescan" button (nothing really happened though) and got the following log.

---------- subsurface.log ----------
"0.007: Failed to open logfile /storage/emulated/0/subsurface.log at dim. juil. 26 10:13:21 2020 error: Permission denied"
"0.007: Failed to open logfile /storage/emulated/0/Documents/subsurface.log at dim. juil. 26 10:13:21 2020 error: Permission denied"
"0.007: Successfully opened logfile /storage/emulated/0/Android/data/org.subsurfacedivelog.mobile/files/Documents/subsurface.log at dim. juil. 26 10:13:21 2020"
"0.008: Starting Subsurface-mobile:3.0.7(4.9.4.143):Android Oreo (8.0):arm64:fr-FR"
"0.008: built with libdivecomputer v0.7.0-devel-Subsurface-NG (48e46cf7775452740f67ba72d9c5a0960ebf3718)"
"0.008: built with Qt Version 5.13.2, runtime from Qt Version 5.13.2"
"0.008: built with libgit2 0.26.0"
"0.008: Running on Android Oreo (8.0)"
"0.008: SM-A520F/samsung/a5y17ltexx"
BTDiscoveryReDiscover: localBtDevice.isValid() true
"BTDiscoveryReDiscover: localDevice Dave's Phone is powered on, starting discovery"
paired BT classic device type 1 with address "08:DF:1F:1F:8B:24"
paired BT classic device type 3 with address "D8:80:39:FE:B4:E1"
paired BLE device type 3 with address "LE:D8:80:39:FE:B4:E1"
paired BT classic device type 1 with address "00:21:3E:14:B3:2C"
paired BT classic device type 3 with address "04:91:62:91:17:C3"
paired BLE device type 3 with address "LE:04:91:62:91:17:C3"
paired BT classic device type 3 with address "D8:80:39:FE:B4:EB"
paired BLE device type 3 with address "LE:D8:80:39:FE:B4:EB"
paired BT classic device type 3 with address "D8:80:39:FE:B4:4D"
paired BLE device type 3 with address "LE:D8:80:39:FE:B4:4D"
paired BT classic device type 3 with address "D8:80:39:FE:B4:54"
paired BLE device type 3 with address "LE:D8:80:39:FE:B4:54"
paired BT classic device type 3 with address "D8:80:39:FE:B4:D6"
paired BLE device type 3 with address "LE:D8:80:39:FE:B4:D6"
paired BT classic device type 3 with address "2C:41:A1:01:22:AD"
paired BLE device type 3 with address "LE:2C:41:A1:01:22:AD"
paired BT classic device type 1 with address "AC:E4:B5:CB:7C:87"
paired BT classic device type 1 with address "04:4E:AF:A9:D5:3D"
Found new device: "Bose Mini SoundLink" "08:DF:1F:1F:8B:24"
Not recognized as dive computer
Found new device: "RN4678-B4E1" "D8:80:39:FE:B4:E1"
Not recognized as dive computer
Found new device: "RN4678-B4E1" "LE:D8:80:39:FE:B4:E1"
Not recognized as dive computer
Found new device: "Renault R-Link" "00:21:3E:14:B3:2C"
Not recognized as dive computer

Found new device: "McLean Extreme" "04:91:62:91:17:C3"
Not recognized as dive computer
Found new device: "McLean Extreme" "LE:04:91:62:91:17:C3"
Not recognized as dive computer
Found new device: "McLean Extreme" "D8:80:39:FE:B4:EB"
Not recognized as dive computer
Found new device: "McLean Extreme" "LE:D8:80:39:FE:B4:EB"
Not recognized as dive computer
Found new device: "McLean Extreme" "D8:80:39:FE:B4:4D"
Not recognized as dive computer
Found new device: "McLean Extreme" "LE:D8:80:39:FE:B4:4D"
Not recognized as dive computer
Found new device: "McLean Extreme" "D8:80:39:FE:B4:54"
Not recognized as dive computer
Found new device: "McLean Extreme" "LE:D8:80:39:FE:B4:54"
Not recognized as dive computer
Found new device: "McLean Extreme" "D8:80:39:FE:B4:D6"
Not recognized as dive computer
Found new device: "McLean Extreme" "LE:D8:80:39:FE:B4:D6"
Not recognized as dive computer
Found new device: "LE-Cobalt" "2C:41:A1:01:22:AD"
Not recognized as dive computer
Found new device: "LE-Cobalt" "LE:2C:41:A1:01:22:AD"
Not recognized as dive computer
Found new device: "iPhone de Brigitte" "AC:E4:B5:CB:7C:87"
Not recognized as dive computer
Found new device: "Media Nav Evolution" "04:4E:AF:A9:D5:3D"
Not recognized as dive computer
Paired = "Bose Mini SoundLink" "08:DF:1F:1F:8B:24"
Paired = "RN4678-B4E1" "D8:80:39:FE:B4:E1"
Paired = "RN4678-B4E1" "LE:D8:80:39:FE:B4:E1"
Paired = "Renault R-Link" "00:21:3E:14:B3:2C"
Paired = "McLean Extreme" "04:91:62:91:17:C3"
Paired = "McLean Extreme" "LE:04:91:62:91:17:C3"
Paired = "McLean Extreme" "D8:80:39:FE:B4:EB"
Paired = "McLean Extreme" "LE:D8:80:39:FE:B4:EB"
Paired = "McLean Extreme" "D8:80:39:FE:B4:4D"
Paired = "McLean Extreme" "LE:D8:80:39:FE:B4:4D"
Paired = "McLean Extreme" "D8:80:39:FE:B4:54"
Paired = "McLean Extreme" "LE:D8:80:39:FE:B4:54"
Paired = "McLean Extreme" "D8:80:39:FE:B4:D6"
Paired = "McLean Extreme" "LE:D8:80:39:FE:B4:D6"
Paired = "LE-Cobalt" "2C:41:A1:01:22:AD"
Paired = "LE-Cobalt" "LE:2C:41:A1:01:22:AD"
Paired = "iPhone de Brigitte" "AC:E4:B5:CB:7C:87"
Paired = "Media Nav Evolution" "04:4E:AF:A9:D5:3D"
"0.054: Created position source android"
"0.054: Set GPS service update interval to 300 s"
"0.054: location service is not available"
qrc:/qml/TripDetails.qml:30: TypeError: Cannot read property 'width' of null
"0.157: download page -- looking for known BT/BLE device"
qrc:/org/kde/kirigami/ScrollablePage.qml:187: TypeError: Cannot assign to read-only property "parent"
"0.173: Window width changed to 570 orientation 1"
"0.173: Screen rotated, no action necessary"
"0.175: 1 columns with column width of 570"
"0.175: width in Grid Units 30 original gridUnit 19 now 19"
"0.175: Done setting up sizes"
"0.330: StartPage visibility changed to false"
"0.331: not yet initialized, show busy spinner"
"1.352: finished setting up the diveListView"
"1.353: StartPage completed -- initialized is false"
"1.353: screenSizeObject constructor completed, initial width 570"
"1.353: 1 columns with column width of 570"
"1.354: width in Grid Units 30 original gridUnit 19 now 19"
"1.354: Done setting up sizes"
qrc:/org/kde/kirigami/AbstractApplicationHeader.qml:57: TypeError: Cannot read property 'header' of null
qrc:/org/kde/kirigami/ContextDrawer.qml:92: TypeError: Cannot call method 'hasOwnProperty' of null
loaded main.qml
qqwindow devicePixelRatio 3 3
qml_window reports width as 570 associated screen width 360 Qt screen reports width as 360
QMLManager received screen changed notification (360,640)
qqwindow screen has ldpi/pdpi 72 141.017
"1.758: Window width changed to 360 orientation 1"
"1.758: first real change, so recalculating units and recording size as 360 x 616"
"1.765: 1 columns with column width of 360"
"1.765: width in Grid Units 21 original gridUnit 19 now 17"
"1.804: Done setting up sizes"
"2.069: Window width changed to 510 orientation 1"
"2.069: size change without rotation to 510 x 765"
"2.070: resetting to initial width 360 and height 616"
"2.166: Window width changed to 360 orientation 1"
"2.167: size change without rotation to 360 x 616"
"2.364: AppState changed to active with no unsaved changes"
"2.365: finishSetup called"
"2.367: Travail hors-ligne"
"2.371: showProgress: Chargement des plongées depuis le cache local"
"2.400: showProgress: Succès de l'ouverture des données de plongée"
"2.416: showProgress: Create full text index"
"2.431: showProgress: start processing"
"2.448: showProgress: 0 plongées traitées"
"2.465: showProgress: populate data model"
"2.482: showProgress: start processing"
"2.500: showProgress: 0 plongées traitées"
"2.517: showProgress: finish populating data store"
"2.535: showProgress: setting up internal data structures"
"2.561: showProgress: done setting up internal data structures"
"2.581: 0 dives loaded"
"2.583: working in no-cloud mode, finished loading 0 dives from /data/user/0/org.subsurfacedivelog.mobile/files/cloudstorage/localrepo[master]"
"2.584: initialization completed - showing the dive list"
"2.690: pageStack switched to DiveList"
"2.797: switched to page Liste de plongée"
"2.798: if we got started by a plugged in device, switch to download page -- pluggedInDeviceName = "
checkPendingIntents 
"4.823: show download page for undefined / undefined / undefined"
"4.826: download page -- looking for known BT/BLE device"
"4.829: rescanning USB: 0 devices reported"
"4.851: pageStack switched to "
"4.854: switched to page Ordinateur de plongée"
"7.964: rescanning USB: 0 devices reported"
BTDiscoveryReDiscover: localBtDevice.isValid() true
"BTDiscoveryReDiscover: localDevice Dave's Phone is powered on, starting discovery"
paired BT classic device type 1 with address "08:DF:1F:1F:8B:24"
paired BT classic device type 3 with address "D8:80:39:FE:B4:E1"
paired BLE device type 3 with address "LE:D8:80:39:FE:B4:E1"
paired BT classic device type 1 with address "00:21:3E:14:B3:2C"
paired BT classic device type 3 with address "04:91:62:91:17:C3"
paired BLE device type 3 with address "LE:04:91:62:91:17:C3"
paired BT classic device type 3 with address "D8:80:39:FE:B4:EB"
paired BLE device type 3 with address "LE:D8:80:39:FE:B4:EB"
paired BT classic device type 3 with address "D8:80:39:FE:B4:4D"
paired BLE device type 3 with address "LE:D8:80:39:FE:B4:4D"
paired BT classic device type 3 with address "D8:80:39:FE:B4:54"
paired BLE device type 3 with address "LE:D8:80:39:FE:B4:54"
paired BT classic device type 3 with address "D8:80:39:FE:B4:D6"
paired BLE device type 3 with address "LE:D8:80:39:FE:B4:D6"
paired BT classic device type 3 with address "2C:41:A1:01:22:AD"
paired BLE device type 3 with address "LE:2C:41:A1:01:22:AD"
paired BT classic device type 1 with address "AC:E4:B5:CB:7C:87"
paired BT classic device type 1 with address "04:4E:AF:A9:D5:3D"
Found new device: "Bose Mini SoundLink" "08:DF:1F:1F:8B:24"
Not recognized as dive computer
Found new device: "RN4678-B4E1" "D8:80:39:FE:B4:E1"
Not recognized as dive computer
Found new device: "RN4678-B4E1" "LE:D8:80:39:FE:B4:E1"
Not recognized as dive computer
Found new device: "Renault R-Link" "00:21:3E:14:B3:2C"
Not recognized as dive computer

Found new device: "McLean Extreme" "04:91:62:91:17:C3"
Not recognized as dive computer
Found new device: "McLean Extreme" "LE:04:91:62:91:17:C3"
Not recognized as dive computer
Found new device: "McLean Extreme" "D8:80:39:FE:B4:EB"
Not recognized as dive computer
Found new device: "McLean Extreme" "LE:D8:80:39:FE:B4:EB"
Not recognized as dive computer
Found new device: "McLean Extreme" "D8:80:39:FE:B4:4D"
Not recognized as dive computer
Found new device: "McLean Extreme" "LE:D8:80:39:FE:B4:4D"
Not recognized as dive computer
Found new device: "McLean Extreme" "D8:80:39:FE:B4:54"
Not recognized as dive computer
Found new device: "McLean Extreme" "LE:D8:80:39:FE:B4:54"
Not recognized as dive computer
Found new device: "McLean Extreme" "D8:80:39:FE:B4:D6"
Not recognized as dive computer
Found new device: "McLean Extreme" "LE:D8:80:39:FE:B4:D6"
Not recognized as dive computer
Found new device: "LE-Cobalt" "2C:41:A1:01:22:AD"
Not recognized as dive computer
Found new device: "LE-Cobalt" "LE:2C:41:A1:01:22:AD"
Not recognized as dive computer
Found new device: "iPhone de Brigitte" "AC:E4:B5:CB:7C:87"
Not recognized as dive computer
Found new device: "Media Nav Evolution" "04:4E:AF:A9:D5:3D"
Not recognized as dive computer
Paired = "Bose Mini SoundLink" "08:DF:1F:1F:8B:24"
Paired = "RN4678-B4E1" "D8:80:39:FE:B4:E1"
Paired = "RN4678-B4E1" "LE:D8:80:39:FE:B4:E1"
Paired = "Renault R-Link" "00:21:3E:14:B3:2C"
Paired = "McLean Extreme" "04:91:62:91:17:C3"
Paired = "McLean Extreme" "LE:04:91:62:91:17:C3"
Paired = "McLean Extreme" "D8:80:39:FE:B4:EB"
Paired = "McLean Extreme" "LE:D8:80:39:FE:B4:EB"
Paired = "McLean Extreme" "D8:80:39:FE:B4:4D"
Paired = "McLean Extreme" "LE:D8:80:39:FE:B4:4D"
Paired = "McLean Extreme" "D8:80:39:FE:B4:54"
Paired = "McLean Extreme" "LE:D8:80:39:FE:B4:54"
Paired = "McLean Extreme" "D8:80:39:FE:B4:D6"
Paired = "McLean Extreme" "LE:D8:80:39:FE:B4:D6"
Paired = "LE-Cobalt" "2C:41:A1:01:22:AD"
Paired = "LE-Cobalt" "LE:2C:41:A1:01:22:AD"
Paired = "iPhone de Brigitte" "AC:E4:B5:CB:7C:87"
Paired = "Media Nav Evolution" "04:4E:AF:A9:D5:3D"
"13.006: pageStack switched to Log"
"13.008: switched to page Log du programme"
"15.630: pageStack switched to "
<Unknown File>:7: TypeError: Cannot read property 'contentX' of null
qrc:/org/kde/kirigami/templates/private/ScrollView.qml:113:9: QML ScrollBar: Binding loop detected for property "visible"
"23.038: pageStack switched to "
"23.038: switched to page À propos de Subsurface-mobile"
"23.039: endEditMode called with state view"
---------- finish ----------





On Saturday, July 25, 2020 at 9:06:39 AM UTC+2, Linus Torvalds wrote:

On Saturday, July 25, 2020 at 9:06:39 AM UTC+2, Linus Torvalds wrote:

Jef Driesen

unread,
Jul 26, 2020, 11:28:37 AM7/26/20
to subsurfac...@googlegroups.com, David Carron
On 26/07/2020 10:16, David Carron wrote:
> "McLean Extreme" is indeed the definitive Bluetooth name for the computer.

In that case I should update libdivecomputer too, because I have "Extreme" for
the bluetooth name.

> ---------- subsurface.log ----------
> "0.008: built with libdivecomputer v0.7.0-devel-Subsurface-NG
> (48e46cf7775452740f67ba72d9c5a0960ebf3718)"

This is a version without the McLean Extreme support.

Jef

Linus Torvalds

unread,
Jul 26, 2020, 11:56:52 AM7/26/20
to Subsurface Divelog
On Sun, Jul 26, 2020 at 1:16 AM David Carron <david.d...@gmail.com> wrote:
>
> "0.008: Starting Subsurface-mobile:3.0.7(4.9.4.143):Android Oreo (8.0):arm64:fr-FR"
> "0.008: built with libdivecomputer v0.7.0-devel-Subsurface-NG (48e46cf7775452740f67ba72d9c5a0960ebf3718)"

Ugh. As Jef mentioned, this is the libdivecomputer version that
predates the one that had the McLean Extreme integration.

It seems there are no builds with recent master. Or they are hiding
somewhere. Dirk?

Linus

David Carron

unread,
Jul 27, 2020, 5:35:06 AM7/27/20
to Subsurface Divelog

Jeff,

That may be my fault; the manufacturer is "McLean", the computer is "Extreme" but the Bluetooth name is "McLean Extreme". Sorry about any confusion I may have caused.

Dirk Hohndel

unread,
Jul 27, 2020, 10:49:03 AM7/27/20
to subsurfac...@googlegroups.com
Thats an ancient version. Why would someone assume that that magically includes newer
bits? I'm confused. Don't side-load older APKs.

/D

> On Jul 26, 2020, at 8:56 AM, Linus Torvalds wrote:

Linus Torvalds

unread,
Jul 27, 2020, 12:31:10 PM7/27/20
to Subsurface Divelog


On Mon, Jul 27, 2020, 07:49 Dirk Hohndel <di...@hohndel.org> wrote:
Thats an ancient version. Why would someone assume that that magically includes newer
bits? I'm confused. Don't side-load older APKs.

That's me pointing him at the testing directory. It looked like there were new enough APK's there.

David tried to get on the beta channel too, but apparently that took a long time or failed for some reason.

The beta channel binary is what I have, and it definitely has the Extreme support in it, but I obviously can't test...

      Linus'

Dirk Hohndel

unread,
Jul 27, 2020, 3:46:11 PM7/27/20
to Subsurface Divelog
Try this one https://subsurface-divelog.org/downloads/test/Subsurface-mobile-4.9.6.14-arm64.apk

It should detect the Extreme and contains the correct libdc version

/D

David Carron

unread,
Jul 28, 2020, 4:38:55 AM7/28/20
to Subsurface Divelog
Dirk,

I just download and installed and.. tada! it worked perfectly!

I'm going to run some more complicated test dives with gas switching and bailout, but it's looking good.

Thanks

David.

David Carron

unread,
Jul 30, 2020, 4:29:07 AM7/30/20
to Subsurface Divelog
Dirk, Linus, Jeff,

I ran some more complicated test dives and everything works beautifully!

Do you guys have any idea when this version will become the public release?

Thankyou all very much.

David.

Dirk Hohndel

unread,
Jul 30, 2020, 10:09:00 AM7/30/20
to David Carron, Subsurface Divelog
Subsurface-mobile 3.0.11 is in beta test for iOS and Android, but given the extremely small change compared to 3.0.10 I'll release them today into production. After that it's up to Apple and Google, which in my experience means "anywhere from a few minutes to several days" after I trigger the update.

I currently have no plans for a new Subsurface release, so I don't know when this support will be available in the desktop version

/D
--
From my phone

David Carron

unread,
Sep 14, 2020, 1:28:08 PM9/14/20
to Subsurface Divelog
Hello again

I have a customer complaining that the Extrême isn't supported in the Subsurface 4.9.6 for Windows.

I just checked my version (4.9.6, reporting no upgrades available) and sure enough, no sign of the Extrême in the vendor menu of the "import from divecomputer" window. 

I toggled "BT download mode", set "show all BT devices" and started a scan. Subsurface detected the Extrême with the message "the device .. can be used for connection. You can press the save button". Pressing the "download" button just results in an error since subsurface is looking for an Aeris.

Is this my fault in some way?

Dirk Hohndel

unread,
Sep 14, 2020, 2:03:26 PM9/14/20
to subsurfac...@googlegroups.com
4.9.7 will include the McLean Extreme - I expect to release that within about a week to ten days.
Subsurface-mobile on both iOS and Android already supports the McLean Extreme, so your customer should be able to download on their smart phone and simply sync with the desktop version using the Subsurface Cloud in the meantime.

/D

--
You received this message because you are subscribed to the Google Groups "Subsurface Divelog" group.
To unsubscribe from this group and stop receiving emails from it, send an email to subsurface-dive...@googlegroups.com.

Jason Bramwell

unread,
Sep 14, 2020, 4:51:37 PM9/14/20
to subsurfac...@googlegroups.com
Dirk,
I’m not seeing McClean as a vendor on my iOS version of the app, is that in the live version of the app or only in the beta version currently?

Jb



Sent from my iPhone

On 14 Sep 2020, at 19:03, Dirk Hohndel <di...@hohndel.org> wrote:

4.9.7 will include the McLean Extreme - I expect to release that within about a week to ten days.

Dirk Hohndel

unread,
Sep 14, 2020, 4:57:01 PM9/14/20
to Subsurface Divelog
OMG, that's entirely my mistake.
All the dive computer we had recently added were BLE - I had completely forgotten that the McLean Extreme is BT classic.
So no, that cannot be supported on iOS. Only Android supports it right now, the desktop OSs should support it in the soon to be released 4.9.7

Test binaries for all the OSs can be found here https://subsurface-divelog.org/downloads/test/
E.g.

/D

David Carron

unread,
Sep 14, 2020, 5:31:19 PM9/14/20
to Subsurface Divelog
Dirk

Thé Extrême Will suite happily use LE or classic.

I started a thread on the subject of iOS (so LE-only) support where Linus explained that subsurface should - in principle at least - work without any extra work


On Monday, September 14, 2020 at 10:57:01 PM UTC+2, Dirk wrote:
> OMG, that's entirely my mistake.
> All the dive computer we had recently added were BLE - I had completely forgotten that the McLean Extreme is BT classic.
> So no, that cannot be supported on iOS. Only Android supports it right now, the desktop OSs should support it in the soon to be released 4.9.7
>
>
> Test binaries for all the OSs can be found here https://subsurface-divelog.org/downloads/test/
> E.g.
> Windows: https://subsurface-divelog.org/downloads/test/subsurface-4.9.6-96-g601f49ab8440.exe
> macOS (10.15 and 11.0-beta): https://subsurface-divelog.org/downloads/test/Subsurface-4.9.6-96-g601f49ab8440.10.15+11.0.dmg
> macOS (10.13 and 10.14): https://subsurface-divelog.org/downloads/test/Subsurface-4.9.6-96-g601f49ab8440.10.13+14.dmg
>
>
> /D
>
>
> On Sep 14, 2020, at 1:51 PM, Jason Bramwell <jb2...@gmail.com> wrote:
>
>
> Dirk,
> I’m not seeing McClean as a vendor on my iOS version of the app, is that in the live version of the app or only in the beta version currently?
>
>
> Jb
>
>
>
>
>

Dirk Hohndel

unread,
Sep 14, 2020, 5:35:19 PM9/14/20
to Subsurface Divelog
The implementation in libdivecomputer is BT classic only.

/D

Linus Torvalds

unread,
Sep 14, 2020, 5:46:40 PM9/14/20
to Subsurface Divelog
On Mon, Sep 14, 2020 at 2:35 PM Dirk Hohndel <di...@hohndel.org> wrote:
>
> The implementation in libdivecomputer is BT classic only.

Well, that *may* be as simple as just doing this..

No way to test, of course.

Linus
patch

David Carron

unread,
Sep 15, 2020, 8:48:12 AM9/15/20
to Subsurface Divelog
Hello,

I've looked into the RN4678's Bluetooth LE implementation a little bit and it seems that whilst its possible to connect to the serial service at 49535343-FE7D-4AE5-8FA9-9FAFD205E455 the RN4678 isn't actually advertising this service.

I have a feeling that this is going to cause the automatic detection and connexion to fail.

David Carron

unread,
Sep 15, 2020, 8:53:14 AM9/15/20
to Subsurface Divelog
Hello

On a slightly separate issue, it appears that there is a bug in my implementation in the libdivecomputer parser. The declaration in mclean_extreme_parser.c:252 which defines the sample interval 

const unsigned int interval = 20;

 

should actually be


const unsigned int interval = 10;


which causes imported dives to appear twice as long as long as they should.

I've contacted Jef about this, but since I understand that you don't necessarily roll libdivecomputer updates into subsurface very frequently, would it be possible to make this change directly in the subsurface version?

Dirk Hohndel

unread,
Sep 15, 2020, 10:54:32 AM9/15/20
to subsurfac...@googlegroups.com

That's strange - I thought we had a few people test downloads with the McLean Extreme - and that should be difference people would notice.
Is this user configurable? Or has this changed between firmware versions?

/D

Dirk Hohndel

unread,
Sep 15, 2020, 10:55:30 AM9/15/20
to subsurfac...@googlegroups.com
I'm fairly certain that not advertising a service isn't standards compliant, and I'm equally fairly certain that Qt's BLE implementation won't even try to connect to a service that it wasn't able to detect in the first place.

/D

David Carron

unread,
Sep 15, 2020, 12:05:06 PM9/15/20
to Subsurface Divelog
There's no change, this is just a bug which has been in libdivecomputer right since the start.

It's just come to light now because somebody other than me is actually looking in detail at the dive logs and I'd looked at so many trying to find subtle errors that I just wasn't seeing the glaring error that was starting me in the face :(

Dirk Hohndel

unread,
Sep 15, 2020, 12:08:51 PM9/15/20
to Subsurface Divelog, Linus Torvalds
Ha. OK. This is of course easy to fix and I see that Jef has already pushed a commit to do so.


Linus, do you have a moment to merge this?

/D

Linus Torvalds

unread,
Sep 15, 2020, 1:41:51 PM9/15/20
to Dirk Hohndel, Subsurface Divelog
On Tue, Sep 15, 2020 at 9:08 AM Dirk Hohndel <di...@hohndel.org> wrote:
>
> Linus, do you have a moment to merge this?

Merged and pushed out into our Subsurface-DS9 branch.

Linus

Dirk Hohndel

unread,
Sep 15, 2020, 3:01:40 PM9/15/20
to Subsurface Divelog
And merged into Subsurface - so this will be picked up in Subsurface 4.9.7 and Subsurface-mobile 3.0.15 on Android.

I'm still trying to understand if the simple BLE hack that Linus proposed has any chance of working at all.

Who here has access to an actual McLean Extreme dive computer and can help us with testing for that.
I assume that's you, David Carron?

Do you happen to have an Android device to help us test this? It's much easier to get you an Android test binary than an iOS test binary...

/D

David Carron

unread,
Sep 15, 2020, 4:08:51 PM9/15/20
to subsurfac...@googlegroups.com
Dirk,

Yes, that would be me.

I can easily test on android or windows and realistically not at all on iOS.

I'm assuming that my Bluetooth chip isn't advertising the service because it doesn't show up when I do a scan, but that might just be a problem with the scanner software.

My firmware updater uses classic on Windows and android because it's faster and LE on iOS because I don't have any other choice, but subsurface could quite reasonably use LE on all platforms.

As soon as you have an APK just point me to it and I'll try it out.

--
You received this message because you are subscribed to a topic in the Google Groups "Subsurface Divelog" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/subsurface-divelog/WmfbBjWVZ78/unsubscribe.
To unsubscribe from this group and all its topics, send an email to subsurface-dive...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/subsurface-divelog/E1283D5F-526C-40DB-BFB6-4933E058D34B%40hohndel.org.

Linus Torvalds

unread,
Sep 15, 2020, 4:18:21 PM9/15/20
to Subsurface Divelog


On Tue, Sep 15, 2020, 13:08 David Carron <david.d...@gmail.com> wrote:
Dirk,

Yes, that would be me.

I can easily test on android or windows and realistically not at all on iOS.

I'm assuming that my Bluetooth chip isn't advertising the service because it doesn't show up when I do a scan, but that might just be a problem with the scanner software.

On android (or iOS, but it sounds like Android is what you have), get the Nordic nRF Connect app, and scan using that.

If your dive computer doesn't show up there, then there is no chance that it will work in subsurface as a BLE device.

If it does show up, please connect to it and send us the screenshots of the services listed in the client tab of the device connect screen.

You can expand the services to see the details, and should do that with the vendor-specific ones.

If the device doesn't show up as a BLE device at all, then I suspect the chip in that thing may not have been programmed to enable the BLE functionality. Which obviously means it won't work with subsurface using BLE..


        Linus

David Carron

unread,
Sep 15, 2020, 4:27:13 PM9/15/20
to subsurfac...@googlegroups.com
That all went surprisingly easily

--
You received this message because you are subscribed to the Google Groups "Subsurface Divelog" group.
To unsubscribe from this group and stop receiving emails from it, send an email to subsurface-dive...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/subsurface-divelog/CAHk-%3Dwh%3D52hh0FDdKNvXTUyCqeFTjb-KRjxTc5YVVYX610FUPw%40mail.gmail.com.
Screenshot_20200915-222507_nRF Connect.jpg
Screenshot_20200915-222507_nRF Connect.jpg
Screenshot_20200915-222500_nRF Connect.jpg

Dirk Hohndel

unread,
Sep 15, 2020, 4:32:51 PM9/15/20
to Subsurface Divelog
In that last screen, when you tap on the unknown service (that's the UUID you mentioned before), does it expand and show the characteristics?

In the meantime I'll get you an APK in the next hour or so which you could use to test...

/D

David Carron

unread,
Sep 15, 2020, 4:43:33 PM9/15/20
to subsurfac...@googlegroups.com
It expands and shows a whole slew of charcacteristics

Screenshot_20200915-222507_nRF Connect.jpeg
Screenshot_20200915-222500_nRF Connect.jpeg
Screenshot_20200915-222507_nRF Connect.jpeg

Linus Torvalds

unread,
Sep 15, 2020, 4:53:29 PM9/15/20
to Subsurface Divelog


On Tue, Sep 15, 2020, 13:43 David Carron <david.d...@gmail.com> wrote:
It expands and shows a whole slew of charcacteristics

Please send screenshot of the expanded vendor-specific client service.

It might need two (or even more) screenshots to show it all but that's the one that does the serial thing, do that's the one that matters.

    Linus

David Carron

unread,
Sep 15, 2020, 4:54:11 PM9/15/20
to subsurfac...@googlegroups.com
Screenshot_20200915-224132_nRF Connect.jpg
Screenshot_20200915-224123_nRF Connect.jpg

Dirk Hohndel

unread,
Sep 15, 2020, 5:02:57 PM9/15/20
to subsurfac...@googlegroups.com
So this is a HACKED binary that will refuse to talk BT to your dive computer.
Which means that if this works, we know it works with BLE.


Download this using the link above on your phone - you will likely have to temporarily enabled "install from other sources" or something like that on your Android device.
The binary is signed with the Subsurface production key, so it should cleanly install on top of your existing binary.

Please try to download dive data from your McLean Extreme, and once that completes (successful or not), go to help->About and tap the button to copy the logs and paste them into a response here.

Thanks

/D

David Carron

unread,
Sep 15, 2020, 5:05:44 PM9/15/20
to subsurfac...@googlegroups.com
I think these are the ones you're looking for. Two screenshots attached 

--
You received this message because you are subscribed to the Google Groups "Subsurface Divelog" group.
To unsubscribe from this group and stop receiving emails from it, send an email to subsurface-dive...@googlegroups.com.
Screenshot_20200915-224123_nRF Connect.jpg
Screenshot_20200915-224132_nRF Connect.jpg

Linus Torvalds

unread,
Sep 15, 2020, 5:18:33 PM9/15/20
to Subsurface Divelog
Ok, so that Microchip "transparent UART" is slightly odd, and instead
of just having the expected read- and write characteristics it has a
few other ones too.

That may confuse our auto-detection - we'll pick the right *service*,
but then within the service I think we might pick the wrong
characteristics to read or write to.

Usually it's the service choice that is the problem, where some dive
computers have separate services for the UART side and for things like
firmware upgrades etc. But yours has only one vendor-specific service,
but then within that it has lots of odd details.

Looking online, it seems we should be using the characteristics

TX: 49535343-1E4D-4BD9-BA61-23C647249616

and

RX: 49535343-8841-43F4-A8D4-ECBE34729BB3

but looking at your screenshot I see those two, but also then

??RW: 49535343-6daa-4d02-ab6f-19569aca59fe
??W: 49535343-aca3-481c-91ec-d85e28a60318
??W: 49535343-026e-3a9b-954c-97daef17e26e
??W: 49535343-4c8a-39b3-2f49-511cff073b7e

too.

So my suspicion is that we'll pick the wrong characteristics, and it
won't work. But getting a subsurface log from failure using the
hacked-up binary from Dirk will tell me more.

And because it's not the *service* that is ambiguous, but the
characteristics, I'll have to write another BLE UUID filter thing.

Oh, how I hate the bluetooth SIG and their incompetence.

Linus

Dirk Hohndel

unread,
Sep 15, 2020, 5:40:31 PM9/15/20
to Subsurface Divelog

> On Sep 15, 2020, at 2:18 PM, Linus wrote:
>
> Ok, so that Microchip "transparent UART" is slightly odd, and instead
> of just having the expected read- and write characteristics it has a
> few other ones too.
>
> That may confuse our auto-detection - we'll pick the right *service*,
> but then within the service I think we might pick the wrong
> characteristics to read or write to.
>
> Usually it's the service choice that is the problem, where some dive
> computers have separate services for the UART side and for things like
> firmware upgrades etc. But yours has only one vendor-specific service,
> but then within that it has lots of odd details.
>
> Looking online, it seems we should be using the characteristics
>
> TX: 49535343-1E4D-4BD9-BA61-23C647249616
>
> and
>
> RX: 49535343-8841-43F4-A8D4-ECBE34729BB3
>
> but looking at your screenshot I see those two, but also then
>
> ??RW: 49535343-6daa-4d02-ab6f-19569aca59fe
> ??W: 49535343-aca3-481c-91ec-d85e28a60318
> ??W: 49535343-026e-3a9b-954c-97daef17e26e
> ??W: 49535343-4c8a-39b3-2f49-511cff073b7e
>
> too.

Ugh.
So we already have a list of known good services.
Now we also need a list of known good characteristics to use with those
services...

Or am I misunderstanding your post?

> So my suspicion is that we'll pick the wrong characteristics, and it
> won't work. But getting a subsurface log from failure using the
> hacked-up binary from Dirk will tell me more.

That's why I did that 'force BLE' APK - that way we get actual data from
David (but I think he's in Europe, so we likely won't get a response until
tomorrow)

/D

Linus Torvalds

unread,
Sep 15, 2020, 5:48:38 PM9/15/20
to Subsurface Divelog
On Tue, Sep 15, 2020 at 2:40 PM Dirk Hohndel <di...@hohndel.org> wrote:
>
>
> Ugh.
> So we already have a list of known good services.
> Now we also need a list of known good characteristics to use with those
> services...

Yup.

But it's going to be fairly simple - just a couple of lines. No
worries, I just want to see the logs from David first.

> That's why I did that 'force BLE' APK - that way we get actual data from
> David (but I think he's in Europe, so we likely won't get a response until
> tomorrow)

Yup, the "force BLE" thing was a good idea so that we don't get any
confusion about the rfcomm side.

Linus

David Carron

unread,
Sep 16, 2020, 2:20:32 AM9/16/20
to subsurfac...@googlegroups.com
I uninstalled my previous version of subsurface and after the usual "untrusted  source" effing around installed your version.

I selected the McLean and Extrême then scanned but nothing showed up in the list.

Just to be sure, I ran nRF Connecct which detected the computer (not paired) without difficulty.

Here's the log:


---------- subsurface.log ----------
"0.006: Failed to open logfile /storage/emulated/0/subsurface.log at mer. sept. 16 08:13:06 2020 error: Permission denied"
"0.007: Failed to open logfile /storage/emulated/0/Documents/subsurface.log at mer. sept. 16 08:13:06 2020 error: Permission denied"
"0.008: Successfully opened logfile /storage/emulated/0/Android/data/org.subsurfacedivelog.mobile/files/Documents/subsurface.log at mer. sept. 16 08:13:06 2020"
"0.009: Starting Subsurface-mobile:3.0.15(4.9.6.110):Android Oreo (8.0):arm64:fr-FR"
"0.009: built with libdivecomputer v0.7.0-devel-Subsurface-NG (090c26975bac0c36c8caef3995db506e8dafeb5c)"
"0.009: built with Qt Version 5.13.2, runtime from Qt Version 5.13.2"
"0.009: built with libgit2 0.26.0"
"0.009: Running on Android Oreo (8.0)"
"0.009: SM-A520F/samsung/a5y17ltexx"
BTDiscoveryReDiscover: localBtDevice.isValid() true
"BTDiscoveryReDiscover: localDevice Dave's Phone is powered on, starting discovery"
paired BT classic device type 1 with address "08:DF:1F:1F:8B:24"
paired BT classic device type 1 with address "00:21:3E:14:B3:2C"
paired BT classic device type 1 with address "AC:E4:B5:CB:7C:87"
paired BT classic device type 1 with address "04:4E:AF:A9:D5:3D"
Found new device: "Bose Mini SoundLink" "08:DF:1F:1F:8B:24"
Not recognized as dive computer
Found new device: "Renault R-Link" "00:21:3E:14:B3:2C"
Not recognized as dive computer
Found new device: "iPhone de Brigitte" "AC:E4:B5:CB:7C:87"
Not recognized as dive computer
Found new device: "Media Nav Evolution" "04:4E:AF:A9:D5:3D"
Not recognized as dive computer
Paired = "Bose Mini SoundLink" "08:DF:1F:1F:8B:24"
Paired = "Renault R-Link" "00:21:3E:14:B3:2C"
Paired = "iPhone de Brigitte" "AC:E4:B5:CB:7C:87"
Paired = "Media Nav Evolution" "04:4E:AF:A9:D5:3D"
"0.036: Created position source android"
"0.037: Set GPS service update interval to 300 s"
"0.037: location service is not available"
qrc:/qml/TripDetails.qml:30: TypeError: Cannot read property 'width' of null
"0.137: download page -- looking for known BT/BLE device"
qrc:/org/kde/kirigami/ScrollablePage.qml:187: TypeError: Cannot assign to read-only property "parent"
"0.155: Window width changed to 570 orientation 1"
"0.156: Screen rotated, no action necessary"
"0.157: 1 columns with column width of 570"
"0.157: width in Grid Units 30 original gridUnit 19 now 19"
"0.157: Done setting up sizes"
"0.317: StartPage visibility changed to false"
"0.317: not yet initialized, show busy spinner"
"1.347: finished setting up the diveListView"
"1.348: StartPage completed -- initialized is false"
"1.348: screenSizeObject constructor completed, initial width 570"
"1.349: 1 columns with column width of 570"
"1.349: width in Grid Units 30 original gridUnit 19 now 19"
"1.349: Done setting up sizes"
qrc:/org/kde/kirigami/AbstractApplicationHeader.qml:57: TypeError: Cannot read property 'header' of null
qrc:/org/kde/kirigami/ContextDrawer.qml:92: TypeError: Cannot call method 'hasOwnProperty' of null
loaded main.qml
qqwindow devicePixelRatio 3 3
qml_window reports width as 570 associated screen width 360 Qt screen reports width as 360
QMLManager received screen changed notification (360,640)
qqwindow screen has ldpi/pdpi 72 141.017
"1.756: Window width changed to 360 orientation 1"
"1.757: first real change, so recalculating units and recording size as 360 x 616"
"1.763: 1 columns with column width of 360"
"1.764: width in Grid Units 21 original gridUnit 19 now 17"
"1.803: Done setting up sizes"
"2.017: Window width changed to 510 orientation 1"
"2.017: size change without rotation to 510 x 765"
"2.018: resetting to initial width 360 and height 616"
"2.095: Window width changed to 360 orientation 1"
"2.096: size change without rotation to 360 x 616"
"2.254: AppState changed to active with no unsaved changes"
"2.254: finishSetup called"
"2.256: Travail hors-ligne"
"2.259: showProgress: Chargement des plongées depuis le cache local"
"2.273: showProgress: Succès de l'ouverture des données de plongée"
"2.290: showProgress: Create full text index"
"2.309: showProgress: start processing"
"2.328: showProgress: 0 plongées traitées"
"2.343: showProgress: populate data model"
"2.358: showProgress: start processing"
"2.374: showProgress: 0 plongées traitées"
"2.391: showProgress: Termine de populer le stockage des données"
"2.411: showProgress: Mets en place les structures de données internes"
"2.428: showProgress: done setting up internal data structures"
"2.445: 0 dives loaded"
"2.447: working in no-cloud mode, finished loading 0 dives from /data/user/0/org.subsurfacedivelog.mobile/files/cloudstorage/localrepo[master]"
"2.449: initialization completed - showing the dive list"
"2.565: pageStack switched to DiveList"
"2.681: switched to page Liste de plongée"
"2.683: if we got started by a plugged in device, switch to download page -- pluggedInDeviceName = "
checkPendingIntents 
"15.834: pageStack switched to Settings"
"15.839: switched to page Paramètres"
"15.840: endEditMode called with state view"
"44.488: download page -- looking for known BT/BLE device"
"44.495: rescanning USB: 0 devices reported"
"44.522: pageStack switched to "
"44.525: switched to page Ordinateur de plongée"
"48.754: rescanning USB: 0 devices reported"
BTDiscoveryReDiscover: localBtDevice.isValid() true
"BTDiscoveryReDiscover: localDevice Dave's Phone is powered on, starting discovery"
paired BT classic device type 1 with address "08:DF:1F:1F:8B:24"
paired BT classic device type 1 with address "00:21:3E:14:B3:2C"
paired BT classic device type 1 with address "AC:E4:B5:CB:7C:87"
paired BT classic device type 1 with address "04:4E:AF:A9:D5:3D"
Found new device: "Bose Mini SoundLink" "08:DF:1F:1F:8B:24"
Not recognized as dive computer
Found new device: "Renault R-Link" "00:21:3E:14:B3:2C"
Not recognized as dive computer
Found new device: "iPhone de Brigitte" "AC:E4:B5:CB:7C:87"
Not recognized as dive computer
Found new device: "Media Nav Evolution" "04:4E:AF:A9:D5:3D"
Not recognized as dive computer
Paired = "Bose Mini SoundLink" "08:DF:1F:1F:8B:24"
Paired = "Renault R-Link" "00:21:3E:14:B3:2C"
Paired = "iPhone de Brigitte" "AC:E4:B5:CB:7C:87"
Paired = "Media Nav Evolution" "04:4E:AF:A9:D5:3D"
"59.973: rescanning USB: 0 devices reported"
BTDiscoveryReDiscover: localBtDevice.isValid() true
"BTDiscoveryReDiscover: localDevice Dave's Phone is powered on, starting discovery"
paired BT classic device type 1 with address "08:DF:1F:1F:8B:24"
paired BT classic device type 1 with address "00:21:3E:14:B3:2C"
paired BT classic device type 1 with address "AC:E4:B5:CB:7C:87"
paired BT classic device type 1 with address "04:4E:AF:A9:D5:3D"
Found new device: "Bose Mini SoundLink" "08:DF:1F:1F:8B:24"
Not recognized as dive computer
Found new device: "Renault R-Link" "00:21:3E:14:B3:2C"
Not recognized as dive computer
Found new device: "iPhone de Brigitte" "AC:E4:B5:CB:7C:87"
Not recognized as dive computer
Found new device: "Media Nav Evolution" "04:4E:AF:A9:D5:3D"
Not recognized as dive computer
Paired = "Bose Mini SoundLink" "08:DF:1F:1F:8B:24"
Paired = "Renault R-Link" "00:21:3E:14:B3:2C"
Paired = "iPhone de Brigitte" "AC:E4:B5:CB:7C:87"
Paired = "Media Nav Evolution" "04:4E:AF:A9:D5:3D"
qrc:/org/kde/kirigami/templates/private/ScrollView.qml:113:9: QML ScrollBar: Binding loop detected for property "visible"
"83.177: pageStack switched to "
"83.179: switched to page À propos de Subsurface-mobile"
"83.179: endEditMode called with state view"
---------- finish ----------


--
You received this message because you are subscribed to the Google Groups "Subsurface Divelog" group.
To unsubscribe from this group and stop receiving emails from it, send an email to subsurface-dive...@googlegroups.com.

Dirk Hohndel

unread,
Sep 16, 2020, 10:27:46 AM9/16/20
to subsurfac...@googlegroups.com, David Carron
Can you try to pair the dive computer?
Otherwise Subsurface-mobile won't find it (that's an issue I need to fix as well)
--
From my phone

David Carron

unread,
Sep 16, 2020, 10:48:51 AM9/16/20
to Dirk Hohndel, subsurfac...@googlegroups.com
Very different behaviour this time. The Extrême showed up on the download dives page with two connexion options. I selected LE and started the transfer which completed without any error messages (although there are no dives on this computer).

I'm going to go put a quick dive on it to see what happens and in the mean-time here's the log


---------- subsurface.log ----------
"0.006: Failed to open logfile /storage/emulated/0/subsurface.log at mer. sept. 16 16:42:23 2020 error: Permission denied"
"0.006: Failed to open logfile /storage/emulated/0/Documents/subsurface.log at mer. sept. 16 16:42:23 2020 error: Permission denied"
"0.007: Successfully opened logfile /storage/emulated/0/Android/data/org.subsurfacedivelog.mobile/files/Documents/subsurface.log at mer. sept. 16 16:42:23 2020"
"0.007: Starting Subsurface-mobile:3.0.15(4.9.6.110):Android Oreo (8.0):arm64:fr-FR"
"0.008: built with libdivecomputer v0.7.0-devel-Subsurface-NG (090c26975bac0c36c8caef3995db506e8dafeb5c)"
"0.008: built with Qt Version 5.13.2, runtime from Qt Version 5.13.2"
"0.008: built with libgit2 0.26.0"
"0.008: Running on Android Oreo (8.0)"
"0.008: SM-A520F/samsung/a5y17ltexx"
BTDiscoveryReDiscover: localBtDevice.isValid() true
"BTDiscoveryReDiscover: localDevice Dave's Phone is powered on, starting discovery"
paired BT classic device type 1 with address "08:DF:1F:1F:8B:24"
paired BT classic device type 1 with address "00:21:3E:14:B3:2C"
paired BT classic device type 3 with address "04:91:62:91:18:50"
paired BLE device type 3 with address "LE:04:91:62:91:18:50"
paired BT classic device type 1 with address "AC:E4:B5:CB:7C:87"
paired BT classic device type 1 with address "04:4E:AF:A9:D5:3D"
Found new device: "Bose Mini SoundLink" "08:DF:1F:1F:8B:24"
Not recognized as dive computer
Found new device: "Renault R-Link" "00:21:3E:14:B3:2C"
Not recognized as dive computer
Found new device: "Extreme" "04:91:62:91:18:50"
"this could be a McLean Extreme"
Found new device: "Extreme" "LE:04:91:62:91:18:50"
"this could be a McLean Extreme"
Found new device: "iPhone de Brigitte" "AC:E4:B5:CB:7C:87"
Not recognized as dive computer
Found new device: "Media Nav Evolution" "04:4E:AF:A9:D5:3D"
Not recognized as dive computer
Paired = "Bose Mini SoundLink" "08:DF:1F:1F:8B:24"
Paired = "Renault R-Link" "00:21:3E:14:B3:2C"
Paired = "McLean Extreme" "04:91:62:91:18:50"
Paired = "McLean Extreme" "LE:04:91:62:91:18:50"
Paired = "iPhone de Brigitte" "AC:E4:B5:CB:7C:87"
Paired = "Media Nav Evolution" "04:4E:AF:A9:D5:3D"
"0.036: Created position source android"
"0.036: Set GPS service update interval to 300 s"
"0.036: location service is not available"
qrc:/qml/TripDetails.qml:30: TypeError: Cannot read property 'width' of null
"0.140: download page -- looking for known BT/BLE device"
qrc:/org/kde/kirigami/ScrollablePage.qml:187: TypeError: Cannot assign to read-only property "parent"
"0.158: Window width changed to 570 orientation 1"
"0.158: Screen rotated, no action necessary"
"0.160: 1 columns with column width of 570"
"0.160: width in Grid Units 30 original gridUnit 19 now 19"
"0.160: Done setting up sizes"
"0.328: StartPage visibility changed to false"
"0.328: not yet initialized, show busy spinner"
"1.364: finished setting up the diveListView"
"1.365: StartPage completed -- initialized is false"
"1.365: screenSizeObject constructor completed, initial width 570"
"1.366: 1 columns with column width of 570"
"1.366: width in Grid Units 30 original gridUnit 19 now 19"
"1.366: Done setting up sizes"
qrc:/org/kde/kirigami/AbstractApplicationHeader.qml:57: TypeError: Cannot read property 'header' of null
qrc:/org/kde/kirigami/ContextDrawer.qml:92: TypeError: Cannot call method 'hasOwnProperty' of null
loaded main.qml
qqwindow devicePixelRatio 3 3
qml_window reports width as 570 associated screen width 360 Qt screen reports width as 360
QMLManager received screen changed notification (360,640)
qqwindow screen has ldpi/pdpi 72 141.017
"1.777: Window width changed to 360 orientation 1"
"1.778: first real change, so recalculating units and recording size as 360 x 616"
"1.784: 1 columns with column width of 360"
"1.784: width in Grid Units 21 original gridUnit 19 now 17"
"1.826: Done setting up sizes"
"2.091: Window width changed to 510 orientation 1"
"2.092: size change without rotation to 510 x 765"
"2.092: resetting to initial width 360 and height 616"
"2.187: Window width changed to 360 orientation 1"
"2.188: size change without rotation to 360 x 616"
"2.372: AppState changed to active with no unsaved changes"
"2.373: finishSetup called"
"2.374: Travail hors-ligne"
"2.377: showProgress: Chargement des plongées depuis le cache local"
"2.392: showProgress: Succès de l'ouverture des données de plongée"
"2.408: showProgress: Create full text index"
"2.424: showProgress: start processing"
"2.441: showProgress: 0 plongées traitées"
"2.458: showProgress: populate data model"
"2.474: showProgress: start processing"
"2.490: showProgress: 0 plongées traitées"
"2.508: showProgress: Termine de populer le stockage des données"
"2.526: showProgress: Mets en place les structures de données internes"
"2.541: showProgress: done setting up internal data structures"
"2.558: 0 dives loaded"
"2.560: working in no-cloud mode, finished loading 0 dives from /data/user/0/org.subsurfacedivelog.mobile/files/cloudstorage/localrepo[master]"
"2.561: initialization completed - showing the dive list"
"2.648: pageStack switched to DiveList"
"2.761: switched to page Liste de plongée"
"2.763: if we got started by a plugged in device, switch to download page -- pluggedInDeviceName = "
checkPendingIntents 
"21.413: download page -- looking for known BT/BLE device"
qrc:/qml/DownloadFromDiveComputer.qml:208: ReferenceError: disableDC is not defined
"21.436: rescanning USB: 0 devices reported"
"21.457: pageStack switched to "
"21.463: switched to page Ordinateur de plongée"
qrc:/qml/DownloadFromDiveComputer.qml:205: ReferenceError: disableDC is not defined
compare "LE:04:91:62:91:18:50" "04:91:62:91:18:50"
compare "LE:04:91:62:91:18:50" "LE:04:91:62:91:18:50"
"29.273: setting btName to McLean Extreme"
"29.273: DCDownloadThread started for McLean Extreme on LE:04:91:62:91:18:50 downloading only new dives"
Starting download from  BT
downloading only new dives
"29.279: Connecting to BLE device LE:04:91:62:91:18:50"
Creating Android Central/Client support for BTLE
qt_ble_open( 04:91:62:91:18:50 )
"LocalDeviceBroadcastReceiver::onReceive() - event: android.bluetooth.device.action.ACL_CONNECTED"
Connection updated: error: QLowEnergyController::NoError oldState: QLowEnergyController::ConnectingState newState: QLowEnergyController::ConnectedState
connected to the controller for device 04:91:62:91:18:50
Service discovery initiated
finished service discovery, start discovering characteristics
Found service "{00001800-0000-1000-8000-00805f9b34fb}"
 .. ignoring standard service
Found service "{0000180a-0000-1000-8000-00805f9b34fb}"
 .. ignoring standard service
Found service "{49535343-fe7d-4ae5-8fa9-9fafd205e455}"
starting service characteristics discovery
   .. service state changed to QLowEnergyService::DiscoveringServices
Discovery of "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" started
 .. done discovering services
Service "49535343-fe7d-4ae5-8fa9-9fafd205e455" discovered (start: 25 end: 41 ) QLowEnergyServicePrivate(0x7682bed980)
   .. service state changed to QLowEnergyService::ServiceDiscovered
Found service "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" "Unknown Service"
   c: "{49535343-6daa-4d02-abf6-19569aca69fe}"
   c: "{49535343-aca3-481c-91ec-d85e28a60318}"
        d: "{00002902-0000-1000-8000-00805f9b34fb}"
   c: "{49535343-1e4d-4bd9-ba61-23c647249616}"
        d: "{00002902-0000-1000-8000-00805f9b34fb}"
   c: "{49535343-8841-43f4-a8d4-ecbe34729bb3}"
   c: "{49535343-026e-3a9b-954c-97daef17e26e}"
        d: "{00002902-0000-1000-8000-00805f9b34fb}"
   c: "{49535343-4c8a-39b3-2f49-511cff073b7e}"
        d: "{00002902-0000-1000-8000-00805f9b34fb}"
Using service "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" as preferred service
 .. enabling notifications
Using read characteristic "{49535343-aca3-481c-91ec-d85e28a60318}"
now writing "0x0100" to the descriptor "{00002902-0000-1000-8000-00805f9b34fb}"
Write descriptor with handle  30 "0100" (service: "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" )
Descriptor write confirmation "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 30 "0100" QLowEnergyService::NoError
BLE write completed
"31.114: Connecting ..."
"31.215: Starting import ..."
QTime("16:42:54.989") packet SEND "7e0000000000ad4a210000"
Write characteristic with handle  26 "7e0000000000ad4a210000" (service: "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" , writeWithResponse: true , signed: false )
QTime("16:42:54.999") packet WAIT
Characteristic write confirmation "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 26 "7e0000000000ad4a210000" QLowEnergyService::NoError
BLEObject::characteristicWritten
QTime("16:42:56.006") packet WAIT
QTime("16:42:57.008") packet WAIT
QTime("16:42:58.020") packet WAIT
QTime("16:42:59.025") packet WAIT
QTime("16:43:00.026") packet WAIT
QTime("16:43:01.035") packet WAIT
QTime("16:43:02.036") packet WAIT
QTime("16:43:03.044") packet WAIT
QTime("16:43:04.055") packet WAIT
QTime("16:43:05.063") packet WAIT
QTime("16:43:06.065") packet WAIT
QTime("16:43:07.075") packet WAIT
QTime("16:43:08.086") packet WAIT
QTime("16:43:09.097") packet WAIT
QTime("16:43:10.409") packet SEND "7e0000000000aa44210000"
Write characteristic with handle  26 "7e0000000000aa44210000" (service: "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" , writeWithResponse: true , signed: false )
"46.944: Aucune nouvelle plongée téléchargée depuis l'ordinateur de plongée"
Deleting BLE object
Finishing download thread: "Erreur d'import des données de plongées"
"46.976: no new dives downloaded"
"46.977: DCDownloadThread finished"
"LocalDeviceBroadcastReceiver::onReceive() - event: android.bluetooth.device.action.ACL_DISCONNECTED"
qrc:/org/kde/kirigami/templates/private/ScrollView.qml:113:9: QML ScrollBar: Binding loop detected for property "visible"
"61.842: pageStack switched to "
"61.847: switched to page À propos de Subsurface-mobile"
"61.848: endEditMode called with state view"



---------- libdivecomputer.log ----------
Subsurface: v4.9.6-110-ge026e81775d3, built with libdivecomputer v0.7.0-devel-Subsurface-NG (090c26975bac0c36c8caef3995db506e8dafeb5c)
[0.000002] INFO: Open: transport=32
[0.000499] INFO: Configure: baudrate=115200, databits=8, parity=0, stopbits=0, flowcontrol=0
[0.000523] INFO: Timeout: value=1000
[0.000542] INFO: Sleep: value=100
[0.100882] INFO: Purge: direction=3
[0.102385] INFO: Sleep: value=300
[0.413316] INFO: Write: size=11, data=7E0000000000AD4A210000
[1.420124] INFO: Read: size=0, data=
[2.422176] INFO: Read: size=0, data=
[3.433484] INFO: Read: size=0, data=
[4.439348] INFO: Read: size=0, data=
[5.440122] INFO: Read: size=0, data=
[6.449136] INFO: Read: size=0, data=
[7.449938] INFO: Read: size=0, data=
[8.457802] INFO: Read: size=0, data=
[9.468614] INFO: Read: size=0, data=
[10.474123] INFO: Read: size=0, data=
[11.478663] INFO: Read: size=0, data=
[12.489132] INFO: Read: size=0, data=
[13.499632] INFO: Read: size=0, data=
[14.510507] INFO: Read: size=0, data=
[15.522219] INFO: Read: size=0, data=
[15.522306] ERROR: Failed to read the firmware version. [in /android/subsurface/libdivecomputer/src/mclean_extreme.c:519 (mclean_extreme_device_foreach)]
[15.522455] INFO: Sleep: value=300
[15.829555] INFO: Write: size=11, data=7E0000000000AA44210000
---------- finish ----------

Linus Torvalds

unread,
Sep 16, 2020, 1:12:23 PM9/16/20
to Subsurface Divelog, Dirk Hohndel
On Wed, Sep 16, 2020 at 7:48 AM David Carron <david.d...@gmail.com> wrote:
>
> Very different behaviour this time. The Extrême showed up on the download dives page with two connexion options. I selected LE and started the transfer which completed without any error messages (although there are no dives on this computer).
>
> I'm going to go put a quick dive on it to see what happens and in the mean-time here's the log

Ok, that's a failure to communicate, not a "communicated ok but there
were no dives".

But it's much better. It connects to the device, it picks the right
service (easy, since there's only one relevant service), but then as
expected it's picking the wrong characteristics:

So all this looks fine:

> Found service "{49535343-fe7d-4ae5-8fa9-9fafd205e455}"
> starting service characteristics discovery
> .. service state changed to QLowEnergyService::DiscoveringServices
> Discovery of "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" started
> .. done discovering services
> Service "49535343-fe7d-4ae5-8fa9-9fafd205e455" discovered (start: 25 end: 41 ) QLowEnergyServicePrivate(0x7682bed980)
> .. service state changed to QLowEnergyService::ServiceDiscovered

All good, and yes, it enumerates the characteristics properly too:

> Found service "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" "Unknown Service"
> c: "{49535343-6daa-4d02-abf6-19569aca69fe}"
> c: "{49535343-aca3-481c-91ec-d85e28a60318}"
> d: "{00002902-0000-1000-8000-00805f9b34fb}"
> c: "{49535343-1e4d-4bd9-ba61-23c647249616}"
> d: "{00002902-0000-1000-8000-00805f9b34fb}"
> c: "{49535343-8841-43f4-a8d4-ecbe34729bb3}"
> c: "{49535343-026e-3a9b-954c-97daef17e26e}"
> d: "{00002902-0000-1000-8000-00805f9b34fb}"
> c: "{49535343-4c8a-39b3-2f49-511cff073b7e}"
> d: "{00002902-0000-1000-8000-00805f9b34fb}"

And then we start the actual IO, but:

> Using service "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" as preferred service
> .. enabling notifications
> Using read characteristic "{49535343-aca3-481c-91ec-d85e28a60318}"

Yeah, that's the wrong read characteristic that we now enable notifications for:

> now writing "0x0100" to the descriptor "{00002902-0000-1000-8000-00805f9b34fb}"
> Write descriptor with handle 30 "0100" (service: "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" )
> Descriptor write confirmation "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 30 "0100" QLowEnergyService::NoError
> BLE write completed

it "succeeds", but it's not going to give us notifications for RX,
because we *should* have used

c: "{49535343-1e4d-4bd9-ba61-23c647249616}"
d: "{00002902-0000-1000-8000-00805f9b34fb}"

And then we're starting to write to it:

> "31.114: Connecting ..."
> "31.215: Starting import ..."
> QTime("16:42:54.989") packet SEND "7e0000000000ad4a210000"
> Write characteristic with handle 26 "7e0000000000ad4a210000" (service: "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" , writeWithResponse: true , signed: false )

And sadly, our debugging shows "handle 26" rather than the
characteristic UUID (that's how BLE GATT works internally), so we
might be writing to the right handle, but I doubt it, and the debug
output isn't super-useful.


> QTime("16:42:54.999") packet WAIT
> Characteristic write confirmation "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 26 "7e0000000000ad4a210000" QLowEnergyService::NoError
> BLEObject::characteristicWritten

Thiks just means that the write completed properly, but if it went to
the wrong characteristic that doesn't much matter.

We never get a reply either way, since we've enabled notifications on
the wrong one, so even if we wrote to the right one it doesn't matter.

Anyway, this is good enough for me to look at filtering the
characteristics. Annoying, but not horrible. I think.

Let me go look.

Linus

Linus Torvalds

unread,
Sep 16, 2020, 2:07:02 PM9/16/20
to Subsurface Divelog, Dirk Hohndel
On Wed, Sep 16, 2020 at 10:11 AM Linus Torvalds
<torv...@linux-foundation.org> wrote:
>
> Anyway, this is good enough for me to look at filtering the
> characteristics. Annoying, but not horrible. I think.

Easy enough to do. Trial pull request sent to Dirk - no guarantees
that it works, since I obviously can't test it, but it's not rocket
science.

https://github.com/subsurface/subsurface/pull/2958

Despite not being rocket science, it might be total garbage. Buyer beware.

Fingers crossed.

Linus

Dirk Hohndel

unread,
Sep 16, 2020, 3:57:50 PM9/16/20
to Subsurface Divelog
OK, here's an APK for David to test (I know, it's late already in Europe)


This includes Linus latest code as described below.

/D

David Carron

unread,
Sep 16, 2020, 5:11:37 PM9/16/20
to subsurfac...@googlegroups.com
Dirk, Linus

That seems to have done the trick. I didn't get round to diving the computer this afternoon so the logbook is empty but judging by log some well-formed packets were successfully transferred.

I'll get an a dive done tomorrow mornin to confirm.

By the way, the divecomputer.eu machine uses the exact same Bluetooth chip, so these fixes also apply there.


---------- subsurface.log ----------
"0.032: Failed to open logfile /storage/emulated/0/subsurface.log at mer. sept. 16 23:00:48 2020 error: Permission denied"
"0.033: Failed to open logfile /storage/emulated/0/Documents/subsurface.log at mer. sept. 16 23:00:48 2020 error: Permission denied"
"0.034: Successfully opened logfile /storage/emulated/0/Android/data/org.subsurfacedivelog.mobile/files/Documents/subsurface.log at mer. sept. 16 23:00:48 2020"
"0.035: Starting Subsurface-mobile:3.0.15(4.9.6.113):Android Oreo (8.0):arm64:fr-FR"
"0.035: built with libdivecomputer v0.7.0-devel-Subsurface-NG (090c26975bac0c36c8caef3995db506e8dafeb5c)"
"0.035: built with Qt Version 5.13.2, runtime from Qt Version 5.13.2"
"0.035: built with libgit2 0.26.0"
"0.035: Running on Android Oreo (8.0)"
"0.035: SM-A520F/samsung/a5y17ltexx"
"0.085: Created position source android"
"0.086: Set GPS service update interval to 300 s"
"0.086: location service is not available"
qrc:/qml/TripDetails.qml:30: TypeError: Cannot read property 'width' of null
"0.199: download page -- looking for known BT/BLE device"
qrc:/org/kde/kirigami/ScrollablePage.qml:187: TypeError: Cannot assign to read-only property "parent"
"0.222: Window width changed to 570 orientation 1"
"0.223: Screen rotated, no action necessary"
"0.225: 1 columns with column width of 570"
"0.225: width in Grid Units 30 original gridUnit 19 now 19"
"0.226: Done setting up sizes"
"0.523: StartPage visibility changed to false"
"0.523: not yet initialized, show busy spinner"
"1.900: finished setting up the diveListView"
"1.901: StartPage completed -- initialized is false"
"1.901: screenSizeObject constructor completed, initial width 570"
"1.902: 1 columns with column width of 570"
"1.902: width in Grid Units 30 original gridUnit 19 now 19"
"1.902: Done setting up sizes"
qrc:/org/kde/kirigami/AbstractApplicationHeader.qml:57: TypeError: Cannot read property 'header' of null
qrc:/org/kde/kirigami/ContextDrawer.qml:92: TypeError: Cannot call method 'hasOwnProperty' of null
loaded main.qml
qqwindow devicePixelRatio 3 3
qml_window reports width as 570 associated screen width 360 Qt screen reports width as 360
QMLManager received screen changed notification (360,640)
qqwindow screen has ldpi/pdpi 72 141.017
"2.307: Window width changed to 360 orientation 1"
"2.307: first real change, so recalculating units and recording size as 360 x 616"
"2.313: 1 columns with column width of 360"
"2.314: width in Grid Units 21 original gridUnit 19 now 17"
"2.354: Done setting up sizes"
"2.635: Window width changed to 510 orientation 1"
"2.638: size change without rotation to 510 x 765"
"2.639: resetting to initial width 360 and height 616"
"2.738: Window width changed to 360 orientation 1"
"2.738: size change without rotation to 360 x 616"
"2.930: AppState changed to active with no unsaved changes"
"2.930: finishSetup called"
"2.930: Pas d'information de connexion pour le cloud"
"2.931: initialization completed - showing the dive list"
"2.970: pageStack switched to DiveList"
qrc:/org/kde/kirigami/ContextDrawer.qml:146: TypeError: Cannot read property 'text' of null
"2.987: switched to page Informations de connexion pour le cloud"
"2.989: if we got started by a plugged in device, switch to download page -- pluggedInDeviceName = "
QObject::connect: No such signal QQuickListView::cursorPositionChanged()
qrc:/org/kde/kirigami/templates/private/ScrollView.qml:113:9: QML ScrollBar: Binding loop detected for property "visible"
"2.995: StartPage visibility changed to true"
<Unknown File>:7: TypeError: Cannot read property 'contentX' of null
checkPendingIntents 
"10.624: Window width changed to 640 orientation 2"
"10.624: Screen rotated, no action necessary"
"10.632: 1 columns with column width of 640"
"10.632: width in Grid Units 37 original gridUnit 17 now 17"
"10.633: Done setting up sizes"
"12.915: StartPage visibility changed to false"
"13.475: pageStack switched to DiveList"
"13.476: switched to page Liste de plongée"
"13.478: User asked not to connect to cloud, using /data/user/0/org.subsurfacedivelog.mobile/files/cloudstorage/localrepo[master] as repo."
"13.497: showProgress: Préparation de la sauvegarde des données"
"13.503: showProgress: Début de la sauvegarde des données"
"13.516: showProgress: Début de la sauvegarde des plongées"
"13.522: showProgress: Cache local crée"
"13.561: showProgress: populate data model"
"13.567: showProgress: start processing"
"13.572: showProgress: 0 plongées traitées"
"13.578: showProgress: Termine de populer le stockage des données"
"13.584: showProgress: Mets en place les structures de données internes"
"13.591: showProgress: done setting up internal data structures"
"13.598: ============diveListProcessing is true"
"13.599: showProgress: Ouvrir les données de plongée local"
"13.604: Open dive data file /data/user/0/org.subsurfacedivelog.mobile/files/cloudstorage/localrepo[master] - git_local only is 1"
"13.606: showProgress: Chargement des plongées depuis le cache local"
"13.613: showProgress: Succès de l'ouverture des données de plongée"
"13.629: showProgress: Traitement de 0 plongées"
"13.635: showProgress: Create full text index"
"13.641: showProgress: start processing"
"13.648: showProgress: 0 plongées traitées"
"13.654: showProgress: populate data model"
"13.660: showProgress: start processing"
"13.673: showProgress: 0 plongées traitées"
"13.679: showProgress: Termine de populer le stockage des données"
"13.686: showProgress: Mets en place les structures de données internes"
"13.692: showProgress: done setting up internal data structures"
"13.702: showProgress: 0 plongées chargées depuis le fichier local de données de plongées"
"13.709: taking things online to be able to switch to cloud account"
"13.709: ============diveListProcessing is false"
"19.129: Window width changed to 360 orientation 1"
"19.130: Screen rotated, no action necessary"
"19.137: 1 columns with column width of 360"
"19.137: width in Grid Units 21 original gridUnit 17 now 17"
"19.138: Done setting up sizes"
"33.836: download page -- looking for known BT/BLE device"
qrc:/qml/DownloadFromDiveComputer.qml:208: ReferenceError: disableDC is not defined
"33.860: rescanning USB: 0 devices reported"
"33.894: pageStack switched to "
"33.899: switched to page Ordinateur de plongée"
"40.908: rescanning USB: 0 devices reported"
BTDiscoveryReDiscover: localBtDevice.isValid() true
"BTDiscoveryReDiscover: localDevice Dave's Phone is powered on, starting discovery"
paired BT classic device type 1 with address "08:DF:1F:1F:8B:24"
paired BT classic device type 1 with address "00:21:3E:14:B3:2C"
paired BT classic device type 3 with address "04:91:62:91:18:50"
paired BLE device type 3 with address "LE:04:91:62:91:18:50"
paired BT classic device type 1 with address "AC:E4:B5:CB:7C:87"
paired BT classic device type 1 with address "04:4E:AF:A9:D5:3D"
Found new device: "Bose Mini SoundLink" "08:DF:1F:1F:8B:24"
Not recognized as dive computer
Found new device: "Renault R-Link" "00:21:3E:14:B3:2C"
Not recognized as dive computer
Found new device: "Extreme" "04:91:62:91:18:50"
"this could be a McLean Extreme"
Found new device: "Extreme" "LE:04:91:62:91:18:50"
"this could be a McLean Extreme"
Found new device: "iPhone de Brigitte" "AC:E4:B5:CB:7C:87"
Not recognized as dive computer
Found new device: "Media Nav Evolution" "04:4E:AF:A9:D5:3D"
Not recognized as dive computer
Paired = "Bose Mini SoundLink" "08:DF:1F:1F:8B:24"
Paired = "Renault R-Link" "00:21:3E:14:B3:2C"
Paired = "McLean Extreme" "04:91:62:91:18:50"
Paired = "McLean Extreme" "LE:04:91:62:91:18:50"
Paired = "iPhone de Brigitte" "AC:E4:B5:CB:7C:87"
Paired = "Media Nav Evolution" "04:4E:AF:A9:D5:3D"
compare "LE:04:91:62:91:18:50" "04:91:62:91:18:50"
compare "LE:04:91:62:91:18:50" "LE:04:91:62:91:18:50"
compare "LE:04:91:62:91:18:50" "04:91:62:91:18:50"
compare "LE:04:91:62:91:18:50" "LE:04:91:62:91:18:50"
"47.107: setting btName to McLean Extreme"
"47.108: DCDownloadThread started for McLean Extreme on LE:04:91:62:91:18:50 downloading only new dives"
Starting download from  BT
downloading only new dives
"47.115: Connecting to BLE device LE:04:91:62:91:18:50"
Creating Android Central/Client support for BTLE
qt_ble_open( 04:91:62:91:18:50 )
Connection updated: error: QLowEnergyController::Error(133) oldState: QLowEnergyController::ConnectingState newState: QLowEnergyController::UnconnectedState
failed to connect to the controller  04:91:62:91:18:50 with error "Error occurred trying to connect to remote device."
"52.242: Failed to connect to 04:91:62:91:18:50: 'Error occurred trying to connect to remote device.'"
Finishing download thread: "Impossible d'ouvrir LE:04:91:62:91:18:50 McLean (Extreme)"
"52.243: Unsupported operation"
"52.348: no new dives downloaded"
"52.348: DCDownloadThread finished"
qrc:/org/kde/kirigami/templates/private/ScrollView.qml:113:9: QML ScrollBar: Binding loop detected for property "visible"
"72.475: pageStack switched to "
"72.478: switched to page À propos de Subsurface-mobile"
"72.479: endEditMode called with state view"
QObject::setParent: Cannot set parent, new parent is in a different thread
"74.468: pageStack switched to "
<Unknown File>:7: TypeError: Cannot read property 'contentX' of null
QObject::setParent: Cannot set parent, new parent is in a different thread
"74.496: pageStack switched to DiveList"
QObject::setParent: Cannot set parent, new parent is in a different thread
<Unknown File>:7: TypeError: Cannot read property 'contentX' of null
"74.612: download page -- looking for known BT/BLE device"
QObject::setParent: Cannot set parent, new parent is in a different thread
"74.622: endEditMode called with state view"
QObject::setParent: Cannot set parent, new parent is in a different thread
"77.584: AppState changed to inactive with no unsaved changes"
"77.601: AppState changed to suspended with no unsaved changes"
"172.725: AppState changed to active with no unsaved changes"
QMetaObject::invokeMethod: No such method QQuickListView::inputMethodQuery(Qt::InputMethodQuery,QVariant)
"180.868: pageStack switched to Settings"
"180.875: switched to page Paramètres"
"180.875: endEditMode called with state view"
"213.484: download page -- looking for known BT/BLE device"
qrc:/qml/DownloadFromDiveComputer.qml:208: ReferenceError: disableDC is not defined
"213.499: rescanning USB: 0 devices reported"
"213.523: pageStack switched to "
"213.525: switched to page Ordinateur de plongée"
qrc:/qml/DownloadFromDiveComputer.qml:205: ReferenceError: disableDC is not defined
compare "LE:04:91:62:91:18:50" "04:91:62:91:18:50"
compare "LE:04:91:62:91:18:50" "LE:04:91:62:91:18:50"
compare "LE:04:91:62:91:18:50" "04:91:62:91:18:50"
compare "LE:04:91:62:91:18:50" "LE:04:91:62:91:18:50"
"218.220: setting btName to McLean Extreme"
"218.221: DCDownloadThread started for McLean Extreme on LE:04:91:62:91:18:50 downloading only new dives"
Starting download from  BT
downloading only new dives
"218.224: Connecting to BLE device LE:04:91:62:91:18:50"
Creating Android Central/Client support for BTLE
qt_ble_open( 04:91:62:91:18:50 )
"LocalDeviceBroadcastReceiver::onReceive() - event: android.bluetooth.device.action.ACL_CONNECTED"
Connection updated: error: QLowEnergyController::NoError oldState: QLowEnergyController::ConnectingState newState: QLowEnergyController::ConnectedState
connected to the controller for device 04:91:62:91:18:50
Service discovery initiated
finished service discovery, start discovering characteristics
Found service "{00001800-0000-1000-8000-00805f9b34fb}"
 .. ignoring standard service
Found service "{0000180a-0000-1000-8000-00805f9b34fb}"
 .. ignoring standard service
Found service "{49535343-fe7d-4ae5-8fa9-9fafd205e455}"
starting service characteristics discovery
   .. service state changed to QLowEnergyService::DiscoveringServices
Discovery of "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" started
 .. done discovering services
Service "49535343-fe7d-4ae5-8fa9-9fafd205e455" discovered (start: 25 end: 41 ) QLowEnergyServicePrivate(0x7683218c30)
   .. service state changed to QLowEnergyService::ServiceDiscovered
Found service "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" "Unknown Service"
   c: "{49535343-6daa-4d02-abf6-19569aca69fe}"
   c: "{49535343-aca3-481c-91ec-d85e28a60318}"
        d: "{00002902-0000-1000-8000-00805f9b34fb}"
   c: "{49535343-1e4d-4bd9-ba61-23c647249616}"
        d: "{00002902-0000-1000-8000-00805f9b34fb}"
   c: "{49535343-8841-43f4-a8d4-ecbe34729bb3}"
   c: "{49535343-026e-3a9b-954c-97daef17e26e}"
        d: "{00002902-0000-1000-8000-00805f9b34fb}"
   c: "{49535343-4c8a-39b3-2f49-511cff073b7e}"
        d: "{00002902-0000-1000-8000-00805f9b34fb}"
Using service "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" as preferred service
 .. enabling notifications
Using read characteristic "{49535343-1e4d-4bd9-ba61-23c647249616}"
now writing "0x0100" to the descriptor "{00002902-0000-1000-8000-00805f9b34fb}"
Write descriptor with handle  33 "0100" (service: "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" )
Descriptor write confirmation "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 33 "0100" QLowEnergyService::NoError
BLE write completed
"220.507: Connecting ..."
"220.608: Starting import ..."
QTime("23:04:29.151") packet SEND "7e0000000000ad4a210000"
Write characteristic with handle  31 "7e0000000000ad4a210000" (service: "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" , writeWithResponse: false , signed: false )
QTime("23:04:29.154") packet WAIT
Characteristic write confirmation "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 31 "7e0000000000ad4a210000" QLowEnergyService::NoError
BLEObject::characteristicWritten
Characteristic change notification "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 31 "7e0004000000ad000e0101159c0000"
QTime("23:04:29.242") packet RECV "7e0004000000ad000e0101159c0000"
QTime("23:04:29.242") packet READ "7e"
QTime("23:04:29.243") packet READ "0004000000ad"
QTime("23:04:29.244") packet READ "000e0101"
QTime("23:04:29.245") packet READ "159c0000"
QTime("23:04:29.545") packet SEND "7e00000000009132210000"
Write characteristic with handle  31 "7e00000000009132210000" (service: "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" , writeWithResponse: false , signed: false )
QTime("23:04:29.551") packet WAIT
Characteristic write confirmation "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 31 "7e00000000009132210000" QLowEnergyService::NoError
BLEObject::characteristicWritten
Characteristic change notification "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 31 "7e001a0000009130303338303033372d33303334353131392d333833353333333460970000"
QTime("23:04:29.643") packet RECV "7e001a0000009130303338303033372d33303334353131392d333833353333333460970000"
QTime("23:04:29.644") packet READ "7e"
QTime("23:04:29.645") packet READ "001a00000091"
QTime("23:04:29.645") packet READ "30303338303033372d33303334353131392d3338333533333334"
QTime("23:04:29.645") packet READ "60970000"
"221.404: modèle=Extreme firmware=16846336 série=2595568495"
QTime("23:04:29.946") packet SEND "7e0000000000a050210000"
Write characteristic with handle  31 "7e0000000000a050210000" (service: "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" , writeWithResponse: false , signed: false )
QTime("23:04:29.949") packet WAIT
Characteristic write confirmation "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 31 "7e0000000000a050210000" QLowEnergyService::NoError
BLEObject::characteristicWritten
Characteristic change notification "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 31 "7e0097000000a0001500150024001523122d0c41320064000100288cb4070001000000e803930300505000a00f40067805401f0002197e26000000006801b4000a003c000f0006040100171880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005014d634c65616e2045787472ea6d650000000000000000000000000000000000"
QTime("23:04:30.003") packet RECV "7e0097000000a0001500150024001523122d0c41320064000100288cb4070001000000e803930300505000a00f40067805401f0002197e26000000006801b4000a003c000f0006040100171880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005014d634c65616e2045787472ea6d650000000000000000000000000000000000"
Characteristic change notification "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 31 "0000bd0000"
QTime("23:04:30.004") packet RECV "0000bd0000"
QTime("23:04:30.004") packet READ "7e"
QTime("23:04:30.005") packet READ "0097000000a0"
QTime("23:04:30.005") packet READ "001500150024001523122d0c41320064000100288cb4070001000000e803930300505000a00f40067805401f0002197e26000000006801b4000a003c000f0006040100171880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005014d634c65616e2045787472ea6d650000000000000000000000000000000000"
QTime("23:04:30.005") packet READ "00"
QTime("23:04:30.006") packet READ "00bd0000"
QTime("23:04:30.306") packet SEND "7e0000000000aa44210000"
Write characteristic with handle  31 "7e0000000000aa44210000" (service: "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" , writeWithResponse: false , signed: false )
"222.067: Aucune nouvelle plongée téléchargée depuis l'ordinateur de plongée"
Deleting BLE object
Finishing download thread: 0 dives downloaded
"222.080: no new dives downloaded"
"222.080: DCDownloadThread finished"
"LocalDeviceBroadcastReceiver::onReceive() - event: android.bluetooth.device.action.ACL_DISCONNECTED"
"253.719: pageStack switched to "
"253.721: switched to page À propos de Subsurface-mobile"
"253.722: endEditMode called with state view"



---------- libdivecomputer.log ----------
Subsurface: v4.9.6-113-g5719877c3030, built with libdivecomputer v0.7.0-devel-Subsurface-NG (090c26975bac0c36c8caef3995db506e8dafeb5c)
[0.000001] INFO: Open: transport=32
[0.000670] INFO: Configure: baudrate=115200, databits=8, parity=0, stopbits=0, flowcontrol=0
[0.000681] INFO: Timeout: value=1000
[0.000688] INFO: Sleep: value=100
[0.100820] INFO: Purge: direction=3
[0.101902] INFO: Sleep: value=300
[0.404633] INFO: Write: size=11, data=7E0000000000AD4A210000
[0.493699] INFO: Read: size=1, data=7E
[0.494058] INFO: Read: size=6, data=0004000000AD
[0.495409] INFO: Read: size=4, data=000E0101
[0.495803] INFO: Read: size=4, data=159C0000
[0.495820] INFO: Sleep: value=300
[0.801557] INFO: Write: size=11, data=7E00000000009132210000
[0.895583] INFO: Read: size=1, data=7E
[0.895962] INFO: Read: size=6, data=001A00000091
[0.896265] INFO: Read: size=26, data=30303338303033372D33303334353131392D3338333533333334
[0.896551] INFO: Read: size=4, data=60970000
Event: model=0 (0x00000000), firmware=16846336 (0x01010e00), serial=2595568495 (0x9ab53b6f)
[0.897029] INFO: Sleep: value=300
[1.200149] INFO: Write: size=11, data=7E0000000000A050210000
[1.255648] INFO: Read: size=1, data=7E
[1.256035] INFO: Read: size=6, data=0097000000A0
[1.256331] INFO: Read: size=150, data=001500150024001523122D0C41320064000100288CB4070001000000E803930300505000A00F40067805401F0002197E26000000006801B4000A003C000F0006040100171880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005014D634C65616E2045787472EA6D650000000000000000000000000000000000
[1.256523] INFO: Read: size=1, data=00
[1.256696] INFO: Read: size=4, data=00BD0000
[1.256718] INFO: Sleep: value=300
[1.559779] INFO: Write: size=11, data=7E0000000000AA44210000
---------- finish ----------


--
You received this message because you are subscribed to the Google Groups "Subsurface Divelog" group.
To unsubscribe from this group and stop receiving emails from it, send an email to subsurface-dive...@googlegroups.com.

Linus Torvalds

unread,
Sep 16, 2020, 6:35:12 PM9/16/20
to Subsurface Divelog
On Wed, Sep 16, 2020 at 2:11 PM David Carron <david.d...@gmail.com> wrote:
>
> That seems to have done the trick. I didn't get round to diving the
> computer this afternoon so the logbook is empty but judging by log
> some well-formed packets were successfully transferred.

Yup. That looks like a successful transfer to me, and we're clearly
writing commands and getting the proper replies back.

So I bet tomorrow when you have a dive on it, it will all just work.

Linus

David Carron

unread,
Sep 17, 2020, 3:44:43 AM9/17/20
to subsurfac...@googlegroups.com
Dirk, Linus,

I sucesfully uploaded a dive this morning. I didn't check the details except for the dive duration and general shape of the profile, but the transfer certainly went very smoothly, so brilliant work.

Will all these changes be making their way into the next release?


---------- subsurface.log ----------
"0.008: Failed to open logfile /storage/emulated/0/subsurface.log at jeu. sept. 17 09:39:24 2020 error: Permission denied"
"0.010: Failed to open logfile /storage/emulated/0/Documents/subsurface.log at jeu. sept. 17 09:39:24 2020 error: Permission denied"
"0.012: Successfully opened logfile /storage/emulated/0/Android/data/org.subsurfacedivelog.mobile/files/Documents/subsurface.log at jeu. sept. 17 09:39:24 2020"
"0.013: Starting Subsurface-mobile:3.0.15(4.9.6.113):Android Oreo (8.0):arm64:fr-FR"
"0.013: built with libdivecomputer v0.7.0-devel-Subsurface-NG (090c26975bac0c36c8caef3995db506e8dafeb5c)"
"0.013: built with Qt Version 5.13.2, runtime from Qt Version 5.13.2"
"0.013: built with libgit2 0.26.0"
"0.013: Running on Android Oreo (8.0)"
"0.013: SM-A520F/samsung/a5y17ltexx"
BTDiscoveryReDiscover: localBtDevice.isValid() true
"BTDiscoveryReDiscover: localDevice Dave's Phone is powered on, starting discovery"
paired BT classic device type 1 with address "08:DF:1F:1F:8B:24"
paired BT classic device type 1 with address "00:21:3E:14:B3:2C"
paired BT classic device type 3 with address "04:91:62:91:1A:B0"
paired BLE device type 3 with address "LE:04:91:62:91:1A:B0"
paired BT classic device type 1 with address "AC:E4:B5:CB:7C:87"
paired BT classic device type 1 with address "04:4E:AF:A9:D5:3D"
Found new device: "Bose Mini SoundLink" "08:DF:1F:1F:8B:24"
Not recognized as dive computer
Found new device: "Renault R-Link" "00:21:3E:14:B3:2C"
Not recognized as dive computer
Found new device: "Extreme" "04:91:62:91:1A:B0"
"this could be a McLean Extreme"
Found new device: "Extreme" "LE:04:91:62:91:1A:B0"
"this could be a McLean Extreme"
Found new device: "iPhone de Brigitte" "AC:E4:B5:CB:7C:87"
Not recognized as dive computer
Found new device: "Media Nav Evolution" "04:4E:AF:A9:D5:3D"
Not recognized as dive computer
Paired = "Bose Mini SoundLink" "08:DF:1F:1F:8B:24"
Paired = "Renault R-Link" "00:21:3E:14:B3:2C"
Paired = "McLean Extreme" "04:91:62:91:1A:B0"
Paired = "McLean Extreme" "LE:04:91:62:91:1A:B0"
Paired = "iPhone de Brigitte" "AC:E4:B5:CB:7C:87"
Paired = "Media Nav Evolution" "04:4E:AF:A9:D5:3D"
"0.052: Created position source android"
"0.053: Set GPS service update interval to 300 s"
"0.054: location service is not available"
qrc:/qml/TripDetails.qml:30: TypeError: Cannot read property 'width' of null
"0.175: download page -- looking for known BT/BLE device"
qrc:/org/kde/kirigami/ScrollablePage.qml:187: TypeError: Cannot assign to read-only property "parent"
"0.199: Window width changed to 570 orientation 1"
"0.200: Screen rotated, no action necessary"
"0.201: show only one column in portrait mode"
"0.203: 1 columns with column width of 570"
"0.203: width in Grid Units 30 original gridUnit 19 now 19"
"0.203: Done setting up sizes"
"0.411: StartPage visibility changed to false"
"0.411: not yet initialized, show busy spinner"
"1.545: finished setting up the diveListView"
"1.545: StartPage completed -- initialized is false"
"1.546: screenSizeObject constructor completed, initial width 570"
"1.546: show only one column in portrait mode"
"1.546: 1 columns with column width of 570"
"1.546: width in Grid Units 30 original gridUnit 19 now 19"
"1.546: Done setting up sizes"
qrc:/org/kde/kirigami/AbstractApplicationHeader.qml:57: TypeError: Cannot read property 'header' of null
qrc:/org/kde/kirigami/ContextDrawer.qml:92: TypeError: Cannot call method 'hasOwnProperty' of null
loaded main.qml
qqwindow devicePixelRatio 3 3
qml_window reports width as 570 associated screen width 360 Qt screen reports width as 360
QMLManager received screen changed notification (360,640)
qqwindow screen has ldpi/pdpi 72 141.017
"1.952: Window width changed to 360 orientation 1"
"1.952: first real change, so recalculating units and recording size as 360 x 616"
"1.952: show only one column in portrait mode"
"1.958: 1 columns with column width of 360"
"1.958: width in Grid Units 21 original gridUnit 19 now 17"
"1.998: Done setting up sizes"
"2.249: Window width changed to 510 orientation 1"
"2.249: size change without rotation to 510 x 765"
"2.250: resetting to initial width 360 and height 616"
"2.324: Window width changed to 360 orientation 1"
"2.325: size change without rotation to 360 x 616"
"2.467: AppState changed to active with no unsaved changes"
"2.468: finishSetup called"
"2.469: Travail hors-ligne"
"2.493: showProgress: Chargement des plongées depuis le cache local"
"2.521: showProgress: Succès de l'ouverture des données de plongée"
"2.538: showProgress: Create full text index"
"2.554: showProgress: start processing"
"2.571: showProgress: 0 plongées traitées"
"2.590: showProgress: populate data model"
"2.604: showProgress: start processing"
"2.620: showProgress: 0 plongées traitées"
"2.636: showProgress: Termine de populer le stockage des données"
"2.655: showProgress: Mets en place les structures de données internes"
"2.671: showProgress: done setting up internal data structures"
"2.688: 0 dives loaded"
"2.691: working in no-cloud mode, finished loading 0 dives from /data/user/0/org.subsurfacedivelog.mobile/files/cloudstorage/localrepo[master]"
"2.692: initialization completed - showing the dive list"
"2.804: pageStack switched to DiveList"
"2.913: switched to page Liste de plongée"
"2.915: if we got started by a plugged in device, switch to download page -- pluggedInDeviceName = "
checkPendingIntents 
"15.839: download page -- looking for known BT/BLE device"
qrc:/qml/DownloadFromDiveComputer.qml:208: ReferenceError: disableDC is not defined
"15.864: rescanning USB: 0 devices reported"
"15.886: pageStack switched to "
"15.891: switched to page Ordinateur de plongée"
"18.337: rescanning USB: 0 devices reported"
BTDiscoveryReDiscover: localBtDevice.isValid() true
"BTDiscoveryReDiscover: localDevice Dave's Phone is powered on, starting discovery"
paired BT classic device type 1 with address "08:DF:1F:1F:8B:24"
paired BT classic device type 1 with address "00:21:3E:14:B3:2C"
paired BT classic device type 3 with address "04:91:62:91:1A:B0"
paired BLE device type 3 with address "LE:04:91:62:91:1A:B0"
paired BT classic device type 1 with address "AC:E4:B5:CB:7C:87"
paired BT classic device type 1 with address "04:4E:AF:A9:D5:3D"
Found new device: "Bose Mini SoundLink" "08:DF:1F:1F:8B:24"
Not recognized as dive computer
Found new device: "Renault R-Link" "00:21:3E:14:B3:2C"
Not recognized as dive computer
Found new device: "Extreme" "04:91:62:91:1A:B0"
"this could be a McLean Extreme"
Found new device: "Extreme" "LE:04:91:62:91:1A:B0"
"this could be a McLean Extreme"
Found new device: "iPhone de Brigitte" "AC:E4:B5:CB:7C:87"
Not recognized as dive computer
Found new device: "Media Nav Evolution" "04:4E:AF:A9:D5:3D"
Not recognized as dive computer
Paired = "Bose Mini SoundLink" "08:DF:1F:1F:8B:24"
Paired = "Renault R-Link" "00:21:3E:14:B3:2C"
Paired = "McLean Extreme" "04:91:62:91:1A:B0"
Paired = "McLean Extreme" "LE:04:91:62:91:1A:B0"
Paired = "iPhone de Brigitte" "AC:E4:B5:CB:7C:87"
Paired = "Media Nav Evolution" "04:4E:AF:A9:D5:3D"
compare "LE:04:91:62:91:1A:B0" "04:91:62:91:1A:B0"
compare "LE:04:91:62:91:1A:B0" "LE:04:91:62:91:1A:B0"
compare "LE:04:91:62:91:1A:B0" "04:91:62:91:1A:B0"
compare "LE:04:91:62:91:1A:B0" "LE:04:91:62:91:1A:B0"
"23.991: setting btName to McLean Extreme"
"23.991: DCDownloadThread started for McLean Extreme on LE:04:91:62:91:1A:B0 downloading only new dives"
Starting download from  BT
downloading only new dives
"23.995: Connecting to BLE device LE:04:91:62:91:1A:B0"
Creating Android Central/Client support for BTLE
qt_ble_open( 04:91:62:91:1A:B0 )
"LocalDeviceBroadcastReceiver::onReceive() - event: android.bluetooth.device.action.ACL_CONNECTED"
Connection updated: error: QLowEnergyController::NoError oldState: QLowEnergyController::ConnectingState newState: QLowEnergyController::ConnectedState
connected to the controller for device 04:91:62:91:1A:B0
Service discovery initiated
finished service discovery, start discovering characteristics
Found service "{00001800-0000-1000-8000-00805f9b34fb}"
 .. ignoring standard service
Found service "{0000180a-0000-1000-8000-00805f9b34fb}"
 .. ignoring standard service
Found service "{49535343-fe7d-4ae5-8fa9-9fafd205e455}"
starting service characteristics discovery
   .. service state changed to QLowEnergyService::DiscoveringServices
Discovery of "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" started
 .. done discovering services
Service "49535343-fe7d-4ae5-8fa9-9fafd205e455" discovered (start: 25 end: 41 ) QLowEnergyServicePrivate(0x768006f1c0)
   .. service state changed to QLowEnergyService::ServiceDiscovered
Found service "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" "Unknown Service"
   c: "{49535343-6daa-4d02-abf6-19569aca69fe}"
   c: "{49535343-aca3-481c-91ec-d85e28a60318}"
        d: "{00002902-0000-1000-8000-00805f9b34fb}"
   c: "{49535343-1e4d-4bd9-ba61-23c647249616}"
        d: "{00002902-0000-1000-8000-00805f9b34fb}"
   c: "{49535343-8841-43f4-a8d4-ecbe34729bb3}"
   c: "{49535343-026e-3a9b-954c-97daef17e26e}"
        d: "{00002902-0000-1000-8000-00805f9b34fb}"
   c: "{49535343-4c8a-39b3-2f49-511cff073b7e}"
        d: "{00002902-0000-1000-8000-00805f9b34fb}"
Using service "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" as preferred service
 .. enabling notifications
Using read characteristic "{49535343-1e4d-4bd9-ba61-23c647249616}"
now writing "0x0100" to the descriptor "{00002902-0000-1000-8000-00805f9b34fb}"
Write descriptor with handle  33 "0100" (service: "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" )
Descriptor write confirmation "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 33 "0100" QLowEnergyService::NoError
BLE write completed
"26.496: Connecting ..."
"26.598: Starting import ..."
QTime("09:39:51.177") packet SEND "7e0000000000ad4a210000"
Write characteristic with handle  31 "7e0000000000ad4a210000" (service: "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" , writeWithResponse: false , signed: false )
QTime("09:39:51.183") packet WAIT
Characteristic write confirmation "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 31 "7e0000000000ad4a210000" QLowEnergyService::NoError
BLEObject::characteristicWritten
Characteristic change notification "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 31 "7e0004000000ad000b01013d9c0000"
QTime("09:39:51.274") packet RECV "7e0004000000ad000b01013d9c0000"
QTime("09:39:51.275") packet READ "7e"
QTime("09:39:51.276") packet READ "0004000000ad"
QTime("09:39:51.280") packet READ "000b0101"
QTime("09:39:51.282") packet READ "3d9c0000"
QTime("09:39:51.583") packet SEND "7e00000000009132210000"
Write characteristic with handle  31 "7e00000000009132210000" (service: "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" , writeWithResponse: false , signed: false )
QTime("09:39:51.587") packet WAIT
Characteristic write confirmation "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 31 "7e00000000009132210000" QLowEnergyService::NoError
BLEObject::characteristicWritten
Characteristic change notification "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 31 "7e001a0000009130303246303033382d33313338353131362d333633383335333350b80000"
QTime("09:39:51.673") packet RECV "7e001a0000009130303246303033382d33313338353131362d333633383335333350b80000"
QTime("09:39:51.675") packet READ "7e"
QTime("09:39:51.676") packet READ "001a00000091"
QTime("09:39:51.677") packet READ "30303246303033382d33313338353131362d3336333833353333"
QTime("09:39:51.678") packet READ "50b80000"
"27.401: modèle=Extreme firmware=16845568 série=2644441183"
QTime("09:39:51.980") packet SEND "7e0000000000a050210000"
Write characteristic with handle  31 "7e0000000000a050210000" (service: "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" , writeWithResponse: false , signed: false )
QTime("09:39:51.989") packet WAIT
Characteristic write confirmation "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 31 "7e0000000000a050210000" QLowEnergyService::NoError
BLEObject::characteristicWritten
Characteristic change notification "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 31 "7e0097000000a0001500150024001523122d0c41320064000100288cb4070001010000e803b10302464600a00f40067805401f008de4f526000000006801b4000a003c000f0006040000fc0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005014d634c65616e2045787472ea6d650000000000000000000000000000000000"
QTime("09:39:52.078") packet RECV "7e0097000000a0001500150024001523122d0c41320064000100288cb4070001010000e803b10302464600a00f40067805401f008de4f526000000006801b4000a003c000f0006040000fc0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005014d634c65616e2045787472ea6d650000000000000000000000000000000000"
Characteristic change notification "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 31 "009d630000"
QTime("09:39:52.080") packet RECV "009d630000"
QTime("09:39:52.081") packet READ "7e"
QTime("09:39:52.082") packet READ "0097000000a0"
QTime("09:39:52.083") packet READ "001500150024001523122d0c41320064000100288cb4070001010000e803b10302464600a00f40067805401f008de4f526000000006801b4000a003c000f0006040000fc0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005014d634c65616e2045787472ea6d650000000000000000000000000000000000"
QTime("09:39:52.084") packet READ "00"
QTime("09:39:52.085") packet READ "9d630000"
QTime("09:39:52.386") packet SEND "7e0002000000a3000058840000"
Write characteristic with handle  31 "7e0002000000a3000058840000" (service: "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" , writeWithResponse: false , signed: false )
QTime("09:39:52.394") packet WAIT
Characteristic write confirmation "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 31 "7e0002000000a3000058840000" QLowEnergyService::NoError
BLEObject::characteristicWritten
Characteristic change notification "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 31 "7e005e000000a3001500150024001523122d0c41320064000100288cb4070001000000e803db0302464600a00f40067805401f00c501000050020000f8040000ad0500001414c6000d044813430fca91020000000100d901000056000000019d1a00005e00b8e300007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a3"
QTime("09:39:52.536") packet RECV "7e005e000000a3001500150024001523122d0c41320064000100288cb4070001000000e803db0302464600a00f40067805401f00c501000050020000f8040000ad0500001414c6000d044813430fca91020000000100d901000056000000019d1a00005e00b8e300007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a3"
Characteristic change notification "{49535343-fe7d-4ae5-8fa9-9fafd205e455}" 31 "00001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00"
QTime("09:39:52.537") packet RECV "00001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00007e0004000000a300001500e7bd00"
QTime("09:39:52.538") packet READ "7e"
QTime("09:39:52.543") packet READ "005e000000a3"
QTime("09:39:52.545") packet READ "001500150024001523122d0c41320064000100288cb4070001000000e803db0302464600a00f40067805401f00c501000050020000f8040000ad0500001414c6000d044813430fca91020000000100d901000056000000019d1a00005e00"
QTime("09:39:52.546") packet READ "b8e30000"
QTime("09:39:52.547") packet READ "7e"
QTime("09:39:52.548") packet READ "0004000000a3"
QTime("09:39:52.549") packet READ "00001500"
QTime("09:39:52.550") packet READ "e7bd0000"
QTime("09:39:52.551") packet READ "7e"
QTime("09:39:52.552") packet READ "0004000000a3"
QTime("09:39:52.553") packet READ "00001500"
QTime("09:39:52.553") packet READ "e7bd0000"
QTime("09:39:52.553") packet READ "7e"
QTime("09:39:52.554") packet READ "0004000000a3"
QTime("09:39:52.554") packet READ "00001500"
QTime("09:39:52.554") packet READ "e7bd0000"
QTime("09:39:52.555") packet READ "7e"
QTime("09:39:52.555") packet READ "0004000000a3"
QTime("09:39:52.556") packet READ "00001500"
QTime("09:39:52.557") packet READ "e7bd0000"
QTime("09:39:52.557") packet READ "7e"
QTime("09:39:52.558") packet READ "0004000000a3"
QTime("09:39:52.558") packet READ "00001500"
QTime("09:39:52.558") packet READ "e7bd0000"
QTime("09:39:52.559") packet READ "7e"
QTime("09:39:52.559") packet READ "0004000000a3"
QTime("09:39:52.559") packet READ "00001500"
QTime("09:39:52.559") packet READ "e7bd0000"
QTime("09:39:52.560") packet READ "7e"
QTime("09:39:52.560") packet READ "0004000000a3"
QTime("09:39:52.560") packet READ "00001500"
QTime("09:39:52.561") packet READ "e7bd0000"
turning off further BT debug output
"28.390: Plongée 1 : sam. 1 janv. 2000 0:07"
Deleting BLE object
Finishing download thread: 1 dives downloaded
"28.894: 1 dive downloaded"
"28.897: DCDownloadThread finished"
"37.880: Save downloaded dives that were selected"
"37.890: Record dives"
"38.015: showProgress: Save changes to local cache"
"38.024: showProgress: Préparation de la sauvegarde des données"
"38.061: showProgress: Début de la sauvegarde des données"
"38.069: showProgress: Début de la sauvegarde des plongées"
"38.079: showProgress: Cache local crée"
"38.121: pageStack switched to DiveList"
<Unknown File>:7: TypeError: Cannot read property 'contentX' of null
"38.221: download page -- looking for known BT/BLE device"
"38.230: switched to page Liste de plongée"
index 0 select changed to true
updated view.currentIndex
"51.336: pageStack switched to "
"51.341: switched to page Résumé de la plongée"
"51.341: endEditMode called with state view"
qrc:/org/kde/kirigami/templates/private/ScrollView.qml:113:9: QML ScrollBar: Binding loop detected for property "visible"
"85.270: pageStack switched to "
"85.271: switched to page À propos de Subsurface-mobile"
"85.272: endEditMode called with state view"



---------- libdivecomputer.log ----------
Subsurface: v4.9.6-113-g5719877c3030, built with libdivecomputer v0.7.0-devel-Subsurface-NG (090c26975bac0c36c8caef3995db506e8dafeb5c)
[0.000002] INFO: Open: transport=32
[0.001150] INFO: Configure: baudrate=115200, databits=8, parity=0, stopbits=0, flowcontrol=0
[0.001169] INFO: Timeout: value=1000
[0.001189] INFO: Sleep: value=100
[0.101570] INFO: Purge: direction=3
[0.103101] INFO: Sleep: value=300
[0.409572] INFO: Write: size=11, data=7E0000000000AD4A210000
[0.502938] INFO: Read: size=1, data=7E
[0.503857] INFO: Read: size=6, data=0004000000AD
[0.508130] INFO: Read: size=4, data=000B0101
[0.509153] INFO: Read: size=4, data=3D9C0000
[0.509201] INFO: Sleep: value=300
[0.813621] INFO: Write: size=11, data=7E00000000009132210000
[0.902575] INFO: Read: size=1, data=7E
[0.903658] INFO: Read: size=6, data=001A00000091
[0.904550] INFO: Read: size=26, data=30303246303033382D33313338353131362D3336333833353333
[0.905239] INFO: Read: size=4, data=50B80000
Event: model=0 (0x00000000), firmware=16845568 (0x01010b00), serial=2644441183 (0x9d9ef85f)
[0.906193] INFO: Sleep: value=300
[1.214693] INFO: Write: size=11, data=7E0000000000A050210000
[1.308427] INFO: Read: size=1, data=7E
[1.309561] INFO: Read: size=6, data=0097000000A0
[1.310579] INFO: Read: size=150, data=001500150024001523122D0C41320064000100288CB4070001010000E803B10302464600A00F40067805401F008DE4F526000000006801B4000A003C000F0006040000FC0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005014D634C65616E2045787472EA6D650000000000000000000000000000000000
[1.311432] INFO: Read: size=1, data=00
[1.312140] INFO: Read: size=4, data=9D630000
[1.312214] INFO: Sleep: value=300
[1.620720] INFO: Write: size=13, data=7E0002000000A3000058840000
[1.769791] INFO: Read: size=1, data=7E
[1.771220] INFO: Read: size=6, data=005E000000A3
[1.772410] INFO: Read: size=94, data=001500150024001523122D0C41320064000100288CB4070001000000E803DB0302464600A00F40067805401F00C501000050020000F8040000AD0500001414C6000D044813430FCA91020000000100D901000056000000019D1A00005E00
[1.773426] INFO: Read: size=4, data=B8E30000
[1.774437] INFO: Read: size=1, data=7E
[1.775176] INFO: Read: size=6, data=0004000000A3
[1.776397] INFO: Read: size=4, data=00001500
[1.777715] INFO: Read: size=4, data=E7BD0000
[1.778909] INFO: Read: size=1, data=7E
[1.779489] INFO: Read: size=6, data=0004000000A3
[1.779799] INFO: Read: size=4, data=00001500
[1.780080] INFO: Read: size=4, data=E7BD0000
[1.780380] INFO: Read: size=1, data=7E
[1.780662] INFO: Read: size=6, data=0004000000A3
[1.781096] INFO: Read: size=4, data=00001500
[1.781413] INFO: Read: size=4, data=E7BD0000
[1.781841] INFO: Read: size=1, data=7E
[1.782759] INFO: Read: size=6, data=0004000000A3
[1.783483] INFO: Read: size=4, data=00001500
[1.784018] INFO: Read: size=4, data=E7BD0000
[1.784344] INFO: Read: size=1, data=7E
[1.784611] INFO: Read: size=6, data=0004000000A3
[1.784868] INFO: Read: size=4, data=00001500
[1.785141] INFO: Read: size=4, data=E7BD0000
[1.785420] INFO: Read: size=1, data=7E
[1.785686] INFO: Read: size=6, data=0004000000A3
[1.785934] INFO: Read: size=4, data=00001500
[1.786180] INFO: Read: size=4, data=E7BD0000
[1.786429] INFO: Read: size=1, data=7E
[1.786899] INFO: Read: size=6, data=0004000000A3
[1.787447] INFO: Read: size=4, data=00001500
[1.788295] INFO: Read: size=4, data=E7BD0000
[1.788719] INFO: Read: size=1, data=7E
[1.788736] INFO: Read: size=6, data=0004000000A3
[1.788748] INFO: Read: size=4, data=00001500
[1.788759] INFO: Read: size=4, data=E7BD0000
[1.788774] INFO: Read: size=1, data=7E
[1.788785] INFO: Read: size=6, data=0004000000A3
[1.788796] INFO: Read: size=4, data=00001500
[1.788806] INFO: Read: size=4, data=E7BD0000
[1.788818] INFO: Read: size=1, data=7E
[1.788829] INFO: Read: size=6, data=0004000000A3
[1.788839] INFO: Read: size=4, data=00001500
[1.788851] INFO: Read: size=4, data=E7BD0000
[1.788862] INFO: Read: size=1, data=7E
[1.788873] INFO: Read: size=6, data=0004000000A3
[1.788884] INFO: Read: size=4, data=00001500
[1.788894] INFO: Read: size=4, data=E7BD0000
[1.788905] INFO: Read: size=1, data=7E
[1.789061] INFO: Read: size=6, data=0004000000A3
[1.789074] INFO: Read: size=4, data=00001500
[1.789084] INFO: Read: size=4, data=E7BD0000
[1.789096] INFO: Read: size=1, data=7E
[1.789107] INFO: Read: size=6, data=0004000000A3
[1.789118] INFO: Read: size=4, data=00001500
[1.789128] INFO: Read: size=4, data=E7BD0000
[1.789140] INFO: Read: size=1, data=7E
[1.789149] INFO: Read: size=6, data=0004000000A3
[1.789159] INFO: Read: size=4, data=00001500
[1.789167] INFO: Read: size=3, data=E7BD00
[1.800358] INFO: Read: size=1, data=00
[1.800398] INFO: Read: size=1, data=7E
[1.800410] INFO: Read: size=6, data=0004000000A3
[1.800424] INFO: Read: size=4, data=00001500
[1.800435] INFO: Read: size=4, data=E7BD0000
[1.800446] INFO: Read: size=1, data=7E
[1.800464] INFO: Read: size=6, data=0004000000A3
[1.800475] INFO: Read: size=4, data=00001500
[1.800486] INFO: Read: size=4, data=E7BD0000
[1.800497] INFO: Read: size=1, data=7E
[1.800508] INFO: Read: size=6, data=0004000000A3
[1.800518] INFO: Read: size=4, data=00001500
[1.800528] INFO: Read: size=4, data=E7BD0000
[1.800540] INFO: Read: size=1, data=7E
[1.800551] INFO: Read: size=6, data=0004000000A3
[1.800562] INFO: Read: size=4, data=00001500
[1.800574] INFO: Read: size=4, data=E7BD0000
[1.800585] INFO: Read: size=1, data=7E
[1.800596] INFO: Read: size=6, data=0004000000A3
[1.800606] INFO: Read: size=4, data=00001500
[1.800617] INFO: Read: size=4, data=E7BD0000
[1.800628] INFO: Read: size=1, data=7E
[1.800639] INFO: Read: size=6, data=0004000000A3
[1.800649] INFO: Read: size=4, data=00001500
[1.800660] INFO: Read: size=4, data=E7BD0000
[1.800671] INFO: Read: size=1, data=7E
[1.800682] INFO: Read: size=6, data=0004000000A3
[1.800693] INFO: Read: size=4, data=5D011400
[1.800704] INFO: Read: size=4, data=6B180000
[1.800715] INFO: Read: size=1, data=7E
[1.800725] INFO: Read: size=6, data=0004000000A3
[1.800736] INFO: Read: size=4, data=70011400
[1.800746] INFO: Read: size=4, data=9B5A0000
[1.800757] INFO: Read: size=1, data=7E
[1.800768] INFO: Read: size=6, data=0004000000A3
[1.800778] INFO: Read: size=4, data=67011400
[1.800788] INFO: Read: size=4, data=FB7B0000
[1.800800] INFO: Read: size=1, data=7E
[1.800811] INFO: Read: size=6, data=0004000000A3
[1.800821] INFO: Read: size=4, data=57011400
[1.800831] INFO: Read: size=4, data=CB180000
[1.800843] INFO: Read: size=1, data=7E
[1.800852] INFO: Read: size=5, data=0004000000
[1.800862] INFO: Read: size=1, data=A3
[1.800873] INFO: Read: size=4, data=70011400
[1.800883] INFO: Read: size=4, data=9B5A0000
[1.800895] INFO: Read: size=1, data=7E
[1.800905] INFO: Read: size=6, data=0004000000A3
[1.800916] INFO: Read: size=4, data=78011400
[1.800926] INFO: Read: size=4, data=1B5A0000
[1.800937] INFO: Read: size=1, data=7E
[1.800948] INFO: Read: size=6, data=0004000000A3
[1.800959] INFO: Read: size=4, data=77011400
[1.800969] INFO: Read: size=4, data=EB5A0000
[1.800980] INFO: Read: size=1, data=7E
[1.800991] INFO: Read: size=6, data=0004000000A3
[1.801001] INFO: Read: size=4, data=77011400
[1.801012] INFO: Read: size=4, data=EB5A0000
[1.801023] INFO: Read: size=1, data=7E
[1.801034] INFO: Read: size=6, data=0004000000A3
[1.801044] INFO: Read: size=4, data=76011400
[1.801054] INFO: Read: size=4, data=FB5A0000
[1.801066] INFO: Read: size=1, data=7E
[1.801076] INFO: Read: size=6, data=0004000000A3
[1.801087] INFO: Read: size=4, data=76011400
[1.801097] INFO: Read: size=4, data=FB5A0000
[1.801108] INFO: Read: size=1, data=7E
[1.801119] INFO: Read: size=6, data=0004000000A3
[1.801129] INFO: Read: size=4, data=67011400
[1.801140] INFO: Read: size=4, data=FB7B0000
[1.801152] INFO: Read: size=1, data=7E
[1.801162] INFO: Read: size=6, data=0004000000A3
[1.801173] INFO: Read: size=4, data=7D011400
[1.801183] INFO: Read: size=4, data=4B5A0000
[1.801195] INFO: Read: size=1, data=7E
[1.801206] INFO: Read: size=6, data=0004000000A3
[1.801217] INFO: Read: size=4, data=7D011400
[1.801227] INFO: Read: size=4, data=4B5A0000
[1.801238] INFO: Read: size=1, data=7E
[1.801248] INFO: Read: size=6, data=0004000000A3
[1.801259] INFO: Read: size=4, data=7D011400
[1.801498] INFO: Read: size=4, data=4B5A0000
[1.801515] INFO: Read: size=1, data=7E
[1.801526] INFO: Read: size=6, data=0004000000A3
[1.801536] INFO: Read: size=4, data=7D011400
[1.801545] INFO: Read: size=2, data=4B5A
[1.812016] INFO: Read: size=2, data=0000
[1.812057] INFO: Read: size=1, data=7E
[1.812070] INFO: Read: size=6, data=0004000000A3
[1.812084] INFO: Read: size=4, data=7D011400
[1.812095] INFO: Read: size=4, data=4B5A0000
[1.812107] INFO: Read: size=1, data=7E
[1.812118] INFO: Read: size=6, data=0004000000A3
[1.812130] INFO: Read: size=4, data=7D011400
[1.812140] INFO: Read: size=4, data=4B5A0000
[1.812152] INFO: Read: size=1, data=7E
[1.812163] INFO: Read: size=6, data=0004000000A3
[1.812173] INFO: Read: size=4, data=7D011400
[1.812183] INFO: Read: size=4, data=4B5A0000
[1.812195] INFO: Read: size=1, data=7E
[1.812206] INFO: Read: size=6, data=0004000000A3
[1.812218] INFO: Read: size=4, data=7D011400
[1.812228] INFO: Read: size=4, data=4B5A0000
[1.812240] INFO: Read: size=1, data=7E
[1.812250] INFO: Read: size=6, data=0004000000A3
[1.812261] INFO: Read: size=4, data=7D011400
[1.812272] INFO: Read: size=4, data=4B5A0000
[1.812283] INFO: Read: size=1, data=7E
[1.812294] INFO: Read: size=6, data=0004000000A3
[1.812305] INFO: Read: size=4, data=7D011400
[1.812316] INFO: Read: size=4, data=4B5A0000
[1.812327] INFO: Read: size=1, data=7E
[1.812337] INFO: Read: size=6, data=0004000000A3
[1.812349] INFO: Read: size=4, data=7D011400
[1.812359] INFO: Read: size=4, data=4B5A0000
[1.812371] INFO: Read: size=1, data=7E
[1.812383] INFO: Read: size=6, data=0004000000A3
[1.812393] INFO: Read: size=4, data=7D011400
[1.812404] INFO: Read: size=4, data=4B5A0000
[1.812415] INFO: Read: size=1, data=7E
[1.812426] INFO: Read: size=6, data=0004000000A3
[1.812436] INFO: Read: size=4, data=7D011400
[1.812446] INFO: Read: size=4, data=4B5A0000
[1.812458] INFO: Read: size=1, data=7E
[1.812469] INFO: Read: size=6, data=0004000000A3
[1.812479] INFO: Read: size=4, data=7D011400
[1.812489] INFO: Read: size=4, data=4B5A0000
[1.812500] INFO: Read: size=1, data=7E
[1.812509] INFO: Read: size=4, data=00040000
[1.844420] INFO: Read: size=2, data=00A3
[1.844449] INFO: Read: size=4, data=93011400
[1.844461] INFO: Read: size=4, data=4A940000
[1.844482] INFO: Read: size=1, data=7E
[1.844492] INFO: Read: size=6, data=0004000000A3
[1.844503] INFO: Read: size=4, data=93011400
[1.844514] INFO: Read: size=4, data=4A940000
[1.844526] INFO: Read: size=1, data=7E
[1.844537] INFO: Read: size=6, data=0004000000A3
[1.844548] INFO: Read: size=4, data=91011400
[1.844558] INFO: Read: size=4, data=6A940000
[1.844570] INFO: Read: size=1, data=7E
[1.844581] INFO: Read: size=6, data=0004000000A3
[1.844592] INFO: Read: size=4, data=83011400
[1.844603] INFO: Read: size=4, data=5AB50000
[1.844615] INFO: Read: size=1, data=7E
[1.844626] INFO: Read: size=6, data=0004000000A3
[1.844637] INFO: Read: size=4, data=7B011400
[1.844647] INFO: Read: size=4, data=2B5A0000
[1.844659] INFO: Read: size=1, data=7E
[1.844670] INFO: Read: size=6, data=0004000000A3
[1.844680] INFO: Read: size=4, data=8D011400
[1.844690] INFO: Read: size=4, data=BAB50000
[1.844702] INFO: Read: size=1, data=7E
[1.844713] INFO: Read: size=6, data=0004000000A3
[1.844723] INFO: Read: size=4, data=8D011400
[1.844734] INFO: Read: size=4, data=BAB50000
[1.844745] INFO: Read: size=1, data=7E
[1.844756] INFO: Read: size=6, data=0004000000A3
[1.844767] INFO: Read: size=4, data=5F011400
[1.844778] INFO: Read: size=4, data=4B180000
[1.844789] INFO: Read: size=1, data=7E
[1.844800] INFO: Read: size=6, data=0004000000A3
[1.844810] INFO: Read: size=4, data=5E011400
[1.844820] INFO: Read: size=4, data=5B180000
[1.844831] INFO: Read: size=1, data=7E
[1.844842] INFO: Read: size=6, data=0004000000A3
[1.844852] INFO: Read: size=4, data=6E011400
[1.844862] INFO: Read: size=4, data=6B7B0000
[1.844874] INFO: Read: size=1, data=7E
[1.844884] INFO: Read: size=6, data=0004000000A3
[1.844893] INFO: Read: size=4, data=6E011400
[1.844902] INFO: Read: size=1, data=6B
[1.844912] INFO: Read: size=3, data=7B0000
[1.844923] INFO: Read: size=1, data=7E
[1.845127] INFO: Read: size=6, data=0004000000A3
[1.845141] INFO: Read: size=4, data=6E011400
[1.845152] INFO: Read: size=4, data=6B7B0000
[1.845166] INFO: Read: size=1, data=7E
[1.845176] INFO: Read: size=6, data=0004000000A3
[1.845184] INFO: Read: size=3, data=6E0114
[1.845195] INFO: Read: size=1, data=00
[1.845205] INFO: Read: size=4, data=6B7B0000
[1.845217] INFO: Read: size=1, data=7E
[1.845227] INFO: Read: size=6, data=0004000000A3
[1.845238] INFO: Read: size=4, data=6E011400
[1.845248] INFO: Read: size=4, data=6B7B0000
[1.845260] INFO: Read: size=1, data=7E
[1.845271] INFO: Read: size=6, data=0004000000A3
[1.845281] INFO: Read: size=4, data=6E011400
[1.845292] INFO: Read: size=4, data=6B7B0000
[1.845303] INFO: Read: size=1, data=7E
[1.845313] INFO: Read: size=6, data=0004000000A3
[1.845324] INFO: Read: size=4, data=6E011400
[1.845335] INFO: Read: size=4, data=6B7B0000
[1.845346] INFO: Read: size=1, data=7E
[1.845357] INFO: Read: size=6, data=0004000000A3
[1.845368] INFO: Read: size=4, data=36011400
[1.845378] INFO: Read: size=4, data=BBDE0000
[1.845390] INFO: Read: size=1, data=7E
[1.845400] INFO: Read: size=6, data=0004000000A3
[1.845411] INFO: Read: size=4, data=1D011400
[1.845422] INFO: Read: size=4, data=2B9C0000
[1.845434] INFO: Read: size=1, data=7E
[1.845445] INFO: Read: size=6, data=0004000000A3
[1.845455] INFO: Read: size=4, data=E5001400
[1.845466] INFO: Read: size=4, data=52730000
[1.845477] INFO: Read: size=1, data=7E
[1.845488] INFO: Read: size=6, data=0004000000A3
[1.845498] INFO: Read: size=4, data=94001400
[1.845508] INFO: Read: size=4, data=32940000
[1.845519] INFO: Read: size=1, data=7E
[1.845530] INFO: Read: size=6, data=0004000000A3
[1.845540] INFO: Read: size=4, data=94001400
[1.845550] INFO: Read: size=4, data=32940000
[1.845562] INFO: Read: size=1, data=7E
[1.845572] INFO: Read: size=6, data=0004000000A3
[1.845582] INFO: Read: size=4, data=94001400
[1.845593] INFO: Read: size=4, data=32940000
[1.845604] INFO: Read: size=1, data=7E
[1.845614] INFO: Read: size=6, data=0004000000A3
[1.845624] INFO: Read: size=4, data=94001400
[1.845633] INFO: Read: size=4, data=32940000
[1.845644] INFO: Read: size=1, data=7E
[1.845653] INFO: Read: size=1, data=00
[1.856440] INFO: Read: size=5, data=04000000A3
[1.856491] INFO: Read: size=4, data=94001400
[1.856511] INFO: Read: size=4, data=32940000
[1.856544] INFO: Read: size=1, data=7E
[1.856564] INFO: Read: size=6, data=0004000000A3
[1.856583] INFO: Read: size=4, data=94001400
[1.856603] INFO: Read: size=4, data=32940000
[1.856623] INFO: Read: size=1, data=7E
[1.856642] INFO: Read: size=6, data=0004000000A3
[1.856661] INFO: Read: size=4, data=49001400
[1.856679] INFO: Read: size=4, data=33390000
[1.856699] INFO: Read: size=1, data=7E
[1.856810] INFO: Read: size=6, data=0004000000A3
[1.856832] INFO: Read: size=4, data=35001400
[1.856852] INFO: Read: size=4, data=83DE0000
[1.856874] INFO: Read: size=1, data=7E
[1.856892] INFO: Read: size=6, data=0004000000A3
[1.856911] INFO: Read: size=4, data=35001400
[1.856931] INFO: Read: size=4, data=83DE0000
[1.856952] INFO: Read: size=1, data=7E
[1.856970] INFO: Read: size=6, data=0004000000A3
[1.856989] INFO: Read: size=4, data=35001400
[1.857007] INFO: Read: size=4, data=83DE0000
[1.857028] INFO: Read: size=1, data=7E
[1.857047] INFO: Read: size=6, data=0004000000A3
[1.857065] INFO: Read: size=4, data=35001400
[1.857084] INFO: Read: size=4, data=83DE0000
[1.857105] INFO: Read: size=1, data=7E
[1.857123] INFO: Read: size=6, data=0004000000A3
[1.857141] INFO: Read: size=4, data=35001400
[1.857159] INFO: Read: size=4, data=83DE0000
[1.857180] INFO: Read: size=1, data=7E
[1.857199] INFO: Read: size=6, data=0004000000A3
[1.857217] INFO: Read: size=4, data=25001400
[1.857235] INFO: Read: size=4, data=93FF0000
[1.857255] INFO: Read: size=1, data=7E
[1.857274] INFO: Read: size=6, data=0004000000A3
[1.857293] INFO: Read: size=4, data=00001400
[1.857311] INFO: Read: size=4, data=E3BD0000
[1.857330] INFO: Read: size=1, data=7E
[1.857347] INFO: Read: size=6, data=0004000000A3
[1.857362] INFO: Read: size=2, data=0000
[1.889157] INFO: Read: size=2, data=1400
[1.889204] INFO: Read: size=4, data=E3BD0000
[1.889240] INFO: Read: size=1, data=7E
[1.889260] INFO: Read: size=6, data=0004000000A3
[1.889283] INFO: Read: size=4, data=00001400
[1.889302] INFO: Read: size=4, data=E3BD0000
[1.889324] INFO: Read: size=1, data=7E
[1.889344] INFO: Read: size=6, data=0004000000A3
[1.889365] INFO: Read: size=4, data=00001400
[1.889386] INFO: Read: size=4, data=E3BD0000
[1.889410] INFO: Read: size=1, data=7E
[1.889429] INFO: Read: size=6, data=0004000000A3
[1.889448] INFO: Read: size=4, data=00001400
[1.889466] INFO: Read: size=4, data=E3BD0000
[1.889486] INFO: Read: size=1, data=7E
[1.889506] INFO: Read: size=6, data=0004000000A3
[1.889525] INFO: Read: size=4, data=00001400
[1.889543] INFO: Read: size=4, data=E3BD0000
[1.889563] INFO: Read: size=1, data=7E
[1.889583] INFO: Read: size=6, data=0004000000A3
[1.889602] INFO: Read: size=4, data=00001400
[1.889620] INFO: Read: size=4, data=E3BD0000
[1.889640] INFO: Read: size=1, data=7E
[1.889659] INFO: Read: size=6, data=0004000000A3
[1.889678] INFO: Read: size=4, data=00001400
[1.889696] INFO: Read: size=4, data=E3BD0000
[1.889716] INFO: Read: size=1, data=7E
[1.889736] INFO: Read: size=6, data=0004000000A3
[1.889756] INFO: Read: size=4, data=00001400
[1.889774] INFO: Read: size=4, data=E3BD0000
[1.889794] INFO: Read: size=1, data=7E
[1.889813] INFO: Read: size=6, data=0004000000A3
[1.889831] INFO: Read: size=4, data=00001400
[1.889851] INFO: Read: size=4, data=E3BD0000
[1.889871] INFO: Read: size=1, data=7E
[1.889890] INFO: Read: size=6, data=0004000000A3
[1.889909] INFO: Read: size=4, data=00001400
[1.889927] INFO: Read: size=4, data=E3BD0000
[1.889947] INFO: Read: size=1, data=7E
[1.889966] INFO: Read: size=6, data=0004000000A3
[1.889983] INFO: Read: size=4, data=00001400
[1.889999] INFO: Read: size=4, data=E3BD0000
[1.890016] INFO: Read: size=1, data=7E
[1.890035] INFO: Read: size=6, data=0004000000A3
[1.890053] INFO: Read: size=4, data=00001400
[1.890071] INFO: Read: size=4, data=E3BD0000
[1.890091] INFO: Read: size=1, data=7E
[1.890109] INFO: Read: size=6, data=0004000000A3
[1.890127] INFO: Read: size=4, data=00001400
[1.890145] INFO: Read: size=4, data=E3BD0000
[1.890165] INFO: Read: size=1, data=7E
[1.890183] INFO: Read: size=6, data=0004000000A3
[1.890201] INFO: Read: size=4, data=00001400
[1.890219] INFO: Read: size=4, data=E3BD0000
[1.890238] INFO: Read: size=1, data=7E
[1.890257] INFO: Read: size=6, data=0004000000A3
[1.890275] INFO: Read: size=4, data=00001400
[1.890293] INFO: Read: size=4, data=E3BD0000
[1.890312] INFO: Read: size=1, data=7E
[1.890329] INFO: Read: size=6, data=0004000000A3
[1.890345] INFO: Read: size=4, data=00001400
[1.890360] INFO: Read: size=4, data=E3BD0000
[1.902916] INFO: Sleep: value=300
[2.209289] INFO: Write: size=11, data=7E0000000000AA44210000
---------- finish ----------


--
You received this message because you are subscribed to the Google Groups "Subsurface Divelog" group.
To unsubscribe from this group and stop receiving emails from it, send an email to subsurface-dive...@googlegroups.com.

Dirk Hohndel

unread,
Sep 17, 2020, 10:09:22 AM9/17/20
to subsurfac...@googlegroups.com, David Carron
That's great news.
Yes, this will make it into Subsurface-mobile 3.0.15 and Subsurface 4.9.7.

I'd say "a couple of days" for the former, about a week or so for the latter.

Assuming nothing else comes up.

/D
--
From my phone
Reply all
Reply to author
Forward
0 new messages