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

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

?? chap_9.c

?? U盤(實際是USB SD卡讀卡器)的制作方案。 硬件構成:ATmega168+PDIUSBD12+SD 內附GCC源碼和原理圖。 開發環境是AvrStudio4.13 b528 + WinAVR
?? C
字號:
#include "CHAP_9.h"


static U8 USB_Remote_Wake;
static U8 USB_Config;

static U8  USB_Send_Descriptor_Flag;
static int send_remain;
static U8 *send_ptr;

//Language ID
unsigned char LANGUAGE_ID[4]={0x04,0x03,0x09,0x04};

//可以添加自己的信息,如果長度不是18字節,需修改第一字節的值 //內容必須是unicode碼
//You can add your own infomation here, the length of the array should be the same value of the first data
//The second data is not allowed modified
//The rest is yours
//The string must unicode string, not ASCII or others.
//Here is a example
//unsigned char sign name[42]=
//{42,0x03,'T',0x00,'h',0x00,'i',0x00,'s',0x00,' ','0x00,'i',0x00,'s',0x00,' ',0x00,'J',0x00,'a',0x00,'c',0x00,'k',0x00,''',0x00,'s',0x00,' ',0x00,'U',0x00,'d',0x00,'i',0x00,'s',0x00,'k',0x00}
//The infomation said: This is Jack's Udisk
unsigned char sign_name[18]=
{18,0x03,0xe0,0x7a,0x76,0x51,0xe2,0x6c,0x84,0x76,0xfb,0x79,0xa8,0x52,0xc1,0x78,0xd8,0x76};


static struct
{
	USB_Device_Descriptor       DevDesc;
	USB_Configuraton_Descriptor CfgDesc;
	USB_Interface_Descriptor    ItfDesc;
	USB_Endpoint_Descriptor     Endp4Desc;
	USB_Endpoint_Descriptor     Endp5Desc;
}ThisDevDesc =
				{
					{
						USB_Device_Descriptor_Size,
						USB_Device_Descriptor_Type,
						USB_11,
						Default_DeviceClass,
						Default_DeviceSubClass,
						Default_DeviceProtocol,
						Endpoint0_Packet_Size,
						Philip_IdVendor,
						Default_IdProduct,
						Default_BcdDevice,
						0,
						2,
						No_Index,
						1
					},//設備描述符 device discriptor
					{
						USB_Configuration_Descriptor_Size,
						USB_Configuration_Descriptor_Type,
						USB_Total_Configuration_Descriptor_Size,
						1,
						1,
						0,
						Bus_Power,
						PowerConsumption_Nma(400),
					},//配置描述符 configuation discriptor
					{
						USB_Interface_Descriptor_Size,
						USB_Interface_Descriptor_Type,
						0,
						0,
						Endpoint_Count,
						UsbClassMassStorage,
						UsbSubClassScsi,
						UsbProtocolBulk,
						0
					},//接口描述符 interface discriptor
					{
						USB_Endpoint_Descriptor_Size,
						USB_Endpoint_Descriptor_Type,
						Endpoint_In(2),
						UsbEndpBulk,
						Endpoint2_Packet_Size,
						10
					},//端點2描述符 endpoint 2 discriptor
					{
						USB_Endpoint_Descriptor_Size,
						USB_Endpoint_Descriptor_Type,
						Endpoint_Out(2),
						UsbEndpBulk,
						Endpoint2_Packet_Size,
						10
					}//端點2描述符endpoint 2 discriptor					
				};


/****************** standard device request ****************/
U8 Get_Status(U8 *SetupPacket)
{
	U8 temp;
	//printf("\nGet Status Request\n");
	if(SetupPacket[2]|SetupPacket[3]|SetupPacket[5]|SetupPacket[7])
		return 1;
	if(SetupPacket[6]!=2)
		return 1;
	if(SetupPacket[0]==0x80)
	{
		if(SetupPacket[4])
			return 1;
		SetupPacket[0] = USB_Remote_Wake?1:0;
		SetupPacket[1] = 0;
	}
	else
	if(SetupPacket[0]==0x81)
	{
		if(SetupPacket[4])
			return 1;
		SetupPacket[0] = 0;
		SetupPacket[1] = 0;		
	}
	else
	if(SetupPacket[0]==0x82)
	{
		temp=D12_Select_Endpoint((SetupPacket[4]*2)|((SetupPacket[4]&0x80)?1:0));
		SetupPacket[1] = (temp&2)?1:0;
		SetupPacket[0] = 0;
	}
	else
		return 1;

	D12_Write_Endpoint(1, SetupPacket, 2);
	return 0;		
}

