Zephyr Project API  3.2.0
A Scalable Open Source RTOS

ISO. More...

Data Structures

struct  bt_iso_chan
 ISO Channel structure. More...
 
struct  bt_iso_chan_io_qos
 ISO Channel IO QoS structure. More...
 
struct  bt_iso_chan_qos
 ISO Channel QoS structure. More...
 
struct  bt_iso_chan_path
 ISO Channel Data Path structure. More...
 
struct  bt_iso_recv_info
 ISO Meta Data structure for received ISO packets. More...
 
struct  bt_iso_tx_info
 ISO Meta Data structure for transmitted ISO packets. More...
 
struct  bt_iso_cig_param
 
struct  bt_iso_connect_param
 
struct  bt_iso_big_create_param
 
struct  bt_iso_big_sync_param
 
struct  bt_iso_biginfo
 
struct  bt_iso_chan_ops
 ISO Channel operations structure. More...
 
struct  bt_iso_accept_info
 
struct  bt_iso_server
 ISO Server structure. More...
 
struct  bt_iso_unicast_tx_info
 
struct  bt_iso_unicast_info
 
struct  bt_iso_broadcaster_info
 
struct  bt_iso_sync_receiver_info
 
struct  bt_iso_info
 

Macros

#define BT_ISO_CHAN_SEND_RESERVE   BT_BUF_ISO_SIZE(0)
 Headroom needed for outgoing ISO SDUs. More...
 
#define BT_ISO_SDU_BUF_SIZE(mtu)   BT_BUF_ISO_SIZE(mtu)
 Helper to calculate needed buffer size for ISO SDUs. Useful for creating buffer pools. More...
 
#define BT_ISO_DATA_PATH_HCI   0x00
 
#define BT_ISO_SDU_INTERVAL_MIN   0x0000FFU
 
#define BT_ISO_SDU_INTERVAL_MAX   0x0FFFFFU
 
#define BT_ISO_LATENCY_MIN   0x0005
 
#define BT_ISO_LATENCY_MAX   0x0FA0
 
#define BT_ISO_PACKING_SEQUENTIAL   0x00
 
#define BT_ISO_PACKING_INTERLEAVED   0x01
 
#define BT_ISO_FRAMING_UNFRAMED   0x00
 
#define BT_ISO_FRAMING_FRAMED   0x01
 
#define BT_ISO_MAX_GROUP_ISO_COUNT   0x1F
 
#define BT_ISO_MAX_SDU   0x0FFF
 
#define BT_ISO_SYNC_TIMEOUT_MIN   0x000A
 
#define BT_ISO_SYNC_TIMEOUT_MAX   0x4000
 
#define BT_ISO_SYNC_MSE_ANY   0x00
 
#define BT_ISO_SYNC_MSE_MIN   0x01
 
#define BT_ISO_SYNC_MSE_MAX   0x1F
 
#define BT_ISO_CONNECTED_RTN_MAX   0xFF
 
#define BT_ISO_BROADCAST_RTN_MAX   0x1E
 
#define BT_ISO_BROADCAST_CODE_SIZE   16
 
#define BT_ISO_BIS_INDEX_MIN   0x01
 
#define BT_ISO_BIS_INDEX_MAX   0x1F
 
#define BT_ISO_TIMESTAMP_NONE   0U
 

Enumerations

enum  bt_iso_state {
  BT_ISO_STATE_DISCONNECTED , BT_ISO_STATE_ENCRYPT_PENDING , BT_ISO_STATE_CONNECTING , BT_ISO_STATE_CONNECTED ,
  BT_ISO_STATE_DISCONNECTING
}
 Life-span states of ISO channel. Used only by internal APIs dealing with setting channel to proper state depending on operational context. More...
 
enum  bt_iso_chan_type { BT_ISO_CHAN_TYPE_NONE , BT_ISO_CHAN_TYPE_CONNECTED , BT_ISO_CHAN_TYPE_BROADCASTER , BT_ISO_CHAN_TYPE_SYNC_RECEIVER }
 
enum  { BT_ISO_FLAGS_VALID = BIT(0) , BT_ISO_FLAGS_ERROR = BIT(1) , BT_ISO_FLAGS_LOST = BIT(2) , BT_ISO_FLAGS_TS = BIT(3) }
 

Functions

