PC Protocol of Suunto D9

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

  • Suunto D6 (a D9 without the air integration)
  • Suunto D9

Suunto changed the protocol for these models – again. One reason is that the D9 is capable in recording not only the depth, but also pressure and temperature throughout the dive. The computers also have no longer just 8kb, but 32kb of memory for the profile information.

Communication

The interface is technically still a RS232 interface, but with a USB connector. With a device driver from the USB chipset vendor FTDI it will be recognized as a standard serial port.

The RS232 should be 9600 baud, 8N1.

Transfer

The protocol for the Suunto D9 is slightly different from other Suunto computers. The first thing is that the interface is USB only. But with the standard driver is behaves like a serial port (see above). These standard drivers are available for Mac OS X and Linux, so there should be no reason to go into too much detail.

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];

The package starts with a command byte, followed by the length of bytes for the parameters ($00 $03 = 3 Bytes), the actual parameters and the CRC at the end. Here are examples of the most common commands:

  • ReadMemory – reads memory from the Suunto
    • to Suunto: $05 + $00 + $03 + addr_high + addr_low + count (1..$78) + CRC
    • from Suunto: $05 + $00 + $03 + addr_high + addr_low + count (1..$78) + count Bytes + CRC
  • WriteMemory – changes the memory inside the Suunto (WARNING: this can damage your watch!!!)
    • to Suunto: $06 + $00 + $03 + addr_high + addr_low + count (1..$78) + CRC
    • from Suunto: $06 + $00 + $03 + addr_high + addr_low + count (1..$78) + count Bytes + CRC
  • GetVersion / check for connected computer
    • to Suunto: $0F + $00 + $00 + CRC
    • from Suunto: $0F + $00 + $00 + ID + HIGH + MID + LOW + CRC = Version HIGH.MID.LOW (ID)
  • ResetMaxDepth – resets maximum depth in the history to 0.0m
    • to Suunto: $20 + $00 + $00 + CRC
    • from Suunto: $20 + $00 + $00 + CRC

The DiveManager Software from Suunto does the following when reading data from a D6/D9: – GetVersion() – ReadMemory($0, $78) – ReadMemory($168, $78) (Reading the memory header) – ReadMemory($F0, $78)

After that the DiveManager reads the headers of all profiles first (by following the linked list in the headers), but always $78 bytes and later fills in the holes in the memory, if necessary. This allows the DiveManager to display a progress bar for the import.

To change the personal information, it does the following: – GetVersion() – Write($015E,$28) – Read($0168,$78) – GetVersion() – Read($0000,$78)

To reset the max. depth to zero it does the following: – GetVersion() – ResetMaxDepth() – Read($00F0,$78) – Read($0168,$78) – GetVersion() – Read($0000,$78)

Firmware versions

There have been two recalls of the Suunto D9 so far.

  • The first one was a hang of the D9, which is fixed in firmware version 1.2.8 and later (serial numbers 4xxxxxxxx – 450000699)
  • The second one (serial numbers below 62102582, an inacuracy of the clock in 0.6% of the cases) seemed to be fixed in firmware version 1.2.11 and later. This one also affects the Suunto D6 (serial numbers below 62103693)

Memory layout

The 32kb of memory is split into a $019A bytes header and the rest is a ring-buffer with the dive profiles. 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 $8000, it jumps back to $019A.

I am using the following parameter types:

parameter types Description
B 8 bit Byte
Bn n Bytes
W 16 bit LSB integer
An ASCII string, max. n Bytes long

All units inside the Suunto are metric (meter/centimeter, bar)!

Memory Header

 offset |     format   | testvalue    | content
