diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/liblynq-qser-sim/liblynq-qser-sim.bb b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/liblynq-qser-sim/liblynq-qser-sim.bb
index f4c89f4..71e2bcf 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/liblynq-qser-sim/liblynq-qser-sim.bb
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/liblynq-qser-sim/liblynq-qser-sim.bb
@@ -17,6 +17,9 @@
 BB_INCLUDE_ADD = "--sysroot=${STAGING_DIR_HOST}"
 BB_LDFLAGS_ADD = "--sysroot=${STAGING_DIR_HOST} -Wl,--hash-style=gnu"
 #Parameters passed to do_compile()
+EXTRA_OEMAKE = "'RAT_CONFIG_C2K_SUPPORT = ${RAT_CONFIG_C2K_SUPPORT}'\
+                'MTK_MULTI_SIM_SUPPORT = ${MTK_MULTI_SIM_SUPPORT}'\
+                'TARGET_PLATFORM = ${TARGET_PLATFORM}'"
 
 FILES_${PN} = "${base_libdir}/*.so "
 
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-gnss-demo/files/lynq-qser-gnss-demo.cpp b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-gnss-demo/files/lynq-qser-gnss-demo.cpp
index 01aa10e..d3d8e89 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-gnss-demo/files/lynq-qser-gnss-demo.cpp
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-gnss-demo/files/lynq-qser-gnss-demo.cpp
@@ -30,6 +30,10 @@
 int (*qser_Gnss_Stop)(uint32_t h_gnss);
 int (*qser_Gnss_Delete_Aiding_Data)(uint32_t,DELETE_AIDING_DATA_TYPE_T);
 int (*qser_Gnss_InjectTime)(uint32_t,LYNQ_INJECT_TIME_INTO_T *time_info);
+int (*qser_Gnss_Server_Configuration)(char *host, char *id, char *password);
+int (*qser_Gnss_download_tle)();
+int (*qser_Gnss_injectEphemeris)(uint32_t);
+int (*qser_Gnss_Set_Frequency)(uint32_t, int);
 void *dlHandle_gnss;
 
 int main(int argc, char *argv[])
@@ -71,11 +75,11 @@
             ret =qser_Gnss_Deinit(ph_gnss);
             if(ret < 0)
             {
-                printf("mopen_gnss_client_init FAIL.\n");
+                printf("mopen_gnss_client_Deinit FAIL.\n");
                 return -1;
             }
-            printf("mopen_gnss_client_Deinit success ");
-            return 0;
+            printf("mopen_gnss_client_Deinit success \n");
+            break;
         }
         case 3:
         {
@@ -83,7 +87,7 @@
             ret = qser_AddRxIndMsgHandler((gnss_handler_func_t)&cb,ph_gnss);
             if(ret < 0)
             {
-                printf("lynq_AddRxIndMsgHandler\n");
+                printf("lynq_AddRxIndMsgHandler fail\n");
                 qser_Gnss_Deinit(ph_gnss);
                 return -1;
             }
@@ -141,8 +145,8 @@
                 qser_Gnss_Deinit(ph_gnss);
                 return -1;
             }
-            break;
             printf("stop success\n");
+            break; 
         }
 
         case 8:
@@ -158,26 +162,32 @@
             case 0:
             {
                 ptr = DELETE_NOTHING;//hot
+                break;
             }
             case 1:
             {
                 ptr = DELETE_EPHEMERIS;//warm
+                break;
             }
             case 2:
             {
                 ptr = DELETE_ALMANAC;
+                break;
             }
             case 3:
             {
                 ptr = DELETE_POSITION_TIME;
+                break;
             }
             case 4:
             {
                 ptr = DELETE_UTC;
+                break;
             }
             case 5:
             {
                 ptr = DELETE_ALL;//cold
+                break;
             }
             }
             ret = qser_Gnss_Delete_Aiding_Data(ph_gnss,ptr);
@@ -197,11 +207,64 @@
             ret = qser_Gnss_InjectTime(ph_gnss,&time_test);
             if(ret < 0)
             {
-                printf("lynq_Gnss_InjectTime fail\n");
+                printf("qser_Gnss_InjectTime fail\n");
                 qser_Gnss_Deinit(ph_gnss);
                 return -1;
             }
