/* * FreeRTOS+FAT V2.3.3 * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * https://www.FreeRTOS.org * https://github.com/FreeRTOS * */ /** * @file ff_file.h * @ingroup FILEIO **/ #ifndef _FF_FILE_H_ #define _FF_FILE_H_ #ifndef PLUS_FAT_H #error this header will be included from "ff_headers.h" #endif #define FF_SEEK_SET 0 #define FF_SEEK_CUR 1 #define FF_SEEK_END 2 #if ( ffconfigOPTIMISE_UNALIGNED_ACCESS != 0 ) #define FF_BUFSTATE_INVALID 0x00 /* Data in file handle buffer is invalid. */ #define FF_BUFSTATE_VALID 0x01 /* Valid data in pBuf (Something has been read into it). */ #define FF_BUFSTATE_WRITTEN 0x02 /* Data was written into pBuf, this must be saved when leaving sector. */ #endif #if ( ffconfigDEV_SUPPORT != 0 ) struct xDEV_NODE { uint8_t ucIsDevice; }; #endif typedef struct _FF_FILE { FF_IOManager_t * pxIOManager; /* Ioman Pointer! */ uint32_t ulFileSize; /* File's Size. */ uint32_t ulObjectCluster; /* File's Start Cluster. */ uint32_t ulChainLength; /* Total Length of the File's cluster chain. */ uint32_t ulCurrentCluster; /* Prevents FAT Thrashing. */ uint32_t ulAddrCurrentCluster; /* Address of the current cluster. */ uint32_t ulEndOfChain; /* Address of the last cluster in the chain. */ uint32_t ulFilePointer; /* Current Position Pointer. */ uint32_t ulDirCluster; /* Cluster Number that the Dirent is in. */ uint32_t ulValidFlags; /* Handle validation flags. */ #if ( ffconfigOPTIMISE_UNALIGNED_ACCESS != 0 ) uint8_t * pucBuffer; /* A buffer for providing fast unaligned access. */ uint8_t ucState; /* State information about the buffer. */ #endif uint8_t ucMode; /* Mode that File Was opened in. */ uint16_t usDirEntry; /* Dirent Entry Number describing this file. */ #if ( ffconfigDEV_SUPPORT != 0 ) struct SFileCache * pxDevNode; #endif struct _FF_FILE * pxNext; /* Pointer to the next file object in the linked list. */ } FF_FILE; #define FF_VALID_FLAG_INVALID 0x00000001 #define FF_VALID_FLAG_DELETED 0x00000002 /*---------- PROTOTYPES */ /* PUBLIC (Interfaces): */ #if ( ffconfigUNICODE_UTF16_SUPPORT != 0 ) FF_FILE * FF_Open( FF_IOManager_t * pxIOManager, const FF_T_WCHAR * path, uint8_t Mode, FF_Error_t * pError ); BaseType_t FF_isDirEmpty( FF_IOManager_t * pxIOManager, const FF_T_WCHAR * Path ); FF_Error_t FF_RmFile( FF_IOManager_t * pxIOManager, const FF_T_WCHAR * path ); FF_Error_t FF_RmDir( FF_IOManager_t * pxIOManager, const FF_T_WCHAR * path ); FF_Error_t FF_Move( FF_IOManager_t * pxIOManager, const FF_T_WCHAR * szSourceFile, const FF_T_WCHAR * szDestinationFile, BaseType_t bDeleteIfExists ); #else /* ffconfigUNICODE_UTF16_SUPPORT */ FF_FILE * FF_Open( FF_IOManager_t * pxIOManager, const char * path, uint8_t Mode, FF_Error_t * pError ); BaseType_t FF_isDirEmpty( FF_IOManager_t * pxIOManager, const char * Path ); FF_Error_t FF_RmFile( FF_IOManager_t * pxIOManager, const char * path ); FF_Error_t FF_RmDir( FF_IOManager_t * pxIOManager, const char * path ); FF_Error_t FF_Move( FF_IOManager_t * pxIOManager, const char * szSourceFile, const char * szDestinationFile, BaseType_t bDeleteIfExists ); #endif /* ffconfigUNICODE_UTF16_SUPPORT */ #if ( ffconfigTIME_SUPPORT != 0 ) enum { ETimeCreate = 1, ETimeMod = 2, ETimeAccess = 4, ETimeAll = 7 }; FF_Error_t FF_SetFileTime( FF_FILE * pFile, FF_SystemTime_t * pxTime, UBaseType_t uxWhat ); #if ( ffconfigUNICODE_UTF16_SUPPORT != 0 ) FF_Error_t FF_SetTime( FF_IOManager_t * pxIOManager, const FF_T_WCHAR * path, FF_SystemTime_t * pxTime, UBaseType_t uxWhat ); #else FF_Error_t FF_SetTime( FF_IOManager_t * pxIOManager, const char * path, FF_SystemTime_t * pxTime, UBaseType_t uxWhat ); #endif /* ffconfigUNICODE_UTF16_SUPPORT */ #endif /* ffconfigTIME_SUPPORT */ #if ( ffconfigUNICODE_UTF16_SUPPORT != 0 ) FF_Error_t FF_SetPerm( FF_IOManager_t * pxIOManager, const FF_T_WCHAR * path, UBaseType_t aPerm ); #else FF_Error_t FF_SetPerm( FF_IOManager_t * pxIOManager, const char * path, UBaseType_t aPerm ); #endif FF_Error_t FF_SetEof( FF_FILE * pFile ); FF_Error_t FF_Close( FF_FILE * pFile ); int32_t FF_GetC( FF_FILE * pFile ); int32_t FF_GetLine( FF_FILE * pFile, char * szLine, uint32_t ulLimit ); int32_t FF_Read( FF_FILE * pFile, uint32_t ElementSize, uint32_t Count, uint8_t * buffer ); int32_t FF_Write( FF_FILE * pFile, uint32_t ElementSize, uint32_t Count, uint8_t * buffer ); BaseType_t FF_isEOF( FF_FILE * pFile ); int32_t FF_BytesLeft( FF_FILE * pFile ); /* Returns # of bytes left to read. */ /* FF_FileSize is an earlier version of FF_GetFileSize(). For files * equal to or larger than 2GB, the return value is negative. * Function is deprecated. Please use FF_GetFileSize(). */ int32_t FF_FileSize( FF_FILE * pFile ); /* Returns # of bytes in a file. */ /* Use the following function in case files may get larger than 2 GB. * Writes the size of a file to the parameter. * Returns 0 or error code. */ FF_Error_t FF_GetFileSize( FF_FILE * pFile, uint32_t * pulSize ); FF_Error_t FF_Seek( FF_FILE * pFile, int32_t Offset, BaseType_t xOrigin ); int32_t FF_PutC( FF_FILE * pFile, uint8_t Value ); static portINLINE uint32_t FF_Tell( FF_FILE * pFile ) { return pFile ? pFile->ulFilePointer : 0; } uint8_t FF_GetModeBits( const char * Mode ); FF_Error_t FF_CheckValid( FF_FILE * pFile ); /* Check if pFile is a valid FF_FILE pointer. */ #if ( ffconfigREMOVABLE_MEDIA != 0 ) int32_t FF_Invalidate( FF_IOManager_t * pxIOManager ); /* Invalidate all handles belonging to pxIOManager. */ #endif /* Private : */ #endif /* ifndef _FF_FILE_H_ */