#include #include "shelly.h" __attribute__((__used__)) static void parse_cmd_line(char * line, int * argc, char ** argv) { *argc = 0; char *token = strtok(line, " "); while (token != NULL) { argv[*argc] = token; token = strtok(NULL, " "); *argc += 1; } } static errval_t shelly_cmd_help(char * line) { errval_t err; err = shelly_write_str("commands implemented:\n\r"); if (err_is_fail(err)) return err; err = shelly_write_str("- echo [string]\n\r"); if (err_is_fail(err)) return err; err = shelly_write_str("- run [core] [binary]\n\r"); if (err_is_fail(err)) return err; err = shelly_write_str(" run a module from bootinfo\n\r"); if (err_is_fail(err)) return err; err = shelly_write_str("- ps\n\r"); if (err_is_fail(err)) return err; err = shelly_write_str("- ls\n\r"); if (err_is_fail(err)) return err; err = shelly_write_str("- cat\n\r"); if (err_is_fail(err)) return err; err = shelly_write_str(" ...meow\n\r"); if (err_is_fail(err)) return err; err = shelly_write_str("- mkdir\n\r"); if (err_is_fail(err)) return err; err = shelly_write_str("- rmdir\n\r"); if (err_is_fail(err)) return err; err = shelly_write_str("- help\n\r"); if (err_is_fail(err)) return err; return SYS_ERR_OK; } static errval_t shelly_cmd_ls(char * line) { // errval_t err; return SYS_ERR_OK; } static errval_t shelly_cmd_cat(char * line) { errval_t err; err = shelly_write_str(" /\\_/\\ ___\n\r"); if (err_is_fail(err)) return err; err = shelly_write_str(" = o_o =_______ \\ \\\n\r"); if (err_is_fail(err)) return err; err = shelly_write_str(" __^ __( \\.__) )\n\r"); if (err_is_fail(err)) return err; err = shelly_write_str("(@)<_____>__(_____)____/\n\r"); if (err_is_fail(err)) return err; return SYS_ERR_OK; } static errval_t shelly_cmd_mkdir(char * line) { // errval_t err; return SYS_ERR_OK; } static errval_t shelly_cmd_rmdir(char * line) { // errval_t err; return SYS_ERR_OK; } static errval_t shelly_cmd_echo(char * line) { errval_t err; err = shelly_write_str(line); if (err_is_fail(err)) return err; return SYS_ERR_OK; } static errval_t shelly_cmd_run(char * line) { errval_t err; SHELLY_DEBUG("[shelly_cmd_run] line=%s\n", line); char * module_line; long core_id = strtol(line, &module_line, 10); module_line += 1; // start process domainid_t pid; struct aos_rpc * rpc = aos_rpc_get_process_channel(); err = aos_rpc_process_spawn(rpc, module_line, core_id, &pid); if (err == SPAWN_ERR_FIND_MODULE) { err = shelly_write_str("[run] couldn't find module:\n\r"); if (err_is_fail(err)) return err; err = shelly_write_str(line); if (err_is_fail(err)) return err; err = shelly_write_str("\n\r"); if (err_is_fail(err)) return err; } else if (err_is_fail(err)) return err_push(err, SHELLY_ERR_SPAWN_RPC); return SYS_ERR_OK; } static errval_t shelly_cmd_ps(char * line) { errval_t err; domainid_t *pids; size_t pid_count; struct aos_rpc * rpc = aos_rpc_get_process_channel(); err = aos_rpc_process_get_all_pids(rpc, &pids, &pid_count); if (err_is_fail(err)) return err_push(err, SHELLY_ERR_PS_RPC); shelly_write_str("PIDs:\n\r"); char buf[256]; for(size_t i = 0; i < pid_count; ++i) { snprintf(buf, 256, " %lu\n\r", pids[i]); shelly_write_str(buf); } return SYS_ERR_OK; } static errval_t handle_shelly_cmd(char* line, size_t len) { // SHELLY_DEBUG("[handle_shelly_cmd] len=%d\n", len); if (len <= 1) { return SYS_ERR_OK; } char * cmd = strtok(line, " "); char * remaining_line = line + strlen(cmd) + 1; // debug_printf("remaining_line = %s\n", remaining_line); if (strcmp(cmd, "echo") == 0) { return shelly_cmd_echo(remaining_line); } else if (strcmp(cmd, "run") == 0) { return shelly_cmd_run(remaining_line); } else if (strcmp(cmd, "ps") == 0) { return shelly_cmd_ps(remaining_line); } else if (strcmp(cmd, "help") == 0) { return shelly_cmd_help(remaining_line); } else if (strcmp(cmd, "ls") == 0) { return shelly_cmd_ls(remaining_line); } else if (strcmp(cmd, "cat") == 0) { return shelly_cmd_cat(remaining_line); } else if (strcmp(cmd, "mkdir") == 0) { return shelly_cmd_mkdir(remaining_line); } else if (strcmp(cmd, "rmdir") == 0) { return shelly_cmd_rmdir(remaining_line); } else { char buf[256]; snprintf(buf, 256, "unknown command \"%s\"\n\r", cmd); shelly_write_str(buf); } return SYS_ERR_OK; }