📄 ser_rwbuf.c
字号:
/******************************************************
Copyright(c) 版权所有,1998-2003微逻辑。保留所有权利。
******************************************************/
/*****************************************************
文件说明:RW BUF 操作
版本号: 1.0.0
开发时期:2004-05-17
作者: 肖远钢
修改记录:
******************************************************/
//root include
#include <ewindows.h>
//"\inc_local"
#include "ser_rwbuf.h"
/*************** 全局区 定义, 声明 *****************/
#define SER_INTER_LOCK
/******************************************************/
#ifndef CANCEL_XYG_SER_RX
void RWBuf_Init( SER_RWBUF* lpRWBuf )
{
memset( lpRWBuf, 0, sizeof(SER_RWBUF) );
return ;
}
void RWBuf_SetZero( SER_RWBUF* lpRWBuf, DWORD fIsWork )
{
#ifdef SER_INTER_LOCK
InterlockedExchange( &lpRWBuf->fIsWork, fIsWork );
InterlockedExchange( &lpRWBuf->dwCntRW, 0 );
InterlockedExchange( &lpRWBuf->dwReadRW, 0 );
InterlockedExchange( &lpRWBuf->dwWriteRW, 0 );
#else
lpRWBuf->fIsWork = fIsWork;
lpRWBuf->dwCntRW = 0;
lpRWBuf->dwReadRW = 0;
lpRWBuf->dwWriteRW = 0;
#endif
RETAILMSG(1,(TEXT("\r\n xyg_rwbuf_work[%d]\r\n"), fIsWork));
return ;
}
BOOL RWBuf_GetWriteBuf( SER_RWBUF* lpRWBuf, OUT LPBYTE* ppBufWrite, OUT LONG* pdwLen )
{
//获取剩余空间
if( lpRWBuf->dwCntRW==LEN_SERBUF )
{
*pdwLen = 0;
RETAILMSG(1,(TEXT("\r\n xyg_rwbuf_GetWriteBuf: no space!!!!!\r\n")));
return FALSE;
}
*ppBufWrite = lpRWBuf->pBufRW+lpRWBuf->dwWriteRW;
//
if( lpRWBuf->dwWriteRW >= lpRWBuf->dwReadRW )
{
*pdwLen = LEN_SERBUF - lpRWBuf->dwWriteRW;
}
else
{
*pdwLen = lpRWBuf->dwReadRW - lpRWBuf->dwWriteRW;
}
return TRUE;
}
BOOL RWBuf_SetWriteLen( SER_RWBUF* lpRWBuf, LONG dwLen )
{
if( dwLen<=LEN_SERBUF )
{
#ifdef SER_INTER_LOCK
InterlockedExchangeAdd( &lpRWBuf->dwCntRW, dwLen );
#else
lpRWBuf->dwCntRW += dwLen;
#endif
lpRWBuf->dwWriteRW += dwLen;
if( lpRWBuf->dwWriteRW >= LEN_SERBUF )
{
lpRWBuf->dwWriteRW -= LEN_SERBUF;
}
}
return TRUE;
}
LONG RWBuf_ReadBuf( SER_RWBUF* lpRWBuf, OUT LPBYTE pBufRead, LONG dwLen )
{
LPBYTE pBufReadTmp;
LONG dwLenRead;
if( !lpRWBuf->dwCntRW )
{
RETAILMSG(1,(TEXT("\r\n xyg_rwbuf_ReadBuf: no dwCntRW!!!!!\r\n")));
return 0;
}
//
if( lpRWBuf->dwWriteRW <= lpRWBuf->dwReadRW )
{
dwLenRead = LEN_SERBUF - lpRWBuf->dwReadRW;
}
else
{
dwLenRead = lpRWBuf->dwWriteRW - lpRWBuf->dwReadRW;
}
//
if( dwLenRead>dwLen )
{
dwLenRead = dwLen;
}
memcpy( pBufRead, lpRWBuf->pBufRW+lpRWBuf->dwReadRW, dwLenRead );
lpRWBuf->dwReadRW += dwLenRead;
if( lpRWBuf->dwReadRW >= LEN_SERBUF )
{
lpRWBuf->dwReadRW -= LEN_SERBUF;
}
#ifdef SER_INTER_LOCK
InterlockedExchangeAdd( &lpRWBuf->dwCntRW, -dwLenRead );
#else
lpRWBuf->dwCntRW -= dwLenRead;
#endif
return dwLenRead;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -