diff --git a/src/lynq/lib/liblynq-data/lynq_data.cpp b/src/lynq/lib/liblynq-data/lynq_data.cpp
index facd0fe..248000d 100755
--- a/src/lynq/lib/liblynq-data/lynq_data.cpp
+++ b/src/lynq/lib/liblynq-data/lynq_data.cpp
@@ -62,6 +62,18 @@
     LYNQ_E_NULL_ANONALY=9001
 }LYNQ_E;
 
+typedef enum {
+    PDN_IDLE,
+    PDN_CONNECTING,
+    PDN_CONNECTED,
+    PDN_DISCONNECTING,
+    PDN_DISCONNECTED,
+    PDN_RETRYING,
+    PDN_FAILED,
+    PDN_SCANNING,
+    PDN_TIMEOUT_CANCEL,
+} RIL_Data_Call_PdnState;
+
 int lynq_client_sockfd = 0;
 int Global_uToken = 0;
 struct sockaddr_in lynq_data_socket_server_addr;
@@ -102,6 +114,7 @@
 * @brief temp of apn result info
 */
 char g_lynq_apn_result[1024] = {};
+int g_data_call_timeout_value = LYNQ_DATA_TIME_OUT;
 
 static std::vector<int> s_data_urc_wait_list;
 
@@ -627,7 +640,7 @@
             bzero(apn,LYNQ_APN_MAX_LEN);
             bzero(apnType,LYNQ_APN_TYPE_MAX_LEN);
             bzero(ifaceName,LYNQ_IFACE_NAME_MAX_LEN);
-            if(pdnState!=4)//PDN_DISCONNECTED
+            if(pdnState != RIL_Data_Call_PdnState::PDN_DISCONNECTED)//PDN_DISCONNECTED
             {
                 urc_msg = strdupReadString_p(p);
                 int len = strlen(urc_msg);
@@ -709,8 +722,15 @@
                         LYERRLOG("client still without res");
                         break;
                     }
+                    if(pdnState == RIL_Data_Call_PdnState::PDN_TIMEOUT_CANCEL)
+                    {
+                        lynq_data_call = LYNQ_E_TIME_OUT;
+                    }
+                    else
+                    {
+                        lynq_data_call = 0;
+                    }
                     sendSignalDataCallStateChange();
-                    lynq_data_call = 0;
                     data_timelimit = 0;
                 }
                 printf_apn_table_debug(__FUNCTION__,__LINE__);
@@ -842,6 +862,7 @@
 int get_imsi();
 int check_apn_status();
 