$00 B $00 empty
$01-$02 A2 “D9” Type of the dive computer, “D9”, “D6” or “D4”
$03-$0A A8 “20050228” Manufacturing date (28 Feb 2005)
$0B-$12 A8 “00001204” Serial number?
$13-$15 B $00 $55 $00 ???
$16-$22 B .. $FF .. unused
$23-$26 B4 $50 $90 $12 $34 official serial number ($50901234) Production date: 2000+5 / 09 week, watch 234
$27 B $FF unused
$28 B $0E model ($0E=D9, $0F=D6 (can also be $0E?), $12=D4)
$29-$2A B2 $01,$02 Version (1.2.10 – well, were does the 10 come from?)
$2B-$2D B $04,$09,$82 ???
$2E B $82 XOR Checksum $28..$2D
$2F-$31 B .. $FF .. unused
$32-$33 B $01 $01 ???
$34-$35 B2 $00 $00 $0000 = metric, $0101 = imperial
$36 B $FF unused
$37-$3A B $83 $00 $82 $F2 ???
$3B B $0C XOR Checksum $32..$3A
$3C-$3F B $FE $00 $00 $00 ???
$40-$63 B .. $FF .. unused
$64-$6F B .. calibration data for sensors
$70 B $.. XOR Checksum $64..$6F
$71-$73 B .. $FF .. unused
$74-$7D B .. calibration data for sensors
$7E B $.. XOR Checksum $74..$7D
$7F-$83 B .. $FF .. unused
$84-$8D B .. calibration data for sensors
$8E B $.. XOR Checksum $84..$8D
$8F-$015D B .. $FF .. unused
$015E-$0185 A40 .. owner name (“Suunto Diver”), $00 terminated if short than 40 bytes
$0186-$0187 W $F010 max. depth ($10F0 = 4336 cm)
$0188-$0189 W $AB02 total dive time ($02AB = 683 minutes)
$018A-$018B W $0C00 total number of dives ($000C = 12)
$018C B $.. XOR Checksum $0186..$018B
$018D-$018F B .. $FF .. unused
$0190-$0191 W $0A $46 Ptr to the last dive in the ring-buffer (Offset $460A)
$0192-$0193 W $0C $00 Number of dives in the ring-buffer ($000C = 12)
$0194-$0195 W $7E $4B Ptr to behind the latest dive in the ring-buffer (Offset $4B7E)
$0196-$0197 W $9A $01 Ptr to the oldest dive in the ring-buffer (Offset $019A)
$0198-$0199 W $5C $0E checksum ??? (if changed SDM can no longer read the profiles)

Dive Profile Header

Every dive in the profile memory has a $4A bytes header.

offset format testvalue content
$00-$01 W $9A $01 Offset to previous dive ($019A – this is the very first)
$02-$03 W $CF $06 Offset to next dive ($06CF)
$04-$0C B .. ???
$0D-$0E W $F0 $10 max. depth ($10F0 = 4336 cm)
$0F-$10 W $1E $00 dive time ($001E = 30 minutes)
$11-$12 W .. if value is $FFFF, there is no pressure information for the dive
$13 B $03 OLF PCT (3%)
$14 B .. ???
$15 B $0A Date: hour (10 AM)
$16 B $24 Date: minutes (36)
$17 B $0E Date: seconds (14)
$18-$19 W $D5 $07 Date: year (2005)
$1A B $0C Date: month (12)
$1B B $0B Date: day (11)
$1C B $0A Sample recording interval (every 10 seconds)
$1D B $00 Gas model (0=Air, 1=Nitrox, 2=Gauge)
$1E B $01 repetitive dive number (1)
$1F B $00 Surface time (0 minutes)
$20 B $00 Surface time (0 hours)
$21 B $03 RGBM PCT (3%)
$22 B $00 Personal Setting (P0..P2)
$23 B $00 Altitude Setting (A0..A2)
$24 B .. ???
$25 B $20 O2 PCT (only if in Nitrox mode, 32%)
$26 B $15 O2 PCT 2 (only if in Nitrox mode, 21%)
$27 B $15 O2 PCT 3 (only if in Nitrox mode, 21%)
$28 B $00 ???
$29-$2A W $.. $.. PREVTPRESSURE_1
$2B-$2C W $.. $.. PREVTPRESSURE_2
$2D-$2E W $.. $.. PREVTPRESSURE_3
$2F-$30 W $.. $.. PREVTPRESSURE_4
$31-$32 W $.. $.. PREVTPRESSURE_5
$33-$34 W $.. $.. PREVTPRESSURE_6
$35-$36 W $.. $.. PREVTPRESSURE_7
$37-$38 W $.. $.. PREVTPRESSURE_8
$39-$3A W $.. $.. PREVTPRESSURE_9
$3B-$46 B .. ???
$47 B $05 Temperature recording interval (every 5 depth samples)
$48-$4B B .. ???
$4C-$4D W $4D $00 Offset to the first marker position in the profile

Dive Profile Data

The length of the profile data can be found by looking into the profile header: the difference between the offset of the next dive to the current offset minus the size of the header ($4A).

Warning: Remember that the data is stored in a ring-buffer! The next dive pointer might actually be smaller than the current dive pointer.

To parse the profile data, you start with a time of 0:00 minutes and read to LSB 16 bit values. The first value is the current depth in cm. The second value is the tank pressure in bar * 100. Before reading the next value you increment the time by the “Sample recording interval” (Header offset $1C). Every “Temperature recording interval” (Header offset $47) there is another byte following with the temperature in degrees celcius. You stop once you’ve read the beginning of the next dive.

But, there is another twist: the dive profile can contain events, which are encoded into the profile information. For this you need check for the “Offset to the first marker position” (Header offset $4C). The first offset into the dive profile is $0000, you increment it with every byte you’ve read from the profile (4 or 5 per sample, see above). If the marker is equal to the current profile position, the next byte is an event type. You have to read all events till you will get Event $01 “Next Event Marker”. After you’ve read this one, you can continue normal parsing till you hit the next marker position.

Event Type Parameter Function
$01 Next Event Marker WW set the position of the next event marker (1st: current position, 2nd: next position)
$02 Surfaced BB Reached Surface at current timestamp + 2nd byte: seconds (for a more exact value)
$03 Event BB Other dive related events (1st: type, 2nd: time offset like in “Surfaced”)
$04 Bookmark/Heading BBW Bookmark & Heading (1st:???, 2nd: time offset like in “Surfaced”, 3rd: heading * 4, if < 0: Bookmark instead)

The Dive Events from Event $03 are 7 bit values. If bit 7 is set, like in $8E which only seems to occur in that form, it means: Event has ended. So you can get a start and a stop time for one event.

Dive Event Description
$01 Mandatory Safety Stop
$04 Asc Warning
$06 Mandatory Safety Stop Ceiling Error
$07 ???
$09 Depth alarm
$0D Air Time Warning
$8E Rgbm Warning (End) (always before the first profile data at the beginning of the dive)

9 1/2 weeks in Australia 2002

In November/December 2002 I enjoyed 9 1/2 weeks traveling through Australia.

The trip was booked via http://www.kangaroo-tours.de. The Mike Ball expedition was booked via http://www.diversionOZ.com. Both are highly recommended by me!

Here are a bunch of pictures from the trip

The headlines mostly match the rental car tour name as booked via Kangaroo Tours.

Flight to Australia

Exploratory Dive Cruise

  • Nov 5 – Nov 12: Exploratory Dive Cruise into the Southern Coral Sea on the Mike Ball Spoilsport from/to Townsville

Daintree

Sunshine State Tour

South East Coast

Mountains & Rivers

Great Ocean Road & Wine Trail

Proud Mary Murray River Cruise

Kangaroo Island Self Drive Tour

Red Center self Drive Tour

Sydney and flight back

Velidhu, Nord Ari Atoll, Malediven

Velidhu
Velidhu
Unterkunft Velidhu Holiday Resport
Zeitraum Ende Juli 2000
Veranstalter Meyers Weltreisen u.v.a.
Ort Velidhu, Malediven

Allgemeines

Velidhu ist eine 3–4 Sterne Insel mit ca. 100 Zimmern. Der Bereich zwischen der Standbar, Rezeption und den zwei Speisesälen ist mit Betonfliesen und angelegten Wegen versehen (etwas was ich auf den Malediven gar nicht mag), der Rest der Insel besteht aus Sandwegen.

Die Gäste kommen aus allen möglichen Ländern: Deutschland, England, Italien, Japan, Österreich und natürlich der Schweiz, was ich als sehr angenehm empfinde.

Die Rezeption, Speisesäle und Bar sind ebenfalls gefließt, jedoch kann man überall auch barfuß gehen.

Unterkünfte

Es gibt auf der Insel zwei Zimmerkategorien: Standard und Wasser-Bungalows. Bei den Standard-Bungalows gibt es zudem zwei Typen: mit 1/4 Terrasse und welche mit “rundum” Terrasse. Wobei man diese beiden jedoch als gleichwertig bezeichnen kann.

Zimmer 1

Zimmer 2Zimmer 3

Achtung: auf keinem Zimmer ist ein Telefon vorhanden! Das macht es ziemlich schwierig z.B. mal eben bei Freunden durchzuklingeln (Hast Du das Tauchen vergessen? Ach, verschlafen! Kommst Du noch?) – man muß stets über die ganze Insel traben! Und wenn man seinen Wecker nicht dabei hat, dann wird es ganz schwierig: man kann sich zwar in ein Weckbuch an der Rezeption eintragen, so daß um die gewünschte Zeit ein Boy vorbeikommt und einem aus dem Bett klopft, aber das klappt leider nicht immer!

Die Wasserbungalows haben eine extra Sitzecke mit Glasfenster im Boden (beleuchtbar!), sowie eine große Terrasse (entweder zum Sonnenauf- oder zum Sonnenuntergang hin), ferner haben sie ein sehr schönes Bad mit riesiger Dusche und als Extras eine Kaffee- bzw. Teemaschine und eine Klimaanlage mit Fernbedienung. Leider wurden einige momentan renoviert, so daß die Bewohner schon ab 7:30 unter dem Lärm (Hämmern, Schleifen oder auch nur lautes Gelaber der Arbeiter) zu leiden hatten.

