ccc_mac.h
CCC UWB MAC layer: ranging-round scheduling, SP0 frame codec, DS-TWR.
Overview
CCC UWB MAC layer: ranging-round scheduling, SP0 frame codec, DS-TWR.
depends on ccc_kdf.h · used by ccc_mac.c ccc_session.h ccc_shim_rx.c
API
Cstruct ccc_mhr_fields
The per-frame-variable fields of an SP0 MHR (fixed fields are built in by ccc_build_mhr).
Cstruct ccc_pre_poll
Pre-POLL request message parameters.
Cstruct ccc_responder_ts
One responder's timestamp record in a Final_Data message.
Cstruct ccc_final_data
Final_Data message parameters.
Cstruct ccc_ran_params
Per-session ranging schedule parameters (negotiated in setup).
Cstruct ccc_hop_decision
The initiator's next-block hop decision, carried in Final_Data.
Cstruct ccc_ds_twr
The four DS-TWR intervals, in ranging-timestamp ticks (uint32, wrap mod 2^32).
Fuint16_t ccc_hop_round_index(uint32_t block_index, uint32_t hop_key_rw, uint32_t n_round)
Default hopping round index S(i) in [0, n_round) for a ranging block, keyed by HOP_Key_RW.
##define CCC_MHR_LEN 23
SP0 MHR length, bytes.
##define CCC_PRE_POLL_LEN 13
Pre-POLL MAC payload length, bytes.
##define CCC_FINAL_DATA_HDR_LEN 18
Final_Data payload length before the responder records, bytes.
##define CCC_RESPONDER_LEN 7
One responder timestamp record in a Final_Data payload, bytes.
##define CCC_MAX_RESPONDERS 10
Max responders in one Final_Data (127-byte payload cap).
##define CCC_MSG_ID_PRE_POLL 0x01u
Vendor Specific Information message ID for Pre-POLL.
##define CCC_MSG_ID_FINAL_DATA 0x02u
Vendor Specific Information message ID for Final_Data.
Fint ccc_build_mhr(const struct ccc_mhr_fields *f, uint8_t out[CCC_MHR_LEN])
Build the 23-byte SP0 MHR (little-endian on the wire).
Fint ccc_parse_mhr(const uint8_t in[CCC_MHR_LEN], struct ccc_mhr_fields *f)
Parse and validate a 23-byte SP0 MHR, extracting the variable fields (-EINVAL on mismatch).
Fint ccc_pre_poll_pack(const struct ccc_pre_poll *p, uint8_t out[CCC_PRE_POLL_LEN])
Pack a Pre-POLL payload little-endian.
Fint ccc_pre_poll_parse(const uint8_t in[CCC_PRE_POLL_LEN], struct ccc_pre_poll *p)
Parse a 13-byte Pre-POLL payload.
Fint ccc_final_data_pack(const struct ccc_final_data *f, uint8_t *out, size_t cap, size_t *len)
Pack a Final_Data payload little-endian.
Fint ccc_final_data_parse(const uint8_t *in, size_t len, struct ccc_final_data *f)
Parse a Final_Data payload (-EINVAL if length is inconsistent with num_responders).
Cenum ccc_hop_mode
Hopping mode. Adaptive (interference-driven) is out of scope.
Cenum ccc_slot
Slot role within a ranging round.
Fuint16_t ccc_block_round(const struct ccc_ran_params *p, uint32_t block)
The ranging round a block uses (block 0 uses round 0; continuous hopping uses S(i) for i>=1).
Fuint32_t ccc_slot_sts_index(const struct ccc_ran_params *p, uint32_t block, uint16_t round, enum ccc_slot slot, uint8_t responder)
STS index for one slot of a ranging round (uint32 wraps mod 2^32).
Fstruct ccc_hop_decision ccc_initiator_next_hop(const struct ccc_ran_params *p, uint32_t block)
The initiator's hop decision for the block after block, written into its Final_Data.
Fuint32_t ccc_ds_twr_tof(const struct ccc_ds_twr *t)
DS-TWR one-way time-of-flight in timestamp ticks (0 if the denominator is 0).
Fint ccc_responder_ds_twr(const struct ccc_final_data *fd, uint8_t responder, uint32_t t_reply1, uint32_t t_round2, struct ccc_ds_twr *out)
Assemble the DS-TWR intervals at the responder from a received Final_Data.
##define CCC_STS_INDEX_MAX 0x7FFFFFFFu
STS index at which the URSK must be discarded: 2^31 − 1.
Fbool ccc_ursk_exhausted(const struct ccc_ran_params *p, uint32_t block)
Whether the current URSK is exhausted for a ranging block (true once its highest STS index would exceed 2^31-1).