123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- /******************************************************************************
- ** File Name: sfs.h *
- ** Author: *
- ** DATE: 8/16/2006 *
- ** Copyright: 2006 Spreatrum, Incoporated. All Rights Reserved. *
- ** Description: *
- ** this file define the struct and API of SFS. *
- ** (FAT File System) *
- ** *
- ******************************************************************************
- ******************************************************************************
- ** Edit History *
- ** ------------------------------------------------------------------------- *
- ** DATE NAME DESCRIPTION *
- ** 8/16/2006 Create. Jason.wu *
- ******************************************************************************/
- #ifndef _SFS_H_
- #define _SFS_H_
- /**---------------------------------------------------------------------------*
- ** Dependencies *
- **---------------------------------------------------------------------------*/
- #include "sci_types.h"
- #include "vfs.h"
- /**---------------------------------------------------------------------------*
- ** Compiler Flag *
- **---------------------------------------------------------------------------*/
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define SFS_IN
- #define SFS_OUT
- #define SFS_INOUT
- /*============================================================================
- Define basic data types:
- ==============================================================================*/
- typedef uint32 SFS_HANDLE;
- typedef enum SFS_ERROR_E_TAG
- {
- /**------------------------------------------------------------------*
- ** SFS error code(0-999) *
- **------------------------------------------------------------------*/
- // 0-1000 is reserved by sfs file system
- SFS_NO_ERROR = 0, //success
- SFS_ERROR_NONE = 0,
- SFS_ERROR_DEVICE = 1, //device error
- SFS_ERROR_SYSTEM = 2, //os error, memory overwrite, memory error.or other unlogic error.
- SFS_ERROR_INVALID_PARAM = 3, //param you give is invalid
- SFS_ERROR_NO_ENOUGH_RESOURCE = 4, //no use
- SFS_ERROR_IO_PENDING = 5, //when you call api in asynchronism ,api will return SFS_ERROR_IO_PENDING immediately.Real error message and return value will be given in callback funtion.
- SFS_ERROR_ACCESS = 6, //can not access the file ,maybe it is being used by other handler. or read data that not exist
- SFS_ERROR_NOT_EXIST = 7, // file or device not exist
- SFS_ERROR_HAS_EXIST = 8, // file or device has exist
- SFS_ERROR_HARDWARE_FAILED = 9, // no use
- SFS_ERROR_WRITE_CONFLICT = 10, // no use
- SFS_ERROR_NO_SPACE = 11,
- SFS_ERROR_NOT_EMPTY = 20, // folder not empty.
- SFS_ERROR_LONG_DEPTH = 21, // copy tree or move tree , has exceed too many folder.
- SFS_ERROR_FOLD_FULL = 22, // fold entry is not enough to add new file or fold in it
- SFS_ERROR_ABORT = 23, // copy or move process is cancelled.
- SFS_ERROR_NORES_HANDLE = 24, // no handle resource for open new file
- SFS_ERROR_BUSY = 25, // current sfs task is busy(formating or mountring)
- SFS_ERROR_INVALID_FORMAT = 26,
- SFS_ERROR_TOOMANYFILE = 27,
- /**------------------------------------------------------------------*
- ** DRM error code(1000-1199) *
- **------------------------------------------------------------------*/
- SFS_ERROR_DRM_ACCESS_DENIED = 1000, // @681, operation not allowed
- SFS_ERROR_DRM_NORMAL_FILE = 1001, // file is normal
- SFS_ERROR_DRM_NO_RIGHTS = 1002, // no rights
- SFS_ERROR_DRM_RIGHTS_EXPIRED = 1003, // rights expired
- SFS_ERROR_DRM_INVALID_RIGHTS = 1004, // rights file is invalid
- SFS_ERROR_DRM_INVALID_FORMAT = 1005, // DRM file format is invalid
- SFS_ERROR_INVALID_HANDLE = 1006
- /**------------------------------------------------------------------*
- ** reserved error code(1200-0xFFFFFFFF) *
- **------------------------------------------------------------------*/
- // if you want to add error code here please inform it to midware group. Jason.wu
- } SFS_ERROR_E;
- typedef enum SFS_DEVICE_FORMAT_E_TAG
- {
- SFS_FAT12_FORMAT = 0,
- SFS_FAT16_FORMAT = 1,
- SFS_FAT32_FORMAT = 2,
- SFS_AUTO_FORMAT = 6,
- SFS_OTHER_FORMAT = 7,
- SFS_UNKNOWN_FORMAT
- } SFS_DEVICE_FORMAT_E;
- /*
- Seek Macro define.
- */
- #define SFS_SEEK_BEGIN 0 /*Beginning of file */
- #define SFS_SEEK_CUR 1 /*Current position of file */
- #define SFS_SEEK_END 2 /*End of file */
- #define SFS_MAX_PATH 255
- /**---------------------------------------------------------------------------*
- ** Overlapped struct *
-
- completed-route :
- void CALLBACK FileIOCompletionRoutine(
- SFS_ERROR_E error, // error code of the relative opration.
- SFS_PARAM irp_param, // the param set by user.
- SFS_PARAM param1, // result of the relative operation.
- SFS_PARAM param1) // result of the relative operation.
- **---------------------------------------------------------------------------*/
- typedef uint32 SFS_PARAM;
- typedef void (*SFS_COMPLETETION_ROUTINE)(SFS_ERROR_E error, uint32 irp_param, uint32 param1, uint32 param2);
- typedef struct SFS_OVERLAPPED_tag
- {
- SFS_COMPLETETION_ROUTINE complete_route; //the point to callback function.
- SFS_PARAM param; //the param set by user,it canbe anything,it will be passed to callbackfun without modify
- } SFS_OVERLAPPED_T;
- /**------------------------------------------------------------------*
- ** SFS operation Mode(bit0-bit4) *
- ** only have 6 group can be used: *
- ** 1 SFS_MODE_READ *
- ** 2 SFS_MODE_WRITE *
- ** 3 SFS_MODE_READ|SFS_MODE_WRITE *
- ** 4 SFS_MODE_SHARE_READ *
- ** 5 SFS_MODE_SHARE_WRITE *
- ** 6 SFS_MODE_SHARE_READ|SFS_MODE_SHARE_WRITE *
- ** *
- **------------------------------------------------------------------*/
- #define SFS_MODE_READ ((uint32)(0x1 << 0))
- #define SFS_MODE_WRITE ((uint32)(0x1 << 1))
- #define SFS_MODE_SHARE_READ ((uint32)(0x1 << 2))
- #define SFS_MODE_SHARE_WRITE ((uint32)(0x1 << 3))
- /**------------------------------------------------------------------*
- ** SFS access Mode(bit4-bit7) *
- ** only have following choice: *
- **------------------------------------------------------------------*/
- #define SFS_MODE_CREATE_NEW ((uint32)(0x1 << 4))
- #define SFS_MODE_CREATE_ALWAYS ((uint32)(0x2 << 4))
- #define SFS_MODE_OPEN_EXISTING ((uint32)(0x3 << 4))
- #define SFS_MODE_OPEN_ALWAYS ((uint32)(0x4 << 4))
- #define SFS_MODE_APPEND ((uint32)(0x5 << 4))
- /**------------------------------------------------------------------*
- ** SFS DRM access Mode(bit8-bit12) *
- ** only have following choice: *
- **------------------------------------------------------------------*/
- #define SFS_MODE_DRM_READ ((uint32)(0x1 << 8))
- #define SFS_MODE_DRM_PLAY ((uint32)(0x2 << 8))
- #define SFS_MODE_DRM_DISPLAY ((uint32)(0x3 << 8))
- #define SFS_MODE_DRM_EXECUTE ((uint32)(0x4 << 8))
- #define SFS_MODE_DRM_PRINT ((uint32)(0x5 << 8))
- /*
- Find Data Define.
- The receives information about the found file.
- */
- typedef struct
- {
- uint8 mday; // day of the month - [1,31]
- uint8 mon; // months - [1,12]
- uint16 year; // years [1980,2107]
- } SFS_DATE_T;
- typedef struct
- {
- uint8 sec; // secondsafter the minute - [0,59]
- uint8 min; // minutesafter the hour - [0,59]
- uint8 hour; // hours since midnight - [0,23]
- } SFS_TIME_T;
- typedef struct SFS_FIND_DATA_TAG
- {
- SFS_DATE_T create_Date;
- SFS_TIME_T create_time;
- SFS_DATE_T modify_Date;
- SFS_TIME_T modify_time;
- SFS_DATE_T access_date;
- uint16 attr; // see FFS_ATTR_E.
- uint32 length;
- uint16 name[SFS_MAX_PATH + 1];
- uint8 short_name[13];
- } SFS_FIND_DATA_T;
- //fat attribute bits
- //the value of SFS_FIND_DATA_T->attr,you can use it to identify the file
- #define SFS_ATTR_NONE 0x0 /* no attribute bits */
- #define SFS_ATTR_RO 0x1 /* read-only */
- #define SFS_ATTR_HIDDEN 0x2 /* hidden */
- #define SFS_ATTR_SYS 0x4 /* system */
- #define SFS_ATTR_VOLUME 0x8 /* volume label */ //reserved : you can not use it
- #define SFS_ATTR_DIR 0x10 /* directory */ //can not used in SFS_SetAttr()
- #define SFS_ATTR_ARCH 0x20 /* archived */
- /**---------------------------------------------------------------------------*
- // Function Prototypes
- **---------------------------------------------------------------------------*/
- /*****************************************************************************/
- // Description: Create a directory
- // Author:
- // Param
- // path:The name of path you want to create ,must be unicode string
- // Return:
- // SFS_ERROR_NONE: Success
- // Other: Fail
- // Note:
- /*****************************************************************************/
- SFS_ERROR_E SFS_CreateDirectory(const uint16 *path);
- /*****************************************************************************/
- // Description: Create or open a file
- // Author: Jason.wu
- // Param
- // file_name :The name of path and file ,must be unicode string
- // access_mode:please refer to "Open/Create flag "
- // share_mode:reserved
- // file_attri:reserved
- // Return:
- // None zero: Success,this value is the handle of file
- // Zero: fail
- // Note:
- /*****************************************************************************/
- SFS_HANDLE SFS_CreateFile(
- const uint16 *file_name,
- uint32 access_mode,
- uint32 share_mode, //Must be NULL,File System have not realize it
- uint32 file_attri //Must be NULL,File System have not realize it
- );
- /*****************************************************************************/
- // Description: Write file
- // Author:
- // Param
- // sfs_handle:The handle returned by SFS_CreateFile
- // buffer:The data will be writen is stored in this buffer
- // bytes_to_write:the number you want to write ,unit is byte
- // bytes_written:the number you has be write infact
- // overlapped:asynchronism param,if you give this parm,the result value will be returned in callback funtion
- // Return:
- // SFS_ERROR_NONE: Success
- // SFS_ERROR_IO_PENDING:if you call it in asynchronism way,the real result will be given in callback funtion after SFS finish the command
- // Other: Fail
- // Note:
- /*****************************************************************************/
- SFS_ERROR_E SFS_WriteFile(
- SFS_HANDLE handle,
- const void *buffer,
- uint32 bytes_to_write,
- uint32 *bytes_written,
- SFS_OVERLAPPED_T *overlapped);
- /*****************************************************************************/
- // Description: Read file
- // Author:
- // Param
- // sfs_handle:The handle returned by SFS_CreateFile
- // buffer:The data has be read will stored in this buffer
- // bytes_to_read:the number you want to read ,unit is byte
- // bytes_read:the number you has be read infact
- // overlapped:asynchronism param,if you give this parm,the result value will be returned in callback funtion
- // Return:
- // SFS_ERROR_NONE: Success
- // SFS_ERROR_IO_PENDING:if you call it in asynchronism way,the real result will be given in callback funtion after SFS finish the command
- // Other: Fail
- // Note:
- /*****************************************************************************/
- SFS_ERROR_E SFS_ReadFile(
- SFS_HANDLE handle,
- void *buffer,
- uint32 bytes_to_read,
- uint32 *bytes_read,
- SFS_OVERLAPPED_T *overlapped);
- /*****************************************************************************/
- // Description: Flush file
- // Author:
- // Param
- // sfs_handle:The handle returned by SFS_CreateFile
- // overlapped:asynchronism param,if you give this parm,the result value will be returned in callback funtion
- // Return:
- // SFS_ERROR_NONE: Success
- // SFS_ERROR_IO_PENDING:if you call it in asynchronism way,the real result will be given in callback funtion after SFS finish the command
- // Other: Fail
- // Note:
- /*****************************************************************************/
- SFS_ERROR_E SFS_FlushFile(
- SFS_HANDLE handle,
- SFS_OVERLAPPED_T *overlapped);
- /*****************************************************************************/
- // Description: Close the handler returned by SFS_CreateFile
- // Author:
- // Param
- // sfs_handle:The handle returned by SFS_CreateFile
- // Return:
- // SFS_ERROR_NONE: Success
- // Other: Fail
- // Note:
- /*****************************************************************************/
- SFS_ERROR_E SFS_CloseFile(SFS_HANDLE handle);
- /**---------------------------------------------------------------------------*
- ** Compiler Flag *
- **---------------------------------------------------------------------------*/
- #ifdef __cplusplus
- }
- #endif
- #endif /*End FFS.h*/
|