Merge "[Feature][T106]version update to T106CN-ZS03.V2.01.01.02P52U02.AP.09.06_CAP.09.06"
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-sim-demo/files/lynq-qser-sim-demo.cpp b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-sim-demo/files/lynq-qser-sim-demo.cpp
index 732225b..c5b61b6 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-sim-demo/files/lynq-qser-sim-demo.cpp
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-sim-demo/files/lynq-qser-sim-demo.cpp
@@ -308,7 +308,8 @@
                     char new_pin[BUF_PIN] = {0};

                     printf("input new pin\n");

                     scanf("%s", new_pin);

-

+                    memset(pt_info.puk_value, 0, sizeof(pt_info.puk_value));

+                    memset(pt_info.new_pin_value, 0, sizeof(pt_info.new_pin_value));

                     strncpy(pt_info.puk_value, puk, BUF_PIN);

                     strncpy(pt_info.new_pin_value, new_pin, BUF_PIN);

                     printf("pt_info.puk_value = %s, puk = %s\n", pt_info.puk_value, puk);

@@ -403,7 +404,7 @@
                         res = qser_sim_getcardstatus(h_sim, QSER_SIM_SLOT_ID_1, &pt_info);

                         if(res == 0)

                         {

-                            printf("state is %d !!!\n",pt_info.e_card_state);

+                            printf("state is 0x%x !!!\n",pt_info.e_card_state);

                         }else{

                             printf("get imsi error,res = %d\n", res);

                         }

