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

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

?? usb.c

?? 44b0x的U盤源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "usb.h"
#include "d12.h"
#include "MASS_STORAGE.H"
#include "fat.h"

CONTROL_DATA_BUFF Control_Data;
unsigned char buffer[64];

CBW cbw;
CSW csw;
SCSI_DEF SCSI;

unsigned char const *pData;

const unsigned char LANGUAGE_ID[4]={0x04,0x03,0x09,0x04};            //字符串描述符所用的語言種類        

const unsigned char device_serial_number[18]=                         //設備序列號
 {0x12,0x03,0x32,0x00,0x30,0x00,0x37,0x00,0x31,0x00,0x30,0x00,0x39,0x00,0x38,0x00,0x32,0x00};

const DEVICE_DESCRIPTOR_STRUCT device_descriptor=     //設備描述符
{
	 sizeof(DEVICE_DESCRIPTOR_STRUCT),                   //設備描述符的字節數大小
	 DEVICE_DESCRIPTOR,	                             //設備描述符類型編號
	 0x1001,                                             //USB版本號
	 0x00,                                               //USB分配的設備類代碼
	 0x00,                                               //USB分配的子類代碼
	 0x00,                                               //USB分配的設備協議代碼
	 0x10,                                               //端點0的最大包大小
	 0x7104,                                             //廠商編號
	 0xf0ff,                                             //產品編號
//	 0x0100,                                             //設備出廠編號
	 0x0001,                                             //設備出廠編號
	 0x00,                                               //設備廠商字符串的索引
	 0x00,                                               //描述產品字符串的索引
	 0x02,                                               //描述設備序列號字符串的索引
	 0x01                                                //可能的配置數量
};

const CON_INT_ENDP_DESCRIPTOR_STRUCT con_int_endp_descriptor=
{
	//configuration_descriptor                                          //配置描述符
	{
		 sizeof(CONFIGURATION_DESCRIPTOR_STRUCT),                           //配置描述符的字節數大小
		 CONFIGURATION_DESCRIPTOR,                                          //配置描述符類型編號
		 (sizeof(CONFIGURATION_DESCRIPTOR_STRUCT)+sizeof(INTERFACE_DESCRIPTOR_STRUCT)+sizeof(ENDPOINT_DESCRIPTOR_STRUCT)*ENDPOINT_NUMBER)*256+
		 (sizeof(CONFIGURATION_DESCRIPTOR_STRUCT)+sizeof(INTERFACE_DESCRIPTOR_STRUCT)+sizeof(ENDPOINT_DESCRIPTOR_STRUCT)*ENDPOINT_NUMBER)/256,
		 0x01,                                                            //只包含一個接口
		 0x01,                                                            //該配置的編號
		 0x00,                                                            //iConfiguration字段
		 0x80,                                                            //采用總線供電,不支持遠程喚醒
		 0xC8                                                            //從總線獲取最大電流400mA
		},
		//interface_descritor                                             //接口描述符
		{
		 sizeof(INTERFACE_DESCRIPTOR_STRUCT),                             //接口描述符的字節數大小
		 INTERFACE_DESCRIPTOR,                                            //接口描述符類型編號
		 0x00,                                                            //接口編號為0
		 0x00,                                                            //該接口描述符的編號
		 ENDPOINT_NUMBER,                                                 //非0端點數量為2,只使用端點主端點輸入和輸出
		 0x08,                                                            //USB大容量存儲設備
		 0x06,                                                            //使用的子類,為簡化塊命令
		 0x50,                                                            //使用的協議,這里使用單批量傳輸協議
		 0x00                                                             //接口描述符字符串索引
	},

	//endpoint_descriptor[]
	{
	 {                                                                  //主端點輸入描述
	  sizeof(ENDPOINT_DESCRIPTOR_STRUCT),                             //端點描述符的字節數大小
	  ENDPOINT_DESCRIPTOR,                                            //端點描述符類型編號
	  MAIN_POINT_IN,                                                  //端點號,主輸入端點
	  ENDPOINT_TYPE_BULK,                                             //使用的傳輸類型,批量傳輸
	  0x4000,                                                         //該端點支持的最大包尺寸,64字節
	  0x00                                                            //中斷掃描時間,對批量傳輸無效
	 },
	  
	 {                                                                  //主端點輸出描述
	  sizeof(ENDPOINT_DESCRIPTOR_STRUCT),                             //端點描述符的字節數大小
	  ENDPOINT_DESCRIPTOR,                                            //端點描述符類型編號
	  MAIN_POINT_OUT,                                                 //端點號,主輸出端點
	  ENDPOINT_TYPE_BULK,                                             //使用的傳輸類型,批量傳輸
	  0x4000,                                                         //該端點支持的最大包尺寸,64字節
	  0x00                                                            //中斷掃描時間,對批量傳輸無效
	 }
}
};

