mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-29 22:20:37 +00:00
avdtp: extend AVDTP_SUBEVENT_SIGNALING_CONNECTION_ESTABLISHED event with con_handle
This commit is contained in:
parent
287379cc24
commit
146fc0fb6e
@ -1724,10 +1724,11 @@ typedef uint8_t sm_key_t[16];
|
||||
#define AVDTP_SUBEVENT_SIGNALING_GENERAL_REJECT 0x03
|
||||
|
||||
/**
|
||||
* @format 12B1
|
||||
* @format 12B21
|
||||
* @param subevent_code
|
||||
* @param avdtp_cid
|
||||
* @param bd_addr
|
||||
* @param con_handle
|
||||
* @param status 0 == OK
|
||||
*/
|
||||
#define AVDTP_SUBEVENT_SIGNALING_CONNECTION_ESTABLISHED 0x04
|
||||
@ -2070,10 +2071,11 @@ typedef uint8_t sm_key_t[16];
|
||||
#define A2DP_SUBEVENT_COMMAND_REJECTED 0x0A
|
||||
|
||||
/**
|
||||
* @format 12B1
|
||||
* @format 12B21
|
||||
* @param subevent_code
|
||||
* @param a2dp_cid
|
||||
* @param bd_addr
|
||||
* @param con_handle
|
||||
* @param status 0 == OK
|
||||
*/
|
||||
#define A2DP_SUBEVENT_SIGNALING_CONNECTION_ESTABLISHED 0x0B
|
||||
|
@ -4415,6 +4415,15 @@ static inline uint16_t avdtp_subevent_signaling_connection_established_get_avdtp
|
||||
static inline void avdtp_subevent_signaling_connection_established_get_bd_addr(const uint8_t * event, bd_addr_t bd_addr){
|
||||
reverse_bytes(&event[5], bd_addr, 6);
|
||||
}
|
||||
/**
|
||||
* @brief Get field con_handle from event AVDTP_SUBEVENT_SIGNALING_CONNECTION_ESTABLISHED
|
||||
* @param event packet
|
||||
* @return con_handle
|
||||
* @note: btstack_type 2
|
||||
*/
|
||||
static inline uint16_t avdtp_subevent_signaling_connection_established_get_con_handle(const uint8_t * event){
|
||||
return little_endian_read_16(event, 11);
|
||||
}
|
||||
/**
|
||||
* @brief Get field status from event AVDTP_SUBEVENT_SIGNALING_CONNECTION_ESTABLISHED
|
||||
* @param event packet
|
||||
@ -4422,7 +4431,7 @@ static inline void avdtp_subevent_signaling_connection_established_get_bd_addr(c
|
||||
* @note: btstack_type 1
|
||||
*/
|
||||
static inline uint8_t avdtp_subevent_signaling_connection_established_get_status(const uint8_t * event){
|
||||
return event[11];
|
||||
return event[13];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -5750,6 +5759,15 @@ static inline uint16_t a2dp_subevent_signaling_connection_established_get_a2dp_c
|
||||
static inline void a2dp_subevent_signaling_connection_established_get_bd_addr(const uint8_t * event, bd_addr_t bd_addr){
|
||||
reverse_bytes(&event[5], bd_addr, 6);
|
||||
}
|
||||
/**
|
||||
* @brief Get field con_handle from event A2DP_SUBEVENT_SIGNALING_CONNECTION_ESTABLISHED
|
||||
* @param event packet
|
||||
* @return con_handle
|
||||
* @note: btstack_type 2
|
||||
*/
|
||||
static inline uint16_t a2dp_subevent_signaling_connection_established_get_con_handle(const uint8_t * event){
|
||||
return little_endian_read_16(event, 11);
|
||||
}
|
||||
/**
|
||||
* @brief Get field status from event A2DP_SUBEVENT_SIGNALING_CONNECTION_ESTABLISHED
|
||||
* @param event packet
|
||||
@ -5757,7 +5775,7 @@ static inline void a2dp_subevent_signaling_connection_established_get_bd_addr(co
|
||||
* @note: btstack_type 1
|
||||
*/
|
||||
static inline uint8_t a2dp_subevent_signaling_connection_established_get_status(const uint8_t * event){
|
||||
return event[11];
|
||||
return event[13];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -570,7 +570,7 @@ static void avdtp_handle_sdp_query_failed(avdtp_connection_t * connection, uint8
|
||||
switch (connection->state){
|
||||
case AVDTP_SIGNALING_W4_SDP_QUERY_FOR_REMOTE_SINK_COMPLETE:
|
||||
case AVDTP_SIGNALING_W4_SDP_QUERY_FOR_REMOTE_SOURCE_COMPLETE:
|
||||
avdtp_signaling_emit_connection_established(connection->avdtp_cid, connection->remote_addr, status);
|
||||
avdtp_signaling_emit_connection_established(connection->avdtp_cid, connection->remote_addr, connection->con_handle, status);
|
||||
break;
|
||||
|
||||
case AVDTP_SIGNALING_CONNECTION_OPENED:
|
||||
@ -698,7 +698,7 @@ static void avdtp_handle_sdp_client_query_result(uint8_t packet_type, uint16_t c
|
||||
(void) sdp_client_register_query_callback(&avdtp_handle_sdp_client_query_request);
|
||||
}
|
||||
|
||||
static avdtp_connection_t * avdtp_handle_incoming_connection(avdtp_connection_t * connection, bd_addr_t event_addr, uint16_t local_cid){
|
||||
static avdtp_connection_t * avdtp_handle_incoming_connection(avdtp_connection_t * connection, bd_addr_t event_addr, hci_con_handle_t con_handle, uint16_t local_cid){
|
||||
if (connection == NULL){
|
||||
uint16_t cid = avdtp_get_next_cid();
|
||||
connection = avdtp_create_connection(event_addr, cid);
|
||||
@ -707,6 +707,7 @@ static avdtp_connection_t * avdtp_handle_incoming_connection(avdtp_connection_t
|
||||
if (connection) {
|
||||
connection->state = AVDTP_SIGNALING_CONNECTION_W4_L2CAP_CONNECTED;
|
||||
connection->l2cap_signaling_cid = local_cid;
|
||||
connection->con_handle = con_handle;
|
||||
btstack_run_loop_remove_timer(&connection->retry_timer);
|
||||
}
|
||||
return connection;
|
||||
@ -741,6 +742,7 @@ void avdtp_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet
|
||||
uint16_t local_cid;
|
||||
uint8_t status;
|
||||
uint16_t l2cap_mtu;
|
||||
hci_con_handle_t con_handle;
|
||||
|
||||
bool accept_streaming_connection;
|
||||
bool outoing_signaling_active;
|
||||
@ -792,7 +794,7 @@ void avdtp_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);
|
||||
|
||||
con_handle = l2cap_event_incoming_connection_get_handle(packet);
|
||||
outoing_signaling_active = false;
|
||||
accept_streaming_connection = false;
|
||||
|
||||
@ -817,7 +819,7 @@ void avdtp_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet
|
||||
|
||||
decline_connection = outoing_signaling_active && !accept_streaming_connection;
|
||||
if (outoing_signaling_active == false){
|
||||
connection = avdtp_handle_incoming_connection(connection, event_addr, local_cid);
|
||||
connection = avdtp_handle_incoming_connection(connection, event_addr, con_handle, local_cid);
|
||||
if (connection == NULL){
|
||||
decline_connection = true;
|
||||
}
|
||||
@ -859,6 +861,8 @@ void avdtp_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet
|
||||
break;
|
||||
}
|
||||
|
||||
con_handle = l2cap_event_channel_opened_get_handle(packet);
|
||||
|
||||
switch (connection->state){
|
||||
case AVDTP_SIGNALING_CONNECTION_W4_L2CAP_CONNECTED:
|
||||
switch (status){
|
||||
@ -866,10 +870,10 @@ void avdtp_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet
|
||||
connection->l2cap_signaling_cid = local_cid;
|
||||
connection->incoming_declined = false;
|
||||
connection->l2cap_mtu = l2cap_mtu;
|
||||
connection->con_handle = con_handle;
|
||||
connection->state = AVDTP_SIGNALING_CONNECTION_OPENED;
|
||||
log_info("Connection opened l2cap_signaling_cid 0x%02x, avdtp_cid 0x%02x", connection->l2cap_signaling_cid, connection->avdtp_cid);
|
||||
avdtp_signaling_emit_connection_established(connection->avdtp_cid, event_addr,
|
||||
status);
|
||||
log_info("Connection opened l2cap_signaling_cid 0x%02x, avdtp_cid 0x%02x, con_handle 0x%02x", connection->l2cap_signaling_cid, connection->avdtp_cid, con_handle);
|
||||
avdtp_signaling_emit_connection_established(connection->avdtp_cid, event_addr, con_handle, status);
|
||||
return;
|
||||
case L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_RESOURCES:
|
||||
if (connection->incoming_declined == true) {
|
||||
@ -884,7 +888,7 @@ void avdtp_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet
|
||||
log_info("Connection to %s failed. status code 0x%02x", bd_addr_to_str(event_addr), status);
|
||||
break;
|
||||
}
|
||||
avdtp_signaling_emit_connection_established(connection->avdtp_cid, event_addr, status);
|
||||
avdtp_signaling_emit_connection_established(connection->avdtp_cid, event_addr, con_handle, status);
|
||||
avdtp_finalize_connection(connection);
|
||||
break;
|
||||
|
||||
|
@ -426,7 +426,8 @@ typedef struct {
|
||||
bd_addr_t remote_addr;
|
||||
|
||||
uint16_t avdtp_cid;
|
||||
|
||||
hci_con_handle_t con_handle;
|
||||
|
||||
// SDP results
|
||||
uint16_t avdtp_l2cap_psm;
|
||||
uint16_t avdtp_version;
|
||||
|
@ -482,8 +482,8 @@ int avdtp_signaling_create_fragment(uint16_t cid, avdtp_signaling_packet_t * sig
|
||||
}
|
||||
|
||||
|
||||
void avdtp_signaling_emit_connection_established(uint16_t avdtp_cid, bd_addr_t addr, uint8_t status) {
|
||||
uint8_t event[12];
|
||||
void avdtp_signaling_emit_connection_established(uint16_t avdtp_cid, bd_addr_t addr, hci_con_handle_t con_handle, uint8_t status) {
|
||||
uint8_t event[14];
|
||||
int pos = 0;
|
||||
event[pos++] = HCI_EVENT_AVDTP_META;
|
||||
event[pos++] = sizeof(event) - 2;
|
||||
@ -492,6 +492,8 @@ void avdtp_signaling_emit_connection_established(uint16_t avdtp_cid, bd_addr_t a
|
||||
pos += 2;
|
||||
reverse_bd_addr(addr,&event[pos]);
|
||||
pos += 6;
|
||||
little_endian_store_16(event, pos, con_handle);
|
||||
pos += 2;
|
||||
event[pos++] = status;
|
||||
avdtp_emit_sink_and_source(event, pos);
|
||||
}
|
||||
@ -1053,7 +1055,7 @@ void a2dp_emit_signaling_connection_established(btstack_packet_handler_t callbac
|
||||
btstack_assert(callback != NULL);
|
||||
packet[0] = HCI_EVENT_A2DP_META;
|
||||
packet[2] = A2DP_SUBEVENT_SIGNALING_CONNECTION_ESTABLISHED;
|
||||
packet[10] = status;
|
||||
packet[13] = status;
|
||||
(*callback)(HCI_EVENT_PACKET, 0, packet, size);
|
||||
}
|
||||
|
||||
|
@ -69,7 +69,7 @@ uint16_t avdtp_unpack_service_capabilities(avdtp_connection_t * connection, avdt
|
||||
void avdtp_prepare_capabilities(avdtp_signaling_packet_t * signaling_packet, uint8_t transaction_label, uint16_t service_categories, avdtp_capabilities_t capabilities, uint8_t identifier);
|
||||
int avdtp_signaling_create_fragment(uint16_t cid, avdtp_signaling_packet_t * signaling_packet, uint8_t * out_buffer);
|
||||
|
||||
void avdtp_signaling_emit_connection_established(uint16_t avdtp_cid, bd_addr_t addr, uint8_t status);
|
||||
void avdtp_signaling_emit_connection_established(uint16_t avdtp_cid, bd_addr_t addr, hci_con_handle_t con_handle, uint8_t status);
|
||||
|
||||
void avdtp_signaling_emit_connection_released(uint16_t avdtp_cid);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user