static uint8_t cmd_len;
static uint8_t cmd_i;
+static const char backspace[] = "\010 \010";
+
void
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();
if (c == '\010' || c == '\177') {
if (cmd_len != 0) {
if (ao_echo())
- backspace();
+ ao_put_string(backspace);
--cmd_len;
}
continue;
if (c == '\025') {
while (cmd_len != 0) {
if (ao_echo())
- backspace();
+ ao_put_string(backspace);
--cmd_len;
}
continue;
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;
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
{
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');
}
if (r != ao_cmd_success)
ao_cmd_status = r;
+ if (negative)
+ result = -result;
return result;
}
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
, 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
void (*func)(void);
for (;;) {
- ao_cmd_readline();
+ ao_cmd_readline("> ");
ao_cmd_lex();
ao_cmd_white();
c = ao_cmd_lex_c;