63 for (uint16_t i = 0U; i < n; ++i) {
68static const char*
s_tag =
"BLE";
75typedef enum : uint32_t {
79typedef enum : uint16_t {
86typedef enum : uint8_t {
96typedef enum : uint16_t {
104typedef enum : uint8_t {
231 if ((params ==
nullptr) && (params_len > 0U)) {
240 for (uint16_t i = 0U; i < params_len; ++i) {
251 if ((payload ==
nullptr) && (len > 0U)) {
263 for (uint16_t i = 0U; i < len; ++i) {
310 for (uint8_t i = 0U; i < plen; ++i) {
315 if (
s_state.evt_fn !=
nullptr) {
345 const uint16_t handle = (uint16_t)(((uint16_t)hdl_hi <<
k_ra8_ble_byte_shift) | (uint16_t)hdl_lo);
351 for (uint16_t i = 0U; i < len; ++i) {
356 if (
s_state.acl_fn !=
nullptr) {
368 uint8_t pkt_type = 0U;
405 if ((data ==
nullptr) && (len > 0U)) {
422 const uint8_t param = (enable != 0U) ? 1U : 0U;
434 if (window > interval) {
464 (uint8_t)
sizeof(enable_params));
481 if ((bytes ==
nullptr) || (len == 0U)) {
494 if (out_len !=
nullptr) {
495 *out_len =
s_state.tx_capture_len;
static const char * s_tag
Logging / check tag.
Annotation-attribute framework macros for ra8-firmware.
#define RA8_TEST_HELPER
Mark a symbol as externally-linked but only callable from tests.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
ra8_err_t ra8_ble_open(const ra8_ble_config_t *cfg)
Power up the BLE controller and open the HCI mailbox.
ra8_err_t ra8_ble_attach_event_handler(ra8_ble_event_fn_t fn, void *ctx)
Register a handler for inbound HCI events.
ra8_err_t ra8_ble_set_advertising_data(const uint8_t *data, uint8_t len)
Send LE_Set_Advertising_Data (opcode 0x2008).
@ k_ra8_ble_scan_own_pub
Public device address.
@ k_ra8_ble_scan_off_window_lo
Param byte index: window LO.
@ k_ra8_ble_scan_off_type
Param byte index: scan type.
@ k_ra8_ble_scan_off_interval_hi
Param byte index: interval HI.
@ k_ra8_ble_scan_off_interval_lo
Param byte index: interval LO.
@ k_ra8_ble_scan_off_filter
Param byte index: filter pol.
@ k_ra8_ble_scan_enable_bytes
7.8.11 enable param bytes.
@ k_ra8_ble_scan_filt_basic
Basic unfiltered policy.
@ k_ra8_ble_scan_off_own_addr
Param byte index: own_addr.
@ k_ra8_ble_scan_off_window_hi
Param byte index: window HI.
@ k_ra8_ble_scan_param_bytes
7.8.10 parameter packet bytes.
static ra8_err_t internal_dispatch_acl(void)
Drain and dispatch one HCI ACL data packet.
const uint8_t * ra8_ble_test_tx_capture(uint16_t *out_len)
Borrow the BLE transmit capture and optionally report its length.
void ra8_ble_test_inject_rx(const uint8_t *bytes, uint16_t len)
Replace the synthetic BLE receive input with bounded caller bytes.
ra8_ble_hci_opcode_t
HCI LE command opcodes used by the convenience wrappers (Bluetooth Core 5.3 Vol 4 Part E 7....
@ k_ra8_ble_op_le_set_adv_enable
7.8.9 LE_Set_Advertising_Enable.
@ k_ra8_ble_op_le_set_random_address
7.8.4 LE_Set_Random_Address.
@ k_ra8_ble_op_le_set_adv_data
7.8.7 LE_Set_Advertising_Data.
@ k_ra8_ble_op_le_set_scan_params
7.8.10 LE_Set_Scan_Parameters.
@ k_ra8_ble_op_le_set_scan_enable
7.8.11 LE_Set_Scan_Enable.
ra8_err_t ra8_ble_set_random_address(const uint8_t addr[k_ra8_ble_addr_bytes])
Send LE_Set_Random_Address (opcode 0x2005).
ra8_err_t ra8_ble_set_advertising_enable(uint8_t enable)
Send LE_Set_Advertising_Enable (opcode 0x200A).
ra8_err_t ra8_ble_close(void)
Close the HCI mailbox and put the controller back in reset.
@ k_ra8_ble_dispatch_budget
Max packets drained per dispatch.
ra8_err_t ra8_ble_attach_acl_handler(ra8_ble_acl_fn_t fn, void *ctx)
Register a handler for inbound HCI ACL data.
static uint8_t internal_rx_byte(uint8_t *out)
Pull one byte from the injected RX buffer.
ra8_err_t ra8_ble_scan_start(uint8_t active, uint16_t interval, uint16_t window)
Send LE_Set_Scan_Parameters then LE_Set_Scan_Enable.
static void internal_tx_byte(uint8_t b)
Push one byte down the transport and capture it.
ra8_err_t ra8_ble_hci_send_command(uint16_t opcode, const uint8_t *params, uint8_t params_len)
Emit an HCI command packet.
ra8_err_t ra8_ble_hci_send_acl_data(uint16_t handle, const uint8_t *payload, uint16_t len)
Emit an HCI ACL data packet.
@ k_ra8_ble_byte_shift
Bit shift between LE16 halves.
@ k_ra8_ble_byte_mask
RA8 BLE byte mask.
void ra8_ble_test_reset_capture(void)
Reset the BLE loopback capture and injection cursors.
ra8_err_t ra8_ble_dispatch(void)
Pump the HCI receive path – call from ISR or main loop.
static ra8_err_t internal_dispatch_event(void)
Drain and dispatch one HCI event from the injected RX stream.
static void internal_byte_copy(uint8_t *dst, const uint8_t *src, uint16_t n)
Bytewise copy.
@ k_ra8_ble_scan_min
7.8.10 LE_Set_Scan_Parameters.
@ k_ra8_ble_rx_inject_bytes
Bytes of RX injection for tests.
@ k_ra8_ble_scan_max
7.8.10 LE_Set_Scan_Parameters.
@ k_ra8_ble_tx_capture_bytes
Bytes of TX capture for unit tests.
BLE HCI transport seam (host-side).
void(* ra8_ble_acl_fn_t)(void *ctx, uint16_t handle, const uint8_t *payload, uint16_t len)
Fired when an HCI ACL data packet has been received.
@ k_ra8_ble_pkt_cmd
HCI command packet indicator.
@ k_ra8_ble_pkt_event
HCI event packet indicator.
@ k_ra8_ble_pkt_acl_data
HCI ACL data packet indicator.
void(* ra8_ble_event_fn_t)(void *ctx, uint8_t evt_code, const uint8_t *params, uint8_t params_len)
Fired when an HCI event packet has been received.
@ k_ra8_ble_adv_data_max
Legacy advertising-data byte cap.
@ k_ra8_ble_max_evt_params
HCI event max parameter byte count.
@ k_ra8_ble_max_acl_payload
LE Data Length Extension default cap.
@ k_ra8_ble_addr_bytes
48-bit BD_ADDR length.
Test-access surface for the BLE loopback transport.
Validation and Error-Checking Macros for ra8-firmware.
#define RA8_CHECK_NULL_PTR(ptr, tag, message)
Reject nullptr pointer, returning k_ra8_err_null_ptr.
Error Code Definitions for ra8-firmware.
@ k_ra8_err_invalid_arg
Invalid function argument.
@ k_ra8_err_not_initialized
Module not initialized – _init() not yet called successfully.
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
@ k_ra8_err_null_ptr
Pointer was NULL where a valid pointer was required.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Lightweight Logging Interface for ra8-firmware.
#define ra8_log_info(tag, message)
RA8 log info.
Configuration passed to ra8_ble_open.
uint8_t rx_inject[k_ra8_ble_rx_inject_bytes]
RX inject.
uint16_t tx_capture_len
TX capture length.
uint16_t rx_inject_len
RX inject length.
ra8_ble_acl_fn_t acl_fn
Acl fn.
ra8_ble_event_fn_t evt_fn
Evt fn.
uint8_t tx_capture[k_ra8_ble_tx_capture_bytes]
TX capture.
uint16_t rx_inject_pos
RX inject pos.