summaryrefslogtreecommitdiffstats
path: root/dive.h
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2012-11-25 11:44:27 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2012-11-25 13:05:11 -0800
commit1ca1fe7994799ec7786a53914d713e51d56f87a3 (patch)
tree1348d98e71c9337d784900a4fc7607206c0e9c10 /dive.h
parent1b861ba20e1626d28686c3998fc3bb6b6b49a6d4 (diff)
downloadsubsurface-1ca1fe7994799ec7786a53914d713e51d56f87a3.tar.gz
Improve on divecomputer data handling
This simplifies the vendor/product fields into just a single "model" string for the dive computer, since we can't really validly ever use it any other way anyway. Also, add 'deviceid' and 'diveid' fields: they are just 32-bit hex values that are unique for that particular dive computer model. For libdivecomputer, they are basically the first word of the SHA1 of the data that libdivecomputer gives us. (Trying to expose it in some other way is insane - different dive computers use different models for the ID, so don't try to do some kind of serial number or something like that) For the Uemis Zurich, which doesn't use the libdivecomputer import, we currently only set the model name. The computer does have some kind of device ID string, and we could/should just do the same "SHA1 over the ID" to give it a unique ID, but the pseudo-xml parsing confuses me, so I'll let Dirk fix that up. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'dive.h')
-rw-r--r--dive.h18
1 files changed, 17 insertions, 1 deletions
diff --git a/dive.h b/dive.h
index 2e7841b45..44023b705 100644
--- a/dive.h
+++ b/dive.h
@@ -2,11 +2,13 @@
#define DIVE_H
#include <stdlib.h>
+#include <stdint.h>
#include <time.h>
#include <glib.h>
#include <glib/gstdio.h>
#include <libxml/tree.h>
+#include <openssl/sha.h>
/*
* Some silly typedefs to make our units very explicit.
@@ -239,9 +241,23 @@ struct event {
char name[];
};
+/*
+ * NOTE! The deviceid and diveid are model-specific *hashes* of
+ * whatever device identification that model may have. Different
+ * dive computers will have different identifying data, it could
+ * be a firmware number or a serial ID (in either string or in
+ * numeric format), and we do not care.
+ *
+ * The only thing we care about is that subsurface will hash
+ * that information the same way. So then you can check the ID
+ * of a dive computer by comparing the hashes for equality.
+ *
+ * A deviceid or diveid of zero is assumed to be "no ID".
+ */
struct divecomputer {
timestamp_t when;
- const char *vendor, *product;
+ const char *model;
+ uint32_t deviceid, diveid;
int samples, alloc_samples;
struct sample *sample;
struct event *events;