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

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

?? upsd3400_usb_app.c

?? uPSD34xx Disk driver
?? C
?? 第 1 頁 / 共 3 頁
字號:
  USEL     = OUTDIR | UMSC_OUT_ENDPOINT;     // Select EP OUT

/* dCBWSignature:
  Signature that helps identify this data packet as a CBW. The signature field
  shall contain the value 43425355h (little endian), indicating a CBW.*/
  if((USB_FIFO[0]==0x55) && (USB_FIFO[1]==0x53) &&
  (USB_FIFO[2]==0x42) && (USB_FIFO[3]==0x43))
   {
/* dCBWTag:
    A Command Block Tag sent by the host. The device shall echo the contents of
    this field back to the host in the dCSWTag field of the associated CSW. The
    dCSWTag positively associates a CSW with the corresponding CBW.*/
    *((uchar *)&gdwCBWTag+3) = USB_FIFO[4];  // LSB first
    *((uchar *)&gdwCBWTag+2) = USB_FIFO[5];
    *((uchar *)&gdwCBWTag+1) = USB_FIFO[6];
    *((uchar *)&gdwCBWTag+0) = USB_FIFO[7];
/* dCBWDataTransferLength:
    The number of bytes of data that the host expects to transfer on the Bulk-In
    or Bulk-Out endpoint (as indicated by the Direction bit) during the execution
    of this command. If this field is zero, the device and the host shall transfer
    no data between the CBW and the associated CSW, and the device shall ignore
    the value of the Direction bit in bmCBWFlags.*/
    *((uchar *)&gdwCBWDataTransferLength+3) = USB_FIFO[ 8];           // LSB first
    *((uchar *)&gdwCBWDataTransferLength+2) = USB_FIFO[ 9];
    *((uchar *)&gdwCBWDataTransferLength+1) = USB_FIFO[10];
    *((uchar *)&gdwCBWDataTransferLength+0) = USB_FIFO[11];
/* bmCBWFlags:
    The bits of this field are defined as follows:
    Bit 7 Direction - the device shall ignore this bit if the dCBWDataTransferLength
    field is zero, otherwise:
    0 = Data-Out from host to the device, 1 = Data-In from the device to the host.
    Bit 6 Obsolete. The host shall set this bit to zero.
    Bits 5..0 Reserved - the host shall set these bits to zero.*/
    gbCBWFlags = USB_FIFO[12];
/* bCBWLUN:
    The device Logical Unit Number (LUN) to which the command block is being sent.
    For devices that support multiple LUNs, the host shall place into this field
    the LUN to which this command block is addressed. Otherwise, the host shall
    set this field to zero. */
    gbCBWLUN  = USB_FIFO[13];
/* bCBWCBLength:
    The valid length of the CBWCB in bytes. This defines the valid length of the
    command block. The only legal values are 1 through 16 (01h through 10h). All
    other values are reserved. */
    gbCBWCBLength = USB_FIFO[14];

    if (gbCBWCBLength>16)
     {
      gbCBWCBLength = 16;
     }
/* CBWCB:
    The command block to be executed by the device. The device shall interpret
    the first bCBWCBLength bytes in this field as a command block as defined by
    the command set identified by bInterfaceSubClass. If the command set supported
    by the device uses command blocks of fewer than 16 (10h) bytes in
    length, the significant bytes shall be transferred first, beginning with the
    byte at offset 15 (Fh). The device shall ignore the content of the CBWCB field
    past the byte at offset (15 + bCBWCBLength - 1).
    */
    for(i = 0; i<gbCBWCBLength; i++)
     {
      gbCBWCB[i] = USB_FIFO[15+i];
     }

    UCON |= EPFIFO_BSY;



    gbCSWStatus     = PASS;                  // default CSW Status
    gbBulkPipeStage = BS_DATA_PHASE;

    if (gbCBWCBLength>0)
     {
/* Now decode the CBWCB; the command block to be executed by the device. */
      switch (gbCBWCB[0])
       {
        case OP_READ10:
         {
          DoReadWrite();
          break;
         }

        case OP_WRITE10:
         {
          DoReadWrite();
          break;
         }

        case OP_TEST_UNIT_READY:
         {
/* This is called by WinXP typ. every 1 second to check the unit */
/* default: all OK */
          ReturnCSW();                       // return status
          break;
         }

        case OP_REQUEST_SENSE:
         {
          OnRequestSense();
          break;
         }

        case OP_INQUIRY:
         {
          OnInquiry();
          break;
         }

        case OP_MODE_SENSE10:
         {
          OnModeSense10();
          break;
         }

        case OP_MODE_SELECT10:
         {
          OnModeSelect10();
          break;
         }


        case OP_MODE_SENSE6:
         {
          OnModeSense6();
          break;
         }

        case OP_MODE_SELECT6:
         {
          OnModeSelect6();
          break;
         }


        case OP_READ_CAPACITY:
         {
          DoReadCapacity();
          break;
         }

        case OP_READ_FORMAT_CAPACITIES:
         {
          DoReadFormatCapacity();
          break;
         }


        case OP_MEDIA_REMOVEAL:
         {
          gbCSWStatus = FAIL;
          ReturnCSW();                       // return status
          break;
         }

        case OP_VERIFY:
         {
          gbCSWStatus = FAIL;              //implement your own checking mechanism
          ReturnCSW();                       // return status
          break;
         }

        default:
         {
          gbCSWStatus = FAIL;
          STALL_EP1();                       // unknown command
          gbBulkPipeStage = BS_CSW_PHASE;
          break;
         }
       }
     }
    else
     {
      ReturnCSW();                           // no command, return status
     }

   }
  else
   {
    gbCSWStatus = FAIL;
    STALL_EP1();                             // unknown command block type, STALL
    gbBulkPipeStage = BS_CBW_PHASE;
   }
 }

