#ifndef _FAT_H #define _FAT_H #include typedef struct { uint16_t bytes_per_sector; uint8_t sectors_per_cluster; uint16_t reserved_sectors; uint8_t fat_count; uint16_t max_dir_entries; uint16_t total_sector_count; uint8_t media_descriptor; uint16_t sectors_per_fat; } dos_2_bpb_t; typedef struct { dos_2_bpb_t bpb2; uint16_t sectors_per_track; uint16_t head_count; uint32_t hidden_sector_count; uint32_t logical_sector_count; uint32_t sectors_per_fat; uint16_t extended_flags; uint16_t version; uint32_t root_cluster; uint16_t system_information; uint16_t backup_boot_sector; uint8_t reserved[12]; } dos_3_bpb_t; typedef struct { dos_3_bpb_t bpb3; uint8_t drive_num; uint8_t reserved; uint8_t extended_signature; uint32_t volume_id; uint8_t partition_label[11]; uint8_t filesystem_type[8]; } ebpb_t; typedef struct { uint32_t sig; uint8_t reserved[480]; uint32_t sig2; uint32_t free_data_clusters; uint32_t last_allocated_data_cluster; uint32_t reserved2; uint32_t sig3; } fs_info_sector_t; typedef struct { uint8_t sequence_number; uint16_t filename0[5]; uint8_t attributes; uint8_t type; uint8_t checksum; uint16_t filename1[6]; uint16_t reserved; uint16_t filename[2]; } vfat_dentry_t; typedef struct { uint8_t filename[8]; uint8_t extension[3]; uint8_t attributes; uint8_t reserved; uint8_t create_time_10ms; uint32_t create_date; uint16_t access_date; uint16_t first_cluster_h; uint32_t modify_cluster; uint16_t first_cluster_l; uint32_t file_size; } dos_dentry_t; #endif