Commit graph

13894 commits

Author SHA1 Message Date
Robert Bodily
85021b94b1 Fix buffer overrun and primary sensor id issues in Liquivision import
This changeset fixes 5 issues specific to importing from Liquivision dive logs:

Issue #1: Buffer overrun causes segmentation fault.
At the end of a dive record, untranslatable data is skipped and the file is
scanned for the start of the next dive.  This scan was implemented without
regard to buffer size and so the scan ran over the buffer boundary when trying
to scan for the next record after importing the last record in the file.

Issue #2: Incorrect identification of the primary sensor.
The primary tank pressure transmitter was being identified by using the sensor
ID reported in the first pressure event record encountered.  When diving with
multiple transmitters (buddy, student, or group transmitters), this is often
not the case and results in the buddy or other group transmitter's pressure
data being imported instead of the primary's.

Through empirical observation of several multi-sensor logs, I identified a
previously unhandled event code (0x10) as marking a sensor identification
event record.  Parsing this record allows the primary and other sensors
to be definitively identified regardless of which one sends the first pressure
event.

Issue #3: Sensor values added to the sample collection regardless of sensor ID.
When processing events, the code previously dropped through to create a sample
for every pressure event record, regardless of which sensor ID that event is
associated with.  Pressure events for sensors other than the primary are now
ignored and omitted from the sample collection.

Issue #4: Duplicate samples when pressure event time syncs with sample time.
The sample index (d) was not incremented in this specific case resulting in
a duplicate sample (for the same sample time) being created when processing
the next pressure event record.

Issue #5: Unsigned time difference results in erroneous interpolated samples.
When interpolating/extrapolating depth and temperature values for a between-
samples pressure event, a signed time value is subtracted from an unsigned time
value, resulting in an unsigned term.  This term is used as a scaling factor
and should be signed to allow for a negative value.  Currently, negative values
are instead treated as large unsigned values which result in erroneous scaled
depth and temperature values.

Signed-off-by: Robert Bodily <robert@bodily.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-15 14:44:18 -07:00
Jan Mulder
5c1d67e0c1 code cleanup: one more unused include
See c7a3509800. A forgotten include is now removed as well.

Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
2017-06-16 05:31:41 +09:00
Jan Mulder
26a0e741b8 code cleanup: remove unimplemented classes and structs
Remove forward declared but not implemented classes and structs.

Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
2017-06-16 05:31:41 +09:00
Jan Mulder
db39f1a847 code cleanup: remove 2 unused structs
Luckily these 2 structs in this ugly code are not used. Remove them.

Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
2017-06-16 05:31:41 +09:00
Dirk Hohndel
816863dccf Correctly hook up libdivecomputer log and dump
This was checking the status of the wrong UI elements.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-15 02:24:48 -07:00
Miika Turkia
ec40a25007 Parse He when importing from DM5
Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
2017-06-13 18:11:22 +09:00
Dirk Hohndel
fb2638b3fb QML UI: small fix and whitespace cleanup
In the JS code we should use assignment with '='.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-13 00:54:21 -07:00
Jan Mulder
8cd711f8e2 BT Discovery: add Shearwater Petrel and Perdix
Add Shearwater Petrel and Perdix to automatic detection

Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
2017-06-12 19:12:40 -07:00
Dirk Hohndel
be8f20dda6 Don't declare static function in .h file
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-12 11:05:42 -07:00
Jan Mulder
23df593817 Mobile: wrap up fixes for BT download on Android
Major functional change in this commit is the addition of found static BT devices
to the internal administration (on Android), in a way that is equivalent to
mobile-on-desktop. So, in both cases, the list of devices in the app are
as in the list of devices on the host OS (Linux or Android). To minimize code
duplication, the btDeviceDiscovered slot is split in two parts, the part to
act as slot for the Qt BT discovery agent (Linux, so mobile-on-desktop), and
the part only needed for Android.