int bt_iso_server_register (struct bt_iso_server *server)
 Register ISO server. More...
 
int bt_iso_cig_create (const struct bt_iso_cig_param *param, struct bt_iso_cig **out_cig)
 Creates a CIG as a central. More...
 
int bt_iso_cig_reconfigure (struct bt_iso_cig *cig, const struct bt_iso_cig_param *param)
 Reconfigure a CIG as a central. More...
 
int bt_iso_cig_terminate (struct bt_iso_cig *cig)
 Terminates a CIG as a central. More...
 
int bt_iso_chan_connect (const struct bt_iso_connect_param *param, size_t count)
 Connect ISO channels on ACL connections. More...
 
int bt_iso_chan_disconnect (struct bt_iso_chan *chan)
 Disconnect ISO channel. More...
 
int bt_iso_chan_send (struct bt_iso_chan *chan, struct net_buf *buf, uint32_t seq_num, uint32_t ts)
 Send data to ISO channel. More...
 
int bt_iso_chan_get_info (const struct bt_iso_chan *chan, struct bt_iso_info *info)
 Get ISO channel info. More...
 
enum bt_iso_chan_type bt_iso_chan_get_type (const struct bt_iso_chan *chan)
 Get the type of an ISO channel. More...
 
int bt_iso_chan_get_tx_sync (const struct bt_iso_chan *chan, struct bt_iso_tx_info *info)
 Get ISO transmission timing info. More...
 
int bt_iso_big_create (struct bt_le_ext_adv *padv, struct bt_iso_big_create_param *param, struct bt_iso_big **out_big)
 Creates a BIG as a broadcaster. More...
 
int bt_iso_big_terminate (struct bt_iso_big *big)
 Terminates a BIG as a broadcaster or receiver. More...
 
int bt_iso_big_sync (struct bt_le_per_adv_sync *sync, struct bt_iso_big_sync_param *param, struct bt_iso_big **out_big)
 Creates a BIG as a receiver. More...
 

Detailed Description

ISO.

Macro Definition Documentation

◆ BT_ISO_BIS_INDEX_MAX

#define BT_ISO_BIS_INDEX_MAX   0x1F

#include <include/zephyr/bluetooth/iso.h>

Highest BIS index

◆ BT_ISO_BIS_INDEX_MIN

#define BT_ISO_BIS_INDEX_MIN   0x01

#include <include/zephyr/bluetooth/iso.h>

Lowest BIS index

◆ BT_ISO_BROADCAST_CODE_SIZE

#define BT_ISO_BROADCAST_CODE_SIZE   16

#include <include/zephyr/bluetooth/iso.h>

Broadcast code size

◆ BT_ISO_BROADCAST_RTN_MAX

#define BT_ISO_BROADCAST_RTN_MAX   0x1E

#include <include/zephyr/bluetooth/iso.h>

Maximum broadcast ISO retransmission value

◆ BT_ISO_CHAN_SEND_RESERVE

#define BT_ISO_CHAN_SEND_RESERVE   BT_BUF_ISO_SIZE(0)

#include <include/zephyr/bluetooth/iso.h>

Headroom needed for outgoing ISO SDUs.

◆ BT_ISO_CONNECTED_RTN_MAX

#define BT_ISO_CONNECTED_RTN_MAX   0xFF

#include <include/zephyr/bluetooth/iso.h>

Maximum connected ISO retransmission value

◆ BT_ISO_DATA_PATH_HCI

#define BT_ISO_DATA_PATH_HCI   0x00

#include <include/zephyr/bluetooth/iso.h>

Value to set the ISO data path over HCi.

◆ BT_ISO_FRAMING_FRAMED

#define BT_ISO_FRAMING_FRAMED   0x01

#include <include/zephyr/bluetooth/iso.h>

Packets are always framed

◆ BT_ISO_FRAMING_UNFRAMED

#define BT_ISO_FRAMING_UNFRAMED   0x00

#include <include/zephyr/bluetooth/iso.h>

Packets may be framed or unframed

◆ BT_ISO_LATENCY_MAX

#define BT_ISO_LATENCY_MAX   0x0FA0

#include <include/zephyr/bluetooth/iso.h>

Maximum latency value in milliseconds

◆ BT_ISO_LATENCY_MIN

#define BT_ISO_LATENCY_MIN   0x0005

#include <include/zephyr/bluetooth/iso.h>

