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");
diff --git a/src/lynq/lib/liblynq-sim/src/lynq_sim.cpp b/src/lynq/lib/liblynq-sim/src/lynq_sim.cpp
index b9f12ea..76403e1 100755
--- a/src/lynq/lib/liblynq-sim/src/lynq_sim.cpp
+++ b/src/lynq/lib/liblynq-sim/src/lynq_sim.cpp
@@ -136,6 +136,10 @@
 /*If you need to use any API under lynq_sim, you mustfirst call the lynq_sim_init() function to initialize these functions.*/
 int lynq_get_sim_status(int *card_status)
 {   
+    if(g_lynq_sim_init_flag == 0)
+    {
+        return -1;
+    }
     int ret = -1;
     if(card_status == NULL)
         return ret;
@@ -181,6 +185,10 @@
 
 int lynq_get_imsi(char buf[])
 {   
+    if(g_lynq_sim_init_flag == 0)
+    {
+        return -1;
+    }
     int ret = -1;
     if(buf == NULL)
         return ret;
@@ -230,6 +238,10 @@
 /*add by lei*/
 
 int lynq_get_iccid(char buf[]){
+    if(g_lynq_sim_init_flag == 0)
+    {
+        return -1;
+    }
     int ret = -1;
     if(buf == NULL)
         return ret;
@@ -274,6 +286,10 @@
 }
 
 int lynq_enable_pin(char *pin){
+    if(g_lynq_sim_init_flag == 0)
+    {
+        return -1;
+    }
     int ret = -1;
     if(pin == NULL)
         return ret;
@@ -316,6 +332,10 @@
 }
 
 int lynq_disable_pin(char *pin){
+    if(g_lynq_sim_init_flag == 0)
+    {
+        return -1;
+    }
     int ret = -1;
     if(pin == NULL)
         return ret;
@@ -355,6 +375,10 @@
 }
 
 int lynq_query_pin_lock(char *pin,int buf[]){
+    if(g_lynq_sim_init_flag == 0)
+    {
+        return -1;
+    }
     int ret = -1;
     if(pin == NULL)
         return ret;
@@ -405,6 +429,10 @@
 }
 
 int lynq_verify_pin(char *pin){
+    if(g_lynq_sim_init_flag == 0)
+    {
+        return -1;
+    }
     int ret = -1;
     if(pin == NULL)
         return ret;
@@ -445,6 +473,10 @@
 }
 
 int lynq_change_pin(char *old_pin, char *new_pin){
+    if(g_lynq_sim_init_flag == 0)
+    {
+        return -1;
+    }
     int ret = -1;
     if(old_pin == NULL || new_pin == NULL)
         return ret;
@@ -489,6 +521,10 @@
 }
 
 int lynq_unlock_pin(char *puk, char *pin){
+    if(g_lynq_sim_init_flag == 0)
+    {
+        return -1;
+    }
     int ret = -1;
     if(puk == NULL || pin == NULL)
         return ret;
@@ -587,6 +623,10 @@
 }
 
 int lynq_query_phone_number(char buf[]){
+    if(g_lynq_sim_init_flag == 0)
+    {
+        return -1;
+    }
     int ret = -1;
     if(buf == NULL)
         return ret;
@@ -654,7 +694,11 @@
 }
 
 int lynq_get_imei(char buf[])
-{   
+{
+    if(g_lynq_sim_init_flag == 0)
+    {
+        return -1;
+    }
     int ret = -1;
     if(buf == NULL)
         return ret;
@@ -714,6 +758,10 @@
 }
 
 int lynq_switch_card(int slot){
+    if(g_lynq_sim_init_flag == 0)
+    {
+        return -1;
+    }
     int ret = -1;
     if(!judge(slot))
         return ret;
@@ -734,6 +782,10 @@
 }
 
 int lynq_screen(int num){
+    if(g_lynq_sim_init_flag == 0)
+    {
+        return -1;
+    }
     int ret = -1;
     if(!judge(num))
         return ret;
@@ -817,7 +869,11 @@
 }
 
 int lynq_req_sim_io(int list[5], char *path, char *data, char *pin2, char *aidPtr, int sw[2], char *simResponse)
-{   
+{
+    if(g_lynq_sim_init_flag == 0)
+    {
+        return -1;
+    }
     int ret = -1;
     if(judge_illegal(list, path, data, pin2, aidPtr, sw, simResponse))
     {
diff --git a/src/lynq/lib/liblynq-sms/src/lynq_sms.cpp b/src/lynq/lib/liblynq-sms/src/lynq_sms.cpp
index 0a44eba..ff92141 100755
--- a/src/lynq/lib/liblynq-sms/src/lynq_sms.cpp
+++ b/src/lynq/lib/liblynq-sms/src/lynq_sms.cpp
@@ -156,6 +156,10 @@
 }
 int lynq_wait_receive_new_sms(int *handle)
 {
+    if(g_lynq_sms_init_flag == 0)
+    {
+        return -1;
+    }
     if(handle==NULL)
     {
         LYERRLOG("handle is null!!!");
@@ -387,6 +391,10 @@
 
 int lynq_send_sms(char telephony_num[TELEPHONE_NUM_LEN], int charset, char *msg)
 {
+    if(g_lynq_sms_init_flag == 0)
+    {
+        return -1;
+    }
     lynq_client_t client;
     int ret = SMS_OK;
     if (NULL == msg)
@@ -413,6 +421,10 @@
 
 int lynq_read_sms(int index,int *status,int *charset,char smsc[SMSC_MAX_LEN],int *smscLen,int *smslen,char message[MSG_MAX_LEN],char teleNum[TELEPHONE_NUM_LEN],int *numLen,int *current,int *total)
 {
+    if(g_lynq_sms_init_flag == 0)
+    {
+        return -1;
+    }
     lynq_client_t client;
     lynq_sms_msg_info_t sms_msg_info;
     int lenTemp = -1;
@@ -453,6 +465,10 @@
 
 int lynq_get_smsc_address(char service_num[SMSC_MAX_LEN])
 {
+    if(g_lynq_sms_init_flag == 0)
+    {
+        return -1;
+    }
     if(NULL == service_num)
     {
         return -1;
@@ -473,6 +489,10 @@
 
 int lynq_set_smsc_address(const char* service_num)
 {
+    if(g_lynq_sms_init_flag == 0)
+    {
+        return -1;
+    }
     if(NULL == service_num)
     {
         return -1;
@@ -499,6 +519,10 @@
 
 int lynq_list_sms(char index_list[SMS_NUM_MAX])
 {
+    if(g_lynq_sms_init_flag == 0)
+    {
+        return -1;
+    }
     lynq_client_t client;
     int ret = SMS_OK;
     client.request = LYNQ_REQUEST_LIST_SMS_FROM_MEMORY;
@@ -513,6 +537,10 @@
 
 int lynq_delete_sms(int index)
 {
+    if(g_lynq_sms_init_flag == 0)
+    {
+        return -1;
+    }
     lynq_client_t client;
     int ret = SMS_OK;
     client.request = LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY;
