X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fkernel%2Fao_cmd.c;h=4ae63781fcb0900e39acdfc02ad8f737819d4b03;hb=eb77758b7dcdd0bcef12cd1d56cf4d447cbe5c8c;hp=a72192f4665f268bdab7b4dbb23b38ab5d936c01;hpb=c417ab1de2a083b5fcff2e081e4feb2a65887903;p=fw%2Faltos diff --git a/src/kernel/ao_cmd.c b/src/kernel/ao_cmd.c index a72192f4..4ae63781 100644 --- a/src/kernel/ao_cmd.c +++ b/src/kernel/ao_cmd.c @@ -34,6 +34,8 @@ static char cmd_line[AO_CMD_LEN]; static uint8_t cmd_len; static uint8_t cmd_i; +static const char backspace[] = "\010 \010"; + void ao_put_string(const char *s) { @@ -42,18 +44,12 @@ ao_put_string(const char *s) putchar(c); } -static void -backspace(void) -{ - ao_put_string ("\010 \010"); -} - void -ao_cmd_readline(void) +ao_cmd_readline(const char *prompt) { char c; if (ao_echo()) - ao_put_string("> "); + ao_put_string(prompt); cmd_len = 0; for (;;) { flush(); @@ -62,7 +58,7 @@ ao_cmd_readline(void) if (c == '\010' || c == '\177') { if (cmd_len != 0) { if (ao_echo()) - backspace(); + ao_put_string(backspace); --cmd_len; } continue; @@ -72,7 +68,7 @@ ao_cmd_readline(void) if (c == '\025') { while (cmd_len != 0) { if (ao_echo()) - backspace(); + ao_put_string(backspace); --cmd_len; } continue; @@ -172,9 +168,8 @@ ao_cmd_hexchar(char c) return -1; } -static -uint32_t -_ao_cmd_hex(uint8_t lim) +static uint32_t +get_hex(uint8_t lim) { uint32_t result = 0; uint8_t i; @@ -196,13 +191,13 @@ _ao_cmd_hex(uint8_t lim) uint8_t ao_cmd_hexbyte(void) { - return _ao_cmd_hex(2); + return get_hex(2); } uint32_t ao_cmd_hex(void) { - return _ao_cmd_hex(0xff); + return get_hex(0xff); } uint32_t @@ -210,8 +205,13 @@ ao_cmd_decimal(void) { uint32_t result = 0; uint8_t r = ao_cmd_lex_error; + bool negative = false; ao_cmd_white(); + if (ao_cmd_lex_c == '-') { + negative = true; + ao_cmd_lex(); + } for(;;) { if ('0' <= ao_cmd_lex_c && ao_cmd_lex_c <= '9') result = result * 10 + (ao_cmd_lex_c - '0'); @@ -222,6 +222,8 @@ ao_cmd_decimal(void) } if (r != ao_cmd_success) ao_cmd_status = r; + if (negative) + result = -result; return result; } @@ -274,7 +276,7 @@ version(void) printf("manufacturer %s\n" "product %s\n" "serial-number %u\n" -#if HAS_FLIGHT || HAS_TRACKER +#if HAS_LOG && (HAS_FLIGHT || HAS_TRACKER) "current-flight %u\n" #endif #if HAS_LOG @@ -292,7 +294,7 @@ version(void) , ao_manufacturer , ao_product , ao_serial_number -#if HAS_FLIGHT || HAS_TRACKER +#if HAS_LOG && (HAS_FLIGHT || HAS_TRACKER) , ao_flight_number #endif #if HAS_LOG @@ -371,7 +373,7 @@ ao_cmd(void) void (*func)(void); for (;;) { - ao_cmd_readline(); + ao_cmd_readline("> "); ao_cmd_lex(); ao_cmd_white(); c = ao_cmd_lex_c;