#include typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; // Copied from the manual struct fat32hdr { u8 BS_jmpBoot[3]; u8 BS_OEMName[8]; u16 BPB_BytsPerSec; u8 BPB_SecPerClus; u16 BPB_RsvdSecCnt; u8 BPB_NumFATs; u16 BPB_RootEntCnt; u16 BPB_TotSec16; u8 BPB_Media; u16 BPB_FATSz16; u16 BPB_SecPerTrk; u16 BPB_NumHeads; u32 BPB_HiddSec; u32 BPB_TotSec32; u32 BPB_FATSz32; u16 BPB_ExtFlags; u16 BPB_FSVer; u32 BPB_RootClus; u16 BPB_FSInfo; u16 BPB_BkBootSec; u8 BPB_Reserved[12]; u8 BS_DrvNum; u8 BS_Reserved1; u8 BS_BootSig; u32 BS_VolID; u8 BS_VolLab[11]; u8 BS_FilSysType[8]; u8 __padding_1[420]; u16 Signature_word; } __attribute__((packed)); struct fat32dent { u8 DIR_Name[11]; u8 DIR_Attr; u8 DIR_NTRes; u8 DIR_CrtTimeTenth; u16 DIR_CrtTime; u16 DIR_CrtDate; u16 DIR_LastAccDate; u16 DIR_FstClusHI; u16 DIR_WrtTime; u16 DIR_WrtDate; u16 DIR_FstClusLO; u32 DIR_FileSize; } __attribute__((packed)); #define CLUS_INVALID 0xffffff7 #define ATTR_READ_ONLY 0x01 #define ATTR_HIDDEN 0x02 #define ATTR_SYSTEM 0x04 #define ATTR_VOLUME_ID 0x08 #define ATTR_DIRECTORY 0x10 #define ATTR_ARCHIVE 0x20