Merge branch 'release-0.2'

Integrate the bugfixes from the stable branch.
This commit is contained in:
Jef Driesen 2012-12-22 21:07:25 +01:00
commit ccaa93a164
8 changed files with 40 additions and 11 deletions

View File

@ -27,6 +27,9 @@
#include <stdlib.h> // malloc, free
#ifdef HAVE_LIBUSB
#ifdef _WIN32
#define NOGDI
#endif
#include <libusb-1.0/libusb.h>
#endif

View File

@ -25,6 +25,7 @@
#include <string.h>
#ifdef _WIN32
#define NOGDI
#include <windows.h>
#endif

View File

@ -101,6 +101,7 @@ static const dc_descriptor_t g_descriptors[] = {
{"Oceanic", "Veo 250", DC_FAMILY_OCEANIC_VEO250, 0x424C},
{"Oceanic", "Veo 180", DC_FAMILY_OCEANIC_VEO250, 0x4252},
{"Aeris", "XR-2", DC_FAMILY_OCEANIC_VEO250, 0x4255},
{"Sherwood", "Insight", DC_FAMILY_OCEANIC_VEO250, 0x425A},
/* Oceanic Atom 2.0 */
{"Oceanic", "Atom 1.0", DC_FAMILY_OCEANIC_ATOM2, 0x4250},
{"Aeris", "Epic", DC_FAMILY_OCEANIC_ATOM2, 0x4257},
@ -114,7 +115,7 @@ static const dc_descriptor_t g_descriptors[] = {
{"Aeris", "F10", DC_FAMILY_OCEANIC_ATOM2, 0x434D},
{"Oceanic", "OC1", DC_FAMILY_OCEANIC_ATOM2, 0x434E},
{"Sherwood", "Wisdom 2", DC_FAMILY_OCEANIC_ATOM2, 0x4350},
{"Sherwood", "Insight", DC_FAMILY_OCEANIC_ATOM2, 0x4353},
{"Sherwood", "Insight 2", DC_FAMILY_OCEANIC_ATOM2, 0x4353},
{"Tusa", "Element II (IQ-750)", DC_FAMILY_OCEANIC_ATOM2, 0x4357},
{"Oceanic", "Veo 1.0", DC_FAMILY_OCEANIC_ATOM2, 0x4358},
{"Oceanic", "Veo 2.0", DC_FAMILY_OCEANIC_ATOM2, 0x4359},
@ -130,8 +131,10 @@ static const dc_descriptor_t g_descriptors[] = {
{"Hollis", "DG03", DC_FAMILY_OCEANIC_ATOM2, 0x444D},
{"Oceanic", "OCS", DC_FAMILY_OCEANIC_ATOM2, 0x4450},
{"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},
{"Sherwood", "Wisdom 3", DC_FAMILY_OCEANIC_ATOM2, 0x4358},
{"Aeris", "A300 AI", DC_FAMILY_OCEANIC_ATOM2, 0x4457},
{"Sherwood", "Wisdom 3", DC_FAMILY_OCEANIC_ATOM2, 0x4458},
/* Mares Nemo */
{"Mares", "Nemo", DC_FAMILY_MARES_NEMO, 0},
{"Mares", "Nemo Excel", DC_FAMILY_MARES_NEMO, 17},

View File

@ -22,6 +22,7 @@
#include <stdlib.h>
#include <libdivecomputer/hw_ostc.h>
#include "libdivecomputer/units.h"
#include "context-private.h"
#include "parser-private.h"
@ -291,6 +292,12 @@ hw_ostc_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t call
// Get the sample rate.
unsigned int samplerate = data[36];
// Get the salinity factor.
unsigned int salinity = data[43];
if (salinity < 100 || salinity > 104)
salinity = 100;
double hydrostatic = GRAVITY * salinity * 10.0;
// Get the extended sample configuration.
hw_ostc_sample_info_t info[NINFO];
for (unsigned int i = 0; i < NINFO; ++i) {
@ -329,7 +336,7 @@ hw_ostc_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t call
// Depth (mbar).
unsigned int depth = array_uint16_le (data + offset);
sample.depth = depth / 100.0;
sample.depth = (depth * BAR / 1000.0) / hydrostatic;
if (callback) callback (DC_SAMPLE_DEPTH, sample, userdata);
offset += 2;

View File

@ -22,6 +22,7 @@
#include <stdlib.h> // malloc, free
#include <stdio.h> // snprintf
#ifdef _WIN32
#define NOGDI
#include <winsock2.h>
#include <windows.h>
#include <af_irda.h>

View File

@ -64,8 +64,10 @@ static const device_backend_t oceanic_atom2_device_backend = {
static const unsigned char aeris_manta_version[] = "MANTA R\0\0 512K";
static const unsigned char aeris_atmosai_version[] = "ATMOSAI R\0\0 512K";
static const unsigned char aeris_epic_version[] = "2M EPIC 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";
@ -375,7 +377,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;
@ -397,7 +400,8 @@ oceanic_atom2_device_open (dc_device_t **out, dc_context_t *context, const char
oceanic_common_match (tusa_element2_version, device->version, sizeof (device->version)) ||
oceanic_common_match (tusa_zen_version, device->version, sizeof (device->version)))
device->base.layout = &oceanic_atom2b_layout;
else if (oceanic_common_match (aeris_epic_version, device->version, sizeof (device->version)) ||
else if (oceanic_common_match (aeris_epica_version, device->version, sizeof (device->version)) ||
oceanic_common_match (aeris_epicb_version, device->version, sizeof (device->version)) ||
oceanic_common_match (oceanic_atom2_version, device->version, sizeof (device->version)))
device->base.layout = &oceanic_atom2c_layout;
else if (oceanic_common_match (oceanic_veo1_version, device->version, sizeof (device->version)))

View File

@ -30,7 +30,7 @@
#include "array.h"
#define ATOM1 0x4250
#define EPIC 0x4257
#define EPICA 0x4257
#define VT3 0x4258
#define T3 0x4259
#define ATOM2 0x4342
@ -47,9 +47,12 @@
#define VT4 0x4447
#define OC1B 0x4449
#define ATOM3 0x444C
#define DG03 0x444D
#define OCS 0x4450
#define VT41 0x4452
#define EPICB 0x4453
#define ATOM31 0x4456
#define A300AI 0x4457
typedef struct oceanic_atom2_parser_t oceanic_atom2_parser_t;
@ -172,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);
@ -182,6 +186,7 @@ oceanic_atom2_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetim
case VEO20:
case VEO30:
case GEO20:
case DG03:
datetime->year = ((p[3] & 0xE0) >> 1) + (p[4] & 0x0F) + 2000;
datetime->month = (p[4] & 0xF0) >> 4;
datetime->day = p[3] & 0x1F;
@ -480,7 +485,7 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_
} else {
// Tank pressure (2 psi) and number (one based index)
tank = (data[offset + 1] & 0x03) - 1;
if (parser->model == ATOM2 || parser->model == EPIC)
if (parser->model == ATOM2 || parser->model == EPICA || parser->model == EPICB)
pressure = (((data[offset + 3] << 8) + data[offset + 4]) & 0x0FFF) * 2;
else
pressure = (((data[offset + 4] << 8) + data[offset + 5]) & 0x0FFF) * 2;
@ -514,11 +519,14 @@ 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;
if (parser->model == ATOM2 || parser->model == EPIC || parser->model == PROPLUS21)
if (parser->model == DG03)
sign = (~data[offset + 5] & 0x04) >> 2;
else if (parser->model == ATOM2 || parser->model == PROPLUS21 ||
parser->model == EPICA || parser->model == EPICB)
sign = (data[offset + 0] & 0x80) >> 7;
else
sign = (~data[offset + 0] & 0x80) >> 7;
@ -535,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];

View File

@ -20,6 +20,8 @@
*/
#include <stdlib.h>
#define NOGDI
#include <windows.h>
#include "serial.h"