FAT16 file functions
[FAT16 support]

Collaboration diagram for FAT16 file functions:

Data Structures

struct  fat16_dir_entry_struct

Defines

#define FAT16_ATTRIB_READONLY   (1 << 0)
#define FAT16_ATTRIB_HIDDEN   (1 << 1)
#define FAT16_ATTRIB_SYSTEM   (1 << 2)
#define FAT16_ATTRIB_VOLUME   (1 << 3)
#define FAT16_ATTRIB_DIR   (1 << 4)
#define FAT16_ATTRIB_ARCHIVE   (1 << 5)
#define FAT16_SEEK_SET   0
#define FAT16_SEEK_CUR   1
#define FAT16_SEEK_END   2

Functions

uint8_t fat16_get_dir_entry_of_path (struct fat16_fs_struct *fs, const char *path, struct fat16_dir_entry_struct *dir_entry)
struct fat16_file_structfat16_open_file (struct fat16_fs_struct *fs, const struct fat16_dir_entry_struct *dir_entry)
void fat16_close_file (struct fat16_file_struct *fd)
int16_t fat16_read_file (struct fat16_file_struct *fd, uint8_t *buffer, uint16_t buffer_len)
int16_t fat16_write_file (struct fat16_file_struct *fd, const uint8_t *buffer, uint16_t buffer_len)
uint8_t fat16_seek_file (struct fat16_file_struct *fd, int32_t *offset, uint8_t whence)
uint8_t fat16_resize_file (struct fat16_file_struct *fd, uint32_t size)
uint8_t fat16_create_file (struct fat16_dir_struct *parent, const char *file, struct fat16_dir_entry_struct *dir_entry)
uint8_t fat16_delete_file (struct fat16_fs_struct *fs, struct fat16_dir_entry_struct *dir_entry)
void fat16_get_file_modification_date (const struct fat16_dir_entry_struct *dir_entry, uint16_t *year, uint8_t *month, uint8_t *day)
void fat16_get_file_modification_time (const struct fat16_dir_entry_struct *dir_entry, uint8_t *hour, uint8_t *min, uint8_t *sec)
static void fat16_set_file_modification_date (struct fat16_dir_entry_struct *dir_entry, uint16_t year, uint8_t month, uint8_t day)
static void fat16_set_file_modification_time (struct fat16_dir_entry_struct *dir_entry, uint8_t hour, uint8_t min, uint8_t sec)

Detailed Description

Functions for managing files.

Define Documentation

#define FAT16_ATTRIB_ARCHIVE   (1 << 5)

The file has to be archived.

Definition at line 53 of file fat16.h.

#define FAT16_ATTRIB_DIR   (1 << 4)

The file is a directory.

Definition at line 51 of file fat16.h.

Referenced by fat16_create_dir(), fat16_get_dir_entry_of_path(), fat16_open_dir(), fat16_open_file(), and main().

#define FAT16_ATTRIB_HIDDEN   (1 << 1)

The file is hidden.

Definition at line 45 of file fat16.h.

#define FAT16_ATTRIB_READONLY   (1 << 0)

The file is read-only.

Definition at line 43 of file fat16.h.

#define FAT16_ATTRIB_SYSTEM   (1 << 2)

The file is a system file.

Definition at line 47 of file fat16.h.

#define FAT16_ATTRIB_VOLUME   (1 << 3)

The file is empty and has the volume label as its name.

Definition at line 49 of file fat16.h.

#define FAT16_SEEK_CUR   1

The given offset is relative to the current read/write position.

Definition at line 58 of file fat16.h.

Referenced by fat16_seek_file().

#define FAT16_SEEK_END   2

The given offset is relative to the end of the file.

Definition at line 60 of file fat16.h.

Referenced by fat16_seek_file().

#define FAT16_SEEK_SET   0

The given offset is relative to the beginning of the file.

Definition at line 56 of file fat16.h.

Referenced by fat16_seek_file().


Function Documentation

void fat16_close_file ( struct fat16_file_struct fd  ) 

Closes a file.

Parameters:
[in] fd The file handle of the file to close.
See also:
fat16_open_file

Definition at line 786 of file fat16.c.

References fat16_file_struct::fs.

Referenced by main().

uint8_t fat16_create_file ( struct fat16_dir_struct parent,
const char *  file,
struct fat16_dir_entry_struct dir_entry 
)

Creates a file.

Creates a file and obtains the directory entry of the new file. If the file to create already exists, the directory entry of the existing file will be returned within the dir_entry parameter.

Note:
The file name is not checked for invalid characters.

The generation of the short 8.3 file name is quite simple. The first eight characters are used for the filename. The extension, if any, is made up of the first three characters following the last dot within the long filename. If the filename (without the extension) is longer than eight characters, the lower byte of the cluster number replaces the last two characters to avoid name clashes. In any other case, it is your responsibility to avoid name clashes.