-            printf("lynq_Gnss_InjectTime success\n");
+            printf("qser_Gnss_InjectTime success\n");
+            break;
+        }
+        case 10:
+        {
+            qser_Gnss_download_tle=(int(*)())dlsym(dlHandle_gnss, "qser_Gnss_download_tle");
+            ret = qser_Gnss_download_tle();
+            if(ret < 0)
+            {
+                printf("qser_Gnss_download_tle fail\n");
+                return -1;
+            }
+            printf("qser_Gnss_download_tle success\n");
+            break;
+        }
+        case 11:
+        {
+            int frequency;
+            qser_Gnss_Set_Frequency=(int(*)(uint32_t, int))dlsym(dlHandle_gnss, "qser_Gnss_Set_Frequency");
+            printf("=========delete aiding data type=========\n");
+            scanf("%d", &frequency);
+            ret = qser_Gnss_Set_Frequency(ph_gnss,frequency);
+            if(ret < 0)
+            {
+                printf("qser_Gnss_Set_Frequency fail\n");
+                return -1;
+            }
+            printf("frequency is %d\n",frequency);
+            printf("qser_Gnss_Set_Frequency success\n");
+            break;
+        }
+        case 12:
+        {
+            int (*qser_Gnss_injectEphemeris)(uint32_t);
+            qser_Gnss_injectEphemeris=(int(*)(uint32_t))dlsym(dlHandle_gnss, "qser_Gnss_injectEphemeris");
+            ret = qser_Gnss_injectEphemeris(ph_gnss);
+            if(ret < 0)
+            {
+                printf("qser_Gnss_injectEphemeris fail\n");
+                return -1;
+            }
+            printf("qser_Gnss_injectEphemeri ssuccess\n");
+            break;
+        }
+        case 13:
+        {
+            qser_Gnss_Server_Configuration=(int(*)(char *host, char *id, char *password))dlsym(dlHandle_gnss, "qser_Gnss_Server_Configuration");
+            ret = qser_Gnss_Server_Configuration(NULL,"lcz","123456");
+            if(ret < 0)
+            {
+                printf("qser_Gnss_Server_Configuration fail\n");
+                return -1;
+            }
+            printf("qser_Gnss_Server_Configuration ssuccess\n");
             break;
         }
         }
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-gnss-demo/files/lynq-qser-gnss-demo.h b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-gnss-demo/files/lynq-qser-gnss-demo.h
index c472cf5..3dc7552 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-gnss-demo/files/lynq-qser-gnss-demo.h
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-gnss-demo/files/lynq-qser-gnss-demo.h
@@ -110,6 +110,10 @@
            "\t7 gnss stop\n"
            "\t8 gnss Delete_Aiding_Data and reset\n"
            "\t9 gnss injecttime\n"
+           "\t10 gnss download tle\n"
+           "\t11 gnss set frequency\n"
+           "\t12 gnss inject ephemeris\n"
+           "\t13 gnss server_configuration\n"
            "please input operator: >> ");
 }
 void delete_type(void)
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 abcea42..732225b 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
@@ -12,6 +12,7 @@
 
 #define BUF_SIZE 32
 #define BUF_PIN 8
+#define VER_SIZE 128
 
 typedef uint32_t sim_client_handle_type;
 
@@ -49,6 +50,11 @@
 int (*qser_sim_enablepin)(sim_client_handle_type h_sim, QSER_SIM_ENABLE_PIN_INFO_T *pt_info);
 int (*qser_sim_disablepin)(sim_client_handle_type h_sim, QSER_SIM_DISABLE_PIN_INFO_T *pt_info);
 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 (*qser_sim_getimei)(sim_client_handle_type h_sim, char *imei);
+int (*qser_get_imei_and_sv)(sim_client_handle_type h_sim,char *imei, char*sv);
+int (*qser_reset_modem)(sim_client_handle_type h_sim);
+int (*qser_get_version)(sim_client_handle_type h_sim, char *buf);
+int (*qser_reset_sim)(sim_client_handle_type h_sim);
 
 
 typedef struct
@@ -70,7 +76,12 @@
     {7,   "qser_enable_pin"},
     {8,   "qser_disable_pin"},
     {9,   "qser_get_sim_status"},
