mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-26 10:03:33 +08:00
TransferListener implemented and tested
This commit is contained in:
@@ -17,7 +17,7 @@ namespace uavcan
|
||||
/**
|
||||
* Slow but memory efficient KV container.
|
||||
* Type requirements:
|
||||
* Both key and value must be copyable and default constructible.
|
||||
* Both key and value must be copyable, assignable and default constructible.
|
||||
* Key must implement a comparison operator.
|
||||
* Key's default constructor must initialize the object into invalid state.
|
||||
* Size of Key + Value + padding must not exceed MEM_POOL_BLOCK_SIZE.
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace uavcan
|
||||
class Crc16
|
||||
{
|
||||
static const uint16_t TABLE[256];
|
||||
uint_fast16_t value_;
|
||||
uint16_t value_;
|
||||
|
||||
public:
|
||||
Crc16()
|
||||
|
||||
@@ -383,6 +383,13 @@ public:
|
||||
if (dyn == NULL)
|
||||
return NULL; // Epic fail.
|
||||
dynamic_buffers_.insert(dyn);
|
||||
UAVCAN_TRACE("TransferBufferManager", "Dynamic buffer created [st=%u, dyn=%u], %s",
|
||||
getNumStaticBuffers(), getNumDynamicBuffers(), key.toString().c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
UAVCAN_TRACE("TransferBufferManager", "Static buffer created [st=%u, dyn=%u], %s",
|
||||
getNumStaticBuffers(), getNumDynamicBuffers(), key.toString().c_str());
|
||||
}
|
||||
|
||||
if (tbme)
|
||||
@@ -400,6 +407,7 @@ public:
|
||||
TransferBufferManagerEntry* const tbme = findFirstStatic(key);
|
||||
if (tbme)
|
||||
{
|
||||
UAVCAN_TRACE("TransferBufferManager", "Static buffer deleted, %s", key.toString().c_str());
|
||||
tbme->reset();
|
||||
optimizeStorage();
|
||||
return;
|
||||
@@ -408,6 +416,7 @@ public:
|
||||
DynamicTransferBuffer* dyn = findFirstDynamic(key);
|
||||
if (dyn)
|
||||
{
|
||||
UAVCAN_TRACE("TransferBufferManager", "Dynamic buffer deleted, %s", key.toString().c_str());
|
||||
dynamic_buffers_.remove(dyn);
|
||||
DynamicTransferBuffer::destroy(dyn, allocator_);
|
||||
}
|
||||
|
||||
@@ -113,7 +113,7 @@ public:
|
||||
* This class should be derived by transfer receivers (subscribers, servers, callers).
|
||||
*/
|
||||
template <unsigned int MAX_BUF_SIZE, unsigned int NUM_STATIC_BUFS, unsigned int NUM_STATIC_RECEIVERS>
|
||||
class TransferListener : protected TransferListenerBase, Noncopyable
|
||||
class TransferListener : public TransferListenerBase, Noncopyable
|
||||
{
|
||||
typedef TransferBufferManager<MAX_BUF_SIZE, NUM_STATIC_BUFS> BufferManager;
|
||||
BufferManager bufmgr_;
|
||||
@@ -186,7 +186,9 @@ public:
|
||||
: TransferListenerBase(data_type)
|
||||
, bufmgr_(allocator)
|
||||
, receivers_(allocator)
|
||||
{ }
|
||||
{
|
||||
StaticAssert<(NUM_STATIC_RECEIVERS >= NUM_STATIC_BUFS)>::check(); // Otherwise it would be meaningless
|
||||
}
|
||||
|
||||
~TransferListener()
|
||||
{
|
||||
|
||||
@@ -46,8 +46,6 @@ private:
|
||||
bool writePayload(const RxFrame& frame, TransferBufferBase& buf);
|
||||
ResultCode receive(const RxFrame& frame, TransferBufferAccessor& tba);
|
||||
|
||||
TransferReceiver(const TransferReceiver&); // = delete (not needed)
|
||||
|
||||
public:
|
||||
TransferReceiver()
|
||||
: prev_transfer_ts_monotonic_(0)
|
||||
|
||||
Reference in New Issue
Block a user