Minimum latency value in milliseconds

◆ BT_ISO_MAX_GROUP_ISO_COUNT

#define BT_ISO_MAX_GROUP_ISO_COUNT   0x1F

#include <include/zephyr/bluetooth/iso.h>

Maximum number of isochronous channels in a single group

◆ BT_ISO_MAX_SDU

#define BT_ISO_MAX_SDU   0x0FFF

#include <include/zephyr/bluetooth/iso.h>

Maximum SDU size

◆ BT_ISO_PACKING_INTERLEAVED

#define BT_ISO_PACKING_INTERLEAVED   0x01

#include <include/zephyr/bluetooth/iso.h>

Packets will be sent interleaved between the channels in the group

◆ BT_ISO_PACKING_SEQUENTIAL

#define BT_ISO_PACKING_SEQUENTIAL   0x00

#include <include/zephyr/bluetooth/iso.h>

Packets will be sent sequentially between the channels in the group

◆ BT_ISO_SDU_BUF_SIZE

#define BT_ISO_SDU_BUF_SIZE (   mtu)    BT_BUF_ISO_SIZE(mtu)

#include <include/zephyr/bluetooth/iso.h>

Helper to calculate needed buffer size for ISO SDUs. Useful for creating buffer pools.

Parameters
mtuRequired ISO SDU size
Returns
Needed buffer size to match the requested ISO SDU MTU.

◆ BT_ISO_SDU_INTERVAL_MAX

#define BT_ISO_SDU_INTERVAL_MAX   0x0FFFFFU

#include <include/zephyr/bluetooth/iso.h>

Maximum interval value in microseconds

◆ BT_ISO_SDU_INTERVAL_MIN

#define BT_ISO_SDU_INTERVAL_MIN   0x0000FFU

#include <include/zephyr/bluetooth/iso.h>

Minimum interval value in microseconds

◆ BT_ISO_SYNC_MSE_ANY

#define BT_ISO_SYNC_MSE_ANY   0x00

#include <include/zephyr/bluetooth/iso.h>

Controller controlled maximum subevent count value

◆ BT_ISO_SYNC_MSE_MAX

#define BT_ISO_SYNC_MSE_MAX   0x1F

#include <include/zephyr/bluetooth/iso.h>

Maximum BIG sync maximum subevent count value

◆ BT_ISO_SYNC_MSE_MIN

#define BT_ISO_SYNC_MSE_MIN   0x01

#include <include/zephyr/bluetooth/iso.h>

Minimum BIG sync maximum subevent count value

◆ BT_ISO_SYNC_TIMEOUT_MAX

#define BT_ISO_SYNC_TIMEOUT_MAX   0x4000

#include <include/zephyr/bluetooth/iso.h>

Maximum BIG sync timeout value (N * 10 ms)

◆ BT_ISO_SYNC_TIMEOUT_MIN

#define BT_ISO_SYNC_TIMEOUT_MIN   0x000A

#include <include/zephyr/bluetooth/iso.h>

Minimum BIG sync timeout value (N * 10 ms)

◆ BT_ISO_TIMESTAMP_NONE

#define BT_ISO_TIMESTAMP_NONE   0U

#include <include/zephyr/bluetooth/iso.h>

Omit time stamp when sending to controller

Using this value will enqueue the ISO SDU in a FIFO manner, instead of transmitting it at a specified timestamp.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

#include <include/zephyr/bluetooth/iso.h>

ISO packet status flag bits

Enumerator
BT_ISO_FLAGS_VALID 

The ISO packet is valid.

BT_ISO_FLAGS_ERROR 

The ISO packet may possibly contain errors.

   May be caused by a failed CRC check or if missing a part of the SDU.
BT_ISO_FLAGS_LOST 

The ISO packet was lost.

BT_ISO_FLAGS_TS 

Timestamp is valid

   If not set, then the bt_iso_recv_info.ts value is not valid, and
   should not be used.

◆ bt_iso_chan_type

#include <include/zephyr/bluetooth/iso.h>

Enumerator
BT_ISO_CHAN_TYPE_NONE 
BT_ISO_CHAN_TYPE_CONNECTED 
BT_ISO_CHAN_TYPE_BROADCASTER 
BT_ISO_CHAN_TYPE_SYNC_RECEIVER 

◆ bt_iso_state

