avdtp.c (c70720c67056dadfbbef227c89dcb22a37fba036) | avdtp.c (6a737fb6dffb35739dfc90427773a58b014bc75d) |
---|---|
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 --- 46 unchanged lines hidden (view full) --- 55#include "classic/sdp_util.h" 56 57btstack_linked_list_t stream_endpoints; 58 59static bool l2cap_registered; 60 61static btstack_packet_handler_t avdtp_source_callback; 62static btstack_packet_handler_t avdtp_sink_callback; | 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 --- 46 unchanged lines hidden (view full) --- 55#include "classic/sdp_util.h" 56 57btstack_linked_list_t stream_endpoints; 58 59static bool l2cap_registered; 60 61static btstack_packet_handler_t avdtp_source_callback; 62static btstack_packet_handler_t avdtp_sink_callback; |
63static btstack_context_callback_registration_t avdtp_handle_sdp_client_query_request; 64static uint8_t (*avdtp_media_config_validator)(const avdtp_stream_endpoint_t * stream_endpoint, const uint8_t * event, uint16_t size); | 63static uint8_t (*avdtp_sink_media_config_validator)(const avdtp_stream_endpoint_t * stream_endpoint, const uint8_t * event, uint16_t size); 64static uint8_t (*avdtp_source_media_config_validator)(const avdtp_stream_endpoint_t * stream_endpoint, const uint8_t * event, uint16_t size); |
65 | 65 |
66static btstack_context_callback_registration_t avdtp_handle_sdp_client_query_request; |
|
66static uint16_t sdp_query_context_avdtp_cid = 0; 67 68static uint16_t stream_endpoints_id_counter = 0; 69 70static btstack_linked_list_t connections; 71static uint16_t transaction_id_counter = 0; 72 73static int record_id; --- 354 unchanged lines hidden (view full) --- 428 stream_endpoint->sep.registered_service_categories = bitmap; 429 stream_endpoint->sep.capabilities.multiplexing_mode.fragmentation = fragmentation; 430} 431 432void avdtp_register_media_handler(void (*callback)(uint8_t local_seid, uint8_t *packet, uint16_t size)){ 433 avdtp_sink_handle_media_data = callback; 434} 435 | 67static uint16_t sdp_query_context_avdtp_cid = 0; 68 69static uint16_t stream_endpoints_id_counter = 0; 70 71static btstack_linked_list_t connections; 72static uint16_t transaction_id_counter = 0; 73 74static int record_id; --- 354 unchanged lines hidden (view full) --- 429 stream_endpoint->sep.registered_service_categories = bitmap; 430 stream_endpoint->sep.capabilities.multiplexing_mode.fragmentation = fragmentation; 431} 432 433void avdtp_register_media_handler(void (*callback)(uint8_t local_seid, uint8_t *packet, uint16_t size)){ 434 avdtp_sink_handle_media_data = callback; 435} 436 |
436void avdtp_register_media_config_validator(uint8_t (*callback)(const avdtp_stream_endpoint_t * stream_endpoint, const uint8_t * event, uint16_t size)){ 437 avdtp_media_config_validator = callback; | 437void avdtp_sink_register_media_config_validator(uint8_t (*callback)(const avdtp_stream_endpoint_t * stream_endpoint, const uint8_t * event, uint16_t size)){ 438 avdtp_sink_media_config_validator = callback; |
438} 439 | 439} 440 |
441void avdtp_source_register_media_config_validator(uint8_t (*callback)(const avdtp_stream_endpoint_t * stream_endpoint, const uint8_t * event, uint16_t size)){ 442 avdtp_source_media_config_validator = callback; 443} 444 |
|
440uint8_t avdtp_validate_media_configuration(const avdtp_stream_endpoint_t *stream_endpoint, uint16_t avdtp_cid, 441 uint8_t reconfigure, const adtvp_media_codec_capabilities_t *media_codec) { | 445uint8_t avdtp_validate_media_configuration(const avdtp_stream_endpoint_t *stream_endpoint, uint16_t avdtp_cid, 446 uint8_t reconfigure, const adtvp_media_codec_capabilities_t *media_codec) { |
442 if (avdtp_media_config_validator == NULL) { | 447 uint8_t (*callback)(const avdtp_stream_endpoint_t * stream_endpoint, const uint8_t * event, uint16_t size); 448 if (stream_endpoint->sep.type == AVDTP_SOURCE){ 449 callback = avdtp_source_media_config_validator; 450 } else { 451 callback = avdtp_sink_media_config_validator; 452 } 453 if (callback == NULL) { 454 // config valid |
443 return 0; 444 } 445 uint8_t event[AVDTP_MEDIA_CONFIG_OTHER_EVENT_LEN]; 446 uint16_t size = avdtp_setup_media_codec_config_event(event, sizeof(event), stream_endpoint, avdtp_cid, reconfigure, media_codec); | 455 return 0; 456 } 457 uint8_t event[AVDTP_MEDIA_CONFIG_OTHER_EVENT_LEN]; 458 uint16_t size = avdtp_setup_media_codec_config_event(event, sizeof(event), stream_endpoint, avdtp_cid, reconfigure, media_codec); |
447 return (*avdtp_media_config_validator)(stream_endpoint, event, size); | 459 return (*callback)(stream_endpoint, event, size); |
448} 449 450/* START: tracking can send now requests per l2cap cid */ 451static void avdtp_handle_can_send_now(uint16_t l2cap_cid) { 452 453 log_debug("avdtp_packet_handler, L2CAP_EVENT_CAN_SEND_NOW l2cap_cid 0x%02x", l2cap_cid); 454 455 // get signaling connection for l2cap cid --- 1089 unchanged lines hidden (view full) --- 1545 } 1546} 1547 1548void avdtp_deinit(void){ 1549 l2cap_registered = false; 1550 stream_endpoints = NULL; 1551 connections = NULL; 1552 avdtp_sink_handle_media_data = NULL; | 460} 461 462/* START: tracking can send now requests per l2cap cid */ 463static void avdtp_handle_can_send_now(uint16_t l2cap_cid) { 464 465 log_debug("avdtp_packet_handler, L2CAP_EVENT_CAN_SEND_NOW l2cap_cid 0x%02x", l2cap_cid); 466 467 // get signaling connection for l2cap cid --- 1089 unchanged lines hidden (view full) --- 1557 } 1558} 1559 1560void avdtp_deinit(void){ 1561 l2cap_registered = false; 1562 stream_endpoints = NULL; 1563 connections = NULL; 1564 avdtp_sink_handle_media_data = NULL; |
1553 avdtp_media_config_validator = NULL; | 1565 avdtp_sink_media_config_validator = NULL; 1566 avdtp_source_media_config_validator = NULL; |
1554 1555 sdp_query_context_avdtp_cid = 0; 1556 stream_endpoints_id_counter = 0; 1557 transaction_id_counter = 0; 1558 avdtp_cid_counter = 0; 1559} | 1567 1568 sdp_query_context_avdtp_cid = 0; 1569 stream_endpoints_id_counter = 0; 1570 transaction_id_counter = 0; 1571 avdtp_cid_counter = 0; 1572} |