Merge branch 'ostc4'
This commit is contained in:
commit
f94aab3c8e
@ -65,7 +65,7 @@ dc_status_t
|
|||||||
hw_ostc_extract_dives (dc_device_t *device, const unsigned char data[], unsigned int size, dc_dive_callback_t callback, void *userdata);
|
hw_ostc_extract_dives (dc_device_t *device, const unsigned char data[], unsigned int size, dc_dive_callback_t callback, void *userdata);
|
||||||
|
|
||||||
dc_status_t
|
dc_status_t
|
||||||
hw_ostc_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int frog);
|
hw_ostc_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int hwos);
|
||||||
|
|
||||||
dc_status_t
|
dc_status_t
|
||||||
hw_ostc_device_fwupdate (dc_device_t *abstract, const char *filename);
|
hw_ostc_device_fwupdate (dc_device_t *abstract, const char *filename);
|
||||||
|
|||||||
@ -64,6 +64,9 @@ hw_ostc3_device_config_reset (dc_device_t *abstract);
|
|||||||
dc_status_t
|
dc_status_t
|
||||||
hw_ostc3_device_fwupdate (dc_device_t *abstract, const char *filename);
|
hw_ostc3_device_fwupdate (dc_device_t *abstract, const char *filename);
|
||||||
|
|
||||||
|
dc_status_t
|
||||||
|
hw_ostc3_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|||||||
@ -595,7 +595,11 @@ hw_ostc3_device_foreach (dc_device_t *abstract, dc_dive_callback_t callback, voi
|
|||||||
|
|
||||||
// Emit a device info event.
|
// Emit a device info event.
|
||||||
dc_event_devinfo_t devinfo;
|
dc_event_devinfo_t devinfo;
|
||||||
devinfo.firmware = array_uint16_be (id + 2);
|
if (device->hardware == OSTC4) {
|
||||||
|
devinfo.firmware = array_uint16_le (id + 2);
|
||||||
|
} else {
|
||||||
|
devinfo.firmware = array_uint16_be (id + 2);
|
||||||
|
}
|
||||||
devinfo.serial = array_uint16_le (id + 0);
|
devinfo.serial = array_uint16_le (id + 0);
|
||||||
if (device->hardware != UNKNOWN) {
|
if (device->hardware != UNKNOWN) {
|
||||||
devinfo.model = device->hardware;
|
devinfo.model = device->hardware;
|
||||||
|
|||||||
@ -59,6 +59,8 @@
|
|||||||
#define OSTC3_GAUGE 2
|
#define OSTC3_GAUGE 2
|
||||||
#define OSTC3_APNEA 3
|
#define OSTC3_APNEA 3
|
||||||
|
|
||||||
|
#define OSTC4 0x3B
|
||||||
|
|
||||||
typedef struct hw_ostc_sample_info_t {
|
typedef struct hw_ostc_sample_info_t {
|
||||||
unsigned int type;
|
unsigned int type;
|
||||||
unsigned int divisor;
|
unsigned int divisor;
|
||||||
@ -74,6 +76,7 @@ typedef struct hw_ostc_layout_t {
|
|||||||
unsigned int salinity;
|
unsigned int salinity;
|
||||||
unsigned int duration;
|
unsigned int duration;
|
||||||
unsigned int temperature;
|
unsigned int temperature;
|
||||||
|
unsigned int firmware;
|
||||||
} hw_ostc_layout_t;
|
} hw_ostc_layout_t;
|
||||||
|
|
||||||
typedef struct hw_ostc_gasmix_t {
|
typedef struct hw_ostc_gasmix_t {
|
||||||
@ -83,7 +86,8 @@ typedef struct hw_ostc_gasmix_t {
|
|||||||
|
|
||||||
typedef struct hw_ostc_parser_t {
|
typedef struct hw_ostc_parser_t {
|
||||||
dc_parser_t base;
|
dc_parser_t base;
|
||||||
unsigned int frog;
|
unsigned int hwos;
|
||||||
|
unsigned int model;
|
||||||
// Cached fields.
|
// Cached fields.
|
||||||
unsigned int cached;
|
unsigned int cached;
|
||||||
unsigned int version;
|
unsigned int version;
|
||||||
@ -119,6 +123,7 @@ static const hw_ostc_layout_t hw_ostc_layout_ostc = {
|
|||||||
43, /* salinity */
|
43, /* salinity */
|
||||||
47, /* duration */
|
47, /* duration */
|
||||||
13, /* temperature */
|
13, /* temperature */
|
||||||
|
32, /* firmware */
|
||||||
};
|
};
|
||||||
|
|
||||||
static const hw_ostc_layout_t hw_ostc_layout_frog = {
|
static const hw_ostc_layout_t hw_ostc_layout_frog = {
|
||||||
@ -130,6 +135,7 @@ static const hw_ostc_layout_t hw_ostc_layout_frog = {
|
|||||||
43, /* salinity */
|
43, /* salinity */
|
||||||
47, /* duration */
|
47, /* duration */
|
||||||
19, /* temperature */
|
19, /* temperature */
|
||||||
|
34, /* firmware */
|
||||||
};
|
};
|
||||||
|
|
||||||
static const hw_ostc_layout_t hw_ostc_layout_ostc3 = {
|
static const hw_ostc_layout_t hw_ostc_layout_ostc3 = {
|
||||||
@ -141,6 +147,7 @@ static const hw_ostc_layout_t hw_ostc_layout_ostc3 = {
|
|||||||
70, /* salinity */
|
70, /* salinity */
|
||||||
75, /* duration */
|
75, /* duration */
|
||||||
22, /* temperature */
|
22, /* temperature */
|
||||||
|
48, /* firmware */
|
||||||
};
|
};
|
||||||
|
|
||||||
static unsigned int
|
static unsigned int
|
||||||
@ -181,7 +188,7 @@ hw_ostc_parser_cache (hw_ostc_parser_t *parser)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check the profile version
|
// Check the profile version
|
||||||
unsigned int version = data[parser->frog ? 8 : 2];
|
unsigned int version = data[parser->hwos ? 8 : 2];
|
||||||
const hw_ostc_layout_t *layout = NULL;
|
const hw_ostc_layout_t *layout = NULL;
|
||||||
unsigned int header = 0;
|
unsigned int header = 0;
|
||||||
switch (version) {
|
switch (version) {
|
||||||
@ -267,7 +274,7 @@ hw_ostc_parser_cache (hw_ostc_parser_t *parser)
|
|||||||
}
|
}
|
||||||
|
|
||||||
dc_status_t
|
dc_status_t
|
||||||
hw_ostc_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int frog)
|
hw_ostc_parser_create_internal (dc_parser_t **out, dc_context_t *context, unsigned int hwos, unsigned int model)
|
||||||
{
|
{
|
||||||
hw_ostc_parser_t *parser = NULL;
|
hw_ostc_parser_t *parser = NULL;
|
||||||
|
|
||||||
@ -282,7 +289,8 @@ hw_ostc_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int fr
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set the default values.
|
// Set the default values.
|
||||||
parser->frog = frog;
|
parser->hwos = hwos;
|
||||||
|
parser->model = model;
|
||||||
parser->cached = 0;
|
parser->cached = 0;
|
||||||
parser->version = 0;
|
parser->version = 0;
|
||||||
parser->header = 0;
|
parser->header = 0;
|
||||||
@ -301,6 +309,18 @@ hw_ostc_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int fr
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
dc_status_t
|
||||||
|
hw_ostc_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int hwos)
|
||||||
|
{
|
||||||
|
return hw_ostc_parser_create_internal (out, context, hwos, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
dc_status_t
|
||||||
|
hw_ostc3_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model)
|
||||||
|
{
|
||||||
|
return hw_ostc_parser_create_internal (out, context, 1, model);
|
||||||
|
}
|
||||||
|
|
||||||
static dc_status_t
|
static dc_status_t
|
||||||
hw_ostc_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size)
|
hw_ostc_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size)
|
||||||
{
|
{
|
||||||
@ -589,6 +609,14 @@ hw_ostc_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t call
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get the firmware version.
|
||||||
|
unsigned int firmware = 0;
|
||||||
|
if (parser->model == OSTC4) {
|
||||||
|
firmware = array_uint16_le (data + layout->firmware);
|
||||||
|
} else {
|
||||||
|
firmware = array_uint16_be (data + layout->firmware);
|
||||||
|
}
|
||||||
|
|
||||||
unsigned int time = 0;
|
unsigned int time = 0;
|
||||||
unsigned int nsamples = 0;
|
unsigned int nsamples = 0;
|
||||||
|
|
||||||
@ -809,6 +837,10 @@ hw_ostc_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t call
|
|||||||
if (callback) callback (DC_SAMPLE_TEMPERATURE, sample, userdata);
|
if (callback) callback (DC_SAMPLE_TEMPERATURE, sample, userdata);
|
||||||
break;
|
break;
|
||||||
case 1: // Deco / NDL
|
case 1: // Deco / NDL
|
||||||
|
// Due to a firmware bug, the deco/ndl info is incorrect for
|
||||||
|
// all OSTC4 dives with a firmware older than version 1.0.8.
|
||||||
|
if (parser->model == OSTC4 && firmware < 0x0810)
|
||||||
|
break;
|
||||||
if (data[offset]) {
|
if (data[offset]) {
|
||||||
sample.deco.type = DC_DECO_DECOSTOP;
|
sample.deco.type = DC_DECO_DECOSTOP;
|
||||||
sample.deco.depth = data[offset];
|
sample.deco.depth = data[offset];
|
||||||
|
|||||||
@ -63,6 +63,7 @@ oceanic_vtpro_parser_create2
|
|||||||
oceanic_veo250_parser_create
|
oceanic_veo250_parser_create
|
||||||
oceanic_atom2_parser_create
|
oceanic_atom2_parser_create
|
||||||
hw_ostc_parser_create
|
hw_ostc_parser_create
|
||||||
|
hw_ostc3_parser_create
|
||||||
cressi_edy_parser_create
|
cressi_edy_parser_create
|
||||||
cressi_leonardo_parser_create
|
cressi_leonardo_parser_create
|
||||||
atomics_cobalt_parser_create
|
atomics_cobalt_parser_create
|
||||||
|
|||||||
@ -116,7 +116,7 @@ dc_parser_new_internal (dc_parser_t **out, dc_context_t *context, dc_family_t fa
|
|||||||
break;
|
break;
|
||||||
case DC_FAMILY_HW_FROG:
|
case DC_FAMILY_HW_FROG:
|
||||||
case DC_FAMILY_HW_OSTC3:
|
case DC_FAMILY_HW_OSTC3:
|
||||||
rc = hw_ostc_parser_create (&parser, context, 1);
|
rc = hw_ostc3_parser_create (&parser, context, model);
|
||||||
break;
|
break;
|
||||||
case DC_FAMILY_CRESSI_EDY:
|
case DC_FAMILY_CRESSI_EDY:
|
||||||
case DC_FAMILY_ZEAGLE_N2ITION3:
|
case DC_FAMILY_ZEAGLE_N2ITION3:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user