Line data Source code
1 : // SPDX-FileCopyrightText: 2022-2023 Paul Colby <git@colby.id.au> 2 : // SPDX-License-Identifier: LGPL-3.0-or-later 3 : 4 : /*! 5 : * \file 6 : * Declares the GenericAccessService class. 7 : */ 8 : 9 : #ifndef QTPOKIT_GENERICACCESSSERVICE_H 10 : #define QTPOKIT_GENERICACCESSSERVICE_H 11 : 12 : #include "abstractpokitservice.h" 13 : 14 : #include <QBluetoothAddress> 15 : #include <QBluetoothUuid> 16 : #include <QVersionNumber> 17 : 18 : QTPOKIT_BEGIN_NAMESPACE 19 : 20 : class GenericAccessServicePrivate; 21 : 22 : class QTPOKIT_EXPORT GenericAccessService : public AbstractPokitService 23 : { 24 18 : Q_OBJECT 25 : 26 : public: 27 : /// UUID of the `Generic Access` service. 28 : static inline const QBluetoothUuid serviceUuid { QBluetoothUuid::ServiceClassUuid::GenericAccess }; 29 : 30 : /// Characteristics available via the `Generic Access` service. 31 : struct QTPOKIT_EXPORT CharacteristicUuids { 32 : /// UUID of the `Generic Access` service's `Device Name` characterstic. 33 : static inline const QBluetoothUuid deviceName { QBluetoothUuid::CharacteristicType::DeviceName }; 34 : 35 : /// UUID of the `Generic Access` service's `Appearance` characterstic. 36 : static inline const QBluetoothUuid appearance { QBluetoothUuid::CharacteristicType::Appearance }; 37 : }; 38 : 39 : GenericAccessService(QLowEnergyController * const pokitDevice, QObject * parent = nullptr); 40 : ~GenericAccessService() override; 41 : 42 : bool readCharacteristics() override; 43 : bool readAppearanceCharacteristic(); 44 : bool readDeviceNameCharacteristic(); 45 : 46 : // Appearance characteristic (BLE read only). 47 : quint16 appearance() const; 48 : 49 : // Device Name characteristic (BLE read/write). 50 : QString deviceName() const; 51 : bool setDeviceName(const QString &name); 52 : 53 : signals: 54 : void appearanceRead(const quint16 appearance); 55 : void deviceNameRead(const QString &deviceName); 56 : void deviceNameWritten(); 57 : 58 : protected: 59 : /// \cond internal 60 : GenericAccessService(GenericAccessServicePrivate * const d, QObject * const parent); 61 : /// \endcond 62 : 63 : private: 64 156 : Q_DECLARE_PRIVATE(GenericAccessService) 65 : Q_DISABLE_COPY(GenericAccessService) 66 : friend class TestGenericAccessService; 67 : }; 68 : 69 : QTPOKIT_END_NAMESPACE 70 : 71 : #endif // QTPOKIT_GENERICACCESSSERVICE_H