Merge tag 'v0.5.0' of git://git.libdivecomputer.org/libdivecomputer into Subsurface-branch
Merge upstream version 0.5.0. Some small updates from Jef Driesen since the last sync, but let's sync with the real 0.5.0 release. * tag 'v0.5.0' of git://git.libdivecomputer.org/libdivecomputer: Release version 0.5.0. Include the public header in the implementation file. Add explicit casts for the msvc C++ compiler. Add some workarounds for the msvc compiler. Update the msvc project file. Add missing header files to the Makefiles. Add support for the Subgear XP-Air
This commit is contained in:
commit
534dd2f34b
51
NEWS
51
NEWS
@ -1,3 +1,54 @@
|
||||
Version 0.5.0 (2016-09-30)
|
||||
==========================
|
||||
|
||||
After more than three years of development, the v0.5.0 release is long
|
||||
overdue. The main highlights are the support for many new devices, a few
|
||||
new features and lots of bug fixes. This release is fully backwards
|
||||
compatible with the previous one.
|
||||
|
||||
New features:
|
||||
|
||||
* Add support for new backends:
|
||||
- aqualand: Citizen Hyper Aqualand
|
||||
- commander: Cochran Commander and EMC
|
||||
- eonsteel: Suunto EON Steel
|
||||
- idive: DiveSystem iDive and iX3M
|
||||
- meridian: Scubapro Meridian, Mantis and Chromis
|
||||
- nitekq: Dive Rite NiTek Q
|
||||
* Add support for many new devices:
|
||||
- Aeris: 500 AI, A300, A300CS, F11, XR-1 NX
|
||||
- Aqualung: i300, i450T, i550T
|
||||
- Beuchat: Mundial 2, Mundial 3, Voyager 2G
|
||||
- Cressi: Giotto, Newton
|
||||
- Dive Rite: NiTek Trio
|
||||
- Heinrichs Weikamp: OSTC 2, 3+, 4, cR and Sport
|
||||
- Hollis: TX1
|
||||
- Mares: Airlab, Smart, Smart Apnea, Puck 2
|
||||
- Oceanic: F11, OCi, VTX
|
||||
- Scubapro: XTender 5
|
||||
- Shearwater: Nerd, Perdix, Petrel 2
|
||||
- Sherwood: Amphos, Amphos Air, Vision
|
||||
- Subgear: XP-3G, XP-Air
|
||||
- Suunto: Vyper Novo, Zoop Novo
|
||||
- Tusa: IQ-700
|
||||
- Uwatec: Aladin 2G, Aladin Sport
|
||||
* Add a new sample with the active gas mix.
|
||||
* Add the temperature, tank and divemode fields.
|
||||
* Add support for updating the OSTC and OSTC3 firmware.
|
||||
* Add support for configuring the OSTC3 settings.
|
||||
* Add a new dc_parser_new2 convenience function.
|
||||
|
||||
Removed/changed features:
|
||||
|
||||
* The gas change events (SAMPLE_EVENT_GASCHANGE and
|
||||
SAMPLE_EVENT_GASCHANGE2) have been replaced with the new gasmix
|
||||
sample (DC_SAMPLE_GASMIX). The legacy events are considered
|
||||
deprecated, but kept for backwards compatibility.
|
||||
|
||||
Bug fixes:
|
||||
|
||||
* Many small improvements
|
||||
|
||||
Version 0.4.0 (2013-05-13)
|
||||
==========================
|
||||
|
||||
|
||||
@ -14,6 +14,7 @@ libdivecomputer_HEADERS = \
|
||||
suunto.h \
|
||||
suunto_solution.h \
|
||||
suunto_eon.h \
|
||||
suunto_eonsteel.h \
|
||||
suunto_vyper.h \
|
||||
suunto_vyper2.h \
|
||||
suunto_d9.h \
|
||||
|
||||
@ -462,6 +462,10 @@
|
||||
RelativePath="..\src\suunto_vyper_parser.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\usbhid.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\uwatec_aladin.c"
|
||||
>
|
||||
@ -752,6 +756,10 @@
|
||||
RelativePath="..\include\libdivecomputer\units.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\usbhid.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\libdivecomputer\uwatec.h"
|
||||
>
|
||||
|
||||
@ -65,7 +65,7 @@ libdivecomputer_la_SOURCES = \
|
||||
checksum.h checksum.c \
|
||||
array.h array.c \
|
||||
buffer.c \
|
||||
cochran_commander.h cochran_commander.c \
|
||||
cochran_commander.c \
|
||||
cochran_commander_parser.c
|
||||
|
||||
if OS_WIN32
|
||||
|
||||
@ -195,6 +195,7 @@ static const dc_descriptor_t g_descriptors[] = {
|
||||
{"Aeris", "A300CS", DC_FAMILY_OCEANIC_ATOM2, 0x454C},
|
||||
{"Beuchat", "Mundial 3", DC_FAMILY_OCEANIC_ATOM2, 0x4550},
|
||||
{"Oceanic", "F11", DC_FAMILY_OCEANIC_ATOM2, 0x4554},
|
||||
{"Subgear", "XP-Air", DC_FAMILY_OCEANIC_ATOM2, 0x4555},
|
||||
{"Sherwood", "Vision", DC_FAMILY_OCEANIC_ATOM2, 0x4556},
|
||||
{"Oceanic", "VTX", DC_FAMILY_OCEANIC_ATOM2, 0x4557},
|
||||
{"Aqualung", "i300", DC_FAMILY_OCEANIC_ATOM2, 0x4559},
|
||||
|
||||
@ -28,6 +28,7 @@
|
||||
#endif
|
||||
|
||||
#include <libdivecomputer/hw_ostc.h>
|
||||
#include <libdivecomputer/hw_ostc3.h>
|
||||
#include "libdivecomputer/units.h"
|
||||
|
||||
#include "context-private.h"
|
||||
|
||||
@ -163,6 +163,7 @@ static const oceanic_common_version_t oceanic_vt4_version[] = {
|
||||
{"OCEAVT41 \0\0 1024"},
|
||||
{"AERISAIR \0\0 1024"},
|
||||
{"SWVISION \0\0 1024"},
|
||||
{"XPSUBAIR \0\0 1024"},
|
||||
};
|
||||
|
||||
static const oceanic_common_version_t hollis_tx1_version[] = {
|
||||
|
||||
@ -78,6 +78,7 @@
|
||||
#define A300CS 0x454C
|
||||
#define MUNDIAL3 0x4550
|
||||
#define F11B 0x4554
|
||||
#define XPAIR 0x4555
|
||||
#define VISION 0x4556
|
||||
#define VTX 0x4557
|
||||
#define I300 0x4559
|
||||
@ -246,6 +247,7 @@ oceanic_atom2_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetim
|
||||
case OCI:
|
||||
case I550T:
|
||||
case VISION:
|
||||
case XPAIR:
|
||||
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);
|
||||
@ -380,7 +382,8 @@ oceanic_atom2_parser_cache (oceanic_atom2_parser_t *parser)
|
||||
unsigned int header = headersize - PAGESIZE / 2;
|
||||
unsigned int footer = size - footersize;
|
||||
if (parser->model == VT4 || parser->model == VT41 ||
|
||||
parser->model == A300AI || parser->model == VISION) {
|
||||
parser->model == A300AI || parser->model == VISION ||
|
||||
parser->model == XPAIR) {
|
||||
header = 3 * PAGESIZE;
|
||||
}
|
||||
|
||||
@ -407,7 +410,8 @@ oceanic_atom2_parser_cache (oceanic_atom2_parser_t *parser)
|
||||
ngasmixes = 1;
|
||||
o2_offset = header + 3;
|
||||
} else if (parser->model == VT4 || parser->model == VT41 ||
|
||||
parser->model == A300AI || parser->model == VISION) {
|
||||
parser->model == A300AI || parser->model == VISION ||
|
||||
parser->model == XPAIR) {
|
||||
o2_offset = header + 4;
|
||||
ngasmixes = 4;
|
||||
} else if (parser->model == OCI) {
|
||||
@ -771,7 +775,8 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_
|
||||
temperature = data[offset + 1];
|
||||
} else if (parser->model == VT4 || parser->model == VT41 ||
|
||||
parser->model == ATOM3 || parser->model == ATOM31 ||
|
||||
parser->model == A300AI || parser->model == VISION) {
|
||||
parser->model == A300AI || parser->model == VISION ||
|
||||
parser->model == XPAIR) {
|
||||
temperature = ((data[offset + 7] & 0xF0) >> 4) | ((data[offset + 7] & 0x0C) << 2) | ((data[offset + 5] & 0x0C) << 4);
|
||||
} else if (parser->model == A300CS || parser->model == VTX) {
|
||||
temperature = data[offset + 11];
|
||||
@ -810,7 +815,7 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_
|
||||
parser->model == ZENAIR ||parser->model == A300AI ||
|
||||
parser->model == DG03 || parser->model == PROPLUS3 ||
|
||||
parser->model == AMPHOSAIR || parser->model == I550T ||
|
||||
parser->model == VISION)
|
||||
parser->model == VISION || parser->model == XPAIR)
|
||||
pressure = (((data[offset + 0] & 0x03) << 8) + data[offset + 1]) * 5;
|
||||
else if (parser->model == TX1 || parser->model == A300CS || parser->model == VTX)
|
||||
pressure = array_uint16_le (data + offset + 4);
|
||||
@ -879,7 +884,8 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_
|
||||
decostop = data[offset + 10];
|
||||
decotime = array_uint16_le(data + offset + 6);
|
||||
have_deco = 1;
|
||||
} else if (parser->model == ATOM31 || parser->model == VISION) {
|
||||
} else if (parser->model == ATOM31 || parser->model == VISION ||
|
||||
parser->model == XPAIR) {
|
||||
decostop = (data[offset + 5] & 0xF0) >> 4;
|
||||
decotime = array_uint16_le(data + offset + 4) & 0x03FF;
|
||||
have_deco = 1;
|
||||
@ -911,7 +917,7 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_
|
||||
} else if (parser->model == I550T) {
|
||||
rbt = array_uint16_le(data + offset + 4) & 0x03FF;
|
||||
have_rbt = 1;
|
||||
} else if (parser->model == VISION) {
|
||||
} else if (parser->model == VISION || parser->model == XPAIR) {
|
||||
rbt = array_uint16_le(data + offset + 6) & 0x03FF;
|
||||
have_rbt = 1;
|
||||
}
|
||||
|
||||
@ -38,6 +38,16 @@
|
||||
#include "parser-private.h"
|
||||
#include "array.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#define strcasecmp _stricmp
|
||||
#if _MSC_VER < 1800
|
||||
// The rint() function is only available in MSVC 2013 and later
|
||||
// versions. Our replacement macro isn't entirely correct, because the
|
||||
// rounding rules for halfway cases are slightly different (away from
|
||||
// zero vs to even). But for our use-case, that's not a problem.
|
||||
#define rint(x) ((x) >= 0.0 ? floor((x) + 0.5): ceil((x) - 0.5))
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define C_ARRAY_SIZE(a) (sizeof(a) / sizeof(*(a)))
|
||||
|
||||
@ -664,7 +674,7 @@ static const char *lookup_enum(const struct type_desc *desc, unsigned char value
|
||||
if (n != value)
|
||||
continue;
|
||||
|
||||
ret = malloc(end - begin + 1);
|
||||
ret = (char *)malloc(end - begin + 1);
|
||||
if (!ret)
|
||||
break;
|
||||
|
||||
@ -1125,7 +1135,7 @@ static int add_gas_type(suunto_eonsteel_parser_t *eon, const struct type_desc *d
|
||||
else if (!strcasecmp(name, "Oxygen"))
|
||||
tankinfo |= DC_TANKINFO_CC_O2;
|
||||
else if (!strcasecmp(name, "None"))
|
||||
tankinfo = 0;
|
||||
tankinfo = DC_TANKVOLUME_NONE;
|
||||
else if (strcasecmp(name, "Primary"))
|
||||
DEBUG(eon->base.context, "Unknown gas type %u (%s)", type, name);
|
||||
|
||||
@ -1358,7 +1368,7 @@ static int traverse_diving_fields(suunto_eonsteel_parser_t *eon, const struct ty
|
||||
return add_string(eon, "Deco algorithm", data);
|
||||
|
||||
if (!strcmp(name, "DiveMode")) {
|
||||
if (!strncmp(data, "CCR", 3)) {
|
||||
if (!strncmp((const char *)data, "CCR", 3)) {
|
||||
eon->cache.divemode = DC_DIVEMODE_CC;
|
||||
eon->cache.initialized |= 1 << DC_FIELD_DIVEMODE;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user