U8 Clear_Feature(U8 *SetupPacket)
{
	//printf("\nClear Feature Request\n");
	if(SetupPacket[0]&0x80)
		return 0;
	if(SetupPacket[3]|SetupPacket[5]|SetupPacket[6]|SetupPacket[7])	
		return 0;
		
	if(SetupPacket[0]&0x1f)
	{
		if((SetupPacket[0]&0x1f)!=2)
			return 0;
		D12_Set_Endpoint_Status((SetupPacket[4]*2)|((SetupPacket[4]&0x80)?1:0),0);
	}
	else
	{
		if(SetupPacket[4])
			return 0;
		USB_Remote_Wake = 0;
	}
	
	D12_Write_Endpoint(1, SetupPacket, 0);
	return 1;
}

U8 Set_Feature(U8 *SetupPacket)
{
	//printf("\nSet Feature Request\n");
	if(!(SetupPacket[0]&0x80))
		return 0;
	if(SetupPacket[3]|SetupPacket[5]|SetupPacket[6]|SetupPacket[7])
		return 0;
		
	if(SetupPacket[0]&0x1f)
	{
		if((SetupPacket[0]&0x1f)!=2)
			return 0;
		D12_Set_Endpoint_Status((SetupPacket[4]*2)|((SetupPacket[4]&0x80)?1:0),1);
	}
	else
	{
		if(SetupPacket[4])
			return 0;
		USB_Remote_Wake = 1;
	}
	
	D12_Write_Endpoint(1, SetupPacket, 0);
	return 1;
}

U8 Set_Address(U8 *SetupPacket)
{
	//printf("\nSet Address Request\n");
	if(SetupPacket[0]|SetupPacket[3]|SetupPacket[4]|SetupPacket[5]|SetupPacket[6]|SetupPacket[7])
		return 0;
		
	D12_Set_Address_Enable(SetupPacket[2],1);
	D12_Write_Endpoint(1, SetupPacket, 0);
	return 1;	
}

void Send_Descriptor(void)
{
	//U8 i;
	//printf("\nSend Descriptor:");
	USB_Send_Descriptor_Flag = send_remain>=Endpoint0_Packet_Size;	
	D12_Write_Endpoint(1, send_ptr, (send_remain>Endpoint0_Packet_Size)?Endpoint0_Packet_Size:send_remain);
	
	//for(i=0; i<((send_remain>Endpoint0_Packet_Size)?Endpoint0_Packet_Size:send_remain); i++)
		//printf("%x,", *(U8 *)(send_ptr+i));	
		
	send_remain -= Endpoint0_Packet_Size;
	send_ptr    += Endpoint0_Packet_Size;
	
}

U8 Remain_Descriptor_Flag(void)
{
	return USB_Send_Descriptor_Flag;
}

void Clear_Remain_Descriptor_Flag(void)
{
	USB_Send_Descriptor_Flag=0;
}

U8 Get_Descriptor(U8 *SetupPacket)
{
	//printf("\nGet Descriptor Request\n");
	if(SetupPacket[0]!=0x80)
		return 0;
		
	switch	(SetupPacket[3])
	{
	case USB_Device_Descriptor_Type:
		send_ptr = (U8 *)&ThisDevDesc;
		send_remain = USB_Device_Descriptor_Size;
		break;
	case USB_Configuration_Descriptor_Type:
		send_ptr = (U8 *)&ThisDevDesc.CfgDesc;
		send_remain = USB_Total_Configuration_Descriptor_Size;
		break;
	case USB_String_Descriptor_Type:
		if(SetupPacket[2] == 0)
		{
			send_ptr = LANGUAGE_ID;
			send_remain = LANGUAGE_ID[0];
		}
		else if(SetupPacket[2] == 2)
		{
			send_ptr = sign_name;
			send_remain = sign_name[0];
		}		
		break;	
	default:
		return 0;	
	}

	if(!SetupPacket[7]&&(SetupPacket[6]<send_remain))
		send_remain = SetupPacket[6];

	Send_Descriptor();	
	return 1;	
}

