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

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

?? obj_pipe.c

?? 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           : DfuPipe.c
//* Object              : Application pipe interface
//*
//* 1.0 23/03/01 	    : HI Creation
//* 1.0 20/06/01 	    : ODi Review for DFU
//*----------------------------------------------------------------------------
#include "lib_debug.h"
#include "services/obj_pipe.h"

#ifdef DBG_DRV_PIPE
#include <assert.h>

const char *PipeErrMsg[] = {
	"Pipe Success",
	"Pipe Open failed",
	"Pipe Write failed",
	"Pipe Read failed",
	"Pipe Abort failed",
	"Pipe Reset failed",
	"Pipe Unknown error"
};

char const *AT91F_PipeGetError(AT91S_PipeStatus msgId)
{
	switch (msgId & AT91C_PIPE_ERROR) {
	case AT91C_PIPE_SUCCESS:      return (PipeErrMsg[0]);
	case AT91C_PIPE_OPEN_FAILED:  return (PipeErrMsg[1]);
	case AT91C_PIPE_WRITE_FAILED: return (PipeErrMsg[2]);
	case AT91C_PIPE_READ_FAILED:  return (PipeErrMsg[3]);
	case AT91C_PIPE_ABORT_FAILED: return (PipeErrMsg[4]);
	case AT91C_PIPE_RESET_FAILED: return (PipeErrMsg[5]);
	default:                      return (PipeErrMsg[6]);
	}
}
#endif

//*----------------------------------------------------------------------------
//* Function Name       : AT91F_PipeOpen()
//* Object              :
//* Input Parameters    :
//* Output Parameters   :
//*----------------------------------------------------------------------------
AT91PS_Pipe AT91F_OpenPipe(
	AT91PS_Pipe    pPipe,
	AT91PS_SvcComm pSvcComm,
	AT91PS_Buffer  pBuffer)
{
	AT91S_BufferStatus status;
#ifdef DBG_DRV_PIPE
	assert(pBuffer);
	assert(pSvcComm);
	assert(pBuffer->RstRdBuffer);
	assert(pBuffer->RstWrBuffer);
#endif

	// Init pipe members
	pPipe->pSvcComm   = pSvcComm;
	pPipe->pBuffer    = pBuffer;
	// Init the API with default functions
	pPipe->Write      = AT91F_PipeWrite;
	pPipe->Read       = AT91F_PipeRead;
	pPipe->AbortWrite = AT91F_PipeAbortWrite;
	pPipe->AbortRead  = AT91F_PipeAbortRead;
	pPipe->Reset      = AT91F_PipeReset;
	pPipe->IsWritten  = AT91F_PipeMsgWritten;
	pPipe->IsReceived = AT91F_PipeMsgReceived;

	pPipe->WriteCallback = (AT91PF_PipeWriteCallBack) 0;
	pPipe->ReadCallback  = (AT91PF_PipeReadCallBack) 0;
	pPipe->pPrivateReadData  = (void *) 0;
	pPipe->pPrivateWriteData = (void *) 0;

	// Update pSvcComm fields
	pSvcComm->pBuffer = pBuffer;

	// Init pBuffer members
	pBuffer->pPipe = pPipe;
	// Reset the read and write buffer
	pBuffer->RstRdBuffer(pBuffer);
	if ( status ) return ((AT91PS_Pipe) 0);
	status = pBuffer->RstWrBuffer(pBuffer);
	if ( status ) return ((AT91PS_Pipe) 0);

	return pPipe;
}


//*----------------------------------------------------------------------------
//* Function Name       : AT91F_PipeWrite()
//* Object              :
//* Input Parameters    :
//* Output Parameters   :
//*----------------------------------------------------------------------------
AT91S_PipeStatus AT91F_PipeWrite(
	AT91PS_Pipe pPipe,
	char const *pVoid,
	unsigned int size,
	AT91PF_PipeReadCallBack callback,
	void *privateData)
{
	AT91PS_SvcComm   pSvcComm = pPipe->pSvcComm;
	AT91PS_Buffer    pBuffer  = pPipe->pBuffer;
	AT91S_PipeStatus status   = AT91C_PIPE_SUCCESS;

#ifdef DBG_DRV_PIPE
	assert(pBuffer);
	assert(pBuffer->SetWrBuffer);
	assert(pSvcComm);
	assert(pSvcComm->TxReady);
#endif

	// Initialize callback
	pPipe->pPrivateWriteData = privateData;
	pPipe->WriteCallback     = callback;

	// Check the periph is ready to accept transfer
	if ( !(pSvcComm->TxReady(pSvcComm)) )
		return (AT91C_PIPE_WRITE_FAILED);

	// Initialize the buffer
	status = pBuffer->SetWrBuffer(pBuffer, pVoid, size);
	if ( status )
		return (AT91C_PIPE_WRITE_FAILED | status);

	// Initialize the peripheral
	if ( pSvcComm->StartTx ) {
		status = pSvcComm->StartTx(pSvcComm);
		if ( status )
			return (AT91C_PIPE_WRITE_FAILED | status);
	}

	return AT91C_PIPE_SUCCESS;
}

