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}