Microchip® Advanced Software Framework

fat.h File Reference
#include "fs_com.h"

Data Structures

struct  Fs_clusterlist_cache
 Structure to store the cluster list cache. More...
 
struct  Fs_management
 Structure to save the variables frequently used by file system mounted. More...
 
struct  Fs_management_entry
 Structure to save the frequently variables of file system mounted. More...
 
struct  Fs_management_fast
 Structure to save the variables very frequently used by file system mounted. More...
 
union  Fs_rootdir
 Union to define a root directory. More...
 
struct  Fs_sector_cache
 Structure to store the information about sector cache (=last sector read or write on disk) More...
 
struct  Fs_segment
 Structure to define a segment. More...
 
struct  st_fs_cluster
 Structure to store cluster information. More...
 

Macros

#define _GLOBEXT_   extern
 
#define FS_BUF_SECTOR_EMPTY   0xFF
 Signal that sector cache is not valid. More...
 
#define FS_MBR_OFFSET_PART_ENTRY(num)   ((uint16_t)((uint16_t)(0x1BE)+(0x10 * num)))
 Position (unit byte) in the MBR of a partition entry. More...
 
#define Is_fat12   (FS_TYPE_FAT_12 == fs_g_nav_fast.u8_type_fat)
 
#define Is_fat16   (FS_TYPE_FAT_16 == fs_g_nav_fast.u8_type_fat)
 
#define Is_fat32   (FS_TYPE_FAT_32 == fs_g_nav_fast.u8_type_fat)
 
#define Is_unicode   (0)
 
Macro to access at fields in BPB sector (only used in fat_mount() function)

The name prefixed by "BPB_" are defined in "Hardware White Paper FAT"

#define LOW_16_BPB_BytsPerSec   fs_g_sector[11]
 
#define HIGH_16_BPB_BytsPerSec   fs_g_sector[12]
 
#define U8_BPB_SecPerClus   fs_g_sector[13]
 
#define LOW_16_BPB_RootEntCnt   fs_g_sector[17]
 
#define HIGH_16_BPB_RootEntCnt   fs_g_sector[18]
 
#define LOW_16_BPB_FATSz16   fs_g_sector[22]
 
#define HIGH_16_BPB_FATSz16   fs_g_sector[23]
 
#define LOW0_32_BPB_FATSz32   fs_g_sector[36]
 
#define LOW1_32_BPB_FATSz32   fs_g_sector[37]
 
#define LOW2_32_BPB_FATSz32   fs_g_sector[38]
 
#define LOW3_32_BPB_FATSz32   fs_g_sector[39]
 
#define LOW_16_BPB_TotSec16   fs_g_sector[19]
 
#define HIGH_16_BPB_TotSec16   fs_g_sector[20]
 
#define LOW0_32_BPB_TotSec32   fs_g_sector[32]
 
#define LOW1_32_BPB_TotSec32   fs_g_sector[33]
 
#define LOW2_32_BPB_TotSec32   fs_g_sector[34]
 
#define LOW3_32_BPB_TotSec32   fs_g_sector[35]
 
#define LOW_16_BPB_ResvSecCnt   fs_g_sector[14]
 
#define HIGH_16_BPB_ResvSecCnt   fs_g_sector[15]
 
#define U8_BPB_NumFATs   fs_g_sector[16]
 
#define LOW0_32_BPB_RootClus   fs_g_sector[44]
 
#define LOW1_32_BPB_RootClus   fs_g_sector[45]
 
#define LOW2_32_BPB_RootClus   fs_g_sector[46]
 
#define LOW3_32_BPB_RootClus   fs_g_sector[47]
 
#define LOW_16_BPB_FSInfo   fs_g_sector[48]
 
#define HIGH_16_BPB_FSInfo   fs_g_sector[49]
 
Constants used to sign a MBR or PBR sectors
#define FS_BR_SIGNATURE_LOW   0x55
 
#define FS_BR_SIGNATURE_HIGH   0xAA
 
Constants used in MBR sector
#define FS_PART_BOOTABLE   0x80
 
