]> git.tdb.fi Git - ext/subsurface.git/blobdiff - libdivecomputer.c
Make subsurface compile with current libdivecomputer git tree
[ext/subsurface.git] / libdivecomputer.c
index 9d4c1065a3817ce046798448b7c7a39a2a10be2a..14f794e8cc8440b55137c557c8ac805cf2763fa7 100644 (file)
 
 #include "libdivecomputer.h"
 
+/* Christ. Libdivecomputer has the worst configuration system ever. */
+#ifdef HW_FROG_H
+  #define NOT_FROG , 0
+  #define LIBDIVECOMPUTER_SUPPORTS_FROG
+#else
+  #define NOT_FROG
+#endif
+
 static void error(const char *fmt, ...)
 {
        va_list args;
@@ -67,6 +75,9 @@ static parser_status_t create_parser(device_data_t *devdata, parser_t **parser)
        case DEVICE_TYPE_OCEANIC_ATOM2:
                return oceanic_atom2_parser_create(parser, devdata->devinfo.model);
 
+       case DEVICE_TYPE_MARES_DARWIN:
+               return mares_darwin_parser_create(parser, devdata->devinfo.model);
+
        case DEVICE_TYPE_MARES_NEMO:
        case DEVICE_TYPE_MARES_PUCK:
                return mares_nemo_parser_create(parser, devdata->devinfo.model);
@@ -75,7 +86,12 @@ static parser_status_t create_parser(device_data_t *devdata, parser_t **parser)
                return mares_iconhd_parser_create(parser, devdata->devinfo.model);
 
        case DEVICE_TYPE_HW_OSTC:
-               return hw_ostc_parser_create(parser);
+               return hw_ostc_parser_create(parser NOT_FROG);
+
+#ifdef LIBDIVECOMPUTER_SUPPORTS_FROG
+       case DEVICE_TYPE_HW_FROG:
+               return hw_ostc_parser_create(parser, 1);
+#endif
 
        case DEVICE_TYPE_CRESSI_EDY:
        case DEVICE_TYPE_ZEAGLE_N2ITION3:
@@ -109,7 +125,7 @@ static int parse_gasmixes(struct dive *dive, parser_t *parser, int ngases)
                he = gasmix.helium * 1000 + 0.5;
 
                /* Ignore bogus data - libdivecomputer does some crazy stuff */
-               if (o2 < 210 || o2 >= 1000)
+               if (o2 <= AIR_PERMILLE || o2 >= 1000)
                        o2 = 0;
                if (he < 0 || he >= 800 || o2+he >= 1000)
                        he = 0;
@@ -175,7 +191,7 @@ sample_cb(parser_sample_type_t type, parser_sample_value_t value, void *userdata
        case SAMPLE_TYPE_TIME:
                sample = prepare_sample(divep);
                sample->time.seconds = value.time;
-               finish_sample(*divep, sample);
+               finish_sample(*divep);
                break;
        case SAMPLE_TYPE_DEPTH:
                sample->depth.mm = value.depth * 1000 + 0.5;
@@ -385,6 +401,9 @@ static device_status_t device_open(const char *devname,
        case DEVICE_TYPE_OCEANIC_ATOM2:
                return oceanic_atom2_device_open(device, devname);
 
+       case DEVICE_TYPE_MARES_DARWIN:
+               return mares_darwin_device_open(device, devname, 0); /// last parameter is model type (taken from example), 0 seems to be standard, 1 is DARWIN_AIR => Darwin Air wont work if this is fixed here?
+
        case DEVICE_TYPE_MARES_NEMO:
                return mares_nemo_device_open(device, devname);
 
@@ -533,10 +552,14 @@ struct device_list device_list[] = {
        { "Oceanic VT Pro",     DEVICE_TYPE_OCEANIC_VTPRO },
        { "Oceanic Veo250",     DEVICE_TYPE_OCEANIC_VEO250 },
        { "Oceanic Atom 2",     DEVICE_TYPE_OCEANIC_ATOM2 },
-       { "Mares Nemo",         DEVICE_TYPE_MARES_NEMO },
-       { "Mares Puck",         DEVICE_TYPE_MARES_PUCK },
+       { "Mares Darwin, M1, M2, Airlab",       DEVICE_TYPE_MARES_DARWIN },
+       { "Mares Nemo, Excel, Apneist", DEVICE_TYPE_MARES_NEMO },
+       { "Mares Puck, Nemo Air, Nemo Wide",    DEVICE_TYPE_MARES_PUCK },
        { "Mares Icon HD",      DEVICE_TYPE_MARES_ICONHD },
        { "OSTC",               DEVICE_TYPE_HW_OSTC },
+#ifdef LIBDIVECOMPUTER_SUPPORTS_FROG
+       { "OSTC Frog",          DEVICE_TYPE_HW_FROG },
+#endif
        { "Cressi Edy",         DEVICE_TYPE_CRESSI_EDY },
        { "Zeagle N2iTiON 3",   DEVICE_TYPE_ZEAGLE_N2ITION3 },
        { "Atomics Cobalt",     DEVICE_TYPE_ATOMICS_COBALT },