subsurface/dives
Linus Torvalds 6c4e890960 Clean up divecomputer 'device' handling
We have this odd legacy notion of a divecomputer 'device', that was
originally just basically the libdivecomputer 'EVENT_DEVINFO' report
that was associated with each dive.  So it had firmware version,
deviceid, and serial number.

It had also gotten extended to do 'nickname' handling, and it was all
confusing, ugly and bad.  It was particularly bad because it wasn't
actually a 'per device' thing at all: due to the firmware field, a dive
computer that got a firmware update forced a new 'device'.

To make matters worse, the 'deviceid' was also almost random, because
we've calculated it a couple of different ways, and libdivecomputer
itself has changed how the legacy 32-bit 'serial number' is expressed.

Finally, because of all these issues, we didn't even try to make the
thing unique, so it really ended up being a random snapshot of the state
of the dive computer at the time of a dive, and sometimes we'd pick one,
and sometimes another, since they weren't really well-defined.

So get rid of all this confusion.

The new rules:

 - the actual random dive computer state at the time of a dive is kept
   in the dive data. So if you want to know the firmware version, it
   should be in the 'extra data'

 - the only serial number that matters is the string one in the extra
   data, because that's the one that actually matches what the dive
   computer reports, and isn't some random 32-bit integer with ambiguous
   formatting.

 - the 'device id' - the thing we match with (together with the model
   name, eg "Suunto EON Steel") is purely a hash of the real serial
   number.

   The device ID that libdivecomputer reports in EVENT_DEVINFO is
   ignored, as is the device ID we've saved in the XML or git files. If
   we have a serial number, the device ID will be uniquely associated
   with that serial number, and if we don't have one, the device ID will
   be zero (for 'match anything').

   So now 'deviceid' is literally just a shorthand for the serial number
   string, and the two are joined at the hip.

 - the 'device' managament is _only_ used to track devices that have
   serial numbers _and_ nicknames. So no more different device
   structures just because one had a nickname and the other didn't etc.

   Without a serial number, the device is 'anonymous' and fundamentally
   cannot be distinguished from other devices of the same model, so a
   nickname is meaningless. And without a nickname, there is no point in
   creating a device data structure, since all the data is in the dive
   itself and the device structure wouldn't add any value..

These rules mean that we no longer have ambiguous 'device' structures,
and we can never have duplicates that can confuse us.

This does mean that you can't give a nickname to a device that cannot be
uniquely identified with a serial number, but those are happily fairly
rare (and mostly older ones).  Dirk said he'd look at what it takes to
give more dive computers proper serial numbers, and I already did it for
the Garmin Descent family yesterday.

