00001 00002 00003 #define WM_COMM_READ (WM_USER +1) 00004 #define BUFF_SIZE 4192 00005 #define QUEUE_SIZE 32 00006 00007 00008 00009 00010 00011 // Communication Class : CCommThread 00012 00013 class CQueue 00014 { 00015 public: 00016 BYTE buff[BUFF_SIZE];// The size fo a queue buffer is 4192. 00017 int m_iHead, m_iTail;// Index variable required for use of queue. 00018 CQueue(); 00019 void Clear();// clear buffer. 00020 int GetSize();// return data size in current buffer. 00021 BOOL PutByte(BYTE b);// put one byte to queue buffer. 00022 BOOL GetByte(BYTE *pb);// Pop one byte from queue buffer. 00023 }; 00024 00025 class CCommThread 00026 { 00027 public: 00028 00029 00030 00031 CCommThread(); 00032 ~CCommThread(); 00033 00034 BOOL check; 00035 HANDLE m_hComm; // handle 00036 CString m_sPortName; // Port name (COM1 ..) 00037 BOOL m_bConnected; // port is opened? 00038 OVERLAPPED m_osRead, m_osWrite; // port file Overlapped structure 00039 HANDLE m_hThreadWatchComm; // Watch function, Thread handle. 00040 WORD m_wPortID; 00041 CQueue m_QueueRead[QUEUE_SIZE]; // Queue buffer. 00042 int m_nRear; 00043 int m_nFront; 00044 00045 int m_nrow_sensor; 00046 int m_ncol_sensor; 00047 00048 BOOL OpenPort(int port, 00049 DWORD dwBaud, BYTE byData, BYTE byStop, BYTE byParity ); 00050 void ClosePort(); 00051 DWORD WriteComm(BYTE *pBuff, DWORD nToWrite); 00052 00053 00054 DWORD ReadComm(BYTE *pBuff, DWORD nToRead); 00055 00056 00057 }; 00058 00059 DWORD ThreadWatchComm(CCommThread* pComm); 00060