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

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

?? chap_9.c

?? USB接口芯片D12在STC單片機(jī)上的驅(qū)動(dòng)開(kāi)發(fā)
?? 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:		2.0
   //
   //*************************************************************************
*/

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

#ifdef __C51__
#include <reg51.h>                /* special function register declarations   */
#else
#include <dos.h>
#endif

#include "epphal.h"
#include "d12ci.h"
#include "mainloop.h"
#include "usb100.h"
#include "chap_9.h"

#define NUM_ENDPOINTS	4

#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 idata ioRequest;
extern EPPFLAGS bEPPflags;

code USB_DEVICE_DESCRIPTOR DeviceDescr =
{
	sizeof(USB_DEVICE_DESCRIPTOR),
    USB_DEVICE_DESCRIPTOR_TYPE,
    SWAP(0x1001),
    USB_CLASS_CODE_TEST_CLASS_DEVICE,
    0, 0,
	EP0_PACKET_SIZE,
	SWAP(0x471),
	SWAP(0x888),
	SWAP(0x0100),
    1, 2, 0,
    1
};

code USB_HID_DESCRIPTOR HIDDscr = 
{
		sizeof(USB_HID_DESCRIPTOR),//db	09h				;; length
		USB_HID_DESCRIPTOR_TYPE, //db	21h				;; type: HID
		USB_HID_CLASS, //dw	1001h				;; release: HID class rev 1.1
		USB_HID_CODE,	//db	00h				;; country code (USA)
		USB_HID_CLASS_NUMBER,	//db	01h; number of HID class descriptors to follow
		USB_HID_DESC_TYPE,	//db	22h				;; report descriptor type (HID)
		USB_HID_DESC_LEN,	//db	(ReportDscrEnd-ReportDscr) 	;; length of HID descriptor
};

code USB_HID_QUALIFIER HIDqua = 
{
		sizeof(USB_HID_QUALIFIER),
		6, //db	21h				;; type: HID
		0x0200, //dw	1001h				;; release: HID class rev 1.1
		0x09,	//db	00h				;; country code (USA)
		0,	//001h; number of HID class descriptors to follow
		16,	//db	22h				;; report descriptor type (HID)
		1,	//db	(ReportDscrEnd-ReportDscr) 	;; length of HID descriptor
		0,
};

code USB_CONFIGURATION_DESCRIPTOR ConfigDescr =
{
    sizeof(USB_CONFIGURATION_DESCRIPTOR),
    USB_CONFIGURATION_DESCRIPTOR_TYPE,
    SWAP(CONFIG_DESCRIPTOR_LENGTH),
	1,
	1,
       0,
	0x80,		//bus power
	0x3c		//max power is 120ma
};

code USB_INTERFACE_DESCRIPTOR InterfaceDescr =
{
    sizeof(USB_INTERFACE_DESCRIPTOR),
    USB_INTERFACE_DESCRIPTOR_TYPE,
    0,
    0,
	NUM_ENDPOINTS,
	USB_CLASS_CODE_HID_CLASS_DEVICE,
	USB_SUBCLASS_CODE_HID_CLASS_D12,
	USB_PROTOCOL_CODE_HID_CLASS_D12,
	0
};

code USB_ENDPOINT_DESCRIPTOR EP1_TXDescr =
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0x81,
	USB_ENDPOINT_TYPE_INTERRUPT,
	SWAP(EP1_PACKET_SIZE),
	10
};

code USB_ENDPOINT_DESCRIPTOR EP1_RXDescr =
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0x1,
	USB_ENDPOINT_TYPE_INTERRUPT,
	SWAP(EP1_PACKET_SIZE),
	10
};

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

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

