#ifndef _FAT16_H #define _FAT16_H #include #define FAT16_MAX_FILENAME 256 #define FAT16_ATTR_DIRECTORY 0x10 typedef struct { uint8_t drive; uint32_t fat_start; uint32_t root_dir_start; uint32_t data_start; uint16_t bytes_per_sector; uint8_t sectors_per_cluster; uint16_t root_entry_count; uint32_t current_dir_cluster; } fat16_t; typedef struct { char name[FAT16_MAX_FILENAME]; uint8_t attr; uint32_t cluster; uint32_t size; } fat16_dir_entry_t; int32_t fat16_init(uint8_t drive); uint32_t cluster_to_lba(uint16_t cluster); uint16_t fat16_get_fat_entry(uint16_t cluster); uint16_t fat16_alloc_cluster(void); int32_t fat16_list_dir(fat16_dir_entry_t* entries, size_t max_entries); int32_t fat16_change_dir(const char* dirname); int32_t fat16_read_file(const char* filename, void* buffer, size_t max_size); int32_t fat16_write_file(const char* filename, const void* data, size_t size); #endif