diff --git a/epicardium/epicardium.h b/epicardium/epicardium.h index b576662965726dcf83caefcb3287e87c791da319..aa2ed57739d54e349aadd5ecf8db112f4e90be55 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 7d95510360324ac5e105a53aa90a3a96ee0936c1..cd2215494e937c3bb9060f1d7b3706367fbe41bf 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 8d0fe25368b7891d8781f7738962d5e699662c7a..4358ead33a8df7d01e473d79347ffeae4d1a1da2 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 fba57b110cd3ea8c322e4061622ec89b27949d08..40f7ffbe0731484f0a0d52dbc4efaa1fae842c89 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 b0be04c5f89db8501756d50113b8025e9c3c7198..cf5204f1e9ef397d77c38f7eb8d7812d55b97888 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 a693420b18979e8e1b835c85c71a943dd3c1ac9c..f6cc8109148627066fc7639f7d6da0b1a63cc336 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 60c5c56c9cbc385bb87fb8fe33f2f4881fd41947..a3871d926be12bfe3542def1ef2dad1a152115e0 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)