From fab15b19a7e0281df417ffff45b86937dc0e24c6 Mon Sep 17 00:00:00 2001 From: Jef Driesen Date: Mon, 1 Feb 2010 21:20:30 +0000 Subject: [PATCH] Add a clock synchronization event. --- examples/universal.c | 7 ++++++- src/device.c | 3 +++ src/device.h | 8 +++++++- src/reefnet_sensus.c | 6 ++++++ src/reefnet_sensuspro.c | 6 ++++++ src/reefnet_sensusultra.c | 6 ++++++ src/uwatec_aladin.c | 6 ++++++ src/uwatec_memomouse.c | 6 ++++++ src/uwatec_smart.c | 6 ++++++ 9 files changed, 52 insertions(+), 2 deletions(-) diff --git a/examples/universal.c b/examples/universal.c index c477d7c..b82cdda 100644 --- a/examples/universal.c +++ b/examples/universal.c @@ -91,6 +91,7 @@ event_cb (device_t *device, device_event_t event, const void *data, void *userda { const device_progress_t *progress = (device_progress_t *) data; const device_devinfo_t *devinfo = (device_devinfo_t *) data; + const device_clock_t *clock = (device_clock_t *) data; switch (event) { case DEVICE_EVENT_WAITING: @@ -107,6 +108,10 @@ event_cb (device_t *device, device_event_t event, const void *data, void *userda devinfo->firmware, devinfo->firmware, devinfo->serial, devinfo->serial); break; + case DEVICE_EVENT_CLOCK: + message ("Event: systime=%u, devtime=%u\n", + clock->systime, clock->devtime); + break; default: break; } @@ -255,7 +260,7 @@ dowork (device_type_t backend, const char *devname, const char *filename, int me // Register the event handler. message ("Registering the event handler.\n"); - int events = DEVICE_EVENT_WAITING | DEVICE_EVENT_PROGRESS | DEVICE_EVENT_DEVINFO; + 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) { WARNING ("Error registering the event handler."); diff --git a/src/device.c b/src/device.c index ff12d65..4d31d16 100644 --- a/src/device.c +++ b/src/device.c @@ -206,6 +206,9 @@ device_event_emit (device_t *device, device_event_t event, const void *data) case DEVICE_EVENT_DEVINFO: assert (data != NULL); break; + case DEVICE_EVENT_CLOCK: + assert (data != NULL); + break; default: break; } diff --git a/src/device.h b/src/device.h index b22fd73..1cbe7d1 100644 --- a/src/device.h +++ b/src/device.h @@ -65,7 +65,8 @@ typedef enum device_status_t { typedef enum device_event_t { DEVICE_EVENT_WAITING = (1 << 0), DEVICE_EVENT_PROGRESS = (1 << 1), - DEVICE_EVENT_DEVINFO = (1 << 2) + DEVICE_EVENT_DEVINFO = (1 << 2), + DEVICE_EVENT_CLOCK = (1 << 3) } device_event_t; typedef struct device_t device_t; @@ -81,6 +82,11 @@ typedef struct device_devinfo_t { unsigned int serial; } device_devinfo_t; +typedef struct device_clock_t { + unsigned int devtime; + dc_ticks_t systime; +} device_clock_t; + typedef void (*device_event_callback_t) (device_t *device, device_event_t event, const void *data, void *userdata); typedef int (*dive_callback_t) (const unsigned char *data, unsigned int size, void *userdata); diff --git a/src/reefnet_sensus.c b/src/reefnet_sensus.c index f6941dd..d91b028 100644 --- a/src/reefnet_sensus.c +++ b/src/reefnet_sensus.c @@ -277,6 +277,12 @@ reefnet_sensus_handshake (reefnet_sensus_device_t *device) // Store the handshake packet. memcpy (device->handshake, handshake + 2, REEFNET_SENSUS_HANDSHAKE_SIZE); + // Emit a clock event. + device_clock_t clock; + clock.systime = device->systime; + clock.devtime = device->devtime; + device_event_emit (&device->base, DEVICE_EVENT_CLOCK, &clock); + // Emit a device info event. device_devinfo_t devinfo; devinfo.model = handshake[2] - '0'; diff --git a/src/reefnet_sensuspro.c b/src/reefnet_sensuspro.c index 768e932..413c9e3 100644 --- a/src/reefnet_sensuspro.c +++ b/src/reefnet_sensuspro.c @@ -246,6 +246,12 @@ reefnet_sensuspro_handshake (reefnet_sensuspro_device_t *device) // Store the handshake packet. memcpy (device->handshake, handshake, REEFNET_SENSUSPRO_HANDSHAKE_SIZE); + // Emit a clock event. + device_clock_t clock; + clock.systime = device->systime; + clock.devtime = device->devtime; + device_event_emit (&device->base, DEVICE_EVENT_CLOCK, &clock); + // Emit a device info event. device_devinfo_t devinfo; devinfo.model = handshake[0]; diff --git a/src/reefnet_sensusultra.c b/src/reefnet_sensusultra.c index 39eea3a..35838e8 100644 --- a/src/reefnet_sensusultra.c +++ b/src/reefnet_sensusultra.c @@ -351,6 +351,12 @@ reefnet_sensusultra_handshake (reefnet_sensusultra_device_t *device) // Store the handshake packet. memcpy (device->handshake, handshake, REEFNET_SENSUSULTRA_HANDSHAKE_SIZE); + // Emit a clock event. + device_clock_t clock; + clock.systime = device->systime; + clock.devtime = device->devtime; + device_event_emit (&device->base, DEVICE_EVENT_CLOCK, &clock); + // Emit a device info event. device_devinfo_t devinfo; devinfo.model = handshake[1]; diff --git a/src/uwatec_aladin.c b/src/uwatec_aladin.c index d6a1c93..7914f02 100644 --- a/src/uwatec_aladin.c +++ b/src/uwatec_aladin.c @@ -264,6 +264,12 @@ uwatec_aladin_device_dump (device_t *abstract, dc_buffer_t *buffer) device->systime = now; device->devtime = array_uint32_be (answer + HEADER + 0x7f8); + // Emit a clock event. + device_clock_t clock; + clock.systime = device->systime; + clock.devtime = device->devtime; + device_event_emit (abstract, DEVICE_EVENT_CLOCK, &clock); + dc_buffer_append (buffer, answer, UWATEC_ALADIN_MEMORY_SIZE); return DEVICE_STATUS_SUCCESS; diff --git a/src/uwatec_memomouse.c b/src/uwatec_memomouse.c index c78c315..22c17f9 100644 --- a/src/uwatec_memomouse.c +++ b/src/uwatec_memomouse.c @@ -437,6 +437,12 @@ uwatec_memomouse_dump_internal (uwatec_memomouse_device_t *device, dc_buffer_t * device->systime = now; device->devtime = array_uint32_le (dc_buffer_get_data (buffer) + 1); + // Emit a clock event. + device_clock_t clock; + clock.systime = device->systime; + clock.devtime = device->devtime; + device_event_emit ((device_t *) device, DEVICE_EVENT_CLOCK, &clock); + return DEVICE_STATUS_SUCCESS; } diff --git a/src/uwatec_smart.c b/src/uwatec_smart.c index 24a9082..b98f668 100644 --- a/src/uwatec_smart.c +++ b/src/uwatec_smart.c @@ -341,6 +341,12 @@ uwatec_smart_device_dump (device_t *abstract, dc_buffer_t *buffer) progress.current += 9; device_event_emit (&device->base, DEVICE_EVENT_PROGRESS, &progress); + // Emit a clock event. + device_clock_t clock; + clock.systime = device->systime; + clock.devtime = device->devtime; + device_event_emit (&device->base, DEVICE_EVENT_CLOCK, &clock); + // Emit a device info event. device_devinfo_t devinfo; devinfo.model = version[0];