//*----------------------------------------------------------------------------
//* Function Name       : AT91F_PipeRead()
//* Object              :
//* Input Parameters    :
//* Output Parameters   :
//*----------------------------------------------------------------------------
AT91S_PipeStatus AT91F_PipeRead(
	AT91PS_Pipe        pPipe,
	char               *pVoid,
	unsigned int       size,
	AT91PF_PipeReadCallBack callback,
	void *privateData)
{
	AT91PS_SvcComm pSvcComm = pPipe->pSvcComm;
	AT91PS_Buffer  pBuffer  = pPipe->pBuffer;
	AT91S_PipeStatus status = AT91C_PIPE_SUCCESS;

#ifdef DBG_DRV_PIPE
	assert(pBuffer);
	assert(pBuffer->SetRdBuffer);
	assert(pSvcComm);
#endif

	// Initialize the callback
	pPipe->pPrivateReadData = privateData;
	pPipe->ReadCallback    = callback;

	// Initialize the buffer
	status = pBuffer->SetRdBuffer(pBuffer, pVoid, size);
	if ( status )
		return (AT91C_PIPE_READ_FAILED | status);

	// Initialize the peripheral
	if ( pSvcComm->StartRx) {
		status = pSvcComm->StartRx(pSvcComm);
		if ( status )
			return (AT91C_PIPE_READ_FAILED | status);
	}


	return AT91C_PIPE_SUCCESS;
}

//*----------------------------------------------------------------------------
//* Function Name       : AT91F_PipeAbortWrite()
//* Object              :
//* Input Parameters    :
//* Output Parameters   :
//*----------------------------------------------------------------------------
AT91S_PipeStatus AT91F_PipeAbortWrite(
	AT91PS_Pipe pPipe)
{
	AT91PS_SvcComm pSvcComm = pPipe->pSvcComm;
	AT91PS_Buffer  pBuffer  = pPipe->pBuffer;
	AT91S_PipeStatus status = AT91C_PIPE_SUCCESS;

#ifdef DBG_DRV_PIPE
	assert(pBuffer);
	assert(pBuffer->RstWrBuffer);
	assert(pSvcComm);
#endif

	// Reset the write Buffer
	status = pBuffer->RstWrBuffer(pBuffer);
	if ( status )
		return (AT91C_PIPE_ABORT_FAILED | status);

	// Reset the peripheral
	if ( pSvcComm->StopTx) {
		status = pSvcComm->StopTx(pSvcComm);
		if ( !status )
			return (AT91C_PIPE_ABORT_FAILED | status);
	}

	// Invoke the callback
	if (pPipe->WriteCallback)
		pPipe->WriteCallback(AT91C_PIPE_WRITE_ABORTED, pPipe->pPrivateWriteData);

	return AT91C_PIPE_SUCCESS;
}

//*----------------------------------------------------------------------------
//* Function Name       : AT91F_PipeAbortRead()
//* Object              :
//* Input Parameters    :
//* Output Parameters   :
//*----------------------------------------------------------------------------
AT91S_PipeStatus AT91F_PipeAbortRead(
	AT91PS_Pipe pPipe)
{
	AT91PS_SvcComm pSvcComm = pPipe->pSvcComm;
	AT91PS_Buffer  pBuffer  = pPipe->pBuffer;
	AT91S_PipeStatus status = AT91C_PIPE_SUCCESS;

#ifdef DBG_DRV_PIPE
	assert(pBuffer);
	assert(pBuffer->RstRdBuffer);
	assert(pSvcComm);
#endif

	// Reset the read Buffer
	status = pBuffer->RstRdBuffer(pBuffer);
	if ( status )
		return (AT91C_PIPE_ABORT_FAILED | status);

	// Reset the peripheral
	if ( pSvcComm->StopRx) {
		status = pSvcComm->StopRx(pSvcComm);
		if ( status )
			return (AT91C_PIPE_ABORT_FAILED | status);
	}

	// Invoke the callback
	if (pPipe->ReadCallback)
		pPipe->ReadCallback(AT91C_PIPE_READ_ABORTED, pPipe->pPrivateReadData);

	return AT91C_PIPE_SUCCESS;
}

