Merge "[Bugfix][T106BUG-376][rtc]rtc wakeup cant work"
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}\""