Add support for the Sherwood Beacon
The Sherwood Beacon appears to be compatible with the Sherwood Sage. For the BLE communication the handshake also fails and is disabled.
This commit is contained in:
parent
f42df2d846
commit
580e1d5fc5
@ -263,6 +263,7 @@ static const dc_descriptor_t g_descriptors[] = {
|
|||||||
{"Oceanic", "Veo 4.0", DC_FAMILY_OCEANIC_ATOM2, 0x4654, DC_TRANSPORT_SERIAL | DC_TRANSPORT_BLE, dc_filter_oceanic},
|
{"Oceanic", "Veo 4.0", DC_FAMILY_OCEANIC_ATOM2, 0x4654, DC_TRANSPORT_SERIAL | DC_TRANSPORT_BLE, dc_filter_oceanic},
|
||||||
{"Sherwood", "Wisdom 4", DC_FAMILY_OCEANIC_ATOM2, 0x4655, DC_TRANSPORT_SERIAL | DC_TRANSPORT_BLE, dc_filter_oceanic},
|
{"Sherwood", "Wisdom 4", DC_FAMILY_OCEANIC_ATOM2, 0x4655, DC_TRANSPORT_SERIAL | DC_TRANSPORT_BLE, dc_filter_oceanic},
|
||||||
{"Oceanic", "Pro Plus 4", DC_FAMILY_OCEANIC_ATOM2, 0x4656, DC_TRANSPORT_SERIAL | DC_TRANSPORT_BLE, dc_filter_oceanic},
|
{"Oceanic", "Pro Plus 4", DC_FAMILY_OCEANIC_ATOM2, 0x4656, DC_TRANSPORT_SERIAL | DC_TRANSPORT_BLE, dc_filter_oceanic},
|
||||||
|
{"Sherwood", "Beacon", DC_FAMILY_OCEANIC_ATOM2, 0x4742, DC_TRANSPORT_SERIAL | DC_TRANSPORT_BLE, dc_filter_oceanic},
|
||||||
{"Aqualung", "i470TC", DC_FAMILY_OCEANIC_ATOM2, 0x4743, DC_TRANSPORT_SERIAL | DC_TRANSPORT_BLE, dc_filter_oceanic},
|
{"Aqualung", "i470TC", DC_FAMILY_OCEANIC_ATOM2, 0x4743, DC_TRANSPORT_SERIAL | DC_TRANSPORT_BLE, dc_filter_oceanic},
|
||||||
/* Mares Nemo */
|
/* Mares Nemo */
|
||||||
{"Mares", "Nemo", DC_FAMILY_MARES_NEMO, 0, DC_TRANSPORT_SERIAL, NULL},
|
{"Mares", "Nemo", DC_FAMILY_MARES_NEMO, 0, DC_TRANSPORT_SERIAL, NULL},
|
||||||
@ -667,6 +668,7 @@ static int dc_filter_oceanic (dc_transport_t transport, const void *userdata, vo
|
|||||||
0x4654, // Oceanic Veo 4.0
|
0x4654, // Oceanic Veo 4.0
|
||||||
0x4655, // Sherwood Wisdom 4
|
0x4655, // Sherwood Wisdom 4
|
||||||
0x4656, // Oceanic Pro Plus 4
|
0x4656, // Oceanic Pro Plus 4
|
||||||
|
0x4742, // Sherwood Beacon
|
||||||
0x4743, // Aqualung i470TC
|
0x4743, // Aqualung i470TC
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -41,6 +41,7 @@
|
|||||||
#define SAGE 0x4647
|
#define SAGE 0x4647
|
||||||
#define I770R 0x4651
|
#define I770R 0x4651
|
||||||
#define GEO40 0x4653
|
#define GEO40 0x4653
|
||||||
|
#define BEACON 0x4742
|
||||||
|
|
||||||
#define MAXPACKET 256
|
#define MAXPACKET 256
|
||||||
#define MAXRETRIES 2
|
#define MAXRETRIES 2
|
||||||
@ -493,6 +494,7 @@ static const oceanic_common_version_t versions[] = {
|
|||||||
{"OCEANVTX \0\0 2048", 0, &aeris_a300cs_layout},
|
{"OCEANVTX \0\0 2048", 0, &aeris_a300cs_layout},
|
||||||
{"AQUAI750 \0\0 2048", 0, &aeris_a300cs_layout},
|
{"AQUAI750 \0\0 2048", 0, &aeris_a300cs_layout},
|
||||||
{"SWDRAGON \0\0 2048", 0, &aeris_a300cs_layout},
|
{"SWDRAGON \0\0 2048", 0, &aeris_a300cs_layout},
|
||||||
|
{"SWBEACON \0\0 2048", 0, &aeris_a300cs_layout},
|
||||||
|
|
||||||
{"AQUAI450 \0\0 2048", 0, &aqualung_i450t_layout},
|
{"AQUAI450 \0\0 2048", 0, &aqualung_i450t_layout},
|
||||||
|
|
||||||
@ -904,7 +906,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 &&
|
if (dc_iostream_get_transport (device->iostream) == DC_TRANSPORT_BLE &&
|
||||||
model != PROPLUSX && model != SAGE ) {
|
model != PROPLUSX && model != SAGE && model != BEACON) {
|
||||||
status = oceanic_atom2_ble_handshake(device);
|
status = oceanic_atom2_ble_handshake(device);
|
||||||
if (status != DC_STATUS_SUCCESS) {
|
if (status != DC_STATUS_SUCCESS) {
|
||||||
goto error_free;
|
goto error_free;
|
||||||
|
|||||||
@ -97,6 +97,7 @@
|
|||||||
#define VEO40 0x4654
|
#define VEO40 0x4654
|
||||||
#define WISDOM4 0x4655
|
#define WISDOM4 0x4655
|
||||||
#define PROPLUS4 0x4656
|
#define PROPLUS4 0x4656
|
||||||
|
#define BEACON 0x4742
|
||||||
#define I470TC 0x4743
|
#define I470TC 0x4743
|
||||||
|
|
||||||
#define NORMAL 0
|
#define NORMAL 0
|
||||||
@ -189,7 +190,8 @@ oceanic_atom2_parser_create (dc_parser_t **out, dc_context_t *context, unsigned
|
|||||||
parser->footersize = 0;
|
parser->footersize = 0;
|
||||||
} else if (model == A300CS || model == VTX ||
|
} else if (model == A300CS || model == VTX ||
|
||||||
model == I450T || model == I750TC ||
|
model == I450T || model == I750TC ||
|
||||||
model == I770R || model == SAGE) {
|
model == I770R || model == SAGE ||
|
||||||
|
model == BEACON) {
|
||||||
parser->headersize = 5 * PAGESIZE;
|
parser->headersize = 5 * PAGESIZE;
|
||||||
} else if (model == PROPLUSX) {
|
} else if (model == PROPLUSX) {
|
||||||
parser->headersize = 3 * PAGESIZE;
|
parser->headersize = 3 * PAGESIZE;
|
||||||
@ -343,6 +345,7 @@ oceanic_atom2_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetim
|
|||||||
case PROPLUSX:
|
case PROPLUSX:
|
||||||
case I770R:
|
case I770R:
|
||||||
case SAGE:
|
case SAGE:
|
||||||
|
case BEACON:
|
||||||
datetime->year = (p[10]) + 2000;
|
datetime->year = (p[10]) + 2000;
|
||||||
datetime->month = (p[8]);
|
datetime->month = (p[8]);
|
||||||
datetime->day = (p[9]);
|
datetime->day = (p[9]);
|
||||||
@ -463,7 +466,8 @@ oceanic_atom2_parser_cache (oceanic_atom2_parser_t *parser)
|
|||||||
he_offset = 0x48;
|
he_offset = 0x48;
|
||||||
ngasmixes = 6;
|
ngasmixes = 6;
|
||||||
} else if (parser->model == A300CS || parser->model == VTX ||
|
} else if (parser->model == A300CS || parser->model == VTX ||
|
||||||
parser->model == I750TC || parser->model == SAGE) {
|
parser->model == I750TC || parser->model == SAGE ||
|
||||||
|
parser->model == BEACON) {
|
||||||
o2_offset = 0x2A;
|
o2_offset = 0x2A;
|
||||||
if (data[0x39] & 0x04) {
|
if (data[0x39] & 0x04) {
|
||||||
ngasmixes = 1;
|
ngasmixes = 1;
|
||||||
@ -671,7 +675,7 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_
|
|||||||
if (parser->model == A300CS || parser->model == VTX ||
|
if (parser->model == A300CS || parser->model == VTX ||
|
||||||
parser->model == I450T || parser->model == I750TC ||
|
parser->model == I450T || parser->model == I750TC ||
|
||||||
parser->model == PROPLUSX || parser->model == I770R ||
|
parser->model == PROPLUSX || parser->model == I770R ||
|
||||||
parser->model == SAGE)
|
parser->model == SAGE || parser->model == BEACON)
|
||||||
idx = 0x1f;
|
idx = 0x1f;
|
||||||
switch (data[idx] & 0x03) {
|
switch (data[idx] & 0x03) {
|
||||||
case 0:
|
case 0:
|
||||||
@ -728,7 +732,7 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_
|
|||||||
parser->model == VTX || parser->model == I450T ||
|
parser->model == VTX || parser->model == I450T ||
|
||||||
parser->model == I750TC || parser->model == PROPLUSX ||
|
parser->model == I750TC || parser->model == PROPLUSX ||
|
||||||
parser->model == I770R || parser->model == I470TC ||
|
parser->model == I770R || parser->model == I470TC ||
|
||||||
parser->model == SAGE) {
|
parser->model == SAGE || parser->model == BEACON) {
|
||||||
samplesize = PAGESIZE;
|
samplesize = PAGESIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -813,7 +817,8 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_
|
|||||||
tank = 0;
|
tank = 0;
|
||||||
pressure = (((data[offset + 7] << 8) + data[offset + 6]) & 0x0FFF);
|
pressure = (((data[offset + 7] << 8) + data[offset + 6]) & 0x0FFF);
|
||||||
} else if (parser->model == A300CS || parser->model == VTX ||
|
} else if (parser->model == A300CS || parser->model == VTX ||
|
||||||
parser->model == I750TC || parser->model == SAGE) {
|
parser->model == I750TC || parser->model == SAGE ||
|
||||||
|
parser->model == BEACON) {
|
||||||
// Tank pressure (1 psi) and number (one based index)
|
// Tank pressure (1 psi) and number (one based index)
|
||||||
tank = (data[offset + 1] & 0x03) - 1;
|
tank = (data[offset + 1] & 0x03) - 1;
|
||||||
pressure = ((data[offset + 7] << 8) + data[offset + 6]) & 0x0FFF;
|
pressure = ((data[offset + 7] << 8) + data[offset + 6]) & 0x0FFF;
|
||||||
@ -915,7 +920,8 @@ 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);
|
temperature = ((data[offset + 7] & 0xF0) >> 4) | ((data[offset + 7] & 0x0C) << 2) | ((data[offset + 5] & 0x0C) << 4);
|
||||||
} else if (parser->model == A300CS || parser->model == VTX ||
|
} else if (parser->model == A300CS || parser->model == VTX ||
|
||||||
parser->model == I750TC || parser->model == PROPLUSX ||
|
parser->model == I750TC || parser->model == PROPLUSX ||
|
||||||
parser->model == I770R|| parser->model == SAGE) {
|
parser->model == I770R|| parser->model == SAGE ||
|
||||||
|
parser->model == BEACON) {
|
||||||
temperature = data[offset + 11];
|
temperature = data[offset + 11];
|
||||||
} else {
|
} else {
|
||||||
unsigned int sign;
|
unsigned int sign;
|
||||||
@ -960,7 +966,7 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_
|
|||||||
else if (parser->model == TX1 || parser->model == A300CS ||
|
else if (parser->model == TX1 || parser->model == A300CS ||
|
||||||
parser->model == VTX || parser->model == I750TC ||
|
parser->model == VTX || parser->model == I750TC ||
|
||||||
parser->model == PROPLUSX || parser->model == I770R ||
|
parser->model == PROPLUSX || parser->model == I770R ||
|
||||||
parser->model == SAGE)
|
parser->model == SAGE || parser->model == BEACON)
|
||||||
pressure = array_uint16_le (data + offset + 4);
|
pressure = array_uint16_le (data + offset + 4);
|
||||||
else
|
else
|
||||||
pressure -= data[offset + 1];
|
pressure -= data[offset + 1];
|
||||||
@ -1012,7 +1018,8 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_
|
|||||||
unsigned int decostop = 0, decotime = 0;
|
unsigned int decostop = 0, decotime = 0;
|
||||||
if (parser->model == A300CS || parser->model == VTX ||
|
if (parser->model == A300CS || parser->model == VTX ||
|
||||||
parser->model == I750TC || parser->model == SAGE ||
|
parser->model == I750TC || parser->model == SAGE ||
|
||||||
parser->model == PROPLUSX || parser->model == I770R) {
|
parser->model == PROPLUSX || parser->model == I770R ||
|
||||||
|
parser->model == BEACON) {
|
||||||
decostop = (data[offset + 15] & 0x70) >> 4;
|
decostop = (data[offset + 15] & 0x70) >> 4;
|
||||||
decotime = array_uint16_le(data + offset + 6) & 0x03FF;
|
decotime = array_uint16_le(data + offset + 6) & 0x03FF;
|
||||||
have_deco = 1;
|
have_deco = 1;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user