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

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

?? ctrlrequest.c

?? 增強型51單片機fs7821sd卡、mmc卡讀寫程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
    case OUT_TOKEN:
    default:
         pSotaUsbRequest->InProgress = false;
         if (TestModeParam != NO_TEST_PARAM)
         {
           CtrlSetTestMode(TestModeParam);  
           // Clear Test Mode until power reset(power cycled).
           while(1); 
         }
         break;          
  }  
}

//----------------------------------------------------------------------------
// Set Address Request 
//  NOTE:
//       It is critical on the timing of changing USB address. We must do it 
//       before next Setup Token (With new address) and after now running
//       transaction has been finished.So we end this request without using
//       state machine.  
//----------------------------------------------------------------------------
void CtrlReqSetAddress()
{
  BYTE Token = pSotaUsbRequest->Token;
      
  switch(Token)
  {
    case SETUP_TOKEN:
         { 
           PUSB_REQUEST pReq = &(pSotaUsbRequest->Request);

           UsbAddr = ((TDataCast *)&(pReq->wValue))->ucByte[0];
           CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0_STL);
           break;
         }
         
    case IN_TOKEN:
         CSRWrite(USB_BASE + USBADDR, UsbAddr);
         CSRWrite(USB_BASE + EP0_TXCNT, 0);
         CSRWrite(USB_BASE + EP0_TXCSR, EN_TX0);
         /*
            Before host set address,it would issue usb reset so we
            must enable EP1,EP2 again.(These pipe were disable default)
         */
         CSRWrite(USB_BASE + EPCTL, EN_EP0 | EN_EP1 | EN_EP2 );
         // Clear the Bulk IN/OUT stall bits.
         CSRWrite(USB_BASE + EP1_TXCSR, 0x00);
         CSRWrite(USB_BASE + EP2_RXCSR, EN_RX2);
         pSotaUsbRequest->InProgress = false;
         CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0);
         break;

    case IN_OK_TOKEN:
         CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0);    
         CSRWrite(USB_BASE + EP0_TXCSR, EN_TX0_STL); 
         break;

    case OUT_TOKEN:
    default:
         break;
  }  
}

static BYTE ConfigSetValue = 1;
//----------------------------------------------------------------------------
// Get Configuration Request 
//----------------------------------------------------------------------------
void CtrlReqGetConfiguration()
{
  BYTE Token = pSotaUsbRequest->Token;
      
  switch(Token)
  {
    case SETUP_TOKEN:
         pSotaUsbRequest->LoadInDataOk = true;
         CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0_STL);
         break;

    case IN_TOKEN:
         if (pSotaUsbRequest->LoadInDataOk)
         {
           CSRWrite(USB_BASE + EP0_TXCNT, 1);
           CSRWrite(USB_BASE + EP0_TXDATA, ConfigSetValue);
           CSRWrite(USB_BASE + EP0_TXCSR, EN_TX0);    
           pSotaUsbRequest->LoadInDataOk = false;
         }
         CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0);             
         break;   

    case IN_OK_TOKEN:
         CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0);    
         CSRWrite(USB_BASE + EP0_TXCSR, EN_TX0_STL); 
         break;         

    case OUT_TOKEN:
    default:
         // Ctrl Read End
         pSotaUsbRequest->InProgress = false;
         break;          
  }  
}  

//----------------------------------------------------------------------------
// Set Configuration Request 
//----------------------------------------------------------------------------
void CtrlReqSetConfiguration()
{
  BYTE Token = pSotaUsbRequest->Token;
    
  switch(Token)
  {
    case SETUP_TOKEN:
         {
           PUSB_REQUEST pReq = &(pSotaUsbRequest->Request);
           BYTE Value = ((TDataCast *)&(pReq->wValue))->ucByte[0];
           
           ConfigSetValue = Value; 
           CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0_STL);    
           break;
         }  
         
    case IN_TOKEN:
         CtrlClearHaltFeature();
         CSRWrite(USB_BASE + EP0_TXCNT, 0);
         CSRWrite(USB_BASE + EP0_TXCSR, EN_TX0);    
         break;
        
    case IN_OK_TOKEN:
         CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0);    
         CSRWrite(USB_BASE + EP0_TXCSR, EN_TX0_STL); 

    case OUT_TOKEN:
    default:
         pSotaUsbRequest->InProgress = false;
         break;          
  }  
}

//----------------------------------------------------------------------------
// Get Interface Request 
//----------------------------------------------------------------------------
void CtrlReqGetInterface()
{
  BYTE Token = pSotaUsbRequest->Token;
      
  switch(Token)
  {
    case SETUP_TOKEN:
         pSotaUsbRequest->LoadInDataOk = true;
         CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0_STL);
         break;

    case IN_TOKEN:
         if (pSotaUsbRequest->LoadInDataOk)
         {
           CSRWrite(USB_BASE + EP0_TXCNT, 1);
           CSRWrite(USB_BASE + EP0_TXDATA, 0x00);
           CSRWrite(USB_BASE + EP0_TXCSR, EN_TX0);    
           pSotaUsbRequest->LoadInDataOk = false;
         }
         CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0);            
         break;   

    case IN_OK_TOKEN:
         CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0);
         CSRWrite(USB_BASE + EP0_TXCSR, EN_TX0_STL);
         break;

    case OUT_TOKEN:
    default:
         // Ctrl Read End
         pSotaUsbRequest->InProgress = false;
         break;          
  }  
}  

//----------------------------------------------------------------------------
// Set Interface Request 
//----------------------------------------------------------------------------
void CtrlReqSetInterface()
{
  BYTE Token = pSotaUsbRequest->Token;
    
  switch(Token)
  {
    case SETUP_TOKEN:
         // Because we don't support Alternate-IF-Set, we do nothing here. 
         CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0_STL);    
         break;
         
    case IN_TOKEN:
         CtrlClearHaltFeature();
         CSRWrite(USB_BASE + EP0_TXCNT, 0);
         CSRWrite(USB_BASE + EP0_TXCSR, EN_TX0);    
         break;

    case IN_OK_TOKEN:
         CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0);
         CSRWrite(USB_BASE + EP0_TXCSR, EN_TX0_STL);
        
    case OUT_TOKEN:
    default:
         pSotaUsbRequest->InProgress = false;
         break;          
  }  
}

//----------------------------------------------------------------------------
// Sync Frame Request 
//----------------------------------------------------------------------------
void CtrlReqSyncFrame()
{
  BYTE Token = pSotaUsbRequest->Token;
      
  switch(Token)
  {
    case SETUP_TOKEN:
         // We do not support isochronous mode.
         CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0_STL);
         CSRWrite(USB_BASE + EP0_TXCSR, EN_TX0_STL);
         break;
   
    case IN_OK_TOKEN:
    case IN_TOKEN:
    case OUT_TOKEN:
    default:
         pSotaUsbRequest->InProgress = false;
         break;          
  }    
}

//----------------------------------------------------------------------------
// Get Max Lun Request 
//----------------------------------------------------------------------------
void CtrlReqGetMaxLun()
{
  BYTE Token = pSotaUsbRequest->Token;
    
  switch(Token)
  {
    case SETUP_TOKEN:
         pSotaUsbRequest->LoadInDataOk = true;
         CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0_STL);    
         break;

    case IN_TOKEN:
         if (pSotaUsbRequest->LoadInDataOk)
         {
           CSRWrite(USB_BASE + EP0_TXCNT, 1);
           CSRWrite(USB_BASE + EP0_TXDATA, LastDevice);   
           CSRWrite(USB_BASE + EP0_TXCSR, EN_TX0);    
           pSotaUsbRequest->LoadInDataOk = false; 
         } 
         CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0);     
         break;

    case IN_OK_TOKEN:
         CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0);
         CSRWrite(USB_BASE + EP0_TXCSR, EN_TX0_STL);
         break;

    case OUT_TOKEN:
    default:
         // Ctrl Read End
         pSotaUsbRequest->InProgress = false;
         break;          
  }  
}  

