18ef7100fSMilanka Ringwald /* 28ef7100fSMilanka Ringwald * Copyright (C) 2016 BlueKitchen GmbH 38ef7100fSMilanka Ringwald * 48ef7100fSMilanka Ringwald * Redistribution and use in source and binary forms, with or without 58ef7100fSMilanka Ringwald * modification, are permitted provided that the following conditions 68ef7100fSMilanka Ringwald * are met: 78ef7100fSMilanka Ringwald * 88ef7100fSMilanka Ringwald * 1. Redistributions of source code must retain the above copyright 98ef7100fSMilanka Ringwald * notice, this list of conditions and the following disclaimer. 108ef7100fSMilanka Ringwald * 2. Redistributions in binary form must reproduce the above copyright 118ef7100fSMilanka Ringwald * notice, this list of conditions and the following disclaimer in the 128ef7100fSMilanka Ringwald * documentation and/or other materials provided with the distribution. 138ef7100fSMilanka Ringwald * 3. Neither the name of the copyright holders nor the names of 148ef7100fSMilanka Ringwald * contributors may be used to endorse or promote products derived 158ef7100fSMilanka Ringwald * from this software without specific prior written permission. 168ef7100fSMilanka Ringwald * 4. Any redistribution, use, or modification is done solely for 178ef7100fSMilanka Ringwald * personal benefit and not for any commercial purpose or for 188ef7100fSMilanka Ringwald * monetary gain. 198ef7100fSMilanka Ringwald * 208ef7100fSMilanka Ringwald * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS 218ef7100fSMilanka Ringwald * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 228ef7100fSMilanka Ringwald * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 23*2fca4dadSMilanka Ringwald * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BLUEKITCHEN 24*2fca4dadSMilanka Ringwald * GMBH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 258ef7100fSMilanka Ringwald * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 268ef7100fSMilanka Ringwald * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 278ef7100fSMilanka Ringwald * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 288ef7100fSMilanka Ringwald * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 298ef7100fSMilanka Ringwald * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 308ef7100fSMilanka Ringwald * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 318ef7100fSMilanka Ringwald * SUCH DAMAGE. 328ef7100fSMilanka Ringwald * 338ef7100fSMilanka Ringwald * Please inquire about commercial licensing options at 348ef7100fSMilanka Ringwald * [email protected] 358ef7100fSMilanka Ringwald * 368ef7100fSMilanka Ringwald */ 378ef7100fSMilanka Ringwald 38fe5a6c4eSMilanka Ringwald /** 39fe5a6c4eSMilanka Ringwald * @title AVDTP Sink 408ef7100fSMilanka Ringwald * 41fe5a6c4eSMilanka Ringwald * Audio/Video Distribution Transport Protocol (AVDTP) Sink is a device that accepts streamed media data. 428ef7100fSMilanka Ringwald * 438ef7100fSMilanka Ringwald */ 448ef7100fSMilanka Ringwald 4580e33422SMatthias Ringwald #ifndef AVDTP_SINK_H 4680e33422SMatthias Ringwald #define AVDTP_SINK_H 478ef7100fSMilanka Ringwald 488ef7100fSMilanka Ringwald #include <stdint.h> 498ef7100fSMilanka Ringwald #include "hci.h" 503311c2d5SMatthias Ringwald #include "classic/avdtp.h" 518ef7100fSMilanka Ringwald 528ef7100fSMilanka Ringwald #if defined __cplusplus 538ef7100fSMilanka Ringwald extern "C" { 548ef7100fSMilanka Ringwald #endif 558ef7100fSMilanka Ringwald 568ef7100fSMilanka Ringwald /* API_START */ 578ef7100fSMilanka Ringwald 588ef7100fSMilanka Ringwald /** 598ef7100fSMilanka Ringwald * @brief Set up AVDTP Sink device. 608ef7100fSMilanka Ringwald */ 6177092f3eSMatthias Ringwald void avdtp_sink_init(void); 628ef7100fSMilanka Ringwald 638ef7100fSMilanka Ringwald // returns avdtp_stream_endpoint_t * 648ef7100fSMilanka Ringwald avdtp_stream_endpoint_t * avdtp_sink_create_stream_endpoint(avdtp_sep_type_t sep_type, avdtp_media_type_t media_type); 658ef7100fSMilanka Ringwald 6617ddf501SMatthias Ringwald /** 6717ddf501SMatthias Ringwald * @brief Unregister stream endpoint and free it's memory 6817ddf501SMatthias Ringwald * @param stream_endpoint created by avdtp_sink_create_stream_endpoint 6917ddf501SMatthias Ringwald */ 7017ddf501SMatthias Ringwald void avdtp_sink_finalize_stream_endpoint(avdtp_stream_endpoint_t * stream_endpoint); 7117ddf501SMatthias Ringwald 728ef7100fSMilanka Ringwald void avdtp_sink_register_media_transport_category(uint8_t seid); 738ef7100fSMilanka Ringwald void avdtp_sink_register_reporting_category(uint8_t seid); 748ef7100fSMilanka Ringwald void avdtp_sink_register_delay_reporting_category(uint8_t seid); 758ef7100fSMilanka Ringwald void avdtp_sink_register_recovery_category(uint8_t seid, uint8_t maximum_recovery_window_size, uint8_t maximum_number_media_packets); 768ef7100fSMilanka Ringwald void avdtp_sink_register_header_compression_category(uint8_t seid, uint8_t back_ch, uint8_t media, uint8_t recovery); 778ef7100fSMilanka Ringwald void avdtp_sink_register_multiplexing_category(uint8_t seid, uint8_t fragmentation); 788ef7100fSMilanka Ringwald 793e6cf581SMatthias Ringwald void avdtp_sink_register_media_codec_category(uint8_t seid, avdtp_media_type_t media_type, avdtp_media_codec_type_t media_codec_type, const uint8_t *media_codec_info, uint16_t media_codec_info_len); 808ef7100fSMilanka Ringwald void avdtp_sink_register_content_protection_category(uint8_t seid, uint16_t cp_type, const uint8_t * cp_type_value, uint8_t cp_type_value_len); 818ef7100fSMilanka Ringwald 828ef7100fSMilanka Ringwald /** 838ef7100fSMilanka Ringwald * @brief Register callback for the AVDTP Sink client. 848ef7100fSMilanka Ringwald * @param callback 858ef7100fSMilanka Ringwald */ 868ef7100fSMilanka Ringwald void avdtp_sink_register_packet_handler(btstack_packet_handler_t callback); 878ef7100fSMilanka Ringwald 888ef7100fSMilanka Ringwald /** 898ef7100fSMilanka Ringwald * @brief Connect to device with a bluetooth address. (and perform configuration?) 908ef7100fSMilanka Ringwald * @param bd_addr 914ccacc40SMilanka Ringwald * @param avdtp_cid Assigned avdtp cid 928ef7100fSMilanka Ringwald */ 934ccacc40SMilanka Ringwald uint8_t avdtp_sink_connect(bd_addr_t bd_addr, uint16_t * avdtp_cid); 948ef7100fSMilanka Ringwald 95fd58c900SMilanka Ringwald void avdtp_sink_register_media_handler(void (*callback)(uint8_t local_seid, uint8_t *packet, uint16_t size)); 968ef7100fSMilanka Ringwald /** 978ef7100fSMilanka Ringwald * @brief Disconnect from device with connection handle. 98f9bca1f3SMilanka Ringwald * @param avdtp_cid 998ef7100fSMilanka Ringwald */ 1004ccacc40SMilanka Ringwald uint8_t avdtp_sink_disconnect(uint16_t avdtp_cid); 1018ef7100fSMilanka Ringwald 1028ef7100fSMilanka Ringwald /** 1038ef7100fSMilanka Ringwald * @brief Discover stream endpoints 104f9bca1f3SMilanka Ringwald * @param avdtp_cid 1058ef7100fSMilanka Ringwald */ 1069974aee0SMilanka Ringwald uint8_t avdtp_sink_discover_stream_endpoints(uint16_t avdtp_cid); 1078ef7100fSMilanka Ringwald 1088ef7100fSMilanka Ringwald /** 1098ef7100fSMilanka Ringwald * @brief Get capabilities 110f9bca1f3SMilanka Ringwald * @param avdtp_cid 1118ef7100fSMilanka Ringwald */ 1129974aee0SMilanka Ringwald uint8_t avdtp_sink_get_capabilities(uint16_t avdtp_cid, uint8_t acp_seid); 1138ef7100fSMilanka Ringwald 1148ef7100fSMilanka Ringwald /** 1158ef7100fSMilanka Ringwald * @brief Get all capabilities 116f9bca1f3SMilanka Ringwald * @param avdtp_cid 1178ef7100fSMilanka Ringwald */ 1189974aee0SMilanka Ringwald uint8_t avdtp_sink_get_all_capabilities(uint16_t avdtp_cid, uint8_t acp_seid); 1198ef7100fSMilanka Ringwald 1208ef7100fSMilanka Ringwald /** 1218ef7100fSMilanka Ringwald * @brief Set configuration 122f9bca1f3SMilanka Ringwald * @param avdtp_cid 1238ef7100fSMilanka Ringwald */ 1249974aee0SMilanka Ringwald uint8_t avdtp_sink_set_configuration(uint16_t avdtp_cid, uint8_t int_seid, uint8_t acp_seid, uint16_t configured_services_bitmap, avdtp_capabilities_t configuration); 1258ef7100fSMilanka Ringwald 1268ef7100fSMilanka Ringwald /** 1278ef7100fSMilanka Ringwald * @brief Reconfigure stream 128f9bca1f3SMilanka Ringwald * @param avdtp_cid 1298ef7100fSMilanka Ringwald * @param seid 1308ef7100fSMilanka Ringwald */ 1319974aee0SMilanka Ringwald uint8_t avdtp_sink_reconfigure(uint16_t avdtp_cid, uint8_t int_seid, uint8_t acp_seid, uint16_t configured_services_bitmap, avdtp_capabilities_t configuration); 1328ef7100fSMilanka Ringwald 1338ef7100fSMilanka Ringwald /** 1348ef7100fSMilanka Ringwald * @brief Get configuration 135f9bca1f3SMilanka Ringwald * @param avdtp_cid 1368ef7100fSMilanka Ringwald */ 1379974aee0SMilanka Ringwald uint8_t avdtp_sink_get_configuration(uint16_t avdtp_cid, uint8_t acp_seid); 1388ef7100fSMilanka Ringwald 1398ef7100fSMilanka Ringwald 1408ef7100fSMilanka Ringwald /** 1418ef7100fSMilanka Ringwald * @brief Open stream 142f9bca1f3SMilanka Ringwald * @param avdtp_cid 1438ef7100fSMilanka Ringwald * @param seid 1448ef7100fSMilanka Ringwald */ 1454ccacc40SMilanka Ringwald uint8_t avdtp_sink_open_stream(uint16_t avdtp_cid, uint8_t int_seid, uint8_t acp_seid); 1468ef7100fSMilanka Ringwald 1478ef7100fSMilanka Ringwald 1488ef7100fSMilanka Ringwald /** 1498ef7100fSMilanka Ringwald * @brief Start stream 15060ec20d0SMilanka Ringwald * @param local_seid 1518ef7100fSMilanka Ringwald */ 1524ccacc40SMilanka Ringwald uint8_t avdtp_sink_start_stream(uint16_t avdtp_cid, uint8_t local_seid); 15360ec20d0SMilanka Ringwald 15460ec20d0SMilanka Ringwald /** 15560ec20d0SMilanka Ringwald * @brief Abort stream 15660ec20d0SMilanka Ringwald * @param local_seid 15760ec20d0SMilanka Ringwald */ 1584ccacc40SMilanka Ringwald uint8_t avdtp_sink_abort_stream(uint16_t avdtp_cid, uint8_t local_seid); 1598ef7100fSMilanka Ringwald 1608ef7100fSMilanka Ringwald /** 1618ef7100fSMilanka Ringwald * @brief Start stream 16260ec20d0SMilanka Ringwald * @param local_seid 1638ef7100fSMilanka Ringwald */ 1644ccacc40SMilanka Ringwald uint8_t avdtp_sink_stop_stream(uint16_t avdtp_cid, uint8_t local_seid); 16560ec20d0SMilanka Ringwald 16660ec20d0SMilanka Ringwald /** 16760ec20d0SMilanka Ringwald * @brief Suspend stream 16860ec20d0SMilanka Ringwald * @param local_seid 16960ec20d0SMilanka Ringwald */ 1704ccacc40SMilanka Ringwald uint8_t avdtp_sink_suspend(uint16_t avdtp_cid, uint8_t local_seid); 1718ef7100fSMilanka Ringwald 17219af95b4SMilanka Ringwald /** 173522706d7SMilanka Ringwald * @brief Report delay 17419af95b4SMilanka Ringwald * @param local_seid 175522706d7SMilanka Ringwald * @param delay_100us 17619af95b4SMilanka Ringwald */ 177522706d7SMilanka Ringwald uint8_t avdtp_sink_delay_report(uint16_t avdtp_cid, uint8_t local_seid, uint16_t delay_100us); 17819af95b4SMilanka Ringwald 17957fb24ffSMatthias Ringwald /** 1806a737fb6SMatthias Ringwald * @brief Register media configuration validator. Can reject insuitable configuration or report stream endpoint as currently busy 1816a737fb6SMatthias Ringwald * @note validator has to return AVDTP error codes like: AVDTP_ERROR_CODE_SEP_IN_USE or AVDTP_ERROR_CODE_UNSUPPORTED_CONFIGURATION 1826a737fb6SMatthias Ringwald * the callback receives the media configuration in the same format as the existing AVDTP_SUBEVENT_SIGNALING_MEDIA_CODEC_SBC_CONFIGURATION 1836a737fb6SMatthias Ringwald * and similar 1846a737fb6SMatthias Ringwald * @param callback 1856a737fb6SMatthias Ringwald */ 1866a737fb6SMatthias Ringwald void avdtp_sink_register_media_config_validator(uint8_t (*callback)(const avdtp_stream_endpoint_t * stream_endpoint, const uint8_t * event, uint16_t size)); 1876a737fb6SMatthias Ringwald 1886a737fb6SMatthias Ringwald /** 18957fb24ffSMatthias Ringwald * @brief De-Init AVDTP Sink. 19057fb24ffSMatthias Ringwald */ 19157fb24ffSMatthias Ringwald void avdtp_sink_deinit(void); 19257fb24ffSMatthias Ringwald 19319af95b4SMilanka Ringwald // AVDTP_SI_DELAYREPORT 19419af95b4SMilanka Ringwald 1958ef7100fSMilanka Ringwald /* API_END */ 1968ef7100fSMilanka Ringwald 1978ef7100fSMilanka Ringwald 1988ef7100fSMilanka Ringwald #if defined __cplusplus 1998ef7100fSMilanka Ringwald } 2008ef7100fSMilanka Ringwald #endif 2018ef7100fSMilanka Ringwald 20280e33422SMatthias Ringwald #endif // AVDTP_SINK_H 203