xref: /btstack/src/classic/avdtp_source.h (revision 78d08d098e6ff52f427176938ca867d697552cad)
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);
73*78d08d09SMilanka 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);
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.
89f9bca1f3SMilanka Ringwald  * @param avdtp_cid
90747ec646SMilanka Ringwald  */
91f9bca1f3SMilanka Ringwald void avdtp_source_disconnect(uint16_t avdtp_cid);
92747ec646SMilanka Ringwald 
93747ec646SMilanka Ringwald /**
94747ec646SMilanka Ringwald  * @brief Discover stream endpoints
95f9bca1f3SMilanka Ringwald  * @param avdtp_cid
96747ec646SMilanka Ringwald  */
97f9bca1f3SMilanka Ringwald void avdtp_source_discover_stream_endpoints(uint16_t avdtp_cid);
98747ec646SMilanka Ringwald 
99747ec646SMilanka Ringwald /**
100747ec646SMilanka Ringwald  * @brief Get capabilities
101f9bca1f3SMilanka Ringwald  * @param avdtp_cid
102747ec646SMilanka Ringwald  */
103f9bca1f3SMilanka Ringwald void avdtp_source_get_capabilities(uint16_t avdtp_cid, uint8_t acp_seid);
104747ec646SMilanka Ringwald 
105747ec646SMilanka Ringwald /**
106747ec646SMilanka Ringwald  * @brief Get all capabilities
107f9bca1f3SMilanka Ringwald  * @param avdtp_cid
108747ec646SMilanka Ringwald  */
109f9bca1f3SMilanka Ringwald void avdtp_source_get_all_capabilities(uint16_t avdtp_cid, uint8_t acp_seid);
110747ec646SMilanka Ringwald 
111747ec646SMilanka Ringwald /**
112747ec646SMilanka Ringwald  * @brief Set configuration
113f9bca1f3SMilanka Ringwald  * @param avdtp_cid
114747ec646SMilanka Ringwald  */
115f9bca1f3SMilanka Ringwald void 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);
116747ec646SMilanka Ringwald 
117747ec646SMilanka Ringwald /**
118747ec646SMilanka Ringwald  * @brief Reconfigure stream
119f9bca1f3SMilanka Ringwald  * @param avdtp_cid
120747ec646SMilanka Ringwald  * @param seid
121747ec646SMilanka Ringwald  */
122*78d08d09SMilanka Ringwald void avdtp_source_reconfigure(uint16_t avdtp_cid, uint8_t int_seid, uint8_t acp_seid, uint16_t configured_services_bitmap, avdtp_capabilities_t configuration);
123747ec646SMilanka Ringwald 
124747ec646SMilanka Ringwald /**
125747ec646SMilanka Ringwald  * @brief Get configuration
126f9bca1f3SMilanka Ringwald  * @param avdtp_cid
127747ec646SMilanka Ringwald  */
128f9bca1f3SMilanka Ringwald void avdtp_source_get_configuration(uint16_t avdtp_cid, uint8_t acp_seid);
129747ec646SMilanka Ringwald 
130747ec646SMilanka Ringwald /**
131747ec646SMilanka Ringwald  * @brief Suspend stream
132f9bca1f3SMilanka Ringwald  * @param avdtp_cid
133747ec646SMilanka Ringwald  * @param seid
134747ec646SMilanka Ringwald  */
135*78d08d09SMilanka Ringwald void avdtp_source_suspend(uint16_t avdtp_cid, uint8_t int_seid, uint8_t acp_seid);
136747ec646SMilanka Ringwald 
137747ec646SMilanka Ringwald 
138747ec646SMilanka Ringwald /**
139747ec646SMilanka Ringwald  * @brief Open stream
140f9bca1f3SMilanka Ringwald  * @param avdtp_cid
141747ec646SMilanka Ringwald  * @param seid
142747ec646SMilanka Ringwald  */
143f9bca1f3SMilanka Ringwald void avdtp_source_open_stream(uint16_t avdtp_cid, uint8_t int_seid, uint8_t acp_seid);
144747ec646SMilanka Ringwald 
145747ec646SMilanka Ringwald /**
146747ec646SMilanka Ringwald  * @brief Start stream
147f9bca1f3SMilanka Ringwald  * @param avdtp_cid
148747ec646SMilanka Ringwald  * @param seid
149747ec646SMilanka Ringwald  */
150f9bca1f3SMilanka Ringwald void avdtp_source_start_stream(uint16_t avdtp_cid, uint8_t int_seid, uint8_t acp_seid);
151747ec646SMilanka Ringwald 
152747ec646SMilanka Ringwald /**
153747ec646SMilanka Ringwald  * @brief Start stream
154f9bca1f3SMilanka Ringwald  * @param avdtp_cid
155747ec646SMilanka Ringwald  * @param seid
156747ec646SMilanka Ringwald  */
157f9bca1f3SMilanka Ringwald void avdtp_source_abort_stream(uint16_t avdtp_cid, uint8_t int_seid, uint8_t acp_seid);
158747ec646SMilanka Ringwald 
159747ec646SMilanka Ringwald /**
160747ec646SMilanka Ringwald  * @brief Start stream
161f9bca1f3SMilanka Ringwald  * @param avdtp_cid
162747ec646SMilanka Ringwald  * @param seid
163747ec646SMilanka Ringwald  */
164f9bca1f3SMilanka Ringwald void avdtp_source_stop_stream(uint16_t avdtp_cid, uint8_t int_seid, 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 
168f9bca1f3SMilanka Ringwald void avdtp_source_stream_endpoint_request_can_send_now(avdtp_stream_endpoint_t * stream_endpoint);
169f9bca1f3SMilanka Ringwald int  avdtp_source_stream_endpoint_ready(avdtp_stream_endpoint_t * stream_endpoint);
170aa8c26dbSMilanka Ringwald void avdtp_source_stream_send_media_payload(uint16_t l2cap_media_cid, btstack_ring_buffer_t * sbc_ring_buffer, uint8_t marker);
1719e42cfccSMilanka Ringwald 
172f9bca1f3SMilanka Ringwald uint8_t avdtp_source_remote_seps_num(uint16_t avdtp_cid);
173f9bca1f3SMilanka Ringwald avdtp_sep_t * avdtp_source_remote_sep(uint16_t avdtp_cid, uint8_t index);
1748ef7100fSMilanka Ringwald /* API_END */
1758ef7100fSMilanka Ringwald 
1768ef7100fSMilanka Ringwald #if defined __cplusplus
1778ef7100fSMilanka Ringwald }
1788ef7100fSMilanka Ringwald #endif
1798ef7100fSMilanka Ringwald 
1808ef7100fSMilanka Ringwald #endif // __AVDTP_SOURCE_H