Add support for the Oceanic Pro Plus 3.

This commit is contained in:
Jef Driesen 2013-03-18 09:24:28 +01:00
parent 276be51a65
commit 4adac6f5c9
3 changed files with 7 additions and 4 deletions

View File

@ -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},

View File

@ -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[] = {

View File

@ -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];