automotive-message-broker  0.14.803
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
ble.h
1 #ifndef _BLE_H_
2 #define _BLE_H_
3 
4 #include <QObject>
5 #include <QList>
6 #include <QString>
7 #include <QByteArray>
8 #include <QJSValue>
9 
10 #include <QBluetoothDeviceInfo>
11 #include <QLowEnergyController>
12 #include <QBluetoothUuid>
13 
14 class QBluetoothDeviceDiscoveryAgent;
15 class QLowEnergyService;
16 class QLowEnergyCharacteristic;
17 
18 class ServiceIdentifier : public QObject
19 {
20  Q_OBJECT
21  Q_PROPERTY(QString name READ getDeviceName)
22  Q_PROPERTY(QString address READ getDeviceAddress)
23 
24 public:
25  ServiceIdentifier(const QString & s, const QString & r, const QString & t, QObject *parent = nullptr)
26  :QObject(parent), serviceUuid(s), rxUuid(r), txUuid(t), service(nullptr), mController(nullptr),
27  mAddyType(QLowEnergyController::RandomAddress){}
28 
29  QString getDeviceName() { return deviceName; }
30  QString getDeviceAddress() { return deviceAddress; }
31  void setRemoteAddressType(int t);
32 
33  QString serviceUuid;
34  QString rxUuid;
35  QString txUuid;
36  QString deviceName;
37  QString deviceAddress;
38 
39  QLowEnergyService * service;
40 
41 public Q_SLOTS:
42  QByteArray read();
43  bool write(const QByteArray &data);
44  void connectToDevice();
45  void disconnectFromDevice();
46 
47 Q_SIGNALS:
48  void onMessage(const QByteArray & data);
49  void connected();
50  void disconnected();
51  void stateChanged(int state);
52 
53 private Q_SLOTS:
54  void characteristicChanged(const QLowEnergyCharacteristic & characteristic, const QByteArray & newValue);
55  void controllerConnected();
56  void controllerServiceDiscovered(const QBluetoothUuid & uuid);
57  void controllerStateChanged(QLowEnergyController::ControllerState state);
58  void serviceStateChanged(QLowEnergyService::ServiceState s);
59 
60 private:
61  QLowEnergyController * mController;
62  QLowEnergyController::RemoteAddressType mAddyType;
63 };
64 
65 class Ble : public QObject
66 {
67  Q_OBJECT
68  Q_PROPERTY(bool scan READ scanning WRITE startScan NOTIFY scanningChanged)
69  Q_PROPERTY(bool debug READ debug WRITE setDebug)
70 public:
71 
72  Ble(QObject* parent = nullptr);
73  ~Ble();
74  QObject* device(const QString & address);
75  bool debug();
76  void setDebug(bool d);
77 
78 public Q_SLOTS:
79 
80  void addService(const QString & serviceUuid, const QString & rxUuid, const QString & txUuid);
81 
82  void startScan(bool scan);
83 
84  bool scanning();
85 
86 Q_SIGNALS:
87  void scanningChanged();
88  void leDeviceFound(QObject*);
89  void error(int);
90 
91 private Q_SLOTS:
92  void errorHandle(QLowEnergyController::Error err);
93  void deviceDiscovered(const QBluetoothDeviceInfo & device);
94 
95 private:
96  QList<ServiceIdentifier*> services;
97  QBluetoothDeviceDiscoveryAgent* mDeviceDiscoveryAgent;
98 };
99 
100 
101 #endif
102