1228 Commits

Author SHA1 Message Date
Jef Driesen
af7e7aed19 Fix the decoding of the dive time.
The dive time is stored in two separate bytes: one for the number of
minutes, and another one for the hours. Since we only took into account
the first byte containing the minutes, the divetime for dives longer
than one hour was always too short.
2016-08-12 11:47:41 +02:00
Jef Driesen
ae93a6ab08 Add support for the Scubapro Mantis.
The Scubapro Mantis uses the same model number as the Meridian, and
works out of the box.
2016-08-11 08:57:47 +02:00
Jef Driesen
9e585a9525 Fix the Aeris 500AI serial number.
The Aeris 500AI serial number appears to be located at a slightly
different offset, and with an unusual encoding. It's a BCD encoded
number, but with the digits of each byte swapped.
2016-08-08 09:20:55 +02:00
Jef Driesen
00c2705786 Add the serial number encoding to the layout.
At the moment, the encoding of the serial number is tied to the global
pointer mode. To support devices where this is no longer the case, a new
entry for the serial number encoding is added.
2016-08-08 08:38:23 +02:00
Thomas Gschwind
0a769cdd57 Add salinity and timezone fields to Aladin Tec 2G 2016-08-07 09:31:21 +02:00
Janice
e99b8ac837 Add NDL and RBT for the ATOM31 and I450T 2016-08-05 10:26:07 +02:00
Jef Driesen
b4dc2532e8 Add support for the new extended hardware descriptor.
The latest v2.09 (hwOS) and v1.1.0 (hwOS4) firmware introduced a new
variant of the hardware descriptor command. This extended command
returns:

 - a 16 bit hardware descriptor
 - a 16 bit feature descriptor
 - an 8 bit model descriptor

The hardware descriptor is backwards compatible with the existing one
(upper bits are all zero for now). For the OSTC4, the feature descriptor
is currently used to indicated the Bonex scooter version (0x01), and the
model descriptor is 0x43. For all other models, the feature and model
descriptors are always zero for now.

For older firmware versions, which do not support the new extended
descriptor yet, there is an automatic fallback to the previous
descriptor.
2016-08-02 10:44:34 +02:00
Jef Driesen
9ef840fc96 Update the OSTC device descriptors.
There are a few new hardware variants since the last update.
2016-07-30 21:40:56 +02:00
Jef Driesen
f94aab3c8e Merge branch 'ostc4' 2016-07-30 21:39:56 +02:00
Jef Driesen
b896847e14 Add a workaround for an OSTC4 firmware bug.
Due to a firmware bug, the deco/ndl info is incorrect for all OSTC4
dives with a firmware older than version 1.0.8. Since it's not possible
to correct the info again, it's ignored and not returned to the
application.
2016-07-30 21:36:55 +02:00
Jef Driesen
ff15b865b2 Fix the decoding of the OSTC4 firmware version.
The OSTC4 firmware version uses four digits for the firmware version
(X.Y.Z.Beta), while all other hwOS models use two digits (X.Y). To
preserve backwards compatibility with the existing two byte data format,
the OSTC4 firmware version is packed into a 16 bit integer as follows:

   XXXX XYYY YYZZ ZZZB

and stored with little endian byte order.
2016-07-30 21:36:55 +02:00
Jef Driesen
2829f7ebf9 Add an ostc3 specific function with the model number.
To be able to pass the OSTC 3 model number to the parser, and preserve
backwards compatibility, we need a new function. The new function should
also be used for the Frog, by passing zero as the model number.

Using the hw_ostc_parser_create() function with the hwos parameter set
to one, is now deprecated but will remain supported for backwards
compatibility.
2016-07-23 23:14:13 +02:00
Jef Driesen
29caab0673 Rename the frog parameter and field to hwos.
The frog parameter and field are not only used for the Frog, but also
for all hwOS based models. Therefore, using the more generic hwos as the
name is more meaningful.
2016-07-23 23:11:30 +02:00
Jef Driesen
ad2257569c Add a new dc_parser_new2 convenience function.
For applications supporting offline parsing (like libdivecomputer's own
dctool application), some device specific knowledge is still required in
order to map a particular model to the corresponding backend. The new
convenience function will take care of that internally.

