projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
beep, cmd, config, convert_volt, data, distance, fec, kalman: -Wconversion warnings
[fw/altos]
/
src
/
kernel
/
ao_cmd.c
diff --git
a/src/kernel/ao_cmd.c
b/src/kernel/ao_cmd.c
index 7bb4654e775e472d486fbf4985989b2c8d05614d..cbee3cd5109cae00f10343519dd7e08540fdc27a 100644
(file)
--- a/
src/kernel/ao_cmd.c
+++ b/
src/kernel/ao_cmd.c
@@
-19,10
+19,8
@@
#include "ao.h"
#include "ao_task.h"
#include "ao.h"
#include "ao_task.h"
-__pdata uint16_t ao_cmd_lex_i;
-__pdata uint32_t ao_cmd_lex_u32;
-__pdata char ao_cmd_lex_c;
-__pdata enum ao_cmd_status ao_cmd_status;
+char ao_cmd_lex_c;
+enum ao_cmd_status ao_cmd_status;
#ifndef AO_CMD_LEN
#if AO_PYRO_NUM
#ifndef AO_CMD_LEN
#if AO_PYRO_NUM
@@
-32,30
+30,26
@@
__pdata enum ao_cmd_status ao_cmd_status;
#endif
#endif
#endif
#endif
-static __xdata char cmd_line[AO_CMD_LEN];
-static __pdata uint8_t cmd_len;
-static __pdata uint8_t cmd_i;
+static char cmd_line[AO_CMD_LEN];
+static uint8_t cmd_len;
+static uint8_t cmd_i;
+
+static const char backspace[] = "\010 \010";
void
void
-ao_put_string(
__code
char *s)
+ao_put_string(
const
char *s)
{
char c;
while ((c = *s++))
putchar(c);
}
{
char c;
while ((c = *s++))
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();
@@
-64,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;
@@
-74,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;
@@
-138,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
@@
-166,63
+160,61
@@
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;
}
-void
-
ao_cmd_hexbyte(void
)
+static uint32_t
+
get_hex(uint8_t lim
)
{
{
+ uint32_t result = 0;
uint8_t i;
uint8_t i;
- int8_t n;
- ao_cmd_lex_i = 0;
ao_cmd_white();
ao_cmd_white();
- for (i = 0; i <
2
; i++) {
- n = ao_cmd_hexchar(ao_cmd_lex_c);
+ for (i = 0; i <
lim
; i++) {
+
int8_t
n = ao_cmd_hexchar(ao_cmd_lex_c);
if (n < 0) {
if (n < 0) {
- ao_cmd_status = ao_cmd_syntax_error;
+ if (i == 0 || lim != 0xff)
+ ao_cmd_status = ao_cmd_lex_error;
break;
}
break;
}
-
ao_cmd_lex_i = (ao_cmd_lex_i << 4) | n
;
+
result = (uint32_t) ((result << 4) | (uint32_t) n)
;
ao_cmd_lex();
}
ao_cmd_lex();
}
+ return result;
}
}
-void
-ao_cmd_hex(void)
+uint8_t
+ao_cmd_hex
byte
(void)
{
{
-
__pdata uint8_t r = ao_cmd_lex_error
;
- int8_t n;
+
return (uint8_t) get_hex(2)
;
+}
- ao_cmd_lex_i = 0;
- ao_cmd_white();
- for(;;) {
- n = ao_cmd_hexchar(ao_cmd_lex_c);
- if (n < 0)
- break;
- ao_cmd_lex_i = (ao_cmd_lex_i << 4) | n;
- r = ao_cmd_success;
- ao_cmd_lex();
- }
- if (r != ao_cmd_success)
- ao_cmd_status = r;
+uint32_t
+ao_cmd_hex(void)
+{
+ return get_hex(0xff);
}
}
-void
-ao_cmd_decimal(void)
__reentrant
+uint32_t
+ao_cmd_decimal(void)
{
{
+ uint32_t result = 0;
uint8_t r = ao_cmd_lex_error;
uint8_t r = ao_cmd_lex_error;
+ bool negative = false;
- ao_cmd_lex_u32 = 0;
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')
for(;;) {
if ('0' <= ao_cmd_lex_c && ao_cmd_lex_c <= '9')
-
ao_cmd_lex_u32 = (ao_cmd_lex_u32 * 10)
+ (ao_cmd_lex_c - '0');
+
result = result * 10
+ (ao_cmd_lex_c - '0');
else
break;
r = ao_cmd_success;
else
break;
r = ao_cmd_success;
@@
-230,11
+222,13
@@
ao_cmd_decimal(void) __reentrant
}
if (r != ao_cmd_success)
ao_cmd_status = r;
}
if (r != ao_cmd_success)
ao_cmd_status = r;
- ao_cmd_lex_i = (uint16_t) ao_cmd_lex_u32;
+ if (negative)
+ result = -result;
+ return result;
}
uint8_t
}
uint8_t
-ao_match_word(
__code
char *word)
+ao_match_word(
const
char *word)
{
while (*word) {
if (ao_cmd_lex_c != *word) {
{
while (*word) {
if (ao_cmd_lex_c != *word) {
@@
-250,9
+244,9
@@
ao_match_word(__code char *word)
static void
echo(void)
{
static void
echo(void)
{
- ao_cmd_hex();
+
uint32_t v =
ao_cmd_hex();
if (ao_cmd_status == ao_cmd_success)
if (ao_cmd_status == ao_cmd_success)
- ao_stdios[ao_cur_stdio].echo =
ao_cmd_lex_i
!= 0;
+ ao_stdios[ao_cur_stdio].echo =
v
!= 0;
}
static void
}
static void
@@
-282,7
+276,7
@@
version(void)
printf("manufacturer %s\n"
"product %s\n"
"serial-number %u\n"
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
@@
-300,7
+294,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
@@
-321,17
+315,17
@@
version(void)
#define NUM_CMDS 11
#endif
#define NUM_CMDS 11
#endif
-static
__code struct ao_cmds *__xdata
(ao_cmds[NUM_CMDS]);
-static
__pdata
uint8_t ao_ncmds;
+static
const struct ao_cmds *
(ao_cmds[NUM_CMDS]);
+static uint8_t ao_ncmds;
static void
help(void)
{
static void
help(void)
{
-
__pdata
uint8_t cmds;
-
__pdata
uint8_t cmd;
-
__code struct ao_cmds * __pdata
cs;
-
__code
const char *h;
-
uint8
_t e;
+ uint8_t cmds;
+ uint8_t cmd;
+
const struct ao_cmds *
cs;
+ const char *h;
+
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];
@@
-363,7
+357,7
@@
report(void)
}
void
}
void
-ao_cmd_register(
__code
struct ao_cmds *cmds)
+ao_cmd_register(
const
struct ao_cmds *cmds)
{
if (ao_ncmds >= NUM_CMDS)
ao_panic(AO_PANIC_CMD);
{
if (ao_ncmds >= NUM_CMDS)
ao_panic(AO_PANIC_CMD);
@@
-373,13
+367,13
@@
ao_cmd_register(__code struct ao_cmds *cmds)
void
ao_cmd(void)
{
void
ao_cmd(void)
{
-
__pdata
char c;
+ char c;
uint8_t cmd, cmds;
uint8_t cmd, cmds;
-
__code struct ao_cmds * __xdata
cs;
- void (*
__xdata
func)(void);
+
const struct ao_cmds *
cs;
+ void (*func)(void);
for (;;) {
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;
@@
-424,10
+418,10
@@
ao_loader(void)
#endif
#if HAS_TASK
#endif
#if HAS_TASK
-
__xdata
struct ao_task ao_cmd_task;
+struct ao_task ao_cmd_task;
#endif
#endif
-
__code struct ao_cmds
ao_base_cmds[] = {
+
const struct ao_cmds
ao_base_cmds[] = {
{ help, "?\0Help" },
#if HAS_TASK_INFO && HAS_TASK
{ ao_task_info, "T\0Tasks" },
{ help, "?\0Help" },
#if HAS_TASK_INFO && HAS_TASK
{ ao_task_info, "T\0Tasks" },