diff --git a/mbtk/mbtk_rild_v2/src/atchannel.c b/mbtk/mbtk_rild_v2/src/atchannel.c
index 3a69ad9..264ea2a 100755
--- a/mbtk/mbtk_rild_v2/src/atchannel.c
+++ b/mbtk/mbtk_rild_v2/src/atchannel.c
@@ -271,25 +271,34 @@
 
 static void processLine(ATPortId_enum port, const char *line)
 {
+    LOGD("lynq read process begin process line port %d %s", port,line);
     pthread_mutex_lock(&s_commandmutex[port]);
 //    LOGD("LINE : %s", line);
+    LOGD("lynq read process get lock port %d", port);
+
     if (sp_response[port] == NULL)
     {
+        LOGD("lynq read 2 port %d", port);
         /* no command pending */
         handleUnsolicited(port, line);
+       
     }
     else if (isFinalResponseSuccess(line))
     {
+        LOGD("lynq read 3 port %d", port);
         sp_response[port]->success = 1;
         handleFinalResponse(port, line);
+        
     }
     else if (isFinalResponseError(port, line))
     {
+        LOGD("lynq read 4 port %d", port);
         sp_response[port]->success = 0;
         handleFinalResponse(port, line);
     }
     else if (s_smsPDU[port] != NULL && 0 == strcmp(line, "> "))
     {
+         LOGD("lynq read 5 port %d", port);
         // See eg. TS 27.005 4.3
         // Commands like AT+CMGS have a "> " prompt
         writeCtrlZ(port, s_smsPDU[port]);
@@ -298,9 +307,11 @@
     else switch (s_type[port])
         {
             case NO_RESULT:
+                LOGD("lynq read 6 port %d", port);
                 handleUnsolicited(port, line);
                 break;
             case NUMERIC:
+                LOGD("lynq read 7 port %d", port);
                 if (sp_response[port]->p_intermediates == NULL
                     && isdigit(line[0])
                    )
@@ -315,6 +326,7 @@
                 }
                 break;
             case SINGLELINE:
+                LOGD("lynq read 8 port %d", port);
                 if (sp_response[port]->p_intermediates == NULL
                     && strStartsWith (line, s_responsePrefix[port])
                    )
@@ -348,8 +360,10 @@
                 }
                 break;
             case MULTILINE:
+                LOGD("lynq read 9 port %d", port);
                 if (strStartsWith (line, s_responsePrefix[port]))
                 {
+                    LOGD("lynq read 10 port %d", port);
                     addIntermediate(port, line);
                 }
                 else
@@ -359,11 +373,12 @@
                 break;
 
             default: /* this should never be reached */
+                LOGD("lynq read 11 port %d", port);
                 LOGE("Unsupported AT command type %d\n", s_type[port]);
                 handleUnsolicited(port, line);
                 break;
         }
-
+    LOGD("lynq read 12 port %d", port);
     pthread_mutex_unlock(&s_commandmutex[port]);
 }
 
@@ -647,6 +662,7 @@
         {
             //usleep(50000);
             //continue;
+            LOGD("lynq read 1 port %d", *port);
             break;
         }
 
@@ -736,6 +752,7 @@
 
     if (s_at_fd[port] < 0 || s_readerClosed > 0)
     {
+        LOGE("lynq 12, port %d %d %d",port,s_at_fd[port],s_readerClosed);
         return AT_ERROR_CHANNEL_CLOSED;
     }
 
@@ -856,6 +873,9 @@
     s_responsePrefix[port] = NULL;
     s_smsPDU[port] = NULL;
     sp_response[port] = NULL;
+    pthread_mutex_init(&s_commandmutex[port], NULL);
+    pthread_cond_init(&(s_commandcond[port]), NULL);
+    at_state_set(port,RIL_AT_STATE_READY);
 
     ATPortId_enum *at_port_ptr = (ATPortId_enum*)malloc(sizeof(ATPortId_enum));
     ATPortId_enum *urc_port_ptr = (ATPortId_enum*)malloc(sizeof(ATPortId_enum));
