ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_ble.h
Go to the documentation of this file.
1
36
37#pragma once
38
39#ifdef __cplusplus
40extern "C" {
41#endif
42
43#include <stdint.h>
44
45#include "ra8_err.h"
46
47/* =============================================================================
48 * Public limits
49 * =============================================================================
50 */
51
65
72typedef enum : uint8_t {
77
78/* =============================================================================
79 * Configuration
80 * =============================================================================
81 */
82
87typedef struct {
91
92/* =============================================================================
93 * Callback typedefs
94 * =============================================================================
95 */
96
107typedef void (*ra8_ble_event_fn_t)(void* ctx,
108 uint8_t evt_code,
109 const uint8_t* params,
110 uint8_t params_len);
111
122typedef void (*ra8_ble_acl_fn_t)(void* ctx, uint16_t handle, const uint8_t* payload, uint16_t len);
123
124/* =============================================================================
125 * Lifecycle
126 * =============================================================================
127 */
128
156[[nodiscard]] ra8_err_t ra8_ble_open(const ra8_ble_config_t* cfg);
157
165[[nodiscard]] ra8_err_t ra8_ble_close(void);
166
167/* =============================================================================
168 * Raw HCI traffic
169 * =============================================================================
170 */
171
191[[nodiscard]] ra8_err_t
192ra8_ble_hci_send_command(uint16_t opcode, const uint8_t* params, uint8_t params_len);
193
213[[nodiscard]] ra8_err_t
214ra8_ble_hci_send_acl_data(uint16_t handle, const uint8_t* payload, uint16_t len);
215
216/* =============================================================================
217 * Receive callbacks
218 * =============================================================================
219 */
220
231
241[[nodiscard]] ra8_err_t ra8_ble_attach_acl_handler(ra8_ble_acl_fn_t fn, void* ctx);
242
255[[nodiscard]] ra8_err_t ra8_ble_dispatch(void);
256
257/* =============================================================================
258 * Convenience wrappers (HCI LE commands)
259 * =============================================================================
260 */
261
272[[nodiscard]] ra8_err_t ra8_ble_set_random_address(const uint8_t addr[k_ra8_ble_addr_bytes]);
273
286[[nodiscard]] ra8_err_t ra8_ble_set_advertising_data(const uint8_t* data, uint8_t len);
287
297[[nodiscard]] ra8_err_t ra8_ble_set_advertising_enable(uint8_t enable);
298
316[[nodiscard]] ra8_err_t ra8_ble_scan_start(uint8_t active, uint16_t interval, uint16_t window);
317
318#ifdef __cplusplus
319}
320#endif
ra8_err_t ra8_ble_open(const ra8_ble_config_t *cfg)
Power up the BLE controller and open the HCI mailbox.
Definition ra8_ble.c:197
ra8_err_t ra8_ble_attach_event_handler(ra8_ble_event_fn_t fn, void *ctx)
Register a handler for inbound HCI events.
Definition ra8_ble.c:274
ra8_err_t ra8_ble_set_advertising_data(const uint8_t *data, uint8_t len)
Send LE_Set_Advertising_Data (opcode 0x2008).
Definition ra8_ble.c:400
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.
Definition ra8_ble.h:122
ra8_ble_hci_pkt_t
H4 HCI packet-type indicator bytes (Bluetooth Core 5.3 Vol 4 Part A 2).
Definition ra8_ble.h:72
@ k_ra8_ble_pkt_cmd
HCI command packet indicator.
Definition ra8_ble.h:73
@ k_ra8_ble_pkt_event
HCI event packet indicator.
Definition ra8_ble.h:75
@ k_ra8_ble_pkt_acl_data
HCI ACL data packet indicator.
Definition ra8_ble.h:74
ra8_err_t ra8_ble_set_random_address(const uint8_t addr[k_ra8_ble_addr_bytes])
Send LE_Set_Random_Address (opcode 0x2005).
Definition ra8_ble.c:394
ra8_err_t ra8_ble_set_advertising_enable(uint8_t enable)
Send LE_Set_Advertising_Enable (opcode 0x200A).
Definition ra8_ble.c:420
ra8_err_t ra8_ble_close(void)
Close the HCI mailbox and put the controller back in reset.
Definition ra8_ble.c:211
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.
Definition ra8_ble.h:107
ra8_err_t ra8_ble_attach_acl_handler(ra8_ble_acl_fn_t fn, void *ctx)
Register a handler for inbound HCI ACL data.
Definition ra8_ble.c:281
ra8_ble_limits_t
Driver-side packet bounds.
Definition ra8_ble.h:58
@ k_ra8_ble_adv_data_max
Legacy advertising-data byte cap.
Definition ra8_ble.h:63
@ k_ra8_ble_max_evt_params
HCI event max parameter byte count.
Definition ra8_ble.h:60
@ k_ra8_ble_max_cmd_params
HCI command max parameter byte count.
Definition ra8_ble.h:59
@ k_ra8_ble_max_acl_payload
LE Data Length Extension default cap.
Definition ra8_ble.h:61
@ k_ra8_ble_addr_bytes
48-bit BD_ADDR length.
Definition ra8_ble.h:62
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.
Definition ra8_ble.c:426
ra8_err_t ra8_ble_hci_send_command(uint16_t opcode, const uint8_t *params, uint8_t params_len)
Emit an HCI command packet.
Definition ra8_ble.c:226
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.
Definition ra8_ble.c:246
ra8_err_t ra8_ble_dispatch(void)
Pump the HCI receive path – call from ISR or main loop.
Definition ra8_ble.c:362
Error Code Definitions for ra8-firmware.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
Configuration passed to ra8_ble_open.
Definition ra8_ble.h:87
uint8_t deep_sleep_enable
1 = allow controller deep-sleep.
Definition ra8_ble.h:89
uint8_t use_external_osc
1 = drive radio from external 32 MHz xtal.
Definition ra8_ble.h:88