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

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

?? usb.c

?? usb接口的移動(dòng)硬盤
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
void set_usb_address(void)                       //設(shè)置地址
{
 USB_set_addr=1;
 while(select_endpoint(1)&0x01);
 write_endpoint_buff(1,0,0);
 set_usb_addr(Control_Data.DeviceRequest.wValue);
 USB_usb_endp0_in=0;
 USB_setup_packet_out=0;
}

void get_status(unsigned char receiver)           //獲取狀態(tài)響應(yīng)
{
 unsigned char status[2];
 switch (receiver)
  {
   case 0:                        //獲取設(shè)備狀態(tài)
    status[0]=0x00;
    status[1]=0x00;
    break;
   case 1:                        //獲取接口狀態(tài)
    status[0]=0x00;
    status[0]=0x00;
    break;
   case 2:                        //獲取端點(diǎn)狀態(tài)
    status[0]=0x00;
    status[1]=0x00;
    break;
   }
  write_endpoint_buff(1,2,status);
  USB_usb_endp0_in=0;
}

void clear_feature(unsigned char receiver)    
{
 receiver=0;
 write_endpoint_buff(1,0,0);
 USB_usb_endp0_in=0;
 USB_setup_packet_out=0;
}

void set_feature(unsigned char receiver)
{
 receiver=0;
 write_endpoint_buff(1,0,0);
 USB_usb_endp0_in=0;
 USB_setup_packet_out=0;
}

void set_descriptor(void)
{
 USB_usb_endp0_in=0;
 USB_setup_packet_out=0;
}

void set_configuration(void)
{
 write_endpoint_buff(1,0,0);
 USB_usb_endp0_in=0;
 USB_setup_packet_out=0;
}

void get_configuration(void)               //獲取配置狀態(tài)
{
 unsigned char value=0x01;
 write_endpoint_buff(1,1,&value);
 USB_usb_endp0_in=0;
}

void set_interface(void)                   //設(shè)置接口
{
 write_endpoint_buff(1,0,0);
 USB_usb_endp0_in=0;
 USB_setup_packet_out=0;
}

void get_interface(void)                  //獲取接口狀態(tài)
{
 unsigned char value=0x01;
 write_endpoint_buff(1,1,&value);
 USB_usb_endp0_in=0;
}

void get_max_LUN(void)                   //獲取磁盤最大邏輯單元號(hào)
{
 unsigned char max_LUN=MAX_LUN;          //只有一個(gè)邏輯單元
 write_endpoint_buff(1,1,&(max_LUN));
 USB_usb_endp0_in=0; 
}

void mass_storage_reset(void)            //USB大容量存儲(chǔ)設(shè)備復(fù)位
{
 write_endpoint_buff(1,0,0);
 USB_usb_endp0_in=0;
 USB_setup_packet_out=0;
 SCSI_Command=1;
 SCSI_Data=0;
}


void get_descriptor(void)                    //獲取描述符
{
    if(!USB_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.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_set_addr)USB_not_end=1;
	   else USB_usb_endp0_in=0;
	  return;
	 }
    else
     {
	  write_endpoint_buff(1,Control_Data.wCount,Control_Data.pData);
      USB_setup_packet_in=0;
	  USB_usb_endp0_in=0;
	  return;
	 }      
}

void endp0_out(void)                            //終端點(diǎn)0輸出中斷處理
{
 Last_Status_Register=read_last_status(0);
 if(Last_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_not_end=0;
  USB_usb_endp0_in=1;
  USB_setup_packet_in=0;
  USB_setup_packet_out=0;
  if(Control_Data.DeviceRequest.bmRequestType&0x80){USB_setup_packet_in=1;return;}
  else {USB_setup_packet_out=1;return;}
 }
 else
  {
   select_endpoint(0);
   clear_buffer();
  }
}

