diff options
author | JF <jf@codingfield.com> | 2020-03-08 21:46:25 +0100 |
---|---|---|
committer | JF <jf@codingfield.com> | 2020-03-08 21:46:25 +0100 |
commit | 0a5cd60fe86149f8958fc546e99f6370cb74950e (patch) | |
tree | d630a6c66d69d22c53b8011e215e1072875c6a29 /src/libs/lvgl/porting/lv_port_fs_template.c | |
parent | d834f40c1014ac8926af9aaadc434a49e632b000 (diff) |
When a full screen refresh is done, apply a vertical scroll during the refresh. This makes the transition from one screen the another one smoother, even if the refresh rate is slow.
Diffstat (limited to 'src/libs/lvgl/porting/lv_port_fs_template.c')
-rw-r--r-- | src/libs/lvgl/porting/lv_port_fs_template.c | 379 |
1 files changed, 379 insertions, 0 deletions
diff --git a/src/libs/lvgl/porting/lv_port_fs_template.c b/src/libs/lvgl/porting/lv_port_fs_template.c new file mode 100644 index 00000000..dab94608 --- /dev/null +++ b/src/libs/lvgl/porting/lv_port_fs_template.c @@ -0,0 +1,379 @@ +/** + * @file lv_port_fs_templ.c + * + */ + + /*Copy this file as "lv_port_fs.c" and set this value to "1" to enable content*/ +#if 0 + +/********************* + * INCLUDES + *********************/ +#include "lv_port_fs_templ.h" + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/* Create a type to store the required data about your file. + * If you are using a File System library + * it already should have a File type. + * For example FatFS has `FIL`. In this case use `typedef FIL file_t`*/ +typedef struct { + /*Add the data you need to store about a file*/ + uint32_t dummy1; + uint32_t dummy2; +}file_t; + +/*Similarly to `file_t` create a type for directory reading too */ +typedef struct { + /*Add the data you need to store about directory reading*/ + uint32_t dummy1; + uint32_t dummy2; +}dir_t; + + +/********************** + * STATIC PROTOTYPES + **********************/ +static void fs_init(void); + +static lv_fs_res_t fs_open (lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t mode); +static lv_fs_res_t fs_close (lv_fs_drv_t * drv, void * file_p); +static lv_fs_res_t fs_read (lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br); +static lv_fs_res_t fs_write(lv_fs_drv_t * drv, void * file_p, const void * buf, uint32_t btw, uint32_t * bw); +static lv_fs_res_t fs_seek (lv_fs_drv_t * drv, void * file_p, uint32_t pos); +static lv_fs_res_t fs_size (lv_fs_drv_t * drv, void * file_p, uint32_t * size_p); +static lv_fs_res_t fs_tell (lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p); +static lv_fs_res_t fs_remove (lv_fs_drv_t * drv, const char *path); +static lv_fs_res_t fs_trunc (lv_fs_drv_t * drv, void * file_p); +static lv_fs_res_t fs_rename (lv_fs_drv_t * drv, const char * oldname, const char * newname); +static lv_fs_res_t fs_free (lv_fs_drv_t * drv, uint32_t * total_p, uint32_t * free_p); +static lv_fs_res_t fs_dir_open (lv_fs_drv_t * drv, void * rddir_p, const char *path); +static lv_fs_res_t fs_dir_read (lv_fs_drv_t * drv, void * rddir_p, char *fn); +static lv_fs_res_t fs_dir_close (lv_fs_drv_t * drv, void * rddir_p); + +/********************** + * STATIC VARIABLES + **********************/ + +/********************** + * GLOBAL PROTOTYPES + **********************/ + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +void lv_port_fs_init(void) +{ + /*---------------------------------------------------- + * Initialize your storage device and File System + * -------------------------------------------------*/ + fs_init(); + + /*--------------------------------------------------- + * Register the file system interface in LittlevGL + *--------------------------------------------------*/ + + /* Add a simple drive to open images */ + lv_fs_drv_t fs_drv; /*A driver descriptor*/ + memset(&fs_drv, 0, sizeof(lv_fs_drv_t)); /*Initialization*/ + + /*Set up fields...*/ + fs_drv.file_size = sizeof(file_t); + fs_drv.letter = 'P'; + fs_drv.open = fs_open; + fs_drv.close = fs_close; + fs_drv.read = fs_read; + fs_drv.write = fs_write; + fs_drv.seek = fs_seek; + fs_drv.tell = fs_tell; + fs_drv.free = fs_free; + fs_drv.size = fs_size; + fs_drv.remove = fs_remove; + fs_drv.rename = fs_rename; + fs_drv.trunc = fs_trunc; + + fs_drv.rddir_size = sizeof(dir_t); + fs_drv.dir_close = fs_dir_close; + fs_drv.dir_open = fs_dir_open; + fs_drv.dir_read = fs_dir_read; + + lv_fs_add_drv(&fs_drv); +} + +/********************** + * STATIC FUNCTIONS + **********************/ + +/* Initialize your Storage device and File system. */ +static void fs_init(void) +{ + /*E.g. for FatFS initalize the SD card and FatFS itself*/ + + /*You code here*/ +} + +/** + * Open a file + * @param drv pointer to a driver where this function belongs + * @param file_p pointer to a file_t variable + * @param path path to the file beginning with the driver letter (e.g. S:/folder/file.txt) + * @param mode read: FS_MODE_RD, write: FS_MODE_WR, both: FS_MODE_RD | FS_MODE_WR + * @return LV_FS_RES_OK or any error from lv_fs_res_t enum + */ +static lv_fs_res_t fs_open (lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t mode) +{ + lv_fs_res_t res = LV_FS_RES_NOT_IMP; + + if(mode == LV_FS_MODE_WR) + { + /*Open a file for write*/ + + /* Add your code here*/ + } + else if(mode == LV_FS_MODE_RD) + { + /*Open a file for read*/ + + /* Add your code here*/ + } + else if(mode == (LV_FS_MODE_WR | LV_FS_MODE_RD)) + { + /*Open a file for read and write*/ + + /* Add your code here*/ + } + + return res; +} + + +/** + * Close an opened file + * @param drv pointer to a driver where this function belongs + * @param file_p pointer to a file_t variable. (opened with lv_ufs_open) + * @return LV_FS_RES_OK: no error, the file is read + * any error from lv_fs_res_t enum + */ +static lv_fs_res_t fs_close (lv_fs_drv_t * drv, void * file_p) +{ + lv_fs_res_t res = LV_FS_RES_NOT_IMP; + + /* Add your code here*/ + + return res; +} + +/** + * Read data from an opened file + * @param drv pointer to a driver where this function belongs + * @param file_p pointer to a file_t variable. + * @param buf pointer to a memory block where to store the read data + * @param btr number of Bytes To Read + * @param br the real number of read bytes (Byte Read) + * @return LV_FS_RES_OK: no error, the file is read + * any error from lv_fs_res_t enum + */ +static lv_fs_res_t fs_read (lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br) +{ + lv_fs_res_t res = LV_FS_RES_NOT_IMP; + + /* Add your code here*/ + + return res; +} + +/** + * Write into a file + * @param drv pointer to a driver where this function belongs + * @param file_p pointer to a file_t variable + * @param buf pointer to a buffer with the bytes to write + * @param btr Bytes To Write + * @param br the number of real written bytes (Bytes Written). NULL if unused. + * @return LV_FS_RES_OK or any error from lv_fs_res_t enum + */ +static lv_fs_res_t fs_write(lv_fs_drv_t * drv, void * file_p, const void * buf, uint32_t btw, uint32_t * bw) +{ + lv_fs_res_t res = LV_FS_RES_NOT_IMP; + + /* Add your code here*/ + + return res; +} + +/** + * Set the read write pointer. Also expand the file size if necessary. + * @param drv pointer to a driver where this function belongs + * @param file_p pointer to a file_t variable. (opened with lv_ufs_open ) + * @param pos the new position of read write pointer + * @return LV_FS_RES_OK: no error, the file is read + * any error from lv_fs_res_t enum + */ +static lv_fs_res_t fs_seek (lv_fs_drv_t * drv, void * file_p, uint32_t pos) +{ + lv_fs_res_t res = LV_FS_RES_NOT_IMP; + + /* Add your code here*/ + + return res; +} + +/** + * Give the size of a file bytes + * @param drv pointer to a driver where this function belongs + * @param file_p pointer to a file_t variable + * @param size pointer to a variable to store the size + * @return LV_FS_RES_OK or any error from lv_fs_res_t enum + */ +static lv_fs_res_t fs_size (lv_fs_drv_t * drv, void * file_p, uint32_t * size_p) +{ + lv_fs_res_t res = LV_FS_RES_NOT_IMP; + + /* Add your code here*/ + + return res; +} +/** + * Give the position of the read write pointer + * @param drv pointer to a driver where this function belongs + * @param file_p pointer to a file_t variable. + * @param pos_p pointer to to store the result + * @return LV_FS_RES_OK: no error, the file is read + * any error from lv_fs_res_t enum + */ +static lv_fs_res_t fs_tell (lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p) +{ + lv_fs_res_t res = LV_FS_RES_NOT_IMP; + + /* Add your code here*/ + + return res; +} + +/** + * Delete a file + * @param drv pointer to a driver where this function belongs + * @param path path of the file to delete + * @return LV_FS_RES_OK or any error from lv_fs_res_t enum + */ +static lv_fs_res_t fs_remove (lv_fs_drv_t * drv, const char *path) +{ + lv_fs_res_t res = LV_FS_RES_NOT_IMP; + + /* Add your code here*/ + + return res; +} + +/** + * Truncate the file size to the current position of the read write pointer + * @param drv pointer to a driver where this function belongs + * @param file_p pointer to an 'ufs_file_t' variable. (opened with lv_fs_open ) + * @return LV_FS_RES_OK: no error, the file is read + * any error from lv_fs_res_t enum + */ +static lv_fs_res_t fs_trunc (lv_fs_drv_t * drv, void * file_p) +{ + lv_fs_res_t res = LV_FS_RES_NOT_IMP; + + /* Add your code here*/ + + return res; +} + +/** + * Rename a file + * @param drv pointer to a driver where this function belongs + * @param oldname path to the file + * @param newname path with the new name + * @return LV_FS_RES_OK or any error from 'fs_res_t' + */ +static lv_fs_res_t fs_rename (lv_fs_drv_t * drv, const char * oldname, const char * newname) +{ + lv_fs_res_t res = LV_FS_RES_NOT_IMP; + + /* Add your code here*/ + + return res; +} + +/** + * Get the free and total size of a driver in kB + * @param drv pointer to a driver where this function belongs + * @param letter the driver letter + * @param total_p pointer to store the total size [kB] + * @param free_p pointer to store the free size [kB] + * @return LV_FS_RES_OK or any error from lv_fs_res_t enum + */ +static lv_fs_res_t fs_free (uint32_t * total_p, uint32_t * free_p) +{ + lv_fs_res_t res = LV_FS_RES_NOT_IMP; + + /* Add your code here*/ + + return res; +} + +/** + * Initialize a 'fs_read_dir_t' variable for directory reading + * @param drv pointer to a driver where this function belongs + * @param rddir_p pointer to a 'fs_read_dir_t' variable + * @param path path to a directory + * @return LV_FS_RES_OK or any error from lv_fs_res_t enum + */ +static lv_fs_res_t fs_dir_open (lv_fs_drv_t * drv, void * rddir_p, const char *path) +{ + lv_fs_res_t res = LV_FS_RES_NOT_IMP; + + /* Add your code here*/ + + return res; +} + +/** + * Read the next filename form a directory. + * The name of the directories will begin with '/' + * @param drv pointer to a driver where this function belongs + * @param rddir_p pointer to an initialized 'fs_read_dir_t' variable + * @param fn pointer to a buffer to store the filename + * @return LV_FS_RES_OK or any error from lv_fs_res_t enum + */ +static lv_fs_res_t fs_dir_read (lv_fs_drv_t * drv, void * rddir_p, char *fn) +{ + lv_fs_res_t res = LV_FS_RES_NOT_IMP; + + /* Add your code here*/ + + return res; +} + +/** + * Close the directory reading + * @param drv pointer to a driver where this function belongs + * @param rddir_p pointer to an initialized 'fs_read_dir_t' variable + * @return LV_FS_RES_OK or any error from lv_fs_res_t enum + */ +static lv_fs_res_t fs_dir_close (lv_fs_drv_t * drv, void * rddir_p) +{ + lv_fs_res_t res = LV_FS_RES_NOT_IMP; + + /* Add your code here*/ + + return res; +} + +#else /* Enable this file at the top */ + +/* This dummy typedef exists purely to silence -Wpedantic. */ +typedef int keep_pedantic_happy; +#endif |