Files
bobbycar-app/devicefinder.h

75 lines
2.4 KiB
C
Raw Normal View History

2021-08-17 14:03:33 +02:00
#pragma once
2021-07-17 05:09:39 +02:00
2021-08-17 14:03:33 +02:00
// system includes
#include <memory>
#include <vector>
2021-07-17 05:09:39 +02:00
2021-08-17 14:03:33 +02:00
// Qt includes
#include <QAbstractItemModel>
2021-07-17 05:09:39 +02:00
#include <QTimer>
#include <QVariant>
#include <QBluetoothDeviceDiscoveryAgent>
#include <QBluetoothDeviceInfo>
2021-08-17 14:03:33 +02:00
#include <QtQml/qqml.h>
2021-07-17 05:09:39 +02:00
2021-08-17 14:03:33 +02:00
// forward declares
2021-07-17 05:09:39 +02:00
class DeviceHandler;
2021-08-17 14:03:33 +02:00
class DeviceFinder : public QAbstractItemModel
2021-07-17 05:09:39 +02:00
{
Q_OBJECT
Q_PROPERTY(bool scanning READ scanning NOTIFY scanningChanged)
2021-08-17 14:03:33 +02:00
Q_PROPERTY(DeviceHandler* handler READ handler WRITE setHandler NOTIFY handlerChanged)
Q_PROPERTY(QString error READ error WRITE setError NOTIFY errorChanged)
Q_PROPERTY(QString info READ info WRITE setInfo NOTIFY infoChanged)
QML_ELEMENT
2021-07-17 05:09:39 +02:00
public:
2021-08-17 14:03:33 +02:00
DeviceFinder(QObject *parent = nullptr);
bool scanning() const { return m_deviceDiscoveryAgent.isActive(); }
DeviceHandler* handler() { return m_handler; }
const DeviceHandler* handler() const { return m_handler; }
void setHandler(DeviceHandler* handler) { if (m_handler == handler) return; m_handler = handler; emit handlerChanged(); }
QString error() const { return m_error; }
void setError(const QString& error) { if (m_error == error) return; m_error = error; emit errorChanged(); }
QString info() const { return m_info; }
void setInfo(const QString& info) { if (m_info == info) return; m_info = info; emit infoChanged(); }
void clearMessages() { setInfo(""); setError(""); }
2021-07-17 05:09:39 +02:00
2021-08-17 14:03:33 +02:00
// QAbstractItemModel interface
QModelIndex index(int row, int column, const QModelIndex &parent) const override;
QModelIndex parent(const QModelIndex &child) const override;
int rowCount(const QModelIndex &parent) const override;
int columnCount(const QModelIndex &parent) const override;
QVariant data(const QModelIndex &index, int role) const override;
QMap<int, QVariant> itemData(const QModelIndex &index) const override;
QHash<int, QByteArray> roleNames() const override;
signals:
void scanningChanged();
void handlerChanged();
void errorChanged();
void infoChanged();
2021-07-17 05:09:39 +02:00
public slots:
void startSearch();
void connectToService(const QString &address);
private slots:
2021-08-17 14:03:33 +02:00
void addDevice(const QBluetoothDeviceInfo &);
2021-07-17 05:09:39 +02:00
void scanError(QBluetoothDeviceDiscoveryAgent::Error error);
void scanFinished();
private:
2021-08-17 14:03:33 +02:00
DeviceHandler *m_handler{};
QBluetoothDeviceDiscoveryAgent m_deviceDiscoveryAgent;
std::vector<QBluetoothDeviceInfo> m_devices;
QString m_error;
QString m_info;
2021-07-17 05:09:39 +02:00
};