U8 Get_Configuration(U8 *SetupPacket)
{
	//printf("\nGet Configuration Request\n");
	if(SetupPacket[0]!=0x80)
		return 0;
	if(SetupPacket[2]|SetupPacket[3]|SetupPacket[4]|SetupPacket[5]|SetupPacket[7])
		return 0;
	if(SetupPacket[6]!=1)
		return 0;
		
	SetupPacket[0] = USB_Config?1:0;
	D12_Write_Endpoint(1, SetupPacket, 1);	
	return 1;	
}

U8 Set_Configuration(U8 *SetupPacket)
{
	//printf("\nSet Configuration Request\n");
	if(SetupPacket[0]|SetupPacket[3]|SetupPacket[4]|SetupPacket[5]|SetupPacket[6]|SetupPacket[7])
		return 0;
	if(SetupPacket[2]&0xfe)
		return 0;
		
	USB_Config = SetupPacket[2]&1;
	D12_Set_Endpoint_Enable(USB_Config);
	D12_Set_Endpoint_Status(4, USB_Config^1);
	D12_Set_Endpoint_Status(5, USB_Config^1);
	D12_Write_Endpoint(1, SetupPacket, 0);
	return 1;	
}

U8 Get_Interface(U8 *SetupPacket)
{
	//printf("\nGet Interface Request\n");
	if(SetupPacket[0]!=0x81)
		return 0;
	if(SetupPacket[2]|SetupPacket[3]|SetupPacket[4]|SetupPacket[5]|SetupPacket[7])
		return 0;
	if(SetupPacket[6]!=1)
		return 0;
		
	SetupPacket[0] = 0;
	D12_Write_Endpoint(1, SetupPacket, 1);
	return 1;
}

U8 Set_Interface(U8 *SetupPacket)
{
	return 0;
}

U8 Reserved(U8 *SetupPacket)
{
	return 0;	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日韩视频在线观看| 色婷婷综合激情| 自拍av一区二区三区| 久久精品欧美日韩精品| 国产午夜三级一区二区三| 久久久久久久综合| 欧美精品一区二区在线观看| 久久综合色综合88| 精品国产欧美一区二区| 2020国产精品自拍| 中文字幕av一区 二区| 国产精品毛片久久久久久久| 国产精品九色蝌蚪自拍| 亚洲一区二区四区蜜桃| 亚洲chinese男男1069| 日本不卡一二三| 精品一区二区三区的国产在线播放 | 五月婷婷综合在线| 日本欧美加勒比视频| 国产麻豆欧美日韩一区| 成人午夜av电影| 91福利在线导航| 日韩午夜在线播放| 国产日产欧美一区二区三区| 亚洲人快播电影网| 五月婷婷综合网| 国产精品小仙女| 欧美性猛片aaaaaaa做受| 欧美一区二区视频在线观看2020 | 亚洲精品在线观看视频| 欧美国产国产综合| 亚洲成人自拍偷拍| 国产麻豆精品在线| 欧美午夜精品免费| 国产亚洲精品超碰| 一区二区理论电影在线观看| 激情综合色播激情啊| 91亚洲资源网| 精品国产成人系列| 一区二区三区在线高清| 国产在线不卡一区| 欧美三级中文字幕| 久久午夜电影网| 香蕉久久一区二区不卡无毒影院| 国产一区美女在线| 欧美二区乱c少妇| 国产精品美女久久久久久久网站| 午夜精品久久久久久久99樱桃| 国产一区二区成人久久免费影院 | 91影院在线观看| 精品欧美一区二区久久| 亚洲久草在线视频| 国产91对白在线观看九色| 91精品欧美一区二区三区综合在 | 欧美电视剧免费观看| 一区二区三区在线观看动漫| 国产精品中文字幕日韩精品| 欧美撒尿777hd撒尿| 日本一二三不卡| 国产一区二区三区在线观看免费 | 成人v精品蜜桃久久一区| 制服丝袜亚洲精品中文字幕| 亚洲免费三区一区二区| 国产成人精品免费网站| 欧美大尺度电影在线| 日韩高清电影一区| 欧美剧情电影在线观看完整版免费励志电影| 国产亚洲欧美日韩日本| 老司机午夜精品99久久| 日韩一区二区在线免费观看| 亚洲福利视频一区| 欧美日韩三级视频| 亚洲在线中文字幕| 欧美日韩国产综合久久| 亚洲国产中文字幕在线视频综合| 91色porny蝌蚪| 亚洲男人天堂一区| 91丨porny丨户外露出| 自拍偷拍亚洲综合| 91丨porny丨国产入口| 亚洲乱码国产乱码精品精可以看 | 夜夜操天天操亚洲| 色婷婷狠狠综合| 亚洲男人天堂av| 欧美伊人久久大香线蕉综合69| 亚洲免费观看在线视频| 在线观看亚洲一区| 天天操天天色综合| 欧美高清hd18日本| 久久99国内精品| 欧美电影免费提供在线观看| 国产精品一级黄| 中文字幕亚洲一区二区va在线| 91尤物视频在线观看| 一区二区三区国产精华| 欧美精品三级在线观看| 另类的小说在线视频另类成人小视频在线 | 亚洲人精品午夜| 欧美午夜精品免费| 久久99国产精品免费| 国产精品系列在线| aaa亚洲精品一二三区| 亚洲丰满少妇videoshd| 欧美不卡一二三| 成人久久18免费网站麻豆 | 国产精品国产a级| 在线精品视频一区二区| 国产乱理伦片在线观看夜一区| 久久精品视频在线看| 91小视频在线| 免费高清在线一区| 亚洲天堂精品在线观看| 欧美一区二区国产| 国内精品久久久久影院一蜜桃| 亚洲欧洲精品一区二区精品久久久| 91精彩视频在线观看| 精品无人码麻豆乱码1区2区 | 91丨porny丨首页| 蜜臀av一区二区在线免费观看 | 精品国产第一区二区三区观看体验| 成人一二三区视频| 午夜在线电影亚洲一区| 国产日韩精品一区二区三区 | 欧美日韩一卡二卡三卡 | 日韩不卡一区二区| 欧美国产激情二区三区| 欧美一区二区精品| 欧美在线影院一区二区| 粉嫩绯色av一区二区在线观看| 午夜视频一区二区| 最新欧美精品一区二区三区| 欧美精品一区二区三区很污很色的| 99久久国产免费看| 国产a级毛片一区| 日本va欧美va瓶| 五月激情综合网| 尤物av一区二区| 17c精品麻豆一区二区免费| 久久综合九色欧美综合狠狠 | 99久久精品国产一区二区三区| 日本不卡一二三区黄网| 亚洲制服欧美中文字幕中文字幕| 国产精品成人在线观看| 久久久久亚洲综合| 精品国产1区2区3区| 51午夜精品国产| 欧美久久婷婷综合色| 色欧美片视频在线观看 | 亚洲香肠在线观看| 亚洲欧美一区二区三区国产精品| 久久九九久精品国产免费直播| 91精品国产欧美一区二区18| 欧美日韩在线电影| 欧美三级中文字幕在线观看| 在线欧美小视频| 欧美午夜电影网| 欧美亚洲一区二区三区四区| 色94色欧美sute亚洲线路二 | 国产在线精品视频| 国产乱人伦偷精品视频不卡| 久久国产尿小便嘘嘘尿| 久久99精品视频| 国产伦精品一区二区三区免费 | 成人激情校园春色| 波多野结衣亚洲| 色老头久久综合| 欧美午夜片在线看| 制服丝袜中文字幕亚洲| 日韩亚洲欧美一区| 久久久亚洲精品一区二区三区| 国产午夜一区二区三区| 国产精品初高中害羞小美女文| 亚洲视频香蕉人妖| 亚洲国产wwwccc36天堂| 调教+趴+乳夹+国产+精品| 久久精品国产第一区二区三区| 国产麻豆精品一区二区| 成人一区二区三区在线观看| 色综合久久久久综合体| 欧美日韩国产综合草草| 久久久蜜桃精品| 成人欧美一区二区三区小说| 亚洲一区二区四区蜜桃| 精品一区二区三区香蕉蜜桃| 丁香婷婷综合五月| 欧美视频一区二区三区四区| 日韩三级视频在线观看| 欧美国产禁国产网站cc| 午夜一区二区三区视频| 国产精品1区二区.| 欧美日韩小视频| 久久久九九九九| 亚洲成人久久影院| 国产成人午夜视频| 欧美欧美欧美欧美| 中文在线资源观看网站视频免费不卡 | 亚洲综合一区二区三区| 蜜臂av日日欢夜夜爽一区| 成人av一区二区三区| 欧美精品久久99久久在免费线|