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

📄 hpi.lst

📁 檔案系統FAT讀寫USB pen driver sample code
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V7.06   HPI                                                                   11/22/2004 22:08:31 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE HPI
OBJECT MODULE PLACED IN HPI.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE HPI.C DEBUG OBJECTEXTEND CODE

stmt level    source

   1          #include "common.h"
   2          
   3          extern XXGFLAGS bdata bXXGFlags;
   4          extern unsigned char xdata DBUF[BUFFER_LENGTH];
   5          //////////////////////////////////////////
   6          //CH_CMD_BLOCK xdata inblock;
   7          unsigned char xdata CHBUF[CHBUF_LENGTH];
   8          SYS_INFO_BLOCK xdata DeviceInfo;
   9          CH_CMD_BLOCK xdata CHCmdBlock;
  10          CH_RSP_BLOCK xdata CHRspBlock;
  11          FILE_INFO xdata ThisFile;
  12          extern FREE_FAT_INFO xdata FreeFat;
  13          
  14          
  15          unsigned char EnumMassDev(void)
  16          {
  17   1              PMBR_BLOCK pMBR;
  18   1              PBPB_BLOCK pBPB;
  19   1              if(mInitDisk( )!=USB_INT_SUCCESS)return 0  ;  /* 初始化USB存储器 */
  20   1              pMBR=(PMBR_BLOCK)DBUF;
  21   1              DeviceInfo.BPB_BytesPerSec=512; //暂假设为512
  22   1              //if(!SPC_RequestSense())
  23   1              //      return FALSE;
  24   1              if(!SPC_TestUnit())
  25   1                      return FALSE;
  26   1              if(!SPC_LockMedia())
  27   1                      return FALSE;
  28   1              if(!ReadCapacity())
  29   1                      return FALSE;
  30   1              if(!RBC_Read(0x0,1,DBUF))
  31   1                      return FALSE;
  32   1              //////////////////////////////////
  33   1              if(DBUF[0]==0xeb||DBUF[0]==0xe9){    //判断是否是BS_jmpBoot
  34   2                      DeviceInfo.StartSector=0;
  35   2                      //DeviceInfo.TotalSector=SwapINT32(pMBR->TotalSector);
  36   2                      }
  37   1              else    {
  38   2              //////////////////////////////////
  39   2                      DeviceInfo.StartSector=SwapINT32(pMBR->StartSector);
  40   2                      //DeviceInfo.TotalSector=SwapINT32(pMBR->TotalSector);
  41   2                      }
  42   1              ///////////////////////////////////////////////////////
  43   1              pBPB=(PBPB_BLOCK)DBUF;
  44   1              if(!RBC_Read(DeviceInfo.StartSector,1,DBUF))
  45   1                      return FALSE;
  46   1              DeviceInfo.BPB_BytesPerSec=SwapINT16(pBPB->BPB_BytesPerSec);
  47   1              DeviceInfo.BPB_SecPerClus=pBPB->BPB_SecPerClus;
  48   1              DeviceInfo.BPB_NumFATs=pBPB->BPB_NumFATs;
  49   1              DeviceInfo.BPB_RootEntCnt=SwapINT16(pBPB->BPB_RootEntCnt);
  50   1              DeviceInfo.BPB_TotSec16=SwapINT16(pBPB->BPB_TotSec16);
  51   1              DeviceInfo.BPB_FATSz16=SwapINT16(pBPB->BPB_FATSz16);
  52   1              DeviceInfo.BPB_TotSec32=SwapINT32(pBPB->BPB_TotSec32);
  53   1              DeviceInfo.FatStartSector=DeviceInfo.StartSector+pBPB->BPB_RsvdSecCn[0];
  54   1              DeviceInfo.RootStartSector=DeviceInfo.StartSector+2*DeviceInfo.BPB_FATSz16+pBPB->BPB_RsvdSecCn[0];
  55   1              DeviceInfo.FirstDataSector=DeviceInfo.FatStartSector+2*DeviceInfo.BPB_FATSz16+32;
C51 COMPILER V7.06   HPI                                                                   11/22/2004 22:08:31 PAGE 2   

  56   1              ///////////////////////////////////////////////////////
  57   1              ThisFile.bFileOpen=0;
  58   1              bXXGFlags.bits.SLAVE_IS_ATTACHED=1;
  59   1              ///////////////////////////////////////////////////////
  60   1              return TRUE;
  61   1      }
  62          
  63          //***********************************************
  64          unsigned char DetectDevice(void)      //检测设备
  65          {
  66   1      #define RspBlockDetectDevice CHRspBlock.RspBlock.Rsp_DetectDevice
  67   1              return bXXGFlags.bits.SLAVE_IS_ATTACHED;
  68   1      
  69   1      #undef RspBlockDetectDevice
  70   1      }
  71          
  72          unsigned char List(void)     //列表文件
  73          {
  74   1      #define RspBlockList CHRspBlock.RspBlock.Rsp_List
  75   1              unsigned int item,i;
  76   1              unsigned char j,k,bstop,sector;
  77   1              //RspBlockList.errcode=ERC_NODEVICE;
  78   1              if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
  79   1              {
  80   2              CHRspBlock.errcode=ERC_NODEVICE;
  81   2              return FALSE;
  82   2              }
  83   1              ///////////////////////////////////////////////////////////
  84   1              item=0;
  85   1              bstop=0;
  86   1              //RspBlockList.result=0x1;
  87   1              for(sector=0;sector<DeviceInfo.BPB_RootEntCnt;sector++)
  88   1                  {
  89   2                      //////////////////////////////////////////////////
  90   2                      if(!RBC_Read(DeviceInfo.RootStartSector+sector,1,DBUF))
  91   2                              {
  92   3                              //item=0;
  93   3                              CHRspBlock.errcode=ERC_DEVICEERR;
  94   3                              return FALSE;
  95   3                              }
  96   2                      ///////////////////////////////////////////////////
  97   2                      for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
  98   2                              {
  99   3                              if(DBUF[i]==0x00)
 100   3                                      {bstop=1;
 101   4                                      break;}
 102   3                              else if(DBUF[i]==0xE5)
 103   3                                      continue;
 104   3                              else if((DBUF[i]&0x40==0x40)&&(DBUF[i+11]==0xff))
 105   3                                      {
 106   4                                      j=DBUF[i]&0x0F;
 107   4                                      j=j+1;
 108   4                                      for(k=0;k<j*32;k++)
 109   4                                              CHBUF[item*32+k]=DBUF[i+k];
 110   4                                      i=i+(j-1)*32;
 111   4                                      item=item+j;
 112   4                                      }
 113   3                              else
 114   3                                      {
 115   4                                      for(k=0;k<32;k++)
 116   4                                              CHBUF[item*32+k]=DBUF[i+k];
 117   4                                      item=item+1;
C51 COMPILER V7.06   HPI                                                                   11/22/2004 22:08:31 PAGE 3   

 118   4                                      }
 119   3                              }
 120   2                      ///////////////////////////////////////////////////////
 121   2                      if(bstop==1)break;
 122   2      
 123   2                  }
 124   1      
 125   1              //pBuf=(PREAD_CAPACITY_RSP)DBUF;
 126   1              ///////////////////////////////////////////
 127   1              RspBlockList.len=SwapINT16(item*32);
 128   1              CHRspBlock.len=item*32;
 129   1              return TRUE;
 130   1      
 131   1      #undef RspBlockList
 132   1      
 133   1      }
 134          unsigned char OpenFile(unsigned char *pBuffer)
 135          {
 136   1      #define RspBlockOpenFile CHRspBlock.RspBlock.Rsp_OpenFile
 137   1              unsigned int i;
 138   1              unsigned char j,bstop,sector;
 139   1              PDIR_INFO pDirInfo;
 140   1      
 141   1              if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
 142   1              {
 143   2              CHRspBlock.errcode=ERC_NODEVICE;
 144   2              return FALSE;
 145   2              }
 146   1              ///////////////////////////////////////////////////////////
 147   1      
 148   1              ThisFile.bFileOpen=0;
 149   1              //RspBlockOpenFile.result=0x0;
 150   1              //RspBlockOpenFile.errcode=ERC_OK;
 151   1              for(sector=0;sector<DeviceInfo.BPB_RootEntCnt;sector++)
 152   1                  {
 153   2                      //////////////////////////////////////////////////
 154   2                      if(!RBC_Read(DeviceInfo.RootStartSector+sector,1,DBUF))
 155   2                              {
 156   3                              CHRspBlock.errcode=ERC_DEVICEERR;
 157   3                              return FALSE;
 158   3      
 159   3                              }
 160   2                      ///////////////////////////////////////////////////
 161   2                      for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
 162   2                              {
 163   3                              if(DBUF[i]==0x00)
 164   3                                      {
 165   4                                      CHRspBlock.errcode=ERC_FILENOTFOUND;
 166   4                                      //CHRspBlock.errcode=ERC_DEVICEERR;
 167   4                                      return FALSE;
 168   4                                      }
 169   3                              ///////////////////////////////////////////
 170   3                              j=0;
 171   3                              while(DBUF[i+j]==*(pBuffer+j))
 172   3                                      {
 173   4                                       j=j+1;
 174   4                                       if(j>10)
 175   4                                              break;
 176   4                                      }
 177   3      
 178   3                              if(j>10)
 179   3                                  {
C51 COMPILER V7.06   HPI                                                                   11/22/2004 22:08:31 PAGE 4   

 180   4                                  for(j=0;j<32;j++)
 181   4                                      RspBlockOpenFile.item[j]=DBUF[i+j];
 182   4                                  //RspBlockOpenFile.result=0x1;
 183   4                                  ThisFile.bFileOpen=1;
 184   4                                  bstop=1;
 185   4                                   break;}
 186   3      
 187   3                              }
 188   2                      ///////////////////////////////////////////////////////
 189   2                      if(bstop==1)break;
 190   2                      ///////////////////////////////////////////////////////
 191   2                      //if(DeviceInfo.BPB_RootEntCnt)
 192   2      
 193   2                  }
 194   1      
 195   1                  if(sector>=DeviceInfo.BPB_RootEntCnt)
 196   1                      {
 197   2                      CHRspBlock.errcode=ERC_FILENOTFOUND;
 198   2                      //CHRspBlock.errcode=ERC_DEVICEERR;
 199   2                      return FALSE;
 200   2                      }
 201   1              ////////////////////////////////////////////
 202   1              pDirInfo=(PDIR_INFO)RspBlockOpenFile.item;
 203   1              ThisFile.StartCluster=SwapINT16(pDirInfo->startCluster);
 204   1              ThisFile.LengthInByte=SwapINT32(pDirInfo->length);
 205   1              ThisFile.ClusterPointer=ThisFile.StartCluster;
 206   1              ThisFile.SectorPointer=FirstSectorofCluster(ThisFile.StartCluster);
 207   1              ThisFile.OffsetofSector=0;
 208   1              ThisFile.SectorofCluster=0;
 209   1              //=ThisFatSecNum(clusterNum);
 210   1              //xxgFatEntOffset=ThisFatEntOffset(clusterNum);
 211   1              ThisFile.FatSectorPointer=0;
 212   1              //ThisFile.bFileOpen=1;
 213   1              ThisFile.pointer=0;
 214   1              ///////////////////////////////////////////
 215   1              FreeFat.SectorNum=DeviceInfo.FatStartSector;
 216   1              FreeFat.OldSectorNum=DeviceInfo.FatStartSector;
 217   1              FreeFat.OffsetofSector=2;
 218   1      
 219   1              return TRUE;
 220   1      #undef RspBlockOpenFile
 221   1      }
 222          
 223          unsigned char ReadFile(unsigned int readLength,unsigned char *pBuffer)
 224          {
 225   1      #define RspBlockReadFile CHRspBlock.RspBlock.Rsp_ReadFile
 226   1              unsigned int idata len,i;
 227   1              unsigned char bSuccess;
 228   1              //unsigned char sector;
 229   1              //unsigned long lba;
 230   1      
 231   1              if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
 232   1              {
 233   2              CHRspBlock.errcode=ERC_NODEVICE;
 234   2              return FALSE;
 235   2              }
 236   1              if(!ThisFile.bFileOpen)
 237   1              {
 238   2              CHRspBlock.errcode=ERC_FILENOTOPENED;
 239   2              return FALSE;
 240   2              }
 241   1              ///////////////////////////////////////////////////////////
C51 COMPILER V7.06   HPI                                                                   11/22/2004 22:08:31 PAGE 5   

 242   1              ThisFile.bFileOpen=0;

⌨️ 快捷键说明

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