summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2018-04-25 15:51:35 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-04-27 11:52:48 -0700
commit028299193ad24cc6bfa52fa15e2e16a398c5bed2 (patch)
tree0545271e503cef4487eaf24bddb653d786636327
parent5faa167e9fdab0e0c9b1a24346440c3006659c66 (diff)
downloadsubsurface-028299193ad24cc6bfa52fa15e2e16a398c5bed2.tar.gz
Create one function to determine the supported transports
This should make sure we create a consistent view based on all the information available. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--core/downloadfromdcthread.cpp18
-rw-r--r--core/libdivecomputer.c40
-rw-r--r--core/libdivecomputer.h2
3 files changed, 33 insertions, 27 deletions
diff --git a/core/downloadfromdcthread.cpp b/core/downloadfromdcthread.cpp
index da2140b11..1c60ca6cf 100644
--- a/core/downloadfromdcthread.cpp
+++ b/core/downloadfromdcthread.cpp
@@ -107,28 +107,14 @@ void fill_computer_list()
dc_iterator_t *iterator = NULL;
dc_descriptor_t *descriptor = NULL;
- // start out with the list of transports that libdivecomputer claims to support
- // dc_context_get_transports ignores its context argument...
- int transportMask = dc_context_get_transports(NULL);
-
- // then add the ones that we have our own implementations for
-#if defined(BT_SUPPORT)
- transportMask |= DC_TRANSPORT_BLUETOOTH;
-#endif
-#if defined(BLE_SUPPORT)
- transportMask |= DC_TRANSPORT_BLE;
-#endif
-#if defined(Q_OS_IOS)
- // libdivecomputer always claims to support serial, but on iOS we actually don't support that
- transportMask &= ~DC_TRANSPORT_SERIAL;
-#endif
+ unsigned int transportMask = get_supported_transports(NULL);
fill_supported_mobile_list();
dc_descriptor_iterator(&iterator);
while (dc_iterator_next(iterator, &descriptor) == DC_STATUS_SUCCESS) {
// mask out the transports that aren't supported
- int transports = dc_descriptor_get_transports(descriptor) & transportMask;
+ unsigned int transports = dc_descriptor_get_transports(descriptor) & transportMask;
if (transports == 0)
// none of the transports are available, skip
continue;
diff --git a/core/libdivecomputer.c b/core/libdivecomputer.c
index 169d6176b..bb5325074 100644
--- a/core/libdivecomputer.c
+++ b/core/libdivecomputer.c
@@ -1229,19 +1229,37 @@ static char *transport_to_string(int t)
*
* This could have various platform rules too..
*/
-static unsigned int get_supported_transports(device_data_t *data)
+unsigned int get_supported_transports(device_data_t *data)
{
- unsigned int supported;
+ // start out with the list of transports that libdivecomputer claims to support
+ // dc_context_get_transports ignores its context argument...
+ unsigned int supported = dc_context_get_transports(NULL);
- /*
- * We don't support BT or BLE unless bluetooth_mode was set,
- * and if it was we won't try any of the other transports.
- */
- supported = ~(DC_TRANSPORT_BLUETOOTH | DC_TRANSPORT_BLE);
- if (data->bluetooth_mode) {
- supported = ~supported;
- if (!strncmp(data->devname, "LE:", 3))
- supported = DC_TRANSPORT_BLE;
+ // then add the ones that we have our own implementations for
+#if defined(BT_SUPPORT)
+ supported |= DC_TRANSPORT_BLUETOOTH;
+#endif
+#if defined(BLE_SUPPORT)
+ supported |= DC_TRANSPORT_BLE;
+#endif
+#if defined(Q_OS_IOS)
+ // libdivecomputer always claims to support serial, but on iOS we actually don't support that
+ supported &= ~DC_TRANSPORT_SERIAL;
+#endif
+
+ if (data) {
+ /*
+ * If we have device data available, we can refine this:
+ * We don't support BT or BLE unless bluetooth_mode was set,
+ * and if it was we won't try any of the other transports.
+ */
+ if (data->bluetooth_mode) {
+ supported &= (DC_TRANSPORT_BLUETOOTH | DC_TRANSPORT_BLE);
+ if (!strncmp(data->devname, "LE:", 3))
+ supported &= DC_TRANSPORT_BLE;
+ } else {
+ supported &= ~(DC_TRANSPORT_BLUETOOTH | DC_TRANSPORT_BLE);
+ }
}
report_error("get_supported_transports returns");
report_error(transport_to_string(supported));
diff --git a/core/libdivecomputer.h b/core/libdivecomputer.h
index e3822aa7b..b1714f2a1 100644
--- a/core/libdivecomputer.h
+++ b/core/libdivecomputer.h
@@ -63,6 +63,8 @@ dc_status_t ftdi_open(dc_iostream_t **iostream, dc_context_t *context);
dc_status_t divecomputer_device_open(device_data_t *data);
+unsigned int get_supported_transports(device_data_t *data);
+
#ifdef __cplusplus
}
#endif