1 /******************************************************************************
3 * Copyright (C) 2002-2012 Broadcom Corporation
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at:
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 ******************************************************************************/
19 /******************************************************************************
21 * This interface file contains the interface to the Audio Video
22 * Distribution Transport Protocol (AVDTP).
24 ******************************************************************************/
29 #include "bt_target.h"
31 /*****************************************************************************
33 *****************************************************************************/
35 #define AVDT_VERSION 0x0102
37 #define AVDT_VERSION_SYNC 0x0103
39 /* API function return value result codes. */
40 #define AVDT_SUCCESS 0 /* Function successful */
41 #define AVDT_BAD_PARAMS 1 /* Invalid parameters */
42 #define AVDT_NO_RESOURCES 2 /* Not enough resources */
43 #define AVDT_BAD_HANDLE 3 /* Bad handle */
44 #define AVDT_BUSY 4 /* A procedure is already in progress */
45 #define AVDT_WRITE_FAIL 5 /* Write failed */
47 /* The index to access the codec type in codec_info[]. */
48 #define AVDT_CODEC_TYPE_INDEX 2
50 /* The size in bytes of a Adaptation Layer header. */
51 #define AVDT_AL_HDR_SIZE 3
53 /* The size in bytes of a media packet header. */
54 #define AVDT_MEDIA_HDR_SIZE 12
56 /* AVDTP 7.5.3 Adaptation Layer Fragmentation
57 * original length of the un-fragmented transport packet should be specified by
58 * two bytes length field of Adaptation Layer Header */
59 #define AVDT_MAX_MEDIA_SIZE (0xFFFF - AVDT_MEDIA_HDR_SIZE)
61 /* The handle is used when reporting MULTI_AV specific events */
62 #define AVDT_MULTI_AV_HANDLE 0xFF
64 /* The number of bytes needed by the protocol stack for the protocol headers
65 ** of a media packet. This is the size of the media packet header, the
66 ** L2CAP packet header and HCI header.
68 #define AVDT_MEDIA_OFFSET 23
70 /* The marker bit is used by the application to mark significant events such
71 ** as frame boundaries in the data stream. This constant is used to check or
72 ** set the marker bit in the m_pt parameter of an AVDT_WriteReq()
73 ** or AVDT_DATA_IND_EVT.
75 #define AVDT_MARKER_SET 0x80
77 /* SEP Type. This indicates the stream endpoint type. */
78 #define AVDT_TSEP_SRC 0 /* Source SEP */
79 #define AVDT_TSEP_SNK 1 /* Sink SEP */
81 /* initiator/acceptor role for adaption */
82 #define AVDT_INT 0 /* initiator */
83 #define AVDT_ACP 1 /* acceptor */
85 /* Media Type. This indicates the media type of the stream endpoint. */
86 #define AVDT_MEDIA_AUDIO 0 /* Audio SEP */
87 #define AVDT_MEDIA_VIDEO 1 /* Video SEP */
88 #define AVDT_MEDIA_MULTI 2 /* Multimedia SEP */
90 /* for reporting packets */
91 #define AVDT_RTCP_PT_SR 200 /* the packet type - SR (Sender Report) */
92 #define AVDT_RTCP_PT_RR 201 /* the packet type - RR (Receiver Report) */
93 #define AVDT_RTCP_PT_SDES 202 /* the packet type - SDES (Source Description) */
94 typedef UINT8 AVDT_REPORT_TYPE;
96 #define AVDT_RTCP_SDES_CNAME 1 /* SDES item CNAME */
97 #ifndef AVDT_MAX_CNAME_SIZE
98 #define AVDT_MAX_CNAME_SIZE 28
101 /* Protocol service capabilities. This indicates the protocol service
102 ** capabilities of a stream endpoint. This value is a mask.
103 ** Multiple values can be combined with a bitwise OR.
105 #define AVDT_PSC_TRANS (1<<1) /* Media transport */
106 #define AVDT_PSC_REPORT (1<<2) /* Reporting */
107 #define AVDT_PSC_RECOV (1<<3) /* Recovery */
108 #define AVDT_PSC_HDRCMP (1<<5) /* Header compression */
109 #define AVDT_PSC_MUX (1<<6) /* Multiplexing */
110 #define AVDT_PSC_DELAY_RPT (1<<8) /* Delay Report */
112 /* Recovery type. This indicates the recovery type. */
113 #define AVDT_RECOV_RFC2733 1 /* RFC2733 recovery */
115 /* Header compression capabilities. This indicates the header compression
116 ** capabilities. This value is a mask. Multiple values can be combined
117 ** with a bitwise OR.
119 #define AVDT_HDRCMP_MEDIA (1<<5) /* Available for media packets */
120 #define AVDT_HDRCMP_RECOV (1<<6) /* Available for recovery packets */
121 #define AVDT_HDRCMP_BACKCH (1<<7) /* Back channel supported */
123 /* Multiplexing capabilities mask. */
124 #define AVDT_MUX_FRAG (1<<7) /* Allow Adaptation Layer Fragmentation */
126 /* Application service category. This indicates the application
129 #define AVDT_ASC_PROTECT 4 /* Content protection */
130 #define AVDT_ASC_CODEC 7 /* Codec */
132 /* Error codes. The following are error codes defined in the AVDTP and GAVDP
133 ** specifications. These error codes communicate protocol errors between
134 ** AVDTP and the application. More detailed descriptions of the error codes
135 ** and their appropriate use can be found in the AVDTP and GAVDP specifications.
136 ** These error codes are unrelated to the result values returned by the
137 ** AVDTP API functions.
139 #define AVDT_ERR_HEADER 0x01 /* Bad packet header format */
140 #define AVDT_ERR_LENGTH 0x11 /* Bad packet length */
141 #define AVDT_ERR_SEID 0x12 /* Invalid SEID */
142 #define AVDT_ERR_IN_USE 0x13 /* The SEP is in use */
143 #define AVDT_ERR_NOT_IN_USE 0x14 /* The SEP is not in use */
144 #define AVDT_ERR_CATEGORY 0x17 /* Bad service category */
145 #define AVDT_ERR_PAYLOAD 0x18 /* Bad payload format */
146 #define AVDT_ERR_NSC 0x19 /* Requested command not supported */
147 #define AVDT_ERR_INVALID_CAP 0x1A /* Reconfigure attempted invalid capabilities */
148 #define AVDT_ERR_RECOV_TYPE 0x22 /* Requested recovery type not defined */
149 #define AVDT_ERR_MEDIA_TRANS 0x23 /* Media transport capability not correct */
150 #define AVDT_ERR_RECOV_FMT 0x25 /* Recovery service capability not correct */
151 #define AVDT_ERR_ROHC_FMT 0x26 /* Header compression service capability not correct */
152 #define AVDT_ERR_CP_FMT 0x27 /* Content protection service capability not correct */
153 #define AVDT_ERR_MUX_FMT 0x28 /* Multiplexing service capability not correct */
154 #define AVDT_ERR_UNSUP_CFG 0x29 /* Configuration not supported */
155 #define AVDT_ERR_BAD_STATE 0x31 /* Message cannot be processed in this state */
156 #define AVDT_ERR_REPORT_FMT 0x65 /* Report service capability not correct */
157 #define AVDT_ERR_SERVICE 0x80 /* Invalid service category */
158 #define AVDT_ERR_RESOURCE 0x81 /* Insufficient resources */
159 #define AVDT_ERR_INVALID_MCT 0xC1 /* Invalid Media Codec Type */
160 #define AVDT_ERR_UNSUP_MCT 0xC2 /* Unsupported Media Codec Type */
161 #define AVDT_ERR_INVALID_LEVEL 0xC3 /* Invalid Level */
162 #define AVDT_ERR_UNSUP_LEVEL 0xC4 /* Unsupported Level */
163 #define AVDT_ERR_INVALID_CP 0xE0 /* Invalid Content Protection Type */
164 #define AVDT_ERR_INVALID_FORMAT 0xE1 /* Invalid Content Protection format */
166 /* Additional error codes. This indicates error codes used by AVDTP
167 ** in addition to the ones defined in the specifications.
169 #define AVDT_ERR_CONNECT 0x07 /* Connection failed. */
170 #define AVDT_ERR_TIMEOUT 0x08 /* Response timeout. */
172 /* Control callback events. */
173 #define AVDT_DISCOVER_CFM_EVT 0 /* Discover confirm */
174 #define AVDT_GETCAP_CFM_EVT 1 /* Get capabilities confirm */
175 #define AVDT_OPEN_CFM_EVT 2 /* Open confirm */
176 #define AVDT_OPEN_IND_EVT 3 /* Open indication */
177 #define AVDT_CONFIG_IND_EVT 4 /* Configuration indication */
178 #define AVDT_START_CFM_EVT 5 /* Start confirm */
179 #define AVDT_START_IND_EVT 6 /* Start indication */
180 #define AVDT_SUSPEND_CFM_EVT 7 /* Suspend confirm */
181 #define AVDT_SUSPEND_IND_EVT 8 /* Suspend indication */
182 #define AVDT_CLOSE_CFM_EVT 9 /* Close confirm */
183 #define AVDT_CLOSE_IND_EVT 10 /* Close indication */
184 #define AVDT_RECONFIG_CFM_EVT 11 /* Reconfiguration confirm */
185 #define AVDT_RECONFIG_IND_EVT 12 /* Reconfiguration indication */
186 #define AVDT_SECURITY_CFM_EVT 13 /* Security confirm */
187 #define AVDT_SECURITY_IND_EVT 14 /* Security indication */
188 #define AVDT_WRITE_CFM_EVT 15 /* Write confirm */
189 #define AVDT_CONNECT_IND_EVT 16 /* Signaling channel connected */
190 #define AVDT_DISCONNECT_IND_EVT 17 /* Signaling channel disconnected */
191 #define AVDT_REPORT_CONN_EVT 18 /* Reporting channel connected */
192 #define AVDT_REPORT_DISCONN_EVT 19 /* Reporting channel disconnected */
193 #define AVDT_DELAY_REPORT_EVT 20 /* Delay report received */
194 #define AVDT_DELAY_REPORT_CFM_EVT 21 /* Delay report response received */
196 #define AVDT_MAX_EVT (AVDT_DELAY_REPORT_CFM_EVT)
199 #define AVDT_PSM 0x0019
201 /* Nonsupported protocol command messages. This value is used in tAVDT_CS */
202 #define AVDT_NSC_SUSPEND 0x01 /* Suspend command not supported */
203 #define AVDT_NSC_RECONFIG 0x02 /* Reconfigure command not supported */
204 #define AVDT_NSC_SECURITY 0x04 /* Security command not supported */
206 /*****************************************************************************
208 *****************************************************************************/
212 UINT32 ntp_sec; /* NTP time: seconds relative to 0h UTC on 1 January 1900 */
213 UINT32 ntp_frac; /* NTP time: the fractional part */
214 UINT32 rtp_time; /* timestamp in RTP header */
215 UINT32 pkt_count; /* sender's packet count: since starting transmission
216 * up until the time this SR packet was generated. */
217 UINT32 octet_count; /* sender's octet count: same comment */
222 UINT8 frag_lost; /* fraction lost since last RR */
223 UINT32 packet_lost; /* cumulative number of packets lost since the beginning */
224 UINT32 seq_num_rcvd; /* extended highest sequence number received */
225 UINT32 jitter; /* interarrival jitter */
226 UINT32 lsr; /* last SR timestamp */
227 UINT32 dlsr; /* delay since last SR */
232 tAVDT_SENDER_INFO sr;
234 UINT8 cname[AVDT_MAX_CNAME_SIZE + 1];
237 /* This structure contains parameters which are set at registration. */
239 UINT16 ctrl_mtu; /* L2CAP MTU of the AVDTP signaling channel */
240 UINT8 ret_tout; /* AVDTP signaling retransmission timeout */
241 UINT8 sig_tout; /* AVDTP signaling message timeout */
242 UINT8 idle_tout; /* AVDTP idle signaling channel timeout */
243 UINT8 sec_mask; /* Security mask for BTM_SetSecurityLevel() */
246 /* This structure contains the SEP information. This information is
247 ** transferred during the discovery procedure.
250 BOOLEAN in_use; /* TRUE if stream is currently in use */
251 UINT8 seid; /* Stream endpoint identifier */
252 UINT8 media_type; /* Media type */
253 UINT8 tsep; /* SEP type */
256 /* This structure contains the SEP configuration. */
258 UINT8 codec_info[AVDT_CODEC_SIZE]; /* Codec capabilities array */
259 UINT8 protect_info[AVDT_PROTECT_SIZE]; /* Content protection capabilities */
260 UINT8 num_codec; /* Number of media codec information elements */
261 UINT8 num_protect; /* Number of content protection information elements */
262 UINT16 psc_mask; /* Protocol service capabilities mask */
263 UINT8 recov_type; /* Recovery type */
264 UINT8 recov_mrws; /* Maximum recovery window size */
265 UINT8 recov_mnmp; /* Recovery maximum number of media packets */
266 UINT8 hdrcmp_mask; /* Header compression capabilities */
267 #if AVDT_MULTIPLEXING == TRUE
268 UINT8 mux_mask; /* Multiplexing capabilities. AVDT_MUX_XXX bits can be combined with a bitwise OR */
269 UINT8 mux_tsid_media; /* TSID for media transport session */
270 UINT8 mux_tcid_media; /* TCID for media transport session */
271 UINT8 mux_tsid_report; /* TSID for reporting transport session */
272 UINT8 mux_tcid_report; /* TCID for reporting transport session */
273 UINT8 mux_tsid_recov; /* TSID for recovery transport session */
274 UINT8 mux_tcid_recov; /* TCID for recovery transport session */
278 /* Header structure for callback event parameters. */
280 UINT8 err_code; /* Zero if operation succeeded; nonzero if operation failed */
281 UINT8 err_param; /* Error parameter included for some events */
282 UINT8 label; /* Transaction label */
283 UINT8 seid; /* For internal use only */
284 UINT8 sig_id; /* For internal use only */
285 UINT8 ccb_idx; /* For internal use only */
288 /* This data structure is associated with the AVDT_GETCAP_CFM_EVT,
289 ** AVDT_RECONFIG_IND_EVT, and AVDT_RECONFIG_CFM_EVT.
292 tAVDT_EVT_HDR hdr; /* Event header */
293 tAVDT_CFG *p_cfg; /* Pointer to configuration for this SEP */
296 /* This data structure is associated with the AVDT_CONFIG_IND_EVT. */
298 tAVDT_EVT_HDR hdr; /* Event header */
299 tAVDT_CFG *p_cfg; /* Pointer to configuration for this SEP */
300 UINT8 int_seid; /* Stream endpoint ID of stream initiating the operation */
303 /* This data structure is associated with the AVDT_OPEN_IND_EVT and AVDT_OPEN_CFM_EVT. */
305 tAVDT_EVT_HDR hdr; /* Event header */
306 UINT16 peer_mtu; /* Transport channel L2CAP MTU of the peer */
307 UINT16 lcid; /* L2CAP LCID for media channel */
310 /* This data structure is associated with the AVDT_SECURITY_IND_EVT
311 ** and AVDT_SECURITY_CFM_EVT.
314 tAVDT_EVT_HDR hdr; /* Event header */
315 UINT8 *p_data; /* Pointer to security data */
316 UINT16 len; /* Length in bytes of the security data */
319 /* This data structure is associated with the AVDT_DISCOVER_CFM_EVT. */
321 tAVDT_EVT_HDR hdr; /* Event header */
322 tAVDT_SEP_INFO *p_sep_info; /* Pointer to SEP information */
323 UINT8 num_seps; /* Number of stream endpoints */
326 /* This data structure is associated with the AVDT_DELAY_REPORT_EVT. */
328 tAVDT_EVT_HDR hdr; /* Event header */
329 UINT16 delay; /* Delay value */
332 /* Union of all control callback event data structures */
335 tAVDT_DISCOVER discover_cfm;
336 tAVDT_CONFIG getcap_cfm;
339 tAVDT_SETCONFIG config_ind;
340 tAVDT_EVT_HDR start_cfm;
341 tAVDT_EVT_HDR suspend_cfm;
342 tAVDT_EVT_HDR close_cfm;
343 tAVDT_CONFIG reconfig_cfm;
344 tAVDT_CONFIG reconfig_ind;
345 tAVDT_SECURITY security_cfm;
346 tAVDT_SECURITY security_ind;
347 tAVDT_EVT_HDR connect_ind;
348 tAVDT_EVT_HDR disconnect_ind;
349 tAVDT_EVT_HDR report_conn;
350 tAVDT_DELAY_RPT delay_rpt_cmd;
353 /* This is the control callback function. This function passes control events
354 ** to the application. This function is required for all registered stream
355 ** endpoints and for the AVDT_DiscoverReq() and AVDT_GetCapReq() functions.
358 typedef void (tAVDT_CTRL_CBACK)(UINT8 handle, BD_ADDR bd_addr, UINT8 event,
361 /* This is the data callback function. It is executed when AVDTP has a media
362 ** packet ready for the application. This function is required for SNK
363 ** endpoints and not applicable for SRC endpoints.
365 typedef void (tAVDT_DATA_CBACK)(UINT8 handle, BT_HDR *p_pkt, UINT32 time_stamp,
368 #if AVDT_MULTIPLEXING == TRUE
369 /* This is the second version of the data callback function. This version uses
370 ** application buffer assigned by AVDT_SetMediaBuf. Caller can assign different
371 ** buffer during callback or can leave the current buffer for further using.
372 ** This callback is called when AVDTP has a media packet ready for the application.
373 ** This function is required for SNK endpoints and not applicable for SRC endpoints.
375 typedef void (tAVDT_MEDIA_CBACK)(UINT8 handle, UINT8 *p_payload, UINT32 payload_len,
376 UINT32 time_stamp, UINT16 seq_num, UINT8 m_pt, UINT8 marker);
379 #if AVDT_REPORTING == TRUE
380 /* This is the report callback function. It is executed when AVDTP has a reporting
381 ** packet ready for the application. This function is required for streams
382 ** created with AVDT_PSC_REPORT.
384 typedef void (tAVDT_REPORT_CBACK)(UINT8 handle, AVDT_REPORT_TYPE type,
385 tAVDT_REPORT_DATA *p_data);
388 typedef UINT16 (tAVDT_GETCAP_REQ) (BD_ADDR bd_addr, UINT8 seid, tAVDT_CFG *p_cfg, tAVDT_CTRL_CBACK *p_cback);
390 /* This structure contains information required when a stream is created.
391 ** It is passed to the AVDT_CreateStream() function.
394 tAVDT_CFG cfg; /* SEP configuration */
395 tAVDT_CTRL_CBACK *p_ctrl_cback; /* Control callback function */
396 tAVDT_DATA_CBACK *p_data_cback; /* Data callback function */
397 #if AVDT_MULTIPLEXING == TRUE
398 tAVDT_MEDIA_CBACK *p_media_cback; /* Media callback function. It will be called only if p_data_cback is NULL */
400 #if AVDT_REPORTING == TRUE
401 tAVDT_REPORT_CBACK *p_report_cback;/* Report callback function. */
403 UINT16 mtu; /* The L2CAP MTU of the transport channel */
404 UINT16 flush_to; /* The L2CAP flush timeout of the transport channel */
405 UINT8 tsep; /* SEP type */
406 UINT8 media_type; /* Media type */
407 UINT16 nsc_mask; /* Nonsupported protocol command messages */
410 /* AVDT data option mask is used in the write request */
411 #define AVDT_DATA_OPT_NONE 0x00 /* No option still add RTP header */
412 #define AVDT_DATA_OPT_NO_RTP (0x01 << 0) /* Skip adding RTP header */
414 typedef UINT8 tAVDT_DATA_OPT_MASK;
418 /*****************************************************************************
419 ** External Function Declarations
420 *****************************************************************************/
426 /*******************************************************************************
428 ** Function AVDT_Register
430 ** Description This is the system level registration function for the
431 ** AVDTP protocol. This function initializes AVDTP and
432 ** prepares the protocol stack for its use. This function
433 ** must be called once by the system or platform using AVDTP
434 ** before the other functions of the API an be used.
439 *******************************************************************************/
440 extern void AVDT_Register(tAVDT_REG *p_reg, tAVDT_CTRL_CBACK *p_cback);
442 /*******************************************************************************
444 ** Function AVDT_Deregister
446 ** Description This function is called to deregister use AVDTP protocol.
447 ** It is called when AVDTP is no longer being used by any
448 ** application in the system. Before this function can be
449 ** called, all streams must be removed with AVDT_RemoveStream().
454 *******************************************************************************/
455 extern void AVDT_Deregister(void);
458 /*******************************************************************************
460 ** Function AVDT_SINK_Activate
462 ** Description Activate SEP of A2DP Sink. In Use parameter is adjusted.
463 ** In Use will be made false in case of activation. A2DP SRC
464 ** will receive in_use as false and can open A2DP Sink
469 *******************************************************************************/
470 extern void AVDT_SINK_Activate(void);
472 /*******************************************************************************
474 ** Function AVDT_SINK_Deactivate
476 ** Description Deactivate SEP of A2DP Sink. In Use parameter is adjusted.
477 ** In Use will be made TRUE in case of activation. A2DP SRC
478 ** will receive in_use as true and will not open A2DP Sink
483 *******************************************************************************/
484 extern void AVDT_SINK_Deactivate(void);
486 /*******************************************************************************
488 ** Function AVDT_CreateStream
490 ** Description Create a stream endpoint. After a stream endpoint is
491 ** created an application can initiate a connection between
492 ** this endpoint and an endpoint on a peer device. In
493 ** addition, a peer device can discover, get the capabilities,
494 ** and connect to this endpoint.
497 ** Returns AVDT_SUCCESS if successful, otherwise error.
499 *******************************************************************************/
500 extern UINT16 AVDT_CreateStream(UINT8 *p_handle, tAVDT_CS *p_cs);
502 /*******************************************************************************
504 ** Function AVDT_RemoveStream
506 ** Description Remove a stream endpoint. This function is called when
507 ** the application is no longer using a stream endpoint.
508 ** If this function is called when the endpoint is connected
509 ** the connection is closed and then the stream endpoint
513 ** Returns AVDT_SUCCESS if successful, otherwise error.
515 *******************************************************************************/
516 extern UINT16 AVDT_RemoveStream(UINT8 handle);
518 /*******************************************************************************
520 ** Function AVDT_DiscoverReq
522 ** Description This function initiates a connection to the AVDTP service
523 ** on the peer device, if not already present, and discovers
524 ** the stream endpoints on the peer device. (Please note
525 ** that AVDTP discovery is unrelated to SDP discovery).
526 ** This function can be called at any time regardless of whether
527 ** there is an AVDTP connection to the peer device.
529 ** When discovery is complete, an AVDT_DISCOVER_CFM_EVT
530 ** is sent to the application via its callback function.
531 ** The application must not call AVDT_GetCapReq() or
532 ** AVDT_DiscoverReq() again to the same device until
533 ** discovery is complete.
535 ** The memory addressed by sep_info is allocated by the
536 ** application. This memory is written to by AVDTP as part
537 ** of the discovery procedure. This memory must remain
538 ** accessible until the application receives the
539 ** AVDT_DISCOVER_CFM_EVT.
541 ** Returns AVDT_SUCCESS if successful, otherwise error.
543 *******************************************************************************/
544 extern UINT16 AVDT_DiscoverReq(BD_ADDR bd_addr, tAVDT_SEP_INFO *p_sep_info,
545 UINT8 max_seps, tAVDT_CTRL_CBACK *p_cback);
548 /*******************************************************************************
550 ** Function AVDT_GetCapReq
552 ** Description This function initiates a connection to the AVDTP service
553 ** on the peer device, if not already present, and gets the
554 ** capabilities of a stream endpoint on the peer device.
555 ** This function can be called at any time regardless of
556 ** whether there is an AVDTP connection to the peer device.
558 ** When the procedure is complete, an AVDT_GETCAP_CFM_EVT is
559 ** sent to the application via its callback function. The
560 ** application must not call AVDT_GetCapReq() or
561 ** AVDT_DiscoverReq() again until the procedure is complete.
563 ** The memory pointed to by p_cfg is allocated by the
564 ** application. This memory is written to by AVDTP as part
565 ** of the get capabilities procedure. This memory must
566 ** remain accessible until the application receives
567 ** the AVDT_GETCAP_CFM_EVT.
569 ** Returns AVDT_SUCCESS if successful, otherwise error.
571 *******************************************************************************/
572 extern UINT16 AVDT_GetCapReq(BD_ADDR bd_addr, UINT8 seid, tAVDT_CFG *p_cfg,
573 tAVDT_CTRL_CBACK *p_cback);
575 /*******************************************************************************
577 ** Function AVDT_GetAllCapReq
579 ** Description This function initiates a connection to the AVDTP service
580 ** on the peer device, if not already present, and gets the
581 ** capabilities of a stream endpoint on the peer device.
582 ** This function can be called at any time regardless of
583 ** whether there is an AVDTP connection to the peer device.
585 ** When the procedure is complete, an AVDT_GETCAP_CFM_EVT is
586 ** sent to the application via its callback function. The
587 ** application must not call AVDT_GetCapReq() or
588 ** AVDT_DiscoverReq() again until the procedure is complete.
590 ** The memory pointed to by p_cfg is allocated by the
591 ** application. This memory is written to by AVDTP as part
592 ** of the get capabilities procedure. This memory must
593 ** remain accessible until the application receives
594 ** the AVDT_GETCAP_CFM_EVT.
596 ** Returns AVDT_SUCCESS if successful, otherwise error.
598 *******************************************************************************/
599 extern UINT16 AVDT_GetAllCapReq(BD_ADDR bd_addr, UINT8 seid, tAVDT_CFG *p_cfg,
600 tAVDT_CTRL_CBACK *p_cback);
602 /*******************************************************************************
604 ** Function AVDT_DelayReport
606 ** Description This functions sends a Delay Report to the peer device
607 ** that is associated with a particular SEID.
608 ** This function is called by SNK device.
610 ** Returns AVDT_SUCCESS if successful, otherwise error.
612 *******************************************************************************/
613 extern UINT16 AVDT_DelayReport(UINT8 handle, UINT8 seid, UINT16 delay);
615 /*******************************************************************************
617 ** Function AVDT_OpenReq
619 ** Description This function initiates a connection to the AVDTP service
620 ** on the peer device, if not already present, and connects
621 ** to a stream endpoint on a peer device. When the connection
622 ** is completed, an AVDT_OPEN_CFM_EVT is sent to the
623 ** application via the control callback function for this handle.
625 ** Returns AVDT_SUCCESS if successful, otherwise error.
627 *******************************************************************************/
628 extern UINT16 AVDT_OpenReq(UINT8 handle, BD_ADDR bd_addr, UINT8 seid,
632 /*******************************************************************************
634 ** Function AVDT_ConfigRsp
636 ** Description Respond to a configure request from the peer device. This
637 ** function must be called if the application receives an
638 ** AVDT_CONFIG_IND_EVT through its control callback.
641 ** Returns AVDT_SUCCESS if successful, otherwise error.
643 *******************************************************************************/
644 extern UINT16 AVDT_ConfigRsp(UINT8 handle, UINT8 label, UINT8 error_code,
647 /*******************************************************************************
649 ** Function AVDT_StartReq
651 ** Description Start one or more stream endpoints. This initiates the
652 ** transfer of media packets for the streams. All stream
653 ** endpoints must previously be opened. When the streams
654 ** are started, an AVDT_START_CFM_EVT is sent to the
655 ** application via the control callback function for each stream.
658 ** Returns AVDT_SUCCESS if successful, otherwise error.
660 *******************************************************************************/
661 extern UINT16 AVDT_StartReq(UINT8 *p_handles, UINT8 num_handles);
663 /*******************************************************************************
665 ** Function AVDT_SuspendReq
667 ** Description Suspend one or more stream endpoints. This suspends the
668 ** transfer of media packets for the streams. All stream
669 ** endpoints must previously be open and started. When the
670 ** streams are suspended, an AVDT_SUSPEND_CFM_EVT is sent to
671 ** the application via the control callback function for
675 ** Returns AVDT_SUCCESS if successful, otherwise error.
677 *******************************************************************************/
678 extern UINT16 AVDT_SuspendReq(UINT8 *p_handles, UINT8 num_handles);
680 /*******************************************************************************
682 ** Function AVDT_CloseReq
684 ** Description Close a stream endpoint. This stops the transfer of media
685 ** packets and closes the transport channel associated with
686 ** this stream endpoint. When the stream is closed, an
687 ** AVDT_CLOSE_CFM_EVT is sent to the application via the
688 ** control callback function for this handle.
691 ** Returns AVDT_SUCCESS if successful, otherwise error.
693 *******************************************************************************/
694 extern UINT16 AVDT_CloseReq(UINT8 handle);
696 /*******************************************************************************
698 ** Function AVDT_ReconfigReq
700 ** Description Reconfigure a stream endpoint. This allows the application
701 ** to change the codec or content protection capabilities of
702 ** a stream endpoint after it has been opened. This function
703 ** can only be called if the stream is opened but not started
704 ** or if the stream has been suspended. When the procedure
705 ** is completed, an AVDT_RECONFIG_CFM_EVT is sent to the
706 ** application via the control callback function for this handle.
709 ** Returns AVDT_SUCCESS if successful, otherwise error.
711 *******************************************************************************/
712 extern UINT16 AVDT_ReconfigReq(UINT8 handle, tAVDT_CFG *p_cfg);
714 /*******************************************************************************
716 ** Function AVDT_ReconfigRsp
718 ** Description Respond to a reconfigure request from the peer device.
719 ** This function must be called if the application receives
720 ** an AVDT_RECONFIG_IND_EVT through its control callback.
723 ** Returns AVDT_SUCCESS if successful, otherwise error.
725 *******************************************************************************/
726 extern UINT16 AVDT_ReconfigRsp(UINT8 handle, UINT8 label, UINT8 error_code,
729 /*******************************************************************************
731 ** Function AVDT_SecurityReq
733 ** Description Send a security request to the peer device. When the
734 ** security procedure is completed, an AVDT_SECURITY_CFM_EVT
735 ** is sent to the application via the control callback function
736 ** for this handle. (Please note that AVDTP security procedures
737 ** are unrelated to Bluetooth link level security.)
740 ** Returns AVDT_SUCCESS if successful, otherwise error.
742 *******************************************************************************/
743 extern UINT16 AVDT_SecurityReq(UINT8 handle, UINT8 *p_data, UINT16 len);
745 /*******************************************************************************
747 ** Function AVDT_SecurityRsp
749 ** Description Respond to a security request from the peer device.
750 ** This function must be called if the application receives
751 ** an AVDT_SECURITY_IND_EVT through its control callback.
752 ** (Please note that AVDTP security procedures are unrelated
753 ** to Bluetooth link level security.)
756 ** Returns AVDT_SUCCESS if successful, otherwise error.
758 *******************************************************************************/
759 extern UINT16 AVDT_SecurityRsp(UINT8 handle, UINT8 label, UINT8 error_code,
760 UINT8 *p_data, UINT16 len);
762 /*******************************************************************************
764 ** Function AVDT_WriteReq
766 ** Description Send a media packet to the peer device. The stream must
767 ** be started before this function is called. Also, this
768 ** function can only be called if the stream is a SRC.
770 ** When AVDTP has sent the media packet and is ready for the
771 ** next packet, an AVDT_WRITE_CFM_EVT is sent to the
772 ** application via the control callback. The application must
773 ** wait for the AVDT_WRITE_CFM_EVT before it makes the next
774 ** call to AVDT_WriteReq(). If the applications calls
775 ** AVDT_WriteReq() before it receives the event the packet
776 ** will not be sent. The application may make its first call
777 ** to AVDT_WriteReq() after it receives an AVDT_START_CFM_EVT
778 ** or AVDT_START_IND_EVT.
780 ** The application passes the packet using the BT_HDR structure.
781 ** This structure is described in section 2.1. The offset
782 ** field must be equal to or greater than AVDT_MEDIA_OFFSET.
783 ** This allows enough space in the buffer for the L2CAP and
786 ** The memory pointed to by p_pkt must be a GKI buffer
787 ** allocated by the application. This buffer will be freed
788 ** by the protocol stack; the application must not free
792 ** Returns AVDT_SUCCESS if successful, otherwise error.
794 *******************************************************************************/
795 extern UINT16 AVDT_WriteReq(UINT8 handle, BT_HDR *p_pkt, UINT32 time_stamp,
797 /*******************************************************************************
799 ** Function AVDT_WriteReqOpt
801 ** Description Send a media packet to the peer device. The stream must
802 ** be started before this function is called. Also, this
803 ** function can only be called if the stream is a SRC
805 ** When AVDTP has sent the media packet and is ready for the
806 ** next packet, an AVDT_WRITE_CFM_EVT is sent to the
807 ** application via the control callback. The application must
808 ** wait for the AVDT_WRITE_CFM_EVT before it makes the next
809 ** call to AVDT_WriteReq(). If the applications calls
810 ** AVDT_WriteReq() before it receives the event the packet
811 ** will not be sent. The application may make its first call
812 ** to AVDT_WriteReq() after it receives an AVDT_START_CFM_EVT
813 ** or AVDT_START_IND_EVT.
815 ** The application passes the packet using the BT_HDR structure
816 ** This structure is described in section 2.1. The offset
817 ** field must be equal to or greater than AVDT_MEDIA_OFFSET
818 ** (if NO_RTP is specified, L2CAP_MIN_OFFSET can be used)
819 ** This allows enough space in the buffer for the L2CAP and
822 ** The memory pointed to by p_pkt must be a GKI buffer
823 ** allocated by the application. This buffer will be freed
824 ** by the protocol stack; the application must not free
827 ** The opt parameter allows passing specific options like:
828 ** - NO_RTP : do not add the RTP header to buffer
830 ** Returns AVDT_SUCCESS if successful, otherwise error.
832 *******************************************************************************/
833 extern UINT16 AVDT_WriteReqOpt(UINT8 handle, BT_HDR *p_pkt, UINT32 time_stamp,
834 UINT8 m_pt, tAVDT_DATA_OPT_MASK opt);
836 /*******************************************************************************
838 ** Function AVDT_ConnectReq
840 ** Description This function initiates an AVDTP signaling connection
841 ** to the peer device. When the connection is completed, an
842 ** AVDT_CONNECT_IND_EVT is sent to the application via its
843 ** control callback function. If the connection attempt fails
844 ** an AVDT_DISCONNECT_IND_EVT is sent. The security mask
845 ** parameter overrides the outgoing security mask set in
848 ** Returns AVDT_SUCCESS if successful, otherwise error.
850 *******************************************************************************/
851 extern UINT16 AVDT_ConnectReq(BD_ADDR bd_addr, UINT8 sec_mask,
852 tAVDT_CTRL_CBACK *p_cback);
854 /*******************************************************************************
856 ** Function AVDT_DisconnectReq
858 ** Description This function disconnect an AVDTP signaling connection
859 ** to the peer device. When disconnected an
860 ** AVDT_DISCONNECT_IND_EVT is sent to the application via its
861 ** control callback function.
863 ** Returns AVDT_SUCCESS if successful, otherwise error.
865 *******************************************************************************/
866 extern UINT16 AVDT_DisconnectReq(BD_ADDR bd_addr, tAVDT_CTRL_CBACK *p_cback);
868 /*******************************************************************************
870 ** Function AVDT_GetL2CapChannel
872 ** Description Get the L2CAP CID used by the handle.
874 ** Returns CID if successful, otherwise 0.
876 *******************************************************************************/
877 extern UINT16 AVDT_GetL2CapChannel(UINT8 handle);
879 /*******************************************************************************
881 ** Function AVDT_GetSignalChannel
883 ** Description Get the L2CAP CID used by the signal channel of the given handle.
885 ** Returns CID if successful, otherwise 0.
887 *******************************************************************************/
888 extern UINT16 AVDT_GetSignalChannel(UINT8 handle, BD_ADDR bd_addr);
890 /*******************************************************************************
892 ** Function AVDT_WriteDataReq
894 ** Description Send a media packet to the peer device. The stream must
895 ** be started before this function is called. Also, this
896 ** function can only be called if the stream is a SRC.
898 ** When AVDTP has sent the media packet and is ready for the
899 ** next packet, an AVDT_WRITE_CFM_EVT is sent to the
900 ** application via the control callback. The application must
901 ** wait for the AVDT_WRITE_CFM_EVT before it makes the next
902 ** call to AVDT_WriteDataReq(). If the applications calls
903 ** AVDT_WriteDataReq() before it receives the event the packet
904 ** will not be sent. The application may make its first call
905 ** to AVDT_WriteDataReq() after it receives an
906 ** AVDT_START_CFM_EVT or AVDT_START_IND_EVT.
908 ** Returns AVDT_SUCCESS if successful, otherwise error.
910 *******************************************************************************/
911 extern UINT16 AVDT_WriteDataReq(UINT8 handle, UINT8 *p_data, UINT32 data_len,
912 UINT32 time_stamp, UINT8 m_pt, UINT8 marker);
914 /*******************************************************************************
916 ** Function AVDT_SetMediaBuf
918 ** Description Assigns buffer for media packets or forbids using of assigned
919 ** buffer if argument p_buf is NULL. This function can only
920 ** be called if the stream is a SNK.
922 ** AVDTP uses this buffer to reassemble fragmented media packets.
923 ** When AVDTP receives a complete media packet, it calls the
924 ** p_media_cback assigned by AVDT_CreateStream().
925 ** This function can be called during callback to assign a
926 ** different buffer for next media packet or can leave the current
927 ** buffer for next packet.
929 ** Returns AVDT_SUCCESS if successful, otherwise error.
931 *******************************************************************************/
932 extern UINT16 AVDT_SetMediaBuf(UINT8 handle, UINT8 *p_buf, UINT32 buf_len);
934 /*******************************************************************************
936 ** Function AVDT_SendReport
944 *******************************************************************************/
945 extern UINT16 AVDT_SendReport(UINT8 handle, AVDT_REPORT_TYPE type,
946 tAVDT_REPORT_DATA *p_data);
948 /******************************************************************************
950 ** Function AVDT_SetTraceLevel
952 ** Description Sets the trace level for AVDT. If 0xff is passed, the
953 ** current trace level is returned.
956 ** new_level: The level to set the AVDT tracing to:
957 ** 0xff-returns the current setting.
958 ** 0-turns off tracing.
965 ** Returns The new trace level or current trace level if
966 ** the input parameter is 0xff.
968 ******************************************************************************/
969 extern UINT8 AVDT_SetTraceLevel (UINT8 new_level);
976 #endif /* AVDT_API_H */