21[[nodiscard]]
constexpr uint16_t
calculateCrc16(std::span<const uint8_t> data)
noexcept {
22 uint16_t crc = 0xFFFF;
23 for (uint8_t
byte : data) {
24 crc ^=
static_cast<uint16_t
>(byte) << 8;
25 for (
int i = 0; i < 8; ++i) {
27 crc = (crc << 1) ^ 0x1021;
39 auto sig =
static_cast<uint8_t
>(
sizeof(T) & 0x0F);
40 sig |=
static_cast<uint8_t
>((
alignof(T) & 0x0F) << 4);
63template <
size_t MaxPayloadSize = 64>
66 std::array<uint8_t, MaxPayloadSize>
payload{};
77 header.
payloadLength = length > MaxPayloadSize ?
static_cast<uint16_t
>(MaxPayloadSize) : length;
82 [[nodiscard]]
bool isValid() const noexcept {
Definition EventJournal.hpp:22
constexpr uint8_t CORIUM_WIRE_VERSION
Current schema version for Corium binary wire packets.
Definition WirePacket.hpp:45
constexpr uint8_t computeTypeSignature() noexcept
Calculate an ABI type signature based on size and alignment.
Definition WirePacket.hpp:38
constexpr uint16_t CORIUM_WIRE_MAGIC
Default magic header identifier for Corium binary wire packets (0xC041).
Definition WirePacket.hpp:18
constexpr uint16_t calculateCrc16(std::span< const uint8_t > data) noexcept
Calculate CRC-16-CCITT checksum over a byte span without lookup tables.
Definition WirePacket.hpp:21
Statically-sized zero-heap binary wire packet.
Definition WirePacket.hpp:64
constexpr WirePacket()=default
constexpr size_t totalWireSize() const noexcept
Total serialized wire size in bytes (header + payload length).
Definition WirePacket.hpp:97
WireHeader header
Definition WirePacket.hpp:65
bool isValid() const noexcept
Validate packet magic identifier, schema version, payload length bounds, and CRC16 checksum.
Definition WirePacket.hpp:82
std::array< uint8_t, MaxPayloadSize > payload
Definition WirePacket.hpp:66
void finalize(uint8_t typeIdx, uint16_t length, uint8_t flags=0, uint8_t version=CORIUM_WIRE_VERSION) noexcept
Finalize packet header, set payload length and calculate CRC16 checksum.
Definition WirePacket.hpp:71