diff --git a/libuavcan/test/transport/dispatcher.cpp b/libuavcan/test/transport/dispatcher.cpp index ce30738e21..fe695bf515 100644 --- a/libuavcan/test/transport/dispatcher.cpp +++ b/libuavcan/test/transport/dispatcher.cpp @@ -3,6 +3,7 @@ */ #include +#include #include #include "transfer_test_helpers.hpp" #include "can/can.hpp" @@ -31,6 +32,21 @@ public: }; +struct RxFrameListener : public uavcan::IRxFrameListener +{ + std::vector rx_frames; + + virtual void handleRxFrame(const uavcan::CanRxFrame& frame, uavcan::CanIOFlags flags) + { + std::cout << "RX frame [flags=" << flags << "]: " << frame.toString() << std::endl; + if ((flags & uavcan::CanIOFlagLoopback) == 0) + { + rx_frames.push_back(frame); + } + } +}; + + static const uavcan::NodeID SELF_NODE_ID(64); @@ -52,6 +68,15 @@ TEST(Dispatcher, Reception) DispatcherTransferEmulator emulator(driver, SELF_NODE_ID); + /* + * RX listener + */ + RxFrameListener rx_listener; + ASSERT_FALSE(dispatcher.getRxFrameListener()); + dispatcher.installRxFrameListener(&rx_listener); + ASSERT_TRUE(dispatcher.getRxFrameListener()); + ASSERT_TRUE(rx_listener.rx_frames.empty()); + /* * Test environment */ @@ -222,6 +247,12 @@ TEST(Dispatcher, Reception) EXPECT_LT(0, dispatcher.getTransferPerfCounter().getErrorCount()); // Repeated transfers EXPECT_EQ(0, dispatcher.getTransferPerfCounter().getTxTransferCount()); EXPECT_EQ(9, dispatcher.getTransferPerfCounter().getRxTransferCount()); + + /* + * RX listener + */ + std::cout << "Num received frames: " << rx_listener.rx_frames.size() << std::endl; + ASSERT_EQ(218, rx_listener.rx_frames.size()); } @@ -240,6 +271,12 @@ TEST(Dispatcher, Transmission) ASSERT_TRUE(dispatcher.setNodeID(SELF_NODE_ID)); // Can be set only once ASSERT_FALSE(dispatcher.setNodeID(SELF_NODE_ID)); + /* + * RX listener + */ + RxFrameListener rx_listener; + dispatcher.installRxFrameListener(&rx_listener); + /* * Transmission */ @@ -277,6 +314,11 @@ TEST(Dispatcher, Transmission) EXPECT_EQ(0, dispatcher.getTransferPerfCounter().getErrorCount()); EXPECT_EQ(0, dispatcher.getTransferPerfCounter().getTxTransferCount()); EXPECT_EQ(0, dispatcher.getTransferPerfCounter().getRxTransferCount()); + + /* + * RX listener + */ + ASSERT_TRUE(rx_listener.rx_frames.empty()); }