@@ -15,41 +15,79 @@ namespace {
1515 lv_theme_set_act (theme);
1616 }
1717
18+ constexpr lv_fs_res_t MapError (int err) {
19+ switch (err) {
20+ case LFS_ERR_OK :
21+ return LV_FS_RES_OK ;
22+ case LFS_ERR_IO :
23+ return LV_FS_RES_HW_ERR ;
24+ case LFS_ERR_CORRUPT :
25+ return LV_FS_RES_FS_ERR ;
26+ case LFS_ERR_NOENT :
27+ return LV_FS_RES_NOT_EX ;
28+ case LFS_ERR_EXIST :
29+ return LV_FS_RES_FS_ERR ;
30+ case LFS_ERR_NOTDIR :
31+ return LV_FS_RES_FS_ERR ;
32+ case LFS_ERR_ISDIR :
33+ return LV_FS_RES_FS_ERR ;
34+ case LFS_ERR_NOTEMPTY :
35+ return LV_FS_RES_FS_ERR ;
36+ case LFS_ERR_BADF :
37+ return LV_FS_RES_INV_PARAM ;
38+ case LFS_ERR_FBIG :
39+ return LV_FS_RES_FULL ;
40+ case LFS_ERR_INVAL :
41+ return LV_FS_RES_INV_PARAM ;
42+ case LFS_ERR_NOSPC :
43+ return LV_FS_RES_FULL ;
44+ case LFS_ERR_NOMEM :
45+ return LV_FS_RES_OUT_OF_MEM ;
46+ case LFS_ERR_NOATTR :
47+ return LV_FS_RES_UNKNOWN ;
48+ case LFS_ERR_NAMETOOLONG :
49+ return LV_FS_RES_INV_PARAM ;
50+ default :
51+ return LV_FS_RES_UNKNOWN ;
52+ }
53+ }
54+
1855 lv_fs_res_t lvglOpen (lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t /* mode*/ ) {
1956 lfs_file_t * file = static_cast <lfs_file_t *>(file_p);
2057 Pinetime::Controllers::FS * filesys = static_cast <Pinetime::Controllers::FS *>(drv->user_data );
2158 int res = filesys->FileOpen (file, path, LFS_O_RDONLY );
22- if (res == 0 ) {
23- if (file->type == 0 ) {
24- return LV_FS_RES_FS_ERR ;
25- } else {
26- return LV_FS_RES_OK ;
27- }
28- }
29- return LV_FS_RES_NOT_EX ;
59+ return MapError (res);
3060 }
3161
3262 lv_fs_res_t lvglClose (lv_fs_drv_t * drv, void * file_p) {
3363 Pinetime::Controllers::FS * filesys = static_cast <Pinetime::Controllers::FS *>(drv->user_data );
3464 lfs_file_t * file = static_cast <lfs_file_t *>(file_p);
35- filesys->FileClose (file);
36-
37- return LV_FS_RES_OK ;
65+ int res = filesys->FileClose (file);
66+ return MapError (res);
3867 }
3968
4069 lv_fs_res_t lvglRead (lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br) {
4170 Pinetime::Controllers::FS * filesys = static_cast <Pinetime::Controllers::FS *>(drv->user_data );
4271 lfs_file_t * file = static_cast <lfs_file_t *>(file_p);
43- filesys->FileRead (file, static_cast <uint8_t *>(buf), btr);
44- *br = btr;
45- return LV_FS_RES_OK ;
72+ int res = filesys->FileRead (file, static_cast <uint8_t *>(buf), btr);
73+ if (res >= 0 ) {
74+ // br (bytes read) is allowed to be null
75+ if (br != nullptr ) {
76+ *br = res;
77+ }
78+ return LV_FS_RES_OK ;
79+ }
80+ return MapError (res);
4681 }
4782
4883 lv_fs_res_t lvglSeek (lv_fs_drv_t * drv, void * file_p, uint32_t pos) {
4984 Pinetime::Controllers::FS * filesys = static_cast <Pinetime::Controllers::FS *>(drv->user_data );
5085 lfs_file_t * file = static_cast <lfs_file_t *>(file_p);
51- filesys->FileSeek (file, pos);
52- return LV_FS_RES_OK ;
86+ int res = filesys->FileSeek (file, pos);
87+ if (res >= 0 ) {
88+ return LV_FS_RES_OK ;
89+ }
90+ return MapError (res);
5391 }
5492}
5593
0 commit comments