void endp0_in(void)                                        //終端點(diǎn)0輸入處理
{
 read_last_status(1);
 if(USB_setup_packet_in||USB_not_end)
  {
   if((Control_Data.DeviceRequest.bmRequestType==0xA1)&&(Control_Data.DeviceRequest.bRequest==0xFE))
    get_max_LUN();
   switch(Control_Data.DeviceRequest.bmRequestType&0x7B)
    {
	 case 0:
	   switch (Control_Data.DeviceRequest.bRequest)
	    {
	     case 0: get_status(0);break;
	     case 6: get_descriptor();break;
	     case 8: get_configuration();break;
		 default:break;
	    }
	 case 1:
	   switch (Control_Data.DeviceRequest.bRequest)
	    {
         case  0: get_status(1);break;
	     case 10: get_interface();break;
         default: break;
		}
	 case 2:
	  {
       if(Control_Data.DeviceRequest.bRequest==0)get_status(2);  
	  }
	 default: break;
    }
  return;
  }
 if(USB_setup_packet_out) 
  {
   if((Control_Data.DeviceRequest.bmRequestType==0x21)&&(Control_Data.DeviceRequest.bRequest==0xFF))
    mass_storage_reset();

   switch(Control_Data.DeviceRequest.bmRequestType&0x03)
    {
	 case 0:
     switch (Control_Data.DeviceRequest.bRequest)
      {
	   case     CLEAR_FEATURE: clear_feature(0);break;
	   case       SET_FEATURE: set_feature(0);break;
	   case       SET_ADDRESS: set_usb_address();break;                  //set_address	           
	   case    SET_DESCRIPTOR: set_descriptor();break;                //set_descriptor
	   case SET_CONFIGURATION: set_configuration(); break;         //set_configurat               	          
  	   default: break;
	  }break;
	 case 1:
      switch (Control_Data.DeviceRequest.bRequest)
	   {
	    case CLEAR_FEATURE:  clear_feature(1);break;
	    case   SET_FEATURE:  set_feature(1); break;
        case SET_INTERFACE: set_interface();break;
	    default: break;
        }break;
	 case 2:
	  switch (Control_Data.DeviceRequest.bRequest)
	   {
	    case CLEAR_FEATURE: clear_feature(2);break;
	    case   SET_FEATURE: set_feature(2);break;
        default: break;      
	   }break;
	 default: break;
    }
  }
}

/*void endp1_out(void)
{
 printc(0xcc);
}*/


/*void endp1_in(void)
{
 printc(0xcc);
}*/

void Return_CSW(unsigned long int DataResidue,unsigned char status)          //返回CSW數(shù)據(jù)包
{
  
  csw.dCSWTag=cbw.dCBWTag;
  csw.dCSWDataResidue=DataResidue;
  csw.bCSWStatus=status;
  while(select_endpoint(5)&0x01);
  write_endpoint_buff(5,sizeof(CSW),(unsigned char *)(&csw));
  USB_usb_endp2_in=0;
  USB_usb_endp2_out=0;
  SCSI_Command=1;
  SCSI_Data=0;
}


void write_10(void)                                                         //SCSI寫操作
{
 unsigned long int LBA,Byte_Count;
 unsigned char i;
  if(SCSI_Data)
  {
   ((unsigned char*)&LBA)[0]=cbw.CBWCB[2];
   ((unsigned char*)&LBA)[1]=cbw.CBWCB[3];
   ((unsigned char*)&LBA)[2]=cbw.CBWCB[4];
   ((unsigned char*)&LBA)[3]=cbw.CBWCB[5];

   ((unsigned char*)&Byte_Count)[0]=0;
   ((unsigned char*)&Byte_Count)[1]=cbw.CBWCB[7];
   ((unsigned char*)&Byte_Count)[2]=cbw.CBWCB[8];
   ((unsigned char*)&Byte_Count)[3]=0;
   Byte_Count<<=1;
   while(USB_usb_endp2_out)
    { 
     if((((unsigned char *)&Byte_Count)[3]==0)&&((((unsigned char *)&Byte_Count)[2]&0x01)==0))
      {
       write_IDE_LBA0(((unsigned char*)&LBA)[0]);
       write_IDE_LBA1(((unsigned char*)&LBA)[1]);
       write_IDE_LBA2(((unsigned char*)&LBA)[2]);
       write_IDE_LBA3(((unsigned char*)&LBA)[3]);
       LBA++;
       write_IDE_sector_count(1);
       wait_IDE_busy();
       write_IDE_sector();
       IDE_Address=IDE_Data;
       set_IDE_address();
      }
     while(!(select_endpoint(4)&0x01));
	 if(Byte_Count>64)
	  {
	   read_endpoint_buff(4,64,buffer);      
	   Byte_Count-=64;
	  }
	 else 
	  {
       read_endpoint_buff(4,Byte_Count,buffer);
       Return_CSW(0x00,SUCCESS);
	  }
     for(i=0;i<64;i++)
      {
       while(!IDE_IORDY);

       IDE_DIOW=0;
       IDE_DATA_L=buffer[i];
       i++;
       IDE_DATA_H=buffer[i];
       IDE_DIOW=1;
      }
    } 
   wait_IDE_busy();
   IDE_Address=IDE_Bus_Not_Use;
   set_IDE_address();
  }
}


