📄 comoperate.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 + -