// SPDX-License-Identifier: GPL-2.0 #ifndef BTDISCOVERY_H #define BTDISCOVERY_H #include #include #include #include #if defined(BT_SUPPORT) #include #include #include #include "core/libdivecomputer.h" #endif #if defined(Q_OS_ANDROID) #include #include #endif void saveBtDeviceInfo(const char* devaddr, QBluetoothDeviceInfo deviceInfo); QBluetoothDeviceInfo getBtDeviceInfo(const char* devaddr); class ConnectionListModel : public QAbstractListModel { Q_OBJECT public: enum CLMRole { AddressRole = Qt::UserRole + 1 }; ConnectionListModel(QObject *parent = 0); QHash roleNames() const; QVariant data(const QModelIndex &index, int role = AddressRole) const; QString address(int idx) const; int rowCount(const QModelIndex &parent = QModelIndex()) const; void addAddress(const QString address); private: QStringList m_addresses; }; class BTDiscovery : public QObject { Q_OBJECT public: BTDiscovery(QObject *parent = NULL); ~BTDiscovery(); static BTDiscovery *instance(); #if defined(BT_SUPPORT) struct btPairedDevice { QString address; QString name; }; struct btVendorProduct { btPairedDevice btpdi; dc_descriptor_t *dcDescriptor; int vendorIdx; int productIdx; }; void btDeviceDiscovered(const QBluetoothDeviceInfo &device); void btDeviceDiscoveredMain(const btPairedDevice &device); bool btAvailable() const; #if defined(Q_OS_ANDROID) void getBluetoothDevices(); #endif QList getBtDcs(); #endif private: static BTDiscovery *m_instance; bool m_btValid; #if defined(BT_SUPPORT) QList btDCs; // recognized DCs QList btAllDevices; // all paired BT stuff #endif #if defined(Q_OS_ANDROID) bool checkException(const char* method, const QAndroidJniObject* obj); #endif #if defined(BT_SUPPORT) QList btPairedDevices; QBluetoothLocalDevice localBtDevice; QBluetoothDeviceDiscoveryAgent *discoveryAgent; #endif signals: void dcVendorChanged(); void dcProductChanged(); void dcBtChanged(); }; #endif // BTDISCOVERY_H