PC Protocol of Suunto Spyder

This document describes the transfer protocol and memory layout of these Suunto diving computers:

  • Suunto Sypder

Communication

The protocol uses 2400 8O1, which means 2400 baud with 8 bits, odd parity and 1 stop-bit. The check for the interfaces uses 2400 8N1, but it also works with 2400 8O1. This was the trivial part… But some lines have a special meaning with the interface!

The DTR line should always be set. It is used as a power supply for the interface.

RTS is a toggle for the direction of the half-duplex interface. To send a command to the interface, set RTS. When you await a command, clear RTS. Timing also seems to be critical! To make sure that all data is sent to the interface, before clearing RTS, I wait about 200ms. After clearing RTS, I also have to wait 400ms and use a 500ms timeout for receiving data.

The test for the existance of the interface is simple: the computer sends AT plus a CR ($41, $54, $0D) and awaits the same answer.

Transfer

The protocol for the Suunto Spyder, Vyper and Cobra are identical, but the memory layout of the Spyder is different. All data is send in packages to and from the computer. Every package is followed by a CRC for checksum reasons.

unsigned char checksum = 0x00;
for(int i=0; i<packageLen; ++i)
 checksum ^= package[i];
  • Read memory
    • to Spyder: 05 + addr_high + addr_low + count (1..32) + CRC
    • from Spyder: 05 + addr_high + addr_low + count (1..32) + n Bytes + CRC
  • Write memory
    • to Spyder: 06 + addr_high + addr_low + count (1..31)+ n Bytes + CRC
    • from Spyder: 06 + addr_high + addr_low + count (1..31) + CRC
  • Used before every ‘Write memory’ call
    • to Spyder: 07 + $a5 + CRC
    • from Spyder: 07 + $a5 + CRC
  • Get first dive profile
    • to Spyder: 08 + $a5 + CRC
    • from Spyder: 08 + count (1..32) + n Bytes + CRC (if more than 32 bytes needs to be transmitted, they are split in 32 byte packages)
  • Get next dive profile
    • to Spyder: 09 + $a5 + CRC
    • from Spyder: 09 + count (1..32) + n Bytes + CRC (if more than 32 bytes needs to be transmitted, they are split in 32 byte packages)

The DiveManager Software from Suunto does the following when reading data from a Spyder: – Check for correct computer – Read Memory ($24, 1) – Read the internal memory: – Read Memory ($1E, 14) – Read Memory ($2C, 32) – Read Memory ($53, 30) – Get first dive profile – Get next dive profile – … – If “next dive profile” returns a null package, the end of the log memory is reached.

Memory layout

Default name of the LOG file: ‘‘PROFILE.ACW’’

  offset |     format   |  testvalue  | content
$00-$15 MSB binary unused by the PC software, probably configuration values for the computer
$16-$17 MSB binary $0102 Firmware version of the Spyder (old ACW $0101, new ACW $0102)
$18-$1B MSB binary Serialnumber (new ACW, e.g. $0002.0F7F = 203.967) or ID no. (old ACW, e.g. $2E.61.122E = 469704654) of the Spyder
$1C-$1D MSB binary Ptr to the last $82 byte in the profile ringbuffer
$1E-$1F MSB binary $3F46 max. depth in ft * 128.0
$20-$21 MSB binary total dive time in minutes
$22-$23 MSB binary total number of dives
$24 MSB binary $14 interval (20s, 30s or 60s, Changing ist not allowed by DiveManager software! Why? Marketing?)
$25 MSB binary altitude and personal settings (height (0..2) + 3 * personal (0..2))
$26-$2B MSB binary ? ($0B,$03,$1F,$FF,$1F,$FF : identical on all Suunto computers?)
$2C-$49 ASCII ACW Diver personal information (“ACW Diver”, otherwise filled to the maximum length with spaces)
$4A-$4B MSB binary ? ($01, $01 : identical on all ACW?!? Version of the profile memory?)
$4C-$1FFF MSB binary ring buffer for the profile memory

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 $2000, it jumps back to $4C.

Format for one dive

offset format description
0 MSB binary unknown — air preassure at the end of the dive?
1 MSB binary temperature in degress celcius.
2… binary profile data from the end to the beginning of the dive,this means reverse order!
n MSB binary minutes at the beginning of the dive
n + 1 MSB binary hours at the beginning of the dive
n + 2 MSB binary day at the beginning of the dive
n + 3 MSB binary month at the beginning of the dive
n + 4 MSB binary year at the beginning of the dive (90..99 = 1990..1999, 00..89 = 2000..2089)
n + 5 MSB binary altitude and personal settings (height (0..2) + 3 * personal (0..2))
n + 6 MSB binary unknown — air preassure at the beginning of the dive?
n + 7 MSB binary interval (20s, 30s or 60s)
n + 8 MSB binary dive number in the Spyder (for repetitive dives)
n + 9 MSB binary hours of the surface interval
n + 10 MSB binary minutes of the surface interval

