xref: /btstack/src/classic/avdtp_source.h (revision aa8c26dbfa72c1461bdcf2e493503b5aa46aed86)
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 
468ef7100fSMilanka Ringwald #ifndef __AVDTP_SOURCE_H
478ef7100fSMilanka Ringwald #define __AVDTP_SOURCE_H
488ef7100fSMilanka Ringwald 
498ef7100fSMilanka Ringwald #include <stdint.h>
508ef7100fSMilanka Ringwald 
518ef7100fSMilanka Ringwald #if defined __cplusplus
528ef7100fSMilanka Ringwald extern "C" {
538ef7100fSMilanka Ringwald #endif
548ef7100fSMilanka Ringwald 
558ef7100fSMilanka Ringwald /* API_START */
568ef7100fSMilanka Ringwald 
578ef7100fSMilanka Ringwald /**
588ef7100fSMilanka Ringwald  * @brief AVDTP Source service record.
598ef7100fSMilanka Ringwald  * @param service
608ef7100fSMilanka Ringwald  * @param service_record_handle
618ef7100fSMilanka Ringwald  * @param supported_features 16-bit bitmap, see AVDTP_SOURCE_SF_* values in avdtp.h
628ef7100fSMilanka Ringwald  * @param service_name
638ef7100fSMilanka Ringwald  * @param service_provider_name
648ef7100fSMilanka Ringwald  */
658ef7100fSMilanka Ringwald void a2dp_source_create_sdp_record(uint8_t * service,  uint32_t service_record_handle, uint16_t supported_features, const char * service_name, const char * service_provider_name);
66747ec646SMilanka Ringwald 
67747ec646SMilanka Ringwald void avdtp_source_register_media_transport_category(uint8_t seid);
68747ec646SMilanka Ringwald void avdtp_source_register_reporting_category(uint8_t seid);
69747ec646SMilanka Ringwald void avdtp_source_register_delay_reporting_category(uint8_t seid);
70747ec646SMilanka Ringwald void avdtp_source_register_recovery_category(uint8_t seid, uint8_t maximum_recovery_window_size, uint8_t maximum_number_media_packets);
71747ec646SMilanka 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);
72747ec646SMilanka Ringwald void avdtp_source_register_header_compression_category(uint8_t seid, uint8_t back_ch, uint8_t media, uint8_t recovery);
73747ec646SMilanka 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, const uint8_t * media_codec_info, uint16_t media_codec_info_len);
74747ec646SMilanka Ringwald void avdtp_source_register_multiplexing_category(uint8_t seid, uint8_t fragmentation);
75747ec646SMilanka Ringwald 
76747ec646SMilanka Ringwald 
77747ec646SMilanka Ringwald void avdtp_source_init(void);
78747ec646SMilanka Ringwald void avdtp_source_register_packet_handler(btstack_packet_handler_t callback);
79747ec646SMilanka Ringwald 
80747ec646SMilanka Ringwald /**
81747ec646SMilanka Ringwald  * @brief Connect to device with a bluetooth address. (and perform configuration?)
82747ec646SMilanka Ringwald  * @param bd_addr
83747ec646SMilanka Ringwald  */
84747ec646SMilanka Ringwald void avdtp_source_connect(bd_addr_t bd_addr);
85747ec646SMilanka Ringwald 
86747ec646SMilanka Ringwald void avdtp_source_register_media_handler(void (*callback)(avdtp_stream_endpoint_t * stream_endpoint, uint8_t *packet, uint16_t size));
87747ec646SMilanka Ringwald /**
88747ec646SMilanka Ringwald  * @brief Disconnect from device with connection handle.
89747ec646SMilanka Ringwald  * @param con_handle
90747ec646SMilanka Ringwald  */
91747ec646SMilanka Ringwald void avdtp_source_disconnect(uint16_t con_handle);
92747ec646SMilanka Ringwald 
93747ec646SMilanka Ringwald /**
94747ec646SMilanka Ringwald  * @brief Discover stream endpoints
95747ec646SMilanka Ringwald  * @param con_handle
96747ec646SMilanka Ringwald  */
97747ec646SMilanka Ringwald void avdtp_source_discover_stream_endpoints(uint16_t con_handle);
98747ec646SMilanka Ringwald 
99747ec646SMilanka Ringwald /**
100747ec646SMilanka Ringwald  * @brief Get capabilities
101747ec646SMilanka Ringwald  * @param con_handle
102747ec646SMilanka Ringwald  */
103747ec646SMilanka Ringwald void avdtp_source_get_capabilities(uint16_t con_handle, uint8_t acp_seid);
104747ec646SMilanka Ringwald 
105747ec646SMilanka Ringwald /**
106747ec646SMilanka Ringwald  * @brief Get all capabilities
107747ec646SMilanka Ringwald  * @param con_handle
108747ec646SMilanka Ringwald  */
109747ec646SMilanka Ringwald void avdtp_source_get_all_capabilities(uint16_t con_handle, uint8_t acp_seid);
110747ec646SMilanka Ringwald 
111747ec646SMilanka Ringwald /**
112747ec646SMilanka Ringwald  * @brief Set configuration
113747ec646SMilanka Ringwald  * @param con_handle
114747ec646SMilanka Ringwald  */
115747ec646SMilanka Ringwald void avdtp_source_set_configuration(uint16_t con_handle, uint8_t int_seid, uint8_t acp_seid, uint16_t configured_services_bitmap, avdtp_capabilities_t configuration);
116747ec646SMilanka Ringwald 
117747ec646SMilanka Ringwald /**
118747ec646SMilanka Ringwald  * @brief Reconfigure stream
119747ec646SMilanka Ringwald  * @param con_handle
120747ec646SMilanka Ringwald  * @param seid
121747ec646SMilanka Ringwald  */
122747ec646SMilanka Ringwald void avdtp_source_reconfigure(uint16_t con_handle, uint8_t acp_seid, uint16_t configured_services_bitmap, avdtp_capabilities_t configuration);
123747ec646SMilanka Ringwald 
124747ec646SMilanka Ringwald /**
125747ec646SMilanka Ringwald  * @brief Get configuration
126747ec646SMilanka Ringwald  * @param con_handle
127747ec646SMilanka Ringwald  */
128747ec646SMilanka Ringwald void avdtp_source_get_configuration(uint16_t con_handle, uint8_t acp_seid);
129747ec646SMilanka Ringwald 
130747ec646SMilanka Ringwald /**
131747ec646SMilanka Ringwald  * @brief Suspend stream
132747ec646SMilanka Ringwald  * @param con_handle
133747ec646SMilanka Ringwald  * @param seid
134747ec646SMilanka Ringwald  */
135747ec646SMilanka Ringwald void avdtp_source_suspend(uint16_t con_handle, uint8_t acp_seid);
136747ec646SMilanka Ringwald 
137747ec646SMilanka Ringwald 
138747ec646SMilanka Ringwald /**
139747ec646SMilanka Ringwald  * @brief Open stream
140747ec646SMilanka Ringwald  * @param con_handle
141747ec646SMilanka Ringwald  * @param seid
142747ec646SMilanka Ringwald  */
143747ec646SMilanka Ringwald void avdtp_source_open_stream(uint16_t con_handle, uint8_t acp_seid);
144747ec646SMilanka Ringwald 
145747ec646SMilanka Ringwald /**
146747ec646SMilanka Ringwald  * @brief Start stream
147747ec646SMilanka Ringwald  * @param con_handle
148747ec646SMilanka Ringwald  * @param seid
149747ec646SMilanka Ringwald  */
150747ec646SMilanka Ringwald void avdtp_source_start_stream(uint16_t con_handle, uint8_t acp_seid);
151747ec646SMilanka Ringwald 
152747ec646SMilanka Ringwald /**
153747ec646SMilanka Ringwald  * @brief Start stream
154747ec646SMilanka Ringwald  * @param con_handle
155747ec646SMilanka Ringwald  * @param seid
156747ec646SMilanka Ringwald  */
157747ec646SMilanka Ringwald void avdtp_source_abort_stream(uint16_t con_handle, uint8_t acp_seid);
158747ec646SMilanka Ringwald 
159747ec646SMilanka Ringwald /**
160747ec646SMilanka Ringwald  * @brief Start stream
161747ec646SMilanka Ringwald  * @param con_handle
162747ec646SMilanka Ringwald  * @param seid
163747ec646SMilanka Ringwald  */
164747ec646SMilanka Ringwald void avdtp_source_stop_stream(uint16_t con_handle, uint8_t acp_seid);
165747ec646SMilanka Ringwald 
166747ec646SMilanka Ringwald avdtp_stream_endpoint_t * avdtp_source_create_stream_endpoint(avdtp_sep_type_t sep_type, avdtp_media_type_t media_type);
167747ec646SMilanka Ringwald 
168a04ed5e9SMilanka Ringwald int avdtp_source_streaming_endpoint_ready(uint16_t con_handle);
169a04ed5e9SMilanka Ringwald void avdtp_source_request_can_send_now(uint16_t con_handle);
170*aa8c26dbSMilanka Ringwald void avdtp_source_stream_send_media_payload(uint16_t l2cap_media_cid, btstack_ring_buffer_t * sbc_ring_buffer, uint8_t marker);
1718ef7100fSMilanka Ringwald /* API_END */
1728ef7100fSMilanka Ringwald 
1738ef7100fSMilanka Ringwald #if defined __cplusplus
1748ef7100fSMilanka Ringwald }
1758ef7100fSMilanka Ringwald #endif
1768ef7100fSMilanka Ringwald 
1778ef7100fSMilanka Ringwald #endif // __AVDTP_SOURCE_H