blob: ec653065d43e5ce760043f85f6d220f01fd2f346 [file] [log] [blame]
/* @file
* @brief Internal APIs for BAP ISO handling
*
* Copyright (c) 2022 Codecoup
* Copyright (c) 2023 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/bluetooth/iso.h>
#include <zephyr/bluetooth/audio/audio.h>
#include <zephyr/bluetooth/audio/bap.h>
struct bt_bap_iso_dir {
struct bt_bap_stream *stream;
struct bt_bap_ep *ep;
struct bt_iso_chan_path path;
struct bt_iso_chan_io_qos qos;
uint8_t cc[CONFIG_BT_CODEC_MAX_DATA_COUNT * CONFIG_BT_CODEC_MAX_DATA_LEN];
};
struct bt_bap_iso {
struct bt_iso_chan chan;
struct bt_iso_chan_qos qos;
struct bt_bap_iso_dir rx;
struct bt_bap_iso_dir tx;
/* Must be at the end so that everything else in the structure can be
* memset to zero without affecting the ref.
*/
atomic_t ref;
};
typedef bool (*bt_bap_iso_func_t)(struct bt_bap_iso *iso, void *user_data);
struct bt_bap_iso *bt_bap_iso_new(void);
struct bt_bap_iso *bt_bap_iso_ref(struct bt_bap_iso *iso);
void bt_bap_iso_unref(struct bt_bap_iso *iso);
void bt_bap_iso_foreach(bt_bap_iso_func_t func, void *user_data);
struct bt_bap_iso *bt_bap_iso_find(bt_bap_iso_func_t func, void *user_data);
void bt_bap_iso_init(struct bt_bap_iso *iso, struct bt_iso_chan_ops *ops);
void bt_bap_iso_bind_ep(struct bt_bap_iso *iso, struct bt_bap_ep *ep);
void bt_bap_iso_unbind_ep(struct bt_bap_iso *iso, struct bt_bap_ep *ep);
struct bt_bap_ep *bt_bap_iso_get_ep(bool unicast_client, struct bt_bap_iso *iso,
enum bt_audio_dir dir);
struct bt_bap_ep *bt_bap_iso_get_paired_ep(const struct bt_bap_ep *ep);
/* Unicast client-only functions*/
void bt_bap_iso_bind_stream(struct bt_bap_iso *bap_iso, struct bt_bap_stream *stream);
void bt_bap_iso_unbind_stream(struct bt_bap_iso *bap_iso, struct bt_bap_stream *stream);
struct bt_bap_stream *bt_bap_iso_get_stream(struct bt_bap_iso *iso, enum bt_audio_dir dir);