The already existing dc_parser_new() function does the same, but
requires an open device handle, which makes it unsuitable for offline
parsing.
2016-07-22 21:14:33 +02:00
Jef Driesen
c8b2d89354 Set the default model number.
When the device family is provided without an explicit model number, we
simply choose the first available model. But since new models are being
added all the time, this default model is not guaranteed to remain the
same. That's not desirable because it can alter the behaviour of the
application.

The introduction of the Aeris 500AI is an example of this problem. The
default model in the vtpro family used to be the Oceanic Versa Pro. But
because the Aeris 500AI has a lower model number, it automatically
became the new default model. Since both use a different protocol
variant (MOD vs INTR) they are not interchangable.

The default model is now hardcoded. The best option is of course to
provide the model number explicitly!
2016-07-11 21:49:16 +02:00
Jef Driesen
335539f179 Merge branch 'aeris500ai' 2016-07-11 21:48:58 +02:00
Jef Driesen
92f84b5945 Refactor the oceanic download function.
The large and complex oceanic_common_device_foreach() function is
refactored into two independent helper functions. One for reading the
entries in the logbook ringbuffer, and another for reading the profile
data.
2016-07-11 21:47:29 +02:00
Jef Driesen
aaa7fbe08d Add support for the Aeris 500AI.
The Aeris 500AI is quite different from the other vtpro compatible
models. First, it uses the INTR protocol variant. Next, it doesn't
appear to have a logbook ringbuffer. Instead it supports a new read
logbook index command (0x52) that returns the logbook entries. This
requires a custom implementation of the logbook function.
2016-07-11 21:47:29 +02:00
Jef Driesen
9c251b6814 Ignore samples with all 0xFF bytes. 2016-07-11 21:47:29 +02:00
Jef Driesen
5824254cf5 Add support for the INTR protocol variant.
There are two variants of the vtpro communication protocol: the existing
MOD variant and the new INTR variant. The main difference is in the
initialization sequence, with two completely different response packets:

   MOD--OK_V2.00
   INTR-OK_V1.11

The INTR variant does not appear to return useful information in the
version packet.
2016-07-11 21:47:29 +02:00
Jef Driesen
b41ecd0c15 Add a parameter with the model number. 2016-07-11 21:47:29 +02:00
Jef Driesen
9bae07551f Allow custom logbook and profile functions.
By adding the logbook and profile functions to the vtable, a dive
computer backend can now easily replace the default implementation with
a custom one, without having to duplicate the common code.
2016-07-11 21:47:29 +02:00
Jef Driesen
4ba92e24ef Fix a crash when no dives are present.
To guard applications from divisions by zero, the progress event code
asserts the maximum value should always be non-zero. The eonsteel does
trigger this assert when there are no dives present.
2016-07-11 13:14:15 +02:00
Jef Driesen
1e22760f91 Fix the memory layout for the Aqualung i300.
The profile ringbuffer ends at 0xFE00 instead of 0x10000.
2016-06-23 08:48:45 +02:00
Jef Driesen
47037286a2 Fix the sample rate for the Aqualung i450t. 2016-06-13 15:17:58 +02:00
Jef Driesen
375fe2f6a7 Fix the nitrox gas mix parsing.
Mares Darwin compatible devices support a nitrox mode. The nitrogen
percentage should only be taken into account when the dive mode is set
to nitrox, because the last used value remains in place for air dives.
2016-06-03 08:19:42 +02:00
Jef Driesen
cb3b372b5b Add support for the dive mode field. 2016-06-03 08:13:55 +02:00
Jef Driesen
73a06407b8 Fix the length of the Vyper Novo gas change event.
Just like the Suunto DX, the Vyper Novo uses 5 bytes for the 0x06 gas
change event.
2016-06-02 08:27:24 +02:00
Jef Driesen
8f776cc55e Add support for the Aqualung i300. 2016-05-16 09:06:57 +02:00
Jef Driesen
d1aa9478a4 Merge branch 'refactor' 2016-05-10 20:22:07 +02:00
Jef Driesen
f8417037c6 Convert operating system errors.
Errors reported by system calls are now converted to the corresponding
libdivecomputer status code. This results in a more descriptive and
meaningfull return value.
2016-05-10 11:52:32 +02:00
Jef Driesen
4fd0118d4e Add support for 1.5 stopbits. 2016-05-10 11:35:03 +02:00
Jef Driesen
72bd82f0a3 Add support for space and mark parity. 2016-05-10 11:35:03 +02:00
Jef Driesen
84563c6303 Refactor the internal serial and IrDA api.
The low level serial and IrDA functions are modified to:

 - Use the libdivecomputer namespace prefix.

 - Return a more detailed status code instead of the zero on success and
   negative on error return value. This will allow to return more
   fine-grained error codes.

 - The read and write functions have an additional output parameter to
   return the actual number of bytes transferred. Since these functions
   are not atomic, some data might still be transferred successfully if
   an error occurs.

