[bugfix][API-1525][call] answer call sometimes fail
Affected branch: unknown
Affected module: unknown
Is it affected on both ZXIC and MTK: MTK
Self-test: Yes
Doc Update: No
Change-Id: I149fdd9cbbff204c6257252889f53850b55758e0
diff --git a/common_src/lib/liblynq-call/lynq_call.cpp b/common_src/lib/liblynq-call/lynq_call.cpp
index 8e80462..8e6943d 100755
--- a/common_src/lib/liblynq-call/lynq_call.cpp
+++ b/common_src/lib/liblynq-call/lynq_call.cpp
@@ -31,6 +31,8 @@
#define LIBMODEM_AFE "/tmp/libmodem-afe-ctrl"
#define TELE_DEMO_LOCK "/tmp/tel_demo_single_proc.lock"
+#define MAX_RING_INCOMING_INTERVAL 10
+
using ::android::Parcel;
/**
@@ -85,6 +87,8 @@
static int s_module_call_state =CALL_OFF;
static int s_call_auto_answer = 0;
+static time_t s_rev_ring_time=0;
+
typedef enum{
LYNQ_E_VOLUMN_SET_DTMF,
@@ -422,6 +426,10 @@
#ifdef ECALL_SUPPORT
int handupIncomingMT=0;
#endif
+ unsigned long interval;
+ time_t now;
+
+
pthread_mutex_lock(&s_notice_get_call_list_mutex);
pthread_cleanup_push(cleanup_call_list_mutex, NULL); // thread cleanup handler
int tmp_call_id;
@@ -513,6 +521,17 @@
n = find_call_id_with_addr(call_list[i].addr);
if(n ==INVALID_ID)
{
+ if(s_call_auto_answer==false && call_list[i].call_state==LYNQ_CALL_INCOMING)
+ {
+ time(&now);
+ interval = difftime(now,s_rev_ring_time);
+ if(interval>MAX_RING_INCOMING_INTERVAL)
+ {
+ LYINFLOG("recv incoming, %d second no ril ring",interval);
+ continue;
+ }
+ }
+
n = addAddr(call_list[i].addr,call_list[i].call_id);
updateCallList(&s_call_lists[n],call_list[i].call_id,call_list[i].call_state,call_list[i].toa,call_list[i].direction);
send_call_state_change(call_list[i].call_id);
@@ -1539,6 +1558,7 @@
}
case RIL_UNSOL_CALL_RING: //1018
{
+ time(&s_rev_ring_time);
if(s_call_auto_answer==1)
{
lynq_call_answer();