January 1, 1998
This document describes the transfer protocol and memory layout of these suunto diving computers:
The [[Suunto Solution]] is an older model with a different communication scheme.
The protocol uses 1200 8N2, which means 1200 baud with 8 bits, no parity and 2 stop-bits.
You can send the following data to the EON:
The P-block has a $100 byte header and a $800 byte ring-buffer for the profile data plus a one byte checksum. The ring-buffer on a new interface only consists of $FF bytes.
The last byte after the P-block is a checksum:
unsigned char chk = 0x00; for(int i=0; i<0x900; ++i) chk += buf[i];
The default name of the LOG files are: * “PROFILE.EON” for the Suunto Eon * “PROFILE.SOA” for the Suunto Solution Alpha * “PROFILE.SNV” for the Suunto Solution Nitrox/Vario
offset | format | testvalue | content
———- | ————– | ———– | ———– | 0-2 | MSB binary | $00015E | number of dives made with the computer (here: 180; from the history). I am not sure, if the upper byte is used (I haven’t made 65536 dives yet :-) | | 3-4 | MSB binary | $0258 | divetime under water in minutes (here: 600; from the history) | | 5-6 | MSB binary | $3F46 | max. depth (here: $3F46 / 128.0 = 126.5 feet; from the history) | | 7-8 | MSB binary | $0100 | $900 - this value = offset after the last dive (here: $800) | | 9 | MSB binary | $3C | current profile interval (here: 60s) | | 10 | MSB binary | $18 | altitude settings (value / 32 = Altitude, here: $18 / 32 = 0, so A0) [bit 0: unknown (always = 0?), bit 1: nitrox, bit 2: unknown (always = 0?), bit 3: metric, bit 4: air (= EON)] | | 11 | MSB binary | $60 | current year - 1900 (here: 96 => 1996, 00 would be 2000) | | 12..31 | ASCII | “EON - Markus Fritze ” | 20 bytes string, that is filled with spaces. Not zero terminated! If the owner name is never set, it contains $FF..$FF | | 32..210 | binary | $FF | unused? | | 211..243 | binary | $?? | unknown | | 244..246 | BCD | $502159 | serial number of the computer (here: 502159) | | 247..255 | binary | $?? | unknown |
The ring-buffer is a stream of data, which ends at the position, that is marked in the header. At this position the computer starts writing the information from the next dive. If the write pointer reaches the value $900, it jumps back to $100.
|0||MSB binary||$05||surface interval (minutes)|
|1||MSB binary||$01||surface interval (hours) (here: 1:05)|
|2||MSB binary||$01||repetitive dive counter (here: the first dive). The counter resets to 1, when the computer turns off after a longer pause. Every dive before that is a repetitive dive and increments the counter.|
|3||MSB binary||$3C||profile interval for this dive (here: 60s), this is necessary, because the interval may be changed after every dive and the ring-buffer still contains information about dives with other profile intervals.|
|4||MSB binary||$38||altitude settings (value / 32 = Altitude, here: $18 / 32 = 0, so A0) – bit 0: unknown (always = 0?), bit 3: metric, bit 4: air (= EON)|
|5||MSB binary||$64||A solution alpha always transmits a 0. on nitrox: nitrogen level|
|6||BCD||$97||year (here: 1997). Year 2000 is $00|
|7||BCD||$01||month (here: 1 = January)|
|8||BCD||$31||day (here: 31)|
|9||BCD||$13||hour (here: 13 or 1pm)|
|10||BCD||$35||minute (here: 35)|
|11||… binary||…||profile data|
|n||MSB binary||$80||end of the dive marker|
|n + 1||MSB binary||$3C||temperature at the dive in degree celcius - 40 (here: 60 - 40 = 20 degree celcius)|
|n + 2||MSB binary||$19||tank preassure at the end of the dive in bar (here: 25 * 2 = 50bar) - A solution alpha always transmits a 0.|
The profile data is a stream of bytes. Every minute (or 30s or 20s - see the profile interval) a byte is recorded. This byte is the delta depth in ft to the last depth! E.g. you start your dive at a depth of 0 feet go down to 30ft in a minute, so the value is -30ft (because you go 30ft down) or $E2 in binary, if you then go up to 20ft, the next value will be +10ft (because you go 10ft up) or $0A in binary.
Some values have special meanings:
|$7d||Surfaced||you have reached the surface while (or after) the dive|
|$7e||ASC||dive now is a decompression dive|
|$80||End||end of the dive.|
|$81||Slow||Slow warning while the dive. If the dive ends with $7d8180 (Surfaced, Slow, End) it means, you finished the dive with a blinking SLOW warning in the display.|
|$82||End of data||set after the last dive (written after the dive as a marker, so technically not profile information)|
meter = (int)(feet * 0.3048 * 10) / 10 psi = bar * 14.50377377 fahrenheit = celcius * 1.8 + 32
ATTN: the computers (checked on the solution alpha) don’t round after the 2. digit, when calculating feet => meter! They cut it after the 2. digit. This results to the modified formula.