1 /** 2 * @file 3 * @brief Public Broadcast Profile (PBP) APIs. 4 */ 5 /* 6 * Copyright 2023 NXP 7 * Copyright (c) 2024 Nordic Semiconductor ASA 8 * 9 * SPDX-License-Identifier: Apache-2.0 10 */ 11 12 #ifndef ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_PBP_ 13 #define ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_PBP_ 14 15 /** 16 * @brief Public Broadcast Profile (PBP) 17 * 18 * @defgroup bt_pbp Public Broadcast Profile (PBP) 19 * 20 * @since 3.5 21 * @version 0.8.0 22 * 23 * @ingroup bluetooth 24 * @{ 25 * 26 * The Public Broadcast Profile (PBP) is used for public broadcasts by providing additional 27 * information in the advertising data. 28 */ 29 30 #include <zephyr/bluetooth/audio/audio.h> 31 #include <zephyr/bluetooth/bluetooth.h> 32 #include <zephyr/bluetooth/uuid.h> 33 #include <zephyr/net/buf.h> 34 #include <zephyr/sys/util.h> 35 #include <zephyr/sys/util_macro.h> 36 37 #ifdef __cplusplus 38 extern "C" { 39 #endif 40 41 /** 42 * @brief Minimum size of the Public Broadcast Announcement 43 * 44 * It contains the Public Broadcast Announcement UUID (2), the Public Broadcast Announcement 45 * features (1) and the metadata length (1) 46 */ 47 #define BT_PBP_MIN_PBA_SIZE (BT_UUID_SIZE_16 + 1 + 1) 48 49 /** Public Broadcast Announcement features */ 50 enum bt_pbp_announcement_feature { 51 /** Broadcast Streams encryption status */ 52 BT_PBP_ANNOUNCEMENT_FEATURE_ENCRYPTION = BIT(0), 53 /** Standard Quality Public Broadcast Audio configuration */ 54 BT_PBP_ANNOUNCEMENT_FEATURE_STANDARD_QUALITY = BIT(1), 55 /** High Quality Public Broadcast Audio configuration */ 56 BT_PBP_ANNOUNCEMENT_FEATURE_HIGH_QUALITY = BIT(2), 57 }; 58 59 /** 60 * @brief Creates a Public Broadcast Announcement based on the information received 61 * in the features parameter. 62 * 63 * @param meta Metadata to be included in the advertising data 64 * @param meta_len Size of the metadata fields to be included in the advertising data 65 * @param features Public Broadcast Announcement features 66 * @param pba_data_buf Pointer to store the PBA advertising data. Buffer size needs to be 67 * meta_len + @ref BT_PBP_MIN_PBA_SIZE. 68 * 69 * @return 0 on success or an appropriate error code. 70 */ 71 int bt_pbp_get_announcement(const uint8_t meta[], size_t meta_len, 72 enum bt_pbp_announcement_feature features, 73 struct net_buf_simple *pba_data_buf); 74 75 /** 76 * @brief Parses the received advertising data corresponding to a Public Broadcast 77 * Announcement. Returns the advertised Public Broadcast Announcement features and metadata. 78 * 79 * @param[in] data Advertising data to be checked 80 * @param[out] features Pointer to public broadcast source features to store the parsed features in 81 * @param[out] meta Pointer to the metadata present in the advertising data 82 * 83 * @return parsed metadata length on success. 84 * @retval -EINVAL if @p data, @p features or @p meta are NULL. 85 * @retval -ENOENT if @p data is not of type @ref BT_DATA_SVC_DATA16 or if the UUID in the service 86 * data is not @ref BT_UUID_PBA. 87 * @retval -EMSGSIZE if @p data is not large enough to contain a PBP announcement. 88 * @retval -EBADMSG if the @p data contains invalid data. 89 */ 90 int bt_pbp_parse_announcement(struct bt_data *data, enum bt_pbp_announcement_feature *features, 91 uint8_t **meta); 92 93 #ifdef __cplusplus 94 } 95 #endif 96 97 /** 98 * @} 99 */ 100 101 #endif /* ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_PBP_ */ 102