// // Created by Krad on 2021/10/12. // #ifndef GUI_DEVICEMANAGER_H #define GUI_DEVICEMANAGER_H #include #include #include "DeviceDefs.h" class DmsSyncAction; class DmsAsyncAction; class DeviceManager : public QObject { Q_OBJECT public: static DeviceManager *Default() { static DeviceManager manager; return &manager; } DeviceManager() = default; ~DeviceManager() override { // mCmdSendThread->quit(); // mCmdSendThread->wait(); // mCmdSendThread->deleteLater(); mDmsInfoReceiveThread->quit(); mDmsInfoReceiveThread->wait(); mDmsInfoReceiveThread->deleteLater(); } DeviceManager(const DeviceManager &) = delete; DeviceManager operator=(const DeviceManager &) = delete; /** * init device, include Shimlib and it's error call back, * deviceInfTimer to get temperature of water, and the * preview data caller thread. */ void initDevice(); /** * close and release the device reference resource. */ void close(); /** * Get Firm ware version * @return Firm ware version */ QString getSoftwareVersion(); // void setErrorOccurred(bool v) { // mErrorOccurred = v; // } // bool getErrorOccurred() { // return mErrorOccurred; // } void emitErrorCallback(const char *msg); void emitInfoCallback(const QString& aMessage,const unsigned int aInfoType); bool hasValidEmptyScan(); signals: void raiseGlobalError(QString msg); void raiseGlobalInfo(const QPair& aInfoData); protected: void timerEvent(QTimerEvent *event) override; private: /** * To start a new scan operation * @param json The patient information json string * @param empty Empty scan flag */ void startScan(const QString& json, bool empty = false); void startPreview(); void shutdown(); void createScanReconRecord(const QString& aScanID, const QString& aPatientID, const QString& aReferenceID); //-----------------new DeviceStatus getDeviceStatus(); bool startFullScan(const QString& aPatientInfo); void stopFullScan(); void stopPreviewScan(); void getDeviceTemperature(); void getScanProcess(); void startTransfer(); void initEmptyScanMeasurementID(); void updateReconState(); void processScanProcess(const QString& aProgress); void prepareFinishScan(bool isNormalFinish, const QString& aReason = ""); void processAlarm(const QString& aAlarm); void processPreviewData(const QString& aPreviewData); void processGetSoftwareVersion(const QString& aSoftwareVersion); void processDeviceTemperature(const QString& aResponseTemperature); void processTransferProgress(const QString& aProgress); void insertEmptyScanRecord(); void insertScanRecord(); private slots: //DMS void processReceiveDMSInfoResult(int aServerID, int aActionID, const QString& aContents); //Recon void processReconCreateEmptyScan(bool aResult, const QString& aScanID, const QString& aMessage); void processReconCreateScan(bool aResult, const QString& aScanID, const QString& aMessage); void processReconQueryScanState(const QMap aResult); //GUI void scanTimeout(); signals: //DMS void responseGetDeviceStatus(const QString& aDeviceStatus); void responseGetDeviceTemperature(const QString& aDeviceTemperature); void responseFullScan(const QString& aResponse); void responseGetScanProgress(const QString& aProgrese); void responseStopScan(const QString& aResponse); void responsePreviewScan(const QString& aResponse); void responseGetSoftwareVersion(const QString& aSoftwareVersion); void responseTransfer(const QString& aResponse); //Recon void createEmptyScanToRecon(const QString& aScanID, const QString& aPath); void createScanToRecon(const QString& aScanID, const QString& aPatientID, const QString& aReferenceID, const QString& aPath); void queryScanStatusToRecon(const QStringList& aScanIDs); private: int mTemperatureTimer = -1; int mScanProgressTimer = -1; bool mIsEmptyScan = false; bool mIsTransferEmptyScan = false; bool mIsScanning = false; bool mIsTransfering = false; bool mIsPreviewing = false; QString mCurrentScanMeasurementID = ""; QString mCurrentEmptyMeasurementID = ""; QString mCurrentPatientName = ""; QString mCurrentPatientID = ""; QString mCurrentLaterality = ""; QString mCurrentOperatorName = ""; QString mCurrentTransferMeasurementID = ""; QString mCurrentTransferPatientID = ""; QString mSoftwareVersion = ""; QThread* mDmsInfoReceiveThread = nullptr; QThread* mReconHttpThread = nullptr; DmsSyncAction* mGetDeviceStatusAction = nullptr; DmsSyncAction* mFullScanAction = nullptr; DmsSyncAction* mPreviewScanAction = nullptr; DmsSyncAction* mCEScanAction = nullptr; DmsSyncAction* mStopScanAction = nullptr; DmsSyncAction* mTransferAction = nullptr; DmsAsyncAction* mGetDeviceTemperatureAction = nullptr; DmsAsyncAction* mGetScanProgressAction = nullptr; DmsAsyncAction* mGetSoftwareVersionAction = nullptr; }; #endif //GUI_DEVICEMANAGER_H