summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2018-10-06 11:23:08 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-10-08 00:10:29 +0300
commit9e3a22c5220f72fb9b9358dc127808186d3398dd (patch)
treee86dc03a7a59bbb852294ffabbccb6999359ccb2 /core
parent9dac90c6bfe6e15f054602ada793fc83bdcb5fd8 (diff)
downloadsubsurface-9e3a22c5220f72fb9b9358dc127808186d3398dd.tar.gz
qt-ble: add 'get_name()' function to expose the BLE name to libdivecomputer
Some divecomputer backends (ok, right now really only the Aqualung i770R and i300C) want to know the bluetooth name of the dive computer they connect to, because the name contains identifying information like the serial number. This just adds the support for that to our Qt BLE code. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'core')
-rw-r--r--core/downloadfromdcthread.cpp1
-rw-r--r--core/libdivecomputer.h2
-rw-r--r--core/qt-ble.cpp6
-rw-r--r--core/qt-ble.h2
-rw-r--r--core/qtserialbluetooth.cpp1
5 files changed, 11 insertions, 1 deletions
diff --git a/core/downloadfromdcthread.cpp b/core/downloadfromdcthread.cpp
index e4dc80176..95f6b7f75 100644
--- a/core/downloadfromdcthread.cpp
+++ b/core/downloadfromdcthread.cpp
@@ -70,6 +70,7 @@ void DownloadThread::run()
auto internalData = m_data->internalData();
internalData->descriptor = descriptorLookup[m_data->vendor() + m_data->product()];
internalData->download_table = &downloadTable;
+ internalData->btname = strdup(m_data->devBluetoothName().toUtf8());
#if defined(Q_OS_ANDROID)
// on Android we either use BT, a USB device, or we download via FTDI cable
if (!internalData->bluetooth_mode && (same_string(internalData->devname, "FTDI") || same_string(internalData->devname, "")))
diff --git a/core/libdivecomputer.h b/core/libdivecomputer.h
index e1964eb9a..b06b5ae0d 100644
--- a/core/libdivecomputer.h
+++ b/core/libdivecomputer.h
@@ -30,7 +30,7 @@ typedef struct dc_user_device_t
{
dc_descriptor_t *descriptor;
const char *vendor, *product, *devname;
- const char *model;
+ const char *model, *btname;
unsigned char *fingerprint;
unsigned int fsize, fdiveid;
uint32_t libdc_firmware, libdc_serial;
diff --git a/core/qt-ble.cpp b/core/qt-ble.cpp
index ba75c8472..b2f2edf47 100644
--- a/core/qt-ble.cpp
+++ b/core/qt-ble.cpp
@@ -542,4 +542,10 @@ dc_status_t qt_ble_write(void *io, const void* data, size_t size, size_t *actual
return ble->write(data, size, actual);
}
+const char *qt_ble_get_name(void *io)
+{
+ BLEObject *ble = (BLEObject *) io;
+ return ble->get_name();
+}
+
} /* extern "C" */
diff --git a/core/qt-ble.h b/core/qt-ble.h
index f9600ad19..65e23964a 100644
--- a/core/qt-ble.h
+++ b/core/qt-ble.h
@@ -23,6 +23,7 @@ public:
inline void set_timeout(int value) { timeout = value; }
dc_status_t write(const void* data, size_t size, size_t *actual);
dc_status_t read(void* data, size_t size, size_t *actual);
+ inline const char *get_name() { return device->btname; }
inline QLowEnergyService *preferredService() { return preferred; }
inline int descriptorWritten() { return desc_written; }
@@ -63,6 +64,7 @@ dc_status_t qt_ble_set_timeout(void *io, int timeout);
dc_status_t qt_ble_read(void *io, void* data, size_t size, size_t *actual);
dc_status_t qt_ble_write(void *io, const void* data, size_t size, size_t *actual);
dc_status_t qt_ble_close(void *io);
+const char *qt_ble_get_name(void *io);
}
#endif
diff --git a/core/qtserialbluetooth.cpp b/core/qtserialbluetooth.cpp
index be1cda686..cd1fde6f1 100644
--- a/core/qtserialbluetooth.cpp
+++ b/core/qtserialbluetooth.cpp
@@ -424,6 +424,7 @@ ble_packet_open(dc_iostream_t **iostream, dc_context_t *context, const char* dev
NULL, /* purge */
qt_custom_sleep, /* sleep */
qt_ble_close, /* close */
+ qt_ble_get_name, /* get_name */
};
rc = qt_ble_open(&io, context, devaddr, (dc_user_device_t *) userdata);