summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bta/ag/bta_ag_cmd.c3
-rw-r--r--btif/src/btif_hf.c17
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);