亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
91视频精品在这里| 国产一区三区三区| av在线不卡网| 国产精品传媒入口麻豆| 成人精品视频网站| 亚洲乱码国产乱码精品精98午夜| 色综合久久中文字幕综合网| 亚洲一区二区三区四区的| 欧美日韩一区二区三区在线 | 午夜精品一区在线观看| 欧美酷刑日本凌虐凌虐| 国产综合色视频| 亚洲啪啪综合av一区二区三区| 91九色最新地址| 日韩和欧美的一区| 久久久国产一区二区三区四区小说| 成人开心网精品视频| 亚洲精品国产一区二区三区四区在线 | www.亚洲精品| 亚洲国产日日夜夜| 久久尤物电影视频在线观看| 欧美熟乱第一页| 久久国产尿小便嘘嘘尿| 国产精品不卡在线| 欧美精品在欧美一区二区少妇 | 精品一区二区三区在线观看 | 欧美日韩亚洲丝袜制服| 久久精品国产亚洲a| 亚洲欧美综合色| 日韩一区二区三区免费看| 国产精品一级二级三级| 亚洲国产精品久久久久婷婷884| 欧美精品一区二区久久婷婷| 99re这里都是精品| 久久99热99| 日本一区二区电影| 在线免费观看日本欧美| 国产伦精品一区二区三区免费| 亚洲尤物视频在线| 国产片一区二区三区| 欧美日韩国产综合久久| 99久久免费国产| 精品在线一区二区| 午夜伊人狠狠久久| 自拍偷拍亚洲综合| 欧美va亚洲va国产综合| 欧美亚洲综合另类| www.亚洲激情.com| 国产精品自拍av| 麻豆免费看一区二区三区| 亚洲精品伦理在线| 中文在线一区二区| 久久天天做天天爱综合色| 56国语精品自产拍在线观看| 一本色道久久综合亚洲91| 国产99久久久国产精品潘金 | 欧美一区二区福利在线| 欧美亚洲高清一区二区三区不卡| 国产福利一区二区三区视频| 舔着乳尖日韩一区| 亚洲综合色网站| 亚洲免费视频中文字幕| 国产农村妇女毛片精品久久麻豆 | 国产精品国模大尺度视频| 精品对白一区国产伦| 日韩欧美在线影院| 777午夜精品视频在线播放| 色综合久久综合网欧美综合网| 成人av在线影院| 国产精品自拍一区| 国产精品一区二区x88av| 精东粉嫩av免费一区二区三区| 日本不卡一区二区三区| 日韩精品三区四区| 婷婷开心激情综合| 婷婷国产v国产偷v亚洲高清| 午夜视频在线观看一区二区三区| 亚洲永久免费av| 亚洲成av人片在线观看无码| 亚洲成人你懂的| 石原莉奈在线亚洲三区| 日本不卡一二三区黄网| 麻豆精品一区二区| 久久国产日韩欧美精品| 国产一区二区精品在线观看| 国产成人超碰人人澡人人澡| 国产一区二区精品久久91| 国产黄色精品网站| 99这里都是精品| 日本乱码高清不卡字幕| 91国产精品成人| 91精品国产一区二区| 日韩午夜av一区| 精品国产乱码久久久久久久| 国产亚洲精品bt天堂精选| 欧美激情一区二区| 亚洲免费伊人电影| 丝袜脚交一区二区| **欧美大码日韩| 国产精品久久久久一区二区三区共 | 成人黄色综合网站| 一本色道综合亚洲| 欧美男人的天堂一二区| 欧美va天堂va视频va在线| 久久综合五月天婷婷伊人| 国产三级精品三级| 亚洲视频免费观看| 日日夜夜精品视频天天综合网| 狠狠狠色丁香婷婷综合激情 | 欧美久久久久久蜜桃| 精品久久一区二区三区| 1000部国产精品成人观看| 亚洲成a人v欧美综合天堂下载| 精品在线亚洲视频| 色婷婷综合久久久久中文| 在线不卡中文字幕播放| 国产亚洲1区2区3区| 一区二区三区鲁丝不卡| 麻豆91精品91久久久的内涵| 成人午夜大片免费观看| 欧美理论片在线| 国产精品入口麻豆原神| 一区二区在线免费观看| 国内成人精品2018免费看| 99久久精品免费| 日韩欧美国产一区在线观看| 综合自拍亚洲综合图不卡区| 日本大胆欧美人术艺术动态| 99精品欧美一区二区三区小说| 3d动漫精品啪啪1区2区免费 | 日韩精品电影一区亚洲| 国产成人精品三级麻豆| 91精品国产一区二区人妖| 亚洲视频一区二区在线| 韩国欧美国产1区| 在线观看不卡一区| 国产精品免费网站在线观看| 麻豆成人久久精品二区三区小说| 91国偷自产一区二区三区观看 | 欧美大片国产精品| 亚洲第一激情av| 91麻豆国产福利在线观看| 亚洲精品一区二区三区99| 亚洲一区二区高清| 99国产精品久久久久久久久久 | 精品亚洲成av人在线观看| 欧美日韩aaaaaa| 亚洲精品欧美专区| 成人av电影在线网| 国产欧美一区二区精品性色超碰| 奇米888四色在线精品| 欧美羞羞免费网站| 亚洲毛片av在线| 99久久er热在这里只有精品66| 久久久精品国产免大香伊| 蜜臀91精品一区二区三区 | 精品日韩成人av| 日韩影院在线观看| 欧美久久久久久久久久| 亚洲一区在线视频观看| 91麻豆精品一区二区三区| 国产精品美日韩| 顶级嫩模精品视频在线看| 精品成a人在线观看| 久久精品国产网站| 精品国产凹凸成av人网站| 日韩va欧美va亚洲va久久| 欧美日韩高清一区二区不卡| 一级日本不卡的影视| 91福利社在线观看| 亚洲成av人**亚洲成av**| 欧美亚洲一区二区在线观看| 夜色激情一区二区| 在线观看区一区二| 亚洲妇熟xx妇色黄| 欧美一区二区性放荡片| 男人的天堂久久精品| 精品久久五月天| 国产成人欧美日韩在线电影| 欧美国产精品一区二区三区| 国产+成+人+亚洲欧洲自线| 国产欧美视频一区二区| 99精品黄色片免费大全| 亚洲丝袜自拍清纯另类| 欧美网站大全在线观看| 视频一区二区三区在线| 精品免费一区二区三区| 国产激情一区二区三区| 亚洲天堂av老司机| 欧美日韩激情在线| 狠狠色2019综合网| 国产精品久久久久久久久免费相片 | 激情丁香综合五月| 日本一区二区视频在线| 色一情一乱一乱一91av| 日本aⅴ精品一区二区三区| 久久精品欧美一区二区三区麻豆| av一二三不卡影片| 午夜精品福利一区二区蜜股av | 国产精品理论在线观看|