fat.lst

来自「51环境下的FAT及FAT32文件系统源码」· LST 代码 · 共 1,534 行 · 第 1/5 页

LST
1,534
字号
 530      =2          unsigned char name[8];      //0
 531      =2          unsigned char extension[3]; //9
 532      =2          unsigned char attribute;    //11
 533      =2          unsigned char Reserved[10]; //21
 534      =2          unsigned int lastUpdateDate; //23
 535      =2          unsigned int lastUpdateTime; //25
 536      =2          unsigned int startCluster;   //27
 537      =2          unsigned long length;        //28
 538      =2  } DIR_INFO, *pDIR_INFO;
 539      =2  /*
 540      =2  // Mode Sense
 541      =2  */
 542      =2  typedef struct _MODE_SENSE_SPC {
 543      =2      UINT8 OperationCode;            // 1AH
 544      =2      UINT8 Reseved0 : 3 ;
 545      =2      UINT8 DisableBlockDescriptor : 1 ;
 546      =2      UINT8 Reserved0 : 4 ;
 547      =2      UINT8 PageCode:6 ;
 548      =2      UINT8 PageControl : 2 ;
 549      =2      UINT8 Reserved1;
 550      =2      UINT8 ParameterLen;
 551      =2      UINT8 Control;
 552      =2  } MODE_SENSE_SPC, *pMODE_SENSE_SPC;
 553      =2  
 554      =2  /*
 555      =2  typedef struct _MODE_PARAMETER_HEAD {
 556      =2      UINT8 DataLen;
 557      =2      UINT8 MediumType;
 558      =2      UINT8 DeviceParameter;
 559      =2      UINT8 BlockDescriptorLen;
 560      =2  } MODE_PARAMETER_HEAD, *pMODE_PARAMETER_HEAD;
 561      =2  */
 562      =2  /*
 563      =2  // Define Device Capabilities page.
 564      =2  */
 565      =2  /*
 566      =2  typedef struct _MODE_RBC_DEVICE_PARAMETERS_PAGE {
 567      =2      UINT8 PageCode : 6;
 568      =2          UINT8 Reserved : 1;
C51 COMPILER V8.02   FAT                                                                   09/19/2006 15:01:23 PAGE 16  

 569      =2      UINT8 PageSavable : 1;
 570      =2      UINT8 PageLength;
 571      =2      UINT8 WriteCacheDisable : 1;
 572      =2      UINT8 Reserved1 : 7;
 573      =2      UINT8 LogicalBlockSize[2];
 574      =2      UINT8 NumberOfLogicalBlocks[5];
 575      =2      UINT8 PowerPerformance;
 576      =2      UINT8 Lockable : 1;
 577      =2      UINT8 Formattable : 1;
 578      =2      UINT8 Writable : 1;
 579      =2      UINT8 Readable : 1;
 580      =2      UINT8 Reserved2 : 4;
 581      =2      UINT8 Reserved3;
 582      =2  }MODE_RBC_DEVICE_PARAMETERS_PAGE, *pMODE_RBC_DEVICE_PARAMETERS_PAGE;
 583      =2  */
 584      =2  /*
 585      =2  // prevent/allow medium removal
 586      =2  */
 587      =2  typedef struct _MEDIA_REMOVAL_SPC {
 588      =2          UINT8 OperationCode;    // 1EH
 589      =2          UINT8 Reserved0[3];
 590      =2          UINT8 Prevent;
 591      =2          //UINT8 Reserved1:6 ;
 592      =2          //UINT8 Control;
 593      =2  } MEDIA_REMOVAL_SPC, *pMEDIA_REMOVAL_SPC;
 594      =2  
 595      =2  /*
 596      =2  // Request Sense
 597      =2  */
 598      =2  typedef struct _REQUEST_SENSE_SPC {
 599      =2      UINT8 OperationCode;    // 03H
 600      =2      UINT8 Reserved[3];
 601      =2      UINT8 AllocationLen;
 602      =2      UINT8 Control;
 603      =2  } REQUEST_SENSE_SPC, *pREQUEST_SENSE_SPC;
 604      =2  /*
 605      =2  typedef struct _REQUEST_SENSE_DATA {
 606      =2      UINT8 ResponseCode : 7;
 607      =2      UINT8 Valid : 1;
 608      =2  
 609      =2      UINT8 SegmentNum;
 610      =2  
 611      =2      UINT8 SenseKey : 4;
 612      =2      UINT8 Reserved0 : 1;
 613      =2      UINT8 WrongLenIndicator : 1;
 614      =2      UINT8 EndofMedium : 1;
 615      =2      UINT8 FileMark : 1;
 616      =2  
 617      =2      UINT8 Info_0;
 618      =2      UINT8 Info_1;
 619      =2      UINT8 Info_2;
 620      =2      UINT8 Info_3;
 621      =2  
 622      =2      UINT8 AdditionalSenseLen;
 623      =2  
 624      =2      UINT8 CommandSpecInfo_0;
 625      =2      UINT8 CommandSpecInfo_1;
 626      =2      UINT8 CommandSpecInfo_2;
 627      =2      UINT8 CommandSpecInfo_3;
 628      =2  
 629      =2      UINT8 ASC;
 630      =2      UINT8 ASCQ;
C51 COMPILER V8.02   FAT                                                                   09/19/2006 15:01:23 PAGE 17  

 631      =2      UINT8 FieldReplacableUnitCode;
 632      =2      UINT8 SenseKeySpec_0 : 7;
 633      =2      UINT8 SenseKeySpecValid : 1;
 634      =2      UINT8 SenseKeySpec_1;
 635      =2      UINT8 SenseKeySpec_2;
 636      =2  
 637      =2  } REQUEST_SENSE_DATA, *pREQUEST_SENSE_DATA;
 638      =2  */
 639      =2  /*
 640      =2  // Test Unit Ready
 641      =2  */
 642      =2  typedef struct _TEST_UNIT_SPC {
 643      =2          UINT8 OperationCode;    // 00H
 644      =2          UINT8 Reserved[4];
 645      =2          UINT8 Control;
 646      =2  } TEST_UNIT_SPC, *pTEST_UNIT_SPC;
 647      =2  
 648      =2  /*
 649      =2  // Write Buffer
 650      =2  */
 651      =2  
 652      =2  typedef struct _WRITE_BUFFER_SPC {
 653      =2      UINT8 OperationCode;    
 654      =2      UINT8 Mod:4 ;
 655      =2      UINT8 Reserved0:4 ;
 656      =2          UINT8 BufferID;
 657      =2      UINT8 BufferOff_2;
 658      =2      UINT8 BufferOff_1;
 659      =2      UINT8 BufferOff_0;
 660      =2      UINT8 ParameterLen_2;
 661      =2      UINT8 ParameterLen_1;
 662      =2          UINT8 ParameterLen_0;
 663      =2      UINT8 Control;
 664      =2  } WRITE_BUFFER_SPC, *pWRITE_BUFFER_SPC;   
 665      =2  
 666      =2  typedef union _CDB_RBC {
 667      =2      GENERIC_CDB             Cdb_Generic;
 668      =2    
 669      =2       // RBC commands
 670      =2      GENERIC_RBC             RbcCdb_Generic;
 671      =2  
 672      =2      FORMAT_RBC              RbcCdb_Format;
 673      =2      READ_RBC                RbcCdb_Read;
 674      =2      READ_CAPACITY_RBC       RbcCdb_ReadCapacity;
 675      =2      START_STOP_RBC          RbcCdb_OnOffUnit;
 676      =2      SYNCHRONIZE_CACHE_RBC   RbcCdb_SyncCache;
 677      =2      VERIFY_RBC              RbcCdb_Verify;
 678      =2      WRITE_RBC               RbcCdb_Write;
 679      =2  
 680      =2     
 681      =2      // SPC-2 commands
 682      =2     
 683      =2      INQUIRY_SPC             SpcCdb_Inquiry;
 684      =2      MODE_SELECT_SPC         SpcCdb_ModeSelect;
 685      =2      MODE_SENSE_SPC          SpcCdb_ModeSense;
 686      =2      MEDIA_REMOVAL_SPC       SpcCdb_Remove;
 687      =2      REQUEST_SENSE_SPC       SpcCdb_RequestSense;
 688      =2      TEST_UNIT_SPC           SpcCdb_TestUnit;
 689      =2      WRITE_BUFFER_SPC        SpcCdb_WriteBuffer;
 690      =2  
 691      =2      // ATAPI Commands
 692      =2      READ_10         CmdRead10;
C51 COMPILER V8.02   FAT                                                                   09/19/2006 15:01:23 PAGE 18  

 693      =2      WRITE_10        CmdWrite10;
 694      =2      MODE_SELECT_10  CmdModeSel10;
 695      =2      MODE_SENSE_10   CmdModeSen10;
 696      =2      //////////////////////////////////////
 697      =2      READ_LONG_CMD       SpcCdb_ReadLong;
 698      =2  
 699      =2  } CDB_RBC, *pCDB_RBC;
 700      =2  
 701      =2  
   2      =1  ///////////////////////////////////
   3      =1  #define CBW_SIGNATURE   0x55534243
   4      =1  #define CSW_SIGNATURE   0x55534253
   5      =1  
   6      =1  #define     TPBulk_CBW                  TPBulk_Block.TPBulk_CommandBlock
   7      =1  #define     CBW_wXferLen                TPBulk_CBW.dCBW_DataXferLen
   8      =1  #define     RBC_CDB                             TPBulk_CBW.cdbRBC
   9      =1  #define     RBC_LUN                             TPBulk_CBW.bCBW_LUN
  10      =1  #define     TPBulk_CSW                  TPBulk_Block.TPBulk_CommandStatus
  11      =1  
  12      =1  typedef struct _COMMAND_BLOCK_WRAPPER{
  13      =1      UINT32   dCBW_Signature;
  14      =1      UINT32   dCBW_Tag;
  15      =1      UINT32   dCBW_DataXferLen;
  16      =1      UINT8    bCBW_Flag;
  17      =1      UINT8    bCBW_LUN;
  18      =1      UINT8    bCBW_CDBLen;
  19      =1      CDB_RBC cdbRBC;
  20      =1  } CBW, *pCBW;
  21      =1  
  22      =1  typedef struct _COMMAND_STATUS_WRAPPER{
  23      =1      UINT32   dCSW_Signature;
  24      =1      UINT32   dCSW_Tag;
  25      =1      UINT32   dCSW_DataResidue;
  26      =1      UINT8    bCSW_Status;
  27      =1  } CSW, *pCSW;
  28      =1  
  29      =1  typedef union _TPBULK_STRUC {
  30      =1      CBW     TPBulk_CommandBlock;
  31      =1      CSW     TPBulk_CommandStatus;
  32      =1  
  33      =1  }TPB_STRUC, *pTPB_STRUC;
  34      =1  ///////////////////////////////////
  35      =1  unsigned char EnumMassDev(void);
  36      =1  unsigned char TPBulk_GetMaxLUN(void);
  37      =1  unsigned char SPC_Inquiry(void);
  38      =1  unsigned char SPC_READLONG(void);
  39      =1  unsigned char SPC_RequestSense(void);
  40      =1  unsigned char SPC_TestUnit(void);
  41      =1  unsigned char SPC_LockMedia(void);
  42      =1  unsigned char RBC_ReadCapacity(void);
  43      =1  unsigned char RBC_ReadOneSec(unsigned long lba, unsigned char *pBuffer);
  44      =1  unsigned char RBC_Write(unsigned long lba,unsigned char len,unsigned char *pBuffer);
  45      =1  
  46      =1  
   4          #include "usb.h"
   1      =1  #include "ABSACC.H"
   1      =2  /*--------------------------------------------------------------------------
   2      =2  ABSACC.H
   3      =2  
   4      =2  Direct access to 8051, extended 8051 and Philips 80C51MX memory areas.
   5      =2  Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
   6      =2  All rights reserved.
C51 COMPILER V8.02   FAT                                                                   09/19/2006 15:01:23 PAGE 19  

   7      =2  --------------------------------------------------------------------------*/
   8      =2  
   9      =2  #ifndef __ABSACC_H__
           =2 #define __ABSACC_H__
           =2 
           =2 #define CBYTE ((unsigned char volatile code  *) 0)
           =2 #define DBYTE ((unsigned char volatile data  *) 0)
           =2 #define PBYTE ((unsigned char volatile pdata *) 0)
           =2 #define XBYTE ((unsigned char volatile xdata *) 0)
           =2 
           =2 #define CWORD ((unsigned int volatile code  *) 0)
           =2 #define DWORD ((unsigned int volatile data  *) 0)
           =2 #define PWORD ((unsigned int volatile pdata *) 0)
           =2 #define XWORD ((unsigned int volatile xdata *) 0)
           =2 
           =2 
           =2 #ifdef __CX51__
           =2 #define FVAR(object, addr)   (*((object volatile far *) (addr)))
           =2 #define FARRAY(object, base) ((object volatile far *) (base))
           =2 #define FCVAR(object, addr)   (*((object const far *) (addr)))
           =2 #define FCARRAY(object, base) ((object const far *) (base))
           =2 #else
           =2 #define FVAR(object, addr)    (*((object volatile far *) ((addr)+0x10000L)))
           =2 #define FCVAR(object, addr)   (*((object const far *) ((addr)+0x810000L)))
           =2 #define FARRAY(object, base)  ((object volatile far *) ((base)+0x10000L))
           =2 #define FCARRAY(object, base) ((object const far *) ((base)+0x810000L))
           =2 #endif
           =2 
           =2 #endif
   2      =1  
   3      =1  #define ISO_BIT     0x10
   4      =1  #define MAX_EP          0x05     // maximum number of endpoints (Ep0 + max of 4 data endpoints)
   5      =1  #define INT_CLEAR   0xff
   6      =1  //*****************************************************************************************
   7      =1  // Constant Defines
   8      =1  //*****************************************************************************************
   9      =1  
  10      =1  #define TIMEOUT_RETRY   0x06    // Maximum no. of timeout retries during USB xfer
  11      =1  // USB device descriptors
  12      =1  typedef struct
  13      =1  {
  14      =1      WORD  wVID, wPID;       // Vendor ID and Product ID
  15      =1      BYTE  bClass;           // 
  16      =1      BYTE  bNumOfEPs;        // actual number endpoint from slave
  17      =1      BYTE  iMfg;                         // Manufacturer ID
  18      =1      BYTE  iPdt;                         // Product ID
  19      =1      BYTE  bId1;
  20      =1      BYTE  bId2;
  21      =1      BYTE  bEPAddr[MAX_EP];   // bit 7 = 1 = use PID_IN, 
  22      =1      BYTE  bAttr[MAX_EP];     // ISO | Bulk | Interrupt | Control
  23      =1      WORD  wPayLoad[MAX_EP];  // ISO range: 1-1023, Bulk: 1-64, etc
  24      =1      WORD  bInterval[MAX_EP]; // polling interval (for LS)
  25      =1      BYTE  bData1[MAX_EP];    // DataToggle value
  26      =1  } USBDEV, *pUSBDEV;
  27      =1  
  28      =1  // USB specific request
  29      =1  typedef struct
  30      =1  {
  31      =1      BYTE bmRequest;
  32      =1      BYTE bRequest;
  33      =1      WORD wValue;
  34      =1      WORD wIndex;
C51 COMPILER V8.02   FAT                                                                   09/19/2006 15:01:23 PAGE 20  

  35      =1      WORD wLength;
  36      =1  } SetupPKG, *pSetupPKG;
  37      =1  
  38      =1  typedef struct
  39      =1  {
  40      =1      unsigned char usbaddr;
  41      =1  //    unsigned char endpoint;
  42      =1      unsigned char pid;
  43      =1      unsigned char wPayload;
  44      =1      unsigned int  wLen;

⌨️ 快捷键说明

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