RUI3 (RAK Unified Interface 3) - RAK4631
service_fs.h
Go to the documentation of this file.
1 
9 #ifndef __SERVICE_FILESYSTEM_H__
10 #define __SERVICE_FILESYSTEM_H__
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 #include <stdint.h>
17 #include <stdbool.h>
18 #include "ff.h"
19 #include "spiffs.h"
20 
21 #ifdef SUPPORT_SDC
22 #define SERVICE_FS_SDC_PATH_PREFIX "/sdcard/"
23 #endif
24 
25 #define SERVICE_FS_PATH_MAX_LEN 256
26 
27 #define SERVICE_FS_O_APPEND SPIFFS_APPEND
28 #define SERVICE_FS_O_TRUNC SPIFFS_TRUNC
29 #define SERVICE_FS_O_CREAT SPIFFS_CREAT
30 #define SERVICE_FS_O_RDONLY SPIFFS_RDONLY
31 #define SERVICE_FS_O_WRONLY SPIFFS_WRONLY
32 #define SERVICE_FS_O_RDWR SPIFFS_RDWR
33 #define SERVICE_FS_O_DIRECT SPIFFS_DIRECT
34 #define SERVICE_FS_O_EXCL SPIFFS_EXCL
35 
36 #ifdef SUPPORT_SDC
37 #define SERVICE_FS_DISK_ERR FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */
38 #define SERVICE_FS_INT_ERR FR_INT_ERR, /* (2) Assertion failed */
39 #define SERVICE_FS_NOT_READY FR_NOT_READY, /* (3) The physical drive cannot work */
40 #define SERVICE_FS_NO_FILE FR_NO_FILE, /* (4) Could not find the file */
41 #define SERVICE_FS_NO_PATH FR_NO_PATH, /* (5) Could not find the path */
42 #define SERVICE_FS_INVALID_NAME FR_INVALID_NAME, /* (6) The path name format is invalid */
43 #define SERVICE_FS_DENIED FR_DENIED, /* (7) Access denied due to prohibited access or directory full */
44 #define SERVICE_FS_EXIST FR_EXIST, /* (8) Access denied due to prohibited access */
45 #define SERVICE_FS_INVALID_OBJECT FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */
46 #define SERVICE_FS_WRITE_PROTECTED FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */
47 #define SERVICE_FS_INVALID_DRIVE FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */
48 #define SERVICE_FS_NOT_ENABLED FR_NOT_ENABLED, /* (12) The volume has no work area */
49 #define SERVICE_FS_NO_FILESYSTEM FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */
50 #define SERVICE_FS_MKFS_ABORTED FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any problem */
51 #define SERVICE_FS_TIMEOUT FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
52 #define SERVICE_FS_LOCKED FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */
53 #define SERVICE_FS_NOT_ENOUGH_CORE FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
54 #define SERVICE_FS_TOO_MANY_OPEN_FILES FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > FF_FS_LOCK */
55 #define SERVICE_FS_INVALID_PARAMETER FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
56 #endif
57 
58 #define SERVICE_FS_OK SPIFFS_OK /* (0) Succeeded */
59 #define SERVICE_FS_ERR_NOT_MOUNTED SPIFFS_ERR_NOT_MOUNTED /* -10000 */
60 #define SERVICE_FS_ERR_FULL SPIFFS_ERR_FULL /* -10001 */
61 #define SERVICE_FS_ERR_NOT_FOUND SPIFFS_ERR_NOT_FOUND /* -10002 */
62 #define SERVICE_FS_ERR_END_OF_OBJECT SPIFFS_ERR_END_OF_OBJECT /* -10003 */
63 #define SERVICE_FS_ERR_DELETED SPIFFS_ERR_DELETED /* -10004 */
64 #define SERVICE_FS_ERR_NOT_FINALIZED SPIFFS_ERR_NOT_FINALIZED /* -10005 */
65 #define SERVICE_FS_ERR_NOT_INDEX SPIFFS_ERR_NOT_INDEX /* -10006 */
66 #define SERVICE_FS_ERR_OUT_OF_FILE_DESCS SPIFFS_ERR_OUT_OF_FILE_DESCS /* -10007 */
67 #define SERVICE_FS_ERR_FILE_CLOSED SPIFFS_ERR_FILE_CLOSED /* -10008 */
68 #define SERVICE_FS_ERR_FILE_DELETED SPIFFS_ERR_FILE_DELETED /* -10009 */
69 #define SERVICE_FS_ERR_BAD_DESCRIPTOR SPIFFS_ERR_BAD_DESCRIPTOR /* -10010 */
70 #define SERVICE_FS_ERR_IS_INDEX SPIFFS_ERR_IS_INDEX /* -10011 */
71 #define SERVICE_FS_ERR_IS_FREE SPIFFS_ERR_IS_FREE /* -10012 */
72 #define SERVICE_FS_ERR_INDEX_SPAN_MISMATCH SPIFFS_ERR_INDEX_SPAN_MISMATCH /* -10013 */
73 #define SERVICE_FS_ERR_DATA_SPAN_MISMATCH SPIFFS_ERR_DATA_SPAN_MISMATCH /* -10014 */
74 #define SERVICE_FS_ERR_INDEX_REF_FREE SPIFFS_ERR_INDEX_REF_FREE /* -10015 */
75 #define SERVICE_FS_ERR_INDEX_REF_LU SPIFFS_ERR_INDEX_REF_LU /* -10016 */
76 #define SERVICE_FS_ERR_INDEX_REF_INVALID SPIFFS_ERR_INDEX_REF_INVALID /* -10017 */
77 #define SERVICE_FS_ERR_INDEX_FREE SPIFFS_ERR_INDEX_FREE /* -10018 */
78 #define SERVICE_FS_ERR_INDEX_LU SPIFFS_ERR_INDEX_LU /* -10019 */
79 #define SERVICE_FS_ERR_INDEX_INVALID SPIFFS_ERR_INDEX_INVALID /* -10020 */
80 #define SERVICE_FS_ERR_NOT_WRITABLE SPIFFS_ERR_NOT_WRITABLE /* -10021 */
81 #define SERVICE_FS_ERR_NOT_READABLE SPIFFS_ERR_NOT_READABLE /* -10022 */
82 #define SERVICE_FS_ERR_CONFLICTING_NAME SPIFFS_ERR_CONFLICTING_NAME /* -10023 */
83 #define SERVICE_FS_ERR_NOT_CONFIGURED SPIFFS_ERR_NOT_CONFIGURED /* -10024 */
84 #define SERVICE_FS_ERR_NOT_A_FS SPIFFS_ERR_NOT_A_FS /* -10025 */
85 #define SERVICE_FS_ERR_MOUNTED SPIFFS_ERR_MOUNTED /* -10026 */
86 #define SERVICE_FS_ERR_ERASE_FAIL SPIFFS_ERR_ERASE_FAIL /* -10027 */
87 #define SERVICE_FS_ERR_MAGIC_NOT_POSSIBLE SPIFFS_ERR_MAGIC_NOT_POSSIBLE /* -10028 */
88 #define SERVICE_FS_ERR_NO_DELETED_BLOCKS SPIFFS_ERR_NO_DELETED_BLOCKS /* -10029 */
89 #define SERVICE_FS_ERR_FILE_EXISTS SPIFFS_ERR_FILE_EXISTS /* -10030 */
90 #define SERVICE_FS_ERR_NOT_A_FILE SPIFFS_ERR_NOT_A_FILE /* -10031 */
91 #define SERVICE_FS_ERR_RO_NOT_IMPL SPIFFS_ERR_RO_NOT_IMPL /* -10032 */
92 #define SERVICE_FS_ERR_RO_ABORTED_OPERATION SPIFFS_ERR_RO_ABORTED_OPERATION /* -10033 */
93 #define SERVICE_FS_ERR_PROBE_TOO_FEW_BLOCKS SPIFFS_ERR_PROBE_TOO_FEW_BLOCKS /* -10034 */
94 #define SERVICE_FS_ERR_PROBE_NOT_A_FS SPIFFS_ERR_PROBE_NOT_A_FS /* -10035 */
95 #define SERVICE_FS_ERR_NAME_TOO_LONG SPIFFS_ERR_NAME_TOO_LONG /* -10036 */
96 #define SERVICE_FS_ERR_IX_MAP_UNMAPPED SPIFFS_ERR_IX_MAP_UNMAPPED /* -10037 */
97 #define SERVICE_FS_ERR_IX_MAP_MAPPED SPIFFS_ERR_IX_MAP_MAPPED /* -10038 */
98 #define SERVICE_FS_ERR_IX_MAP_BAD_RANGE SPIFFS_ERR_IX_MAP_BAD_RANGE /* -10039 */
99 #define SERVICE_FS_ERR_SEEK_BOUNDS SPIFFS_ERR_SEEK_BOUNDS /* -10040 */
100 #define SERVICE_FS_ERR_INTERNAL SPIFFS_ERR_INTERNAL /* -10050 */
101 #define SERVICE_FS_ERR_TEST SPIFFS_ERR_TEST /* -10100 */
102 #define SERVICE_FS_ERR_CONTINUE (-20000) /* -20000 */
103 
104 typedef enum {
106 #ifdef SUPPORT_SDC
107  SERVICE_FS_SDC_TYPE,
108 #endif
110 
111 typedef struct {
112  int32_t ferrno;
113  SERVICE_FS_FILE_TYPE ftype;
114  union {
115  spiffs_file file;
116 #ifdef SUPPORT_SDC
117  FIL sdfile;
118 #endif
119  };
121  bool active;
123 
124 typedef struct {
125  SERVICE_FS_FILE_TYPE ftype;
126  union {
127  spiffs_stat fstat;
128 #ifdef SUPPORT_SDC
129  FILINFO sdfstat;
130 #endif
131  };
132  unsigned long long fsize;
134 
135 typedef struct {
136  int32_t derrno;
137  SERVICE_FS_FILE_TYPE dtype;
138  union {
139  spiffs_DIR dir;
140 #ifdef SUPPORT_SDC
141  DIR sddir;
142 #endif
143  };
146 
147 typedef struct {
148  SERVICE_FS_FILE_TYPE type;
149  union {
150  struct spiffs_dirent dirent;
151 #ifdef SUPPORT_SDC
152  FILINFO sddirent;
153 #endif
154  };
155  char *name;
156  unsigned long long size;
157  uint32_t total;
158  uint32_t used;
160 
161 typedef void* SERVICE_FS;
162 
163 int32_t service_fs_ferrno(SERVICE_FS_FILE file);
164 int32_t service_fs_derrno(SERVICE_FS_DIR dir);
165 SERVICE_FS service_fs_init(void);
166 SERVICE_FS service_fs_reset(void);
167 int32_t service_fs_list(SERVICE_FS fs, SERVICE_FS_DIR *d, SERVICE_FS_DIRENT *entry);
168 SERVICE_FS_FILE service_fs_open(SERVICE_FS fs, const char* path, uint32_t flags, uint32_t mode);
169 int32_t service_fs_read(SERVICE_FS fs, SERVICE_FS_FILE file, void* buf, uint32_t len);
170 int32_t service_fs_write(SERVICE_FS fs, SERVICE_FS_FILE file, void* buf, uint32_t len);
171 int32_t service_fs_lseek(SERVICE_FS fs, SERVICE_FS_FILE file, int32_t offs, uint32_t whence);
172 int32_t service_fs_remove(SERVICE_FS fs, const char* path);
173 int32_t service_fs_fremove(SERVICE_FS fs, SERVICE_FS_FILE file);
174 int32_t service_fs_stat(SERVICE_FS fs, const char* path, SERVICE_FS_FILE_STAT* stat);
175 int32_t service_fs_fstat(SERVICE_FS fs, SERVICE_FS_FILE file, SERVICE_FS_FILE_STAT* stat);
176 int32_t service_fs_flush(SERVICE_FS fs, SERVICE_FS_FILE file);
177 int32_t service_fs_close(SERVICE_FS fs, SERVICE_FS_FILE file);
178 int32_t service_fs_rename(SERVICE_FS fs, const char* old_name, const char* new_name);
179 int32_t service_fs_opendir(SERVICE_FS fs, const char* name, SERVICE_FS_DIR* d);
180 int32_t service_fs_closedir(SERVICE_FS fs, SERVICE_FS_DIR* d);
182 int32_t service_fs_feof(SERVICE_FS fs, SERVICE_FS_FILE file);
183 int32_t service_fs_ftell(SERVICE_FS fs, SERVICE_FS_FILE file);
184 
185 #ifdef __cplusplus
186 }
187 #endif
188 
189 #endif // __SERVICE_FILESYSTEM_H__
190 
int32_t service_fs_lseek(SERVICE_FS fs, SERVICE_FS_FILE file, int32_t offs, uint32_t whence)
SERVICE_FS service_fs_init(void)
Definition: service_fs.h:135
int32_t service_fs_opendir(SERVICE_FS fs, const char *name, SERVICE_FS_DIR *d)
unsigned long long size
Definition: service_fs.h:156
int32_t service_fs_read(SERVICE_FS fs, SERVICE_FS_FILE file, void *buf, uint32_t len)
SERVICE_FS_FILE_TYPE ftype
Definition: service_fs.h:125
SERVICE_FS_FILE_TYPE ftype
Definition: service_fs.h:113
SERVICE_FS_FILE_TYPE type
Definition: service_fs.h:148
spiffs_DIR dir
Definition: service_fs.h:139
int32_t service_fs_fremove(SERVICE_FS fs, SERVICE_FS_FILE file)
spiffs_stat fstat
Definition: service_fs.h:127
int32_t service_fs_ftell(SERVICE_FS fs, SERVICE_FS_FILE file)
char * name
Definition: service_fs.h:155
SERVICE_FS_FILE service_fs_open(SERVICE_FS fs, const char *path, uint32_t flags, uint32_t mode)
void * SERVICE_FS
Definition: service_fs.h:161
int32_t service_fs_stat(SERVICE_FS fs, const char *path, SERVICE_FS_FILE_STAT *stat)
int32_t service_fs_write(SERVICE_FS fs, SERVICE_FS_FILE file, void *buf, uint32_t len)
int32_t service_fs_flush(SERVICE_FS fs, SERVICE_FS_FILE file)
Definition: service_fs.h:111
uint32_t total
Definition: service_fs.h:157
int32_t service_fs_ferrno(SERVICE_FS_FILE file)
Definition: service_fs.h:124
int32_t service_fs_remove(SERVICE_FS fs, const char *path)
uint32_t used
Definition: service_fs.h:158
SERVICE_FS_FILE_TYPE
Definition: service_fs.h:104
Definition: service_fs.h:105
int32_t service_fs_list(SERVICE_FS fs, SERVICE_FS_DIR *d, SERVICE_FS_DIRENT *entry)
Definition: service_fs.h:147
int32_t service_fs_close(SERVICE_FS fs, SERVICE_FS_FILE file)
int32_t service_fs_derrno(SERVICE_FS_DIR dir)
int32_t service_fs_fstat(SERVICE_FS fs, SERVICE_FS_FILE file, SERVICE_FS_FILE_STAT *stat)
SERVICE_FS service_fs_reset(void)
spiffs_file file
Definition: service_fs.h:115
SERVICE_FS_DIRENT * service_fs_readdir(SERVICE_FS fs, SERVICE_FS_DIR *d, SERVICE_FS_DIRENT *e)
int32_t derrno
Definition: service_fs.h:136
int32_t ferrno
Definition: service_fs.h:112
int32_t service_fs_rename(SERVICE_FS fs, const char *old_name, const char *new_name)
struct _SERVICE_FS_FILE * SERVICE_FS_FILE
#define SERVICE_FS_PATH_MAX_LEN
Definition: service_fs.h:25
unsigned long long fsize
Definition: service_fs.h:132
SERVICE_FS_FILE_TYPE dtype
Definition: service_fs.h:137
int32_t service_fs_feof(SERVICE_FS fs, SERVICE_FS_FILE file)
int32_t service_fs_closedir(SERVICE_FS fs, SERVICE_FS_DIR *d)
bool active
Definition: service_fs.h:121