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 #include <stddef.h> 30 #include <stdint.h> 31 32 #include <zephyr/bluetooth/audio/audio.h> 33 #include <zephyr/bluetooth/bluetooth.h> 34 #include <zephyr/bluetooth/uuid.h> 35 #include <zephyr/net_buf.h> 36 #include <zephyr/sys/util.h> 37 #include <zephyr/sys/util_macro.h> 38 39 #ifdef __cplusplus 40 extern "C" { 41 #endif 42 43 /** 44 * @brief Minimum size of the Public Broadcast Announcement 45 * 46 * It contains the Public Broadcast Announcement UUID (2), the Public Broadcast Announcement 47 * features (1) and the metadata length (1) 48 */ 49 #define BT_PBP_MIN_PBA_SIZE (BT_UUID_SIZE_16 + 1 + 1) 50 51 /** Public Broadcast Announcement features */ 52 enum bt_pbp_announcement_feature { 53 /** Broadcast Streams encryption status */ 54 BT_PBP_ANNOUNCEMENT_FEATURE_ENCRYPTION = BIT(0), 55 /** Standard Quality Public Broadcast Audio configuration */ 56 BT_PBP_ANNOUNCEMENT_FEATURE_STANDARD_QUALITY = BIT(1), 57 /** High Quality Public Broadcast Audio configuration */ 58 BT_PBP_ANNOUNCEMENT_FEATURE_HIGH_QUALITY = BIT(2), 59 }; 60 61 /** 62 * @brief Creates a Public Broadcast Announcement based on the information received 63 * in the features parameter. 64 * 65 * @param meta Metadata to be included in the advertising data 66 * @param meta_len Size of the metadata fields to be included in the advertising data 67 * @param features Public Broadcast Announcement features 68 * @param pba_data_buf Pointer to store the PBA advertising data. Buffer size needs to be 69 * meta_len + @ref BT_PBP_MIN_PBA_SIZE. 70 * 71 * @return 0 on success or an appropriate error code. 72 */ 73 int bt_pbp_get_announcement(const uint8_t meta[], size_t meta_len, 74 enum bt_pbp_announcement_feature features, 75 struct net_buf_simple *pba_data_buf); 76 77 /** 78 * @brief Parses the received advertising data corresponding to a Public Broadcast 79 * Announcement. Returns the advertised Public Broadcast Announcement features and metadata. 80 * 81 * @param[in] data Advertising data to be checked 82 * @param[out] features Pointer to public broadcast source features to store the parsed features in 83 * @param[out] meta Pointer to the metadata present in the advertising data 84 * 85 * @return parsed metadata length on success. 86 * @retval -EINVAL if @p data, @p features or @p meta are NULL. 87 * @retval -ENOENT if @p data is not of type @ref BT_DATA_SVC_DATA16 or if the UUID in the service 88 * data is not @ref BT_UUID_PBA. 89 * @retval -EMSGSIZE if @p data is not large enough to contain a PBP announcement. 90 * @retval -EBADMSG if the @p data contains invalid data. 91 */ 92 int bt_pbp_parse_announcement(struct bt_data *data, enum bt_pbp_announcement_feature *features, 93 uint8_t **meta); 94 95 #ifdef __cplusplus 96 } 97 #endif 98 99 /** 100 * @} 101 */ 102 103 #endif /* ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_PBP_ */ 104