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
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
SampleDivesV2.ssrf Add a more complex sample dive 2015-06-11 10:31:11 -07:00
tank_pressure.xml
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
test1.xml
test2.xml
test3.xml
test4.xml
test5.xml
test6.xml
test7.xml
test8.xml
test9.xml
test9a.xml
test10.xml
test11.xml
test12.xml
test13.xml
test14.xml
test15.xml
test16.xml
test17.xml
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
test22.xml
test23.xml
test24.xml
test25.xml
test26.xml
test27.xml
test28.xml
test29.xml
test30.xml
test31.xml
test32.xml
test33.xml
test34.xml
test35.xml
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
TestDiveDivelogsDE.udcf
TestDiveDivelogsDE.xml Fix pO2 for CCR at shallow depths 2021-02-26 08:42:30 -08:00
TestDiveDivingLog5.08.udcf
TestDiveDivingLog5.08.uddf
TestDiveDivingLog5.08allimperial.xml
TestDiveDivingLog5.08allmetric.xml
TestDiveDivingLog5.08allmetric.zip
TestDiveDM3.SDE
TestDiveDM4.db
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
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
TestXP5_de.csv
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