亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
一本一道久久a久久精品| 一区二区三区欧美在线观看| 捆绑调教一区二区三区| 日韩欧美中文字幕公布| 麻豆精品精品国产自在97香蕉| 精品国产一区二区精华| 国产成人亚洲综合a∨婷婷 | 国产一区二区精品久久91| 欧美成人一区二区三区| 狠狠色综合播放一区二区| 国产精品色噜噜| 色视频成人在线观看免| 日韩和的一区二区| 欧美精品一区二| 成人av第一页| 石原莉奈在线亚洲三区| 精品sm在线观看| 99精品欧美一区| 日韩国产精品久久久久久亚洲| 亚洲精品一区二区三区福利| 99精品久久只有精品| 污片在线观看一区二区| 久久久精品免费网站| 99国产精品久久| 日本亚洲最大的色成网站www| 久久精品一二三| 在线免费观看日韩欧美| 久久er99精品| 一区二区三区免费在线观看| 日韩视频免费观看高清完整版在线观看| 国产一区二区导航在线播放| 亚洲精品写真福利| 精品99一区二区| 色呦呦日韩精品| 精品一区二区三区免费| 亚洲色图制服丝袜| 欧美zozo另类异族| 欧美色窝79yyyycom| 国产伦精品一区二区三区在线观看| 亚洲男同1069视频| 欧美va亚洲va在线观看蝴蝶网| 成人h精品动漫一区二区三区| 日本aⅴ亚洲精品中文乱码| 国产精品久久久久久亚洲毛片 | 成人一道本在线| 日韩中文字幕一区二区三区| 亚洲国产精品ⅴa在线观看| 欧美日韩国产在线观看| 成人av网址在线| 精品一区二区免费看| 亚洲第一主播视频| 国产精品国产三级国产三级人妇| 欧美xxxxxxxx| 欧美视频中文一区二区三区在线观看| 麻豆91在线观看| 亚洲va国产va欧美va观看| 亚洲日本护士毛茸茸| 国产欧美一区二区三区网站| 91麻豆精品久久久久蜜臀| 色哟哟亚洲精品| caoporen国产精品视频| 国产成人免费视频网站高清观看视频| 青椒成人免费视频| 午夜国产不卡在线观看视频| 亚洲人成人一区二区在线观看| 久久久久亚洲综合| 精品国精品自拍自在线| 欧美成人a∨高清免费观看| 欧美精品黑人性xxxx| 欧美日韩免费不卡视频一区二区三区| av不卡在线观看| 成人黄色一级视频| 粉嫩一区二区三区性色av| 激情综合一区二区三区| 久久福利视频一区二区| 日本亚洲天堂网| 久久精品国产网站| 激情六月婷婷久久| 韩国av一区二区三区四区| 久久99精品久久久久| 久久91精品国产91久久小草 | 精品国产乱码久久久久久夜甘婷婷| 欧美精品在线一区二区| 欧美日韩国产天堂| 91麻豆国产福利精品| 色菇凉天天综合网| 欧美在线观看18| 欧美在线小视频| 欧美日韩国产美女| 日韩欧美精品在线视频| 久久久久九九视频| 国产精品久久久久久久久免费丝袜| 国产精品国产精品国产专区不片| 亚洲欧美在线视频| 亚洲综合在线观看视频| 亚洲不卡在线观看| 男女男精品视频网| 国产盗摄女厕一区二区三区 | 99精品视频在线免费观看| av在线不卡电影| 欧洲精品一区二区三区在线观看| 色婷婷av一区| 亚洲综合偷拍欧美一区色| 日本人妖一区二区| 免费在线视频一区| 国产一区二区三区香蕉| 国产91在线观看| 色94色欧美sute亚洲线路二| 欧美久久久久久蜜桃| 亚洲精品在线免费播放| 综合精品久久久| 国产精品久久免费看| 樱桃视频在线观看一区| 亚洲自拍偷拍网站| 午夜天堂影视香蕉久久| 亚洲精品国产精品乱码不99| 午夜精品久久久久久久99樱桃| 一区二区三区成人| 国产成人自拍在线| 日韩欧美国产麻豆| 91精品视频网| 1区2区3区国产精品| 国产精品一区在线观看你懂的| 亚洲香蕉伊在人在线观| 久久国产尿小便嘘嘘尿| 成人激情电影免费在线观看| 欧美精品aⅴ在线视频| 欧美国产激情一区二区三区蜜月| 亚洲综合色视频| 国产91精品一区二区麻豆网站| 欧美区在线观看| 亚洲欧美在线aaa| 黑人巨大精品欧美一区| 在线观看91视频| 国产日韩欧美一区二区三区乱码| 亚洲mv大片欧洲mv大片精品| 国产aⅴ综合色| 欧美一区二区三区思思人| 亚洲精品日韩专区silk | 亚洲精品国产一区二区精华液| 伦理电影国产精品| 欧美日韩亚洲综合在线 | 国产露脸91国语对白| 欧美三级午夜理伦三级中视频| 日本一区二区三区高清不卡| 免费在线看一区| 色94色欧美sute亚洲13| 视频一区欧美精品| 精品视频一区三区九区| 一区二区免费看| 国产酒店精品激情| 亚洲国产精品成人综合色在线婷婷| 日本色综合中文字幕| 久久精品一区蜜桃臀影院| 国产丝袜在线精品| 午夜精品久久久久久久久| 成人精品视频.| 99久久精品国产导航| 国产尤物一区二区| 亚洲综合图片区| 国产欧美日韩在线观看| 色拍拍在线精品视频8848| 亚洲一区二区四区蜜桃| 亚洲成人在线观看视频| 日韩电影在线观看电影| 亚洲国产精品自拍| 日韩美一区二区三区| 国产精品一区二区在线看| 美日韩一区二区三区| 国产欧美日韩综合精品一区二区| 成人污污视频在线观看| 国产精品国产三级国产三级人妇| www.欧美.com| 美国欧美日韩国产在线播放 | 91精品国产麻豆国产自产在线| 五月激情丁香一区二区三区| 91精品国产综合久久福利软件| 国产精品一区免费视频| 亚洲高清视频在线| 久久免费视频一区| 久久无码av三级| 欧美理论电影在线| 欧美猛男超大videosgay| 国产亚洲欧洲997久久综合| 在线亚洲一区观看| 国内精品伊人久久久久av一坑| 国产精品久久久久久久久果冻传媒| 在线一区二区三区四区五区| 国产精品2024| 国内精品国产三级国产a久久| 久久久久久久久久久久久夜| 欧美日本免费一区二区三区| 狠狠色狠狠色综合| 麻豆一区二区三| 一区二区不卡在线播放 | 国产一区二区免费视频| 亚洲欧洲www| 国产日本一区二区| 成人av电影在线网| 国产一区在线观看麻豆|