void endp2_out(void)                                                     //主端點(diǎn)輸出處理
{
 if(SCSI_Command)
  {
   if(read_endpoint_buff(4,sizeof(CBW),(unsigned char *)(&cbw))!=sizeof(CBW)){error(2);return;}
   if(cbw.dCBWSignature!=0x55534243){error(3);return;}
   SCSI_Command=0;
   SCSI_Data=1;
   if(cbw.bmCBWFlags&0x80)
    {
	 USB_usb_endp2_in=1;
	 USB_usb_endp2_out=0;
	}
   else
    {
	 USB_usb_endp2_in=0;
	 USB_usb_endp2_out=1;
     switch(cbw.CBWCB[0])
      {
       case        Write_10: write_10();break;
       case Test_Unit_Ready: Return_CSW(0x00,SUCCESS);break; 
       case          Verify: Return_CSW(0x00,SUCCESS);break;
	   default             : Return_CSW(cbw.dCBWDataTransgerLength,FAIL);break;
	  }
	}
  }
 else
  {
   read_last_status(4);
   select_endpoint(4);
   clear_buffer();
  }
}


void read_10(void)                                                              //SCSI讀處理
{
 unsigned long int LBA=0,Byte_Count;
 unsigned char i;
 if(SCSI_Data)
  {

   ((unsigned char*)&LBA)[0]=cbw.CBWCB[2];
   ((unsigned char*)&LBA)[1]=cbw.CBWCB[3];
   ((unsigned char*)&LBA)[2]=cbw.CBWCB[4];
   ((unsigned char*)&LBA)[3]=cbw.CBWCB[5];

   ((unsigned char*)&Byte_Count)[0]=0;
   ((unsigned char*)&Byte_Count)[1]=cbw.CBWCB[7];
   ((unsigned char*)&Byte_Count)[2]=cbw.CBWCB[8];
   ((unsigned char*)&Byte_Count)[3]=0;
   Byte_Count<<=1;
   pData=buffer;
   while(USB_usb_endp2_in)
    {
     if((((unsigned char *)&Byte_Count)[3]==0)&&((((unsigned char *)&Byte_Count)[2]&0x01)==0))
      {
       write_IDE_LBA0(((unsigned char*)&LBA)[0]);
       write_IDE_LBA1(((unsigned char*)&LBA)[1]);
       write_IDE_LBA2(((unsigned char*)&LBA)[2]);
       write_IDE_LBA3(((unsigned char*)&LBA)[3]);
       LBA++;
       write_IDE_sector_count(1);
       read_IDE_sector();
       IDE_Address=IDE_Data;
       set_IDE_address();
      }
     IDE_DATA_H=0xFF;
     for(i=0;i<64;i++)
      {
       while(!IDE_IORDY);
       IDE_DIOR=0;
       buffer[i]=IDE_DATA_L;
       i++;
       buffer[i]=IDE_DATA_H;
       IDE_DIOR=1;
      }
     while(select_endpoint(5)&0x01);
     if(Byte_Count>MAX_BULK_DATA_SIZE)
      {
       write_endpoint_buff(5,MAX_BULK_DATA_SIZE,pData);
       Byte_Count-=MAX_BULK_DATA_SIZE;
      }
     else
      {
       write_endpoint_buff(5,Byte_Count,pData);
       Return_CSW(0x00,SUCCESS);
       IDE_Address=IDE_Bus_Not_Use;
       set_IDE_address();
      }
    }
  }
 else error(2);return;
}

