avrcp: add role to connection

This commit is contained in:
Milanka Ringwald 2019-02-19 12:14:37 +01:00
parent 2948493268
commit 4590ebd9c1
4 changed files with 16 additions and 13 deletions

View File

@ -334,12 +334,13 @@ uint16_t avrcp_get_next_cid(void){
return avrcp_cid_counter;
}
static avrcp_connection_t * avrcp_create_connection(bd_addr_t remote_addr, avrcp_context_t * context){
static avrcp_connection_t * avrcp_create_connection(avrcp_role_t role, bd_addr_t remote_addr, avrcp_context_t * context){
avrcp_connection_t * connection = btstack_memory_avrcp_connection_get();
if (!connection){
log_error("avrcp: not enough memory to create connection");
return NULL;
}
connection->role = role;
connection->state = AVCTP_CONNECTION_IDLE;
connection->transaction_label = 0xFF;
connection->max_num_fragments = 0xFF;
@ -559,7 +560,7 @@ void avrcp_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet
case L2CAP_EVENT_INCOMING_CONNECTION:
l2cap_event_incoming_connection_get_address(packet, event_addr);
local_cid = l2cap_event_incoming_connection_get_local_cid(packet);
connection = avrcp_create_connection(event_addr, context);
connection = avrcp_create_connection(context->role, event_addr, context);
if (!connection) {
log_error("Failed to alloc connection structure");
l2cap_decline_connection(local_cid);
@ -628,13 +629,13 @@ void avrcp_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet
}
}
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, avrcp_context_t * context, uint16_t * avrcp_cid){
avrcp_connection_t * connection = get_avrcp_connection_for_bd_addr(bd_addr, context);
if (connection) return ERROR_CODE_COMMAND_DISALLOWED;
if (!sdp_client_ready()) return ERROR_CODE_COMMAND_DISALLOWED;
connection = avrcp_create_connection(bd_addr, context);
connection = avrcp_create_connection(role, bd_addr, context);
if (!connection){
log_error("avrcp: could not allocate connection struct.");
return BTSTACK_MEMORY_ALLOC_FAILED;

View File

@ -63,6 +63,8 @@ extern "C" {
#define AVRCP_NO_TRACK_SELECTED_PLAYBACK_POSITION_CHANGED 0xFFFFFFFF
// #define AVRCP_NO_TRACK_SELECTED_TRACK_CHANGED 0xFFFFFFFFFFFFFFFF
#define AVRCP_BROWSING_ITEM_HEADER_LEN 3
typedef enum {
AVRCP_STATUS_INVALID_COMMAND = 0, // sent if TG received a PDU that it did not understand.
AVRCP_STATUS_INVALID_PARAMETER, // Sent if the TG received a PDU with a parameter ID that it did not understand, or, if there is only one parameter ID in the PDU.
@ -310,7 +312,10 @@ typedef enum {
} avrcp_parser_state_t;
#define AVRCP_BROWSING_ITEM_HEADER_LEN 3
typedef enum{
AVRCP_CONTROLLER = 0,
AVRCP_TARGET
} avrcp_role_t;
// BROWSING
typedef struct {
@ -386,6 +391,8 @@ typedef struct {
typedef struct {
btstack_linked_item_t item;
avrcp_role_t role;
bd_addr_t remote_addr;
uint16_t l2cap_signaling_cid;
uint16_t l2cap_mtu;
@ -497,11 +504,6 @@ typedef enum {
AVRCP_REPEAT_MODE_GROUP
} avrcp_repeat_mode_t;
typedef enum{
AVRCP_CONTROLLER = 0,
AVRCP_TARGET
} avrcp_role_t;
typedef enum {
RFC2978_CHARSET_MIB_UTF8 = 106
} rfc2978_charset_mib_enumid_t;
@ -536,7 +538,7 @@ const char * avrcp_shuffle2str(uint8_t index);
void avrcp_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size, avrcp_context_t * context);
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, avrcp_context_t * context, 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_closed(btstack_packet_handler_t callback, uint16_t avrcp_cid);

View File

@ -943,7 +943,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){
return avrcp_connect(bd_addr, &avrcp_controller_context, avrcp_cid);
return avrcp_connect(AVRCP_CONTROLLER, bd_addr, &avrcp_controller_context, avrcp_cid);
}
uint8_t avrcp_controller_unit_info(uint16_t avrcp_cid){

View File

@ -1254,7 +1254,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){
return avrcp_connect(bd_addr, &avrcp_target_context, avrcp_cid);
return avrcp_connect(AVRCP_TARGET, bd_addr, &avrcp_target_context, avrcp_cid);
}
uint8_t avrcp_target_disconnect(uint16_t avrcp_cid){