Merge "[Bugfix][T106BUG-108]fix data can't deinit"
diff --git a/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/cc.cpp b/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/cc.cpp
index 536ae72..d0f50c8 100755
--- a/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/cc.cpp
+++ b/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/cc.cpp
@@ -1530,8 +1530,19 @@
 //RIL_REQUEST_SET_MUTE
 int setMute(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI)
 {
+    
     android::Parcel p;
     printf("WARREN TEST002!!!\n");
+    
+#ifdef MOBILETEK_TARGET_PLATFORM_T106
+    RLOGD("Enter set Mute");
+    size_t pos = p.dataPosition();
+    p.writeInt32(1);
+    p.writeInt32(atoi(argv[1]));
+    p.setDataPosition(pos);
+    pRI->pCI->dispatchFunction(p, pRI);
+#else
+
     if(argc<2)
     {
         if(pRI)
@@ -1560,6 +1571,7 @@
     if(pRI) {
         free(pRI);
     }
+#endif
     return 0;
 }
 
@@ -1569,6 +1581,12 @@
 
     android::Parcel p;
     printf("WARREN TEST001!!!\n");
+#ifdef MOBILETEK_TARGET_PLATFORM_T106
+    RLOGD("Enter get Mute");
+    pRI->pCI->dispatchFunction(p, pRI);
+    
+#else
+
     int mute = getCallMute();
     //TBC -200 fail status
     if(mute < 0) {
@@ -1587,6 +1605,8 @@
         android::LYNQ_RIL_respSocket(p,(void *)pRI);
         free(pRI);
     }
+#endif
+
     return 0;
 }
 
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 9525e75..b775838 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-call/lynq_call.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-call/lynq_call.cpp
@@ -760,7 +760,8 @@
         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);   

 

@@ -813,6 +814,7 @@
     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;

 }

 

@@ -870,12 +872,19 @@
         LYERRLOG("status is null");

         return LYNQ_E_PARAMETER_ANONALY;

     }

-

+    

+    int numInts = -1;

     Parcel* p=NULL;

     int ret=lynq_send_common_request(p,g_wait_time,request_id,0,"");

     if(ret==RESULT_OK)

     {

+#ifdef MOBILETEK_TARGET_PLATFORM_T106

+        

+        p->readInt32(&numInts);

         p->readInt32(status);

+#else

+        p->readInt32(status);

+#endif

         delete p;        

     }

     return ret;   

diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-call/makefile b/cap/zx297520v3/src/lynq/lib/liblynq-call/makefile
index 21e0cb5..57d6e2d 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-call/makefile
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-call/makefile
@@ -17,6 +17,10 @@
 LOCAL_CFLAGS += -DBINDER_IPC_32BIT=1 -DHAVE_ENDIAN_H -DHAVE_PTHREADS -DHAVE_SYS_UIO_H -DHAVE_POSIX_FILEMAP -DHAVE_STRLCPY -DHAVE_PRCTL -DHAVE_MEMSET16 -DHAVE_MEMSET32 -DANDROID_SMP=0
 endif
 
+ifeq ($(strip $(TARGET_PLATFORM)), T106)
+    LOCAL_CFLAGS += -DMOBILETEK_TARGET_PLATFORM_T106
+endif
+
 $(warning ################# lynq data demo ROOT: $(ROOT),includedir:$(includedir))
 LOCAL_PATH   = .
 
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-data/lynq_data.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-data/lynq_data.cpp
index 176b053..97b72b0 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-data/lynq_data.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-data/lynq_data.cpp
@@ -1090,7 +1090,9 @@
     pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
     JumpHeader(p,&resp_type,&request,&slot_id,&error);
     LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
+#ifndef MOBILETEK_TARGET_PLATFORM_T106
     cleanOnceApnTable(lynq_data_call_id);
+#endif
     printf_apn_table_debug(__FUNCTION__,__LINE__);
     return error;
 }
@@ -1548,13 +1550,13 @@
 {
     if (data_waiting_status == 1)
     {
-        LYDBGLOG("some thread is waiting");
+        LYINFLOG("some thread is waiting");
         return -3;
     }
-    LYDBGLOG("is empty :%d",s_data_urc_wait_list.empty());
+    LYINFLOG("is empty :%d",s_data_urc_wait_list.empty());
     if (s_data_urc_wait_list.empty())
     {
-        LYDBGLOG("start wait");
+        LYINFLOG("start wait");
         data_waiting_status = 1;
         waitPdnChange();
         if(g_lynq_data_init_flag == 0)
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp
index 2af1aac..c716522 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp
@@ -31,28 +31,188 @@
 
 void lynq_ipv4_aton_urc(lynq_data_call_response_v11_t *libdata,qser_data_call_state_s *data_res)
 {
+#ifdef MOBILETEK_TARGET_PLATFORM_T106
+    char *tmp_char = NULL;
+    char *addresses = NULL;
+    char *dnses = NULL;
+    const char addresses_separator[2] = "/";
+    const char dnses_separator[2] = " ";
+    
+    addresses = libdata->addresses;
+    dnses = libdata->dnses;
+    //get addresses
+    tmp_char = strsep(&addresses, addresses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv4 addresses = %s", tmp_char);
+        inet_aton(tmp_char,&(data_res->v4.ip));
+    }
+
+    //get dnses
+    tmp_char = strsep(&dnses, dnses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv4 pri_dns = %s", tmp_char);
+        inet_aton(tmp_char,&(data_res->v4.pri_dns));
+    }
+    tmp_char = strsep(&dnses, dnses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv4 sec_dns = %s", tmp_char);
+        inet_aton(tmp_char, &(data_res->v4.sec_dns));
+    }
+    //get gateway
+    inet_pton(AF_INET6,libdata->gateways,&(data_res->v6.gateway));
+
+#else
     inet_aton(libdata->addresses,&(data_res->v4.ip));
     inet_aton(libdata->gateways,&(data_res->v4.gateway));
     inet_aton(libdata->dnses,&(data_res->v4.pri_dns));
     inet_aton(libdata->dnses,&(data_res->v4.sec_dns));
+#endif
     return ;
 }
 
 void lynq_ipv6_inet_pton_urc(lynq_data_call_response_v11_t *libdata,qser_data_call_state_s *data_res)
 {
+#ifdef MOBILETEK_TARGET_PLATFORM_T106
+    char *tmp_char = NULL;
+    char *addresses = NULL;
+    char *dnses = NULL;
+    const char addresses_separator[2] = "/";
+    const char dnses_separator[2] = " ";
+
+    addresses = libdata->addresses;
+    dnses = libdata->dnses;
+    //get addresses
+    tmp_char = strsep(&addresses, addresses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv6 addresses = %s", tmp_char);
+        inet_pton(AF_INET6, tmp_char, &(data_res->v6.ip));
+    }
+    //get dnses
+    tmp_char = strsep(&dnses, dnses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv6 pri_dns = %s", tmp_char);
+        inet_pton(AF_INET6, tmp_char, &(data_res->v6.pri_dns));
+    }
+    tmp_char = strsep(&dnses, dnses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv6 sec_dns = %s", tmp_char);
+        inet_pton(AF_INET6, tmp_char, &(data_res->v6.sec_dns));
+    }
+    inet_pton(AF_INET6,libdata->gateways,&(data_res->v6.gateway));
+#else
     inet_pton(AF_INET6,libdata->addresses,&(data_res->v6.ip));
     inet_pton(AF_INET6,libdata->gateways,&(data_res->v6.gateway));
     inet_pton(AF_INET6,libdata->dnses,&(data_res->v6.pri_dns));
     inet_pton(AF_INET6,libdata->dnses,&(data_res->v6.sec_dns));
+#endif
+
+    return ;
+}
+
+void lynq_ipv4v6_inet_pton_urc(lynq_data_call_response_v11_t *libdata,qser_data_call_state_s *data_res)
+{
+    char *tmp_char = NULL;
+    char *addresses = NULL;
+    char *dnses = NULL;
+    const char addresses_separator[2] = "/";
+    const char dnses_separator[2] = " ";
+
+    addresses = libdata->addresses;
+    dnses = libdata->dnses;
+    //get addresses
+    tmp_char = strsep(&addresses, addresses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv4 addresses = %s", tmp_char);
+        inet_aton(tmp_char,&(data_res->v4.ip));
+    }
+    tmp_char = strsep(&addresses, addresses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv6 addresses = %s", tmp_char);
+        inet_pton(AF_INET6, tmp_char, &(data_res->v6.ip));
+    }
+    //get dnses
+    tmp_char = strsep(&dnses, dnses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv4 pri_dns = %s", tmp_char);
+        inet_aton(tmp_char,&(data_res->v4.pri_dns));
+    }
+    tmp_char = strsep(&dnses, dnses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv4 sec_dns = %s", tmp_char);
+        inet_aton(tmp_char, &(data_res->v4.sec_dns));
+    }
+    tmp_char = strsep(&dnses, dnses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv6 pri_dns = %s", tmp_char);
+        inet_pton(AF_INET6, tmp_char, &(data_res->v6.pri_dns));
+    }
+    tmp_char = strsep(&dnses, dnses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv6 sec_dns = %s", tmp_char);
+        inet_pton(AF_INET6, tmp_char, &(data_res->v6.sec_dns));
+    }
+    //get gateway
+    inet_pton(AF_INET6,libdata->gateways,&(data_res->v6.gateway));
+
     return ;
 }
 
 void lynq_ipv4_aton_getinfo(lynq_data_call_response_v11_t *libdata,qser_data_call_info_s *data_res)
 {
+#ifdef MOBILETEK_TARGET_PLATFORM_T106
+    char *tmp_char = NULL;
+    char *addresses = NULL;
+    char *dnses = NULL;
+    const char addresses_separator[2] = "/";
+    const char dnses_separator[2] = " ";
+    
+    addresses = libdata->addresses;
+    dnses = libdata->dnses;
+    //get addresses
+    tmp_char = strsep(&addresses, addresses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv4 addresses = %s", tmp_char);
+        inet_aton(tmp_char,&(data_res->v4.addr.ip));
+    }
+    //get dnses
+    tmp_char = strsep(&dnses, dnses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv4 pri_dns = %s", tmp_char);
+        inet_aton(tmp_char,&(data_res->v4.addr.pri_dns));
+    }
+    tmp_char = strsep(&dnses, dnses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv4 sec_dns = %s", tmp_char);
+        inet_aton(tmp_char, &(data_res->v4.addr.sec_dns));
+    }
+    //get gateway
+    LYINFLOG("ipv4 gateways = %s", libdata->gateways);
+    inet_aton(libdata->gateways,&(data_res->v4.addr.gateway));
+
+    LYINFLOG("v4.ip=%s", inet_ntoa(data_res->v4.addr.ip));
+    LYINFLOG("v4.pri_dns=%s", inet_ntoa(data_res->v4.addr.pri_dns));
+    LYINFLOG("v4.sec_dns=%s", inet_ntoa(data_res->v4.addr.sec_dns));
+#else
     inet_aton(libdata->addresses,&(data_res->v4.addr.ip));
     inet_aton(libdata->gateways,&(data_res->v4.addr.gateway));
     inet_aton(libdata->dnses,&(data_res->v4.addr.pri_dns));
     inet_aton(libdata->dnses,&(data_res->v4.addr.sec_dns));
+#endif
     data_res->v4.stats.pkts_tx = 0;
     data_res->v4.stats.pkts_rx = 0;
     data_res->v4.stats.bytes_tx = 0;
@@ -64,10 +224,123 @@
 
 void lynq_ipv6_inet_pton_getinfo(lynq_data_call_response_v11_t *libdata,qser_data_call_info_s *data_res)
 {
+#ifdef MOBILETEK_TARGET_PLATFORM_T106
+    char *tmp_char = NULL;
+    char *addresses = NULL;
+    char *dnses = NULL;
+    const char addresses_separator[2] = "/";
+    const char dnses_separator[2] = " ";
+
+    addresses = libdata->addresses;
+    dnses = libdata->dnses;
+    //get addresses
+    tmp_char = strsep(&addresses, addresses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv6 addresses = %s", tmp_char);
+        inet_pton(AF_INET6, tmp_char, &(data_res->v6.addr.ip));
+    }
+    //get dnses
+    tmp_char = strsep(&dnses, dnses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv6 pri_dns = %s", tmp_char);
+        inet_pton(AF_INET6, tmp_char, &(data_res->v6.addr.pri_dns));
+    }
+    tmp_char = strsep(&dnses, dnses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv6 sec_dns = %s", tmp_char);
+        inet_pton(AF_INET6, tmp_char, &(data_res->v6.addr.sec_dns));
+    }
+    inet_pton(AF_INET6,libdata->gateways,&(data_res->v6.addr.gateway));
+#else
     inet_pton(AF_INET6,libdata->addresses,&(data_res->v6.addr.ip));
     inet_pton(AF_INET6,libdata->gateways,&(data_res->v6.addr.gateway));
     inet_pton(AF_INET6,libdata->dnses,&(data_res->v6.addr.pri_dns));
     inet_pton(AF_INET6,libdata->dnses,&(data_res->v6.addr.sec_dns));
+#endif
+    data_res->v6.stats.pkts_tx = 0;
+    data_res->v6.stats.pkts_rx = 0;
+    data_res->v6.stats.bytes_tx = 0;
+    data_res->v6.stats.bytes_rx = 0;
+    data_res->v6.stats.pkts_dropped_tx = 0;
+    data_res->v6.stats.pkts_dropped_rx = 0;
+    return ;
+}
+void lynq_ipv4v6_inet_pton_getinfo(lynq_data_call_response_v11_t *libdata,qser_data_call_info_s *data_res)
+{
+    char *tmp_char = NULL;
+    char *addresses = NULL;
+    char *dnses = NULL;
+    const char addresses_separator[2] = "/";
+    const char dnses_separator[2] = " ";
+
+    char buf_ip[64] = {0};
+    char buf_gateway[64] = {0};
+    char buf_pri_dns[64] = {0};
+    char buf_sec_dns[64] = {0};
+
+    addresses = libdata->addresses;
+    dnses = libdata->dnses;
+    //get addresses
+    tmp_char = strsep(&addresses, addresses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv4 addresses = %s", tmp_char);
+        inet_aton(tmp_char,&(data_res->v4.addr.ip));
+    }
+    tmp_char = strsep(&addresses, addresses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv6 addresses = %s", tmp_char);
+        inet_pton(AF_INET6, tmp_char, &(data_res->v6.addr.ip));
+    }
+    //get dnses
+    tmp_char = strsep(&dnses, dnses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv4 pri_dns = %s", tmp_char);
+        inet_aton(tmp_char,&(data_res->v4.addr.pri_dns));
+    }
+    tmp_char = strsep(&dnses, dnses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv4 sec_dns = %s", tmp_char);
+        inet_aton(tmp_char, &(data_res->v4.addr.sec_dns));
+    }
+    tmp_char = strsep(&dnses, dnses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv6 pri_dns = %s", tmp_char);
+        inet_pton(AF_INET6, tmp_char, &(data_res->v6.addr.pri_dns));
+    }
+    tmp_char = strsep(&dnses, dnses_separator);
+    if(tmp_char != NULL)
+    {
+        LYINFLOG("ipv6 sec_dns = %s", tmp_char);
+        inet_pton(AF_INET6, tmp_char, &(data_res->v6.addr.sec_dns));
+    }
+    //get gateway
+    inet_pton(AF_INET6,libdata->gateways,&(data_res->v6.addr.gateway));
+
+    LYINFLOG("v4.ip=%s", inet_ntoa(data_res->v4.addr.ip));
+    LYINFLOG("v4.pri_dns=%s", inet_ntoa(data_res->v4.addr.pri_dns));
+    LYINFLOG("v4.sec_dns=%s", inet_ntoa(data_res->v4.addr.sec_dns));
+
+    inet_ntop(AF_INET6, &(data_res->v6.addr.ip), buf_ip, sizeof(buf_ip));
+    inet_ntop(AF_INET6, &(data_res->v6.addr.gateway), buf_gateway, sizeof(buf_gateway));
+    inet_ntop(AF_INET6, &(data_res->v6.addr.pri_dns), buf_pri_dns, sizeof(buf_pri_dns));
+    inet_ntop(AF_INET6, &(data_res->v6.addr.sec_dns), buf_sec_dns, sizeof(buf_sec_dns));
+    LYINFLOG("v6.ip=%s, v6.gateway=%s, v6.pri_dns=%s, v6.sec_dns=%s\n"
+        , buf_ip, buf_gateway, buf_pri_dns, buf_sec_dns);
+    data_res->v4.stats.pkts_tx = 0;
+    data_res->v4.stats.pkts_rx = 0;
+    data_res->v4.stats.bytes_tx = 0;
+    data_res->v4.stats.bytes_rx = 0;
+    data_res->v4.stats.pkts_dropped_tx = 0;
+    data_res->v4.stats.pkts_dropped_rx = 0;
+
     data_res->v6.stats.pkts_tx = 0;
     data_res->v6.stats.pkts_rx = 0;
     data_res->v6.stats.bytes_tx = 0;
@@ -576,7 +849,11 @@
         }
         else if (data_cb_state.ip_family == QSER_DATA_CALL_TYPE_IPV4V6)
         {
+#ifdef MOBILETEK_TARGET_PLATFORM_T106
+            lynq_ipv4v6_inet_pton_urc(&data_urc_info,&data_cb_state);
+#else
             lynq_ipv6_inet_pton_urc(&data_urc_info,&data_cb_state);
+#endif
         }
         else
         {
@@ -729,14 +1006,14 @@
     {
         info->profile_idx = profile_idx;
         info->ip_family = ip_family;
-        if (strcmp(data_call_info.type,"IPV4"))
+        if (strncmp(data_call_info.type,"IPV4", strlen("IPV4") + 1) == 0)
         {
             strcpy(info->v4.name,data_call_info.ifname);
             datacall_ipv4_status_judge(data_call_info.status,info);
             LYINFLOG("[IPV4]addresses:%s,gateways:%s,dnses:%s",data_call_info.addresses,data_call_info.gateways,data_call_info.dnses);
             lynq_ipv4_aton_getinfo(&data_call_info,info);
         }
-        else if (strcmp(data_call_info.type,"IPV6"))
+        else if (strncmp(data_call_info.type,"IPV6", strlen("IPV6") + 1) == 0)
         {
             strcpy(info->v6.name,data_call_info.ifname);
 
@@ -744,16 +1021,23 @@
             LYINFLOG("[IPV6]addresses:%s,gateways:%s,dnses:%s",data_call_info.addresses,data_call_info.gateways,data_call_info.dnses);
             lynq_ipv6_inet_pton_getinfo(&data_call_info,info);
         }
-        else if (strcmp(data_call_info.type,"IPV4V6"))
+        else if (strncmp(data_call_info.type,"IPV4V6", strlen("IPV4V6") + 1) == 0)
         {
             strcpy(info->v4.name,data_call_info.ifname);
             datacall_ipv4_status_judge(data_call_info.status,info);
             LYINFLOG("[IPV4V6]addresses:%s,gateways:%s,dnses:%s",data_call_info.addresses,data_call_info.gateways,data_call_info.dnses);
+#ifndef MOBILETEK_TARGET_PLATFORM_T106
             lynq_ipv4_aton_getinfo(&data_call_info,info);
+#endif
             strcpy(info->v6.name,data_call_info.ifname);
             datacall_ipv6_status_judge(data_call_info.status,info);
             LYINFLOG("[IPV4V6]addresses:%s,gateways:%s,dnses:%s",data_call_info.addresses,data_call_info.gateways,data_call_info.dnses);
+#ifndef MOBILETEK_TARGET_PLATFORM_T106
             lynq_ipv6_inet_pton_getinfo(&data_call_info,info);
+#endif
+#ifdef MOBILETEK_TARGET_PLATFORM_T106
+            lynq_ipv4v6_inet_pton_getinfo(&data_call_info,info);
+#endif
         }
         else
         {
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/makefile b/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/makefile
old mode 100644
new mode 100755
index c3bfba0..4b5eb82
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/makefile
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/makefile
@@ -12,6 +12,9 @@
 LOCAL_CFLAGS += -DBINDER_IPC_32BIT=1 -DHAVE_ENDIAN_H -DHAVE_PTHREADS -DHAVE_SYS_UIO_H -DHAVE_POSIX_FILEMAP -DHAVE_STRLCPY -DHAVE_PRCTL -DHAVE_MEMSET16 -DHAVE_MEMSET32 -DANDROID_SMP=0
 endif
 
+ifeq ($(strip $(TARGET_PLATFORM)), T106)
+    LOCAL_CFLAGS += -DMOBILETEK_TARGET_PLATFORM_T106
+endif
 $(warning ################# lynq qser sms demo ROOT: $(ROOT),includedir:$(includedir))
 LOCAL_PATH   = .
 
diff --git a/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/data.cpp b/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/data.cpp
index a4be3e7..b3d1971 100755
--- a/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/data.cpp
+++ b/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/data.cpp
@@ -94,14 +94,20 @@
 qser_data_call_state_s state = {0};

 void evt_cb(qser_data_call_state_s *state)

 {

-    char buf_ip[20] = {0};

-    char buf_gateway[20] = {0};

-    char buf_pri_dns[20] = {0};

-    char buf_sec_dns[20] = {0};

+    char buf_ip[64] = {0};

+    char buf_gateway[64] = {0};

+    char buf_pri_dns[64] = {0};

+    char buf_sec_dns[64] = {0};

     printf("LYNQ_QSER_DATA_INIT: profile_idx=%d, name=%s, ip_family=%d, state=%d, error=%d\n"

         , state->profile_idx, state->name, state->ip_family, state->state, state->err);

-    printf("LYNQ_QSER_DATA_INIT: v4.ip=%s, v4.gateway=%s, v4.pri_dns=%s, v4.sec_dns=%s\n"

-        , inet_ntoa(state->v4.ip), inet_ntoa(state->v4.gateway), inet_ntoa(state->v4.pri_dns), inet_ntoa(state->v4.sec_dns));

+    printf("LYNQ_QSER_DATA_INIT: v4.ip=%s\n"

+        , inet_ntoa(state->v4.ip));

+    printf("LYNQ_QSER_DATA_INIT: v4.gateway=%s\n"

+        , inet_ntoa(state->v4.gateway));

+    printf("LYNQ_QSER_DATA_INIT: v4.pri_dns=%s, v4.sec_dns=%s\n"

+        , inet_ntoa(state->v4.pri_dns));

+    printf("LYNQ_QSER_DATA_INIT: v4.sec_dns=%s\n"

+        , inet_ntoa(state->v4.sec_dns));

     inet_ntop(AF_INET6, &(state->v6.ip), buf_ip, sizeof(buf_ip));

     inet_ntop(AF_INET6, &(state->v6.gateway), buf_gateway, sizeof(buf_gateway));

     inet_ntop(AF_INET6, &(state->v6.pri_dns), buf_pri_dns, sizeof(buf_pri_dns));

@@ -198,10 +204,10 @@
 {

     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

     int ret = -1;

-    char buf_ip[20] = {0};

-    char buf_gateway[20] = {0};

-    char buf_pri_dns[20] = {0};

-    char buf_sec_dns[20] = {0};

+    char buf_ip[64] = {0};

+    char buf_gateway[64] = {0};

+    char buf_pri_dns[64] = {0};

+    char buf_sec_dns[64] = {0};

     qser_data_call_info_s info = {0};

     int profile_idx_int = atoi(argv[1]);

     qser_data_call_error_e err = QSER_DATA_CALL_ERROR_NONE;

@@ -229,8 +235,14 @@
     printf("%s%d\n",TEST_RESULT,ret);

     printf("LYNQ_QSER_GET_DATA_CALL_LIST: error=%d, profile_idx=%d, ip_family=%d\n", err, info.profile_idx, info.ip_family);

     printf("LYNQ_QSER_GET_DATA_CALL_LIST: v4.name=%s, v4.state=%d, v4.reconnect=%d\n", info.v4.name, info.v4.state, info.v4.reconnect);

-    printf("LYNQ_QSER_GET_DATA_CALL_LIST: v4.ip=%s, v4.gateway=%s, v4.pri_dns=%s, v4.sec_dns=%s\n"

-        , inet_ntoa(info.v4.addr.ip), inet_ntoa(info.v4.addr.gateway), inet_ntoa(info.v4.addr.pri_dns), inet_ntoa(info.v4.addr.sec_dns));

+    printf("LYNQ_QSER_GET_DATA_CALL_LIST: v4.ip=%s\n"

+        , inet_ntoa(info.v4.addr.ip));

+    printf("LYNQ_QSER_GET_DATA_CALL_LIST: v4.gateway=%s\n"

+        , inet_ntoa(info.v4.addr.gateway));

+    printf("LYNQ_QSER_GET_DATA_CALL_LIST: v4.pri_dns=%s\n"

+        , inet_ntoa(info.v4.addr.pri_dns));

+    printf("LYNQ_QSER_GET_DATA_CALL_LIST: v4.sec_dns=%s\n"

+        , inet_ntoa(info.v4.addr.sec_dns));

 

     printf("LYNQ_QSER_GET_DATA_CALL_LIST: v6.name=%s, v6.state=%d, v6.reconnect=%d\n", info.v6.name, info.v6.state, info.v6.reconnect);

     inet_ntop(AF_INET6, &(info.v6.addr.ip), buf_ip, sizeof(buf_ip));