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

📄 api.lst

📁 sl811 c8051F驱动程序 保证绝对可以使用 USB通信协议USB1.1
💻 LST
📖 第 1 页 / 共 3 页
字号:
 197   1        return FALSE;
 198   1      }  
 199          BYTE CloseFile()
 200          {
 201   1       xdata  BYTE Cache[512];
 202   1              struct _DIR *dir;
 203   1              ////////////////////////////////////////////////////////////////////////
 204   1              if(ApiFileControl.SectorOffset!=0)
 205   1              {                       
 206   2                      if(!Write(ApiFileControl.CurrentSectorNum,SimpleBpb.SecPerClus,(unsigned char *)BuffFile,TRUE))
 207   2                              if(!Write(ApiFileControl.CurrentSectorNum,SimpleBpb.SecPerClus,(unsigned char *)BuffFile,TRUE))
 208   2                                      return FALSE;
 209   2              }               
 210   1              DelayMs(50);
 211   1              if(!Read(ApiFileControl.DirSectorNum,1,Cache))
 212   1                      if(!Read(ApiFileControl.DirSectorNum,1,Cache))
 213   1                      return FALSE;
 214   1              dir = (struct _DIR *)Cache;
 215   1              dir += ApiFileControl.DirIndex;
 216   1              ApiFileControl.dir.FileSize=DWordSwap(ApiFileControl.dir.FileSize);
 217   1              memcpy(dir, &ApiFileControl.dir, sizeof(struct _DIR));
 218   1              DelayMs(50);
 219   1              if(!Write(ApiFileControl.DirSectorNum,1,Cache,TRUE))
 220   1                      if(!Write(ApiFileControl.DirSectorNum,1,Cache,TRUE))
 221   1                              return FALSE;
 222   1              if(FatCache[0][256]!=0)
 223   1              {
 224   2                      if(!Write(FatCache[0][256],1,(BYTE *)FatCache[0],0))
 225   2                              if(!Write(FatCache[0][256],1,(BYTE *)FatCache[0],0))
 226   2                                      return FALSE;
 227   2              }
 228   1              return TRUE;            
 229   1      }
 230          
 231           
 232          BYTE ReadFile(void* buffer, UINT bytes)
 233          {
 234   1              BYTE*pCache;
 235   1              UINT read_bytes =0;
 236   1              UINT max_copy_bytes_in_sector;
 237   1              WORD Cluster;
 238   1              DWORD FileSize;
 239   1      //      BYTE buf[600];
 240   1      //      for(i=0;i<600;i++)
C51 COMPILER V8.08   API                                                                   04/25/2009 23:03:21 PAGE 5   

 241   1      //              buf[i]='a';
 242   1      //      memcpy(buffer,buf,400);
 243   1      //      return TRUE;
 244   1              ////////////////////////////////////////////////////////////////////////
 245   1              FileSize = ApiFileControl.dir.FileSize;
 246   1              if(bytes>=FileSize)
 247   1                      bytes=FileSize;
 248   1              Cluster=SecToCluster(ApiFileControl.CurrentSectorNum);
 249   1      //      Sector=ClusterToSec(Cluster);
 250   1              ApiFileControl.SectorOffset=ApiFileControl.SectorOffset%(SimpleBpb.BytsPerSec*SimpleBpb.SecPerClus);
 251   1                      for(; ; )
 252   1                      {       
 253   2                              pCache=BuffFile;                
 254   2                              pCache+=ApiFileControl.SectorOffset;
 255   2                              if((SimpleBpb.BytsPerSec*SimpleBpb.SecPerClus - ApiFileControl.SectorOffset) > (bytes - read_bytes))
 256   2                              max_copy_bytes_in_sector =  (bytes - read_bytes);
 257   2                              else
 258   2                              max_copy_bytes_in_sector=(SimpleBpb.BytsPerSec*SimpleBpb.SecPerClus - ApiFileControl.SectorOffset);
 259   2                              ApiFileControl.SectorOffset+=max_copy_bytes_in_sector;
 260   2                              if(!Read(ApiFileControl.CurrentSectorNum,SimpleBpb.SecPerClus,(BYTE *)BuffFile))
 261   2                                      return FALSE;
 262   2                              memcpy((char *)buffer, pCache, max_copy_bytes_in_sector);
 263   2                      //       return TRUE;
 264   2                              read_bytes+=max_copy_bytes_in_sector;
 265   2                              if(read_bytes>=bytes)
 266   2                                      return TRUE;
 267   2                              buffer = (char*)buffer + max_copy_bytes_in_sector;      
 268   2                              Cluster=GetListCluster(Cluster);
 269   2                              ApiFileControl.SectorOffset=0;
 270   2                              ApiFileControl.CurrentSectorNum=ClusterToSec(Cluster);
 271   2                              
 272   2                      }//---------end for cycle
 273   1              return FALSE;
 274   1      }
 275          
 276          
 277          BYTE SetFileSector(const char * filename,DWORD fileSector,DWORD offset)
 278          {       
 279   1              DWORD FileFirstSector;
 280   1              WORD  Cluster;
 281   1              ////////////////////////////////////////////////////////////////////////
 282   1              FileFirstSector=LocateFile(filename, &ApiFileControl);
 283   1              if(FileFirstSector==0xffffffff)
 284   1                      return FALSE;   
 285   1              ApiFileControl.StartSectorNum = FileFirstSector;
 286   1              Cluster=WordSwap(ApiFileControl.dir.FstClusLO);
 287   1              for(;;)
 288   1              {
 289   2                      if((GetListCluster(Cluster)==0xffff)||(Cluster==0))
 290   2                              break;                          
 291   2                      Cluster=GetListCluster(Cluster);
 292   2              }
 293   1              //ApiFileControl.CurrentSectorNum为该簇对应的第一个扇区
 294   1              //扇区号移到到了该文件最后一簇的第一个扇区
 295   1              if((ClusterToSec(Cluster))>=fileSector>=0)
 296   1                      ApiFileControl.CurrentSectorNum =fileSector;
 297   1              else 
 298   1                      return FALSE;
 299   1               ApiFileControl.SectorOffset=offset;    
 300   1      //      ApiFileControl.SectorOffset=(DWordSwap(ApiFileControl.dir.FileSize)%(SimpleBpb.BytsPerSec*SimpleBpb.Sec
             -PerClus));
 301   1              ApiFileControl.dir.FileSize=DWordSwap(ApiFileControl.dir.FileSize);
