diff --git a/src/classic/hfp_ag.c b/src/classic/hfp_ag.c index 1f40de405..8cb705911 100644 --- a/src/classic/hfp_ag.c +++ b/src/classic/hfp_ag.c @@ -1163,19 +1163,6 @@ static void hfp_ag_trigger_incoming_call_during_active_one(void){ } } -static void hfp_ag_hf_trigger_ring_and_clip(hfp_connection_t * hfp_connection){ - // Queue RING on this connection - hfp_connection->ag_ring = 1; - - // HFP v1.8, 4.23 Calling Line Identification (CLI) Notification - // "If the calling subscriber number information is available from the network, the AG shall issue the - // +CLIP unsolicited result code just after every RING indication when the HF is alerted in an incoming call." - hfp_connection->ag_send_clip = hfp_gsm_clip_type() && hfp_connection->clip_enabled; - - // trigger next message - rfcomm_request_can_send_now_event(hfp_connection->rfcomm_cid); -} - static void hfp_ag_trigger_ring_and_clip(void) { btstack_linked_list_iterator_t it; btstack_linked_list_iterator_init(&it, hfp_get_connections()); @@ -1185,11 +1172,17 @@ static void hfp_ag_trigger_ring_and_clip(void) { switch (hfp_connection->call_state){ case HFP_CALL_INCOMING_RINGING: case HFP_CALL_OUTGOING_RINGING: - hfp_ag_hf_trigger_ring_and_clip(hfp_connection); - break; case HFP_CALL_W4_AUDIO_CONNECTION_FOR_IN_BAND_RING: - // delay RING until audio connection has been established - // hfp_ag_hf_trigger_ring_and_clip is called in call_setup_state_machine + // Queue RING on this connection + hfp_connection->ag_ring = 1; + + // HFP v1.8, 4.23 Calling Line Identification (CLI) Notification + // "If the calling subscriber number information is available from the network, the AG shall issue the + // +CLIP unsolicited result code just after every RING indication when the HF is alerted in an incoming call." + hfp_connection->ag_send_clip = hfp_gsm_clip_type() && hfp_connection->clip_enabled; + + // trigger next message + rfcomm_request_can_send_now_event(hfp_connection->rfcomm_cid); break; default: break; @@ -1468,12 +1461,9 @@ static int call_setup_state_machine(hfp_connection_t * hfp_connection){ switch (hfp_connection->call_state){ case HFP_CALL_W4_AUDIO_CONNECTION_FOR_IN_BAND_RING: if (hfp_connection->state != HFP_AUDIO_CONNECTION_ESTABLISHED) return 0; - // we got event: audio hfp_connection established hfp_connection->call_state = HFP_CALL_INCOMING_RINGING; - // now, we can (start) sending RING - hfp_ag_hf_trigger_ring_and_clip(hfp_connection); - break; + break; case HFP_CALL_W4_AUDIO_CONNECTION_FOR_ACTIVE: if (hfp_connection->state != HFP_AUDIO_CONNECTION_ESTABLISHED) return 0; // we got event: audio hfp_connection established @@ -2087,21 +2077,25 @@ static int hfp_ag_send_commands(hfp_connection_t *hfp_connection){ return 1; } - if (hfp_connection->ag_ring){ - hfp_connection->ag_ring = 0; - hfp_connection->command = HFP_CMD_NONE; - hfp_emit_simple_event(hfp_connection, HFP_SUBEVENT_RING); - hfp_ag_send_ring(hfp_connection->rfcomm_cid); - return 1; + // delay RING/CLIP until audio connection has been established for incoming calls + // hfp_ag_hf_trigger_ring_and_clip is called in call_setup_state_machine + if (hfp_connection->call_state != HFP_CALL_W4_AUDIO_CONNECTION_FOR_IN_BAND_RING){ + if (hfp_connection->ag_ring){ + hfp_connection->ag_ring = 0; + hfp_connection->command = HFP_CMD_NONE; + hfp_emit_simple_event(hfp_connection, HFP_SUBEVENT_RING); + hfp_ag_send_ring(hfp_connection->rfcomm_cid); + return 1; + } + + if (hfp_connection->ag_send_clip){ + hfp_connection->ag_send_clip = 0; + hfp_connection->command = HFP_CMD_NONE; + hfp_ag_send_clip(hfp_connection->rfcomm_cid); + return 1; + } } - if (hfp_connection->ag_send_clip){ - hfp_connection->ag_send_clip = 0; - hfp_connection->command = HFP_CMD_NONE; - hfp_ag_send_clip(hfp_connection->rfcomm_cid); - return 1; - } - if (hfp_connection->send_phone_number_for_voice_tag){ hfp_connection->send_phone_number_for_voice_tag = 0; hfp_connection->command = HFP_CMD_NONE;