Die Standardbungalows sind schlichter ausgestattet, aber auch mit Klimaanlage versehen – wobei man bei einigen Bungalows diese nur ein- bzw. ausschalten kann; eine Regelung ist dort nicht vorgesehen.

Der Zimmerservice (Reinigung zweimal am Tag) ist unauffällig und sehr gut.

Die Küche

Es gibt morgens, mittags und abends ein recht großes Buffet, wobei es verschiedene Themenabende gibt (z.B. indische, chinesische oder italienische Küche). Das Essen ist gut und reichlich und besonders der Nachtisch ist richtig gut. Für eine Insel dieser Klasse gibt es beim Essen wirklich nichts auszusetzen.

Wetter (Ende Juli 2000)

Sehr durchwachsen: viel Regen, aber auch einige Tage mit blauem Himmel.

Tauchen

Website der Tauchbasis

Tauchbasis

Die Tauchbasis ist für mich schlicht die Beste Ihrer Klasse auf den Malediven: noch nirgends habe ich bessere und liebevollere gezeichnete Briefings gesehen (hier nochmal ein besonderen Gruß an den Tauchlehrer Michele – siehe auch Bild unten), bis auf ein oder zwei Ausnahmen wurden alle Tauchplätze – auch unter widrichsten Bedingungen (die Sichtweite unter Wasser betrug zeitweise gerade mal 5m!) – immer auf Anhieb gefunden und sogar die Strömungsvorhersagen stimmten! Die maximale Tauchgangsdauer beträgt 60 Minuten (Nachttauchgänge 45 Minuten), die maximale Tiefe 30m (wie es auf den Malediven eh generell Gesetz ist). Anfänger haben eine entsprechend geringere Maximaltiefe (20m). Nachttauchgänge haben ein Tiefenlimit von 15m. Tauchcomputer sind Pflicht, werden aber von der Basis kostenlos zur Verfügung gestellt! Ebenso ggf. eine Strömungsboje. Getaucht wird mit 10l bzw. 12l Alu-Flaschen – wahlweise DIN oder INT, auch hier: 12l Flaschen gibt es ohne Aufpreis! Nach dem obligatorischen Checkdive kann man als erfahrender Taucher mit seinem Buddy selbstständig tauchen, Hauptsache man ist einigermaßen pünktlich wieder auf dem Boot und hält sich an das 30m Limit. Die Tauchbasis notiert sich nach jedem Tauchgang die Maximaltiefe, die Tauchgangsdauer und die Restluftmenge in der Flasche (Nein, es werden keine Computer kontrolliert, man wird nach den Daten gefragt! Trotzdem habe ich nie erlebt, daß jemand total gesponnene Werte genannt hat – wozu auch?), diese werden zusammen mit dem Namen des Tauchplatzes in der Akte notiert. Wer also die (schlechte) Angewohnheit hat, sein Logbuch erst am letzten Tag zu führen, braucht die Informationen lediglich von dort abschreiben!

Velidhu - Tauchbasis Briefing
Velidhu – Tauchbasis Briefing

Die Flaschen und auch die Ausrüstung wird von Leela direkt zum Boot oder Jetty (für Hausriff-Tauchgänge) transportiert – nix ist mit Kisten-schleppen im Urlaub! Auch hier nochmal ein besonderes Kompliment an Leela: sehr hilfsbereit! Wer vorbeikommt möge ihm doch einige O-Ringe mitbringen, so was kann er immer gebrauchen. Er sorgt auch dafür, daß die 3 Spülbecken (eins für Automaten, Kameras und Lampen, eines für Jackets und eines für Anzüge) immer sauber und voll sind. Die Tauchbasis ist die einzigste in der Welt, die ich kenne, wo der Trockenraum nach Desinfektionsmittel anstatt nach – Verzeihung – Pisse riecht (weil im Becken für die Anzüge Desinfektionsmittel ist!). Die Kisten, welche man am Anfang des Urlaubs bekommt, sind übrigens – ebenfalls untypisch – hinreichend groß für die gesamte Ausrüstung…

Auch die Basisleitung (Barbara und Ihr Mann K-G) ist sehr zuvorkommend: Sonderwünsche werden – wann irgend möglich – berücksichtigt und auch wenn zu einem Spezial-Tauchgang (z.B. einer Ganztagestour nach Fish-Head bzw. zu den Hammerhaien im Rasdhu Atoll) mal nicht die geforderte Minimalanzahl von Tauchern zusammenkommt (z.B. nur 5 anstatt der erforderlichen 6) ist man flexibel! Hat man selten.

