6#include <initializer_list>
12static constexpr size_t NCI_PKT_MAX_PAYLOAD_SIZE = 255;
13static constexpr size_t NCI_PKT_MAX_SIZE = 3 + NCI_PKT_MAX_PAYLOAD_SIZE;
21 NciMessage(uint8_t message_type, std::span<const uint8_t> payload);
22 NciMessage(uint8_t message_type, std::initializer_list<uint8_t> payload);
23 NciMessage(uint8_t message_type, uint8_t gid, uint8_t oid);
24 NciMessage(uint8_t message_type, uint8_t gid, uint8_t oid, std::span<const uint8_t> payload);
25 NciMessage(uint8_t message_type, uint8_t gid, uint8_t oid, std::initializer_list<uint8_t> payload);
26 explicit NciMessage(std::span<const uint8_t> raw_packet);
29 std::span<const uint8_t>
encode();
46 bool gid_is(uint8_t gid)
const;
47 bool oid_is(uint8_t oid)
const;
50 void set_header(uint8_t message_type, uint8_t gid, uint8_t oid);
51 void set_message(uint8_t message_type, std::span<const uint8_t> payload);
52 void set_message(uint8_t message_type, uint8_t gid, uint8_t oid, std::span<const uint8_t> payload);
58 this->
set_payload(std::span<const uint8_t>(payload.begin(), payload.size()));
61 void append(std::span<const uint8_t> data);
62 void append(std::initializer_list<uint8_t> data) {
63 this->
append(std::span<const uint8_t>(data.begin(), data.size()));
One NCI packet, held in a fixed buffer so building and reading messages never allocates.
uint8_t get_payload_size(bool recompute=false)
const Buffer & get_message() const
bool message_type_is(uint8_t message_type) const
bool simple_status_response_is(uint8_t response) const
uint8_t get_message_byte(uint8_t offset) const
std::span< const uint8_t > encode()
Stamps the payload length into the header and returns the packet ready to send.
bool gid_is(uint8_t gid) const
void set_payload(std::initializer_list< uint8_t > payload)
void set_gid(uint8_t gid)
void set_header(uint8_t message_type, uint8_t gid, uint8_t oid)
bool message_length_is(uint8_t message_length, bool recompute=false)
void set_payload_size(uint8_t size)
Sets the packet size to the header plus size payload bytes, for a bus driver filling the buffer direc...
std::span< const uint8_t > get_payload() const
The payload bytes that follow the header.
void append(std::initializer_list< uint8_t > data)
void set_oid(uint8_t oid)
void set_message(uint8_t message_type, std::span< const uint8_t > payload)
void set_message_type(uint8_t message_type)
uint8_t get_simple_status_response() const
bool oid_is(uint8_t oid) const
void set_payload(std::span< const uint8_t > payload)
uint8_t get_message_type() const
void append(std::span< const uint8_t > data)
Appends bytes to the payload; bytes that do not fit are dropped.