UbixOS V2  2.0
fat_access.h
Go to the documentation of this file.
1 #ifndef __FAT_ACCESS_H__
2 #define __FAT_ACCESS_H__
3 
4 #include "fat_defs.h"
5 #include "fat_opts.h"
6 
7 //-----------------------------------------------------------------------------
8 // Defines
9 //-----------------------------------------------------------------------------
10 #define FAT_INIT_OK 0
11 #define FAT_INIT_MEDIA_ACCESS_ERROR (-1)
12 #define FAT_INIT_INVALID_SECTOR_SIZE (-2)
13 #define FAT_INIT_INVALID_SIGNATURE (-3)
14 #define FAT_INIT_ENDIAN_ERROR (-4)
15 #define FAT_INIT_WRONG_FILESYS_TYPE (-5)
16 #define FAT_INIT_WRONG_PARTITION_TYPE (-6)
17 #define FAT_INIT_STRUCT_PACKING (-7)
18 
19 #define FAT_DIR_ENTRIES_PER_SECTOR (FAT_SECTOR_SIZE / FAT_DIR_ENTRY_SIZE)
20 
21 //-----------------------------------------------------------------------------
22 // Function Pointers
23 //-----------------------------------------------------------------------------
24 typedef int (*fn_diskio_read) (uint32 sector, uint8 *buffer, uint32 sector_count);
25 typedef int (*fn_diskio_write)(uint32 sector, uint8 *buffer, uint32 sector_count);
26 
27 //-----------------------------------------------------------------------------
28 // Structures
29 //-----------------------------------------------------------------------------
30 struct disk_if
31 {
32  // User supplied function pointers for disk IO
35 };
36 
37 // Forward declaration
38 struct fat_buffer;
39 
40 struct fat_buffer
41 {
44  int dirty;
46 
47  // Next in chain of sector buffers
48  struct fat_buffer *next;
49 };
50 
51 typedef enum eFatType
52 {
55 } tFatType;
56 
57 struct fatfs
58 {
59  // Filesystem globals
74 
75  // Disk/Media API
76  struct disk_if disk_io;
77 
78  // [Optional] Thread Safety
79  void (*fl_lock)(void);
80  void (*fl_unlock)(void);
81 
82  // Working buffer
84 
85  // FAT Buffer
88 };
89 
91 {
95 };
96 
97 struct fs_dir_ent
98 {
103 
104 #if FATFS_INC_TIME_DATE_SUPPORT
105  uint16 access_date;
106  uint16 write_time;
107  uint16 write_date;
108  uint16 create_date;
109  uint16 create_time;
110 #endif
111 };
112 
113 //-----------------------------------------------------------------------------
114 // Prototypes
115 //-----------------------------------------------------------------------------
116 int fatfs_init(struct fatfs *fs);
117 uint32 fatfs_lba_of_cluster(struct fatfs *fs, uint32 Cluster_Number);
118 int fatfs_sector_reader(struct fatfs *fs, uint32 Startcluster, uint32 offset, uint8 *target);
119 int fatfs_sector_read(struct fatfs *fs, uint32 lba, uint8 *target, uint32 count);
120 int fatfs_sector_write(struct fatfs *fs, uint32 lba, uint8 *target, uint32 count);
121 int fatfs_read_sector(struct fatfs *fs, uint32 cluster, uint32 sector, uint8 *target);
122 int fatfs_write_sector(struct fatfs *fs, uint32 cluster, uint32 sector, uint8 *target);
123 void fatfs_show_details(struct fatfs *fs);
125 uint32 fatfs_get_file_entry(struct fatfs *fs, uint32 Cluster, char *nametofind, struct fat_dir_entry *sfEntry);
126 int fatfs_sfn_exists(struct fatfs *fs, uint32 Cluster, char *shortname);
127 int fatfs_update_file_length(struct fatfs *fs, uint32 Cluster, char *shortname, uint32 fileLength);
128 int fatfs_mark_file_deleted(struct fatfs *fs, uint32 Cluster, char *shortname);
129 void fatfs_list_directory_start(struct fatfs *fs, struct fs_dir_list_status *dirls, uint32 StartCluster);
130 int fatfs_list_directory_next(struct fatfs *fs, struct fs_dir_list_status *dirls, struct fs_dir_ent *entry);
131 int fatfs_update_timestamps(struct fat_dir_entry *directoryEntry, int create, int modify, int access);
132 
133 #endif
fatfs_mark_file_deleted
int fatfs_mark_file_deleted(struct fatfs *fs, uint32 Cluster, char *shortname)
Definition: fat_access.c:643
fat_buffer
Definition: fat_access.h:40
fatfs_update_timestamps
int fatfs_update_timestamps(struct fat_dir_entry *directoryEntry, int create, int modify, int access)
FAT_TYPE_32
Definition: fat_access.h:54
fs_dir_list_status
Definition: fat_access.h:90
fs_dir_ent::filename
char filename[260]
Definition: fat_access.h:99
fatfs::fl_lock
void(* fl_lock)(void)
Definition: fat_access.h:79
fatfs_lba_of_cluster
uint32 fatfs_lba_of_cluster(struct fatfs *fs, uint32 Cluster_Number)
Definition: fat_access.c:191
buffer
char * buffer
Definition: shell.c:47
disk_if::write_media
fn_diskio_write write_media
Definition: fat_access.h:34
uint8
unsigned char uint8
Definition: fat_types.h:15
fatfs_get_root_cluster
uint32 fatfs_get_root_cluster(struct fatfs *fs)
Definition: fat_access.c:373
fatfs_list_directory_next
int fatfs_list_directory_next(struct fatfs *fs, struct fs_dir_list_status *dirls, struct fs_dir_ent *entry)
Definition: fat_access.c:719
fatfs::fat_buffers
struct fat_buffer fat_buffers[1]
Definition: fat_access.h:87
fatfs_sector_write
int fatfs_sector_write(struct fatfs *fs, uint32 lba, uint8 *target, uint32 count)
Definition: fat_access.c:206
fs_dir_list_status::cluster
uint32 cluster
Definition: fat_access.h:93
fatfs::fat_sectors
uint32 fat_sectors
Definition: fat_access.h:68
disk_if::read_media
fn_diskio_read read_media
Definition: fat_access.h:33
fat_buffer::dirty
int dirty
Definition: fat_access.h:44
fatfs::reserved_sectors
uint16 reserved_sectors
Definition: fat_access.h:71
fatfs_write_sector
int fatfs_write_sector(struct fatfs *fs, uint32 cluster, uint32 sector, uint8 *target)
Definition: fat_access.c:311
fatfs::next_free_cluster
uint32 next_free_cluster
Definition: fat_access.h:69
directoryEntry
Definition: ubixfs.h:98
fatfs::fat_begin_lba
uint32 fat_begin_lba
Definition: fat_access.h:65
fatfs_init
int fatfs_init(struct fatfs *fs)
Definition: fat_access.c:43
fat_defs.h
fatfs::sectors_per_cluster
uint8 sectors_per_cluster
Definition: fat_access.h:60
fatfs::fs_info_sector
uint16 fs_info_sector
Definition: fat_access.h:66
fs
Definition: fs.h:260
fatfs_read_sector
int fatfs_read_sector(struct fatfs *fs, uint32 cluster, uint32 sector, uint8 *target)
Definition: fat_access.c:263
fs_dir_ent::is_dir
uint8 is_dir
Definition: fat_access.h:100
FAT_SECTOR_SIZE
#define FAT_SECTOR_SIZE
Definition: fat_opts.h:70
eFatType
eFatType
Definition: fat_access.h:51
fatfs_get_file_entry
uint32 fatfs_get_file_entry(struct fatfs *fs, uint32 Cluster, char *nametofind, struct fat_dir_entry *sfEntry)
Definition: fat_access.c:380
fs_dir_ent
Definition: fat_access.h:97
fatfs_sfn_exists
int fatfs_sfn_exists(struct fatfs *fs, uint32 Cluster, char *shortname)
Definition: fat_access.c:478
fatfs::rootdir_first_sector
uint32 rootdir_first_sector
Definition: fat_access.h:63
FAT_BUFFERS
#define FAT_BUFFERS
Definition: fat_opts.h:35
fatfs_sector_read
int fatfs_sector_read(struct fatfs *fs, uint32 lba, uint8 *target, uint32 count)
Definition: fat_access.c:200
fat_dir_entry
Definition: fat_defs.h:112
fat_opts.h
fatfs::currentsector
struct fat_buffer currentsector
Definition: fat_access.h:83
fatfs_sector_reader
int fatfs_sector_reader(struct fatfs *fs, uint32 Startcluster, uint32 offset, uint8 *target)
Definition: fat_access.c:213
fatfs::fat_buffer_head
struct fat_buffer * fat_buffer_head
Definition: fat_access.h:86
fatfs::lba_begin
uint32 lba_begin
Definition: fat_access.h:67
FATFS_MAX_LONG_FILENAME
#define FATFS_MAX_LONG_FILENAME
Definition: fat_opts.h:19
fatfs_list_directory_start
void fatfs_list_directory_start(struct fatfs *fs, struct fs_dir_list_status *dirls, uint32 StartCluster)
Definition: fat_access.c:708
fatfs::cluster_begin_lba
uint32 cluster_begin_lba
Definition: fat_access.h:61
fatfs_update_file_length
int fatfs_update_file_length(struct fatfs *fs, uint32 Cluster, char *shortname, uint32 fileLength)
Definition: fat_access.c:578
fn_diskio_write
int(* fn_diskio_write)(uint32 sector, uint8 *buffer, uint32 sector_count)
Definition: fat_access.h:25
fatfs::fl_unlock
void(* fl_unlock)(void)
Definition: fat_access.h:80
fatfs::disk_io
struct disk_if disk_io
Definition: fat_access.h:76
fatfs::fat_type
tFatType fat_type
Definition: fat_access.h:73
tFatType
enum eFatType tFatType
fatfs_show_details
void fatfs_show_details(struct fatfs *fs)
Definition: fat_access.c:362
fs_dir_list_status::offset
uint8 offset
Definition: fat_access.h:94
fs_dir_ent::cluster
uint32 cluster
Definition: fat_access.h:101
fatfs::num_of_fats
uint8 num_of_fats
Definition: fat_access.h:72
uint16
unsigned short uint16
Definition: fat_types.h:16
FAT_BUFFER_SECTORS
#define FAT_BUFFER_SECTORS
Definition: fat_opts.h:29
fat_buffer::sector
uint8 sector[512 *1]
Definition: fat_access.h:42
uint32
unsigned long uint32
Definition: fat_types.h:23
access
unsigned char access
Definition: gdt.h:83
fat_buffer::next
struct fat_buffer * next
Definition: fat_access.h:48
fs_dir_list_status::sector
uint32 sector
Definition: fat_access.h:92
fat_buffer::ptr
uint8 * ptr
Definition: fat_access.h:45
FAT_TYPE_16
Definition: fat_access.h:53
fatfs::root_entry_count
uint16 root_entry_count
Definition: fat_access.h:70
fs_dir_ent::size
uint32 size
Definition: fat_access.h:102
fat_buffer::address
uint32 address
Definition: fat_access.h:43
fatfs::rootdir_first_cluster
uint32 rootdir_first_cluster
Definition: fat_access.h:62
fatfs::rootdir_sectors
uint32 rootdir_sectors
Definition: fat_access.h:64
fn_diskio_read
int(* fn_diskio_read)(uint32 sector, uint8 *buffer, uint32 sector_count)
Definition: fat_access.h:24
disk_if
Definition: fat_access.h:30
fatfs
Definition: fat_access.h:57