diff --git a/src/descriptor.c b/src/descriptor.c index c434721..73f9e62 100644 --- a/src/descriptor.c +++ b/src/descriptor.c @@ -239,6 +239,7 @@ static const dc_descriptor_t g_descriptors[] = { {"Aqualung", "i300C", DC_FAMILY_OCEANIC_ATOM2, 0x4648, DC_TRANSPORT_SERIAL, NULL}, {"Aqualung", "i100", DC_FAMILY_OCEANIC_ATOM2, 0x464E, DC_TRANSPORT_SERIAL, NULL}, {"Aqualung", "i770R", DC_FAMILY_OCEANIC_ATOM2, 0x4651, DC_TRANSPORT_SERIAL, NULL}, + {"Aqualung", "i550C", DC_FAMILY_OCEANIC_ATOM2, 0x4652, DC_TRANSPORT_SERIAL, NULL}, /* Mares Nemo */ {"Mares", "Nemo", DC_FAMILY_MARES_NEMO, 0, DC_TRANSPORT_SERIAL, NULL}, {"Mares", "Nemo Steel", DC_FAMILY_MARES_NEMO, 0, DC_TRANSPORT_SERIAL, NULL}, diff --git a/src/oceanic_atom2.c b/src/oceanic_atom2.c index 33947bd..8aed308 100644 --- a/src/oceanic_atom2.c +++ b/src/oceanic_atom2.c @@ -159,6 +159,7 @@ static const oceanic_common_version_t oceanic_oc1_version[] = { {"OC1WATCH \0\0 1024"}, {"OCSWATCH \0\0 1024"}, {"AQUAI550 \0\0 1024"}, + {"AQUA550C \0\0 1024"}, }; static const oceanic_common_version_t oceanic_oci_version[] = { diff --git a/src/oceanic_atom2_parser.c b/src/oceanic_atom2_parser.c index 6113b6f..da2ba0f 100644 --- a/src/oceanic_atom2_parser.c +++ b/src/oceanic_atom2_parser.c @@ -90,6 +90,7 @@ #define I300C 0x4648 #define I100 0x464E #define I770R 0x4651 +#define I550C 0x4652 #define NORMAL 0 #define GAUGE 1 @@ -182,6 +183,8 @@ oceanic_atom2_parser_create (dc_parser_t **out, dc_context_t *context, unsigned parser->headersize = 5 * PAGESIZE; } else if (model == PROPLUSX) { parser->headersize = 3 * PAGESIZE; + } else if (model == I550C) { + parser->headersize = 5 * PAGESIZE / 2; } parser->cached = 0; @@ -256,6 +259,7 @@ oceanic_atom2_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetim case A300AI: case OCI: case I550: + case I550C: case VISION: case XPAIR: datetime->year = ((p[5] & 0xE0) >> 5) + ((p[7] & 0xE0) >> 2) + 2000; @@ -888,7 +892,7 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_ } else { unsigned int sign; if (parser->model == DG03 || parser->model == PROPLUS3 || - parser->model == I550) + parser->model == I550 || parser->model == I550C) sign = (~data[offset + 5] & 0x04) >> 2; else if (parser->model == VOYAGER2G || parser->model == AMPHOS || parser->model == AMPHOSAIR || parser->model == ZENAIR) @@ -920,7 +924,8 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_ parser->model == ZENAIR ||parser->model == A300AI || parser->model == DG03 || parser->model == PROPLUS3 || parser->model == AMPHOSAIR || parser->model == I550 || - parser->model == VISION || parser->model == XPAIR) + parser->model == VISION || parser->model == XPAIR || + parser->model == I550C) pressure = (((data[offset + 0] & 0x03) << 8) + data[offset + 1]) * 5; else if (parser->model == TX1 || parser->model == A300CS || parser->model == VTX || parser->model == I750TC || @@ -987,7 +992,8 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_ decotime = array_uint16_le(data + offset + 6); have_deco = 1; } else if (parser->model == ATOM31 || parser->model == VISION || - parser->model == XPAIR || parser->model == I550) { + parser->model == XPAIR || parser->model == I550 || + parser->model == I550C) { decostop = (data[offset + 5] & 0xF0) >> 4; decotime = array_uint16_le(data + offset + 4) & 0x03FF; have_deco = 1; @@ -1024,7 +1030,7 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_ rbt = array_uint16_le(data + offset + 8) & 0x01FF; have_rbt = 1; } else if (parser->model == VISION || parser->model == XPAIR || - parser->model == I550) { + parser->model == I550 || parser->model == I550C) { rbt = array_uint16_le(data + offset + 6) & 0x03FF; have_rbt = 1; }