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

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

?? usb_bot.c

?? STM32F10x USB Library V1.0
?? C
字號(hào):
/******************** (C) COPYRIGHT 2007 STMicroelectronics ********************
* File Name          : usb_bot.c
* Author             : MCD Application Team
* Version            : V1.0
* Date               : 10/08/2007
* Description        : BOT State Machine management
********************************************************************************
* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*******************************************************************************/

/* Includes ------------------------------------------------------------------*/
#include "memory.h"
#include "usb_bot.h"
#include "usb_regs.h"
#include "usb_scsi.h"
#include "hw_config.h"

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
u8 Bot_State;
u8 Bulk_Data_Buff[BULK_MAX_PACKET_SIZE];  /* data buffer*/
u16 Data_Len;
Bulk_Only_CBW CBW;
Bulk_Only_CSW CSW;

/* Extern variables ----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Extern function prototypes ------------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

/*******************************************************************************
* Function Name  : Mass_Storage_In
* Description    : Mass Storage IN transfer.
* Input          : None.
* Output         : None.
* Return         : None.
*******************************************************************************/
void Mass_Storage_In (void)
{
  switch (Bot_State)
  {
    case BOT_CSW_Send:
    case BOT_ERROR:
      Bot_State = BOT_IDLE;
      SetEPRxStatus(ENDP2, EP_RX_VALID);/* enable the Endpoint to recive the next cmd*/
      break;
    case BOT_DATA_IN:
      switch (CBW.CB[0])
      {
        case SCSI_READ10:
          SCSI_Read10_Cmd();
          break;
      }
      break;
    case BOT_DATA_IN_LAST:
      Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
      SetEPRxStatus(ENDP2, EP_RX_VALID);
      break;

    default:
      break;
  }
}

/*******************************************************************************
* Function Name  : Mass_Storage_Out
* Description    : Mass Storage OUT transfer.
* Input          : None.
* Output         : None.
* Return         : None.
*******************************************************************************/
void Mass_Storage_Out (void)
{
  u8 CMD;
  CMD = CBW.CB[0];
  Data_Len = GetEPRxCount(ENDP2);

  PMAToUserBufferCopy(Bulk_Data_Buff, ENDP2_RXADDR, Data_Len);

  switch (Bot_State)
  {
    case BOT_IDLE:
      CBW_Decode();
      break;
    case BOT_DATA_OUT:
      if (CMD == SCSI_WRITE10)
      {
        SCSI_Write10_Cmd();
        break;
      }
      Bot_Abort(DIR_OUT);
      Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
      Set_CSW (CSW_PHASE_ERROR, SEND_CSW_DISABLE);
      break;
    default:
      Bot_Abort(BOTH_DIR);
      Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
      Set_CSW (CSW_PHASE_ERROR, SEND_CSW_DISABLE);
      break;
  }
}

/*******************************************************************************
* Function Name  : CBW_Decode
* Description    : Decode the received CBW and call the related SCSI command 
*                 routine. 
* Input          : None.
* Output         : None.
* Return         : None.
*******************************************************************************/
void CBW_Decode(void)
{
  u32 Counter;

  for (Counter = 0; Counter < Data_Len; Counter++)
  {
    *((u8 *)&CBW + Counter) = Bulk_Data_Buff[Counter];
  }
  CSW.dTag = CBW.dTag;
  CSW.dDataResidue = CBW.dDataLength;
  if (Data_Len != BOT_CBW_PACKET_LENGTH)
  {
    Bot_Abort(BOTH_DIR);
    /* reset the CBW.dSignature to desible the clear feature until receiving a Mass storage reset*/
    CBW.dSignature = 0;
    Set_Scsi_Sense_Data(ILLEGAL_REQUEST, PARAMETER_LIST_LENGTH_ERROR);
    Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
    return;
  }

  if (CBW.dSignature == BOT_CBW_SIGNATURE)
  {
    /* Valid CBW */
    if ((CBW.bLUN != 0) || (CBW.bCBLength < 1) || (CBW.bCBLength > 16))
    {
      Bot_Abort(BOTH_DIR);
      Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
      Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
    }
    else
    {
      switch (CBW.CB[0])
      {
        case SCSI_REQUEST_SENSE:
          SCSI_RequestSense_Cmd ();
          break;
        case SCSI_INQUIRY:
          SCSI_Inquiry_Cmd();
          break;
        case SCSI_START_STOP_UNIT:
          SCSI_Start_Stop_Unit_Cmd();
        case SCSI_ALLOW_MEDIUM_REMOVAL:
          SCSI_Start_Stop_Unit_Cmd();
          break;
        case SCSI_MODE_SENSE6:
          SCSI_ModeSense6_Cmd ();
          break;
        case SCSI_MODE_SENSE10:
          SCSI_ModeSense10_Cmd ();
          break;
        case SCSI_READ_FORMAT_CAPACITIES:
          SCSI_ReadFormatCapacity_Cmd();
          break;
        case SCSI_READ_CAPACITY10:
          SCSI_ReadCapacity10_Cmd();
          break;
        case SCSI_TEST_UNIT_READY:
          SCSI_TestUnitReady_Cmd();
          break;
        case SCSI_READ10:
          SCSI_Read10_Cmd();
          break;
        case SCSI_WRITE10:
          SCSI_Write10_Cmd();
          break;
        case SCSI_VERIFY10:
          SCSI_Verify10_Cmd();
          break;
          /*Unsupported command*/

        case SCSI_MODE_SELECT10:
          SCSI_Mode_Select10_Cmd();
          break;
        case SCSI_MODE_SELECT6:
          SCSI_Mode_Select6_Cmd();
          break;
        case SCSI_FORMAT_UNIT:
          SCSI_FormatUnit_Cmd();
          break;
        case SCSI_SEND_DIAGNOSTIC:
          SCSI_Send_Diagnostic_Cmd();
          break;
        case SCSI_READ6:
          SCSI_Read6_Cmd();
          break;
        case SCSI_READ12:
          SCSI_Read12_Cmd();
          break;
        case SCSI_READ16:
          SCSI_Read16_Cmd();
          break;
        case SCSI_READ_CAPACITY16:
          SCSI_READ_CAPACITY16_Cmd();
          break;
        case SCSI_WRITE6:
          SCSI_Write6_Cmd();
          break;
        case SCSI_WRITE12:
          SCSI_Write12_Cmd();
          break;
        case SCSI_WRITE16:
          SCSI_Write16_Cmd();
          break;
        case SCSI_VERIFY12:
          SCSI_Verify12_Cmd();
          break;
        case SCSI_VERIFY16:
          SCSI_Verify16_Cmd();
          break;

        default:
        {
          Bot_Abort(BOTH_DIR);
          Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_COMMAND);
          Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
        }
      }
    }
  }
  else
  {
    /* Invalid CBW */
    Bot_Abort(BOTH_DIR);
    Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_COMMAND);
    Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
  }
}

/*******************************************************************************
* Function Name  : Transfer_Data_Request
* Description    : Send the request response to the PC HOST.
* Input          : u8* Data_Address : point to the data to transfer.
*                  u16 Data_Length : the nember of Bytes to transfer.
* Output         : None.
* Return         : None.
*******************************************************************************/
void Transfer_Data_Request(u8* Data_Pointer, u16 Data_Len)
{
  UserToPMABufferCopy(Data_Pointer, ENDP1_TXADDR, Data_Len);

  SetEPTxCount(ENDP1, Data_Len);
  SetEPTxStatus(ENDP1, EP_TX_VALID);
  Bot_State = BOT_DATA_IN_LAST;
  CSW.dDataResidue -= Data_Len;
  CSW.bStatus = CSW_CMD_PASSED;
}

