Engduino  3.1.0
A fun device for learning coding
FatStructs.h
Go to the documentation of this file.
1 /* Arduino SdFat Library
2  * Copyright (C) 2009 by William Greiman
3  *
4  * This file is part of the Arduino SdFat Library
5  *
6  * This Library is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This Library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with the Arduino SdFat Library. If not, see
18  * <http://www.gnu.org/licenses/>.
19  */
20 #ifndef FatStructs_h
21 #define FatStructs_h
22 
26 /*
27  * mostly from Microsoft document fatgen103.doc
28  * http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx
29  */
30 //------------------------------------------------------------------------------
32 uint8_t const BOOTSIG0 = 0X55;
34 uint8_t const BOOTSIG1 = 0XAA;
35 //------------------------------------------------------------------------------
49  uint8_t boot;
54  uint8_t beginHead;
59  unsigned beginSector : 6;
61  unsigned beginCylinderHigh : 2;
71  uint8_t type;
76  uint8_t endHead;
81  unsigned endSector : 6;
83  unsigned endCylinderHigh : 2;
88  uint8_t endCylinderLow;
90  uint32_t firstSector;
92  uint32_t totalSectors;
93 } __attribute__((packed));
95 typedef struct partitionTable part_t;
96 //------------------------------------------------------------------------------
106  uint8_t codeArea[440];
108  uint32_t diskSignature;
110  uint16_t usuallyZero;
114  uint8_t mbrSig0;
116  uint8_t mbrSig1;
117 } __attribute__((packed));
119 typedef struct masterBootRecord mbr_t;
120 //------------------------------------------------------------------------------
133  uint16_t bytesPerSector;
148  uint8_t fatCount;
167  uint16_t totalSectors16;
174  uint8_t mediaType;
180  uint16_t sectorsPerFat16;
184  uint16_t headCount;
190  uint32_t hidddenSectors;
197  uint32_t totalSectors32;
201  uint32_t sectorsPerFat32;
212  uint16_t fat32Flags;
217  uint16_t fat32Version;
227  uint16_t fat32FSInfo;
238  uint8_t fat32Reserved[12];
239 } __attribute__((packed));
241 typedef struct biosParmBlock bpb_t;
242 //------------------------------------------------------------------------------
251  uint8_t jmpToBootCode[3];
253  char oemName[8];
257  uint8_t driveNumber;
259  uint8_t reserved1;
261  uint8_t bootSignature;
265  char volumeLabel[11];
267  char fileSystemType[8];
269  uint8_t bootCode[420];
271  uint8_t bootSectorSig0;
273  uint8_t bootSectorSig1;
274 } __attribute__((packed));
275 //------------------------------------------------------------------------------
276 // End Of Chain values for FAT entries
278 uint16_t const FAT16EOC = 0XFFFF;
280 uint16_t const FAT16EOC_MIN = 0XFFF8;
282 uint32_t const FAT32EOC = 0X0FFFFFFF;
284 uint32_t const FAT32EOC_MIN = 0X0FFFFFF8;
286 uint32_t const FAT32MASK = 0X0FFFFFFF;
287 
289 typedef struct fat32BootSector fbs_t;
290 //------------------------------------------------------------------------------
327  uint8_t name[11];
334  uint8_t attributes;
339  uint8_t reservedNT;
347  uint16_t creationTime;
349  uint16_t creationDate;
355  uint16_t lastAccessDate;
362  uint16_t lastWriteTime;
364  uint16_t lastWriteDate;
366  uint16_t firstClusterLow;
368  uint32_t fileSize;
369 } __attribute__((packed));
370 //------------------------------------------------------------------------------
371 // Definitions for directory entries
372 //
374 typedef struct directoryEntry dir_t;
376 uint8_t const DIR_NAME_0XE5 = 0X05;
378 uint8_t const DIR_NAME_DELETED = 0XE5;
380 uint8_t const DIR_NAME_FREE = 0X00;
382 uint8_t const DIR_ATT_READ_ONLY = 0X01;
384 uint8_t const DIR_ATT_HIDDEN = 0X02;
386 uint8_t const DIR_ATT_SYSTEM = 0X04;
388 uint8_t const DIR_ATT_VOLUME_ID = 0X08;
390 uint8_t const DIR_ATT_DIRECTORY = 0X10;
392 uint8_t const DIR_ATT_ARCHIVE = 0X20;
395 uint8_t const DIR_ATT_LONG_NAME = 0X0F;
397 uint8_t const DIR_ATT_LONG_NAME_MASK = 0X3F;
399 uint8_t const DIR_ATT_DEFINED_BITS = 0X3F;
401 static inline uint8_t DIR_IS_LONG_NAME(const dir_t* dir) {
402  return (dir->attributes & DIR_ATT_LONG_NAME_MASK) == DIR_ATT_LONG_NAME;
403 }
405 uint8_t const DIR_ATT_FILE_TYPE_MASK = (DIR_ATT_VOLUME_ID | DIR_ATT_DIRECTORY);
407 static inline uint8_t DIR_IS_FILE(const dir_t* dir) {
408  return (dir->attributes & DIR_ATT_FILE_TYPE_MASK) == 0;
409 }
411 static inline uint8_t DIR_IS_SUBDIR(const dir_t* dir) {
412  return (dir->attributes & DIR_ATT_FILE_TYPE_MASK) == DIR_ATT_DIRECTORY;
413 }
415 static inline uint8_t DIR_IS_FILE_OR_SUBDIR(const dir_t* dir) {
416  return (dir->attributes & DIR_ATT_VOLUME_ID) == 0;
417 }
418 #endif // FatStructs_h
uint8_t const DIR_ATT_READ_ONLY
Definition: FatStructs.h:382
uint32_t totalSectors32
Definition: FatStructs.h:197
uint8_t bootCode[420]
Definition: FatStructs.h:269
uint32_t firstSector
Definition: FatStructs.h:90
uint8_t endCylinderLow
Definition: FatStructs.h:88
part_t part[4]
Definition: FatStructs.h:112
uint16_t totalSectors16
Definition: FatStructs.h:167
uint8_t attributes
Definition: FatStructs.h:334
uint8_t const DIR_ATT_HIDDEN
Definition: FatStructs.h:384
uint16_t lastWriteDate
Definition: FatStructs.h:364
uint8_t bootSectorSig1
Definition: FatStructs.h:273
uint8_t bootSignature
Definition: FatStructs.h:261
Master Boot Record.
Definition: FatStructs.h:104
Boot sector for a FAT16 or FAT32 volume.
Definition: FatStructs.h:249
uint8_t const BOOTSIG1
Definition: FatStructs.h:34
uint16_t creationDate
Definition: FatStructs.h:349
uint32_t sectorsPerFat32
Definition: FatStructs.h:201
uint16_t fat32Flags
Definition: FatStructs.h:212
uint16_t fat32FSInfo
Definition: FatStructs.h:227
uint32_t hidddenSectors
Definition: FatStructs.h:190
uint32_t totalSectors
Definition: FatStructs.h:92
uint8_t const DIR_ATT_LONG_NAME
Definition: FatStructs.h:395
uint16_t usuallyZero
Definition: FatStructs.h:110
uint8_t bootSectorSig0
Definition: FatStructs.h:271
uint32_t diskSignature
Definition: FatStructs.h:108
uint16_t lastAccessDate
Definition: FatStructs.h:355
uint16_t sectorsPerFat16
Definition: FatStructs.h:180
uint8_t type
Definition: FatStructs.h:71
uint16_t creationTime
Definition: FatStructs.h:347
unsigned beginCylinderHigh
Definition: FatStructs.h:61
uint8_t mediaType
Definition: FatStructs.h:174
uint8_t const DIR_NAME_FREE
Definition: FatStructs.h:380
uint16_t fat32Version
Definition: FatStructs.h:217
uint8_t mbrSig0
Definition: FatStructs.h:114
uint32_t const FAT32EOC_MIN
Definition: FatStructs.h:284
uint32_t fileSize
Definition: FatStructs.h:368
uint8_t const BOOTSIG0
Definition: FatStructs.h:32
uint8_t sectorsPerCluster
Definition: FatStructs.h:139
unsigned endCylinderHigh
Definition: FatStructs.h:83
uint32_t fat32RootCluster
Definition: FatStructs.h:222
uint16_t bytesPerSector
Definition: FatStructs.h:133
uint16_t firstClusterLow
Definition: FatStructs.h:366
BIOS parameter block.
Definition: FatStructs.h:128
uint32_t const FAT32EOC
Definition: FatStructs.h:282
uint8_t creationTimeTenths
Definition: FatStructs.h:345
uint8_t const DIR_ATT_DIRECTORY
Definition: FatStructs.h:390
uint8_t const DIR_NAME_0XE5
Definition: FatStructs.h:376
uint8_t beginHead
Definition: FatStructs.h:54
uint8_t jmpToBootCode[3]
Definition: FatStructs.h:251
MBR partition table entry.
Definition: FatStructs.h:43
uint16_t lastWriteTime
Definition: FatStructs.h:362
uint8_t fatCount
Definition: FatStructs.h:148
uint8_t fat32Reserved[12]
Definition: FatStructs.h:238
unsigned beginSector
Definition: FatStructs.h:59
uint16_t const FAT16EOC
Definition: FatStructs.h:278
uint8_t const DIR_ATT_DEFINED_BITS
Definition: FatStructs.h:399
uint16_t headCount
Definition: FatStructs.h:184
char volumeLabel[11]
Definition: FatStructs.h:265
uint16_t rootDirEntryCount
Definition: FatStructs.h:157
uint8_t const DIR_ATT_FILE_TYPE_MASK
Definition: FatStructs.h:405
uint8_t mbrSig1
Definition: FatStructs.h:116
uint32_t volumeSerialNumber
Definition: FatStructs.h:263
uint8_t const DIR_ATT_SYSTEM
Definition: FatStructs.h:386
uint8_t reservedNT
Definition: FatStructs.h:339
uint8_t const DIR_ATT_ARCHIVE
Definition: FatStructs.h:392
uint16_t firstClusterHigh
Definition: FatStructs.h:360
FAT short directory entry.
Definition: FatStructs.h:321
unsigned endSector
Definition: FatStructs.h:81
uint16_t const FAT16EOC_MIN
Definition: FatStructs.h:280
bpb_t bpb
Definition: FatStructs.h:255
uint8_t driveNumber
Definition: FatStructs.h:257
char oemName[8]
Definition: FatStructs.h:253
uint16_t fat32BackBootBlock
Definition: FatStructs.h:233
char fileSystemType[8]
Definition: FatStructs.h:267
uint8_t codeArea[440]
Definition: FatStructs.h:106
uint8_t const DIR_NAME_DELETED
Definition: FatStructs.h:378
uint8_t const DIR_ATT_VOLUME_ID
Definition: FatStructs.h:388
uint16_t sectorsPerTrtack
Definition: FatStructs.h:182
uint32_t const FAT32MASK
Definition: FatStructs.h:286
uint8_t boot
Definition: FatStructs.h:49
uint8_t endHead
Definition: FatStructs.h:76
uint8_t const DIR_ATT_LONG_NAME_MASK
Definition: FatStructs.h:397
uint16_t reservedSectorCount
Definition: FatStructs.h:144
uint8_t beginCylinderLow
Definition: FatStructs.h:66
uint8_t reserved1
Definition: FatStructs.h:259
uint8_t name[11]
Definition: FatStructs.h:327