Bei dieser Tauchbasis macht das Tauchen Spaß, auch wenn der eine oder andere Tauchgang vielleicht einmal nicht so der Bringer war (Kuda Giri am Nachmittag bei schlechter Sicht…). Das wird dann am nächsten Tag wieder gut gemacht.

Hausriff

Das Hausriff ist ca. 80m von der Insel entfernt (über den Jetty direkt zu erreichen) und kaum einen Tauchgang wert: die Korallenbleiche hat auch hier voll zugeschlagen, d.h. zwar viele Fische (auch Adlerrochen und Haie), aber kaum lebende Korallen. Sprich: schnorcheln und Nacht-Tauchgänge: ja, ansonsten gehe ich lieber aufs Boot!

Tauchplätze

Die Tauchplätze werden, wie fast überall auf den Malediven üblich, 2x täglich angefahren (9 Uhr und 14:30 Uhr). Alle Tauchgänge werden von mindestens einem Tauchlehrer begleitet. Die Anfahrten zu den Tauchplätzen dauern zwischen 15 und 60 Minuten. Die Briefings sind sehr ausführlich und sehr gut (Strömung, Skizze vom Tauchplatz, Besonderheiten, Gefahren, u.s.w.).

Besonders zu empfehlende Tauchplätze sind

  • Maaya Thila – Der Grauhai-Tauchplatz auf den Malediven mit abertausenden von Fischen. Häufig Strömung! Auch ohne Grauhaie gibt es immer viel zu sehen (Schildkröten, Sepia, Riffhaie, Tunfische, u.v.a.m.)
  • Hafza Thila – kleines Thila mit nur wenig Strömung. Sehr viele Fische, aber auch Kleingetier. Unter den Korallenblöcken auf dem Riffdach findet sich fast alles (Haie, Rochen, Schildkröten, u.s.w.)

Banyan Tree, Malediven

http://www.banyantree.com/maldives/

 (obiges Bild ist vom Juli 2000)

Unterkunft Banyan Tree Maldives
Zeitraum Ende März 1998
Veranstalter SubAqua, Airtours, Meyers Weltreisen (Preise vergleichen!)
Ort Vabbinfaru, Malediven
Preis $720-$1530 pro Tag inkl. VP (je nach Villa und Saison)

Allgemeines


Banyan Tree ist eine 5-Sterne Luxusinsel einer asiatischen Hotelkette. Die kleine Insel ist ca. 200m mal 250m “groß”. Auf ihr befinden sich 48 Villen, die durch die kleine Insel recht dicht gedrängt sind. Jedoch wirkt die Insel größer. Man merkt die Größe immer nur dadurch, daß man nach spätestens 10 Minuten wieder am Ausgangsort angelangt ist – egal in welche Richtung man geht. Die Insel wird durch den sog. “Highway” von Süden nach Norden geteilt (an den sich direkt die beiden Jettys anschließen). Der Highway ist natürlich keine echte Straße, sondern nur ein Sandweg… Ein weiterer Weg führt im Kreis einmal durch die Insel – hinter den Garden Villen entlang.

Banyan Tree liegt direkt neben Ihuru und in Nachbarschaft zu Baros und Bandos. Wer zum Arzt muß, wird mit einem Schnellboot in die Klinik nach Bandos gebracht.

Banyan Tree befindet sich ca. 18km von Male bzw. dem Airport entfernt und ist 1995 neu eröffnet worden. Das alte Hotel wurde komplett abgerissen. Die Insel ist zwar nicht so “Robinson like” wie Soneva Fushi, aber trotzdem kein Vergleich zu Inseln wie Kurumba, Laguna Beach oder Kuda Huraa. Sie hat den Malediven typischen Stil erhalten, die Schuhe können zu Hause bleiben – nunja, ein paar Badelatschen sind für den 100m langen Bootssteg zu empfehlen: wenn die Sonne den ganzen Tag auf das dunkle Holz geschienen hat, kann man ihn nicht mehr betreten…

Durch die Stürme im Dezember 1997 hat die Insel auf der Ostseite (Villen 33–49) ziemlich gelitten. Selbst im März wurde bei Hochwasser immer noch kräftig Sand weggespült, so daß einige Villen schon mit der Holzterrasse über dem Wasser stehen. Die momentan notdürftige Befestigung mit Sandsäcken, sowie die freigespülten Fundamente des alten Hotels sehen jedenfalls nicht gut aus – aber was will man machen? Im Westen der Insel sammelt sich übrigens der Sand von der Ostseite. Der Strand dort ist seit Dezember bis zu 50m breit geworden! Im Mai 1998 will das Management den Sand wieder an die Ostseite pumpen lassen – es könnte dann also laut werden… Banyan Tree gibt momentan fast $200000 im Jahr für die Erhaltung der Insel durch Sandanspülungen aus. Das Befestigen der Insel mit Korallenblöcken ist übrigens inzwischen auf den Malediven verboten. Ich hatte die Villa 30 (BTW: sehr zu empfehlen).

