From 60efc308d2e2448ba8b03c167b4b4ca0beec4b54 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Sun, 18 Jun 2017 13:41:08 +0900 Subject: [PATCH] Rename 'custom_serial' as 'custom_io' across the board The custom IO handlers will be extended to not just do serial line emulation (generally over Bluetooth rfcomm), but do BLE too. BLE does not look like a serial protocol at all, it's packet-based, and we may have to add specific routines to indicate which GATT endpoints to use etc. But like the traditional custom serial code, we want to do the actual IO not from within libdivecomputer, but from the user of the library (because the BLE support will require things like the Qt Connectivity layer - and we do not want libdivecomputer to have to link against something like Qt). So this renames 'custom_serial' to 'custom_io', and instead names the individual member function pointers 'serial_*' to make it clear that those members are for serial communication. It also adds new placeholders for packet_open/close/read/write. Note that while these may look similar to the serial counter-parts, they are not the same or even necessarily mutually exclusive. It is possible the the caller fills in one or the other (or both), and they would be used independently. Signed-off-by: Linus Torvalds --- include/libdivecomputer/Makefile.am | 2 +- include/libdivecomputer/context.h | 4 +- .../{custom_serial.h => custom_io.h} | 45 ++++++++++++------- include/libdivecomputer/version.h.in | 2 +- src/context-private.h | 12 ++--- src/context.c | 16 +++---- src/libdivecomputer.symbols | 2 +- 7 files changed, 47 insertions(+), 36 deletions(-) rename include/libdivecomputer/{custom_serial.h => custom_io.h} (56%) diff --git a/include/libdivecomputer/Makefile.am b/include/libdivecomputer/Makefile.am index 6ba4bd7..e666f61 100644 --- a/include/libdivecomputer/Makefile.am +++ b/include/libdivecomputer/Makefile.am @@ -3,7 +3,7 @@ libdivecomputer_HEADERS = \ version.h \ common.h \ context.h \ - custom_serial.h \ + custom_io.h \ buffer.h \ descriptor.h \ iterator.h \ diff --git a/include/libdivecomputer/context.h b/include/libdivecomputer/context.h index e75a845..757245b 100644 --- a/include/libdivecomputer/context.h +++ b/include/libdivecomputer/context.h @@ -23,7 +23,7 @@ #define DC_CONTEXT_H #include "common.h" -#include "custom_serial.h" +#include "custom_io.h" #ifdef __cplusplus extern "C" { @@ -49,7 +49,7 @@ dc_status_t dc_context_free (dc_context_t *context); dc_status_t -dc_context_set_custom_serial (dc_context_t *context, dc_custom_serial_t *custom_serial); +dc_context_set_custom_io (dc_context_t *context, dc_custom_io_t *custom_io); dc_status_t dc_context_set_loglevel (dc_context_t *context, dc_loglevel_t loglevel); diff --git a/include/libdivecomputer/custom_serial.h b/include/libdivecomputer/custom_io.h similarity index 56% rename from include/libdivecomputer/custom_serial.h rename to include/libdivecomputer/custom_io.h index 1a2b44e..6cbf766 100644 --- a/include/libdivecomputer/custom_serial.h +++ b/include/libdivecomputer/custom_io.h @@ -1,5 +1,5 @@ -#ifndef CUSTOM_SERIAL_H -#define CUSTOM_SERIAL_H +#ifndef CUSTOM_IO_H +#define CUSTOM_IO_H #include "common.h" @@ -62,29 +62,40 @@ typedef enum dc_line_t { #endif /* __SERIAL_TYPES__ */ -typedef struct dc_custom_serial_t +struct dc_context_t; + +typedef struct dc_custom_io_t { void *userdata; - dc_status_t (*open) (void **userdata, const char *name); - dc_status_t (*close) (void **userdata); - dc_status_t (*read) (void **userdata, void* data, size_t size, size_t *actual); - dc_status_t (*write) (void **userdata, const void* data, size_t size, size_t *actual); - dc_status_t (*purge) (void **userdata, dc_direction_t); - dc_status_t (*get_available) (void **userdata, size_t *value); - dc_status_t (*set_timeout) (void **userdata, long timeout); - dc_status_t (*configure) (void **userdata, unsigned int baudrate, unsigned int databits, dc_parity_t parity, dc_stopbits_t stopbits, dc_flowcontrol_t flowcontrol); - dc_status_t (*set_dtr) (void **userdata, int level); - dc_status_t (*set_rts) (void **userdata, int level); - dc_status_t (*set_halfduplex) (void **userdata, unsigned int value); - dc_status_t (*set_break) (void **userdata, unsigned int level); + + // Custom serial (generally BT rfcomm) + dc_status_t (*serial_open) (void **userdata, const char *name); + dc_status_t (*serial_close) (void **userdata); + dc_status_t (*serial_read) (void **userdata, void* data, size_t size, size_t *actual); + dc_status_t (*serial_write) (void **userdata, const void* data, size_t size, size_t *actual); + dc_status_t (*serial_purge) (void **userdata, dc_direction_t); + dc_status_t (*serial_get_available) (void **userdata, size_t *value); + dc_status_t (*serial_set_timeout) (void **userdata, long timeout); + dc_status_t (*serial_configure) (void **userdata, unsigned int baudrate, unsigned int databits, dc_parity_t parity, dc_stopbits_t stopbits, dc_flowcontrol_t flowcontrol); + dc_status_t (*serial_set_dtr) (void **userdata, int level); + dc_status_t (*serial_set_rts) (void **userdata, int level); + dc_status_t (*serial_set_halfduplex) (void **userdata, unsigned int value); + dc_status_t (*serial_set_break) (void **userdata, unsigned int level); //dc_serial_set_latency (dc_serial_t *device, unsigned int milliseconds) - Unused //dc_serial_get_lines (dc_serial_t *device, unsigned int *value) - Unused //dc_serial_flush (dc_serial_t *device) - No device interaction //dc_serial_sleep (dc_serial_t *device, unsigned int timeout) - No device interaction -} dc_custom_serial_t; + + // Custom packet transfer (generally BLE GATT) + int packet_size; + dc_status_t (*packet_open) (struct dc_custom_io_t *, struct dc_context_t *, const char *); + dc_status_t (*packet_close) (struct dc_custom_io_t *); + dc_status_t (*packet_read) (struct dc_custom_io_t *, void* data, size_t size, size_t *actual); + dc_status_t (*packet_write) (struct dc_custom_io_t *, const void* data, size_t size, size_t *actual); +} dc_custom_io_t; #ifdef __cplusplus } #endif /* __cplusplus */ -#endif /* CUSTOM_SERIAL_H */ +#endif /* CUSTOM_IO_H */ diff --git a/include/libdivecomputer/version.h.in b/include/libdivecomputer/version.h.in index 4a29f26..2a35b30 100644 --- a/include/libdivecomputer/version.h.in +++ b/include/libdivecomputer/version.h.in @@ -28,7 +28,7 @@ extern "C" { /* use these defines to detect Subsurface specific features */ #define SSRF_LIBDC_VERSION 1 -#define SSRF_CUSTOM_SERIAL 1 +#define SSRF_CUSTOM_IO 1 #define DC_VERSION "@DC_VERSION@" #define DC_VERSION_MAJOR @DC_VERSION_MAJOR@ diff --git a/src/context-private.h b/src/context-private.h index 0a0dcb8..96fc0af 100644 --- a/src/context-private.h +++ b/src/context-private.h @@ -27,7 +27,7 @@ #endif #include -#include +#include #ifdef __cplusplus extern "C" { @@ -72,16 +72,16 @@ dc_context_syserror (dc_context_t *context, dc_loglevel_t loglevel, const char * dc_status_t dc_context_hexdump (dc_context_t *context, dc_loglevel_t loglevel, const char *file, unsigned int line, const char *function, const char *prefix, const unsigned char data[], unsigned int size); -dc_custom_serial_t* -_dc_context_custom_serial (dc_context_t *context); +dc_custom_io_t* +_dc_context_custom_io (dc_context_t *context); #define RETURN_IF_CUSTOM_SERIAL(context, block, function, ...) \ do { \ - dc_custom_serial_t *c = _dc_context_custom_serial(context); \ + dc_custom_io_t *c = _dc_context_custom_io(context); \ dc_status_t _rc; \ if (c) { \ - if (c->function) \ - _rc = c->function(&c->userdata, ##__VA_ARGS__); \ + if (c->serial_##function) \ + _rc = c->serial_##function(&c->userdata, ##__VA_ARGS__); \ else \ _rc = DC_STATUS_SUCCESS; \ block ;\ diff --git a/src/context.c b/src/context.c index 6b300c2..b15a9fc 100644 --- a/src/context.c +++ b/src/context.c @@ -32,7 +32,7 @@ #endif #include "context-private.h" -#include +#include struct dc_context_t { dc_loglevel_t loglevel; @@ -46,7 +46,7 @@ struct dc_context_t { struct timeval timestamp; #endif #endif - dc_custom_serial_t *custom_serial; + dc_custom_io_t *custom_io; }; #ifdef ENABLE_LOGGING @@ -197,7 +197,7 @@ dc_context_new (dc_context_t **out) #endif #endif - context->custom_serial = NULL; + context->custom_io = NULL; *out = context; @@ -213,20 +213,20 @@ dc_context_free (dc_context_t *context) } dc_status_t -dc_context_set_custom_serial (dc_context_t *context, dc_custom_serial_t *custom_serial) +dc_context_set_custom_io (dc_context_t *context, dc_custom_io_t *custom_io) { if (context == NULL) return DC_STATUS_INVALIDARGS; - context->custom_serial = custom_serial; + context->custom_io = custom_io; return DC_STATUS_SUCCESS; } -dc_custom_serial_t* -_dc_context_custom_serial (dc_context_t *context) +dc_custom_io_t* +_dc_context_custom_io (dc_context_t *context) { - return context->custom_serial; + return context->custom_io; } dc_status_t diff --git a/src/libdivecomputer.symbols b/src/libdivecomputer.symbols index ef89623..ba12d56 100644 --- a/src/libdivecomputer.symbols +++ b/src/libdivecomputer.symbols @@ -21,7 +21,7 @@ dc_context_new dc_context_free dc_context_set_loglevel dc_context_set_logfunc -dc_context_set_custom_serial +dc_context_set_custom_io dc_iterator_next dc_iterator_free