1 /* 2 * avdtp_internal.h - avdtp handling 3 4 * Copyright (c) 2015-2016 Intel Corporation 5 * Copyright 2021,2024 NXP 6 * 7 * SPDX-License-Identifier: Apache-2.0 8 */ 9 10 #include <zephyr/bluetooth/classic/avdtp.h> 11 12 /* @brief A2DP ROLE's */ 13 #define A2DP_SRC_ROLE 0x00 14 #define A2DP_SNK_ROLE 0x01 15 16 /* @brief AVDTP Role */ 17 #define BT_AVDTP_INT 0x00 18 #define BT_AVDTP_ACP 0x01 19 20 #define BT_L2CAP_PSM_AVDTP 0x0019 21 22 /* AVDTP SIGNAL HEADER - Packet Type*/ 23 #define BT_AVDTP_PACKET_TYPE_SINGLE 0x00 24 #define BT_AVDTP_PACKET_TYPE_START 0x01 25 #define BT_AVDTP_PACKET_TYPE_CONTINUE 0x02 26 #define BT_AVDTP_PACKET_TYPE_END 0x03 27 28 /* AVDTP SIGNAL HEADER - MESSAGE TYPE */ 29 #define BT_AVDTP_CMD 0x00 30 #define BT_AVDTP_GEN_REJECT 0x01 31 #define BT_AVDTP_ACCEPT 0x02 32 #define BT_AVDTP_REJECT 0x03 33 34 /* @brief AVDTP SIGNAL HEADER - Signal Identifier */ 35 #define BT_AVDTP_DISCOVER 0x01 36 #define BT_AVDTP_GET_CAPABILITIES 0x02 37 #define BT_AVDTP_SET_CONFIGURATION 0x03 38 #define BT_AVDTP_GET_CONFIGURATION 0x04 39 #define BT_AVDTP_RECONFIGURE 0x05 40 #define BT_AVDTP_OPEN 0x06 41 #define BT_AVDTP_START 0x07 42 #define BT_AVDTP_CLOSE 0x08 43 #define BT_AVDTP_SUSPEND 0x09 44 #define BT_AVDTP_ABORT 0x0a 45 #define BT_AVDTP_SECURITY_CONTROL 0x0b 46 #define BT_AVDTP_GET_ALL_CAPABILITIES 0x0c 47 #define BT_AVDTP_DELAYREPORT 0x0d 48 49 /* @brief AVDTP STREAM STATE */ 50 #define BT_AVDTP_STREAM_STATE_IDLE 0x01 51 #define BT_AVDTP_STREAM_STATE_CONFIGURED 0x02 52 #define BT_AVDTP_STREAM_STATE_OPEN 0x03 53 #define BT_AVDTP_STREAM_STATE_STREAMING 0x04 54 #define BT_AVDTP_STREAM_STATE_CLOSING 0x05 55 56 /* @brief AVDTP Media TYPE */ 57 #define BT_AVDTP_SERVICE_CAT_MEDIA_TRANSPORT 0x01 58 #define BT_AVDTP_SERVICE_CAT_REPORTING 0x02 59 #define BT_AVDTP_SERVICE_CAT_RECOVERY 0x03 60 #define BT_AVDTP_SERVICE_CAT_CONTENT_PROTECTION 0x04 61 #define BT_AVDTP_SERVICE_CAT_HDR_COMPRESSION 0x05 62 #define BT_AVDTP_SERVICE_CAT_MULTIPLEXING 0x06 63 #define BT_AVDTP_SERVICE_CAT_MEDIA_CODEC 0x07 64 #define BT_AVDTP_SERVICE_CAT_DELAYREPORTING 0x08 65 66 /* AVDTP Error Codes */ 67 #define BT_AVDTP_SUCCESS 0x00 68 #define BT_AVDTP_ERR_BAD_HDR_FORMAT 0x01 69 #define BT_AVDTP_ERR_BAD_LENGTH 0x11 70 #define BT_AVDTP_ERR_BAD_ACP_SEID 0x12 71 #define BT_AVDTP_ERR_SEP_IN_USE 0x13 72 #define BT_AVDTP_ERR_SEP_NOT_IN_USE 0x14 73 #define BT_AVDTP_ERR_BAD_SERV_CATEGORY 0x17 74 #define BT_AVDTP_ERR_BAD_PAYLOAD_FORMAT 0x18 75 #define BT_AVDTP_ERR_NOT_SUPPORTED_COMMAND 0x19 76 #define BT_AVDTP_ERR_INVALID_CAPABILITIES 0x1a 77 #define BT_AVDTP_ERR_BAD_RECOVERY_TYPE 0x22 78 #define BT_AVDTP_ERR_BAD_MEDIA_TRANSPORT_FORMAT 0x23 79 #define BT_AVDTP_ERR_BAD_RECOVERY_FORMAT 0x25 80 #define BT_AVDTP_ERR_BAD_ROHC_FORMAT 0x26 81 #define BT_AVDTP_ERR_BAD_CP_FORMAT 0x27 82 #define BT_AVDTP_ERR_BAD_MULTIPLEXING_FORMAT 0x28 83 #define BT_AVDTP_ERR_UNSUPPORTED_CONFIGURAION 0x29 84 #define BT_AVDTP_ERR_BAD_STATE 0x31 85 86 #define BT_AVDTP_MIN_SEID 0x01 87 #define BT_AVDTP_MAX_SEID 0x3E 88 89 #define BT_AVDTP_RTP_VERSION 2 90 91 struct bt_avdtp; 92 struct bt_avdtp_req; 93 struct bt_avdtp_sep_info; 94 95 /** @brief AVDTP SEID Information AVDTP_SPEC V13 Table 8.8 */ 96 struct bt_avdtp_sep_data { 97 #ifdef CONFIG_LITTLE_ENDIAN 98 uint8_t rfa0: 1; 99 uint8_t inuse: 1; 100 uint8_t id: 6; 101 uint8_t rfa1: 3; 102 uint8_t tsep: 1; 103 uint8_t media_type: 4; 104 #else 105 uint8_t id: 6; 106 uint8_t inuse: 1; 107 uint8_t rfa0: 1; 108 uint8_t media_type: 4; 109 uint8_t tsep: 1; 110 uint8_t rfa1: 3; 111 #endif 112 } __packed; 113 114 typedef int (*bt_avdtp_func_t)(struct bt_avdtp_req *req, struct net_buf *buf); 115 116 struct bt_avdtp_req { 117 uint8_t sig; 118 uint8_t tid; 119 uint8_t status; 120 bt_avdtp_func_t func; 121 }; 122 123 struct bt_avdtp_single_sig_hdr { 124 uint8_t hdr; 125 uint8_t signal_id; 126 } __packed; 127 128 struct bt_avdtp_media_hdr { 129 #ifdef CONFIG_LITTLE_ENDIAN 130 uint8_t CSRC_count: 4; 131 uint8_t header_extension: 1; 132 uint8_t padding: 1; 133 uint8_t RTP_version: 2; 134 uint8_t playload_type: 7; 135 uint8_t marker: 1; 136 #else 137 uint8_t RTP_version: 2; 138 uint8_t padding: 1; 139 uint8_t header_extension: 1; 140 uint8_t CSRC_count: 4; 141 uint8_t marker: 1; 142 uint8_t playload_type: 7; 143 #endif 144 uint16_t sequence_number; 145 uint32_t time_stamp; 146 uint32_t synchronization_source; 147 } __packed; 148 149 struct bt_avdtp_discover_params { 150 struct bt_avdtp_req req; 151 }; 152 153 struct bt_avdtp_get_capabilities_params { 154 struct bt_avdtp_req req; 155 uint8_t stream_endpoint_id; 156 }; 157 158 struct bt_avdtp_set_configuration_params { 159 struct bt_avdtp_req req; 160 struct bt_avdtp_sep *sep; 161 uint8_t acp_stream_ep_id; 162 uint8_t int_stream_endpoint_id; 163 uint8_t media_type; 164 uint8_t media_codec_type; 165 uint8_t codec_specific_ie_len; 166 uint8_t *codec_specific_ie; 167 }; 168 169 /* avdtp_open, avdtp_close, avdtp_start, avdtp_suspend */ 170 struct bt_avdtp_ctrl_params { 171 struct bt_avdtp_req req; 172 struct bt_avdtp_sep *sep; 173 uint8_t acp_stream_ep_id; 174 }; 175 176 struct bt_avdtp_ops_cb { 177 void (*connected)(struct bt_avdtp *session); 178 179 void (*disconnected)(struct bt_avdtp *session); 180 181 struct net_buf *(*alloc_buf)(struct bt_avdtp *session); 182 183 int (*discovery_ind)(struct bt_avdtp *session, uint8_t *errcode); 184 185 int (*get_capabilities_ind)(struct bt_avdtp *session, struct bt_avdtp_sep *sep, 186 struct net_buf *rsp_buf, uint8_t *errcode); 187 188 int (*set_configuration_ind)(struct bt_avdtp *session, struct bt_avdtp_sep *sep, 189 uint8_t int_seid, struct net_buf *buf, uint8_t *errcode); 190 191 int (*re_configuration_ind)(struct bt_avdtp *session, struct bt_avdtp_sep *sep, 192 uint8_t int_seid, struct net_buf *buf, uint8_t *errcode); 193 194 int (*open_ind)(struct bt_avdtp *session, struct bt_avdtp_sep *sep, uint8_t *errcode); 195 196 int (*close_ind)(struct bt_avdtp *session, struct bt_avdtp_sep *sep, uint8_t *errcode); 197 198 int (*start_ind)(struct bt_avdtp *session, struct bt_avdtp_sep *sep, uint8_t *errcode); 199 200 int (*suspend_ind)(struct bt_avdtp *session, struct bt_avdtp_sep *sep, uint8_t *errcode); 201 202 int (*abort_ind)(struct bt_avdtp *session, struct bt_avdtp_sep *sep, uint8_t *errcode); 203 204 /* stream l2cap is closed */ 205 int (*stream_l2cap_disconnected)(struct bt_avdtp *session, struct bt_avdtp_sep *sep); 206 }; 207 208 /** @brief Global AVDTP session structure. */ 209 struct bt_avdtp { 210 struct bt_l2cap_br_chan br_chan; 211 struct bt_avdtp_req *req; 212 const struct bt_avdtp_ops_cb *ops; 213 struct bt_avdtp_sep *current_sep; 214 struct k_work_delayable timeout_work; 215 /* semaphore for lock/unlock */ 216 struct k_sem sem_lock; 217 }; 218 219 struct bt_avdtp_event_cb { 220 int (*accept)(struct bt_conn *conn, struct bt_avdtp **session); 221 }; 222 223 /* Initialize AVDTP layer*/ 224 int bt_avdtp_init(void); 225 226 /* Application register with AVDTP layer */ 227 int bt_avdtp_register(struct bt_avdtp_event_cb *cb); 228 229 /* AVDTP connect */ 230 int bt_avdtp_connect(struct bt_conn *conn, struct bt_avdtp *session); 231 232 /* AVDTP disconnect */ 233 int bt_avdtp_disconnect(struct bt_avdtp *session); 234 235 /* AVDTP SEP register function */ 236 int bt_avdtp_register_sep(uint8_t media_type, uint8_t sep_type, struct bt_avdtp_sep *sep); 237 238 /* AVDTP Discover Request */ 239 int bt_avdtp_discover(struct bt_avdtp *session, struct bt_avdtp_discover_params *param); 240 241 /* Parse the sep of discovered result */ 242 int bt_avdtp_parse_sep(struct net_buf *buf, struct bt_avdtp_sep_info *sep_info); 243 244 /* AVDTP Get Capabilities */ 245 int bt_avdtp_get_capabilities(struct bt_avdtp *session, 246 struct bt_avdtp_get_capabilities_params *param); 247 248 /* Parse the codec type of capabilities */ 249 int bt_avdtp_parse_capability_codec(struct net_buf *buf, uint8_t *codec_type, 250 uint8_t **codec_info_element, uint16_t *codec_info_element_len); 251 252 /* AVDTP Set Configuration */ 253 int bt_avdtp_set_configuration(struct bt_avdtp *session, 254 struct bt_avdtp_set_configuration_params *param); 255 256 /* AVDTP reconfigure */ 257 int bt_avdtp_reconfigure(struct bt_avdtp *session, struct bt_avdtp_set_configuration_params *param); 258 259 /* AVDTP OPEN */ 260 int bt_avdtp_open(struct bt_avdtp *session, struct bt_avdtp_ctrl_params *param); 261 262 /* AVDTP CLOSE */ 263 int bt_avdtp_close(struct bt_avdtp *session, struct bt_avdtp_ctrl_params *param); 264 265 /* AVDTP START */ 266 int bt_avdtp_start(struct bt_avdtp *session, struct bt_avdtp_ctrl_params *param); 267 268 /* AVDTP SUSPEND */ 269 int bt_avdtp_suspend(struct bt_avdtp *session, struct bt_avdtp_ctrl_params *param); 270 271 /* AVDTP ABORT */ 272 int bt_avdtp_abort(struct bt_avdtp *session, struct bt_avdtp_ctrl_params *param); 273 274 /* AVDTP send data */ 275 int bt_avdtp_send_media_data(struct bt_avdtp_sep *sep, struct net_buf *buf); 276 277 /* get media l2cap connection MTU */ 278 uint32_t bt_avdtp_get_media_mtu(struct bt_avdtp_sep *sep); 279