123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- /************************************************************************/
- /* Copyright (C), 2016-2020, [Home], 保留所有权利;
- /* 模 块 名:同步串口模块;
- /* 描 述:;
- /*
- /* 版 本:[V];
- /* 作 者:[Home];
- /* 日 期:[12/20/2017];
- /*
- /*
- /* 注 意:;
- /*
- /* 修改记录:[Home];
- /* 修改日期:;
- /* 修改版本:;
- /* 修改内容:;
- /************************************************************************/
- #ifndef __SYN_SERIAL__
- #define __SYN_SERIAL__
- #define BUFFER_LEN 3000
- #include "CritSection.h"
- #pragma once
- #define MAX_PORT_LEN 10
- class CSynSerial
- {
- public:
- CSynSerial(void);
- virtual ~CSynSerial(void);
- private:
- DCB m_dcb;
- HANDLE m_hSerialPort;
- COMMTIMEOUTS m_cts;
- OVERLAPPED m_writeOverlapped;
- OVERLAPPED m_readOverlapped;
- // 串口号(1~255);
- TCHAR m_szSerialPort[MAX_PORT_LEN];
- // 输入缓存大小(byte);
- DWORD m_dwInQueue;
- // 输出缓存大小(byte);
- DWORD m_dwOutQueue;
- std::string m_strbuffer;
- // 当前节点;
- static int s_nCurPos;
- static byte s_byBuffer[BUFFER_LEN];
- static ThreadSection s_csClearBuffer;
- void SwapBuffers(TCHAR *szValue, DWORD dwRealRead);
- public:
- inline BOOL IsOpen() const {
- return (m_hSerialPort == NULL || m_hSerialPort == INVALID_HANDLE_VALUE) ? FALSE : TRUE;
- }
- // 打开串口;
- BOOL OpenSerialPort(
- IN CONST BYTE& byCommPort, // 串口号;
- IN CONST DWORD& dwBaudRate, // 波特率;
- IN CONST BYTE& bySize, // 数据位;
- IN CONST BYTE& byParity, // 校验位;
- IN CONST BYTE& byStopBits, // 停止位;
- IN CONST BYTE& byStartAddr, // 起始地址;
- IN CONST INT& nInterval // 间隔时间;
- );
- // 重装打开串口;
- BOOL ReOpenSerialPort();
- // 关闭串口;
- void CloseSerialPort();
- // 设置串口参数;
- BOOL SetSerialPort(
- IN CONST DWORD& dwBaudRate, // 波特率;
- IN CONST BYTE& byByteSize, // 数据位;
- IN CONST BYTE& byParity, // 校验位;
- IN CONST BYTE& byStopBits, // 停止位;
- IN CONST BYTE& byStartAddr, // 起始地址;
- IN CONST DWORD& dwInQueue, // 输入缓存;
- IN CONST DWORD& dwOutQueue // 输出缓存;
- );
- // 设置dcb参数;
- void SetSerialDCB(IN CONST DCB &dcb);
- // 设置commtimeouts参数;
- void SetSerialCommTimeouts(IN CONST COMMTIMEOUTS &commTimeouts);
- virtual bool WriteComm(IN BYTE *pWirteBuf, IN CONST INT32 nWriteSize);
- virtual DWORD ReadComm(IN BYTE *pReadBuf, IN CONST DWORD& dwReadSize, WORD timeout = 300);
- public:
- HANDLE m_hEvent;
- HANDLE m_hThread;
- void StartThread();
- void EndofThread();
- static DWORD WINAPI ThreadWatch(LPVOID lpVoid);
- bool FindWord(std::string strWord, int nWatchTime = 3000);
- void ClearBuffer() {
- AutoThreadSection aSection(&s_csClearBuffer);
- m_strbuffer.clear();
- };
- };
- #endif // __SYN_SERIAL__
|