From 0533539c7caa56ce3316b2384e2527b22bd5ee36 Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Wed, 12 Feb 2014 10:49:32 +0400 Subject: [PATCH] Starting refactoring of the receiving logic --- .../internal/transport/transfer_listener.hpp | 4 ++-- libuavcan/src/transport/transfer_listener.cpp | 15 ++++++--------- libuavcan/test/transport/transfer_listener.cpp | 5 ++--- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/libuavcan/include/uavcan/internal/transport/transfer_listener.hpp b/libuavcan/include/uavcan/internal/transport/transfer_listener.hpp index f2116d13c7..b0af008808 100644 --- a/libuavcan/include/uavcan/internal/transport/transfer_listener.hpp +++ b/libuavcan/include/uavcan/internal/transport/transfer_listener.hpp @@ -75,9 +75,9 @@ public: class MultiFrameIncomingTransfer : public IncomingTransfer, Noncopyable { TransferBufferAccessor& buf_acc_; - const uint8_t buffer_offset_; ///< Number of bytes to skip from the beginning of the buffer space public: - MultiFrameIncomingTransfer(const RxFrame& last_frame, uint8_t buffer_offset, TransferBufferAccessor& tba); + MultiFrameIncomingTransfer(uint64_t ts_monotonic, uint64_t ts_utc, const RxFrame& last_frame, + TransferBufferAccessor& tba); int read(unsigned int offset, uint8_t* data, unsigned int len) const; void release() { buf_acc_.remove(); } }; diff --git a/libuavcan/src/transport/transfer_listener.cpp b/libuavcan/src/transport/transfer_listener.cpp index 66d1f33bae..6b7ec23b4d 100644 --- a/libuavcan/src/transport/transfer_listener.cpp +++ b/libuavcan/src/transport/transfer_listener.cpp @@ -40,12 +40,10 @@ int SingleFrameIncomingTransfer::read(unsigned int offset, uint8_t* data, unsign /* * MultiFrameIncomingTransfer */ -MultiFrameIncomingTransfer::MultiFrameIncomingTransfer(const RxFrame& last_frame, uint8_t buffer_offset, - TransferBufferAccessor& tba) -: IncomingTransfer(last_frame.ts_monotonic, last_frame.ts_utc, last_frame.transfer_type, - last_frame.transfer_id, last_frame.source_node_id) +MultiFrameIncomingTransfer::MultiFrameIncomingTransfer(uint64_t ts_monotonic, uint64_t ts_utc, + const RxFrame& last_frame, TransferBufferAccessor& tba) +: IncomingTransfer(ts_monotonic, ts_utc, last_frame.transfer_type, last_frame.transfer_id, last_frame.source_node_id) , buf_acc_(tba) -, buffer_offset_(buffer_offset) { assert(last_frame.last_frame); } @@ -58,7 +56,7 @@ int MultiFrameIncomingTransfer::read(unsigned int offset, uint8_t* data, unsigne UAVCAN_TRACE("MultiFrameIncomingTransfer", "Read failed: no such buffer"); return -1; } - return tbb->read(offset + buffer_offset_, data, len); + return tbb->read(offset, data, len); } /* @@ -82,9 +80,8 @@ void TransferListenerBase::handleReception(TransferReceiver& receiver, const RxF case TransferReceiver::RESULT_COMPLETE: { // TODO: check CRC - // TODO: select the buffer offset - const int buffer_offset = 123; - MultiFrameIncomingTransfer it(frame, buffer_offset, tba); + MultiFrameIncomingTransfer it(receiver.getLastTransferTimestampMonotonic(), + receiver.getLastTransferTimestampUtc(), frame, tba); handleIncomingTransfer(it); break; } diff --git a/libuavcan/test/transport/transfer_listener.cpp b/libuavcan/test/transport/transfer_listener.cpp index 009cd43688..35d7c781de 100644 --- a/libuavcan/test/transport/transfer_listener.cpp +++ b/libuavcan/test/transport/transfer_listener.cpp @@ -78,7 +78,7 @@ TEST(MultiFrameIncomingTransfer, Basic) uavcan::TransferBufferManagerKey bufmgr_key(frame.source_node_id, frame.transfer_type); uavcan::TransferBufferAccessor tba(&bufmgr, bufmgr_key); - MultiFrameIncomingTransfer it(frame, 3, tba); + MultiFrameIncomingTransfer it(frame.ts_monotonic, frame.ts_utc, frame, tba); /* * Empty read must fail @@ -97,9 +97,8 @@ TEST(MultiFrameIncomingTransfer, Basic) /* * Check - * Offset 3 comes from the MultiFrameIncomingTransfer initialization */ - ASSERT_TRUE(match(it, frame, data_ptr + 3, data.length() - 3)); + ASSERT_TRUE(match(it, frame, data_ptr, data.length())); /* * Buffer release