Dokit
Internal development documentation
Loading...
Searching...
No Matches
MultimeterServicePrivate Class Reference

The MultimeterServicePrivate class provides private implementation for MultimeterService. More...

Inheritance diagram for MultimeterServicePrivate:
[legend]
Collaboration diagram for MultimeterServicePrivate:
[legend]

Public Member Functions

 MultimeterServicePrivate (QLowEnergyController *controller, MultimeterService *const q)
 
- Public Member Functions inherited from AbstractPokitServicePrivate
 AbstractPokitServicePrivate (const QBluetoothUuid &serviceUuid, QLowEnergyController *controller, AbstractPokitService *const q)
 
bool createServiceObject ()
 Creates an internal service object from the internal controller.
 
QLowEnergyCharacteristic getCharacteristic (const QBluetoothUuid &uuid) const
 Get uuid characteristc from the underlying service.
 
bool readCharacteristic (const QBluetoothUuid &uuid)
 Read the uuid characteristic.
 
bool enableCharacteristicNotificatons (const QBluetoothUuid &uuid)
 Enables client (Pokit device) side notification for characteristic uuid.
 
bool disableCharacteristicNotificatons (const QBluetoothUuid &uuid)
 Disables client (Pokit device) side notification for characteristic uuid.
 
- Public Member Functions inherited from QObject
virtual const QMetaObjectmetaObject () const const
 
 QObject (QObject *parent)
 
virtual bool event (QEvent *e)
 
virtual bool eventFilter (QObject *watched, QEvent *event)
 
QString objectName () const const
 
void setObjectName (const QString &name)
 
bool isWidgetType () const const
 
bool isWindowType () const const
 
bool signalsBlocked () const const
 
bool blockSignals (bool block)
 
QThreadthread () const const
 
void moveToThread (QThread *targetThread)
 
int startTimer (int interval, Qt::TimerType timerType)
 
int startTimer (std::chrono::milliseconds time, Qt::TimerType timerType)
 
void killTimer (int id)
 
findChild (const QString &name, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QString &name, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QRegExp &regExp, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QRegularExpression &re, Qt::FindChildOptions options) const const
 
const QObjectListchildren () const const
 
void setParent (QObject *parent)
 
void installEventFilter (QObject *filterObj)
 
void removeEventFilter (QObject *obj)
 
QMetaObject::Connection connect (const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type) const const
 
bool disconnect (const char *signal, const QObject *receiver, const char *method) const const
 
bool disconnect (const QObject *receiver, const char *method) const const
 
void dumpObjectTree ()
 
void dumpObjectInfo ()
 
void dumpObjectTree () const const
 
void dumpObjectInfo () const const
 
bool setProperty (const char *name, const QVariant &value)
 
QVariant property (const char *name) const const
 
QList< QByteArraydynamicPropertyNames () const const
 
void destroyed (QObject *obj)
 
void objectNameChanged (const QString &objectName)
 
QObjectparent () const const
 
bool inherits (const char *className) const const
 
void deleteLater ()
 
 Q_DISABLE_COPY (Class)
 
 Q_DISABLE_MOVE (Class)
 
 Q_DISABLE_COPY_MOVE (Class)
 
qobject_cast (QObject *object)
 
qobject_cast (const QObject *object)
 
qFindChild (const QObject *obj, const QString &name)
 
QList< T > qFindChildren (const QObject *obj, const QString &name)
 
QList< T > qFindChildren (const QObject *obj, const QRegExp &regExp)
 
 Q_CLASSINFO (Name, Value)
 
 Q_INTERFACES (...)
 
 Q_PROPERTY (...)
 
 Q_ENUMS (...)
 
 Q_FLAGS (...)
 
 Q_ENUM (...)
 
 Q_FLAG (...)
 
 Q_ENUM_NS (...)
 
 Q_FLAG_NS (...)
 
 Q_OBJECT Q_OBJECT
 
 Q_GADGET Q_GADGET
 
 Q_NAMESPACE Q_NAMESPACE
 
 Q_NAMESPACE_EXPORT (EXPORT_MACRO)
 
 Q_SIGNALS Q_SIGNALS
 
 Q_SIGNAL Q_SIGNAL
 
 Q_SLOTS Q_SLOTS
 
 Q_SLOT Q_SLOT
 
 Q_EMIT Q_EMIT
 
 Q_INVOKABLE Q_INVOKABLE
 
 Q_REVISION Q_REVISION
 
 Q_SET_OBJECT_NAME (Object)
 
 QT_NO_NARROWING_CONVERSIONS_IN_CONNECT QT_NO_NARROWING_CONVERSIONS_IN_CONNECT
 

