summaryrefslogtreecommitdiffstats
path: root/libdivecomputer.c
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-12 09:50:40 -0700
committerGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-12 09:50:40 -0700
commita9f74044ae228f912515bebc983f872aa7f37695 (patch)
tree45bb68d051a3c0e3d7a7ae4eb6d1b208934f2646 /libdivecomputer.c
parent425649a27816dbef9a6684b1da53e2ca6d8b7bd9 (diff)
downloadsubsurface-a9f74044ae228f912515bebc983f872aa7f37695.tar.gz
Flesh out the libdivecomputer interfaces some more
.. start some error reporting, and register some early (empty) callbacks. This still doesn't actually do anything. But commit early, commit often: when I start seriously breaking things, I want to have a "hey, this still at least compiled" state. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'libdivecomputer.c')
-rw-r--r--libdivecomputer.c50
1 files changed, 48 insertions, 2 deletions
diff --git a/libdivecomputer.c b/libdivecomputer.c
index b9850b38b..c9255e024 100644
--- a/libdivecomputer.c
+++ b/libdivecomputer.c
@@ -1,6 +1,7 @@
#include <stdio.h>
#include <gtk/gtk.h>
+#include "dive.h"
#include "display.h"
/* libdivecomputer */
@@ -89,6 +90,31 @@ static device_status_t device_open(const char *devname,
}
}
+static void error(const char *fmt, ...)
+{
+ va_list args;
+ GError *error;
+
+ va_start(args, fmt);
+ error = g_error_new_valist(
+ g_quark_from_string("divelog"),
+ DIVE_ERROR_PARSE, fmt, args);
+ va_end(args);
+ report_error(error);
+ g_error_free(error);
+}
+
+static void
+event_cb (device_t *device, device_event_t event, const void *data, void *userdata)
+{
+}
+
+static int
+cancel_cb (void *userdata)
+{
+ return 0;
+}
+
static void do_import(const char *computer, device_type_t type)
{
/* FIXME! Needs user input! */
@@ -97,9 +123,29 @@ static void do_import(const char *computer, device_type_t type)
device_status_t rc;
rc = device_open(devname, type, &device);
- printf("rc=%d\n", rc);
- if (rc != DEVICE_STATUS_SUCCESS)
+ if (rc != DEVICE_STATUS_SUCCESS) {
+ error("Unable to open %s (%s)", computer, devname);
return;
+ }
+
+ // Register the event handler.
+ int events = DEVICE_EVENT_WAITING | DEVICE_EVENT_PROGRESS | DEVICE_EVENT_DEVINFO | DEVICE_EVENT_CLOCK;
+ rc = device_set_events(device, events, event_cb, NULL);
+ if (rc != DEVICE_STATUS_SUCCESS) {
+ error("Error registering the event handler.");
+ device_close(device);
+ return;
+ }
+
+ // Register the cancellation handler.
+ rc = device_set_cancel(device, cancel_cb, NULL);
+ if (rc != DEVICE_STATUS_SUCCESS) {
+ error("Error registering the cancellation handler.");
+ device_close(device);
+ return;
+ }
+
+ error("No actual code yet for importing (%s: %s)", computer, devname);
}
/*