diff --git a/sw/airborne/downlink.h b/sw/airborne/downlink.h index 4df1ee4166..cef7385d28 100644 --- a/sw/airborne/downlink.h +++ b/sw/airborne/downlink.h @@ -61,6 +61,9 @@ extern uint8_t telemetry_mode_Fbw; /** Counter of messages not sent because of unavailibity of the output buffer*/ extern uint8_t downlink_nb_ovrn; +extern uint16_t downlink_nb_bytes; +extern uint16_t downlink_nb_msgs; + #define __Transport(dev, _x) dev##_x #define _Transport(dev, _x) __Transport(dev, _x) @@ -68,7 +71,9 @@ extern uint8_t downlink_nb_ovrn; /** Set of macros for generated code (messages.h) from messages.xml */ -#define DownlinkSizeOf(_x) Transport(SizeOf(_x)) +/** 2 = ac_id + msg_id */ +#define DownlinkIDsSize(_x) (_x+2) +#define DownlinkSizeOf(_x) Transport(SizeOf(DownlinkIDsSize(_x))) #define DownlinkCheckFreeSpace(_x) Transport(CheckFreeSpace((uint8_t)(_x))) @@ -87,10 +92,12 @@ extern uint8_t downlink_nb_ovrn; #define DownlinkPutUint16Array(_n, _x) Transport(PutUint16Array(_n, _x)) #define DownlinkPutUint8Array(_n, _x) Transport(PutUint8Array(_n, _x)) -#define DonwlinkOverrun() downlink_nb_ovrn++; +#define DownlinkOverrun() downlink_nb_ovrn++; +#define DownlinkCountBytes(_n) downlink_nb_bytes += _n; #define DownlinkStartMessage(_name, msg_id, payload_len) { \ - Transport(Header(payload_len)); \ + downlink_nb_msgs++; \ + Transport(Header(DownlinkIDsSize(payload_len))); \ Transport(PutUint8(AC_ID)); \ Transport(PutNamedUint8(_name, msg_id)); \ } diff --git a/sw/airborne/pprz_transport.h b/sw/airborne/pprz_transport.h index 36db7f1e28..0c501ae37d 100644 --- a/sw/airborne/pprz_transport.h +++ b/sw/airborne/pprz_transport.h @@ -33,8 +33,8 @@ extern uint8_t ck_a, ck_b; #define STX 0x99 -/** 6 = STX + len + ac_id + msg_id + ck_a + ck_b */ -#define PprzTransportSizeOf(_payload) (_payload+6) +/** 4 = STX + len + ck_a + ck_b */ +#define PprzTransportSizeOf(_payload) (_payload+4) #define __Link(dev, _x) dev##_x #define _Link(dev, _x) __Link(dev, _x) diff --git a/sw/airborne/xbee.h b/sw/airborne/xbee.h index 06d648febd..2069c762d7 100644 --- a/sw/airborne/xbee.h +++ b/sw/airborne/xbee.h @@ -57,7 +57,10 @@ void xbee_init( void ); #define XBeePrintHex16(x) XBeeLink(PrintHex16(x)) #define XBeeTransportPut1Byte(x) XBeeLink(Transmit(x)) #define XBeeTransportCheckFreeSpace(x) XBeeLink(CheckFreeSpace(x)) -#define XBeeTransportSizeOf(_x) (_x+5) +/* 5 = Start + len_msb + len_lsb + API_id + checksum */ +#define XBeeAPISizeOf(_x) (_x+5) +/* 4 = frame_id + addr_msb + addr_lsb + options */ +#define XBeeTransportSizeOf(_x) XBeeAPISizeOf(_x+4) #define XBeeTransportSendMessage() XBeeLink(SendMessage()) #define XBeeTransportPutUint8(_x) { \ @@ -129,7 +132,7 @@ void xbee_init( void ); #define XBeeTransportHeader(_len) { \ XBeeTransportPut1Byte(XBEE_START); \ - uint8_t payload_len = XBeeTransportSizeOf(_len + 2); \ + uint8_t payload_len = XBeeAPISizeOf(_len); \ XBeeTransportPut2Bytes(payload_len); \ xbee_cs = 0; \ XBeeTransportPutTX16Header(); \