@@ -416,119 +417,149 @@
             //qser_deinit_sim

             case 10:

             {

-                char imei[BUF_SIZE]="";

-                qser_sim_getimei = (int(*)(sim_client_handle_type h_sim, char *imei))dlsym(dlHandle_sim,"qser_sim_getimei");

-                if(NULL != qser_sim_getimei)

-                {

-                    res = qser_sim_getimei(h_sim, imei);

-                    if(res == 0)

-                    {

-                        printf("get imei success!!!\n");

-                    }else{

-                        printf("get imei error, res = %d\n", res);

-                    }

-                }else{

-                    printf("qser_sim_getimei dlsym error\n");

+                if(flag_init == 0){

+                    printf("must init first\n");

                 }

-                flag_init = 0;

-                break;

+                else{

+                    char imei[BUF_SIZE]="";

+                    qser_sim_getimei = (int(*)(sim_client_handle_type h_sim, char *imei))dlsym(dlHandle_sim,"qser_sim_getimei");

+                    if(NULL != qser_sim_getimei)

+                    {

+                        res = qser_sim_getimei(h_sim, imei);

+                        if(res == 0)

+                        {

+                            printf("get imei success!!!\n");

+                        }else{

+                            printf("get imei error, res = %d\n", res);

+                        }

+                    }else{

+                        printf("qser_sim_getimei dlsym error\n");

+                    }

+                 }

+                    //flag_init = 0;

+                    break;

             }

             //qser_get_imei_and_sv

             case 11:

             {

-                char imei[BUF_SIZE]="";

-                char sv[BUF_SIZE]="";

-                qser_get_imei_and_sv = (int(*)(sim_client_handle_type h_sim, char *imei, char *sv))dlsym(dlHandle_sim,"qser_get_imei_and_sv");

-                if(NULL != qser_get_imei_and_sv)

-                {

-                    res = qser_get_imei_and_sv(h_sim, imei, sv);

-                    if(res == 0)

-                    {

-                        printf("get imei and sv success!!!\n");

-                    }else{

-                        printf("get imei and sv error, res = %d\n", res);

-                    }

-                }else{

-                    printf("qser_get_imei_and_sv dlsym error\n");

+                if(flag_init == 0){

+                    printf("must init first\n");

                 }

-                flag_init = 0;

+                else{

+                    char imei[BUF_SIZE]="";

+                    char sv[BUF_SIZE]="";

+                    qser_get_imei_and_sv = (int(*)(sim_client_handle_type h_sim, char *imei, char *sv))dlsym(dlHandle_sim,"qser_get_imei_and_sv");

+                    if(NULL != qser_get_imei_and_sv)

+                    {

+                        res = qser_get_imei_and_sv(h_sim, imei, sv);

+                        if(res == 0)

+                        {

+                            printf("get imei and sv success!!!\n");

+                        }else{

+                            printf("get imei and sv error, res = %d\n", res);

+                        }

+                    }else{

+                        printf("qser_get_imei_and_sv dlsym error\n");

+                    }

+                }

+                //flag_init = 0;

                 break;

             }

             //qser_reset_modem

             case 12:

             {

-                qser_reset_modem = (int(*)(sim_client_handle_type h_sim))dlsym(dlHandle_sim,"qser_reset_modem");

-                if(NULL != qser_reset_modem)

-                {

-                    res = qser_reset_modem(h_sim);

-                    if(res == 0)

-                    {

-                        printf("reset modem success!!!\n");

-                    }else{

-                        printf("reset modem error, res = %d\n", res);

-                    }

-                }else{

-                    printf("qser_reset_modem dlsym error\n");

+                if(flag_init == 0){

+                    printf("must init first\n");

                 }

-                flag_init = 0;

+                else{

+                    qser_reset_modem = (int(*)(sim_client_handle_type h_sim))dlsym(dlHandle_sim,"qser_reset_modem");

+                    if(NULL != qser_reset_modem)

+                    {

+                        res = qser_reset_modem(h_sim);

+                        if(res == 0)

+                        {

+                            printf("reset modem success!!!\n");

+                        }else{

+                            printf("reset modem error, res = %d\n", res);

+                        }

+                    }else{

+                        printf("qser_reset_modem dlsym error\n");

+                    }

+                }

+                //flag_init = 0;

                 break;

             }

             //qser_get_version

             case 13:

             {

-                char buf[VER_SIZE]="";

-                qser_get_version = (int(*)(sim_client_handle_type h_sim, char *buf))dlsym(dlHandle_sim,"qser_get_version");

-                if(NULL != qser_get_version)

-                {

-                    res = qser_get_version(h_sim, buf);

-                    if(res == 0)

-                    {

-                        printf("get version success!!!\n");

-                    }else{

-                        printf("get version error, res = %d\n", res);

-                    }

-                }else{

-                    printf("qser_get_version dlsym error\n");

+                if(flag_init == 0){

+                    printf("must init first\n");

                 }

-                flag_init = 0;

+                else{

+                    char buf[VER_SIZE]="";

+                    qser_get_version = (int(*)(sim_client_handle_type h_sim, char *buf))dlsym(dlHandle_sim,"qser_get_version");

+                    if(NULL != qser_get_version)

+                    {

+                        res = qser_get_version(h_sim, buf);

+                        if(res == 0)

+                        {

+                            printf("get version success!!!\n");

+                        }else{

+                            printf("get version error, res = %d\n", res);

+                        }

+                    }else{

+                        printf("qser_get_version dlsym error\n");

+                    }

+                }

+                //flag_init = 0;

                 break;

             }

             //qser_reset_sim

             case 14:

             {

-                qser_reset_sim = (int(*)(sim_client_handle_type h_sim))dlsym(dlHandle_sim,"qser_reset_sim");

-                if(NULL != qser_reset_sim)

-                {

-                    res = qser_reset_sim(h_sim);

-                    if(res == 0)

-                    {

-                        printf("reset sim success!!!\n");

-                    }else{

-                        printf("reset sim error, res = %d\n", res);

-                    }

-                }else{

-                    printf("qser_reset_sim dlsym error\n");

+                if(flag_init == 0){

+                    printf("must init first\n");

                 }

-                flag_init = 0;

+                else{

+                    qser_reset_sim = (int(*)(sim_client_handle_type h_sim))dlsym(dlHandle_sim,"qser_reset_sim");

+                    if(NULL != qser_reset_sim)

+                    {

+                        res = qser_reset_sim(h_sim);

+                        if(res == 0)

+                        {

+                            printf("reset sim success!!!\n");

+                        }else{

+                            printf("reset sim error, res = %d\n", res);

+                        }

+                    }else{

+                        printf("qser_reset_sim dlsym error\n");

+                    }

+                }

+                //flag_init = 0;

                 break;

             }

             //qser_deinit_sim

             case 15:

             {

-                qser_sim_client_deinit = (int(*)(sim_client_handle_type h_sim))dlsym(dlHandle_sim,"qser_sim_client_deinit");

-                if(NULL != qser_sim_client_deinit)

-                {

-                    res = qser_sim_client_deinit(h_sim);

-                    if(res == 0)

-                    {

-                        printf("sim deinit success is!!!\n");

-                    }else{

-                        printf("sim deint errors, res = %d\n", res);

-                    }

-                }else{

-                    printf("qser_sim_client_deinit dlsym error\n");

+                if(flag_init == 0){

+                    printf("must init first\n");

                 }

-                flag_init = 0;

+                else{

+                    qser_sim_client_deinit = (int(*)(sim_client_handle_type h_sim))dlsym(dlHandle_sim,"qser_sim_client_deinit");

+                    if(NULL != qser_sim_client_deinit)

+                    {

+                        res = qser_sim_client_deinit(h_sim);

+                        if(res == 0)

+                        {

+                            printf("sim deinit success is!!!\n");

+                        }else{

+                            printf("sim deint errors, res = %d\n", res);

+                        }

+                    }else{

+                        printf("qser_sim_client_deinit dlsym error\n");

+                    }

+                 }

+                //flag_init = 0;

                 break;

             }

             default:

diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-systime-demo/files/lynq_systime_demo.cpp b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-systime-demo/files/lynq_systime_demo.cpp
index d0fffcf..a600884 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-systime-demo/files/lynq_systime_demo.cpp
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-systime-demo/files/lynq_systime_demo.cpp
@@ -35,6 +35,8 @@
 int (*ntp_sync_time)(int enable);

 int (*user_set_time)(char *date, char *time);

 int (*lynq_get_time_src_status)(time_src_status_s *time_src);

+int (*get_sync_time_result)();

+

 

 int lynq_ntp_sync_demo(int argc, char *argv[])

 {

@@ -159,6 +161,22 @@
     return 0;

 }

 

+int lynq_get_sync_status_demo(int arg_c, char *arg_v[])

+{

+    get_sync_time_result = (int (*)(void))dlsym(dlHandle_systime, "get_sync_time_result");

+    int ret = 0;

+    if(NULL == get_sync_time_result)

+    {

+        printf("Failed to dlsym function get_sync_time_result: %s\n", dlerror());

+        dlclose(dlHandle_systime);

+        return -1;

+    }

+    ret = get_sync_time_result();

+    printf("get_sync_time_result = %d\n",ret);

+	dlclose(dlHandle_systime);

+    return 0;

+}

+

 int main(int argc, char *argv[])

 {

     int ret = -1;

@@ -237,6 +255,10 @@
     {

         ret = lynq_get_time_src_status_demo(argc, argv);

     }

+    else if (strcmp(cmd,"sync_status") == 0)

+    {

+        ret = lynq_get_sync_status_demo(argc, argv);

+    }

     else

     {

         printf("command wrong !\n");

diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-call/makefile b/cap/zx297520v3/src/lynq/lib/liblynq-call/makefile
index 57d6e2d..b38e05b 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-call/makefile
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-call/makefile
@@ -14,7 +14,7 @@
 
 
 ifeq ($(strip $(TARGET_PLATFORM)), T106)
-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
+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 -Wl,-Bsymbolic
 endif
 
 ifeq ($(strip $(TARGET_PLATFORM)), T106)
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-data/makefile b/cap/zx297520v3/src/lynq/lib/liblynq-data/makefile
index 1dbdf99..c36e038 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-data/makefile
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-data/makefile
@@ -9,7 +9,7 @@
                 -fpermissive \
 		
 ifeq ($(strip $(TARGET_PLATFORM)), T106)
-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
+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 -Wl,-Bsymbolic
 endif
 
 ifeq ($(strip $(TARGET_PLATFORM)), T106)
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-network/makefile b/cap/zx297520v3/src/lynq/lib/liblynq-network/makefile
index 5505037..533ddcf 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-network/makefile
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-network/makefile
@@ -12,7 +12,7 @@
                 -DECALL_SUPPORT
 
 ifeq ($(strip $(TARGET_PLATFORM)), T106)
-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
+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 -Wl,-Bsymbolic
 endif
 
 ifeq ($(strip $(TARGET_PLATFORM)), T106)
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/makefile b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/makefile
index 0f99e4f..8ab6383 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/makefile
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/makefile
@@ -35,6 +35,7 @@
     -llynq-uci \

     -lsctel \

     -lbsp \

+    -lnvram \

 

 

 SOURCES = $(wildcard *.c wildcard *.h src/*.cpp)

diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/mbtk_gnss.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/mbtk_gnss.cpp
index 862aeea..d508438 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/mbtk_gnss.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/mbtk_gnss.cpp
@@ -34,6 +34,9 @@
 extern int sc_rtc_timer_init(void);
 extern int sc_rtc_timer_uninit(void);
 extern int sc_rtc_time_set(int srcid);
+extern int sc_cfg_get(char *name, char* buf, int bufLen);
+extern int sc_cfg_set (char *name, char *value);
+
 
 static inline int update_system_time(time_t timestamp)
 {
@@ -393,6 +396,12 @@
         _mopen_location_info->longitude = atof(tmp_str);
         memset(tmp_str, 0, sizeof(tmp_str));
         // get product name
+        ret = gnss_get_para_from_nmea(str, tmp_str, 6);
+        if(ret)
+            return;
+        _mopen_location_info->flags = atoi(tmp_str);
+        memset(tmp_str, 0, sizeof(tmp_str));
+        // get product name
         ret = gnss_get_para_from_nmea(str, tmp_str, 9);
         if(ret)
             return;
@@ -495,12 +504,7 @@
     {
         handle->gnss_handler_func((uint32)handle, E_MT_LOC_MSG_ID_NMEA_INFO, &nmea_info, NULL);
     }
-    if(handle->gnss_handler_func && handle->mode == 1 &&
-            mopen_location_info.latitude &&
-            mopen_location_info.longitude &&
-            mopen_location_info.altitude &&
-            mopen_location_info.timestamp &&
-            mopen_location_info.speed)
+    if(handle->gnss_handler_func && handle->mode == 1 && mopen_location_info.timestamp && mopen_location_info.flags)
     {
         
         handle->gnss_handler_func((uint32)handle, E_MT_LOC_MSG_ID_LOCATION_INFO, &mopen_location_info, NULL);
@@ -514,6 +518,7 @@
             if (update_system_time(nmea_info.timestamp) == 0)
             {
                 g_gnss_sync_done = 1;
+                sc_cfg_set("gnss_process_result","success");
             }
         }
     }
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-network/lynq_qser_network.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-network/lynq_qser_network.cpp
index 2628d27..d75c23b 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-network/lynq_qser_network.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-network/lynq_qser_network.cpp
@@ -488,6 +488,61 @@
     return state;  
 }
 
+int qser_romaing_state_qurey(int regState)
+{
+    if (regState == 5)
+    {
+        return  E_QSER_NW_ROAM_STATE_ON;   
+    }
+    return E_QSER_NW_ROAM_STATE_OFF;
+}
+
+int fill_registration_details_3gpp(QSER_NW_3GPP_REG_INFO_T  *registration_details_3gpp,  int regState, int netType, int serve_cell_info[MAX_CELLINFO_ITEM_NUMBER])
+{
+
+    if(serve_cell_info[1]>=0 && serve_cell_info[1] <= 999 && serve_cell_info[2]>=0 && serve_cell_info[2] <= 999 )
+    {
+        registration_details_3gpp->tech_domain = E_QSER_NW_TECH_DOMAIN_3GPP;
+        registration_details_3gpp->radio_tech = qser_radio_tech_qurey(netType);
+        registration_details_3gpp->roaming = qser_romaing_state_qurey(regState);
+        registration_details_3gpp->forbidden=0;
+
+        sprintf(registration_details_3gpp->mcc,"%d",serve_cell_info[1]);
+        sprintf(registration_details_3gpp->mnc,"%d",serve_cell_info[2]);  
+
+        if(serve_cell_info[0]<=LYNQ_CELL_INFO_TYPE_WCDMA)
+        {
+            registration_details_3gpp->lac=serve_cell_info[3];
+            registration_details_3gpp->tac=0xffff;
+        }
+        else
+        {
+            registration_details_3gpp->lac=0xffff;
+            registration_details_3gpp->tac=serve_cell_info[3];
+        }
+        
+        registration_details_3gpp->cid=serve_cell_info[4]; 
+        
+ 
+        if(serve_cell_info[0]==LYNQ_CELL_INFO_TYPE_WCDMA)
+        {
+             registration_details_3gpp->psc=serve_cell_info[5];
+        }
+        else
+        {
+             registration_details_3gpp->psc=0xffff;
+        }            
+        
+        return RESULT_OK;
+    }
+    LYERRLOG("mnc mcc error %d %d",serve_cell_info[1],serve_cell_info[2]);
+    return RESULT_ERROR;
+}
+
+int is_have_serve_cell(int regState)
+{
+    return (regState==E_QSER_NW_SERVICE_LIMITED || regState==E_QSER_NW_SERVICE_FULL);
+}
 
 int qser_nw_get_reg_status(nw_client_handle_type h_nw,QSER_NW_REG_STATUS_INFO_T *pt_info)
 {
@@ -504,6 +559,7 @@
     }    
     
     int ret = 0;
+    int ret_serve_cell=0;
     int regState = 0;
     int imsRegState = 0;
     char CID[128]={0};
@@ -511,53 +567,68 @@
     int netType = 0;
     int radioTechFam = 0;
     int netreject = 0;
-    pt_info->voice_registration_valid = 1;
-    ret = lynq_query_registration_state("VOICE",&regState,&imsRegState,LAC,CID,&netType,&radioTechFam,&netreject);
-    if(ret == 0)
-    {
-        pt_info->voice_registration_valid = 1;
-        pt_info->voice_registration.tech_domain = E_QSER_NW_TECH_DOMAIN_NONE;
-        pt_info->voice_registration.radio_tech = qser_radio_tech_qurey(netType);
-        if (regState == 5)
-        {
-            pt_info->voice_registration.roaming = E_QSER_NW_ROAM_STATE_ON;
-        }
-        else
-        {
-            pt_info->voice_registration.roaming = E_QSER_NW_ROAM_STATE_OFF;
-        }
-        pt_info->voice_registration.registration_state = switch_nw_regstate(regState);
-    }
-    else
-    {
-        pt_info->voice_registration_valid = 0;
-        LYERRLOG("get voice regstate fail");
-    }
-    ret = lynq_query_registration_state("DATA",&regState,&imsRegState,LAC,CID,&netType,&radioTechFam,&netreject);
-    if(ret == 0)
-    {
-        pt_info->data_registration_valid = 1;
-        pt_info->data_registration.tech_domain = E_QSER_NW_TECH_DOMAIN_NONE;
-        pt_info->data_registration.radio_tech = qser_radio_tech_qurey(netType);
-        if (regState == 5)
-        {
-            pt_info->data_registration.roaming = E_QSER_NW_ROAM_STATE_ON;
-        }
-        else
-        {
-            pt_info->data_registration.roaming = E_QSER_NW_ROAM_STATE_OFF;
-        }
-        pt_info->data_registration.registration_state = switch_nw_regstate(regState);
-    }
-    else
-    {
-        pt_info->data_registration_valid = 0;
-        LYERRLOG("get data regstate fail");
-    }
+    int serve_cell_info[MAX_CELLINFO_ITEM_NUMBER];
+    int valid_number;
+    int query_servce_cell=false;
+
+    pt_info->voice_registration_valid = 0;
+    pt_info->data_registration_valid = 0;
     pt_info->voice_registration_details_3gpp_valid = 0;
     pt_info->data_registration_details_3gpp_valid = 0;
     pt_info->voice_registration_details_3gpp2_valid = 0;
     pt_info->data_registration_details_3gpp2_valid = 0;
+        
+
+    ret = lynq_query_registration_state("VOICE",&regState,&imsRegState,LAC,CID,&netType,&radioTechFam,&netreject);
+    if(ret!=0)
+    {
+         LYERRLOG("get voice regstate fail");
+    }
+    else {    
+        pt_info->voice_registration_valid = 1;
+        pt_info->voice_registration.tech_domain = E_QSER_NW_TECH_DOMAIN_NONE;
+        pt_info->voice_registration.radio_tech = qser_radio_tech_qurey(netType);       
+        pt_info->voice_registration.roaming = qser_romaing_state_qurey(regState);       
+        pt_info->voice_registration.registration_state = switch_nw_regstate(regState);
+        
+        if(is_have_serve_cell(pt_info->voice_registration.registration_state))
+        {  
+            ret_serve_cell=lynq_query_serve_cell_info(serve_cell_info, &valid_number);                   
+            query_servce_cell=true;
+            if(ret_serve_cell== RESULT_OK && fill_registration_details_3gpp(&pt_info->voice_registration_details_3gpp,regState,netType,serve_cell_info) == RESULT_OK)
+            {
+                pt_info->voice_registration_details_3gpp_valid=1;                   
+            }    
+        }             
+    }
+    
+    ret = lynq_query_registration_state("DATA",&regState,&imsRegState,LAC,CID,&netType,&radioTechFam,&netreject);
+    if(ret!=0)
+    {
+         LYERRLOG("get data regstate fail");
+    }
+    else
+    {      
+        pt_info->data_registration_valid = 1;
+        pt_info->data_registration.tech_domain = E_QSER_NW_TECH_DOMAIN_NONE;
+        pt_info->data_registration.radio_tech = qser_radio_tech_qurey(netType);      
+        pt_info->data_registration.roaming = qser_romaing_state_qurey(regState);         
+        pt_info->data_registration.registration_state = switch_nw_regstate(regState);
+
+        if(is_have_serve_cell(pt_info->data_registration.registration_state))
+        {  
+            if(!query_servce_cell)
+            {
+                ret_serve_cell=lynq_query_serve_cell_info(serve_cell_info, &valid_number);                   
+            }
+                         
+            if(ret_serve_cell== RESULT_OK && fill_registration_details_3gpp(&pt_info->data_registration_details_3gpp,regState,netType,serve_cell_info) == RESULT_OK)
+            {
+                pt_info->data_registration_details_3gpp_valid=1;   
+            }    
+        }         
+    }    
+    
     return RESULT_OK;
 }
 
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-sim/lynq_qser_sim.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-sim/lynq_qser_sim.cpp
index d413c17..4225625 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-sim/lynq_qser_sim.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-sim/lynq_qser_sim.cpp
@@ -194,6 +194,7 @@
 int qser_sim_getcardstatus(sim_client_handle_type h_sim,QSER_SIM_SLOT_ID_TYPE_T simId, QSER_SIM_CARD_STATUS_INFO_T   *pt_info)
 {
     int ret = 0;
+    int sim_status = 0;
     if(NULL == pt_info)
     {
         LYERRLOG("input  error\n");
@@ -204,8 +205,17 @@
         LYERRLOG("not init\n");
         return E_QSER_ERROR_BADPARM;
     }
-    ret = lynq_get_sim_status((int*)&pt_info->e_card_state);
-    LYINFLOG("[%s-%d] QSER_CARD_STATUS: %d\n", __FUNCTION__, __LINE__, (int *)pt_info->e_card_state);
+    ret = lynq_get_sim_status(&sim_status);
+    if(1 == sim_status)
+    {
+        pt_info->e_card_state = 0xB03;
+    }
+    else
+    {
+    
+        pt_info->e_card_state = 0xB01;
+    }
+    LYINFLOG("[%s-%d] QSER_CARD_STATUS: 0x%x\n", __FUNCTION__, __LINE__, pt_info->e_card_state);
     return ret;
 }
 
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-sim/makefile b/cap/zx297520v3/src/lynq/lib/liblynq-sim/makefile
index d28dbcb..219bda7 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-sim/makefile
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-sim/makefile
@@ -14,7 +14,7 @@
 
 
 ifeq ($(strip $(TARGET_PLATFORM)), T106)
-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 -DMOBILETEK_TARGET_PLATFORM_T106 
+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 -DMOBILETEK_TARGET_PLATFORM_T106 -Wl,-Bsymbolic
 endif
 
 $(warning ################# lynq sim ROOT: $(ROOT),includedir:$(includedir))
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-sim/src/lynq_sim.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-sim/src/lynq_sim.cpp
index e62153a..aa69974 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-sim/src/lynq_sim.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-sim/src/lynq_sim.cpp
@@ -926,9 +926,31 @@
 {
     FILE * fp;
     char buffer[128];
+    if(g_lynq_sim_init_flag == 0)
+    {
+        return -1;
+    }
     sprintf(buffer, "%s", "uci get lynq_uci_ro.lynq_version.LYNQ_SW_VERSION");
     fp = popen(buffer, "r");
-    fgets(buffer, sizeof(buffer), fp);
+    if(NULL == fp)
+    {
+        RLOGE("popen failed !");
+        return -1;
+    }
+    if(NULL != fgets(buffer, sizeof(buffer), fp))
+    {
+        if('\n' == buffer[strlen(buffer) - 1])
+        {
+            buffer[strlen(buffer) - 1] = '\0';
+        }
+    }
+    else
+    {
+        RLOGE("fgets failed !");
+        pclose(fp);
+        return -1;
+    }
+
     memcpy(buf, buffer, strlen(buffer));
     buf[strlen(buffer)] = '\0';
     pclose(fp);
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-sms/makefile b/cap/zx297520v3/src/lynq/lib/liblynq-sms/makefile
index b316414..4ee0c2a 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-sms/makefile
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-sms/makefile
@@ -13,7 +13,7 @@
                 -fpermissive \
 
 ifeq ($(strip $(TARGET_PLATFORM)), T106)
-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
+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 -Wl,-Bsymbolic
 endif
 
 $(warning ################# lynq data demo ROOT: $(ROOT),includedir:$(includedir))
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-systime/lynq_systime.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-systime/lynq_systime.cpp
index d898f9d..67bc631 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-systime/lynq_systime.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-systime/lynq_systime.cpp
@@ -30,6 +30,8 @@
 #define LYNQ_SYNC_TIME_SECTION "lynq_sync_time"

 #define LYNQ_MODEM_TIME_KEY "lynq_modem_sync_time_enable"

 #define LYNQ_GNSS_TIME_KEY "lynq_gnss_sync_time_enable"

+#define SNTP_PROCESS_RESULT  "sntp_process_result"

+#define GNSS_PROCESS_RESULT  "gnss_process_result"

 #define BUF_LEN 258

 #define TIME_BUF 100

 #define SYNC_TIME_SUCCESS 0

@@ -38,6 +40,7 @@
 

 #define SYSTEM_FUNC_FAILED 7

 #define ERROR_PARA 8

+#define NV_SET_FAILED 9

 

 #ifdef MOBILETEK_TARGET_PLATFORM_T106

 #define NTP_RESTART_BUF "/etc/init.d/sntp restart"

@@ -59,6 +62,8 @@
 extern int sc_rtc_timer_uninit(void);

 extern int sc_rtc_time_set(int srcid);

 extern int sc_rtc_time_get(int srcid, sc_rtc_time_get_cb rtc_notify);

+extern int sc_cfg_get(char *name, char* buf, int bufLen);

+extern int sc_cfg_set (char *name, char *value);

 

 char sync_from_rtc_cb_flag = 1;

 char rtc_time_get_cb_flag = 1;

@@ -107,6 +112,106 @@
     return 0;

 }

 

+int get_sntp_process_result()

+{

+    LYLOGSET(LOG_LEVEL);

+    LYLOGEINIT(USER_LOG_TAG);

+    char sntp_process_result[10] = {0};

+    int ret = 0;

+

+    ret = sc_cfg_get(SNTP_PROCESS_RESULT,sntp_process_result,sizeof(sntp_process_result));

+

+    if(0 == ret)

+    {

+        if(strcmp(sntp_process_result,"success") != 0)

+        {

+            strcpy(sntp_process_result,"failed");

+            LYINFLOG("sntp sync result:%s\n",sntp_process_result);

+            return -1;

+        }

+

+        else

+        {

+            LYINFLOG("sntp sync result:%s\n",sntp_process_result);

+            return SYNC_TIME_SUCCESS;

+        }

+    }

+

+    else

+    {

+        LYERRLOG("read sntp_sync_result failed\n");

+        return -1;

+    }

+    

+}

+

+int get_gnss_process_result()

+{

+    LYLOGSET(LOG_LEVEL);

+    LYLOGEINIT(USER_LOG_TAG);

+    char gnss_process_result[10] = {0};

+    int ret = 0;

+

+    ret = sc_cfg_get(GNSS_PROCESS_RESULT,gnss_process_result,sizeof(gnss_process_result));

+

+    if(0 == ret)

+    {

+        if(strcmp(gnss_process_result,"success") != 0)

+        {

+            strcpy(gnss_process_result,"failed");

+            LYINFLOG("gnss sync result:%s\n",gnss_process_result);

+            return -1;

+        }

+        else

+        {

+            LYINFLOG("gnss sync result:%s\n",gnss_process_result);

+            return SYNC_TIME_SUCCESS;

+        }

+    }

+    else

+    {

+        LYERRLOG("read gnss_sync_result failed\n");

+        return -1;

+    }

+    

+}

+

+int get_sync_time_result()

+{

+    LYLOGSET(LOG_LEVEL);

+    LYLOGEINIT(USER_LOG_TAG);

+    time_src_status_s time_src = {0};

+    lynq_get_time_src_status(&time_src);

+

+    LYINFLOG("time_src -> gnss = %d,time_src -> ntp = %d, time_src -> nitz = %d\n",time_src.gnss,time_src.ntp,time_src.nitz);

+

+    if(time_src.gnss)

+    {

+        LYINFLOG("time_source is gnss\n");

+        return get_gnss_process_result();

+    }

+

+    else if(time_src.ntp)

+    {

+        LYINFLOG("time_source is ntp\n");

+        return get_sntp_process_result();

+    }

+

+    else if(time_src.nitz)

+    {

+        LYINFLOG("time_source is nitz\n");

+        return 0;

+    }

+

+    else

+    {

+        LYINFLOG("don't set any time_source\n");

+        return 0;

+    }

+

+}

+

+

 int lynq_sync_time_from_rtc(void)

 {

     LYLOGSET(LOG_LEVEL);

@@ -288,7 +393,7 @@
     int ret = system(cmd_buf);

     if (ret != 0)

     {

-        printf("Function system(\"%s\") failed.", cmd_buf);

+        printf("Function system(\"%s\") failed.\n", cmd_buf);

         return SYSTEM_FUNC_FAILED;

     }

     return 0;

@@ -299,12 +404,19 @@
     LYLOGSET(LOG_LEVEL);

     LYLOGEINIT(USER_LOG_TAG);

     LYDBGLOG("[%s][%d] enter.\n", __func__, __LINE__);

+    int ret = 0;

     if (enable != 0 && enable != 1)

     {

         LYERRLOG("Parameter error! Only 0/1 allowed.\n");

         return ERROR_PARA;

     }

-    int ret = system(PGREP_NTP_DARMON);

+    ret = sc_cfg_set(SNTP_PROCESS_RESULT,"");

+    if (0 != ret)

+    {

+        LYERRLOG("set SNTP_PROCESS_RESULT failed\n");

+        return NV_SET_FAILED;

+    }

+    ret = system(PGREP_NTP_DARMON);

     if (0 == ret)

     {

         if (enable)

@@ -374,12 +486,20 @@
     LYLOGEINIT(USER_LOG_TAG);

     LYDBGLOG("[%s][%d] enter.\n", __FUNCTION__, __LINE__);

     char buf[BUF_LEN] = "";

+    char result[10] = "";

     int ret = 0;

     if (enable != 0 && enable != 1)

     {

         LYERRLOG("Parameter error! Only 0/1 allowed.\n");

         return ERROR_PARA;

     }

+    ret = sc_cfg_set(GNSS_PROCESS_RESULT,"");

+    if (0 != ret)

+    {

+        LYERRLOG("set GNSS_PROCESS_RESULT failed\n");

+        return NV_SET_FAILED;

+    }

+    

     if (enable)

     {

         // Only one time source is allowed to run simultaneously.

diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-systime/makefile b/cap/zx297520v3/src/lynq/lib/liblynq-systime/makefile
index 758315f..d0e37e8 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-systime/makefile
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-systime/makefile
@@ -37,6 +37,7 @@
     -lsctel \

     -llynq-uci \

     -llynq-log \

+    -lnvram \

 

 

 SOURCES = $(wildcard *.cpp)

diff --git a/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/platform/Script/scripts/lan.sh b/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/platform/Script/scripts/lan.sh
index 1faf70a..4e6c011 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/platform/Script/scripts/lan.sh
+++ b/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/platform/Script/scripts/lan.sh
@@ -33,7 +33,13 @@
 
     #´ò¿ªÍøÇŵØÖ·¸Ä±ä֪ͨµÄ¿ª¹Ø
     echo 1 > /proc/sys/net/ipv4/conf/$br_name/arp_notify
-    
+ 	
+    prj=`cat /sys/gmac/gmacconfig/type`
+       if [ "$prj" == "cpe" ]; then
+            ifconfig eth0 up 2>>$test_log
+            brctl addif $br_name eth0 2>>$test_log
+       fi
+   
     br_node=`nv get br_node_cap`
 
     #analysis br_node ex: usb0+wifi0+¡­
@@ -108,11 +114,7 @@
     ip route add default via $ap_ip
     ip -6 route add default via $ap_ipv6 dev $lan_if_cap
     echo "nameserver $ap_ip" >> /etc/resolv.conf
-    prj=`cat /sys/gmac/gmacconfig/type`
-    if [ "$prj" == "cpe" ]; then
-        ifconfig eth0 up 2>>$test_log
-        brctl addif $br_name eth0 2>>$test_log
-    fi
+
 }
 
 main