Android: connect to BT via uuid instead of port

We remember the offered service uuids as we detect the device and then
try the first one - likely this needs to be fixed / tuned to pick the
right one if multiple uuids are offered.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2017-05-30 17:50:31 -07:00
parent 782caf5fa6
commit 286bac6d30
2 changed files with 23 additions and 0 deletions

View file

@ -19,6 +19,18 @@
#include <libdivecomputer/custom_serial.h>
QList<QBluetoothUuid> registeredUuids;
static QBluetoothUuid getBtUuid()
{
return registeredUuids.first();
}
void addBtUuid(QBluetoothUuid uuid)
{
registeredUuids << uuid;
}
extern "C" {
typedef struct qt_serial_t {
/*
@ -32,6 +44,7 @@ typedef struct qt_serial_t {
long timeout;
} qt_serial_t;
static dc_status_t qt_serial_open(void **userdata, const char* devaddr)
{
// Allocate memory.
@ -133,7 +146,13 @@ static dc_status_t qt_serial_open(void **userdata, const char* devaddr)
#elif defined(Q_OS_ANDROID) || (QT_VERSION >= 0x050500 && defined(Q_OS_MAC))
// Try to connect to the device using the uuid of the Serial Port Profile service
QBluetoothAddress remoteDeviceAddress(devaddr);
#if defined(Q_OS_ANDROID)
QBluetoothUuid uuid = getBtUuid();
qDebug() << "connecting to Uuid" << uuid;
serial_port->socket->connectToService(remoteDeviceAddress, uuid, QIODevice::ReadWrite | QIODevice::Unbuffered);
#else
serial_port->socket->connectToService(remoteDeviceAddress, 1, QIODevice::ReadWrite | QIODevice::Unbuffered);
#endif
timer.start(msec);
loop.exec();

View file

@ -204,11 +204,15 @@ void QMLManager::mergeLocalRepo()
}
#if BT_SUPPORT
extern void addBtUuid(QBluetoothUuid uuid);
void QMLManager::btDeviceDiscovered(const QBluetoothDeviceInfo &device)
{
QString newDevice = device.name();
QList<QBluetoothUuid> serviceUuids = device.serviceUuids();
foreach (QBluetoothUuid id, serviceUuids) {
addBtUuid(id);
qDebug() << id.toByteArray();
}
appendTextToLog("Found new device " + newDevice + " (" + device.address().toString() + ")");