Dokit
Native Qt library for Pokit devices
Loading...
Searching...
No Matches
multimeterservice.h
Go to the documentation of this file.
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 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() override;
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
99signals:
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
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.
void settingsWritten()
This signal is emitted when the Settings characteristic has been written 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)
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