avrcp: move target and controller contexts to avrcp.c file

This commit is contained in:
Milanka Ringwald 2020-04-23 15:48:26 +02:00 committed by Matthias Ringwald
parent b273af9018
commit 5dd5e7e34e
4 changed files with 27 additions and 13 deletions

View File

@ -60,6 +60,10 @@ static const char * default_avrcp_target_service_provider_name = "BTstack AVRCP
static uint16_t avrcp_cid_counter = 0; static uint16_t avrcp_cid_counter = 0;
static avrcp_context_t * sdp_query_context; static avrcp_context_t * sdp_query_context;
avrcp_context_t avrcp_controller_context;
avrcp_context_t avrcp_target_context;
static uint8_t attribute_value[45]; static uint8_t attribute_value[45];
static const unsigned int attribute_value_buffer_size = sizeof(attribute_value); static const unsigned int attribute_value_buffer_size = sizeof(attribute_value);
@ -562,6 +566,7 @@ static void avrcp_handle_sdp_client_query_attribute_value(avrcp_connection_t * c
void avrcp_handle_sdp_client_query_result(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ void avrcp_handle_sdp_client_query_result(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
avrcp_connection_t * connection = get_avrcp_connection_for_avrcp_cid_for_role(sdp_query_context->role, sdp_query_context->avrcp_cid); avrcp_connection_t * connection = get_avrcp_connection_for_avrcp_cid_for_role(sdp_query_context->role, sdp_query_context->avrcp_cid);
if (!connection) return; if (!connection) return;
if (connection->state != AVCTP_CONNECTION_W4_SDP_QUERY_COMPLETE) return; if (connection->state != AVCTP_CONNECTION_W4_SDP_QUERY_COMPLETE) return;
@ -794,27 +799,38 @@ static void avrcp_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t
} }
} }
uint8_t avrcp_connect(bd_addr_t bd_addr, avrcp_context_t * context, uint16_t * avrcp_cid){ uint8_t avrcp_connect(avrcp_role_t role, bd_addr_t bd_addr, uint16_t * avrcp_cid){
avrcp_connection_t * connection = get_avrcp_connection_for_bd_addr_for_role(context->role, bd_addr); avrcp_connection_t * connection = get_avrcp_connection_for_bd_addr_for_role(role, bd_addr);
if (connection) return ERROR_CODE_COMMAND_DISALLOWED; if (connection) return ERROR_CODE_COMMAND_DISALLOWED;
if (!sdp_client_ready()) return ERROR_CODE_COMMAND_DISALLOWED; if (!sdp_client_ready()) return ERROR_CODE_COMMAND_DISALLOWED;
btstack_packet_handler_t packet_handler = avrcp_packet_handler_for_role(context->role); btstack_packet_handler_t packet_handler = avrcp_packet_handler_for_role(role);
if (!packet_handler) return 0; if (!packet_handler) return 0;
connection = avrcp_create_connection(context->role, bd_addr); connection = avrcp_create_connection(role, bd_addr);
if (!connection) return BTSTACK_MEMORY_ALLOC_FAILED; if (!connection) return BTSTACK_MEMORY_ALLOC_FAILED;
if (avrcp_cid){ if (avrcp_cid){
*avrcp_cid = connection->avrcp_cid; *avrcp_cid = connection->avrcp_cid;
} }
context->avrcp_l2cap_psm = 0;
context->avrcp_version = 0; switch (role){
context->avrcp_cid = connection->avrcp_cid; case AVRCP_CONTROLLER:
sdp_query_context = &avrcp_controller_context;
break;
case AVRCP_TARGET:
sdp_query_context = &avrcp_target_context;
break;
}
connection->browsing_l2cap_psm = 0; connection->browsing_l2cap_psm = 0;
connection->state = AVCTP_CONNECTION_W4_SDP_QUERY_COMPLETE; connection->state = AVCTP_CONNECTION_W4_SDP_QUERY_COMPLETE;
sdp_query_context = context;
sdp_query_context->avrcp_l2cap_psm = 0;
sdp_query_context->avrcp_version = 0;
sdp_query_context->avrcp_cid = connection->avrcp_cid;
sdp_client_query_uuid16(&avrcp_handle_sdp_client_query_result, connection->remote_addr, BLUETOOTH_PROTOCOL_AVCTP); sdp_client_query_uuid16(&avrcp_handle_sdp_client_query_result, connection->remote_addr, BLUETOOTH_PROTOCOL_AVCTP);
return ERROR_CODE_SUCCESS; return ERROR_CODE_SUCCESS;
} }