//----------------------------------------------------------------------------
// Bulk Only Reset Request 
//----------------------------------------------------------------------------
void CtrlReqBulkReset()
{
  BYTE Token = pSotaUsbRequest->Token;
    
  switch(Token)
  {
    case SETUP_TOKEN:
#ifndef CTRL_SIMULATION 
         BulkState = CBW_GET_COMPLETED;    
         CmdStatus = COMMAND_PASSED;
#endif  
         break;
                  
    case IN_TOKEN:
         CSRWrite(USB_BASE + EP0_TXCNT, 0);
         CSRWrite(USB_BASE + EP0_TXCSR, EN_TX0);    
         break;

    case IN_OK_TOKEN:
         CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0);
         CSRWrite(USB_BASE + EP0_TXCSR, EN_TX0_STL);
        
    case OUT_TOKEN:
    default:
         // Ctrl Read End
         pSotaUsbRequest->InProgress = false;
         break;          
  }  
}

//----------------------------------------------------------------------------
// Request Setup
//----------------------------------------------------------------------------
void CtrlReqSetup()
{
  PUSB_REQUEST pReq = &(pSotaUsbRequest->Request);

  memcpy((void *)pReq, (void *)UsbBuf, sizeof(USB_REQUEST));
  pSotaUsbRequest->InProgress = true;
  pSotaUsbRequest->FinishedDataLen = 0;
  pReq->wLength = ConvertEndian16(pReq->wLength);  
}

//----------------------------------------------------------------------------
// Rx Transation Check
//----------------------------------------------------------------------------  
void CtrlRxCheck()
{
  BYTE i;
  BYTE Len;
  BYTE RxTokenType = 0;

  Len = CSRRead(USB_BASE + EP0_RXCNT);
  for (i=0; i < Len; i++)
  {
    UsbBuf[i] = CSRRead(USB_BASE + EP0_RXDATA);
  }
    
  RxTokenType = CSRRead(USB_BASE + EP0_RXTOKEN);  
  if (RxTokenType & (STS_SETUP0 | STS_SETUP0_OW)) 
  {
    if (Len == USB_REQUEST_LEN)
    {
      CtrlReqSetup(); 
      pSotaUsbRequest->Token = SETUP_TOKEN; 
    }  
    else
    {
      pSotaUsbRequest->Token = BAD_SETUP_TOKEN;
    }
    // Add delay may resolve SE1 issue if using H/W incurred this issue.
//    Delay(30);
  }  
  else // Out Token Coming
    pSotaUsbRequest->Token = OUT_TOKEN;   
  CSRWrite(USB_BASE + EP0_RXTOKEN, 0x00);
}  

//--------------------------------------------------------------------
// 
//--------------------------------------------------------------------
void CtrlRequestProcess()
{
    BYTE RequestCode = pSotaUsbRequest->Request.bRequest;
    BYTE RequestType = pSotaUsbRequest->Request.bmRequestType;
  
    if((RequestType & 0x60) == 0) // Standard Request
    {  
        switch (RequestCode)
        {
            case GET_STATUS       : CtrlReqGetStatus();        return;
            case CLEAR_FEATURE    : CtrlReqClearFeature();     return;
            case SET_FEATURE      : CtrlReqSetFeature();       return;
            case SET_ADDRESS      : CtrlReqSetAddress();       return;
            case GET_DESCRIPTOR   : CtrlReqGetDescriptor();    return;
            case GET_CONFIGURATION: CtrlReqGetConfiguration(); return;
            case SET_CONFIGURATION: CtrlReqSetConfiguration(); return;
            case GET_INTERFACE    : CtrlReqGetInterface();     return;
            case SET_INTERFACE    : CtrlReqSetInterface();     return;
            case SYNCH_FRAME      : CtrlReqSyncFrame();        return;
        }
    }

    else if((RequestType & 0x60) == 0x20) // Class Request
    {
        switch (RequestCode)
        {	
            case BULKONLY_GET_MAX_LUN: CtrlReqGetMaxLun(); return;
            case BULKONLY_RESET      : CtrlReqBulkReset(); return;
        }
    }        

    pSotaUsbRequest->InProgress = false;
    CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0);    
    CSRWrite(USB_BASE + EP0_TXCSR, EN_TX0_STL);      
}  

