Zephyr Project API  3.1.0
A Scalable Open Source RTOS
iso.h
Go to the documentation of this file.
1
5/*
6 * Copyright (c) 2020 Intel Corporation
7 * Copyright (c) 2021 Nordic Semiconductor ASA
8 *
9 * SPDX-License-Identifier: Apache-2.0
10 */
11#ifndef ZEPHYR_INCLUDE_BLUETOOTH_ISO_H_
12#define ZEPHYR_INCLUDE_BLUETOOTH_ISO_H_
13
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25#include <zephyr/sys/atomic.h>
29
33#define BT_ISO_CHAN_SEND_RESERVE BT_BUF_ISO_SIZE(0)
34
44#define BT_ISO_SDU_BUF_SIZE(mtu) BT_BUF_ISO_SIZE(mtu)
45
47#define BT_ISO_DATA_PATH_HCI 0x00
48
50#define BT_ISO_INTERVAL_MIN 0x0000FF
52#define BT_ISO_INTERVAL_MAX 0x0FFFFF
54#define BT_ISO_LATENCY_MIN 0x0005
56#define BT_ISO_LATENCY_MAX 0x0FA0
58#define BT_ISO_PACKING_SEQUENTIAL 0x00
60#define BT_ISO_PACKING_INTERLEAVED 0x01
62#define BT_ISO_FRAMING_UNFRAMED 0x00
64#define BT_ISO_FRAMING_FRAMED 0x01
66#define BT_ISO_MAX_GROUP_ISO_COUNT 0x1F
68#define BT_ISO_MAX_SDU 0x0FFF
70#define BT_ISO_SYNC_TIMEOUT_MIN 0x000A
72#define BT_ISO_SYNC_TIMEOUT_MAX 0x4000
74#define BT_ISO_SYNC_MSE_ANY 0x00
76#define BT_ISO_SYNC_MSE_MIN 0x01
78#define BT_ISO_SYNC_MSE_MAX 0x1F
80#define BT_ISO_CONNECTED_RTN_MAX 0xFF
82#define BT_ISO_BROADCAST_RTN_MAX 0x1E
84#define BT_ISO_BROADCAST_CODE_SIZE 16
86#define BT_ISO_BIS_INDEX_MIN 0x01
88#define BT_ISO_BIS_INDEX_MAX 0x1F
89
103};
104
105
112
116 struct bt_conn *iso;
125};
126
143};
144
163};
164
181};
182
184enum {
187
193
196
204
212
215
218};
219
220
222struct bt_iso_cig;
223
227
234
240
246
255
261
268};
269
271 /* The ISO channel to connect */
273
274 /* The ACL connection */
275 struct bt_conn *acl;
276};
277
279struct bt_iso_big;
280
284
291
297
303
309
316
319
326};
327
331
338
346
357
363
366
373};
374
378
381
384
387
390
393
396
399
402
405
408
411
414
417};
418
432 void (*connected)(struct bt_iso_chan *chan);
433
443 void (*disconnected)(struct bt_iso_chan *chan, uint8_t reason);
444
454 struct net_buf *(*alloc_buf)(struct bt_iso_chan *chan);
455
465 void (*recv)(struct bt_iso_chan *chan, const struct bt_iso_recv_info *info,
466 struct net_buf *buf);
467
475 void (*sent)(struct bt_iso_chan *chan);
476};
477
480 struct bt_conn *acl;
481
487
493};
494
499
510 int (*accept)(const struct bt_iso_accept_info *info,
511 struct bt_iso_chan **chan);
512};
513
525
540int bt_iso_cig_create(const struct bt_iso_cig_param *param,
541 struct bt_iso_cig **out_cig);
542
562int bt_iso_cig_reconfigure(struct bt_iso_cig *cig,
563 const struct bt_iso_cig_param *param);
564
573int bt_iso_cig_terminate(struct bt_iso_cig *cig);
574
592int bt_iso_chan_connect(const struct bt_iso_connect_param *param, size_t count);
593
606
622int bt_iso_chan_send(struct bt_iso_chan *chan, struct net_buf *buf);
623
627
630
633
636
639};
640
644
647
650
653};
654
658
661
664
667
670
673
676};
677
681
684
687
690
693};
694
699
702
705
713
721
723 union {
724#if defined(CONFIG_BT_ISO_UNICAST)
726 struct bt_iso_unicast_info unicast;
727#endif /* CONFIG_BT_ISO_UNICAST */
728#if defined(CONFIG_BT_ISO_BROADCASTER)
730 struct bt_iso_broadcaster_info broadcaster;
731#endif /* CONFIG_BT_ISO_BROADCASTER */
732#if defined(CONFIG_BT_ISO_SYNC_RECEIVER)
734 struct bt_iso_sync_receiver_info sync_receiver;
735#endif /* CONFIG_BT_ISO_SYNC_RECEIVER */
736 };
737};
738
746int bt_iso_chan_get_info(const struct bt_iso_chan *chan,
747 struct bt_iso_info *info);
748
757
768int bt_iso_big_create(struct bt_le_ext_adv *padv, struct bt_iso_big_create_param *param,
769 struct bt_iso_big **out_big);
770
777int bt_iso_big_terminate(struct bt_iso_big *big);
778
787int bt_iso_big_sync(struct bt_le_per_adv_sync *sync, struct bt_iso_big_sync_param *param,
788 struct bt_iso_big **out_big);
789
790#ifdef __cplusplus
791}
792#endif
793
798#endif /* ZEPHYR_INCLUDE_BLUETOOTH_ISO_H_ */
Bluetooth data buffer API.
ZTEST_BMEM int count
Definition: main.c:33
Bluetooth connection handling.
bt_security_t
Definition: conn.h:680
#define BT_ISO_BROADCAST_CODE_SIZE
Definition: iso.h:84
enum bt_iso_chan_type bt_iso_chan_get_type(const struct bt_iso_chan *chan)
Get the type of an ISO channel.
int bt_iso_chan_get_info(const struct bt_iso_chan *chan, struct bt_iso_info *info)
Get ISO channel info.
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.
int bt_iso_chan_disconnect(struct bt_iso_chan *chan)
Disconnect ISO channel.
int bt_iso_chan_connect(const struct bt_iso_connect_param *param, size_t count)
Connect ISO channels on ACL connections.
int bt_iso_cig_reconfigure(struct bt_iso_cig *cig, const struct bt_iso_cig_param *param)
Reconfigure a CIG as a central.
int bt_iso_big_terminate(struct bt_iso_big *big)
Terminates a BIG as a broadcaster or receiver.
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.
int bt_iso_cig_terminate(struct bt_iso_cig *cig)
Terminates a CIG as a central.
int bt_iso_chan_send(struct bt_iso_chan *chan, struct net_buf *buf)
Send data to ISO channel.
int bt_iso_cig_create(const struct bt_iso_cig_param *param, struct bt_iso_cig **out_cig)
Creates a CIG as a central.
bt_iso_state
Life-span states of ISO channel. Used only by internal APIs dealing with setting channel to proper st...
Definition: iso.h:94
bt_iso_chan_type
Definition: iso.h:106
int bt_iso_server_register(struct bt_iso_server *server)
Register ISO server.
@ BT_ISO_FLAGS_VALID
Definition: iso.h:186
@ BT_ISO_FLAGS_LOST
Definition: iso.h:195
@ BT_ISO_FLAGS_ERROR
The ISO packet may possibly contain errors.
Definition: iso.h:192
@ BT_ISO_FLAGS_TS
Definition: iso.h:202
@ BT_ISO_STATE_CONNECTING
Definition: iso.h:98
@ BT_ISO_STATE_CONNECTED
Definition: iso.h:100
@ BT_ISO_STATE_DISCONNECTING
Definition: iso.h:102
@ BT_ISO_STATE_DISCONNECTED
Definition: iso.h:96
@ BT_ISO_CHAN_TYPE_NONE
Definition: iso.h:107
@ BT_ISO_CHAN_TYPE_BROADCASTER
Definition: iso.h:109
@ BT_ISO_CHAN_TYPE_SYNC_RECEIVER
Definition: iso.h:110
@ BT_ISO_CHAN_TYPE_CONNECTED
Definition: iso.h:108
#define BIT(n)
Unsigned integer with bit position n set (signed in assembly language).
Definition: util_macro.h:44
struct _snode sys_snode_t
Definition: slist.h:33
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
Definition: addr.h:48
Definition: iso.h:478
struct bt_conn * acl
Definition: iso.h:480
uint8_t cis_id
The ID of the connected isochronous stream (CIS) on the central.
Definition: iso.h:492
uint8_t cig_id
The ID of the connected isochronous group (CIG) on the central.
Definition: iso.h:486
Definition: iso.h:281
bool encryption
Definition: iso.h:318
struct bt_iso_chan ** bis_channels
Definition: iso.h:283
uint32_t interval
Channel interval in us.
Definition: iso.h:296
uint8_t num_bis
Number channels in bis_channels.
Definition: iso.h:290
uint8_t framing
Channel framing mode.
Definition: iso.h:315
uint8_t bcode[16]
Broadcast code.
Definition: iso.h:325
uint16_t latency
Channel Latency in ms.
Definition: iso.h:302
uint8_t packing
Channel packing mode.
Definition: iso.h:308
Definition: iso.h:328
uint32_t bis_bitfield
Definition: iso.h:345
uint32_t mse
Maximum subevents.
Definition: iso.h:356
uint16_t sync_timeout
Synchronization timeout for the BIG (N * 10 MS)
Definition: iso.h:362
bool encryption
Definition: iso.h:365
uint8_t num_bis
Number channels in bis_channels.
Definition: iso.h:337
uint8_t bcode[16]
Broadcast code.
Definition: iso.h:372
struct bt_iso_chan ** bis_channels
Definition: iso.h:330
Definition: iso.h:375
uint8_t framing
Definition: iso.h:413
uint8_t num_bis
Definition: iso.h:383
uint8_t sub_evt_count
Definition: iso.h:386
uint8_t phy
Definition: iso.h:410
uint32_t sdu_interval
Definition: iso.h:404
uint8_t offset
Definition: iso.h:395
uint8_t sid
Definition: iso.h:380
bool encryption
Definition: iso.h:416
uint8_t rep_count
Definition: iso.h:398
uint16_t max_sdu
Definition: iso.h:407
const bt_addr_le_t * addr
Definition: iso.h:377
uint8_t burst_number
Definition: iso.h:392
uint16_t max_pdu
Definition: iso.h:401
uint16_t iso_interval
Definition: iso.h:389
Definition: iso.h:655
uint8_t phy
Definition: iso.h:669
uint32_t sync_delay
Definition: iso.h:657
uint32_t latency
Definition: iso.h:660
uint32_t pto
Definition: iso.h:663
uint16_t max_pdu
Definition: iso.h:666
uint8_t bn
Definition: iso.h:672
uint8_t irc
Definition: iso.h:675
ISO Channel IO QoS structure.
Definition: iso.h:128
uint8_t phy
Definition: iso.h:134
uint8_t rtn
Definition: iso.h:136
struct bt_iso_chan_path * path
Channel data path reference.
Definition: iso.h:142
uint16_t sdu
Definition: iso.h:130
ISO Channel operations structure.
Definition: iso.h:420
void(* sent)(struct bt_iso_chan *chan)
Channel sent callback.
Definition: iso.h:475
void(* disconnected)(struct bt_iso_chan *chan, uint8_t reason)
Channel disconnected callback.
Definition: iso.h:443
void(* connected)(struct bt_iso_chan *chan)
Channel connected callback.
Definition: iso.h:432
void(* recv)(struct bt_iso_chan *chan, const struct bt_iso_recv_info *info, struct net_buf *buf)
Channel recv callback.
Definition: iso.h:465
ISO Channel Data Path structure.
Definition: iso.h:166
uint8_t cc[0]
Definition: iso.h:180
uint8_t cc_len
Definition: iso.h:178
uint8_t format
Definition: iso.h:170
uint8_t pid
Definition: iso.h:168
uint16_t cid
Definition: iso.h:172
uint32_t delay
Definition: iso.h:176
uint16_t vid
Definition: iso.h:174
ISO Channel QoS structure.
Definition: iso.h:146
struct bt_iso_chan_io_qos * tx
Channel Transmission QoS.
Definition: iso.h:162
struct bt_iso_chan_io_qos * rx
Channel Receiving QoS.
Definition: iso.h:154
ISO Channel structure.
Definition: iso.h:114
struct bt_iso_chan_ops * ops
Definition: iso.h:118
enum bt_iso_state state
Definition: iso.h:121
bt_security_t required_sec_level
Definition: iso.h:122
struct bt_conn * iso
Definition: iso.h:116
sys_snode_t node
Definition: iso.h:124
struct bt_iso_chan_qos * qos
Definition: iso.h:120
Definition: iso.h:224
uint16_t latency
Channel Latency in ms.
Definition: iso.h:245
uint8_t packing
Channel packing mode.
Definition: iso.h:260
uint8_t framing
Channel framing mode.
Definition: iso.h:267
uint8_t num_cis
Number channels in cis_channels.
Definition: iso.h:233
uint8_t sca
Channel peripherals sleep clock accuracy Only for CIS.
Definition: iso.h:254
struct bt_iso_chan ** cis_channels
Array of pointers to CIS channels.
Definition: iso.h:226
uint32_t interval
Channel interval in us.
Definition: iso.h:239
Definition: iso.h:270
struct bt_conn * acl
Definition: iso.h:275
struct bt_iso_chan * iso_chan
Definition: iso.h:272
Definition: iso.h:696
uint8_t max_subevent
Definition: iso.h:704
bool can_send
True if the channel is able to send data.
Definition: iso.h:712
uint16_t iso_interval
Definition: iso.h:701
bool can_recv
True if the channel is able to recv data.
Definition: iso.h:720
enum bt_iso_chan_type type
Definition: iso.h:698
ISO Meta Data structure for received ISO packets.
Definition: iso.h:206
uint8_t flags
Definition: iso.h:217
uint32_t ts
Definition: iso.h:211
uint16_t sn
Definition: iso.h:214
ISO Server structure.
Definition: iso.h:496
bt_security_t sec_level
Definition: iso.h:498
int(* accept)(const struct bt_iso_accept_info *info, struct bt_iso_chan **chan)
Server accept callback.
Definition: iso.h:510
Definition: iso.h:678
uint32_t latency
Definition: iso.h:680
uint16_t max_pdu
Definition: iso.h:686
uint8_t irc
Definition: iso.h:692
uint32_t pto
Definition: iso.h:683
uint8_t bn
Definition: iso.h:689
Definition: iso.h:641
uint32_t cig_sync_delay
Definition: iso.h:643
struct bt_iso_unicast_tx_info peripheral
Definition: iso.h:652
struct bt_iso_unicast_tx_info central
TX information for the central to peripheral data path.
Definition: iso.h:649
uint32_t cis_sync_delay
Definition: iso.h:646
Definition: iso.h:624
uint32_t latency
Definition: iso.h:626
uint8_t phy
Definition: iso.h:635
uint32_t flush_timeout
Definition: iso.h:629
uint8_t bn
Definition: iso.h:638
uint16_t max_pdu
Definition: iso.h:632
Network buffer representation.
Definition: buf.h:915