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..2736f29 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
@@ -403,7 +403,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);
                         }
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-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-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)
