31 #ifndef DW_FRAMEWORK_ICHANNEL_PACKET_HPP_ 32 #define DW_FRAMEWORK_ICHANNEL_PACKET_HPP_ 36 #include <dwcgf/Types.hpp> 40 #include <nvscisync.h> 41 #include <dw/core/language/Function.hpp> 49 class ChannelLocalShmemRegistry;
81 virtual uint32_t getNumBuffers()
const = 0;
83 virtual void fillNvSciBufAttributes(uint32_t bufferIndex, NvSciBufAttrList& attrList)
const = 0;
85 virtual void initializeFromNvSciBufObjs(dw::core::span<NvSciBufObj> bufs) = 0;
90 virtual void pack() = 0;
92 virtual void unpack() = 0;
98 if (
auto* ptr = dynamic_cast<SocketCallbacks*>(
this))
104 throw Exception(DW_NOT_SUPPORTED,
"This packet interface does not implement socket callbacks");
110 if (
auto* ptr = dynamic_cast<NvSciCallbacks*>(
this))
116 throw Exception(DW_NOT_SUPPORTED,
"This packet interface does not implement nvsci callbacks");
127 : m_typeSize(typeSize)
128 , m_buffer(new uint8_t[m_typeSize]())
129 , m_data{m_buffer.get(), m_typeSize}
154 return m_buffer.get();
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);
199 if (bufs.size() != getNumBuffers())
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()));
253 virtual std::shared_ptr<ChannelLocalShmemRegistry> getChannelLocalShmemRegistry() = 0;
255 virtual NvSciBufModule getNvSciBufModule() = 0;
257 virtual NvSciSyncModule getNvSciSyncModule() = 0;
259 virtual void dispatchDataReady(
void* opaque,
OnDataReady onDataReady) = 0;
266 #endif // DW_FRAMEWORK_ICHANNEL_PACKET_HPP_
uint32_t ChannelPacketTypeID
uint32_t getNumBuffers() const final
uint8_t * getBuffer() final
std::shared_ptr< IChannelPacketFactory > ChannelPacketFactoryPtr
virtual ~IChannelPacket()=default
ChannelNvSciPacketDefault(size_t typeSize)
#define FRWK_CHECK_NVSCI_ERROR(e)
size_t getBufferSize() final
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
virtual uint8_t * getBuffer()=0
void fillNvSciBufAttributes(uint32_t bufferIndex, NvSciBufAttrList &attrList) const final
NvSciCallbacks & getNvSciCallbacks()
GenericData getGenericData() final
virtual size_t serialize()=0
virtual GenericData getGenericData()=0
virtual size_t getBufferSize()=0
std::unique_ptr< uint8_t[]> m_buffer
virtual void deserialize(size_t)=0
ChannelPacketDefaultBase(size_t typeSize)
dw::core::Function< void()> OnDataReady
void initializeFromNvSciBufObjs(dw::core::span< NvSciBufObj > bufs)
void deserialize(size_t) final
SocketCallbacks & getSocketCallbacks()
ChannelPacketDefault(size_t typeSize)
GenericData getGenericData() final