+int get_timeout_value();
 int lynq_init_data(int uToken)
 {
     if (g_lynq_data_init_flag == 1)
@@ -854,6 +875,15 @@
     Global_uToken = uToken;
     LYLOGSET(LOG_INFO);
     LYLOGEINIT(USER_LOG_TAG);
+    int ret = get_timeout_value();
+    if(ret >= 30000)
+    {
+        g_data_call_timeout_value = ret;
+    }
+    else
+    {
+        LYERRLOG("timeout must greater or equal to 30s!!!");
+    }
     result = lynq_socket_client_start();
     pthread_mutex_init(&g_lynq_data_sendto_mutex, NULL);
     if(result!=0)
@@ -952,6 +982,11 @@
 int lynq_setup_data_call(int *handle)
 {
     int error = -1;
+    if (g_lynq_data_init_flag == 0)
+    {
+        LYERRLOG("[%s][%d]Invalid operation",__FUNCTION__,__LINE__);
+        return error;
+    }
     #ifdef GSW_RIL_CFG  //becuase gsw not have connman,data can not be triggered by connman.
     LYINFLOG("[%s][%d]",__FUNCTION__,__LINE__);
     error = lynq_setup_data_call_sp(handle,NULL,"default",NULL,NULL,NULL,NULL,NULL);
@@ -1005,7 +1040,7 @@
     if(error==0)
     {
         data_timelimit = 1;
-        if (waitDataCallstateChange(LYNQ_DATA_TIME_OUT) == ETIMEDOUT)
+        if (waitDataCallstateChange(g_data_call_timeout_value) == ETIMEDOUT)
         {
             error = LYNQ_E_TIME_OUT;
             LYERRLOG("timeout:wait data Call state fail!!!");
@@ -1019,6 +1054,13 @@
             printf_apn_table_debug(__FUNCTION__,__LINE__);
             return error;
         }
+        if(lynq_data_call == LYNQ_E_TIME_OUT)
+        {
+            error = LYNQ_E_TIME_OUT;
+            LYERRLOG("PDN_TIMEOUT_CANCLE:wait data Call state fail!!!");
+            printf_apn_table_debug(__FUNCTION__,__LINE__);
+            return error;
+        }
     }
     printf_apn_table_debug(__FUNCTION__,__LINE__);
     #endif //GSW_RIL_CFG
@@ -1035,6 +1077,11 @@
     int error = -1;
     int lynq_data_call_id = -1;
     int ret = 0;
+    if (g_lynq_data_init_flag == 0)
+    {
+        LYERRLOG("[%s][%d]Invalid operation",__FUNCTION__,__LINE__);
+        return error;
+    }
     if(handle==NULL)
     {
         LYERRLOG("handle is null!!!");
@@ -1106,6 +1153,11 @@
     int error = -1;
     int lynq_data_call_id = -1;
     char *argv[10] = {};
+    if (g_lynq_data_init_flag == 0)
+    {
+        LYERRLOG("[%s][%d]Invalid operation",__FUNCTION__,__LINE__);
+        return error;
+    }
     #ifdef GSW_RIL_CFG
     LYINFLOG("[%s][%d]",__FUNCTION__,__LINE__);
     if(handle==NULL||apnType==NULL)
@@ -1209,7 +1261,7 @@
     if(error==0)
     {
         data_timelimit = 1;
-        if(waitDataCallstateChange(LYNQ_DATA_TIME_OUT)==ETIMEDOUT)
+        if(waitDataCallstateChange(g_data_call_timeout_value)==ETIMEDOUT)
         {
             error = LYNQ_E_TIME_OUT;
             LYERRLOG("timeout:wait data Call state fail!!!");
@@ -1223,6 +1275,13 @@
             printf_apn_table_debug(__FUNCTION__,__LINE__);
             return error;
         }
+        if(lynq_data_call == LYNQ_E_TIME_OUT)
+        {
+            error = LYNQ_E_TIME_OUT;
+            LYERRLOG("PDN_TIMEOUT_CANCLE:wait data Call state fail!!!");
+            printf_apn_table_debug(__FUNCTION__,__LINE__);
+            return error;
+        }
     }
     printf_apn_table_debug(__FUNCTION__,__LINE__);
     return error;
@@ -1390,6 +1449,11 @@
     int number = 0;
     int lynq_data_call_id = 0;
     int error = 0;
+    if (g_lynq_data_init_flag == 0)
+    {
+        LYERRLOG("[%s][%d]Invalid operation",__FUNCTION__,__LINE__);
+        return -1;
+    }
     lynq_data_call_id = *handle;
     if((handle==NULL) || (dataCallList==NULL))
     {
@@ -1930,6 +1994,24 @@
     }
     return 0;
 }
+int get_timeout_value()
+{
+    LYINFLOG("get_timeout_value enter");
+    int ret = -1;
+    char timeout_value[8] ={0};//get get_timeout_value
+    ret = lynq_get_value("lynq_uci","data_call","timeout",timeout_value);
+    if(ret == 0)
+    {
+        LYINFLOG("data_call.timeout is %s",timeout_value);
+        return atoi(timeout_value);
+    }
+    else
+    {
+        LYERRLOG("get_timeout_value");
+        return -1;
+    }
+}
+
 int radio_switch(int status)
 {
     Parcel *p =NULL;
