#ifndef __FAT_H
#define __FAT_H
/*!
* \ingroup drivers
* \defgroup fat FAT file system
* @{
*/
#pragma pack(push, 1)
typedef struct fat_bootsector_t fat_bootsector_t;
struct fat_bootsector_t
{
word jmp;
byte nop;
byte oem_name[8];
word bytes_per_sector;
byte sectors_per_cluster;
word reserved_sectors;
byte num_fats;
word num_root_entries;
word sectors;
byte media_descriptor;
word sectors_per_fat;
word sectors_per_track;
word num_heads;
dword hidden_sectors;
dword total_sectors;
byte drive;
byte reserved2;
byte boot_sig;
dword serial_number;
byte volume[11];
byte system[8];
byte code[450];
};
typedef struct fat_dirent_t fat_dirent_t;
struct fat_dirent_t
{
byte name[8];
byte extension[3];
byte attribs;
byte reserved[10];
word write_time;
word write_date;
word first_cluster;
dword file_length;
};
typedef struct fat_lfnslot_t fat_lfnslot_t;
struct fat_lfnslot_t
{
byte id; // sequence number for slot
wchar_t name0_4[5]; // first 5 characters in name
byte attrivs; // attribute byte
byte reserved; // always 0
byte alias_checksum; // checksum for 8.3 alias
wchar_t name5_10[6]; // 6 more characters in name
word first_cluster; // starting cluster number
wchar_t name11_12[2]; // last 2 characters in name
};
#pragma pack(pop)
#define ATTR_LONG_NAME \
(ATTR_READ_ONLY | ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME_ID)
//@}
#endif