// inspired by Qt5 example 'lowenergyscanner' #pragma once #include #include #include #include #include #include #include class BLE: public QObject { Q_OBJECT /*** **********************************************************/ public: BLE(const QBluetoothUuid& = QBluetoothUuid()); // pass 'mainServiceUuid' // main service and its UUID QLowEnergyService* mainService = nullptr; QBluetoothUuid mainServiceUuid; // (see above) // current device QBluetoothDeviceInfo currentDevice; // if not defined, first one discovered QList devices; void setCurrentDevice(const QBluetoothDeviceInfo&); QString initialDeviceName; // optional // custom device filter (e.g. name filter) virtual bool deviceFilter(const QBluetoothDeviceInfo&) { return true; } Q_SIGNALS: // notify void deviceDiscovered(const QString&); void mainServiceReady(); void deviceDisconnecting(); void bleError(); public Q_SLOTS: void startDeviceDiscovery(const QString& = QString()); void stopDeviceDiscovery(); void disconnect(); /*** *********************************************************/ void scanServices(); void connectToService(const QString&); private Q_SLOTS: // QBluetoothDeviceDiscoveryAgent related void addDevice(const QBluetoothDeviceInfo&); void deviceScanFinished(); void deviceScanError(QBluetoothDeviceDiscoveryAgent::Error); // QLowEnergyController related void addLowEnergyService(const QBluetoothUuid&); void deviceConnected(); void errorReceived(QLowEnergyController::Error); void serviceScanDone(); void deviceDisconnected(); private: void retryScan(); QBluetoothDeviceDiscoveryAgent* discoveryAgent; QList services; QLowEnergyController* controller = nullptr; bool connected = false; bool scanned = false; };