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