X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fkernel%2Fao_cmd.c;h=d8ba8372f5d0e308109ad6bd17c84a1a7c0d4541;hb=c49bd3cb0c31a51fae79ddc92237cc309be9a242;hp=d1c049ac78aaf5b03905dc13542905f74cb01d71;hpb=0686a7b8aec524d81bda4c572549a3a068ce0eed;p=fw%2Faltos diff --git a/src/kernel/ao_cmd.c b/src/kernel/ao_cmd.c index d1c049ac..d8ba8372 100644 --- a/src/kernel/ao_cmd.c +++ b/src/kernel/ao_cmd.c @@ -132,8 +132,8 @@ ao_getnibble(void) void ao_cmd_put16(uint16_t v) { - ao_cmd_put8(v >> 8); - ao_cmd_put8(v); + ao_cmd_put8((uint8_t) (v >> 8)); + ao_cmd_put8((uint8_t) v); } void @@ -160,11 +160,11 @@ int8_t ao_cmd_hexchar(char c) { if ('0' <= c && c <= '9') - return (c - '0'); + return (int8_t) (c - '0'); if ('a' <= c && c <= 'f') - return (c - 'a' + 10); + return (int8_t) (c - 'a' + 10); if ('A' <= c && c <= 'F') - return (c - 'A' + 10); + return (int8_t) (c - 'A' + 10); return -1; } @@ -182,7 +182,7 @@ get_hex(uint8_t lim) ao_cmd_status = ao_cmd_lex_error; break; } - result = (result << 4) | n; + result = (uint32_t) ((result << 4) | (uint32_t) n); ao_cmd_lex(); } return result; @@ -191,7 +191,7 @@ get_hex(uint8_t lim) uint8_t ao_cmd_hexbyte(void) { - return get_hex(2); + return (uint8_t) get_hex(2); } uint32_t @@ -205,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'); @@ -217,6 +222,8 @@ ao_cmd_decimal(void) } if (r != ao_cmd_success) ao_cmd_status = r; + if (negative) + result = -result; return result; } @@ -263,13 +270,15 @@ ao_reboot(void) #endif #if HAS_VERSION +#define _stringify(x) #x +#define stringify(x) _stringify(x) static void 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 @@ -287,7 +296,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 @@ -300,7 +309,7 @@ version(void) , (unsigned) ((uint32_t) AO_BOOT_APPLICATION_BOUND - (uint32_t) AO_BOOT_APPLICATION_BASE) #endif ); - printf("software-version %s\n", ao_version); + printf("software-version %." stringify(AO_MAX_VERSION) "s\n", ao_version); } #endif @@ -318,7 +327,7 @@ help(void) uint8_t cmd; const struct ao_cmds * cs; const char *h; - uint8_t e; + size_t e; for (cmds = 0; cmds < ao_ncmds; cmds++) { cs = ao_cmds[cmds];