gnss: add agps api

Change-Id: I8d778a303bc59b22f1ac31cfbe8439e98d94d448
diff --git a/mbtk/include/mbtk/mbtk_gnss.h b/mbtk/include/mbtk/mbtk_gnss.h
index 679a872..c85c5a1 100755
--- a/mbtk/include/mbtk/mbtk_gnss.h
+++ b/mbtk/include/mbtk/mbtk_gnss.h
@@ -107,4 +107,8 @@
 
 gnss_err_enum mbtk_gnss_ind_set(uint32 gnss_ind, int timeout);
 
+gnss_err_enum mbtk_gnss_eph_download(int timeout);
+
+gnss_err_enum mbtk_gnss_eph_inject(int timeout);
+
 #endif /* __MBTK_GNSS_H */
diff --git a/mbtk/liblynq_lib/src/lynq_gnss.c b/mbtk/liblynq_lib/src/lynq_gnss.c
index b02ea4d..3b5236c 100755
--- a/mbtk/liblynq_lib/src/lynq_gnss.c
+++ b/mbtk/liblynq_lib/src/lynq_gnss.c
@@ -9,6 +9,8 @@
 #define QSER_RESULT_SUCCESS 0
 #define QSER_RESULT_FAIL -1
 #define QSER_GNSS_TIMEOUT 5
+#define QSER_AGNSS_DOWNLOAD_TIMEPUT 60
+#define QSER_AGNSS_INJECT_TIMEOUT 20
 
 /**********************************VARIABLE***********************************/
 static bool inited = FALSE;
@@ -85,7 +87,7 @@
                     if(check_state[i] >= '0' && check_state[i] <= '9')
                     {
                         memcpy(time, check_state + i, 6);
-                        LOGE("[qser_gnss] %s.", time);
+                        //LOGE("[qser_gnss] %s.", time);
                     }
                     else
                     {
@@ -98,7 +100,7 @@
                     if(check_state[i] >= '0' && check_state[i] <= '9')
                     {
                         memcpy(time + 6, check_state + i, 6);
-                        LOGE("[qser_gnss] %s.", time);
+                        //LOGE("[qser_gnss] %s.", time);
                         break;
                     }
                     else
@@ -411,20 +413,36 @@
         LOGE("[qser_gnss] api not init.");
         return QSER_RESULT_FAIL;
     }
-    
-    if(host != NULL)
+
+    memset(qser_agps_info_save.host, 0x0, QSER_LEN_MAX);
+    if(host != NULL && strlen(host) > 0 && strlen(host) < QSER_LEN_MAX)
     {
-        memcpy(qser_agps_info_save.host, host, QSER_LEN_MAX);
+        memcpy(qser_agps_info_save.host, host, strlen(host));
     }
 
-    if(id != NULL)
+    memset(qser_agps_info_save.id, 0x0, QSER_LEN_MAX);
+    if(id != NULL && strlen(id) > 0 && strlen(id) < QSER_LEN_MAX)
     {
-        memcpy(qser_agps_info_save.id, id, QSER_LEN_MAX);
+        memcpy(qser_agps_info_save.id, id, strlen(id));
     }
 
-    if(password != NULL)
+    memset(qser_agps_info_save.passwd, 0x0, QSER_LEN_MAX);
+    if(password != NULL && strlen(password) > 0 && strlen(password) < QSER_LEN_MAX)
     {
-        memcpy(qser_agps_info_save.passwd, password, QSER_LEN_MAX);
+        memcpy(qser_agps_info_save.passwd, password, strlen(password));
+    }
+
+    gnss_err_enum ret = GNSS_ERR_UNKNOWN; 
+    char write_buff[512] = {0};
+    int write_length = 0;
+    write_length = snprintf(write_buff, 512, "$AGPSCFG,%s,%s,%s", strlen(qser_agps_info_save.host) > 0 ? qser_agps_info_save.host : "NULL",
+                                                        strlen(qser_agps_info_save.id) > 0 ? qser_agps_info_save.id : "NULL",
+                                                        strlen(qser_agps_info_save.passwd) > 0 ? qser_agps_info_save.passwd : "NULL");
+    ret = mbtk_gnss_setting(write_buff, QSER_GNSS_TIMEOUT);
+    if(ret != GNSS_ERR_OK)
+    {
+        LOGE("[qser_gnss] mbtk_gnss_setting fail.ret = [%d]", ret);
+        return QSER_RESULT_FAIL;
     }
     return QSER_RESULT_SUCCESS;
 }