-    {10,   "qser_deinit_sim"},
+    {10,   "qser_get_imei"},
+    {11,   "qser_get_imei_and_sv"},
+    {12,   "qser_reset_modem"},
+    {13,   "qser_get_version"},
+    {14,   "qser_reset_sim"},
+    {15,   "qser_deinit_sim"},
     {-1,    NULL}
 };
 
@@ -405,6 +416,105 @@
             //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");
+                }
+                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");
+                }
+                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");
+                }
+                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");
+                }
+                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");
+                }
+                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)
                 {
@@ -413,7 +523,7 @@
                     {
                         printf("sim deinit success is!!!\n");
                     }else{
-                        printf("get imsi error, res = %d\n", res);
+                        printf("sim deint errors, res = %d\n", res);
                     }
                 }else{
                     printf("qser_sim_client_deinit dlsym error\n");
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/include/lynq_qser_gnss.h b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/include/lynq_qser_gnss.h
index b98377e..9eead07 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/include/lynq_qser_gnss.h
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/include/lynq_qser_gnss.h
@@ -38,6 +38,15 @@
     float       azimuth;                /**<   Azimuth of the SV in degrees. */ 
 }QL_LOC_SV_INFO_T;                      /* Type */
 
+struct login_information  /*Used To Stored User Information*/
+{
+    char*   host;
+    char*   id;
+    char*   password;
+};
+
+static struct login_information *login_information_t = NULL;
+
 #define     QL_LOC_GPS_SUPPORT_SVS_MAX   32  /**  Maximum number of satellites in view. */
 typedef struct 
 {
@@ -114,6 +123,7 @@
 int qser_Gnss_Stop(uint32_t h_gnss);
 int qser_Gnss_Set_Frequency(uint32_t h_gnss, int frequency);
 int qser_Gnss_Delete_Aiding_Data(uint32_t h_gnss,DELETE_AIDING_DATA_TYPE_T flags);
+int qser_Gnss_Server_Configuration(char *host, char *id, char *password);
 int qser_Gnss_InjectTime(uint32_t h_gnss,LYNQ_INJECT_TIME_INTO_T *time_info);
 int qser_firmware_update(uint32_t h_gnss);
 int qser_Gnss_injectEphemeris(uint32_t h_gnss);
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/include/mbtk_gnss_internal.h b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/include/mbtk_gnss_internal.h
index ce124b2..bb24b17 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/include/mbtk_gnss_internal.h
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/include/mbtk_gnss_internal.h
@@ -302,7 +302,9 @@
 int mopen_gnss_set_system_config(uint32 h_gnss, int mode);
 int mopen_gnss_set_nema_config(uint32 h_gnss, int mode);
 int mopen_gnss_download_tle(void);
+int hd_gnss_download_tle(char *host, char *id, char *password);
 int mopen_gnss_injects_aidpos(uint32 h_gnss);
+int hd_gnss_injects_aidpos(uint32 h_gnss);
 int mopen_gnss_firmware_update(uint32 ph_gnss);
 int mbtk_at_gnss_start_ttff(int type, int timeout_sec, int count);
 int lynq_gnss_send_cmd(uint32 h_gnss, const char *cmd, int cmd_len);
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/lynq_qser_gnss.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/lynq_qser_gnss.cpp
index 52241a9..4b7bba9 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/lynq_qser_gnss.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/lynq_qser_gnss.cpp
@@ -50,7 +50,19 @@
     ret = lynq_gnss_client_init(h_gnss);
     if(ret)
     {
-        printf("Init faild\n");
+        ALOGE("Init faild\n");
+    }
+    if(gpio21_value == 1)
+    {
+        login_information_t = (login_information*)malloc(sizeof(struct login_information));
+        if(NULL == login_information_t)
+        {
+            ALOGE("malloc memory error\n");
+            return -1;
+        }
+        login_information_t->host = NULL;
+        login_information_t->id = NULL;
+        login_information_t->password = NULL;
     }
     return 0;
 }
@@ -60,7 +72,12 @@
     ret = lynq_gnss_client_deinit(h_gnss);
     if(ret)
     {
-        printf("Deinit faild\n");
+        ALOGE("Deinit faild\n");
+    }
+    if(login_information_t != NULL)
+    {
+        free(login_information_t);
+        login_information_t = NULL;
     }
     return 0;
 }