#define FS_PART_NO_BOOTABLE   0x00
 
#define FS_PART_TYPE_FAT12   0x01
 
#define FS_PART_TYPE_FAT16_INF32M   0x04
 
#define FS_PART_TYPE_FAT16_SUP32M   0x06
 
#define FS_PART_TYPE_FAT16_SUP32M_BIS   0x0E
 
#define FS_PART_TYPE_FAT32   0x0B
 
#define FS_PART_TYPE_FAT32_BIS   0x0C
 
#define FS_PART_REMOVE_MEDIA   0xF0
 
#define FS_PART_NO_REMOVE_MEDIA   0xF8
 
#define FS_PART_HARD_DISK   0x81
 
#define FS_BOOT_SIGN   0x29
 
Maximum of FAT cluster
#define FS_FAT12_MAX_CLUSTERS   4085
 
#define FS_FAT16_MAX_CLUSTERS   65525
 
Constants used in the first byte of file entry
#define FS_ENTRY_END   0x00
 
#define FS_ENTRY_DEL   0xE5
 
#define FS_ENTRY_LFN_LAST   0x40
 
Constantes used to manage the file entry
#define FS_SIZE_FILE_ENTRY   32
 
#define FS_SHIFT_B_TO_FILE_ENTRY   5
 
#define FS_SIZE_LFN_ENTRY   13
 
#define FS_SIZE_SFNAME   11
 
#define FS_SIZE_SFNAME_WITHOUT_EXT   8
 
#define FS_SIZE_SFNAME_EXT_ONLY   3
 
LIMITATIONS OF FILE SYSTEM
#define FS_NB_FAT   2
 
The unit sector of 512B is many used in file System stack
#define FS_512B   512
 
#define FS_512B_MASK   (512-1)
 
#define FS_512B_SHIFT_BIT   9
 
#define FS_SIZE_OF_SECTOR   FS_512B
 
#define FS_MASK_SIZE_OF_SECTOR   FS_512B_MASK
 
#define FS_SHIFT_B_TO_SECTOR   FS_512B_SHIFT_BIT
 
#define FS_CACHE_SIZE   512
 
Status of the fat_checkcluster() function
#define FS_CLUS_OK   0
 
#define FS_CLUS_BAD   1
 
#define FS_CLUS_END   2
 
Options of the fat_cluster_list() function
#define FS_CLUST_ACT_SEG   0x01
 
#define FS_CLUST_ACT_ONE   0x02
 
#define FS_CLUST_ACT_CLR   0x03
 
Options of the fat_cluster_val() function
#define FS_CLUST_VAL_READ   false
 
#define FS_CLUST_VAL_WRITE   true
 
#define FS_CLUST_VAL_EOL   0x0FFFFFFF
 
FAT type ID, used in "Fs_management_fast.u8_type_fat"
#define FS_TYPE_FAT_UNM   0
 Partition not mounted. More...
 
#define FS_TYPE_FAT_12   1
 
#define FS_TYPE_FAT_16   2
 
#define FS_TYPE_FAT_32   3
 
Value used in "Fs_management_fast.u16_entry_pos_sel_file"
#define FS_NO_SEL   0xFFFF
 Signal that a file entry isn't selected. More...
 
#define FS_END_FIND   0xFFFE
 Signal that a file entry is the last file entry accessible by system. More...
 
Macro to check the file open mode
#define Fat_file_is_open()   (fs_g_nav_entry.u8_open_mode !=0 )
 
#define Fat_file_isnot_open()   (fs_g_nav_entry.u8_open_mode ==0 )
 
#define Fat_file_close()   (fs_g_nav_entry.u8_open_mode =0 )
 

Typedefs

Main structures
typedef struct st_fs_cluster Fs_cluster
 Structure to store cluster information. More...
 

Functions

bool fat_format (uint8_t u8_fat_type)
 This function formats the drive. More...
 
uint8_t fat_get_nbpartition (void)
 This function returns the number of partition present on selected drive. More...
 
