diff --git a/src/lynq/lib/liblynq-call/lynq_call.cpp b/src/lynq/lib/liblynq-call/lynq_call.cpp
index 0775118..b90b44b 100755
--- a/src/lynq/lib/liblynq-call/lynq_call.cpp
+++ b/src/lynq/lib/liblynq-call/lynq_call.cpp
@@ -1146,6 +1146,10 @@
 
 int lynq_call(int* handle,char addr[])
 {
+    if(g_lynq_call_init_flag == 0)
+    {
+        return -1;
+    }
     Parcel p;
     lynq_client_t client;
     int resp_type = -1;
@@ -1227,6 +1231,10 @@
 }
 int lynq_call_answer()
 {
+    if(g_lynq_call_init_flag == 0)
+    {
+        return -1;
+    }
     Parcel p;
     lynq_client_t client;
     int resp_type = -1;
@@ -1252,6 +1260,10 @@
 }
 int lynq_call_hungup(int* handle)
 {
+    if(g_lynq_call_init_flag == 0)
+    {
+        return -1;
+    }
     Parcel p;
     lynq_client_t client;
     int resp_type = -1;
@@ -1294,6 +1306,10 @@
 }
 int lynq_call_hungup_all()
 {
+    if(g_lynq_call_init_flag == 0)
+    {
+        return -1;
+    }
     Parcel p;
     lynq_client_t client;
     int resp_type = -1;
@@ -1319,6 +1335,10 @@
 }
 int lynq_wait_incoming_call(int *handle)
 {
+    if(g_lynq_call_init_flag == 0)
+    {
+        return -1;
+    }
     waitIncomingCall();
     *handle = lynqIncomingCallId;
     LYINFLOG("lynq incoming call id:%d",lynqIncomingCallId);
@@ -1327,12 +1347,20 @@
 
 int lynq_set_auto_answercall(const int mode)
 {
+    if(g_lynq_call_init_flag == 0)
+    {
+        return -1;
+    }
     global_call_auto_answer = mode;
     LYINFLOG("auto answer call mode =%d",mode);
     return 0;
 }
 int lynq_get_current_call_state(int *handle,    int *call_state,int *toa,int *direction,char addr[])
 {
+    if(g_lynq_call_init_flag == 0)
+    {
+        return -1;
+    }
     int lynq_call_id = 0;
     LYINFLOG("lynq_get_current_call_state begin ");
     if(handle==NULL)
@@ -1366,6 +1394,10 @@
 
 int lynq_set_mute_mic(const int enable)
 {   
+    if(g_lynq_call_init_flag == 0)
+    {
+        return -1;
+    }
     if(!judge_mic(enable)){
         return LYNQ_E_CONFLICT;
     }
@@ -1373,6 +1405,10 @@
 }
 int lynq_get_mute_mic(int *status)
 {
+    if(g_lynq_call_init_flag == 0)
+    {
+        return -1;
+    }
     return lynq_get_common_request(54,status);//RIL_REQUEST_GET_MUTE    
 }
 
@@ -1401,6 +1437,10 @@
 
 int lynq_switch_waiting_or_holding_and_active(void)
 {
+    if(g_lynq_call_init_flag == 0)
+    {
+        return -1;
+    }
     Parcel p;
     lynq_client_t client;
     int resp_type = -1;
@@ -1427,6 +1467,10 @@
 
 int lynq_hangup_waiting_or_background(void)
 {
+    if(g_lynq_call_init_flag == 0)
+    {
+        return -1;
+    }
     Parcel p;
     lynq_client_t client;
     int resp_type = -1;
@@ -1453,6 +1497,10 @@
 
 int lynq_hangup_foreground_resume_background(void)
 {
+    if(g_lynq_call_init_flag == 0)
+    {
+        return -1;
+    }
     Parcel p;
     lynq_client_t client;
     int resp_type = -1;
@@ -1479,6 +1527,10 @@
 
 int lynq_set_DTMF(const char callnum)
 {
+    if(g_lynq_call_init_flag == 0)
+    {
+        return -1;
+    }
     if(!judge_dtmf(callnum))
     {
         return LYNQ_E_CONFLICT;
@@ -1806,6 +1858,10 @@
 
 void* lynq_start_rtp_cmd(void *arg)
 {
+    if(g_lynq_call_init_flag == 0)
+    {
+        return -1;
+    }
     int* rtp_mode= (int*) arg;
     char cmd[384];
     LYINFLOG("lynq_start_rtp_cmd: rtp_mode is %d",(*rtp_mode));    
@@ -1849,6 +1905,10 @@
 /*set*/
 int lynq_set_voice_audio_mode(const LYNQ_Audio_Mode audio_mode)
 {
+    if(g_lynq_call_init_flag == 0)
+    {
+        return -1;
+    }
     int ret;
     int i;
     
@@ -1954,6 +2014,10 @@
 /*get*/
 LYNQ_Audio_Mode lynq_get_voice_audio_mode()
 {
+    if(g_lynq_call_init_flag == 0)
+    {
+        return -1;
+    }
     if(g_rtp_thread_valid[0])
     {
         return AUDIO_MODE_RTP;
@@ -1965,6 +2029,10 @@
 }
 int lynq_get_remote_rtp_ip(char* ip, const int ip_length)
 {
+    if(g_lynq_call_init_flag == 0)
+    {
+        return -1;
+    }
     if(ip==NULL)
     {
         LYERRLOG("ip is NULL");
@@ -1982,6 +2050,10 @@
 }
 int lynq_get_rtp_port(const LYNQ_Rtp_Mode rtp_mode, int* port)
 {
+    if(g_lynq_call_init_flag == 0)
+    {
+        return -1;
+    }
     if(port==NULL)
     {
         return 1;
@@ -1998,6 +2070,10 @@
 }
 int lynq_get_rtp_param(int* clock_rate, int* channels, int* latency)//only for client mode
 {
+    if(g_lynq_call_init_flag == 0)
+    {
+        return -1;
+    }
     if(clock_rate == NULL || channels ==NULL || latency ==NULL)
     {
         LYERRLOG("input parameter is NULL");