@@ -70,13 +87,23 @@
     struct mbtk_gnss_handle_t *gnss_handle = (struct mbtk_gnss_handle_t *)h_gnss;
     if(0 == h_gnss && NULL == handler_ptr)
     {
-        printf("%s handler invalid.\n", __func__);
+        ALOGE("%s handler invalid.\n", __func__);
         return -1;
     }
     gnss_handle->gnss_handler_func = handler_ptr;
     return 0;
 }
 
+/**
+ * @brief      qser_Set_Indications
+ *
+ * @details    Set Output Mode
+ *             
+ * @param      e_msg_id_t type
+ *
+ * @return     
+ */
+
 int qser_Set_Indications(uint32_t h_gnss,e_msg_id_t type)
 {
     struct mbtk_gnss_handle_t *gnss_handle = (struct mbtk_gnss_handle_t *)h_gnss;
@@ -102,6 +129,15 @@
     return 0;
 }
 
+/**
+ * @brief      qser_Gnss_InjectTime
+ *
+ * @details    injection time
+ *             
+ * @param      LYNQ_INJECT_TIME_INTO_T *time_info
+ *
+ * @return     
+ */
 
 /*need  set system time in advance*/
 int qser_Gnss_InjectTime(uint32_t h_gnss,LYNQ_INJECT_TIME_INTO_T *time_info)
@@ -126,7 +162,7 @@
     ret = lynq_gnss_send_cmd(h_gnss, send_buf, sizeof(send_buf));
     if(ret < 0)
     {
-        printf("send fail\n");
+        ALOGE("InjectTime send fail\n");
         return -1;
     }
     lynq_gnss_get_aidinfo(h_gnss);
@@ -168,6 +204,15 @@
     return 0;
 }
 
+/**
+ * @brief      qser_Gnss_Set_Frequency
+ *
+ * @details    Change output frequency(just for 106E)
+ *             
+ * @param      frequency:1 2 5hz
+ *
+ * @return     
+ */
 static unsigned char save_configuration[] = {0xF1,0xD9,0x06,0x09,0x08,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x26,0x37};
 static unsigned char one_frequency[] = {0xF1,0xD9,0x06,0x42,0x14,0x00,0x00,0x01,0x00,0x00,0xE8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0xF6};
 static unsigned char two_frequency[] = {0xF1,0xD9,0x06,0x42,0x14,0x00,0x00,0x02,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC4,0x88};
@@ -204,13 +249,13 @@
     ret = write(gnss_handle->dev_fd, send_buf, buf_lenth);
     if(ret < 0)
     {
-        printf("send faild");
+        ALOGE("modify cmd send faild\n");
         return -1;
     }
     ret = write(gnss_handle->dev_fd, save_configuration, sizeof(save_configuration));
     if(ret < 0)
     {
-        printf("send faild");
+        ALOGE("save configuration send faild\n");
         return -1;
     }
     return 0;
@@ -274,10 +319,10 @@
     ret = lynq_gnss_send_cmd(h_gnss, send_buf, strlen(send_buf));
     if(ret < 0)
     {
-        printf("send faild");
+        ALOGE("Delete_Aiding_Data cmd send faild");
         return -1;
     }
-    printf("reset OK!!!!!\n");
+    ALOGE("reset OK!!!!!\n");
 
     ret = set_baudrate(gnss_handle->dev_fd, B9600);
     if(-1 == ret)
@@ -299,24 +344,90 @@
     return 0;
 }
 