unsigned char USB_ISR_Counter;               // incremented every USB INT event

void UsbIsr(void) interrupt USB_VECTOR using 2
/******************************************************************************
 Function   : void UsbIsr()
 Parameters : none
 Description: USB interrupt service routine.
 Note:        Do not modify this routine !!!
 ******************************************************************************/
 {
  UCTL |= VISIBLE;                           // enable USB FIFO mapping in XDATA

  if (RSTF)
   {
    OnUsbReset();                            // USB Reset int

    UIE1  |= UMSC_MASK_IN_ENDPOINT;          //Enable EP0 IN INT
    UIE2  |= UMSC_MASK_OUT_ENDPOINT;         //Enable EP0 OUT INT

    USEL   = OUTDIR | UMSC_OUT_ENDPOINT;     //Select EP OUT
    UCON   = ENABLE_FIFO | EPFIFO_BSY;

    USEL   = INDIR | UMSC_IN_ENDPOINT;       //Select EP IN
    UCON   = ENABLE_FIFO;

    UIF1 = 0;
    UIF2 = 0;
    UIF3 = 0;
    UIF0 = 0;
    RSTF = 0;
    SUSPNDF = 0;

    if (UCON & TOGGLE)                       //only silicon revision #0
     {
      USIZE = 0;                            //send an empty packet to reach DATA=0
     }

    USTA = 0;                                //silicon revision #0
    UADDR = 0;                         //Reset device address, silicon revision #0

    gbBulkPipeStage = BS_CBW_PHASE;

   }

/* IN packets servicing, invoked when TuPSD+ sent an ACKed packet to a host */
  if (INF)
   {
    if (UIF1 & IN0F)                         // EP0 IN
     {
      UIF1 &= ~IN0F;
      TransmitEP0();
      if (usbState == US_ADDRESSED)     // DEVICE ADDRESS change after SET_ADDRESS
       {
        UADDR    = setupPacket.wValue.lo;    //device address
        usbState = US_DEFAULT;
       }
     }
    if (UIF1 & UMSC_MASK_IN_ENDPOINT)        // EP IN
     {
      switch (gbBulkPipeStage)
       {
        case BS_DATA_PHASE:
         {
          UIF1 &= ~UMSC_MASK_IN_ENDPOINT;
          ReadBufferFromFlash();
          break;
         }
        case BS_CBW_PHASE:
         {
                                             //UIF1 &= ~UMSC_MASK_IN_ENDPOINT;
          break;
         }
        case BS_CSW_PHASE:                   // DATA phase finished, preparing CSW
         {
          UIF1 &= ~UMSC_MASK_IN_ENDPOINT;
          ReturnCSW();
          break;
         }
        case BS_CSW_DONE_PHASE:              //CSW sent, IN FIFO became empty
         {
          UIF1 &= ~UMSC_MASK_IN_ENDPOINT;
          gbBulkPipeStage = BS_CBW_PHASE;    //CBW
          break;
         }
       }
     }
/*
    if (UIF1 & IN2F)                         //EP2 IN
    {
    UIF1 &= ~IN2F;                         // User code area
    }

    if (UIF1 & IN3F)                         //EP3 IN
    {
    UIF1 &= ~IN3F;                         // User code area
    }

    if (UIF1 & IN4F)                         //EP4 IN
    {
    UIF1 &= ~IN4F;                         // User code area
    }
    */
   }

/* OUT packets servicing,invoked when TuPSD+ receives an OUT packet from a host*/
  if (OUTF)
   {
    if (UIF2 & OUT0F)                        // EP0 OUT
     {
      UIF2 &= ~OUT0F;
      if (USTA & SETUP)
       {
        ReadSetupPacket();
        OnSetupPacket();
        if (usbState == US_CONFIGURED)
         {
          USEL  = INDIR | UMSC_IN_ENDPOINT;  //Select EP IN
          if (UCON & TOGGLE)                 //only silicon revision #0
           {
            USIZE = 0;                      //send an empty packet to reach DATA=0
           }
//    UCON &= ~TOGGLE;                       //clear toggle
          USEL  = OUTDIR | UMSC_OUT_ENDPOINT;//Select EP OUT
//    UCON &= ~TOGGLE;                       //clear toggle
         }
       }
      else
       {
       }
      gbBulkPipeStage = BS_CBW_PHASE;
     }

/*
    if (UIF2 & OUT1F)                        // EP1 OUT
    {
    UIF2 &= ~OUT1F;                        // User code area
    }

    if (UIF2 & OUT2F)                        // EP2 OUT
    {
    UIF2 &= ~OUT2F;                        // User code area
    }
    */

    if (UIF2 & UMSC_MASK_OUT_ENDPOINT)       // EP3 OUT
     {
      switch (gbBulkPipeStage)
       {
        case BS_CBW_PHASE:                   // Command received
         {
          UIF2 &= ~UMSC_MASK_OUT_ENDPOINT;
          CheckReceiveCBW();
          break;
         }
        case BS_DATA_PHASE:                  // Data block received
         {
          UIF2 &= ~UMSC_MASK_OUT_ENDPOINT;
          WriteBufferToFlash();
          break;
         }
        case BS_CSW_PHASE:
         {
          break;
         }
        case BS_CSW_DONE_PHASE:
         {
          break;
         }
       }

     }
/*
    if (UIF2 & OUT4F)                        // EP4 OUT
    {
    UIF2 &= ~OUT4F;                        // User code area
    }
    */
   }

  if (SUSPNDF)
   {
    if (RESUMF)
     {
      UIE0     |=  SUSPENDIE;
      UIE0     &= ~RESUMEIE;
      OnUsbResume();                         // resume int
      RESUMF  = 0;
      SUSPNDF = 0;
      gbBulkPipeStage = BS_CBW_PHASE;
                                             // only for DK3420
      ET0   = 1;                             // enable timer 0 interrupt
     }
    else
     {
      UIE0     |=  RESUMEIE;
      UIE0     &= ~SUSPENDIE;
      OnUsbSuspend();                        // suspend int
      gbBulkPipeStage = BS_CBW_PHASE;
                                             // only for DK3420
      ET0       = 0;                         // disable timer 0 interrupt
      P4_0      = 1;                         // GREEN LED OFF
      UPSD_xreg.DATAOUT_D = 255;             // RED LED OFF
     }
   }

  UCTL  &= ~VISIBLE;                         // Disable USB FIFO mapping in XDATA
  USB_ISR_Counter++;                         // USB activity indicator

 }

/* *************************************************************************
  ***                                                                      ***
  **                         *** End of File ***                            **
  ***                                                                      ***
  *************************************************************************  */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲最新在线观看| 久久精品99久久久| 日韩一区二区在线观看视频| 成人高清av在线| 亚洲国产另类av| 国产精品久久久久影院老司| 在线综合+亚洲+欧美中文字幕| 成人99免费视频| 久久99精品久久久久久动态图 | 欧美哺乳videos| 色八戒一区二区三区| 国产成人av一区二区三区在线观看| 亚洲国产日日夜夜| 日韩一区在线看| 久久综合狠狠综合久久综合88 | 国产亚洲成av人在线观看导航 | 91久久精品午夜一区二区| 国产精品一线二线三线精华| 日韩av中文字幕一区二区| 一区二区三区丝袜| 中文字幕色av一区二区三区| 久久久久国产成人精品亚洲午夜| 91.com视频| 欧美日韩成人在线一区| 欧美自拍偷拍午夜视频| 99久久精品免费| 成人午夜激情影院| 国产成人精品亚洲午夜麻豆| 久久精品久久综合| 免费成人在线视频观看| 天堂久久一区二区三区| 亚洲韩国精品一区| 一区二区欧美国产| 亚洲女人的天堂| 亚洲美女电影在线| 亚洲另类在线制服丝袜| 亚洲天堂网中文字| 亚洲日本成人在线观看| 亚洲色图视频网| 亚洲日本一区二区| 一区二区国产盗摄色噜噜| 又紧又大又爽精品一区二区| 亚洲精品日韩专区silk | 亚洲国产一区二区视频| 国产午夜亚洲精品不卡| 欧美色爱综合网| 国产盗摄一区二区| 免费观看在线综合| 亚洲成人福利片| 久久免费的精品国产v∧| 欧美亚洲综合在线| jizz一区二区| 99视频热这里只有精品免费| 国产精品天干天干在线综合| 欧美日韩免费视频| 欧美精品123区| 91精品国产福利在线观看| 欧美日韩和欧美的一区二区| 91精品国产色综合久久不卡电影| 欧美一区二区在线视频| 欧美v亚洲v综合ⅴ国产v| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 综合久久国产九一剧情麻豆| 亚洲男人的天堂一区二区| 亚洲在线观看免费| 精品一二线国产| 成人晚上爱看视频| 在线观看视频91| 日韩精品专区在线| 国产精品激情偷乱一区二区∴| 亚洲激情综合网| 精品一区二区三区免费毛片爱| 成人黄色小视频| 欧美日韩国产免费一区二区| 久久亚洲精精品中文字幕早川悠里 | 韩国女主播成人在线观看| 风间由美一区二区av101| 在线观看日韩国产| 欧美精品一区二区三区在线播放| 国产精品久久久久三级| 午夜久久久久久久久久一区二区| 韩国av一区二区三区| 91国偷自产一区二区三区观看 | 五月天欧美精品| 国产一区二区不卡| 欧美熟乱第一页| 久久亚洲私人国产精品va媚药| 一区二区三区国产| 久久国产精品99久久人人澡| 波多野结衣在线一区| 91精品综合久久久久久| 国产精品卡一卡二| 日韩精品福利网| 91麻豆国产福利精品| 久久综合九色综合欧美98| 一区二区三区欧美日| 国产成人av电影在线播放| 欧美绝品在线观看成人午夜影视| 国产精品日日摸夜夜摸av| 日本aⅴ亚洲精品中文乱码| 不卡视频一二三| 一区二区三区在线观看国产| 久久av中文字幕片| 欧美日韩午夜精品| 亚洲欧洲美洲综合色网| 久久99这里只有精品| 欧美精选午夜久久久乱码6080| 日韩一区中文字幕| 国产福利电影一区二区三区| 91麻豆精品国产无毒不卡在线观看| 中文字幕一区二区三| 国产乱子轮精品视频| 制服丝袜国产精品| 亚洲成人自拍一区| 一道本成人在线| 国产精品国产三级国产三级人妇| 久99久精品视频免费观看| 欧美疯狂做受xxxx富婆| 亚洲精品成人在线| 99久久99久久精品免费看蜜桃| 久久亚洲精品小早川怜子| 免费高清在线视频一区·| 欧美丰满美乳xxx高潮www| 亚洲午夜电影在线观看| 在线观看日韩国产| 一区二区三区在线影院| 一本到不卡免费一区二区| 综合色天天鬼久久鬼色| 成人在线综合网| 中文字幕国产一区| 成人av在线影院| 国产精品理论在线观看| av一区二区三区四区| 国产精品传媒视频| 91一区二区三区在线观看| 亚洲人123区| 91成人国产精品| 亚洲高清久久久| 欧美日韩一区二区不卡| 午夜激情久久久| 日韩一区二区视频在线观看| 麻豆国产91在线播放| 26uuu另类欧美| 国产成人在线免费观看| 国产日产欧美一区| www.亚洲人| 亚洲免费在线电影| 欧美精品 日韩| 精品一区二区在线视频| 久久综合国产精品| 成人福利视频网站| 亚洲九九爱视频| 欧美高清视频www夜色资源网| 日本午夜一本久久久综合| 欧美xxx久久| 成人黄色在线网站| 一区二区三区欧美久久| 制服丝袜激情欧洲亚洲| 国模无码大尺度一区二区三区| 欧美激情在线观看视频免费| 97久久精品人人做人人爽50路| 亚洲综合一区二区三区| 3d动漫精品啪啪1区2区免费| 国内精品伊人久久久久av一坑| 国产欧美视频一区二区三区| 91麻豆免费视频| 日韩高清不卡在线| 国产日韩欧美a| 欧美丝袜自拍制服另类| 韩国三级电影一区二区| 亚洲欧美国产毛片在线| 91精品国产麻豆| 不卡的av网站| 日本欧美久久久久免费播放网| 国产网站一区二区三区| 欧美唯美清纯偷拍| 国产成人av福利| 亚洲国产日日夜夜| 久久亚洲精华国产精华液| 在线视频国内自拍亚洲视频| 精品一区二区三区不卡| 亚洲精品少妇30p| 精品国产一区久久| 色综合久久综合网欧美综合网| 亚洲乱码国产乱码精品精小说 | 国产精品久久久久久久久图文区| 精品日韩一区二区三区 | 捆绑紧缚一区二区三区视频| 国内精品在线播放| yourporn久久国产精品| 欧美亚洲自拍偷拍| 精品国产一区二区三区久久影院| 精品1区2区在线观看| 亚洲视频在线一区观看| 亚洲国产精品久久久久婷婷884| 午夜伊人狠狠久久| 国产福利一区二区| 欧美一区二区三区免费| 国产目拍亚洲精品99久久精品| 亚洲综合偷拍欧美一区色|