]> glassweightruler.freedombox.rocks Git - Ventoy.git/blob - vtoycli/fat_io_lib/include/fat_defs.h
keep up with 1.0.67 (#1464)
[Ventoy.git] / vtoycli / fat_io_lib / include / fat_defs.h
1 #ifndef __FAT_DEFS_H__
2 #define __FAT_DEFS_H__
3
4 #include "fat_opts.h"
5 #include "fat_types.h"
6
7 //-----------------------------------------------------------------------------
8 // FAT32 Offsets
9 // Name Offset
10 //-----------------------------------------------------------------------------
11
12 // Boot Sector
13 #define BS_JMPBOOT 0 // Length = 3
14 #define BS_OEMNAME 3 // Length = 8
15 #define BPB_BYTSPERSEC 11 // Length = 2
16 #define BPB_SECPERCLUS 13 // Length = 1
17 #define BPB_RSVDSECCNT 14 // Length = 2
18 #define BPB_NUMFATS 16 // Length = 1
19 #define BPB_ROOTENTCNT 17 // Length = 2
20 #define BPB_TOTSEC16 19 // Length = 2
21 #define BPB_MEDIA 21 // Length = 1
22 #define BPB_FATSZ16 22 // Length = 2
23 #define BPB_SECPERTRK 24 // Length = 2
24 #define BPB_NUMHEADS 26 // Length = 2
25 #define BPB_HIDDSEC 28 // Length = 4
26 #define BPB_TOTSEC32 32 // Length = 4
27
28 // FAT 12/16
29 #define BS_FAT_DRVNUM 36 // Length = 1
30 #define BS_FAT_BOOTSIG 38 // Length = 1
31 #define BS_FAT_VOLID 39 // Length = 4
32 #define BS_FAT_VOLLAB 43 // Length = 11
33 #define BS_FAT_FILSYSTYPE 54 // Length = 8
34
35 // FAT 32
36 #define BPB_FAT32_FATSZ32 36 // Length = 4
37 #define BPB_FAT32_EXTFLAGS 40 // Length = 2
38 #define BPB_FAT32_FSVER 42 // Length = 2
39 #define BPB_FAT32_ROOTCLUS 44 // Length = 4
40 #define BPB_FAT32_FSINFO 48 // Length = 2
41 #define BPB_FAT32_BKBOOTSEC 50 // Length = 2
42 #define BS_FAT32_DRVNUM 64 // Length = 1
43 #define BS_FAT32_BOOTSIG 66 // Length = 1
44 #define BS_FAT32_VOLID 67 // Length = 4
45 #define BS_FAT32_VOLLAB 71 // Length = 11
46 #define BS_FAT32_FILSYSTYPE 82 // Length = 8
47
48 //-----------------------------------------------------------------------------
49 // FAT Types
50 //-----------------------------------------------------------------------------
51 #define FAT_TYPE_FAT12 1
52 #define FAT_TYPE_FAT16 2
53 #define FAT_TYPE_FAT32 3
54
55 //-----------------------------------------------------------------------------
56 // FAT32 Specific Statics
57 //-----------------------------------------------------------------------------
58 #define SIGNATURE_POSITION 510
59 #define SIGNATURE_VALUE 0xAA55
60 #define PARTITION1_TYPECODE_LOCATION 450
61 #define FAT32_TYPECODE1 0x0B
62 #define FAT32_TYPECODE2 0x0C
63 #define PARTITION1_LBA_BEGIN_LOCATION 454
64 #define PARTITION1_SIZE_LOCATION 458
65
66 #define FAT_DIR_ENTRY_SIZE 32
67 #define FAT_SFN_SIZE_FULL 11
68 #define FAT_SFN_SIZE_PARTIAL 8
69
70 //-----------------------------------------------------------------------------
71 // FAT32 File Attributes and Types
72 //-----------------------------------------------------------------------------
73 #define FILE_ATTR_READ_ONLY 0x01
74 #define FILE_ATTR_HIDDEN 0x02
75 #define FILE_ATTR_SYSTEM 0x04
76 #define FILE_ATTR_SYSHID 0x06
77 #define FILE_ATTR_VOLUME_ID 0x08
78 #define FILE_ATTR_DIRECTORY 0x10
79 #define FILE_ATTR_ARCHIVE 0x20
80 #define FILE_ATTR_LFN_TEXT 0x0F
81 #define FILE_HEADER_BLANK 0x00
82 #define FILE_HEADER_DELETED 0xE5
83 #define FILE_TYPE_DIR 0x10
84 #define FILE_TYPE_FILE 0x20
85
86 //-----------------------------------------------------------------------------
87 // Time / Date details
88 //-----------------------------------------------------------------------------
89 #define FAT_TIME_HOURS_SHIFT 11
90 #define FAT_TIME_HOURS_MASK 0x1F
91 #define FAT_TIME_MINUTES_SHIFT 5
92 #define FAT_TIME_MINUTES_MASK 0x3F
93 #define FAT_TIME_SECONDS_SHIFT 0
94 #define FAT_TIME_SECONDS_MASK 0x1F
95 #define FAT_TIME_SECONDS_SCALE 2
96 #define FAT_DATE_YEAR_SHIFT 9
97 #define FAT_DATE_YEAR_MASK 0x7F
98 #define FAT_DATE_MONTH_SHIFT 5
99 #define FAT_DATE_MONTH_MASK 0xF
100 #define FAT_DATE_DAY_SHIFT 0
101 #define FAT_DATE_DAY_MASK 0x1F
102 #define FAT_DATE_YEAR_OFFSET 1980
103
104 //-----------------------------------------------------------------------------
105 // Other Defines
106 //-----------------------------------------------------------------------------
107 #define FAT32_LAST_CLUSTER 0xFFFFFFFF
108 #define FAT32_INVALID_CLUSTER 0xFFFFFFFF
109
110 STRUCT_PACK_BEGIN
111 struct fat_dir_entry STRUCT_PACK
112 {
113 uint8 Name[11];
114 uint8 Attr;
115 uint8 NTRes;
116 uint8 CrtTimeTenth;
117 uint8 CrtTime[2];
118 uint8 CrtDate[2];
119 uint8 LstAccDate[2];
120 uint16 FstClusHI;
121 uint8 WrtTime[2];
122 uint8 WrtDate[2];
123 uint16 FstClusLO;
124 uint32 FileSize;
125 } STRUCT_PACKED;
126 STRUCT_PACK_END
127
128 #endif