Files
video-setup/include/serial.h
mikael-lovqvists-claude-agent b56dfae672 Add serial module — little-endian binary serialization primitives
put_u8/16/32/64 and get_u8/16/32/64 (plus signed variants) for packing
and unpacking values at explicit byte offsets in a buffer. Each value is
encoded byte-by-byte with explicit shift operations — no struct casting,
no alignment assumptions, correct on any host endianness.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 22:15:41 +00:00

33 lines
1.3 KiB
C

#pragma once
#include <stdint.h>
/*
* Binary serialization primitives.
*
* All values are encoded little-endian. Fields are placed and read
* explicitly by position — never by casting a struct to bytes.
*/
/* -- put: write a value into a buffer at a given byte offset -- */
void put_u8 (uint8_t *buf, uint32_t offset, uint8_t value);
void put_u16(uint8_t *buf, uint32_t offset, uint16_t value);
void put_u32(uint8_t *buf, uint32_t offset, uint32_t value);
void put_u64(uint8_t *buf, uint32_t offset, uint64_t value);
void put_i8 (uint8_t *buf, uint32_t offset, int8_t value);
void put_i16(uint8_t *buf, uint32_t offset, int16_t value);
void put_i32(uint8_t *buf, uint32_t offset, int32_t value);
void put_i64(uint8_t *buf, uint32_t offset, int64_t value);
/* -- get: read a value from a buffer at a given byte offset -- */
uint8_t get_u8 (const uint8_t *buf, uint32_t offset);
uint16_t get_u16(const uint8_t *buf, uint32_t offset);
uint32_t get_u32(const uint8_t *buf, uint32_t offset);
uint64_t get_u64(const uint8_t *buf, uint32_t offset);
int8_t get_i8 (const uint8_t *buf, uint32_t offset);
int16_t get_i16(const uint8_t *buf, uint32_t offset);
int32_t get_i32(const uint8_t *buf, uint32_t offset);
int64_t get_i64(const uint8_t *buf, uint32_t offset);