Parameters:
[in] parent The handle of the directory in which to create the file.
[in] file The name of the file to create.
[out] dir_entry The directory entry to fill for the new file.
Returns:
0 on failure, 1 on success.
See also:
fat16_delete_file

Definition at line 1775 of file fat16.c.

References fat16_dir_entry_struct::entry_offset, fat16_find_offset_for_dir_entry(), fat16_read_dir(), fat16_reset_dir(), fat16_write_dir_entry(), fat16_dir_struct::fs, and fat16_dir_entry_struct::long_name.

uint8_t fat16_delete_file ( struct fat16_fs_struct fs,
struct fat16_dir_entry_struct dir_entry 
)

Deletes a file or directory.

If a directory is deleted without first deleting its subdirectories and files, disk space occupied by these files will get wasted as there is no chance to release it and mark it as free.

Parameters:
[in] fs The filesystem on which to operate.
[in] dir_entry The directory entry of the file to delete.
Returns:
0 on failure, 1 on success.
See also:
fat16_create_file

Definition at line 1829 of file fat16.c.

References fat16_dir_entry_struct::cluster, partition_struct::device_read, partition_struct::device_write, fat16_dir_entry_struct::entry_offset, FAT16_DIRENTRY_DELETED, fat16_free_clusters(), and fat16_fs_struct::partition.

uint8_t fat16_get_dir_entry_of_path ( struct fat16_fs_struct fs,
const char *  path,
struct fat16_dir_entry_struct dir_entry 
)

Retrieves the directory entry of a path.

The given path may both describe a file or a directory.

Parameters:
[in] fs The FAT16 filesystem on which to search.
[in] path The path of which to read the directory entry.
[out] dir_entry The directory entry to fill.
Returns:
0 on failure, 1 on success.
See also:
fat16_read_dir

Definition at line 391 of file fat16.c.

References fat16_dir_entry_struct::attributes, FAT16_ATTRIB_DIR, fat16_close_dir(), fat16_open_dir(), fat16_read_dir(), and fat16_dir_entry_struct::long_name.

Referenced by main().

void fat16_get_file_modification_date ( const struct fat16_dir_entry_struct dir_entry,
uint16_t *  year,
uint8_t *  month,
uint8_t *  day 
)

Deletes a directory.

This is just a synonym for fat16_delete_file(). If a directory is deleted without first deleting its subdirectories and files, disk space occupied by these files will get wasted as there is no chance to release it and mark it as free.

Parameters:
[in] fs The filesystem on which to operate.
[in] dir_entry The directory entry of the directory to delete.
Returns:
0 on failure, 1 on success.
See also:
fat16_create_dir
Returns the modification date of a file.

Parameters:
[in] dir_entry The directory entry of which to return the modification date.
[out] year The year the file was last modified.
[out] month The month the file was last modified.
[out] day The day the file was last modified.

Definition at line 1994 of file fat16.c.

void fat16_get_file_modification_time ( const struct fat16_dir_entry_struct dir_entry,
uint8_t *  hour,
uint8_t *  min,
uint8_t *  sec 
)

Returns the modification time of a file.

Parameters:
[in] dir_entry The directory entry of which to return the modification time.
[out] hour The hour the file was last modified.
[out] min The min the file was last modified.
[out] sec The sec the file was last modified.

Definition at line 2015 of file fat16.c.

struct fat16_file_struct* fat16_open_file ( struct fat16_fs_struct fs,
const struct fat16_dir_entry_struct dir_entry 
) [read]

Opens a file on a FAT16 filesystem.

Parameters:
[in] fs The filesystem on which the file to open lies.
[in] dir_entry The directory entry of the file to open.
Returns:
The file handle, or 0 on failure.
See also:
fat16_close_file

Definition at line 748 of file fat16.c.

References fat16_dir_entry_struct::attributes, fat16_dir_entry_struct::cluster, fat16_file_struct::dir_entry, FAT16_ATTRIB_DIR, FAT16_FILE_COUNT, fat16_file_handles, fat16_file_struct::fs, fat16_file_struct::pos, and fat16_file_struct::pos_cluster.

Referenced by open_file_in_dir().

int16_t fat16_read_file ( struct fat16_file_struct fd,
uint8_t *  buffer,
uint16_t  buffer_len 
)

Reads data from a file.

The data requested is read from the current file location.

Parameters:
[in] fd The file handle of the file from which to read.
[out] buffer The buffer into which to write.
[in] buffer_len The amount of data to read.
Returns:
The number of bytes read, 0 on end of file, or -1 on failure.
See also:
fat16_write_file

Definition at line 808 of file fat16.c.