#ifndef __C51__
extern unsigned char far *dmaBuffer;
#endif
/*
   //*************************************************************************
   // 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)
{
#define DEBUG
	D12_SetAddressEnable((unsigned char)(ControlData.DeviceRequest.wValue &
		DEVICE_ADDRESS_MASK), 1);
	#ifdef DEBUG
		printf("\nset address is 0x%bx.", (unsigned char)(ControlData.DeviceRequest.wValue & DEVICE_ADDRESS_MASK));
	#endif
	single_transmit(0, 0);
}

void get_descriptor(void)
{
#define DEBUG
	unsigned char bDescriptor = MSB(ControlData.DeviceRequest.wValue);

	switch(bDescriptor)
	{
		case USB_DEVICE_DESCRIPTOR_TYPE:
			code_transmit((unsigned char code *)&DeviceDescr, sizeof(USB_DEVICE_DESCRIPTOR));
			break;
		case USB_CONFIGURATION_DESCRIPTOR_TYPE:
			code_transmit((unsigned char code *)&ConfigDescr, CONFIG_DESCRIPTOR_LENGTH);
			break;
		case USB_STRING_DESCRIPTOR_TYPE:
			code_transmit((unsigned char code *)&HIDDscr, sizeof(USB_HID_DESCRIPTOR));
			break;
		case USB_DEVICE_QUALIFIER:
			code_transmit((unsigned char code *)&HIDqua, sizeof(USB_HID_QUALIFIER));
			break;
		default:
			#ifdef DEBUG
				printf("\nbDescriptor = 0x%bx", bDescriptor);
			#endif
			stall_ep0();
			break;
	}
}

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 */
		single_transmit(0, 0);
		DISABLE;
		bEPPflags.bits.configuration = 0;
		ENABLE;
		init_unconfig();
	} else if (ControlData.DeviceRequest.wValue == 1) {
		/* Configure device */
		single_transmit(0, 0);

		init_unconfig();
		init_config();
		
		DISABLE;
		bEPPflags.bits.configuration = 1;
		printf("\n\n------------------- usb device configuration was done.-------------------\n\n");
		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一区二区三区免费野_久草精品视频
欧美日韩黄色一区二区| 欧美精品色综合| 日韩欧美一级特黄在线播放| 一区二区三区四区不卡在线| 高清成人在线观看| 国产性做久久久久久| 日日噜噜夜夜狠狠视频欧美人 | 中文字幕日韩一区二区| 国产91精品精华液一区二区三区| 亚洲色图都市小说| 99视频一区二区三区| 中文字幕一区二区三区av| 偷窥国产亚洲免费视频| 99久久免费国产| 中文字幕日本不卡| 9色porny自拍视频一区二区| 亚洲精品ww久久久久久p站| 99精品久久免费看蜜臀剧情介绍| 国产三级精品三级| 成人aa视频在线观看| 成人免费在线视频| 色狠狠桃花综合| 日韩va欧美va亚洲va久久| 日韩欧美专区在线| 福利一区二区在线观看| 丝瓜av网站精品一区二区| 欧美一级xxx| 国产一区二区视频在线播放| 中文字幕欧美区| 在线视频一区二区三| 婷婷综合久久一区二区三区| 91精品国产入口| 懂色av一区二区三区蜜臀| 亚洲欧美激情一区二区| 制服丝袜亚洲色图| 国产福利不卡视频| 一区二区在线观看免费| 337p粉嫩大胆噜噜噜噜噜91av | 国产精品无人区| 欧美亚洲高清一区二区三区不卡| 午夜电影网亚洲视频| 欧美精品一区男女天堂| 色狠狠一区二区| 韩国三级电影一区二区| 亚洲一区二区综合| 精品乱人伦小说| 91免费视频观看| 国产一区二区伦理片| 亚洲综合免费观看高清完整版| 色激情天天射综合网| 国产福利一区二区| 亚洲午夜免费视频| 中文字幕中文乱码欧美一区二区| 欧美精品1区2区| 成熟亚洲日本毛茸茸凸凹| 蜜桃在线一区二区三区| ...中文天堂在线一区| 欧美日韩在线亚洲一区蜜芽| 成人妖精视频yjsp地址| 天天综合天天做天天综合| 亚洲欧美综合在线精品| 久久综合狠狠综合久久激情| 欧美三级日韩三级| 日本韩国欧美在线| 国产一区二区三区免费| 美腿丝袜亚洲色图| 亚洲一区二区在线免费看| 国产日韩欧美精品一区| 久久婷婷成人综合色| 欧美日韩成人综合| 国产高清亚洲一区| 韩国午夜理伦三级不卡影院| 亚洲国产一区二区视频| 一区二区欧美国产| 中文字幕日韩精品一区| 国产亚洲欧美日韩日本| 久久精品亚洲精品国产欧美kt∨| 欧美一区二区三区啪啪| 在线成人免费视频| 欧美性大战久久久| 色一情一伦一子一伦一区| 91麻豆精品在线观看| 成人午夜在线视频| 久久精品国产免费| 老司机午夜精品99久久| 日韩国产欧美在线视频| 免费人成精品欧美精品| 午夜电影久久久| 香蕉久久夜色精品国产使用方法 | 免费人成在线不卡| 日本不卡中文字幕| 日韩高清不卡在线| 日本美女一区二区三区视频| 久久99国产精品久久99| 免费观看在线综合色| 亚洲午夜免费视频| 久久精品理论片| 极品少妇一区二区三区精品视频 | 蜜桃视频第一区免费观看| 午夜a成v人精品| 捆绑紧缚一区二区三区视频| 美脚の诱脚舐め脚责91 | 国产麻豆成人传媒免费观看| 国产精品一区一区| 国产成人精品免费在线| 91丨国产丨九色丨pron| 91玉足脚交白嫩脚丫在线播放| 91麻豆精品视频| 欧美久久久影院| 日韩精品一区国产麻豆| 国产精品看片你懂得| 亚洲色图在线播放| 亚洲午夜免费视频| 激情都市一区二区| 成人精品电影在线观看| 9色porny自拍视频一区二区| 欧美在线视频不卡| 91精品国产欧美一区二区| 欧美tickling网站挠脚心| 国产三级精品视频| 婷婷国产v国产偷v亚洲高清| 精品综合久久久久久8888| 国产麻豆一精品一av一免费| 欧美影院一区二区| 日韩欧美一级精品久久| 综合色中文字幕| 日韩精品电影在线观看| 国产suv精品一区二区三区| 欧美日韩国产中文| 久久伊人中文字幕| 偷拍自拍另类欧美| 粉嫩一区二区三区在线看| 色88888久久久久久影院野外| 久久综合999| 亚洲精品视频免费看| 国内外成人在线视频| 色噜噜久久综合| 精品日韩欧美一区二区| 亚洲一二三专区| 国产sm精品调教视频网站| 91精品国产欧美一区二区成人| 欧美国产一区在线| 亚洲成a人v欧美综合天堂| 国产成人精品网址| 欧美精品视频www在线观看| 国产精品久久久久久福利一牛影视 | 欧美午夜免费电影| 国产午夜精品一区二区三区嫩草 | 国产精品亚洲人在线观看| 337p亚洲精品色噜噜| 国产精品国产a| 国产69精品一区二区亚洲孕妇| 欧美日韩黄色一区二区| 国产精品三级久久久久三级| 国产一区不卡精品| 91精品国产91久久久久久一区二区| 亚洲三级在线看| 国产剧情一区二区三区| 欧美色图在线观看| 有码一区二区三区| 国产91精品入口| 国产午夜精品一区二区三区嫩草 | 午夜精品视频在线观看| 日本韩国一区二区三区视频| 国产精品毛片大码女人| 成人高清av在线| 久久影视一区二区| 国模少妇一区二区三区| 91麻豆精品国产自产在线观看一区| 亚洲人xxxx| 在线亚洲人成电影网站色www| 欧美国产综合色视频| 不卡的av电影在线观看| 国产性色一区二区| 久久精品国产亚洲一区二区三区 | 狠狠狠色丁香婷婷综合久久五月| 欧美日韩精品欧美日韩精品一综合| 亚洲精品成人天堂一二三| a在线播放不卡| 亚洲嫩草精品久久| 99久久精品免费看| 18欧美乱大交hd1984| 91蝌蚪porny成人天涯| 1区2区3区国产精品| 在线观看亚洲精品| 亚洲夂夂婷婷色拍ww47| 成人综合婷婷国产精品久久免费| 中文字幕av一区二区三区免费看| 国产美女主播视频一区| 国产精品欧美一级免费| 成人免费高清在线观看| 亚洲欧美欧美一区二区三区| 99视频精品在线| 中文字幕欧美一| 不卡的av在线| 一区二区三区加勒比av| 欧美高清dvd| 男人的天堂久久精品| 久久久噜噜噜久噜久久综合| 日韩黄色一级片|