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 + -
显示快捷键?