#pragma once #include "SSignalData.h" #include "STimerThread.h" #include "SWorkThread.h" class AFX_EXT_CLASS CSMemoryInterface : public CSTimerThread, public ISWorkThread2Parent { public: CSMemoryInterface(int nType, ISMemoryInterface2Parent* pISMI2P=NULL, DWORD dwPeriod=50); virtual ~CSMemoryInterface(void); // thread control virtual BOOL StartThread(); virtual void StopThread(); // signal data const LPVOID GetSignalData() const; const BOOL GetSignalData(int nSignalType, int nSignalIndex, BOOL& bValue) const; virtual BOOL ClearSignalData(); virtual BOOL SendSignal(int nSignalType, int nSignalIndex, int nValue); virtual BOOL SendSignal(int nSignalType, int nSignalIndex, int nValue, DWORD dwDelayTime, DWORD dwHoldTime); // memory data LPVOID GetMemoryData(DWORD dwAddress); const LPVOID GetMemoryData(DWORD dwAddress) const; protected: BOOL CreateMemory(DWORD64 dwSize); void DeleteMemory(); LPVOID GetMemoryAddress(DWORD dwAddress); const LPVOID GetMemoryAddress(DWORD dwAddress) const; virtual void TimerThreadProcess(PVOID pParameter); virtual void ISWT2P_ProcessSendSignalData(int nSignalType, int nSignalIndex, int nSignalValue, DWORD dwDelayTime, DWORD dwHoldTime); protected: ISMemoryInterface2Parent* m_pISMI2P; int m_nMemoryType; CSSignalData m_curSignalData; CSSignalData m_prevSignalData; private: BOOL LockMemory(); BOOL UnlockMemory(); DWORD m_dwMemorySize; DWORD m_dwSignalDataSize; CSWorkThread* m_pWorkThread; CSemaphore* m_pSemaPhore; HANDLE m_hAsignedMemory; BYTE* m_pSharedMemory; };