mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
57753321b0
If a device has more than one service the order of service discovery determined the selection of the service that we intend to interact with. This assumption is not accurate and is even platform dependent. Thinking ahead, it is likely that some devices may require us to keep track and interact with multiple services at the time. The new logic still suffers from the fact that there is no way to select the correct service for interaction. This will require higher level stack changes. Signed-off-by: Alex Blasche <alexander.blasche@qt.io> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
45 lines
1.3 KiB
C++
45 lines
1.3 KiB
C++
// SPDX-License-Identifier: GPL-2.0
|
|
#ifndef QT_BLE_H
|
|
#define QT_BLE_H
|
|
|
|
#include <QVector>
|
|
#include <QLowEnergyController>
|
|
#include <QEventLoop>
|
|
|
|
class BLEObject : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
BLEObject(QLowEnergyController *c);
|
|
~BLEObject();
|
|
dc_status_t write(const void* data, size_t size, size_t *actual);
|
|
dc_status_t read(void* data, size_t size, size_t *actual);
|
|
|
|
//TODO: need better mode of selecting the desired service than below
|
|
inline QLowEnergyService *preferredService()
|
|
{ return services.isEmpty() ? nullptr : services[0]; }
|
|
|
|
public slots:
|
|
void addService(const QBluetoothUuid &newService);
|
|
void serviceStateChanged(QLowEnergyService::ServiceState s);
|
|
void characteristcStateChanged(const QLowEnergyCharacteristic &c, const QByteArray &value);
|
|
void writeCompleted(const QLowEnergyDescriptor &d, const QByteArray &value);
|
|
|
|
private:
|
|
QVector<QLowEnergyService *> services;
|
|
|
|
QLowEnergyController *controller = nullptr;
|
|
QList<QByteArray> receivedPackets;
|
|
QEventLoop waitForPacket;
|
|
};
|
|
|
|
|
|
extern "C" {
|
|
dc_status_t qt_ble_open(dc_custom_io_t *io, dc_context_t *context, const char *name);
|
|
dc_status_t qt_ble_read(dc_custom_io_t *io, void* data, size_t size, size_t *actual);
|
|
dc_status_t qt_ble_write(dc_custom_io_t *io, const void* data, size_t size, size_t *actual);
|
|
dc_status_t qt_ble_close(dc_custom_io_t *io);
|
|
}
|
|
|
|
#endif
|