ffserial.cpp

来自「button of Xp style,provide some infterfa」· C++ 代码 · 共 259 行

CPP
259 行
字号
// FFSerial.cpp : Defines the initialization routines for the DLL.
//

#include "stdafx.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

////////////////////////////////////////////////////////////////////////////////
CObList	 g_FFSerialObjList;
////////////////////////////////////////////////////////////////////////////////
CFFPortObj *FindPortObjByPort( int nPort );
CFFPortObj *FindPortObjByPort( int nPort )
{
	CFFPortObj *pFFPortObj = NULL;
	POSITION ObjPos;
	
	ObjPos = g_FFSerialObjList.GetHeadPosition();
	
	for( int ii=0; ii<g_FFSerialObjList.GetCount(); ii++)
	{
		pFFPortObj = (CFFPortObj *)g_FFSerialObjList.GetNext(ObjPos);
		
		if( pFFPortObj != NULL && pFFPortObj->GetPortID() == nPort )
		{
			return pFFPortObj;
		}
	}

	return NULL;
}

////////////////////////////////////////////////////////////////////////////////////
BOOL __stdcall	FFPortOpen(int nPort, 
				   int nBaud,
				   int nParity,
				   int nByteSize, 
				   int nStopBits)					//打开端口
{

	CFFPortObj *pFFPortObj = FindPortObjByPort(nPort);
	if( pFFPortObj == NULL )
	{
		pFFPortObj = new CFFPortObj();
		if( g_FFSerialObjList.IsEmpty() )
		{
			g_FFSerialObjList.AddHead((CObject *)pFFPortObj);
		}
		else
		{
			g_FFSerialObjList.AddTail((CObject *)pFFPortObj);
		}
	}
	
	return pFFPortObj->Open( nPort, nBaud, nParity, nByteSize, nStopBits );
	
}

//关闭端口
BOOL __stdcall	FFPortClose(int nPort)							
{
	CFFPortObj *pFFPortObj = FindPortObjByPort(nPort);
	if( pFFPortObj != NULL )
	{
		return pFFPortObj->Close();	
	}
	return FALSE;
}

//读接收缓冲区数据
int	__stdcall	FFPortReadData( int nPort, void *pDataBuf, int nBufSize )			
{
	CFFPortObj *pFFPortObj = FindPortObjByPort(nPort);
	if( pFFPortObj != NULL )
	{
		return pFFPortObj->ReadData( pDataBuf, nBufSize );
	}
	return -1;
}

int	__stdcall	FFPortSendData( int nPort, const char *pDataBuf, int nSendLen )	//发送数据
{
	CFFPortObj *pFFPortObj = FindPortObjByPort(nPort);
	if( pFFPortObj != NULL )
	{
		return  pFFPortObj->SendData( pDataBuf, nSendLen );
	}
	return -1;
}
BOOL __stdcall	FFPortChangeParity( int nPort, int nParity )						//改变奇偶校验
{
	CFFPortObj *pFFPortObj = FindPortObjByPort(nPort);
	if( pFFPortObj != NULL )
	{
		return  pFFPortObj->ChangeParity( nParity );
	}
	return FALSE;
}

int	__stdcall	FFPortGetPortBufDataLen( int nPort, int *pnParityErrCode )			//取串口缓冲区字节长度
{
	CFFPortObj *pFFPortObj = FindPortObjByPort(nPort);
	if( pFFPortObj != NULL )
	{
		return  pFFPortObj->GetPortBufDataLen( pnParityErrCode );
	}
	return -1;
}
BOOL __stdcall	FFPortIsOpened( int nPort )										//查询是否已经打开串口
{
	CFFPortObj *pFFPortObj = FindPortObjByPort(nPort);
	if( pFFPortObj != NULL )
	{
		return  pFFPortObj->IsOpened();
	}
	return FALSE;
}

void __stdcall	FFPortGetLastErrInfo( int nPort, 
							 int& nErrCode,					
							 LPSTR *lpszErrInfo, 
							 int nSize)						//取最后错误信息
{
	CFFPortObj *pFFPortObj = FindPortObjByPort(nPort);
	if( pFFPortObj != NULL )
	{
		pFFPortObj->GetLastErrInfo( nErrCode, lpszErrInfo,nSize );
	}
}