Profile information

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:

Byte Type Description
$7d Surfaced you have reached the surface while (or after) the dive
$7e ASC dive now is a decompression dive
$7f ERR decompression missed
$80 End end of the dive. The next byte is n + 1 in the format description 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)

Necessary conversions

meter = (int)(feet * 0.3048 * 10) / 10
psi = bar * 14.50377377
fahrenheit = celcius * 1.8 + 32

Altitude:

value meters feet
0 700m 2300ft
1 1500m 5000ft
2 2400m 8000ft

ATTN: the computers don’t round after the 2. digit, when calculating feet => meter! They cut it after the 2. digit. This results to the modified formula.

PC Protocol of Suunto Cobra, Vyper, Stinger, Mosquito, Vytec and Gekko

This document describes the transfer protocol and memory layout of these suunto diving computers:

  • Suunto Cobra
  • Suunto Vyper 1 & 2
  • Suunto Stinger
  • Suunto Mosquito
  • Suunto Vytec DS
  • Suunto Gekko

Communication

The protocol uses 2400 8O1, which means 2400 baud with 8 bits, odd parity and 1 stop-bit. The check for the interfaces uses 2400 8N1, but it also works with 2400 8O1. This was the trivial part… But some lines have a special meaning with the interface!

The DTR line should always be set. It is used as a power supply for the interface.

RTS is a toggle for the direction of the half-duplex interface. To send a command to the interface, set RTS. When you await a command, clear RTS. Timing also seems to be critical! To make sure that all data is sent to the interface, before clearing RTS, I wait about 200ms. After clearing RTS, I also have to wait 400ms and use a 500ms timeout for receiving data.

The test for the existance of the interface is simple: the computer sends AT plus a CR ($41, $54, $0D) and awaits the same answer.

Transfer

The protocol for the [[Suunto Spyder]], Vyper and Cobra are identical, but the memory layout of the Spyder is different. All data is send in packages to and from the computer. Every package is followed by a CRC for checksum reasons.

unsigned char checksum = 0x00;
for(int i=0; i<packageLen; ++i)
 checksum ^= package[i];
  • Read memory
    • to Cobra: 05 + addr_high + addr_low + count (1..32) + CRC
    • from Cobra: 05 + addr_high + addr_low + count (1..32) + n Bytes + CRC
  • Write memory
    • to Cobra: 06 + addr_high + addr_low + count (1..31)+ n Bytes + CRC
    • from Cobra: 06 + addr_high + addr_low + count (1..31) + CRC
  • Used before every ‘Write memory’ call
    • to Cobra: 07 + $a5 + CRC
    • from Cobra: 07 + $a5 + CRC
  • Get first dive profile
    • to Cobra: 08 + $a5 + CRC
    • from Cobra: 08 + count (1..32) + n Bytes + CRC (if more than 32 bytes needs to be transmitted, they are split in 32 byte packages)
  • Get next dive profile
    • to Cobra: 09 + $a5 + CRC
    • from Cobra: 09 + count (1..32) + n Bytes + CRC (if more than 32 bytes needs to be transmitted, they are split in 32 byte packages)

The DiveManager Software from Suunto does the following when reading data from a Cobra: – Check for correct computer – Read Memory ($24, 1) – Read the internal memory: – Read Memory ($1E, 14) – Read Memory ($2C, 32) – Read Memory ($53, 30) – Get first dive profile – Get next dive profile – … – If “next dive profile” returns a null package (count = 0), the end of the log memory is reached.

Memory layout

Default name of the LOG file: ‘‘PROFILE.VPR’’

  offset |     format   |  testvalue  | content
