diff --git a/sw/airborne/subsystems/datalink/bluegiga.h b/sw/airborne/subsystems/datalink/bluegiga.h index 167d1826b8..6fa84f8d35 100644 --- a/sw/airborne/subsystems/datalink/bluegiga.h +++ b/sw/airborne/subsystems/datalink/bluegiga.h @@ -96,7 +96,7 @@ static inline void bluegiga_read_buffer(struct bluegiga_periph *p, struct pprz_t #ifdef MODEM_LED LED_TOGGLE(MODEM_LED); #endif - pprz_parse_payload(t); + DatalinkFillDlBuffer(t->trans_rx.payload, t->trans_rx.payload_len); t->trans_rx.msg_received = FALSE; } bluegiga_increment_buf(&p->rx_extract_idx, c); diff --git a/sw/airborne/subsystems/datalink/datalink.h b/sw/airborne/subsystems/datalink/datalink.h index fbc7dc6f26..7f17c5143d 100644 --- a/sw/airborne/subsystems/datalink/datalink.h +++ b/sw/airborne/subsystems/datalink/datalink.h @@ -68,6 +68,15 @@ EXTERN void dl_parse_msg(void); EXTERN bool_t datalink_enabled; #endif +/** Convenience macro to fill dl_buffer */ +#define DatalinkFillDlBuffer(_buf, _len) { \ + uint8_t _i = 0; \ + for (_i = 0; _i < _len; _i++) { \ + dl_buffer[_i] = _buf[_i]; \ + } \ + dl_msg_available = TRUE; \ +} + /** Check for new message and parse */ static inline void DlCheckAndParse(void) { diff --git a/sw/airborne/subsystems/datalink/downlink.c b/sw/airborne/subsystems/datalink/downlink.c index 47ed050872..a6ae7b284e 100644 --- a/sw/airborne/subsystems/datalink/downlink.c +++ b/sw/airborne/subsystems/datalink/downlink.c @@ -33,7 +33,7 @@ struct ivy_transport ivy_tp; #endif -#if DATALINK == PPRZ +#if DATALINK == PPRZ || DATALINK == SUPERBITRF || DATALINK == W5100 || DATALINK == BLUEGIGA struct pprz_transport pprz_tp; #endif #if DATALINK == XBEE diff --git a/sw/airborne/subsystems/datalink/downlink.h b/sw/airborne/subsystems/datalink/downlink.h index c263152ba5..5264293e4f 100644 --- a/sw/airborne/subsystems/datalink/downlink.h +++ b/sw/airborne/subsystems/datalink/downlink.h @@ -58,7 +58,7 @@ extern struct ivy_transport ivy_tp; #else /** SITL */ -#if DATALINK == PPRZ +#if DATALINK == PPRZ || DATALINK == SUPERBITRF || DATALINK == W5100 || DATALINK == BLUEGIGA #include "pprzlink/pprz_transport.h" extern struct pprz_transport pprz_tp; #endif @@ -73,10 +73,14 @@ extern struct pprzlog_transport pprzlog_tp; extern struct xbee_transport xbee_tp; #endif -//#include "subsystems/datalink/w5100.h" -#if DATALINK == BLUEGIGA -//#include "subsystems/datalink/bluegiga.h" +#if DATALINK == W5100 +#include "subsystems/datalink/w5100.h" #endif + +#if DATALINK == BLUEGIGA +#include "subsystems/datalink/bluegiga.h" +#endif + #if USE_SUPERBITRF #include "subsystems/datalink/superbitrf.h" #endif diff --git a/sw/airborne/subsystems/datalink/superbitrf.c b/sw/airborne/subsystems/datalink/superbitrf.c index e44d9c49d1..f994a3b748 100644 --- a/sw/airborne/subsystems/datalink/superbitrf.c +++ b/sw/airborne/subsystems/datalink/superbitrf.c @@ -863,7 +863,7 @@ static inline void superbitrf_receive_packet_cb(bool_t error, uint8_t status, ui // When we have a full message if (superbitrf.rx_transport.trans_rx.msg_received) { - pprz_parse_payload(&superbitrf.rx_transport); + DatalinkFillDlBuffer(superbitrf.rx_transport.trans_rx.payload, superbitrf.rx_transport.trans_rx.payload_len); superbitrf.rx_transport.trans_rx.msg_received = FALSE; } } @@ -923,7 +923,7 @@ static inline void superbitrf_receive_packet_cb(bool_t error, uint8_t status, ui // When we have a full message if (superbitrf.rx_transport.trans_rx.msg_received) { - pprz_parse_payload(&superbitrf.rx_transport); + DatalinkFillDlBuffer(superbitrf.rx_transport.trans_rx.payload, superbitrf.rx_transport.trans_rx.payload_len); superbitrf.rx_transport.trans_rx.msg_received = FALSE; } } @@ -1009,7 +1009,7 @@ static inline void superbitrf_receive_packet_cb(bool_t error, uint8_t status, ui // When we have a full message if (superbitrf.rx_transport.trans_rx.msg_received) { - pprz_parse_payload(&superbitrf.rx_transport); + DatalinkFillDlBuffer(superbitrf.rx_transport.trans_rx.payload, superbitrf.rx_transport.trans_rx.payload_len); superbitrf.rx_transport.trans_rx.msg_received = FALSE; } } diff --git a/sw/airborne/subsystems/datalink/w5100.h b/sw/airborne/subsystems/datalink/w5100.h index c98ad9cbea..e2f6a5ff8b 100644 --- a/sw/airborne/subsystems/datalink/w5100.h +++ b/sw/airborne/subsystems/datalink/w5100.h @@ -93,7 +93,7 @@ static inline void w5100_check_and_parse(struct link_device *dev, struct pprz_tr if (dev->char_available(dev->periph)) { w5100_read_buffer(trans); if (trans->trans_rx.msg_received) { - pprz_parse_payload(trans); + DatalinkFillDlBuffer(trans->trans_rx.payload, trans->trans_rx.payload_len); trans->trans_rx.msg_received = FALSE; } } diff --git a/sw/ext/pprzlink b/sw/ext/pprzlink index 169ab04c94..54eaa8a3fa 160000 --- a/sw/ext/pprzlink +++ b/sw/ext/pprzlink @@ -1 +1 @@ -Subproject commit 169ab04c94ef004e6b8383a3c42a69d3749d260f +Subproject commit 54eaa8a3fa102f5a1c2fb44ac65a10317470cc0c