X-Git-Url: http://git.droids-corp.org/?p=protos%2Fxbee-avr.git;a=blobdiff_plain;f=cmdline.c;h=736fa52d6d3ce0963f257ab941b7ee95abfae030;hp=60dc9a693f70da836d6d15e418ff47541d5a39d5;hb=c17da94fafe8e0fa1a467f0c8fb7922fec8386e5;hpb=0e1c93804369af27043c82ccc778c42bf54a9bd4 diff --git a/cmdline.c b/cmdline.c index 60dc9a6..736fa52 100644 --- a/cmdline.c +++ b/cmdline.c @@ -30,39 +30,28 @@ #include #include #include -#include #include "callout.h" #include "main.h" #include "cmdline.h" -#ifdef USE_USB -#include "DualVirtualSerial.h" -#endif - +extern const parse_ctx_t PROGMEM main_ctx[]; -extern parse_pgm_ctx_t main_ctx[]; int cmdline_dev_send(char c, FILE* f) { -#ifdef USE_USB - CDC_Device_SendByte(&VirtualSerial1_CDC_Interface, (uint8_t)c); -#else + (void)f; uart_send(CMDLINE_UART, c); -#endif return 0; } int cmdline_dev_recv(FILE* f) { int16_t c; -#ifdef USE_USB - /* non-blocking ! */ - c = CDC_Device_ReceiveByte(&VirtualSerial1_CDC_Interface); -#else + + (void)f; c = uart_recv_nowait(CMDLINE_UART); -#endif if (c < 0) return _FDEV_EOF; @@ -72,11 +61,8 @@ int cmdline_dev_recv(FILE* f) int xbee_dev_send(char c, FILE* f) { -#ifdef USE_USB - CDC_Device_SendByte(&VirtualSerial2_CDC_Interface, (uint8_t)c); -#else + (void)f; uart_send(XBEE_UART, c); -#endif return 0; } @@ -84,24 +70,21 @@ int xbee_dev_recv(FILE* f) { int16_t c; -#ifdef USE_USB - /* non-blocking ! */ - c = CDC_Device_ReceiveByte(&VirtualSerial2_CDC_Interface); -#else + (void)f; c = uart_recv_nowait(XBEE_UART); -#endif if (c < 0) return _FDEV_EOF; return c; } -static void -valid_buffer(const char *buf, uint8_t size) +void cmdline_valid_buffer(const char *buf, uint8_t size) { int8_t ret; + PGM_P ctx = (PGM_P)main_ctx; - ret = parse(main_ctx, buf); + (void)size; + ret = parse(ctx, buf); if (ret == PARSE_AMBIGUOUS) printf_P(PSTR("Ambiguous command\r\n")); else if (ret == PARSE_NOMATCH) @@ -114,11 +97,12 @@ static int8_t complete_buffer(const char *buf, char *dstbuf, uint8_t dstsize, int16_t *state) { - return complete(main_ctx, buf, state, dstbuf, dstsize); + PGM_P ctx = (PGM_P)main_ctx; + return complete(ctx, buf, state, dstbuf, dstsize); } -static void write_char(char c) +void cmdline_write_char(char c) { cmdline_dev_send(c, NULL); } @@ -126,7 +110,7 @@ static void write_char(char c) void cmdline_init(void) { - rdline_init(&xbeeboard.rdl, write_char, valid_buffer, complete_buffer); + rdline_init(&xbeeboard.rdl, cmdline_write_char, cmdline_valid_buffer, complete_buffer); snprintf_P(xbeeboard.prompt, sizeof(xbeeboard.prompt), PSTR("mainboard > ")); } @@ -142,20 +126,22 @@ void emergency(char c) i++; else if ( !(i == 1 && c == 'p') ) i = 0; - if (i == 3) - bootloader(); + if (i == 3) { + //bootloader(); + reset(); + } } /* log function, add a command to configure * it dynamically */ void mylog(struct error * e, ...) { - va_list ap; #ifndef HOST_VERSION u16 stream_flags = stdout->flags; #endif - uint8_t i; - time_h tv; + va_list ap; + uint8_t i, flags; + uint32_t ms; if (e->severity > ERROR_SEVERITY_ERROR) { if (xbeeboard.log_level < e->severity) @@ -169,8 +155,11 @@ void mylog(struct error * e, ...) } va_start(ap, e); - tv = time_get_time(); - printf_P(PSTR("%d.%.3d: "), (int)tv.s, (int)(tv.us/1000UL)); + IRQ_LOCK(flags); + ms = global_ms; + IRQ_UNLOCK(flags); + + printf_P(PSTR("%d.%.3d: "), (int)(ms/1000UL), (int)(ms%1000UL)); vfprintf_P(stdout, e->text, ap); printf_P(PSTR("\r\n"));