$00-$1D MSB binary unused by the PC software, probably configuration values for the computer
$1E-$1F MSB binary $6038 max. depth in ft * 128.0
$20-$21 MSB binary total dive time in minutes
$22-$23 MSB binary total number of dives
$24 MSB binary $0C Type of the computer ($03:Stinger, $04:Mosquito, $0A:new Vyper, $0C:Vyper or Cobra, $0B:Vytec, $0D:Gekko)
$25 MSB binary firmware version (30: Cobra, 33: Cobra, 21: Stinger, 15: Mosquito), the minor part is always .0.0
$26-$29 MSB binary $00005A38 serial number e.g. a Vyper: $00.01.04.41 (= 00010465)
$2A-$2B MSB binary $0000 unknown
$2C-$49 ASCII Vyper Diver personal information (“Vyper Diver”, “Cobra Diver”, “ACW Diver”, “Mosquito Diver” fill with zero bytes, if changed by the user filled to the maximum length with spaces)
$4A-$50 MSB binary $00..$00 unknown (only the first 2 bytes are read by DM software)
$51-$52 MSB binary Ptr to the last $82 byte in the profile ringbuffer (not read by DM software)
$53 MSB binary $14 interval (10s, 20s, 30s or 60s)
$54 MSB binary altitude and personal settings (height (0..2) + 3 * personal (0..2))
$55-$5B MSB binary unknown ($0E.05.1F.FF.1F.FF.01 : identical on all Suunto computers?)
$5C-$5D MSB binary $0000 max. freediving depth (only on Mosquito and Stinger) in ft * 128.0
$5E-$5F MSB binary $0000 total freediving time in minutes (only on Mosquito and Stinger)
$60 MSB binary $01 12/24 hour flag, 00 = 24 hours, 01 = 12 hours plus AM/PM
$61 MSB binary $00 unknown
$62 MSB binary $01 0 = imperial, 1 = metric
$63 MSB binary $01 Model (0: Air, 1:Nitrox/EAN, 2:Gauge; Mosquito, Stinger: Bit 3 set: Diving active, Bit 7 set: Free Diving active)
$64 MSB binary $8A Light (Bit 7: on; Bit 0..6: time in s)
$65 MSB binary $03 Bit 0: dive time alarm = on, Bit 1: dive depth alarm = on
$66-$67 MSB binary $0037 dive time for the alarm in minutes (max. 999 minutes, normal max. 4:59)
$68-$69 MSB binary $3138 depth for the alarm in ft * 128.0 (rounded to 0.5m or 1ft; valid: 0m, 3m–150m (Cobra, Vyper: 100m))
$6A-$70 MSB binary unknown ($46.00.00.00.00.00.00)
$71-$1FFF MSB binary ring buffer for the profile memory

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 $2000, it jumps back to $71.

Format for one dive

offset format description
0 MSB binary 00, with Nitrox: OLF % * 2 ($32 * 2 = 100 CNS), if bit 7 is set: OTU instead of CNS
1 MSB binary pressure at the end of the dive in bar / 2
2 MSB binary temperature at the end of the dive in degress celcius
3 MSB binary temperature at the max depth in degress celcius
4… binary profile data from the end to the beginning of the dive,this means reverse order!
n MSB binary minutes at the beginning of the dive
n + 1 MSB binary hours at the beginning of the dive
n + 2 MSB binary day at the beginning of the dive
n + 3 MSB binary month at the beginning of the dive
n + 4 MSB binary year at the beginning of the dive (90..99 = 1990..1999, 00..89 = 2000..2089)
n + 5 MSB binary temperature of the air in degress celcius
n + 6 MSB binary ? unused? (PO2??? 0=1.2, 1=1.3, 2=1.4, 3=1.5, 4=1.6???)
n + 7 MSB binary Oxygen in % (= Nitrox mode, air mode: 0); Bit 6 & 7 are ignored.
n + 8 MSB binary pressure at the beginning of the dive in bar / 2
n + 9 MSB binary altitude and personal settings (height (0..2) + 3 * personal (0..2)). Bit 6:Gauge active (on Stinger and Mosquito)
n + 10 MSB binary interval (10s, 20s, 30s or 60s)
n + 11 MSB binary dive number in the Vyper/Cobra (for repetitive dives)
n + 12 MSB binary hours of the surface interval
n + 13 MSB binary minutes of the surface interval

Profile information

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:

Byte Type Description
$79 unused
$7a Slow The diver ascended above dive depth limit. This symbol marks every interval in which the SLOW indicator appeared
$7b Attn/Violation Dive Attention Mark as described in the dive computer user manual
$7c Bookmark/Heading The diver pressed the PLAN button during this interval
$7d Surfaced The diver ascended above the minimum diving depth (1.2m) during this interval
$7e Deco A decompression ceiling first appeared during this interval. The dive computer’s ASC indicator appeared
$7f Ceiling The diver ascended above the decompression ceiling during this interval
$80 End end of the dive. The next byte is n + 1 in the format description of the dive
$81 Safety Stop The diver ascended above a mandatory safety stop ceiling during this interval
$82 End of data set after the last dive (written after the dive as a marker, so technically not profile information)
$83 Increased workload (not generated by the computers)
$84 unused
$85 Cold water (not generated by the computers)
$86 unused
$87 Gas change Vytec only: switched to a different gas. The following byte contains the percent of oxygen in that gas

Necessary conversions

meter = (int)(feet * 0.3048 * 10) / 10
psi = bar * 14.50377377
fahrenheit = celcius * 1.8 + 32

Altitude:

value meters feet
0 700m 2300ft
1 1500m 5000ft
2 2400m 8000ft

ATTN: the computers don’t round after the 2. digit, when calculating feet => meter! They cut it after the 2. digit. This results to the modified formula.