unsigned int SWAP(unsigned short temp)                                //高低字節交換
{
	 unsigned short i;
	 i=temp;
	 i<<=8;
	 temp>>=8;
	 i|=temp;
	 return i;
}

/*unsigned long int SWAP_long(unsigned long int temp)                  //四字節交換
{
 unsigned long int i;
 i=temp<<24;
  i|=(temp<<8)&0x00FF0000; 
  i|=(temp>>8)&0x0000FF00;
 i|=(temp>>24)&0x000000FF;
 return i;
}*/
 

unsigned char LSB(unsigned short temp)                                //取一個整數的低字節
{
	 return (unsigned char)temp;
}

unsigned char MSB(unsigned short temp)                                //取一個整數的高字節
{
	 return (unsigned char)(temp>>8);
}
void clear_feature(unsigned char receiver)    
{
	 receiver=0;
	 write_endpoint_buff(1,0,0);
	 usb_flags.flags.usb_endp0_in=0;
	 usb_flags.flags.setup_packet_out=0;
}

void set_feature(unsigned char receiver)
{
	 receiver=0;
	 write_endpoint_buff(1,0,0);
	 usb_flags.flags.usb_endp0_in=0;
	 usb_flags.flags.setup_packet_out=0;
}

void set_descriptor(void)
{
	 usb_flags.flags.usb_endp0_in=0;
	 usb_flags.flags.setup_packet_out=0;
}

void set_configuration(void)
{
	 write_endpoint_buff(1,0,0);
	 usb_flags.flags.usb_endp0_in=0;
	 usb_flags.flags.setup_packet_out=0;
}

void get_configuration(void)               //獲取配置狀態
{
	 unsigned char value=0x01;
	 write_endpoint_buff(1,1,&value);
	 usb_flags.flags.usb_endp0_in=0;
}

void set_interface(void)                   //設置接口
{
	 write_endpoint_buff(1,0,0);
	 usb_flags.flags.usb_endp0_in=0;
	 usb_flags.flags.setup_packet_out=0;
}

void get_interface(void)                  //獲取接口狀態
{
	 unsigned char value=0x01;
	 write_endpoint_buff(1,1,&value);
	 usb_flags.flags.usb_endp0_in=0;
}

void get_max_LUN(void)                   //獲取磁盤最大邏輯單元號
{
	 unsigned char max_LUN=MAX_LUN;          //只有一個邏輯單元
	 write_endpoint_buff(1,1,&(max_LUN));
	 usb_flags.flags.usb_endp0_in=0; 
}

void mass_storage_reset(void)            //USB大容量存儲設備復位
{
	 write_endpoint_buff(1,0,0);
	 usb_flags.flags.usb_endp0_in=0;
	 usb_flags.flags.setup_packet_out=0;
	 SCSI.SCSI_Status.Command=1;
	 SCSI.SCSI_Status.Data=0;
}


void get_descriptor(void)                    //獲取描述符
{
    if(!usb_flags.flags.not_end)
     {
      switch(MSB(Control_Data.DeviceRequest.wValue))
	   {
        case DEVICE_DESCRIPTOR:
	         Control_Data.wCount=sizeof(DEVICE_DESCRIPTOR_STRUCT);
 	         Control_Data.pData=(unsigned char *)(&device_descriptor);
             break;
        case CONFIGURATION_DESCRIPTOR:
             Control_Data.wCount=SWAP(con_int_endp_descriptor.configuration_descriptor.wTotalLength);
			 Control_Data.pData=(unsigned char *)(&con_int_endp_descriptor);
		if( Control_Data.DeviceRequest.wLength == 0x2300)
			{
				Control_Data.DeviceRequest.wLength = Control_Data.DeviceRequest.wLength;
			}
             if(Control_Data.wLength<Control_Data.wCount)
             	Control_Data.wCount=Control_Data.wLength;
             break;
		case STRING_DESCRIPTOR:
		     if(LSB(Control_Data.DeviceRequest.wValue)==0)
			  {
			   Control_Data.wCount=LANGUAGE_ID[0];
               Control_Data.pData=LANGUAGE_ID;
			  }
		     if(LSB(Control_Data.DeviceRequest.wValue)==2)
			  {
			   Control_Data.wCount=device_serial_number[0];
			   Control_Data.pData=device_serial_number;
			  }
			 break;
	   	}
      if(Control_Data.wLength<Control_Data.wCount)
      	Control_Data.wCount=Control_Data.wLength;
	 }

    if(Control_Data.wCount>=MAX_CONTROL_DATA_SIZE)
     {
	  write_endpoint_buff(1,MAX_CONTROL_DATA_SIZE,Control_Data.pData);
	  Control_Data.pData+=MAX_CONTROL_DATA_SIZE;
      Control_Data.wCount-=MAX_CONTROL_DATA_SIZE;
	  if(usb_flags.flags.set_addr)usb_flags.flags.not_end=1;
	   else usb_flags.flags.usb_endp0_in=0;
	  return;
	 }
    else
     {
	  write_endpoint_buff(1,Control_Data.wCount,Control_Data.pData);
      usb_flags.flags.setup_packet_in=0;
	  usb_flags.flags.usb_endp0_in=0;
	  return;
	 }      
}

