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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? usb_enumerate.c

?? This zip describes USB communication through 2 pipes with a Windows 2000 PC application. Includes ma
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
//*----------------------------------------------------------------------------
//*         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           : descriptor.c
//* Object              : USB monitor aplication.
//*
//* 1.0 Jul 31 2002 	: ODi Creation
//*----------------------------------------------------------------------------
#include "AT91_SVC_USBCTL.h"
#include "lib_AT91RM9200.h"
#include "AT91_SVC_USBIN.h"

AT91S_SVC_USBIN    usbEp3;

/* ================================================================ */
/* ===================== Device configuration ===================== */
/* ================================================================ */
// This is the current configuration.
unsigned char currentConfiguration = 0;
unsigned char currentConnection = 0;

const char deviceDescriptor[] = {
	/* Device descriptor */
	0x12,   // bLength
	0x01,   // bDescriptorType
	0x10,   // bcdUSBL
	0x01,   //
	0x02,   // bDeviceClass:    CDC class code
	0x00,   // bDeviceSubclass: CDC class sub code
	0x00,   // bDeviceProtocol: CDC Device protocol
	0x08,   // bMaxPacketSize0
	0xEB,   // idVendorL
	0x03,   //
	0x22,   // idProductL
	0x61,   //
	0x10,   // bcdDeviceL
	0x01,   //
	0x00,   // iManufacturer    // 0x01
	0x00,   // iProduct
	0x00,   // SerialNumber
	0x01    // bNumConfigs
};

const char configurationDescriptor[] = {
	/* ============== CONFIGURATION 1 =========== */
	/* Configuration 1 descriptor */
	0x09,   // CbLength
	0x02,   // CbDescriptorType
	0x20,   // CwTotalLength 2 EP + Control
	0x00,
	0x01,   // CbNumInterfaces
	0x01,   // CbConfigurationValue
	0x00,   // CiConfiguration
	0xC0,   // CbmAttributes 0xA0
	0x00,   // CMaxPower

	/* Data Class Interface Descriptor Requirement */
	0x09, // bLength
	0x04, // bDescriptorType
	0x00, // bInterfaceNumber
	0x00, // bAlternateSetting
	0x02, // bNumEndpoints
	0x00, // bInterfaceClass
	0x00, // bInterfaceSubclass
	0x00, // bInterfaceProtocol
	0x00, // iInterface

	/* First alternate setting */
	/* Endpoint 1 descriptor */
	0x07,   // bLength
	0x05,   // bDescriptorType
	0x01,   // bEndpointAddress, Endpoint 01 - OUT
	0x02,   // bmAttributes      BULK
	0x40,   // wMaxPacketSize
	0x00,
	0x00,   // bInterval

	/* Endpoint 2 descriptor */
	0x07,   // bLength
	0x05,   // bDescriptorType
	0x82,   // bEndpointAddress, Endpoint 02 - IN
	0x02,   // bmAttributes      BULK
	0x40,   // wMaxPacketSize
	0x00,
	0x00    // bInterval
};


/* USB standard request code */
#define STD_GET_STATUS_ZERO           0x0080 
#define STD_GET_STATUS_INTERFACE      0x0081
#define STD_GET_STATUS_ENDPOINT       0x0082

#define STD_CLEAR_FEATURE_ZERO        0x0100
#define STD_CLEAR_FEATURE_INTERFACE   0x0101
#define STD_CLEAR_FEATURE_ENDPOINT    0x0102

#define STD_SET_FEATURE_ZERO          0x0300
#define STD_SET_FEATURE_INTERFACE     0x0301
#define STD_SET_FEATURE_ENDPOINT      0x0302

#define STD_SET_ADDRESS               0x0500
#define STD_GET_DESCRIPTOR            0x0680
#define STD_SET_DESCRIPTOR            0x0700
#define STD_GET_CONFIGURATION         0x0880
#define STD_SET_CONFIGURATION         0x0900
#define STD_GET_INTERFACE             0x0A81
#define STD_SET_INTERFACE             0x0B01
#define STD_SYNCH_FRAME               0x0C82

/* CDC Class Specific Request Code */
#define GET_LINE_CODING               0x21A1
#define SET_LINE_CODING               0x2021
#define SET_CONTROL_LINE_STATE        0x2221

