#include <stdlib.h>#include <stdio.h>#include <string.h>#include <file.h>#include <assert.h>#include <std.h>#include <clk.h>#include <errno.h>#include "fatfs.h"#include "private/fatfs_int.h"Defines | |
| #define | MAX_FILENO 21 |
| hardcoded max 21 FDS. TODO - make dynamic... | |
| #define | SEC_PER_MIN 60 |
| #define | MIN_PER_HOUR 60 |
| #define | HOURS_PER_DAY 24 |
| #define | DAYS_PER_YEAR 365 |
Functions | |
| int | FAT_Get83Extension (char *apBuffer, char *apBasename, char *apExtension) |
| Utility to strip 8.3 file name into basename and extension. | |
| int | FAT_finddirent (const char *apPath, tsFATDevData *apDevData, uint32_t *apDirStartCluster, uint32_t *apDirEntryCluster, uint32_t *apDirEntryInCluster, tsDirEntry *apFileEntry) |
| Given a path, locates parent directory cluster information and directory entry information. | |
| int | FAT_createdirent (const char *apNewPath, tsFATDevData *apDevData) |
| Given a path to a non-existent entry in a directory, this function creates a new subdirectory at the provided path. | |
| int | FAT_GetNextCluster (tsFATDevData *apDevData, int anCluster) |
| Find the Next Cluster In the Chain. | |
| int | FAT_UpdateDirEntry (tsFATFileData *apFileData) |
| Updates Directory Data based on current file structure (cached) information. | |
| int | FAT_CountFreeClusters (tsFATDevData *apDevData) |
| Count free clusters on the FAT Table. | |
| int | FAT_TruncateCluster (tsFATDevData *apDevData, int anCluster) |
| Mark the current cluster as the end of chain, and free all following clusters. | |
| int | FAT_FreeCluster (tsFATDevData *apDevData, int anCluster) |
| Free a chain of clusters in the FAT Table. | |
| int | FAT_GetFreeCluster (tsFATDevData *apDevData, int anChainedCluster) |
| Find a free cluster on the FAT Table and Mark it used with EOC. | |
| int | FAT_open (const char *apPath, unsigned int anFlags, int anFileno, tsFATDevData *apDevData) |
| Attempt to open an existing file or create a new file at the given path. | |
| int | FAT_close (int anFileno) |
| Close a file descriptor assocaited with a FAT device. | |
| int | FAT_read (int anFileno, char *apBuffer, unsigned int anCount) |
| Read implementation for a FAT filesystem. | |
| int | FAT_write (int anFileno, const char *apBuffer, unsigned int anCount) |
| Write implementation for a FAT filesystem. | |
| off_t | FAT_lseek (int anFileno, off_t anOffset, int aeOrigin) |
| FAT driver lseek implementation. | |
| int | FAT_unlink (const char *apPath, tsFATDevData *apDevData) |
| Delete a file. | |
| int | FAT_rename (const char *apOldPath, const char *apNewPath, tsFATDevData *apDevData) |
| Rename a file on a FAT device. | |
| int | FAT_gettime (unsigned int *apYear, unsigned int *apMonth, unsigned int *apDay, unsigned int *apHours, unsigned int *apMinutes, unsigned int *apSeconds, unsigned int *apHundredths) |
| Default time callback, used when access to a RTC device is not provided to the FAT filesystem driver. | |
Variables | |
| tsFATFileData | gpFileData [MAX_FILENO] |
| data needed for each file descriptor | |
| static char | FAT_valid_chars [128] |
| #define MAX_FILENO 21 |
hardcoded max 21 FDS. TODO - make dynamic...
| #define SEC_PER_MIN 60 |
| #define MIN_PER_HOUR 60 |
| #define HOURS_PER_DAY 24 |
| #define DAYS_PER_YEAR 365 |
| int FAT_Get83Extension | ( | char * | apBuffer, | |
| char * | apBasename, | |||
| char * | apExtension | |||
| ) |
Utility to strip 8.3 file name into basename and extension.
| [in] | apBuffer | Name to parse. |
| [out] | apBasename | Storage for base name |
| [out] | apExtension | Storage for file extension |
| int FAT_finddirent | ( | const char * | apPath, | |
| tsFATDevData * | apDevData, | |||
| uint32_t * | apDirStartCluster, | |||
| uint32_t * | apDirEntryCluster, | |||
| uint32_t * | apDirEntryInCluster, | |||
| tsDirEntry * | apFileEntry | |||
| ) |
Given a path, locates parent directory cluster information and directory entry information.
| [in] | apPath | pointer to null terminated path to file |
| [in] | apDevData | FAT interface device data structure |
| [out] | apDirStartCluster | holder for found parent directory starting cluster. This value is set 0xFFFFFFFF if the path was not found. For FAT16 the dir_start_cluster will be 0x00000000 if the path points to the root directory (which is not in the FAT Data Area). |
| [out] | apDirEntryCluster | holder for found parent directory cluster containing the entry of the file specified in the path. If the file was not found, then this value is set to 0xFFFFFFF. |
| [out] | apDirEntryInCluster | the 32 byte index in the dir_entry_cluster containing the location of the file specified. If the file was not found, then this value is set to 0xFFFFFFFF. |
| [out] | apFileEntry | a copy of the file entry infromation from the parent directory file, this information is not modified if the file is not found. |
| int FAT_createdirent | ( | const char * | apNewPath, | |
| tsFATDevData * | apDevData | |||
| ) |
Given a path to a non-existent entry in a directory, this function creates a new subdirectory at the provided path.
| [in] | apNewPath | pointer to null terminated path to the directory |
| [in] | apDevData | FAT interface device data structure |
| int FAT_GetNextCluster | ( | tsFATDevData * | apDevData, | |
| int | anCluster | |||
| ) |
Find the Next Cluster In the Chain.
| [in] | apDevData | FAT interface device data structure |
| [in] | anCluster | Current cluster number |
| int FAT_UpdateDirEntry | ( | tsFATFileData * | apFileData | ) |
Updates Directory Data based on current file structure (cached) information.
| [in] | apFileData | Pointer to file data |
| int FAT_CountFreeClusters | ( | tsFATDevData * | apDevData | ) |
Count free clusters on the FAT Table.
| [in] | apDevData | Pointer to file system driver |
| int FAT_TruncateCluster | ( | tsFATDevData * | apDevData, | |
| int | anCluster | |||
| ) |
Mark the current cluster as the end of chain, and free all following clusters.
| [in] | apDevData | Pointer to file system driver |
| [in] | anCluster | The head of the chain of clusters to truncate. |
| int FAT_FreeCluster | ( | tsFATDevData * | apDevData, | |
| int | anCluster | |||
| ) |
Free a chain of clusters in the FAT Table.
| [in] | apDevData | Pointer to file system driver |
| [in] | anCluster | The head of the chain of clusters to free. |
| int FAT_GetFreeCluster | ( | tsFATDevData * | apDevData, | |
| int | anChainedCluster | |||
| ) |
Find a free cluster on the FAT Table and Mark it used with EOC.
| [in] | apDevData | Pointer to file system driver |
| [in] | anChainedCluster | If non-zero, the cluster entry provided will be linked to the newly found free cluster (for file growth) |
| int FAT_open | ( | const char * | apPath, | |
| unsigned int | anFlags, | |||
| int | anFileno, | |||
| tsFATDevData * | apDevData | |||
| ) |
Attempt to open an existing file or create a new file at the given path.
Flags indicate actions to be taken.
| [in] | apPath | The complete file path. |
| [in] | anFlags | Flags to control actions (O_WRONLY | O_CREAT | O_TRUNC | O_APPEND) |
| [in] | anFileno | Internal file descriptor for opened file. |
| [in] | apDevData | Pointer to file system driver |
| int FAT_close | ( | int | anFileno | ) |
Close a file descriptor assocaited with a FAT device.
| [in] | anFileno | Internal file descriptor for opened file. |
| int FAT_read | ( | int | anFileno, | |
| char * | apBuffer, | |||
| unsigned int | anCount | |||
| ) |
Read implementation for a FAT filesystem.
This routine will up to the specified byte count to the provided buffer from the file referenced by the anFileno file descriptor.
| [in] | anFileno | Internal file descriptor for opened file. |
| [in] | apBuffer | Pointer to data to store read data |
| [in] | anCount | Number of bytes to read from device |
| int FAT_write | ( | int | anFileno, | |
| const char * | apBuffer, | |||
| unsigned int | anCount | |||
| ) |
Write implementation for a FAT filesystem.
This routine will write count bytes in buffer to the file reference by the anFileno file descriptor.
| [in] | anFileno | Internal file descriptor for opened file. |
| [in] | apBuffer | Pointer to data to write. |
| [in] | anCount | Number of bytes to write to device |
| off_t FAT_lseek | ( | int | anFileno, | |
| off_t | anOffset, | |||
| int | aeOrigin | |||
| ) |
FAT driver lseek implementation.
| [in] | anFileno | Internal file descriptor for opened file. |
| [in] | anOffset | Byte offset from provided origin. |
| [in] | aeOrigin | SEEK_SET, SEEK_CUR, or SEEK_END. |
| int FAT_unlink | ( | const char * | apPath, | |
| tsFATDevData * | apDevData | |||
| ) |
Delete a file.
| [in] | apPath | Pointer to null terminated path to file |
| [in] | apDevData | FAT interface device data structure |
| int FAT_rename | ( | const char * | apOldPath, | |
| const char * | apNewPath, | |||
| tsFATDevData * | apDevData | |||
| ) |
Rename a file on a FAT device.
| [in] | apOldPath | Pointer to null terminated path to current file |
| [in] | apNewPath | Pointer to null terminated new path for file |
| [in] | apDevData | FAT interface device data structure |
| int FAT_gettime | ( | unsigned int * | apYear, | |
| unsigned int * | apMonth, | |||
| unsigned int * | apDay, | |||
| unsigned int * | apHours, | |||
| unsigned int * | apMinutes, | |||
| unsigned int * | apSeconds, | |||
| unsigned int * | apHundredths | |||
| ) |
Default time callback, used when access to a RTC device is not provided to the FAT filesystem driver.
It uses the system tick timer to compute a date based on the tick count, offset from midnight on January 1, 2000.
| [out] | apYear | Location to store RTC year (1980-20??) |
| [out] | apMonth | Location to store RTC month (1-12) |
| [out] | apDay | Location to store RTC day (1-31) |
| [out] | apHours | Location to store RTC hour (0-23) |
| [out] | apMinutes | Location to store RTC minutes (0-59) |
| [out] | apSeconds | Location to store RTC seconds (0-59) |
| [out] | apHundredths | Location to store RTC 1/100's seconds (0-99) |
| tsFATFileData gpFileData[MAX_FILENO] |
data needed for each file descriptor
char FAT_valid_chars[128] [static] |
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, '!', 0, '#', '$', '%', '&','\'', '(', ')', 0, 0, 0, '-', 0, 0,
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 0, 0, 0, 0, 0, 0,
'@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 0, 0, 0, '^', '_',
'`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', 0, '}', '~', 0
}