C51 COMPILER V8.08   API                                                                   04/25/2009 23:03:21 PAGE 6   

 302   1              return TRUE;
 303   1      
 304   1      }
 305          BYTE DisplayFile()
 306          {
 307   1              WORD i,j=0,k=0;
 308   1              BYTE buf[512];
 309   1              struct _DIR *dir;
 310   1              for(i=0;i<FatParameter.RootDirSectors;i++)
 311   1              {
 312   2                if(!Read(FatParameter.FirstRootDirSecNum+i,1,buf))
 313   2                        return FALSE;
 314   2                dir=(struct _DIR *)buf;
 315   2                for(dir = (struct _DIR *)buf; (BYTE*)dir < buf + SimpleBpb.BytsPerSec; dir++)
 316   2                {
 317   3                              if(dir->Name[0] !='\0')
 318   3                              {
 319   4                              //      buf=buf+32;
 320   4                                      memcpy((BuffFile+k), (buf+j), 11);
 321   4                                      j+=sizeof(struct _DIR);
 322   4                                      k+=11;
 323   4                              }
 324   3                              else if(dir->Name[0]==0)
 325   3                                      return TRUE;
 326   3                }
 327   2              }
 328   1       return FALSE;
 329   1      }  
 330          
 331          
 332          BYTE CreateDir(const char * dirname)
 333          {
 334   1              BYTE Dotname[]={0X2E,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20};
 335   1              BYTE DotDotname[]={0x2e,0x2e,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20};
 336   1              WORD  NewCluster,buf[256];
 337   1              struct _DIR dir,*pdir;
 338   1              BYTE temp[12],NewDirName[11],NewFileName[12],name[11],Cache[512],path[22],i;
 339   1              BYTE * p=temp,*p1=NewFileName,*p2;
 340   1              struct _FILE file;
 341   1              ////////////////////////////////////////////////////////////////////////
 342   1              i=0;
 343   1              memset(NewDirName,0,11);
 344   1              strcpy(path, dirname);
 345   1              while(path[i]!='\\')
 346   1              {       
 347   2                      
 348   2                      NewDirName[i]=path[i];
 349   2                      i++;
 350   2                      if(i>=strlen(dirname))
 351   2                              break;
 352   2              }
 353   1              //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
 354   1              //核对目录名是否正确
 355   1              if(!CheckFileName(NewDirName,p))
 356   1                      return FALSE;   
 357   1              //*核对该目录是否已经存在
 358   1              if(LocateFile(NewDirName, NULL)!=0xffffffff)
 359   1                      return FALSE;
 360   1              strncpy(name, p, 11);
 361   1              memset(&dir, 0, sizeof(dir));
 362   1              memcpy(dir.Name, name, 11);
 363   1              //定位该目录并获取必要信息
C51 COMPILER V8.08   API                                                                   04/25/2009 23:03:21 PAGE 7   

 364   1              if(!LocateDir(&dir,&file))
 365   1                      return FALSE;   
 366   1              //为该目录寻找一个空簇
 367   1              NewCluster= SeekEmptyCluster();
 368   1              if(NewCluster==0xffff)
 369   1                      return FALSE;
 370   1              //在FAT里标记该簇
 371   1              if(!Read((2*NewCluster/SimpleBpb.BytsPerSec)+FatParameter.FirstFatSecNum,1,(BYTE *)buf))
 372   1                      return FALSE;
 373   1              buf[NewCluster%(SimpleBpb.BytsPerSec/2)]=0xfffff;
 374   1              if(!Write((2*NewCluster/SimpleBpb.BytsPerSec)+FatParameter.FirstFatSecNum,1,(BYTE *)buf,TRUE))
 375   1                      return FALSE;
 376   1              DelayMs(15);
 377   1              //Root dir
 378   1              if(!Read(file.DirSectorNum,1,(BYTE *)Cache))
 379   1                      return FALSE;
 380   1              pdir = (struct _DIR *)Cache;
 381   1              pdir += file.DirIndex;
 382   1              pdir->FstClusLO =WordSwap(NewCluster);
 383   1              pdir->FileSize=0;
 384   1              pdir->Attr=ATTR_DIRECTORY;
 385   1              if(!Write(file.DirSectorNum,1,Cache,TRUE))
 386   1                      if(!Write(file.DirSectorNum,1,Cache,TRUE))
 387   1                              return FALSE;
 388   1              // dot dir
 389   1              memset(Cache,0,512);
 390   1              pdir = (struct _DIR *)Cache;
 391   1              memset(pdir, 0, sizeof(dir));
 392   1              pdir->Attr=ATTR_DIRECTORY;
 393   1              pdir->FstClusLO=WordSwap(NewCluster);
 394   1              memcpy(pdir->Name, Dotname, 11);
 395   1              // dot dot dir;
 396   1              pdir++;
 397   1              memcpy(pdir->Name, DotDotname, 11);
 398   1              pdir->FstClusLO=0;
 399   1              for(i=0;i<SimpleBpb.SecPerClus;i++)
 400   1              {
 401   2                      if(!Write(ClusterToSec(NewCluster)+i,1,Cache,TRUE))

⌨️ 快捷键说明

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