@@ -436,6 +454,14 @@
         LOGE("[qser_gnss] api not init.");
         return QSER_RESULT_FAIL;
     }
+
+    gnss_err_enum ret = GNSS_ERR_UNKNOWN;    
+    ret = mbtk_gnss_eph_download(QSER_AGNSS_DOWNLOAD_TIMEPUT);
+    if(ret != GNSS_ERR_OK)
+    {
+        LOGE("[qser_gnss] mbtk_gnss_eph_download fail.ret = [%d]", ret);
+        return QSER_RESULT_FAIL;
+    }
     return QSER_RESULT_SUCCESS;
 }
 
@@ -448,6 +474,14 @@
         LOGE("[qser_gnss] h_gnss is error.");
         return QSER_RESULT_FAIL;
     }
+
+    gnss_err_enum ret = GNSS_ERR_UNKNOWN;
+    ret = mbtk_gnss_eph_inject(QSER_AGNSS_INJECT_TIMEOUT);
+    if(ret != GNSS_ERR_OK)
+    {
+        LOGE("[qser_gnss] mbtk_gnss_eph_inject fail.ret = [%d]", ret);
+        return QSER_RESULT_FAIL;
+    }
     return QSER_RESULT_SUCCESS;
 }
 
diff --git a/mbtk/libmbtk_gnss/mbtk_gnss.c b/mbtk/libmbtk_gnss/mbtk_gnss.c
index 18e8bbf..cf9af27 100755
--- a/mbtk/libmbtk_gnss/mbtk_gnss.c
+++ b/mbtk/libmbtk_gnss/mbtk_gnss.c
@@ -114,7 +114,7 @@
 
     if(write_len > 0)
     {
-        // log_hex("DATA_SEND", msg, write_len);
+        //log_hex("DATA_SEND", msg, write_len);
         return write_len;
     }
     else
@@ -835,7 +835,7 @@
         }
 
         // gnss_setting:cmd
-        char cmd[32] = {0};
+        char cmd[1024] = {0};
         snprintf(cmd, sizeof(cmd), "gnss_setting:%s", setting_cmd);
         sock_write(gnss_cli_fd, cmd, strlen(cmd));
 
@@ -920,6 +920,70 @@
     }
 }
 
+gnss_err_enum mbtk_gnss_eph_download(int timeout)
+{
+    if(gnss_cli_fd < 0) {
+        LOGW("GNSS client not inited.");
+        return GNSS_ERR_UNKNOWN;
+    }
+
+    if(gnss_busy) {
+        LOGE("BUSY");
+        return GNSS_ERR_BUSY;
+    } else {
+        gnss_result = GNSS_ERR_OK;
+        gnss_busy = TRUE;
+        if(timeout > 0) {
+            mbtk_timer_set(gnss_timer_cb, timeout * 1000);
+        }
+
+        // gnss_agnss_get:<eph_data>,<alam_flag>
+        char cmd[32] = {0};
+        snprintf(cmd, sizeof(cmd), "gnss_agnss_get:%d,0", (int)GNSS_EPH_CFG);
+        sock_write(gnss_cli_fd, cmd, strlen(cmd));
+
+        pthread_mutex_lock(&gnss_mutex);
+        pthread_cond_wait(&gnss_cond, &gnss_mutex);
+        pthread_mutex_unlock(&gnss_mutex);
+
+        gnss_busy = FALSE;
+
+        return gnss_result;
+    }
+}
+
+gnss_err_enum mbtk_gnss_eph_inject(int timeout)
+{
+    if(gnss_cli_fd < 0) {
+        LOGW("GNSS client not inited.");
+        return GNSS_ERR_UNKNOWN;
+    }
+
+    if(gnss_busy) {
+        LOGE("BUSY");
+        return GNSS_ERR_BUSY;
+    } else {
+        gnss_result = GNSS_ERR_OK;
+        gnss_busy = TRUE;
+        if(timeout > 0) {
+            mbtk_timer_set(gnss_timer_cb, timeout * 1000);
+        }
+
+        // gnss_agnss_set
+        char cmd[32] = {0};
+        snprintf(cmd, sizeof(cmd), "gnss_agnss_set");
+        sock_write(gnss_cli_fd, cmd, strlen(cmd));
+
+        pthread_mutex_lock(&gnss_mutex);
+        pthread_cond_wait(&gnss_cond, &gnss_mutex);
+        pthread_mutex_unlock(&gnss_mutex);
+
+        gnss_busy = FALSE;
+
+        return gnss_result;
+    }
+}
+
 void mbtk_gnss_lib_info_print()
 {
     MBTK_SOURCE_INFO_PRINT("mbtk_gnss_lib");
diff --git a/mbtk/libmbtk_gnss/mbtk_gnss_inter.h b/mbtk/libmbtk_gnss/mbtk_gnss_inter.h
index 97bc78f..f56c7fb 100755
--- a/mbtk/libmbtk_gnss/mbtk_gnss_inter.h
+++ b/mbtk/libmbtk_gnss/mbtk_gnss_inter.h
@@ -16,5 +16,14 @@
 #define SOCK_GNSS_PATH "/tmp/mbtk_gnss_sock"
 #define EPOLL_LISTEN_MAX 100
 
+typedef enum {
+    GNSS_EPH_GPS = 0,
+    GNSS_EPH_BDS,
+    GNSS_EPH_GLO,
+    GNSS_EPH_GPS_BDS,
+    GNSS_EPH_GPS_GLO,
+
+    GNSS_EPH_CFG = 10, //get eph data by cfg parameters
+} gnss_eph_data_enum;
 
 #endif /* __MBTK_GNSS_INTER_H */
diff --git a/mbtk/mbtk_gnssd/agps/8122_agnss.c b/mbtk/mbtk_gnssd/agps/8122_agnss.c
index 4acbe33..34eef09 100755
--- a/mbtk/mbtk_gnssd/agps/8122_agnss.c
+++ b/mbtk/mbtk_gnssd/agps/8122_agnss.c
@@ -200,7 +200,7 @@
     int left_size = 0;
     int total_size = 0;
     int write_size = 0;
-    int wait_time = 0;
+    //int wait_time = 0;
     uint8_t *databuf = (uint8_t *)malloc(BUFFER_SIZE);
     if(databuf == NULL)
     {
@@ -225,7 +225,7 @@
                 packet_length = (databuf[i + 4] | (databuf[i + 5] << 8));
                 if (i + packet_length + 8 <= total_size)
                 {
-                    hd_set_eph_inject_status(HD_EPH_INJECT_STATUS_WAIT_RETURN);
+                    //hd_set_eph_inject_status(HD_EPH_INJECT_STATUS_WAIT_RETURN);
                     write_size = hd_agnss_uart_write(databuf + i, packet_length + 8);
                     if(write_size < 0)
                     {
@@ -233,6 +233,8 @@
                         goto error; 
                     }
                     LOGD("%s Write[%d]\r\n", __FUNCTION__, write_size);
+                    hd_agnss_delay(50);
+#if 0
                     wait_time = 0;
                     while(1)
                     {
@@ -260,6 +262,7 @@
                             goto error;
                         }
                     }
+#endif
                     i = i + packet_length + 8;
                 }
                 else
diff --git a/mbtk/mbtk_gnssd/gnss_hd8122.c b/mbtk/mbtk_gnssd/gnss_hd8122.c
index 7416b19..005350c 100755
--- a/mbtk/mbtk_gnssd/gnss_hd8122.c
+++ b/mbtk/mbtk_gnssd/gnss_hd8122.c
@@ -59,7 +59,7 @@
 static gnss_err_enum gnss_set_result = GNSS_ERR_OK;
 static hd8122_msg_id_t msg_array[GNSS_MSG_NUM_MAX];
 static char gnss_ctrl_path[128] = "/sys/devices/platform/mbtk-gnss/ctrl";
-
+static gnss_agps_info_t agps_info;
 
 int gnss_write(int fd, const void *data, int data_len);
 int OpenUart(char* UART_DEV);
@@ -654,6 +654,12 @@
         {
             snprintf(url, 256,AGNSS_URL, AGNSS_EPH_GPS_GLO);
         }
+        else if((gnss_eph_data_enum)eph_type == GNSS_EPH_CFG)
+        {
+            snprintf(url, 256,"%s?compid=%s&token=%s", strlen(agps_info.host) > 0 ? agps_info.host : "http://uagnss.allystar.com:80/ephemeris/HD_GPS.hdb",
+                                                        strlen(agps_info.id) > 0 ? agps_info.id : "yikecs1",
+                                                        strlen(agps_info.passwd) > 0 ? agps_info.passwd : "Z38w5urAuawubTxi");
+        }
         else
         {
             return GNSS_ERR_UNSUPPORT;
@@ -698,6 +704,7 @@
         gnss_cmd_rsp_process(data, data_len);
     }
 
+#if 0
     if(hd_get_eph_inject_status() == HD_EPH_INJECT_STATUS_WAIT_RETURN)
     {
         log_hex("EPH_RSP", (const char*)data, data_len);
@@ -709,8 +716,9 @@
         else
         {
             hd_set_eph_inject_status(HD_EPH_INJECT_STATUS_SUCCESS);
-        }       
+        }
     }
+#endif
 }
 
 gnss_err_enum gnss_8122_set(int fd, const char *cmd, void *cmd_rsp, int cmd_rsp_len)
@@ -930,6 +938,40 @@
 
             should_wait_rsp = TRUE;
         }
+        else if(memcmp(cmd, "$AGPSCFG", 8) == 0)     // $AGPSCFG,<host>,<id>,<passwd>
+        {
+            char host[GNSS_AGPS_LEN_MAX] = {0};
+            char id[GNSS_AGPS_LEN_MAX] = {0};
+            char passwd[GNSS_AGPS_LEN_MAX] = {0};
+            if(3 == sscanf(cmd, "$AGPSCFG,%[^,],%[^,],%s", host, id, passwd))
+            {
+                LOGD("agps: %s, %s, %s", host, id, passwd);
+                memset(agps_info.host, 0x0, GNSS_AGPS_LEN_MAX);
+                if(memcmp(host, "NULL", 4))
+                {
+                    memcpy(agps_info.host, host, strlen(host));
+                }
+
+                memset(agps_info.id, 0x0, GNSS_AGPS_LEN_MAX);
+                if(memcmp(id, "NULL", 4))
+                {
+                    memcpy(agps_info.id, id, strlen(id));
+                }
+
+                memset(agps_info.passwd, 0x0, GNSS_AGPS_LEN_MAX);
+                if(memcmp(passwd, "NULL", 4))
+                {
+                    memcpy(agps_info.passwd, passwd, strlen(passwd));
+                }
+            }
+            else
+            {
+                gnss_set_result = GNSS_ERR_ARG;
+                goto set_fail;
+            }
+
+            should_wait_rsp = FALSE;
+        }
         else if(memcmp(cmd, "$MINEL", 6) == 0)     // $MINEL,<elev>
         {
 #if 0
diff --git a/mbtk/mbtk_gnssd/gnss_info.h b/mbtk/mbtk_gnssd/gnss_info.h
index f7e0ed2..8247d77 100755
--- a/mbtk/mbtk_gnssd/gnss_info.h
+++ b/mbtk/mbtk_gnssd/gnss_info.h
@@ -56,6 +56,8 @@
 #define GNSS_SET_MSGCFG_ABNORMAL (1<<20)
 #define GNSS_SET_MSGCFG_EPHABNORMAL (1<<21)
 
+#define GNSS_AGPS_LEN_MAX 128
+
 typedef enum {
     GNSS_RESET_TYPE_HOT = 1,
     GNSS_RESET_TYPE_WARM,
@@ -91,7 +93,9 @@
     GNSS_EPH_BDS,
     GNSS_EPH_GLO,
     GNSS_EPH_GPS_BDS,
-    GNSS_EPH_GPS_GLO
+    GNSS_EPH_GPS_GLO,
+
+    GNSS_EPH_CFG = 10, //get eph data by cfg parameters
 } gnss_eph_data_enum;
 
 typedef enum {
@@ -102,6 +106,13 @@
     GNSS_STATE_READY,       // GNSS is ready.
 } gnss_state_enum;
 
+typedef struct
+{
+    char host[GNSS_AGPS_LEN_MAX];
+    char id[GNSS_AGPS_LEN_MAX];
+    char passwd[GNSS_AGPS_LEN_MAX];
+}gnss_agps_info_t;
+
 typedef struct {
     int cli_fd;
     uint32 ind_flag;
diff --git a/mbtk/test/liblynq_lib/qser_gnss_test.c b/mbtk/test/liblynq_lib/qser_gnss_test.c
index 8a9ec54..c7c8563 100755
--- a/mbtk/test/liblynq_lib/qser_gnss_test.c
+++ b/mbtk/test/liblynq_lib/qser_gnss_test.c
@@ -55,17 +55,17 @@
     printf("\t-1 exit\n"
            "\t1 gnss init\n"
            "\t2 gnss deinit \n"
-           "\t3 gnss add handle function\n"
-           "\t4 gnss set single mode\n"
-           "\t5 gnss set get_para_from_nmea mode\n"
+           "\t3 gnss add nmea callback\n"
+           "\t4 gnss set local mode\n"
+           "\t5 gnss set nmea mode\n"
            "\t6 gnss start\n"
            "\t7 gnss stop\n"
            "\t8 gnss Delete_Aiding_Data and reset (new not support)\n"
            "\t9 gnss injecttime (new not support)\n"
-           "\t10 gnss download agps (new not support)\n"
+           "\t10 gnss download agps\n"
            "\t11 gnss set frequency\n"
-           "\t12 gnss send agps data to gnss (new not support)\n"
-           "\t13 gnss config agps server info (new not support)\n"
+           "\t12 gnss send agps data to gnss\n"
+           "\t13 gnss config agps server info\n"
            "\t14 gnss set async cb\n"
            "\t15 gnss start async\n"
            "please input operator: >> \n");
@@ -96,245 +96,254 @@
         scanf("%d", &opt);
         switch (opt)
         {
-        case -1:
-        {
-            printf("main exit\n");
-            return 0;
-        }
+            case -1:
+            {
+                qser_Gnss_Stop(ph_gnss);
+                qser_Gnss_Deinit(ph_gnss);
+                printf("main exit\n");
+                return 0;
+            }
 
-        case 1:
-        {
-            //qser_Gnss_Init=(int(*)(uint32_t *h_gnss))dlsym(dlHandle_gnss, "qser_Gnss_Init");
-            ret = qser_Gnss_Init(&ph_gnss);
-            if(ret < 0)
-            {
-                printf("mopen_gnss_client_init FAIL.\n");
-                return -1;
-            }
-            printf("mopen_gnss_client_init success , with address=%d\n",  ph_gnss);
-            break;
-        }
-        case 2:
-        {
-            //qser_Gnss_Deinit=(int(*)(uint32_t))dlsym(dlHandle_gnss, "qser_Gnss_Deinit");
-            ret =qser_Gnss_Deinit(ph_gnss);
-            if(ret < 0)
-            {
-                printf("mopen_gnss_client_Deinit FAIL.\n");
-                return -1;
-            }
-            printf("mopen_gnss_client_Deinit success \n");
-            break;
-        }
-        case 3:
-        {
-            //qser_AddRxIndMsgHandler=(int(*)(gnss_handler_func_t,uint32_t))dlsym(dlHandle_gnss, "qser_AddRxIndMsgHandler");
-            ret = qser_AddRxIndMsgHandler((gnss_handler_func_t)&cb,ph_gnss);
-            if(ret < 0)
-            {
-                printf("lynq_AddRxIndMsgHandler fail\n");
-                qser_Gnss_Deinit(ph_gnss);
-                return -1;
-            }
-            printf("add success\n");
-            break;
-        }
-        case 4:
-        {
-            e_msg_id_t ptr2=E_MT_LOC_MSG_ID_LOCATION_INFO;
-            //qser_Set_Indications=(int(*)(uint32_t h_gnss,e_msg_id_t))dlsym(dlHandle_gnss, "qser_Set_Indications");
-            ret = qser_Set_Indications(ph_gnss,ptr2);
-            if(ret < 0)
-            {
-                printf("lynq_Set_LOCATION_INFO fail\n");
-                qser_Gnss_Deinit(ph_gnss);
-                return -1;
-            }
-            printf("set location mode success\n");
-            break;
-        }
-        case 5:
-        {
-            e_msg_id_t ptr4=E_MT_LOC_MSG_ID_NMEA_INFO;
-            //qser_Set_Indications=(int(*)(uint32_t h_gnss,e_msg_id_t))dlsym(dlHandle_gnss, "qser_Set_Indications");
-            ret = qser_Set_Indications(ph_gnss,ptr4);
-            if(ret < 0)
-            {
-                printf("lynq_Set_NMEA_INFO fail\n");
-                qser_Gnss_Deinit(ph_gnss);
-                return -1;
-            }
-            printf("set nmea mode success\n");
-            break;
-            
-        }
-        case 6:
-        {
-            //qser_Gnss_Start=(int(*)(uint32_t))dlsym(dlHandle_gnss, "qser_Gnss_Start");
-            ret = qser_Gnss_Start(ph_gnss);
-            if(ret < 0)
-            {
-                printf("lynq_Gnss_Start fail\n");
-                return -1;
-            }
-            printf("start success\n");
-            break;
-        }
-        case 7:
-        {
-            //qser_Gnss_Stop=(int(*)(uint32_t))dlsym(dlHandle_gnss, "qser_Gnss_Stop");
-            ret = qser_Gnss_Stop(ph_gnss);
-            if(ret < 0)
-            {
-                printf("lynq_Gnss_Stop fail\n");
-                qser_Gnss_Deinit(ph_gnss);
-                return -1;
-            }
-            printf("stop success\n");
-            break; 
-        }
-        case 8:
-        {
-            int opt_1;
-            DELETE_AIDING_DATA_TYPE_T ptr;
-            //qser_Gnss_Delete_Aiding_Data=(int(*)(uint32_t,DELETE_AIDING_DATA_TYPE_T))dlsym(dlHandle_gnss, "qser_Gnss_Delete_Aiding_Data");
-            printf("=========delete aiding data type=========\n");
-            delete_type();
-            scanf("%d", &opt_1);
-            switch(opt_1)
-            {
-            case 0:
-            {
-                ptr = DELETE_NOTHING;//hot
-                break;
-            }
             case 1:
             {
-                ptr = DELETE_EPHEMERIS;//warm
+                ret = qser_Gnss_Init(&ph_gnss);
+                if(ret < 0)
+                {
+                    printf("qser_Gnss_Init FAIL.\n");
+                }
+                else
+                {
+                    printf("qser_Gnss_Init success , with address=%08x\n",  ph_gnss);
+                }
                 break;
             }
             case 2:
             {
-                ptr = DELETE_ALMANAC;
+                ret =qser_Gnss_Deinit(ph_gnss);
+                if(ret < 0)
+                {
+                    printf("qser_Gnss_Deinit FAIL.\n");
+                }
+                else
+                {
+                    printf("qser_Gnss_Deinit success \n");
+                }
                 break;
             }
             case 3:
             {
-                ptr = DELETE_POSITION_TIME;
+                ret = qser_AddRxIndMsgHandler((gnss_handler_func_t)&cb,ph_gnss);
+                if(ret < 0)
+                {
+                    printf("qser_AddRxIndMsgHandler fail\n");
+                }
+                else
+                {
+                    printf("add success\n");
+                }
                 break;
             }
             case 4:
             {
-                ptr = DELETE_UTC;
+                e_msg_id_t ptr2=E_MT_LOC_MSG_ID_LOCATION_INFO;
+                ret = qser_Set_Indications(ph_gnss,ptr2);
+                if(ret < 0)
+                {
+                    printf("qser_Set_Indications fail\n");
+                }
+                else
+                {
+                    printf("set location mode success\n");
+                }
                 break;
             }
             case 5:
             {
-                ptr = DELETE_ALL;//cold
+                e_msg_id_t ptr4=E_MT_LOC_MSG_ID_NMEA_INFO;
+                ret = qser_Set_Indications(ph_gnss,ptr4);
+                if(ret < 0)
+                {
+                    printf("qser_Set_Indications fail\n");
+                }
+                else
+                {
+                    printf("set nmea mode success\n");
+                }
                 break;
             }
-            }
-            ret = qser_Gnss_Delete_Aiding_Data(ph_gnss,ptr);
-            if(ret < 0)
+            case 6:
             {
-                printf("lynq_Gnss_Delete_Aiding_Data %d fail\n",opt_1);
-                qser_Gnss_Deinit(ph_gnss);
-                return -1;
+                ret = qser_Gnss_Start(ph_gnss);
+                if(ret < 0)
+                {
+                    printf("qser_Gnss_Start fail\n");
+                }
+                else
+                {
+                    printf("start success\n");
+                }
+                break;
             }
-            printf("lynq_Gnss_Delete_Aiding_Data %d success\n",opt_1);
-            break;
-        }
-        case 9:
-        {
-            LYNQ_INJECT_TIME_INTO_T time_test;
-            //qser_Gnss_InjectTime=(int(*)(uint32_t,LYNQ_INJECT_TIME_INTO_T *time_info))dlsym(dlHandle_gnss, "qser_Gnss_InjectTime");
-            ret = qser_Gnss_InjectTime(ph_gnss,&time_test);
-            if(ret < 0)
+            case 7:
             {
-                printf("qser_Gnss_InjectTime fail\n");
-                qser_Gnss_Deinit(ph_gnss);
-                return -1;
+                ret = qser_Gnss_Stop(ph_gnss);
+                if(ret < 0)
+                {
+                    printf("qser_Gnss_Stop fail\n");
+                }
+                else
+                {
+                    printf("stop success\n");
+                }
+                break; 
             }
-            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)
+            case 8:
             {
-                printf("qser_Gnss_download_tle fail\n");
-                return -1;
+                int opt_1;
+                DELETE_AIDING_DATA_TYPE_T ptr;
+                printf("=========delete aiding data type=========\n");
+                delete_type();
+                scanf("%d", &opt_1);
+                switch(opt_1)
+                {
+                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);
+                if(ret < 0)
+                {
+                    printf("qser_Gnss_Delete_Aiding_Data %d fail\n",opt_1);
+                }
+                else
+                {
+                    printf("qser_Gnss_Delete_Aiding_Data %d success\n",opt_1);
+                }
+                break;
             }
-            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("=========Set Frequency=========\n");
-            scanf("%d", &frequency);
-            ret = qser_Gnss_Set_Frequency(ph_gnss,frequency);
-            if(ret < 0)
+            case 9:
             {
-                printf("qser_Gnss_Set_Frequency fail\n");
-                return -1;
+                LYNQ_INJECT_TIME_INTO_T time_test;
+                ret = qser_Gnss_InjectTime(ph_gnss,&time_test);
+                if(ret < 0)
+                {
+                    printf("qser_Gnss_InjectTime fail\n");
+                }
+                else
+                {
+                    printf("qser_Gnss_InjectTime success\n");
+                }
+                break;
             }
-            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)
+            case 10:
             {
-                printf("qser_Gnss_injectEphemeris fail\n");
-                return -1;
+                ret = qser_Gnss_download_tle();
+                if(ret < 0)
+                {
+                    printf("qser_Gnss_download_tle fail\n");
+                }
+                else
+                {
+                    printf("qser_Gnss_download_tle success\n");
+                }
+                break;
             }
-            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)
+            case 11:
             {
-                printf("qser_Gnss_Server_Configuration fail\n");
-                return -1;
+                int frequency;
+                printf("=========Set Frequency=========\n");
+                scanf("%d", &frequency);
+                ret = qser_Gnss_Set_Frequency(ph_gnss,frequency);
+                if(ret < 0)
+                {
+                    printf("qser_Gnss_Set_Frequency fail\n");
+                }
+                else
+                {
+                    printf("frequency is %d\n",frequency);
+                    printf("qser_Gnss_Set_Frequency success\n");
+                }
+                break;
             }
-            printf("qser_Gnss_Server_Configuration ssuccess\n");
-            break;
-        }
-        case 14:
-        {
-            //qser_Gnss_Server_Configuration=(int(*)(char *host, char *id, char *password))dlsym(dlHandle_gnss, "qser_Gnss_Server_Configuration");
-            ret = qser_Gnss_Set_Async_Callback(async_cb);
-            if(ret < 0)
+            case 12:
             {
-                printf("qser_Gnss_Set_Async_Callback fail\n");
-                return -1;
+                ret = qser_Gnss_injectEphemeris(ph_gnss);
+                if(ret < 0)
+                {
+                    printf("qser_Gnss_injectEphemeris fail\n");
+                }
+                else
+                {
+                    printf("qser_Gnss_injectEphemeri ssuccess\n");
+                }
+                break;
             }
-            printf("qser_Gnss_Set_Async_Callback ssuccess\n");
-            break;
-        }
-        case 15:
-        {
-            //qser_Gnss_Server_Configuration=(int(*)(char *host, char *id, char *password))dlsym(dlHandle_gnss, "qser_Gnss_Server_Configuration");
-            ret = qser_Gnss_Start_Async(ph_gnss);
-            if(ret < 0)
+            case 13:
             {
-                printf("qser_Gnss_Start_Async fail\n");
-                return -1;
+                ret = qser_Gnss_Server_Configuration("http://uagnss.allystar.com:80/ephemeris/HD_GPS_BDS.hdb","yikecs1","Z38w5urAuawubTxi");
+                if(ret < 0)
+                {
+                    printf("qser_Gnss_Server_Configuration fail\n");
+                }
+                else
+                {
+                    printf("qser_Gnss_Server_Configuration ssuccess\n");
+                }
+                break;
             }
-            printf("qser_Gnss_Start_Async ssuccess\n");
-            break;
-        }
+            case 14:
+            {
+                ret = qser_Gnss_Set_Async_Callback(async_cb);
+                if(ret < 0)
+                {
+                    printf("qser_Gnss_Set_Async_Callback fail\n");
+                }
+                else
+                {
+                    printf("qser_Gnss_Set_Async_Callback ssuccess\n");
+                }
+                break;
+            }
+            case 15:
+            {
+                ret = qser_Gnss_Start_Async(ph_gnss);
+                if(ret < 0)
+                {
+                    printf("qser_Gnss_Start_Async fail\n");
+                }
+                else
+                {
+                    printf("qser_Gnss_Start_Async ssuccess\n");
+                }
+                break;
+            }
         }
     }
     return 0;