Unterkünfte

Die Villen sind alle gleich. Sie unterscheiden sich lediglich in der Lage: Beach-Front-Villa bzw. Garden-Villa, wobei letzere in zweiter Reihe stehen und erstere direkt am Wasser bzw. Strand stehen.

Banyan Tree Villa

Die Villen selbst sind bisher das beste was ich auf den Malediven erlebt habe – mit Abstand! Einzig die Villen auf Soneva Fushi sind vergleichbar. Alle Villen haben einen nicht einsehbaren privaten Garten hinter der Villa, wo sich bei vier der Villen (drei Beach-Front-Villen, einer Garden-Villa) ein privater Jacuzzi (ein Whirlpool, ca. 1,75m x 1,75m groß) befindet. Es ist erwünscht Wäsche nur im Garten aufzuhängen: wegen der Optik… Kleidervorschriften gibt es auf der Insel allerdings nicht.

Die Villen betritt man durch den Garten, sie gleichen einem Schneckenhaus in dessen Mitte ein riesiges “King Size” Bett mit Moskitonetz und großen Ventilator darüber steht. Am Kopfende vom Bett befindet sich ein flacher Schrank, welcher u.a. die Zimmerbar enthält. Auf der rechten Seite – sofern man in einem fast runden Raum überhaupt von einer Seite sprechen kann – neben dem Eingang steht ein kleiner Schreibtisch mit Teekocher. Auf der linken Seite ist ein sehr gemütliches großes Sofa in die Ecke hinter dem Eingang zum Bad, welches sich auch ausgezeichnet für eine dritte Person als Bett eignet. Die Rückseite bzw. die Front zum Meer hin besteht aus drei großen Flügeltüren mit verstellbaren Lamellen. Vor den Türen befindet sich die Holzterrasse mit einem Tisch inkl. Sonnenschirm (ideal für das Frühstück), sowie zwei Liegen. Wer die Türen offen läßt, kann die Villa somit auch über die Terrasse betreten.

Im Badezimmer gleich rechts ist eine Art Kleiderschrank mit recht großem Safe. Zwei Waschbecken mit Spiegeln, sowie Naßrasierer, Schminktücher, Föhn, diverse Handtücher u.s.w. gehören ebenfalls zur Grundausstattung. Die Toilette befindet sich links, oberhalb der Dusche, welche 2 Stufen in den Boden eingelassen ist. Um es genau zu nehmen: die Villen liegen ca. 1/2m erhöht. Sieht jedenfalls sehr sehr edel aus. Vom Bad aus führte bei mir ebenfalls eine Flügeltür zum Garten, in dem sich noch zwei Liegestühle befinden.

Banyan Tree Villa Jacuzzi
Der Garten ist normalerweise auch ein solcher, bei den Jacuzzi-Villen ist er jedoch eine große Holzterrasse – ebenfalls 2 Stufen hoch. Die Jacuzzi Villa #30 (Beach-Front, direkt am von Booten nicht benutzten Sunset-Jetty im Norden) hat einen solchen und ist wohl die schönste Villa: ruhig gelegen mit tollem Blick auf den Ozean. Nebenbei funktioniert dort der Jacuzzi, die machen momentan wohl immer mal Probleme… weswegen man eine Jacuzzi Villa rechtzeitig vorbestellen sollte!

Wer das nötige Kleingeld hat ($800 pro Tag) kann auch die Präsidenten Villa (Nummer 43) buchen. Die Villa hat neben Fernseher, Video und Hifi-System (in den anderen Villen einzeln auch für $10 pro Tag zu mieten; Videoverleih ist kostenlos) auch eine Klimaanlage (Durch den geschicktem Einsatz der Lamellentüren ist allerdings nicht nötig). Dazu kommt natürlich ein privater Jacuzzi, sowie ein sehr großer Garten mit großem überdachtem Sitzbereich mit Sitzecke etc. Die Villa liegt allerdings an der momentan nicht so attraktiven (siehe oben) Ostseite.

Die Küche

