// Copyright (C) 2017 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #ifndef QLOWENERGYCONTROLLERPRIVATEBASE_P_H #define QLOWENERGYCONTROLLERPRIVATEBASE_P_H // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include #include #include #include "qlowenergyserviceprivate_p.h" QT_BEGIN_NAMESPACE typedef QMap > ServiceDataMap; class QLowEnergyControllerPrivate : public QObject { Q_OBJECT public: // This class is required to enable selection of multiple // alternative QLowEnergyControllerPrivate implementations on BlueZ. // Bluez has a low level ATT protocol stack implementation and a DBus // implementation. QLowEnergyControllerPrivate(); virtual ~QLowEnergyControllerPrivate(); // interface definition virtual void init() = 0; virtual void connectToDevice() = 0; virtual void disconnectFromDevice() = 0; virtual void discoverServices() = 0; virtual void discoverServiceDetails(const QBluetoothUuid &service, QLowEnergyService::DiscoveryMode mode) = 0; virtual void readCharacteristic( const QSharedPointer service, const QLowEnergyHandle charHandle) = 0; virtual void readDescriptor( const QSharedPointer service, const QLowEnergyHandle charHandle, const QLowEnergyHandle descriptorHandle) = 0; virtual void writeCharacteristic( const QSharedPointer service, const QLowEnergyHandle charHandle, const QByteArray &newValue, QLowEnergyService::WriteMode writeMode) = 0; virtual void writeDescriptor( const QSharedPointer service, const QLowEnergyHandle charHandle, const QLowEnergyHandle descriptorHandle, const QByteArray &newValue) = 0; virtual void startAdvertising( const QLowEnergyAdvertisingParameters ¶ms, const QLowEnergyAdvertisingData &advertisingData, const QLowEnergyAdvertisingData &scanResponseData) = 0; virtual void stopAdvertising() = 0; virtual void requestConnectionUpdate( const QLowEnergyConnectionParameters & params) = 0; virtual void addToGenericAttributeList( const QLowEnergyServiceData &service, QLowEnergyHandle startHandle) = 0; virtual int mtu() const = 0; virtual void readRssi(); virtual QLowEnergyService *addServiceHelper( const QLowEnergyServiceData &service); // common backend methods bool isValidLocalAdapter(); void setError(QLowEnergyController::Error newError); void setState(QLowEnergyController::ControllerState newState); // public variables QLowEnergyController::Role role; QLowEnergyController::RemoteAddressType addressType; // list of all found service uuids on remote device ServiceDataMap serviceList; // list of all found service uuids on local peripheral device ServiceDataMap localServices; //common helper functions QSharedPointer serviceForHandle(QLowEnergyHandle handle); QLowEnergyCharacteristic characteristicForHandle(QLowEnergyHandle handle); QLowEnergyDescriptor descriptorForHandle(QLowEnergyHandle handle); quint16 updateValueOfCharacteristic(QLowEnergyHandle charHandle, const QByteArray &value, bool appendValue); quint16 updateValueOfDescriptor(QLowEnergyHandle charHandle, QLowEnergyHandle descriptorHandle, const QByteArray &value, bool appendValue); void invalidateServices(); protected: QLowEnergyController::ControllerState state = QLowEnergyController::UnconnectedState; QLowEnergyController::Error error = QLowEnergyController::NoError; QString errorString; QBluetoothAddress remoteDevice; QBluetoothAddress localAdapter; QLowEnergyHandle lastLocalHandle{}; QString remoteName; // device name of the remote QBluetoothUuid deviceUuid; // quite useless anywhere but Darwin (CoreBluetooth). Q_DECLARE_PUBLIC(QLowEnergyController) QLowEnergyController *q_ptr; }; QT_END_NAMESPACE #endif // QLOWENERGYCONTROLLERPRIVATEBASE_P_H