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

📄 serial.cpp

📁 ps1开发设计资料
💻 CPP
字号:
////////////////////////////////////
// Base class for SERIAL_COMMUNICATION, nonoverlapped
//
// File : serial.cpp
//
// Author : L. Saint-Marcel
//		    lstmarcel@yahoo.fr
//
// Date : 06/31/01
////////////////////////////////////

#include "stdafx.h"
#include <stdio.h>
#include "serial.h"


///////////////////////////////////////
// serialCL - Constructor, destructor
///////////////////////////////////////
serialCL::serialCL()
{
	CommPortHandle = 0;
}

serialCL::~serialCL()
{

}

//////////////////////////////////
// open
//////////////////////////////////
int serialCL::open(char * gszPort, long speed, int parity, int bitslength, int stopbit)
{

	CommPortTimeOut.ReadIntervalTimeout = 2; 
	CommPortTimeOut.ReadTotalTimeoutMultiplier = 1; 
	CommPortTimeOut.ReadTotalTimeoutConstant = 1; 
	CommPortTimeOut.WriteTotalTimeoutMultiplier = 0; 
	CommPortTimeOut.WriteTotalTimeoutConstant = 0; 

	PortInitSuccessful = 1; 
	strcpy(gszPort_, gszPort);
	// close serial port if already opened
	if(CommPortHandle != 0) close();

    // Code for opening CommPortHandle using CreateFile goes here 
	CommPortHandle = CreateFile( gszPort_, 
                     GENERIC_READ | GENERIC_WRITE, 
                     0, 
                     0, 
                     OPEN_EXISTING, 
                     NULL, 
                     0); 

	if(CommPortHandle == INVALID_HANDLE_VALUE) 
	{  
			//printf("CreateFile ERROR\n");
			PortInitSuccessful = 0; 
			return SERIAL_ERROR;
	} 
	else 
	{  //Code implemented only for a valid handle 
      if(!SetCommTimeouts(CommPortHandle,&CommPortTimeOut)) 
      {  
			//printf("SetCommTimeouts failed"); 
			PortInitSuccessful = 0; 
			return SERIAL_ERROR;
      } 

      // clear the memory used by the CommPortDCB object 
      memset(&CommPortDCB,0,sizeof(CommPortDCB)); 

      // set DCB 
      CommPortDCB.DCBlength =	sizeof(CommPortDCB); 
      CommPortDCB.BaudRate =	speed; 
      CommPortDCB.Parity =		parity; 
      CommPortDCB.StopBits =	stopbit; 
      CommPortDCB.ByteSize =	bitslength; 

      if(!SetCommState(CommPortHandle,&CommPortDCB)) 
      {  
			//printf("SetCommState failed");
			PortInitSuccessful = 0; 
			return SERIAL_ERROR;
      } 
	} 
	return SERIAL_SUCCESS;
}

//////////////////////////////////
// close
//////////////////////////////////
int serialCL::close()
{
	if(CommPortHandle!=0)
		CloseHandle(CommPortHandle);
	CommPortHandle = 0;
	return SERIAL_SUCCESS;
}

//////////////////////////////////
// read
//////////////////////////////////
int serialCL::read(unsigned char * lpBuf, unsigned long &length)
{
	if( !ReadFile(CommPortHandle, lpBuf, length, &BytesTransferred, NULL) ) 
	{
		return SERIAL_ERROR;
	}
	if(BytesTransferred != length) {
		length = BytesTransferred;
		return SERIAL_ERROR;
	}
	length = BytesTransferred;
	return SERIAL_SUCCESS;
}

//////////////////////////////////
// force read
//////////////////////////////////
int serialCL::forceRead(unsigned char * lpBuf, unsigned long &length)
{
	unsigned long l2 = 0;
	while(l2!=length) {
		if( !ReadFile(CommPortHandle, lpBuf+l2, length-l2, &BytesTransferred, NULL) ) 
		{
			return SERIAL_ERROR;
		}	
		l2+=BytesTransferred;
	}
	length = BytesTransferred;
	return SERIAL_SUCCESS;
}

//////////////////////////////////
// write
//////////////////////////////////
int serialCL::write(unsigned char * lpBuf, unsigned long length)
{
	if( !WriteFile(CommPortHandle, lpBuf, length, &BytesTransferred, NULL) )
	{
		return SERIAL_ERROR;
	}
	if(BytesTransferred != length)
		return SERIAL_ERROR;
	return SERIAL_SUCCESS;
}


⌨️ 快捷键说明

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