Hi,
thanks for your answer.
I have some good news:
I have found thaf each diving session is made by:
1) 4 byte header. The first two are the total size in bytes of the diving session
2) a sequence of "NSAMPLES" dives. Each dive is composed by a 14 bytes preamble (with dive time, surface time, max depth, ...) and a stream of exactly "divetime" 16-bit dive measurements.
3) an 80 bytes footer with the session overall data: date, time, temperature, max depth, ... I noticed that bytes 37 and 38 of this footer contain the TOTAL_DIVETIME, and that bytes 76 and 77 contain NSAMPLES.
So, to read backwards the diving session one could move back
HEADER_SIZE + NSAMPLES * SAMPLE_HEADER_SIZE + 2 * TOTAL_DIVETIME+FOOTER_SIZE bytes,
where
HEADER_SIZE=4
NSAMPLES = 16 bit value at -6 bytes from end of session
SAMPLE_HEADER_SIZE = 14
TOTAL_DIVETIME = 16 bit value at -44 bytes from end of session
FOOTER_SIZE = 80
At that address you will find the first item of the session data which is, by the way, exactly its size
Attaching here an archive with:
- a dump of my DC generated printing the "data[][]" and the "buffer[][]" variables in the mares_iconhd_extract_dives function (run.log.20150906)
- an annotated version of the above dump with my notes about the meanings of the data (run.log.20150906.annotated)
- the output.bin file generated by the "universal" utility
- a folder with the dump of the mares SW that I used to decode the dumps. They are all CSV files, with an ODS that I used to do some calculations.
The relevant sessions are DiveOrganizer_2015-08-31T10.08.00 (quite long) and DiveOrganizer_2015-08-10T18.56.00 (only 2 dives)
My weekend spare time is over and I still have to figure out how to fit this in the library :(
Ciao
G