@@ -958,7 +978,7 @@
 
 static long long at_timeout_get(const char *at_command, bool *timeout_close)
 {
-    long long timeout = 0;
+    long long timeout = 15000;
     int i;
     for(i = 0; i <  ARRAY_SIZE(at_timeout_list); i++)
     {
@@ -986,21 +1006,19 @@
     int err = 0;
     bool tiemout_close = true;
     struct timespec ts;
+
+    LOGD("lynq 9, port %d %d",port,at_state[port]);
+    if(sp_response[port] != NULL)
+    {
+        LOGE("lynq 10, port %d %p",port,sp_response[port]);
+        err = AT_ERROR_COMMAND_PENDING;
+        return err;
+    }
+
     if(at_state[port] == RIL_AT_STATE_READY)
         at_state[port] = RIL_AT_STATE_BUSY;
 
-    if(sp_response[port] != NULL)
-    {
-        err = AT_ERROR_COMMAND_PENDING;
-        goto error;
-    }
-
-    err = writeline (port, command);
-
-    if (err < 0)
-    {
-        goto error;
-    }
+    LOGD("lynq 11, port %d",port);
 
     s_type[port] = type;
     s_responsePrefix[port] = responsePrefix;
@@ -1011,21 +1029,30 @@
     {
         timeoutMsec = at_timeout_get(command, &tiemout_close);
     }
+    err = writeline (port, command);
+
+    if (err < 0)
+    {
+        goto error;
+    }
 
     if (timeoutMsec != 0)
     {
         setTimespecRelative(&ts, timeoutMsec);
     }
 
+    LOGD("lynq before loop, port %d %d",port,s_readerClosed);
     while (sp_response[port]->finalResponse == NULL && s_readerClosed == 0)
     {
         //LOGD("AT wait time:%lld",timeoutMsec);
         if (timeoutMsec != 0)
         {
+            LOGD("lynq 12, port %d %lld",port,timeoutMsec);
             err = pthread_cond_timedwait(&s_commandcond[port], &s_commandmutex[port], &ts);
         }
         else
         {
+            LOGD("lynq 13, port %d",port);
             err = pthread_cond_wait(&s_commandcond[port], &s_commandmutex[port]);
         }
 
@@ -1034,10 +1061,12 @@
         {
             if(tiemout_close)
             {
+                LOGE("lynq 15, port %d",port);
                 err = AT_ERROR_TIMEOUT_CLOSE;
             }
             else
             {
+                LOGE("lynq 16, port %d",port);
                 err = AT_ERROR_TIMEOUT;
             }
             goto error;
@@ -1046,29 +1075,35 @@
 
     if (pp_outResponse == NULL)
     {
+        LOGD("lynq 18, port %d",port);
         at_response_free(sp_response[port]);
     }
     else
     {
+        LOGD("lynq 19, port %d",port);
         /* line reader stores intermediate responses in reverse order */
         reverseIntermediates(sp_response[port]);
         *pp_outResponse = sp_response[port];
     }
 
+
     sp_response[port] = NULL;
 
     if(s_readerClosed > 0)
     {
+        
+        LOGE("lynq 21, port %d %d",port,s_readerClosed);
         err = AT_ERROR_CHANNEL_CLOSED;
         goto error;
     }
+	LOGD("lynq 22, port %d",port);
 
     err = 0;
 error:
     if(at_state[port] == RIL_AT_STATE_BUSY)
         at_state[port] = RIL_AT_STATE_READY;
+    LOGD("lynq 23, port %d %d",port, at_state[port]);
     clearPendingCommand(port);
-
     return err;
 }
 
@@ -1083,6 +1118,8 @@
 {
     int err;
 
+    
+    LOGD("lynq 0, port %d,%lld,%s",port,timeoutMsec,command);
     if (0 != pthread_equal(s_tid_reader[port], pthread_self()))
     {
         /* cannot be called from reader thread */
@@ -1090,25 +1127,46 @@
         return AT_ERROR_INVALID_THREAD;
     }
 
+    LOGD("lynq 1, port %d",port);
+
     // Waitting for previous AT complete.
+    int count=0;
     while(at_state[port] == RIL_AT_STATE_BUSY)
     {
-        usleep(10000);
+        sleep(1);
+        count++;
+        if(count%2==0)
+        {
+           LOGE("lynq 2, port %d",port);
+        }
+
+        if(count==8)
+        {
+           err= AT_ERROR_COMMAND_PENDING;
+           goto out;
+        }
     }
 
+    LOGD("lynq 3, port %d",port);
     pthread_mutex_lock(&s_commandmutex[port]);
+    LOGD("lynq 4, port %d",port);
 
     err = at_send_command_full_nolock(port, command, type,
                                       responsePrefix, smspdu,
                                       timeoutMsec, pp_outResponse);
 
+    LOGD("lynq 5, port %d",port);
     pthread_mutex_unlock(&s_commandmutex[port]);
+    LOGD("lynq 6, port %d",port);
 
     if (err == AT_ERROR_TIMEOUT_CLOSE && s_onTimeout != NULL)
     {
+        LOGE("lynq 7, port %d",port);
         s_onTimeout();
     }
+    LOGD("lynq 8, port %d",port);
 
+out:
     return err;
 }
 
diff --git a/mbtk/mbtk_rild_v2/src/main.c b/mbtk/mbtk_rild_v2/src/main.c
index 1c55e2c..ce74dd9 100755
--- a/mbtk/mbtk_rild_v2/src/main.c
+++ b/mbtk/mbtk_rild_v2/src/main.c
@@ -2069,8 +2069,8 @@
         || strStartsWith(s, "+EEMNRINTERRAT:")
         || strStartsWith(s, "+EEMLTESVC:") || strStartsWith(s, "+EEMLTEINTER:")
         || strStartsWith(s, "+EEMLTEINTRA:") || strStartsWith(s, "+EEMLTEINTERRAT:")
-        || strStartsWith(s, "+EEMUMTSSVC:") || strStartsWith(s, "+EEMUMTSINTRA:")
-        || strStartsWith(s, "+EEMUMTSINTERRAT:") || strStartsWith(s, "+EEMGINFOBASIC:")
+        || strStartsWith(s, "+EEMUMTSSVC:") /*|| strStartsWith(s, "+EEMUMTSINTRA:")
+        || strStartsWith(s, "+EEMUMTSINTERRAT:")*/ || strStartsWith(s, "+EEMGINFOBASIC:")
         || strStartsWith(s, "+EEMGINFOSVC:") || strStartsWith(s, "+EEMGINFOPS:")
         || strStartsWith(s, "+EEMGINFONC:")) {
         urc_cell_info_process(sim_id, s, sms_pdu);
@@ -2654,7 +2654,8 @@
 // Return MBTK_INFO_ERR_SUCCESS,will call pack_error_send() to send RSP.
 // Otherwise, do not call pack_error_send().
 static mbtk_ril_err_enum pack_req_process(sock_cli_info_t* cli_info, ril_msg_pack_info_t* pack)
-{
+{
+    LOGD("lynq rild 1, simid %d port %d %d",cli_info->sim_id,cli_info->port,pack->msg_id);
     if(pack->msg_id > RIL_MSG_ID_DEV_BEGIN && pack->msg_id < RIL_MSG_ID_DEV_END) {
         return dev_pack_req_process(cli_info, pack);
     } else if(pack->msg_id > RIL_MSG_ID_SIM_BEGIN && pack->msg_id < RIL_MSG_ID_SIM_END) {
@@ -2917,32 +2918,32 @@
     return NULL;
 }
 
-static int check_device_info(void)
-{
-    mbtk_device_info_basic_t info_basic;
-    memset(&info_basic,0,sizeof(mbtk_device_info_basic_t));
-    int result = mbtk_dev_info_read(MBTK_DEVICE_INFO_ITEM_BASIC, &info_basic, sizeof(mbtk_device_info_basic_t));
-    if(result != 0)
-    {
-        LOGE("mbtk_dev_info_read(BASIC) fail. reset \n");
-	return -1;
-    }
-    return 0;
-}
-
-static int config_file_exists(void)
-{
-    ATResponse *response = NULL;
-
-    int err = at_send_command(portType_2_portId(MBTK_SIM_1, ATPORTTYPE_0), "AT*MRD_CDF=Q,TTPCom_NRAM2_CUSTOMIZATION_DATA.gki", &response);
-    if(err < 0 || response->success == 0)
-    {
-        LOGD("config_file gki check fail \n");
-        return 0;
-    }
-    return -1;
-}
-
+static int check_device_info(void)
+{
+    mbtk_device_info_basic_t info_basic;
+    memset(&info_basic,0,sizeof(mbtk_device_info_basic_t));
+    int result = mbtk_dev_info_read(MBTK_DEVICE_INFO_ITEM_BASIC, &info_basic, sizeof(mbtk_device_info_basic_t));
+    if(result != 0)
+    {
+        LOGE("mbtk_dev_info_read(BASIC) fail. reset \n");
+	return -1;
+    }
+    return 0;
+}
+
+static int config_file_exists(void)
+{
+    ATResponse *response = NULL;
+
+    int err = at_send_command(portType_2_portId(MBTK_SIM_1, ATPORTTYPE_0), "AT*MRD_CDF=Q,TTPCom_NRAM2_CUSTOMIZATION_DATA.gki", &response);
+    if(err < 0 || response->success == 0)
+    {
+        LOGD("config_file gki check fail \n");
+        return 0;
+    }
+    return -1;
+}
+
 static void band_support_init()
 {
     mbtk_device_info_modem_t info_modem;
@@ -3041,7 +3042,8 @@
         {
             if(item->cli_info) { // REQ form client.
                 ril_msg_pack_info_t *pack = (ril_msg_pack_info_t*)item->pack;
-                LOGD("Process REQ %s.", id2str(pack->msg_id));
+                LOGD("hq Process REQ %s.  port %d", id2str(pack->msg_id),*port);
+                LOGD("lynq rild 0, simid %d port %d %d",item->cli_info->sim_id,item->cli_info->port,*port);
                 ril_info.at_process[*port] = true;
                 err = pack_req_process(item->cli_info, pack);
                 if(err != MBTK_RIL_ERR_SUCCESS)
@@ -3075,7 +3077,7 @@
 
 OK
 */
-
+
 static void* band_config_thread()
 {
     band_info.band_set_success = FALSE;
@@ -3109,11 +3111,11 @@
     LOGD("Set Band thread exit.");
     return NULL;
 }
-
+
 
 
 int ril_server_start()
-{
+{
     signal(SIGPIPE, SIG_IGN);
 
     memset(&ril_info, 0, sizeof(ril_info_t));
@@ -3122,13 +3124,13 @@
 
     //check cfun and sim card status
     ril_at_ready_process();
-
-    // check device info
-    int check_res = check_device_info();
-
-    // check gki config 
-    int file_res = config_file_exists();
-
+
+    // check device info
+    int check_res = check_device_info();
+
+    // check gki config 
+    int file_res = config_file_exists();
+
     // Init support band.
     band_support_init();
     //any AT instruction that is not sent through pack_process_thread needs to precede the thread
@@ -3184,10 +3186,18 @@
         goto error;
     }
 
-    mbtk_queue_init(&(ril_info.msg_queue[ATPORTTYPE_0]));
-    pthread_mutex_init(&(ril_info.msg_mutex[ATPORTTYPE_0]), NULL);
-    pthread_cond_init(&(ril_info.msg_cond[ATPORTTYPE_0]), NULL);
-
+
+  
+    for(int i=0;i<ATPORTTYPE_NUM;i++)
+    {
+        mbtk_queue_init(&(ril_info.msg_queue[i]));
+        pthread_mutex_init(&(ril_info.msg_mutex[i]), NULL);
+        pthread_cond_init(&(ril_info.msg_cond[i]), NULL);
+    }
+
+	
+
+
     pthread_t info_pid, pack_pid/*, monitor_pid, urc_pid, bootconn_pid*/;
     pthread_attr_t thread_attr;
     pthread_attr_init(&thread_attr);
@@ -3232,7 +3242,7 @@
     char buff[10];
     memset(buff, 0, 10);
     property_get("persist.mbtk.band_config", buff, "");
-    
+    
     if(strlen(buff) == 0 && check_res == 0 && file_res == 0) {
         pthread_t band_pid;
         if(pthread_create(&band_pid, &thread_attr, band_config_thread, NULL))
diff --git a/mbtk/mbtk_rild_v2/src/ril_data_call.c b/mbtk/mbtk_rild_v2/src/ril_data_call.c
index 2a0994b..f03885d 100755
--- a/mbtk/mbtk_rild_v2/src/ril_data_call.c
+++ b/mbtk/mbtk_rild_v2/src/ril_data_call.c
@@ -352,7 +352,7 @@
 //        info_list[cid - 1].act_state = RIL_ACT_STATE_DISCONNECTED;
         memcpy(&(info_list[cid - 1].apn_info), &(apns.apns[i]), sizeof(mbtk_apn_info_t));
 
-        LOGD("[sim_id - %d] CID - %d, ip_type - %d, auth - %d, auto_save - %d, auto_boot_call - %d, def_route - %d, as_dns - %d, apn - %s",
+        LOGE("[sim_id - %d] CID - %d, ip_type - %d, auth - %d, auto_save - %d, auto_boot_call - %d, def_route - %d, as_dns - %d, apn - %s",
             sim_id, cid, info_list[cid - 1].apn_info.ip_type,
             info_list[cid - 1].apn_info.auth, info_list[cid - 1].apn_info.auto_save,
             info_list[cid - 1].apn_info.auto_boot_call, info_list[cid - 1].apn_info.def_route,
@@ -1148,6 +1148,7 @@
     int index = 0;
     int err = 0;
 
+    LOGD("lynq rild 9, simid %d port %d",sim_id,port);
     // Delete apn
     if(str_empty(apn->apn)) {
         sprintf(cmd, "AT+CGDCONT=%d", apn->cid);
@@ -1182,6 +1183,7 @@
             index += sprintf(cmd + index,"\"%s\"", apn->apn);
         }
 
+        LOGD("lynq rild 10, simid %d port %d",sim_id,port);
         err = at_send_command(portType_2_portId(sim_id, port), cmd, &response);
         if (err < 0 || response->success == 0){
             if(cme_err) {
@@ -1346,8 +1348,10 @@
     char *line = NULL;
     int tmp_int;
     char *tmp_ptr = NULL;
+    bool set_v4_v6_v4;
     while(lines_ptr)
     {
+        set_v4_v6_v4=false;
         line = lines_ptr->line;
         err = at_tok_start(&line);
         if (err < 0)
@@ -1384,6 +1388,7 @@
             }
 
             ip_info->ipv4.valid = true;
+            set_v4_v6_v4=true;
             //log_hex("IPv4", &(ipv4->IPAddr), sizeof(struct in_addr));
         } else {
             if(str_2_ipv6(tmp_ptr, &(ip_info->ipv6.IPV6Addr))) {
@@ -1422,12 +1427,12 @@
         }
         else
         {
-            if(ip_info->ipv4.valid)
+            if(set_v4_v6_v4)
             {
                 get_gate_way_v4(ip_info->ipv4.IPAddr,&(ip_info->ipv4.GateWay));
                 ip_info->ipv4.NetMask=0xffffff;
             }
-            else if(ip_info->ipv6.valid)
+            else
             {
                 get_gate_way_v6(ip_info->ipv6.IPV6Addr,ip_info->ipv6.GateWay);
             }
@@ -1608,10 +1613,12 @@
 {
     mbtk_ril_err_enum err = MBTK_RIL_ERR_SUCCESS;
     int cme_err = MBTK_RIL_ERR_CME_NON;
+    LOGD("lynq rild 2, simid %d port %d %d",cli_info->sim_id,cli_info->port,pack->msg_id);
     switch(pack->msg_id)
     {
         case RIL_MSG_ID_DATA_CALL_APN:
         {
+            LOGD("lynq rild 3, simid %d port %d",cli_info->sim_id,cli_info->port);
             if(pack->data_len == 0 || pack->data == NULL)
             {
                 mbtk_apn_info_array_t apns;
@@ -1630,9 +1637,11 @@
                     LOGD("size - %d", sizeof(mbtk_apn_info_array_t));
                     ril_rsp_pack_send(cli_info->sim_id, cli_info->port, cli_info->fd, pack->msg_id, pack->msg_index, &apns, sizeof(mbtk_apn_info_array_t));
                 }
+                LOGD("lynq rild 4, simid %d port %d",cli_info->sim_id,cli_info->port);
             }
             else     // Set
             {
+                LOGD("lynq rild 5, simid %d port %d",cli_info->sim_id,cli_info->port);
                 mbtk_apn_info_t *apn = (mbtk_apn_info_t*)pack->data;
                 if(apn->b_initial_attach_apn)
                 {
@@ -1640,10 +1649,13 @@
                     break;
                 }
                 mbtk_ril_cid_enum return_cid = apn->cid;
+               LOGD("lynq rild 6, simid %d port %d",cli_info->sim_id,cli_info->port);
                 if(apn_check_and_cid_reset(cli_info->sim_id, cli_info->port, apn)) {
                     err = MBTK_RIL_ERR_CID;
                 } else {
+                    LOGD("lynq rild 7, simid %d port %d",cli_info->sim_id,cli_info->port);
                     if(apn_conf_support(apn->cid)) {
+                         LOGD("lynq rild 8, simid %d port %d",cli_info->sim_id,cli_info->port);
                         if(req_apn_set(cli_info->sim_id, cli_info->port, apn, &cme_err) || cme_err != MBTK_RIL_ERR_CME_NON)
                         {
                             if(cme_err != MBTK_RIL_ERR_CME_NON) {
@@ -1741,7 +1753,8 @@
                                 }
                                 else
                                 {
-                                    // Config network informations.
+
+                                   // Config network informations.
                                     if(net_ifc_reconfig(cli_info->sim_id, call_info->cid, info_list[call_info->cid - 1].apn_info.def_route,
                                                         info_list[call_info->cid - 1].apn_info.as_dns, &ip_info)) {
                                         err = MBTK_RIL_ERR_NET_CONF;
diff --git a/mbtk/mbtk_rild_v2/src/ril_dev.c b/mbtk/mbtk_rild_v2/src/ril_dev.c
index 941f5eb..60bd502 100755
--- a/mbtk/mbtk_rild_v2/src/ril_dev.c
+++ b/mbtk/mbtk_rild_v2/src/ril_dev.c
@@ -535,6 +535,7 @@
 {
     mbtk_ril_err_enum err = MBTK_RIL_ERR_SUCCESS;
     int cme_err = MBTK_RIL_ERR_CME_NON;
+    LOGD("lynq rild 61, simid %d port %d %d",cli_info->sim_id,cli_info->port,pack->msg_id);
     switch(pack->msg_id)
     {
         case RIL_MSG_ID_DEV_IMEI:
diff --git a/mbtk/mbtk_rild_v2/src/ril_net.c b/mbtk/mbtk_rild_v2/src/ril_net.c
index 8808f3b..258ea66 100755
--- a/mbtk/mbtk_rild_v2/src/ril_net.c
+++ b/mbtk/mbtk_rild_v2/src/ril_net.c
@@ -1495,6 +1495,7 @@
 {
     mbtk_ril_err_enum err = MBTK_RIL_ERR_SUCCESS;
     int cme_err = MBTK_RIL_ERR_CME_NON;
+    LOGD("lynq rild 51, simid %d port %d %d",cli_info->sim_id,cli_info->port,pack->msg_id);
     switch(pack->msg_id)
     {
         case RIL_MSG_ID_NET_AVAILABLE:
