Line data Source code
1 0 : /*
2 : * Copyright (c) 2020 Nordic Semiconductor ASA
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : #ifndef ZEPHYR_INCLUDE_FS_FS_SYS_H_
8 : #define ZEPHYR_INCLUDE_FS_FS_SYS_H_
9 :
10 : #ifdef __cplusplus
11 : extern "C" {
12 : #endif
13 :
14 : /**
15 : * @ingroup file_system_api
16 : * @{
17 : */
18 :
19 : /**
20 : * @brief File System interface structure
21 : */
22 1 : struct fs_file_system_t {
23 : /**
24 : * @name File operations
25 : * @{
26 : */
27 : /**
28 : * Opens or creates a file, depending on flags given.
29 : *
30 : * @param filp File to open/create.
31 : * @param fs_path Path to the file.
32 : * @param flags Flags for opening/creating the file.
33 : * @return 0 on success, negative errno code on fail.
34 : */
35 1 : int (*open)(struct fs_file_t *filp, const char *fs_path,
36 : fs_mode_t flags);
37 : /**
38 : * Reads nbytes number of bytes.
39 : *
40 : * @param filp File to read from.
41 : * @param dest Destination buffer.
42 : * @param nbytes Number of bytes to read.
43 : * @return Number of bytes read on success, negative errno code on fail.
44 : */
45 1 : ssize_t (*read)(struct fs_file_t *filp, void *dest, size_t nbytes);
46 : /**
47 : * Writes nbytes number of bytes.
48 : *
49 : * @param filp File to write to.
50 : * @param src Source buffer.
51 : * @param nbytes Number of bytes to write.
52 : * @return Number of bytes written on success, negative errno code on fail.
53 : */
54 1 : ssize_t (*write)(struct fs_file_t *filp,
55 : const void *src, size_t nbytes);
56 : /**
57 : * Moves the file position to a new location in the file.
58 : *
59 : * @param filp File to move.
60 : * @param off Relative offset from the position specified by whence.
61 : * @param whence Position in the file. Possible values: SEEK_CUR, SEEK_SET, SEEK_END.
62 : * @return New position in the file or negative errno code on fail.
63 : */
64 1 : int (*lseek)(struct fs_file_t *filp, off_t off, int whence);
65 : /**
66 : * Retrieves the current position in the file.
67 : *
68 : * @param filp File to get the current position from.
69 : * @return Current position in the file or negative errno code on fail.
70 : */
71 1 : off_t (*tell)(struct fs_file_t *filp);
72 : /**
73 : * Truncates/expands the file to the new length.
74 : *
75 : * @param filp File to truncate/expand.
76 : * @param length New length of the file.
77 : * @return 0 on success, negative errno code on fail.
78 : */
79 1 : int (*truncate)(struct fs_file_t *filp, off_t length);
80 : /**
81 : * Flushes the cache of an open file.
82 : *
83 : * @param filp File to flush.
84 : * @return 0 on success, negative errno code on fail.
85 : */
86 1 : int (*sync)(struct fs_file_t *filp);
87 : /**
88 : * Flushes the associated stream and closes the file.
89 : *
90 : * @param filp File to close.
91 : * @return 0 on success, negative errno code on fail.
92 : */
93 1 : int (*close)(struct fs_file_t *filp);
94 : /** @} */
95 :
96 : /**
97 : * @name Directory operations
98 : * @{
99 : */
100 : /**
101 : * Opens an existing directory specified by the path.
102 : *
103 : * @param dirp Directory to open.
104 : * @param fs_path Path to the directory.
105 : * @return 0 on success, negative errno code on fail.
106 : */
107 1 : int (*opendir)(struct fs_dir_t *dirp, const char *fs_path);
108 : /**
109 : * Reads directory entries of an open directory.
110 : *
111 : * @param dirp Directory to read from.
112 : * @param entry Next directory entry in the dirp directory.
113 : * @return 0 on success, negative errno code on fail.
114 : */
115 1 : int (*readdir)(struct fs_dir_t *dirp, struct fs_dirent *entry);
116 : /**
117 : * Closes an open directory.
118 : *
119 : * @param dirp Directory to close.
120 : * @return 0 on success, negative errno code on fail.
121 : */
122 1 : int (*closedir)(struct fs_dir_t *dirp);
123 : /** @} */
124 :
125 : /**
126 : * @name File system level operations
127 : * @{
128 : */
129 : /**
130 : * Mounts a file system.
131 : *
132 : * @param mountp Mount point.
133 : * @return 0 on success, negative errno code on fail.
134 : */
135 1 : int (*mount)(struct fs_mount_t *mountp);
136 : /**
137 : * Unmounts a file system.
138 : *
139 : * @param mountp Mount point.
140 : * @return 0 on success, negative errno code on fail.
141 : */
142 1 : int (*unmount)(struct fs_mount_t *mountp);
143 : /**
144 : * Deletes the specified file or directory.
145 : *
146 : * @param mountp Mount point.
147 : * @param name Path to the file or directory to delete.
148 : * @return 0 on success, negative errno code on fail.
149 : */
150 1 : int (*unlink)(struct fs_mount_t *mountp, const char *name);
151 : /**
152 : * Renames a file or directory.
153 : *
154 : * @param mountp Mount point.
155 : * @param from Path to the file or directory to rename.
156 : * @param to New name of the file or directory.
157 : * @return 0 on success, negative errno code on fail.
158 : */
159 1 : int (*rename)(struct fs_mount_t *mountp, const char *from,
160 : const char *to);
161 : /**
162 : * Creates a new directory using specified path.
163 : *
164 : * @param mountp Mount point.
165 : * @param name Path to the directory to create.
166 : * @return 0 on success, negative errno code on fail.
167 : */
168 1 : int (*mkdir)(struct fs_mount_t *mountp, const char *name);
169 : /**
170 : * Checks the status of a file or directory specified by the path.
171 : *
172 : * @param mountp Mount point.
173 : * @param path Path to the file or directory.
174 : * @param entry Directory entry.
175 : * @return 0 on success, negative errno code on fail.
176 : */
177 1 : int (*stat)(struct fs_mount_t *mountp, const char *path,
178 : struct fs_dirent *entry);
179 : /**
180 : * Returns the total and available space on the file system volume.
181 : *
182 : * @param mountp Mount point.
183 : * @param path Path to the file or directory.
184 : * @param stat File system statistics.
185 : * @return 0 on success, negative errno code on fail.
186 : */
187 1 : int (*statvfs)(struct fs_mount_t *mountp, const char *path,
188 : struct fs_statvfs *stat);
189 : #if defined(CONFIG_FILE_SYSTEM_MKFS) || defined(__DOXYGEN__)
190 : /**
191 : * Formats a device to specified file system type.
192 : * Available only if @kconfig{CONFIG_FILE_SYSTEM_MKFS} is enabled.
193 : *
194 : * @param dev_id Device identifier.
195 : * @param cfg File system configuration.
196 : * @param flags Formatting flags.
197 : * @return 0 on success, negative errno code on fail.
198 : *
199 : * @note This operation destroys existing data on the target device.
200 : */
201 1 : int (*mkfs)(uintptr_t dev_id, void *cfg, int flags);
202 : #endif
203 : /** @} */
204 : };
205 :
206 : /**
207 : * @}
208 : */
209 :
210 : #ifdef __cplusplus
211 : }
212 : #endif
213 :
214 : #endif /* ZEPHYR_INCLUDE_FS_FS_SYS_H_ */
|