31#ifndef DW_FRAMEWORK_SYNCPORTHELPER_HPP_
32#define DW_FRAMEWORK_SYNCPORTHELPER_HPP_
34#include <dw/core/container/HashContainer.hpp>
86 auto metadataPacket = genericData.template getData<MetadataPayload>();
90 throw ExceptionWithStatus(DW_INTERNAL_ERROR,
"SyncPortHelperOutput extractInternalPacket: packet type mismatch");
93 auto packet = metadataPacket->data.template getData<T>();
96 throw ExceptionWithStatus(DW_INTERNAL_ERROR,
"SyncPortHelperOutput extractInternalPacket: failed to extract underlying data");
99 m_metadataPayloadBuf[packet] = metadataPacket;
108 throw ExceptionWithStatus(DW_INTERNAL_ERROR,
"SyncPortHelperOutput getmetadataPacket: sync packet not found in packet buffer");
111 return metadataPacket;
117 m_metadataPayloadBuf = HeapHashMap<T*, MetadataPayload*>(params.
getPoolCapacity());
121 HeapHashMap<T*, MetadataPayload*> m_metadataPayloadBuf;
133 , m_dataBuffered(false)
154 auto packet = m_bufferedPacket.template getData<MetadataPayload>();
158 throw ExceptionWithStatus(DW_INTERNAL_ERROR,
"SyncPortHelperInput isValidPacketBuffered: packet type mistmatch");
160 return validatePacket(*packet);
165 m_dataBuffered =
false;
166 return m_bufferedPacket;
171 auto metadataPacket = genericData.template getData<MetadataPayload>();
175 throw ExceptionWithStatus(DW_INTERNAL_ERROR,
"SyncPortHelperInput extractSyncPacket: packet type mistmatch");
178 if (validatePacket(*metadataPacket))
180 auto packet = metadataPacket->data.template getData<T>();
181 m_metadataPayloadBuf[packet] = metadataPacket;
186 m_bufferedPacket = genericData;
187 m_dataBuffered =
true;
194 auto metadataPacket = genericData.template getData<MetadataPayload>();
198 throw ExceptionWithStatus(DW_INTERNAL_ERROR,
"SyncPortHelperInput extractInternalPacket: packet type mistmatch");
201 auto packet = metadataPacket->data.template getData<T>();
202 m_metadataPayloadBuf[packet] = metadataPacket;
211 throw ExceptionWithStatus(DW_INTERNAL_ERROR,
"SyncPortHelperInput getmetadataPacket: sync packet not found in packet buffer");
214 return metadataPacket;
220 m_metadataPayloadBuf = HeapHashMap<T*, MetadataPayload*>(params.
getPoolCapacity());
245 if (validOffset >= 0)
253 HeapHashMap<T*, MetadataPayload*> m_metadataPayloadBuf;
254 GenericData m_bufferedPacket;
size_t getPoolCapacity() const
T * extractInternalPacket(GenericData genericData)
void parseDataSynced(const ChannelParams ¶ms) override
MetadataPayload * getMetadataPacket(T *frame)
uint32_t ChannelPacketTypeID
dw::core::Function< uint32_t(void)> CycleCountFetcher
dwStatus setSyncRetriever(const CycleCountFetcher &func)
ChannelPacketTypeID getNewPacketID(ChannelPacketTypeID packetTypeID)
CycleCountFetcher m_syncCountRetriever
void setSyncCount(uint32_t index)
virtual void parseDataSynced(const ChannelParams ¶ms)
void stampSyncCount(uint32_t &syncCountOut) const