[PATCH] Dump function for the OSTC3
Jef Driesen
jef at libdivecomputer.org
Mon Apr 27 08:18:08 PDT 2015
On 2015-04-25 18:33, Anton Lundin wrote:
> This adds a dump function for the ostc3 series computers. This function
> dumps the whole external eprom, that contains the dive-headers and the
> dive data.
>
> Signed-off-by: Anton Lundin <glance at acc.umu.se>
> ---
>
> I haven't seen the code for the simulator, but the relevant parts are
> that the dive headers are located at:
> ; 1st: 200000h-2000FFh
> ; 2nd: 201000h-2010FFh
> ; 3rd: 202000h-2020FFh
> ; 100: 264000h-2640FFh
> ; 256: 2FF000h-2FF0FFh
>
> And in those headers at byte 2 and 5 are the pointers to where in the
> memory
> the actual dive profile are, in little endian.
>
> It shouldn't be too hard to write simulator code for that.
The simulator code is located here (as pre-compiled binaries, a tarball,
or a patch series against libdivecomputer git):
http://libdivecomputer.org/simulator/
I don't mind applying your patch, but I wonder whether this is the
"right" kind of memory dump. For me, the main use case for memory dumps
is to be able to replay a download on the simulator. Now, one of the
nice features of the ostc3 protocol is that we don't need to know the
internal memory layout, and can just ask for the dives. With a raw dump
of the eeprom, we'll need all those details again in the simulator.
Certainly not impossible, but not ideal either.
An alternative that I have been thinking about, for those devices
without support for memory dumps, is to define a simple binary data
format that can store multiple dives. That way, the simulator can easily
read and send individual dives, all without needing any internal
knowledge.
Of course that's not mutually exclusive with your patch, so let's apply
it after a few modifications:
> + //unsigned int size = (RB_LOGBOOK_SIZE * RB_LOGBOOK_COUNT) +
> SZ_MEMORY;
Remove this uncommented code.
> + unsigned int size = 0x400000;
Can you add a macro? Something like SZ_EEPROM for example.
> + // packet size. Can be almost arbetary size.
> + unsigned int len = 4096;
Same here. You can re-use SZ_FIRMWARE_BLOCK here.
> + // Limit the packet size to the total size.
> + if (nbytes + len > size)
> + len = size - nbytes;
This isn't strictly necessary if the total size is a multiple of the
packet size.
Jef
More information about the devel
mailing list