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

📄 comoperate.cpp

📁 RS232串口通讯,主要用来设置芯片中的数据.
💻 CPP
字号:
	// ComOperate.cpp: 
	// 
	// 
	// implementation 
	// 
	// 
	// of 
	// 
	// 
	// the 
	// 
	// 
	// CComOperate 
	// 
	// 
	// class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ComOperate.h"

#ifdef _DEBUG
#undef THIS_FILE
static char     THIS_FILE[] = __FILE__;

#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

#define		erOpen_Serial_Fail	-1
#define		erSend_Byte_Fail	-2
#define		erRead_Byte_Fail	-3

char           *cnsErrno2string1[] = {
   "",
   "串口打开失败",
   "串口发送数据失败",
   "串口接收数据失败"
};

 

CComOperate::CComOperate(int icomno)
{
	comno = icomno;
   iStatus = 0;
   	sendcomretry = 2;
	receivenum =2;
	recewaitnum = 0xffff;
	receinnum = 9000;
	 Errno2string = (char **) cnsErrno2string1;
	 mainerrno = 0;
}

CComOperate::~CComOperate()
{

   Port_Res();

}

BOOL            CComOperate::Port_Init()
{

   if (iStatus)
	  return TRUE;

   m_comDev.m_bComId = comno;

   if (m_comDev.OpenConnection())
   {
	  iStatus = 1;
	  return TRUE;
   } else
   {
	  iStatus = 0;
	  mainerrno = erOpen_Serial_Fail;
	  return FALSE;
   }

}

BOOL            CComOperate::Port_Res()
{
   iStatus = 0;
   return m_comDev.CloseConnection();

}

BOOL            CComOperate::bOutmem(char *p, int len)
{
int             i, j;
unsigned long  z ;

   mainerrno = erSend_Byte_Fail;

   for (i = 0; i < len; i++)
   {

	   
	  j = WriteCommBlock(m_comDev, p + i, 1);
	  mainerrno = (FALSE == j) ? erSend_Byte_Fail : 0;
	  for ( z = 0 ; z< 100000;z++);
	  if (mainerrno)
		 return FALSE;
   }

   return TRUE;

}

BOOL            CComOperate::bRecebyte(char *temp)
{

   if (::ReadCommBlock(m_comDev, temp, 1) == 1)
	  return TRUE;
   else
   {
	  mainerrno = erRead_Byte_Fail;
	  return FALSE;
   }

}

BOOL            CComOperate::Rece_codestrm(char *rbuff, int buflen, int *rlen)
{


int             temp_len = 0, statu = 0,re_rece = 0, makerecenum = 0;
   
unsigned long   count = 0;
     

   while (1)
   {

	  switch (statu)
	  {
	  case 0:
		 count = temp_len = makerecenum = 0;
		 
		 
		 do
		 {
			if (TRUE == bRecebyte(rbuff))
			{
			    if (( *rbuff !=SOH) && ( *rbuff !=ENQ) && ( *rbuff !='&'))  		 return FALSE;
				 statu =1 ;
			    temp_len = 1;
				break;
			}

		 }
		 while (count++ < recewaitnum);
		 
		 
		 statu = (count >= recewaitnum)?99:statu;
		
		 break;

	
		 
	  case 1:
		 if (TRUE == bRecebyte(rbuff + temp_len))
		 {
			 	makerecenum = 0 ;
				
				if ( temp_len < buflen )	
					temp_len++;
				else
					temp_len = 0;
		 }
		 else
		
				statu = (++makerecenum >receinnum )?2:1;
			
		  break;

	  case 2:
	 if ((rbuff[temp_len - 1] == rbuff[0]) && (temp_len >= 6 ))
		 {
			*rlen = temp_len;
		
			return TRUE;
		 } else
			return FALSE;
	

	

	  case 99:
		 statu = 0;
		 if (++re_rece >receivenum)
		 {
			re_rece = 0;
			return FALSE;

		 }
		 break;

	  }

   }

}

BOOL            CComOperate::com_ask_answer(int com, char *pParam, int slen,
											  char *ReceiveStr, int rlen)
{
	 char            temp[255];
   BOOL            bTemp;
   int             len;
   long            i = 0, j;
   int		retry =0;

BOOL            result = Port_Init();

   if (!result)		return result ;

   do {


   bOutmem(pParam, strlen(pParam));
   bTemp =  Rece_codestrm(temp, sizeof(temp), &len);
   } while ( ( bTemp ==FALSE ) && ( ++retry<sendcomretry));
   if (bTemp == TRUE)	  memcpy(ReceiveStr, temp, len);

   Port_Res();
   return (bTemp);

  

}

char           *CComOperate::errno2string()
{
   return ((Errno2string[abs(mainerrno)]));
}

⌨️ 快捷键说明

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