diff --git a/epicardium/ble/ble.c b/epicardium/ble/ble.c index a7f10ea50aa207903bf09dce56e91e117afddd59..dbf52946a712e24fcb8fc9234da31cc6a418b5a2 100644 --- a/epicardium/ble/ble.c +++ b/epicardium/ble/ble.c @@ -1,7 +1,7 @@ #include "epicardium.h" #include "modules/log.h" -#include "fs_util.h" +#include "fs/fs_util.h" #include "wsf_types.h" #include "wsf_buf.h" #include "wsf_trace.h" diff --git a/epicardium/ble/ble_main.c b/epicardium/ble/ble_main.c index 4336624d64a7a7fd4f64767cbc22d1962333479b..17da918f7be5e4df59880361d37a059f36956c5a 100644 --- a/epicardium/ble/ble_main.c +++ b/epicardium/ble/ble_main.c @@ -17,7 +17,7 @@ #include <string.h> #include "wsf_types.h" #include "util/bstream.h" -#include "fs_util.h" +#include "fs/fs_util.h" #include "wsf_msg.h" #include "wsf_trace.h" #include "hci_api.h" diff --git a/epicardium/fs/fs_util.c b/epicardium/fs/fs_util.c new file mode 100644 index 0000000000000000000000000000000000000000..1266df23207994c4db4a9d6281d280a86025d14e --- /dev/null +++ b/epicardium/fs/fs_util.c @@ -0,0 +1,92 @@ +#include "fs_util.h" + +#include "epicardium.h" + +#include <stdint.h> +#include <string.h> + +int fs_read_file(char *filename, void *data, int len) +{ + int fd = epic_file_open(filename, "r"); + if (fd < 0) { + return fd; + } + + int res = epic_file_read(fd, data, len); + epic_file_close(fd); + + return res; +} + +int fs_read_text_file(char *filename, char *data, int len) +{ + int readbytes; + + if (len < 1) + return -1; + readbytes = fs_read_file(filename, data, len - 1); + if (readbytes < 0) { + data[0] = 0; + return readbytes; + }; + data[readbytes] = 0; + while (readbytes > 0 && data[readbytes - 1] < 0x20) { + data[--readbytes] = 0; + }; + return readbytes; +} + +int fs_write_file(char *filename, const void *data, int len) +{ + int fd = epic_file_open(filename, "w"); + if (fd < 0) { + return fd; + } + + int res = epic_file_write(fd, data, len); + epic_file_close(fd); + + return res; +} + +int fs_get_file_size(char *filename) +{ + struct epic_stat stat; + int res = epic_file_stat(filename, &stat); + return res < 0 ? res : (int)stat.size; +} + +#if 0 +#include "ff.h" +FATFS FatFs; /* File system object for logical drive */ +FS_USAGE FsUsage; +/* TODO: Port functions from r0ket/rad10 libs */ +int fs_info(FATFS *fs) +{ + memcpy(fs, &FatFs, sizeof(FATFS)); + return 0; +} +int fs_usage(FATFS *fs, FS_USAGE *fs_usage) +{ + FRESULT res; + DWORD tot_clust, fre_clust, sec_size; + + res = f_getfree("/", &fre_clust, &fs); + if(res != FR_OK) + return -res; + + // sectore size = sectors per cluster * sector size +#if FF_MAX_SS == FF_MIN_SS + sec_size = fs->csize * FF_MAX_SS; +#else + sec_size = fs->csize * fs.ssize; +#endif + + // total/free sectors * sectore size + tot_clust = fs->n_fatent - 2; + fs_usage->total = tot_clust * sec_size; //FatFs.ssize; + fs_usage->free = fre_clust * sec_size; //FatFs.ssize; + + return 0; +} +#endif diff --git a/lib/ff13/util/fs_util.h b/epicardium/fs/fs_util.h similarity index 100% rename from lib/ff13/util/fs_util.h rename to epicardium/fs/fs_util.h diff --git a/epicardium/meson.build b/epicardium/meson.build index a6a6c05261c16ced283c4d8591b335237f6acd37..0d10151a0bc31e64daeeca645d8e2ff5bd79fcd1 100644 --- a/epicardium/meson.build +++ b/epicardium/meson.build @@ -86,6 +86,7 @@ elf = executable( 'main.c', 'support.c', 'fs/filesystem_fat.c', + 'fs/fs_util.c', module_sources, l0der_sources, ble_sources, diff --git a/epicardium/modules/config.c b/epicardium/modules/config.c index 9f3e75f43a2fc08cb30e8a556633bf94c94f5488..7371f02a94d984b67b60b3652651015484eb582a 100644 --- a/epicardium/modules/config.c +++ b/epicardium/modules/config.c @@ -272,10 +272,10 @@ void load_config(void) char newline; rc = epic_file_read(fd, &newline, 1); if (rc < 0 || (newline != '\n' && newline != '\r')) { - LOG_ERR("card10.cfg", "seek failed, aborting"); + LOG_ERR("card10.cfg", "read failed, aborting"); LOG_DEBUG( "card10.cfg", - "seek failed at read-back of newline: rc: %d read: %d", + "read failed at read-back of newline: rc: %d read: %d", rc, (int)newline ); @@ -305,7 +305,7 @@ static size_t read_config_offset(size_t seek_offset, char *buf, size_t buf_len) int rc = epic_file_seek(fd, seek_offset, SEEK_SET); if (rc < 0) { - LOG_ERR("card10.cfg", "seek failed, aborting"); + LOG_ERR("card10.cfg", "seek2 failed (%d), aborting", rc); return 0; } diff --git a/lib/ff13/meson.build b/lib/ff13/meson.build index fe2b3dc8beeca963e991af54770917eece0945e1..63f069c18b055ca9d5004ff6bd6cbe5295427490 100644 --- a/lib/ff13/meson.build +++ b/lib/ff13/meson.build @@ -1,6 +1,5 @@ includes = include_directories( './Source/', - './util/', ) sources = files( @@ -8,7 +7,6 @@ sources = files( './Source/ff.c', './Source/ffsystem.c', './Source/ffunicode.c', - './util/fs_util.c', ) lib = static_library( diff --git a/lib/ff13/util/fs_util.c b/lib/ff13/util/fs_util.c deleted file mode 100644 index f576de73285568e4f7b712d6780f42cbb2655b3a..0000000000000000000000000000000000000000 --- a/lib/ff13/util/fs_util.c +++ /dev/null @@ -1,106 +0,0 @@ -#include "fs_util.h" -#include "ff.h" -#include <stdint.h> -#include <string.h> - -FATFS FatFs; /* File system object for logical drive */ -FS_USAGE FsUsage; - - -int fs_info(FATFS *fs) -{ - memcpy(fs, &FatFs, sizeof(FATFS)); - return 0; -} -int fs_usage(FATFS *fs, FS_USAGE *fs_usage) -{ - FRESULT res; - DWORD tot_clust, fre_clust, sec_size; - - res = f_getfree("/", &fre_clust, &fs); - if(res != FR_OK) - return -res; - - // sectore size = sectors per cluster * sector size -#if FF_MAX_SS == FF_MIN_SS - sec_size = fs->csize * FF_MAX_SS; -#else - sec_size = fs->csize * fs.ssize; -#endif - - // total/free sectors * sectore size - tot_clust = fs->n_fatent - 2; - fs_usage->total = tot_clust * sec_size; //FatFs.ssize; - fs_usage->free = fre_clust * sec_size; //FatFs.ssize; - - return 0; -} - -int fs_read_file(char * filename, void * data, int len){ - FIL file; - UINT readbytes; - int res; - - res=f_open(&file, filename, FA_OPEN_EXISTING|FA_READ); - if(res){ - return -1; - }; - - res = f_read(&file, data, len, &readbytes); - if(res){ - return -1; - }; - - f_close(&file); - - return readbytes; -} - -int fs_read_text_file(char * filename, char * data, int len){ - int readbytes; - - if(len<1) return -1; - readbytes=fs_read_file(filename,data,len-1); - if(readbytes<0){ - data[0]=0; - return readbytes; - }; - data[readbytes]=0; - while(readbytes>0 && data[readbytes-1]<0x20){ - data[--readbytes]=0; - }; - return readbytes; -} - - -int fs_write_file(char * filename, const void * data, int len){ - FIL file; - UINT writebytes; - int res; - - res=f_open(&file, filename, FA_CREATE_ALWAYS|FA_WRITE); - if(res){ - return -res; - }; - - res = f_write(&file, data, len, &writebytes); - if(res){ - return -res; - }; - f_close(&file); - - return writebytes; -} - -int fs_get_file_size(char * filename){ - FILINFO finfo; - int res; - - /// XXX: Untested - res=f_stat(filename, &finfo); - if(res){ - return -1; - } - - return finfo.fsize; -}