//*----------------------------------------------------------------------------
//* \fn    AT91F_USB_GetDescriptorDevice
//* \brief Answer to a standard GET DESCRIPTOR request
//*----------------------------------------------------------------------------
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
__inline void AT91F_USB_GetDescriptorDevice(
	AT91PS_SVC_USBCTL pUSBCTL)
{
	unsigned short wLength = *((unsigned short *) &(pUSBCTL->pSetup[6]));
	pUSBCTL->Write(pUSBCTL,
		deviceDescriptor,
		MIN(sizeof(deviceDescriptor), wLength),
		(AT91PF_SVC_USBCTL_RWComplete) 0);    // No callback
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_USB_GetDescriptorConfiguration
//* \brief Answer to a standard GET DESCRIPTOR request
//*----------------------------------------------------------------------------
__inline void AT91F_USB_GetDescriptorConfiguration(
	AT91PS_SVC_USBCTL pUSBCTL)
{
	unsigned short wLength = *((unsigned short *) &(pUSBCTL->pSetup[6]));
	pUSBCTL->Write(pUSBCTL,
		configurationDescriptor,
		MIN(sizeof(configurationDescriptor), wLength),
		(AT91PF_SVC_USBCTL_RWComplete) 0);    // No callback
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_USB_SetAddress
//* \brief Answer to a standard SET ADDRESS request
//*----------------------------------------------------------------------------
void AT91F_USB_SetAddressComplete(
	AT91PS_SVC_USBCTL pUSBCTL)
{
	unsigned char address = pUSBCTL->pSetup[2];

	// Set Address
	AT91F_UDP_SetAddress(pUSBCTL->pUdp, address);
	if (address)
		// Move the UDP function to the addressed state
		AT91F_UDP_SetState(pUSBCTL->pUdp, AT91C_UDP_FADDEN);
	else
		// Move the UDP function to the default state
		AT91F_UDP_SetState(pUSBCTL->pUdp, 0);
}

__inline void AT91F_USB_SetAddress(
	AT91PS_SVC_USBCTL pUSBCTL)
{
	// UDP address change must be done once STATUS IN is achieved
	pUSBCTL->Write(pUSBCTL,	(char *) 0,	0, AT91F_USB_SetAddressComplete);
}


//*----------------------------------------------------------------------------
//* \fn    AT91F_USB_SetConfiguration
//* \brief Answer to a standard SET CONFIGURATION request
//*----------------------------------------------------------------------------
void AT91F_USB_SetConfigurationComplete(
	AT91PS_SVC_USBCTL pUSBCTL)
{
	AT91PS_UDP   pUdp = pUSBCTL->pUdp; // Pointer to UDP registers

	// Move the UDP function to the configured state
	AT91F_UDP_SetState(pUdp, AT91C_UDP_CONFG);

	// Enable endpoints
	AT91F_UDP_EpSet(pUdp, 1, AT91C_UDP_EPEDS);
	AT91F_UDP_EpSet(pUdp, 2, AT91C_UDP_EPEDS);
	AT91F_UDP_EpSet(pUdp, 3, AT91C_UDP_EPEDS);

	// Enable endpoint 1 & 2 interrupts
	AT91F_SVC_USBIN_Open(&usbEp3, AT91C_BASE_UDP, 3, 8, 1);
//	AT91F_UDP_EnableIt(pUdp, (AT91C_UDP_EPINT1 | AT91C_UDP_EPINT2 | AT91C_UDP_EPINT3));
}

__inline void AT91F_USB_SetConfiguration(
	AT91PS_SVC_USBCTL pUSBCTL)
{
	AT91PS_UDP   pUdp = pUSBCTL->pUdp; // Pointer to UDP registers
	AT91PF_SVC_USBCTL_RWComplete RWComplete = (AT91PF_SVC_USBCTL_RWComplete) 0; // Callback

	// Store the current configuration
	currentConfiguration = pUSBCTL->pSetup[2];

	// Move to the Configured State
	if (currentConfiguration) {
		// Reset  endpoints
		AT91F_UDP_ResetEp(pUdp, (AT91C_UDP_EPINT1 | AT91C_UDP_EPINT2 | AT91C_UDP_EPINT3));
		AT91F_UDP_ResetEp(pUdp, 0);
		//AT91F_UDP_EnableEp(pUdp, (AT91C_UDP_EPINT1 | AT91C_UDP_EPINT2));

		// Configure endpoints and enable them
		AT91F_UDP_EpSet(pUdp, 1, (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_OUT)); // Endpoint 1 is a bulk out
		AT91F_UDP_EpSet(pUdp, 2, (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_IN));  // Endpoint 2 is a bulk in
		AT91F_UDP_EpSet(pUdp, 3, (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_ISO_IN));   // Endpoint 3 is a INT in

		// Init the Callback after STATUS IN
		RWComplete = AT91F_USB_SetConfigurationComplete;
	}

	// Move back to the Address State
	else {
		// Move the UDP function to the addressed state
		AT91F_UDP_SetState(pUdp, AT91C_UDP_FADDEN);

		// Enable endpoints
		AT91F_UDP_EpClear(pUdp, 1, AT91C_UDP_EPEDS);
		AT91F_UDP_EpClear(pUdp, 2, AT91C_UDP_EPEDS);

	}
	// Send a STATUS IN
	pUSBCTL->Write(pUSBCTL,	(char *) 0,	0, RWComplete);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_USB_GetConfiguration
//* \brief Answer to a standard GET CONFIGURATION request
//*----------------------------------------------------------------------------
__inline void AT91F_USB_GetConfiguration(
	AT91PS_SVC_USBCTL pUSBCTL)
{
	AT91PS_UDP   pUdp = pUSBCTL->pUdp; // Pointer to UDP registers

	// Send the current configuration
	AT91F_UDP_EpWrite(pUdp, 0, currentConfiguration);
	AT91F_UDP_EpEndOfWr(pUdp, 0);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_USB_GetStatusZero
//* \brief Answer to a standard GET STATUS ZERO request
//*----------------------------------------------------------------------------
__inline void AT91F_USB_GetStatusZero(
	AT91PS_SVC_USBCTL pUSBCTL)
{
	AT91PS_UDP   pUdp = pUSBCTL->pUdp; // Pointer to UDP registers

	// Return no Remote wakeup, not self powered (Cf. Fig 9.4 in USB Spec Rev 1.1)
	AT91F_UDP_EpWrite(pUdp, 0, 0);
	AT91F_UDP_EpWrite(pUdp, 0, 0);
	AT91F_UDP_EpEndOfWr(pUdp, 0);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合一二三区| 亚洲一区二区三区四区在线观看 | 欧美日韩成人综合在线一区二区| 亚洲一区二区不卡免费| 欧美日韩国产一级片| 日韩av不卡在线观看| 精品福利二区三区| 91美女片黄在线观看91美女| 亚洲mv在线观看| 国产日韩精品一区二区浪潮av| 91首页免费视频| 久久99蜜桃精品| 国产精品久久夜| 日韩一区二区三免费高清| 国产精品一级片在线观看| 污片在线观看一区二区| 国产女同互慰高潮91漫画| 欧美日韩国产首页| av资源站一区| 久久99久久99| 午夜天堂影视香蕉久久| 欧美高清在线视频| 欧美α欧美αv大片| 色综合天天综合| 国产不卡视频一区二区三区| 樱桃视频在线观看一区| 久久午夜电影网| 欧美美女网站色| 91麻豆免费观看| 国产传媒久久文化传媒| 日本不卡的三区四区五区| 久久久久久久久久久99999| 91视视频在线观看入口直接观看www | 色一区在线观看| 国产精品一二三四五| 亚洲成人免费视频| 亚洲欧美综合在线精品| 久久久久久日产精品| 这里是久久伊人| 欧美伊人精品成人久久综合97| 国产成人丝袜美腿| 蜜臀av一区二区在线免费观看| 亚洲嫩草精品久久| 中文字幕在线视频一区| 2023国产精品视频| 日韩精品资源二区在线| 欧美日本一道本| jlzzjlzz国产精品久久| 国产成人在线观看| 韩国在线一区二区| 久久精品国产久精国产爱| 亚洲1区2区3区4区| 亚洲在线中文字幕| 亚洲一区在线播放| 亚洲综合一二区| 亚洲午夜久久久久久久久久久 | 亚洲国产成人高清精品| 亚洲一二三区不卡| 亚洲国产日韩a在线播放| 一区二区三区四区五区视频在线观看 | 中国av一区二区三区| 久久久精品影视| 久久久久久久久蜜桃| 欧美tk—视频vk| 亚洲精品一区二区三区蜜桃下载| 欧美一区二区成人6969| 日韩欧美亚洲国产精品字幕久久久| 欧美乱熟臀69xxxxxx| 9191成人精品久久| 91精品国产一区二区人妖| 欧美高清www午色夜在线视频| 欧美性欧美巨大黑白大战| 在线免费不卡电影| 在线电影国产精品| 91精品国产综合久久香蕉麻豆| 欧美性生活久久| 3d成人动漫网站| 精品免费视频一区二区| 久久麻豆一区二区| 中文字幕一区免费在线观看| 中文字幕精品一区二区精品绿巨人 | 欧美亚洲一区二区在线观看| 欧美天堂一区二区三区| 欧美一区二区三区免费大片| 精品电影一区二区| 中文字幕一区二区不卡| 亚洲国产精品久久一线不卡| 蜜桃视频在线一区| 成人午夜视频福利| 色综合一个色综合亚洲| 欧美一区二区三区日韩| 国产欧美日韩视频在线观看| 亚洲色图都市小说| 午夜欧美2019年伦理| 美女www一区二区| 成人一级片网址| 欧美日韩久久久一区| 日韩一区二区麻豆国产| 国产欧美精品区一区二区三区| 亚洲制服丝袜av| 国产激情视频一区二区三区欧美| 91黄色免费观看| 久久久99精品久久| 亚洲欧洲另类国产综合| 蜜臀av国产精品久久久久| 99精品桃花视频在线观看| 欧美美女激情18p| 国产精品丝袜黑色高跟| 亚洲卡通欧美制服中文| 亚洲欧洲日韩av| 麻豆成人免费电影| 欧美无砖专区一中文字| 国产精品不卡在线| 成人一道本在线| www国产亚洲精品久久麻豆| 日韩电影在线一区二区三区| 色视频一区二区| 亚洲日本在线看| 高清视频一区二区| 久久久久久影视| 久久精品国产精品亚洲红杏 | 日韩视频中午一区| 午夜精品久久久久久久| 在线视频你懂得一区| 中文字幕综合网| 91婷婷韩国欧美一区二区| 国产精品久久久久天堂| 本田岬高潮一区二区三区| 久久一区二区视频| 激情文学综合丁香| 精品福利一二区| 国产一区二区三区免费在线观看 | 一级精品视频在线观看宜春院| www.色精品| 最近日韩中文字幕| 色欧美片视频在线观看| 一区二区三区日韩精品视频| 91在线看国产| 亚洲精选视频在线| 在线视频观看一区| 亚洲成人免费看| 日韩三区在线观看| 国产综合色在线视频区| 久久久久国产精品免费免费搜索| 国产很黄免费观看久久| 中文字幕第一区综合| 91在线免费播放| 亚洲国产精品一区二区久久恐怖片| 在线成人小视频| 国产一区在线精品| 国产欧美日韩另类一区| 91在线视频免费观看| 亚洲综合色丁香婷婷六月图片| 欧美日韩一区二区三区高清 | 亚洲欧美日韩久久精品| 色一情一伦一子一伦一区| 午夜电影一区二区三区| 亚洲精品一区二区三区精华液| 国产一区激情在线| 国产精品美女一区二区| 欧美日韩在线精品一区二区三区激情| 午夜久久久久久久久久一区二区| 日韩欧美不卡在线观看视频| 国产a区久久久| 一区二区三区四区亚洲| 欧美成人精品高清在线播放| 国产精品亚洲午夜一区二区三区| 亚洲婷婷在线视频| 91精品国产日韩91久久久久久| 国产在线国偷精品产拍免费yy| 亚洲少妇30p| 日韩欧美中文一区| 不卡的av中国片| 首页国产欧美日韩丝袜| 国产欧美一区二区精品性色| 在线观看亚洲专区| 久久精品免费观看| 自拍偷在线精品自拍偷无码专区| 67194成人在线观看| 丁香婷婷综合五月| 日韩在线a电影| 国产精品国产三级国产有无不卡| 777xxx欧美| 91小视频免费看| 国产在线麻豆精品观看| 亚洲黄色在线视频| 2023国产一二三区日本精品2022| 色综合婷婷久久| 国产成人精品亚洲777人妖| 亚洲福利视频一区二区| 国产精品视频在线看| 91精品国产欧美一区二区18| 91丨porny丨在线| 国产美女娇喘av呻吟久久| 天天综合色天天综合色h| 国产精品久久久久影院亚瑟 | 久久久91精品国产一区二区精品 | 日本最新不卡在线| 中文字幕一区二区三区不卡在线 | 国产精品日日摸夜夜摸av|