⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mscuser.lst

📁 USB存储器
💻 LST
📖 第 1 页 / 共 5 页
字号:
  294   1        BulkBuf[ 8] = 0x00;
  295   1        BulkBuf[ 9] = 0x00;
  296   1        BulkBuf[10] = 0x00;
  297   1        BulkBuf[11] = 0x00;
  298   1        BulkBuf[12] = 0x30;          /* ASC */
  299   1        BulkBuf[13] = 0x01;          /* ASCQ */
  300   1        BulkBuf[14] = 0x00;
  301   1        BulkBuf[15] = 0x00;
  302   1        BulkBuf[16] = 0x00;
  303   1        BulkBuf[17] = 0x00;
  304   1      
  305   1        BulkLen = 18;
  306   1        DataInTransfer();
  307   1      }
  308          
  309          
  310          /*
  311           *  MSC SCSI Inquiry Callback
  312           *    Parameters:      None (global variables)
  313           *    Return Value:    None
  314           */
  315          
  316          void MSC_Inquiry (void) {
  317   1      
  318   1        if (!DataInFormat()) return;
  319   1      
  320   1        BulkBuf[ 0] = 0x00;          /* Direct Access Device */
  321   1        BulkBuf[ 1] = 0x80;          /* RMB = 1: Removable Medium */
  322   1        BulkBuf[ 2] = 0x00;          /* Version: No conformance claim to standard */
ARM COMPILER V2.42b,  mscuser                                                              02/01/06  23:45:16  PAGE 6   

  323   1        BulkBuf[ 3] = 0x01;
  324   1      
  325   1        BulkBuf[ 4] = 36-4;          /* Additional Length */
  326   1        BulkBuf[ 5] = 0x80;          /* SCCS = 1: Storage Controller Component */
  327   1        BulkBuf[ 6] = 0x00;
  328   1        BulkBuf[ 7] = 0x00;
  329   1      
  330   1        BulkBuf[ 8] = 'K';           /* Vendor Identification */
  331   1        BulkBuf[ 9] = 'e';
  332   1        BulkBuf[10] = 'i';
  333   1        BulkBuf[11] = 'l';
  334   1        BulkBuf[12] = ' ';
  335   1        BulkBuf[13] = ' ';
  336   1        BulkBuf[14] = ' ';
  337   1        BulkBuf[15] = ' ';
  338   1      
  339   1        BulkBuf[16] = 'L';           /* Product Identification */
  340   1        BulkBuf[17] = 'P';
  341   1        BulkBuf[18] = 'C';
  342   1        BulkBuf[19] = '2';
  343   1        BulkBuf[20] = '1';
  344   1        BulkBuf[21] = '4';
  345   1        BulkBuf[22] = '8';
  346   1        BulkBuf[23] = ' ';
  347   1        BulkBuf[24] = 'D';
  348   1        BulkBuf[25] = 'i';
  349   1        BulkBuf[26] = 's';
  350   1        BulkBuf[27] = 'k';
  351   1        BulkBuf[28] = ' ';
  352   1        BulkBuf[29] = ' ';
  353   1        BulkBuf[30] = ' ';
  354   1        BulkBuf[31] = ' ';
  355   1      
  356   1        BulkBuf[32] = '1';           /* Product Revision Level */
  357   1        BulkBuf[33] = '.';
  358   1        BulkBuf[34] = '0';
  359   1        BulkBuf[35] = ' ';
  360   1      
  361   1        BulkLen = 36;
  362   1        DataInTransfer();
  363   1      }
  364          
  365          
  366          /*
  367           *  MSC SCSI Mode Sense (6-Byte) Callback
  368           *    Parameters:      None (global variables)
  369           *    Return Value:    None
  370           */
  371          
  372          void MSC_ModeSense6 (void) {
  373   1      
  374   1        if (!DataInFormat()) return;
  375   1      
  376   1        BulkBuf[ 0] = 0x03;
  377   1        BulkBuf[ 1] = 0x00;
  378   1        BulkBuf[ 2] = 0x00;
  379   1        BulkBuf[ 3] = 0x00;
  380   1      
  381   1        BulkLen = 4;
  382   1        DataInTransfer();
  383   1      }
  384          
  385          
  386          /*
  387           *  MSC SCSI Mode Sense (10-Byte) Callback
  388           *    Parameters:      None (global variables)
ARM COMPILER V2.42b,  mscuser                                                              02/01/06  23:45:16  PAGE 7   

  389           *    Return Value:    None
  390           */
  391          
  392          void MSC_ModeSense10 (void) {
  393   1      
  394   1        if (!DataInFormat()) return;
  395   1      
  396   1        BulkBuf[ 0] = 0x00;
  397   1        BulkBuf[ 1] = 0x06;
  398   1        BulkBuf[ 2] = 0x00;
  399   1        BulkBuf[ 3] = 0x00;
  400   1        BulkBuf[ 4] = 0x00;
  401   1        BulkBuf[ 5] = 0x00;
  402   1        BulkBuf[ 6] = 0x00;
  403   1        BulkBuf[ 7] = 0x00;
  404   1      
  405   1        BulkLen = 8;
  406   1        DataInTransfer();
  407   1      }
  408          
  409          
  410          /*
  411           *  MSC SCSI Read Capacity Callback
  412           *    Parameters:      None (global variables)
  413           *    Return Value:    None
  414           */
  415          
  416          void MSC_ReadCapacity (void) {
  417   1      
  418   1        if (!DataInFormat()) return;
  419   1      
  420   1        /* Last Logical Block */
  421   1        BulkBuf[ 0] = ((MSC_BlockCount - 1) >> 24) & 0xFF;
  422   1        BulkBuf[ 1] = ((MSC_BlockCount - 1) >> 16) & 0xFF;
  423   1        BulkBuf[ 2] = ((MSC_BlockCount - 1) >>  8) & 0xFF;
  424   1        BulkBuf[ 3] = ((MSC_BlockCount - 1) >>  0) & 0xFF;
  425   1      
  426   1        /* Block Length */
  427   1        BulkBuf[ 4] = (MSC_BlockSize >> 24) & 0xFF;
  428   1        BulkBuf[ 5] = (MSC_BlockSize >> 16) & 0xFF;
  429   1        BulkBuf[ 6] = (MSC_BlockSize >>  8) & 0xFF;
  430   1        BulkBuf[ 7] = (MSC_BlockSize >>  0) & 0xFF;
  431   1      
  432   1        BulkLen = 8;
  433   1        DataInTransfer();
  434   1      }
  435          
  436          
  437          /*
  438           *  MSC SCSI Read Format Capacity Callback
  439           *    Parameters:      None (global variables)
  440           *    Return Value:    None
  441           */
  442          
  443          void MSC_ReadFormatCapacity (void) {
  444   1      
  445   1        if (!DataInFormat()) return;
  446   1      
  447   1        BulkBuf[ 0] = 0x00;
  448   1        BulkBuf[ 1] = 0x00;
  449   1        BulkBuf[ 2] = 0x00;
  450   1        BulkBuf[ 3] = 0x08;          /* Capacity List Length */
  451   1      
  452   1        /* Block Count */
  453   1        BulkBuf[ 4] = (MSC_BlockCount >> 24) & 0xFF;
  454   1        BulkBuf[ 5] = (MSC_BlockCount >> 16) & 0xFF;
ARM COMPILER V2.42b,  mscuser                                                              02/01/06  23:45:16  PAGE 8   

  455   1        BulkBuf[ 6] = (MSC_BlockCount >>  8) & 0xFF;
  456   1        BulkBuf[ 7] = (MSC_BlockCount >>  0) & 0xFF;
  457   1      
  458   1        /* Block Length */
  459   1        BulkBuf[ 8] = 0x02;          /* Descriptor Code: Formatted Media */
  460   1        BulkBuf[ 9] = (MSC_BlockSize >> 16) & 0xFF;
  461   1        BulkBuf[10] = (MSC_BlockSize >>  8) & 0xFF;
  462   1        BulkBuf[11] = (MSC_BlockSize >>  0) & 0xFF;
  463   1      
  464   1        BulkLen = 12;
  465   1        DataInTransfer();
  466   1      }
  467          
  468          
  469          /*
  470           *  MSC Get Command Block Wrapper Callback
  471           *    Parameters:      None (global variables)
  472           *    Return Value:    None
  473           */
  474          
  475          void MSC_GetCBW (void) {
  476   1        DWORD n;
  477   1      
  478   1        for (n = 0; n < BulkLen; n++) {
  479   2          *((BYTE *)&CBW + n) = BulkBuf[n];
  480   2        }
  481   1        if ((BulkLen == sizeof(CBW)) && (CBW.dSignature == MSC_CBW_Signature)) {
  482   2          /* Valid CBW */
  483   2          CSW.dTag = CBW.dTag;
  484   2          CSW.dDataResidue = CBW.dDataLength;
  485   2          if ((CBW.bLUN != 0) || (CBW.bCBLength < 1) || CBW.bCBLength > 16) {
  486   3      fail: CSW.bStatus = CSW_CMD_FAILED;
  487   3            MSC_SetCSW();
  488   3          } else {
  489   3            switch (CBW.CB[0]) {
  490   4              case SCSI_TEST_UNIT_READY:
  491   4                MSC_TestUnitReady();
  492   4                break;
  493   4              case SCSI_REQUEST_SENSE:
  494   4                MSC_RequestSense();
  495   4                break;
  496   4              case SCSI_FORMAT_UNIT:
  497   4                goto fail;
  498   4              case SCSI_INQUIRY:
  499   4                MSC_Inquiry();
  500   4                break;
  501   4              case SCSI_START_STOP_UNIT:
  502   4                goto fail;
  503   4              case SCSI_MEDIA_REMOVAL:
  504   4                goto fail;
  505   4              case SCSI_MODE_SELECT6:
  506   4                goto fail;
  507   4              case SCSI_MODE_SENSE6:
  508   4                MSC_ModeSense6();
  509   4                break;
  510   4              case SCSI_MODE_SELECT10:
  511   4                goto fail;
  512   4              case SCSI_MODE_SENSE10:
  513   4                MSC_ModeSense10();
  514   4                break;
  515   4              case SCSI_READ_FORMAT_CAPACITIES:
  516   4                MSC_ReadFormatCapacity();
  517   4                break;
  518   4              case SCSI_READ_CAPACITY:
  519   4                MSC_ReadCapacity();
  520   4                break;
ARM COMPILER V2.42b,  mscuser                                                              02/01/06  23:45:16  PAGE 9   

  521   4              case SCSI_READ10:
  522   4                if (MSC_RWSetup()) {
  523   5                  if ((CBW.bmFlags & 0x80) != 0) {
  524   6                    IOSET1 = LED_RD;    /* Turn On Read LED */
  525   6                    BulkStage = MSC_BS_DATA_IN;
  526   6                    MSC_MemoryRead();
  527   6                  } else {
  528   6                    USB_SetStallEP(MSC_EP_OUT);
  529   6                    CSW.bStatus = CSW_PHASE_ERROR;
  530   6                    MSC_SetCSW();
  531   6                  }
  532   5                }
  533   4                break;
  534   4              case SCSI_WRITE10:
  535   4                if (MSC_RWSetup()) {
  536   5                  if ((CBW.bmFlags & 0x80) == 0) {
  537   6                    IOSET1 = LED_WR;    /* Turn On Write LED */
  538   6                    BulkStage = MSC_BS_DATA_OUT;
  539   6                  } else {
  540   6                    USB_SetStallEP(MSC_EP_IN);
  541   6                    CSW.bStatus = CSW_PHASE_ERROR;
  542   6                    MSC_SetCSW();
  543   6                  }
  544   5                }
  545   4                break;
  546   4              case SCSI_VERIFY10:
  547   4                if (MSC_RWSetup()) {
  548   5                  if ((CBW.bmFlags & 0x80) == 0) {
  549   6                    BulkStage = MSC_BS_DATA_OUT;
  550   6                    MemOK = TRUE;
  551   6                  } else {
  552   6                    USB_SetStallEP(MSC_EP_IN);
  553   6                    CSW.bStatus = CSW_PHASE_ERROR;
  554   6                    MSC_SetCSW();
  555   6                  }
  556   5                }
  557   4                break;
  558   4              default:
  559   4                goto fail;
  560   4            }
  561   3          }
  562   2        } else {
  563   2          /* Invalid CBW */
  564   2          USB_SetStallEP(MSC_EP_IN);
  565   2          USB_SetStallEP(MSC_EP_OUT);
  566   2          BulkStage = MSC_BS_ERROR;
  567   2        }
  568   1      }
  569          
  570          
  571          /*
  572           *  MSC Set Command Status Wrapper Callback
  573           *    Parameters:      None (global variables)
  574           *    Return Value:    None
  575           */
  576          
  577          void MSC_SetCSW (void) {
  578   1      
  579   1        CSW.dSignature = MSC_CSW_Signature;
  580   1        USB_WriteEP(MSC_EP_IN, (BYTE *)&CSW, sizeof(CSW));
  581   1        BulkStage = MSC_BS_CSW;
  582   1      }
  583          
  584          
  585          /*
  586           *  MSC Bulk In Callback
ARM COMPILER V2.42b,  mscuser                                                              02/01/06  23:45:16  PAGE 10  

  587           *    Parameters:      None (global variables)
  588           *    Return Value:    None
  589           */
  590          
  591          void MSC_BulkIn (void) {
  592   1      
  593   1        switch (BulkStage) {
  594   2          case MSC_BS_DATA_IN:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -