LCOV - code coverage report
Current view: top level - zephyr/bluetooth/audio - cap.h Hit Total Coverage
Test: new.info Lines: 159 161 98.8 %
Date: 2024-12-21 18:13:37

          Line data    Source code
       1           1 : /**
       2             :  * @file
       3             :  * @brief Bluetooth Common Audio Profile (CAP) APIs.
       4             :  */
       5             : 
       6             : /*
       7             :  * Copyright (c) 2022-2024 Nordic Semiconductor ASA
       8             :  *
       9             :  * SPDX-License-Identifier: Apache-2.0
      10             :  */
      11             : 
      12             : #ifndef ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_CAP_H_
      13             : #define ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_CAP_H_
      14             : 
      15             : /**
      16             :  * @brief Common Audio Profile (CAP)
      17             :  *
      18             :  * @defgroup bt_cap Common Audio Profile (CAP)
      19             :  *
      20             :  * @since 3.2
      21             :  * @version 0.8.0
      22             :  *
      23             :  * @ingroup bluetooth
      24             :  * @{
      25             :  *
      26             :  * Common Audio Profile (CAP) provides procedures to start, update, and stop unicast and broadcast
      27             :  * Audio Streams on individual or groups of devices using procedures in the Basic Audio Profile
      28             :  * (BAP). This profile also provides procedures to control volume and device input on groups of
      29             :  * devices using procedures in the Volume Control Profile (VCP) and the Microphone Control Profile
      30             :  * (MICP). This profile specification also refers to the Common Audio Service (CAS).
      31             :  */
      32             : 
      33             : #include <stdbool.h>
      34             : #include <stddef.h>
      35             : #include <stdint.h>
      36             : 
      37             : #include <zephyr/bluetooth/audio/audio.h>
      38             : #include <zephyr/bluetooth/audio/bap.h>
      39             : #include <zephyr/bluetooth/audio/csip.h>
      40             : #include <zephyr/bluetooth/addr.h>
      41             : #include <zephyr/bluetooth/bluetooth.h>
      42             : #include <zephyr/bluetooth/conn.h>
      43             : #include <zephyr/bluetooth/iso.h>
      44             : #include <zephyr/net_buf.h>
      45             : 
      46             : #ifdef __cplusplus
      47             : extern "C" {
      48             : #endif
      49             : 
      50             : /** @brief Abstract Audio Broadcast Source structure. */
      51             : struct bt_cap_broadcast_source;
      52             : 
      53             : /**
      54             :  * @brief Register the Common Audio Service.
      55             :  *
      56             :  * This will register and enable the service and make it discoverable by
      57             :  * clients. This will also register a Coordinated Set Identification
      58             :  * Service instance.
      59             :  *
      60             :  * This shall only be done as a server, and requires
      61             :  * @kconfig{BT_CAP_ACCEPTOR_SET_MEMBER}. If @kconfig{BT_CAP_ACCEPTOR_SET_MEMBER}
      62             :  * is not enabled, the Common Audio Service will by statically registered.
      63             :  *
      64             :  * @param[in]  param     Coordinated Set Identification Service register
      65             :  *                       parameters.
      66             :  * @param[out] svc_inst  Pointer to the registered Coordinated Set
      67             :  *                       Identification Service.
      68             :  *
      69             :  * @return 0 if success, errno on failure.
      70             :  */
      71           1 : int bt_cap_acceptor_register(const struct bt_csip_set_member_register_param *param,
      72             :                              struct bt_csip_set_member_svc_inst **svc_inst);
      73             : 
      74             : /** Callback structure for CAP procedures */
      75           1 : struct bt_cap_initiator_cb {
      76             : #if defined(CONFIG_BT_BAP_UNICAST_CLIENT) || defined(__DOXYGEN__)
      77             :         /**
      78             :          * @brief Callback for bt_cap_initiator_unicast_discover().
      79             :          *
      80             :          * @param conn      The connection pointer supplied to
      81             :          *                  bt_cap_initiator_unicast_discover().
      82             :          * @param err       0 if Common Audio Service was found else -ENODATA.
      83             :          * @param member    Pointer to the set member. NULL if err != 0.
      84             :          * @param csis_inst The Coordinated Set Identification Service if
      85             :          *                  Common Audio Service was found and includes a
      86             :          *                  Coordinated Set Identification Service.
      87             :          *                  NULL on error or if remote device does not include
      88             :          *                  Coordinated Set Identification Service. NULL if err != 0.
      89             :          */
      90           1 :         void (*unicast_discovery_complete)(
      91             :                 struct bt_conn *conn, int err,
      92             :                 const struct bt_csip_set_coordinator_set_member *member,
      93             :                 const struct bt_csip_set_coordinator_csis_inst *csis_inst);
      94             : 
      95             :         /**
      96             :          * @brief Callback for bt_cap_initiator_unicast_audio_start().
      97             :          *
      98             :          * @param err            0 if success, BT_GATT_ERR() with a
      99             :          *                       specific ATT (BT_ATT_ERR_*) error code or -ECANCELED if cancelled
     100             :          *                       by bt_cap_initiator_unicast_audio_cancel().
     101             :          * @param conn           Pointer to the connection where the error
     102             :          *                       occurred. NULL if @p err is 0 or if cancelled by
     103             :          *                       bt_cap_initiator_unicast_audio_cancel()
     104             :          */
     105           1 :         void (*unicast_start_complete)(int err, struct bt_conn *conn);
     106             : 
     107             :         /**
     108             :          * @brief Callback for bt_cap_initiator_unicast_audio_update().
     109             :          *
     110             :          * @param err            0 if success, BT_GATT_ERR() with a
     111             :          *                       specific ATT (BT_ATT_ERR_*) error code or -ECANCELED if cancelled
     112             :          *                       by bt_cap_initiator_unicast_audio_cancel().
     113             :          * @param conn           Pointer to the connection where the error
     114             :          *                       occurred. NULL if @p err is 0 or if cancelled by
     115             :          *                       bt_cap_initiator_unicast_audio_cancel()
     116             :          */
     117           1 :         void (*unicast_update_complete)(int err, struct bt_conn *conn);
     118             : 
     119             :         /**
     120             :          * @brief Callback for bt_cap_initiator_unicast_audio_stop().
     121             :          *
     122             :          * @param err            0 if success, BT_GATT_ERR() with a
     123             :          *                       specific ATT (BT_ATT_ERR_*) error code or -ECANCELED if cancelled
     124             :          *                       by bt_cap_initiator_unicast_audio_cancel().
     125             :          * @param conn           Pointer to the connection where the error
     126             :          *                       occurred. NULL if @p err is 0 or if cancelled by
     127             :          *                       bt_cap_initiator_unicast_audio_cancel()
     128             :          */
     129           1 :         void (*unicast_stop_complete)(int err, struct bt_conn *conn);
     130             : #endif /* CONFIG_BT_BAP_UNICAST_CLIENT */
     131             : #if defined(CONFIG_BT_BAP_BROADCAST_SOURCE)
     132             :         /**
     133             :          * @brief The Broadcast Source has started and all of the streams are ready for audio data
     134             :          *
     135             :          * @param source The started Broadcast Source
     136             :          */
     137             :         void (*broadcast_started)(struct bt_cap_broadcast_source *source);
     138             : 
     139             :         /**
     140             :          * @brief The Broadcast Source has stopped and none of the streams are ready for audio data
     141             :          *
     142             :          * @param source The stopped Broadcast Source
     143             :          * @param reason The reason why the Broadcast Source stopped (see the BT_HCI_ERR_* values)
     144             :          */
     145             :         void (*broadcast_stopped)(struct bt_cap_broadcast_source *source, uint8_t reason);
     146             : #endif /* CONFIG_BT_BAP_BROADCAST_SOURCE */
     147             : };
     148             : 
     149             : /**
     150             :  * @brief Discovers audio support on a remote device.
     151             :  *
     152             :  * This will discover the Common Audio Service (CAS) on the remote device, to
     153             :  * verify if the remote device supports the Common Audio Profile.
     154             :  *
     155             :  * @param conn Connection to a remote server.
     156             :  *
     157             :  * @retval 0 Success
     158             :  * @retval -EINVAL @p conn is NULL
     159             :  * @retval -ENOTCONN @p conn is not connected
     160             :  * @retval -ENOMEM Could not allocated memory for the request
     161             :  */
     162           1 : int bt_cap_initiator_unicast_discover(struct bt_conn *conn);
     163             : 
     164             : /** Type of CAP set */
     165           1 : enum bt_cap_set_type {
     166             :         /** The set is an ad-hoc set */
     167             :         BT_CAP_SET_TYPE_AD_HOC,
     168             :         /** The set is a CSIP Coordinated Set */
     169             :         BT_CAP_SET_TYPE_CSIP,
     170             : };
     171             : 
     172             : /** Represents a Common Audio Set member that are either in a Coordinated or ad-hoc set */
     173           1 : union bt_cap_set_member {
     174             :         /** Connection pointer if the type is BT_CAP_SET_TYPE_AD_HOC. */
     175           1 :         struct bt_conn *member;
     176             : 
     177             :         /** CSIP Coordinated Set struct used if type is BT_CAP_SET_TYPE_CSIP. */
     178           1 :         struct bt_csip_set_coordinator_csis_inst *csip;
     179             : };
     180             : 
     181             : /**
     182             :  * @brief Common Audio Profile stream structure.
     183             :  *
     184             :  * Streams represents a Basic Audio Profile (BAP) stream and operation callbacks.
     185             :  * See @ref bt_bap_stream for additional information.
     186             :  */
     187           1 : struct bt_cap_stream {
     188             :         /** The underlying BAP audio stream */
     189           1 :         struct bt_bap_stream bap_stream;
     190             : 
     191             :         /** Audio stream operations */
     192           1 :         struct bt_bap_stream_ops *ops;
     193             : };
     194             : 
     195             : /**
     196             :  * @brief Register Audio operations for a Common Audio Profile stream.
     197             :  *
     198             :  * Register Audio operations for a stream.
     199             :  *
     200             :  * @param stream Stream object.
     201             :  * @param ops    Stream operations structure.
     202             :  */
     203           1 : void bt_cap_stream_ops_register(struct bt_cap_stream *stream, struct bt_bap_stream_ops *ops);
     204             : 
     205             : /**
     206             :  * @brief Send data to Common Audio Profile stream without timestamp
     207             :  *
     208             :  * See bt_bap_stream_send() for more information
     209             :  *
     210             :  * @note Support for sending must be supported, determined by @kconfig{CONFIG_BT_AUDIO_TX}.
     211             :  *
     212             :  * @param stream   Stream object.
     213             :  * @param buf      Buffer containing data to be sent.
     214             :  * @param seq_num  Packet Sequence number. This value shall be incremented for each call to this
     215             :  *                 function and at least once per SDU interval for a specific channel.
     216             :  *
     217             :  * @retval -EINVAL if stream object is NULL
     218             :  * @retval Any return value from bt_bap_stream_send()
     219             :  */
     220           1 : int bt_cap_stream_send(struct bt_cap_stream *stream, struct net_buf *buf, uint16_t seq_num);
     221             : 
     222             : /**
     223             :  * @brief Send data to Common Audio Profile stream with timestamp
     224             :  *
     225             :  * See bt_bap_stream_send() for more information
     226             :  *
     227             :  * @note Support for sending must be supported, determined by @kconfig{CONFIG_BT_AUDIO_TX}.
     228             :  *
     229             :  * @param stream   Stream object.
     230             :  * @param buf      Buffer containing data to be sent.
     231             :  * @param seq_num  Packet Sequence number. This value shall be incremented for each call to this
     232             :  *                 function and at least once per SDU interval for a specific channel.
     233             :  * @param ts       Timestamp of the SDU in microseconds (us). This value can be used to transmit
     234             :  *                 multiple SDUs in the same SDU interval in a CIG or BIG.
     235             :  *
     236             :  * @retval -EINVAL if stream object is NULL
     237             :  * @retval Any return value from bt_bap_stream_send()
     238             :  */
     239           1 : int bt_cap_stream_send_ts(struct bt_cap_stream *stream, struct net_buf *buf, uint16_t seq_num,
     240             :                           uint32_t ts);
     241             : 
     242             : /**
     243             :  * @brief Get ISO transmission timing info for a Common Audio Profile stream
     244             :  *
     245             :  * See bt_bap_stream_get_tx_sync() for more information
     246             :  *
     247             :  * @note Support for sending must be supported, determined by @kconfig{CONFIG_BT_AUDIO_TX}.
     248             :  *
     249             :  * @param[in]  stream Stream object.
     250             :  * @param[out] info   Transmit info object.
     251             :  *
     252             :  * @retval -EINVAL if stream object is NULL
     253             :  * @retval Any return value from bt_bap_stream_get_tx_sync()
     254             :  */
     255           1 : int bt_cap_stream_get_tx_sync(struct bt_cap_stream *stream, struct bt_iso_tx_info *info);
     256             : 
     257             : /** Stream specific parameters for the bt_cap_initiator_unicast_audio_start() function */
     258           1 : struct bt_cap_unicast_audio_start_stream_param {
     259             :         /** Coordinated or ad-hoc set member. */
     260           1 :         union bt_cap_set_member member;
     261             : 
     262             :         /** @brief Stream for the @p member */
     263           1 :         struct bt_cap_stream *stream;
     264             : 
     265             :         /** Endpoint reference for the @p stream */
     266           1 :         struct bt_bap_ep *ep;
     267             : 
     268             :         /**
     269             :          * @brief Codec configuration.
     270             :          *
     271             :          * The @p codec_cfg.meta shall include a list of CCIDs
     272             :          * (@ref BT_AUDIO_METADATA_TYPE_CCID_LIST) as well as a non-0
     273             :          * stream context (@ref BT_AUDIO_METADATA_TYPE_STREAM_CONTEXT) bitfield.
     274             :          *
     275             :          * This value is assigned to the @p stream, and shall remain valid while the stream is
     276             :          * non-idle.
     277             :          */
     278           1 :         struct bt_audio_codec_cfg *codec_cfg;
     279             : };
     280             : 
     281             : /** Parameters for the bt_cap_initiator_unicast_audio_start() function */
     282           1 : struct bt_cap_unicast_audio_start_param {
     283             :         /** The type of the set. */
     284           1 :         enum bt_cap_set_type type;
     285             : 
     286             :         /** The number of parameters in @p stream_params */
     287           1 :         size_t count;
     288             : 
     289             :         /** Array of stream parameters */
     290           1 :         struct bt_cap_unicast_audio_start_stream_param *stream_params;
     291             : };
     292             : 
     293             : /** Stream specific parameters for the bt_cap_initiator_unicast_audio_update() function */
     294           1 : struct bt_cap_unicast_audio_update_stream_param {
     295             :         /** Stream to update */
     296           1 :         struct bt_cap_stream *stream;
     297             : 
     298             :         /** The length of @p meta. */
     299           1 :         size_t meta_len;
     300             : 
     301             :         /**
     302             :          * @brief The new metadata.
     303             :          *
     304             :          * The metadata shall contain a list of CCIDs as well as a non-0 context bitfield.
     305             :          */
     306           1 :         uint8_t *meta;
     307             : };
     308             : 
     309             : /** Parameters for the bt_cap_initiator_unicast_audio_update() function */
     310           1 : struct bt_cap_unicast_audio_update_param {
     311             :         /** The type of the set. */
     312           1 :         enum bt_cap_set_type type;
     313             : 
     314             :         /** The number of parameters in @p stream_params */
     315           1 :         size_t count;
     316             : 
     317             :         /** Array of stream parameters */
     318           1 :         struct bt_cap_unicast_audio_update_stream_param *stream_params;
     319             : };
     320             : 
     321             : /** Parameters for the bt_cap_initiator_unicast_audio_stop() function */
     322           1 : struct bt_cap_unicast_audio_stop_param {
     323             :         /** The type of the set. */
     324           1 :         enum bt_cap_set_type type;
     325             : 
     326             :         /** The number of streams in @p streams */
     327           1 :         size_t count;
     328             : 
     329             :         /** Array of streams to stop */
     330           1 :         struct bt_cap_stream **streams;
     331             : 
     332             :         /** Whether to release the streams after they have stopped */
     333           1 :         bool release;
     334             : };
     335             : 
     336             : /**
     337             :  * @brief Register Common Audio Profile Initiator callbacks
     338             :  *
     339             :  * @param cb   The callback structure. Shall remain static.
     340             :  *
     341             :  * @return 0 on success or negative error value on failure.
     342             :  */
     343           1 : int bt_cap_initiator_register_cb(const struct bt_cap_initiator_cb *cb);
     344             : 
     345             : /**
     346             :  * @brief Unregister Common Audio Profile Initiator callbacks
     347             :  *
     348             :  * @param cb   The callback structure that was previously registered.
     349             :  *
     350             :  * @retval 0 Success
     351             :  * @retval -EINVAL @p cb is NULL or @p cb was not registered
     352             :  */
     353           1 : int bt_cap_initiator_unregister_cb(const struct bt_cap_initiator_cb *cb);
     354             : 
     355             : /**
     356             :  * @brief Setup and start unicast audio streams for a set of devices.
     357             :  *
     358             :  * The result of this operation is that the streams in @p param will be
     359             :  * initialized and will be usable for streaming audio data.
     360             :  * The @p unicast_group value can be used to update and stop the streams.
     361             :  *
     362             :  * @note @kconfig{CONFIG_BT_CAP_INITIATOR} and
     363             :  * @kconfig{CONFIG_BT_BAP_UNICAST_CLIENT} must be enabled for this function
     364             :  * to be enabled.
     365             :  *
     366             :  * @param param Parameters to start the audio streams.
     367             :  *
     368             :  * @retval 0 on success
     369             :  * @retval -EBUSY if a CAP procedure is already in progress
     370             :  * @retval -EINVAL if any parameter is invalid
     371             :  * @retval -EALREADY All streams are already in the streaming state
     372             :  */
     373           1 : int bt_cap_initiator_unicast_audio_start(const struct bt_cap_unicast_audio_start_param *param);
     374             : 
     375             : /**
     376             :  * @brief Update unicast audio streams.
     377             :  *
     378             :  * This will update the metadata of one or more streams.
     379             :  *
     380             :  * @note @kconfig{CONFIG_BT_CAP_INITIATOR} and
     381             :  * @kconfig{CONFIG_BT_BAP_UNICAST_CLIENT} must be enabled for this function
     382             :  * to be enabled.
     383             :  *
     384             :  * @param param Update parameters.
     385             :  *
     386             :  * @return 0 on success or negative error value on failure.
     387             :  */
     388           1 : int bt_cap_initiator_unicast_audio_update(const struct bt_cap_unicast_audio_update_param *param);
     389             : 
     390             : /**
     391             :  * @brief Stop unicast audio streams.
     392             :  *
     393             :  * This will stop one or more streams.
     394             :  *
     395             :  * @note @kconfig{CONFIG_BT_CAP_INITIATOR} and
     396             :  * @kconfig{CONFIG_BT_BAP_UNICAST_CLIENT} must be enabled for this function
     397             :  * to be enabled.
     398             :  *
     399             :  * @param param Stop parameters.
     400             :  *
     401             :  * @return 0 on success
     402             :  * @retval -EBUSY if a CAP procedure is already in progress
     403             :  * @retval -EINVAL if any parameter is invalid
     404             :  * @retval -EALREADY if no state changes will occur
     405             :  */
     406           1 : int bt_cap_initiator_unicast_audio_stop(const struct bt_cap_unicast_audio_stop_param *param);
     407             : 
     408             : /**
     409             :  * @brief Cancel any current Common Audio Profile procedure
     410             :  *
     411             :  * This will stop the current procedure from continuing and making it possible to run a new
     412             :  * Common Audio Profile procedure.
     413             :  *
     414             :  * It is recommended to do this if any existing procedure takes longer time than expected, which
     415             :  * could indicate a missing response from the Common Audio Profile Acceptor.
     416             :  *
     417             :  * This does not send any requests to any Common Audio Profile Acceptors involved with the current
     418             :  * procedure, and thus notifications from the Common Audio Profile Acceptors may arrive after this
     419             :  * has been called. It is thus recommended to either only use this if a procedure has stalled, or
     420             :  * wait a short while before starting any new Common Audio Profile procedure after this has been
     421             :  * called to avoid getting notifications from the cancelled procedure. The wait time depends on
     422             :  * the connection interval, the number of devices in the previous procedure and the behavior of the
     423             :  * Common Audio Profile Acceptors.
     424             :  *
     425             :  * The respective callbacks of the procedure will be called as part of this with the connection
     426             :  * pointer set to 0 and the err value set to -ECANCELED.
     427             :  *
     428             :  * @retval 0 on success
     429             :  * @retval -EALREADY if no procedure is active
     430             :  */
     431           1 : int bt_cap_initiator_unicast_audio_cancel(void);
     432             : 
     433             : /**
     434             :  * Parameters part of @p bt_cap_initiator_broadcast_subgroup_param for
     435             :  * bt_cap_initiator_broadcast_audio_create()
     436             :  */
     437           1 : struct bt_cap_initiator_broadcast_stream_param {
     438             :         /** Audio stream */
     439           1 :         struct bt_cap_stream *stream;
     440             : 
     441             :         /** The length of the %p data array.
     442             :          *
     443             :          * The BIS specific data may be omitted and this set to 0.
     444             :          */
     445           1 :         size_t data_len;
     446             : 
     447             :         /** BIS Codec Specific Configuration */
     448           1 :         uint8_t *data;
     449             : };
     450             : 
     451             : /**
     452             :  * Parameters part of @p bt_cap_initiator_broadcast_create_param for
     453             :  * bt_cap_initiator_broadcast_audio_create()
     454             :  */
     455           1 : struct bt_cap_initiator_broadcast_subgroup_param {
     456             :         /** The number of parameters in @p stream_params */
     457           1 :         size_t stream_count;
     458             : 
     459             :         /** Array of stream parameters */
     460           1 :         struct bt_cap_initiator_broadcast_stream_param *stream_params;
     461             : 
     462             :         /** Subgroup Codec configuration. */
     463           1 :         struct bt_audio_codec_cfg *codec_cfg;
     464             : };
     465             : 
     466             : /** Parameters for * bt_cap_initiator_broadcast_audio_create() */
     467           1 : struct bt_cap_initiator_broadcast_create_param {
     468             :         /** The number of parameters in @p subgroup_params */
     469           1 :         size_t subgroup_count;
     470             : 
     471             :         /** Array of stream parameters */
     472           1 :         struct bt_cap_initiator_broadcast_subgroup_param *subgroup_params;
     473             : 
     474             :         /** Quality of Service configuration. */
     475           1 :         struct bt_bap_qos_cfg *qos;
     476             : 
     477             :         /**
     478             :          * @brief Broadcast Source packing mode.
     479             :          *
     480             :          * @ref BT_ISO_PACKING_SEQUENTIAL or @ref BT_ISO_PACKING_INTERLEAVED.
     481             :          *
     482             :          * @note This is a recommendation to the controller, which the controller may ignore.
     483             :          */
     484           1 :         uint8_t packing;
     485             : 
     486             :         /** Whether or not to encrypt the streams. */
     487           1 :         bool encryption;
     488             : 
     489             :         /**
     490             :          * @brief 16-octet broadcast code.
     491             :          *
     492             :          * Only valid if @p encrypt is true.
     493             :          *
     494             :          * If the value is a string or a the value is less than 16 octets,
     495             :          * the remaining octets shall be 0.
     496             :          *
     497             :          * Example:
     498             :          *   The string "Broadcast Code" shall be
     499             :          *   [42 72 6F 61 64 63 61 73 74 20 43 6F 64 65 00 00]
     500             :          */
     501           1 :         uint8_t broadcast_code[BT_ISO_BROADCAST_CODE_SIZE];
     502             : 
     503             : #if defined(CONFIG_BT_ISO_TEST_PARAMS) || defined(__DOXYGEN__)
     504             :         /**
     505             :          * @brief Immediate Repetition Count
     506             :          *
     507             :          * The number of times the scheduled payloads are transmitted in a given event.
     508             :          *
     509             :          * Value range from @ref BT_ISO_IRC_MIN to @ref BT_ISO_IRC_MAX.
     510             :          */
     511           1 :         uint8_t irc;
     512             : 
     513             :         /**
     514             :          * @brief Pre-transmission offset
     515             :          *
     516             :          * Offset used for pre-transmissions.
     517             :          *
     518             :          * Value range from @ref BT_ISO_PTO_MIN to @ref BT_ISO_PTO_MAX.
     519             :          */
     520           1 :         uint8_t pto;
     521             : 
     522             :         /**
     523             :          * @brief ISO interval
     524             :          *
     525             :          * Time between consecutive BIS anchor points.
     526             :          *
     527             :          * Value range from @ref BT_ISO_ISO_INTERVAL_MIN to  @ref BT_ISO_ISO_INTERVAL_MAX.
     528             :          */
     529           1 :         uint16_t iso_interval;
     530             : #endif /* CONFIG_BT_ISO_TEST_PARAMS */
     531             : };
     532             : 
     533             : /**
     534             :  * @brief Create a Common Audio Profile broadcast source.
     535             :  *
     536             :  * Create a new audio broadcast source with one or more audio streams.
     537             :  *
     538             :  * @note @kconfig{CONFIG_BT_CAP_INITIATOR} and
     539             :  * @kconfig{CONFIG_BT_BAP_BROADCAST_SOURCE} must be enabled for this function
     540             :  * to be enabled.
     541             :  *
     542             :  * @param[in]  param             Parameters to start the audio streams.
     543             :  * @param[out] broadcast_source  Pointer to the broadcast source created.
     544             :  *
     545             :  * @return 0 on success or negative error value on failure.
     546             :  */
     547           1 : int bt_cap_initiator_broadcast_audio_create(
     548             :         const struct bt_cap_initiator_broadcast_create_param *param,
     549             :         struct bt_cap_broadcast_source **broadcast_source);
     550             : 
     551             : /**
     552             :  * @brief Start Common Audio Profile broadcast source.
     553             :  *
     554             :  * The broadcast source will be visible for scanners once this has been called,
     555             :  * and the device will advertise audio announcements.
     556             :  *
     557             :  * This will allow the streams in the broadcast source to send audio by calling
     558             :  * bt_bap_stream_send().
     559             :  *
     560             :  * @note @kconfig{CONFIG_BT_CAP_INITIATOR} and
     561             :  * @kconfig{CONFIG_BT_BAP_BROADCAST_SOURCE} must be enabled for this function
     562             :  * to be enabled.
     563             :  *
     564             :  * @param broadcast_source  Pointer to the broadcast source.
     565             :  * @param adv               Pointer to an extended advertising set with
     566             :  *                          periodic advertising configured.
     567             :  *
     568             :  * @return 0 on success or negative error value on failure.
     569             :  */
     570           1 : int bt_cap_initiator_broadcast_audio_start(struct bt_cap_broadcast_source *broadcast_source,
     571             :                                            struct bt_le_ext_adv *adv);
     572             : /**
     573             :  * @brief Update broadcast audio streams for a Common Audio Profile broadcast source.
     574             :  *
     575             :  * @note @kconfig{CONFIG_BT_CAP_INITIATOR} and
     576             :  * @kconfig{CONFIG_BT_BAP_BROADCAST_SOURCE} must be enabled for this function
     577             :  * to be enabled.
     578             :  *
     579             :  * @param broadcast_source The broadcast source to update.
     580             :  * @param meta             The new metadata. The metadata shall contain a list
     581             :  *                         of CCIDs as well as a non-0 context bitfield.
     582             :  * @param meta_len         The length of @p meta.
     583             :  *
     584             :  * @return 0 on success or negative error value on failure.
     585             :  */
     586           1 : int bt_cap_initiator_broadcast_audio_update(struct bt_cap_broadcast_source *broadcast_source,
     587             :                                             const uint8_t meta[], size_t meta_len);
     588             : 
     589             : /**
     590             :  * @brief Stop broadcast audio streams for a Common Audio Profile broadcast source.
     591             :  *
     592             :  * @note @kconfig{CONFIG_BT_CAP_INITIATOR} and
     593             :  * @kconfig{CONFIG_BT_BAP_BROADCAST_SOURCE} must be enabled for this function
     594             :  * to be enabled.
     595             :  *
     596             :  * @param broadcast_source The broadcast source to stop. The audio streams
     597             :  *                         in this will be stopped and reset.
     598             :  *
     599             :  * @return 0 on success or negative error value on failure.
     600             :  */
     601           1 : int bt_cap_initiator_broadcast_audio_stop(struct bt_cap_broadcast_source *broadcast_source);
     602             : 
     603             : /**
     604             :  * @brief Delete Common Audio Profile broadcast source
     605             :  *
     606             :  * This can only be done after the broadcast source has been stopped by calling
     607             :  * bt_cap_initiator_broadcast_audio_stop() and after the
     608             :  * bt_bap_stream_ops.stopped() callback has been called for all streams in the
     609             :  * broadcast source.
     610             :  *
     611             :  * @note @kconfig{CONFIG_BT_CAP_INITIATOR} and
     612             :  * @kconfig{CONFIG_BT_BAP_BROADCAST_SOURCE} must be enabled for this function
     613             :  * to be enabled.
     614             :  *
     615             :  * @param broadcast_source The broadcast source to delete.
     616             :  *                         The @p broadcast_source will be invalidated.
     617             :  *
     618             :  * @return 0 on success or negative error value on failure.
     619             :  */
     620           1 : int bt_cap_initiator_broadcast_audio_delete(struct bt_cap_broadcast_source *broadcast_source);
     621             : 
     622             : /**
     623             :  * @brief Get the Broadcast Audio Stream Endpoint of a Common Audio Profile broadcast source
     624             :  *
     625             :  * This will encode the BASE of a broadcast source into a buffer, that can be
     626             :  * used for advertisement. The encoded BASE will thus be encoded as
     627             :  * little-endian. The BASE shall be put into the periodic advertising data
     628             :  * (see bt_le_per_adv_set_data()).
     629             :  *
     630             :  * See table 3.15 in the Basic Audio Profile v1.0.1 for the structure.
     631             :  *
     632             :  * @param broadcast_source  Pointer to the broadcast source.
     633             :  * @param base_buf          Pointer to a buffer where the BASE will be inserted.
     634             :  *
     635             :  * @return int          0 if on success, errno on error.
     636             :  */
     637           1 : int bt_cap_initiator_broadcast_get_base(struct bt_cap_broadcast_source *broadcast_source,
     638             :                                         struct net_buf_simple *base_buf);
     639             : 
     640             : /** Parameters for  bt_cap_initiator_unicast_to_broadcast() */
     641           1 : struct bt_cap_unicast_to_broadcast_param {
     642             :         /** The source unicast group with the streams. */
     643           1 :         struct bt_bap_unicast_group *unicast_group;
     644             : 
     645             :         /**
     646             :          * @brief Whether or not to encrypt the streams.
     647             :          *
     648             :          * If set to true, then the broadcast code in @p broadcast_code
     649             :          * will be used to encrypt the streams.
     650             :          */
     651           1 :         bool encrypt;
     652             : 
     653             :         /**
     654             :          * @brief 16-octet broadcast code.
     655             :          *
     656             :          * Only valid if @p encrypt is true.
     657             :          *
     658             :          * If the value is a string or a the value is less than 16 octets,
     659             :          * the remaining octets shall be 0.
     660             :          *
     661             :          * Example:
     662             :          *   The string "Broadcast Code" shall be
     663             :          *   [42 72 6F 61 64 63 61 73 74 20 43 6F 64 65 00 00]
     664             :          */
     665           1 :         uint8_t broadcast_code[BT_ISO_BROADCAST_CODE_SIZE];
     666             : };
     667             : 
     668             : /**
     669             :  * @brief Hands over the data streams in a unicast group to a broadcast source.
     670             :  *
     671             :  * The streams in the unicast group will be stopped and the unicast group
     672             :  * will be deleted. This can only be done for source streams.
     673             :  *
     674             :  * @note @kconfig{CONFIG_BT_CAP_INITIATOR},
     675             :  * @kconfig{CONFIG_BT_BAP_UNICAST_CLIENT} and
     676             :  * @kconfig{CONFIG_BT_BAP_BROADCAST_SOURCE} must be enabled for this function
     677             :  * to be enabled.
     678             :  *
     679             :  * @param param         The parameters for the handover.
     680             :  * @param source        The resulting broadcast source.
     681             :  *
     682             :  * @return 0 on success or negative error value on failure.
     683             :  */
     684           1 : int bt_cap_initiator_unicast_to_broadcast(const struct bt_cap_unicast_to_broadcast_param *param,
     685             :                                           struct bt_cap_broadcast_source **source);
     686             : 
     687             : /** Parameters for  bt_cap_initiator_broadcast_to_unicast() */
     688           1 : struct bt_cap_broadcast_to_unicast_param {
     689             :         /**
     690             :          * @brief The source broadcast source with the streams.
     691             :          *
     692             :          * The broadcast source will be stopped and deleted.
     693             :          */
     694           1 :         struct bt_cap_broadcast_source *broadcast_source;
     695             : 
     696             :         /** The type of the set. */
     697           1 :         enum bt_cap_set_type type;
     698             : 
     699             :         /**
     700             :          * @brief The number of set members in @p members.
     701             :          *
     702             :          * This value shall match the number of streams in the
     703             :          * @p broadcast_source.
     704             :          *
     705             :          */
     706           1 :         size_t count;
     707             : 
     708             :         /** Coordinated or ad-hoc set members. */
     709           1 :         union bt_cap_set_member **members;
     710             : };
     711             : 
     712             : /**
     713             :  * @brief Hands over the data streams in a broadcast source to a unicast group.
     714             :  *
     715             :  * The streams in the broadcast source will be stopped and the broadcast source
     716             :  * will be deleted.
     717             :  *
     718             :  * @note @kconfig{CONFIG_BT_CAP_INITIATOR},
     719             :  * @kconfig{CONFIG_BT_BAP_UNICAST_CLIENT} and
     720             :  * @kconfig{CONFIG_BT_BAP_BROADCAST_SOURCE} must be enabled for this function
     721             :  * to be enabled.
     722             :  *
     723             :  * @param[in]  param          The parameters for the handover.
     724             :  * @param[out] unicast_group  The resulting broadcast source.
     725             :  *
     726             :  * @return 0 on success or negative error value on failure.
     727             :  */
     728           1 : int bt_cap_initiator_broadcast_to_unicast(const struct bt_cap_broadcast_to_unicast_param *param,
     729             :                                           struct bt_bap_unicast_group **unicast_group);
     730             : 
     731             : /** Callback structure for CAP procedures */
     732           1 : struct bt_cap_commander_cb {
     733             :         /**
     734             :          * @brief Callback for bt_cap_initiator_unicast_discover().
     735             :          *
     736             :          * @param conn      The connection pointer supplied to
     737             :          *                  bt_cap_initiator_unicast_discover().
     738             :          * @param err       0 if Common Audio Service was found else -ENODATA.
     739             :          * @param member    Pointer to the set member. NULL if err != 0.
     740             :          * @param csis_inst The Coordinated Set Identification Service if
     741             :          *                  Common Audio Service was found and includes a
     742             :          *                  Coordinated Set Identification Service.
     743             :          *                  NULL on error or if remote device does not include
     744             :          *                  Coordinated Set Identification Service. NULL if err != 0.
     745             :          */
     746           1 :         void (*discovery_complete)(struct bt_conn *conn, int err,
     747             :                                    const struct bt_csip_set_coordinator_set_member *member,
     748             :                                    const struct bt_csip_set_coordinator_csis_inst *csis_inst);
     749             : 
     750             : #if defined(CONFIG_BT_VCP_VOL_CTLR) || defined(__DOXYGEN__)
     751             :         /**
     752             :          * @brief Callback for bt_cap_commander_change_volume().
     753             :          *
     754             :          * @param conn           Pointer to the connection where the error
     755             :          *                       occurred. NULL if @p err is 0 or if cancelled by
     756             :          *                       bt_cap_commander_cancel()
     757             :          * @param err            0 on success, BT_GATT_ERR() with a
     758             :          *                       specific ATT (BT_ATT_ERR_*) error code or -ECANCELED if cancelled
     759             :          *                       by bt_cap_commander_cancel().
     760             :          */
     761           1 :         void (*volume_changed)(struct bt_conn *conn, int err);
     762             : 
     763             :         /**
     764             :          * @brief Callback for bt_cap_commander_change_volume_mute_state().
     765             :          *
     766             :          * @param conn           Pointer to the connection where the error
     767             :          *                       occurred. NULL if @p err is 0 or if cancelled by
     768             :          *                       bt_cap_commander_cancel()
     769             :          * @param err            0 on success, BT_GATT_ERR() with a
     770             :          *                       specific ATT (BT_ATT_ERR_*) error code or -ECANCELED if cancelled
     771             :          *                       by bt_cap_commander_cancel().
     772             :          */
     773           1 :         void (*volume_mute_changed)(struct bt_conn *conn, int err);
     774             : 
     775             : #if defined(CONFIG_BT_VCP_VOL_CTLR_VOCS) || defined(__DOXYGEN__)
     776             :         /**
     777             :          * @brief Callback for bt_cap_commander_change_volume_offset().
     778             :          *
     779             :          * @param conn           Pointer to the connection where the error
     780             :          *                       occurred. NULL if @p err is 0 or if cancelled by
     781             :          *                       bt_cap_commander_cancel()
     782             :          * @param err            0 on success, BT_GATT_ERR() with a
     783             :          *                       specific ATT (BT_ATT_ERR_*) error code or -ECANCELED if cancelled
     784             :          *                       by bt_cap_commander_cancel().
     785             :          */
     786           1 :         void (*volume_offset_changed)(struct bt_conn *conn, int err);
     787             : #endif /* CONFIG_BT_VCP_VOL_CTLR_VOCS */
     788             : #endif /* CONFIG_BT_VCP_VOL_CTLR */
     789             : #if defined(CONFIG_BT_MICP_MIC_CTLR) || defined(__DOXYGEN__)
     790             :         /**
     791             :          * @brief Callback for bt_cap_commander_change_microphone_mute_state().
     792             :          *
     793             :          * @param conn           Pointer to the connection where the error
     794             :          *                       occurred. NULL if @p err is 0 or if cancelled by
     795             :          *                       bt_cap_commander_cancel()
     796             :          * @param err            0 on success, BT_GATT_ERR() with a
     797             :          *                       specific ATT (BT_ATT_ERR_*) error code or -ECANCELED if cancelled
     798             :          *                       by bt_cap_commander_cancel().
     799             :          */
     800           1 :         void (*microphone_mute_changed)(struct bt_conn *conn, int err);
     801             : #if defined(CONFIG_BT_MICP_MIC_CTLR_AICS) || defined(__DOXYGEN__)
     802             :         /**
     803             :          * @brief Callback for bt_cap_commander_change_microphone_gain_setting().
     804             :          *
     805             :          * @param conn           Pointer to the connection where the error
     806             :          *                       occurred. NULL if @p err is 0 or if cancelled by
     807             :          *                       bt_cap_commander_cancel()
     808             :          * @param err            0 on success, BT_GATT_ERR() with a
     809             :          *                       specific ATT (BT_ATT_ERR_*) error code or -ECANCELED if cancelled
     810             :          *                       by bt_cap_commander_cancel().
     811             :          */
     812           1 :         void (*microphone_gain_changed)(struct bt_conn *conn, int err);
     813             : #endif /* CONFIG_BT_MICP_MIC_CTLR_AICS */
     814             : #endif /* CONFIG_BT_MICP_MIC_CTLR */
     815             : 
     816             : #if defined(CONFIG_BT_BAP_BROADCAST_ASSISTANT) || defined(__DOXYGEN__)
     817             :         /**
     818             :          * @brief Callback for bt_cap_commander_broadcast_reception_start().
     819             :          *
     820             :          * @param conn          Pointer to the connection where the error
     821             :          *                      occurred. NULL if @p err is 0 or if cancelled by
     822             :          *                      bt_cap_commander_cancel()
     823             :          * @param err           0 on success, BT_GATT_ERR() with a
     824             :          *                      specific ATT (BT_ATT_ERR_*) error code or -ECANCELED if cancelled
     825             :          *                      by bt_cap_commander_cancel().
     826             :          */
     827           1 :         void (*broadcast_reception_start)(struct bt_conn *conn, int err);
     828             :         /**
     829             :          * @brief Callback for bt_cap_commander_broadcast_reception_stop().
     830             :          *
     831             :          * @param conn          Pointer to the connection where the error
     832             :          *                      occurred. NULL if @p err is 0 or if cancelled by
     833             :          *                      bt_cap_commander_cancel()
     834             :          * @param err           0 on success, BT_GATT_ERR() with a
     835             :          *                      specific ATT (BT_ATT_ERR_*) error code or -ECANCELED if cancelled
     836             :          *                      by bt_cap_commander_cancel().
     837             :          */
     838           1 :         void (*broadcast_reception_stop)(struct bt_conn *conn, int err);
     839             :         /**
     840             :          * @brief Callback for bt_cap_commander_distribute_broadcast_code().
     841             :          *
     842             :          * @param conn          Pointer to the connection where the error
     843             :          *                      occurred. NULL if @p err is 0 or if cancelled by
     844             :          *                      bt_cap_commander_cancel()
     845             :          * @param err           0 on success, BT_GATT_ERR() with a
     846             :          *                      specific ATT (BT_ATT_ERR_*) error code or -ECANCELED if cancelled
     847             :          *                      by bt_cap_commander_cancel().
     848             :          */
     849           1 :         void (*distribute_broadcast_code)(struct bt_conn *conn, int err);
     850             : #endif /* CONFIG_BT_BAP_BROADCAST_ASSISTANT */
     851             : };
     852             : 
     853             : /**
     854             :  * @brief Register Common Audio Profile Commander callbacks
     855             :  *
     856             :  * @param cb   The callback structure. Shall remain static.
     857             :  *
     858             :  * @retval 0 Success
     859             :  * @retval -EINVAL @p cb is NULL
     860             :  * @retval -EALREADY Callbacks are already registered
     861             :  */
     862           1 : int bt_cap_commander_register_cb(const struct bt_cap_commander_cb *cb);
     863             : 
     864             : /**
     865             :  * @brief Unregister Common Audio Profile Commander callbacks
     866             :  *
     867             :  * @param cb   The callback structure that was previously registered.
     868             :  *
     869             :  * @retval 0 Success
     870             :  * @retval -EINVAL @p cb is NULL or @p cb was not registered
     871             :  */
     872           1 : int bt_cap_commander_unregister_cb(const struct bt_cap_commander_cb *cb);
     873             : 
     874             : /**
     875             :  * @brief Discovers audio support on a remote device.
     876             :  *
     877             :  * This will discover the Common Audio Service (CAS) on the remote device, to
     878             :  * verify if the remote device supports the Common Audio Profile.
     879             :  *
     880             :  * @note @kconfig{CONFIG_BT_CAP_COMMANDER} must be enabled for this function. If
     881             :  * @kconfig{CONFIG_BT_CAP_INITIATOR} is also enabled, it does not matter if
     882             :  * bt_cap_commander_discover() or bt_cap_initiator_unicast_discover() is used.
     883             :  *
     884             :  * @param conn Connection to a remote server.
     885             :  *
     886             :  * @retval 0 Success
     887             :  * @retval -EINVAL @p conn is NULL
     888             :  * @retval -ENOTCONN @p conn is not connected
     889             :  * @retval -ENOMEM Could not allocated memory for the request
     890             :  * @retval -EBUSY Already doing discovery for @p conn
     891             :  */
     892           1 : int bt_cap_commander_discover(struct bt_conn *conn);
     893             : 
     894             : /**
     895             :  * @brief Cancel any current Common Audio Profile commander procedure
     896             :  *
     897             :  * This will stop the current procedure from continuing and making it possible to run a new
     898             :  * Common Audio Profile procedure.
     899             :  *
     900             :  * It is recommended to do this if any existing procedure takes longer time than expected, which
     901             :  * could indicate a missing response from the Common Audio Profile Acceptor.
     902             :  *
     903             :  * This does not send any requests to any Common Audio Profile Acceptors involved with the
     904             :  * current procedure, and thus notifications from the Common Audio Profile Acceptors may
     905             :  * arrive after this has been called. It is thus recommended to either only use this if a
     906             :  * procedure has stalled, or wait a short while before starting any new Common Audio Profile
     907             :  * procedure after this has been called to avoid getting notifications from the cancelled
     908             :  * procedure. The wait time depends on the connection interval, the number of devices in the
     909             :  * previous procedure and the behavior of the Common Audio Profile Acceptors.
     910             :  *
     911             :  * The respective callbacks of the procedure will be called as part of this with the connection
     912             :  * pointer set to NULL and the err value set to -ECANCELED.
     913             :  *
     914             :  * @retval 0 on success
     915             :  * @retval -EALREADY if no procedure is active
     916             :  */
     917           1 : int bt_cap_commander_cancel(void);
     918             : 
     919             : /**
     920             :  * Parameters part of @ref bt_cap_commander_broadcast_reception_start_param for
     921             :  * bt_cap_commander_broadcast_reception_start()
     922             :  */
     923           1 : struct bt_cap_commander_broadcast_reception_start_member_param {
     924             :         /** Coordinated or ad-hoc set member. */
     925           1 :         union bt_cap_set_member member;
     926             : 
     927             :         /** Address of the advertiser. */
     928           1 :         bt_addr_le_t addr;
     929             : 
     930             :         /** SID of the advertising set. */
     931           1 :         uint8_t adv_sid;
     932             : 
     933             :         /**
     934             :          * @brief Periodic advertising interval in milliseconds.
     935             :          *
     936             :          * BT_BAP_PA_INTERVAL_UNKNOWN if unknown.
     937             :          */
     938           1 :         uint16_t pa_interval;
     939             : 
     940             :         /** 24-bit broadcast ID */
     941           1 :         uint32_t broadcast_id;
     942             : 
     943             :         /**
     944             :          * @brief Pointer to array of subgroups
     945             :          *
     946             :          * At least one bit in one of the subgroups bis_sync parameters shall be set.
     947             :          */
     948           1 :         struct bt_bap_bass_subgroup subgroups[BT_BAP_BASS_MAX_SUBGROUPS];
     949             : 
     950             :         /** Number of subgroups */
     951           1 :         size_t num_subgroups;
     952             : };
     953             : 
     954             : /** Parameters for starting broadcast reception  */
     955           1 : struct bt_cap_commander_broadcast_reception_start_param {
     956             :         /** The type of the set. */
     957           1 :         enum bt_cap_set_type type;
     958             : 
     959             :         /** The set of devices for this procedure */
     960           1 :         struct bt_cap_commander_broadcast_reception_start_member_param *param;
     961             : 
     962             :         /** The number of parameters in @p param */
     963           1 :         size_t count;
     964             : };
     965             : 
     966             : /**
     967             :  * @brief Starts the reception of broadcast audio on one or more remote Common Audio Profile
     968             :  * Acceptors
     969             :  *
     970             :  * @param param The parameters to start the broadcast audio
     971             :  *
     972             :  * @return 0 on success or negative error value on failure.
     973             :  */
     974           1 : int bt_cap_commander_broadcast_reception_start(
     975             :         const struct bt_cap_commander_broadcast_reception_start_param *param);
     976             : 
     977             : /** Parameters for stopping broadcast reception  */
     978           1 : struct bt_cap_commander_broadcast_reception_stop_member_param {
     979             :         /** Coordinated or ad-hoc set member. */
     980           1 :         union bt_cap_set_member member;
     981             : 
     982             :         /** Source ID of the receive state. */
     983           1 :         uint8_t src_id;
     984             : 
     985             :         /** Number of subgroups */
     986           1 :         size_t num_subgroups;
     987             : };
     988             : 
     989           0 : struct bt_cap_commander_broadcast_reception_stop_param {
     990             :         /** The type of the set. */
     991           1 :         enum bt_cap_set_type type;
     992             : 
     993             :         /** The set of devices for this procedure */
     994           1 :         struct bt_cap_commander_broadcast_reception_stop_member_param *param;
     995             : 
     996             :         /** The number of parameters in @p param */
     997           1 :         size_t count;
     998             : };
     999             : 
    1000             : /**
    1001             :  * @brief Stops the reception of broadcast audio on one or more remote Common Audio Profile
    1002             :  * Acceptors
    1003             :  *
    1004             :  * @param param The parameters to stop the broadcast audio
    1005             :  *
    1006             :  * @return 0 on success or negative error value on failure.
    1007             :  */
    1008           1 : int bt_cap_commander_broadcast_reception_stop(
    1009             :         const struct bt_cap_commander_broadcast_reception_stop_param *param);
    1010             : 
    1011             : /** Parameters for distributing broadcast code */
    1012           1 : struct bt_cap_commander_distribute_broadcast_code_member_param {
    1013             :         /** Coordinated or ad-hoc set member. */
    1014           1 :         union bt_cap_set_member member;
    1015             : 
    1016             :         /** Source ID of the receive state. */
    1017           1 :         uint8_t src_id;
    1018             : };
    1019             : 
    1020           0 : struct bt_cap_commander_distribute_broadcast_code_param {
    1021             :         /** The type of the set. */
    1022           1 :         enum bt_cap_set_type type;
    1023             : 
    1024             :         /** The set of devices for this procedure */
    1025           1 :         struct bt_cap_commander_distribute_broadcast_code_member_param *param;
    1026             : 
    1027             :         /** The number of parameters in @p param */
    1028           1 :         size_t count;
    1029             : 
    1030             :         /**
    1031             :          * @brief 16-octet broadcast code.
    1032             :          *
    1033             :          * If the value is a string or a the value is less than 16 octets,
    1034             :          * the remaining octets shall be 0.
    1035             :          *
    1036             :          * Example:
    1037             :          *   The string "Broadcast Code" shall be
    1038             :          *   [42 72 6F 61 64 63 61 73 74 20 43 6F 64 65 00 00]
    1039             :          */
    1040           1 :         uint8_t broadcast_code[BT_ISO_BROADCAST_CODE_SIZE];
    1041             : };
    1042             : 
    1043             : /**
    1044             :  * @brief Distributes the broadcast code on one or more remote Common Audio Profile
    1045             :  * Acceptors
    1046             :  *
    1047             :  * @param param The parameters for distributing the broadcast code
    1048             :  *
    1049             :  * @return 0 on success or negative error value on failure.
    1050             :  */
    1051           1 : int bt_cap_commander_distribute_broadcast_code(
    1052             :         const struct bt_cap_commander_distribute_broadcast_code_param *param);
    1053             : 
    1054             : /** Parameters for changing absolute volume  */
    1055           1 : struct bt_cap_commander_change_volume_param {
    1056             :         /** The type of the set. */
    1057           1 :         enum bt_cap_set_type type;
    1058             : 
    1059             :         /** Coordinated or ad-hoc set member. */
    1060           1 :         union bt_cap_set_member *members;
    1061             : 
    1062             :         /** The number of members in @p members */
    1063           1 :         size_t count;
    1064             : 
    1065             :         /** The absolute volume to set */
    1066           1 :         uint8_t volume;
    1067             : };
    1068             : 
    1069             : /**
    1070             :  * @brief Change the volume on one or more Common Audio Profile Acceptors
    1071             :  *
    1072             :  * @param param The parameters for the volume change
    1073             :  *
    1074             :  * @return 0 on success or negative error value on failure.
    1075             :  */
    1076           1 : int bt_cap_commander_change_volume(const struct bt_cap_commander_change_volume_param *param);
    1077             : 
    1078             : /**
    1079             :  * Parameters part of @ref bt_cap_commander_change_volume_offset_param for
    1080             :  * bt_cap_commander_change_volume_offset()
    1081             :  */
    1082           1 : struct bt_cap_commander_change_volume_offset_member_param {
    1083             :         /** Coordinated or ad-hoc set member. */
    1084           1 :         union bt_cap_set_member member;
    1085             : 
    1086             :         /**
    1087             :          * @brief  The offset to set
    1088             :          *
    1089             :          * Value shall be between @ref BT_VOCS_MIN_OFFSET and @ref BT_VOCS_MAX_OFFSET
    1090             :          */
    1091           1 :         int16_t offset;
    1092             : };
    1093             : 
    1094             : /** Parameters for changing volume offset */
    1095           1 : struct bt_cap_commander_change_volume_offset_param {
    1096             :         /** The type of the set. */
    1097           1 :         enum bt_cap_set_type type;
    1098             : 
    1099             :         /** The set of devices for this procedure */
    1100           1 :         struct bt_cap_commander_change_volume_offset_member_param *param;
    1101             : 
    1102             :         /** The number of parameters in @p param */
    1103           1 :         size_t count;
    1104             : };
    1105             : 
    1106             : /**
    1107             :  * @brief Change the volume offset on one or more Common Audio Profile Acceptors
    1108             :  *
    1109             :  * @param param The parameters for the volume offset change
    1110             :  *
    1111             :  * @return 0 on success or negative error value on failure.
    1112             :  */
    1113           1 : int bt_cap_commander_change_volume_offset(
    1114             :         const struct bt_cap_commander_change_volume_offset_param *param);
    1115             : 
    1116             : /** Parameters for changing volume mute state */
    1117           1 : struct bt_cap_commander_change_volume_mute_state_param {
    1118             :         /** The type of the set. */
    1119           1 :         enum bt_cap_set_type type;
    1120             : 
    1121             :         /** Coordinated or ad-hoc set member. */
    1122           1 :         union bt_cap_set_member *members;
    1123             : 
    1124             :         /** The number of members in @p members */
    1125           1 :         size_t count;
    1126             : 
    1127             :         /**
    1128             :          * @brief The volume mute state to set
    1129             :          *
    1130             :          * true to mute, and false to unmute
    1131             :          */
    1132           1 :         bool mute;
    1133             : };
    1134             : 
    1135             : /**
    1136             :  * @brief Change the volume mute state on one or more Common Audio Profile Acceptors
    1137             :  *
    1138             :  * @param param The parameters for the volume mute state change
    1139             :  *
    1140             :  * @return 0 on success or negative error value on failure.
    1141             :  */
    1142           1 : int bt_cap_commander_change_volume_mute_state(
    1143             :         const struct bt_cap_commander_change_volume_mute_state_param *param);
    1144             : 
    1145             : /** Parameters for changing microphone mute state */
    1146           1 : struct bt_cap_commander_change_microphone_mute_state_param {
    1147             :         /** The type of the set. */
    1148           1 :         enum bt_cap_set_type type;
    1149             : 
    1150             :         /** Coordinated or ad-hoc set member. */
    1151           1 :         union bt_cap_set_member *members;
    1152             : 
    1153             :         /** The number of members in @p members */
    1154           1 :         size_t count;
    1155             : 
    1156             :         /**
    1157             :          * @brief The microphone mute state to set
    1158             :          *
    1159             :          * true to mute, and false to unmute
    1160             :          */
    1161           1 :         bool mute;
    1162             : };
    1163             : 
    1164             : /**
    1165             :  * @brief Change the microphone mute state on one or more Common Audio Profile Acceptors
    1166             :  *
    1167             :  * @param param The parameters for the microphone mute state change
    1168             :  *
    1169             :  * @return 0 on success or negative error value on failure.
    1170             :  */
    1171           1 : int bt_cap_commander_change_microphone_mute_state(
    1172             :         const struct bt_cap_commander_change_microphone_mute_state_param *param);
    1173             : 
    1174             : /**
    1175             :  * Parameters part of @ref bt_cap_commander_change_microphone_gain_setting_param for
    1176             :  * bt_cap_commander_change_microphone_gain_setting()
    1177             :  */
    1178           1 : struct bt_cap_commander_change_microphone_gain_setting_member_param {
    1179             :         /** Coordinated or ad-hoc set member. */
    1180           1 :         union bt_cap_set_member member;
    1181             : 
    1182             :         /** @brief The microphone gain setting to set */
    1183           1 :         int8_t gain;
    1184             : };
    1185             : 
    1186             : /** Parameters for changing microphone mute state */
    1187           1 : struct bt_cap_commander_change_microphone_gain_setting_param {
    1188             :         /** The type of the set. */
    1189           1 :         enum bt_cap_set_type type;
    1190             : 
    1191             :         /** The set of devices for this procedure */
    1192           1 :         struct bt_cap_commander_change_microphone_gain_setting_member_param *param;
    1193             : 
    1194             :         /** The number of parameters in @p param */
    1195           1 :         size_t count;
    1196             : };
    1197             : 
    1198             : /**
    1199             :  * @brief Change the microphone gain setting on one or more Common Audio Profile Acceptors
    1200             :  *
    1201             :  * @param param The parameters for the microphone gain setting change
    1202             :  *
    1203             :  * @return 0 on success or negative error value on failure.
    1204             :  */
    1205           1 : int bt_cap_commander_change_microphone_gain_setting(
    1206             :         const struct bt_cap_commander_change_microphone_gain_setting_param *param);
    1207             : #ifdef __cplusplus
    1208             : }
    1209             : #endif
    1210             : 
    1211             : /**
    1212             :  * @}
    1213             :  */
    1214             : 
    1215             : #endif /* ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_CAP_H_ */

Generated by: LCOV version 1.14