LCOV - code coverage report
Current view: top level - src/cli - calibratecommand.cpp (source / functions) Hit Total Coverage
Project: Dokit Lines: 28 40 70.0 %
Version: Functions: 6 15 40.0 %

          Line data    Source code
       1             : // SPDX-FileCopyrightText: 2022-2024 Paul Colby <git@colby.id.au>
       2             : // SPDX-License-Identifier: LGPL-3.0-or-later
       3             : 
       4             : #include "calibratecommand.h"
       5             : 
       6             : #include <qtpokit/calibrationservice.h>
       7             : #include <qtpokit/pokitdevice.h>
       8             : 
       9             : #include <QJsonDocument>
      10             : #include <QJsonObject>
      11             : 
      12             : #include <iostream>
      13             : 
      14             : /*!
      15             :  * \class CalibrateCommand
      16             :  *
      17             :  * The CalibrateCommand class implements the `calibrate` CLI command.
      18             :  */
      19             : 
      20             : /*!
      21             :  * Construct a new CalibrateCommand object with \a parent.
      22             :  */
      23         360 : CalibrateCommand::CalibrateCommand(QObject * const parent) : DeviceCommand(parent)
      24             : {
      25             : 
      26         360 : }
      27             : 
      28         540 : QStringList CalibrateCommand::requiredOptions(const QCommandLineParser &parser) const
      29             : {
      30        1782 :     return DeviceCommand::requiredOptions(parser) + QStringList{
      31             :         QLatin1String("temperature"),
      32        1566 :     };
      33             : }
      34             : 
      35         260 : QStringList CalibrateCommand::supportedOptions(const QCommandLineParser &parser) const
      36             : {
      37         260 :     return DeviceCommand::supportedOptions(parser);
      38             : }
      39             : 
      40             : /*!
      41             :  * \copybrief DeviceCommand::processOptions
      42             :  *
      43             :  * This implementation extends DeviceCommand::processOptions to process additional CLI options
      44             :  * supported (or required) by this command.
      45             :  */
      46         240 : QStringList CalibrateCommand::processOptions(const QCommandLineParser &parser)
      47             : {
      48         240 :     QStringList errors = DeviceCommand::processOptions(parser);
      49         240 :     if (!errors.isEmpty()) {
      50             :         return errors;
      51             :     }
      52             : 
      53         220 :     const QString temperatureString = parser.value(QLatin1String("temperature"));
      54             :     bool ok;
      55         220 :     const float temperatureFloat = temperatureString.toFloat(&ok);
      56         220 :     if (ok) {
      57         160 :         temperature = temperatureFloat;
      58             :     } else {
      59          78 :         errors.append(tr("Unrecognised temperature format: %1").arg(temperatureString));
      60             :     }
      61             :     return errors;
      62         154 : }
      63             : 
      64             : /*!
      65             :  * \copybrief DeviceCommand::getService
      66             :  *
      67             :  * This override returns a pointer to a CalibrationService object.
      68             :  */
      69           0 : AbstractPokitService * CalibrateCommand::getService()
      70             : {
      71             :     Q_ASSERT(device);
      72           0 :     if (!service) {
      73           0 :         service = device->calibration();
      74             :         Q_ASSERT(service);
      75           0 :         connect(service, &CalibrationService::temperatureCalibrated,
      76           0 :                 this, &CalibrateCommand::temperatureCalibrated);
      77             :     }
      78           0 :     return service;
      79             : }
      80             : 
      81             : /*!
      82             :  * \copybrief DeviceCommand::serviceDetailsDiscovered
      83             :  *
      84             :  * This override sets the ambient temperature, via the Calibration service.
      85             :  */
      86           0 : void CalibrateCommand::serviceDetailsDiscovered()
      87             : {
      88             :     Q_ASSERT(service);
      89           0 :     DeviceCommand::serviceDetailsDiscovered(); // Just logs consistently.
      90           0 :     qCInfo(lc).noquote() << tr("Calibrating temperature at %1 degrees celcius...").arg(temperature);
      91           0 :     if (!service->calibrateTemperature(0)) {
      92           0 :         QCoreApplication::exit(EXIT_FAILURE);
      93             :     }
      94           0 : }
      95             : 
      96             : /*!
      97             :  * Handles CalibrationService::temperatureCalibrated events, by outputting the result and exiting.
      98             :  */
      99          60 : void CalibrateCommand::temperatureCalibrated()
     100             : {
     101          60 :     switch (format) {
     102          20 :     case OutputFormat::Csv:
     103          26 :         std::cout << qUtf8Printable(tr("calibration_result\nsuccess\n"));
     104          20 :         break;
     105             :     case OutputFormat::Json:
     106          32 :         std::cout << qUtf8Printable(QLatin1String("true\n"));
     107          20 :         break;
     108          20 :     case OutputFormat::Text:
     109          26 :         std::cout << qUtf8Printable(tr("Done.\n"));
     110          20 :         break;
     111             :     }
     112          60 :     if (device) disconnect(); // Will exit the application once disconnected.
     113          60 : }

Generated by: LCOV version 1.14