void endp2_in(void)                                      //主端點(diǎn)輸入處理
{
    switch(cbw.CBWCB[0])
    {
     case              Read_10: read_10();break;
     case              Inquiry: write_endpoint_buff(5,0x24,DISK_INF);Return_CSW(0x00,SUCCESS); break;
     case        Read_Capacity: write_endpoint_buff(5,0x08,DISK_CAPACITY);Return_CSW(0x00,SUCCESS);break;
     case Read_Format_capacity: write_endpoint_buff(5,0x00,0x00);Return_CSW(cbw.dCBWDataTransgerLength,FAIL);break;
     case        Request_Sense: write_endpoint_buff(5,0x12,SENSE);Return_CSW(0x00,SUCCESS);break;
	 case       Medium_Removal: Return_CSW(0x00,SUCCESS);break;
	 case                 0x1a: write_endpoint_buff(5,0x00,0x00);Return_CSW(cbw.dCBWDataTransgerLength,FAIL);break;
     default                  : write_endpoint_buff(5,0x00,0x00);Return_CSW(cbw.dCBWDataTransgerLength,FAIL);break;
	}
}

void main(void)
{

 disconnect_usb();

 system_initial();
 init_usb();
 connect_usb();
  
 while(1)
  { 
   if(!USB_INT)
    {
  	 read_interrupt_register();

	 if(Interrupt_bus_reset){usb_bus_reset();continue;}
	 if(Interrupt_suspend_change){usb_bus_suspend();continue;}
     if(Interrupt_control_out_port){endp0_out();continue;}
	 if(Interrupt_control_in_port&&USB_usb_endp0_in){endp0_in();continue;}
	 if(Interrupt_main_out_port){endp2_out();continue;}
	 if(Interrupt_main_in_port&&USB_usb_endp2_in){endp2_in();continue;}
    }
  }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产综合视频在线观看| 色婷婷综合激情| 欧美日韩二区三区| 国产精品免费视频观看| 热久久久久久久| 在线亚洲一区观看| 中文天堂在线一区| 九色综合狠狠综合久久| 欧美少妇xxx| 国产精品国产三级国产普通话99 | 久久精品人人爽人人爽| 日韩精品乱码免费| 91九色02白丝porn| 国产精品高清亚洲| 国产一区二区在线视频| 欧美一区二区黄色| 天天av天天翘天天综合网| 色婷婷亚洲综合| 国产精品国产三级国产普通话99| 国产成人在线观看| 精品少妇一区二区三区日产乱码 | 久久精品国内一区二区三区| 欧美久久一二区| 亚洲综合色区另类av| 99久久综合国产精品| 国产色产综合产在线视频| 久久99久久精品欧美| 欧美久久久久中文字幕| 亚洲一线二线三线视频| 在线观看91视频| 一区二区三区中文在线| 99re热这里只有精品免费视频| 国产三级一区二区| 国产激情精品久久久第一区二区 | 99国产精品一区| 国产精品久久久久久久裸模| 高清不卡在线观看| 国产肉丝袜一区二区| 国产一区美女在线| 精品88久久久久88久久久| 蓝色福利精品导航| 日韩欧美不卡一区| 精品综合久久久久久8888| 欧美大片免费久久精品三p| 久久精品国产久精国产爱| 日韩精品一区二区在线观看| 久久国产精品区| www久久久久| 国产福利91精品| 国产精品欧美一级免费| www.亚洲在线| 亚洲日本va在线观看| 在线一区二区视频| 丝袜亚洲另类欧美综合| 日韩精品一区二区三区在线播放| 精品影院一区二区久久久| 国产午夜精品一区二区| 成人成人成人在线视频| 亚洲人成亚洲人成在线观看图片| 日本道免费精品一区二区三区| 亚洲午夜免费视频| 欧美一区二区在线不卡| 激情综合色综合久久| 国产精品毛片大码女人| 日本精品视频一区二区| 丝袜美腿亚洲一区| 26uuu国产一区二区三区| 丁香一区二区三区| 亚洲精品成人少妇| 欧美放荡的少妇| 激情小说欧美图片| 亚洲天堂av一区| 欧美日韩在线观看一区二区| 蜜臀av性久久久久蜜臀av麻豆| 久久色中文字幕| 99精品视频在线免费观看| 亚洲一区成人在线| 日韩精品最新网址| 波多野结衣在线一区| 亚洲一区二区综合| 欧美xxxxx裸体时装秀| 成人sese在线| 日韩精彩视频在线观看| 久久久蜜臀国产一区二区| 99re这里只有精品6| 日本女人一区二区三区| 国产欧美日韩在线观看| 欧美亚洲综合色| 国内成人精品2018免费看| 国产精品久久久久久久第一福利| 欧美日本在线看| 粉嫩嫩av羞羞动漫久久久| 亚洲激情六月丁香| 精品国产一区二区在线观看| 91亚洲精品久久久蜜桃网站| 首页综合国产亚洲丝袜| 国产精品成人网| 日韩区在线观看| 91美女片黄在线观看91美女| 美国三级日本三级久久99| 综合久久一区二区三区| 日韩欧美中文字幕公布| 99久久99久久免费精品蜜臀| 久久国产人妖系列| 亚洲国产日日夜夜| 欧美国产一区视频在线观看| 在线综合亚洲欧美在线视频| 99riav久久精品riav| 国产一区二区主播在线| 五月综合激情婷婷六月色窝| 中文字幕中文字幕在线一区| 欧美大白屁股肥臀xxxxxx| 色香色香欲天天天影视综合网| 久久99精品久久只有精品| 亚洲黄色片在线观看| 久久久国产精华| 欧美一卡二卡在线观看| 欧美中文字幕一区二区三区亚洲 | 亚洲www啪成人一区二区麻豆| 国产精品嫩草影院av蜜臀| 精品欧美一区二区在线观看| 欧美视频一区在线观看| 99久久99久久久精品齐齐| 久久99国产精品免费| 日韩精品成人一区二区在线| 亚洲精品一二三四区| 亚洲国产精品v| 久久尤物电影视频在线观看| 91精品国产乱码久久蜜臀| 色婷婷激情久久| av日韩在线网站| 国产iv一区二区三区| 九九九精品视频| 秋霞电影一区二区| 天堂久久久久va久久久久| 亚洲一区二区欧美日韩| 亚洲乱码国产乱码精品精98午夜| 中文字幕一区二区日韩精品绯色| 久久影音资源网| 欧美精品一区二区三区在线| 91麻豆精品国产自产在线| 欧美日韩视频第一区| 2023国产精华国产精品| 欧美日韩国产首页| 欧美日韩aaaaa| 欧美老人xxxx18| 欧美中文字幕久久| 在线免费观看视频一区| 在线欧美日韩国产| 91国偷自产一区二区三区观看| 99国产精品久久久久久久久久| 成人精品小蝌蚪| 岛国精品一区二区| 国产91高潮流白浆在线麻豆| 国产夫妻精品视频| 成人午夜视频福利| 不卡一区二区在线| 99精品国产91久久久久久 | 奇米色一区二区| 蜜芽一区二区三区| 老司机精品视频导航| 极品美女销魂一区二区三区| 国内精品写真在线观看| 国产精品香蕉一区二区三区| 成人教育av在线| www.色综合.com| 色94色欧美sute亚洲线路一久| 欧洲精品中文字幕| 欧美日韩性生活| 91精品国产乱| 欧美精品一区二区高清在线观看 | 欧美精三区欧美精三区| 欧美久久久久中文字幕| 日韩欧美亚洲一区二区| 久久夜色精品一区| 日本一区二区三区四区在线视频| 国产精品视频免费看| 亚洲天堂久久久久久久| 亚洲电影激情视频网站| 久久福利资源站| 国产成人精品影视| 日本韩国精品在线| 欧美老肥妇做.爰bbww视频| 欧美电视剧在线观看完整版| 欧美国产综合色视频| 一区二区成人在线| 免费精品视频在线| 成人美女在线视频| 色偷偷88欧美精品久久久| 7777精品伊人久久久大香线蕉的 | 欧美一级二级在线观看| 欧美日韩激情一区二区| 精品91自产拍在线观看一区| 国产精品色噜噜| 亚洲国产成人tv| 精品一区二区三区免费视频| 暴力调教一区二区三区| 欧美日韩免费视频| 久久久五月婷婷| 亚洲一区中文在线|