bool fat_mount (void)
 This function mounts a partition. More...
 
bool fat_serialnumber (bool b_action, uint8_t _MEM_TYPE_SLOW_ *a_u8_sn)
 This function reads or writes a serial number. More...
 
Functions to verify navigator state

}@

bool fat_check_device (void)
 This function checks device state. More...
 
bool fat_check_mount (void)
 This function checks if the partition is mounted. More...
 
bool fat_check_noopen (void)
 This function checks if a file is not opened on current navigator. More...
 
bool fat_check_open (void)
 This function checks if a file is opened on current navigator. More...
 
bool fat_check_select (void)
 This function checks if a file is selected on current navigator. More...
 
bool fat_check_mount_noopen (void)
 This function checks if the partition is mounted and no file is opened. More...
 
bool fat_check_mount_select_noopen (void)
 This function checks if the partition is mounted and if no file is opened and a file is selected. More...
 
bool fat_check_mount_select_open (void)
 This function checks if the partition is mounted and if a file is opened. More...
 
bool fat_check_mount_select (void)
 This function checks if the partition is mounted and if a file is selected. More...
 
bool fat_check_is_file (void)
 This function checks if the selected file entry is a file and not a directory. More...
 
Functions to compute free space on a partition
uint32_t fat_getfreespace (void)
 This function returns the space free in the partition. More...
 
uint8_t fat_getfreespace_percent (void)
 This function returns the space free in percent. More...
 
bool fat_write_fat32_FSInfo (uint32_t u32_nb_free_cluster)
 This function writes the space free number in selected FAT32 partition. More...
 
uint32_t fat_read_fat32_FSInfo (void)
 This function returns the space free in the selected FAT32 partition. More...
 
Functions to manage the cluster list
bool fat_cluster_list (uint8_t opt_action, bool b_for_file)
 This function gets or clears a cluster list. More...
 
void fat_cache_clusterlist_reset (void)
 This function resets the cluster list caches. More...
 
bool fat_cluster_val (bool b_mode)
 This function returns or modifies a cluster value in FAT. More...
 
bool fat_cluster_readnext (void)
 This function is optimized to read a continue cluster list on FAT16 and FAT32. More...
 
uint8_t fat_checkcluster (void)
 This function checks the cluster value. More...
 
bool fat_allocfreespace (void)
 This function allocs a cluster list. More...
 
void fat_clear_info_fat_mod (void)
 This function clears the cache information about FAT modifications. More...
 
bool fat_clear_cluster (void)
 This function clears one cluster. More...
 
bool fat_update_fat2 (void)
 This function copies the modifications of the first FAT to the second FAT. More...
 
Functions to read or to write a file or a directory
bool fat_read_file (uint8_t mode)
 This function gets or clears a cluster list at the current position in the selected file. More...
 
bool fat_write_file (uint8_t mode, uint32_t u32_nb_sector_write)
 This function gets and eventually allocs a cluster list at the current position in the selected file. More...
 
bool fat_read_dir (void)
 This function fill the internal cache with a sector from current directory. More...
 
bool fat_initialize_dir (void)
 This function writes the directory information. More...
 
Functions to manage the entry field (fat.c)
bool fat_entry_check (bool b_type)
 This function checks the entry. More...
 
bool fat_entry_checkext (FS_STRING sz_filter)
 This function checks the file extension. More...
 
void fat_get_entry_info (void)
 This function reads information about selected file. More...
 
bool fat_entry_is_dir (void)
 This function checks if the entry file is a directory. More...
 
void fat_clear_entry_info_and_ptr (void)
 This function resets the selection pointers. More...
 
void fat_write_entry_file (void)
 This function writes the information about selected file. More...
 
bool fat_entry_shortname (FS_STRING sz_name, uint8_t u8_size_max, bool b_mode)
 This function returns or compares the short name entry. More...
 
bool fat_entry_longname (FS_STRING sz_name, uint8_t u8_size_max, bool b_mode, bool b_match_case)
 This function returns or compares the long name entry. More...
 
