Add support for the Oceanic OCi.
The new Oceanic OCi appears to be almost identical to the already supported Oceanic OC1. The most important change is the different location for the logbook ringbuffer.
This commit is contained in:
parent
b96780ce75
commit
043fc4166c
@ -162,6 +162,7 @@ static const dc_descriptor_t g_descriptors[] = {
|
|||||||
{"Sherwood", "Wisdom 3", DC_FAMILY_OCEANIC_ATOM2, 0x4458},
|
{"Sherwood", "Wisdom 3", DC_FAMILY_OCEANIC_ATOM2, 0x4458},
|
||||||
{"Sherwood", "Amphos", DC_FAMILY_OCEANIC_ATOM2, 0x4545},
|
{"Sherwood", "Amphos", DC_FAMILY_OCEANIC_ATOM2, 0x4545},
|
||||||
{"Oceanic", "Pro Plus 3", DC_FAMILY_OCEANIC_ATOM2, 0x4548},
|
{"Oceanic", "Pro Plus 3", DC_FAMILY_OCEANIC_ATOM2, 0x4548},
|
||||||
|
{"Oceanic", "OCi", DC_FAMILY_OCEANIC_ATOM2, 0x454B},
|
||||||
/* Mares Nemo */
|
/* Mares Nemo */
|
||||||
{"Mares", "Nemo", DC_FAMILY_MARES_NEMO, 0},
|
{"Mares", "Nemo", DC_FAMILY_MARES_NEMO, 0},
|
||||||
{"Mares", "Nemo Steel", DC_FAMILY_MARES_NEMO, 0},
|
{"Mares", "Nemo Steel", DC_FAMILY_MARES_NEMO, 0},
|
||||||
|
|||||||
@ -117,6 +117,10 @@ static const oceanic_common_version_t oceanic_oc1_version[] = {
|
|||||||
{"OCSWATCH \0\0 1024"},
|
{"OCSWATCH \0\0 1024"},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const oceanic_common_version_t oceanic_oci_version[] = {
|
||||||
|
{"OCEANOCI \0\0 1024"},
|
||||||
|
};
|
||||||
|
|
||||||
static const oceanic_common_version_t oceanic_atom3_version[] = {
|
static const oceanic_common_version_t oceanic_atom3_version[] = {
|
||||||
{"OCEANVT4 \0\0 1024"},
|
{"OCEANVT4 \0\0 1024"},
|
||||||
{"OCEATOM3 \0\0 1024"},
|
{"OCEATOM3 \0\0 1024"},
|
||||||
@ -237,6 +241,19 @@ static const oceanic_common_layout_t oceanic_oc1_layout = {
|
|||||||
1 /* pt_mode_logbook */
|
1 /* pt_mode_logbook */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const oceanic_common_layout_t oceanic_oci_layout = {
|
||||||
|
0x20000, /* memsize */
|
||||||
|
0x0000, /* cf_devinfo */
|
||||||
|
0x0040, /* cf_pointers */
|
||||||
|
0x10C0, /* rb_logbook_begin */
|
||||||
|
0x1400, /* rb_logbook_end */
|
||||||
|
8, /* rb_logbook_entry_size */
|
||||||
|
0x1400, /* rb_profile_begin */
|
||||||
|
0x1FE00, /* rb_profile_end */
|
||||||
|
0, /* pt_mode_global */
|
||||||
|
1 /* pt_mode_logbook */
|
||||||
|
};
|
||||||
|
|
||||||
static const oceanic_common_layout_t oceanic_atom3_layout = {
|
static const oceanic_common_layout_t oceanic_atom3_layout = {
|
||||||
0x20000, /* memsize */
|
0x20000, /* memsize */
|
||||||
0x0000, /* cf_devinfo */
|
0x0000, /* cf_devinfo */
|
||||||
@ -450,6 +467,8 @@ oceanic_atom2_device_open (dc_device_t **out, dc_context_t *context, const char
|
|||||||
device->base.layout = &tusa_zenair_layout;
|
device->base.layout = &tusa_zenair_layout;
|
||||||
} else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_oc1_version)) {
|
} else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_oc1_version)) {
|
||||||
device->base.layout = &oceanic_oc1_layout;
|
device->base.layout = &oceanic_oc1_layout;
|
||||||
|
} else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_oci_version)) {
|
||||||
|
device->base.layout = &oceanic_oci_layout;
|
||||||
} else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_atom3_version)) {
|
} else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_atom3_version)) {
|
||||||
device->base.layout = &oceanic_atom3_layout;
|
device->base.layout = &oceanic_atom3_layout;
|
||||||
} else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_veo1_version)) {
|
} else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_veo1_version)) {
|
||||||
|
|||||||
@ -60,6 +60,7 @@
|
|||||||
#define A300AI 0x4457
|
#define A300AI 0x4457
|
||||||
#define AMPHOS 0x4545
|
#define AMPHOS 0x4545
|
||||||
#define PROPLUS3 0x4548
|
#define PROPLUS3 0x4548
|
||||||
|
#define OCI 0x454B
|
||||||
|
|
||||||
typedef struct oceanic_atom2_parser_t oceanic_atom2_parser_t;
|
typedef struct oceanic_atom2_parser_t oceanic_atom2_parser_t;
|
||||||
|
|
||||||
@ -168,6 +169,7 @@ oceanic_atom2_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetim
|
|||||||
case ATOM3:
|
case ATOM3:
|
||||||
case ATOM31:
|
case ATOM31:
|
||||||
case A300AI:
|
case A300AI:
|
||||||
|
case OCI:
|
||||||
datetime->year = ((p[5] & 0xE0) >> 5) + ((p[7] & 0xE0) >> 2) + 2000;
|
datetime->year = ((p[5] & 0xE0) >> 5) + ((p[7] & 0xE0) >> 2) + 2000;
|
||||||
datetime->month = (p[3] & 0x0F);
|
datetime->month = (p[3] & 0x0F);
|
||||||
datetime->day = ((p[0] & 0x80) >> 3) + ((p[3] & 0xF0) >> 4);
|
datetime->day = ((p[0] & 0x80) >> 3) + ((p[3] & 0xF0) >> 4);
|
||||||
@ -396,7 +398,8 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_
|
|||||||
}
|
}
|
||||||
|
|
||||||
unsigned int samplesize = PAGESIZE / 2;
|
unsigned int samplesize = PAGESIZE / 2;
|
||||||
if (parser->model == OC1A || parser->model == OC1B || parser->model == OC1C)
|
if (parser->model == OC1A || parser->model == OC1B ||
|
||||||
|
parser->model == OC1C || parser->model == OCI)
|
||||||
samplesize = PAGESIZE;
|
samplesize = PAGESIZE;
|
||||||
else if (parser->model == F10)
|
else if (parser->model == F10)
|
||||||
samplesize = 2;
|
samplesize = 2;
|
||||||
@ -506,7 +509,8 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_
|
|||||||
temperature = data[offset + 6];
|
temperature = data[offset + 6];
|
||||||
} else if (parser->model == GEO20 || parser->model == VEO20 ||
|
} else if (parser->model == GEO20 || parser->model == VEO20 ||
|
||||||
parser->model == VEO30 || parser->model == OC1A ||
|
parser->model == VEO30 || parser->model == OC1A ||
|
||||||
parser->model == OC1B || parser->model == OC1C) {
|
parser->model == OC1B || parser->model == OC1C ||
|
||||||
|
parser->model == OCI) {
|
||||||
temperature = data[offset + 3];
|
temperature = data[offset + 3];
|
||||||
} else if (parser->model == OCS) {
|
} else if (parser->model == OCS) {
|
||||||
temperature = data[offset + 1];
|
temperature = data[offset + 1];
|
||||||
@ -533,7 +537,8 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_
|
|||||||
|
|
||||||
// Tank Pressure (psi)
|
// Tank Pressure (psi)
|
||||||
if (have_pressure) {
|
if (have_pressure) {
|
||||||
if (parser->model == OC1A || parser->model == OC1B || parser->model == OC1C)
|
if (parser->model == OC1A || parser->model == OC1B ||
|
||||||
|
parser->model == OC1C || parser->model == OCI)
|
||||||
pressure = (data[offset + 10] + (data[offset + 11] << 8)) & 0x0FFF;
|
pressure = (data[offset + 10] + (data[offset + 11] << 8)) & 0x0FFF;
|
||||||
else if (parser->model == VT4 || parser->model == VT41||
|
else if (parser->model == VT4 || parser->model == VT41||
|
||||||
parser->model == ATOM3 || parser->model == ATOM31 ||
|
parser->model == ATOM3 || parser->model == ATOM31 ||
|
||||||
@ -551,7 +556,8 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_
|
|||||||
unsigned int depth;
|
unsigned int depth;
|
||||||
if (parser->model == GEO20 || parser->model == VEO20 ||
|
if (parser->model == GEO20 || parser->model == VEO20 ||
|
||||||
parser->model == VEO30 || parser->model == OC1A ||
|
parser->model == VEO30 || parser->model == OC1A ||
|
||||||
parser->model == OC1B || parser->model == OC1C)
|
parser->model == OC1B || parser->model == OC1C ||
|
||||||
|
parser->model == OCI)
|
||||||
depth = (data[offset + 4] + (data[offset + 5] << 8)) & 0x0FFF;
|
depth = (data[offset + 4] + (data[offset + 5] << 8)) & 0x0FFF;
|
||||||
else if (parser->model == ATOM1)
|
else if (parser->model == ATOM1)
|
||||||
depth = data[offset + 3] * 16;
|
depth = data[offset + 3] * 16;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user