Skip to content

File syn_ble_hci.h

FileList > ble > syn_ble_hci.h

Go to the source code of this file

Zero-Heap Host Controller Interface (HCI) Driver (H:4 UART Framing). More...

  • #include "../common/syn_defs.h"
  • #include <stdbool.h>
  • #include <stddef.h>
  • #include <stdint.h>

Classes

Type Name
struct SYN_BLE_HCI_Config
struct SYN_BLE_HCI_s

Public Types

Type Name
typedef void(* SYN_BLE_HCI_AclCb
typedef void(* SYN_BLE_HCI_EventCb

Public Functions

Type Name
SYN_Status syn_ble_hci_encode_acl (uint16_t conn_handle, uint8_t pb_flags, uint8_t bc_flags, const uint8_t * data, uint16_t len, uint8_t * tx_buf, uint16_t * tx_len)
Encode HCI ACL Data Packet.
SYN_Status syn_ble_hci_encode_command (uint16_t opcode, const uint8_t * params, uint8_t param_len, uint8_t * tx_buf, uint16_t * tx_len)
Send HCI Command Packet.
SYN_Status syn_ble_hci_init (SYN_BLE_HCI * hci, const SYN_BLE_HCI_Config * cfg)
Initialize HCI Driver Context.
SYN_Status syn_ble_hci_rx_buf (SYN_BLE_HCI * hci, const uint8_t * buf, uint16_t len)
Feed raw buffer into HCI receiver state machine.
SYN_Status syn_ble_hci_rx_byte (SYN_BLE_HCI * hci, uint8_t byte)
Feed raw bytes from UART/SPI into HCI receiver state machine.

Macros

Type Name
define SYN_BLE_HCI_EVT_CMD_COMPLETE 0x0EU
define SYN_BLE_HCI_EVT_CMD_STATUS 0x0FU
define SYN_BLE_HCI_EVT_DISCONN_COMPLETE 0x05U
define SYN_BLE_HCI_EVT_LE_META 0x3EU
define SYN_BLE_HCI_LE_SUBEVT_ADV_REPORT 0x02U
define SYN_BLE_HCI_LE_SUBEVT_CONN_COMPLETE 0x01U
define SYN_BLE_HCI_LE_SUBEVT_CONN_UPDATE_COMPLETE 0x03U
define SYN_BLE_HCI_OGF_INFO_PARAM 0x04U
define SYN_BLE_HCI_OGF_LE_CONTROLLER 0x08U
define SYN_BLE_HCI_OGF_LINK_CONTROL 0x01U
define SYN_BLE_HCI_OGF_STATUS_PARAM 0x05U
define SYN_BLE_HCI_OPCODE (ogf, ocf) ((uint16\_t)(((ogf) &lt;&lt; 10) \| ((ocf) & 0x03FFU)))
define SYN_BLE_HCI_OP_DISCONNECT [**SYN\_BLE\_HCI\_OPCODE**](syn__ble__hci_8h.md#define-syn_ble_hci_opcode)(0x01U, 0x0006U)
define SYN_BLE_HCI_OP_LE_CREATE_CONN [**SYN\_BLE\_HCI\_OPCODE**](syn__ble__hci_8h.md#define-syn_ble_hci_opcode)(0x08U, 0x000DU)
define SYN_BLE_HCI_OP_LE_CREATE_CONN_CANCEL [**SYN\_BLE\_HCI\_OPCODE**](syn__ble__hci_8h.md#define-syn_ble_hci_opcode)(0x08U, 0x000EU)
define SYN_BLE_HCI_OP_LE_READ_BUFFER_SIZE [**SYN\_BLE\_HCI\_OPCODE**](syn__ble__hci_8h.md#define-syn_ble_hci_opcode)(0x08U, 0x0002U)
define SYN_BLE_HCI_OP_LE_SET_ADV_DATA [**SYN\_BLE\_HCI\_OPCODE**](syn__ble__hci_8h.md#define-syn_ble_hci_opcode)(0x08U, 0x0008U)
define SYN_BLE_HCI_OP_LE_SET_ADV_ENABLE [**SYN\_BLE\_HCI\_OPCODE**](syn__ble__hci_8h.md#define-syn_ble_hci_opcode)(0x08U, 0x000AU)
define SYN_BLE_HCI_OP_LE_SET_ADV_PARAM [**SYN\_BLE\_HCI\_OPCODE**](syn__ble__hci_8h.md#define-syn_ble_hci_opcode)(0x08U, 0x0006U)
define SYN_BLE_HCI_OP_LE_SET_EVENT_MASK [**SYN\_BLE\_HCI\_OPCODE**](syn__ble__hci_8h.md#define-syn_ble_hci_opcode)(0x08U, 0x0001U)
define SYN_BLE_HCI_OP_LE_SET_RANDOM_ADDR [**SYN\_BLE\_HCI\_OPCODE**](syn__ble__hci_8h.md#define-syn_ble_hci_opcode)(0x08U, 0x0005U)
define SYN_BLE_HCI_OP_LE_SET_SCAN_ENABLE [**SYN\_BLE\_HCI\_OPCODE**](syn__ble__hci_8h.md#define-syn_ble_hci_opcode)(0x08U, 0x000CU)
define SYN_BLE_HCI_OP_LE_SET_SCAN_PARAM [**SYN\_BLE\_HCI\_OPCODE**](syn__ble__hci_8h.md#define-syn_ble_hci_opcode)(0x08U, 0x000BU)
define SYN_BLE_HCI_OP_LE_SET_SCAN_RESP_DATA [**SYN\_BLE\_HCI\_OPCODE**](syn__ble__hci_8h.md#define-syn_ble_hci_opcode)(0x08U, 0x0009U)
define SYN_BLE_HCI_PKT_ACL 0x02U
define SYN_BLE_HCI_PKT_CMD 0x01U
define SYN_BLE_HCI_PKT_EVT 0x04U
define SYN_BLE_HCI_PKT_ISO 0x05U
define SYN_BLE_HCI_PKT_SCO 0x03U
define SYN_BLE_HCI_RX_BUF_SIZE 256U
define SYN_BLE_HCI_TX_BUF_SIZE 256U

Detailed Description

Implements Bluetooth Core Specification Vol 4, Part A (H:4 Transport Layer). Encapsulates HCI Commands, HCI Events, and ACL Data packets over UART/SPI.

Public Types Documentation

typedef SYN_BLE_HCI_AclCb

typedef void(* SYN_BLE_HCI_AclCb) (SYN_BLE_HCI *hci, uint16_t conn_handle, uint8_t pb_bc_flags, const uint8_t *data, uint16_t len, void *user_data);

Callback function pointer for received ACL Data


typedef SYN_BLE_HCI_EventCb

typedef void(* SYN_BLE_HCI_EventCb) (SYN_BLE_HCI *hci, uint8_t evt_code, const uint8_t *payload, uint8_t len, void *user_data);

Callback function pointer for received HCI Events


Public Functions Documentation

function syn_ble_hci_encode_acl

Encode HCI ACL Data Packet.

SYN_Status syn_ble_hci_encode_acl (
    uint16_t conn_handle,
    uint8_t pb_flags,
    uint8_t bc_flags,
    const uint8_t * data,
    uint16_t len,
    uint8_t * tx_buf,
    uint16_t * tx_len
) 

Parameters:

  • conn_handle 12-bit Connection Handle.
  • pb_flags Packet Boundary flags (2 bits).
  • bc_flags Broadcast flags (2 bits).
  • data Data payload bytes.
  • len Data payload length in bytes.
  • tx_buf Buffer to store framed ACL packet (minimum 5 + len bytes).
  • tx_len Pointer to store resulting framed size.

Returns:

SYN_OK on success.


function syn_ble_hci_encode_command

Send HCI Command Packet.

SYN_Status syn_ble_hci_encode_command (
    uint16_t opcode,
    const uint8_t * params,
    uint8_t param_len,
    uint8_t * tx_buf,
    uint16_t * tx_len
) 

Parameters:

  • opcode 16-bit HCI Command Opcode.
  • params Pointer to parameter payload (or NULL if len is 0).
  • param_len Parameter payload length in bytes.
  • tx_buf Buffer to store framed HCI packet (minimum 4 + param_len bytes).
  • tx_len Pointer to store resulting framed size.

Returns:

SYN_OK on success.


function syn_ble_hci_init

Initialize HCI Driver Context.

SYN_Status syn_ble_hci_init (
    SYN_BLE_HCI * hci,
    const SYN_BLE_HCI_Config * cfg
) 

Parameters:

  • hci Driver handle pointer.
  • cfg Driver configuration struct.

Returns:

SYN_OK on success, SYN_INVALID_PARAM if null.


function syn_ble_hci_rx_buf

Feed raw buffer into HCI receiver state machine.

SYN_Status syn_ble_hci_rx_buf (
    SYN_BLE_HCI * hci,
    const uint8_t * buf,
    uint16_t len
) 

Parameters:

  • hci Driver handle pointer.
  • buf Data buffer pointer.
  • len Data buffer length.

Returns:

SYN_OK on success.


function syn_ble_hci_rx_byte

Feed raw bytes from UART/SPI into HCI receiver state machine.

SYN_Status syn_ble_hci_rx_byte (
    SYN_BLE_HCI * hci,
    uint8_t byte
) 

Parameters:

  • hci Driver handle pointer.
  • byte Single received byte from H:4 transport.

Returns:

SYN_OK on success.


Macro Definition Documentation

define SYN_BLE_HCI_EVT_CMD_COMPLETE

#define SYN_BLE_HCI_EVT_CMD_COMPLETE `0x0EU`

Command Complete Event


define SYN_BLE_HCI_EVT_CMD_STATUS

#define SYN_BLE_HCI_EVT_CMD_STATUS `0x0FU`

Command Status Event


define SYN_BLE_HCI_EVT_DISCONN_COMPLETE

#define SYN_BLE_HCI_EVT_DISCONN_COMPLETE `0x05U`

Disconnection Complete Event


define SYN_BLE_HCI_EVT_LE_META

#define SYN_BLE_HCI_EVT_LE_META `0x3EU`

LE Meta Event


define SYN_BLE_HCI_LE_SUBEVT_ADV_REPORT

#define SYN_BLE_HCI_LE_SUBEVT_ADV_REPORT `0x02U`

LE Advertising Report Subevent


define SYN_BLE_HCI_LE_SUBEVT_CONN_COMPLETE

#define SYN_BLE_HCI_LE_SUBEVT_CONN_COMPLETE `0x01U`

LE Connection Complete Subevent


define SYN_BLE_HCI_LE_SUBEVT_CONN_UPDATE_COMPLETE

#define SYN_BLE_HCI_LE_SUBEVT_CONN_UPDATE_COMPLETE `0x03U`

LE Connection Update Complete Subevent


define SYN_BLE_HCI_OGF_INFO_PARAM

#define SYN_BLE_HCI_OGF_INFO_PARAM `0x04U`

Informational Parameters OGF


define SYN_BLE_HCI_OGF_LE_CONTROLLER

#define SYN_BLE_HCI_OGF_LE_CONTROLLER `0x08U`

LE Controller Commands OGF


#define SYN_BLE_HCI_OGF_LINK_CONTROL `0x01U`

Link Control OGF


define SYN_BLE_HCI_OGF_STATUS_PARAM

#define SYN_BLE_HCI_OGF_STATUS_PARAM `0x05U`

Status Parameters OGF


define SYN_BLE_HCI_OPCODE

#define SYN_BLE_HCI_OPCODE (
    ogf,
    ocf
) `((uint16_t)(((ogf) << 10) | ((ocf) & 0x03FFU)))`

Construct 16-bit HCI Opcode from OGF and OCF


define SYN_BLE_HCI_OP_DISCONNECT

#define SYN_BLE_HCI_OP_DISCONNECT `SYN_BLE_HCI_OPCODE (0x01U, 0x0006U)`

Disconnect Opcode


define SYN_BLE_HCI_OP_LE_CREATE_CONN

#define SYN_BLE_HCI_OP_LE_CREATE_CONN `SYN_BLE_HCI_OPCODE (0x08U, 0x000DU)`

LE Create Connection Opcode


define SYN_BLE_HCI_OP_LE_CREATE_CONN_CANCEL

#define SYN_BLE_HCI_OP_LE_CREATE_CONN_CANCEL `SYN_BLE_HCI_OPCODE (0x08U, 0x000EU)`

LE Create Connection Cancel Opcode


define SYN_BLE_HCI_OP_LE_READ_BUFFER_SIZE

#define SYN_BLE_HCI_OP_LE_READ_BUFFER_SIZE `SYN_BLE_HCI_OPCODE (0x08U, 0x0002U)`

LE Read Buffer Size Opcode


define SYN_BLE_HCI_OP_LE_SET_ADV_DATA

#define SYN_BLE_HCI_OP_LE_SET_ADV_DATA `SYN_BLE_HCI_OPCODE (0x08U, 0x0008U)`

LE Set Advertising Data Opcode


define SYN_BLE_HCI_OP_LE_SET_ADV_ENABLE

#define SYN_BLE_HCI_OP_LE_SET_ADV_ENABLE `SYN_BLE_HCI_OPCODE (0x08U, 0x000AU)`

LE Set Advertising Enable Opcode


define SYN_BLE_HCI_OP_LE_SET_ADV_PARAM

#define SYN_BLE_HCI_OP_LE_SET_ADV_PARAM `SYN_BLE_HCI_OPCODE (0x08U, 0x0006U)`

LE Set Advertising Parameters Opcode


define SYN_BLE_HCI_OP_LE_SET_EVENT_MASK

#define SYN_BLE_HCI_OP_LE_SET_EVENT_MASK `SYN_BLE_HCI_OPCODE (0x08U, 0x0001U)`

LE Set Event Mask Opcode


define SYN_BLE_HCI_OP_LE_SET_RANDOM_ADDR

#define SYN_BLE_HCI_OP_LE_SET_RANDOM_ADDR `SYN_BLE_HCI_OPCODE (0x08U, 0x0005U)`

LE Set Random Address Opcode


define SYN_BLE_HCI_OP_LE_SET_SCAN_ENABLE

#define SYN_BLE_HCI_OP_LE_SET_SCAN_ENABLE `SYN_BLE_HCI_OPCODE (0x08U, 0x000CU)`

LE Set Scan Enable Opcode


define SYN_BLE_HCI_OP_LE_SET_SCAN_PARAM

#define SYN_BLE_HCI_OP_LE_SET_SCAN_PARAM `SYN_BLE_HCI_OPCODE (0x08U, 0x000BU)`

LE Set Scan Parameters Opcode


define SYN_BLE_HCI_OP_LE_SET_SCAN_RESP_DATA

#define SYN_BLE_HCI_OP_LE_SET_SCAN_RESP_DATA `SYN_BLE_HCI_OPCODE (0x08U, 0x0009U)`

LE Set Scan Response Data Opcode


define SYN_BLE_HCI_PKT_ACL

#define SYN_BLE_HCI_PKT_ACL `0x02U`

HCI ACL Data Packet


define SYN_BLE_HCI_PKT_CMD

#define SYN_BLE_HCI_PKT_CMD `0x01U`

HCI Command Packet


define SYN_BLE_HCI_PKT_EVT

#define SYN_BLE_HCI_PKT_EVT `0x04U`

HCI Event Packet


define SYN_BLE_HCI_PKT_ISO

#define SYN_BLE_HCI_PKT_ISO `0x05U`

HCI ISO Data Packet


define SYN_BLE_HCI_PKT_SCO

#define SYN_BLE_HCI_PKT_SCO `0x03U`

HCI Synchronous Data Packet


define SYN_BLE_HCI_RX_BUF_SIZE

#define SYN_BLE_HCI_RX_BUF_SIZE `256U`

HCI RX packet reassembly capacity


define SYN_BLE_HCI_TX_BUF_SIZE

#define SYN_BLE_HCI_TX_BUF_SIZE `256U`

HCI TX packet capacity



The documentation for this class was generated from the following file src/syntropic/ble/syn_ble_hci.h