LCOV - code coverage report
Current view: top level - include/qtpokit - multimeterservice.h (source / functions) Hit Total Coverage
Project: Dokit Lines: 2 2 100.0 %
Version: Functions: 0 0 -

          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 MultimeterService class.
       7             :  */
       8             : 
       9             : #ifndef QTPOKIT_MULTIMETERSERVICE_H
      10             : #define QTPOKIT_MULTIMETERSERVICE_H
      11             : 
      12             : #include "abstractpokitservice.h"
      13             : 
      14             : #include <QBluetoothAddress>
      15             : #include <QBluetoothUuid>
      16             : #include <QVersionNumber>
      17             : 
      18             : QTPOKIT_BEGIN_NAMESPACE
      19             : 
      20             : class MultimeterServicePrivate;
      21             : 
      22             : class QTPOKIT_EXPORT MultimeterService : public AbstractPokitService
      23             : {
      24        1881 :     Q_OBJECT
      25             : 
      26             : public:
      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             : 
      99             : signals:
     100             :     void settingsWritten();
     101             :     void readingRead(const MultimeterService::Reading &reading);
     102             : 
     103             : protected:
     104             :     /// \cond internal
     105             :     MultimeterService(MultimeterServicePrivate * const d, QObject * const parent);
     106             :     /// \endcond
     107             : 
     108             : private:
     109         171 :     Q_DECLARE_PRIVATE(MultimeterService)
     110             :     Q_DISABLE_COPY(MultimeterService)
     111             :     friend class TestMultimeterService;
     112             : };
     113             : 
     114             : QTPOKIT_END_NAMESPACE
     115             : 
     116             : #endif // QTPOKIT_MULTIMETERSERVICE_H

Generated by: LCOV version 1.14