/*! * * Copyright (c) 2019-2020 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 CloudSyncController.h * \author (last) Behrouz NematiPour * \author (original) Behrouz NematiPour * \date (last) 13-Oct-2021 * \date (original) 13-Oct-2021 * */ #pragma once // Qt #include #include #include // Project #include "main.h" // Doxygen : do not remove #include "GuiController.h" // define #define _CloudSyncController CloudSyncController::I() // forward declarations class tst_initializations; // namespace /*! * \brief The CloudSyncController class * \details Singleton class which is the main gateway of CloudSync signal/slots. */ class CloudSyncController : public QObject { Q_OBJECT // Singleton SINGLETON(CloudSyncController) // friends friend class ::tst_initializations; QThread *_thread = nullptr; bool _init = false; const int _interval = 1000; // 1s const QString _location = QString(Storage::SDCard_Base_Path_Name) + "cloudsync/"; const char* _out_File = "out.buf"; // The base file name : CloudSync puts its output to this file const char* _inp_File = "inp.buf"; // The base file name : UI Software puts the input data for the CloudSync in this file QString _date_out_File = ""; // The dated/actual filename : CloudSync puts its output to this file QString _date_inp_File = ""; // The dated/actual filename : UI Software puts the input data for the CloudSync in this file QDateTime _datetime ; qint64 _secSinceEpoch ; QString _dateFormatted ; QString _timeFormatted ; const char* _dateFormat = "yyyy_MM_dd" ; // date used in the file name const char* _timeFormat = "HH:mm:ss.zzz"; // timestamp in the file const char _dateSeparator = '_'; // used in filename const char _separator = ','; quint64 _seq = 0; enum Errors_Enum { eError_OK , eError_Count , eError_Timestamp , eError_Sequence , eError_MessageID , eError_ParamCount , eError_CRC , eError_Parameter , eError_NoHistory , eError_LogFolder , eError_LogFileInp , }; typedef QHash MessageList; MessageList _lastReceivedData ; // sent message history for later send upon request. enum Message_Enum { eMessage_Timestamp , eMessage_Sequence , eMessage_MessageID , eMessage_ParamCount , eMessage_CRC , eMessage_Count , }; typedef QStringList Params; struct Message { qint64 timestamp = 0; quint32 sequence = 0; qint32 id = 0; qint64 paramCount = 0; quint8 crc = 0; Params params { }; }; enum MessageID_Enum { eMessageID_DeviceInfo = 101, // CS asks for device info and UI sends back eMessageID_WriteCredentials = 102, // CS asks to store credential and UI stores/confirms eMessageID_ReadCredentials = 103, // CS asks for credentials and UI reads/sends eMessageID_ResetFactory = 104, // CS asks for factory reset [no UI ack back yet] eMessageID_DeviceState = 201, // CS asks for device state and UI finds the history/sends eMessageID_PatientID = 202, // [No CS req defined] UI sends the patient ID eMessageID_TxReport = 203, // [No CS req defined] UI sends the Tx report eMessageID_DeviceReport = 204, // [No CS req defined] UI sends the device report eMessageID_HeartBeat = 900, // CS sends the periodic Hb and UI can set the interval }; protected: void timerEvent(QTimerEvent *event) override; public slots: bool init(); bool init(QThread &vThread); private slots: void quit(); void onWatchFileChange (const QString &vFile); void onActionReceive (GuiActionType vAction, const QVariantList &vData); private: void initConnections(); void initThread(QThread &vThread); void quitThread(); void checkDate (); bool addCSBuffWatch(); bool sendUIResponse (const QString &vContent); bool sendUIBuff (const QString &vData); bool sendUIHistory (qint32 vAction); bool interpret(const QString &vContent, Message &vMessage); QString toText (Errors_Enum vErrorID); QString toInfo (Errors_Enum vErrorID, const QVariantList &vInfoItems); void toLog (Errors_Enum vErrorID, const QVariantList &vInfoItems); };