Adjust the profile ringbuffer to exclude the last 512 bytes.

For the devices in the list below, the last 512 bytes of the memory area
are not part of the profile ringbuffer. The real purpose of these bytes
is currently unknown.

Oceanic Atom 2.0 (firmware 3I or greater)
Oceanic Geo 2.0
Oceanic OC1
Oceanic ProPlus 2.1
Oceanic Veo 2.0
Oceanic Veo 3.0
Sherwood Insight
Sherwood Wisdom2
Tusa Element II
Tusa Zen
Tusa Zen Air

Some but not all of these devices also have an unreadable last page,
making the autodetection code even more complex.
This commit is contained in:
Jef Driesen 2011-03-31 21:29:48 +02:00
parent 417e7b3894
commit b288e82960

View File

@ -28,6 +28,7 @@
#include "oceanic_atom2.h"
#include "serial.h"
#include "utils.h"
#include "array.h"
#include "ringbuffer.h"
#include "checksum.h"
@ -63,15 +64,19 @@ static const device_backend_t oceanic_atom2_device_backend = {
oceanic_atom2_device_close /* close */
};
static const unsigned char aeris_epic_version[] = "2M EPIC r\0\0 512K";
static const unsigned char oceanic_proplus2_version[] = "PROPLUS2 \0\0 512K";
static const unsigned char oceanic_wisdom2_version[] = "WISDOM R\0\0 512K";
static const unsigned char oceanic_atom1_version[] = "ATOM rev\0\0 256K";
static const unsigned char oceanic_atom2_version[] = "2M ATOM r\0\0 512K";
static const unsigned char oceanic_epic_version[] = "2M EPIC r\0\0 512K";
static const unsigned char oceanic_geo2_version[] = "OCEGEO20 \0\0 512K";
static const unsigned char oceanic_oc1_version[] = "OCWATCH R\0\0 1024";
static const unsigned char tusa_zenair_version[] = "TUZENAIR \0\0 512K";
static const unsigned char oceanic_veo2_version[] = "OCEVEO20 \0\0 512K";
static const unsigned char oceanic_veo3_version[] = "OCEVEO30 \0\0 512K";
static const unsigned char sherwood_insight_version[] = "INSIGHT2 \0\0 512K";
static const unsigned char sherwood_wisdom2_version[] = "WISDOM R\0\0 512K";
static const unsigned char tusa_element2_version[] = "ELEMENT2 \0\0 512K";
static const unsigned char tusa_zen_version[] = "TUSAZEN \0\0 512K";
static const unsigned char tusa_zenair_version[] = "TUZENAIR \0\0 512K";
static const oceanic_common_layout_t oceanic_default_layout = {
0x10000, /* memsize */
@ -97,7 +102,31 @@ static const oceanic_common_layout_t oceanic_atom1_layout = {
0 /* pt_mode_logbook */
};
static const oceanic_common_layout_t oceanic_atom2_layout = {
static const oceanic_common_layout_t oceanic_atom2a_layout = {
0xFFF0, /* memsize */
0x0000, /* cf_devinfo */
0x0040, /* cf_pointers */
0x0240, /* rb_logbook_begin */
0x0A40, /* rb_logbook_end */
0x0A40, /* rb_profile_begin */
0xFE00, /* rb_profile_end */
0, /* pt_mode_global */
0 /* pt_mode_logbook */
};
static const oceanic_common_layout_t oceanic_atom2b_layout = {
0x10000, /* memsize */
0x0000, /* cf_devinfo */
0x0040, /* cf_pointers */
0x0240, /* rb_logbook_begin */
0x0A40, /* rb_logbook_end */
0x0A40, /* rb_profile_begin */
0xFE00, /* rb_profile_end */
0, /* pt_mode_global */
0 /* pt_mode_logbook */
};
static const oceanic_common_layout_t oceanic_atom2c_layout = {
0xFFF0, /* memsize */
0x0000, /* cf_devinfo */
0x0040, /* cf_pointers */
@ -128,7 +157,7 @@ static const oceanic_common_layout_t oceanic_oc1_layout = {
0x0240, /* rb_logbook_begin */
0x0A40, /* rb_logbook_end */
0x0A40, /* rb_profile_begin */
0x20000, /* rb_profile_end */
0x1FE00, /* rb_profile_end */
0, /* pt_mode_global */
1 /* pt_mode_logbook */
};
@ -325,15 +354,23 @@ oceanic_atom2_device_open (device_t **out, const char* name)
device->base.layout = &oceanic_oc1_layout;
else if (oceanic_common_match (tusa_zenair_version, device->version, sizeof (device->version)))
device->base.layout = &tusa_zenair_layout;
else if (oceanic_common_match (oceanic_atom2_version, device->version, sizeof (device->version)) ||
oceanic_common_match (oceanic_epic_version, device->version, sizeof (device->version)) ||
oceanic_common_match (oceanic_geo2_version, device->version, sizeof (device->version)) ||
oceanic_common_match (oceanic_proplus2_version, device->version, sizeof (device->version)) ||
oceanic_common_match (oceanic_wisdom2_version, device->version, sizeof (device->version)) ||
oceanic_common_match (sherwood_insight_version, device->version, sizeof (device->version)))
device->base.layout = &oceanic_atom2_layout;
else if (oceanic_common_match (oceanic_atom1_version, device->version, sizeof (device->version)))
device->base.layout = &oceanic_atom1_layout;
else if (oceanic_common_match (sherwood_insight_version, device->version, sizeof (device->version)) ||
oceanic_common_match (sherwood_wisdom2_version, device->version, sizeof (device->version)) ||
oceanic_common_match (oceanic_geo2_version, device->version, sizeof (device->version)) ||
oceanic_common_match (oceanic_proplus2_version, device->version, sizeof (device->version)) ||
(oceanic_common_match (oceanic_atom2_version, device->version, sizeof (device->version)) &&
array_uint16_be (device->version + 0x09) >= 0x3349))
device->base.layout = &oceanic_atom2a_layout;
else if (oceanic_common_match (oceanic_veo2_version, device->version, sizeof (device->version)) ||
oceanic_common_match (oceanic_veo3_version, device->version, sizeof (device->version)) ||
oceanic_common_match (tusa_element2_version, device->version, sizeof (device->version)) ||
oceanic_common_match (tusa_zen_version, device->version, sizeof (device->version)))
device->base.layout = &oceanic_atom2b_layout;
else if (oceanic_common_match (aeris_epic_version, device->version, sizeof (device->version)) ||
oceanic_common_match (oceanic_atom2_version, device->version, sizeof (device->version)))
device->base.layout = &oceanic_atom2c_layout;
else
device->base.layout = &oceanic_default_layout;