From ca63c8621e61cb46240995a65654f6050e2ac3d5 Mon Sep 17 00:00:00 2001 From: swym <0xfd000000@gmail.com> Date: Thu, 22 Aug 2019 16:37:39 +0200 Subject: [PATCH] feat(fatfs): API to dump status of FD pool --- epicardium/epicardium.h | 3 +++ epicardium/fs/filesystem_fat.c | 27 +++++++++++++++++++++++++++ epicardium/fs/internal.h | 1 + epicardium/main.c | 1 + epicardium/modules/fileops.c | 11 +++++++++++ pycardium/modules/os.c | 13 ++++++++++++- pycardium/modules/qstrdefs.h | 1 + 7 files changed, 56 insertions(+), 1 deletion(-) diff --git a/epicardium/epicardium.h b/epicardium/epicardium.h index b5766629..aa2ed577 100644 --- a/epicardium/epicardium.h +++ b/epicardium/epicardium.h @@ -67,6 +67,7 @@ typedef _Bool bool; #define API_FILE_UNLINK 0x4b #define API_FILE_RENAME 0x4c #define API_FILE_MKDIR 0x4d +#define API_FILE_FS_STATUS 0x4e #define API_RTC_GET_SECONDS 0x50 #define API_RTC_SCHEDULE_ALARM 0x51 @@ -1325,6 +1326,8 @@ API(API_FILE_RENAME, int epic_file_rename(const char *oldp, const char* newp)); */ API(API_FILE_MKDIR, int epic_file_mkdir(const char *dirname)); +API(API_FILE_FS_STATUS, int epic_file_fs_status(void)); + /** * RTC * === diff --git a/epicardium/fs/filesystem_fat.c b/epicardium/fs/filesystem_fat.c index 7d955103..cd221549 100644 --- a/epicardium/fs/filesystem_fat.c +++ b/epicardium/fs/filesystem_fat.c @@ -189,6 +189,33 @@ void fatfs_close_all(int coreMask) efs_unlock_global(fs); } } + +void efs_dump_status(EpicFileSystem *fs) +{ + printf(">>> FS status\n"); + for (int index = 0; index < EPIC_FAT_MAX_OPENED; ++index) { + struct FatObject *fso = &fs->pool[index]; + int fd = EPIC_FAT_FD(index, fso->generation); + printf(" fd[%2d]: generation: %6d fd: 0x%08x type: ", + index, + fso->generation, + fd); + switch (fso->type) { + case EPICSTAT_NONE: + printf("%s ", "NONE"); + break; + case EPICSTAT_FILE: + printf("%s ", "FILE"); + break; + case EPICSTAT_DIR: + printf("%s ", "DIR"); + break; + } + printf("coreMask: %02x\n", fso->coreMask); + } + printf("<<< FS status\n"); +} + static const char *f_get_rc_string(FRESULT rc) { static const TCHAR *rcstrings = diff --git a/epicardium/fs/internal.h b/epicardium/fs/internal.h index 8d0fe253..4358ead3 100644 --- a/epicardium/fs/internal.h +++ b/epicardium/fs/internal.h @@ -31,6 +31,7 @@ int efs_readdir(EpicFileSystem *fs, int fd, struct epic_stat *stat); int efs_unlink(EpicFileSystem *fs, const char *path); int efs_rename(EpicFileSystem *fs, const char *oldp, const char *newp); int efs_mkdir(EpicFileSystem *fs, const char *dirname); +void efs_dump_status(EpicFileSystem *fs); /** * lock global filesystem * diff --git a/epicardium/main.c b/epicardium/main.c index fba57b11..40f7ffbe 100644 --- a/epicardium/main.c +++ b/epicardium/main.c @@ -23,6 +23,7 @@ int main(void) epic_disp_print(0, 24, version_buf, 0xffff, 0x0000); epic_disp_update(); mxc_delay(2000000); + int fd = epic_file_open("epicardium.txt", "w"); LOG_DEBUG("startup", "Initializing tasks ..."); diff --git a/epicardium/modules/fileops.c b/epicardium/modules/fileops.c index b0be04c5..cf5204f1 100644 --- a/epicardium/modules/fileops.c +++ b/epicardium/modules/fileops.c @@ -160,3 +160,14 @@ int epic_file_mkdir(const char *dirname) } return res; } + +int epic_file_fs_status(void) +{ + EpicFileSystem *fs; + int res = efs_lock_global(&fs); + if (res == 0) { + efs_dump_status(fs); + efs_unlock_global(fs); + } + return res; +} diff --git a/pycardium/modules/os.c b/pycardium/modules/os.c index a693420b..f6cc8109 100644 --- a/pycardium/modules/os.c +++ b/pycardium/modules/os.c @@ -98,6 +98,16 @@ static mp_obj_t mp_os_unlink(mp_obj_t py_path) } static MP_DEFINE_CONST_FUN_OBJ_1(unlink_obj, mp_os_unlink); +static mp_obj_t mp_os_fs_status() +{ + int rc = epic_file_fs_status(); + if (rc < 0) { + mp_raise_OSError(-rc); + } + return mp_const_none; +} +static MP_DEFINE_CONST_FUN_OBJ_0(fs_status_obj, mp_os_fs_status); + static mp_obj_t mp_os_mkdir(mp_obj_t py_path) { const char *path = mp_obj_str_get_str(py_path); @@ -141,7 +151,7 @@ static mp_obj_t mp_os_urandom(mp_obj_t size_in) vstr_t vstr; vstr_init_len(&vstr, size); - epic_trng_read((uint8_t*)vstr.buf, size); + epic_trng_read((uint8_t *)vstr.buf, size); return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); } @@ -156,6 +166,7 @@ static const mp_rom_map_elem_t os_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_unlink), MP_ROM_PTR(&unlink_obj) }, { MP_ROM_QSTR(MP_QSTR_mkdir), MP_ROM_PTR(&mkdir_obj) }, { MP_ROM_QSTR(MP_QSTR_rename), MP_ROM_PTR(&rename_obj) }, + { MP_ROM_QSTR(MP_QSTR_fs_status), MP_ROM_PTR(&fs_status_obj) }, { MP_ROM_QSTR(MP_QSTR_read_battery), MP_ROM_PTR(&read_battery_obj) }, { MP_ROM_QSTR(MP_QSTR_urandom), MP_ROM_PTR(&urandom_obj) }, }; diff --git a/pycardium/modules/qstrdefs.h b/pycardium/modules/qstrdefs.h index 60c5c56c..a3871d92 100644 --- a/pycardium/modules/qstrdefs.h +++ b/pycardium/modules/qstrdefs.h @@ -113,6 +113,7 @@ Q(mkdir) Q(rename) Q(read_battery) Q(urandom) +Q(fs_status) /* gpio */ Q(gpio) -- GitLab