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

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

?? scsi.c

?? NXP LPC系列AMR7的開發(fā)程序源碼(LCD
?? C
?? 第 1 頁 / 共 3 頁
字號:
  BotStatus.DataComplete = DataComplete;
  // Update DataResidue
  Csw.dCSWDataResidue -= DataSize;
  // Init DMA Transfer form BOT OUT EP
  USB_DmaInitTransfer((USB_Endpoint_t)BulkInEp,
                       DMA_BOT_IN_DES,
                      (pInt32U)pData,
                       BulkInEpMaxSize,
                       DataSize,
                       NULL,
                       FALSE);
  __set_interrupt_state(save);
  return BotPass;
}

/*************************************************************************
 * Function Name: BotSendStatus
 * Parameters:  Int32U DataSize, Int8U * pData, Boolean DataComplete
 *
 * Return: BotToUserStatus_t
 *
 * Description: Init Transmit of the CSW
 *
 *************************************************************************/
void BotSendStatus (void)
{
Int32U save = __get_interrupt_state();
  __disable_interrupt();
  BotState = BotSendCsw;
  if(BotStatus.PhaseError)
  {
    Csw.bCSWStatus = CswPhaseError;
  }
  else if (BotStatus.CmdFault)
  {
    Csw.bCSWStatus = CswFailed;
  }
  else
  {
    Csw.bCSWStatus = CswPassed;
  }
  BotStatus.BotStatus = TRUE;
  USB_DmaInitTransfer((USB_Endpoint_t)BulkInEp,
                       DMA_BOT_IN_DES,
                      (pInt32U)&Csw,
                       BulkInEpMaxSize,
                       sizeof(Csw_t),
                       NULL,
                       FALSE);
  __set_interrupt_state(save);
}

/*************************************************************************
 * Function Name: ScsiCommImpl
 * Parameters:  none
 *
 * Return: none
 *
 * Description: Scsi commands implement
 *
 *************************************************************************/
inline
void ScsiCommImpl (void)
{
  if(ScsiCbwValid())
  {
    Csw.dCSWDataResidue = Cbw.dCBWDataTransferLength;
    Csw.dCSWTag = Cbw.dCBWTag;
    Lun = Cbw.bCBWLUN;
    switch (Cbw.CBWCB[0])
    {
    case ScsiTestUnitReady:
      ScsiTestUnitReadyImp();
      return;
    case ScsiRequestSense:
      ScsiRequestSenseImp();
      return;
    case ScsiInquiry:
      ScsiInquiryImp();
      return;
    case ScsiModeSelect6:
      ScsiModeSelect6Imp();
      return;
    case ScsiModeSense6:
      ScsiModeSense6Imp();
      return;
    case ScsiMediaStartStop:
      ScsiMediaStartStopImp();
      return;
    case ScsiMediaRemoval:
      ScsiMediaRemovalImp();
      return;
    case ScsiReadFormatCapcity:
      ScsiReadFormatCapcityImp();
      return;
    case ScsiReadCapacity10:
      ScsiReadCapacity10Imp();
      return;
    case ScsiRead10:
      ScsiRead10Imp();
      return;
    case ScsiWrite10:
      ScsiWrite10Imp();
      return;
    case ScsiFerify10:
      ScsiVerify10Imp();
      return;
    default:
      ScsiCmdError(ScsiUnknowCommand,
       (Cbw.bmCBWFlags.Dir == BotDataFormDevToHost)?ScsiStallIn:ScsiStallOut);
    }
    return;
  }
  // CBW Not valid or not meaningful
  BotInEpStall();
  BotOutEpStall();
}

/*************************************************************************
 * Function Name: ScsiCbwValid
 * Parameters:  none
 *
 * Return: Boolean
 *
 * Description: CBW valid and meaningful check
 *
 *************************************************************************/
inline
Boolean ScsiCbwValid(void)
{
ScsiCmdField_t ScsiCmdField;
  if ((Cbw.dCBWSignature != CbwSignature) ||
      (Cbw.bCBWLUN >= SCSI_LUN_NUMB) ||
      BotStatus.BotStatus)
  {
    return(FALSE);
  }
  ScsiCmdField.Cmd = Cbw.CBWCB[0];
  switch (ScsiCmdField.GroupCode)
  {
  case 0:
    if(Cbw.bCBWCBLength >= 6)
      return(TRUE);
    break;
  case 1:
  case 2:
    if(Cbw.bCBWCBLength >= 10)
      return(TRUE);
    break;
  case 3:
    return(TRUE);
  case 4:
    if(Cbw.bCBWCBLength >= 16)
      return(TRUE);
    break;
  case 5:
    if(Cbw.bCBWCBLength >= 12)
      return(TRUE);
  }
  return(FALSE);
}

/*************************************************************************
 * Function Name: ScsiTestUnitReadyImp
 * Parameters: none
 *
 * Return: none
 *
 * Description: TEST UNIT READY command implement
 *
 *************************************************************************/
inline
void ScsiTestUnitReadyImp (void)
{
  if(Cbw.dCBWDataTransferLength == 0)
  {
    ScsiDrv[Lun].Message[0] = LunTestUntilReadyReqMsg;
    pScsiMessage[Lun] = ScsiDrv[Lun].Message;
  }
  else
  {
    ScsiCmdError(ScsiFatalError,0);
  }
}

/*************************************************************************
 * Function Name: ScsiTestUntilReadyData
 * Parameters:  Int32U MediaReady
 *
 * Return: void
 *
 * Description: Prepare Test until ready data for sending
 *
 *************************************************************************/
void ScsiTestUntilReadyData (Int32U MediaReady)
{
  if(ScsiDrv[Lun].UnitSSStatus == UnitEjected)
  {
     if(MediaReady != ScsiMediaChanged)
     {
        ScsiCmdStatus(ScsiMediaNotPresent);
        BotSendStatus();
        return;
     }
     ScsiDrv[Lun].UnitSSStatus = UnitStarted;
  }
  ScsiCmdStatus((ScsiStatusCode_t)MediaReady);
  BotSendStatus();
}

/*************************************************************************
 * Function Name: ScsiRequestSenseImp
 * Parameters:  none
 *
 * Return: Boolean
 *
 * Description: REQUEST SENSE command implement
 *
 *************************************************************************/
inline
void ScsiRequestSenseImp (void)
{
pSpc3RequestSense_t pRequestSense = (pSpc3RequestSense_t)Cbw.CBWCB;
pSpc3RequestSenseResponse_t pRequestSenseResponse;
  if ((Cbw.bmCBWFlags.Dir == BotDataFormDevToHost) &&
      (Cbw.dCBWDataTransferLength >= pRequestSense->AllocationLenght))
  {
    pRequestSenseResponse = (pSpc3RequestSenseResponse_t)&Cbw;
    // clear buffer
    memset(&Cbw,0,sizeof(Spc3RequestSenseResponse_t));
    if ((pRequestSense->Control.Control == 0) && !pRequestSense->DESC)
    {
      pRequestSenseResponse->ResponceCode = 0x70;
      pRequestSenseResponse->Valid = TRUE;
      switch (ScsiDrv[Lun].Status)
      {
      case ScsiMediamNotReady:
        pRequestSenseResponse->Ascq = LogicalUnitNotReadyCauseNotReportable >> 8;
        pRequestSenseResponse->Asc  = LogicalUnitNotReadyCauseNotReportable;
        pRequestSenseResponse->SenseKey  = NotReady;
        break;
      case ScsiInvalidCbd:
        pRequestSenseResponse->Ascq = InvalidFieldInCdb >> 8;
        pRequestSenseResponse->Asc  = InvalidFieldInCdb;
        pRequestSenseResponse->SenseKey   = IllegalRequest;
        break;
      case ScsiUnknowCommand:
        pRequestSenseResponse->Ascq = InvalidCommandOperationCode >> 8;
        pRequestSenseResponse->Asc  = InvalidCommandOperationCode;
        pRequestSenseResponse->SenseKey   = IllegalRequest;
        break;
      case ScsiMediaNotPresent:
        pRequestSenseResponse->Ascq = MediumNotPresent >> 8;
        pRequestSenseResponse->Asc  = MediumNotPresent;
        pRequestSenseResponse->SenseKey   = NotReady;
        break;
      case ScsiMiscompare:
        pRequestSenseResponse->Ascq = MiscompareDuringVerifyOperation >> 8;
        pRequestSenseResponse->Asc  = MiscompareDuringVerifyOperation;
        pRequestSenseResponse->SenseKey   = Miscompare;
        break;
      case ScsiMediaChanged:
        pRequestSenseResponse->Ascq = NotReadyToReadyChangeMediumMayHaveChanged >> 8;
        pRequestSenseResponse->Asc  = NotReadyToReadyChangeMediumMayHaveChanged;
        pRequestSenseResponse->SenseKey   = UnitAttention;
        break;
      default:
        pRequestSenseResponse->Ascq = NoAdditionalSenseInformation >> 8;
        pRequestSenseResponse->Asc  = NoAdditionalSenseInformation;
        pRequestSenseResponse->SenseKey   = NoSense;
        break;
      }
      pRequestSenseResponse->AddSenseKeyLength = sizeof(Spc3RequestSenseResponse_t) - 8;
      // Clear condition code info
      ScsiDrv[Lun].Status = ScsiCommandNoKey;
      // Send Status after data packet
      BotSendDataInit((Int8U *)pRequestSenseResponse,
                      MIN(pRequestSense->AllocationLenght,sizeof(Spc3RequestSenseResponse_t)),
                      TRUE);
      return;
    }
    else
    {
      ScsiCmdStatus(ScsiInvalidCbd);
    }
  }
  else
  {
    ScsiCmdStatus(ScsiFatalError);
  }
  BotStatus.BotStatus = TRUE;
  BotInEpStall();
}

/*************************************************************************
 * Function Name: ScsiModeSelect6Imp
 * Parameters:  none
 *
 * Return: none
 *
 * Description: MODE SELECT command implement
 *
 *************************************************************************/
inline
void ScsiModeSelect6Imp (void)
{
pSpc3ModeSelect6_t pModeSelect = (pSpc3ModeSelect6_t)Cbw.CBWCB;
  if ((Cbw.bmCBWFlags.Dir == BotDataFormHostToDev) &&
      (Cbw.dCBWDataTransferLength >= pModeSelect->ParameterListLenght))
  {
    ScsiCmdStatus(ScsiInvalidCbd);
  }
  else
  {
    ScsiCmdStatus(ScsiFatalError);
    BotInEpStall();
  }
  BotOutEpStall();
  BotSendStatus();
}

/*************************************************************************
 * Function Name: ScsiModeSense6Imp
 * Parameters:  none
 *
 * Return: none
 *
 * Description: MODE SENSE command implement
 *
 *************************************************************************/
inline
void ScsiModeSense6Imp (void)
{
pSpc3ModeSense6_t pModeSense = (pSpc3ModeSense6_t)Cbw.CBWCB;
  if ((Cbw.bmCBWFlags.Dir == BotDataFormDevToHost) &&
      (Cbw.dCBWDataTransferLength >= pModeSense->AllocationLenght))
  {
    if ((pModeSense->PageCode == 0x3F) && (pModeSense->PC == 0) &&
        (pModeSense->SubPageCode   == 0x00))
    {
      // Clear condition code info
      ScsiDrv[Lun].Status = ScsiCommandNoKey;
      ScsiDrv[Lun].Message[0] = LunModeSense6ReqMsg;
      pScsiMessage[Lun] = ScsiDrv[Lun].Message;
      return;
    }
    else
    {
      ScsiCmdStatus(ScsiInvalidCbd);
    }
  }
  else
  {
    ScsiCmdStatus(ScsiFatalError);
  }
  BotStatus.BotStatus = TRUE;
  BotInEpStall();
}

/*************************************************************************
 * Function Name: ScsiModeSenseData
 * Parameters:  Int32U WriteProtect
 *
 * Return: none
 *
 * Description: Prepare MODE SENSE data for sending
 *
 *************************************************************************/
void ScsiModeSenseData (Int32U WriteProtect)
{
pSpc3ModeSense6Response_t pModeSense = (pSpc3ModeSense6Response_t)&Cbw;
  // clear buffer
  memset(pModeSense,0,sizeof(Spc3ModeSense6Response_t));
  pModeSense->ModeDataLength = sizeof(Spc3ModeSense6Response_t)-1;
  pModeSense->WP = WriteProtect;
  BotSendDataInit((Int8U *)pModeSense,
                  MIN(Csw.dCSWDataResidue,sizeof(Spc3ModeSense6Response_t)),
                  TRUE);
}

/*************************************************************************
 * Function Name: ScsiInquiryImp
 * Parameters:  none
 *
 * Return: none
 *
 * Description: INQUIRY command implement
 *
 *************************************************************************/
inline
void ScsiInquiryImp (void)
{
pSpc3Inquiry_t pInquiry = (pSpc3Inquiry_t)Cbw.CBWCB;
Int32U AllocationLenght =
  ((Int32U)pInquiry->AllocationLenght[0]<<8) + pInquiry->AllocationLenght[1];
  if ((Cbw.bmCBWFlags.Dir == BotDataFormDevToHost) &&
      (Cbw.dCBWDataTransferLength >= AllocationLenght))
  {
    if ((!pInquiry->EVPD) && (pInquiry->PageCode == 0))
    {
      ScsiDrv[Lun].Message[0] = LunInquiryReqMsg;
      pScsiMessage[Lun] = ScsiDrv[Lun].Message;
      return;
    }
    else
    {
      ScsiCmdStatus(ScsiInvalidCbd);
    }
  }
  else
  {
   ScsiCmdStatus(ScsiFatalError);
  }
  BotStatus.BotStatus = TRUE;
  BotInEpStall();
}

/*************************************************************************
 * Function Name: ScsiInquiryData
 * Parameters: const pInt8U pData, Int32U Size
 *
 * Return: none
 *
 * Description: Prepare INQUIRY data for sending
 *
 *************************************************************************/
void ScsiInquiryData (const pInt8U pData, Int32U Size)
{
  BotSendDataInit(pData,MIN(Csw.dCSWDataResidue,Size),TRUE);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久久久久久久久久久包黑料| 成人免费三级在线| 欧美日韩一区 二区 三区 久久精品| 中文字幕亚洲一区二区av在线| av一区二区三区黑人| 亚洲精品视频免费看| 欧美午夜一区二区三区免费大片| 亚洲国产成人高清精品| 日韩一区二区三区av| 国产自产视频一区二区三区| 国产视频911| 91视频在线观看| 舔着乳尖日韩一区| 精品电影一区二区三区| 不卡一区中文字幕| 亚洲高清在线精品| 久久久久久久久久久久久女国产乱| 成人一区在线观看| 亚洲一区免费在线观看| 日韩精品专区在线影院重磅| 成人中文字幕电影| 午夜伊人狠狠久久| 国产欧美视频一区二区| 欧美性一二三区| 国产在线播放一区| 亚洲国产综合色| 亚洲精品一线二线三线无人区| 成人午夜在线播放| 日韩电影免费在线观看网站| 国产日韩欧美电影| 88在线观看91蜜桃国自产| 国产成人综合亚洲网站| 香蕉成人啪国产精品视频综合网| 久久久久国产成人精品亚洲午夜| 一本色道久久综合亚洲aⅴ蜜桃 | 中文字幕一区二区在线观看| 欧美午夜精品免费| 国产成人自拍在线| 免费在线观看一区| 一区二区三区高清在线| 久久亚洲精华国产精华液| 在线中文字幕一区| 高清成人免费视频| 精品在线一区二区| 亚洲www啪成人一区二区麻豆 | 337p亚洲精品色噜噜| 成人一二三区视频| 久久av资源站| 天堂av在线一区| 一区二区在线观看av| 久久精品视频一区| 欧美不卡视频一区| 欧美日韩一区高清| 91免费观看视频| 成人在线视频首页| 国产精品18久久久久久久久久久久| 亚洲网友自拍偷拍| 一区二区三区精品久久久| 亚洲国产精品ⅴa在线观看| 欧美va亚洲va| 日韩亚洲欧美在线观看| 欧美日韩一区二区三区视频| av激情综合网| 99精品久久免费看蜜臀剧情介绍| 国产精品夜夜嗨| 国产一区二区三区四区五区入口| 日韩国产精品91| 日日摸夜夜添夜夜添精品视频| 一区二区激情小说| 亚洲综合久久av| 亚洲综合在线第一页| 亚洲激情自拍视频| 亚洲午夜一二三区视频| 亚洲成人在线网站| 午夜久久久影院| 奇米精品一区二区三区在线观看| 婷婷夜色潮精品综合在线| 亚瑟在线精品视频| 日本成人在线看| 久久精品99久久久| 国产一区三区三区| 成人午夜在线播放| 91蜜桃免费观看视频| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 欧美区在线观看| 日韩一区二区三区av| 欧美大白屁股肥臀xxxxxx| 日韩欧美一区二区久久婷婷| 欧美videos大乳护士334| 精品99一区二区三区| 国产夜色精品一区二区av| 国产精品视频看| 亚洲欧美欧美一区二区三区| 亚洲一区二区三区影院| 日韩不卡一二三区| 国产在线精品一区在线观看麻豆| 国产乱子伦视频一区二区三区| 国产sm精品调教视频网站| 91麻豆免费观看| 欧美另类变人与禽xxxxx| 精品免费视频.| 国产精品久久久久久亚洲毛片| 综合网在线视频| 日韩国产高清影视| 成人网男人的天堂| 欧美在线播放高清精品| 日韩免费性生活视频播放| 久久精品综合网| 亚洲一二三四在线观看| 久久99深爱久久99精品| www.视频一区| 欧美一区二区三区免费在线看| 亚洲精品在线免费观看视频| 亚洲私人影院在线观看| 日韩激情视频网站| 成人免费高清视频在线观看| 91视视频在线观看入口直接观看www| 欧美午夜影院一区| 日本一区二区在线不卡| 爽好久久久欧美精品| 国产成人免费xxxxxxxx| 欧美日韩精品一区视频| 国产欧美中文在线| 日精品一区二区三区| 成人福利视频网站| 日韩一区二区在线免费观看| 中文字幕一区二区三区蜜月| 日韩 欧美一区二区三区| 东方欧美亚洲色图在线| 91精品国产乱| 亚洲欧美日韩精品久久久久| 另类的小说在线视频另类成人小视频在线 | 亚洲福利一二三区| 成人午夜电影久久影院| 日韩一级完整毛片| 一区二区三区中文在线观看| 国产一区二区视频在线播放| 91视频观看免费| 久久久久国产精品麻豆| 日本不卡中文字幕| 91高清在线观看| 亚洲欧洲精品一区二区精品久久久| 麻豆专区一区二区三区四区五区| 色综合久久久久| 亚洲视频1区2区| 成人动漫视频在线| 日本一区二区三区久久久久久久久不 | 精品国产乱码久久久久久1区2区 | 91精品欧美一区二区三区综合在| 国产精品传媒入口麻豆| 国产一区福利在线| 欧美成人性福生活免费看| 亚洲第一综合色| 一本在线高清不卡dvd| 亚洲欧洲国产日韩| 成人激情动漫在线观看| 国产日韩欧美不卡在线| 国产一区欧美二区| 久久久综合视频| 久久99精品国产| 日韩免费在线观看| 久久精品国产精品亚洲精品 | 国内精品免费在线观看| 日韩欧美一区二区免费| 蜜桃av一区二区| 日韩一区二区精品在线观看| 日韩高清不卡在线| 日韩一卡二卡三卡国产欧美| 日韩 欧美一区二区三区| 日韩一区二区三区精品视频| 免费在线视频一区| 亚洲精品在线免费观看视频| 精品一区免费av| 久久人人97超碰com| 国产精品资源在线看| 久久精品夜色噜噜亚洲aⅴ| 国产传媒久久文化传媒| 国产精品国产成人国产三级| av在线综合网| 亚洲最大成人综合| 欧美久久久一区| 久久99热这里只有精品| 亚洲国产精品精华液ab| 99re这里只有精品首页| 亚洲乱码国产乱码精品精小说| 在线免费视频一区二区| 日精品一区二区| 久久免费视频一区| 99久久99久久免费精品蜜臀| 亚洲精品成a人| 在线不卡一区二区| 精品一区二区免费在线观看| 中文字幕国产精品一区二区| 色综合一个色综合亚洲| 日本女人一区二区三区| 欧美极品xxx| 欧美三级日韩三级国产三级| 黑人巨大精品欧美黑白配亚洲| 国产精品无码永久免费888| 欧美制服丝袜第一页|