The dive computer backends are updated to use the new api.
2016-05-10 11:34:57 +02:00
Jef Driesen
dbba7f3272 Fix the date for the Sherwood Insight 2. 2016-04-27 16:20:04 +02:00
Jef Driesen
33f5206f79 Add support for the Beuchat Mundial 2 and 3.
These two models use the same memory layout and data format as the
Oceanic F10.

Reported-By: Nick Shore <support@mac-dive.com>
2016-04-27 09:09:06 +02:00
Jef Driesen
3978dea153 Merge branch 'eonsteel' 2016-04-26 21:04:32 +02:00
Jef Driesen
d40cdb4755 Add the devinfo event.
The devinfo event with the device serial number is required for the
fingerprint feature. Without this event, applications won't be able to
load (or save) the correct fingerprint. All necessary information is
already available in the initial handshake packet.
2016-04-26 10:59:02 +02:00
Jef Driesen
76c52b582a Add support for the fingerprint feature. 2016-04-26 10:56:52 +02:00
Jef Driesen
ce82829284 Fix a memory leak.
A new buffer is allocated for each dive, but only the last one is freed.
Since the code is already prepared to simply re-use the same buffer,
there is no need to allocate those extra buffers.
2016-04-26 10:56:48 +02:00
Jef Driesen
0899486378 Add support for the new DX data format.
Just like the D4i and D6i, the new header is a few bytes larger. The
correct variant can again be detected by means of the logbook id tag at
the start of the header.
2016-04-19 09:02:52 +02:00
Jef Driesen
018c27d7b3 Add support for the Aqualung i450T. 2016-03-31 13:26:34 +02:00
Jef Driesen
f3fb2391f9 Add support for the Cressi Newton.
The Cressi Newton appears to be compatible with the Leonardo and Giotto.
2016-03-29 16:34:59 +02:00
Jef Driesen
469717a2a1 Add support for imperial units in the xml output.
Libdivecomputer always uses metric units internally. But when reverse
engineering a device that stores everything using imperial units, it's
very convenient to be able to switch the output to imperial units too.
2016-03-29 16:34:27 +02:00
Jef Driesen
8ab3fb0542 Always close the xml tags.
The dive and sample xml tags were not closed properly if an error
occurred during parsing.
2016-03-27 22:02:52 +02:00
Jef Driesen
c8b166dadb Get the gas mixes from the sample data.
The Shearwater devices support adding, removing or editing gas mixes
during the dive. The pre-defined gas mixes available in the opening and
closing block are only a snapshot of the configuration at the start and
at the end of the dive. Thus by editing the gas mixes during the dive
it's possible to switch to a gas mix that is not present in the opening
(or even the closing block). The parser doesn't support that.

To avoid this problem, we now collect the available gas mixes from the
sample data. As a side effect we only return those gas mixes that are
effectively used during the dive.
2016-03-23 10:50:21 +01:00
Jef Driesen
c964fa5ad9 Cache the dive mode internally.
This simply moves the code to the get the dive mode from its own
function into the existing caching function.
2016-03-23 10:50:21 +01:00
Jef Driesen
0bb3f7ebd1 Add support for the Shearwater Perdix. 2016-03-23 10:48:59 +01:00
John Van Ostrand
9a4e2b75a5 Add support for the Cochran Commander and EMC. 2016-03-22 20:09:45 +01:00
Jef Driesen
280f1871f0 Add support for the Uwatec Aladin Sport.
The Aladin Sport appears to be compatible with the Aladin 2G.
2016-03-17 08:22:39 +01:00