#pragma once #include "dt.h" #include "IIO.h" #include "CHardware.h" #include <string> #include <memory> #ifdef C_IO_EXPORTS #define C_IO_DLL_API __declspec(dllexport) #else #define C_IO_DLL_API //__declspec(dllimport) #endif class C_IO_DLL_API CIO { public: typedef struct { CIO* pClass; HANDLE hEvent; ns_db::DIGIT_IO_LEVEL level; ULONG lDleay; bool bRestore; } THREAD_CONFIG_STRUCT; private: ns_db::IO_CONFIG_STRUCT m_stIoConfig; bool m_bEnable = false; bool m_bIsInitSuccess = false; HANDLE m_hEvent = NULL; CDigitInput* m_pDi = nullptr; CDigitOutput* m_pDo = nullptr; CDigitInputS* m_pDis = nullptr; CDigitOutputS* m_pDos = nullptr; CAnalogOutput* m_pAo = nullptr; CAnalogInput* m_pAi = nullptr; public: CIO(); LONG Init(ns_db::IO_CONFIG_STRUCT stIoConfig, void* pIO); string GetUtility(); string GetName(); string GetModuleType(); LONG GetIo(ns_db::DIGIT_IO_LEVEL& nOutput); LONG GetIo(short & nOutput); LONG SetIo(ns_db::DIGIT_IO_LEVEL nOutput); LONG SetIo(short nOutput); //����IOΪ�ߵ�ƽ�����lDelay>0ʱ������ʱlDelay������Զ��ָ�Ϊ����ǰ״̬�� //bRestoreʱ�䵽���Ƿ�ָ������lDelay<=0,bRestore������ LONG SetIo2LevelHigh(LONG lDelay,bool bRestore = false); //����IOΪ�ߵ�ƽ�����lDelay>0ʱ������ʱlDelay������Զ��ָ�Ϊ����ǰ״̬�� //bRestoreʱ�䵽���Ƿ�ָ������lDelay<=0,bRestore������ LONG SetIo2LevelLow(LONG lDelay, bool bRestore = false); //�ȴ�����Io�߳���� LONG WaitSetIoThreadDone(); static VOID CALLBACK threadSetIo(PTP_CALLBACK_INSTANCE Instance, PVOID Parameter, PTP_WORK Work); };