//----------------------------------------------------------------------------
// Ctrl Pipe Check
//----------------------------------------------------------------------------
void UsbCtrlIntHandler(BYTE IntEvent)
{
  // Clear IRQs.
  CSRWrite(USB_BASE + EPIE, ~IntEvent); 		

  if (IntEvent & IRQ_IN0)
  {
    pSotaUsbRequest->Token = IN_TOKEN;     
    CSRWrite(USB_BASE + EP0_RXCSR, 0); // Fix the PHY miss IN ACK problem
  }
  if (IntEvent & IRQ_TX0) // This irq mean IN packet Completed
    pSotaUsbRequest->Token = IN_OK_TOKEN;
  if (IntEvent & IRQ_RX0)
    CtrlRxCheck();  
  
  if (pSotaUsbRequest->InProgress)
    CtrlRequestProcess();  
  else
    CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0);    
}  
	
//----------------------------------------------------------------------------
// Init USB
//----------------------------------------------------------------------------
void UsbInit()
{
    BYTE Reg;

    CtrlPktSize = CTRL_PKT_SIZE; 
  	
    CSRWrite(USB_BASE + EPIM, 0xdf); 
    CSRWrite(USB_BASE + EPCTL, EN_EP0 | EN_EP1 | EN_EP2);
    pSotaUsbRequest               = &SotaUsbRequest;
    pSotaUsbRequest->InProgress   = false;
    pSotaUsbRequest->LoadInDataOk = false;
    pSotaUsbRequest->HaltStatus   = false;

    InitBulkPipe();  

    while(1) // Detect USB Link Speed
    {
        Reg = CSRRead(USB_BASE + USB_SPEED);
        if(Reg & SPEED_READY)
            break;
    }
}
  

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
xnxx国产精品| 亚洲人一二三区| 色婷婷综合久色| 免费看精品久久片| 亚洲美女屁股眼交3| 久久久精品欧美丰满| 欧美喷潮久久久xxxxx| 99久久精品国产一区| 精品在线一区二区三区| 亚洲国产日韩一区二区| 国产精品乱子久久久久| 日韩一区二区三区免费看| 一本一道久久a久久精品 | 色婷婷国产精品| 国产露脸91国语对白| 免费观看一级特黄欧美大片| 亚洲黄网站在线观看| 国产精品污网站| 国产婷婷色一区二区三区在线| 日韩一卡二卡三卡| 欧美日韩国产一区| 91成人在线精品| 91小视频免费观看| 成人av在线看| 国产成人av一区二区| 韩国一区二区三区| 极品瑜伽女神91| 麻豆久久一区二区| 人人爽香蕉精品| 亚洲国产精品久久久久秋霞影院 | 亚洲成av人片一区二区梦乃 | 秋霞电影网一区二区| 一二三区精品福利视频| 自拍偷拍国产精品| 国产精品久久久久久亚洲伦| 国产欧美日韩在线| 亚洲国产精品二十页| 国产精品免费免费| 国产精品久久久久久久久搜平片| 日本一区二区不卡视频| 亚洲国产精品成人综合色在线婷婷| 久久久一区二区三区| 久久蜜臀精品av| 日本一区二区成人在线| 中文字幕亚洲区| 玉足女爽爽91| 亚洲国产精品麻豆| 美女高潮久久久| 国产综合成人久久大片91| 国产一区二区0| yourporn久久国产精品| 色综合久久99| 6080日韩午夜伦伦午夜伦| 欧美大胆一级视频| 久久久久久免费毛片精品| 国产蜜臀av在线一区二区三区| 国产精品国产自产拍高清av王其| 成人欧美一区二区三区黑人麻豆| 亚洲另类色综合网站| 亚洲成人av福利| 久久精品国内一区二区三区| 国产一区二区主播在线| 成人av免费观看| 精品视频在线看| 26uuu精品一区二区 | 久久99在线观看| 懂色av中文字幕一区二区三区| 91色综合久久久久婷婷| 欧美精品自拍偷拍动漫精品| 久久久久国产精品麻豆ai换脸| 国产精品久久久久久亚洲伦| 亚洲6080在线| 国产精品一区二区久久精品爱涩| 一本大道久久a久久精品综合| 在线不卡欧美精品一区二区三区| 精品国产乱码久久久久久免费| 国产精品免费观看视频| 亚洲国产成人av| 高清shemale亚洲人妖| 欧美午夜精品一区二区蜜桃| 久久久久久一二三区| 亚洲线精品一区二区三区八戒| 国产一区二区三区四| 色偷偷久久一区二区三区| 日韩午夜在线观看视频| 国产精品国产精品国产专区不蜜 | 日韩欧美激情在线| 国产精品第一页第二页第三页| 亚洲成人免费av| 成人免费视频免费观看| 91精品国产综合久久婷婷香蕉| 中文字幕精品一区二区三区精品 | 日韩黄色在线观看| 成人免费毛片高清视频| 日韩欧美一二区| 亚洲午夜影视影院在线观看| 国产不卡高清在线观看视频| 在线播放中文一区| 亚洲色图另类专区| 国产尤物一区二区| 欧美丰满一区二区免费视频| 日韩美女视频19| 国产成人av福利| 精品国偷自产国产一区| 亚洲成人综合在线| 蜜臀av一区二区三区| 国产成人av一区| 51精品国自产在线| 一区二区三区在线看| 国产成人在线免费| 日韩一区二区中文字幕| 国产一区二三区好的| 美腿丝袜亚洲色图| 麻豆精品在线视频| 久久se精品一区精品二区| 欧美a一区二区| 久久精品二区亚洲w码| 91免费版在线| 美国毛片一区二区三区| 亚洲欧洲精品一区二区三区| 国产精品久久久久影院老司| 中文字幕视频一区二区三区久| 亚洲欧洲日韩在线| 亚洲精品日韩综合观看成人91| 亚洲情趣在线观看| 亚洲成av人影院在线观看网| 日韩在线一二三区| 精品一区二区免费看| 国产一区二区按摩在线观看| 成人小视频在线观看| 99国产麻豆精品| 欧美中文字幕亚洲一区二区va在线 | 国产成人av资源| a美女胸又www黄视频久久| 色综合天天综合| 91麻豆精品国产| 久久综合九色综合97婷婷| 国产女同互慰高潮91漫画| 亚洲男同性恋视频| 美女视频一区在线观看| 国产成人精品亚洲午夜麻豆| 99久久婷婷国产综合精品| 欧美日韩精品一区视频| 精品入口麻豆88视频| 亚洲人成网站影音先锋播放| 日韩av不卡在线观看| 国产乱码精品1区2区3区| 一本大道av一区二区在线播放 | 午夜久久电影网| 精品制服美女久久| 99精品视频一区二区三区| 欧美撒尿777hd撒尿| 精品久久久久av影院| 亚洲女厕所小便bbb| 精久久久久久久久久久| 在线免费一区三区| 久久免费午夜影院| 三级影片在线观看欧美日韩一区二区 | 久久久精品免费观看| 亚洲线精品一区二区三区八戒| 久久成人久久爱| 在线观看亚洲a| 国产亚洲精品久| 亚洲男女毛片无遮挡| 国产老妇另类xxxxx| 制服.丝袜.亚洲.另类.中文| 亚洲国产精品精华液2区45| 天堂午夜影视日韩欧美一区二区| 成人免费毛片片v| xvideos.蜜桃一区二区| 午夜视频一区二区三区| 91丝袜国产在线播放| 国产亚洲福利社区一区| 美日韩一区二区| 欧美午夜精品电影| 国产精品久久久久久妇女6080| 美女诱惑一区二区| 欧美精品久久99久久在免费线 | 亚洲手机成人高清视频| 激情偷乱视频一区二区三区| 欧美乱熟臀69xxxxxx| 成人免费一区二区三区视频 | 欧美日韩精品专区| 亚洲视频资源在线| 狠狠网亚洲精品| 欧美日韩免费观看一区三区| 日本一区二区三区高清不卡| 日韩国产精品久久| 成人性视频网站| 日韩免费视频线观看| 亚洲综合色丁香婷婷六月图片| 粉嫩高潮美女一区二区三区| 91精品国产乱码| 亚洲精品va在线观看| 国产99久久久国产精品潘金| 欧美一区二区精品久久911| 一区二区三区中文在线| 成人在线综合网| 久久精品人人爽人人爽| 老司机一区二区|