View File

@ -547,7 +547,7 @@ void avrcp_register_controller_packet_handler(btstack_packet_handler_t avrcp_con
void avrcp_register_target_packet_handler(btstack_packet_handler_t avrcp_target_packet_handler); void avrcp_register_target_packet_handler(btstack_packet_handler_t avrcp_target_packet_handler);
void avrcp_create_sdp_record(uint8_t controller, uint8_t * service, uint32_t service_record_handle, uint8_t browsing, uint16_t supported_features, const char * service_name, const char * service_provider_name); void avrcp_create_sdp_record(uint8_t controller, uint8_t * service, uint32_t service_record_handle, uint8_t browsing, uint16_t supported_features, const char * service_name, const char * service_provider_name);
uint8_t avrcp_connect(bd_addr_t bd_addr, avrcp_context_t * context, uint16_t * avrcp_cid); uint8_t avrcp_connect(avrcp_role_t role, bd_addr_t bd_addr, uint16_t * avrcp_cid);
void avrcp_emit_connection_established(btstack_packet_handler_t callback, uint16_t avrcp_cid, bd_addr_t addr, uint8_t status); void avrcp_emit_connection_established(btstack_packet_handler_t callback, uint16_t avrcp_cid, bd_addr_t addr, uint8_t status);
void avrcp_emit_connection_closed(btstack_packet_handler_t callback, uint16_t avrcp_cid); void avrcp_emit_connection_closed(btstack_packet_handler_t callback, uint16_t avrcp_cid);

View File

@ -48,7 +48,6 @@
#include "classic/avrcp_controller.h" #include "classic/avrcp_controller.h"
// made public in avrcp_controller.h // made public in avrcp_controller.h
avrcp_context_t avrcp_controller_context;
static int avrcp_controller_supports_browsing(uint16_t controller_supported_features){ static int avrcp_controller_supports_browsing(uint16_t controller_supported_features){
return controller_supported_features & (1 << AVRCP_CONTROLLER_SUPPORTED_FEATURE_BROWSING); return controller_supported_features & (1 << AVRCP_CONTROLLER_SUPPORTED_FEATURE_BROWSING);
@ -953,7 +952,7 @@ void avrcp_controller_register_packet_handler(btstack_packet_handler_t callback)
} }
uint8_t avrcp_controller_connect(bd_addr_t bd_addr, uint16_t * avrcp_cid){ uint8_t avrcp_controller_connect(bd_addr_t bd_addr, uint16_t * avrcp_cid){
return avrcp_connect(bd_addr, &avrcp_controller_context, avrcp_cid); return avrcp_connect(AVRCP_CONTROLLER, bd_addr, avrcp_cid);
} }
uint8_t avrcp_controller_unit_info(uint16_t avrcp_cid){ uint8_t avrcp_controller_unit_info(uint16_t avrcp_cid){

View File

@ -51,7 +51,6 @@
static const uint8_t AVRCP_NOTIFICATION_TRACK_SELECTED[] = {0,0,0,0,0,0,0,0}; static const uint8_t AVRCP_NOTIFICATION_TRACK_SELECTED[] = {0,0,0,0,0,0,0,0};
static const uint8_t AVRCP_NOTIFICATION_TRACK_NOT_SELECTED[] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; static const uint8_t AVRCP_NOTIFICATION_TRACK_NOT_SELECTED[] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
avrcp_context_t avrcp_target_context;
static int avrcp_target_supports_browsing(uint16_t target_supported_features){ static int avrcp_target_supports_browsing(uint16_t target_supported_features){
return target_supported_features & (1 << AVRCP_TARGET_SUPPORTED_FEATURE_BROWSING); return target_supported_features & (1 << AVRCP_TARGET_SUPPORTED_FEATURE_BROWSING);
@ -1292,7 +1291,7 @@ void avrcp_target_register_packet_handler(btstack_packet_handler_t callback){
} }
uint8_t avrcp_target_connect(bd_addr_t bd_addr, uint16_t * avrcp_cid){ uint8_t avrcp_target_connect(bd_addr_t bd_addr, uint16_t * avrcp_cid){
return avrcp_connect(bd_addr, &avrcp_target_context, avrcp_cid); return avrcp_connect(AVRCP_TARGET, bd_addr, avrcp_cid);
} }
uint8_t avrcp_target_disconnect(uint16_t avrcp_cid){ uint8_t avrcp_target_disconnect(uint16_t avrcp_cid){