31 #ifndef DW_FRAMEWORK_SYNCPORTHELPER_HPP_ 32 #define DW_FRAMEWORK_SYNCPORTHELPER_HPP_ 34 #include <dw/core/container/HashContainer.hpp> 84 auto syncPacket = genericData.template getData<SyncedPacketPayload>();
88 throw Exception(DW_INTERNAL_ERROR,
"SyncPortHelperOutput extractInternalPacket: packet type mismatch");
91 auto packet = syncPacket->data.template getData<T>();
94 throw Exception(DW_INTERNAL_ERROR,
"SyncPortHelperOutput extractInternalPacket: failed to extract underlying data");
97 m_syncPacketBuf[packet] = syncPacket;
106 throw Exception(DW_INTERNAL_ERROR,
"SyncPortHelperOutput getSyncPacket: sync packet not found in packet buffer");
119 m_syncPacketBuf = HeapHashMap<T*, SyncedPacketPayload*>(params.
getPoolCapacity());
124 HeapHashMap<T*, SyncedPacketPayload*> m_syncPacketBuf;
127 template <
typename T>
134 , m_dataBuffered(false)
150 if (!isPacketBuffered())
155 auto packet = m_bufferedPacket.template getData<SyncedPacketPayload>();
159 throw Exception(DW_INTERNAL_ERROR,
"SyncPortHelperInput isValidPacketBuffered: packet type mistmatch");
161 return validatePacket(*packet);
166 m_dataBuffered =
false;
167 return m_bufferedPacket;
172 auto syncPacket = genericData.template getData<SyncedPacketPayload>();
176 throw Exception(DW_INTERNAL_ERROR,
"SyncPortHelperInput extractInternalPacket: packet type mistmatch");
179 if (validatePacket(*syncPacket))
181 return syncPacket->data.template getData<T>();
185 m_bufferedPacket = genericData;
186 m_dataBuffered =
true;
213 if (validOffset >= 0)
228 #endif // DW_FRAMEWORK_SYNCPORTHELPER_HPP_
uint32_t ChannelPacketTypeID
SyncedPacketPayload * getSyncPacket(T *frame)
void parseDataSynced(const ChannelParams ¶ms) override
void setSyncCount(uint32_t index)
CycleCountFetcher m_syncCountRetriever
size_t getPoolCapacity() const
dwStatus setSyncRetriever(const CycleCountFetcher &func)
void stampSyncCount(uint32_t &syncCountOut) const
ChannelPacketTypeID getNewPacketID(ChannelPacketTypeID packetTypeID)
T * extractInternalPacket(GenericData genericData)
dw::core::Function< uint32_t(void)> CycleCountFetcher
virtual void parseDataSynced(const ChannelParams ¶ms)