diff --git a/src/descriptor.c b/src/descriptor.c index 8f5e9eb..176f4e9 100644 --- a/src/descriptor.c +++ b/src/descriptor.c @@ -139,6 +139,7 @@ static const dc_descriptor_t g_descriptors[] = { {"Oceanic", "Atom 3.1", DC_FAMILY_OCEANIC_ATOM2, 0x4456}, {"Aeris", "A300 AI", DC_FAMILY_OCEANIC_ATOM2, 0x4457}, {"Sherwood", "Wisdom 3", DC_FAMILY_OCEANIC_ATOM2, 0x4458}, + {"Oceanic", "Pro Plus 3", DC_FAMILY_OCEANIC_ATOM2, 0x4548}, /* Mares Nemo */ {"Mares", "Nemo", DC_FAMILY_MARES_NEMO, 0}, {"Mares", "Nemo Excel", DC_FAMILY_MARES_NEMO, 17}, diff --git a/src/oceanic_atom2.c b/src/oceanic_atom2.c index 8c18864..41bb94a 100644 --- a/src/oceanic_atom2.c +++ b/src/oceanic_atom2.c @@ -87,6 +87,7 @@ static const oceanic_common_version_t oceanic_atom2b_version[] = { {"ELEMENT2 \0\0 512K"}, {"OCEVEO20 \0\0 512K"}, {"TUSAZEN \0\0 512K"}, + {"PROPLUS3 \0\0 512K"}, }; static const oceanic_common_version_t oceanic_atom2c_version[] = { diff --git a/src/oceanic_atom2_parser.c b/src/oceanic_atom2_parser.c index 01225e7..63ac3f3 100644 --- a/src/oceanic_atom2_parser.c +++ b/src/oceanic_atom2_parser.c @@ -53,6 +53,7 @@ #define EPICB 0x4453 #define ATOM31 0x4456 #define A300AI 0x4457 +#define PROPLUS3 0x4548 typedef struct oceanic_atom2_parser_t oceanic_atom2_parser_t; @@ -276,7 +277,7 @@ oceanic_atom2_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, uns if (parser->model == DATAMASK || parser->model == COMPUMASK || parser->model == GEO || parser->model == GEO20 || parser->model == VEO20 || parser->model == VEO30 || - parser->model == OCS) { + parser->model == OCS || parser->model == PROPLUS3) { headersize -= PAGESIZE; } else if (parser->model == VT4 || parser->model == VT41) { headersize += PAGESIZE; @@ -370,7 +371,7 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_ if (parser->model == DATAMASK || parser->model == COMPUMASK || parser->model == GEO || parser->model == GEO20 || parser->model == VEO20 || parser->model == VEO30 || - parser->model == OCS) { + parser->model == OCS || parser->model == PROPLUS3) { headersize -= PAGESIZE; } else if (parser->model == VT4 || parser->model == VT41) { headersize += PAGESIZE; @@ -523,7 +524,7 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_ temperature = ((data[offset + 7] & 0xF0) >> 4) | ((data[offset + 7] & 0x0C) << 2) | ((data[offset + 5] & 0x0C) << 4); } else { unsigned int sign; - if (parser->model == DG03) + if (parser->model == DG03 || parser->model == PROPLUS3) sign = (~data[offset + 5] & 0x04) >> 2; else if (parser->model == ATOM2 || parser->model == PROPLUS21 || parser->model == EPICA || parser->model == EPICB) @@ -546,7 +547,7 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_ else if (parser->model == VT4 || parser->model == VT41|| parser->model == ATOM3 || parser->model == ATOM31 || parser->model == ZENAIR ||parser->model == A300AI || - parser->model == DG03) + parser->model == DG03 || parser->model == PROPLUS3) pressure = (((data[offset + 0] & 0x03) << 8) + data[offset + 1]) * 5; else pressure -= data[offset + 1];