BOOL __stdcall	FFPortSetShareMode( int nPort, BOOL bSharePort )
{
	CFFPortObj *pFFPortObj = FindPortObjByPort(nPort);
	if( pFFPortObj != NULL )
	{
		return pFFPortObj->SetShareMode( bSharePort );
	}
	return FALSE;
}
void __stdcall	FFPortSetAddrMode( int nPort, BOOL bDataFrameAddr )
{
	CFFPortObj *pFFPortObj = FindPortObjByPort(nPort);
	if( pFFPortObj != NULL )
	{
		pFFPortObj->m_bDataFrameAddr = bDataFrameAddr;
	}
}
void __stdcall	FFPortSetAddByteLen( int nPort, int nAddrByteLen )
{
	CFFPortObj *pFFPortObj = FindPortObjByPort(nPort);
	if( pFFPortObj != NULL )
	{
		pFFPortObj->m_nAddrByteLen = nAddrByteLen;
	}
}

BOOL __stdcall	FFPortSendAndWaitReply(int nPort, 
							   const char *pWriteBuf,	//发送缓冲区
							   int nWriteLen,			//发送长度
							   char *pReadBuf,			//接收缓冲区
							   int nReadBufSize,		//接收缓冲区大小
							   int& nReturnDataLen,		//返回数据长度
							   int nMaxWaitFirstByteTime)//最大延时时间

{
	CFFPortObj *pFFPortObj = FindPortObjByPort(nPort);
	if( pFFPortObj != NULL )
	{
		return  pFFPortObj->SendAndWaitReply( pWriteBuf, nWriteLen, pReadBuf, nReadBufSize, 
				nReturnDataLen, nMaxWaitFirstByteTime );
	}
	return FALSE;
}
void __stdcall	FFPortClearRxBuf(int nPort)				//清除接收缓冲区
{
	CFFPortObj *pFFPortObj = FindPortObjByPort(nPort);
	if( pFFPortObj != NULL )
	{
		pFFPortObj->ClearRxBuf();
	}
}
int	__stdcall	FFPortGetRxBufDataLen(int nPort)			//取接收缓冲区数据长度		
{
	CFFPortObj *pFFPortObj = FindPortObjByPort(nPort);
	if( pFFPortObj != NULL )
	{
		return  pFFPortObj->GetRxBufDataLen();
	}
	return -1;
}

void __stdcall	FFPortSetRxBufSize( int nPort, int nSize )
{
	CFFPortObj *pFFPortObj = FindPortObjByPort(nPort);
	if( pFFPortObj != NULL )
	{
		pFFPortObj->SetRxBufSize(nSize);
	}
}
int	__stdcall	FFPortGetRxBufSize(int nPort)
{
	CFFPortObj *pFFPortObj = FindPortObjByPort(nPort);
	if( pFFPortObj != NULL )
	{
		return  pFFPortObj->GetRxBufSize();
	}
	return -1;
}
void __stdcall	FFPortSetByteInterval( int nPort, int nTime )	//设置接收字节间隔
{
	CFFPortObj *pFFPortObj = FindPortObjByPort(nPort);
	if( pFFPortObj != NULL )
	{
		pFFPortObj->SetByteInterval( nTime );
	}
}
int	__stdcall	FFPortGetByteInterval(int nPort)
{
	CFFPortObj *pFFPortObj = FindPortObjByPort(nPort);
	if( pFFPortObj != NULL )
	{
		return  pFFPortObj->GetByteInterval();
	}
	return -1;
}
unsigned char GetCheckSum(unsigned char* pByte,unsigned int nLen)
{
	unsigned char j;
	unsigned int i;
	j=0;
	for(i=0;i<nLen;i++)
	{
		j+=pByte[i];
	}
	return j;
}
unsigned short Char4ToShort(unsigned char* psrcBYTE);
{
	(unsigned char)(psrcBYTE[0]-'0')*1000+(psrcBYTE[1]-'0')*100
		+(psrcBYTE[2]-'0')*10+(psrcBYTE[3]-'0');
}
void FloatToU8(void* pDest,void* pSrc)
{
	unsigned char *p1,*p2;
	p1=(unsigned*)pDest;
	p2=(unsigned*)pSrc;
	p1[0]=p2[3];
	p1[1]=p2[2];

	p1[2]=p2[1];
	p1[3]=p2[0];


}

⌨️ 快捷键说明

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