1 /** 2 * @file 3 * @brief Bluetooth Published Audio Capabilities Service (PACS) APIs 4 */ 5 6 /* Copyright (c) 2021 Intel Corporation 7 * Copyright (c) 2021-2024 Nordic Semiconductor ASA 8 * 9 * SPDX-License-Identifier: Apache-2.0 10 */ 11 12 #ifndef ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_PACS_H_ 13 #define ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_PACS_H_ 14 15 /** 16 * @brief Published Audio Capabilities Service (PACS) 17 * 18 * @defgroup bt_gatt_csip Coordinated Set Identification Profile (CSIP) 19 * 20 * @since 3.0 21 * @version 0.8.0 22 * 23 * @ingroup bluetooth 24 * @{ 25 * 26 * The Published Audio Capabilities Service (PACS) is used to expose capabilities to remote devices. 27 */ 28 29 #include <stdbool.h> 30 31 #include <zephyr/bluetooth/audio/audio.h> 32 #include <zephyr/bluetooth/conn.h> 33 #include <zephyr/sys/slist.h> 34 35 #ifdef __cplusplus 36 extern "C" { 37 #endif 38 39 /** @brief Published Audio Capability structure. */ 40 struct bt_pacs_cap { 41 /** Codec capability reference */ 42 const struct bt_audio_codec_cap *codec_cap; 43 44 /** @internal Internally used list node */ 45 sys_snode_t _node; 46 }; 47 48 /** 49 * @typedef bt_pacs_cap_foreach_func_t 50 * @brief Published Audio Capability iterator callback. 51 * 52 * @param cap Capability found. 53 * @param user_data Data given. 54 * 55 * @return true to continue to the next capability 56 * @return false to stop the iteration 57 */ 58 typedef bool (*bt_pacs_cap_foreach_func_t)(const struct bt_pacs_cap *cap, 59 void *user_data); 60 61 /** 62 * @brief Published Audio Capability iterator. 63 * 64 * Iterate capabilities with endpoint direction specified. 65 * 66 * @param dir Direction of the endpoint to look capability for. 67 * @param func Callback function. 68 * @param user_data Data to pass to the callback. 69 */ 70 void bt_pacs_cap_foreach(enum bt_audio_dir dir, 71 bt_pacs_cap_foreach_func_t func, 72 void *user_data); 73 74 /** 75 * @brief Register Published Audio Capability. 76 * 77 * Register Audio Local Capability. 78 * 79 * @param dir Direction of the endpoint to register capability for. 80 * @param cap Capability structure. 81 * 82 * @return 0 in case of success or negative value in case of error. 83 */ 84 int bt_pacs_cap_register(enum bt_audio_dir dir, struct bt_pacs_cap *cap); 85 86 /** 87 * @brief Unregister Published Audio Capability. 88 * 89 * Unregister Audio Local Capability. 90 * 91 * @param dir Direction of the endpoint to unregister capability for. 92 * @param cap Capability structure. 93 * 94 * @return 0 in case of success or negative value in case of error. 95 */ 96 int bt_pacs_cap_unregister(enum bt_audio_dir dir, struct bt_pacs_cap *cap); 97 98 /** 99 * @brief Set the location for an endpoint type 100 * 101 * @param dir Direction of the endpoints to change location for. 102 * @param location The location to be set. 103 * 104 * @return 0 in case of success or negative value in case of error. 105 */ 106 int bt_pacs_set_location(enum bt_audio_dir dir, 107 enum bt_audio_location location); 108 109 /** 110 * @brief Set the available contexts for an endpoint type 111 * 112 * @param dir Direction of the endpoints to change available contexts for. 113 * @param contexts The contexts to be set. 114 * 115 * @return 0 in case of success or negative value in case of error. 116 */ 117 int bt_pacs_set_available_contexts(enum bt_audio_dir dir, 118 enum bt_audio_context contexts); 119 120 /** 121 * @brief Get the available contexts for an endpoint type 122 * 123 * @param dir Direction of the endpoints to get contexts for. 124 * 125 * @return Bitmask of available contexts. 126 */ 127 enum bt_audio_context bt_pacs_get_available_contexts(enum bt_audio_dir dir); 128 129 /** 130 * @brief Set the available contexts for a given connection 131 * 132 * This function sets the available contexts value for a given @p conn connection object. 133 * If the @p contexts parameter is NULL the available contexts value is reset to default. 134 * The default value of the available contexts is set using @ref bt_pacs_set_available_contexts 135 * function. 136 * The Available Context Value is reset to default on ACL disconnection. 137 * 138 * @param conn Connection object. 139 * @param dir Direction of the endpoints to change available contexts for. 140 * @param contexts The contexts to be set or NULL to reset to default. 141 * 142 * @return 0 in case of success or negative value in case of error. 143 */ 144 int bt_pacs_conn_set_available_contexts_for_conn(struct bt_conn *conn, enum bt_audio_dir dir, 145 enum bt_audio_context *contexts); 146 147 /** 148 * @brief Get the available contexts for a given connection 149 * 150 * This server function returns the available contexts value for a given @p conn connection object. 151 * The value returned is the one set with @ref bt_pacs_conn_set_available_contexts_for_conn function 152 * or the default value set with @ref bt_pacs_set_available_contexts function. 153 * 154 * @param conn Connection object. 155 * @param dir Direction of the endpoints to get contexts for. 156 * 157 * @return Bitmask of available contexts. 158 * @retval BT_AUDIO_CONTEXT_TYPE_PROHIBITED if @p conn or @p dir are invalid 159 */ 160 enum bt_audio_context bt_pacs_get_available_contexts_for_conn(struct bt_conn *conn, 161 enum bt_audio_dir dir); 162 163 /** 164 * @brief Set the supported contexts for an endpoint type 165 * 166 * @param dir Direction of the endpoints to change available contexts for. 167 * @param contexts The contexts to be set. 168 * 169 * @return 0 in case of success or negative value in case of error. 170 */ 171 int bt_pacs_set_supported_contexts(enum bt_audio_dir dir, 172 enum bt_audio_context contexts); 173 174 #ifdef __cplusplus 175 } 176 #endif 177 178 /** @} */ 179 180 #endif /* ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_PACS_H_ */ 181