From 072cb49cdba074895678f63def089e4be1026bb7 Mon Sep 17 00:00:00 2001 From: Ravi Nagarajan Date: Tue, 14 Aug 2012 07:20:22 -0700 Subject: Avoid duplicate unsolicited indicators Avoid duplicate notifications for service, signal, roam and battery charge bug 6983415 Change-Id: If68ea7315de4f964e7fb83a6a628c8d2c29a333d --- bta/ag/bta_ag_cmd.c | 33 +++++++++++++++++++++++++++++++++ bta/ag/bta_ag_int.h | 4 ++++ 2 files changed, 37 insertions(+) mode change 100644 => 100755 bta/ag/bta_ag_cmd.c mode change 100644 => 100755 bta/ag/bta_ag_int.h diff --git a/bta/ag/bta_ag_cmd.c b/bta/ag/bta_ag_cmd.c old mode 100644 new mode 100755 index 632f6f5..0ee5153 --- a/bta/ag/bta_ag_cmd.c +++ b/bta/ag/bta_ag_cmd.c @@ -513,6 +513,35 @@ static void bta_ag_send_ind(tBTA_AG_SCB *p_scb, UINT16 id, UINT16 value, BOOLEAN p_scb->callsetup_ind = (UINT8)value; } + if ((id == BTA_AG_IND_SERVICE) && (on_demand == FALSE)) + { + if (value == p_scb->service_ind) + return; + + p_scb->service_ind = (UINT8)value; + } + if ((id == BTA_AG_IND_SIGNAL) && (on_demand == FALSE)) + { + if (value == p_scb->signal_ind) + return; + + p_scb->signal_ind = (UINT8)value; + } + if ((id == BTA_AG_IND_ROAM) && (on_demand == FALSE)) + { + if (value == p_scb->roam_ind) + return; + + p_scb->roam_ind = (UINT8)value; + } + if ((id == BTA_AG_IND_BATTCHG) && (on_demand == FALSE)) + { + if (value == p_scb->battchg_ind) + return; + + p_scb->battchg_ind = (UINT8)value; + } + if ((id == BTA_AG_IND_CALLHELD) && (on_demand == FALSE)) { /* call swap could result in sending callheld=1 multiple times */ @@ -1558,6 +1587,10 @@ void bta_ag_hfp_result(tBTA_AG_SCB *p_scb, tBTA_AG_API_RESULT *p_result) /* store local values */ p_scb->call_ind = p_result->data.str[0] - '0'; p_scb->callsetup_ind = p_result->data.str[2] - '0'; + p_scb->service_ind = p_result->data.str[4] - '0'; + p_scb->signal_ind = p_result->data.str[6] - '0'; + p_scb->roam_ind = p_result->data.str[8] - '0'; + p_scb->battchg_ind = p_result->data.str[10] - '0'; APPL_TRACE_DEBUG2("cind call:%d callsetup:%d", p_scb->call_ind, p_scb->callsetup_ind); bta_ag_send_result(p_scb, code, p_result->data.str, 0); diff --git a/bta/ag/bta_ag_int.h b/bta/ag/bta_ag_int.h old mode 100644 new mode 100755 index d8f681c..d953156 --- a/bta/ag/bta_ag_int.h +++ b/bta/ag/bta_ag_int.h @@ -270,6 +270,10 @@ typedef struct UINT8 post_sco; /* action to perform after sco event */ UINT8 call_ind; /* CIEV call indicator value */ UINT8 callsetup_ind; /* CIEV callsetup indicator value */ + UINT8 service_ind; /* CIEV service indicator value */ + UINT8 signal_ind; /* CIEV signal indicator value */ + UINT8 roam_ind; /* CIEV roam indicator value */ + UINT8 battchg_ind; /* CIEV battery charge indicator value */ UINT8 callheld_ind; /* CIEV call held indicator value */ BOOLEAN retry_with_sco_only; /* indicator to try with SCO only when eSCO fails */ UINT32 bia_masked_out; /* indicators HF does not want us to send */ -- cgit v1.1