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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? chap9.c

?? 對(duì)u盤(pán)硬件接口編程源碼
?? C
字號(hào):
/*
   //************************************************************************* 
   //
   //                  P H I L I P S   P R O P R I E T A R Y
   //
   //           COPYRIGHT (c)   1997 BY PHILIPS SINGAPORE.
   //                     --  ALL RIGHTS RESERVED  --
   //
   // File Name:	CHAP_9.C
   // Author:		Wenkai Du
   // Created:		19 Dec 97
   // Modified:
   // Revision:		3.0
   //
   //*************************************************************************
*/

#include <stdio.h>
#include <string.h>


#include "d12ci.h"
#include "main.h"
#include "usb100.h"
#include "chap9.h"
//#include "44b.h"
#define NUM_ENDPOINTS	2

#define CONFIG_DESCRIPTOR_LENGTH    sizeof(USB_CONFIGURATION_DESCRIPTOR) \
									+ sizeof(USB_INTERFACE_DESCRIPTOR) \
									+ (NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR))


extern CONTROL_XFER ControlData;
extern IO_REQUEST ioRequest;
extern EPPFLAGS bEPPflags;

TOTAL_CONFIGURATION_DESCRIPTOR Total_Configuration_Descriptor=
{
    9,
    2,
    CONFIG_DESCRIPTOR_LENGTH,
	1,
	1,
    0,
	0x80,
	0x32,

    sizeof(USB_INTERFACE_DESCRIPTOR),
    USB_INTERFACE_DESCRIPTOR_TYPE,
    0,
    0,
	NUM_ENDPOINTS,
	8,
	6,	//interface subclass1=RBC,2=SFF,3=QIC,4=UFI,5=SFF,6=SCSI
	0x50,//bulk 0nly
	0,

			 //Bulk-in Endpoint
			 0x07,              //length of this desc.   
			 0x05,              //ENDPOINT descriptor
			 0x82,              //address (IN) Endpoint 4 84
			 0x02,              //attributes  (BULK)    
			 0x0040,         //max packet size (64)
			 0x0,              //Does not apply to Bulk endpoints

			 //Bulk-out Endpoint
			 0x07,              //length of this desc.   
			 0x05,              //ENDPOINT descriptor 
			 0x02,              //address (OUT) Endpoint 5 05
			 0x02,              //attributes  (BULK)
			 0x0040,         //max packet size (64)
			 0x0             //Does not apply to Bulk endpoints

};

 USB_DEVICE_DESCRIPTOR DeviceDescr =
{
    	0x12,			//0x12
			 0x01,              //DEVICE descriptor
			 0x0100,         //spec rev level (BCD) 1.0
			 0x00,              //device class
			 0x00,              //device subclass
			 0x00,              //device protocol
			 0x10,              //max packet size
			 0x0584,         //National's vendor ID
			 0x0001,         //National's product ID  
			 0x0100,         //National's revision ID  
			 0,                 //index of manuf. string   
			 0,                 //index of prod.  string  
			 0,                 //index of ser. # string   
			 0x01               //number of configs. 	
};

USB_CONFIGURATION_DESCRIPTOR ConfigDescr =
{
    9,
    2,
    CONFIG_DESCRIPTOR_LENGTH,
	1,
	1,
    0,
	0x80,
	0x32
};

USB_INTERFACE_DESCRIPTOR InterfaceDescr =
{
    sizeof(USB_INTERFACE_DESCRIPTOR),
    USB_INTERFACE_DESCRIPTOR_TYPE,
    0,
    0,
	NUM_ENDPOINTS,
	8,
	6,	//interface subclass6=SCSI
	0x50,//bulk 0nly
	0
};

USB_ENDPOINT_DESCRIPTOR EP1_TXDescr =
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0x82,
	USB_ENDPOINT_TYPE_INTERRUPT,
	EP1_PACKET_SIZE,
	10
};

USB_ENDPOINT_DESCRIPTOR EP1_RXDescr =
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0x2,
	USB_ENDPOINT_TYPE_INTERRUPT,
	EP1_PACKET_SIZE,
	10
};

