a2dp_sink.c (98137b165c29e62b49279861496d926acc2e3f9d) | a2dp_sink.c (a95794cee1b77dd0c805e8606c008222803b81c5) |
---|---|
1/* 2 * Copyright (C) 2016 BlueKitchen GmbH 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright --- 43 unchanged lines hidden (view full) --- 52static const char * default_a2dp_sink_service_name = "BTstack A2DP Sink Service"; 53static const char * default_a2dp_sink_service_provider_name = "BTstack A2DP Sink Service Provider"; 54 55static bool outgoing_active = false; 56static uint16_t a2dp_sink_cid; 57static bool stream_endpoint_configured = false; 58 59static btstack_packet_handler_t a2dp_sink_packet_handler_user; | 1/* 2 * Copyright (C) 2016 BlueKitchen GmbH 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright --- 43 unchanged lines hidden (view full) --- 52static const char * default_a2dp_sink_service_name = "BTstack A2DP Sink Service"; 53static const char * default_a2dp_sink_service_provider_name = "BTstack A2DP Sink Service Provider"; 54 55static bool outgoing_active = false; 56static uint16_t a2dp_sink_cid; 57static bool stream_endpoint_configured = false; 58 59static btstack_packet_handler_t a2dp_sink_packet_handler_user; |
60static uint8_t (*a2dp_sink_media_config_validator)(const avdtp_stream_endpoint_t * stream_endpoint, const uint8_t * event, uint16_t size); |
|
60 61static void a2dp_sink_packet_handler_internal(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size); 62 63void a2dp_sink_create_sdp_record(uint8_t * service, uint32_t service_record_handle, uint16_t supported_features, const char * service_name, const char * service_provider_name){ 64 uint8_t* attribute; 65 de_create_sequence(service); 66 67 // 0x0000 "Service Record Handle" --- 260 unchanged lines hidden (view full) --- 328 a2dp_replace_subevent_id_and_emit_cmd(a2dp_sink_packet_handler_user, packet, size, A2DP_SUBEVENT_SIGNALING_CONNECTION_RELEASED); 329 break; 330 default: 331 break; 332 } 333 334} 335 | 61 62static void a2dp_sink_packet_handler_internal(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size); 63 64void a2dp_sink_create_sdp_record(uint8_t * service, uint32_t service_record_handle, uint16_t supported_features, const char * service_name, const char * service_provider_name){ 65 uint8_t* attribute; 66 de_create_sequence(service); 67 68 // 0x0000 "Service Record Handle" --- 260 unchanged lines hidden (view full) --- 329 a2dp_replace_subevent_id_and_emit_cmd(a2dp_sink_packet_handler_user, packet, size, A2DP_SUBEVENT_SIGNALING_CONNECTION_RELEASED); 330 break; 331 default: 332 break; 333 } 334 335} 336 |
337static uint8_t a2dp_sink_media_config_validator_callback(const avdtp_stream_endpoint_t * stream_endpoint, const uint8_t * event, uint16_t size){ 338 uint8_t error = 0; 339 if (a2dp_sink_media_config_validator == NULL) { 340 // update subevent id and call validator 341 uint8_t avdtp_subevent_id = event[2]; 342 uint8_t a2dp_subevent_id = a2dp_subevent_id_for_avdtp_subevent_id(avdtp_subevent_id); 343 uint8_t * subevent_field = (uint8_t *) &event[2]; 344 *subevent_field = a2dp_subevent_id; 345 error = (*a2dp_sink_media_config_validator)(stream_endpoint, event, size); 346 *subevent_field = avdtp_subevent_id; 347 } 348 return error; 349} 350 351void a2dp_sink_register_media_config_validator(uint8_t (*callback)(const avdtp_stream_endpoint_t * stream_endpoint, const uint8_t * event, uint16_t size)){ 352 a2dp_sink_media_config_validator = callback; 353 avdtp_sink_register_media_config_validator(&a2dp_sink_media_config_validator_callback); 354} |
|