Remaining to be fixed: the correct handling of the QML UI selection of
vendor/product. The first default dive computer is correctly detected,
all paired devices from the virtual vendow can be selected, but clicking
through vendors results in non logical selections. It is obvious why
this is, but a fix is not straigforward at this point.

Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-12 11:05:08 -07:00
Jan Mulder
5142d7409f Mobile: add BT name to vendor/product capability
This adds a central function to convert a BT name to a vendor/product pair
known to Subsurface. This allows interfacing from a paired BT dive
computer, without actively selecting its type, but by selecting it
from the list of paired BT devices. So, after this, downloading from
multiple (paired) DCs is also possible.

And not the niced piece of code ...

Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-12 10:59:05 -07:00
Jan Mulder
a43cafa515 Mobile: do not BT Discover on Android (Q_OS_ANDROID vs Q_OS_LINUX)
This seems a very trivial commit, but it is not. It appears that on an Android
build, with defined(Q_OS_ANDROID) the Q_OS_LINUX variable is also defined.

This results in a very tricky discovery process: 1) the JNI stuff pulls the paired
devices from the local BT controller, and 2) The QT discovry agent gets active
BT devices. 1) is a static list, that is, not dependent on actual
visual/discoverable BT devices; it is just cached data from the phone. 2) On
Android, this results in a list of actively visible (paired and not paired)
devices. On desktop, however (with QT/bluez BT stack) the QT discovery agent
just gets the list of paired devices, so more or less equivalent to the situation
described under 1) for Android.

Ok, a long story, but just do not do a discovery on Android at all. Basically,
we need the BT address, device name, and possibly a specific SPP service UUID. This are
fixed and known for HW and Shearwater at this point, so there is no need for a
(lengthy) discovery process, and making sure the the dive computer is discoverable
at the moment the app wants to construct its data to show in the UI. So, the
static list of paired devices is all we need.

Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-12 10:58:57 -07:00
Dirk Hohndel
ca59dbd40d BT discovery: distinguish names with addresses
It's possible that the user has more than one dive computer with the
same name paired with their computer / device. So let's just add the
address to the name to make it possible to tell those apart.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-12 10:05:55 -07:00
Jan Mulder
790c0dcfc8 QML UI: add internal admin for virtual vendor
Added a list of paired BT devices for the "Paired BT Devices" vendor. The
devices under this vendor represent all BT devces that can be found
from the local BT interface. Some special processing is required, as
the BT provided data is (obviously) missing the specific data needed
to open a BT device using libdc code. This processing is not in
this commit, but will follow. This commit is preparation for that.

Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-12 09:55:27 -07:00
Jan Mulder
c7a3509800 Android BT: fix compile bug
One Andorid JNI include was missing. And removed the unused ones
from QMLManager.

[Dirk Hohndel: I had added the missing include elsewhere, so this commit
               now only has the removal of the unused includes]

Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-12 09:51:13 -07:00
Jan Mulder
f6e94e691f QML UI: call correct function for BT address
After the recent refactoring of QMLManager to btdiscovery, the
manager.getBtAddress() got superseeded by
downloadThread.data().getDetectedDeviceAddress(). Corrected this
here.

Futher some debug output is modified, so that it report the proper
function names.

This corrects the download from an automatically detected OSTC 3.
Manul selection of the same device from the fake vendor "Paired
BT Devices" does not work, however. Still work to be done in
that area.

Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-12 09:49:11 -07:00
Jan Mulder
a7288cc912 QML UI: do not crash on selecting dive computers
For reasons unknown to me, the DCDeviceData instance was freed way too early,
and used afterwards, obviously resulting in a SIGSEGV. This commit creates
the DCDeviceData as a direct child of the QMLManager instance, ensuring
it does not get freed prematurely.

Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-12 09:49:05 -07:00
Miika Turkia
22e40063f1 Download dialog showed time incorrectly
The used time format was h:mh: i.e. 1:16h:
This patch gets rid of the colon after the hour indicator.

Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
2017-06-12 07:09:11 -07:00
Lubomir I. Ivanov
e7a7bd4de2 qthelper.cpp: leave lbs rounding to QString().arg() with 'f'
The following call in weight_string():
str = QString("%1").arg(lbs, 0, 'f', lbs >= 40.0 ? 0 : 1);

will make values in lbs larger or equal to 40 to have no fractional
part and be rounded to nearest, while values less than 40 will have one
decimal place.

