📄 hpi.lst
字号:
260 1 PDIR_STRUC pDir;
261 1
262 1 if(!bXXGFlags.UDiskOK)
263 1 {
264 2 UartRspBlock.errcode=ERC_NODEVICE;
265 2 return FALSE;
266 2 }
267 1 ///////////////////////////////////////////////////////////
268 1 bstop=0;
269 1 ThisFile.bFileOpen=0;
270 1 sector=0;
271 1
272 1 dirClusterPointer=ThisDir.StartCluster;
273 1 //for(sector=0;sector<rootSectorCnt;sector++)
274 1 for(;;)
275 1 {
276 2 /////////////////////////////////////////////////
277 2 if(!SeekSectorToRead(&dirClusterPointer,§or,§orToRead))
278 2 return FALSE;
279 2 //////////////////////////////////////////////////
280 2 ///
281 2 if(!RBC_Read(sectorToRead,1,DBUF))
282 2 {
283 3 UartRspBlock.errcode=ERC_DEVICEERR;
284 3 return FALSE;
285 3 }
286 2 ///////////////////////////////////////////////////
287 2 for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
288 2 {
289 3 if(DBUF[i]==0x00)
290 3 {
291 4 UartRspBlock.errcode=ERC_FILENOTFOUND;
292 4 return FALSE;
293 4 }
294 3 ///////////////////////////////////////////
295 3 j=0;
296 3 while(DBUF[i+j]==*(pBuffer+j))
297 3 {
298 4 j=j+1;
299 4 if(j>11)
300 4 break;
301 4 }
302 3
303 3 if(j>11)
C51 COMPILER V6.20c HPI 04/07/2005 10:50:50 PAGE 6
304 3 {
305 4 for(j=0;j<32;j++)
306 4 RspBlockOpenFile.item[j]=DBUF[i+j];
307 4 //RspBlockOpenFile.result=0x1;
308 4 ThisFile.bFileOpen=1;
309 4 bstop=1;
310 4 break;}
311 3
312 3 }
313 2 ///////////////////////////////////////////////////////
314 2 if(bstop==1)break;
315 2 ///////////////////////////////////////////////////////
316 2
317 2 }
318 1 ////////////////////////////////////////////
319 1 pDir=(PDIR_STRUC)RspBlockOpenFile.item;
320 1 if(bXXGFlags.bIsFat32==0)
321 1 ThisFile.StartCluster=SwapINT16(pDir->DIR_FstClusLO);
322 1 else
323 1 ThisFile.StartCluster=MakeU32(RspBlockOpenFile.item[21],RspBlockOpenFile.item[20],RspBlockOpenFile.item[
-27],RspBlockOpenFile.item[26]);
324 1 ThisFile.LengthInByte=SwapINT32(pDir->DIR_FileSize);
325 1 ThisFile.ClusterPointer=ThisFile.StartCluster;
326 1 ThisFile.SectorPointer=FirstSectorofCluster(ThisFile.StartCluster);
327 1 ThisFile.OffsetofSector=0;
328 1 ThisFile.SectorofCluster=0;
329 1 ThisFile.pointer=0;
330 1
331 1 for(j=0;j<11;j++)
332 1 {
333 2 ThisFile.FileName[j]=*(pBuffer+j);
334 2 }
335 1 ///////////////////////////////////////////
336 1 // 读入FAT表的第一个扇区 ////////////////////
337 1 FreeClusterNum=DeviceInfo.FSI_Nxt_Free;
338 1 FreeSecNum=ThisFatSecNum(DeviceInfo.FSI_Nxt_Free);
339 1 if(!RBC_Read(FreeSecNum,1,CurFatSector))
340 1 return FALSE;
341 1 ///////////////////////////////////////////////
342 1 return TRUE;
343 1
344 1 #undef RspBlockOpenFile
345 1
346 1 }
347
348 unsigned char ReadFile(unsigned int readLength,unsigned char *pBuffer)
349 {
350 1 #define RspBlockReadFile UartRspBlock.RspBlock.Rsp_ReadFile
351 1 unsigned int idata len,i;
352 1 unsigned char bSuccess;
353 1
354 1 if(!bXXGFlags.UDiskOK)
355 1 {
356 2 UartRspBlock.errcode=ERC_NODEVICE;
357 2 return FALSE;
358 2 }
359 1 if(!ThisFile.bFileOpen)
360 1 {
361 2 UartRspBlock.errcode=ERC_FILENOTOPENED;
362 2 return FALSE;
363 2 }
364 1 ///////////////////////////////////////////////////////////
C51 COMPILER V6.20c HPI 04/07/2005 10:50:50 PAGE 7
365 1 ThisFile.bFileOpen=0;
366 1 bSuccess=1;
367 1 UartRspBlock.len=0;
368 1
369 1 if(readLength>MAX_READ_LENGTH)
370 1 {
371 2 UartRspBlock.errcode=ERC_LENGTHEXCEED;
372 2 return FALSE;
373 2 }
374 1 if(readLength+ThisFile.pointer>ThisFile.LengthInByte)
375 1 {
376 2 UartRspBlock.errcode=ERC_LENGTHEXCEED;
377 2 return FALSE;
378 2 }
379 1 ////////////////////////////////////////////
380 1
381 1 ///////////////////////////////////////////////////
382 1 while(readLength>0)
383 1 {
384 2 if(readLength+ThisFile.OffsetofSector>DeviceInfo.BPB_BytesPerSec)
385 2 len=DeviceInfo.BPB_BytesPerSec;
386 2 else
387 2 len=readLength+ThisFile.OffsetofSector;
388 2
389 2 //////////////////////////////////////////////////////
390 2 if(ThisFile.OffsetofSector>0)
391 2 {
392 3 if(RBC_Read(ThisFile.SectorPointer,1,DBUF))
393 3 {
394 4 //ThisFile.OffsetofSector=len;
395 4 len=len-ThisFile.OffsetofSector;
396 4 for(i=0;i<len;i++)
397 4 //UARTBUF[i]=DBUF[ThisFile.OffsetofSector+i];
398 4 *(pBuffer+i)=DBUF[ThisFile.OffsetofSector+i];
399 4 ThisFile.OffsetofSector=ThisFile.OffsetofSector+len;
400 4 }
401 3 else
402 3 {
403 4 UartRspBlock.errcode=ERC_DEVICEERR;
404 4 return FALSE;
405 4 }
406 3 }
407 2 else
408 2 {
409 3 if(!RBC_Read(ThisFile.SectorPointer,1,pBuffer+UartRspBlock.len))
410 3 {
411 4 UartRspBlock.errcode=ERC_DEVICEERR;
412 4 return FALSE;
413 4 }
414 3 ThisFile.OffsetofSector=len;
415 3 }
416 2 ////////////////////////////////////////////////////////////
417 2 readLength-=len;
418 2 UartRspBlock.len+=len;
419 2 // ThisFile.OffsetofSector=;
420 2 /////////////////////////////////////////////////////////
421 2 if(ThisFile.OffsetofSector>DeviceInfo.BPB_BytesPerSec-1)
422 2 {
423 3 ThisFile.OffsetofSector-=DeviceInfo.BPB_BytesPerSec;
424 3 ThisFile.SectorofCluster+=1;
425 3 if(ThisFile.SectorofCluster>DeviceInfo.BPB_SecPerClus-1)
426 3 {
C51 COMPILER V6.20c HPI 04/07/2005 10:50:50 PAGE 8
427 4 ThisFile.SectorofCluster=0;
428 4 ThisFile.ClusterPointer=GetNextClusterNum(ThisFile.ClusterPointer);
429 4 ////////////???????????????????????????????????????
430 4 if(bXXGFlags.bIsFat32==0)
431 4 {
432 5 if(ThisFile.ClusterPointer>0xffef)//??????????????????????????????
433 5 {
434 6 UartRspBlock.errcode=ERC_REACHEND;
435 6 return FALSE;
436 6 }
437 5 }
438 4 else
439 4 {
440 5 if(ThisFile.ClusterPointer>0x0ffffff8)//??????????????????????????????
441 5 {
442 6 UartRspBlock.errcode=ERC_REACHEND;
443 6 return FALSE;
444 6 }
445 5 }
446 4
447 4 ThisFile.SectorPointer=FirstSectorofCluster(ThisFile.ClusterPointer);
448 4 }
449 3 else
450 3 ThisFile.SectorPointer=ThisFile.SectorPointer+1;
451 3 }
452 2 //////////////////////////////////////////////////////////////////
453 2 }//end while
454 1
455 1
456 1 ThisFile.bFileOpen=1;
457 1 ThisFile.pointer+=UartRspBlock.len;
458 1 //////////////////////////////////////////////
459 1 RspBlockReadFile.readLength=SwapINT16(UartRspBlock.len);
460 1 return TRUE;
461 1 #undef RspBlockReadFile
462 1 }
463
464 unsigned char CreateFile(unsigned char *pBuffer)
465 {
466 1 // len+*name()+attrribute+year+month+date+hour+minute+second
467 1 #define RspBlockCreateFile UartRspBlock.RspBlock.Rsp_CreateFile
468 1 //unsigned long sectorNum;
469 1 unsigned int i,j,sector;
470 1 unsigned char bstop;
471 1 unsigned long sectorToRead,dirClusterPointer;
472 1 //PDIR_INFO pDirInfo;
473 1 PDIR_STRUC pDir;
474 1 //unsigned char xdata fileDir[128];
475 1
476 1 if(!bXXGFlags.UDiskOK)
477 1 {
478 2 UartRspBlock.errcode=ERC_NODEVICE;
479 2 return FALSE;
480 2 }
481 1 ///////////////////////////////////////////////////////////
482 1 pDir=(PDIR_STRUC)pBuffer;
483 1 pDir->DIR_FstClusHI=0x0000;
484 1 pDir->DIR_FstClusLO=0x0000;
485 1 pDir->DIR_FileSize=0;
486 1 /////// Search a free space in the root dir space and build the item ///
487 1 ThisFile.bFileOpen=0;
488 1 bstop=0;
C51 COMPILER V6.20c HPI 04/07/2005 10:50:50 PAGE 9
489 1 sector=0;
490 1 dirClusterPointer=ThisDir.StartCluster;
491 1 //for(sector=0;sector<DeviceInfo.BPB_RootEntCnt;sector++)
492 1 for(;;)
493 1 {
494 2 ///////////////////////////////////////////////////
495 2 if(!SeekSectorToRead(&dirClusterPointer,§or,§orToRead))
496 2 return FALSE;
497 2 //////////////////////////////////////////////////
498 2 if(!RBC_Read(sectorToRead,1,DBUF))
499 2 {
500 3
501 3 UartRspBlock.errcode=ERC_DEVICEERR;
502 3 return FALSE;
503 3 }
504 2 ///////////////////////////////////////////////////
505 2 for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
506 2 {
507 3 if((DBUF[i]==0x00)||(DBUF[i]==0xE5))
508 3 {
509 4 ///////////////////////////////////////
510 4 for(j=0;j<32;j++)
511 4 DBUF[i+j]=*(pBuffer+j);
512 4 ///////////////////////////////////////
513 4 if(!RBC_Write(sectorToRead,1,DBUF))
514 4 {
515 5 UartRspBlock.errcode=ERC_DEVICEERR;
516 5 return FALSE;
517 5 }
518 4 bstop=1;
519 4 break;
520 4 }
521 3 }
522 2 ///////////////////////////////////////////////////////
523 2 if(bstop==1)break;
524 2
525 2 }
526 1 /////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -