1#include "libxr_mem.hpp"
6void Topic::PackedDataHeader::SetDataLen(uint32_t len)
8 data_len_raw[0] =
static_cast<uint8_t
>(len >> 16);
9 data_len_raw[1] =
static_cast<uint8_t
>(len >> 8);
10 data_len_raw[2] =
static_cast<uint8_t
>(len);
13uint32_t Topic::PackedDataHeader::GetDataLen()
const
15 return static_cast<uint32_t
>(data_len_raw[0]) << 16 |
16 static_cast<uint32_t
>(data_len_raw[1]) << 8 |
17 static_cast<uint32_t
>(data_len_raw[2]);
22 uint64_t value =
static_cast<uint64_t
>(timestamp);
23 for (
size_t i = 0; i <
sizeof(timestamp_us_raw); i++)
26 static_cast<uint8_t
>(value >> ((
sizeof(timestamp_us_raw) - 1U - i) * 8U));
33 for (uint8_t
byte : timestamp_us_raw)
35 value = (value << 8U) | static_cast<uint64_t>(
byte);
43 PackedData<uint8_t>* pack =
reinterpret_cast<PackedData<uint8_t>*
>(buffer.
addr_);
47 pack->raw.header_.prefix = PACKET_PREFIX;
48 pack->raw.header_.topic_name_crc32 = topic_name_crc32;
49 pack->raw.header_.SetDataLen(data.
size_);
50 pack->raw.header_.SetTimestamp(timestamp);
51 pack->raw.header_.pack_header_crc8 =
52 CRC8::Calculate(&pack->raw,
sizeof(PackedDataHeader) -
sizeof(uint8_t));
53 uint8_t* crc8_pack =
reinterpret_cast<uint8_t*
>(
54 reinterpret_cast<uint8_t*
>(pack) + PACK_BASE_SIZE + data.
size_ -
sizeof(uint8_t));
static uint8_t Calculate(const void *raw, size_t len)
计算数据的 CRC8 校验码 / Computes the CRC8 checksum for the given data
只读原始数据视图 / Immutable raw data view
size_t size_
数据字节数 / Data size in bytes
const void * addr_
数据起始地址 / Data start address
static void FastCopy(void *dst, const void *src, size_t size)
快速内存拷贝 / Fast memory copy
微秒时间戳 / Microsecond timestamp
可写原始数据视图 / Mutable raw data view
void * addr_
数据起始地址 / Data start address
static void PackData(uint32_t topic_name_crc32, RawData buffer, MicrosecondTimestamp timestamp, ConstRawData data)
打包数据