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 238ef7100fSMilanka Ringwald * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS 248ef7100fSMilanka Ringwald * RINGWALD 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 388ef7100fSMilanka Ringwald /* 398ef7100fSMilanka Ringwald * avdtp_source.h 408ef7100fSMilanka Ringwald * 418ef7100fSMilanka Ringwald * Audio/Video Distribution Transport Protocol Source 428ef7100fSMilanka Ringwald * 438ef7100fSMilanka Ringwald * AVDTP Source is a device that streames media data. 448ef7100fSMilanka Ringwald */ 458ef7100fSMilanka Ringwald 4680e33422SMatthias Ringwald #ifndef AVDTP_SOURCE_H 4780e33422SMatthias Ringwald #define AVDTP_SOURCE_H 488ef7100fSMilanka Ringwald 498ef7100fSMilanka Ringwald #include <stdint.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 588d93ed25SMilanka Ringwald /** 598d93ed25SMilanka Ringwald * @brief Register media transport category with local stream endpoint identified by seid 608d93ed25SMilanka Ringwald * @param seid 618d93ed25SMilanka Ringwald */ 62747ec646SMilanka Ringwald void avdtp_source_register_media_transport_category(uint8_t seid); 638d93ed25SMilanka Ringwald 648d93ed25SMilanka Ringwald /** 658d93ed25SMilanka Ringwald * @brief Register reporting category with local stream endpoint identified by seid 668d93ed25SMilanka Ringwald * @param seid 678d93ed25SMilanka Ringwald */ 68747ec646SMilanka Ringwald void avdtp_source_register_reporting_category(uint8_t seid); 698d93ed25SMilanka Ringwald 708d93ed25SMilanka Ringwald /** 718d93ed25SMilanka Ringwald * @brief Register delay reporting category with local stream endpoint identified by seid 728d93ed25SMilanka Ringwald * @param seid 738d93ed25SMilanka Ringwald */ 74747ec646SMilanka Ringwald void avdtp_source_register_delay_reporting_category(uint8_t seid); 758d93ed25SMilanka Ringwald 768d93ed25SMilanka Ringwald /** 778d93ed25SMilanka Ringwald * @brief Register recovery category with local stream endpoint identified by seid 788d93ed25SMilanka Ringwald * @param seid 798d93ed25SMilanka Ringwald * @param maximum_recovery_window_size 808d93ed25SMilanka Ringwald * @param maximum_number_media_packets 818d93ed25SMilanka Ringwald */ 82747ec646SMilanka Ringwald void avdtp_source_register_recovery_category(uint8_t seid, uint8_t maximum_recovery_window_size, uint8_t maximum_number_media_packets); 838d93ed25SMilanka Ringwald 848d93ed25SMilanka Ringwald /** 858d93ed25SMilanka Ringwald * @brief Register content protection category with local stream endpoint identified by seid 868d93ed25SMilanka Ringwald * @param seid 878d93ed25SMilanka Ringwald * @param cp_type 888d93ed25SMilanka Ringwald * @param cp_type_value 898d93ed25SMilanka Ringwald * @param cp_type_value_len 908d93ed25SMilanka Ringwald */ 91747ec646SMilanka Ringwald void avdtp_source_register_content_protection_category(uint8_t seid, uint16_t cp_type, const uint8_t * cp_type_value, uint8_t cp_type_value_len); 928d93ed25SMilanka Ringwald 938d93ed25SMilanka Ringwald /** 948d93ed25SMilanka Ringwald * @brief Register header compression category with local stream endpoint identified by seid 958d93ed25SMilanka Ringwald * @param seid 968d93ed25SMilanka Ringwald * @param back_ch 978d93ed25SMilanka Ringwald * @param media 988d93ed25SMilanka Ringwald * @param recovery 998d93ed25SMilanka Ringwald */ 100747ec646SMilanka Ringwald void avdtp_source_register_header_compression_category(uint8_t seid, uint8_t back_ch, uint8_t media, uint8_t recovery); 1018d93ed25SMilanka Ringwald 1028d93ed25SMilanka Ringwald /** 1038d93ed25SMilanka Ringwald * @brief Register media codec category with local stream endpoint identified by seid 1048d93ed25SMilanka Ringwald * @param seid 1058d93ed25SMilanka Ringwald * @param media_type 1068d93ed25SMilanka Ringwald * @param media_codec_type 1078d93ed25SMilanka Ringwald * @param media_codec_info 1088d93ed25SMilanka Ringwald * @param media_codec_info_len 1098d93ed25SMilanka Ringwald */ 11078d08d09SMilanka Ringwald void avdtp_source_register_media_codec_category(uint8_t seid, avdtp_media_type_t media_type, avdtp_media_codec_type_t media_codec_type, uint8_t * media_codec_info, uint16_t media_codec_info_len); 1118d93ed25SMilanka Ringwald 1128d93ed25SMilanka Ringwald /** 1138d93ed25SMilanka Ringwald * @brief Register multiplexing category with local stream endpoint identified by seid 1148d93ed25SMilanka Ringwald * @param seid 1158d93ed25SMilanka Ringwald * @param fragmentation 1168d93ed25SMilanka Ringwald */ 117747ec646SMilanka Ringwald void avdtp_source_register_multiplexing_category(uint8_t seid, uint8_t fragmentation); 118747ec646SMilanka Ringwald 1198d93ed25SMilanka Ringwald /** 1208d93ed25SMilanka Ringwald * @brief Initialize up AVDTP Source device. 1218d93ed25SMilanka Ringwald */ 12277092f3eSMatthias Ringwald void avdtp_source_init(void); 1238d93ed25SMilanka Ringwald 1248d93ed25SMilanka Ringwald /** 1258d93ed25SMilanka Ringwald * @brief Register callback for the AVDTP Source client. See btstack_defines.h for AVDTP_SUBEVENT_* events 1268d93ed25SMilanka Ringwald * 1278d93ed25SMilanka Ringwald * @param callback 1288d93ed25SMilanka Ringwald */ 129747ec646SMilanka Ringwald void avdtp_source_register_packet_handler(btstack_packet_handler_t callback); 130747ec646SMilanka Ringwald 131747ec646SMilanka Ringwald /** 132747ec646SMilanka Ringwald * @brief Connect to device with a bluetooth address. (and perform configuration?) 133747ec646SMilanka Ringwald * @param bd_addr 1344ccacc40SMilanka Ringwald * @param avdtp_cid Assigned avdtp cid 1358d93ed25SMilanka Ringwald * @return status ERROR_CODE_SUCCESS if succesful, otherwise BTSTACK_MEMORY_ALLOC_FAILED, SDP_QUERY_BUSY 136747ec646SMilanka Ringwald */ 1374ccacc40SMilanka Ringwald uint8_t avdtp_source_connect(bd_addr_t bd_addr, uint16_t * avdtp_cid); 138747ec646SMilanka Ringwald 139747ec646SMilanka Ringwald /** 140747ec646SMilanka Ringwald * @brief Disconnect from device with connection handle. 141f9bca1f3SMilanka Ringwald * @param avdtp_cid 14223edb87eSMilanka Ringwald * @return status ERROR_CODE_SUCCESS if succesful, otherwise ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER 143747ec646SMilanka Ringwald */ 1444ccacc40SMilanka Ringwald uint8_t avdtp_source_disconnect(uint16_t avdtp_cid); 145747ec646SMilanka Ringwald 146747ec646SMilanka Ringwald /** 147747ec646SMilanka Ringwald * @brief Discover stream endpoints 148f9bca1f3SMilanka Ringwald * @param avdtp_cid 14923edb87eSMilanka Ringwald * @return status ERROR_CODE_SUCCESS if succesful, otherwise ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER, ERROR_CODE_COMMAND_DISALLOWED 150747ec646SMilanka Ringwald */ 1519974aee0SMilanka Ringwald uint8_t avdtp_source_discover_stream_endpoints(uint16_t avdtp_cid); 152747ec646SMilanka Ringwald 153747ec646SMilanka Ringwald /** 154747ec646SMilanka Ringwald * @brief Get capabilities 155f9bca1f3SMilanka Ringwald * @param avdtp_cid 15623edb87eSMilanka Ringwald * @return status ERROR_CODE_SUCCESS if succesful, otherwise ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER, ERROR_CODE_COMMAND_DISALLOWED 157747ec646SMilanka Ringwald */ 1589974aee0SMilanka Ringwald uint8_t avdtp_source_get_capabilities(uint16_t avdtp_cid, uint8_t acp_seid); 159747ec646SMilanka Ringwald 160747ec646SMilanka Ringwald /** 161747ec646SMilanka Ringwald * @brief Get all capabilities 162f9bca1f3SMilanka Ringwald * @param avdtp_cid 16323edb87eSMilanka Ringwald * @return status ERROR_CODE_SUCCESS if succesful, otherwise ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER, ERROR_CODE_COMMAND_DISALLOWED 164747ec646SMilanka Ringwald */ 1659974aee0SMilanka Ringwald uint8_t avdtp_source_get_all_capabilities(uint16_t avdtp_cid, uint8_t acp_seid); 166747ec646SMilanka Ringwald 167747ec646SMilanka Ringwald /** 168747ec646SMilanka Ringwald * @brief Set configuration 169f9bca1f3SMilanka Ringwald * @param avdtp_cid 17023edb87eSMilanka Ringwald * @return status ERROR_CODE_SUCCESS if succesful, otherwise ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER, ERROR_CODE_COMMAND_DISALLOWED 171747ec646SMilanka Ringwald */ 1729974aee0SMilanka Ringwald uint8_t avdtp_source_set_configuration(uint16_t avdtp_cid, uint8_t int_seid, uint8_t acp_seid, uint16_t configured_services_bitmap, avdtp_capabilities_t configuration); 173747ec646SMilanka Ringwald 174747ec646SMilanka Ringwald /** 175747ec646SMilanka Ringwald * @brief Reconfigure stream 176f9bca1f3SMilanka Ringwald * @param avdtp_cid 177747ec646SMilanka Ringwald * @param seid 17823edb87eSMilanka Ringwald * @return status ERROR_CODE_SUCCESS if succesful, otherwise ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER, ERROR_CODE_COMMAND_DISALLOWED 179747ec646SMilanka Ringwald */ 1809974aee0SMilanka Ringwald uint8_t avdtp_source_reconfigure(uint16_t avdtp_cid, uint8_t int_seid, uint8_t acp_seid, uint16_t configured_services_bitmap, avdtp_capabilities_t configuration); 181747ec646SMilanka Ringwald 182747ec646SMilanka Ringwald /** 183747ec646SMilanka Ringwald * @brief Get configuration 184f9bca1f3SMilanka Ringwald * @param avdtp_cid 18523edb87eSMilanka Ringwald * @return status ERROR_CODE_SUCCESS if succesful, otherwise ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER, ERROR_CODE_COMMAND_DISALLOWED 186747ec646SMilanka Ringwald */ 1879974aee0SMilanka Ringwald uint8_t avdtp_source_get_configuration(uint16_t avdtp_cid, uint8_t acp_seid); 188747ec646SMilanka Ringwald 189747ec646SMilanka Ringwald 190747ec646SMilanka Ringwald /** 191747ec646SMilanka Ringwald * @brief Open stream 192f9bca1f3SMilanka Ringwald * @param avdtp_cid 193747ec646SMilanka Ringwald * @param seid 19423edb87eSMilanka Ringwald * @return status ERROR_CODE_SUCCESS if succesful, otherwise ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER, ERROR_CODE_COMMAND_DISALLOWED 195747ec646SMilanka Ringwald */ 1964ccacc40SMilanka Ringwald uint8_t avdtp_source_open_stream(uint16_t avdtp_cid, uint8_t int_seid, uint8_t acp_seid); 197747ec646SMilanka Ringwald 198747ec646SMilanka Ringwald /** 199747ec646SMilanka Ringwald * @brief Start stream 20060ec20d0SMilanka Ringwald * @param local_seid 20123edb87eSMilanka Ringwald * @return status ERROR_CODE_SUCCESS if succesful, otherwise ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER, ERROR_CODE_COMMAND_DISALLOWED 202747ec646SMilanka Ringwald */ 2034ccacc40SMilanka Ringwald uint8_t avdtp_source_start_stream(uint16_t avdtp_cid, uint8_t local_seid); 20460ec20d0SMilanka Ringwald 20560ec20d0SMilanka Ringwald /** 20660ec20d0SMilanka Ringwald * @brief Abort stream 20760ec20d0SMilanka Ringwald * @param local_seid 20823edb87eSMilanka Ringwald * @return status ERROR_CODE_SUCCESS if succesful, otherwise ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER, ERROR_CODE_COMMAND_DISALLOWED 20960ec20d0SMilanka Ringwald */ 2104ccacc40SMilanka Ringwald uint8_t avdtp_source_abort_stream(uint16_t avdtp_cid, uint8_t local_seid); 211747ec646SMilanka Ringwald 212747ec646SMilanka Ringwald /** 213747ec646SMilanka Ringwald * @brief Start stream 21460ec20d0SMilanka Ringwald * @param local_seid 21523edb87eSMilanka Ringwald * @return status ERROR_CODE_SUCCESS if succesful, otherwise ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER, ERROR_CODE_COMMAND_DISALLOWED 216747ec646SMilanka Ringwald */ 2174ccacc40SMilanka Ringwald uint8_t avdtp_source_stop_stream(uint16_t avdtp_cid, uint8_t local_seid); 218747ec646SMilanka Ringwald 219747ec646SMilanka Ringwald /** 22060ec20d0SMilanka Ringwald * @brief Suspend stream 22160ec20d0SMilanka Ringwald * @param local_seid 22223edb87eSMilanka Ringwald * @return status ERROR_CODE_SUCCESS if succesful, otherwise ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER, ERROR_CODE_COMMAND_DISALLOWED 223747ec646SMilanka Ringwald */ 2244ccacc40SMilanka Ringwald uint8_t avdtp_source_suspend(uint16_t avdtp_cid, uint8_t local_seid); 22560ec20d0SMilanka Ringwald 2268d93ed25SMilanka Ringwald /** 2278d93ed25SMilanka Ringwald * @brief Create stream endpoint 2288d93ed25SMilanka Ringwald * @param sep_type AVDTP_SOURCE or AVDTP_SINK, see avdtp.h 2298d93ed25SMilanka Ringwald * @param media_type AVDTP_AUDIO, AVDTP_VIDEO or AVDTP_MULTIMEDIA, see avdtp.h 2308d93ed25SMilanka Ringwald * @return pointer to newly created stream endpoint, or NULL if allocation failed 2318d93ed25SMilanka Ringwald */ 232747ec646SMilanka Ringwald avdtp_stream_endpoint_t * avdtp_source_create_stream_endpoint(avdtp_sep_type_t sep_type, avdtp_media_type_t media_type); 233747ec646SMilanka Ringwald 2348d93ed25SMilanka Ringwald /** 23517ddf501SMatthias Ringwald * @brief Unregister stream endpoint and free it's memory 23617ddf501SMatthias Ringwald * @param stream_endpoint created by avdtp_sink_create_stream_endpoint 23717ddf501SMatthias Ringwald */ 23817ddf501SMatthias Ringwald void avdtp_source_finalize_stream_endpoint(avdtp_stream_endpoint_t * stream_endpoint); 23917ddf501SMatthias Ringwald 24017ddf501SMatthias Ringwald /** 241*3790661cSMatthias Ringwald * @brief Send media packet 242*3790661cSMatthias Ringwald * @param avdtp_cid AVDTP channel identifyer. 243*3790661cSMatthias Ringwald * @param local_seid ID of a local stream endpoint. 244*3790661cSMatthias Ringwald * @param packet 245*3790661cSMatthias Ringwald * @param size 246*3790661cSMatthias Ringwald * @return status 247*3790661cSMatthias Ringwald */ 248*3790661cSMatthias Ringwald uint8_t avdtp_source_stream_send_media_packet(uint16_t avdtp_cid, uint8_t local_seid, const uint8_t * packet, uint16_t size); 249*3790661cSMatthias Ringwald 250*3790661cSMatthias Ringwald /** 251*3790661cSMatthias Ringwald * @brief Send media payload including RTP header 252*3790661cSMatthias Ringwald * @param avdtp_cid AVDTP channel identifyer. 253*3790661cSMatthias Ringwald * @param local_seid ID of a local stream endpoint. 254*3790661cSMatthias Ringwald * @param marker 255*3790661cSMatthias Ringwald * @param payload 256*3790661cSMatthias Ringwald * @param size 257*3790661cSMatthias Ringwald * @return status 258*3790661cSMatthias Ringwald */ 259*3790661cSMatthias Ringwald uint8_t avdtp_source_stream_send_media_payload_rtp(uint16_t avdtp_cid, uint8_t local_seid, uint8_t marker, uint8_t * payload, uint16_t size); 260*3790661cSMatthias Ringwald 261*3790661cSMatthias Ringwald /** 262*3790661cSMatthias Ringwald * @brief Send media payload including RTP header and the SBC media header 263*3790661cSMatthias Ringwald * @deprecated Please use avdtp_source_stream_send_media_payload_rtp 2648d93ed25SMilanka Ringwald * @param avdtp_cid AVDTP channel identifyer. 2658d93ed25SMilanka Ringwald * @param local_seid ID of a local stream endpoint. 2668d93ed25SMilanka Ringwald * @param storage 2678d93ed25SMilanka Ringwald * @param num_bytes_to_copy 2688d93ed25SMilanka Ringwald * @param num_frames 2698d93ed25SMilanka Ringwald * @param marker 2708d93ed25SMilanka Ringwald * @return max_media_payload_size_without_media_header 2718d93ed25SMilanka Ringwald */ 27246982b0cSMilanka Ringwald int avdtp_source_stream_send_media_payload(uint16_t avdtp_cid, uint8_t local_seid, uint8_t * storage, int num_bytes_to_copy, uint8_t num_frames, uint8_t marker); 2738d93ed25SMilanka Ringwald 274*3790661cSMatthias Ringwald 2755695c5ccSMatthias Ringwald 2765695c5ccSMatthias Ringwald /** 2778d93ed25SMilanka Ringwald * @brief Request to send a media packet. Packet can be then sent on reception of AVDTP_SUBEVENT_STREAMING_CAN_SEND_MEDIA_PACKET_NOW event. 2788d93ed25SMilanka Ringwald * @param avdtp_cid AVDTP channel identifyer. 2798d93ed25SMilanka Ringwald * @param local_seid ID of a local stream endpoint. 2808d93ed25SMilanka Ringwald */ 2818d93ed25SMilanka Ringwald void avdtp_source_stream_endpoint_request_can_send_now(uint16_t avddp_cid, uint8_t local_seid); 2828d93ed25SMilanka Ringwald 2834cd630d9SMilanka Ringwald /** 2844cd630d9SMilanka Ringwald * @brief Return maximal media payload size, does not include media header. 2854cd630d9SMilanka Ringwald * @param avdtp_cid AVDTP channel identifyer. 2864cd630d9SMilanka Ringwald * @param local_seid ID of a local stream endpoint. 2874cd630d9SMilanka Ringwald */ 2884cd630d9SMilanka Ringwald int avdtp_max_media_payload_size(uint16_t avdtp_cid, uint8_t local_seid); 2894cd630d9SMilanka Ringwald 2908ef7100fSMilanka Ringwald /* API_END */ 2918ef7100fSMilanka Ringwald 2928ef7100fSMilanka Ringwald #if defined __cplusplus 2938ef7100fSMilanka Ringwald } 2948ef7100fSMilanka Ringwald #endif 2958ef7100fSMilanka Ringwald 29680e33422SMatthias Ringwald #endif // AVDTP_SOURCE_H 297