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

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

?? usb.c

?? D12 的一些 開發資料 對開發D12相當有用
?? C
?? 第 1 頁 / 共 3 頁
字號:
      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 {usb_flags.flags.setup_packet_out=1;return;}
 }
 else
  {
   select_endpoint(0);
   clear_buffer();
  }
}

void endp0_in(void)                                        //終端點0輸入處理
{
 read_last_status(1);
 if(usb_flags.flags.setup_packet_in||usb_flags.flags.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_flags.flags.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數據包
{
  
  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_flags.flags.usb_endp2_in=0;
  usb_flags.flags.usb_endp2_out=0;
  SCSI.Status.Command=1;
  SCSI.Status.Data=0;
}

void write_10(void)                                                         //SCSI寫操作
{
 unsigned long int LBA,Byte_Count;
 unsigned char i;
  if(SCSI.Status.Data)
  {
   for(i=0;i<4;i++)
   {
    LBA<<=8;
    LBA+=cbw.CBWCB[2+i];
   }
//   pData=get_physical_addr(LBA);
   Byte_Count=0;
   Byte_Count+=cbw.CBWCB[7];
   Byte_Count<<=8;
   Byte_Count+=cbw.CBWCB[8];
   Byte_Count<<=9;
 while(usb_flags.flags.usb_endp2_out)
  {
   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);
	 }
   }
 }
}

void endp2_out(void)                                                     //主端點輸出處理
{
// printc(0xcc);
 if(SCSI.Status.Command)
  {
   if(read_endpoint_buff(4,sizeof(CBW),(unsigned char *)(&cbw))!=sizeof(CBW)){error(2);return;}
   if(cbw.dCBWSignature!=0x55534243){error(3);return;}
   SCSI.Status.Command=0;
   SCSI.Status.Data=1;
   if(cbw.bmCBWFlags&0x80)
    {
	 usb_flags.flags.usb_endp2_in=1;
	 usb_flags.flags.usb_endp2_out=0;
	}
   else
    {
	 usb_flags.flags.usb_endp2_in=0;
	 usb_flags.flags.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();
  }
}

unsigned char *get_physical_addr(unsigned long int LBA)                        //從LBA獲取物理地址
{
 if(LBA==0)return DBR;
 if(LBA==2)return FAT;
 if(LBA==0x40)return ZERO;
 if(LBA==0X0A)return FAT;
}


void read_10(void)                                                              //SCSI讀處理
{
 unsigned long int LBA=0,Byte_Count;
 unsigned long int count=0;
 unsigned char i;
 if(SCSI.Status.Data)
  {
   for(i=0;i<4;i++)
   {
    LBA<<=8;
    LBA+=cbw.CBWCB[2+i];
   }
   pData=get_physical_addr(LBA);
   Byte_Count=0;
   Byte_Count+=cbw.CBWCB[7];
   Byte_Count<<=8;
   Byte_Count+=cbw.CBWCB[8];
   Byte_Count<<=9;
   i=0;
  while(usb_flags.flags.usb_endp2_in)
   {
    if(LBA==0)
       if(count<512)pData=DBR+count;
	   else 
	    if(count==512)pData=FAT;
		else pData=ZERO;
	if(LBA==2)
//	   if(count<64)pData=FAT;
//	   else
 //	    if(count==512*7)pData=FAT;
 //      else
		 pData=ZERO;
 	if(LBA==8)
 //	    if(count<512)pData=ZERO;
 //		else 
 //		 if(count==512)pData=FAT;
 //		 else 
		  pData=ZERO;
     if(LBA==0x10)
	    if(count==512)pData=FAT;
	   	 else pData=ZERO;
	if(LBA==0x21)
	 if(count==0)
//	  else
       pData=ROOT_DIR;
	   else pData=ZERO;

	if(LBA==0x40)
	  if(count<240)pData=FILE_DATA+count;
	  else 
	    pData=ZERO;

   while(select_endpoint(5)&0x01);
   if(Byte_Count>MAX_BULK_DATA_SIZE)
   {
    write_endpoint_buff(5,MAX_BULK_DATA_SIZE,pData);
//    pData+=MAX_BULK_DATA_SIZE;
    Byte_Count-=MAX_BULK_DATA_SIZE;
//    SCSI.Status.Data=1;
   }
  else
   {
    write_endpoint_buff(5,Byte_Count,pData);
    Return_CSW(0x00,SUCCESS);
   }
  count+=64;
  }
 }
 else error(2);return;
}

void endp2_in(void)                                      //主端點輸入處理
{
    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();
// delay(1000);
// init_comport(57600);
 init_usb();
 connect_usb();
// send_to_comport('O');
// send_to_comport('K');
  
 while(1)
  { 
   if(!USB_INT)
    {
  	 read_interrupt_register();
//      delay(10);
//      printc(Interrupt_Register.Register[0]);
	 if(Interrupt_Register.Interrupt.bus_reset){usb_bus_reset();continue;}
	 if(Interrupt_Register.Interrupt.suspend_change){usb_bus_suspend();continue;}
         if(Interrupt_Register.Interrupt.control_out_port){endp0_out();continue;}
	 if(Interrupt_Register.Interrupt.control_in_port&&usb_flags.flags.usb_endp0_in){endp0_in();continue;}
//	 if(Interrupt_Register.Interrupt.port_out_1)endp1_out();
//	 if(Interrupt_Register.Interrupt.port_in_1)endp1_in();
	 if(Interrupt_Register.Interrupt.main_out_port){endp2_out();continue;}
	 if(Interrupt_Register.Interrupt.main_in_port&&usb_flags.flags.usb_endp2_in){endp2_in();continue;}
    }
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜一区二区三区| 不卡区在线中文字幕| 成人自拍视频在线观看| 欧美日韩国产一级二级| 国产精品久久久久久久午夜片 | 欧美色中文字幕| 久久亚洲一区二区三区四区| 亚洲图片欧美色图| 成人av免费网站| 国产亚洲成av人在线观看导航 | 日韩精品一区二区三区四区| 亚洲综合无码一区二区| 高清不卡一区二区在线| 日韩欧美综合在线| 天天影视涩香欲综合网| 欧美在线看片a免费观看| 国产精品你懂的| 成人午夜精品在线| 久久婷婷国产综合精品青草| 青青草国产精品97视觉盛宴| 欧美精品一卡二卡| 亚洲国产精品久久艾草纯爱 | 亚洲观看高清完整版在线观看| 成人午夜在线视频| 欧美激情在线看| 国产麻豆9l精品三级站| 久久久亚洲精华液精华液精华液| 免费三级欧美电影| 欧美xxxx老人做受| 国产在线国偷精品免费看| 欧美精品一区二| 国产在线视频一区二区| 国产亚洲成av人在线观看导航| 国内成人免费视频| 久久久久久99久久久精品网站| 国产一区二区三区在线观看免费视频| 日韩午夜激情电影| 韩国女主播成人在线观看| 久久久久久一级片| 不卡免费追剧大全电视剧网站| 中文字幕精品在线不卡| 91欧美激情一区二区三区成人| 中文字幕一区二区三区视频| av不卡一区二区三区| 亚洲精品国产无天堂网2021| 欧美三级视频在线| 日本大胆欧美人术艺术动态| 久久伊人蜜桃av一区二区| 国产成人精品免费网站| 亚洲免费av在线| 91精品国产色综合久久ai换脸 | 91色porny| 婷婷国产在线综合| 久久精品欧美日韩| 99久久亚洲一区二区三区青草 | 成人免费一区二区三区视频| 欧美色图激情小说| 激情丁香综合五月| 亚洲婷婷国产精品电影人久久| 欧美视频一区在线观看| 精品一区二区精品| 亚洲精品久久久久久国产精华液| 欧美一区二区视频观看视频| 国产成人av电影在线观看| 一区二区三区毛片| 精品久久久三级丝袜| 91丨porny丨户外露出| 日本成人在线网站| 亚洲视频资源在线| 欧美成人一区二区三区片免费| 99国产一区二区三精品乱码| 蜜臀va亚洲va欧美va天堂| 国产精品久久一级| 欧美电视剧在线观看完整版| 色素色在线综合| 国产成人精品免费看| 日本欧美一区二区在线观看| 国产精品国产自产拍高清av| 日韩一区二区在线观看| 91原创在线视频| 国产伦精品一区二区三区视频青涩 | 国产欧美视频一区二区三区| 欧美无乱码久久久免费午夜一区 | 欧美日韩综合一区| 成人综合在线网站| 老司机一区二区| 亚洲一二三四区| 国产精品电影一区二区三区| 精品国产亚洲在线| 欧美裸体bbwbbwbbw| 色综合欧美在线| 成人高清伦理免费影院在线观看| 日本不卡一区二区三区高清视频| 1区2区3区国产精品| 国产亚洲欧美日韩在线一区| 欧美一级xxx| 欧美日韩一区二区电影| 91丨九色丨黑人外教| 国产91在线看| 国产精品18久久久久久久网站| 日韩国产在线观看| 亚洲国产成人精品视频| 亚洲第一二三四区| 亚洲一区二区在线免费观看视频| 国产精品久久久久影院亚瑟| 国产亚洲一区二区三区四区| 精品理论电影在线| 26uuu亚洲婷婷狠狠天堂| 日韩欧美一区二区不卡| 日韩一级免费观看| 精品国产一区二区亚洲人成毛片 | 91精品在线麻豆| 欧美精品在线观看播放| 欧美疯狂做受xxxx富婆| 欧美日韩精品电影| 欧美日本在线一区| 6080日韩午夜伦伦午夜伦| 欧美日韩不卡视频| 欧美一区二区三区婷婷月色 | 欧美理论电影在线| 在线播放日韩导航| 日韩一级欧美一级| 精品999在线播放| 国产午夜亚洲精品午夜鲁丝片 | 在线观看视频一区二区| 欧美自拍偷拍一区| 宅男噜噜噜66一区二区66| 日韩一区二区免费视频| 久久久久久一二三区| 国产蜜臀av在线一区二区三区| 国产精品免费久久| 亚洲欧美视频一区| 日韩av成人高清| 国产激情一区二区三区四区 | 国产日韩视频一区二区三区| 国产精品色婷婷| 亚洲一区中文在线| 琪琪一区二区三区| 国产98色在线|日韩| 色一情一伦一子一伦一区| 欧美三区免费完整视频在线观看| 欧美一区二区福利在线| 国产午夜久久久久| 亚洲精品欧美二区三区中文字幕| 日韩精品视频网站| 国产1区2区3区精品美女| 91福利资源站| 2020国产精品| 一区二区国产视频| 激情欧美一区二区三区在线观看| av不卡免费电影| 日韩欧美资源站| 综合色天天鬼久久鬼色| 日韩av成人高清| 99久久夜色精品国产网站| 欧美精品一级二级三级| 中文字幕不卡一区| 午夜久久电影网| 成人黄色在线看| 欧美一二三四在线| 一区二区三区在线视频观看58 | 日韩高清不卡一区| 成人性生交大片免费看中文网站| 777午夜精品视频在线播放| 中文字幕 久热精品 视频在线 | 99re这里只有精品首页| 日韩一区二区免费高清| 亚洲精品你懂的| 国产超碰在线一区| 日韩精品一区二区三区蜜臀| 亚洲激情男女视频| 成人精品在线视频观看| 精品国产乱码久久久久久久久| 亚洲成人免费av| 色域天天综合网| 国产精品亲子伦对白| 久久爱www久久做| 日韩一级免费一区| 舔着乳尖日韩一区| 色婷婷精品大在线视频| 亚洲国产精品av| 国产精品99久久久久久久女警 | 亚洲综合在线五月| a级高清视频欧美日韩| 欧美成人三级在线| 亚洲成a人v欧美综合天堂下载| 91美女片黄在线观看| 国产女主播一区| 国产精品69毛片高清亚洲| 日韩欧美一区二区在线视频| 日韩高清在线一区| 欧美精品久久久久久久多人混战| 亚洲日本乱码在线观看| 成人91在线观看| 国产精品久久久久永久免费观看 | 欧美国产日产图区| 成人精品国产福利| 国产精品久久久久一区二区三区| 国产99久久久久| 国产精品乱码一区二区三区软件|