Line data Source code
1 : // SPDX-FileCopyrightText: 2022-2024 Paul Colby <git@colby.id.au>
2 : // SPDX-License-Identifier: LGPL-3.0-or-later
3 :
4 : /*!
5 : * \file
6 : * Declares the DeviceInfoService class.
7 : */
8 :
9 : #ifndef QTPOKIT_INFOSERVICE_H
10 : #define QTPOKIT_INFOSERVICE_H
11 :
12 : #include "abstractpokitservice.h"
13 :
14 : #include <QBluetoothAddress>
15 : #include <QBluetoothUuid>
16 : #include <QVersionNumber>
17 :
18 : QTPOKIT_BEGIN_NAMESPACE
19 :
20 : class DeviceInfoServicePrivate;
21 :
22 : class QTPOKIT_EXPORT DeviceInfoService : public AbstractPokitService
23 : {
24 38 : Q_OBJECT
25 :
26 : public:
27 : /// UUID of the "Device Info" service.
28 : static inline const QBluetoothUuid serviceUuid
29 : { QBluetoothUuid::ServiceClassUuid::DeviceInformation }; // 0x180a
30 :
31 : /// Characteristics available via the `Device Info` service.
32 : struct QTPOKIT_EXPORT CharacteristicUuids {
33 : /// UUID of the `Device Info` service's `Manufacturer Name String` characterstic.
34 : static inline const QBluetoothUuid manufacturerName
35 : { QBluetoothUuid::CharacteristicType::ManufacturerNameString }; // 0x2a29
36 :
37 : /// UUID of the `Device Info` service's `Model Number String` characterstic.
38 : static inline const QBluetoothUuid modelNumber
39 : { QBluetoothUuid::CharacteristicType::ModelNumberString }; // 0x2a24
40 :
41 : /// UUID of the `Device Info` service's `Firmware Revision String` characterstic.
42 : static inline const QBluetoothUuid firmwareRevision
43 : { QBluetoothUuid::CharacteristicType::FirmwareRevisionString }; // 0x2a26
44 :
45 : /// UUID of the `Device Info` service's `Hardware Revision String` characterstic.
46 : static inline const QBluetoothUuid hardwareRevision
47 : { QBluetoothUuid::CharacteristicType::HardwareRevisionString }; // 0x2a27
48 :
49 : /// UUID of the `Device Info` service's `Software Revision String` characterstic.
50 : static inline const QBluetoothUuid softwareRevision
51 : { QBluetoothUuid::CharacteristicType::SoftwareRevisionString }; // 0x2a28
52 :
53 : /// UUID of the `Device Info` service's `Serial Number String` characterstic.
54 : static inline const QBluetoothUuid serialNumber
55 : { QBluetoothUuid::CharacteristicType::SerialNumberString }; // 0x2a25
56 : };
57 :
58 : DeviceInfoService(QLowEnergyController * const pokitDevice, QObject * parent = nullptr);
59 990 : ~DeviceInfoService() = default;
60 :
61 : bool readCharacteristics() override;
62 : bool readFirmwareRevisionCharacteristic();
63 : bool readHardwareRevisionCharacteristic();
64 : bool readManufacturerCharacteristics();
65 : bool readModelNumberCharacteristic();
66 : bool readSoftwareRevisionCharacteristic();
67 : bool readSerialNumberCharacteristic();
68 :
69 : // All Device Info characteristics are read-only, single values.
70 : QString manufacturer() const;
71 : QString modelNumber() const;
72 : QString hardwareRevision() const;
73 : QString firmwareRevision() const;
74 : QString softwareRevision() const;
75 : QString serialNumber() const;
76 :
77 : Q_SIGNALS:
78 : void manufacturerRead(const QString &name);
79 : void modelNumberRead(const QString &model);
80 : void hardwareRevisionRead(const QString &revision);
81 : void firmwareRevisionRead(const QString &revision);
82 : void softwareRevisionRead(const QString &revision);
83 : void serialNumberRead(const QString &serialNumber);
84 :
85 : protected:
86 : /// \cond internal
87 : DeviceInfoService(DeviceInfoServicePrivate * const d, QObject * const parent);
88 : /// \endcond
89 :
90 : private:
91 5024 : Q_DECLARE_PRIVATE(DeviceInfoService)
92 : Q_DISABLE_COPY(DeviceInfoService)
93 : friend class TestDeviceInfoService;
94 : };
95 :
96 : QTPOKIT_END_NAMESPACE
97 :
98 : #endif // QTPOKIT_INFOSERVICE_H
|