/*! * * Copyright (c) 2021-2024 Diality Inc. - All Rights Reserved. * \copyright * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * \file DeviceModels.h * \author (last) Behrouz NematiPour * \date (last) 28-Aug-2023 * \author (original) Behrouz NematiPour * \date (original) 03-Jun-2021 * */ #pragma once // Qt #include // Project #include "MAbstract.h" #include "types.h" #include "DeviceError.h" // forward declarations class tst_models; namespace Model { /*! * \brief The MDeviceRequestBase class * \details The base class of the all devices requests models */ class MDeviceRequestBase { protected: /*! * \brief toString * \details the global toString function for all the request message models * which is mainly used for logging and debugging. * \param vStringPrefix - a prefix string to be inserted after senderID (UI) and parameter values list. * This is comma separated. * \param vParameters - list of parameter values of the model as a comma separated string. * \return QString */ static QString toString (const QString &vStringPrefix, const QVariantList &vParameters) { QString senderID = MAbstract::unitText(MAbstract::Unit_Enum::eUI) + ","; QString mString = QString(senderID + vStringPrefix); for (const auto ¶m : vParameters) mString += QString(",%1").arg(param.toString()); return mString; } virtual QByteArray toByteArray(Device::DeviceError::Scripts_Error_Enum *vError = nullptr) = 0; }; /*! * \brief The MDeviceResponseBase class * \details The base class of the all devices responses models */ class MDeviceResponseBase : public MAbstract { // friends friend class ::tst_models; public: Type_Enum typeText () const override { return Type_Enum::eEvent ; } Unit_Enum unitText () const override { return Unit_Enum::eDV ; } QString infoText () const override { return QString("DeviceBase") ; } struct Data { bool mCompleted= false; /*!< Completed The mComplete is used to ensure the script ran and is complete, since the responses may have been produced to inform the UI only like a progress and the script is not complete unless we are done with the script. */ bool mAccepted = false; /*!< Accepted The result of the script execution for the request it could be sent back multiple times with accepted to false just to inform UI of a intermediary value like progress percentage.*/ quint32 mReason = 0 ; /*!< Reason if the mAccepted is 0 then this includes why it has been rejected with an ID of the rejection reason. */ QString mMessage = "" ; /*!< Message a message that can always be sent from the script. */ void clear() { mCompleted = false; mAccepted = false; mReason = 0; mMessage = ""; } }; MDeviceResponseBase () { } }; // ================================================= MDeviceBrightness /*! * \brief The MDeviceBrightnessRequest class * \details The model for the device brightness value modification request. */ class MDeviceBrightnessRequest : public MDeviceRequestBase { QMap UI2HW = { // the mapping may not be linear so has to be mapped to keep the order { 1, 20}, { 2, 40}, { 3, 60}, { 4, 80}, { 5, 100}, }; public: struct Data { quint8 mBrightness = 5; } _data; QString toString() { return MDeviceRequestBase::toString("DeviceBrightness", { _data.mBrightness }); } QByteArray toByteArray(Device::DeviceError::Scripts_Error_Enum *vError = nullptr) override; }; /*! * \brief The MDeviceBrightnessResponse class * \details The model for the device brightness value request. */ class MDeviceBrightnessResponse : public MDeviceResponseBase { QMap HW2UI = { // the mapping may not linear so has to be mapped to keep the order; { 20, 1}, { 40, 2}, { 60, 3}, { 80, 4}, { 100, 5}, }; public: struct Data : MDeviceResponseBase::Data { quint8 mBrightness = 100; } _data; QVariantList parameters () const override { return { _data.mBrightness } ; } QString infoText () const override { return QString("DeviceBrightness") ; } Data data () const { return _data; } bool fromByteArray(const QByteArray &vByteArray, int *vExitCode = nullptr) override; }; // ================================================= MDeviceBluetoothPaired 'Reset' /*! * \brief The MDeviceBluetoothPairedResetRequest class * \details The model for the bluetooth pared removal script call. */ class MDeviceBluetoothPairedResetRequest : public MDeviceRequestBase { public: struct Data { } _data; QString toString() { return MDeviceRequestBase::toString("DeviceBluetoothPairedReset", { }); } }; /*! * \brief The MDeviceBluetoothPairedResetResponse class * \details The model for the bluetooth pared removal script call returned value / response. */ class MDeviceBluetoothPairedResetResponse : public MDeviceResponseBase { public: struct Data : MDeviceResponseBase::Data { } _data; QVariantList parameters ( ) const override { return { }; } QString infoText ( ) const override { return QString("DeviceBluetoothPairedReset") ; } Data data ( ) const { return _data; } bool fromByteArray(const QByteArray &vByteArray, int *vExitCode = nullptr) override; }; // ================================================= MDeviceBluetoothPaired 'Query' /*! * \brief The MDeviceBluetoothPairedQueryRequest class * \details The model for the bluetooth pared removal script call. */ class MDeviceBluetoothPairedQueryRequest : public MDeviceRequestBase { public: struct Data { } _data; QString toString() { return MDeviceRequestBase::toString("DeviceBluetoothPairedQuery", { }); } }; /*! * \brief The MDeviceBluetoothPairedQueryResponse class * \details The model for the bluetooth pared removal script call returned value / response. */ class MDeviceBluetoothPairedQueryResponse : public MDeviceResponseBase { public: const quint8 LEN_COUNT = 2; const char SEPARATOR = ' '; const char *ZERO = "00:00:00:00:00:00"; enum { eAddr, eName, }; struct Data : MDeviceResponseBase::Data { QString mAddr = ""; // Paired device address QString mName = ""; // Paired device name QStringList mInfo = {}; // combination of the {mAddr, mName} to be used in QML/GUI side. } _data; QVariantList parameters ( ) const override { return { }; } QString infoText ( ) const override { return QString("DeviceBluetoothPairedQuery"); } Data data ( ) const { return _data; } bool fromByteArray(const QByteArray &vByteArray, int *vExitCode = nullptr) override; }; // ================================================= MDeviceCryptSetup /*! * \brief The MDeviceCryptSetupRequest class * \details The model for the CryptSetup script call. */ class MDeviceCryptSetupRequest : public MDeviceRequestBase { public: struct Data { QString mCommand = ""; QString mPassword = ""; } _data; QString toString() { return MDeviceRequestBase::toString("DeviceCryptSetup", { }); } QByteArray toByteArray(Device::DeviceError::Scripts_Error_Enum * = nullptr) override { return ""; } }; /*! * \brief The MDeviceCryptSetupResponse class * \details The model for the CryptSetup script call returned value / response. */ class MDeviceCryptSetupResponse : public MDeviceResponseBase { public: struct Data : MDeviceResponseBase::Data { } _data; QVariantList parameters ( ) const override { return { }; } QString infoText ( ) const override { return QString("DeviceCryptSetup"); } Data data ( ) const { return _data; } bool fromByteArray(const QByteArray &vByteArray, int *vExitCode = nullptr) override; }; // ================================================= MDeviceRootSSHAccess /*! * \brief The MDeviceRootSSHAccessRequest class * \details The model for the device RootSSHAccess value modification request. */ class MDeviceRootSSHAccessRequest : public MDeviceRequestBase { public: struct Data { Qt::CheckState mRootSSHAccess = Qt::Unchecked; bool mIsGet = true ; } _data; QString toString() { return MDeviceRequestBase::toString("RootSSHAccess", { _data.mIsGet?"q":"r", _data.mRootSSHAccess } ); } QByteArray toByteArray(Device::DeviceError::Scripts_Error_Enum * = nullptr) override { return ""; } }; /*! * \brief The MDeviceRootSSHAccessResponse class * \details The model for the device RootSSHAccess value request. */ class MDeviceRootSSHAccessResponse : public MDeviceResponseBase { public: struct Data : MDeviceResponseBase::Data { Qt::CheckState mRootSSHAccess = Qt::Unchecked; } _data; QVariantList parameters () const override { return { _data.mRootSSHAccess }; } QString infoText () const override { return QString("RootSSHAccess"); } Data data () const { return _data; } }; // ================================================= MDeviceFactoryReset /*! * \brief The MDeviceFactoryResetRequest class * \details The model for the factory reset script call. */ class MDeviceFactoryResetRequest : public MDeviceRequestBase { public: struct Data { } _data; QString toString() { return MDeviceRequestBase::toString("FactoryReset", { }); } QByteArray toByteArray(Device::DeviceError::Scripts_Error_Enum * = nullptr) override { return ""; } }; /*! * \brief The MDeviceFactoryResetResponse class * \details The model for the factory reset script call returned value / response. */ class MDeviceFactoryResetResponse : public MDeviceResponseBase { public: struct Data : MDeviceResponseBase::Data { } _data; QVariantList parameters ( ) const override { return { }; } QString infoText ( ) const override { return QString("DeviceFactoryReset"); } Data data ( ) const { return _data; } bool fromByteArray(const QByteArray &vByteArray, int *vExitCode = nullptr) override; }; // ================================================= MDeviceDecommission /*! * \brief The MDeviceDecommissionRequest class * \details The model for the decommission script call. */ class MDeviceDecommissionRequest : public MDeviceRequestBase { public: struct Data { QString mPassword = ""; } _data; QString toString() { return MDeviceRequestBase::toString("Decommission", { }); } QByteArray toByteArray(Device::DeviceError::Scripts_Error_Enum * = nullptr) override { return ""; } }; /*! * \brief The MDeviceDecommissionResponse class * \details The model for the decommission script call returned value / response. */ class MDeviceDecommissionResponse : public MDeviceResponseBase { public: struct Data : MDeviceResponseBase::Data { } _data; QVariantList parameters ( ) const override { return { }; } QString infoText ( ) const override { return QString("DeviceDecommission"); } Data data ( ) const { return _data; } bool fromByteArray(const QByteArray &vByteArray, int *vExitCode = nullptr) override; }; // ================================================= MDeviceUSBMount /*! * \brief The MDeviceUSBMountRequest class * \details The model for the usb unmount/mount script call. */ class MDeviceUSBMountRequest : public MDeviceRequestBase { public: struct Data { bool isMountRequest = true; QString usbDevice = "" ; } _data; QString toString() { return MDeviceRequestBase::toString("UsbMount", { _data.usbDevice, _data.isMountRequest }); } QByteArray toByteArray(Device::DeviceError::Scripts_Error_Enum * = nullptr) override { return ""; } }; /*! * \brief The MDeviceUSBMountResponse class * \details The model for the usb mount/unmount script call returned value / response. */ class MDeviceUSBMountResponse : public MDeviceResponseBase { public: struct Data : MDeviceResponseBase::Data { } _data; QVariantList parameters ( ) const override { return { }; } QString infoText ( ) const override { return QString("DeviceUsbMount"); } Data data ( ) const { return _data; } bool fromByteArray(const QByteArray &vByteArray, int *vExitCode = nullptr) override; }; // ================================================= MDeviceWifiList /*! * \brief The MDeviceMDeviceWifiListRequest class * \details The model for the Wifi List script call. */ class MDeviceWifiListRequest : public MDeviceRequestBase { public: struct Data { } _data; QString toString() { return MDeviceRequestBase::toString("WifiList", {}); } QByteArray toByteArray(Device::DeviceError::Scripts_Error_Enum * = nullptr) override { return ""; } }; /*! * \brief The MDeviceWifiListResponse class * \details The model for the Wifi List script call returned value / response. */ class MDeviceWifiListResponse : public MDeviceResponseBase { public: struct Data : MDeviceResponseBase::Data { QString mWifiList = ""; } _data; QVariantList parameters ( ) const override { return { }; } QString infoText ( ) const override { return QString("WifiList"); } Data data ( ) const { return _data; } bool fromByteArray(const QByteArray &vByteArray, int *vExitCode = nullptr) override; }; // ================================================= MDeviceWifiInfo /*! * \brief The MDeviceWifiInfoRequest class * \details The model for the Wifi Info script call. */ class MDeviceWifiInfoRequest : public MDeviceRequestBase { public: struct Data { } _data; QString toString() { return MDeviceRequestBase::toString("WifiInfo", {}); } QByteArray toByteArray(Device::DeviceError::Scripts_Error_Enum * = nullptr) override { return ""; } }; /*! * \brief The MDeviceWifiInfoResponse class * \details The model for the Wifi Info script call returned value / response. */ class MDeviceWifiInfoResponse : public MDeviceResponseBase { public: struct Data : MDeviceResponseBase::Data { QString mWifiInfo = ""; } _data; QVariantList parameters ( ) const override { return { }; } QString infoText ( ) const override { return QString("WifiInfo"); } Data data ( ) const { return _data; } bool fromByteArray(const QByteArray &vByteArray, int *vExitCode = nullptr) override; }; // ================================================= MDeviceWifiConnect /*! * \brief The MDeviceWifiConnectRequest class * \details The model for the Wifi connnect/disconnect script call. */ class MDeviceWifiConnectRequest : public MDeviceRequestBase { public: struct Data { bool mConnect = true; // set true = connect/ false = disconnect QString mSsid = "" ; QString mPassword = "" ; } _data; QString toString() { return MDeviceRequestBase::toString("WifiConnect", { _data.mConnect, _data.mSsid, _data.mPassword }); } QByteArray toByteArray(Device::DeviceError::Scripts_Error_Enum * = nullptr) override { return ""; } }; /*! * \brief The MDeviceWifiConnectResponse class * \details The model for the Wifi connect/disconnect script call returned value / response. */ class MDeviceWifiConnectResponse : public MDeviceResponseBase { public: struct Data : MDeviceResponseBase::Data { bool mConnect = false; } _data; QVariantList parameters ( ) const override { return { }; } QString infoText ( ) const override { return QString("WifiConnect"); } Data data ( ) const { return _data; } bool fromByteArray(const QByteArray &vByteArray, int *vExitCode = nullptr) override; }; } typedef Model::MDeviceResponseBase ::Data DeviceResponseBaseData; typedef Model::MDeviceBrightnessRequest ::Data DeviceBrightnessRequestData ; typedef Model::MDeviceBrightnessResponse ::Data DeviceBrightnessResponseData; typedef Model::MDeviceBluetoothPairedResetRequest ::Data DeviceBluetoothPairedResetRequestData ; typedef Model::MDeviceBluetoothPairedResetResponse ::Data DeviceBluetoothPairedResetResponseData; typedef Model::MDeviceBluetoothPairedQueryRequest ::Data DeviceBluetoothPairedQueryRequestData ; typedef Model::MDeviceBluetoothPairedQueryResponse ::Data DeviceBluetoothPairedQueryResponseData; typedef Model::MDeviceCryptSetupRequest ::Data DeviceCryptSetupRequestData ; typedef Model::MDeviceCryptSetupResponse ::Data DeviceCryptSetupResponseData; typedef Model::MDeviceRootSSHAccessRequest ::Data DeviceRootSSHAccessRequestData ; typedef Model::MDeviceRootSSHAccessResponse ::Data DeviceRootSSHAccessResponseData; typedef Model::MDeviceFactoryResetRequest ::Data DeviceFactoryResetRequestData ; typedef Model::MDeviceFactoryResetResponse ::Data DeviceFactoryResetResponseData; typedef Model::MDeviceDecommissionRequest ::Data DeviceDecommissionRequestData ; typedef Model::MDeviceDecommissionResponse ::Data DeviceDecommissionResponseData; typedef Model::MDeviceUSBMountRequest ::Data DeviceUSBMountRequestData ; typedef Model::MDeviceUSBMountResponse ::Data DeviceUSBMountResponseData; typedef Model::MDeviceWifiListRequest ::Data DeviceWifiListRequestData ; typedef Model::MDeviceWifiListResponse ::Data DeviceWifiListResponseData; typedef Model::MDeviceWifiInfoRequest ::Data DeviceWifiInfoRequestData ; typedef Model::MDeviceWifiInfoResponse ::Data DeviceWifiInfoResponseData; typedef Model::MDeviceWifiConnectRequest ::Data DeviceWifiConnectRequestData ; typedef Model::MDeviceWifiConnectResponse ::Data DeviceWifiConnectResponseData;