#include <include/zephyr/bluetooth/iso.h>

Life-span states of ISO channel. Used only by internal APIs dealing with setting channel to proper state depending on operational context.

Enumerator
BT_ISO_STATE_DISCONNECTED 

Channel disconnected

BT_ISO_STATE_ENCRYPT_PENDING 

Channel is pending ACL encryption before connecting

BT_ISO_STATE_CONNECTING 

Channel in connecting state

BT_ISO_STATE_CONNECTED 

Channel ready for upper layer traffic on it

BT_ISO_STATE_DISCONNECTING 

Channel in disconnecting state

Function Documentation

◆ bt_iso_big_create()

int bt_iso_big_create ( struct bt_le_ext_adv *  padv,
struct bt_iso_big_create_param param,
struct bt_iso_big **  out_big 
)

#include <include/zephyr/bluetooth/iso.h>

Creates a BIG as a broadcaster.

Parameters
[in]padvPointer to the periodic advertising object the BIGInfo shall be sent on.
[in]paramThe parameters used to create and enable the BIG. The QOS parameters are determined by the QOS field of the first BIS in the BIS list of this parameter.
[out]out_bigBroadcast Isochronous Group object on success.
Returns
0 in case of success or negative value in case of error.

◆ bt_iso_big_sync()

int bt_iso_big_sync ( struct bt_le_per_adv_sync *  sync,
struct bt_iso_big_sync_param param,
struct bt_iso_big **  out_big 
)

#include <include/zephyr/bluetooth/iso.h>

Creates a BIG as a receiver.

Parameters
[in]syncPointer to the periodic advertising sync object the BIGInfo was received on.
[in]paramThe parameters used to create and enable the BIG sync.
[out]out_bigBroadcast Isochronous Group object on success.
Returns
0 in case of success or negative value in case of error.

◆ bt_iso_big_terminate()

int bt_iso_big_terminate ( struct bt_iso_big *  big)

#include <include/zephyr/bluetooth/iso.h>

Terminates a BIG as a broadcaster or receiver.

Parameters
bigPointer to the BIG structure.
Returns
0 in case of success or negative value in case of error.

◆ bt_iso_chan_connect()

int bt_iso_chan_connect ( const struct bt_iso_connect_param param,
size_t  count 
)

#include <include/zephyr/bluetooth/iso.h>

Connect ISO channels on ACL connections.

Connect ISO channels. The ISO channels must have been initialized in a CIG first by calling bt_iso_cig_create.

Once the connection is completed the channels' connected() callback will be called. If the connection is rejected disconnected() callback is called instead.

This function will also setup the ISO data path based on the path parameter of the bt_iso_chan_io_qos for each channel.

Parameters
paramPointer to a connect parameter array with the ISO and ACL pointers.
countNumber of connect parameters.
Return values
0Successfully started the connecting procedure.
-EINVALInvalid parameters were supplied.
-EBUSYSome ISO channels are already being connected. It is not possible to have multiple outstanding connection requests. May also be returned if CONFIG_BT_SMP is enabled and a pairing procedure is already in progress.
-ENOBUFSNot buffers available to send request to controller or if CONFIG_BT_SMP is enabled and no more keys could be stored.
-ENOMEMIf CONFIG_BT_SMP is enabled and no more keys could be stored.
-EIOController rejected the request or if CONFIG_BT_SMP is enabled and pairing has timed out.
-ENOTCONNIf CONFIG_BT_SMP is enabled the ACL is not connected.

◆ bt_iso_chan_disconnect()

int bt_iso_chan_disconnect ( struct bt_iso_chan chan)

#include <include/zephyr/bluetooth/iso.h>

Disconnect ISO channel.

Disconnect ISO channel, if the connection is pending it will be canceled and as a result the channel disconnected() callback is called. Regarding to input parameter, to get details see reference description to bt_iso_chan_connect() API above.

Parameters
chanChannel object.
Returns
0 in case of success or negative value in case of error.

◆ bt_iso_chan_get_info()

int bt_iso_chan_get_info ( const struct bt_iso_chan chan,
struct bt_iso_info info 
)

#include <include/zephyr/bluetooth/iso.h>

Get ISO channel info.

Parameters
chanChannel object.
infoChannel info object.
Returns
Zero on success or (negative) error code on failure.

◆ bt_iso_chan_get_tx_sync()

