Dokit
Internal development documentation
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
19
21
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.
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
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
115
116#endif // QTPOKIT_MULTIMETERSERVICE_H
Declares the AbstractPokitService class.
The AbstractPokitService class provides a common base for Pokit services classes.
virtual bool readCharacteristics()=0
Read all characteristics.
The MultimeterServicePrivate class provides private implementation for MultimeterService.
The MultimeterService class accesses the Multimeter service of Pokit devices.
MeterStatus
Values supported by the Status attribute of the Settings characteristic.
Mode
Values supported by the Mode attribute of the Settings and Reading characteristics.
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.
QTPOKIT_EXPORT QString toString(const PokitProduct product)
Returns product as user-friendly string.
Q_DISABLE_COPY(Class)
Q_SIGNALSQ_SIGNALS
#define QTPOKIT_BEGIN_NAMESPACE
Macro for starting the QtPokit library's top-most namespace (if one is defined).
#define QTPOKIT_EXPORT
QtPokit library export/import macro.
#define QTPOKIT_END_NAMESPACE
Macro for ending the QtPokit library's top-most namespace (if one is defined).
Characteristics available via the Multimeter service.
Attributes included in the Reading characterstic.
MeterStatus status
Current multimeter status.
Mode mode
Current operation mode.
float value
Last acquired value.
quint8 range
Current range.
Attributes included in the Settings characterstic.
quint32 updateInterval
Desired update interval in milliseconds.
Mode mode
Desired operation mode.