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

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

?? chap_9.c

?? AT89C52,PDIUSBD12固件編程
?? C
字號(hào):
#include <stdio.h>
#include <string.h>

#include <reg51.h>                /* special function register declarations   */

#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;

//設(shè)備描述符
code USB_DEVICE_DESCRIPTOR DeviceDescr =
{
	sizeof(USB_DEVICE_DESCRIPTOR),
    USB_DEVICE_DESCRIPTOR_TYPE,
    SWAP(0x0110),
    USB_CLASS_CODE_TEST_CLASS_DEVICE,
    0, 0,
	EP0_PACKET_SIZE,
	SWAP(0x0471),
	SWAP(0x0666),
	SWAP(0x0100),
    0, 0, 0,
	1
};

//配置描述符
code USB_CONFIGURATION_DESCRIPTOR ConfigDescr =
{
    sizeof(USB_CONFIGURATION_DESCRIPTOR),
    USB_CONFIGURATION_DESCRIPTOR_TYPE,
    SWAP(CONFIG_DESCRIPTOR_LENGTH),
	1,
	1,
    0,
	0xa0,
	0x1
};

//接口描述符
code USB_INTERFACE_DESCRIPTOR InterfaceDescr =
{
    sizeof(USB_INTERFACE_DESCRIPTOR),
    USB_INTERFACE_DESCRIPTOR_TYPE,
    0,
    0,
	NUM_ENDPOINTS,
	USB_CLASS_CODE_TEST_CLASS_DEVICE,
	USB_SUBCLASS_CODE_TEST_CLASS_D12,
	USB_PROTOCOL_CODE_TEST_CLASS_D12,
	0
};

//端點(diǎn)描述符
code USB_ENDPOINT_DESCRIPTOR EP1_TXDescr =
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0x81,
	USB_ENDPOINT_TYPE_INTERRUPT,
	SWAP(EP1_PACKET_SIZE),
	1
};

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

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
};

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

void reserved(void)
{
	stall_ep0();
}

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

//獲取設(shè)備狀態(tài)
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)//獲取遠(yuǎn)程喚醒狀態(tài)
			txdat[0] = 3;
		else
			txdat[0] = 1;
		txdat[1]=0;
		single_transmit(txdat, 2);
	} else if (bRecipient == USB_RECIPIENT_INTERFACE) {//獲取接口狀態(tài)
		txdat[0]=0;
		txdat[1]=0;
		single_transmit(txdat, 2);
	} else if (bRecipient == USB_RECIPIENT_ENDPOINT) {//獲取端點(diǎn)狀態(tài)
		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) {//清除遠(yuǎn)程喚醒功能
		DISABLE;
		bEPPflags.bits.remote_wakeup = 0;
		ENABLE;
		single_transmit(0, 0);
	}
	else if (bRecipient == USB_RECIPIENT_ENDPOINT
		&& ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL) {//清除端點(diǎn)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();
}

//特性設(shè)置
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) {//設(shè)置遠(yuǎn)程喚醒功能
		DISABLE;
		bEPPflags.bits.remote_wakeup = 1;
		ENABLE;
		single_transmit(0, 0);
	}
	else if (bRecipient == USB_RECIPIENT_ENDPOINT
		&& ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL) {//設(shè)置端點(diǎn)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();
}

//設(shè)置地址
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);

	if (bDescriptor == USB_DEVICE_DESCRIPTOR_TYPE) {//獲取設(shè)備描述符
		code_transmit((unsigned char code *)&DeviceDescr, sizeof(USB_DEVICE_DESCRIPTOR));
	} else if (bDescriptor == USB_CONFIGURATION_DESCRIPTOR_TYPE) {//獲取配置描述符
		code_transmit((unsigned char code *)&ConfigDescr, CONFIG_DESCRIPTOR_LENGTH);
	} else
		stall_ep0();
}

//獲取配置狀態(tài)
void get_configuration(void)
{
	unsigned char c = bEPPflags.bits.configuration;
	single_transmit(&c, 1);
}

//設(shè)置配置狀態(tài)
void set_configuration(void)
{
	if (ControlData.DeviceRequest.wValue == 0) {
		//設(shè)備進(jìn)入未配置狀態(tài)
		single_transmit(0, 0);
		DISABLE;
		bEPPflags.bits.configuration = 0;
		ENABLE;
		init_unconfig();
	} else if (ControlData.DeviceRequest.wValue == 1) {
		//配置設(shè)備
		single_transmit(0, 0);

		init_unconfig();
		init_config();
		DISABLE;
		bEPPflags.bits.configuration = 1;
		ENABLE;
	} else
		stall_ep0();
}

//獲取接口狀態(tài)
void get_interface(void)
{
	unsigned char txdat = 0;        /* Only/Current interface = 0 */
	single_transmit(&txdat, 1);
}

//設(shè)置接口狀態(tài)
void set_interface(void)
{
	if (ControlData.DeviceRequest.wValue == 0 && ControlData.DeviceRequest.wIndex == 0)
		single_transmit(0, 0);
	else
		stall_ep0();
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
三级影片在线观看欧美日韩一区二区| 亚洲6080在线| 成人黄色av网站在线| 国产精品你懂的在线| www.av精品| 亚洲一区二区三区视频在线 | 国产一区二区按摩在线观看| 精品国产网站在线观看| 美女高潮久久久| 中文字幕欧美三区| 色哟哟国产精品| 午夜视频一区在线观看| 欧美成人综合网站| 精品亚洲成a人在线观看| 日韩精品中文字幕一区二区三区| 免费人成在线不卡| 欧美成人综合网站| 99国产欧美另类久久久精品| 亚洲三级在线免费观看| 欧美日韩免费一区二区三区| 久久精品国产精品青草| 日韩视频永久免费| 91小宝寻花一区二区三区| 亚洲一区二区av在线| 欧美xxxxx裸体时装秀| 成人app软件下载大全免费| 午夜精品福利一区二区蜜股av| 337p日本欧洲亚洲大胆色噜噜| 91在线播放网址| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产视频一区在线观看| 精品视频一区三区九区| 国产福利电影一区二区三区| 亚洲福利电影网| 国产亚洲自拍一区| 在线电影欧美成精品| 成人精品免费视频| 麻豆专区一区二区三区四区五区| 中文字幕日韩精品一区| 精品久久一区二区三区| 欧美艳星brazzers| av动漫一区二区| 狠狠色狠狠色综合系列| 亚洲成人精品在线观看| 中文字幕在线观看一区二区| 日韩精品一区二区三区三区免费| 99久久久无码国产精品| 国产精品一区二区在线观看不卡 | 久久久久久久综合日本| av亚洲产国偷v产偷v自拍| 久久99最新地址| 亚洲成人精品一区| 一区二区高清视频在线观看| 国产精品久久一级| 久久久精品国产免费观看同学| 91精品国产综合久久香蕉的特点| 91麻豆国产福利精品| 成人一区二区三区视频在线观看| 麻豆成人久久精品二区三区红| 亚洲一区二区三区免费视频| 最近日韩中文字幕| 国产精品成人免费精品自在线观看| 日韩午夜在线播放| 欧美一区午夜视频在线观看| 欧美日韩午夜影院| 欧美偷拍一区二区| 色拍拍在线精品视频8848| 成人av在线播放网站| 国产精品白丝jk白祙喷水网站| 极品少妇xxxx精品少妇| 久久成人久久鬼色| 老司机精品视频线观看86| 青青草国产成人99久久| 午夜影视日本亚洲欧洲精品| 亚洲夂夂婷婷色拍ww47| 亚洲高清免费视频| 亚洲一区二区成人在线观看| 亚洲成人在线免费| 五月天激情综合| 视频一区二区欧美| 美国十次了思思久久精品导航| 激情综合一区二区三区| 国产一区二区三区av电影| 国产日韩欧美综合一区| 欧美大白屁股肥臀xxxxxx| 欧美大片在线观看一区二区| 欧美不卡一区二区三区四区| 精品国精品自拍自在线| 久久精品夜色噜噜亚洲aⅴ| 国产精品欧美综合在线| 一区二区三区资源| 天堂va蜜桃一区二区三区漫画版| 青青草成人在线观看| 国产美女在线观看一区| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 久久久久久久精| 国产精品网友自拍| 亚洲激情成人在线| 人人精品人人爱| 国产成人在线视频网站| 91啪九色porn原创视频在线观看| 欧美午夜精品久久久久久孕妇| 欧美一区日韩一区| 亚洲国产成人在线| 亚州成人在线电影| 麻豆国产欧美日韩综合精品二区 | 国产高清在线观看免费不卡| 91一区二区在线观看| 欧美日韩久久一区二区| 久久人人97超碰com| 亚洲另类色综合网站| 日韩电影在线免费看| 高清在线不卡av| 欧美浪妇xxxx高跟鞋交| 日本一区二区久久| 五月天久久比比资源色| 成人精品视频一区二区三区尤物| 欧美伊人久久久久久午夜久久久久| 精品国产免费一区二区三区四区 | 亚洲电影一级片| 国产精品一区在线观看乱码| av爱爱亚洲一区| 91精品欧美久久久久久动漫| 久久久久久电影| 日韩在线a电影| jvid福利写真一区二区三区| 欧美一级在线视频| 一区二区三区中文字幕在线观看| 精品一区二区久久| 欧美日韩国产中文| 欧美精品一区视频| 欧美韩日一区二区三区| 日本vs亚洲vs韩国一区三区二区| 国产伦精品一区二区三区视频青涩 | 91精品国产福利在线观看| 亚洲免费观看在线视频| 国产成人精品午夜视频免费| 欧美精品18+| 一区二区三区免费观看| 成人免费看片app下载| 精品久久久三级丝袜| 亚洲一区二区三区美女| av动漫一区二区| 亚洲国产经典视频| 国产一区二区在线电影| 日韩无一区二区| 日韩精品欧美成人高清一区二区| 日本高清免费不卡视频| 国产精品国产三级国产专播品爱网| 国产在线精品一区二区夜色| 91精品视频网| 男人操女人的视频在线观看欧美| 欧美色区777第一页| 亚洲理论在线观看| 99九九99九九九视频精品| 亚洲国产精品av| 成人免费看的视频| 久久综合给合久久狠狠狠97色69| 欧美aaaaaa午夜精品| 91精品国产麻豆国产自产在线| 天堂在线亚洲视频| 91精品国产福利在线观看| 日韩成人免费在线| 欧美一级欧美三级| 男女视频一区二区| 精品国产乱码久久久久久浪潮 | 蜜臀精品久久久久久蜜臀| 91精品国产综合久久精品麻豆| 亚洲h精品动漫在线观看| 欧美日韩精品一区二区在线播放| 亚洲一区二区三区四区五区黄| 在线免费观看不卡av| 亚洲午夜免费视频| 欧美人妖巨大在线| 麻豆91精品视频| www久久精品| 懂色一区二区三区免费观看| 久久久久久久久久久久久女国产乱 | 国产欧美日韩亚州综合| 成人免费视频caoporn| 亚洲免费观看高清在线观看| 在线观看一区二区视频| 日韩国产精品91| 日韩欧美国产精品| 国产·精品毛片| 成人欧美一区二区三区白人| 欧美在线你懂的| 男女男精品视频网| 国产婷婷色一区二区三区四区 | 粉嫩高潮美女一区二区三区| 亚洲视频一区在线| 精品视频色一区| 韩国v欧美v日本v亚洲v| 国产精品久久久久久户外露出| 色综合久久久久网| 免费日本视频一区| 国产精品理伦片| 色噜噜久久综合| 精东粉嫩av免费一区二区三区| 中文字幕欧美一|