PC Protocol of Suunto EON/Solution/Vario

This document describes the transfer protocol and memory layout of these suunto diving computers:

  • Suunto Eon
  • Suunto Eon Lux
  • Suunto Solution Alpha
  • Suunto Solution Alpha Lux
  • Suunto Solution Nitrox
  • Suunto Vario (same as the Nitrox model)

The [[Suunto Solution]] is an older model with a different communication scheme.

Open Questions / Unknown things

  • Does more than the 3 bytes for the transmission exist? I checked all letters, but there may be others?!?
  • Any way to set the time of the EON? I don’t think so 🙁
  • Does the EON really has a 3 byte counter for the number of dives? Or is it only 2 bytes and the first byte has a special meaning?
  • What meanings have the other bytes in the header (32..255 with the exception of the serial number in 244..246)? I think 32..210 are unused, but the other contains constant (they never changed at my EON) data.
  • How does the PC software find out, where the first dive in the log starts? At the moment I get the $82 position from the header and search for next $80 (end of dive), skip the temperature and pressure byte and – viola – the first (oldest) dive.
  • information about the Nitrox model missing

Communication

The protocol uses 1200 8N2, which means 1200 baud with 8 bits, no parity and 2 stop-bits.

Transfer

You can send the following data to the EON:

  • ‘N’ ($4E) followed by 20 bytes, sets the owner name of the dive computer.
  • ‘T’ ($54) followed by 1 byte ($14, $1E, $3C, which are 20s, 30s and 60s) sets the data rate for the diving profile. Other values may be possible, so the profile values may be recorded with a 1s to a 255s interval – but they should not be used (information from the developer of the EON)
  • ‘P’ ($50) The computer sends $901 bytes (I call it the P-block) back to the computer.

Format of the P-block

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: c
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

Header of the P-block

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

Ring-Buffer of the P-block

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.

Format for one dive

offset format testvalue content
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.

Profile information

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:

Byte Type Description
$7d Surfaced you have reached the surface while (or after) the dive
$7e ASC dive now is a decompression dive
$7f ERR decompression missed
$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)

Necessary conversions

meter = (int)(feet * 0.3048 * 10) / 10
psi = bar * 14.50377377
fahrenheit = celcius * 1.8 + 32

Altitude:

value meters feet
0 700m 2300ft
1 1500m 5000ft
2 2400m 8000ft

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.

PC Protocol of Suunto EON/Solution/Vario

This document describes the transfer protocol and memory layout of these Suunto diving computers:

  • Suunto Eon
  • Suunto Eon Lux
  • Suunto Solution Alpha
  • Suunto Solution Alpha Lux
  • Suunto Solution Nitrox
  • Suunto Vario (same as the Nitrox model)

The [[Suunto Solution]] is an older model with a different communication scheme.

Open Questions / Unknown things

  • Does more than the 3 bytes for the transmission exist? I checked all letters, but there may be others?!?
  • Any way to set the time of the EON? I don’t think so 🙁
  • Does the EON really has a 3 byte counter for the number of dives? Or is it only 2 bytes and the first byte has a special meaning?
  • What meanings have the other bytes in the header (32..255 with the exception of the serial number in 244..246)? I think 32..210 are unused, but the other contains constant (they never changed at my EON) data.
  • How does the PC software find out, where the first dive in the log starts? At the moment I get the $82 position from the header and search for next $80 (end of dive), skip the temperature and pressure byte and – viola – the first (oldest) dive.
  • information about the Nitrox model missing

Communication

The protocol uses 1200 8N2, which means 1200 baud with 8 bits, no parity and 2 stop-bits.

Transfer

You can send the following data to the EON:

  • ‘N’ ($4E) followed by 20 bytes, sets the owner name of the dive computer.
  • ‘T’ ($54) followed by 1 byte ($14, $1E, $3C, which are 20s, 30s and 60s) sets the data rate for the diving profile. Other values may be possible, so the profile values may be recorded with a 1s to a 255s interval – but they should not be used (information from the developer of the EON)
  • ‘P’ ($50) The computer sends $901 bytes (I call it the P-block) back to the computer.

Format of the P-block

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: c
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

Header of the P-block

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

Ring-Buffer of the P-block

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.

Format for one dive

offset format testvalue content
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.

Profile information

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:

Byte Type Description
$7d Surfaced you have reached the surface while (or after) the dive
$7e ASC dive now is a decompression dive
$7f ERR decompression missed
$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)

Necessary conversions

meter = (int)(feet * 0.3048 * 10) / 10
psi = bar * 14.50377377
fahrenheit = celcius * 1.8 + 32

Altitude:

value meters feet
0 700m 2300ft
1 1500m 5000ft
2 2400m 8000ft

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.