Merge "[Feature][ZXW-59][AUTOSUSPEND]fix autosuspend demo address"
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h b/cap/zx297520v3/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h
index ec50ef7..3bb398f 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h
@@ -64,6 +64,9 @@
 int lynq_hangup_waiting_or_background(void);

 int lynq_hangup_foreground_resume_background(void);

 

+/* add for T106bug-213 2023/9/18 */

+void lynq_release_wait_call();

+

 /*lei add for API-163/API-164 2023/1/3*/

 /**

  * @brief                  wait_call_state_change

diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-call/lynq_call.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-call/lynq_call.cpp
index b40f6c1..58849e7 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-call/lynq_call.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-call/lynq_call.cpp
@@ -765,7 +765,6 @@
         return LYNQ_E_PARAMETER_ANONALY;

     }

     g_module_init_flag = MODULE_SWITCHING;

-    s_call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;

     

     LYLOGSET(LOG_INFO);

     LYLOGEINIT(USER_LOG_TAG);   

@@ -819,7 +818,6 @@
     lynq_close_all_rc_socket_thread();    

     lynq_stop_call_list_loop();

     g_module_init_flag = MODULE_CLOSED;

-    pthread_mutex_destroy(&s_call_state_change_mutex);

     return 0;

 }

 

@@ -1457,7 +1455,10 @@
 }

 /*audio end*/

 

-

+void lynq_release_wait_call()

