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

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

?? obj_usbdesc.c

?? AT91rm9200的引導代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
//*----------------------------------------------------------------------------
//*         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_udpdesc.c
//* Object              : USB peripheral library.
//*
//* 1.0 07/23/01 ODi    : Creation
//*----------------------------------------------------------------------------
#include "services/obj_usbdesc.h"



/* ************************************ */
/* AT91F_OpenUsbDesc                    */
/*                                      */
/* Arguments:                           */
/* Return:                              */
/*     Pointer toAT91PS_UsbDesc object  */
/* Description:                         */
/* ************************************ */
AT91PS_UsbDesc AT91F_OpenUsbDesc(
	AT91PS_UsbDesc  pUsbDesc,  /* pointer to a AT91S_UsbDesc structure */
	AT91PS_UDP      pUdp,      /* Uregister structure */
	char            epId)      /* endpoint number */
{
	pUsbDesc->DispatchRequest = AT91F_UsbDescDispatchRequest;
	//pUsbDesc->DispatchClassRequest  = (AT91PF_DispatchClassRequest)  0;
	//pUsbDesc->DispatchVendorRequest = (AT91PF_DispatchVendorRequest) 0;
	//pUsbDesc->ClearFeature          = (AT91PF_ClearFeature)          0;
	//pUsbDesc->GetConfiguration      = (AT91PF_GetConfiguration)      0;
	//pUsbDesc->GetDescriptor         = (AT91PF_GetDescriptor)         0;
	//pUsbDesc->GetInterface          = (AT91PF_GetInterface)          0;
	//pUsbDesc->GetStatus             = (AT91PF_GetStatus)             0;
	//pUsbDesc->SetAddress            = (AT91PF_SetAddress)            0;
	//pUsbDesc->SetConfiguration      = (AT91PF_SetConfiguration)      0;
	//pUsbDesc->SetDescriptor         = (AT91PF_SetDescriptor)         0;
	//pUsbDesc->SetFeature            = (AT91PF_SetFeature)            0;
	//pUsbDesc->SetInterface          = (AT91PF_SetInterface)          0;
	//pUsbDesc->SynchFrame            = (AT91PF_SynchFrame)            0;

	pUsbDesc->pUdp = pUdp;
	pUsbDesc->epId = epId;
	return pUsbDesc;
}

/* ************************************ */
/* usbDescDispatchRequest               */
/*                                      */
/* Arguments:                           */
/*     pSetup: pointer to setup datas   */
/* Return:                              */
/*     Nothing                          */
/* Description:                         */
/*     This request handle standard     */
/*     request or call                  */
/*     usbDescDispatchClassRequest      */
/*     usbDescDispatchVendorRequest     */
/* ************************************ */
void AT91F_UsbDescDispatchRequest(
	AT91PS_UsbDesc const pDesc,  /* pointer to a AT91S_UsbDesc structure */
	AT91PS_UsbSetup      pSetup) /* USB setup data Cf USB spec rev 1.1 */
{
	switch ((pSetup->bmRequestType & (0x60)) >> 5) {
	case 0: /* Standard request */
		switch (pSetup->bRequest) {
		case USB_CLEAR_FEATURE:     AT91F_UsbDescClearFeature    (pDesc, pSetup); break;
		case USB_GET_CONFIGURATION: AT91F_UsbDescGetConfiguration(pDesc, pSetup); break;
		case USB_GET_DESCRIPTOR:    AT91F_UsbDescGetDescriptor   (pDesc, pSetup); break;
		case USB_GET_INTERFACE:     AT91F_UsbDescGetInterface    (pDesc, pSetup); break;
		case USB_GET_STATUS:        AT91F_UsbDescGetStatus       (pDesc, pSetup); break;
		case USB_SET_ADDRESS:       AT91F_UsbDescSetAddress      (pDesc, pSetup); break;
		case USB_SET_CONFIGURATION: AT91F_UsbDescSetConfiguration(pDesc, pSetup); break;
		case USB_SET_DESCRIPTOR:    AT91F_UsbDescSetDescriptor   (pDesc, pSetup); break;
		case USB_SET_FEATURE:       AT91F_UsbDescSetFeature      (pDesc, pSetup); break;
		case USB_SET_INTERFACE:     AT91F_UsbDescSetInterface    (pDesc, pSetup); break;
		case USB_SYNCH_FRAME:       AT91F_UsbDescSynchFrame      (pDesc, pSetup); break;
		default:                    AT91F_UdpEpStall             (pDesc->pUdp, pDesc->epId);                                      break;
		}
		break;
	case 1: /* Class request */
		if (pDesc->DispatchClassRequest)
			pDesc->DispatchClassRequest(pSetup, pDesc->pPrivateClassData);
		break;
	case 2: /* Vendor request */
		if (pDesc->DispatchVendorRequest)
			pDesc->DispatchVendorRequest(pSetup, pDesc->pPrivateVendorData);
		break;
	default: /* Reserved */
		AT91F_UdpEpStall(pDesc->pUdp, pDesc->epId);
		break;
	}
	return;
}

