diff options
-rw-r--r-- | bta/ag/bta_ag_cmd.c | 3 | ||||
-rw-r--r-- | btif/src/btif_hf.c | 17 |
2 files changed, 12 insertions, 8 deletions
diff --git a/bta/ag/bta_ag_cmd.c b/bta/ag/bta_ag_cmd.c index 7787a75..ae0febd 100644 --- a/bta/ag/bta_ag_cmd.c +++ b/bta/ag/bta_ag_cmd.c @@ -515,7 +515,8 @@ static void bta_ag_send_ind(tBTA_AG_SCB *p_scb, UINT16 id, UINT16 value, BOOLEAN if ((id == BTA_AG_IND_CALLHELD) && (on_demand == FALSE)) { - if (value == p_scb->callheld_ind) + /* call swap could result in sending callheld=1 multiple times */ + if ((value != 1) && (value == p_scb->callheld_ind)) return; p_scb->callheld_ind = (UINT8)value; diff --git a/btif/src/btif_hf.c b/btif/src/btif_hf.c index f2e5bbf..3079214 100644 --- a/btif/src/btif_hf.c +++ b/btif/src/btif_hf.c @@ -726,14 +726,17 @@ static bt_status_t cind_response(int svc, int num_active, int num_held, tBTA_AG_RES_DATA ag_res; memset (&ag_res, 0, sizeof (ag_res)); + /* per the errata 2043, call=1 implies atleast one call is in progress (active/held) + ** https://www.bluetooth.org/errata/errata_view.cfm?errata_id=2043 + **/ sprintf (ag_res.str, "%d,%d,%d,%d,%d,%d,%d", - (num_active ? 1 : 0), /* Call state */ - callstate_to_callsetup(call_setup_state), /* Callsetup state */ - svc, /* network service */ - signal, /* Signal strength */ - roam, /* Roaming indicator */ - batt_chg, /* Battery level */ - (num_held ? 1 : 0)); /* Call held */ + (num_active + num_held) ? 1 : 0, /* Call state */ + callstate_to_callsetup(call_setup_state), /* Callsetup state */ + svc, /* network service */ + signal, /* Signal strength */ + roam, /* Roaming indicator */ + batt_chg, /* Battery level */ + ((num_held == 0) ? 0 : ((num_active == 0) ? 2 : 1))); /* Call held */ BTA_AgResult (btif_hf_cb.handle, BTA_AG_CIND_RES, &ag_res); |