Dokit
Native Qt library for Pokit devices
Loading...
Searching...
No Matches
multimeterservice.h
Go to the documentation of this file.
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 MultimeterService class.
7 */
8
9#ifndef QTPOKIT_MULTIMETERSERVICE_H
10#define QTPOKIT_MULTIMETERSERVICE_H
11
13
14#include <QBluetoothAddress>
15#include <QBluetoothUuid>
16#include <QVersionNumber>
17
18QTPOKIT_BEGIN_NAMESPACE
19
20class MultimeterServicePrivate;
21
22class QTPOKIT_EXPORT MultimeterService : public AbstractPokitService
23{
24 Q_OBJECT
25
26public:
27 /// UUID of the `Multimeter` service.
28 static inline const QBluetoothUuid serviceUuid { QStringLiteral("e7481d2f-5781-442e-bb9a-fd4e3441dadc") };
29
30 /// Characteristics available via the `Multimeter` service.
31 struct QTPOKIT_EXPORT CharacteristicUuids {
32 /// UUID of the `Multimeter` service's `Settings` characterstic.
33 static inline const QBluetoothUuid settings { QStringLiteral("53dc9a7a-bc19-4280-b76b-002d0e23b078") };
34
35 /// UUID of the `Multimeter` service's `Reading` characterstic.
36 static inline const QBluetoothUuid reading { QStringLiteral("047d3559-8bee-423a-b229-4417fa603b90") };
37 };
38
39 /// Values supported by the `Mode` attribute of the `Settings` and `Reading` characteristics.
40 enum class Mode : quint8 {
41 Idle = 0, ///< Make device idle.
42 DcVoltage = 1, ///< Measure DC voltage.
43 AcVoltage = 2, ///< Measure AC voltage.
44 DcCurrent = 3, ///< Measure DC current.
45 AcCurrent = 4, ///< Measure AC current.
46 Resistance = 5, ///< Measure resistance.
47 Diode = 6, ///< Measure diode.
48 Continuity = 7, ///< Measure continuity.
49 Temperature = 8, ///< Measure temperature.
50 Capacitance = 9, ///< Measure capacitance.
51 ExternalTemperature = 10, ///< Measure temperature via an external temperature probe.
52 };
53 static QString toString(const Mode &mode);
54
55 static QString toString(const PokitProduct product, const quint8 range, const Mode mode);
56 QString toString(const quint8 range, const Mode mode) const;
57 static QVariant maxValue(const PokitProduct product, const quint8 range, const Mode mode);
58 QVariant maxValue(const quint8 range, const Mode mode) const;
59
60 /// Attributes included in the `Settings` characterstic.
61 struct Settings {
62 Mode mode; ///< Desired operation mode.
63 quint8 range; ///< Desired range.
64 quint32 updateInterval; ///< Desired update interval in milliseconds.
65 };
66
67 /// Values supported by the `Status` attribute of the `Settings` characteristic.
68 enum class MeterStatus : quint8 {
69 AutoRangeOff = 0, ///< Auto-range is disabled (voltage, current and resistance modes only).
70 AutoRangeOn = 1, ///< Auto-range is enabled (voltage, current and resistance modes only).
71 NoContinuity = 0, ///< No continuity (continuity mode only).
72 Continuity = 1, ///< Continuity (continuity mode only).
73 Ok = 0, ///< Ok (temperature and diode modes only).
74 Error = 255 ///< Error (all modes).
75 };
76
77 /// Attributes included in the `Reading` characterstic.
78 struct Reading {
79 MeterStatus status; ///< Current multimeter status.
80 float value; ///< Last acquired value.
81 Mode mode; ///< Current operation mode.
82 quint8 range; ///< Current range.
83 };
84
85 MultimeterService(QLowEnergyController * const pokitDevice, QObject * parent = nullptr);
86 ~MultimeterService() = default;
87
88 bool readCharacteristics() override;
89 bool readReadingCharacteristic();
90
91 // Settings characteristic (BLE write only).
92 bool setSettings(const Settings &settings);
93
94 // Reading characteristic (BLE read/notify).
95 Reading reading() const;
96 bool enableReadingNotifications();
97 bool disableReadingNotifications();
98
102
103protected:
104 /// \cond internal
105 MultimeterService(MultimeterServicePrivate * const d, QObject * const parent);
106 /// \endcond
107
108private:
109 Q_DECLARE_PRIVATE(MultimeterService)
111 friend class TestMultimeterService;
112};
113
114QTPOKIT_END_NAMESPACE
115
116#endif // QTPOKIT_MULTIMETERSERVICE_H
Declares the AbstractPokitService class.
The AbstractPokitService class provides a common base for Pokit services classes.
Definition abstractpokitservice.h:27
virtual bool readCharacteristics()=0
Read all characteristics.
The MultimeterService class accesses the Multimeter service of Pokit devices.
Definition multimeterservice.h:23
void settingsWritten()
This signal is emitted when the Settings characteristic has been written successfully.
MeterStatus
Values supported by the Status attribute of the Settings characteristic.
Definition multimeterservice.h:68
Mode
Values supported by the Mode attribute of the Settings and Reading characteristics.
Definition multimeterservice.h:40
void readingRead(const MultimeterService::Reading &reading)
This signal is emitted when the Reading characteristic has been read successfully.
PokitProduct
Pokit products known to, and supported by, the QtPokit library.
Definition pokitproducts.h:21
QTPOKIT_EXPORT QString toString(const PokitProduct product)
Returns product as user-friendly string.
Definition pokitproducts.cpp:26
Q_DISABLE_COPY(Class)
Q_SIGNALSQ_SIGNALS
Characteristics available via the Multimeter service.
Definition multimeterservice.h:31
Attributes included in the Reading characterstic.
Definition multimeterservice.h:78
MeterStatus status
Current multimeter status.
Definition multimeterservice.h:79
Mode mode
Current operation mode.
Definition multimeterservice.h:81
float value
Last acquired value.
Definition multimeterservice.h:80
quint8 range
Current range.
Definition multimeterservice.h:82
Attributes included in the Settings characterstic.
Definition multimeterservice.h:61
quint32 updateInterval
Desired update interval in milliseconds.
Definition multimeterservice.h:64
quint8 range
Desired range.
Definition multimeterservice.h:63
Mode mode
Desired operation mode.
Definition multimeterservice.h:62