X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=main.c;h=3959ee4ffa53699c40127dfed3b2b122feb0f05d;hb=8a9ba904e4215b92930a6d71c06c97514bcc6688;hp=7dc45bb4cfd41f7c55c5df669ee575498d732935;hpb=98ee473e32629463b081b01d82097a541da958b2;p=protos%2Fxbee-avr.git diff --git a/main.c b/main.c index 7dc45bb..3959ee4 100644 --- a/main.c +++ b/main.c @@ -58,7 +58,7 @@ struct xbeeboard xbeeboard; volatile uint16_t global_ms; -struct callout_manager cm; +struct callout_mgr cm; #define TIMEOUT_MS 1000 @@ -266,6 +266,16 @@ int xbee_recv_data(struct xbee_recv_hdr *recvframe, unsigned len) break; } #endif + case RC_PROTO_HELLO: { + struct rc_proto_hello *rch = + (struct rc_proto_hello *) recvframe->data; + + if (xbee_debug) + printf_P(PSTR("recv hello len=%d\r\n"), + rch->datalen); + + break; + } default: return -1; } @@ -274,11 +284,11 @@ int xbee_recv_data(struct xbee_recv_hdr *recvframe, unsigned len) } /* socat /dev/ttyUSB0,raw,echo=0,b115200 /dev/ttyACM1,raw,echo=0,b115200 */ -void xbeeapp_rx(struct xbee_dev *dev, int channel, int type, +int8_t xbeeapp_rx(struct xbee_dev *dev, int channel, int type, void *frame, unsigned len, void *opaque) { struct xbee_ctx *ctx = opaque; - int do_hexdump = xbee_hexdump; + int8_t ret = 0; if (xbee_debug) printf_P(PSTR("type=0x%x, channel=%d, ctx=%p\r\n"), @@ -320,24 +330,28 @@ void xbeeapp_rx(struct xbee_dev *dev, int channel, int type, /* this answer contains an atcmd answer at offset 10 */ if (dump_atcmd(ctx, frame + 10, len - 10) < 0) - do_hexdump = 1; + ret = -1; + break; } case XBEE_TYPE_ATRESP: { if (dump_atcmd(ctx, frame, len) < 0) - do_hexdump = 1; + ret = -1; + break; } case XBEE_TYPE_XMIT_STATUS: { if (parse_xmit_status(ctx, frame, len) < 0) - do_hexdump = 1; + ret = -1; + break; } case XBEE_TYPE_RECV: { if (xbee_recv_data(frame, len) < 0) - do_hexdump = 1; + ret = -1; + break; } @@ -350,11 +364,13 @@ void xbeeapp_rx(struct xbee_dev *dev, int channel, int type, case XBEE_TYPE_NODE_ID: default: printf_P(PSTR("Invalid frame\r\n")); - do_hexdump = 1; + ret = -1; break; } - if (do_hexdump) + if (ret < 0) + hexdump("undecoded rx frame", frame, len); + else if (xbee_hexdump) hexdump("undecoded rx frame", frame, len); /* restart command line if it was a blocking query */ @@ -485,7 +501,7 @@ void xbee_stdin_disable(void) xbee_cmdline_input_enabled = 0; } -static void evt_timeout(struct callout_manager *cm, struct callout *clt, +static void evt_timeout(struct callout_mgr *cm, struct callout *clt, void *arg) { struct xbee_ctx *ctx = arg; @@ -505,7 +521,8 @@ static void evt_timeout(struct callout_manager *cm, struct callout *clt, void xbee_load_timeout(struct xbee_ctx *ctx) { - callout_reset(&cm, &ctx->timeout, TIMEOUT_MS, SINGLE, evt_timeout, ctx); + callout_init(&ctx->timeout, evt_timeout, ctx, 0); + callout_schedule(&cm, &ctx->timeout, TIMEOUT_MS); } void xbee_unload_timeout(struct xbee_ctx *ctx) @@ -640,10 +657,7 @@ int main(void) spi_servo_init(); beep_init(); - printf_P(PSTR("\r\n")); - rdline_newline(&xbeeboard.rdl, xbeeboard.prompt); - - callout_manager_init(&cm, get_time_ms); + callout_mgr_init(&cm, get_time_ms); //callout_reset(&cm, &t1, 500, PERIODICAL, do_led_blink, NULL); /* initialize libxbee */ @@ -666,6 +680,10 @@ int main(void) sei(); eeprom_load_config(); + + printf_P(PSTR("\r\n")); + rdline_newline(&xbeeboard.rdl, xbeeboard.prompt); + xbee_mainloop(); return 0; }