// OutputController.h: interface for the COutputController class. // ////////////////////////////////////////////////////////////////////// #pragma once #include #include #include #include "Hardware.h" #include "Card.h" #include "OutputControllerBase.h" #include "DllDefines.h" #include "HardwareCfgFactory.h" class COutputSetting; class IODLLCLASS COutputController : public CCard { public: friend UINT OutputControllerThreadFn(LPVOID pParam); COutputController(); virtual ~COutputController(); BOOL SetVoltage(const COutputSetting& OutputSetting, double dVoltage, double dRange); BOOL Off(const COutputSetting& OutputSetting); BOOL IsOn(const COutputSetting& OutputSetting); BOOL On(const COutputSetting& OutputSetting); BOOL InitController(void); // return the size of gOutputArray int GetSizeofOutputArray(); // make a copy of gOutputArray void CopyOutputStatus(); // void CopyOutputArray(BOOL bOutputArray[]); // check if there is state change in output BOOL IsOutputStateChange(int iOutputNo, BOOL& bOutputState); // BOOL IsOutputStateChange(BOOL bOutputState,int iOutputNo); // allocate array size for output array void InitOutputArray(); // copy of gOutputArray that is used to compare the output state during machine running vs // output state in maintenance mode std::vector m_vecOutputArray; // to keep track output state array size int m_iOutputStateArraySize{ 0 }; CMutex m_OutputMutex; static COutputController* GetInstance(); COutputControllerBase* GetController(int nCardType); void StartUpdateThread(); void TerminateThread(); void StartUpdate(bool bStartUpdate); private: std::array m_outputControllerBase{}; int m_nNoOfCardType{ 0 }; CHardwareCfgFactory m_cfgHardwareFty; std::vector m_vecCard; static COutputController* instance; CWinThread* m_pThread{ nullptr }; CEvt m_evtTerminate; CEvt m_evtStartUpdate{ "OUTPUT CONTROLLER START UPDATE" }; };