projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altos: Clean up st7565 LCD driver
[fw/altos]
/
src
/
kernel
/
ao_cmd.c
diff --git
a/src/kernel/ao_cmd.c
b/src/kernel/ao_cmd.c
index a72192f4665f268bdab7b4dbb23b38ab5d936c01..d8ba8372f5d0e308109ad6bd17c84a1a7c0d4541 100644
(file)
--- 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 uint8_t cmd_len;
static uint8_t cmd_i;
+static const char backspace[] = "\010 \010";
+
void
ao_put_string(const char *s)
{
void
ao_put_string(const char *s)
{
@@
-42,18
+44,12
@@
ao_put_string(const char *s)
putchar(c);
}
putchar(c);
}
-static void
-backspace(void)
-{
- ao_put_string ("\010 \010");
-}
-
void
void
-ao_cmd_readline(
void
)
+ao_cmd_readline(
const char *prompt
)
{
char c;
if (ao_echo())
{
char c;
if (ao_echo())
- ao_put_string(
"> "
);
+ ao_put_string(
prompt
);
cmd_len = 0;
for (;;) {
flush();
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())
if (c == '\010' || c == '\177') {
if (cmd_len != 0) {
if (ao_echo())
-
backspace(
);
+
ao_put_string(backspace
);
--cmd_len;
}
continue;
--cmd_len;
}
continue;
@@
-72,7
+68,7
@@
ao_cmd_readline(void)
if (c == '\025') {
while (cmd_len != 0) {
if (ao_echo())
if (c == '\025') {
while (cmd_len != 0) {
if (ao_echo())
-
backspace(
);
+
ao_put_string(backspace
);
--cmd_len;
}
continue;
--cmd_len;
}
continue;
@@
-136,8
+132,8
@@
ao_getnibble(void)
void
ao_cmd_put16(uint16_t v)
{
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
}
void
@@
-164,17
+160,16
@@
int8_t
ao_cmd_hexchar(char c)
{
if ('0' <= c && c <= '9')
ao_cmd_hexchar(char c)
{
if ('0' <= c && c <= '9')
- return (c - '0');
+ return (
int8_t) (
c - '0');
if ('a' <= c && c <= 'f')
if ('a' <= c && c <= 'f')
- return (c - 'a' + 10);
+ return (
int8_t) (
c - 'a' + 10);
if ('A' <= c && c <= 'F')
if ('A' <= c && c <= 'F')
- return (c - 'A' + 10);
+ return (
int8_t) (
c - 'A' + 10);
return -1;
}
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;
{
uint32_t result = 0;
uint8_t i;
@@
-187,7
+182,7
@@
_ao_cmd_hex(uint8_t lim)
ao_cmd_status = ao_cmd_lex_error;
break;
}
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;
ao_cmd_lex();
}
return result;
@@
-196,13
+191,13
@@
_ao_cmd_hex(uint8_t lim)
uint8_t
ao_cmd_hexbyte(void)
{
uint8_t
ao_cmd_hexbyte(void)
{
- return
_ao_cmd
_hex(2);
+ return
(uint8_t) get
_hex(2);
}
uint32_t
ao_cmd_hex(void)
{
}
uint32_t
ao_cmd_hex(void)
{
- return
_ao_cmd
_hex(0xff);
+ return
get
_hex(0xff);
}
uint32_t
}
uint32_t
@@
-210,8
+205,13
@@
ao_cmd_decimal(void)
{
uint32_t result = 0;
uint8_t r = ao_cmd_lex_error;
{
uint32_t result = 0;
uint8_t r = ao_cmd_lex_error;
+ bool negative = false;
ao_cmd_white();
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');
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 (r != ao_cmd_success)
ao_cmd_status = r;
+ if (negative)
+ result = -result;
return result;
}
return result;
}
@@
-268,13
+270,15
@@
ao_reboot(void)
#endif
#if HAS_VERSION
#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"
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
"current-flight %u\n"
#endif
#if HAS_LOG
@@
-292,7
+296,7
@@
version(void)
, ao_manufacturer
, ao_product
, ao_serial_number
, 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
, ao_flight_number
#endif
#if HAS_LOG
@@
-305,7
+309,7
@@
version(void)
, (unsigned) ((uint32_t) AO_BOOT_APPLICATION_BOUND - (uint32_t) AO_BOOT_APPLICATION_BASE)
#endif
);
, (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
}
#endif
@@
-323,7
+327,7
@@
help(void)
uint8_t cmd;
const struct ao_cmds * cs;
const char *h;
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];
for (cmds = 0; cmds < ao_ncmds; cmds++) {
cs = ao_cmds[cmds];
@@
-371,7
+375,7
@@
ao_cmd(void)
void (*func)(void);
for (;;) {
void (*func)(void);
for (;;) {
- ao_cmd_readline();
+ ao_cmd_readline(
"> "
);
ao_cmd_lex();
ao_cmd_white();
c = ao_cmd_lex_c;
ao_cmd_lex();
ao_cmd_white();
c = ao_cmd_lex_c;