LCOV - code coverage report
Current view: top level - zephyr/bluetooth/audio - pacs.h Coverage Total Hit
Test: new.info Lines: 100.0 % 20 20
Test Date: 2025-09-05 20:47:19

            Line data    Source code
       1            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_pacs Published Audio Capabilities Service (PACS)
      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            1 : struct bt_pacs_cap {
      41              :         /** Codec capability reference */
      42            1 :         const struct bt_audio_codec_cap *codec_cap;
      43              : 
      44              :         /** @cond INTERNAL_HIDDEN */
      45              :         /** Internally used field for list handling */
      46              :         sys_snode_t _node;
      47              :         /** @endcond */
      48              : };
      49              : 
      50              : /** Structure for registering PACS */
      51            1 : struct bt_pacs_register_param {
      52              : #if defined(CONFIG_BT_PAC_SNK) || defined(__DOXYGEN__)
      53              :         /**
      54              :          * @brief Enables or disables registration of Sink PAC Characteristic.
      55              :          */
      56            1 :         bool snk_pac;
      57              : #endif /* CONFIG_BT_PAC_SNK */
      58              : 
      59              : #if defined(CONFIG_BT_PAC_SNK_LOC) || defined(__DOXYGEN__)
      60              :         /**
      61              :          * @brief Enables or disables registration of Sink Location Characteristic.
      62              :          *
      63              :          * Registration of Sink Location is dependent on @ref bt_pacs_register_param.snk_pac
      64              :          * also being set.
      65              :          */
      66            1 :         bool snk_loc;
      67              : #endif /* CONFIG_BT_PAC_SNK_LOC */
      68              : 
      69              : #if defined(CONFIG_BT_PAC_SRC) || defined(__DOXYGEN__)
      70              :         /**
      71              :          * @brief Enables or disables registration of Source PAC Characteristic.
      72              :          */
      73            1 :         bool src_pac;
      74              : #endif /* CONFIG_BT_PAC_SRC */
      75              : 
      76              : #if defined(CONFIG_BT_PAC_SRC_LOC) || defined(__DOXYGEN__)
      77              :         /**
      78              :          * @brief Enables or disables registration of Source Location Characteristic.
      79              :          *
      80              :          * Registration of Source Location is dependent on @ref bt_pacs_register_param.src_pac
      81              :          * also being set.
      82              :          */
      83            1 :         bool src_loc;
      84              : #endif /* CONFIG_BT_PAC_SRC_LOC */
      85              : };
      86              : 
      87              : /**
      88              :  * @typedef bt_pacs_cap_foreach_func_t
      89              :  * @brief Published Audio Capability iterator callback.
      90              :  *
      91              :  * @param cap Capability found.
      92              :  * @param user_data Data given.
      93              :  *
      94              :  * @return true to continue to the next capability
      95              :  * @return false to stop the iteration
      96              :  */
      97            1 : typedef bool (*bt_pacs_cap_foreach_func_t)(const struct bt_pacs_cap *cap,
      98              :                                            void *user_data);
      99              : 
     100              : /**
     101              :  * @brief Published Audio Capability iterator.
     102              :  *
     103              :  * Iterate capabilities with endpoint direction specified.
     104              :  *
     105              :  * @param dir Direction of the endpoint to look capability for.
     106              :  * @param func Callback function.
     107              :  * @param user_data Data to pass to the callback.
     108              :  */
     109            1 : void bt_pacs_cap_foreach(enum bt_audio_dir dir,
     110              :                          bt_pacs_cap_foreach_func_t func,
     111              :                          void *user_data);
     112              : 
     113              : /**
     114              :  * @brief Register the Published Audio Capability Service instance.
     115              :  *
     116              :  * @param param PACS register parameters.
     117              :  *
     118              :  * @retval 0 Success
     119              :  * @retval -EINVAL @p param is NULL or bad combination of values in @p param
     120              :  * @retval -EALREADY Already registered
     121              :  * @retval -ENOEXEC Request was rejected by GATT
     122              :  */
     123            1 : int bt_pacs_register(const struct bt_pacs_register_param *param);
     124              : 
     125              : /**
     126              :  * @brief Unregister the Published Audio Capability Service instance.
     127              :  *
     128              :  * @return 0 in case of success or negative value in case of error.
     129              :  */
     130            1 : int bt_pacs_unregister(void);
     131              : 
     132              : /**
     133              :  * @brief Register Published Audio Capability.
     134              :  *
     135              :  * Register Audio Local Capability.
     136              :  *
     137              :  * @param dir Direction of the endpoint to register capability for.
     138              :  * @param cap Capability structure.
     139              :  *
     140              :  * @return 0 in case of success or negative value in case of error.
     141              :  */
     142            1 : int bt_pacs_cap_register(enum bt_audio_dir dir, struct bt_pacs_cap *cap);
     143              : 
     144              : /**
     145              :  * @brief Unregister Published Audio Capability.
     146              :  *
     147              :  * Unregister Audio Local Capability.
     148              :  *
     149              :  * @param dir Direction of the endpoint to unregister capability for.
     150              :  * @param cap Capability structure.
     151              :  *
     152              :  * @return 0 in case of success or negative value in case of error.
     153              :  */
     154            1 : int bt_pacs_cap_unregister(enum bt_audio_dir dir, struct bt_pacs_cap *cap);
     155              : 
     156              : /**
     157              :  * @brief Set the location for an endpoint type
     158              :  *
     159              :  * @param dir      Direction of the endpoints to change location for.
     160              :  * @param location The location to be set.
     161              :  *
     162              :  * @return 0 in case of success or negative value in case of error.
     163              :  */
     164            1 : int bt_pacs_set_location(enum bt_audio_dir dir,
     165              :                          enum bt_audio_location location);
     166              : 
     167              : /**
     168              :  * @brief Set the available contexts for an endpoint type
     169              :  *
     170              :  * @param dir      Direction of the endpoints to change available contexts for.
     171              :  * @param contexts The contexts to be set.
     172              :  *
     173              :  * @return 0 in case of success or negative value in case of error.
     174              :  */
     175            1 : int bt_pacs_set_available_contexts(enum bt_audio_dir dir,
     176              :                                    enum bt_audio_context contexts);
     177              : 
     178              : /**
     179              :  * @brief Get the available contexts for an endpoint type
     180              :  *
     181              :  * @param dir      Direction of the endpoints to get contexts for.
     182              :  *
     183              :  * @return Bitmask of available contexts.
     184              :  */
     185            1 : enum bt_audio_context bt_pacs_get_available_contexts(enum bt_audio_dir dir);
     186              : 
     187              : /**
     188              :  * @brief Set the available contexts for a given connection
     189              :  *
     190              :  * This function sets the available contexts value for a given @p conn connection object.
     191              :  * If the @p contexts parameter is NULL the available contexts value is reset to default.
     192              :  * The default value of the available contexts is set using @ref bt_pacs_set_available_contexts
     193              :  * function.
     194              :  * The Available Context Value is reset to default on ACL disconnection.
     195              :  *
     196              :  * @param conn     Connection object.
     197              :  * @param dir      Direction of the endpoints to change available contexts for.
     198              :  * @param contexts The contexts to be set or NULL to reset to default.
     199              :  *
     200              :  * @return 0 in case of success or negative value in case of error.
     201              :  */
     202            1 : int bt_pacs_conn_set_available_contexts_for_conn(struct bt_conn *conn, enum bt_audio_dir dir,
     203              :                                                  enum bt_audio_context *contexts);
     204              : 
     205              : /**
     206              :  * @brief Get the available contexts for a given connection
     207              :  *
     208              :  * This server function returns the available contexts value for a given @p conn connection object.
     209              :  * The value returned is the one set with @ref bt_pacs_conn_set_available_contexts_for_conn function
     210              :  * or the default value set with @ref bt_pacs_set_available_contexts function.
     211              :  *
     212              :  * @param conn     Connection object.
     213              :  * @param dir      Direction of the endpoints to get contexts for.
     214              :  *
     215              :  * @return Bitmask of available contexts.
     216              :  * @retval BT_AUDIO_CONTEXT_TYPE_NONE if @p conn or @p dir are invalid
     217              :  */
     218            1 : enum bt_audio_context bt_pacs_get_available_contexts_for_conn(struct bt_conn *conn,
     219              :                                                               enum bt_audio_dir dir);
     220              : 
     221              : /**
     222              :  * @brief Set the supported contexts for an endpoint type
     223              :  *
     224              :  * @param dir      Direction of the endpoints to change available contexts for.
     225              :  * @param contexts The contexts to be set.
     226              :  *
     227              :  * @return 0 in case of success or negative value in case of error.
     228              :  */
     229            1 : int bt_pacs_set_supported_contexts(enum bt_audio_dir dir,
     230              :                                    enum bt_audio_context contexts);
     231              : 
     232              : #ifdef __cplusplus
     233              : }
     234              : #endif
     235              : 
     236              : /** @} */
     237              : 
     238              : #endif /* ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_PACS_H_ */
        

Generated by: LCOV version 2.0-1