+/**
+ * @brief      qser_Gnss_Server_Configuration
+ *
+ * @details    Configure user information for 106E-AGPS
+ *             
+ * @param      host id password (if the parameter is NULL,use default Configure)
+ *
+ * @return     
+ */
+
+int qser_Gnss_Server_Configuration(char *host, char *id, char *password)
+{
+    if(NULL == login_information_t)
+    {
+        ALOGE("don't have login information\n");
+        return -1;
+    }
+    login_information_t->host = host;
+    login_information_t->id = id;
+    login_information_t->password = password;
+    ALOGD("host:%s\nid:%s\npw:%s\n",login_information_t->host,login_information_t->id,login_information_t->password);
+    return 0;
+}
+
+/**
+ * @brief      qser_Gnss_download_tle
+ *
+ * @details    download_tle 106-AGPS tle,this interface not require init, but it must be able to dial up for internet access
+ *             the download_tle will save in /mnt/userdata/agnss_tle
+ * @param      NULL
+ *
+ * @return     
+ */
+
 int qser_Gnss_download_tle()
 {
     int ret;
-    ret = mopen_gnss_download_tle();
-    if(ret < 0)
+    if(gpio21_value == 0)
     {
-        return -1;
+        ret = mopen_gnss_download_tle();
+        if(ret < 0)
+        {
+            return -1;
+        }
+    }
+    else if(gpio21_value == 1)
+    {
+        ret = hd_gnss_download_tle(login_information_t->host, login_information_t->id, login_information_t->password);
+        if(ret < 0)
+        {
+            return -1;
+        }
     }
     return 0;
 }
 
+/**
+ * @brief      qser_Gnss_injectEphemeris
+ *
+ * @details    inject Ephemeris 
+ *             
+ * @param      
+ *
+ * @return     
+ */
+
 int qser_Gnss_injectEphemeris(uint32_t h_gnss)
 {
     int ret;
-    ret = mopen_gnss_injects_aidpos(h_gnss);
-    if(ret < 0)
+    if(gpio21_value == 0)
     {
-        return -1;
+        ret = mopen_gnss_injects_aidpos(h_gnss);
+        if(ret < 0)
+        {
+            return -1;
+        }
+    }
+    else if(gpio21_value == 1)
+    {
+        ret = hd_gnss_injects_aidpos(h_gnss);
+        if(ret < 0)
+        {
+            return -1;
+        }
     }
     return 0;
 }
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 6cc38c0..862aeea 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
@@ -1028,6 +1028,7 @@
         *ph_gnss = (uint32)mbtk_gnss_handle;
         return 0;
     }
+    
     mbtk_gnss_handle = (mbtk_gnss_handle_t*)malloc(sizeof(struct mbtk_gnss_handle_t));
     if(NULL == mbtk_gnss_handle)
     {
@@ -1386,15 +1387,44 @@
     return 0;
 }
 
