// SPDX-License-Identifier: GPL-2.0 #ifndef BTDEVICESELECTIONDIALOG_H #define BTDEVICESELECTIONDIALOG_H #include #include #include #include #include #if defined(Q_OS_WIN) #include #include #include #define SUCCESS 0 #define BTH_ADDR_BUF_LEN 40 #define BTH_ADDR_PRETTY_STRING_LEN 17 // there are 6 two-digit hex values and 5 colons #undef ERROR // this is already declared in our headers #undef IGNORE // this is already declared in our headers #undef DC_VERSION // this is already declared in libdivecomputer header #endif namespace Ui { class BtDeviceSelectionDialog; } #if defined(Q_OS_WIN) class WinBluetoothDeviceDiscoveryAgent : public QThread { Q_OBJECT signals: void deviceDiscovered(const QBluetoothDeviceInfo &info); void error(QBluetoothDeviceDiscoveryAgent::Error error); public: WinBluetoothDeviceDiscoveryAgent(QObject *parent); ~WinBluetoothDeviceDiscoveryAgent(); bool isActive() const; QString errorToString() const; QBluetoothDeviceDiscoveryAgent::Error error() const; void run() override; void stop(); private: bool running; bool stopped; QString lastErrorToString; QBluetoothDeviceDiscoveryAgent::Error lastError; }; #endif class BtDeviceSelectionDialog : public QDialog { Q_OBJECT public: explicit BtDeviceSelectionDialog(QWidget *parent = 0); ~BtDeviceSelectionDialog(); QString getSelectedDeviceAddress(); QString getSelectedDeviceName(); QString getSelectedDeviceText(); static QString formatDeviceText(const QString &address, const QString &name); private slots: void on_changeDeviceState_clicked(); void on_save_clicked(); void on_clear_clicked(); void on_scan_clicked(); void remoteDeviceScanFinished(); void hostModeStateChanged(QBluetoothLocalDevice::HostMode mode); void addRemoteDevice(const QBluetoothDeviceInfo &remoteDeviceInfo); void currentItemChanged(QListWidgetItem *item,QListWidgetItem *previous); void displayPairingMenu(const QPoint &pos); void pairingFinished(const QBluetoothAddress &address,QBluetoothLocalDevice::Pairing pairing); void error(QBluetoothLocalDevice::Error error); void deviceDiscoveryError(QBluetoothDeviceDiscoveryAgent::Error error); void localDeviceChanged(int); private: Ui::BtDeviceSelectionDialog *ui; #if defined(Q_OS_WIN) WinBluetoothDeviceDiscoveryAgent *remoteDeviceDiscoveryAgent; #else QBluetoothLocalDevice *localDevice; QBluetoothDeviceDiscoveryAgent *remoteDeviceDiscoveryAgent; #endif QScopedPointer selectedRemoteDeviceInfo; void updateLocalDeviceInformation(); void initializeDeviceDiscoveryAgent(); }; #endif // BTDEVICESELECTIONDIALOG_H