+{

+    pthread_cond_signal(&s_call_state_change_cond);

+}

 

 bool is_support_urc(int urc_id)

 {

diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-voice/lynq-qser-voice.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-voice/lynq-qser-voice.cpp
index fa210e6..a35a192 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-voice/lynq-qser-voice.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-voice/lynq-qser-voice.cpp
@@ -48,6 +48,10 @@
     while (s_voice_thread_status)
     {
         lynq_wait_call_state_change(&handle);
+        if(s_voice_thread_status == 0)
+        {
+            return NULL;
+        }
         lynq_get_current_call_state(&handle,&call_state,&toa,&direction,addr);
         if (call_state == LYNQ_CALL_ACTIVE)
         {
@@ -141,19 +145,14 @@
 
 int qser_voice_call_removestatehandle(voice_client_handle_type h_voice)
 {
-    int ret;
-    if (s_lynq_voice_tid != -1)
-    {
-        ret = pthread_cancel(s_lynq_voice_tid);
-        LYDBGLOG("pthread cancel ret = %d",ret);
-    }
-    if (s_lynq_voice_tid != -1)
-    {
-        ret = pthread_join(s_lynq_voice_tid,NULL);
-        LYDBGLOG("pthread cancel ret = %d",ret);
-        s_lynq_voice_tid = -1;
-    }
+
+    LYINFLOG("Enter removestatehandle !!!");
     s_voice_thread_status = 0;
+    if(s_lynq_voice_tid != -1)
+    {
+        lynq_release_wait_call();            
+    }
+    
     s_voice_cb = NULL;
     return RESULT_OK;
 }
diff --git a/cap/zx297520v3/src/lynq/lib/libpoweralarm/libpoweralarm.cpp b/cap/zx297520v3/src/lynq/lib/libpoweralarm/libpoweralarm.cpp
index 3d17411..b3b7827 100755
--- a/cap/zx297520v3/src/lynq/lib/libpoweralarm/libpoweralarm.cpp
+++ b/cap/zx297520v3/src/lynq/lib/libpoweralarm/libpoweralarm.cpp
@@ -31,7 +31,6 @@
 

 

 static int wk_rtc_id = 1;

-static int pw_rtc_id = 2;

 static int wk_srcid = 0;

 

 typedef int (*sc_rtc_timer_exp_cb)(unsigned int src_id, int rtc_id);

@@ -42,6 +41,10 @@
 

 extern int sc_rtc_timer_add_utc(int srcid, int rtc_id, struct tm *utc_sec, int wakeup, sc_rtc_timer_exp_cb rtc_notify);

 

+extern int sc_rtc_get_poweroff_alarm_modid(int src_id,char *name);

+

+extern int sc_rtc_add_poweroff_alarm(int srcid, int alarm_modid, int rtc_id, struct tm *utc_sec, sc_rtc_timer_exp_cb rtc_notify);

+

 /*****************************************

 * @brief:sc_rtc_timer_add_cb

 * @param count [IN]:src_id, rtc_id,

@@ -72,10 +75,10 @@
     int ret = 0;

     char *buf_bak = buffer;

     time_t tmp_time = 0;

-    struct tm *ptime = NULL;

+

     struct tm *wake_arlarm = NULL;

     tmp_time = time(NULL);

-    ptime = localtime(&tmp_time);

+    localtime(&tmp_time);

     

     LYLOGSET(LOG_INFO);

     LYLOGEINIT(USER_LOG_TAG);

@@ -155,7 +158,15 @@
     unsigned long  time_sec = 0;

     int ret = 0;

     char *buf_bak = buffer;

-    

+

+    int alarmid = 0;

+    char username[8] = "user";

+    time_t tmp_time = 0;

+    struct tm *power_arlarm = NULL;

+    tmp_time = time(NULL);

+    localtime(&tmp_time);

+

+

     LYLOGSET(LOG_INFO);

     LYLOGEINIT(USER_LOG_TAG);

    

@@ -181,6 +192,10 @@
 

     buffer = buf_bak;

     time_sec = strtoul(buffer,NULL,10);

+

+    tmp_time += time_sec;

+    power_arlarm = localtime(&tmp_time);

+    

     if(time_sec < MIN_TIME || time_sec > MAX_TIME || errno == ERANGE)

     {

         LYERRLOG("Illeagle input: too large or too small !!!");

@@ -194,23 +209,30 @@
         LYERRLOG("rtc_timer_init fail!");

         return -1;

     }

-    ret = sc_rtc_timer_add(srcid, pw_rtc_id, time_sec, sc_rtc_timer_add_cb);

-    if(ret < 0)

+

+    alarmid = sc_rtc_get_poweroff_alarm_modid(srcid, username);

+    if(alarmid < 0)

     {

-        LYERRLOG("Add  rtc timer failed!!!!");

+        LYERRLOG("Get poweroff alarm id failed !!!");

         return -1;

     }

-    

-    LYINFLOG("Set poweralarm success !!!");

+

+    ret = sc_rtc_add_poweroff_alarm(srcid, alarmid, 0, power_arlarm, sc_rtc_timer_add_cb);

+    if(ret < 0)

+    {

+        LYERRLOG("Set power alarm failed !!!");

+        return -1;

+    }

+    LYINFLOG("Set power alarm success !!!!");

 

     ret = sc_rtc_timer_uninit();

     if(ret != 0)

     {

-        LYINFLOG("Deinit failed");

+        LYINFLOG("Deinit failed!!!");

     }

     

     return 0;

-

+    

 }

 

 /**********************************************

@@ -254,6 +276,18 @@
     int ret = 0;

     int srcid = 0;

 

+    int alarmid = 0;

+    char username[8] = "user";

+    

+    time_t tmp_time = 0;

+    struct tm *power_arlarm = NULL;

+    tmp_time = time(NULL);

+    localtime(&tmp_time);

+    

+

+    tmp_time += time_sec;

+    power_arlarm = localtime(&tmp_time);

+    

     LYLOGSET(LOG_INFO);

     LYLOGEINIT(USER_LOG_TAG);

     

@@ -262,30 +296,39 @@
         LYERRLOG("Illeagle input: too large or too small !!!");

         return -1;

     }

-    

-    LYINFLOG("lynq_set_poweralarm %lu seconds",time_sec);

+

+    LYINFLOG("lynq_set_poweralarm  %lu seconds",time_sec);

     srcid = sc_rtc_timer_init();

     if (srcid <= 0)

     {

         LYERRLOG("rtc_timer_init fail!");

         return -1;

     }

-    ret = sc_rtc_timer_add(srcid, pw_rtc_id, time_sec, sc_rtc_timer_add_cb);

+

+    alarmid = sc_rtc_get_poweroff_alarm_modid(srcid, username);

+    if(alarmid < 0)

+    {

+        LYERRLOG("Get poweroff alarm id failed !!!");

+        return -1;

+    }

+

+    ret = sc_rtc_add_poweroff_alarm(srcid, alarmid, 0, power_arlarm, sc_rtc_timer_add_cb);

     if(ret < 0)

     {

-        LYINFLOG("Add  rtc timer failed!!!!");

+        LYERRLOG("Set power alarm failed !!!");

         return -1;

     }

     

-    LYINFLOG("Set poweralarm success !!!");

-

+    LYINFLOG("Set power alarm success !!!!");

+    

     ret = sc_rtc_timer_uninit();

     if(ret != 0)

     {

-        LYINFLOG("Deinit failed");

+        LYINFLOG("Deinit rtc_timer  failed!!!");

     }

     

     return 0;

+    

 

 }

 

@@ -304,10 +347,9 @@
     int ret = 0;

     

     time_t tmp_time = 0;

-    struct tm *ptime = NULL;

     struct tm *wake_arlarm = NULL;

     tmp_time = time(NULL);

-    ptime = localtime(&tmp_time);

+    localtime(&tmp_time);

     

     LYLOGSET(LOG_INFO);

     LYLOGEINIT(USER_LOG_TAG);