hfp: use flag to relase SLC

This commit is contained in:
Milanka Ringwald 2019-01-27 22:17:15 +01:00
parent 8439fb24b0
commit 5f05305255

View File

@ -426,7 +426,6 @@ static hfp_connection_t * provide_hfp_connection_context_for_bd_addr(bd_addr_t b
hfp_connection = create_hfp_connection_context(); hfp_connection = create_hfp_connection_context();
memcpy(hfp_connection->remote_addr, bd_addr, 6); memcpy(hfp_connection->remote_addr, bd_addr, 6);
hfp_connection->local_role = local_role; hfp_connection->local_role = local_role;
log_info("Create HFP context %p: role %u, addr %s", hfp_connection, local_role, bd_addr_to_str(bd_addr)); log_info("Create HFP context %p: role %u, addr %s", hfp_connection, local_role, bd_addr_to_str(bd_addr));
return hfp_connection; return hfp_connection;
@ -524,7 +523,6 @@ static void handle_query_rfcomm_event(uint8_t packet_type, uint16_t channel, uin
UNUSED(packet_type); // ok: handling own sdp events UNUSED(packet_type); // ok: handling own sdp events
UNUSED(channel); // ok: no channel UNUSED(channel); // ok: no channel
UNUSED(size); // ok: handling own sdp events UNUSED(size); // ok: handling own sdp events
hfp_connection_t * hfp_connection = connection_doing_sdp_query; hfp_connection_t * hfp_connection = connection_doing_sdp_query;
if (!hfp_connection) { if (!hfp_connection) {
log_error("handle_query_rfcomm_event, no connection"); log_error("handle_query_rfcomm_event, no connection");
@ -735,6 +733,11 @@ void hfp_handle_hci_event(uint8_t packet_type, uint16_t channel, uint8_t *packet
hfp_connection->release_audio_connection = 0; hfp_connection->release_audio_connection = 0;
hfp_connection->state = HFP_SERVICE_LEVEL_CONNECTION_ESTABLISHED; hfp_connection->state = HFP_SERVICE_LEVEL_CONNECTION_ESTABLISHED;
hfp_emit_event(hfp_connection, HFP_SUBEVENT_AUDIO_CONNECTION_RELEASED, 0); hfp_emit_event(hfp_connection, HFP_SUBEVENT_AUDIO_CONNECTION_RELEASED, 0);
if (hfp_connection->release_slc_connection){
hfp_connection->state = HFP_W4_RFCOMM_DISCONNECTED;
hfp_connection->release_slc_connection = 0;
rfcomm_disconnect(hfp_connection->rfcomm_cid);
}
break; break;
} }
break; break;
@ -1477,7 +1480,6 @@ void hfp_establish_service_level_connection(bd_addr_t bd_addr, uint16_t service_
log_error("hfp_establish_service_level_connection for addr %s failed", bd_addr_to_str(bd_addr)); log_error("hfp_establish_service_level_connection for addr %s failed", bd_addr_to_str(bd_addr));
return; return;
} }
switch (hfp_connection->state){ switch (hfp_connection->state){
case HFP_W2_DISCONNECT_RFCOMM: case HFP_W2_DISCONNECT_RFCOMM:
hfp_connection->state = HFP_SERVICE_LEVEL_CONNECTION_ESTABLISHED; hfp_connection->state = HFP_SERVICE_LEVEL_CONNECTION_ESTABLISHED;
@ -1505,23 +1507,13 @@ void hfp_release_service_level_connection(hfp_connection_t * hfp_connection){
hfp_connection->state = HFP_IDLE; hfp_connection->state = HFP_IDLE;
return; return;
} }
if (hfp_connection->state == HFP_W4_RFCOMM_CONNECTED){ if (hfp_connection->state == HFP_W4_RFCOMM_CONNECTED){
hfp_connection->state = HFP_W4_CONNECTION_ESTABLISHED_TO_SHUTDOWN; hfp_connection->state = HFP_W4_CONNECTION_ESTABLISHED_TO_SHUTDOWN;
return; return;
} }
if (hfp_connection->state < HFP_W4_SCO_CONNECTED){ hfp_connection->release_slc_connection = 1;
hfp_connection->state = HFP_W2_DISCONNECT_RFCOMM;
return;
}
if (hfp_connection->state < HFP_W4_SCO_DISCONNECTED){
hfp_connection->state = HFP_W2_DISCONNECT_SCO;
return;
}
return;
} }
void hfp_release_audio_connection(hfp_connection_t * hfp_connection){ void hfp_release_audio_connection(hfp_connection_t * hfp_connection){