www.pudn.com > GPRS__moder.rar > cbComm.cpp


/***************************************************************************** 
 *    GSM SMS Routines 
 * 
 *    ReWriten by Menghongwen@ 
 * 
 *   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; 
} 
//---------------------------------------------------------------------------