Actions / Affichages Commentaires Derniers commentaires Dossier vu à la loupe Rechercher Télécharger Télécharger Info Info S'authentifier Se connecter

Revenir à la racine Icone / Sources / fat16.h

1300 téléchargement(s)
  1. /* +-------------------------------------------------------------------------------------------------------------------------------+
  2. | Interface Compact Flash / PIC + FAT16 avec un PIC18F452 |
  3. +-------------------------------------------------------------------------------------------------------------------------------+
  4. | Copyright (C) 2005 Charles RINCHEVAL (charles.r at digitalspirit point org) |
  5. +-------------------------------------------------------------------------------------------------------------------------------+
  6. | Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU |
  7. | publiée par la Free Software Foundation (version 2 ou bien toute autre version ultérieure choisie par vous). |
  8. | Ce programme est distribué car potentiellement utile, mais SANS AUCUNE GARANTIE, ni explicite ni implicite, |
  9. | y compris les garanties de commercialisation ou d'adaptation dans un but spécifique. |
  10. | Reportez-vous à la Licence Publique Générale GNU pour plus de détails. |
  11. | Vous devez avoir reçu une copie de la Licence Publique Générale GNU en même temps que ce programme, si ce n'est pas le cas, |
  12. | écrivez à la Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, États-Unis. |
  13. +-------------------------------------------------------------------------------------------------------------------------------+
  14.  */
  15.  
  16. #define FAT16 // ou FAT32
  17.  
  18. /* Structure du BIOS Parameter Block
  19. Selon le document de Microsoft$$
  20. "Hardware White Paper" : Microsoft Extensible Firmware Initiative
  21.  */
  22. typedef struct _FatBPB {
  23.  
  24. char jmpBoot[3];
  25. char OEMName[8];
  26. int bytsPerSec;
  27. char secPerClus;
  28. int rsvdSecCnt;
  29. char numFATs;
  30. int rootEntCnt;
  31. int toSec16;
  32. char media;
  33. int FATSz16;
  34. int seePerTrk;
  35. int numHeads;
  36. long hiddSec;
  37. long totSec32;
  38.  
  39. #ifdef FAT16
  40. char drvNum;
  41. char reserved;
  42. char bootSig;
  43. long volID;
  44. char volLab[11];
  45. char filSysType[8];
  46. #endif
  47.  
  48. } FatBPB;
  49.  
  50.  
  51. #define ATTR_READ_ONLY 0x01
  52. #define ATTR_HIDDEN 0x02
  53. #define ATTR_SYSTEM 0x04
  54. #define ATTR_VOLUME_ID 0x08
  55. #define ATTR_DIRECTORY 0x10
  56. #define ATTR_ARCHIVE 0x20
  57. #define ATTR_LONG_NAME (ATTR_READ_ONLY + ATTR_HIDDEN + ATTR_SYSTEM + ATTR_VOLUME_ID)
  58.  
  59. typedef struct _FatDirEntry {
  60.  
  61. char name[11];
  62. char attr;
  63. char NTRes;
  64. char crtTimeTenth;
  65. int crtTime;
  66. int crtDate;
  67. int lstAccDate;
  68. int fstClusHI; // Always 0 for FAT12 or FAT16
  69. int wrtTime;
  70. int wrtDate;
  71. int fstClusLO;
  72. unsigned long filSize;
  73.  
  74. } FatDirEntry;
  75.  
  76.  
  77.  
  78. /* Les status de retour
  79.  */
  80. #define FAT_OK 0
  81. #define FAT_ERROR -1
  82. #define FAT_END_OF_DIR -2
  83. #define FAT_INEXISTANT_FILE -3
  84. #define FAT_FILE_EOF -4
  85.  
  86.  
  87. /* Divers
  88.  */
  89. #define FAT_FILE_DELETED 0xE5
  90. #define FAT_SPACE 0x20
  91. #define FAT_SEPARATOR '/'
  92.  
  93. #define FAT_MODE_READ 0
  94. #define FAT_MODE_WRITE 1
  95.  
  96. #define FAT_BAD_CLUSTER 0xFFF7
  97.  
  98.  
  99. #define FAT_MAX_PATH 60
  100.  
  101.  
  102. /* Taille du cache des cluster d'un fichier
  103.  */
  104. #define FAT_CACHE_SIZE 10
  105.  
  106.  
  107. /* Taille du cache des clusters libres
  108.  */
  109. #define FAT_CLUSTER_CACHE_SIZE 10
  110.  
  111.  
  112. typedef struct _FatFile { // File Structure Info
  113.  
  114. unsigned long currentByte; // Octet courant
  115. unsigned long size; // Taille du fichier
  116. unsigned int startCluster; // Cluster de début du fichier
  117. unsigned int currentCluster; // Cluster courant
  118. unsigned int dirEntrySector; // Directory Entry Sector
  119. unsigned char dirEntryNum; // Directory Entry Num
  120.  
  121. } FatFile;
  122.  
  123.  
  124. /* Les globales
  125.  */
  126.  
  127. //unsigned long FatSize = 0;
  128.  
  129. unsigned int FAT_CacheCluster[FAT_CLUSTER_CACHE_SIZE];
  130.  
  131. unsigned int FAT_Cache[FAT_CACHE_SIZE];
  132. unsigned int FAT_CacheOffset;
  133.  
  134. unsigned long FAT_CurrentSector;
  135. unsigned long FAT_CurrentByte;
  136.  
  137. unsigned long FAT_StartSector; // Début de la FAT
  138. //unsigned long FAT_RootDirCountSectors;
  139. unsigned long FAT_FirstDataSector; // Première donnée (cluster 2)
  140. unsigned long FAT_RootDirStartSector;
  141.  
  142.  
  143. FatBPB FAT_Bpb;
  144.  
  145. FatDirEntry FAT_DirEntry;
  146.  
  147.  
  148. /* Les prototypes
  149.  */
  150. void fat_init(void);
  151.  
  152. void fat_load_file_cluster(unsigned int);
  153. unsigned int fat_get_next_cluster();
  154. unsigned int fat_find_free_clusters(void);
  155.  
  156. void fat_start_addr(unsigned long, unsigned char);
  157. unsigned long fat_go_2_cluster(unsigned int, unsigned char);
  158.  
  159. char fat_load_directory_entry(void);
  160. void fat_cd_one_dir(char *);
  161. char fat_cd(char *);
  162.  
  163. char fat_open_file(unsigned char *, FatFile *, unsigned char);
  164.  
  165. #ifdef WRITE_ENABLED
  166. char fat_create_entry(unsigned char *, FatFile *, unsigned char);
  167. //char fat_create_entry(unsigned char *, unsigned char);
  168. void fat_set_directory_entry(FatFile *);
  169. #endif
  170.  
  171. void fat_skip_byte(unsigned int);
  172. unsigned char fat_get_byte();
  173. unsigned int fat_get_word();
  174. char fat_get_next_byte(FatFile *);
  175.  
  176. void fat_format_filename(char in[11], char *);
  177. void fat_get_filename(char [11], char *);
  178.  
  179. /*
  180. void fat_print_filename(char [11]);
  181. void fat_print_time(unsigned int, unsigned int, unsigned char );
  182. */
  183.