void endp0_out(void)                            //終端點0輸出中斷處理
{
	Last_Status.Register=read_last_status(0);
	if(Last_Status.Status.setup_packet)
	{
		Control_Data.wLength=0;
		Control_Data.wCount=0;
	   	if(read_endpoint_buff(0,sizeof(Control_Data.DeviceRequest),(unsigned char *)(&(Control_Data.DeviceRequest)))!=sizeof(REQUESTCMD))
	    	{
		 	set_endpoint_status(0,0);
		 	set_endpoint_status(1,0);
		 	return;
		}
//	  Control_Data.DeviceRequest.wValue=SWAP(Control_Data.DeviceRequest.wValue);
//	  Control_Data.DeviceRequest.wIndex=SWAP(Control_Data.DeviceRequest.wIndex);
//	  Control_Data.DeviceRequest.wLength=SWAP(Control_Data.DeviceRequest.wLength);

	  	ack_setup(0);
	  	ack_setup(1);
	  	Control_Data.wLength=Control_Data.DeviceRequest.wLength;
		  usb_flags.flags.not_end=0;
		  usb_flags.flags.usb_endp0_in=1;
		  usb_flags.flags.setup_packet_in=0;
		  usb_flags.flags.setup_packet_out=0;
		  if(Control_Data.DeviceRequest.bmRequestType&0x80)
		  {
		  	usb_flags.flags.setup_packet_in=1;return;
		  }
		  else 
		  {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲视频狠狠干| 国产激情视频一区二区在线观看 | 国产91丝袜在线18| 91精品国产日韩91久久久久久| 亚洲伦理在线精品| 91免费国产在线| 中文字幕人成不卡一区| 成人国产精品免费网站| 国产欧美视频一区二区| 国产福利一区二区| 久久久久久久精| 国产老妇另类xxxxx| 2019国产精品| 国产成人精品免费网站| 国产欧美日韩三区| 成人性生交大合| 国产精品久久久久久一区二区三区| 国产高清亚洲一区| 中文字幕乱码一区二区免费| 成人激情电影免费在线观看| 国产精品麻豆久久久| 不卡在线观看av| 亚洲日本免费电影| 色综合久久久久久久| 亚洲综合色噜噜狠狠| 欧美性色欧美a在线播放| 午夜久久久久久久久久一区二区| 欧美精品v日韩精品v韩国精品v| 日韩vs国产vs欧美| 精品国产一区二区三区忘忧草| 国产美女一区二区| 亚洲欧美一区二区视频| 欧美性受极品xxxx喷水| 日韩—二三区免费观看av| 日韩免费在线观看| 丁香六月久久综合狠狠色| 亚洲欧洲无码一区二区三区| 在线观看亚洲一区| 日日摸夜夜添夜夜添国产精品| 日韩免费福利电影在线观看| 国产麻豆视频一区二区| 国产精品久久毛片av大全日韩| 一本色道久久综合精品竹菊| 亚洲成a人片在线观看中文| 日韩亚洲欧美在线| 国产成人久久精品77777最新版本| 国产精品免费久久| 欧美伊人久久久久久午夜久久久久| 婷婷亚洲久悠悠色悠在线播放| 日韩精品一区二区三区四区视频 | 蜜桃视频第一区免费观看| www国产精品av| 91视频.com| 奇米精品一区二区三区在线观看一| 欧美精品一区视频| 99免费精品视频| 偷拍日韩校园综合在线| 国产日韩欧美高清在线| 欧美主播一区二区三区| 精品一区二区三区免费| 国产精品久久久久久久久图文区| 欧美在线一二三四区| 精品一区二区成人精品| 最新国产成人在线观看| 日韩欧美国产综合一区| 波多野结衣在线aⅴ中文字幕不卡| 亚洲国产精品久久人人爱蜜臀| 精品国产123| 色偷偷久久一区二区三区| 蜜桃av一区二区在线观看| 亚洲丝袜美腿综合| 精品国产百合女同互慰| 色琪琪一区二区三区亚洲区| 精品一区二区影视| 亚洲午夜精品久久久久久久久| 337p日本欧洲亚洲大胆精品| 在线观看日韩电影| 粉嫩蜜臀av国产精品网站| 丝袜脚交一区二区| 18欧美亚洲精品| 精品久久久久久综合日本欧美| 91色porny| 国产精品一区二区果冻传媒| 亚洲电影第三页| 国产精品美女一区二区三区 | 久久久久国产精品厨房| 欧美在线一二三| 成人国产亚洲欧美成人综合网 | 免费日韩伦理电影| 亚洲另类春色校园小说| www久久精品| 91精品欧美久久久久久动漫| 99久久综合狠狠综合久久| 久草在线在线精品观看| 亚洲国产精品嫩草影院| 日韩美女视频一区| 2020国产精品久久精品美国| 91精品国产免费| 91成人免费电影| fc2成人免费人成在线观看播放| 久久精品999| 丝袜美腿亚洲色图| 亚洲国产欧美在线| 中文字幕一区二区三区四区不卡| 久久久综合激的五月天| 欧美一级二级三级乱码| 欧美色中文字幕| 色综合久久综合网| 99精品国产热久久91蜜凸| 国产一区 二区| 久久99久久久久久久久久久| 图片区小说区区亚洲影院| 一区二区三区中文免费| 中文字幕一区不卡| 国产精品毛片无遮挡高清| 国产人妖乱国产精品人妖| 欧美精品一区二区三区视频| 日韩一区国产二区欧美三区| 欧美人妇做爰xxxⅹ性高电影| 91福利视频在线| 色婷婷综合激情| 94-欧美-setu| 91丨porny丨国产入口| 99热精品一区二区| 97se亚洲国产综合自在线| 99久久久免费精品国产一区二区| 丁香婷婷深情五月亚洲| 高清av一区二区| 成人在线视频首页| 国产成人免费xxxxxxxx| 粉嫩av一区二区三区| 国产xxx精品视频大全| 国产成人午夜99999| 国产91精品精华液一区二区三区| 国产精品一级片在线观看| 国产自产视频一区二区三区| 久久99久久久欧美国产| 国产一区二区伦理| 国产精品原创巨作av| 国产成人啪免费观看软件| 国产91富婆露脸刺激对白| 成人免费毛片片v| www.亚洲色图| 99精品视频中文字幕| 色呦呦日韩精品| 欧美性猛交xxxxxxxx| 欧美日韩高清在线| 欧美一区二区三级| 精品福利在线导航| 亚洲国产精品精华液ab| 1区2区3区精品视频| 亚洲尤物在线视频观看| 亚洲国产一区视频| 免费在线观看一区| 国产一区二区伦理| jvid福利写真一区二区三区| 91最新地址在线播放| 欧美性色欧美a在线播放| 欧美一区二区三区在线电影 | www成人在线观看| 国产精品免费久久| 亚洲综合一二区| 日韩不卡一二三区| 国产经典欧美精品| 色综合欧美在线| 91精品福利在线一区二区三区| 精品区一区二区| 国产精品毛片大码女人| 亚洲午夜羞羞片| 极品少妇xxxx精品少妇| 成人动漫中文字幕| 欧美最猛性xxxxx直播| 日韩精品在线看片z| 国产精品丝袜一区| 亚洲成人免费在线观看| 美女mm1313爽爽久久久蜜臀| 成人av资源站| 欧美日韩高清影院| 久久精品夜色噜噜亚洲a∨| 亚洲三级小视频| 免费观看在线综合| 成人av在线网| 欧美日韩国产三级| 久久久久久黄色| 亚洲国产精品久久人人爱蜜臀| 久久精品久久99精品久久| 99麻豆久久久国产精品免费 | 精品久久久久久综合日本欧美| 国产精品久久久久精k8| 香蕉加勒比综合久久| 国产成人精品三级| 欧美精品亚洲二区| 国产欧美视频在线观看| 天天综合色天天| 国产xxx精品视频大全| 欧美久久一二区| 国产精品麻豆视频| 青青青伊人色综合久久| av动漫一区二区| 日韩精品一区二区三区视频播放 |