Die Küche ist für ein Hotel dieser Kategorie eine Enttäuschung (Huhn unbedingt meiden!): teilweise ziemlich schwaches Essen; geringe Auswahl (zwei Hauptgerichte pro Abend); sehr lange Wartezeiten zwischen den 4 Gängen (Vorspeise, Suppe, Hauptspeise, Nachspeise). Wenn das Wetter schlecht ist, scheint mir das überdachte Restaurant auch zu klein zu sein, bei einer Wartezeit von bis zu 1/2h zwischen Suppe und Hauptspeise sitzen die Leute doch recht lange. Wie ich von einem anderen Gast gehört habe, hat der Leiter des Restaurants die Insel verlassen und die Lücke konnte durch den Chefkoch nicht geschlossen werden.

Das Frühstücksbüffet, sowie abendliche Büffets waren gut aber lange nicht so herausragend, wie z.B. auf Soneva Fushi. Die Insel ist nur mit Vollpension zu buchen, so daß keine Kosten außer für Getränke, das Tauchen, sowie das SPA (ausprobieren! Ist allerdings häufig ausgebucht) anfallen. Die Getränke sind teuer (großer Saft $4.50, frischer Orangensaft $6.25), zudem nicht immer verfügbar (weil z.B. keine Orangen verfügbar sind). Ich habe teilweise die Bestellung durch die Frage “Was habt ihr?” abgekürzen können. Eine große Enttäuschung für solch ein Hotel!

Transfer

Der Transfer vom Flughafen Hulule zum Hotel ist problemlos und schnell: direkt beim Terminal wird man in Empfang genommen und zu einem der Schnellboote des Hotels gebracht. Das bringt einem direkt in ca. 20–30 Minuten zur Insel. Wartezeit, weil andere Gäste mit dem nächsten Flieger ankommen, gibt es nicht – auf die wartet ein weiteres Boot. Während der Fahrt bekommt man ein kaltes Handtuch, sowie ein Wasser – ebenfalls ein netter Service.

Auf der Insel wird man von einem Resort Host in Empfang genommen, der neben dem üblichen Papierkram auch ein Foto von jedem Gast macht, welches kopiert wird und den Angestellten ermöglicht die Gäste zu identifizieren ohne sie ständig nach der Zimmernummer zu fragen. Ein ungewöhnliches (positives) Gefühl überall gleich erkannt zu werden (sei es an der Bar oder an der Tauchbasis; der erste Satz dort war: “Du bist also der Markus”…).

Der Resort Host bringt einem auch zur Villa und erklärt einem alle Dinge in der Villa, sowie z.B. die Essenszeiten und die möglichen Unternehmungen (Besuch von Male, Island-Hopping, Nachtfischen, Schnorcheltour, Hochseefischen, Rundflüge, u.s.w.). Das ergibt einen sehr positiven ersten Eindruck!

Die Abreise ist ebenfalls problemlos, meinen schweren Tauchrucksack hat jemand sogar bis zur Kontrolle vor dem Check-In getragen. Wow! Auch hier: keine überflüssigen Wartezeiten, man ist 2h vor Abflug am Flughafen.

Wetter (Ende März 1998)

Das Wetter war für die Jahreszeit normal: wunderschöne Tage – teilweise ohne irgendeine Wolke am Himmel. Lediglich an einem Tag hat es kurzzeitig etwas getropft. Das Meer war fast ständig so glatt, daß man sich drin spiegeln konnte! Trotzdem blies fast immer ein leichtes Lüftchen. Die Sonnenuntergänge waren häufig phantastisch: die Sonne verschwindet am Horizont, wobei man den Übergang von Wasser und Luft nicht erkennen kann: das Blau geht ineinander über. Genial!

Tauchen

Die Insel ist keine Taucherinsel im Malediven-Sinne. Obwohl die Insel zu 80% ausgebucht war, gab es pro Ausfahrt kaum mehr als 4–8 Taucher. Die meisten Leute nutzen die Insel einfach als Ort der Entspannung und Erholung.

Banyan Tree Tauchboot
Das Tauchdhoni ist ebenfalls einmalig: riesig – wohl doppelt so groß, wie die Standard-Dhonis; andere Inseln würden auf solch ein Dhoni bis zu 40 Taucher unterbringen. Die Ausrüstung wird von Gabi, der guten maledivischen Seele der Tauchbasis, auf und auch wieder vom Dhoni geschafft. Vor dem Tauchen bekommt man einen Becher Wasser, nach dem Tauchgang Tee, sowie einen dicken Bademantel gereicht. Das Dhoni hat sogar eine Toilette an Bord, ebenfalls ein dicker Pluspunkt! Dazu noch die Flaschenhalterungen, sowie die gute Sicherheitsausrüstung (erste Hilfe, Sauerstoff, Funk) und die Crew aus 3 Mann ergeben ein wirklich einmaliges Taucherlebnis.

