diff --git a/libuavcan/include/uavcan/node/generic_subscriber.hpp b/libuavcan/include/uavcan/node/generic_subscriber.hpp index 33b57a893f..9ba10162a6 100644 --- a/libuavcan/include/uavcan/node/generic_subscriber.hpp +++ b/libuavcan/include/uavcan/node/generic_subscriber.hpp @@ -53,6 +53,7 @@ public: TransferType getTransferType() const { return safeget(); } TransferID getTransferID() const { return safeget(); } NodeID getSrcNodeID() const { return safeget(); } + uint8_t getIfaceIndex() const { return safeget(); } }; template diff --git a/libuavcan/include/uavcan/transport/transfer_listener.hpp b/libuavcan/include/uavcan/transport/transfer_listener.hpp index be1e8ad41b..1b241d3a23 100644 --- a/libuavcan/include/uavcan/transport/transfer_listener.hpp +++ b/libuavcan/include/uavcan/transport/transfer_listener.hpp @@ -26,18 +26,20 @@ class IncomingTransfer : public ITransferBuffer TransferType transfer_type_; TransferID transfer_id_; NodeID src_node_id_; + uint8_t iface_index_; /// That's a no-op, asserts in debug builds int write(unsigned int offset, const uint8_t* data, unsigned int len); protected: IncomingTransfer(MonotonicTime ts_mono, UtcTime ts_utc, TransferType transfer_type, - TransferID transfer_id, NodeID source_node_id) + TransferID transfer_id, NodeID source_node_id, uint8_t iface_index) : ts_mono_(ts_mono) , ts_utc_(ts_utc) , transfer_type_(transfer_type) , transfer_id_(transfer_id) , src_node_id_(source_node_id) + , iface_index_(iface_index) { } public: @@ -51,6 +53,7 @@ public: TransferType getTransferType() const { return transfer_type_; } TransferID getTransferID() const { return transfer_id_; } NodeID getSrcNodeID() const { return src_node_id_; } + uint8_t getIfaceIndex() const { return iface_index_; } }; /** diff --git a/libuavcan/src/transport/transfer_listener.cpp b/libuavcan/src/transport/transfer_listener.cpp index 0da3b4a6e2..411f174310 100644 --- a/libuavcan/src/transport/transfer_listener.cpp +++ b/libuavcan/src/transport/transfer_listener.cpp @@ -23,7 +23,7 @@ int IncomingTransfer::write(unsigned int, const uint8_t*, unsigned int) */ SingleFrameIncomingTransfer::SingleFrameIncomingTransfer(const RxFrame& frm) : IncomingTransfer(frm.getMonotonicTimestamp(), frm.getUtcTimestamp(), frm.getTransferType(), - frm.getTransferID(), frm.getSrcNodeID()) + frm.getTransferID(), frm.getSrcNodeID(), frm.getIfaceIndex()) , payload_(frm.getPayloadPtr()) , payload_len_(frm.getPayloadLen()) { @@ -52,7 +52,7 @@ int SingleFrameIncomingTransfer::read(unsigned int offset, uint8_t* data, unsign MultiFrameIncomingTransfer::MultiFrameIncomingTransfer(MonotonicTime ts_mono, UtcTime ts_utc, const RxFrame& last_frame, TransferBufferAccessor& tba) : IncomingTransfer(ts_mono, ts_utc, last_frame.getTransferType(), last_frame.getTransferID(), - last_frame.getSrcNodeID()) + last_frame.getSrcNodeID(), last_frame.getIfaceIndex()) , buf_acc_(tba) { assert(last_frame.isValid()); diff --git a/libuavcan/test/node/subscriber.cpp b/libuavcan/test/node/subscriber.cpp index 1b215852f5..980c70a7a2 100644 --- a/libuavcan/test/node/subscriber.cpp +++ b/libuavcan/test/node/subscriber.cpp @@ -24,6 +24,7 @@ struct SubscriptionListener uavcan::TransferType transfer_type; uavcan::TransferID transfer_id; uavcan::NodeID src_node_id; + uavcan::uint8_t iface_index; DataType msg; ReceivedDataStructureCopy(const ReceivedDataStructure& s) @@ -32,6 +33,7 @@ struct SubscriptionListener , transfer_type(s.getTransferType()) , transfer_id(s.getTransferID()) , src_node_id(s.getSrcNodeID()) + , iface_index(s.getIfaceIndex()) , msg(s) { } }; @@ -155,6 +157,7 @@ TEST(Subscriber, Basic) ASSERT_EQ(rx_frames[i].getTransferID(), s.transfer_id); ASSERT_EQ(rx_frames[i].getTransferType(), s.transfer_type); ASSERT_EQ(rx_frames[i].getMonotonicTimestamp(), s.ts_monotonic); + ASSERT_EQ(rx_frames[i].getIfaceIndex(), s.iface_index); } ASSERT_EQ(listener.simple.size(), rx_frames.size());