#include #include #include #include #include #include #include #include #include #include #include #include #include extern struct mufs *mufs; extern struct shell user_shell; struct cmd safe_cmds[] = { { "hi", shell_version }, { "buzzer", shell_buzzer }, { "led", shell_led }, { "reset", shell_alarm }, { "date", shell_date }, { "time", shell_time }, { "booting", shell_boot }, { NULL, NULL }, }; int shell_prepare(struct console *con, size_t argc, const char **argv) { char buf[256]; struct mufs_file *file; size_t size, n; if (argc < 1) { fprintf(con->fp, "usage: booting \n"); return -1; } if (!mufs) { fprintf(con->fp, "error: no file system mounted.\n"); return -1; } if (!(file = mufs_open(mufs, "logs/boot.log", MUFS_WRITE | MUFS_APPEND))) { fprintf(con->fp, "error: unable to open the file\n"); return -1; } n = min(strlen(argv[0]), sizeof(buf) - 2); memcpy(buf, argv[0], n); buf[n++] = '\n'; buf[n] = '\0'; size = mufs_write(file, buf, n); mufs_close(file); if (size < n) { fprintf(con->fp, "error: unable to log the version to boot\n"); return -1; } user_shell.cmds = safe_cmds; return 0; } int shell_boot(struct console *con, size_t argc, const char **argv) { (void)con; if (argc < 1) { fprintf(con->fp, "usage: booting ok\n"); return -1; } if (strcmp(argv[0], "ok") != 0) return -1; return 0; }