On 2015-06-15 13:46, Anton Lundin wrote:
On 15 June, 2015 - Claudiu Olteanu wrote:
Ok. In the beginning I will try to implement the downloading
entirely in Subsurface and re-implement the dive computer
protocol for HW OSTC family.
I think this is a bad path.
I would rather suggest something like implementing a "serial" backend
in
libdivecomputer which takes a Qt5-Bluetooth-thingie to work with.
The same thoughts have bin about having libftdi-"serial"-backends and
cdc-"serial"-backends to support platforms where kernel-drivers for
those aren't a option (Android).
This is rather a puck for Jef to think about how a dc_device_open
version which passes on parameters for different backends.
I could see a dc_device_open which takes something else than just a
"const char *name", rather a dc_serial_type_t, and a void *arg.
I could see something like a dc_serial_type_t SERIAL which takes a
regular char* and is implemented with the regular serial.c backend, and
a QT5_BLUETOOTH, which gets a Qt-bluetooth-object-thingie, and a FTDI
which gets the correct args for a ftdi_usb_open to succeed.
I did already think about this :-) See [1] for some more background
info.
In a nutshell, the serial layer will be changed from a concrete
implementation into an abstract interface. This will allow us to have
multiple implementations: native (using kernel drivers), bluetooth
(using rfcomm sockets), usb-serial (cdc-acm, ftdi, pl2303, cp210x), etc
Instead of passing a device name to the dc_device_open() function, the
application will first need to create an instance of one of those serial
backends (with the appropriate parameters), and pass that one:
dc_serial_t *serial = NULL;
dc_device_t *device = NULL;
/* Open the low-level communication transport. */
dc_serial_native_open(&serial, devname);
dc_serial_rfcomm_open(&serial, address, channel);
dc_serial_usbserial_open(&serial, vid, pid);
/* Connect to the dive computer. */
dc_device_open(&device, ..., serial);
/* Do something useful here. */
/* Close the connection. */
dc_device_close(device);
dc_serial_close(serial);
Although this will clearly require some extra code on the application
side, there are other advantages too. For example it will be possible to
expose functions for device enumeration. The code is already there, but
applications can't use it, because the serial layer is a completely
private api.
[1] http://libdivecomputer.org/pipermail/devel/2014-June/000305.html
Jef
_______________________________________________
subsurface mailing list
subsurface@subsurface-divelog.org
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface