diff --git a/src/descriptor.c b/src/descriptor.c index d43b24f..2492527 100644 --- a/src/descriptor.c +++ b/src/descriptor.c @@ -133,6 +133,7 @@ static const dc_descriptor_t g_descriptors[] = { {"Oceanic", "VT 4.1", DC_FAMILY_OCEANIC_ATOM2, 0x4452}, {"Aeris", "Epic", DC_FAMILY_OCEANIC_ATOM2, 0x4453}, {"Oceanic", "Atom 3.1", DC_FAMILY_OCEANIC_ATOM2, 0x4456}, + {"Aeris", "A300 AI", DC_FAMILY_OCEANIC_ATOM2, 0x4457}, {"Sherwood", "Wisdom 3", DC_FAMILY_OCEANIC_ATOM2, 0x4358}, /* Mares Nemo */ {"Mares", "Nemo", DC_FAMILY_MARES_NEMO, 0}, diff --git a/src/oceanic_atom2.c b/src/oceanic_atom2.c index 8ecb042..03bfd3e 100644 --- a/src/oceanic_atom2.c +++ b/src/oceanic_atom2.c @@ -69,6 +69,7 @@ static const unsigned char aeris_atmosai_version[] = "ATMOSAI R\0\0 512K"; static const unsigned char aeris_epica_version[] = "2M EPIC r\0\0 512K"; static const unsigned char aeris_epicb_version[] = "EPIC1 R\0\0 512K"; static const unsigned char aeris_f10_version[] = "FREEWAER \0\0 512K"; +static const unsigned char aeris_a300ai_version[] = "AERISAIR \0\0 1024"; static const unsigned char oceanic_proplus2_version[] = "PROPLUS2 \0\0 512K"; static const unsigned char oceanic_atom1_version[] = "ATOM rev\0\0 256K"; static const unsigned char oceanic_atom2_version[] = "2M ATOM r\0\0 512K"; @@ -378,7 +379,8 @@ oceanic_atom2_device_open (dc_device_t **out, dc_context_t *context, const char oceanic_common_match (oceanic_atom3_version, device->version, sizeof (device->version)) || oceanic_common_match (oceanic_atom31_version, device->version, sizeof (device->version)) || oceanic_common_match (oceanic_vt4_version, device->version, sizeof (device->version)) || - oceanic_common_match (oceanic_vt41_version, device->version, sizeof (device->version))) + oceanic_common_match (oceanic_vt41_version, device->version, sizeof (device->version)) || + oceanic_common_match (aeris_a300ai_version, device->version, sizeof (device->version))) device->base.layout = &oceanic_oc1_layout; else if (oceanic_common_match (aeris_f10_version, device->version, sizeof (device->version))) device->base.layout = &aeris_f10_layout; diff --git a/src/oceanic_atom2_parser.c b/src/oceanic_atom2_parser.c index 41318ec..78dc981 100644 --- a/src/oceanic_atom2_parser.c +++ b/src/oceanic_atom2_parser.c @@ -52,6 +52,7 @@ #define VT41 0x4452 #define EPICB 0x4453 #define ATOM31 0x4456 +#define A300AI 0x4457 typedef struct oceanic_atom2_parser_t oceanic_atom2_parser_t; @@ -174,6 +175,7 @@ oceanic_atom2_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetim case VT41: case ATOM3: case ATOM31: + case A300AI: 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); @@ -517,7 +519,7 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_ temperature = data[offset + 3]; } else if (parser->model == OCS) { temperature = data[offset + 1]; - } else if (parser->model == VT4 || parser->model == VT41 || parser->model == ATOM3 || parser->model == ATOM31) { + } else if (parser->model == VT4 || parser->model == VT41 || parser->model == ATOM3 || parser->model == ATOM31 || parser->model == A300AI) { temperature = ((data[offset + 7] & 0xF0) >> 4) | ((data[offset + 7] & 0x0C) << 2) | ((data[offset + 5] & 0x0C) << 4); } else { unsigned int sign; @@ -541,7 +543,7 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_ if (have_pressure) { if (parser->model == OC1A || parser->model == OC1B) pressure = (data[offset + 10] + (data[offset + 11] << 8)) & 0x0FFF; - else if (parser->model == ZENAIR || parser->model == VT4 || parser->model == VT41|| parser->model == ATOM3 || parser->model == ATOM31) + else if (parser->model == ZENAIR || parser->model == VT4 || parser->model == VT41|| parser->model == ATOM3 || parser->model == ATOM31 || parser->model == A300AI) pressure = (((data[offset + 0] & 0x03) << 8) + data[offset + 1]) * 5; else pressure -= data[offset + 1];