References fat16_dir_entry_struct::cluster, fat16_header_struct::cluster_size, partition_struct::device_read, fat16_file_struct::dir_entry, fat16_cluster_offset(), fat16_get_next_cluster(), fat16_dir_entry_struct::file_size, fat16_file_struct::fs, fat16_fs_struct::header, fat16_fs_struct::partition, fat16_file_struct::pos, and fat16_file_struct::pos_cluster.

Referenced by play_song().

uint8_t fat16_resize_file ( struct fat16_file_struct fd,
uint32_t  size 
)

Resizes a file to have a specific size.

Enlarges or shrinks the file pointed to by the file descriptor to have exactly the specified size.

If the file is truncated, all bytes having an equal or larger offset than the given size are lost. If the file is expanded, the additional bytes are allocated.

Note:
Please be aware that this function just allocates or deallocates disk space, it does not explicitely clear it. To avoid data leakage, this must be done manually.
Parameters:
[in] fd The file decriptor of the file which to resize.
[in] size The new size of the file.
Returns:
0 on failure, 1 on success.

Definition at line 1096 of file fat16.c.

References fat16_dir_entry_struct::cluster, fat16_header_struct::cluster_size, fat16_file_struct::dir_entry, fat16_append_clusters(), fat16_free_clusters(), fat16_get_next_cluster(), fat16_terminate_clusters(), fat16_write_dir_entry(), fat16_dir_entry_struct::file_size, fat16_file_struct::fs, fat16_fs_struct::header, fat16_file_struct::pos, and fat16_file_struct::pos_cluster.

Referenced by fat16_seek_file().

uint8_t fat16_seek_file ( struct fat16_file_struct fd,
int32_t *  offset,
uint8_t  whence 
)

Repositions the read/write file offset.

Changes the file offset where the next call to fat16_read_file() or fat16_write_file() starts reading/writing.

If the new offset is beyond the end of the file, fat16_resize_file() is implicitly called, i.e. the file is expanded.

The new offset can be given in different ways determined by the whence parameter:

  • FAT16_SEEK_SET: *offset is relative to the beginning of the file.
  • FAT16_SEEK_CUR: *offset is relative to the current file position.
  • FAT16_SEEK_END: *offset is relative to the end of the file.

The resulting absolute offset is written to the location the offset parameter points to.

Parameters:
[in] fd The file decriptor of the file on which to seek.
[in,out] offset A pointer to the new offset, as affected by the whence parameter. The function writes the new absolute offset to this location before it returns.
[in] whence Affects the way offset is interpreted, see above.
Returns:
0 on failure, 1 on success.

Definition at line 1046 of file fat16.c.

References fat16_file_struct::dir_entry, fat16_resize_file(), FAT16_SEEK_CUR, FAT16_SEEK_END, FAT16_SEEK_SET, fat16_dir_entry_struct::file_size, fat16_file_struct::pos, and fat16_file_struct::pos_cluster.

void fat16_set_file_modification_date ( struct fat16_dir_entry_struct dir_entry,
uint16_t  year,
uint8_t  month,
uint8_t  day 
) [static]

Sets the modification time of a date.

Parameters:
[in] dir_entry The directory entry for which to set the modification date.
[in] year The year the file was last modified.
[in] month The month the file was last modified.
[in] day The day the file was last modified.

Definition at line 2036 of file fat16.c.

Referenced by fat16_write_dir_entry().

void fat16_set_file_modification_time ( struct fat16_dir_entry_struct dir_entry,
uint8_t  hour,
uint8_t  min,
uint8_t  sec 
) [static]

Sets the modification time of a file.

Parameters:
[in] dir_entry The directory entry for which to set the modification time.
[in] hour The year the file was last modified.
[in] min The month the file was last modified.
[in] sec The day the file was last modified.

Definition at line 2060 of file fat16.c.

Referenced by fat16_write_dir_entry().

int16_t fat16_write_file ( struct fat16_file_struct fd,
const uint8_t *  buffer,
uint16_t  buffer_len 
)

Writes data to a file.

The data is written to the current file location.

Parameters:
[in] fd The file handle of the file to which to write.
[in] buffer The buffer from which to read the data to be written.
[in] buffer_len The amount of data to write.
Returns:
The number of bytes written, 0 on disk full, or -1 on failure.
See also:
fat16_read_file

Definition at line 902 of file fat16.c.

References fat16_dir_entry_struct::cluster, fat16_header_struct::cluster_size, partition_struct::device_write, fat16_file_struct::dir_entry, fat16_append_clusters(), fat16_cluster_offset(), fat16_get_next_cluster(), fat16_write_dir_entry(), fat16_dir_entry_struct::file_size, fat16_file_struct::fs, fat16_fs_struct::header, fat16_fs_struct::partition, fat16_file_struct::pos, and fat16_file_struct::pos_cluster.


Generated on Wed Sep 17 19:31:52 2008 for mptry by  doxygen 1.5.5