diff options
author | Joey Castillo <joeycastillo@utexas.edu> | 2022-05-09 13:01:12 -0400 |
---|---|---|
committer | Joey Castillo <joeycastillo@utexas.edu> | 2022-05-09 13:05:37 -0400 |
commit | e71a70d23100c178e7300f1c0bddccfc51d99eb7 (patch) | |
tree | 8788e5454860e725dd5ba02c89c69d3834be6a2f | |
parent | 22b1ac0283a6aed800ea86960305284199747cdc (diff) | |
download | Sensor-Watch-e71a70d23100c178e7300f1c0bddccfc51d99eb7.tar.gz Sensor-Watch-e71a70d23100c178e7300f1c0bddccfc51d99eb7.tar.bz2 Sensor-Watch-e71a70d23100c178e7300f1c0bddccfc51d99eb7.zip |
add file browser to movement, remove old app
-rwxr-xr-x | apps/filesystem-browser/Makefile | 13 | ||||
-rw-r--r-- | apps/filesystem-browser/browser.c | 218 | ||||
-rw-r--r-- | movement/filesystem.c | 2 | ||||
-rw-r--r-- | movement/movement.c | 4 | ||||
-rw-r--r-- | watch-library/simulator/main.c | 2 |
5 files changed, 5 insertions, 234 deletions
diff --git a/apps/filesystem-browser/Makefile b/apps/filesystem-browser/Makefile deleted file mode 100755 index a37c98d7..00000000 --- a/apps/filesystem-browser/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -TOP = ../.. -include $(TOP)/make.mk - -INCLUDES += \ - -I$(TOP)/littlefs/ \ - -I./ - -SRCS += \ - $(TOP)/littlefs/lfs.c \ - $(TOP)/littlefs/lfs_util.c \ - ./browser.c - -include $(TOP)/rules.mk diff --git a/apps/filesystem-browser/browser.c b/apps/filesystem-browser/browser.c deleted file mode 100644 index daa77863..00000000 --- a/apps/filesystem-browser/browser.c +++ /dev/null @@ -1,218 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <peripheral_clk_config.h> -#include "watch.h" -#include "lfs.h" -#include "hpl_flash.h" - -int lfs_storage_read(const struct lfs_config *cfg, lfs_block_t block, lfs_off_t off, void *buffer, lfs_size_t size); -int lfs_storage_prog(const struct lfs_config *cfg, lfs_block_t block, lfs_off_t off, const void *buffer, lfs_size_t size); -int lfs_storage_erase(const struct lfs_config *cfg, lfs_block_t block); -int lfs_storage_sync(const struct lfs_config *cfg); - -int lfs_storage_read(const struct lfs_config *cfg, lfs_block_t block, lfs_off_t off, void *buffer, lfs_size_t size) { - (void) cfg; - return !watch_storage_read(block, off, (void *)buffer, size); -} - -int lfs_storage_prog(const struct lfs_config *cfg, lfs_block_t block, lfs_off_t off, const void *buffer, lfs_size_t size) { - (void) cfg; - return !watch_storage_write(block, off, (void *)buffer, size); -} - -int lfs_storage_erase(const struct lfs_config *cfg, lfs_block_t block) { - (void) cfg; - return !watch_storage_erase(block); -} - -int lfs_storage_sync(const struct lfs_config *cfg) { - (void) cfg; - return !watch_storage_sync(); -} - -const struct lfs_config cfg = { - // block device operations - .read = lfs_storage_read, - .prog = lfs_storage_prog, - .erase = lfs_storage_erase, - .sync = lfs_storage_sync, - - // block device configuration - .read_size = 16, - .prog_size = NVMCTRL_PAGE_SIZE, - .block_size = NVMCTRL_ROW_SIZE, - .block_count = NVMCTRL_RWWEE_PAGES / 4, - .cache_size = NVMCTRL_PAGE_SIZE, - .lookahead_size = 16, - .block_cycles = 100, -}; - -lfs_t lfs; -lfs_file_t file; - -static int _traverse_df_cb(void *p, lfs_block_t block) { - (void) block; - uint32_t *nb = p; - *nb += 1; - return 0; -} - -static int get_free_space(void){ - int err; - - uint32_t free_blocks = 0; - err = lfs_fs_traverse(&lfs, _traverse_df_cb, &free_blocks); - if(err < 0){ - return err; - } - - uint32_t available = cfg.block_count * cfg.block_size - free_blocks * cfg.block_size; - - return available; -} - -static int lfs_ls(lfs_t *lfs, const char *path) { - lfs_dir_t dir; - int err = lfs_dir_open(lfs, &dir, path); - if (err) { - return err; - } - - struct lfs_info info; - while (true) { - int res = lfs_dir_read(lfs, &dir, &info); - if (res < 0) { - return res; - } - - if (res == 0) { - break; - } - - switch (info.type) { - case LFS_TYPE_REG: printf("file "); break; - case LFS_TYPE_DIR: printf("dir "); break; - default: printf("? "); break; - } - - printf("%4ld bytes ", info.size); - - printf("%s\n", info.name); - } - - err = lfs_dir_close(lfs, &dir); - if (err) { - return err; - } - - return 0; -} - -void app_init(void) { -} - -void app_wake_from_backup(void) { -} - -void app_setup(void) { - // mount the filesystem - int err = lfs_mount(&lfs, &cfg); - - // reformat if we can't mount the filesystem - // this should only happen on the first boot - if (err) { - lfs_format(&lfs, &cfg); - lfs_mount(&lfs, &cfg); - } -} - -void app_prepare_for_standby(void) { -} - -void app_wake_from_standby(void) { -} - -bool app_loop(void) { - char line[256] = {0}; - char *buf; - struct lfs_info info; - - read(0, line, 256); - if (strlen(line)) { - printf("$ %s", line); - char *command = strtok(line, " \n"); - - if (strcmp(command, "ls") == 0) { - char *directory = strtok(NULL, " \n"); - if (directory == NULL) { - lfs_ls(&lfs, "/"); - } else { - printf("usage: ls\n"); - } - } else if (strcmp(command, "cat") == 0) { - char *filename = strtok(NULL, " \n"); - if (filename == NULL) { - printf("usage: cat file\n"); - } else { - info.type = 0; - lfs_stat(&lfs, filename, &info); - if (info.type == LFS_TYPE_REG) { - if (info.size > 0) { - buf = malloc(info.size); - lfs_file_open(&lfs, &file, filename, LFS_O_RDONLY); - lfs_file_read(&lfs, &file, buf, info.size); - printf("%s\n", buf); - free(buf); - lfs_file_close(&lfs, &file); - } else { - printf("\n"); - } - } else { - printf("cat: %s: No such file\n", filename); - } - } - } else if (strcmp(command, "df") == 0) { - printf("free space: %d bytes\n", get_free_space()); - } else if (strcmp(command, "rm") == 0) { - char *filename = strtok(NULL, " \n"); - if (filename == NULL) { - printf("usage: rm file\n"); - } else { - info.type = 0; - lfs_stat(&lfs, filename, &info); - if (info.type == LFS_TYPE_REG) { - lfs_remove(&lfs, filename); - } else { - printf("rm: %s: No such file\n", filename); - } - } - } else if (strcmp(command, "echo") == 0) { - buf = malloc(64); - memset(buf, 0, 64); - size_t pos = 0; - char *text = strtok(NULL, " \n"); - while (strcmp(text, ">")) { - sprintf(buf + pos, "%s ", text); - pos += strlen(text) + 1; - text = strtok(NULL, " \n"); - if (text == NULL) break; - } - buf[strlen(buf) - 1] = 0; - char *filename = strtok(NULL, " \n"); - if (filename == NULL) { - printf("usage: echo text > file\n"); - } else if (strchr(filename, '/') || strchr(filename, '\\')) { - printf("subdirectories are not supported\n"); - } else { - lfs_file_open(&lfs, &file, filename, LFS_O_RDWR | LFS_O_CREAT | LFS_O_TRUNC); - lfs_file_write(&lfs, &file, buf, strlen(buf)); - lfs_file_close(&lfs, &file); - } - free(buf); - } else { - printf("%s: command not found\n", command); - } - } - return false; -} diff --git a/movement/filesystem.c b/movement/filesystem.c index 2a1319fb..559bd53d 100644 --- a/movement/filesystem.c +++ b/movement/filesystem.c @@ -117,9 +117,11 @@ bool filesystem_init(void) { // reformat if we can't mount the filesystem // this should only happen on the first boot if (err) { + printf("Ignore that error! Formatting filesystem...\n"); err = lfs_format(&lfs, &cfg); if (err) return false; err = lfs_mount(&lfs, &cfg) == LFS_ERR_OK; + printf("Filesystem mounted with %d bytes free.\n", filesystem_get_free_space()); } return err == LFS_ERR_OK; diff --git a/movement/movement.c b/movement/movement.c index 72c087e9..3444a378 100644 --- a/movement/movement.c +++ b/movement/movement.c @@ -254,6 +254,8 @@ void app_init(void) { movement_state.next_available_backup_register = 4; _movement_reset_inactivity_countdown(); + filesystem_init(); + #if __EMSCRIPTEN__ int32_t time_zone_offset = EM_ASM_INT({ return -new Date().getTimezoneOffset(); @@ -450,7 +452,7 @@ bool app_loop(void) { #else read(0, line, 256); #endif - if (strlen(line)) printf(line); + if (strlen(line)) filesystem_process_command(line); } event.subsecond = 0; diff --git a/watch-library/simulator/main.c b/watch-library/simulator/main.c index 14bf44e6..ac9db6ac 100644 --- a/watch-library/simulator/main.c +++ b/watch-library/simulator/main.c @@ -102,8 +102,6 @@ static void main_loop_set_sleeping(bool sleeping) { } int main(void) { - printf("Hello, world!\n"); - app_init(); _watch_init(); app_setup(); |