From: Olivier Matz Date: Tue, 12 Nov 2013 22:36:32 +0000 (+0100) Subject: propagate error to lower layer (xbee library) X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=04735ee519979e772e94824304111369f6d01f2b;p=protos%2Fxbee-avr.git propagate error to lower layer (xbee library) --- diff --git a/main.c b/main.c index 7dc45bb..20d368b 100644 --- a/main.c +++ b/main.c @@ -274,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 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 +320,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 +354,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 */ diff --git a/main.h b/main.h index d28a366..1ad2c0b 100644 --- a/main.h +++ b/main.h @@ -105,8 +105,8 @@ extern struct callout_manager cm; void bootloader(void); -void xbeeapp_rx(struct xbee_dev *dev, int channel, int type, - void *frame, unsigned len, void *opaque); +int8_t xbeeapp_rx(struct xbee_dev *dev, int channel, int type, + void *frame, unsigned len, void *opaque); int xbeeapp_send_atcmd(const char *atcmd_str, void *param, unsigned param_len, int foreground, int (*func)(void *frame, unsigned len, void *arg),