X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Fao_cmd.c;h=a54a2316f006fb4a20909d430389413ac66922c1;hp=e3f85bc9090e8f64e0ad3b48bcea7d322e2296e6;hb=c443f43f8dee6e0fcbcecf9d09e948fd928b7af4;hpb=a4137263b69864c524d39c6ff88a0225fd06e79b diff --git a/src/ao_cmd.c b/src/ao_cmd.c index e3f85bc9..a54a2316 100644 --- a/src/ao_cmd.c +++ b/src/ao_cmd.c @@ -18,6 +18,7 @@ #include "ao.h" __xdata uint16_t ao_cmd_lex_i; +__xdata uint32_t ao_cmd_lex_u32; __xdata char ao_cmd_lex_c; __xdata enum ao_cmd_status ao_cmd_status; static __xdata uint8_t lex_echo; @@ -157,11 +158,11 @@ ao_cmd_decimal(void) { __xdata uint8_t r = ao_cmd_lex_error; - ao_cmd_lex_i = 0; + ao_cmd_lex_u32 = 0; ao_cmd_white(); for(;;) { if ('0' <= ao_cmd_lex_c && ao_cmd_lex_c <= '9') - ao_cmd_lex_i = (ao_cmd_lex_i * 10) + (ao_cmd_lex_c - '0'); + ao_cmd_lex_u32 = (ao_cmd_lex_u32 * 10) + (ao_cmd_lex_c - '0'); else break; r = ao_cmd_success; @@ -169,6 +170,21 @@ ao_cmd_decimal(void) } if (r != ao_cmd_success) ao_cmd_status = r; + ao_cmd_lex_i = (uint16_t) ao_cmd_lex_u32; +} + +uint8_t +ao_match_word(__code char *word) +{ + while (*word) { + if (ao_cmd_lex_c != *word) { + ao_cmd_status = ao_cmd_syntax_error; + return 0; + } + word++; + ao_cmd_lex(); + } + return 1; } static void @@ -185,6 +201,17 @@ echo(void) lex_echo = ao_cmd_lex_i != 0; } +static void +ao_reboot(void) +{ + ao_cmd_white(); + if (!ao_match_word("eboot")) + return; + WDCTL = WDCTL_EN | WDCTL_MODE_WATCHDOG | WDCTL_INT_64; + ao_delay(AO_SEC_TO_TICKS(2)); + ao_panic(AO_PANIC_REBOOT); +} + static void version(void) { @@ -236,13 +263,12 @@ ao_cmd_register(__code struct ao_cmds *cmds) } void -ao_cmd(void *parameters) +ao_cmd(void) { __xdata char c; __xdata uint8_t cmd, cmds; __code struct ao_cmds * __xdata cs; void (*__xdata func)(void); - (void) parameters; lex_echo = 1; for (;;) { @@ -278,6 +304,7 @@ __code struct ao_cmds ao_base_cmds[] = { { '?', help, "? Print this message" }, { 'T', ao_task_info, "T Show task states" }, { 'E', echo, "E <0 off, 1 on> Set command echo mode" }, + { 'r', ao_reboot, "r eboot Reboot" }, { 'v', version, "v Show version" }, { 0, help, NULL }, };