Suunto DM5 Imports broken

Miika Turkia miika.turkia at gmail.com
Tue Jun 19 02:09:00 PDT 2018


Thanks, the fix seems to be working properly.

miika

On Sat, Jun 16, 2018 at 4:21 PM, Rainer Mohr <mail at divelogs.de> wrote:

> Sent via personal mail to Miika
>
> Rainer
>
> Am 16.06.18 um 02:15 schrieb Miika Turkia:
>
> I just sent a pull req that should take care of this. However, I do not
> possess test data with the new format. Could you Rainer send me a sample
> file? (The addition for support for the new format is quite trivial, but
> still I would like to test it out.)
>
> miika
>
> On Fri, Jun 15, 2018 at 12:32 AM, Miika Turkia <miika.turkia at gmail.com>
> wrote:
>
>> I will try to take a look into this within a few days
>>
>> miika
>>
>> > On 8 Jun 2018, at 0.25, Dirk Hohndel <dirk at hohndel.org> wrote:
>> >
>> > Miika is the wunderkind-slash-madman who maintains our importers and
>> deals with the XSLT...
>> >
>> > /D
>> >
>> >> On Jun 7, 2018, at 1:58 AM, Rainer Mohr <mail at divelogs.de> wrote:
>> >>
>> >> Gentlemen,
>> >>
>> >> Just noticed, that the Suunto DM5 Import is very broken as it can't
>> parse the profile data from recent and semi-recent DM5 files properly.
>> >> Suunto has once again changed their data structures in the profile
>> part of DM5. Noticed after quite a few broken profiles popped up on
>> divelogs.de
>> >> Now the 'SampleBlob' can contain not only blocks of 16, 23 and 26
>> Bytes, but new: 30 Bytes (detectable by first Byte being '5')
>> >>
>> >> Here is my PHP code for handling the profile parts from the SQLite
>> Data, hope someone can translate this into what you need, as I would be
>> useless at doing so:
>> >>
>> >> <?php
>> >> // $databaserow contains the data from one dive, queried from the
>> database
>> >> $data = $databaserow['SampleBlob'];
>> >> $samples = Array();
>> >>
>> >> // Depending on first Byte: Samples are in blocks of 23 or 16 or 26 or
>> 30 bytes
>> >> if (ord($data[0])==3) { // 23 Bytes per sample
>> >>    $data = substr($data,1,strlen($data));
>> >>    for($i = 0; $i < strlen($data)/23; ++$i) {
>> >>        $s = unpack("f",$data[$i*23+2].$dat
>> a[$i*23+3].$data[$i*23+4].$data[$i*23+5]);
>> >>        if ($s[1] < 200) $samples[] = round($s[1],1);
>> >>    }
>> >> } elseif (ord($data[0])==4) { // 26 Bytes per sample
>> >>    $data = substr($data,1,strlen($data));
>> >>    for($i = 0; $i < strlen($data)/26; ++$i) {
>> >>        $s = unpack("f",$data[$i*26+2].$dat
>> a[$i*26+3].$data[$i*26+4].$data[$i*26+5]);
>> >>        if ($s[1] < 200) $samples[] = round($s[1],1);
>> >>    }
>> >> } elseif (ord($data[0])==5) { // 30 Bytes per sample
>> >>    $data = substr($data,1,strlen($data));
>> >>    for($i = 0; $i < strlen($data)/30; ++$i) {
>> >>        $s = unpack("f",$data[$i*30+2].$dat
>> a[$i*30+3].$data[$i*30+4].$data[$i*30+5]);
>> >>        if ($s[1] < 200) $samples[] = round($s[1],1);
>> >>    }
>> >> } else { // 16 Bytes per sample
>> >>    for($i = 0; $i < strlen($data)/16; ++$i) {
>> >>        $s = unpack("f",$data[$i*16+3].$dat
>> a[$i*16+4].$data[$i*16+5].$data[$i*16+6]);
>> >>        if ($s[1] < 200) $samples[] = round($s[1],1);
>> >>    }
>> >> }
>> >>
>> >> // in case Dives from imported DM4 are available
>> >> if (count($samples)==0) {
>> >>    $data = $databaserow['ProfileBlob'];
>> >>    for($i = 0; $i < strlen($data)/4; ++$i) {
>> >>        $s = unpack("f",$data[$i*4].$data[$
>> i*4+1].$data[$i*4+2].$data[$i*4+3]);
>> >>        if ($s[1] < 200) $samples[] = round($s[1],1);
>> >>    }
>> >> }
>> >> ?>
>> >>
>> >> Rainer
>> >>
>> >>
>> >> _______________________________________________
>> >> subsurface mailing list
>> >> subsurface at subsurface-divelog.org
>> >> http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo
>> /subsurface
>> >
>>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.subsurface-divelog.org/pipermail/subsurface/attachments/20180619/6044c28d/attachment-0001.html>


More information about the subsurface mailing list