fixes #412

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-11 16:03:38 -07:00
Lubomir I. Ivanov
1ddda0755b TabDiveInformation.cpp: use lrint() for sac.mliter in updateData()
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-11 15:57:29 -07:00
Lubomir I. Ivanov
16efcf2af8 simplewidgets.cpp: silence warning about parentheses
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-11 15:57:08 -07:00
Lubomir I. Ivanov
fb3ce8554c datatrak.c: don't use POSIX %m format for sscanf() in dtrak_prepare_data()
The format option "%m" doesn't work for MINGW/Windows and is reported as
an unknown conversation type and this sscanf() call would not work.

The alternative is to malloc() enough space manually - e.g.
strlen(input) + 1.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-11 15:56:41 -07:00
Dirk Hohndel
74bf8d5260 Android build fix
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-11 15:46:39 -07:00
Dirk Hohndel
5bc91f00c5 Fix a few warnings
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-11 15:46:26 -07:00
Salvador Cuñat
49cbfdd72d smtk2ssrf-mxe-build.sh: add a flag for git repo
Previous script would fail on git folders that pull from more than one
repo. That's not a general case, but pretty usual for developers
pulling/pushing to github.
BTW in this cases, a lind git pull doesn't ensure we are pulling from
the right repo.
When run without flag, default to pull --rebase.

At the same time introduce a tiny func to return a message and bail out
after some command failures.
2017-06-11 14:00:02 -07:00
Dirk Hohndel
b14a522f4f QML UI: move BT handling into core code
This shouldn't be part of the UI (qmlmanager), but part of our
overall handling of dive computers and BT devices.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-11 13:55:41 -07:00
Dirk Hohndel
3b993fbaad QML UI: adjust to modified logging API
appendTextToLog prepends the elapsed time which can be useful, so let's
not remove that but instead have it log to qDebug() instead.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-11 13:55:41 -07:00
Dirk Hohndel
2d8489158d Make message handler write to console as well
This way we can see the debug output even if the app is hung or crashes.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-11 13:55:41 -07:00
Tomaz Canabrava
0ea6f13891 Add a messageHandler to take care of qDebug & friends on QML
all qDebug / qCDebug and friends now will be properly
logged into developer -> log, on QML.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-11 13:55:41 -07:00
Dirk Hohndel
e7cd1785c4 QML UI: add paired BT devices as vendor
This way the user can explicitly chose which dive computer they
want to download from.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-11 13:55:41 -07:00
Dirk Hohndel
8faf33eac6 QML UI: correctly set up the divecomputer for download
If we find a paired BT divecomputer, this will populate vendor and product
correctly for that device.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-11 13:55:41 -07:00
Salvador Cuñat
bde73f05d4 smtk-import portability: avoid using %m[] in sscanf
As Lubomir pointed out in his patch for datatrak.c, the format option %m
for sscanf doesn't work in mingw/windows. Fortunately it's unnecessary
as dates are dropped and we just get times.

Signed-off-by: Salvador Cuñat <salvador.cunat@gmail.com>
2017-06-11 13:50:59 -07:00
Salvador Cuñat
95ee579150 smtk-import: portability: rework non portable funcs
For different reasons some used functions aren't portable or simply are
not included in mingw. This includes index, rindex, strptime, and
timegm.

A workaround for this is needed, if we want to build for windows using
mingw based mxe environment.  This patch does:

- drops index and rindex in favor of strchr and strrchr
- substitute strptime with a sscanf parsing
- emulate timegm with a private func smtk_timegm()
- remove definitions needed by strptime

Signed-off-by: Salvador Cuñat <salvador.cunat@gmail.com>
2017-06-11 13:50:59 -07:00
Salvador Cuñat
b47d18b45a smtk-import: portability: rename DATE
DATE happens to be defined in wtypes.h. Redefining it may be a bad idea,
so move it to _DATE

Signed-off-by: Salvador Cuñat <salvador.cunat@gmail.com>
2017-06-11 13:50:59 -07:00
Salvador Cuñat
15c0a0a6ea smtk-import: portability: include windows.h
Include windows.h if we are cross building to windows

