亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? obj_sbuffer.c

?? at91rm9200的一級bootloader
?? 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_BUFFER

char 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 + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区2区3区在线看| 亚洲激情成人在线| 日韩一区二区影院| 欧美日韩一区二区三区四区五区 | 国产专区欧美精品| 天天影视涩香欲综合网| 午夜视频一区在线观看| 亚洲成av人片一区二区| 日本伊人色综合网| 免费的成人av| 国产成人免费视| 波多野洁衣一区| 色综合久久综合| 欧美日韩免费高清一区色橹橹| 欧美色老头old∨ideo| 欧美色爱综合网| 欧美电影免费观看高清完整版在线 | 亚洲美女在线一区| 一区二区成人在线观看| 一级中文字幕一区二区| 亚洲一区在线看| 美女视频黄免费的久久| 精品在线播放免费| 成人午夜视频在线| 日本道在线观看一区二区| 欧美日韩国产高清一区二区三区 | 亚洲午夜一区二区三区| 婷婷久久综合九色综合绿巨人| 日本91福利区| 成人激情免费视频| 欧美日韩国产小视频| 337p粉嫩大胆色噜噜噜噜亚洲| 国产精品日韩成人| 日韩在线一区二区| 国产不卡高清在线观看视频| 精品视频在线免费| 精品久久久久久久久久久久久久久| 欧美激情一区二区| 五月婷婷另类国产| 丁香婷婷综合激情五月色| 欧美性生活久久| 国产欧美日韩不卡免费| 亚洲r级在线视频| 91在线一区二区| 久久亚洲精品国产精品紫薇| 亚洲午夜久久久久中文字幕久| 精品亚洲porn| 欧美色综合天天久久综合精品| 国产亚洲成aⅴ人片在线观看 | 欧美日韩精品专区| 久久久久久亚洲综合影院红桃| 亚洲高清免费观看 | 综合自拍亚洲综合图不卡区| 美女久久久精品| 在线一区二区视频| 亚洲国产成人在线| 美女视频网站黄色亚洲| 欧美自拍丝袜亚洲| 国产精品伦一区| 极品尤物av久久免费看| 欧美欧美欧美欧美首页| 一区二区在线观看免费 | 午夜久久电影网| 91免费看片在线观看| 精品日韩在线一区| 亚洲成人av中文| 日本道色综合久久| 亚洲六月丁香色婷婷综合久久 | 久久久久国产精品麻豆ai换脸 | 久久久99精品免费观看不卡| 日韩高清不卡一区二区三区| 欧美视频完全免费看| 亚洲色图色小说| 色8久久精品久久久久久蜜| 国产欧美精品一区aⅴ影院| 韩国一区二区三区| 欧美成人精精品一区二区频| 免费观看一级特黄欧美大片| 日韩一卡二卡三卡四卡| 日韩黄色在线观看| 欧美高清视频一二三区| 午夜欧美一区二区三区在线播放| 欧美日韩精品综合在线| 日韩精品一二三| 日韩欧美中文字幕制服| 麻豆成人91精品二区三区| 精品少妇一区二区三区免费观看| 久久www免费人成看片高清| 精品国产区一区| 国产在线精品免费| 亚洲国产精品高清| 99精品国产视频| 午夜精品爽啪视频| 日韩写真欧美这视频| 国内外成人在线| 亚洲欧美综合网| 欧美久久久久中文字幕| 精品一区二区三区免费毛片爱| 久久久久久久久久看片| 波多野结衣中文一区| 亚洲另类在线制服丝袜| 欧美一区三区四区| 韩国女主播一区二区三区| 国产精品乱子久久久久| 欧美卡1卡2卡| 99在线精品视频| 美女www一区二区| 国产精品久久久久久户外露出| 色婷婷精品久久二区二区蜜臂av | 欧美精品在线一区二区三区| 美女尤物国产一区| 26uuu另类欧美亚洲曰本| 91丨porny丨国产入口| 日韩国产欧美三级| 国产精品天天摸av网| 在线不卡a资源高清| 成人免费精品视频| 日韩av一区二区在线影视| 国产精品天干天干在线综合| 欧美天堂一区二区三区| 国产激情视频一区二区三区欧美| 香蕉成人啪国产精品视频综合网| 亚洲午夜视频在线观看| 久久亚洲综合色一区二区三区| 欧美亚洲高清一区二区三区不卡| 国产永久精品大片wwwapp | 26uuuu精品一区二区| 欧美在线影院一区二区| 国产成a人亚洲| 久久成人免费网站| 亚瑟在线精品视频| 亚洲色图制服丝袜| 亚洲国产精品传媒在线观看| 日韩欧美成人激情| 欧美色图第一页| 欧美最猛黑人xxxxx猛交| 福利一区二区在线观看| 日韩一区精品字幕| 亚洲在线中文字幕| 亚洲欧洲国产日本综合| 国产欧美久久久精品影院| 日韩欧美亚洲另类制服综合在线| 色综合久久精品| 99久久99久久精品免费观看| 国产成人av电影免费在线观看| 国产一区三区三区| 久久精品国产免费| 免费欧美日韩国产三级电影| 日韩av一二三| 天堂在线亚洲视频| 亚洲18女电影在线观看| 亚洲午夜精品久久久久久久久| 一区二区在线观看免费视频播放| 亚洲六月丁香色婷婷综合久久 | 老色鬼精品视频在线观看播放| 丝袜美腿亚洲一区二区图片| 亚洲电影中文字幕在线观看| 亚洲一区二区三区视频在线播放| 亚洲影院在线观看| 一区二区三区欧美日| 亚洲综合一区在线| 亚洲国产中文字幕在线视频综合| 亚洲综合色婷婷| 婷婷综合五月天| 老司机免费视频一区二区| 九色porny丨国产精品| 国产精品亚洲а∨天堂免在线| 国产一区二区三区免费观看| 懂色av一区二区三区免费观看| 9久草视频在线视频精品| av电影一区二区| 欧美高清视频在线高清观看mv色露露十八| 欧美日韩精品三区| 欧美tickling挠脚心丨vk| 日本一区二区不卡视频| 亚洲综合视频在线观看| 丝袜美腿亚洲色图| 国内国产精品久久| 91一区二区三区在线观看| 欧美三级乱人伦电影| 精品免费99久久| 亚洲激情在线播放| 免费看欧美美女黄的网站| 国产1区2区3区精品美女| 欧美性xxxxxxxx| 久久久久久久综合色一本| 亚洲欧美日韩在线| 婷婷中文字幕一区三区| 国产精品一区久久久久| 成人免费高清在线| 欧美日韩在线三级| 久久精品在线观看| 亚洲亚洲人成综合网络| 精品一区二区免费看| 91蜜桃网址入口| 久久久久久久久久久久久女国产乱| 洋洋av久久久久久久一区| 久久国产生活片100| 91浏览器在线视频| 久久婷婷久久一区二区三区|