⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cbcomm.cpp

📁 GPRS moden 编程
💻 CPP
字号:
/*****************************************************************************
 *    GSM SMS Routines
 *
 *    ReWriten by Menghongwen@<menghongwen@smmail.cn>
 *
 *   Dec., 2004 copyright YINHUA Technology, all right reserved
\****************************************************************************/

#include "cbComm.h"


TRS232Comm::TRS232Comm()
{
    hComm = NULL;
}
//---------------------------------------------------------------------------
// 打开串口
// pPort: 串口名称或设备路径,可用"COM1"或"\\.\COM1"两种方式,建议用后者
// nBaudRate: 波特率
// nParity: 奇偶校验
// nByteSize: 数据字节宽度
// nStopBits: 停止位
//---------------------------------------------------------------------------
bool TRS232Comm::OpenComm(const char* pPort, int nBaudRate, int nParity, int nByteSize, int nStopBits)
{
	DCB dcb;		// 串口控制块

	COMMTIMEOUTS timeouts = {	// 串口超时控制参数
		100,			// 读字符间隔超时时间: 100 ms
		2,			// 读操作时每字符的时间: 1 ms (n个字符总共为n ms)
		500,			// 基本的(额外的)读超时时间: 500 ms
		1,			// 写操作时每字符的时间: 1 ms (n个字符总共为n ms)
		100};			// 基本的(额外的)写超时时间: 100 ms

	hComm = CreateFile(pPort,	// 串口名称或设备路径
			GENERIC_READ | GENERIC_WRITE,	// 读写方式
			0,				// 共享方式:独占
			NULL,			// 默认的安全描述符
			OPEN_EXISTING,	// 创建方式
			0,				// 不需设置文件属性
			NULL);			// 不需参照模板文件

	if(hComm == INVALID_HANDLE_VALUE) return false;		// 打开串口失败

	GetCommState(hComm, &dcb);		// 取DCB

	dcb.BaudRate = nBaudRate;
	dcb.ByteSize = nByteSize;
	dcb.Parity = nParity;
	dcb.StopBits = nStopBits;

	SetCommState(hComm, &dcb);		// 设置DCB

	SetupComm(hComm, 4096, __GSMCOMMINBUFFSIZE);	// 设置输入输出缓冲区大小  4090, 1024

	::SetCommTimeouts(hComm, &timeouts);	// 设置超时

	return true;
}

//---------------------------------------------------------------------------
bool TRS232Comm::CloseComm()
{
    if(hComm) return CloseHandle(hComm);
    return false;
}
//---------------------------------------------------------------------------
// 写串口
// pData: 待写的数据缓冲区指针
// nLength: 待写的数据长度
int TRS232Comm::WriteComm(void* pData, int nLength)
{
    DWORD dwNumWrite=0L;
    if(hComm) WriteFile(hComm, pData, (DWORD)nLength, &dwNumWrite, NULL);
    return dwNumWrite;
}
//---------------------------------------------------------------------------
// 读串口
// pData: 待读的数据缓冲区指针
// nLength: 待读的最大数据长度
// 返回: 实际读入的数据长度
int TRS232Comm::ReadComm(void* pData, int nLength)
{
    DWORD dwNumRead = 0L;
    if(hComm) ReadFile(hComm, pData, (DWORD)nLength, &dwNumRead, NULL);
    return (int)dwNumRead;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -