#ifndef BLE_H
#define BLE_H

#include <QObject>
#include <QVariant>
#include <QList>
#include <QBluetoothServiceDiscoveryAgent>
#include <QBluetoothDeviceDiscoveryAgent>
#include <QLowEnergyController>
#include <QBluetoothServiceInfo>

class BLE : public QObject
{
    Q_OBJECT
public:
    explicit BLE(QObject *parent = nullptr);
    ~BLE();

    void init();

    //开始扫描设备
    void startScanDevices();
    //连接设备
    void connectDevice(QString address);
    //连接服务
    void connectService(QString uuid);
    //扫描状态
    bool getScanning(){
        return isScanning;
    }

    QList<QBluetoothDeviceInfo> getDevices(){
        return bleDevicesList;
    }

    QList<QBluetoothUuid> getServicesUUID(){
        return servicesUUIDList;
    }

    QList<QLowEnergyCharacteristic> getChars(){
        return characterList;
    }

private slots:
    // QLowEnergyService related
    void serviceDetailsDiscovered(QLowEnergyService::ServiceState newState);

signals:
    void signal_scanFinished();

    void signal_findservicesFinished();

    void signal_findcharsFinished();

private:
    QBluetoothDeviceDiscoveryAgent * m_DiscoveryAgent;  //设备发现对象

    bool isScanning = false;

    QLowEnergyController *          m_LowController = nullptr;    //中心控制器

    QList<QBluetoothDeviceInfo >    bleDevicesList;

    QBluetoothDeviceInfo            nowDevice;

    QString                         previousAddress;        //之前的设备

    QList<QLowEnergyService>        servicesList;

    QList<QLowEnergyCharacteristic> characterList;

    QList<QBluetoothUuid>           servicesUUIDList;

};

#endif // BLE_H