#pragma once #include "Configuration.h" #include "HsmsPassive.h" #include "CMaster.h" #include "CGlassPool.h" #include #include enum class ControlState : uint8_t { OfflineEquipment = 0, OfflineAttempt = 1, Online = 2, OfflineHost = 3, OnlineLocal = 4, OnlineRemote = 5, }; class CModel { public: CModel(); ~CModel(); public: IObservable* getObservable(); SERVO::CMaster& getMaster(); void setWorkDir(const char* pszWorkDir); void loadPortParams(); void setPortType(unsigned int index, SERVO::PortType type);; void setPortCassetteType(unsigned int index, SERVO::CassetteType type); void setPortEnable(unsigned int index, BOOL bEnable); int init(); int term(); ControlState getControlState() const noexcept { return m_currentControlState; } void setControlState(ControlState newState); bool raiseSoftAlarm(int alarmId, const std::string& desc = "", int level = -1, int deviceId = 0, int unitId = 0, const char* deviceName = "Software", const char* unitName = "App"); void clearSoftAlarm(int alarmId, int deviceId = 0, int unitId = 0); private: void refreshDerivedSVs(); void notifyControlJobChanged(); public: int notify(int code); int notifyPtr(int code, void* ptr = NULL); int notifyObj(int code, IRxObject* pObj); int notifyObjAndPtr(int code, IRxObject* pObj, void* ptr); int notifyObjAndInt(int code, IRxObject* pObj1, IRxObject* pObj2, int exCode); int notifyInt(int code, int exCode); int notifyInt2(int code, int exCode, int exCode2); int notifyDouble(int code, double dValue); int notifyText(int code, const char* pszText); int notifyPtrAndInt(int code, void* ptr1, void* ptr2, int exCode); int notifyTextAndInt(int code, const char* pszText, int exCode); int notifyMesMsg(int code, int stream, int function, const char* pszText); public: CConfiguration m_configuration; CHsmsPassive m_hsmsPassive; SERVO::CGlassPool m_glassPool; SERVO::CMaster m_master; private: IObservable* m_pObservable; IObservableEmitter* m_pObservableEmitter; CString m_strWorkDir; CString m_strDataDir; private: ControlState m_currentControlState{ ControlState::OfflineEquipment }; };