10 #include <boost/cast.hpp> 23 void StreamMetadataCommandHandler::operator()(
const Packet& packet)
34 ss <<
"Stream metadata packet received" << std::endl << std::endl;
36 ss <<
"Pipe magic: " << m_PipeMagic << std::endl;
37 ss <<
"Stream metadata version: " << m_StreamMetadataVersion << std::endl;
38 ss <<
"Max data len: " << m_MaxDataLen << std::endl;
39 ss <<
"Pid: " << m_Pid << std::endl;
40 ss <<
"Software info: " << m_SoftwareInfo << std::endl;
41 ss <<
"Hardware version: " << m_HardwareVersion << std::endl;
42 ss <<
"Software version: " << m_SoftwareVersion << std::endl;
43 ss <<
"Process name: " << m_ProcessName << std::endl;
44 ss <<
"Packet versions: " << m_PacketVersionTable.size() << std::endl;
46 for (
const auto& packetVersion : m_PacketVersionTable)
48 ss <<
"-----------------------" << std::endl;
49 ss <<
"Packet family: " << packetVersion.m_PacketFamily << std::endl;
50 ss <<
"Packet id: " << packetVersion.m_PacketId << std::endl;
51 ss <<
"Packet version: " << packetVersion.m_PacketVersion << std::endl;
54 std::cout << ss.str() << std::endl;
57 std::string
ReadString(
const unsigned char* buffer,
unsigned int &offset)
59 const char* stringPtr =
reinterpret_cast<const char*
>(&buffer[offset]);
60 return stringPtr !=
nullptr ? std::string(stringPtr) :
"";
63 void StreamMetadataCommandHandler::ParseData(
const Packet &packet)
75 const unsigned char* buffer = packet.
GetData();
76 unsigned int offset = 0;
81 m_StreamMetadataVersion =
ReadUint32(buffer, offset);
89 m_OffsetHwVersion =
ReadUint32(buffer, offset);
91 m_OffsetSwVersion =
ReadUint32(buffer, offset);
93 m_OffsetProcessName =
ReadUint32(buffer, offset);
95 m_OffsetPacketVersionTable =
ReadUint32(buffer, offset);
96 offset += uint32_t_size * 2;
99 m_SoftwareInfo = m_OffsetInfo > 0 ?
ReadString(buffer, m_OffsetInfo) :
"";
100 m_HardwareVersion = m_OffsetHwVersion > 0 ?
ReadString(buffer, m_OffsetHwVersion) :
"";
101 m_SoftwareVersion = m_OffsetSwVersion > 0 ?
ReadString(buffer, m_OffsetSwVersion) :
"";
102 m_ProcessName = m_OffsetProcessName > 0 ?
ReadString(buffer, m_OffsetProcessName) :
"";
105 m_PacketVersionTable.clear();
106 if (m_OffsetPacketVersionTable > 0)
108 offset = m_OffsetPacketVersionTable;
109 uint16_t packetEntries =
ReadUint16(buffer, offset + uint16_t_size);
111 for (uint16_t i = 0; i < packetEntries; i++)
113 uint16_t packetFamilyAndId =
ReadUint16(buffer, offset + uint16_t_size);
114 uint16_t packetFamily = (packetFamilyAndId >> 10) & 0x003F;
115 uint16_t packetId = (packetFamilyAndId >> 0) & 0x03FF;
117 uint32_t packetVersion =
ReadUint32(buffer, offset);
120 m_PacketVersionTable.push_back({ packetFamily, packetId, packetVersion });
std::string ReadString(const unsigned char *buffer, unsigned int &offset)
uint16_t ReadUint16(const IPacketBufferPtr &packetBuffer, unsigned int offset)
Copyright (c) 2020 ARM Limited.
uint32_t ReadUint32(const IPacketBufferPtr &packetBuffer, unsigned int offset)
uint32_t GetLength() const
const unsigned char * GetData() const