1 #ifndef NDNPH_FACE_TRANSPORT_RXQUEUE_HPP
2 #define NDNPH_FACE_TRANSPORT_RXQUEUE_HPP
4 #include "../port/queue/port.hpp"
7 #ifndef NDNPH_TRANSPORT_RXQUEUELEN
8 #define NDNPH_TRANSPORT_RXQUEUELEN 8
17 uint8_t*
pkt =
nullptr;
32 item.
region = makeRegion();
33 if (item.
region ==
nullptr || !m_allocQ.push(item)) {
42 : m_transport(transport) {
44 std::tie(m_item, ok) = transport.m_allocQ.pop();
55 if (m_item.
region ==
nullptr) {
60 ok = m_transport.m_allocQ.push(m_item);
62 ok = m_transport.m_rxQ.push(m_item);
67 operator bool()
const {
68 return m_item.
pkt !=
nullptr;
79 void operator()(
size_t pktLen, uint64_t endpointId = 0) {
117 std::tie(item, ok) = m_rxQ.pop();
Generic thread-safe queue, implemented with FreeRTOS queue API.
Definition: queue-freertos.hpp:23
Region with dynamically allocated memory.
Definition: region.hpp:155
Region-based memory allocator thats owns memory of NDNph objects.
Definition: region.hpp:9
size_t available() const
Compute remaining space for alloc().
Definition: region.hpp:106
uint8_t * alloc(size_t size)
Allocate a buffer with no alignment requirement.
Definition: region.hpp:27
void reset()
Discard allocated items.
Definition: region.hpp:100
Mixin of RX queue in Transport, allocating buffers from DynamicRegion.
Definition: transport-rxqueue.hpp:134
static constexpr size_t DEFAULT_BUFLEN
Definition: transport-rxqueue.hpp:136
DynamicRxQueueMixin(size_t bufLen=DEFAULT_BUFLEN)
Constructor.
Definition: transport-rxqueue.hpp:143
Definition: transport-rxqueue.hpp:39
void operator()(size_t pktLen, uint64_t endpointId=0)
Definition: transport-rxqueue.hpp:79
uint8_t * buf()
Definition: transport-rxqueue.hpp:71
~RxContext()
Definition: transport-rxqueue.hpp:54
RxContext(RxQueueMixin &transport)
Definition: transport-rxqueue.hpp:41
size_t bufLen()
Definition: transport-rxqueue.hpp:75
Mixin of RX queue in Transport.
Definition: transport-rxqueue.hpp:22
RxContext receiving()
Receive packets in a loop.
Definition: transport-rxqueue.hpp:103
void loopRxQueue()
Process periodical events.
Definition: transport-rxqueue.hpp:113
void initAllocBuffers(const F &makeRegion)
Allocate receive buffers during initialization.
Definition: transport-rxqueue.hpp:29
Base class of low-level transport.
Definition: transport.hpp:10
void invokeRxCallback(const uint8_t *pkt, size_t pktLen, uint64_t endpointId=0)
Invoke incoming packet callback for a received packet.
Definition: transport.hpp:39
#define NDNPH_ASSERT(x)
Definition: common.hpp:30
constexpr size_t sizeofSubRegions(size_t capacity, size_t count=1)
Compute total size of several sub Regions of given capacity.
Definition: region.hpp:167
Region * makeSubRegion(Region &parent, size_t capacity)
Create Region inside a parent Region.
Definition: region.hpp:173
Definition: transport-rxqueue.hpp:14
ssize_t pktLen
Definition: transport-rxqueue.hpp:18
uint64_t endpointId
Definition: transport-rxqueue.hpp:16
Region * region
Definition: transport-rxqueue.hpp:15
uint8_t * pkt
Definition: transport-rxqueue.hpp:17
#define NDNPH_TRANSPORT_RXQUEUELEN
Definition: transport-rxqueue.hpp:8