-/**********************************
+static int hd_gnss_http_requst(char *host)
+{
+    int http_handle = mbtk_http_handle_get(TRUE, http_data_cb_func);
+    if(http_handle < 0)
+    {
+        printf("mbtk_http_handle_get() fail.");
+        return -1;
+    }
+    int http_session = mbtk_http_session_create(http_handle, HTTP_OPTION_GET, HTTP_VERSION_1_1);
+    if(http_handle < 0)
+    {
+        printf("mbtk_http_session_create() fail.");
+        return -2;
+    }
 
- ID1: TempID1Expire20221031
- Base 64 PW1: RlJYdkFTNE9DWXJhN2ZWTA==
-**************************************/
+    if(mbtk_http_session_url_set(http_handle, http_session, host))
+    {
+        printf("mbtk_http_session_url_set() fail.\n");
+        return -3;
+    }
+    if(mbtk_http_session_start(http_handle, http_session))
+    {
+    printf("mbtk_http_session_start() fail.\n");
+    return -4;
+    }
+    if(mbtk_http_handle_free(http_handle))
+    {
+        printf("mbtk_http_handle_free() fail.");
+        return -5;
+    }
+
+    return 0;
+}
+
 #define AGNSS_CONFIG_FILE  "/data/gnss_update/agps.conf"
 
 /**
- * @brief      mopen_gnss_download_tle
+ * @brief      mopen_gnss_download_tle;hd_gnss_download_tle
  *
  * @details    下载星历数据
  *             (卫星星历，又称为两行轨道数据（TLE，Two-Line Orbital Element）)
@@ -1438,6 +1468,21 @@
     return gnss_http_requst(_id, _passwd);
 }
 
+int hd_gnss_download_tle(char *host, char *id, char *password)
+{
+    //id and pw are currently not being used for future access to self built servers
+    const char default_host[] = "http://uagnss.allystar.com/ephemeris/HD_GPS.hdb?compid=yikecs1&token=Z38w5urAuawubTxi";
+    if(host == NULL)
+    {
+        hd_gnss_http_requst(default_host);
+    }
+    else
+    {
+        hd_gnss_http_requst(host);
+    }
+    return 0;
+}
+
 /**
  * @brief      mopen_gnss_injects_aidpos
  *
@@ -1490,6 +1535,58 @@
     return 0;
 }
 
+#define BUFFER_SIZE 1024
+int hd_gnss_injects_aidpos(uint32 h_gnss)
+{
+    int packet_length;
+    int hd_agnss_fd = 0;
+    int size = 0;
+    int left_size = 0;
+    int total_size = 0;
+    char *databuf = (char *)malloc(BUFFER_SIZE);
+    struct mbtk_gnss_handle_t *gnss_handle = (struct mbtk_gnss_handle_t *)h_gnss;
+    hd_agnss_fd = open(AGNSS_TLE_FILE, O_RDWR);
+    if (hd_agnss_fd <= 0)
+    {
+        printf("%s open file FAIL. errno:%d\n", __FUNCTION__, errno);
+        return -1;
+    }
+    while(0 < (size = read(hd_agnss_fd, (databuf + left_size), BUFFER_SIZE)))
+    {
+        total_size = size + left_size;
+        left_size = 0;
+        for(int i=0; i < total_size;)
+        {
+            gnss_log("%s Write[%d]\r\n", __FUNCTION__, size);
+            if((databuf[i] == 0xF1) && (databuf[i + 1] == 0xD9))
+            {
+                packet_length = (databuf[i + 4] | (databuf[i + 5] << 8));
+                if (i + packet_length + 8 <= total_size)
+                {
+                    write(gnss_handle->dev_fd, databuf + i, packet_length + 8);
+                    usleep(5000);
+                    i = i + packet_length + 8;
+                }
+                else
+                {
+                    left_size = total_size - i;
+                    char *tmp = databuf;
+                    databuf = (char *)malloc(BUFFER_SIZE + left_size);
+                    memcpy(databuf, tmp + i ,left_size);
+                    free(tmp);
+                    break;
+                }
+            }
+            else
+                i++;
+        }
+    }
+    free(databuf);
+    databuf = NULL;
+    close(hd_agnss_fd);
+    return 0;
+}
+
 
 /**
  * @brief
@@ -1606,10 +1703,6 @@
     return ret;
 }
 
-
-/*update ephemeris from network*/
-#define AGNSS_TLE_FILE "/mnt/userdata/agnss_tle" //deposit ephemeris
-
 /*Injection ephemeris AGNSS_TLE_FILE*/
 int lynq_gnss_Injection_ephemeris(uint32 h_gnss)
 {
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-sim/include/lynq_qser_sim.h b/cap/zx297520v3/src/lynq/lib/liblynq-qser-sim/include/lynq_qser_sim.h
index 0895f45..f4d3233 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-sim/include/lynq_qser_sim.h
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-sim/include/lynq_qser_sim.h
@@ -375,6 +375,11 @@
     QSER_SIM_CARD_STATUS_INFO_T   *pt_info   ///< [OUT] Cart status infor output
 );
 
+int qser_sim_getimei(sim_client_handle_type h_sim, char *imei);
+int qser_get_imei_and_sv(sim_client_handle_type h_sim,char *imei, char*sv);
+int qser_reset_modem(sim_client_handle_type h_sim);
+int qser_get_version(sim_client_handle_type h_sim, char *buf);
+int qser_reset_sim(sim_client_handle_type h_sim);
 
 #ifdef __cplusplus
 }
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 d95945d..d413c17 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
@@ -209,5 +209,71 @@
     return ret;
 }
 