USB_ENDPOINT_DESCRIPTOR EP2_TXDescr =
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0x82,
	USB_ENDPOINT_TYPE_BULK,
	EP2_PACKET_SIZE,
	10
};

USB_ENDPOINT_DESCRIPTOR EP2_RXDescr =
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0x2,
	USB_ENDPOINT_TYPE_BULK,
	EP2_PACKET_SIZE,
	10
};

/*
   //*************************************************************************
   // USB Protocol Layer
   //*************************************************************************
*/

void reserved(void)
{
	stall_ep0();
}

/*
   //*************************************************************************
   // USB standard device requests
   //*************************************************************************
*/

void get_status(void)
{
	unsigned char endp, txdat[2];
	unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
	unsigned char c;

	if (bRecipient == USB_RECIPIENT_DEVICE) {
		if(bEPPflags.bits.remote_wakeup == 1)
			txdat[0] = 3;
		else
			txdat[0] = 1;
		txdat[1]=0;
		single_transmit(txdat, 2);
	} else if (bRecipient == USB_RECIPIENT_INTERFACE) {
		txdat[0]=0;
		txdat[1]=0;
		single_transmit(txdat, 2);
	} else if (bRecipient == USB_RECIPIENT_ENDPOINT) {
		endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
		if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
			c = D12_SelectEndpoint(endp*2 + 1);	/* Control-in */
		else
			c = D12_SelectEndpoint(endp*2);	/* Control-out */
		if(c & D12_STALL)
			txdat[0] = 1;
		else
			txdat[0] = 0;
		txdat[1] = 0;
		single_transmit(txdat, 2);
	} else
		stall_ep0();
}

void clear_feature(void)
{
	unsigned char endp;
	unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;

	if (bRecipient == USB_RECIPIENT_DEVICE
		&& ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) {
		DISABLE;
		bEPPflags.bits.remote_wakeup = 0;
		ENABLE;
		single_transmit(0, 0);
	}
	else if (bRecipient == USB_RECIPIENT_ENDPOINT
		&& ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL) {
		endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
		if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
			/* clear TX stall for IN on EPn. */
			D12_SetEndpointStatus(endp*2 + 1, 0);
		else
			/* clear RX stall for OUT on EPn. */
			D12_SetEndpointStatus(endp*2, 0);
		single_transmit(0, 0);
	} else
		stall_ep0();
}

void set_feature(void)
{
	unsigned char endp;
	unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;

	if (bRecipient == USB_RECIPIENT_DEVICE
		&& ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) {
		DISABLE;
		bEPPflags.bits.remote_wakeup = 1;
		ENABLE;
		single_transmit(0, 0);
	}
	else if (bRecipient == USB_RECIPIENT_ENDPOINT
		&& ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL) {
		endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
		if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
			/* clear TX stall for IN on EPn. */
			D12_SetEndpointStatus(endp*2 + 1, 1);
		else
			/* clear RX stall for OUT on EPn. */
			D12_SetEndpointStatus(endp*2, 1);
		single_transmit(0, 0);
	} else
		stall_ep0();
}

void set_address(void)
{
	D12_SetAddressEnable((unsigned char)(ControlData.DeviceRequest.wValue &
		DEVICE_ADDRESS_MASK), 1);
	single_transmit(0, 0);
}

void get_descriptor(void)
{
	unsigned char bDescriptor = MSB(ControlData.DeviceRequest.wValue);
	unsigned char bLength = MSB(ControlData.DeviceRequest.wLength);
	char *temp;
	if (bDescriptor == USB_DEVICE_DESCRIPTOR_TYPE) {
		temp=(char *)&DeviceDescr;
		Uart_Printf("%x %x %x %x %x %x %x %x %x",temp[0],temp[1],temp[2],temp[3],temp[4],temp[5],temp[6],temp[7],temp[8]);
		code_transmit((unsigned char *)&DeviceDescr, sizeof(USB_DEVICE_DESCRIPTOR));
	} else if (bDescriptor == USB_CONFIGURATION_DESCRIPTOR_TYPE) {
		temp=(char *)&ConfigDescr;
		Uart_Printf("%x %x %x %x %x %x %x %x %x",temp[0],temp[1],temp[2],temp[3],temp[4],temp[5],temp[6],temp[7],temp[8]);
		code_transmit((unsigned char *)&Total_Configuration_Descriptor, CONFIG_DESCRIPTOR_LENGTH);
	} else
		stall_ep0();
}
//CONFIG_DESCRIPTOR_LENGTH
void get_configuration(void)
{
	unsigned char c = bEPPflags.bits.configuration;

	single_transmit(&c, 1);
}