Static Public Member Functions

static QByteArray encodeSettings (const MultimeterService::Settings &settings)
 Returns settings in the format Pokit devices expect.
 
static MultimeterService::Reading parseReading (const QByteArray &value)
 Parses the Reading value into a MultimeterService::Reading struct.
 
- Static Public Member Functions inherited from AbstractPokitServicePrivate
static Q_LOGGING_CATEGORY (lc, "pokit.ble.service", QtInfoMsg)
 Logging category.
 
static bool checkSize (const QString &label, const QByteArray &data, const int minSize, const int maxSize=-1, const bool failOnMax=false)
 Returns false if data is smaller than minSize, otherwise returns failOnMax if data is bigger than maxSize, otherwise returns true.
 
static QString toHexString (const QByteArray &data, const int maxSize=20)
 Returns up to maxSize bytes of data as a human readable hexadecimal string.
 
- Static Public Member Functions inherited from QObject
QString tr (const char *sourceText, const char *disambiguation, int n)
 
QString trUtf8 (const char *sourceText, const char *disambiguation, int n)
 
QMetaObject::Connection connect (const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, Functor functor)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type)
 
bool disconnect (const QObject *sender, const char *signal, const QObject *receiver, const char *method)
 
bool disconnect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method)
 
bool disconnect (const QMetaObject::Connection &connection)
 
bool disconnect (const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method)
 

Protected Member Functions

void characteristicRead (const QLowEnergyCharacteristic &characteristic, const QByteArray &value) override
 Implements AbstractPokitServicePrivate::characteristicRead to parse value, then emit a specialised signal, for each supported characteristic.
 
void characteristicWritten (const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue) override
 Implements AbstractPokitServicePrivate::characteristicWritten to parse newValue, then emit a specialised signal, for each supported characteristic.
 
void characteristicChanged (const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue) override
 Implements AbstractPokitServicePrivate::characteristicChanged to parse newValue, then emit a specialised signal, for each supported characteristic.
 
- Protected Member Functions inherited from QObject
QObjectsender () const const
 
int senderSignalIndex () const const
 
int receivers (const char *signal) const const
 
bool isSignalConnected (const QMetaMethod &signal) const const
 
virtual void timerEvent (QTimerEvent *event)
 
virtual void childEvent (QChildEvent *event)
 
virtual void customEvent (QEvent *event)
 
virtual void connectNotify (const QMetaMethod &signal)
 
virtual void disconnectNotify (const QMetaMethod &signal)
 

Friends

class TestMultimeterService
 

Additional Inherited Members

- Public Attributes inherited from AbstractPokitServicePrivate
bool autoDiscover { true }
 Whether autodiscovery is enabled or not.
 
QLowEnergyControllercontroller { nullptr }
 BLE controller to fetch the service from.
 
std::optional< PokitProductpokitProduct
 The Pokit product controller is connected to.
 
QLowEnergyServiceservice { nullptr }
 BLE service to read/write characteristics.
 
QBluetoothUuid serviceUuid
 UUIDs for service.
 
- Public Attributes inherited from QObject
typedef QObjectList
 
- Protected Slots inherited from AbstractPokitServicePrivate
void connected ()
 Handles QLowEnergyController::connected events.
 
void discoveryFinished ()
 Handles QLowEnergyController::discoveryFinished events.
 
void errorOccurred (const QLowEnergyService::ServiceError newError)
 Handles QLowEnergyController::errorOccurred events.
 
virtual void serviceDiscovered (const QBluetoothUuid &newService)
 Handles QLowEnergyController::serviceDiscovered events.
 
void stateChanged (QLowEnergyService::ServiceState newState)
 Handles QLowEnergyController::stateChanged events.
 
- Protected Attributes inherited from AbstractPokitServicePrivate
AbstractPokitServiceq_ptr
 Internal q-pointer.
 
- Properties inherited from QObject
 objectName
 

Detailed Description

The MultimeterServicePrivate class provides private implementation for MultimeterService.

Definition at line 18 of file multimeterservice_p.h.

Constructor & Destructor Documentation

◆ MultimeterServicePrivate()

