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", "Amphos", DC_FAMILY_OCEANIC_ATOM2, 0x4545},
|
||||
{"Oceanic", "Pro Plus 3", DC_FAMILY_OCEANIC_ATOM2, 0x4548},
|
||||
{"Oceanic", "OCi", DC_FAMILY_OCEANIC_ATOM2, 0x454B},
|
||||
/* Mares Nemo */
|
||||
{"Mares", "Nemo", 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"},
|
||||
};
|
||||
|
||||
static const oceanic_common_version_t oceanic_oci_version[] = {
|
||||
{"OCEANOCI \0\0 1024"},
|
||||
};
|
||||
|
||||
static const oceanic_common_version_t oceanic_atom3_version[] = {
|
||||
{"OCEANVT4 \0\0 1024"},
|
||||
{"OCEATOM3 \0\0 1024"},
|
||||
@ -237,6 +241,19 @@ static const oceanic_common_layout_t oceanic_oc1_layout = {
|
||||
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 = {
|
||||
0x20000, /* memsize */
|
||||
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;
|
||||
} else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_oc1_version)) {
|
||||
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)) {
|
||||
device->base.layout = &oceanic_atom3_layout;
|
||||
} else if (OCEANIC_COMMON_MATCH (device->base.version, oceanic_veo1_version)) {
|
||||
|
||||
@ -60,6 +60,7 @@
|
||||
#define A300AI 0x4457
|
||||
#define AMPHOS 0x4545
|
||||
#define PROPLUS3 0x4548
|
||||
#define OCI 0x454B
|
||||
|
||||
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 ATOM31:
|
||||
case A300AI:
|
||||
case OCI:
|
||||
datetime->year = ((p[5] & 0xE0) >> 5) + ((p[7] & 0xE0) >> 2) + 2000;
|
||||
datetime->month = (p[3] & 0x0F);
|
||||
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;
|
||||
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;
|
||||
else if (parser->model == F10)
|
||||
samplesize = 2;
|
||||
@ -506,7 +509,8 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_
|
||||
temperature = data[offset + 6];
|
||||
} else if (parser->model == GEO20 || parser->model == VEO20 ||
|
||||
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];
|
||||
} else if (parser->model == OCS) {
|
||||
temperature = data[offset + 1];
|
||||
@ -533,7 +537,8 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_
|
||||
|
||||
// Tank Pressure (psi)
|
||||
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;
|
||||
else if (parser->model == VT4 || parser->model == VT41||
|
||||
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;
|
||||
if (parser->model == GEO20 || parser->model == VEO20 ||
|
||||
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;
|
||||
else if (parser->model == ATOM1)
|
||||
depth = data[offset + 3] * 16;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user