void set_configuration(void)
{
	if (ControlData.DeviceRequest.wValue == 0) {
		/* put device in unconfigured state */
		DISABLE;
		bEPPflags.bits.configuration = 0;
		ENABLE;
		D12_SetEndpointEnable(0); /* Disable all endpoints but EPP0. *///init_unconfig
		single_transmit(0, 0);
		
	} else if (ControlData.DeviceRequest.wValue == 1) {
		/* Configure device */

		D12_SetEndpointEnable(0); /* Disable all endpoints but EPP0. //init_unconfig*/

		D12_SetEndpointEnable(1); /* Enable generic/iso endpoints. init_config*/

		single_transmit(0, 0);
	
		DISABLE;
		bEPPflags.bits.configuration = 1;
		ENABLE;
	} else
		stall_ep0();
}

void get_interface(void)
{
	unsigned char txdat = 0;        /* Only/Current interface = 0 */
	single_transmit(&txdat, 1);
}

void set_interface(void)
{
	if (ControlData.DeviceRequest.wValue == 0 && ControlData.DeviceRequest.wIndex == 0)
		single_transmit(0, 0);
	else
		stall_ep0();
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲乱码国产乱码精品精98午夜| 久久这里只有精品视频网| 日韩黄色小视频| 欧美国产日韩一二三区| 欧美性受极品xxxx喷水| 国产黄色精品网站| 亚洲资源在线观看| 中文字幕一区在线| 欧美v国产在线一区二区三区| 在线观看国产精品网站| 大胆亚洲人体视频| 老司机免费视频一区二区| 一二三区精品福利视频| 国产亚洲欧美日韩在线一区| 欧美日本免费一区二区三区| 91在线精品一区二区三区| 国内外精品视频| 免费在线观看成人| 亚洲最新视频在线播放| 国产精品女同一区二区三区| 欧美一区午夜精品| 欧美日韩一区二区三区免费看| 成人国产亚洲欧美成人综合网| 另类成人小视频在线| 天天综合色天天综合色h| 一区二区三区四区在线播放| 国产精品私人影院| 久久久精品2019中文字幕之3| 欧美一区二区精美| 欧美精品少妇一区二区三区 | 色久优优欧美色久优优| 国产一二三精品| 久久99国产精品久久| 日韩不卡手机在线v区| 亚洲国产一区二区三区| 一区二区三区资源| 亚洲视频一二区| 久久精品欧美一区二区三区麻豆| 7777精品伊人久久久大香线蕉 | 在线亚洲+欧美+日本专区| 国产福利一区二区三区在线视频| 蜜桃传媒麻豆第一区在线观看| 亚洲午夜私人影院| 亚洲亚洲精品在线观看| 亚洲视频在线一区二区| 欧美国产禁国产网站cc| 久久久噜噜噜久噜久久综合| 精品欧美一区二区在线观看| 欧美一卡在线观看| 欧美老年两性高潮| 欧美日韩综合在线免费观看| 色狠狠综合天天综合综合| 91在线视频免费91| 久久se精品一区二区| 久久精品72免费观看| 蜜桃av一区二区三区| 久久9热精品视频| 激情伊人五月天久久综合| 老司机一区二区| 久久99国产精品麻豆| 国产美女精品人人做人人爽| 国产美女主播视频一区| 国产成人在线观看免费网站| 国产一区二区免费视频| 久久国产欧美日韩精品| 久久99国产精品免费| 国产剧情在线观看一区二区| 国产福利91精品| 国产凹凸在线观看一区二区| 成人免费毛片嘿嘿连载视频| k8久久久一区二区三区| 99久久99久久免费精品蜜臀| 91视频在线观看免费| 欧美在线观看视频一区二区三区| 在线观看免费亚洲| 91麻豆精品国产91久久久使用方法| 欧美一级二级在线观看| 久久综合99re88久久爱| 国产精品久久久久久亚洲伦 | 国产乱人伦精品一区二区在线观看| 久久精品国产99国产| 国产在线播放一区三区四| 国产成人精品www牛牛影视| 精品无人区卡一卡二卡三乱码免费卡| 韩国毛片一区二区三区| 成人综合婷婷国产精品久久蜜臀 | 91视频www| 色狠狠av一区二区三区| 7777精品伊人久久久大香线蕉完整版 | 91精品国产入口| 久久亚洲二区三区| 亚洲色图在线播放| 日韩精品每日更新| 久久99精品国产| 成人久久视频在线观看| 99re热视频这里只精品| 91精品国产欧美一区二区18| 国产欧美日韩在线看| 夜夜嗨av一区二区三区中文字幕 | 亚洲天堂久久久久久久| 日韩中文字幕av电影| 国产精品白丝av| 欧美无砖砖区免费| 久久久久久电影| 亚洲国产成人porn| 国产99一区视频免费| 欧美日韩综合在线| 中文字幕精品一区| 奇米色一区二区| 国产一区在线观看视频| 欧美三级日本三级少妇99| 久久先锋影音av| 亚洲国产精品久久不卡毛片| 国产一区二区精品在线观看| 在线观看精品一区| 国产精品乱人伦一区二区| 一区二区三区精密机械公司| 精品制服美女丁香| 在线成人高清不卡| 亚洲视频图片小说| 国内外精品视频| 91精品久久久久久久91蜜桃| 综合欧美一区二区三区| 国产成人亚洲精品青草天美| 欧美女孩性生活视频| 亚洲另类在线视频| 国产电影一区二区三区| 欧美一区二区三区不卡| 亚洲图片有声小说| 99久久国产综合色|国产精品| 久久精品免视看| 精品在线亚洲视频| 欧美影院午夜播放| 亚洲精品视频观看| av电影天堂一区二区在线| 亚洲一区二区三区三| av午夜一区麻豆| 国产日韩欧美一区二区三区乱码 | 欧美日韩dvd在线观看| 亚洲欧洲日韩一区二区三区| 亚洲网友自拍偷拍| 国产99一区视频免费| www日韩大片| 精品一区二区三区久久久| 91精品国产高清一区二区三区蜜臀| 亚洲国产成人高清精品| 欧美亚洲愉拍一区二区| 一区二区三区精品视频| gogogo免费视频观看亚洲一| 国产亚洲一二三区| 老司机精品视频导航| 欧美一级欧美三级在线观看| 日韩国产高清在线| 91精品国产欧美一区二区成人 | 亚洲精品一二三| 91麻豆视频网站| 亚洲日本丝袜连裤袜办公室| 99久久综合99久久综合网站| 亚洲国产高清aⅴ视频| 国产成人av电影| 国产欧美一区二区三区沐欲 | 99视频超级精品| 中文字幕一区二区日韩精品绯色| 成人免费视频网站在线观看| 国产精品国产三级国产aⅴ入口 | 亚洲日本免费电影| 在线观看av不卡| 日韩中文字幕亚洲一区二区va在线| 欧美一区二区三区系列电影| 免费日韩伦理电影| 久久蜜桃av一区二区天堂 | 在线看日本不卡| 香港成人在线视频| 日韩视频免费观看高清完整版| 美女视频一区二区三区| 精品少妇一区二区三区| 日本美女一区二区| 欧美电影精品一区二区| 成人深夜福利app| 亚洲一区二区三区爽爽爽爽爽| 欧美丰满美乳xxx高潮www| 免费观看91视频大全| 久久久精品国产99久久精品芒果| 91在线高清观看| 首页国产欧美久久| 久久久精品免费观看| 一本到高清视频免费精品| 婷婷丁香久久五月婷婷| 国产日韩欧美在线一区| 欧美视频自拍偷拍| 国产一区二区三区黄视频| 亚洲欧美电影一区二区| 在线看一区二区| 久久精品av麻豆的观看方式| 一区二区成人在线观看| 日韩欧美一二区| 99国内精品久久| 久久精品国产亚洲5555| 1000精品久久久久久久久| 欧美精品 国产精品|