diff --git a/libuavcan/include/uavcan/transport/transfer_receiver.hpp b/libuavcan/include/uavcan/transport/transfer_receiver.hpp index 7e3fdaf09a..f73e616cd5 100644 --- a/libuavcan/include/uavcan/transport/transfer_receiver.hpp +++ b/libuavcan/include/uavcan/transport/transfer_receiver.hpp @@ -54,6 +54,8 @@ private: bool isInitialized() const { return iface_index_ != IfaceIndexNotSet; } + bool isMidTransfer() const { return buffer_write_pos_ > 0; } + void registerError() const; TidRelation getTidRelation(const RxFrame& frame) const; diff --git a/libuavcan/src/transport/uc_transfer_receiver.cpp b/libuavcan/src/transport/uc_transfer_receiver.cpp index 9fc9e9b4e0..28df4c4eac 100644 --- a/libuavcan/src/transport/uc_transfer_receiver.cpp +++ b/libuavcan/src/transport/uc_transfer_receiver.cpp @@ -75,7 +75,7 @@ bool TransferReceiver::validate(const RxFrame& frame) const registerError(); return false; } - if (frame.isStartOfTransfer() && (buffer_write_pos_ != 0)) + if (frame.isStartOfTransfer() && isMidTransfer()) { UAVCAN_TRACE("TransferReceiver", "Unexpected start of transfer, %s", frame.toString().c_str()); registerError();