diff --git a/libuavcan/include/uavcan/internal/transport/transfer_listener.hpp b/libuavcan/include/uavcan/internal/transport/transfer_listener.hpp index 4556b90052..04e26be3cc 100644 --- a/libuavcan/include/uavcan/internal/transport/transfer_listener.hpp +++ b/libuavcan/include/uavcan/internal/transport/transfer_listener.hpp @@ -87,13 +87,15 @@ public: */ class TransferListenerBase : public LinkedListNode { - const Crc16 crc_base_; ///< Pre-initialized with data type hash, thus constant + const DataTypeDescriptor* const data_type_; + const Crc16 crc_base_; ///< Pre-initialized with data type hash, thus constant bool checkPayloadCrc(const uint16_t compare_with, const TransferBufferBase& tbb) const; protected: TransferListenerBase(const DataTypeDescriptor* data_type) - : crc_base_(data_type->hash.value, DataTypeHash::NUM_BYTES) + : data_type_(data_type) + , crc_base_(data_type->hash.value, DataTypeHash::NUM_BYTES) { assert(data_type); } @@ -105,6 +107,8 @@ protected: virtual void handleIncomingTransfer(IncomingTransfer& transfer) = 0; public: + const DataTypeDescriptor* getDataTypeDescriptor() const { return data_type_; } + virtual void handleFrame(const RxFrame& frame) = 0; virtual void cleanup(uint64_t ts_monotonic) = 0; }; diff --git a/libuavcan/test/transport/transfer_listener.cpp b/libuavcan/test/transport/transfer_listener.cpp index d859e79dc2..7a0f4a9e76 100644 --- a/libuavcan/test/transport/transfer_listener.cpp +++ b/libuavcan/test/transport/transfer_listener.cpp @@ -241,6 +241,11 @@ TEST(TransferListener, TestingEnvironmentSFTSerialization) } +/** + * This subscriber accepts any types of transfers - this makes testing easier. + * In reality, uavcan::TransferListener should accept only specific transfer types + * which are dispatched/filtered by uavcan::Dispatcher. + */ template class TestSubscriber : public uavcan::TransferListener {