2170 Commits

Author SHA1 Message Date
Michael Keller
9641883f2f
Merge pull request #64 from mikeller/fix_sensor_count 2024-06-02 16:30:57 +12:00
Michael Keller
c7e89eab11 Garmin: Fix Reporting of Sensor Count.
Report the number of tank sensors independently of the number of
gasmixes. This fixes an unintuitive error message popping up when
importing dives with more sensors than gasmixes.

Fixes https://github.com/subsurface/subsurface/issues/4221.

Reported-by: @bwong2132
Signed-off-by: Michael Keller <mikeller@042.ch>
2024-05-31 11:35:32 +12:00
Michael Keller
9b12e8e638
Merge pull request #63 from mikeller/cherry_pick_mares_fix 2024-05-25 08:50:41 +12:00
Jef Driesen
d9c230820f Fix the Mares usb-serial communication
The BLE changes in commit e83732e200620882b13804f1ca54c1ab90a38188 are
causing major problems for some of the usb-serial enabled models, like
the Puck Pro and Quad Air.

These models appear to require a small delay of a few milliseconds
between sending the two command bytes and the remainder of the command
payload. I suspect the device is still busy processing those first two
bytes, and thus not ready in time to receive the remaining data. Instead
of manually adding a fixed delay, restore the previous behaviour and
wait for the ack byte again. This has the advantage that the delay is
automatically proportional to the response time of the dive computer.

For the BLE communication nothing changes.
2024-05-19 18:49:20 +12:00
Michael Keller
5d321deb8a
Merge pull request #62 from mikeller/remove_garmin_filter 2024-05-08 12:29:29 +12:00
Michael Keller
9f2674ee7c
Merge pull request #61 from mikeller/add_shearwater_stack_status 2024-05-08 12:29:10 +12:00
Michael Keller
6bd1183c34
Merge pull request #59 from mikeller/fix_shearwater_sensor_calibration 2024-05-08 12:28:54 +12:00
Michael Keller
0c125489df
Merge pull request #57 from mikeller/remove_shearwater_predator_timesync 2024-05-08 12:27:55 +12:00
Michael Keller
fa224f5300 Shearwater: Add Stack Timer Information.
Add the configured stack run time and the remaining stack run time at
the start and end of the dive as extra information.

Signed-off-by: Michael Keller <github@ike.ch>
2024-05-07 19:40:48 +12:00
Michael Keller
8f686ce1d8 Shearwater: Remove timesync for Predator.
Remove the timesync function from the code for the Predator - testing
has shown that this function is not supported by this model.

Signed-off-by: Michael Keller <github@ike.ch>
2024-05-07 12:28:39 +12:00
Michael Keller
a7fb341fb0 Shearwater: Add Sensor Calibration Info.
Add the calibration values for ppO2 sonsors in CCR mode as extra info
fields.

Signed-off-by: Michael Keller <github@ike.ch>
2024-05-07 09:44:46 +12:00
=Michael Keller
ff0023b8b4 Garmin: Remove Unused Transport Filter.
Remove the unused transport filter for the file based Garmin importers,
as it is not used at all in the way that the USB storage transport is
implemented.

Signed-off-by: Michael Keller <github@ike.ch>
2024-05-05 20:36:22 +12:00
Michael Keller
6e65428fc8 Shearwater: Fix Sensor Calibration for DiveCAN Controllers.
Remove the code that forces hiding of O2 sensor readings despite the
sensors being reported as properly calibrated by the divecomputer.
This fixes the problem of no sensor readings showing on DiveCAN
controllers due to the fact that the sensor calibration values are
returned as defaults on these devices.
Also increase the timeout for data reads - this seems to improve the
reliability when reading logs of long dives.

Signed-off-by: Michael Keller <github@ike.ch>
2024-05-04 01:53:50 +12:00
Michael Keller
89221475cf
Merge pull request #60 from mikeller/fix_serial_setting
I verified that this bug is breaking the reporting of the serial number on my dive computers as well - they all report as `0`. Merging this as it is affecting a lot of users.
2024-05-04 01:40:03 +12:00
Michael Keller
bff6f7c140 Fix Setting of the Device Serial Number.
Fix setting of the serial number in `dc_parser_new()`.

Fixes https://github.com/subsurface/subsurface/issues/4155

Signed-off-by: Michael Keller <mikeller@042.ch>
2024-05-03 16:09:02 +12:00
Michael Keller
ca55a11ed5
Merge pull request #58 from mikeller/add_garmin_descent_mk3_support
Merging this - there is demand for this fix, so now is a good time to get it tested: https://groups.google.com/g/subsurface-divelog/c/7Uo7A9YTGhg/m/BlhlZ2NNBQAJ
2024-04-28 18:46:40 +12:00
Michael Keller
bb502c6d8b Garmin: Fixes to Add Support .fit format version 2.1.
Ignore timestamps on messages that we do not read any other fields from
- with the new (firmware >= 16.x) .fit file format these messages seem
to be sent out of order, causing other messages to be ignored if they
come after them in the file but are before them in the timeline.
Track the OC / CCR state at the beginning of the dive based on the
dive type - this avoids spurious 'switched to ...' messages caused by
new 'gas switch' messages at the beginning of dives.

