From 1331db75cb6d20b14b27f444599ee1bce25987c8 Mon Sep 17 00:00:00 2001 From: Jef Driesen Date: Tue, 3 Sep 2013 22:01:12 +0200 Subject: [PATCH] Fix the memory layout for the Atom 3.x and VT4.x. The logbook ringbuffer appears to start at offset 0x400 instead of 0x240. Since these ringbuffer boundaries have to be taken taken into account only once the ringbuffer has been filled completely, this bug affects users with more than 200 dives only. Thus, no surprise it didn't get noticed earlier. --- src/oceanic_atom2.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/oceanic_atom2.c b/src/oceanic_atom2.c index e58ae34..a2106b3 100644 --- a/src/oceanic_atom2.c +++ b/src/oceanic_atom2.c @@ -112,10 +112,13 @@ static const oceanic_common_version_t tusa_zenair_version[] = { static const oceanic_common_version_t oceanic_oc1_version[] = { {"OCWATCH R\0\0 1024"}, - {"OCEANVT4 \0\0 1024"}, {"OC1WATCH \0\0 1024"}, - {"OCEATOM3 \0\0 1024"}, {"OCSWATCH \0\0 1024"}, +}; + +static const oceanic_common_version_t oceanic_atom3_version[] = { + {"OCEANVT4 \0\0 1024"}, + {"OCEATOM3 \0\0 1024"}, {"OCEAVT41 \0\0 1024"}, {"ATOM31 \0\0 1024"}, {"AERISAIR \0\0 1024"}, @@ -233,6 +236,19 @@ static const oceanic_common_layout_t oceanic_oc1_layout = { 1 /* pt_mode_logbook */ }; +static const oceanic_common_layout_t oceanic_atom3_layout = { + 0x20000, /* memsize */ + 0x0000, /* cf_devinfo */ + 0x0040, /* cf_pointers */ + 0x0400, /* rb_logbook_begin */ + 0x0A40, /* rb_logbook_end */ + 8, /* rb_logbook_entry_size */ + 0x0A40, /* rb_profile_begin */ + 0x1FE00, /* rb_profile_end */ + 0, /* pt_mode_global */ + 1 /* pt_mode_logbook */ +}; + static const oceanic_common_layout_t oceanic_veo1_layout = { 0x0400, /* memsize */ 0x0000, /* cf_devinfo */ @@ -433,6 +449,8 @@ oceanic_atom2_device_open (dc_device_t **out, dc_context_t *context, const char device->base.layout = &tusa_zenair_layout; } else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_oc1_version)) { device->base.layout = &oceanic_oc1_layout; + } else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_atom3_version)) { + device->base.layout = &oceanic_atom3_layout; } else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_veo1_version)) { device->base.layout = &oceanic_veo1_layout; } else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_reactpro_version)) {