int bt_iso_chan_get_tx_sync ( const struct bt_iso_chan chan,
struct bt_iso_tx_info info 
)

#include <include/zephyr/bluetooth/iso.h>

Get ISO transmission timing info.

Reads timing information for transmitted ISO packet on an ISO channel. The HCI_LE_Read_ISO_TX_Sync HCI command is used to retrieve this information from the controller.

Note
An SDU must have already been successfully transmitted on the ISO channel for this function to return successfully.
Parameters
[in]chanChannel object.
[out]infoTransmit info object.
Returns
Zero on success or (negative) error code on failure.

◆ bt_iso_chan_get_type()

enum bt_iso_chan_type bt_iso_chan_get_type ( const struct bt_iso_chan chan)

#include <include/zephyr/bluetooth/iso.h>

Get the type of an ISO channel.

Parameters
chanChannel object.
Returns
enum bt_iso_chan_type The type of the channel. If is NULL this will be BT_ISO_CHAN_TYPE_NONE.

◆ bt_iso_chan_send()

int bt_iso_chan_send ( struct bt_iso_chan chan,
struct net_buf buf,
uint32_t  seq_num,
uint32_t  ts 
)

#include <include/zephyr/bluetooth/iso.h>

Send data to ISO channel.

Send data from buffer to the channel. If credits are not available, buf will be queued and sent as and when credits are received from peer. Regarding to first input parameter, to get details see reference description to bt_iso_chan_connect() API above.

Note
Buffer ownership is transferred to the stack in case of success, in case of an error the caller retains the ownership of the buffer.
Parameters
chanChannel object.
bufBuffer containing data to be sent.
seq_numPacket Sequence number. This value shall be incremented for each call to this function and at least once per SDU interval for a specific channel.
tsTimestamp of the SDU in microseconds (us). This value can be used to transmit multiple SDUs in the same SDU interval in a CIG or BIG. Can be omitted by using BT_ISO_TIMESTAMP_NONE which will simply enqueue the ISO SDU in a FIFO manner.
Returns
Bytes sent in case of success or negative value in case of error.

◆ bt_iso_cig_create()

int bt_iso_cig_create ( const struct bt_iso_cig_param param,
struct bt_iso_cig **  out_cig 
)

#include <include/zephyr/bluetooth/iso.h>

Creates a CIG as a central.

This can called at any time, even before connecting to a remote device. This must be called before any connected isochronous stream (CIS) channel can be connected.

Once a CIG is created, the channels supplied in the param can be connected using bt_iso_chan_connect.

Parameters
[in]paramThe parameters used to create and enable the CIG.
[out]out_cigConnected Isochronous Group object on success.
Returns
0 in case of success or negative value in case of error.

◆ bt_iso_cig_reconfigure()

int bt_iso_cig_reconfigure ( struct bt_iso_cig *  cig,
const struct bt_iso_cig_param param 
)

#include <include/zephyr/bluetooth/iso.h>

Reconfigure a CIG as a central.

This function can be used to update a CIG. It will update the group specific parameters, and, if supplied, change the QoS parameters of the individual CIS. If the cis_channels in param contains CIS that was not originally in the call to bt_iso_cig_create(), these will be added to the group. It is not possible to remove any CIS from the group after creation.

This can be called at any time before connecting an ISO to a remote device. Once any CIS in the group has connected, the group cannot be changed.

Once a CIG is created, the channels supplied in the param can be connected using bt_iso_chan_connect.

Parameters
cigConnected Isochronous Group object.
paramThe parameters used to reconfigure the CIG.
Returns
0 in case of success or negative value in case of error.

◆ bt_iso_cig_terminate()

int bt_iso_cig_terminate ( struct bt_iso_cig *  cig)

#include <include/zephyr/bluetooth/iso.h>

Terminates a CIG as a central.

All the CIS in the CIG shall be disconnected first.

Parameters
cigPointer to the CIG structure.
Returns
0 in case of success or negative value in case of error.

◆ bt_iso_server_register()

int bt_iso_server_register ( struct bt_iso_server server)

#include <include/zephyr/bluetooth/iso.h>

Register ISO server.

Register ISO server, each new connection is authorized using the accept() callback which in case of success shall allocate the channel structure to be used by the new connection.

Parameters
serverServer structure.
Returns
0 in case of success or negative value in case of error.