See also https://forums.garmin.com/developer/fit-sdk/b/news-announcements/posts/important-fit-activity-file-message-change

Signed-off-by: Michael Keller <github@ike.ch>
2024-04-26 01:17:06 +12:00
Michael Keller
792090566e Garmin: Add Support for Descent Mk3(i).
Add support for the Garmin Descent Mk3(i) models.
This pretty much just updates the entry in the device list to cover Mk2
and Mk3 models.
It does nothing to add support for MTP when reading from an Mk3 model -
I have not been able to get MTP support on linux going reliably, and I
do not have an Mk2 / Mk3 to test with anyway.
I suspect that MTP support is incomplete anyway, as the
product IDs for models like the Mk2S and Mk2G are not detected.
This change also adds an extra info field for the Model (based on a
heuristic and incomplete list).
It also fixes the data type for the sensor_type field.

Signed-off-by: Michael Keller <mikeller@042.ch>
2024-04-22 00:56:44 +12:00
Michael Keller
62a29eea15
Merge pull request #56 from mikeller/update_libdivecomputer_202402 2024-02-26 13:00:50 +13:00
Michael Keller
4bbfe1659e Shearwater: Fix Up Timesynch Changes.
A few fixes for bugs introduced during merge conflict resolution.

Signed-off-by: Michael Keller <mikeller@042.ch>
2024-02-14 12:01:58 +13:00
Michael Keller
39bc2fe05c Import: Clean up gasmix / tank usage.
Separate the usage enums and remove the unneeded values from each.

Signed-off-by: Michael Keller <github@ike.ch>
2024-02-14 12:01:51 +13:00
Michael Keller
edfb1a9c67 Import: Update Garmin Descent Import for libdivecomputer Update.
Update the importer for Garmin Descent to work with the latest upstream
version of libdivecomputer.

Signed-off-by: Michael Keller <github@ike.ch>
2024-02-14 11:38:31 +13:00
Michael Keller
d37cb91734 Merge remote-tracking branch 'libdivecomputer/master' into update_libdivecomputer_202402 2024-02-02 17:40:41 +13:00
Michael Keller
78710ab2f1
Merge pull request #55 from subsurface/add_garmin_descent_mk3_parsing_support 2024-01-23 11:08:37 +13:00
Michael Keller
76170009b4 Garmin: Add Support for Parsing of Garmin Descent Mk3 FIT files.
Add support for FIT files generated by the Garmin Descent Mk3.
This just fixes a field number limitation, it has not yet been
verified that the Mk3 file format is properly interpreted by Subsurface.

Signed-off-by: Michael Keller <mikeller@042.ch>
2024-01-22 12:54:02 +13:00
Jef Driesen
1d0aeecf65 Fix the React Pro White memory layout 2024-01-18 10:53:08 +01:00
Jef Driesen
de6696bc7f Add support for the Shearwater Tern 2024-01-17 07:48:54 +01:00
Jef Driesen
cfe345aa8e Exclude O2 sensors without calibration data
O2 sensor for which no calibration data is available will always result
in a ppO2 value of zero for all samples, which isn't very useful.
2024-01-12 09:15:12 +01:00
Jef Driesen
d47e1ce02b Add support for the Scubapro G3 and Luna 2.0
The new models appear to be compatible with the previous G2, but with
new model numbers and bluetooth names. The USB VID/PID for the G3 is
still unknown.

Reported-by: Greg McLaughlin <support@moremobilesoftware.com>
2024-01-10 09:01:59 +01:00
Jef Driesen
08d8c3e132 Add support for parsing the compass bearings
When no compass bearing is set on the dive computer, the stored value is
initialized to zero. Since this can also be a valid value, those zero
values are only ignored untill another non-zero value is present.

In later firmware versions, the value will get initialized to 0xFFFF
instead.
2023-11-23 11:42:23 +01:00
Jef Driesen
2d9008aff7 Remove disabled gas mixes
Returning disabled gas mixes to the application mainly results in lots
of unnecessary information. Therefore, remove all disabled gas mixes,
unless they are actively used. Many other dive computers do not even
include disabled gas mixes in the data.

Unlike previously assumed, the on/off state of each gas mix is actually
available in the PNF data format (opening record 4). For the older
Predator data format, this info isn't available and all gas mixes are
manually marked as enabled.
2023-11-15 11:08:21 +01:00
Jef Driesen
e1762fc8bd Skip all non-sample records
The IX3M 2 with the APOS5 firmware supports a new info record containing
the GPS coordinates. To be able to identify this new record type, the
previously reserved field at byte offset 52 is now used to store the
record type: zero for the existing sample record and one for the new
info record.