+int qser_sim_getimei(sim_client_handle_type h_sim, char *imei)
+{
+    int ret = 0;
+    if(h_sim == 0)
+    {
+        LYERRLOG("not init\n");
+        return E_QSER_ERROR_BADPARM;
+    }
+    ret = lynq_get_imei(imei);
+
+    LYINFLOG("[%s-%d] QSER_IMEI: %s\n", __FUNCTION__, __LINE__, imei);
+
+    return ret;
+}
+int qser_get_imei_and_sv(sim_client_handle_type h_sim,char *imei, char*sv)
+{
+    int ret = 0;
+
+    if(h_sim == 0)
+    {
+        LYERRLOG("not init\n");
+        return E_QSER_ERROR_BADPARM;
+    }
+    ret = lynq_get_imei_and_sv(imei, sv);
+    LYINFLOG("[%s-%d] QSER_GET_IMEI_AND_SV: %s, %s\n", __FUNCTION__, __LINE__, imei, sv);
+    return ret;
+}
+int qser_reset_modem(sim_client_handle_type h_sim)
+{
+    int ret = 0;
+
+    if(h_sim == 0)
+    {
+        LYERRLOG("not init\n");
+        return E_QSER_ERROR_BADPARM;
+    }
+    ret = lynq_reset_modem();
+    return ret;
+}
+
+int qser_get_version(sim_client_handle_type h_sim, char *buf)
+{
+    int ret = 0;
+
+    if(h_sim == 0)
+    {
+        LYERRLOG("not init\n");
+        return E_QSER_ERROR_BADPARM;
+    }
+    ret = lynq_get_version(buf);
+    LYINFLOG("[%s-%d] QSER_GET_VERSION: %s\n", __FUNCTION__, __LINE__, buf);
+    return ret;
+}
+
+int qser_reset_sim(sim_client_handle_type h_sim)
+{
+    int ret = 0;
+
+    if(h_sim == 0)
+    {
+        LYERRLOG("not init\n");
+        return E_QSER_ERROR_BADPARM;
+    }
+    ret = lynq_reset_sim();
+    return ret;
+}
 DEFINE_LYNQ_LIB_LOG(LYNQ_QSER_SIM)
 
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-sim/makefile b/cap/zx297520v3/src/lynq/lib/liblynq-qser-sim/makefile
index cafc77c..12704dd 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-sim/makefile
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-sim/makefile
@@ -10,6 +10,9 @@
                 -fpermissive \
 
 
+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/zxic_code/zxic_source/zxic_app_open/sdk/ril/reference-ril/reference-ril.c b/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/sdk/ril/reference-ril/reference-ril.c
index 081c584..cd5220a 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/sdk/ril/reference-ril/reference-ril.c
+++ b/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/sdk/ril/reference-ril/reference-ril.c
Binary files differ
diff --git a/esdk_patch/mk_esdk.sh b/esdk_patch/mk_esdk.sh
index e1ff843..cd72c6f 100755
--- a/esdk_patch/mk_esdk.sh
+++ b/esdk_patch/mk_esdk.sh
@@ -17,6 +17,6 @@
 ln -s ${dest_dir}/upstream/tools ${dest_dir}/esdk
 cp linux_bb.diff ${dest_dir}/esdk/layers/meta-zxic/recipes-kernel/linux/
 cd ${dest_dir}/esdk/layers/meta-zxic/recipes-kernel/linux
-git apply linux_bb.diff
+patch < linux_bb.diff
 cd ${dest_dir}/esdk
 mkdir -p ${dest_dir}/allbins/zx297520v3/vehicle_dc_ref/elf/normal
diff --git a/update_version.sh b/update_version.sh
index 83fa9b8..92e28d0 100644
--- a/update_version.sh
+++ b/update_version.sh
@@ -1,8 +1,8 @@
 #!/bin/bash
 #export LYNQ_VERSION="T106_lynq_version_ap_build_sh"
-LYNQ_AP_VERSION="T106CN-ZS03.V2.01.01.02P52U02.AP.09.02"
-LYNQ_CAP_INSIDE_VERSION="CAP.09.02"
-LYNQ_CAP_VERSION="CAP.09.02"
+LYNQ_AP_VERSION="T106CN-ZS03.V2.01.01.02P52U02.AP.09.03"
+LYNQ_CAP_INSIDE_VERSION="CAP.09.03"
+LYNQ_CAP_VERSION="CAP.09.03"
 COMMIT_ID="$(git rev-parse HEAD)"
 
 LYNQ_SW_INSIDE_VERSION="LYNQ_CONFIG_VERSION = \"${LYNQ_AP_VERSION}_${LYNQ_CAP_INSIDE_VERSION}\""
