[vc] com

hCom=::CreateFile(com,
		GENERIC_READ|GENERIC_WRITE, //允许读和写
		0, //独占方式
		NULL,
		OPEN_EXISTING, //打开而不是创建
		0, //同步方式
		NULL);

	if((HANDLE)-1==hCom) {			
		return false;
	}

	SetupComm(hCom,dwInQueue,dwOutQueue); //输入缓冲区和输出缓冲区的大小都是1024
	COMMTIMEOUTS TimeOuts;

	//设定读超时
	// 接收时,两字符间最大的时延
	TimeOuts.ReadIntervalTimeout =10;// MAXDWORD;

	// 读取每字节的超时
	TimeOuts.ReadTotalTimeoutMultiplier = 1;

	// 读串口数据的固定超时
	// 总超时 = ReadTotalTimeoutMultiplier * 字节数 + ReadTotalTimeoutConstant
	TimeOuts.ReadTotalTimeoutConstant =3;

	// 写每字节的超时
	TimeOuts.WriteTotalTimeoutMultiplier = 3;

	// 写串口数据的固定超时
	TimeOuts.WriteTotalTimeoutConstant = 3;

	SetCommTimeouts(hCom,&TimeOuts); //设置超时
	DCB dcb;
	GetCommState(hCom,&dcb);	
	dcb.BaudRate=bt;
	dcb.ByteSize=8; //每个字节有8位
	dcb.Parity=NOPARITY; //无奇偶校验位
	dcb.StopBits=ONESTOPBIT; //1个停止位
	if(!SetCommState(hCom,&dcb))
		return false;
	PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);
	isConnect=true;

COMSTAT ComStat;
	DWORD dwErrorFlags;
	BOOL bWriteStat;
	ClearCommError(hCom,&dwErrorFlags,&ComStat);

	bWriteStat=WriteFile(hCom,buff->data,buff->Length,&buff->Length,NULL);
	if(!bWriteStat)
	{
		ErrorInfo info;
		info.errorCode=-1;
		info.paramter=0;
		info.message="COM write error.";
		OnError(&info);
		return -1;
	}
//	PurgeComm(hCom, PURGE_TXABORT|	PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);

	SendBuffSucess(buff);	
	PurgeComm(hCom, PURGE_TXABORT|PURGE_TXCLEAR);

Buff buff;
	BOOL readFlag;

	COMSTAT ComStat;
	DWORD dwErrorFlags;
	memset(&buff,0,sizeof(Buff));
	ClearCommError(hCom,&dwErrorFlags,&ComStat);

	readFlag=ReadFile(this->hCom,buff.data,sizeof(buff.data),&buff.Length,NULL);
	if(!readFlag) {
		ErrorInfo info;
		info.errorCode=-1;
		info.paramter=0;
		info.message="COM read error.";
		OnError(&info);
		return false;
	}

	if(buff.Length==0){			
		TimerOut();
		return true;
	}

if(hCom)
	{
		ret=CloseHandle(hCom);
		if(ret){			
			hCom=NULL;			
		}
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值