Dokit
Internal development documentation
|
The MeterCommand class implements the meter
CLI command.
More...
Public Slots | |
QStringList | processOptions (const QCommandLineParser &parser) override |
Processes the relevant options from the command line parser. | |
Public Slots inherited from DeviceCommand | |
bool | start () override |
Begins scanning for the Pokit device. | |
Public Slots inherited from AbstractCommand | |
virtual QStringList | processOptions (const QCommandLineParser &parser) |
Processes the relevant options from the command line parser. | |
virtual bool | start ()=0 |
Begins the functionality of this command, and returns true if begun successfully, false otherwise. | |
Public Member Functions | |
MeterCommand (QObject *const parent=nullptr) | |
Construct a new MeterCommand object with parent. | |
QStringList | requiredOptions (const QCommandLineParser &parser) const override |
Returns a list of CLI option names required by this command. | |
QStringList | supportedOptions (const QCommandLineParser &parser) const override |
Returns a list of CLI option names supported by this command. | |
Public Member Functions inherited from DeviceCommand | |
DeviceCommand (QObject *const parent=nullptr) | |
Construct a new DeviceCommand object with parent. | |
Public Member Functions inherited from AbstractCommand | |
AbstractCommand (QObject *const parent=nullptr) | |
Constructs a new command with parent. | |
Public Member Functions inherited from QObject | |
virtual const QMetaObject * | metaObject () 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) |
QThread * | thread () 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) |
T | 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 ®Exp, Qt::FindChildOptions options) const const |
QList< T > | findChildren (const QRegularExpression &re, Qt::FindChildOptions options) const const |
const QObjectList & | children () 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< QByteArray > | dynamicPropertyNames () const const |
void | destroyed (QObject *obj) |
void | objectNameChanged (const QString &objectName) |
QObject * | parent () const const |
bool | inherits (const char *className) const const |
void | deleteLater () |
Q_DISABLE_COPY (Class) | |
Q_DISABLE_MOVE (Class) | |
Q_DISABLE_COPY_MOVE (Class) | |
T | qobject_cast (QObject *object) |
T | qobject_cast (const QObject *object) |
T | qFindChild (const QObject *obj, const QString &name) |
QList< T > | qFindChildren (const QObject *obj, const QString &name) |
QList< T > | qFindChildren (const QObject *obj, const QRegExp ®Exp) |
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 | |
Protected Slots | |
void | serviceDetailsDiscovered () override |
Handles service detail discovery events. | |
Protected Slots inherited from DeviceCommand | |
virtual void | controllerError (const QLowEnergyController::Error error) |
Handles controller error events. | |
virtual void | deviceDisconnected () |
Handles devics disconnection events. | |
virtual void | serviceError (const QLowEnergyService::ServiceError error) |
Handles service error events. | |
virtual void | serviceDetailsDiscovered () |
Handles service detail discovery events. | |
Protected Slots inherited from AbstractCommand | |
virtual void | deviceDiscovered (const QBluetoothDeviceInfo &info)=0 |
Handles PokitDiscoveryAgent::pokitDeviceDiscovered signal. | |
virtual void | deviceDiscoveryFinished ()=0 |
Handles PokitDiscoveryAgent::deviceDiscoveryFinished signal. | |
Protected Member Functions | |
AbstractPokitService * | getService () override |
Returns a Pokit service object for the derived command class. | |
Protected Member Functions inherited from DeviceCommand | |
void | disconnect (int exitCode=EXIT_SUCCESS) |
Disconnects the underlying Pokit device, and sets exitCode to be return to the OS once the disconnection has taken place. | |
Protected Member Functions inherited from QObject | |
QObject * | sender () 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) |
Private Slots | |
void | settingsWritten () |
Invoked when the multimeter settings have been written, to begin reading the meter values. | |
void | outputReading (const MultimeterService::Reading &reading) |
Outputs meter reading in the selected ouput format. | |
Private Attributes | |
quint8(* | minRangeFunc )(const PokitProduct product, const quint32 maxValue) |
Pointer to function for converting rangeOptionValue to a Pokit device's range enumerator. | |
quint32 | rangeOptionValue { 0 } |
The parsed value of range option, if one was supplied. | |
MultimeterService * | service { nullptr } |
Bluetooth service this command interracts with. | |
MultimeterService::Settings | settings { MultimeterService::Mode::DcVoltage, +PokitMeter::VoltageRange::AutoRange, 1000 } |
< Settings for the Pokit device's multimeter mode. | |
int | samplesToGo { -1 } |
Number of samples to read, if specified on the CLI. | |
bool | showCsvHeader { true } |
Whether or not to show a header as the first line of CSV output. | |
Friends | |
class | TestMeterCommand |
Additional Inherited Members | |
Public Types inherited from AbstractCommand | |
enum class | OutputFormat { Csv , Json , Text } |
Supported output formats. More... | |
Static Public Member Functions inherited from AbstractCommand | |
static QString | escapeCsvField (const QString &field) |
Returns an RFC 4180 compliant version of field. | |
template<typename R > | |
static quint32 | parseNumber (const QString &value, const QString &unit, const quint32 sensibleMinimum=0) |
Returns value as an integer multiple of the ratio R. | |
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) |
Public Attributes inherited from QObject | |
typedef | QObjectList |
Static Protected Member Functions inherited from DeviceCommand | |
template<typename T > | |
static T | minRange (const quint32 maxValue) |
static quint8 | minCapacitanceRange (const PokitProduct product, const quint32 maxValue) |
Returns the product's lowest capacitance range that can measure at least up to maxValue (nF), or AutoRange if no such range is available. | |
static quint8 | minCurrentRange (const PokitProduct product, const quint32 maxValue) |
Returns the product's lowest current range that can measure at least up to maxValue (µA), or AutoRange if no such range is available. | |
static quint8 | minResistanceRange (const PokitProduct product, const quint32 maxValue) |
Returns the product's lowest resistance range that can measure at least up to maxValue (Ω), or AutoRange if no such range is available. | |
static quint8 | minVoltageRange (const PokitProduct product, const quint32 maxValue) |
t Returns the product's lowest voltage range that can measure at least up to maxValue (mV), or AutoRange if no such range is available. | |
Static Protected Member Functions inherited from AbstractCommand | |
static | Q_LOGGING_CATEGORY (lc, "dokit.cli.command", QtInfoMsg) |
Logging category for UI commands. | |
Protected Attributes inherited from DeviceCommand | |
PokitDevice * | device { nullptr } |
Pokit Bluetooth device (if any) this command interracts with. | |
int | exitCodeOnDisconnect { EXIT_FAILURE } |
Exit code to return on device disconnection. | |
Protected Attributes inherited from AbstractCommand | |
QString | deviceToScanFor |
Device (if any) that were passed to processOptions(). | |
PokitDiscoveryAgent * | discoveryAgent |
Agent for Pokit device descovery. | |
OutputFormat | format { OutputFormat::Text } |
Selected output format. | |
Properties inherited from QObject | |
objectName | |
The MeterCommand class implements the meter
CLI command.
Definition at line 10 of file metercommand.h.
|
explicit |
Construct a new MeterCommand object with parent.
Definition at line 22 of file metercommand.cpp.
|
overrideprotectedvirtual |
Returns a Pokit service object for the derived command class.
This override returns a pointer to a MultimeterService object.
Implements DeviceCommand.
Definition at line 148 of file metercommand.cpp.
References QObject::connect(), DeviceCommand::device, PokitDevice::multimeter(), service, settingsWritten(), and MultimeterService::settingsWritten().
|
privateslot |
Outputs meter reading in the selected ouput format.
Definition at line 204 of file metercommand.cpp.
References MultimeterService::AcCurrent, MultimeterService::AcVoltage, QString::arg(), MultimeterService::AutoRangeOn, MultimeterService::Capacitance, MultimeterService::Continuity, AbstractCommand::Csv, MultimeterService::DcCurrent, MultimeterService::DcVoltage, DeviceCommand::device, MultimeterService::Diode, DeviceCommand::disconnect(), MultimeterService::Error, AbstractCommand::escapeCsvField(), MultimeterService::ExternalTemperature, AbstractCommand::format, QString::fromLatin1(), QString::fromUtf8(), MultimeterService::Idle, QString::insert(), QString::isNull(), AbstractCommand::Json, MultimeterService::Reading::mode, MultimeterService::Reading::range, MultimeterService::Resistance, samplesToGo, service, showCsvHeader, MultimeterService::Reading::status, MultimeterService::Temperature, AbstractCommand::Text, QJsonDocument::toJson(), QByteArray::toStdString(), MultimeterService::toString(), QObject::tr(), and MultimeterService::Reading::value.
Referenced by settingsWritten().
|
overrideslot |
Processes the relevant options from the command line parser.
This implementation extends DeviceCommand::processOptions to process additional CLI options supported (or required) by this command.
Definition at line 49 of file metercommand.cpp.
References MultimeterService::AcCurrent, MultimeterService::AcVoltage, QList::append(), QString::arg(), MultimeterService::Capacitance, Qt::CaseInsensitive, QString::compare(), MultimeterService::Continuity, MultimeterService::DcCurrent, MultimeterService::DcVoltage, MultimeterService::Diode, QList::isEmpty(), QCommandLineParser::isSet(), DeviceCommand::minCapacitanceRange(), DeviceCommand::minCurrentRange(), minRangeFunc, DeviceCommand::minResistanceRange(), DeviceCommand::minVoltageRange(), MultimeterService::Settings::mode, AbstractCommand::parseNumber(), AbstractCommand::processOptions(), rangeOptionValue, MultimeterService::Resistance, samplesToGo, settings, QString::startsWith(), MultimeterService::Temperature, QObject::tr(), QString::trimmed(), MultimeterService::Settings::updateInterval, and QCommandLineParser::value().
|
overridevirtual |
Returns a list of CLI option names required by this command.
The main console appication may use this list to output an eror (and exit) if any of the returned names are not found in the parsed CLI options.
The (already parsed) parser may be used adjust the returned required options depending on the value of other options. For example, the logger
command only requires the --mode
option if the --command
option is start
.
This base implementation simply returns an empty list. Derived classes should override this function to include any required options.
Reimplemented from AbstractCommand.
Definition at line 27 of file metercommand.cpp.
References AbstractCommand::requiredOptions().
|
overrideprotectedslot |
Handles service detail discovery events.
This override fetches the current device's status, and outputs it in the selected format.
Definition at line 165 of file metercommand.cpp.
References QString::arg(), QString::fromLatin1(), QString::isNull(), minRangeFunc, MultimeterService::Settings::mode, AbstractPokitService::pokitProduct(), MultimeterService::Settings::range, rangeOptionValue, service, DeviceCommand::serviceDetailsDiscovered(), MultimeterService::setSettings(), settings, MultimeterService::toString(), QObject::tr(), and MultimeterService::Settings::updateInterval.
|
privateslot |
Invoked when the multimeter settings have been written, to begin reading the meter values.
Definition at line 193 of file metercommand.cpp.
References QObject::connect(), MultimeterService::enableReadingNotifications(), outputReading(), MultimeterService::readingRead(), service, and QObject::tr().
Referenced by getService().
|
overridevirtual |
Returns a list of CLI option names supported by this command.
The main console appication may use this list to output a warning for any parsed CLI options not included in the returned list.
The (already parsed) parser may be used adjust the returned supported options depending on the value of other options. For example, the logger
command only supported the --timestamp
option if the --command
option is start
.
This base implementation simply returns requiredOptions(). Derived classes should override this function to include optional options, such as:
Reimplemented from AbstractCommand.
Definition at line 34 of file metercommand.cpp.
References AbstractCommand::supportedOptions().
|
friend |
Definition at line 42 of file metercommand.h.
|
inlineprivate |
Pointer to function for converting rangeOptionValue to a Pokit device's range enumerator.
This function pointer is assigned during the command line parsing, but is not invoked until after the device's services are discovere, because prior to that discovery, we don't know which product (Meter vs Pro vs Clamp, etc) we're talking to and thus which enumerator list to be using.
If the current mode does not support ranges (eg diode, and continuity modes), then this member will be nullptr
.
Definition at line 30 of file metercommand.h.
Referenced by processOptions(), and serviceDetailsDiscovered().
|
private |
The parsed value of range option, if one was supplied.
Definition at line 31 of file metercommand.h.
Referenced by processOptions(), and serviceDetailsDiscovered().
|
private |
Number of samples to read, if specified on the CLI.
Definition at line 35 of file metercommand.h.
Referenced by outputReading(), and processOptions().
|
private |
Bluetooth service this command interracts with.
Definition at line 32 of file metercommand.h.
Referenced by getService(), outputReading(), serviceDetailsDiscovered(), and settingsWritten().
|
private |
< Settings for the Pokit device's multimeter mode.
Definition at line 33 of file metercommand.h.
Referenced by processOptions(), and serviceDetailsDiscovered().
|
private |
Whether or not to show a header as the first line of CSV output.
Definition at line 36 of file metercommand.h.
Referenced by outputReading().