/* ************************************ */
/* AT91F_UsbDescClearFeature            */
/*                                      */
/* Arguments:                           */
/*     pSetup: pointer to setup datas   */
/* Return:                              */
/*     Nothing                          */
/* Description:                         */
/*     This request is used to clear or */
/*     disable a specific feature       */
/* ************************************ */
void AT91F_UsbDescClearFeature(
	AT91PS_UsbDesc const pUsbDesc,  /* pointer to a AT91S_UsbDesc structure */
	AT91PS_UsbSetup      pSetup)    /* USB setup data Cf USB spec rev 1.1 */
{
	u_int usbState = AT91F_UdpGetState(pUsbDesc->pUdp);
	u_int recipient = (pSetup->bmRequestType & 0x1F);

	/* Check request arguments */
	if (recipient > 2 || pSetup->wLength != 0)
		/* Device behavior not specified */
		AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);

	/* ================ Configured state ================= */
	else if ( (usbState & UDP_CONFG) ) {
		/* If an application handler exists, transmit the request */
		if (pUsbDesc->ClearFeature)
			pUsbDesc->ClearFeature(recipient, pSetup->wIndex, pSetup->wValue, pUsbDesc->pPrivateStandardData);
		else
			AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);
	}
	/* =================== Address state ================= */
	else if ( (usbState & UDP_FADDEN) ) {
		/* This request is valid in Address State only when reference endpoint 0 */
		if (recipient != 0 && pSetup->wIndex != 0)
			AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);
		else {
		/* If an application handler exists, transmit the request */
			if (pUsbDesc->ClearFeature )
				pUsbDesc->ClearFeature(recipient, pSetup->wIndex, pSetup->wValue, pUsbDesc->pPrivateStandardData);
			else
				AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);
		}
	}
	/* =================== Default state ================= */
	else
		/* Device behavior not specified */
		AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);
}

/* ************************************ */
/* AT91F_UsbDescGetConfiguration        */
/*                                      */
/* Arguments:                           */
/*     pSetup: pointer to setup datas   */
/* Return:                              */
/*     Nothing                          */
/* Description:                         */
/*     This request returns the current */
/*     device configuration value       */
/* ************************************ */
void AT91F_UsbDescGetConfiguration(
	AT91PS_UsbDesc const pUsbDesc,  /* pointer to a AT91S_UsbDesc structure */
	AT91PS_UsbSetup      pSetup)    /* USB setup data Cf USB spec rev 1.1 */
{
	u_int usbState = AT91F_UdpGetState(pUsbDesc->pUdp);

	/* Check request arguments */
	if (pSetup->wValue != 0 || pSetup->wIndex != 0 || pSetup->wLength != 1)
		/* Device behavior not specified */
		AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);

	/* ================ Configured state ================= */
	else if ( (usbState & UDP_CONFG) ) {
		/* If an application handler exists, transmit the request */
		if (pUsbDesc->GetConfiguration )
			pUsbDesc->GetConfiguration(pUsbDesc->pPrivateStandardData);
		else
			AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);
	}
	/* =================== Address state ================= */
	else if ( (usbState & UDP_FADDEN) ) {
		/* Return a 0 value */
		AT91F_UdpEpWrite(pUsbDesc->pUdp, pUsbDesc->epId, "\0x00", 1);
		AT91F_UdpEpEow(pUsbDesc->pUdp, pUsbDesc->epId);
	}
	/* =================== Default state ================= */
	else
		/* Device behavior not specified */
		AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);
}

/* ************************************ */
/* AT91F_UsbDescGetDescriptor           */
/*                                      */
/* Arguments:                           */
/*     pSetup: pointer to setup datas   */
/* Return:                              */
/*     Nothing                          */
/* Description:                         */
/*     This request returns the         */
/*     specified descriptor if the      */
/*     descriptor exists                */
/* ************************************ */
void AT91F_UsbDescGetDescriptor(
	AT91PS_UsbDesc const pUsbDesc,  /* pointer to a AT91S_UsbDesc structure */
	AT91PS_UsbSetup      pSetup)    /* USB setup data Cf USB spec rev 1.1 */
{
	/* This request is valid in all states */
	if (pUsbDesc->GetDescriptor)
		pUsbDesc->GetDescriptor (
			((pSetup->wValue) >> 8),   /* Descriptor type */
			((pSetup->wValue) & 0xFF), /* Descriptor Index */
			pSetup->wIndex,            /* Language ID */
			pSetup->wLength,           /* Descripotr Length */
			pUsbDesc->pPrivateStandardData);
	else
		AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);

}

/* ************************************ */
/* AT91F_UsbDescGetInterface            */
/*                                      */
/* Arguments:                           */
/*     pSetup: pointer to setup datas   */
/* Return:                              */
/*     Nothing                          */
/* Description:                         */
/*     This request returns the         */
/*     selected alternate setting for   */
/*     the specified interface          */
/* ************************************ */
void AT91F_UsbDescGetInterface(
	AT91PS_UsbDesc const pUsbDesc,  /* pointer to a AT91S_UsbDesc structure */
	AT91PS_UsbSetup      pSetup)    /* USB setup data Cf USB spec rev 1.1 */
{
	u_int usbState = AT91F_UdpGetState(pUsbDesc->pUdp);

	/* Check request arguments */
	if (pSetup->wValue != 0 || pSetup->wLength != 1)
		/* Device behavior not specified */
		AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);

	/* ================ Configured state ================= */
	else if ( (usbState & UDP_CONFG) ) {
		/* If an application handler exists, transmit the request */
		if (pUsbDesc->GetInterface)
			pUsbDesc->GetInterface(pSetup->wIndex, pUsbDesc->pPrivateStandardData);
		else
			AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);
	}
	/* =================== Address state ================= */
	else if ( (usbState & UDP_FADDEN) )
		AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);
	/* =================== Default state ================= */
	else
		/* Device behavior not specified */
		AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);
}

/* ************************************ */
/* AT91F_UsbDescGetStatus               */
/*                                      */
/* Arguments:                           */
/*     pSetup: pointer to setup datas   */
/* Return:                              */
/*     Nothing                          */
/* Description:                         */
/*     This request returns status for  */
/*     the specified endpoint           */
/* ************************************ */
void AT91F_UsbDescGetStatus(
	AT91PS_UsbDesc const pUsbDesc,  /* pointer to a AT91S_UsbDesc structure */
	AT91PS_UsbSetup      pSetup)    /* USB setup data Cf USB spec rev 1.1 */
{
	u_int usbState  = AT91F_UdpGetState(pUsbDesc->pUdp);
	u_int recipient = (pSetup->bmRequestType & 0x1F);

	/* Check request arguments */
	if (recipient > 2 || pSetup->wValue != 0 || pSetup->wLength != 2)
		/* Device behavior not specified */
		AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);
	else if (recipient == 0 && pSetup->wIndex != 0)
		/* Device behavior not specified */
		AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);

	/* ================ Configured state ================= */
	else if ( (usbState & UDP_CONFG) ) {
		if (pUsbDesc->GetStatus)
			pUsbDesc->GetStatus(recipient, pSetup->wIndex, pUsbDesc->pPrivateStandardData);
		else
			AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);
	}
	/* =================== Address state ================= */
	else if ( (usbState & UDP_FADDEN) ) {
		if (pSetup->wIndex != 0 || !(pUsbDesc->GetStatus))
			AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产永久精品大片wwwapp| 亚洲大片精品永久免费| 欧美高清dvd| 91黄色激情网站| 一本色道久久综合亚洲91| 91丨九色porny丨蝌蚪| 色婷婷国产精品| 欧美在线短视频| 欧美日韩国产中文| 精品国产乱码久久久久久久| 精品嫩草影院久久| 国产亚洲女人久久久久毛片| 国产欧美精品一区aⅴ影院| 国产精品嫩草影院com| 亚洲视频在线观看一区| 亚洲图片有声小说| 蜜臀久久99精品久久久久久9 | 日本三级韩国三级欧美三级| 美女在线一区二区| 国内成人免费视频| 95精品视频在线| 欧美日韩一区二区三区视频| 欧美一级电影网站| 国产蜜臀97一区二区三区 | 一区二区三区波多野结衣在线观看| 亚洲天堂a在线| 日韩高清不卡在线| 国产成人精品亚洲午夜麻豆| 99久久er热在这里只有精品66| 在线视频中文字幕一区二区| 91精品蜜臀在线一区尤物| 久久久不卡网国产精品二区 | 欧美日韩国产首页| 久久网站最新地址| 亚洲综合一区二区三区| 麻豆国产91在线播放| a级高清视频欧美日韩| 欧美日韩高清一区二区三区| 国产亚洲精品aa午夜观看| 日韩伦理免费电影| 色婷婷av一区二区| 制服丝袜日韩国产| 国产亚洲精品bt天堂精选| 亚洲一区二区三区四区五区黄 | 美国十次了思思久久精品导航| 国产精品538一区二区在线| 在线观看区一区二| 中文在线一区二区| 另类专区欧美蜜桃臀第一页| 欧美日韩精品一区二区在线播放| 国产亚洲人成网站| 捆绑变态av一区二区三区| 91精品福利在线| 国产精品丝袜久久久久久app| 视频精品一区二区| 91老师片黄在线观看| 久久婷婷久久一区二区三区| 久久精品国产一区二区| 欧美日韩大陆在线| 尤物视频一区二区| 99免费精品视频| 久久久九九九九| 国产一区二区导航在线播放| 欧美一级视频精品观看| 亚洲成av人片| 91久久国产综合久久| 亚洲黄色免费电影| 一本色道久久加勒比精品| 亚洲欧洲韩国日本视频| 成人午夜免费电影| 国产精品你懂的| www.日本不卡| 亚洲欧洲99久久| av综合在线播放| 一区二区三区中文字幕精品精品| 99久久精品国产导航| 日韩毛片一二三区| 色婷婷狠狠综合| 亚洲国产精品一区二区www| 在线免费不卡视频| 午夜精品爽啪视频| 91精品在线免费| 美女脱光内衣内裤视频久久网站 | 99免费精品视频| 一二三区精品视频| 欧美日韩不卡在线| 美国欧美日韩国产在线播放| 欧美成人精品高清在线播放| 国产精品1区二区.| 国产精品久久久久精k8| 日本韩国欧美一区| 日本中文字幕不卡| 久久久久久久久久久黄色| 成人免费视频网站在线观看| 亚洲美女视频一区| 欧美久久婷婷综合色| 激情另类小说区图片区视频区| 国产区在线观看成人精品| 成人h动漫精品| 亚洲电影在线播放| 欧美大胆人体bbbb| 不卡一区二区三区四区| 亚洲电影视频在线| 国产日韩欧美不卡| 欧美乱妇20p| 国产不卡免费视频| 亚洲国产精品一区二区久久恐怖片 | 国产原创一区二区三区| 国产精品国产三级国产有无不卡 | 91色porny蝌蚪| 午夜欧美一区二区三区在线播放| 欧美精品一区二区不卡| 94-欧美-setu| 国产最新精品精品你懂的| 专区另类欧美日韩| 欧美va亚洲va| 91成人免费电影| 国产成人在线网站| 亚洲v中文字幕| 亚洲欧洲日韩在线| 精品国产乱码久久久久久蜜臀| 91久久一区二区| 国产精品18久久久久久久久久久久 | 国产精品网站在线| 日韩一区二区在线观看视频 | 波多野结衣视频一区| 青青草原综合久久大伊人精品| 国产精品久久久久久久久快鸭 | 久久精品夜色噜噜亚洲a∨| 91福利区一区二区三区| 国产麻豆一精品一av一免费| 午夜精品福利一区二区三区蜜桃| 国产精品视频第一区| 欧美成人激情免费网| 欧美日韩国产a| 在线观看成人免费视频| jizzjizzjizz欧美| 国产精品一区二区三区乱码| 久久精品国产亚洲高清剧情介绍| 亚洲一区二区三区精品在线| 中文字幕亚洲在| 日本一区免费视频| 久久嫩草精品久久久精品| 欧美成人三级在线| 日韩精品一区二区三区老鸭窝| 欧美日韩一区二区在线观看视频| 91小视频在线免费看| 成人91在线观看| www..com久久爱| 99精品桃花视频在线观看| 成人av高清在线| 成人av在线播放网站| 国产一区二区三区免费看| 精品亚洲欧美一区| 国产毛片精品视频| 国产盗摄女厕一区二区三区| 国产精品1区2区| 99精品欧美一区二区三区小说| 成人激情免费网站| av成人免费在线| 色欧美片视频在线观看在线视频| av一区二区不卡| 日本精品免费观看高清观看| 欧美亚日韩国产aⅴ精品中极品| 欧美视频完全免费看| 91精品国产综合久久久久久久久久 | 日韩美一区二区三区| 久久亚洲影视婷婷| 国产精品久久久久影院色老大| 中文字幕一区二区三区在线播放 | 99在线视频精品| 欧美优质美女网站| 欧美一区二区三区思思人| 精品少妇一区二区| 国产精品丝袜一区| 五月婷婷欧美视频| 国产一区二区三区四区在线观看| 成人丝袜视频网| 欧美日韩国产区一| 精品成人私密视频| 亚洲欧美日韩国产成人精品影院| 一个色在线综合| 国产乱国产乱300精品| 一本大道久久a久久精二百| 欧美一区二区三区视频在线观看| 国产亚洲欧美激情| 天堂成人国产精品一区| 国产九色sp调教91| 欧美日韩免费一区二区三区视频| 精品剧情v国产在线观看在线| 综合av第一页| 麻豆精品新av中文字幕| 91免费国产在线| 精品国产一区二区三区av性色| 亚洲色图清纯唯美| 国产主播一区二区三区| 欧美揉bbbbb揉bbbbb| 欧美国产成人在线| 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产免费成人在线视频|