(Honesty in advertizing: right now you can't add a nickname to a dive
computer that doesn't already have one, because such a dive computer
will not have a device structure.  But that's a UI issue, and I'll sort
that out separately)

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2021-08-18 13:22:02 -07:00
..
images Test for adding a picture with data after JFIF EOI to a dive 2017-05-06 10:31:09 -07:00
abitofeverything.ssrf Add test for profile data 2020-05-04 13:39:18 -07:00
Demo_SmartTrak.slg SmartTrak import - Add example divelog file 2015-11-12 07:39:21 -08:00
Dive_2013-02-02-1614.xml Suunto DM4 sample dive 2013-03-05 11:08:08 -08:00
DL7.xml Clean up divecomputer 'device' handling 2021-08-18 13:22:02 -07:00
DL7.zxu Add two dive headers to DL7 sample 2018-01-08 06:06:12 +02:00
Example.log Import Datatrak/WLog files 2015-03-10 10:03:08 -07:00
exportprofilereference.csv Add test for profile in VPMB mode 2021-03-24 10:30:22 -07:00
exportprofilereferenceVPMB.csv Add test for profile in VPMB mode 2021-03-24 10:30:22 -07:00
gps-import.gpx Desktop: Import gps coordinates: test files 2020-01-24 09:51:51 -08:00
gps-import.xml Desktop: Import gps coordinates: test files 2020-01-24 09:51:51 -08:00
mergedVyperOstc.xml Clean up divecomputer 'device' handling 2021-08-18 13:22:02 -07:00
ostc.xml Add test for merging multiple cylinders 2017-02-09 22:22:12 -08:00
ostc_00087_04-05-2014_043m_032min.dive OSTCTools-Add two sample dives 2015-04-04 12:25:52 -07:00
ostc_00173_17-08-2013_027m_043min.dive OSTCTools-Add two sample dives 2015-04-04 12:25:52 -07:00
Poseidon_MkVILog.csv Replace Poseidon example dive log files in dives directory 2014-11-01 22:13:03 -07:00
Poseidon_MkVILog.txt Replace Poseidon example dive log files in dives directory 2014-11-01 22:13:03 -07:00
sac-test.xml Change gas in second cylinder in sac-test-dives 2013-12-02 12:33:47 -08:00
SampleDivesV2.ssrf Add a more complex sample dive 2015-06-11 10:31:11 -07:00
tank_pressure.xml Test dive for odd pressure profile 2014-01-01 09:48:15 -08:00
Test.csv Correct celcius/celsius typo in test dives 2020-02-09 14:41:43 -08:00
test0.xml Fix Qt date interfaces for times before 1970 2016-04-29 09:07:41 -07:00
test0b.xml Change fake profile behavior 2014-01-08 21:54:29 +08:00
test1.xml Correctly plot dives ending below the surface 2011-11-09 07:53:10 -08:00
test2.xml Correctly plot dives ending below the surface 2011-11-09 07:53:10 -08:00
test3.xml Replace Linus' dives with useful test dives that help test the app 2011-11-04 10:47:38 -07:00
test4.xml Correctly plot dives ending below the surface 2011-11-09 07:53:10 -08:00
test5.xml Replace Linus' dives with useful test dives that help test the app 2011-11-04 10:47:38 -07:00
test6.xml Replace Linus' dives with useful test dives that help test the app 2011-11-04 10:47:38 -07:00
test7.xml Update test dives 2011-11-04 14:54:22 -07:00
test8.xml Fix missing pressure plot at start of the dive in some situations 2011-11-04 15:38:46 -07:00
test9.xml Correctly plot dives ending below the surface 2011-11-09 07:53:10 -08:00
test9a.xml Prevent potential math overflow in new profile 2014-01-21 14:07:10 -08:00
test10.xml Add GPS locations to some of the test dives 2013-01-13 10:23:38 -08:00
test11.xml Add GPS locations to some of the test dives 2013-01-13 10:23:38 -08:00
test12.xml Add GPS locations to some of the test dives 2013-01-13 10:23:38 -08:00
test13.xml Add GPS locations to some of the test dives 2013-01-13 10:23:38 -08:00
test14.xml Add GPS locations to some of the test dives 2013-01-13 10:23:38 -08:00
test15.xml Add GPS locations to some of the test dives 2013-01-13 10:23:38 -08:00
test16.xml Add GPS locations to some of the test dives 2013-01-13 10:23:38 -08:00
test17.xml Add GPS locations to some of the test dives 2013-01-13 10:23:38 -08:00
test18.xml Fix the description of test dive cylinders 2014-07-15 20:46:02 -07:00
test19.xml Fix the description of test dive cylinders 2014-07-15 20:46:02 -07:00
test20.xml Fix the description of test dive cylinders 2014-07-15 20:46:02 -07:00
test21.xml Adjust test dives to comply with the current trip syntax 2013-05-16 00:36:34 -04:00
test22.xml Adjust test dives to comply with the current trip syntax 2013-05-16 00:36:34 -04:00
test23.xml Adjust test dives to comply with the current trip syntax 2013-05-16 00:36:34 -04:00
test24.xml Correctly deal with empty XML files 2012-09-17 21:03:30 -04:00
test25.xml Add two test dives that triggered the bug fixed in the previous commit 2012-12-06 13:06:16 -08:00
test26.xml Add two test dives that triggered the bug fixed in the previous commit 2012-12-06 13:06:16 -08:00
test27.xml Add test dive for constant temperature 2013-01-24 13:19:16 -08:00
test28.xml Different Icon for a Bookmark Event. 2013-12-04 19:41:29 -08:00
test29.xml Correctly parse multiple tags in the divelog 2013-12-12 16:29:06 -08:00
test30.xml Test dive for events 2013-12-28 07:40:54 -08:00
test31.xml Include images in profile 2014-02-06 11:29:23 -08:00
test32.xml Add test dive to show erroneous pp graphs 2014-03-15 15:01:08 -07:00
test33.xml Add test dive that has an unused cylinder 2014-04-05 16:12:16 -07:00
test34.xml Add test dive that shows heart rate 2014-04-07 14:20:01 -07:00
test35.xml Add beginning of pretend CCR XML file 2014-06-11 19:03:30 -07:00
test36.xml Add test dive with heart rate information 2014-07-29 15:43:52 -07:00
test38.xml Load and save extra data in Subsurface XML format 2014-11-07 12:59:15 -08:00
test40-42.xml Clean up divecomputer 'device' handling 2021-08-18 13:22:02 -07:00
test40.xml CCR test dive 2014-11-17 00:24:33 +00:00
test41.csv Adapt CSV test to include suit 2015-04-24 07:07:31 -07:00
test42.xml Some simple test for file parsing 2015-03-14 18:15:08 -07:00
test43.xml Load remote images 2015-03-16 12:42:36 -07:00
test44.xml Test for basic image handling 2017-02-21 13:14:56 -08:00
test47+48.xml Fix pO2 for CCR at shallow depths 2021-02-26 08:42:30 -08:00
test47.xml Fix pO2 for CCR at shallow depths 2021-02-26 08:42:30 -08:00
test47b.xml Add missing XML files for TestRenumber 2015-10-06 14:40:33 +01:00
test47c.xml Add missing XML files for TestRenumber 2015-10-06 14:40:33 +01:00
test48+47.xml Fix pO2 for CCR at shallow depths 2021-02-26 08:42:30 -08:00
test48.xml Dive site: fix merging tests 2019-04-12 18:19:07 +03:00
test50.xml Test dives for duplicate names and conflicting GPS 2015-02-14 18:13:35 -08:00
test51.xml Fixed get_gas_at_time for equal times 2018-10-30 15:33:43 +01:00
TestAPDLogViewer.csv Correct celcius/celsius typo in test dives 2020-02-09 14:41:43 -08:00
TestAtmPress.xml Convert the atmospheric pressure in the Information Tab to an editable field 2019-05-15 07:37:14 -07:00
TestComma.csv Correct celcius/celsius typo in test dives 2020-02-09 14:41:43 -08:00
TestDiveDivelogsDE.DLD Add two more versions of this dive from divelogs.de 2013-02-25 22:07:05 -08:00
TestDiveDivelogsDE.udcf Add two more versions of this dive from divelogs.de 2013-02-25 22:07:05 -08:00
TestDiveDivelogsDE.xml Fix pO2 for CCR at shallow depths 2021-02-26 08:42:30 -08:00
TestDiveDivingLog5.08.udcf Update DivingLog 5.08 export files 2013-02-26 08:39:09 -08:00
TestDiveDivingLog5.08.uddf Update DivingLog 5.08 export files 2013-02-26 08:39:09 -08:00
TestDiveDivingLog5.08allimperial.xml Update DivingLog 5.08 export files 2013-02-26 08:39:09 -08:00
TestDiveDivingLog5.08allmetric.xml Test dives 2013-02-26 08:50:05 -08:00
TestDiveDivingLog5.08allmetric.zip Update DivingLog 5.08 export files 2013-02-26 08:39:09 -08:00
TestDiveDM3.SDE Add the same test dive in a number of different formats 2013-02-25 20:28:58 -08:00
TestDiveDM4.db Suunto DM4 sample dive 2013-03-05 11:08:08 -08:00
TestDiveDM4.xml Clean up divecomputer 'device' handling 2021-08-18 13:22:02 -07:00
TestDiveDM5.db Test dives in DM5 database format 2017-11-27 13:42:10 -08:00
TestDiveDM5.xml Clean up divecomputer 'device' handling 2021-08-18 13:22:02 -07:00
TestDiveJDiveLog.jlb Removing MacRoman encoding from sample dive 2014-02-25 12:28:49 -08:00
TestDiveSeabearH3_0002SBDT.CSV Test dives for Seabear new format 2015-07-28 08:46:51 -07:00
TestDiveSeabearH3_0003SBDT.CSV Test dives for Seabear new format 2015-07-28 08:46:51 -07:00
TestDiveSeabearH3_0004SBDT.CSV Test dives for Seabear new format 2015-07-28 08:46:51 -07:00
TestDiveSeabearH3_0005SBDT.CSV Test dives for Seabear new format 2015-07-28 08:46:51 -07:00
TestDiveSeabearHUDC.csv Add test dive for Seabear HUDC 2014-10-28 07:25:34 -07:00
TestDiveSeabearHUDC.xml Clean up divecomputer 'device' handling 2021-08-18 13:22:02 -07:00
TestDiveSeabearNewFormat.xml Clean up divecomputer 'device' handling 2021-08-18 13:22:02 -07:00
TestDiveSeabearT1_0001SBDT.CSV Test dives for Seabear new format 2015-07-28 08:46:51 -07:00
TestDiveSeabearT1_0002SBDT.CSV Test dives for Seabear new format 2015-07-28 08:46:51 -07:00
TestDiveSeabearT1_0003SBDT.CSV Test dives for Seabear new format 2015-07-28 08:46:51 -07:00
TestDiveSeabearT1_0004SBDT.CSV Test dives for Seabear new format 2015-07-28 08:46:51 -07:00
TestDiveSeabearT1_0005SBDT.CSV Test dives for Seabear new format 2015-07-28 08:46:51 -07:00
TestDiveSeacSync.db Implement Seac SeacSync databaser parser. 2020-09-04 15:54:08 +03:00
TestDivingLog4.1.1.sql Divinglog test dive 2015-07-13 15:21:30 -07:00
TestSensusSingle.csv Sample log from Sensus Ultra, exported in CSV 2014-01-17 05:57:29 +07:00
TestXP5_de.csv Sample dive from XP5 2013-12-24 10:43:29 -08:00
TwoTimesTwo.ssrf Add test for dive site duplication bug 2015-08-30 10:32:38 -07:00
vyper.xml Add test for merging multiple cylinders 2017-02-09 22:22:12 -08:00