diff --git a/src/oceanic_atom2.c b/src/oceanic_atom2.c index a8bd98b..e4561e0 100644 --- a/src/oceanic_atom2.c +++ b/src/oceanic_atom2.c @@ -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;