Merge branch 'master' of git://github.com/libdivecomputer/libdivecomputer into Subsurface-DS9
Merge upstream libdivecomputer updates by Jef Driesen. Minor fixups, and add ID for Cressi Neon. * git://github.com/libdivecomputer/libdivecomputer: Add support for the Cressi Neon Use symbolic constant for invalid value Remove duplicate macro definition Add BLE support for the Aqualung i750TC Exclude the surface time from the dive time
This commit is contained in:
commit
b6df353752
@ -333,6 +333,7 @@ static const dc_descriptor_t g_descriptors[] = {
|
||||
/* Cressi Goa */
|
||||
{"Cressi", "Cartesio", DC_FAMILY_CRESSI_GOA, 1, DC_TRANSPORT_SERIAL | DC_TRANSPORT_BLE, NULL},
|
||||
{"Cressi", "Goa", DC_FAMILY_CRESSI_GOA, 2, DC_TRANSPORT_SERIAL | DC_TRANSPORT_BLE, NULL},
|
||||
{"Cressi", "Neon", DC_FAMILY_CRESSI_GOA, 9, DC_TRANSPORT_SERIAL, NULL},
|
||||
/* Zeagle N2iTiON3 */
|
||||
{"Zeagle", "N2iTiON3", DC_FAMILY_ZEAGLE_N2ITION3, 0, DC_TRANSPORT_SERIAL, NULL},
|
||||
{"Apeks", "Quantum X", DC_FAMILY_ZEAGLE_N2ITION3, 0, DC_TRANSPORT_SERIAL, NULL},
|
||||
@ -681,6 +682,7 @@ static int dc_filter_oceanic (dc_transport_t transport, const void *userdata, vo
|
||||
{
|
||||
static const unsigned int model[] = {
|
||||
0x4552, // Oceanic Pro Plus X
|
||||
0x455A, // Aqualung i750TC
|
||||
0x4647, // Sherwood Sage
|
||||
0x4648, // Aqualung i300C
|
||||
0x4649, // Aqualung i200C
|
||||
|
||||
@ -322,7 +322,7 @@ divesystem_idive_parser_get_field (dc_parser_t *abstract, dc_field_type_t type,
|
||||
water->density = 0.0;
|
||||
break;
|
||||
case DC_FIELD_DIVEMODE:
|
||||
if (parser->divemode == 0xFFFFFFFF)
|
||||
if (parser->divemode == INVALID)
|
||||
return DC_STATUS_UNSUPPORTED;
|
||||
switch (parser->divemode) {
|
||||
case OC:
|
||||
@ -367,8 +367,8 @@ divesystem_idive_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callba
|
||||
unsigned int ntanks = 0;
|
||||
divesystem_idive_gasmix_t gasmix[NGASMIXES] = {0};
|
||||
divesystem_idive_tank_t tank[NTANKS] = {0};
|
||||
unsigned int o2_previous = 0xFFFFFFFF;
|
||||
unsigned int he_previous = 0xFFFFFFFF;
|
||||
unsigned int o2_previous = INVALID;
|
||||
unsigned int he_previous = INVALID;
|
||||
unsigned int mode_previous = INVALID;
|
||||
unsigned int divemode = INVALID;
|
||||
unsigned int tank_previous = INVALID;
|
||||
|
||||
@ -145,6 +145,7 @@ struct mares_iconhd_parser_t {
|
||||
unsigned int samplesize;
|
||||
unsigned int headersize;
|
||||
unsigned int settings;
|
||||
unsigned int surftime;
|
||||
unsigned int interval;
|
||||
unsigned int samplerate;
|
||||
unsigned int ntanks;
|
||||
@ -350,6 +351,7 @@ mares_iconhd_cache (mares_iconhd_parser_t *parser)
|
||||
parser->samplesize = samplesize;
|
||||
parser->headersize = headersize;
|
||||
parser->settings = settings;
|
||||
parser->surftime = 3 * 60;
|
||||
parser->interval = interval;
|
||||
parser->samplerate = samplerate;
|
||||
parser->ntanks = ntanks;
|
||||
@ -428,6 +430,22 @@ mares_genius_cache (mares_iconhd_parser_t *parser)
|
||||
return DC_STATUS_DATAFORMAT;
|
||||
}
|
||||
|
||||
// Get the profile type and version.
|
||||
unsigned int profile_type = array_uint16_le (data + headersize);
|
||||
unsigned int profile_minor = data[headersize + 2];
|
||||
unsigned int profile_major = data[headersize + 3];
|
||||
|
||||
// Get the surface timeout setting (in minutes).
|
||||
// For older firmware versions the value is hardcoded to 3 minutes, but
|
||||
// starting with the newer v01.02.00 firmware the value is configurable and
|
||||
// stored in the settings. To detect whether the setting is available, we
|
||||
// need to check the profile version instead of the header version.
|
||||
unsigned int surftime = 3;
|
||||
if (profile_type == 0 &&
|
||||
OBJVERSION(profile_major,profile_minor) >= OBJVERSION(1,0)) {
|
||||
surftime = (settings >> 13) & 0x3F;
|
||||
}
|
||||
|
||||
// Gas mixes and tanks.
|
||||
unsigned int ntanks = 0;
|
||||
unsigned int ngasmixes = 0;
|
||||
@ -479,6 +497,7 @@ mares_genius_cache (mares_iconhd_parser_t *parser)
|
||||
parser->samplesize = samplesize;
|
||||
parser->headersize = headersize;
|
||||
parser->settings = settings;
|
||||
parser->surftime = surftime * 60;
|
||||
parser->interval = 5;
|
||||
parser->samplerate = 1;
|
||||
parser->ntanks = ntanks;
|
||||
@ -532,6 +551,7 @@ mares_iconhd_parser_create (dc_parser_t **out, dc_context_t *context, unsigned i
|
||||
parser->samplesize = 0;
|
||||
parser->headersize = 0;
|
||||
parser->settings = 0;
|
||||
parser->surftime = 0;
|
||||
parser->interval = 0;
|
||||
parser->samplerate = 0;
|
||||
parser->ntanks = 0;
|
||||
@ -567,6 +587,7 @@ mares_iconhd_parser_set_data (dc_parser_t *abstract, const unsigned char *data,
|
||||
parser->samplesize = 0;
|
||||
parser->headersize = 0;
|
||||
parser->settings = 0;
|
||||
parser->surftime = 0;
|
||||
parser->interval = 0;
|
||||
parser->samplerate = 0;
|
||||
parser->ntanks = 0;
|
||||
@ -679,7 +700,7 @@ mares_iconhd_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsi
|
||||
switch (type) {
|
||||
case DC_FIELD_DIVETIME:
|
||||
if (parser->model == GENIUS || parser->model == HORIZON) {
|
||||
*((unsigned int *) value) = parser->nsamples * parser->interval;
|
||||
*((unsigned int *) value) = parser->nsamples * parser->interval - parser->surftime;
|
||||
} else if (parser->model == SMARTAPNEA) {
|
||||
*((unsigned int *) value) = array_uint16_le (p + 0x24);
|
||||
} else if (parser->mode == ICONHD_FREEDIVE) {
|
||||
@ -691,7 +712,7 @@ mares_iconhd_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsi
|
||||
}
|
||||
*((unsigned int *) value) = divetime;
|
||||
} else {
|
||||
*((unsigned int *) value) = parser->nsamples * parser->interval;
|
||||
*((unsigned int *) value) = parser->nsamples * parser->interval - parser->surftime;
|
||||
}
|
||||
break;
|
||||
case DC_FIELD_MAXDEPTH:
|
||||
|
||||
@ -907,7 +907,7 @@ oceanic_atom2_device_open (dc_device_t **out, dc_context_t *context, dc_iostream
|
||||
}
|
||||
|
||||
if (dc_iostream_get_transport (device->iostream) == DC_TRANSPORT_BLE &&
|
||||
model != PROPLUSX && model != SAGE && model != BEACON) {
|
||||
model != PROPLUSX && model != I750TC && model != SAGE && model != BEACON) {
|
||||
status = oceanic_atom2_ble_handshake(device);
|
||||
if (status != DC_STATUS_SUCCESS) {
|
||||
goto error_free;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user