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

📄 obj_sbuffer.c

📁 针对华清远见的FS9200(其内核为at91rm9200)的一个测试程序
💻 C
字号:
//*----------------------------------------------------------------------------//*      ATMEL Microcontroller Software Support  -  ROUSSET  -//*----------------------------------------------------------------------------//* The software is delivered "AS IS" without warranty or condition of any//* kind, either express, implied or statutory. This includes without//* limitation any warranty or condition with respect to merchantability or//* fitness for any particular purpose, or against the infringements of//* intellectual property rights of others.//*----------------------------------------------------------------------------//* File Name           : obj_sbuffer.c//* Object              : SimpleBuffer implementation (specialization of SBuffer)//*//* 1.0 23/03/01 	    : HI Creation//* 1.0 20/06/01 	    : ODi Adaptation for DFU//*----------------------------------------------------------------------------#include "lib_debug.h"#include "services\obj_sbuffer.h"#include "services\obj_pipe.h"#ifdef DBG_DRV_BUFFER#include <assert.h>const char *SBufferErrMsg[] = {	"Buffer Success",	"Periph has written more bytes than there is in the buffer",	"Read buffer full",	"Pipe Unknown error"};#endif//*----------------------------------------------------------------------------//* Function Name       : OpenSimpleBuffer()//* Object              ://* Input Parameters    ://* Output Parameters   ://*----------------------------------------------------------------------------AT91PS_Buffer AT91F_OpenSBuffer(	AT91PS_SBuffer pSimpleBuffer){	AT91PS_Buffer pBuffer = &(pSimpleBuffer->parent);#ifdef DBG_DRV_BUFFER	assert(pSimpleBuffer);	assert(pBuffer);#endif	// Init the base class members	pBuffer->pPipe = (AT91PS_Pipe) 0;	// Functions invoked by the pipe	pBuffer->SetRdBuffer    = AT91F_SbSetRdBuffer;	pBuffer->SetWrBuffer    = AT91F_SbSetWrBuffer;	pBuffer->RstRdBuffer    = AT91F_SbRstRdBuffer;	pBuffer->RstWrBuffer    = AT91F_SbRstWrBuffer;	pBuffer->MsgWritten     = AT91F_SbMsgWritten;	pBuffer->MsgRead        = AT91F_SbMsgRead;	// Functions invoked by the peripheral	pBuffer->GetWrBuffer    = AT91F_SbGetWrBuffer;	pBuffer->GetRdBuffer    = AT91F_SbGetRdBuffer;	pBuffer->EmptyWrBuffer  = AT91F_SbEmptyWrBuffer;	pBuffer->FillRdBuffer   = AT91F_SbFillRdBuffer;	pBuffer->pChild         = pSimpleBuffer;	// Init class members	pSimpleBuffer->szRdBuffer = 0;	pSimpleBuffer->szWrBuffer = 0;	pSimpleBuffer->pRdBuffer  = (char *) 0;	pSimpleBuffer->pWrBuffer  = (char const *)0;	return pBuffer;}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SbSetRdBuffer()//* Object              : Prepare a new read buffer//* Input Parameters    ://* Output Parameters   ://*----------------------------------------------------------------------------AT91S_BufferStatus AT91F_SbSetRdBuffer(	AT91PS_Buffer  pBuffer,	char           *pData,	unsigned int   dataSize){	AT91PS_SBuffer pSBuffer = (AT91PS_SBuffer)(pBuffer->pChild);#ifdef DBG_DRV_BUFFER	assert(pSBuffer);#endif	pSBuffer->pRdBuffer  = pData;	pSBuffer->szRdBuffer = dataSize;	return AT91C_BUFFER_SUCCESS;}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SbSetWrBuffer()//* Object              : Prepare a new write buffer//* Input Parameters    ://* Output Parameters   ://*----------------------------------------------------------------------------AT91S_BufferStatus AT91F_SbSetWrBuffer(	AT91PS_Buffer pBuffer,	char const    *pData,	unsigned int  dataSize){	AT91PS_SBuffer pSBuffer = (AT91PS_SBuffer)(pBuffer->pChild);#ifdef DBG_DRV_BUFFER	assert(pSBuffer);#endif	pSBuffer->pWrBuffer  = pData;	pSBuffer->szWrBuffer = dataSize;	return AT91C_BUFFER_SUCCESS;}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SbRstRdBuffer()//* Object              : Empty the read buffer//* Input Parameters    ://* Output Parameters   ://*----------------------------------------------------------------------------AT91S_BufferStatus AT91F_SbRstRdBuffer(	AT91PS_Buffer pBuffer){		AT91PS_SBuffer pSBuffer = (AT91PS_SBuffer)(pBuffer->pChild);	#ifdef DBG_DRV_BUFFER		assert(pSBuffer);	#endif		pSBuffer->pRdBuffer  = 0;		pSBuffer->szRdBuffer = 0;		return AT91C_BUFFER_SUCCESS;}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SbRstWrBuffer()//* Object              : Empty the write buffer//* Input Parameters    ://* Output Parameters   ://*----------------------------------------------------------------------------AT91S_BufferStatus AT91F_SbRstWrBuffer(	AT91PS_Buffer pBuffer){		AT91PS_SBuffer pSBuffer = (AT91PS_SBuffer)(pBuffer->pChild);	#ifdef DBG_DRV_BUFFER		assert(pSBuffer);	#endif		pSBuffer->pWrBuffer = (char *) 0;		pSBuffer->szWrBuffer = 0;		return AT91C_BUFFER_SUCCESS;}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SbMsgWritten()//* Object              : Check that the message has been written//* Input Parameters    ://* Output Parameters   ://*----------------------------------------------------------------------------char AT91F_SbMsgWritten(	AT91PS_Buffer pBuffer,	char const *pMsg){	AT91PS_SBuffer pSBuffer = (AT91PS_SBuffer)(pBuffer->pChild);	#ifdef DBG_DRV_BUFFER		assert(pSBuffer);	#endif	return ( !(pSBuffer->szWrBuffer > 0) );}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SbMsgRead()//* Object              : Check that the message has been read//* Input Parameters    ://* Output Parameters   ://*----------------------------------------------------------------------------char AT91F_SbMsgRead(	AT91PS_Buffer pBuffer,	char const *pMsg){	AT91PS_SBuffer pSBuffer = (AT91PS_SBuffer)(pBuffer->pChild);	#ifdef DBG_DRV_BUFFER		assert(pSBuffer);	#endif	return ( !(pSBuffer->szRdBuffer > 0) );}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SbGetWrBuffer()//* Object              : Check that the message has been read//* Input Parameters    ://* Output Parameters   ://*----------------------------------------------------------------------------AT91S_BufferStatus AT91F_SbGetWrBuffer(	AT91PS_Buffer pBuffer,	char const ** pData,	unsigned int  *pSize){	AT91PS_SBuffer pSBuffer = (AT91PS_SBuffer)(pBuffer->pChild);	#ifdef DBG_DRV_BUFFER		assert(pSBuffer);	#endif	*pData = pSBuffer->pWrBuffer;	*pSize = pSBuffer->szWrBuffer;	return AT91C_BUFFER_SUCCESS;}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SbGetRdBuffer()//* Object              : Check that the message has been read//* Input Parameters    ://* Output Parameters   ://*----------------------------------------------------------------------------AT91S_BufferStatus AT91F_SbGetRdBuffer(	AT91PS_Buffer pBuffer,	char          **pData,	unsigned int  *pSize){	AT91PS_SBuffer pSBuffer = (AT91PS_SBuffer)(pBuffer->pChild);	#ifdef DBG_DRV_BUFFER		assert(pSBuffer);	#endif	*pData = pSBuffer->pRdBuffer;	*pSize = pSBuffer->szRdBuffer;	return AT91C_BUFFER_SUCCESS;}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SbEmptyWrBuffer()//* Object              : A message has been written//* Input Parameters    ://* Output Parameters   ://*----------------------------------------------------------------------------AT91S_BufferStatus AT91F_SbEmptyWrBuffer(	AT91PS_Buffer pBuffer,	unsigned int size){	AT91PS_SBuffer pSBuffer = (AT91PS_SBuffer)(pBuffer->pChild);	AT91PS_Pipe    pPipe;	AT91S_BufferStatus status    = AT91C_BUFFER_SUCCESS;	#ifdef DBG_DRV_BUFFER		assert(pSBuffer);	#endif	// Update data pointer	pSBuffer->pWrBuffer += size;	// Update data counter	if (pSBuffer->szWrBuffer < size) {		pSBuffer->szWrBuffer = 0;		status =  AT91C_BUFFER_UNDERRUN;	}	else {		pSBuffer->szWrBuffer -= size;	}	// Invoke the callback	if (pSBuffer->szWrBuffer == 0) {		pPipe = pBuffer->pPipe;		if (pPipe->WriteCallback)			pPipe->WriteCallback(status, pPipe->pPrivateWriteData);	}	return status;}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SbFillRdBuffer()//* Object              : A message has been read//* Input Parameters    ://* Output Parameters   ://*----------------------------------------------------------------------------AT91S_BufferStatus AT91F_SbFillRdBuffer(	AT91PS_Buffer pBuffer,	unsigned int  size){	AT91PS_SBuffer pSBuffer = (AT91PS_SBuffer)(pBuffer->pChild);	AT91PS_Pipe    pPipe;	AT91S_BufferStatus status = AT91C_BUFFER_SUCCESS;	#ifdef DBG_DRV_BUFFER		assert(pSBuffer);	#endif	// Update data pointer	pSBuffer->pRdBuffer += size;	// Update data counter	if (pSBuffer->szRdBuffer < size) {		pSBuffer->szRdBuffer = 0;		status = AT91C_BUFFER_OVERFLOW;	}	else		pSBuffer->szRdBuffer -= size;	// Invoke the callback	if (pSBuffer->szRdBuffer == 0) {		pPipe = pBuffer->pPipe;		if (pPipe->ReadCallback)			pPipe->ReadCallback(status, pPipe->pPrivateReadData);	}	return status;}//*----------------------------------------------------------------------------//* Function Name       : SbGetRdBuffer()//* Object              : Check that the message has been read//* Input Parameters    ://* Output Parameters   ://*----------------------------------------------------------------------------#ifdef DBG_DRV_BUFFERchar const *AT91F_SbGetError(AT91S_BufferStatus errorNumber){	switch(errorNumber & AT91C_BUFFER_ERROR) {	case AT91C_BUFFER_SUCCESS:  return (SBufferErrMsg[0]);	case AT91C_BUFFER_UNDERRUN: return (SBufferErrMsg[1]);	case AT91C_BUFFER_OVERFLOW: return (SBufferErrMsg[2]);	default:                    return (SBufferErrMsg[3]);	}}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SbIsWrEmpty()//* Object              : Check that the message has been written//* Input Parameters    ://* Output Parameters   ://*----------------------------------------------------------------------------char AT91F_SbIsWrEmpty(	AT91PS_Buffer pBuffer){	AT91PS_SBuffer pSBuffer = (AT91PS_SBuffer)(pBuffer->pPrivateData);	#ifdef DBG_DRV_BUFFER		assert(pSBuffer);	#endif	return ( !(pSBuffer->szWrBuffer > 0) );}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SbIsRdFull()//* Object              : Check that the message has been read//* Input Parameters    ://* Output Parameters   ://*----------------------------------------------------------------------------char AT91F_SbIsRdFull(	AT91PS_Buffer pBuffer){	AT91PS_SBuffer pSBuffer = (AT91PS_SBuffer)(pBuffer->pPrivateData);	#ifdef DBG_DRV_BUFFER		assert(pSBuffer);	#endif	return ( !(pSBuffer->szRdBuffer > 0) );}#endif

⌨️ 快捷键说明

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