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

📄 rbc.lst

📁 D12 USB源代码 硬盘
💻 LST
📖 第 1 页 / 共 4 页
字号:
 572   1              /*
 573   1              // config TPBulkXfer Paras
 574   1              */
 575   1          Xfer_Space &= BOTXFERSPACE_MASK;
 576   1          BOTXfer_atATA = 1;
 577   1          BOTXfer_wResidue = CBW_wXferLen;
 578   1      
 579   1              TPBulksup_ErrorHandler(CASE6,BOTXfer_wResidue);
 580   1              RBC_BuildSenseData(SCSI_SENSE_NO_SENSE,0,0);
 581   1      
 582   1              BOTFSMstate = USBFSM4BOT_DATAIN;
 583   1      
 584   1              return (TRUE);
 585   1      
 586   1      #undef cdbRead
 587   1      }
 588          
 589          
 590          
 591          BOOLEAN RBC_Write(void)
 592          {
 593   1      #define cdbWrite    RBC_CDB.RbcCdb_Write
 594   1      
 595   1          Hal4ATA_SectCntInBlk = ATADevExt_IDData.MaximumBlockTransfer << BITNUM4EP2PKT_PER_SECTOR;
 596   1              /*
 597   1              // Setting ATA Hardware
 598   1              */
 599   1          ATABF_IDEXfer_dir = 0;
 600   1              Hal4ATA_ReadWriteSetting();
 601   1      
 602   1              /*
 603   1              // Config TPBulkXfer Paras
 604   1              */
 605   1          Xfer_Space &= BOTXFERSPACE_MASK;
 606   1          BOTXfer_atATA = 1;
 607   1          BOTXfer_wResidue = CBW_wXferLen;
 608   1      
 609   1              TPBulksup_ErrorHandler(CASE12,BOTXfer_wResidue);
 610   1              RBC_BuildSenseData(SCSI_SENSE_NO_SENSE,0,0);
 611   1      
 612   1              BOTFSMstate = USBFSM4BOT_DATAOUT;
 613   1      
C51 COMPILER V7.06   RBC                                                                   02/17/2004 14:42:23 PAGE 11  

 614   1              return (TRUE);
 615   1      
 616   1      #undef cdbWrite
 617   1      }
 618          
 619          BOOLEAN RBC_ReadCapacity(void)
 620          {
 621   1      #define cdbReadCap RBC_CDB.RbcCdb_ReadCapacity
 622   1      
 623   1              /*
 624   1              // Calculate last sector.
 625   1              */
 626   1              cdbReadCap.tmpVar.l[1] =  ((INT32)ATADevExt_IDData.CurrentSectorCapacity.u0) - 1;
 627   1      
 628   1      // 32bits info
 629   1      //ATADevExt_IDData.CurrentSectorCapacity.ints.i0 = Hal4Sys_ATADataPortInW()
 630   1      //ATADevExt_IDData.CurrentSectorCapacity.ints.i1 = Hal4Sys_ATADataPortInW()
 631   1      /* struct
 632   1          {
 633   1              INT8 c3;  // MSB for 8051 Keil C
 634   1              INT8 c2;
 635   1              INT8 c1;
 636   1              INT8 c0;   // LSB for 8051 Keil C
 637   1          } chars0;
 638   1      */
 639   1              /* store it in big endian */
 640   1              cdbReadCap.tmpVar.CapData.LBA_3 = ( INT8 ) cdbReadCap.tmpVar.l0[1].chars0.c3;
 641   1              cdbReadCap.tmpVar.CapData.LBA_2 = ( INT8 ) cdbReadCap.tmpVar.l0[1].chars0.c2;
 642   1              cdbReadCap.tmpVar.CapData.LBA_1 = ( INT8 ) cdbReadCap.tmpVar.l0[1].chars0.c1;
 643   1              cdbReadCap.tmpVar.CapData.LBA_0 = ( INT8 ) cdbReadCap.tmpVar.l0[1].chars0.c0;
 644   1      
 645   1              /*
 646   1              // Bytes Per Block is 512Bytes
 647   1              // 00020000 is 0x200 in big endian
 648   1              */
 649   1              cdbReadCap.tmpVar.CapData.BlockLen_3 = 0;
 650   1              cdbReadCap.tmpVar.CapData.BlockLen_2 = 0;
 651   1              cdbReadCap.tmpVar.CapData.BlockLen_1 = 0x02;
 652   1              cdbReadCap.tmpVar.CapData.BlockLen_0 = 0;
 653   1              /*
 654   1              // Adjust TPBulkXfer Paras
 655   1              */
 656   1          Xfer_Space &= BOTXFERSPACE_MASK;
 657   1          BOTXfer_atRAM = 1;
 658   1      
 659   1              BOTXfer_wResidue = sizeof(READ_CAPACITY_DATA);
 660   1              BOTXfer_pData = (PINT8)&(cdbReadCap.tmpVar);
 661   1      
 662   1              TPBulksup_ErrorHandler(CASE6, BOTXfer_wResidue);
 663   1              RBC_BuildSenseData(SCSI_SENSE_NO_SENSE,0,0);
 664   1      
 665   1              BOTFSMstate = USBFSM4BOT_DATAIN;
 666   1      
 667   1              return(TRUE);
 668   1      #undef cdbReadCap
 669   1      }
 670          
 671          BOOLEAN RBC_OnOffUnit(void)
 672          {
 673   1      #define cdbOnOffUnit RBC_CDB.RbcCdb_OnOffUnit
 674   1      
 675   1              //BOTXfer_wResidue = 0;
C51 COMPILER V7.06   RBC                                                                   02/17/2004 14:42:23 PAGE 12  

 676   1      
 677   1              switch(cdbOnOffUnit.Flags.bits1.PowerConditions)
 678   1              {
 679   2              case PWR_NOCHANGE:
 680   2                      switch(cdbOnOffUnit.Flags.bits1.MediumState)
 681   2                      {
 682   3                      case MEDIUM_LOAD:
 683   3                              break;
 684   3                      case MEDIUM_UNLOAD:
 685   3                              break;
 686   3                      case MEDIUM_STOP:
 687   3                              break;
 688   3                      case MEDIUM_READY:
 689   3                              break;
 690   3                      }
 691   2                      break;
 692   2              case PWR_ACTIVE:
 693   2                      break;
 694   2              case PWR_IDLE:
 695   2                      break;
 696   2              case PWR_STANDBY:
 697   2                      break;
 698   2              case PWR_SLEEP:
 699   2                      break;
 700   2              case PWR_DEVCTRL:
 701   2              default:
 702   2                      break;
 703   2              }
 704   1      
 705   1      
 706   1              RBC_PropertyData.bits.MediumState = cdbOnOffUnit.Flags.bits1.MediumState;
 707   1              RBC_PropertyData.bits.PowerState = cdbOnOffUnit.Flags.bits1.PowerConditions;
 708   1      
 709   1              TPBulksup_ErrorHandler(CASE1,0);
 710   1              RBC_BuildSenseData(SCSI_SENSE_NO_SENSE,0,0);
 711   1      
 712   1          TPBulk_CSWHandler();// Goto USBFSM4BOT_CSWPROC;
 713   1      
 714   1              return TRUE;
 715   1      #undef cdbOnOffUnit
 716   1      }
 717          
 718          BOOLEAN RBC_SyncCache(void)
 719          {
 720   1      #define cdbSyncRBC RBC_CDB.RbcCdb_SyncCache
 721   1      
 722   1              //BOTXfer_wResidue = 0;
 723   1              TPBulksup_ErrorHandler(CASE1,0);
 724   1              RBC_BuildSenseData(SCSI_SENSE_NO_SENSE,0,0);
 725   1      
 726   1          TPBulk_CSWHandler();// Goto USBFSM4BOT_CSWPROC;
 727   1              return TRUE;
 728   1      #undef cdbSyncRBC
 729   1      }
 730          
 731          
 732          BOOLEAN  RBC_Verify(void)
 733          {
 734   1      #define cdbVerifyRBC RBC_CDB.RbcCdb_Verify
 735   1      
 736   1              if( CBW_wXferLen == 0 )
 737   1              {
C51 COMPILER V7.06   RBC                                                                   02/17/2004 14:42:23 PAGE 13  

 738   2                      //BOTXfer_wResidue = 0;
 739   2                      TPBulksup_ErrorHandler(CASE1,0);
 740   2                      RBC_BuildSenseData(SCSI_SENSE_NO_SENSE,0,0);
 741   2                  TPBulk_CSWHandler();// Goto USBFSM4BOT_CSWPROC;
 742   2              }
 743   1              else
 744   1              {
 745   2                      /*
 746   2                      // Config TPBulkXfer Paras
 747   2                      */
 748   2                      Xfer_Space &= BOTXFERSPACE_MASK;
 749   2                      BOTXfer_atROM = 1;
 750   2                      BOTXfer_wResidue = CBW_wXferLen;
 751   2      
 752   2                      TPBulksup_ErrorHandler(CASE12,BOTXfer_wResidue);
 753   2                      RBC_BuildSenseData(SCSI_SENSE_NO_SENSE,0,0);
 754   2      
 755   2                      BOTFSMstate = USBFSM4BOT_DATAOUT;
 756   2              }
 757   1              return TRUE;
 758   1      #undef cdbVerifyRBC
 759   1      }
 760          
 761          
 762          /*
 763          ////////////////////////////////////////////////////////////////////////////////////
 764          // SCSI Primary Command Support
 765          ////////////////////////////////////////////////////////////////////////////////////
 766          */
 767          
 768          BOOLEAN SPC_Inquiry(void)
 769          {
 770   1      #define cdbInquirySPC RBC_CDB.SpcCdb_Inquiry
 771   1              BOOLEAN         retStatus = FALSE;
 772   1      
 773   1      
 774   1              if(cdbInquirySPC.EnableVPD)
 775   1              {
 776   2                      switch(cdbInquirySPC.PageCode)
 777   2                      {
 778   3                      case VPDPAGE_SERIAL_NUMBER:
 779   3      
 780   3                              BOTXfer_pData =(PINT8) &SerialPage;
 781   3                              BOTXfer_wResidue = sizeof(VPD_SERIAL_PAGE);
 782   3                              break;
 783   3      
 784   3                      case VPDPAGE_DEVICE_IDENTITY:
 785   3      
 786   3                              retStatus = TRUE;
 787   3                              BOTXfer_pData = (PINT8)&DeviceIDPage;
 788   3                              BOTXfer_wResidue = sizeof(VPD_DEVICE_ID_PAGE);
 789   3                              break;
 790   3      
 791   3                      default:
 792   3                              //retStatus = FALSE;
 793   3                              TPBulksup_ErrorHandler(CASECMDFAIL,BOTXfer_wResidue);
 794   3                              RBC_BuildSenseData(SCSI_SENSE_ILLEGAL_REQUEST,SCSI_ADSENSE_ILLEGAL_COMMAND,0x00);
 795   3      
 796   3                              TPBulk_CSWHandler();// Goto USBFSM4BOT_CSWPROC;
 797   3                              return retStatus;
 798   3                      }
 799   2              }
C51 COMPILER V7.06   RBC                                                                   02/17/2004 14:42:23 PAGE 14  

 800   1              else if(cdbInquirySPC.CmdSupportData)
 801   1              {
 802   2                      //retStatus = FALSE;
 803   2                      TPBulksup_ErrorHandler(CASECMDFAIL,BOTXfer_wResidue);
 804   2                      RBC_BuildSenseData(SCSI_SENSE_ILLEGAL_REQUEST,SCSI_ADSENSE_ILLEGAL_COMMAND,0x00);
 805   2      
 806   2                      TPBulk_CSWHandler();// Goto USBFSM4BOT_CSWPROC;
 807   2                      return retStatus;
 808   2              }
 809   1              else
 810   1              {
 811   2      
 812   2              BOTXfer_pData =(PINT8) &inquiryData;
 813   2                      BOTXfer_wResidue = sizeof(STD_INQUIRYDATA);
 814   2              }
 815   1      
 816   1              retStatus = TRUE;
 817   1          Xfer_Space &= BOTXFERSPACE_MASK;
 818   1          BOTXfer_atROM = 1;
 819   1      
 820   1              if( BOTXfer_wResidue > CBW_wXferLen )
 821   1              {
 822   2                      BOTXfer_wResidue = CBW_wXferLen;
 823   2                      TPBulksup_ErrorHandler(CASE6,BOTXfer_wResidue);
 824   2                      RBC_BuildSenseData(SCSI_SENSE_NO_SENSE,0,0);
 825   2              }
 826   1              else if ( BOTXfer_wResidue == CBW_wXferLen )
 827   1              {
 828   2                      TPBulksup_ErrorHandler(CASE6,BOTXfer_wResidue);
 829   2                      RBC_BuildSenseData(SCSI_SENSE_NO_SENSE,0,0);
 830   2              }
 831   1              else
 832   1              {
 833   2                      TPBulksup_ErrorHandler(CASE5,BOTXfer_wResidue);
 834   2                      RBC_BuildSenseData(SCSI_SENSE_NO_SENSE,0,0);
 835   2              }
 836   1      
 837   1              BOTFSMstate = USBFSM4BOT_DATAIN;// Goto USBFSM4BOT_DATAIN
 838   1      
 839   1              return retStatus;
 840   1      #undef cdbInquirySPC
 841   1      }
 842          
 843          BOOLEAN SPC_ModeSelect(void)
 844          {
 845   1      #define cdbModeSelectSPC    RBC_CDB.SpcCdb_ModeSelect
 846   1              BOOLEAN retStatus = FALSE;
 847   1      
 848   1              //
 849   1              //Just Retrieve and discard data from USB FIFO
 850   1      
 851   1          Xfer_Space &= BOTXFERSPACE_MASK;
 852   1          BOTXfer_atROM = 1;
 853   1      
 854   1          BOTXfer_pData = (PINT8)0;
 855   1              BOTXfer_wResidue = cdbModeSelectSPC.ParameterLen;
 856   1      
 857   1              if(cdbModeSelectSPC.SavePage != 1)
 858   1              {
 859   2                      if(CBW_wXferLen < BOTXfer_wResidue)
 860   2                      {
 861   3                              BOTXfer_wResidue = CBW_wXferLen;
C51 COMPILER V7.06   RBC                                                                   02/17/2004 14:42:23 PAGE 15  

⌨️ 快捷键说明

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