31#ifndef DW_FRAMEWORK_ICHANNEL_PACKET_HPP_
32#define DW_FRAMEWORK_ICHANNEL_PACKET_HPP_
36#include <dwcgf/Types.hpp>
41#include <dw/core/language/Function.hpp>
49class ChannelLocalShmemRegistry;
104 throw Exception(DW_NOT_SUPPORTED,
"This packet interface does not implement socket callbacks");
116 throw Exception(DW_NOT_SUPPORTED,
"This packet interface does not implement nvsci callbacks");
174 static constexpr char LOG_TAG[] =
"ChannelNvSciPacketDefault";
178 : m_typeSize{typeSize}
189 if (bufferIndex != 0U)
191 throw Exception(DW_INVALID_ARGUMENT,
"ChannelNvSciPacketDefault: invalid buffer index");
194 fillCpuPacketDataAttributes(attrList);
201 throw Exception(DW_INVALID_ARGUMENT,
"ChannelNvSciPacketDefault: wrong number of buffers passed");
223 void fillCpuPacketDataAttributes(NvSciBufAttrList& output)
const
225 const NvSciBufType bufferType = NvSciBufType_RawBuffer;
226 const bool cpuAccessFlag =
true;
227 const uint64_t rawAlign = 4;
228 const NvSciBufAttrValAccessPerm permissions = NvSciBufAccessPerm_ReadWrite;
230 dw::core::Array<NvSciBufAttrKeyValuePair, 5> rawBufferAttributes =
231 {{{NvSciBufGeneralAttrKey_Types, &bufferType,
sizeof(bufferType)},
232 {NvSciBufGeneralAttrKey_NeedCpuAccess, &cpuAccessFlag,
sizeof(cpuAccessFlag)},
233 {NvSciBufGeneralAttrKey_RequiredPerm, &permissions,
sizeof(permissions)},
234 {NvSciBufRawBufferAttrKey_Align, &rawAlign,
sizeof(rawAlign)},
235 {NvSciBufRawBufferAttrKey_Size, &m_typeSize,
sizeof(m_typeSize)}}};
238 rawBufferAttributes.data(),
239 rawBufferAttributes.size()));
#define FRWK_CHECK_NVSCI_ERROR(e)
GenericData getGenericData() final
void initializeFromNvSciBufObjs(dw::core::span< NvSciBufObj > bufs)
ChannelNvSciPacketDefault(size_t typeSize)
uint32_t getNumBuffers() const final
void fillNvSciBufAttributes(uint32_t bufferIndex, NvSciBufAttrList &attrList) const final
GenericData getGenericData() final
std::unique_ptr< uint8_t[]> m_buffer
ChannelPacketDefaultBase(size_t typeSize)
uint8_t * getBuffer() final
void deserialize(size_t) final
size_t getBufferSize() final
ChannelPacketDefault(size_t typeSize)
virtual std::unique_ptr< IChannelPacket > makePacket(ChannelPacketTypeID id, ChannelType channelType, GenericData ref)=0
virtual void initializeFromNvSciBufObjs(dw::core::span< NvSciBufObj > bufs)=0
virtual uint32_t getNumBuffers() const =0
virtual void fillNvSciBufAttributes(uint32_t bufferIndex, NvSciBufAttrList &attrList) const =0
virtual uint8_t * getBuffer()=0
virtual void deserialize(size_t)=0
virtual size_t getBufferSize()=0
virtual size_t serialize()=0
SocketCallbacks & getSocketCallbacks()
virtual GenericData getGenericData()=0
virtual ~IChannelPacket()=default
NvSciCallbacks & getNvSciCallbacks()
std::shared_ptr< IChannelPacketFactory > ChannelPacketFactoryPtr
enum ChannelType :uint8_t { DW_CHANNEL_TYPE_SHMEM_LOCAL=0, DW_CHANNEL_TYPE_SHMEM_REMOTE=1, DW_CHANNEL_TYPE_EGLSTREAM=2, DW_CHANNEL_TYPE_SOCKET=3, DW_CHANNEL_TYPE_DDS=4, DW_CHANNEL_TYPE_NVSCI=5, } ChannelType
uint32_t ChannelPacketTypeID