//*----------------------------------------------------------------------------
//* Function Name       : AT91F_PipeReset()
//* Object              :
//* Input Parameters    :
//* Output Parameters   :
//*----------------------------------------------------------------------------
AT91S_PipeStatus AT91F_PipeReset(
	AT91PS_Pipe pPipe)
{
	AT91PS_SvcComm pSvcComm = pPipe->pSvcComm;
	AT91PS_Buffer  pBuffer  = pPipe->pBuffer;
	AT91S_PipeStatus status = AT91C_PIPE_SUCCESS;

#ifdef DBG_DRV_PIPE
	assert(pBuffer);
	assert(pSvcComm);
#endif

	// Reset the read and write buffer
	if ( pBuffer->RstRdBuffer) {
	     status = pBuffer->RstRdBuffer(pBuffer);
	     if ( status )
			return (AT91C_PIPE_RESET_FAILED | status);
	}
	if ( pBuffer->RstWrBuffer) {
		status = pBuffer->RstWrBuffer(pBuffer);
		if ( status )
			return (AT91C_PIPE_RESET_FAILED | status);
	}

	// Reset the peripheral
	if ( pSvcComm->Reset) {
		status = pSvcComm->Reset(pSvcComm);
		if ( status )
			return (AT91C_PIPE_RESET_FAILED | status);
	}

	return AT91C_PIPE_SUCCESS;
}

//*----------------------------------------------------------------------------
//* Function Name       : AT91F_PipeMsgWritten()
//* Object              :
//* Input Parameters    :
//* Output Parameters   :
//*----------------------------------------------------------------------------
char AT91F_PipeMsgWritten(
	AT91PS_Pipe pPipe,
	char const *pVoid)
{
	AT91PS_Buffer  pBuffer  = pPipe->pBuffer;
	return (pBuffer->MsgWritten(pBuffer, pVoid));

}

//*----------------------------------------------------------------------------
//* Function Name       : AT91F_PipeMsgReceived()
//* Object              :
//* Input Parameters    :
//* Output Parameters   :
//*----------------------------------------------------------------------------
char AT91F_PipeMsgReceived(
	AT91PS_Pipe pPipe,
	char const  *pVoid)
{
	AT91PS_Buffer  pBuffer  = pPipe->pBuffer;
	return (pBuffer->MsgRead(pBuffer, pVoid));
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲精品aa| 久久99国产精品久久99| 日韩综合在线视频| 国产成人av一区二区三区在线| 色婷婷精品久久二区二区蜜臂av| 日韩欧美一区在线观看| 亚洲三级电影网站| 国内精品伊人久久久久av一坑| 欧美日韩一区二区在线视频| 国产精品三级电影| 韩国中文字幕2020精品| 欧美日韩亚洲综合在线| 136国产福利精品导航| 国产资源在线一区| 日韩一区二区在线看| 亚洲人成网站色在线观看| 国产精品12区| 日韩一区二区三区免费看 | 国产传媒日韩欧美成人| 欧美精品在线一区二区三区| 亚洲欧美日韩国产综合| 国产成人免费网站| 久久久综合九色合综国产精品| 男女男精品网站| 欧美日韩国产高清一区二区| 在线一区二区三区四区| a级高清视频欧美日韩| 亚洲色欲色欲www| 国产欧美日韩三区| 欧美日本韩国一区二区三区视频| 久久se精品一区精品二区| 亚洲免费伊人电影| 日韩三区在线观看| 精品国产欧美一区二区| 色婷婷综合在线| 1区2区3区精品视频| 国产一区二区按摩在线观看| 精品日韩一区二区三区免费视频| 日精品一区二区三区| 欧美三级在线看| 丝袜美腿亚洲综合| 777欧美精品| 久久国产精品第一页| 日韩欧美不卡一区| 国产v综合v亚洲欧| 中文字幕一区二区三区不卡 | 亚洲成在人线免费| 在线观看91精品国产麻豆| 丝袜亚洲另类丝袜在线| 日韩欧美国产系列| 国产福利一区在线| 亚洲日本在线a| 欧美欧美欧美欧美首页| 久久成人18免费观看| 久久精品免费在线观看| 97久久人人超碰| 偷偷要91色婷婷| 久久久午夜电影| 一本一道综合狠狠老| 亚洲福利一二三区| 精品国产123| 97精品国产露脸对白| 日韩精品免费视频人成| 国产欧美一区二区三区网站| 91视频观看免费| 天堂蜜桃一区二区三区| 精品国产伦一区二区三区观看方式| 丁香天五香天堂综合| 亚洲一区二区欧美日韩| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 久久综合久久99| 色综合久久99| 国产真实精品久久二三区| 1000精品久久久久久久久| 欧美高清视频不卡网| 成人性生交大片免费看中文| 日韩激情一二三区| 国产精品国产精品国产专区不片| 欧美日韩亚洲国产综合| 国产成人在线网站| 爽好久久久欧美精品| 国产精品污污网站在线观看| 日韩午夜激情免费电影| 91免费观看视频| 韩国av一区二区三区四区| 亚洲一区二区av电影| 国产欧美日韩综合| 日韩精品一区二区三区视频播放| 色呦呦一区二区三区| 丰满白嫩尤物一区二区| 免费在线看一区| 亚洲图片欧美视频| 亚洲欧美自拍偷拍色图| 久久毛片高清国产| 欧美大片在线观看| 欧美亚洲国产一卡| 99国产精品99久久久久久| 国产麻豆视频一区| 久久国产人妖系列| 视频一区欧美精品| 亚洲一区在线看| √…a在线天堂一区| 国产精品美女一区二区| 欧美sm美女调教| 欧美一区二区三区白人| 欧美日韩精品综合在线| 欧美综合天天夜夜久久| proumb性欧美在线观看| 国产sm精品调教视频网站| 韩国中文字幕2020精品| 韩国一区二区视频| 精油按摩中文字幕久久| 久久国产免费看| 国模一区二区三区白浆| 狠狠色丁香久久婷婷综合丁香| 美女www一区二区| 青青青伊人色综合久久| 免费人成精品欧美精品| 久久国产剧场电影| 国产一区二区三区最好精华液| 国产一区二区在线免费观看| 国产一区二区美女诱惑| 国产一二精品视频| 成人精品视频网站| 成人午夜电影网站| 99精品久久免费看蜜臀剧情介绍| 一本色道久久综合狠狠躁的推荐 | 欧美三级蜜桃2在线观看| 欧美性淫爽ww久久久久无| 欧美三级欧美一级| 欧美一区二区国产| 久久久久9999亚洲精品| 国产精品久久久久久久久免费樱桃| 国产精品成人在线观看| 一区二区三区自拍| 首页国产欧美久久| 国产精品一区二区三区四区| 成人黄色大片在线观看| 欧美私模裸体表演在线观看| 欧美亚洲日本一区| 欧美第一区第二区| 国产精品毛片久久久久久久| 亚洲精品欧美激情| 奇米色一区二区| 不卡av在线免费观看| 欧美日韩高清一区二区三区| 2024国产精品视频| 亚洲男人天堂一区| 久久国产人妖系列| 色呦呦网站一区| 精品人在线二区三区| 亚洲欧美日韩国产成人精品影院 | 99久久精品99国产精品 | 91久久香蕉国产日韩欧美9色| 在线成人av网站| 久久久99精品免费观看| 亚洲中国最大av网站| 国产乱色国产精品免费视频| 在线观看视频91| 久久久精品国产免大香伊| 一区二区三区精品在线观看| 国产一区二区伦理片| 欧美三级在线看| 中文字幕国产一区| 免费看欧美女人艹b| 色域天天综合网| 国产免费久久精品| 日本成人在线网站| 在线亚洲精品福利网址导航| 久久久不卡影院| 丝袜脚交一区二区| 色综合久久久久综合体| 2020国产成人综合网| 午夜精品久久久久久久久久 | 欧美伦理影视网| 国产精品乱码一区二三区小蝌蚪| 日本午夜精品一区二区三区电影| 99精品久久免费看蜜臀剧情介绍| 久久蜜桃av一区二区天堂| 欧美aaa在线| 欧美在线观看视频一区二区三区| 欧美经典三级视频一区二区三区| 精品一区二区av| 91精品国产综合久久精品麻豆| 亚洲精品国产无套在线观| 国产成人午夜精品5599 | 91麻豆精品国产91久久久久| ㊣最新国产の精品bt伙计久久| 国产乱码字幕精品高清av| 日韩欧美国产三级电影视频| 天堂蜜桃一区二区三区| 欧美日韩精品欧美日韩精品一| 亚洲欧美一区二区久久| 99综合电影在线视频| 国产欧美日韩一区二区三区在线观看| 九九视频精品免费| 精品剧情在线观看| 国产在线一区观看| 国产区在线观看成人精品| 国产乱理伦片在线观看夜一区|