This also fixes the underlying problem of the zero timestamp in commit
3c50e91a1096332df66b2d33d64e5a8dc9136ab9, because the zero timestamp was
the result of incorrectly interpreting the first info record as a sample
record.
2023-11-02 15:45:24 +01:00
Jef Driesen
3c50e91a10 Allow a zero timestamp for the first sample
Previously the timestamp of the first sample was always a non-zero
value, but the IX3M 2 with the APOS5 firmware now appears to record a
timestamp of zero. This was incorrectly detected as a backwards time
jump because the time is also initialized to zero.
2023-10-29 21:31:40 +01:00
Jef Driesen
cb0164150e Merge branch 'bluelinkpro' 2023-10-19 10:34:26 +02:00
Jef Driesen
e83732e200 Fix the Mares Bluelink Pro communication
Sending the two byte command header and then waiting for the ack byte
before sending the remainder of the command payload causes problems for
some (but not all) users. Most likely the extra roundtrip time due to
waiting for the ack byte results in a delay that sometimes exceeds a
timeout in the dive computer while it's waiting for the payload data.

On the other hand, sending both the command header and the payload data
in one single packet is also not an option, because it causes problems
for some models, like the Mares Matrix. See commit
59bfb0f3189b14ae858650b851539d59e3fefe86 for details.

As an alternative solution, send the packet payload immediately after
the header, without waiting for the ack byte. This eliminates the extra
roundtrip time, while still sending out two separate bluetooth packets.
2023-09-27 10:10:40 +02:00
Jef Driesen
a7e7439cab Setup the 2 byte command header internally
Instead of setting up the two byte command header in every function,
move this logic to a central place.
2023-09-15 09:23:58 +02:00
Jef Driesen
072f0d4242 Fix a potential buffer overflow 2023-09-08 16:10:45 +02:00
Jef Driesen
baa1c494c1 Use a symbolic constant for the header size 2023-09-08 16:10:45 +02:00
Jef Driesen
330cb88952 Use plain ascii text in the code comments 2023-09-08 16:10:38 +02:00
Jef Driesen
37421a1b9a Merge branch 'filter-function' 2023-08-24 17:18:46 +02:00
Jef Driesen
fe9b47f4bd Document the device descriptor functions 2023-08-24 17:18:24 +02:00
Jef Driesen
ed871137b1 Export the filter function in the public api
The functionality provided by the filter function is not only useful for
the built-in transports, but also for the applications. For example in
combination with a custom transport.
2023-08-24 17:18:24 +02:00
Jef Driesen
4a9be44afd Use separate data structures for USB and USB HID
Using separate data structures for the filtering allows to keep the USB
and USB HID backends completely independent from each other.
2023-08-24 17:18:24 +02:00
Jef Driesen
a985b11859 Replace the filter parameters with an alternative
The USB I/O backend needs some additional information (e.g. interface
number and in/out endpoints) to setup the USB connection. This info is
currently maintained inside the descriptor filter function and gets
passed to the USB backend by means of the filter parameters.

This approach is not only unnecessary complex, but also makes it very
difficult to expose the filter function in the public api because the
data structures for those parameters are private.

Therefore, this data exchange is replaced with a direct mapping between
the USB VID/PID and the configuration info in the USB backend itself.
2023-08-24 17:18:24 +02:00
Jef Driesen
b2310e62d6 Pass the descriptor to the filter function
Passing the descriptor for which the filter function is being called is
a good practice and will also allow to implement some more specific
filtering in the future.
2023-08-24 17:18:22 +02:00
Jef Driesen
301fdbe364 Remove support for the Tusa TC1
Apparantly the Tusa TC1 does not support downloading dives at all. The
bluetooth communication is probably disabled in the firmware.
2023-08-16 13:17:55 +02:00
Jef Driesen
beb348dbf6 Merge branch 'ostc-remove-disabled-gasmixes' 2023-08-14 10:23:55 +02:00
Jef Driesen
5d36cc0798 Remove disabled gas mixes
Returning disabled gas mixes to the application mainly results in lots
of unnecessary information. Therefore, remove all disabled gas mixes,
unless they are actively used. Many other dive computers do not even
include disabled gas mixes in the data.

The removal of the disabled gas mixes requires a two pass approach for
parsing the profile data. The first pass is only used to discover which
gas mixes are actively used during the dive. Next, all disabled and not
actively used gas mixes are removed from the list. Since removing one or
more gas mixes also invalidates the index of the remaining gas mixes,
the profile needs to be parsed again to report the new index in the gas
switch samples.

The original one based index is used as the stable gas mix id, used for
looking up the new gas mix index.
2023-08-11 12:39:39 +02:00
Jef Driesen
993283d1c8 Store the original one based gas mix index 2023-08-10 14:04:52 +02:00
Jef Driesen
323804d5e6 Keep track of the actively used gas mixes
The hwOS models support switching to a disabled gas mix. Therefore, the
disabled state is not always a good indication whether a gas mix is used
or not. Look for gas switches during the parsing step instead to keep
track of the actively used gas mixes.
2023-08-10 14:04:20 +02:00