1 /**
2  * @file lv_port_fs_templ.c
3  *
4  */
5 
6 /*Copy this file as "lv_port_fs.c" and set this value to "1" to enable content*/
7 #if 0
8 
9 /*********************
10  *      INCLUDES
11  *********************/
12 #include "lv_port_fs_template.h"
13 #include "../../lvgl.h"
14 
15 /*********************
16  *      DEFINES
17  *********************/
18 
19 /**********************
20  *      TYPEDEFS
21  **********************/
22 
23 /**********************
24  *  STATIC PROTOTYPES
25  **********************/
26 static void fs_init(void);
27 
28 static void * fs_open(lv_fs_drv_t * drv, const char * path, lv_fs_mode_t mode);
29 static lv_fs_res_t fs_close(lv_fs_drv_t * drv, void * file_p);
30 static lv_fs_res_t fs_read(lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br);
31 static lv_fs_res_t fs_write(lv_fs_drv_t * drv, void * file_p, const void * buf, uint32_t btw, uint32_t * bw);
32 static lv_fs_res_t fs_seek(lv_fs_drv_t * drv, void * file_p, uint32_t pos, lv_fs_whence_t whence);
33 static lv_fs_res_t fs_size(lv_fs_drv_t * drv, void * file_p, uint32_t * size_p);
34 static lv_fs_res_t fs_tell(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p);
35 
36 static void * fs_dir_open(lv_fs_drv_t * drv, const char * path);
37 static lv_fs_res_t fs_dir_read(lv_fs_drv_t * drv, void * rddir_p, char * fn);
38 static lv_fs_res_t fs_dir_close(lv_fs_drv_t * drv, void * rddir_p);
39 
40 /**********************
41  *  STATIC VARIABLES
42  **********************/
43 
44 /**********************
45  * GLOBAL PROTOTYPES
46  **********************/
47 
48 /**********************
49  *      MACROS
50  **********************/
51 
52 /**********************
53  *   GLOBAL FUNCTIONS
54  **********************/
55 
56 void lv_port_fs_init(void)
57 {
58     /*----------------------------------------------------
59      * Initialize your storage device and File System
60      * -------------------------------------------------*/
61     fs_init();
62 
63     /*---------------------------------------------------
64      * Register the file system interface in LVGL
65      *--------------------------------------------------*/
66 
67     /*Add a simple drive to open images*/
68     static lv_fs_drv_t fs_drv;
69     lv_fs_drv_init(&fs_drv);
70 
71     /*Set up fields...*/
72     fs_drv.letter = 'P';
73     fs_drv.open_cb = fs_open;
74     fs_drv.close_cb = fs_close;
75     fs_drv.read_cb = fs_read;
76     fs_drv.write_cb = fs_write;
77     fs_drv.seek_cb = fs_seek;
78     fs_drv.tell_cb = fs_tell;
79 
80     fs_drv.dir_close_cb = fs_dir_close;
81     fs_drv.dir_open_cb = fs_dir_open;
82     fs_drv.dir_read_cb = fs_dir_read;
83 
84     lv_fs_drv_register(&fs_drv);
85 }
86 
87 /**********************
88  *   STATIC FUNCTIONS
89  **********************/
90 
91 /*Initialize your Storage device and File system.*/
92 static void fs_init(void)
93 {
94     /*E.g. for FatFS initialize the SD card and FatFS itself*/
95 
96     /*You code here*/
97 }
98 
99 /**
100  * Open a file
101  * @param drv       pointer to a driver where this function belongs
102  * @param path      path to the file beginning with the driver letter (e.g. S:/folder/file.txt)
103  * @param mode      read: FS_MODE_RD, write: FS_MODE_WR, both: FS_MODE_RD | FS_MODE_WR
104  * @return          a file descriptor or NULL on error
105  */
106 static void * fs_open(lv_fs_drv_t * drv, const char * path, lv_fs_mode_t mode)
107 {
108     lv_fs_res_t res = LV_FS_RES_NOT_IMP;
109 
110     void * f = NULL;
111 
112     if(mode == LV_FS_MODE_WR) {
113         /*Open a file for write*/
114         f = ...         /*Add your code here*/
115     }
116     else if(mode == LV_FS_MODE_RD) {
117         /*Open a file for read*/
118         f = ...         /*Add your code here*/
119     }
120     else if(mode == (LV_FS_MODE_WR | LV_FS_MODE_RD)) {
121         /*Open a file for read and write*/
122         f = ...         /*Add your code here*/
123     }
124 
125     return f;
126 }
127 
128 /**
129  * Close an opened file
130  * @param drv       pointer to a driver where this function belongs
131  * @param file_p    pointer to a file_t variable. (opened with fs_open)
132  * @return          LV_FS_RES_OK: no error or  any error from @lv_fs_res_t enum
133  */
134 static lv_fs_res_t fs_close(lv_fs_drv_t * drv, void * file_p)
135 {
136     lv_fs_res_t res = LV_FS_RES_NOT_IMP;
137 
138     /*Add your code here*/
139 
140     return res;
141 }
142 
143 /**
144  * Read data from an opened file
145  * @param drv       pointer to a driver where this function belongs
146  * @param file_p    pointer to a file_t variable.
147  * @param buf       pointer to a memory block where to store the read data
148  * @param btr       number of Bytes To Read
149  * @param br        the real number of read bytes (Byte Read)
150  * @return          LV_FS_RES_OK: no error or  any error from @lv_fs_res_t enum
151  */
152 static lv_fs_res_t fs_read(lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br)
153 {
154     lv_fs_res_t res = LV_FS_RES_NOT_IMP;
155 
156     /*Add your code here*/
157 
158     return res;
159 }
160 
161 /**
162  * Write into a file
163  * @param drv       pointer to a driver where this function belongs
164  * @param file_p    pointer to a file_t variable
165  * @param buf       pointer to a buffer with the bytes to write
166  * @param btw       Bytes To Write
167  * @param bw        the number of real written bytes (Bytes Written). NULL if unused.
168  * @return          LV_FS_RES_OK: no error or  any error from @lv_fs_res_t enum
169  */
170 static lv_fs_res_t fs_write(lv_fs_drv_t * drv, void * file_p, const void * buf, uint32_t btw, uint32_t * bw)
171 {
172     lv_fs_res_t res = LV_FS_RES_NOT_IMP;
173 
174     /*Add your code here*/
175 
176     return res;
177 }
178 
179 /**
180  * Set the read write pointer. Also expand the file size if necessary.
181  * @param drv       pointer to a driver where this function belongs
182  * @param file_p    pointer to a file_t variable. (opened with fs_open )
183  * @param pos       the new position of read write pointer
184  * @param whence    tells from where to interpret the `pos`. See @lv_fs_whence_t
185  * @return          LV_FS_RES_OK: no error or  any error from @lv_fs_res_t enum
186  */
187 static lv_fs_res_t fs_seek(lv_fs_drv_t * drv, void * file_p, uint32_t pos, lv_fs_whence_t whence)
188 {
189     lv_fs_res_t res = LV_FS_RES_NOT_IMP;
190 
191     /*Add your code here*/
192 
193     return res;
194 }
195 /**
196  * Give the position of the read write pointer
197  * @param drv       pointer to a driver where this function belongs
198  * @param file_p    pointer to a file_t variable.
199  * @param pos_p     pointer to to store the result
200  * @return          LV_FS_RES_OK: no error or  any error from @lv_fs_res_t enum
201  */
202 static lv_fs_res_t fs_tell(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p)
203 {
204     lv_fs_res_t res = LV_FS_RES_NOT_IMP;
205 
206     /*Add your code here*/
207 
208     return res;
209 }
210 
211 /**
212  * Initialize a 'lv_fs_dir_t' variable for directory reading
213  * @param drv       pointer to a driver where this function belongs
214  * @param path      path to a directory
215  * @return          pointer to the directory read descriptor or NULL on error
216  */
217 static void * fs_dir_open(lv_fs_drv_t * drv, const char * path)
218 {
219     void * dir = NULL;
220     /*Add your code here*/
221     dir = ...           /*Add your code here*/
222           return dir;
223 }
224 
225 /**
226  * Read the next filename form a directory.
227  * The name of the directories will begin with '/'
228  * @param drv       pointer to a driver where this function belongs
229  * @param rddir_p   pointer to an initialized 'lv_fs_dir_t' variable
230  * @param fn        pointer to a buffer to store the filename
231  * @return          LV_FS_RES_OK: no error or  any error from @lv_fs_res_t enum
232  */
233 static lv_fs_res_t fs_dir_read(lv_fs_drv_t * drv, void * rddir_p, char * fn)
234 {
235     lv_fs_res_t res = LV_FS_RES_NOT_IMP;
236 
237     /*Add your code here*/
238 
239     return res;
240 }
241 
242 /**
243  * Close the directory reading
244  * @param drv       pointer to a driver where this function belongs
245  * @param rddir_p   pointer to an initialized 'lv_fs_dir_t' variable
246  * @return          LV_FS_RES_OK: no error or  any error from @lv_fs_res_t enum
247  */
248 static lv_fs_res_t fs_dir_close(lv_fs_drv_t * drv, void * rddir_p)
249 {
250     lv_fs_res_t res = LV_FS_RES_NOT_IMP;
251 
252     /*Add your code here*/
253 
254     return res;
255 }
256 
257 #else /*Enable this file at the top*/
258 
259 /*This dummy typedef exists purely to silence -Wpedantic.*/
260 typedef int keep_pedantic_happy;
261 #endif
262