bool fat_check_eof_name (uint16_t character)
 Check end of name. More...
 
PTR_CACHE fat_get_ptr_entry (void)
 This function returns a cache pointer on the current entry. More...
 
Functions to manage the entry field (fat_unusual.c)
bool fat_create_entry_file_name (FS_STRING sz_name)
 This function creates the short and the long name of a new entry. More...
 
void fat_get_date (FS_STRING sz_date, bool type_date)
 This function reads the information about a date. More...
 
void fat_set_date (const FS_STRING sz_date, bool type_date)
 This function changes the date information. More...
 
bool fat_delete_file (bool b_cluster_list)
 This function deletes the file entries and cluster list. More...
 
bool fat_entry_label (bool b_action, FS_STRING sz_label)
 This function reads or writes a label in the partition. More...
 
Functions to manage the cache
bool fat_cache_read_sector (bool b_load)
 This function loads a memory sector in internal cache sector. More...
 
void fat_cache_reset (void)
 This function resets the sector cache. More...
 
void fat_cache_clear (void)
 This function clears the sector cache. More...
 
void fat_cache_mark_sector_as_dirty (void)
 This function sets a flag to signal that sector cache is modified. More...
 
bool fat_cache_flush (void)
 This function flushes the sector cache on the memory if necessary. More...
 
Functions to control access disk
bool fat_check_nav_access_disk (void)
 This function checks write access. More...
 
bool fat_check_nav_access_file (bool mode)
 This function checks all access at current file. More...
 
Functions to manage navigator switch
void fat_invert_nav (uint8_t u8_idnav)
 This function inverts the current navigation with another. More...
 
void fat_copy_nav (uint8_t u8_idnav)
 This function copies the main navigator to another navigator. More...
 

Variables

_GLOBEXT_ _MEM_TYPE_FAST_
Fs_cluster 
fs_g_cluster
 To take time in functions: fat_getfreespace, fat_cluster_list, fat_cluster_val, fat_checkcluster. More...
 
_GLOBEXT_ _MEM_TYPE_FAST_
Fs_segment 
fs_g_seg
 Variable frequently used by many function (optimization, no parameter in function) More...
 
_GLOBEXT_ bool g_b_no_check_disk
 Variables to enable/disable the disk check before each action on disk. More...
 
_GLOBEXT_ bool g_b_string_length
 Variables to select LENGTH string mode (initialised in nav_reset()) More...
 
_GLOBEXT_ bool g_b_unicode
 Variables to select string format (initialised in nav_reset()) More...
 
Variables initialized in drive_mount()
_GLOBEXT_ _MEM_TYPE_SLOW_
Fs_management 
fs_g_nav
 
_GLOBEXT_ _MEM_TYPE_FAST_
Fs_management_fast 
fs_g_nav_fast
 
_GLOBEXT_ _MEM_TYPE_SLOW_
Fs_management_entry 
fs_g_nav_entry
 
Variables used to update the second FAT zone
_GLOBEXT_ _MEM_TYPE_SLOW_ uint32_t fs_g_u32_first_mod_fat
 Offset (unit 512B) in fat of the first sector (unit 512B) More...
 
_GLOBEXT_ _MEM_TYPE_SLOW_ uint32_t fs_g_u32_last_mod_fat
 Offset (unit 512B) in fat of the last sector (unit 512B) More...
 

Variables used to manage the sector cache

typedef uint8_t _MEM_TYPE_SLOW_PTR_CACHE
 
_GLOBEXT_ _MEM_TYPE_SLOW_ uint8_t fs_g_sector [FS_CACHE_SIZE]
 Use "FAT sector cache" to store a sector from a file (see file_putc(), file_getc(), file_read_buf(), file_write_buf()) More...
 
_GLOBEXT_ _MEM_TYPE_SLOW_
Fs_sector_cache 
fs_g_sectorcache
 
_GLOBEXT_ _MEM_TYPE_SLOW_ uint32_t fs_gu32_addrsector
 Store the address of future cache (unit 512B) More...