MultimeterServicePrivate::MultimeterServicePrivate ( QLowEnergyController * controller,
MultimeterService *const q )
explicit

Constructs a new MultimeterServicePrivate object with public implementation q.

Definition at line 278 of file multimeterservice.cpp.

281{
282
283}
AbstractPokitServicePrivate(const QBluetoothUuid &serviceUuid, QLowEnergyController *controller, AbstractPokitService *const q)
QLowEnergyController * controller
BLE controller to fetch the service from.
static const QBluetoothUuid serviceUuid
UUID of the Multimeter service.

Member Function Documentation

◆ characteristicChanged()

void MultimeterServicePrivate::characteristicChanged ( const QLowEnergyCharacteristic & characteristic,
const QByteArray & newValue )
overrideprotectedvirtual

Implements AbstractPokitServicePrivate::characteristicChanged to parse newValue, then emit a specialised signal, for each supported characteristic.

Reimplemented from AbstractPokitServicePrivate.

Definition at line 380 of file multimeterservice.cpp.

382{
384
387 qCWarning(lc).noquote() << tr("Settings characteristic is write-only, but somehow updated")
388 << serviceUuid << characteristic.name() << characteristic.uuid();
389 return;
390 }
391
393 Q_EMIT q->readingRead(parseReading(newValue));
394 return;
395 }
396
397 qCWarning(lc).noquote() << tr("Unknown characteristic notified for Multimeter service")
398 << serviceUuid << characteristic.name() << characteristic.uuid();
399}
QBluetoothUuid serviceUuid
UUIDs for service.
virtual void characteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue)
Handles QLowEnergyService::characteristicChanged events.
static MultimeterService::Reading parseReading(const QByteArray &value)
Parses the Reading value into a MultimeterService::Reading struct.
The MultimeterService class accesses the Multimeter service of Pokit devices.
QString name() const const
QBluetoothUuid uuid() const const
Q_EMITQ_EMIT
QString tr(const char *sourceText, const char *disambiguation, int n)
static const QBluetoothUuid reading
UUID of the Multimeter service's Reading characterstic.
static const QBluetoothUuid settings
UUID of the Multimeter service's Settings characterstic.

References AbstractPokitServicePrivate::characteristicChanged(), QLowEnergyCharacteristic::name(), parseReading(), QObject::Q_EMIT(), MultimeterService::CharacteristicUuids::reading, AbstractPokitServicePrivate::serviceUuid, MultimeterService::CharacteristicUuids::settings, QObject::tr(), and QLowEnergyCharacteristic::uuid().

Here is the call graph for this function:

◆ characteristicRead()

void MultimeterServicePrivate::characteristicRead ( const QLowEnergyCharacteristic & characteristic,
const QByteArray & value )
overrideprotectedvirtual

Implements AbstractPokitServicePrivate::characteristicRead to parse value, then emit a specialised signal, for each supported characteristic.

Reimplemented from AbstractPokitServicePrivate.

Definition at line 330 of file multimeterservice.cpp.

332{
334
337 Q_EMIT q->readingRead(parseReading(value));
338 return;
339 }
340
342 qCWarning(lc).noquote() << tr("Settings characteristic is write-only, but somehow read")
343 << serviceUuid << characteristic.name() << characteristic.uuid();
344 return;
345 }
346
347 qCWarning(lc).noquote() << tr("Unknown characteristic read for Multimeter service")
348 << serviceUuid << characteristic.name() << characteristic.uuid();
349}
virtual void characteristicRead(const QLowEnergyCharacteristic &characteristic, const QByteArray &value)
Handles QLowEnergyService::characteristicRead events.

References AbstractPokitServicePrivate::characteristicRead(), QLowEnergyCharacteristic::name(), parseReading(), QObject::Q_EMIT(), MultimeterService::CharacteristicUuids::reading, AbstractPokitServicePrivate::serviceUuid, MultimeterService::CharacteristicUuids::settings, QObject::tr(), and QLowEnergyCharacteristic::uuid().

Here is the call graph for this function:

◆ characteristicWritten()

void MultimeterServicePrivate::characteristicWritten ( const QLowEnergyCharacteristic & characteristic,
const QByteArray & newValue )
overrideprotectedvirtual

Implements AbstractPokitServicePrivate::characteristicWritten to parse newValue, then emit a specialised signal, for each supported characteristic.

Reimplemented from AbstractPokitServicePrivate.