/*******************************************************************************
* Function Name  : Set_CSW
* Description    : Set the SCW with the needed fields.
* Input          : u8 CSW_Status this filed can be CSW_CMD_PASSED,CSW_CMD_FAILED,
*                  or CSW_PHASE_ERROR.
* Output         : None.
* Return         : None.
*******************************************************************************/
void Set_CSW (u8 CSW_Status, u8 Send_Permission)
{
  CSW.dSignature = BOT_CSW_SIGNATURE;
  CSW.bStatus = CSW_Status;

  UserToPMABufferCopy(((u8 *)& CSW), ENDP1_TXADDR, CSW_DATA_LENGTH);

  SetEPTxCount(ENDP1, CSW_DATA_LENGTH);
  Bot_State = BOT_ERROR;
  if (Send_Permission)
  {
    Bot_State = BOT_CSW_Send;
    SetEPTxStatus(ENDP1, EP_TX_VALID);
  }

}

/*******************************************************************************
* Function Name  : Bot_Abort
* Description    : Stall the needed Endpoint according to the selected direction.
* Input          : Endpoint direction IN, OUT or both directions
* Output         : None.
* Return         : None.
*******************************************************************************/
void Bot_Abort(u8 Direction)
{
  switch (Direction)
  {
    case DIR_IN :
      SetEPTxStatus(ENDP1, EP_TX_STALL);
      break;
    case DIR_OUT :
      SetEPRxStatus(ENDP2, EP_RX_STALL);
      break;
    case BOTH_DIR :
      SetEPTxStatus(ENDP1, EP_TX_STALL);
      SetEPRxStatus(ENDP2, EP_RX_STALL);
      break;
    default:
      break;
  }
}

/******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合中文字幕国产| 不卡av免费在线观看| 国产精品国产馆在线真实露脸| 在线精品视频一区二区三四 | 亚洲激情一二三区| 欧美xxxxxxxxx| 在线免费观看成人短视频| 国内精品伊人久久久久av一坑| 亚洲综合在线第一页| 国产欧美精品一区| 日韩免费看的电影| 欧美三级日韩三级| 波多野结衣在线一区| 韩国在线一区二区| 日韩精品亚洲一区二区三区免费| 国产精品欧美综合在线| 26uuu国产一区二区三区| 欧美日韩亚洲高清一区二区| 北条麻妃国产九九精品视频| 国产在线播放一区三区四| 偷窥国产亚洲免费视频| 亚洲女与黑人做爰| 亚洲国产精品黑人久久久| 日韩精品一区二区三区在线播放| 欧美三级日本三级少妇99| 色噜噜夜夜夜综合网| 风间由美一区二区三区在线观看 | 成人永久看片免费视频天堂| 久久成人综合网| 日精品一区二区三区| 亚洲精品成人在线| 国产欧美一区二区精品忘忧草| 欧美一区二区三区系列电影| 在线看日本不卡| 色综合久久99| gogo大胆日本视频一区| 国产91对白在线观看九色| 激情五月激情综合网| 精品一区二区三区在线观看国产| 日韩av中文在线观看| 亚洲成在人线免费| 五月激情六月综合| 视频一区二区中文字幕| 日日摸夜夜添夜夜添亚洲女人| 亚洲一区av在线| 亚洲一区二区三区视频在线播放 | 日韩欧美在线影院| 日韩三级中文字幕| 日韩欧美黄色影院| 国产亚洲综合色| 中文无字幕一区二区三区| 欧美极品少妇xxxxⅹ高跟鞋| 国产精品每日更新在线播放网址 | 亚洲国产精品激情在线观看| 国产精品免费视频一区| 国产精品无圣光一区二区| 亚洲视频一二三| 亚洲午夜免费电影| 婷婷亚洲久悠悠色悠在线播放| 免费一区二区视频| 国产精品一区二区久久不卡| av在线这里只有精品| 在线观看网站黄不卡| 精品视频一区 二区 三区| 555www色欧美视频| 精品国产乱码久久久久久1区2区| 欧美国产日韩a欧美在线观看| 亚洲欧美国产高清| 日本一区中文字幕| 国产成人鲁色资源国产91色综| 成人av手机在线观看| 欧美人与性动xxxx| 日韩精品一区二区三区视频在线观看 | 91精品国产91久久久久久一区二区| 日韩欧美123| 国产精品视频在线看| 一区二区三区欧美视频| 麻豆成人久久精品二区三区红| 国产精品123| 欧美艳星brazzers| 久久伊人蜜桃av一区二区| 国产精品免费丝袜| 日韩电影在线一区| 成人性生交大片免费看视频在线 | 91原创在线视频| 欧美精品乱码久久久久久按摩| 久久久精品日韩欧美| 一区二区三区在线视频免费 | 99久久久久久99| 欧美日本韩国一区二区三区视频| 久久久亚洲欧洲日产国码αv| 综合久久国产九一剧情麻豆| 日本aⅴ精品一区二区三区| 国产凹凸在线观看一区二区| 欧美日韩综合不卡| 久久精品一区四区| 五月天亚洲精品| 成人免费高清在线观看| 日韩一区二区在线观看视频 | 日本欧美一区二区| 色综合久久天天综合网| 久久久国产一区二区三区四区小说| 亚洲另类在线一区| 国产在线观看免费一区| 欧美制服丝袜第一页| 欧美激情综合在线| 免费观看成人鲁鲁鲁鲁鲁视频| 91免费观看视频在线| 久久综合九色综合欧美就去吻| 亚洲第一久久影院| 91麻豆精品一区二区三区| www国产亚洲精品久久麻豆| 视频一区视频二区中文字幕| 91麻豆视频网站| 国产精品午夜免费| 久久se精品一区二区| 欧美老女人在线| 一区二区三区在线视频观看 | 97国产精品videossex| 久久在线观看免费| 蜜桃久久精品一区二区| 欧美日韩视频在线观看一区二区三区 | 午夜在线成人av| 日本高清不卡视频| 国产精品国产自产拍高清av| 国产.欧美.日韩| 久久先锋影音av| 精品一区二区免费| 日韩精品一区二区三区在线观看 | 国产乱人伦偷精品视频免下载| 日韩欧美国产wwwww| 免费在线观看不卡| 日韩精品一区二区三区在线观看 | 亚洲一区二区欧美日韩| 色综合视频在线观看| 国产精品高潮呻吟| 成人午夜视频网站| 中文字幕免费不卡| 成人在线视频一区| 中文字幕亚洲在| 91免费版pro下载短视频| 亚洲视频电影在线| 欧美午夜精品久久久久久孕妇| 亚洲影视在线观看| 91精品一区二区三区在线观看| 日韩成人午夜电影| 精品噜噜噜噜久久久久久久久试看 | 久久综合色一综合色88| 精品亚洲aⅴ乱码一区二区三区| 日韩欧美综合一区| 国产精品影视在线| 国产精品无遮挡| 色天天综合久久久久综合片| 伊人开心综合网| 欧美一区二区三区影视| 国产精品综合av一区二区国产馆| 久久精品在这里| 91污片在线观看| 亚洲午夜在线观看视频在线| 日韩视频永久免费| 成人在线视频首页| 亚洲国产va精品久久久不卡综合| 日韩视频中午一区| 国产91精品免费| 亚洲午夜日本在线观看| 精品久久一区二区三区| www.视频一区| 日韩在线a电影| 久久精品一区二区三区四区| 99精品视频在线播放观看| 午夜激情一区二区| 久久影院午夜片一区| 色综合天天综合网国产成人综合天| 午夜精品成人在线视频| 久久先锋影音av| 色素色在线综合| 国产又粗又猛又爽又黄91精品| 亚洲欧美视频一区| 欧美一区二区三区在线观看视频 | 国产a级毛片一区| 亚洲一本大道在线| 国产日韩成人精品| 欧美日韩久久一区| 成人福利在线看| 免费观看成人av| 亚洲女人小视频在线观看| 精品久久久三级丝袜| 欧美亚洲综合在线| 夫妻av一区二区| 麻豆精品一区二区三区| 伊人夜夜躁av伊人久久| 国产午夜亚洲精品午夜鲁丝片| 在线观看一区日韩| 成人美女视频在线看| 亚洲aaa精品| 亚洲欧洲一区二区在线播放| 精品日韩在线一区| 在线免费观看日本一区| www.亚洲在线| 国产精品小仙女|