X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=main.c;h=20d368b120764d8127447994ff16ba43b407c833;hb=04735ee519979e772e94824304111369f6d01f2b;hp=0d5cad65d3558c8456c7eab9d8bb35128a094730;hpb=f74db5fd03bcd38af3ca533e7531dd70454dfaaf;p=protos%2Fxbee-avr.git diff --git a/main.c b/main.c index 0d5cad6..20d368b 100644 --- a/main.c +++ b/main.c @@ -203,15 +203,16 @@ static int dump_atcmd(struct xbee_ctx *ctx, struct xbee_atresp_hdr *frame, result = (void *)frame->data; len -= offsetof(struct xbee_atresp_hdr, data); if (cmd.flags & XBEE_ATCMD_F_PARAM_U8 && len == sizeof(uint8_t)) - printf_P(PSTR("<%s> is 0x%x\r\n"), atcmd_str, result->u8); + printf_P(PSTR("<%s> is 0x%x (%d)\r\n"), atcmd_str, result->u8, + result->u8); else if (cmd.flags & XBEE_ATCMD_F_PARAM_U16 && len == sizeof(uint16_t)) - printf_P(PSTR("<%s> is 0x%x\r\n"), + printf_P(PSTR("<%s> is 0x%x (%d)\r\n"), atcmd_str, - ntohs(result->u16)); + ntohs(result->u16), ntohs(result->u16)); else if (cmd.flags & XBEE_ATCMD_F_PARAM_U32 && len == sizeof(uint32_t)) - printf_P(PSTR("<%s> is 0x%"PRIx32"\r\n"), + printf_P(PSTR("<%s> is 0x%"PRIx32" (%"PRIu32")\r\n"), atcmd_str, - ntohl(result->u32)); + ntohl(result->u32), ntohs(result->u32)); else if (cmd.flags & XBEE_ATCMD_F_PARAM_S16 && len == sizeof(int16_t)) printf_P(PSTR("<%s> is %d\r\n"), atcmd_str, ntohs(result->s16)); else if (len == 0) @@ -237,6 +238,7 @@ int xbee_recv_data(struct xbee_recv_hdr *recvframe, unsigned len) return -1; switch (rch->type) { +#if 0 case RC_PROTO_TYPE_CHANNEL: { struct rc_proto_channel *rcc = (struct rc_proto_channel *) recvframe->data; @@ -263,6 +265,7 @@ int xbee_recv_data(struct xbee_recv_hdr *recvframe, unsigned len) break; } +#endif default: return -1; } @@ -271,11 +274,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 xbee_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"), @@ -317,24 +320,28 @@ void xbee_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; } @@ -347,11 +354,13 @@ void xbee_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 */ @@ -377,7 +386,7 @@ static int xbeeapp_send(struct xbee_ctx *ctx, int type, void *buf, unsigned len, /* register a channel */ channel = xbee_register_channel(xbee_dev, XBEE_CHANNEL_ANY, - xbee_rx, NULL); + xbeeapp_rx, NULL); if (channel < 0) { printf_P(PSTR("cannot send: no free channel\r\n")); return -1; @@ -395,8 +404,7 @@ static int xbeeapp_send(struct xbee_ctx *ctx, int type, void *buf, unsigned len, hexdump("xmit frame", buf, len); /* transmit the frame on this channel */ - ret = xbee_proto_xmit(xbee_dev, channel, type, buf, - len); + ret = xbee_tx(xbee_dev, channel, type, buf, len); if (ret < 0) { printf_P(PSTR("cannot send\r\n")); xbee_unregister_channel(xbee_dev, channel); @@ -574,7 +582,7 @@ void xbee_mainloop(void) else { if (xbee_cmdline_input_enabled) cmdline_poll(); - xbee_proto_rx(xbee_dev); + xbee_rx(xbee_dev); } } } @@ -657,7 +665,7 @@ int main(void) /* register default channel with a callback */ if (xbee_register_channel(xbee_dev, XBEE_DEFAULT_CHANNEL, - xbee_rx, NULL) < 0) { + xbeeapp_rx, NULL) < 0) { fprintf(stderr, "cannot register default channel\n"); return -1; }