Definition at line 355 of file multimeterservice.cpp.

357{
359
362 Q_EMIT q->settingsWritten();
363 return;
364 }
365
367 qCWarning(lc).noquote() << tr("Reading characteristic is read/notify, but somehow written")
368 << serviceUuid << characteristic.name() << characteristic.uuid();
369 return;
370 }
371
372 qCWarning(lc).noquote() << tr("Unknown characteristic written for Multimeter service")
373 << serviceUuid << characteristic.name() << characteristic.uuid();
374}
virtual void characteristicWritten(const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue)
Handles QLowEnergyService::characteristicWritten events.

References AbstractPokitServicePrivate::characteristicWritten(), QLowEnergyCharacteristic::name(), QObject::Q_EMIT(), MultimeterService::CharacteristicUuids::reading, AbstractPokitServicePrivate::serviceUuid, MultimeterService::CharacteristicUuids::settings, QObject::tr(), and QLowEnergyCharacteristic::uuid().

Here is the call graph for this function:

◆ encodeSettings()

QByteArray MultimeterServicePrivate::encodeSettings ( const MultimeterService::Settings & settings)
static

Returns settings in the format Pokit devices expect.

Definition at line 288 of file multimeterservice.cpp.

289{
290 static_assert(sizeof(settings.mode) == 1, "Expected to be 1 byte.");
291 static_assert(sizeof(settings.range) == 1, "Expected to be 1 byte.");
292 static_assert(sizeof(settings.updateInterval) == 4, "Expected to be 4 bytes.");
293
294 QByteArray value;
295 QDataStream stream(&value, QIODevice::WriteOnly);
296 stream.setByteOrder(QDataStream::LittleEndian);
297 stream.setFloatingPointPrecision(QDataStream::SinglePrecision); // 32-bit floats, not 64-bit.
298 stream << (quint8)settings.mode << settings.range << settings.updateInterval;
299
300 Q_ASSERT(value.size() == 6);
301 return value;
302}
int size() const const
quint32 updateInterval
Desired update interval in milliseconds.
Mode mode
Desired operation mode.

References QDataStream::LittleEndian, MultimeterService::Settings::mode, MultimeterService::Settings::range, QDataStream::setByteOrder(), QDataStream::setFloatingPointPrecision(), QDataStream::SinglePrecision, QByteArray::size(), MultimeterService::Settings::updateInterval, and QIODevice::WriteOnly.

Referenced by MultimeterService::setSettings().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ parseReading()

MultimeterService::Reading MultimeterServicePrivate::parseReading ( const QByteArray & value)
static

Parses the Reading value into a MultimeterService::Reading struct.

Definition at line 307 of file multimeterservice.cpp.

308{
311 std::numeric_limits<float>::quiet_NaN(),
313 };
314
315 if (!checkSize(QLatin1String("Reading"), value, 7, 7)) {
316 return reading;
317 }
318
319 reading.status = MultimeterService::MeterStatus(value.at(0));
320 reading.value = qFromLittleEndian<float>(value.mid(1,4).constData());
321 reading.mode = static_cast<MultimeterService::Mode>(value.at(5));
322 reading.range = static_cast<quint8>(value.at(6));
323 return reading;
324}
static bool checkSize(const QString &label, const QByteArray &data, const int minSize, const int maxSize=-1, const bool failOnMax=false)
Returns false if data is smaller than minSize, otherwise returns failOnMax if data is bigger than max...
MeterStatus
Values supported by the Status attribute of the Settings characteristic.
@ Error
Error (all modes).
Mode
Values supported by the Mode attribute of the Settings and Reading characteristics.
@ Idle
Make device idle.
char at(int i) const const
const char * constData() const const
QByteArray mid(int pos, int len) const const
Attributes included in the Reading characterstic.
MeterStatus status
Current multimeter status.

References QByteArray::at(), AbstractPokitServicePrivate::checkSize(), QByteArray::constData(), MultimeterService::Error, MultimeterService::Idle, QByteArray::mid(), and MultimeterService::Reading::status.

Referenced by characteristicChanged(), characteristicRead(), and MultimeterService::reading().

Here is the call graph for this function:
Here is the caller graph for this function:

Friends And Related Symbol Documentation

◆ TestMultimeterService

friend class TestMultimeterService
friend

Definition at line 40 of file multimeterservice_p.h.


The documentation for this class was generated from the following files: