mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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:
parent
782caf5fa6
commit
286bac6d30
2 changed files with 23 additions and 0 deletions
|
@ -19,6 +19,18 @@
|
||||||
|
|
||||||
#include <libdivecomputer/custom_serial.h>
|
#include <libdivecomputer/custom_serial.h>
|
||||||
|
|
||||||
|
QList<QBluetoothUuid> registeredUuids;
|
||||||
|
|
||||||
|
static QBluetoothUuid getBtUuid()
|
||||||
|
{
|
||||||
|
return registeredUuids.first();
|
||||||
|
}
|
||||||
|
|
||||||
|
void addBtUuid(QBluetoothUuid uuid)
|
||||||
|
{
|
||||||
|
registeredUuids << uuid;
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
typedef struct qt_serial_t {
|
typedef struct qt_serial_t {
|
||||||
/*
|
/*
|
||||||
|
@ -32,6 +44,7 @@ typedef struct qt_serial_t {
|
||||||
long timeout;
|
long timeout;
|
||||||
} qt_serial_t;
|
} qt_serial_t;
|
||||||
|
|
||||||
|
|
||||||
static dc_status_t qt_serial_open(void **userdata, const char* devaddr)
|
static dc_status_t qt_serial_open(void **userdata, const char* devaddr)
|
||||||
{
|
{
|
||||||
// Allocate memory.
|
// 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))
|
#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
|
// Try to connect to the device using the uuid of the Serial Port Profile service
|
||||||
QBluetoothAddress remoteDeviceAddress(devaddr);
|
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);
|
serial_port->socket->connectToService(remoteDeviceAddress, 1, QIODevice::ReadWrite | QIODevice::Unbuffered);
|
||||||
|
#endif
|
||||||
timer.start(msec);
|
timer.start(msec);
|
||||||
loop.exec();
|
loop.exec();
|
||||||
|
|
||||||
|
|
|
@ -204,11 +204,15 @@ void QMLManager::mergeLocalRepo()
|
||||||
}
|
}
|
||||||
|
|
||||||
#if BT_SUPPORT
|
#if BT_SUPPORT
|
||||||
|
|
||||||
|
extern void addBtUuid(QBluetoothUuid uuid);
|
||||||
|
|
||||||
void QMLManager::btDeviceDiscovered(const QBluetoothDeviceInfo &device)
|
void QMLManager::btDeviceDiscovered(const QBluetoothDeviceInfo &device)
|
||||||
{
|
{
|
||||||
QString newDevice = device.name();
|
QString newDevice = device.name();
|
||||||
QList<QBluetoothUuid> serviceUuids = device.serviceUuids();
|
QList<QBluetoothUuid> serviceUuids = device.serviceUuids();
|
||||||
foreach (QBluetoothUuid id, serviceUuids) {
|
foreach (QBluetoothUuid id, serviceUuids) {
|
||||||
|
addBtUuid(id);
|
||||||
qDebug() << id.toByteArray();
|
qDebug() << id.toByteArray();
|
||||||
}
|
}
|
||||||
appendTextToLog("Found new device " + newDevice + " (" + device.address().toString() + ")");
|
appendTextToLog("Found new device " + newDevice + " (" + device.address().toString() + ")");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue