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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chap_9.c

?? PDIUSBD12固件源碼
?? C
字號:
#include <stdio.h>
#include <string.h>

#include <reg552.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;

//設備描述符
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,
	0xe0,
	0x32
};

//接口描述符
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
};

//端點描述符
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
   //*************************************************************************
*/

//獲取設備狀態
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) {//清除端點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) {//設置端點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);

	if (bDescriptor == USB_DEVICE_DESCRIPTOR_TYPE) {//獲取設備描述符
		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();
}

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

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

		init_unconfig();
		init_config();
		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();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
26uuu精品一区二区三区四区在线| 一区二区三区资源| 国产成人在线免费观看| 日本一区二区久久| 99国产精品久久久久久久久久久 | 亚洲精品一区在线观看| 国产在线精品视频| 国产乱子轮精品视频| 久久人人97超碰com| 成人永久免费视频| 日韩美女视频一区二区| 欧美亚洲国产一区二区三区| 首页国产丝袜综合| 精品动漫一区二区三区在线观看| 国产成人aaa| 亚洲另类一区二区| 欧美电影一区二区| 国产在线精品国自产拍免费| 国产日韩精品一区二区三区 | 日韩美女主播在线视频一区二区三区| 精品在线观看视频| 国产精品的网站| 欧美亚洲一区三区| 久久精品国产精品青草| 国产欧美综合色| 色婷婷av一区| 蜜臀久久99精品久久久画质超高清| 久久久777精品电影网影网| 白白色 亚洲乱淫| 爽好多水快深点欧美视频| 久久综合色天天久久综合图片| www.激情成人| 丝袜诱惑制服诱惑色一区在线观看 | 日本福利一区二区| 免费在线观看成人| 久久精品99久久久| 亚洲欧洲性图库| 欧美一区二区在线免费播放| 国产传媒日韩欧美成人| 亚洲人成精品久久久久久| 欧美一区二区久久久| 成人免费毛片app| 婷婷开心激情综合| 欧美高清在线视频| 91麻豆精品国产91久久久使用方法| 国产成人av一区二区三区在线 | 色吧成人激情小说| 精品一区二区三区不卡| 亚洲欧美日韩中文字幕一区二区三区| 777奇米四色成人影色区| 成人爱爱电影网址| 日本不卡在线视频| 中文字幕一区二区三区av| 欧美一区二区三区精品| 99久久精品国产观看| 看电影不卡的网站| 一个色综合av| 国产视频一区在线播放| 欧美精品成人一区二区三区四区| 成人网在线播放| 免费看黄色91| 亚洲黄一区二区三区| 久久久久青草大香线综合精品| 欧美视频完全免费看| 国产精品一区二区久久精品爱涩 | 亚洲宅男天堂在线观看无病毒| 欧美一区午夜视频在线观看| 97成人超碰视| 国模一区二区三区白浆| 午夜电影网一区| 亚洲欧美日韩中文播放| 国产欧美日韩不卡免费| 日韩午夜在线观看视频| 欧洲激情一区二区| 成a人片国产精品| 韩国三级在线一区| 首页国产欧美久久| 亚洲激情欧美激情| 1区2区3区精品视频| 久久婷婷一区二区三区| 日韩一区二区在线观看视频播放| 在线亚洲人成电影网站色www| 国产69精品久久久久毛片| 激情另类小说区图片区视频区| 午夜视频在线观看一区| 亚洲欧美日韩小说| 国产精品国产精品国产专区不蜜| 欧美精品一区二区三区高清aⅴ| 欧美丰满美乳xxx高潮www| 欧美主播一区二区三区| 91网页版在线| eeuss鲁片一区二区三区| 国产精品99久久久久久久vr| 久久国产麻豆精品| 青青草国产精品97视觉盛宴| 亚洲不卡av一区二区三区| 樱花草国产18久久久久| 亚洲欧美一区二区三区极速播放| 欧美国产亚洲另类动漫| 久久精品网站免费观看| 精品国产乱码久久久久久影片| 91精品国产综合久久久久久久| 欧美日韩三级视频| 欧美亚洲丝袜传媒另类| 中文字幕在线观看一区| 国产天堂亚洲国产碰碰| 国产日产欧产精品推荐色 | 精品电影一区二区三区| 欧美成人猛片aaaaaaa| 欧美一区二区女人| 91麻豆精品国产91久久久久| 欧美理论在线播放| 6080yy午夜一二三区久久| 7777精品伊人久久久大香线蕉完整版 | 欧美午夜电影一区| 色88888久久久久久影院野外| 91视频你懂的| 色丁香久综合在线久综合在线观看| 色婷婷亚洲精品| 在线精品视频小说1| 91激情五月电影| 欧美午夜一区二区三区免费大片| 欧美性猛交xxxxxx富婆| 欧美日韩精品一区视频| 欧美一区二区视频在线观看2020| 69久久99精品久久久久婷婷 | 久久精品一区二区三区不卡牛牛 | 婷婷久久综合九色国产成人| 日韩影视精彩在线| 丝袜国产日韩另类美女| 麻豆国产一区二区| 国产精品一区二区久激情瑜伽| 粉嫩高潮美女一区二区三区| 中文字幕精品三区| 国产欧美日本一区二区三区| 国产精品大尺度| 一区二区激情视频| 日韩在线一区二区| 久草中文综合在线| 风间由美中文字幕在线看视频国产欧美| 岛国av在线一区| 91蝌蚪porny成人天涯| 欧美日韩一区三区四区| 日韩午夜在线影院| 亚洲国产经典视频| 一区二区三区在线看| 日韩和欧美一区二区| 国产呦精品一区二区三区网站 | 国产一区二区三区精品视频| 成人av电影免费在线播放| 91黄色激情网站| 欧美一区二区国产| 国产欧美一区二区三区沐欲| 亚洲欧美日韩中文字幕一区二区三区| 亚洲国产中文字幕在线视频综合| 免费在线欧美视频| 大美女一区二区三区| 欧美性色aⅴ视频一区日韩精品| 日韩免费电影一区| 国产精品成人一区二区三区夜夜夜 | 肉丝袜脚交视频一区二区| 狠狠v欧美v日韩v亚洲ⅴ| 93久久精品日日躁夜夜躁欧美| 欧美日韩国产系列| 久久久久久9999| 一区二区三区国产豹纹内裤在线| 免费观看30秒视频久久| zzijzzij亚洲日本少妇熟睡| 51午夜精品国产| 国产精品看片你懂得| 日欧美一区二区| 国产91精品露脸国语对白| 欧美老人xxxx18| 日本一区二区三区久久久久久久久不| 色综合一个色综合亚洲| 欧美猛男超大videosgay| 国产丝袜欧美中文另类| 亚洲aaa精品| 国产91精品一区二区麻豆网站| 欧美三级日韩三级| 国产欧美一区二区在线观看| 首页综合国产亚洲丝袜| 不卡的av网站| 日韩免费观看2025年上映的电影| 亚洲欧美区自拍先锋| 国产综合色精品一区二区三区| 在线观看成人小视频| 国产亚洲精品bt天堂精选| 亚洲成人黄色小说| 盗摄精品av一区二区三区| 欧美一级精品大片| 日韩毛片精品高清免费| 国产在线精品国自产拍免费| 欧美日韩免费电影| 中文字幕五月欧美| 国产一区三区三区| 在线播放91灌醉迷j高跟美女| 最好看的中文字幕久久| 国产精品综合在线视频| 91精品国产综合久久香蕉麻豆|