Bei Ausfahrten zu entfernteren Tauchplätzen werden gerne gleich zwei Tauchplätze angefahren. Zwischendurch wird dann ein ebenfalls tolles Frühstücksbüffet auf dem Boot aufgebaut (mit diversen Brotsorten, Marmelade, Käse, Aufschnitt, Früchten, Säfte, Tee, Kaffee).

Es fällt mir wirklich nichts mehr ein, was man da noch verbessern kann!

Tauchbasis Banyan Tree Dive Center
Flaschen 12 Liter Alu; INT- und DIN Anschlüsse
Ausbildung SSI Instructor Center; auf Anfrage auch PADI möglich (4 Tauchlehrer: dt. Basisleitung, eine Japanerin, ein Mexikaner)
Sprachen in 6 Sprachen
Ausrüstung Zustand alt, aber OK. Lungenautomaten zu alt
Service herausragend, jeder Gast wird sehr persönlich behandelt; kein Massenbetrieb; perfekt
Preise 1 TG inkl. Flasche/Blei $45 (plus Bootsfahrt)
2–5 TG inkl. Flasche/Blei $39 (plus Bootsfahrt)
6–10 TG inkl. Flasche/Blei $35 (plus Bootsfahrt)
ab 11 TG inkl. Flasche/Blei $29 (plus Bootsfahrt)
Nightdive inkl. Lampe + $15
privater TG mit TL + $35
Fresh-Up $80
Resort Kurs $130
OWD $395 + $95 (Manual, etc.)
AOWD $270 + $70 (Manual, etc.)
RD $290 + $60 (Manual, etc.)
DM $750 + $250 (Manual, etc.)
1 Bootsfahrt $9
pers. Video $150

Der 1. TG ist ein Art Check-Dive. Die Limit für Tauchgänge liegt bei 30m und 60 Minuten. Ein Sicherheitsstopp auf 5m ist Pflicht! Dekotauchgänge sind nicht erlaubt. Wer mit Buddy ohne Tauchlehrer tauchen will, braucht einen Computer (Aladdin Sport wird vermietet).

Der persönliche Video scheint teuer ($150), aber es ist genial gut! Patricia (eine Französin) ist der “Insel Fotograf” bzw. Videofilmer. Bei ihr bekommt man neben Filmen auch Leihkameras für seine Tauchgänge und hilft auch, wenn mal etwas kaput gegangen ist. Sie dreht ein ganz ganz tolles persönliches Video, welches für ein tauchende Paar definitiv Pflicht ist! Das Video kann auch mit eigener Musik vertont werden. Ein Video außerhalb des Wassers ist natürlich auch möglich. Patricia arbeitet fast einen ganzen Tag an einem Video: morgens wird der Film gedreht, danach sitzt sie teilweise bis 20 Uhr abends am Schnitt und der Vertonung. Wenn man das und die tolle Qualität bedenkt, ist das Video ein Schnäppchen!

Hausriff

Das Hausriff ist ca. 100 m entfernt. Die Südseite ist zum Schnorcheln nicht so toll: man hat zwar Chance auf einige Haie, Rochen (gegen Abend ist die Lagune voll von Stachelrochen), Schildkröten, Zackenbarsche, etc. aber das kann nicht über den teilweise sehr schlechten Zustand der Korallen am Riff hinwegtäuschen. Auch hier hat der Sturm seine Spuren hinterlassen. Die Nordseite soll schöner sein. Bei wenig Strömung kann man um die halbe Insel herumschnorcheln.

Banyan Tree House Reef

Tauchen am Hausriff ist möglich, das Riff soll in der Tiefe auch schöner sein. Ich habe jedoch nicht am Hausriff getaucht.

Tauchplätze

Die Tauchplätze werden, wie fast überall auf den Malediven üblich, 2x täglich angefahren. Alle Tauchgänge werden von Tauchlehrern begleitet. Die Anfahrten zu den über 20 Tauchplätzen dauern zwischen 15 und 90 Minuten. Durch das große gemütliche Dhoni kann man die Zeit aber sehr angenehm überbrücken. Die Briefings sind ausführlich und gut (Strömung, Skizze vom Tauchplatz, Besonderheiten, Gefahren, u.s.w.). Die Tauchplätze in der Nähe von Male sind altbekannt und häufig nicht so herausragend, wie die weit entfernten. Trotzdem kann man dort gut tauchen.

Besonders zu empfehlende Tauchplätze sind

  • Washi Mas Thila – ein sehr schönes tiefes Thila mit abertausenden von Fischen und vielen Großfischen. Strömung!
  • Kuda Haa – kleines Thila mit Strömung. Sehr schöne Hart- und Weichkorallen, sehr viele Fische. Haie, Napoleons, etc.

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.