hfp_hf: handle ag indicator status independent from status changed flag

This commit is contained in:
Matthias Ringwald 2025-03-14 10:19:40 +01:00
parent 5589c51d36
commit 578700050e

View File

@ -1355,34 +1355,32 @@ static void hfp_hf_handle_transfer_ag_indicator_status(hfp_connection_t * hfp_co
uint16_t i; uint16_t i;
for (i = 0; i < hfp_connection->ag_indicators_nr; i++){ for (i = 0; i < hfp_connection->ag_indicators_nr; i++){
if (hfp_connection->ag_indicators[i].status_changed) { if (strcmp(hfp_connection->ag_indicators[i].name, "callsetup") == 0){
if (strcmp(hfp_connection->ag_indicators[i].name, "callsetup") == 0){ hfp_callsetup_status_t new_hf_callsetup_status = (hfp_callsetup_status_t) hfp_connection->ag_indicators[i].status;
hfp_callsetup_status_t new_hf_callsetup_status = (hfp_callsetup_status_t) hfp_connection->ag_indicators[i].status; bool ringing_old = hfp_is_ringing(hfp_connection->hf_callsetup_status);
bool ringing_old = hfp_is_ringing(hfp_connection->hf_callsetup_status); bool ringing_new = hfp_is_ringing(new_hf_callsetup_status);
bool ringing_new = hfp_is_ringing(new_hf_callsetup_status); if (ringing_old != ringing_new){
if (ringing_old != ringing_new){ if (ringing_new){
if (ringing_new){ hfp_emit_simple_event(hfp_connection, HFP_SUBEVENT_START_RINGING);
hfp_emit_simple_event(hfp_connection, HFP_SUBEVENT_START_RINGING); } else {
} else { hfp_emit_simple_event(hfp_connection, HFP_SUBEVENT_STOP_RINGING);
hfp_emit_simple_event(hfp_connection, HFP_SUBEVENT_STOP_RINGING);
}
} }
hfp_connection->hf_callsetup_status = new_hf_callsetup_status;
} else if (strcmp(hfp_connection->ag_indicators[i].name, "callheld") == 0){
hfp_connection->hf_callheld_status = (hfp_callheld_status_t) hfp_connection->ag_indicators[i].status;
// avoid set but not used warning
(void) hfp_connection->hf_callheld_status;
} else if (strcmp(hfp_connection->ag_indicators[i].name, "call") == 0){
hfp_call_status_t new_hf_call_status = (hfp_call_status_t) hfp_connection->ag_indicators[i].status;
if (hfp_connection->hf_call_status != new_hf_call_status){
if (new_hf_call_status == HFP_CALL_STATUS_NO_HELD_OR_ACTIVE_CALLS){
hfp_emit_simple_event(hfp_connection, HFP_SUBEVENT_CALL_TERMINATED);
} else {
hfp_emit_simple_event(hfp_connection, HFP_SUBEVENT_CALL_ANSWERED);
}
}
hfp_connection->hf_call_status = new_hf_call_status;
} }
hfp_connection->hf_callsetup_status = new_hf_callsetup_status;
} else if (strcmp(hfp_connection->ag_indicators[i].name, "callheld") == 0){
hfp_connection->hf_callheld_status = (hfp_callheld_status_t) hfp_connection->ag_indicators[i].status;
// avoid set but not used warning
(void) hfp_connection->hf_callheld_status;
} else if (strcmp(hfp_connection->ag_indicators[i].name, "call") == 0){
hfp_call_status_t new_hf_call_status = (hfp_call_status_t) hfp_connection->ag_indicators[i].status;
if (hfp_connection->hf_call_status != new_hf_call_status){
if (new_hf_call_status == HFP_CALL_STATUS_NO_HELD_OR_ACTIVE_CALLS){
hfp_emit_simple_event(hfp_connection, HFP_SUBEVENT_CALL_TERMINATED);
} else {
hfp_emit_simple_event(hfp_connection, HFP_SUBEVENT_CALL_ANSWERED);
}
}
hfp_connection->hf_call_status = new_hf_call_status;
} }
} }
} }