Signed-off-by: Salvador Cuñat <salvador.cunat@gmail.com>
2017-06-11 13:50:59 -07:00
Robert C. Helling
6963b52d96 Let command line version not open an X window
So we can run it on a headless system

Signed-off-by: Robert C. Helling <helling@atdotde.de>
2017-06-11 13:50:30 -07:00
Salvador Cuñat
22612831bb smtk-import: Add mxe cross-building script
Add to packaging/windows an script to build an installer for the
importer tool.
2017-06-11 13:50:30 -07:00
Salvador Cuñat
b012258617 smtk-import: add cmake modules and .nsi skeleton
Needed to crossbuild to windows.
The cmake modules are just clones from those under
subsurface/cmake/Modules, tweaked to build smtk-import for windows.
2017-06-11 13:50:30 -07:00
Salvador Cuñat
3f4f2455d3 smtk-import: Add build script for smtk2ssrf
Add a bash script to build the linux version of smtk2ssrf tool.
It works mostly like build.sh, but have some flags avaliable.
2017-06-11 13:50:30 -07:00
Salvador Cuñat
ddd39f20ff smtk-import: change CMakeLists.txt
As SmartTrak importer is building separately from Subsurface, a full
CMakeLists.txt file is necessary for the smtk-import directory.
It includes cross building to windows capability.
2017-06-11 13:50:30 -07:00
Salvador Cuñat
3775f459b5 CMakeLists.txt: Remove SmartTrak import options
Remove SmartTrak import options from Subsurface's CMakeLists,txt, as a
first step to keep the importer apart from the main application.
2017-06-11 13:50:30 -07:00
Tomaz Canabrava
03e771066b QML UI: show selection box on the Download from DC list
QML and C++ model don't interact too much, a new Rule
should be created and used on the QML

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-04 07:11:01 -07:00
Jan Mulder
78ee3f40a5 Silence compiler warnings
Silence some compiler warnings about implicit double to int conversions.

Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
2017-06-02 11:31:00 -07:00
Jan Mulder
dbd1d1f41a Android BT: generalize pairing data
This adds a list of paired BT devices to the QMLManager class. In addition,
a very simple implementation is made of getting the paired BT devices on
Linux, so that we can test further processing of selecting the proper
devices, in a mobile-on-desktop situation.

Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
2017-06-02 11:31:00 -07:00
Jan Mulder
3b4091a0b9 Android BT: do not force BT on
It is very impolite to force BT on at start of the mobile app. We cannot
know if the user is going to import dives over BT.

Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
2017-06-01 16:53:29 -07:00
Jan Mulder
ed392694db Android BT: pull the pairing data from a device
As Qt is not able to pull the pairing data from a device, a lengthy
discovery process is needed to see what devices are paired. On
https://forum.qt.io/topic/46075/solved-bluetooth-list-paired-devices
user s.frings74 does, however, present a solution to this using JNI.
Currently, this code is taken "as is".

Currently, only for Android (so not mobile-on-desktop, or even desktop).
And only generating logging data in the logcat.

Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
2017-06-01 16:53:29 -07:00
Robert C. Helling
ec34ebfb04 Enable BT for iOS build
and add some new source files to .pro file

Signed-off-by: Robert C. Helling <helling@atdotde.de>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-01 14:33:41 -07:00
Jan Mulder
f5adbe5662 Use #if defined() instead of #if
qtcreator (4.3.0) got confused whether BT_SUPPORT was defined. Using
work as expected.

Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
2017-06-01 07:28:18 -07:00
Dirk Hohndel
02d3289bbf Android BT download: hardcode UUID
While it seemed logical to use the advertized service UUID that doesn't
appear to be working - instead using this hard coded UUID seems to do
the trick. I now did a successful download from my Shearwater Petrel.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-05-31 22:16:25 -07:00
John Van Ostrand
40f5e2e30c Cochran import: Removed long tail of 0 depth from profile
The Cochran logs the first 10 to 20 minutes (configurable) of
surface interval in case the diver re-submerges.

Signed-off-by: John Van Ostrand <john@vanostrand.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-05-31 21:54:05 -07:00