Zephyr Project API  3.2.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
43#define BT_ISO_SDU_BUF_SIZE(mtu) BT_BUF_ISO_SIZE(mtu)
44
46#define BT_ISO_DATA_PATH_HCI 0x00
47
49#define BT_ISO_SDU_INTERVAL_MIN 0x0000FFU
51#define BT_ISO_SDU_INTERVAL_MAX 0x0FFFFFU
53#define BT_ISO_LATENCY_MIN 0x0005
55#define BT_ISO_LATENCY_MAX 0x0FA0
57#define BT_ISO_PACKING_SEQUENTIAL 0x00
59#define BT_ISO_PACKING_INTERLEAVED 0x01
61#define BT_ISO_FRAMING_UNFRAMED 0x00
63#define BT_ISO_FRAMING_FRAMED 0x01
65#define BT_ISO_MAX_GROUP_ISO_COUNT 0x1F
67#define BT_ISO_MAX_SDU 0x0FFF
69#define BT_ISO_SYNC_TIMEOUT_MIN 0x000A
71#define BT_ISO_SYNC_TIMEOUT_MAX 0x4000
73#define BT_ISO_SYNC_MSE_ANY 0x00
75#define BT_ISO_SYNC_MSE_MIN 0x01
77#define BT_ISO_SYNC_MSE_MAX 0x1F
79#define BT_ISO_CONNECTED_RTN_MAX 0xFF
81#define BT_ISO_BROADCAST_RTN_MAX 0x1E
83#define BT_ISO_BROADCAST_CODE_SIZE 16
85#define BT_ISO_BIS_INDEX_MIN 0x01
87#define BT_ISO_BIS_INDEX_MAX 0x1F
93#define BT_ISO_TIMESTAMP_NONE 0U
94
110};
111
112
119
123 struct bt_conn *iso;
129#if defined(CONFIG_BT_SMP)
138#endif /* CONFIG_BT_SMP */
141};
142
159};
160
179};
180
197};
198
200enum {
203
209
212
220
228
231
234};
235
240
243
246};
247
248
250struct bt_iso_cig;
251
255
262
268
274
283
289
296};
297
299 /* The ISO channel to connect */
301
302 /* The ACL connection */
303 struct bt_conn *acl;
304};
305
307struct bt_iso_big;
308
312
319
325
331
337
344
347
354};
355
359
366
374
385
391
394
401};
402
406
409
412
415
418
421
424
427
430
433
436
439
442
445};
446
460 void (*connected)(struct bt_iso_chan *chan);
461
471 void (*disconnected)(struct bt_iso_chan *chan, uint8_t reason);
472
482 struct net_buf *(*alloc_buf)(struct bt_iso_chan *chan);
483
493 void (*recv)(struct bt_iso_chan *chan, const struct bt_iso_recv_info *info,
494 struct net_buf *buf);
495
503 void (*sent)(struct bt_iso_chan *chan);
504};
505
508 struct bt_conn *acl;
509
515
521};
522
525#if defined(CONFIG_BT_SMP)
528#endif /* CONFIG_BT_SMP */
529
540 int (*accept)(const struct bt_iso_accept_info *info,
541 struct bt_iso_chan **chan);
542};
543
555
570int bt_iso_cig_create(const struct bt_iso_cig_param *param,
571 struct bt_iso_cig **out_cig);
572
592int bt_iso_cig_reconfigure(struct bt_iso_cig *cig,
593 const struct bt_iso_cig_param *param);
594
603int bt_iso_cig_terminate(struct bt_iso_cig *cig);
604
641int bt_iso_chan_connect(const struct bt_iso_connect_param *param, size_t count);
642
655
679int bt_iso_chan_send(struct bt_iso_chan *chan, struct net_buf *buf,
680 uint32_t seq_num, uint32_t ts);
681
685
688
691
694
697};
698
702
705
708
711};
712
716
719
722
725
728
731
734};
735
739
742
745
748
751};
752
757
760
763
771
779
781 union {
782#if defined(CONFIG_BT_ISO_UNICAST)
784 struct bt_iso_unicast_info unicast;
785#endif /* CONFIG_BT_ISO_UNICAST */
786#if defined(CONFIG_BT_ISO_BROADCASTER)
788 struct bt_iso_broadcaster_info broadcaster;
789#endif /* CONFIG_BT_ISO_BROADCASTER */
790#if defined(CONFIG_BT_ISO_SYNC_RECEIVER)
792 struct bt_iso_sync_receiver_info sync_receiver;
793#endif /* CONFIG_BT_ISO_SYNC_RECEIVER */
794 };
795};
796
804int bt_iso_chan_get_info(const struct bt_iso_chan *chan,
805 struct bt_iso_info *info);
806
815
830int bt_iso_chan_get_tx_sync(const struct bt_iso_chan *chan, struct bt_iso_tx_info *info);
831
842int bt_iso_big_create(struct bt_le_ext_adv *padv, struct bt_iso_big_create_param *param,
843 struct bt_iso_big **out_big);
844
851int bt_iso_big_terminate(struct bt_iso_big *big);
852
861int bt_iso_big_sync(struct bt_le_per_adv_sync *sync, struct bt_iso_big_sync_param *param,
862 struct bt_iso_big **out_big);
863
864#ifdef __cplusplus
865}
866#endif
867
872#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:327
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.
#define BT_ISO_BROADCAST_CODE_SIZE
Definition: iso.h:83
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_chan_get_tx_sync(const struct bt_iso_chan *chan, struct bt_iso_tx_info *info)
Get ISO transmission timing info.
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_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:99
bt_iso_chan_type
Definition: iso.h:113
int bt_iso_server_register(struct bt_iso_server *server)
Register ISO server.
@ BT_ISO_FLAGS_VALID
Definition: iso.h:202
@ BT_ISO_FLAGS_LOST
Definition: iso.h:211
@ BT_ISO_FLAGS_ERROR
The ISO packet may possibly contain errors.
Definition: iso.h:208
@ BT_ISO_FLAGS_TS
Definition: iso.h:218
@ BT_ISO_STATE_ENCRYPT_PENDING
Definition: iso.h:103
@ BT_ISO_STATE_CONNECTING
Definition: iso.h:105
@ BT_ISO_STATE_CONNECTED
Definition: iso.h:107
@ BT_ISO_STATE_DISCONNECTING
Definition: iso.h:109
@ BT_ISO_STATE_DISCONNECTED
Definition: iso.h:101
@ BT_ISO_CHAN_TYPE_NONE
Definition: iso.h:114
@ BT_ISO_CHAN_TYPE_BROADCASTER
Definition: iso.h:116
@ BT_ISO_CHAN_TYPE_SYNC_RECEIVER
Definition: iso.h:117
@ BT_ISO_CHAN_TYPE_CONNECTED
Definition: iso.h:115
#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:506
struct bt_conn * acl
Definition: iso.h:508
uint8_t cis_id
The ID of the connected isochronous stream (CIS) on the central.
Definition: iso.h:520
uint8_t cig_id
The ID of the connected isochronous group (CIG) on the central.
Definition: iso.h:514
Definition: iso.h:309
bool encryption
Definition: iso.h:346
struct bt_iso_chan ** bis_channels
Definition: iso.h:311
uint32_t interval
Channel interval in us.
Definition: iso.h:324
uint8_t num_bis
Number channels in bis_channels.
Definition: iso.h:318
uint8_t framing
Channel framing mode.
Definition: iso.h:343
uint8_t bcode[16]
Broadcast code.
Definition: iso.h:353
uint16_t latency
Channel Latency in ms.
Definition: iso.h:330
uint8_t packing
Channel packing mode.
Definition: iso.h:336
Definition: iso.h:356
uint32_t bis_bitfield
Definition: iso.h:373
uint32_t mse
Maximum subevents.
Definition: iso.h:384
uint16_t sync_timeout
Synchronization timeout for the BIG (N * 10 MS)
Definition: iso.h:390
bool encryption
Definition: iso.h:393
uint8_t num_bis
Number channels in bis_channels.
Definition: iso.h:365
uint8_t bcode[16]
Broadcast code.
Definition: iso.h:400
struct bt_iso_chan ** bis_channels
Definition: iso.h:358
Definition: iso.h:403
uint8_t framing
Definition: iso.h:441
uint8_t num_bis
Definition: iso.h:411
uint8_t sub_evt_count
Definition: iso.h:414
uint8_t phy
Definition: iso.h:438
uint32_t sdu_interval
Definition: iso.h:432
uint8_t offset
Definition: iso.h:423
uint8_t sid
Definition: iso.h:408
bool encryption
Definition: iso.h:444
uint8_t rep_count
Definition: iso.h:426
uint16_t max_sdu
Definition: iso.h:435
const bt_addr_le_t * addr
Definition: iso.h:405
uint8_t burst_number
Definition: iso.h:420
uint16_t max_pdu
Definition: iso.h:429
uint16_t iso_interval
Definition: iso.h:417
Definition: iso.h:713
uint8_t phy
Definition: iso.h:727
uint32_t sync_delay
Definition: iso.h:715
uint32_t latency
Definition: iso.h:718
uint32_t pto
Definition: iso.h:721
uint16_t max_pdu
Definition: iso.h:724
uint8_t bn
Definition: iso.h:730
uint8_t irc
Definition: iso.h:733
ISO Channel IO QoS structure.
Definition: iso.h:144
uint8_t phy
Definition: iso.h:150
uint8_t rtn
Definition: iso.h:152
struct bt_iso_chan_path * path
Channel data path reference.
Definition: iso.h:158
uint16_t sdu
Definition: iso.h:146
ISO Channel operations structure.
Definition: iso.h:448
void(* sent)(struct bt_iso_chan *chan)
Channel sent callback.
Definition: iso.h:503
void(* disconnected)(struct bt_iso_chan *chan, uint8_t reason)
Channel disconnected callback.
Definition: iso.h:471
void(* connected)(struct bt_iso_chan *chan)
Channel connected callback.
Definition: iso.h:460
void(* recv)(struct bt_iso_chan *chan, const struct bt_iso_recv_info *info, struct net_buf *buf)
Channel recv callback.
Definition: iso.h:493
ISO Channel Data Path structure.
Definition: iso.h:182
uint8_t cc_len
Definition: iso.h:194
uint8_t format
Definition: iso.h:186
uint8_t pid
Definition: iso.h:184
uint16_t cid
Definition: iso.h:188
uint8_t * cc
Definition: iso.h:196
uint32_t delay
Definition: iso.h:192
uint16_t vid
Definition: iso.h:190
ISO Channel QoS structure.
Definition: iso.h:162
struct bt_iso_chan_io_qos * tx
Channel Transmission QoS.
Definition: iso.h:178
struct bt_iso_chan_io_qos * rx
Channel Receiving QoS.
Definition: iso.h:170
ISO Channel structure.
Definition: iso.h:121
struct bt_iso_chan_ops * ops
Definition: iso.h:125
enum bt_iso_state state
Definition: iso.h:128
bt_security_t required_sec_level
The required security level of the channel.
Definition: iso.h:137
struct bt_conn * iso
Definition: iso.h:123
sys_snode_t node
Definition: iso.h:140
struct bt_iso_chan_qos * qos
Definition: iso.h:127
Definition: iso.h:252
uint16_t latency
Channel Latency in ms.
Definition: iso.h:273
uint8_t packing
Channel packing mode.
Definition: iso.h:288
uint8_t framing
Channel framing mode.
Definition: iso.h:295
uint8_t num_cis
Number channels in cis_channels.
Definition: iso.h:261
uint8_t sca
Channel peripherals sleep clock accuracy Only for CIS.
Definition: iso.h:282
struct bt_iso_chan ** cis_channels
Array of pointers to CIS channels.
Definition: iso.h:254
uint32_t interval
Channel interval in us.
Definition: iso.h:267
Definition: iso.h:298
struct bt_conn * acl
Definition: iso.h:303
struct bt_iso_chan * iso_chan
Definition: iso.h:300
Definition: iso.h:754
uint8_t max_subevent
Definition: iso.h:762
bool can_send
True if the channel is able to send data.
Definition: iso.h:770
uint16_t iso_interval
Definition: iso.h:759
bool can_recv
True if the channel is able to recv data.
Definition: iso.h:778
enum bt_iso_chan_type type
Definition: iso.h:756
ISO Meta Data structure for received ISO packets.
Definition: iso.h:222
uint8_t flags
Definition: iso.h:233
uint32_t ts
Definition: iso.h:227
uint16_t seq_num
Definition: iso.h:230
ISO Server structure.
Definition: iso.h:524
bt_security_t sec_level
Definition: iso.h:527
int(* accept)(const struct bt_iso_accept_info *info, struct bt_iso_chan **chan)
Server accept callback.
Definition: iso.h:540
Definition: iso.h:736
uint32_t latency
Definition: iso.h:738
uint16_t max_pdu
Definition: iso.h:744
uint8_t irc
Definition: iso.h:750
uint32_t pto
Definition: iso.h:741
uint8_t bn
Definition: iso.h:747
ISO Meta Data structure for transmitted ISO packets.
Definition: iso.h:237
uint32_t offset
Definition: iso.h:242
uint16_t seq_num
Definition: iso.h:245
uint32_t ts
Definition: iso.h:239
Definition: iso.h:699
uint32_t cig_sync_delay
Definition: iso.h:701
struct bt_iso_unicast_tx_info peripheral
Definition: iso.h:710
struct bt_iso_unicast_tx_info central
TX information for the central to peripheral data path.
Definition: iso.h:707
uint32_t cis_sync_delay
Definition: iso.h:704
Definition: iso.h:682
uint32_t latency
Definition: iso.h:684
uint8_t phy
Definition: iso.h:693
uint32_t flush_timeout
Definition: iso.h:687
uint8_t bn
Definition: iso.h:696
uint16_t max_pdu
Definition: iso.h:690
Network buffer representation.
Definition: buf.h:914