gnss: update qser gnss api

Change-Id: I3f754993719361033a128ff357492ec46aaccb48
diff --git a/mbtk/liblynq_lib/src/lynq_gnss.c b/mbtk/liblynq_lib/src/lynq_gnss.c
index c0dfc14..2bb1fc1 100755
--- a/mbtk/liblynq_lib/src/lynq_gnss.c
+++ b/mbtk/liblynq_lib/src/lynq_gnss.c
@@ -12,7 +12,7 @@
 
 /**********************************VARIABLE***********************************/
 static bool inited = FALSE;
-static uint32_t qser_h_sim = 0x5F6F7F8F;
+static uint32_t qser_h_gnss = 0x5F6F7F8F;
 gnss_handler_func_t qser_gnss_callback = NULL;
 static time_t qser_gnss_time = 0;
 qser_agps_info qser_agps_info_save = {0};
@@ -125,7 +125,7 @@
 {
     qser_gnss_error_e state = QSER_GNSS_ERROR_SUCCESS;
     gnss_async_func_t cb = qser_gnss_async_get_cb();
-    int ret = qser_Gnss_Start(qser_h_sim);
+    int ret = qser_Gnss_Start(qser_h_gnss);
     if(ret != QSER_RESULT_SUCCESS)
     {
         LOGE("[qser_gnss] gnss_async_thread() fail.");
@@ -212,7 +212,7 @@
             return QSER_RESULT_FAIL;
         }
     }
-    *h_gnss = qser_h_sim;
+    *h_gnss = qser_h_gnss;
 
     return QSER_RESULT_SUCCESS;
 }
@@ -220,36 +220,38 @@
 int qser_Gnss_Deinit (uint32_t h_gnss)
 {
     //UNUSED(h_gnss);
-    if(h_gnss != qser_h_sim)
+    if(h_gnss != qser_h_gnss)
     {
-        LOGE("[qser_gnss] h_sim is error.");
+        LOGE("[qser_gnss] h_gnss is error.");
         return QSER_RESULT_FAIL;
     }
     
     gnss_err_enum ret = GNSS_ERR_UNKNOWN;
 
-    ret = mbtk_gnss_deinit();
-    if(ret == GNSS_ERR_OK)
+    if(inited)
     {
-        inited = FALSE;
-    }
-    else
-    {
-        LOGE("[qser_gnss] mbtk_gnss_init() fail.");
-        return QSER_RESULT_FAIL;
+        ret = mbtk_gnss_deinit();
+        if(ret == GNSS_ERR_OK)
+        {
+            inited = FALSE;
+        }
+        else
+        {
+            LOGE("[qser_gnss] mbtk_gnss_init() fail.");
+            return QSER_RESULT_FAIL;
+        }
     }
 
     return QSER_RESULT_SUCCESS;
 }
 
-
 int qser_AddRxIndMsgHandler (gnss_handler_func_t handler_ptr,uint32_t h_gnss)
 {
     //UNUSED(handler_ptr);
     //UNUSED(h_gnss);
-    if(h_gnss != qser_h_sim)
+    if(h_gnss != qser_h_gnss)
     {
-        LOGE("[qser_gnss] h_sim is error.");
+        LOGE("[qser_gnss] h_gnss is error.");
         return QSER_RESULT_FAIL;
     }
 
@@ -263,14 +265,13 @@
     return QSER_RESULT_SUCCESS;
 }
 
-
 int qser_Set_Indications (uint32_t h_gnss,e_msg_id_t type)
 {
     //UNUSED(h_gnss);
     //UNUSED(type);
-    if(h_gnss != qser_h_sim)
+    if(h_gnss != qser_h_gnss)
     {
-        LOGE("[qser_gnss] h_sim is error.");
+        LOGE("[qser_gnss] h_gnss is error.");
         return QSER_RESULT_FAIL;
     }
 
@@ -303,13 +304,12 @@
     return QSER_RESULT_SUCCESS;
 }
 
-
 int qser_Gnss_Start (uint32_t h_gnss)
 {
     //UNUSED(h_gnss);
-    if(h_gnss != qser_h_sim)
+    if(h_gnss != qser_h_gnss)
     {
-        LOGE("[qser_gnss] h_sim is error.");
+        LOGE("[qser_gnss] h_gnss is error.");
         return QSER_RESULT_FAIL;
     }
 
@@ -325,14 +325,12 @@
     return QSER_RESULT_SUCCESS;
 }
 
-
-
 int qser_Gnss_Start_Async(uint32_t h_gnss)
 {
     //UNUSED(h_gnss);
-    if(h_gnss != qser_h_sim)
+    if(h_gnss != qser_h_gnss)
     {
-        LOGE("[qser_gnss] h_sim is error.");
+        LOGE("[qser_gnss] h_gnss is error.");
         return QSER_RESULT_FAIL;
     }
 
@@ -356,13 +354,12 @@
     return QSER_RESULT_SUCCESS;
 }
 
-
 int qser_Gnss_Stop (uint32_t h_gnss)
 {
     //UNUSED(h_gnss);
-    if(h_gnss != qser_h_sim)
+    if(h_gnss != qser_h_gnss)
     {
-        LOGE("[qser_gnss] h_sim is error.");
+        LOGE("[qser_gnss] h_gnss is error.");
         return QSER_RESULT_FAIL;
     }
 
@@ -379,65 +376,29 @@
 
 int qser_Gnss_InjectTime (uint32_t h_gnss,LYNQ_INJECT_TIME_INTO_T *time_info)
 {
-    UNUSED(h_gnss);
+    //UNUSED(h_gnss);
     UNUSED(time_info);
 
-    return 0;
+    if(h_gnss != qser_h_gnss)
+    {
+        LOGE("[qser_gnss] h_gnss is error.");
+        return QSER_RESULT_FAIL;
+    }
+    return QSER_RESULT_SUCCESS;
 }
 
-/*
 int qser_Gnss_Delete_Aiding_Data (uint32_t h_gnss,DELETE_AIDING_DATA_TYPE_T flags)
 {
     //UNUSED(h_gnss);
     //UNUSED(flags);
     
-    if(h_gnss != qser_h_sim)
+    if(h_gnss != qser_h_gnss)
     {
-        LOGE("[qser_gnss] h_sim is error.");
-        return QSER_RESULT_FAIL;
-    }
-
-    gnss_err_enum ret = GNSS_ERR_UNKNOWN;
-    char param_buf[32] = {0};
-    int  length = 0;
-
-    switch(flags)
-    {
-        case DELETE_NOTHING:
-        {
-            memcpy(param_buf, "RESET,1", strlen("RESET,1"));
-            break;
-        }
-        case DELETE_EPHEMERIS:
-        case DELETE_ALMANAC:
-        case DELETE_POSITION_TIME:
-        case DELETE_UTC:
-        {
-            memcpy(param_buf, "RESET,2", strlen("RESET,2"));
-            break;
-        }
-        case DELETE_ALL:
-        {
-            memcpy(param_buf, "RESET,3", strlen("RESET,3"));
-            break;
-        }
-        default:
-        {
-            LOGE("[qser_gnss] flags UNKOWN.");
-            return QSER_RESULT_FAIL;
-        }
-    }
-
-    length = strlen(param_buf);
-    ret = mbtk_gnss_param_config(param_buf, length);
-    if(ret != MBTK_GNSS_RESULT_SUCCESS)
-    {
-        LOGE("[qser_gnss] mbtk_gnss_param_config is error.");
+        LOGE("[qser_gnss] h_gnss is error.");
         return QSER_RESULT_FAIL;
     }
     return QSER_RESULT_SUCCESS;
 }
-*/
 
 int qser_Gnss_Server_Configuration(char *host, char *id, char *password)
 {
@@ -445,6 +406,12 @@
     //UNUSED(id);
     //UNUSED(password);
 
+    if(!inited)
+    {
+        LOGE("[qser_gnss] api not init.");
+        return QSER_RESULT_FAIL;
+    }
+    
     if(host != NULL)
     {
         memcpy(qser_agps_info_save.host, host, QSER_LEN_MAX);
@@ -462,28 +429,36 @@
     return QSER_RESULT_SUCCESS;
 }
 
-
-int qser_Gnss_download(const char *fw_path, int timeout)
+int qser_Gnss_download_tle()
 {
-    gnss_err_enum ret = GNSS_ERR_UNKNOWN;    
-    ret = mbtk_gnss_dl(fw_path, timeout);
-    if(ret != GNSS_ERR_OK)
+    if(!inited)
     {
-        LOGE("[qser_gnss] mbtk_gnss_download  is error.");
+        LOGE("[qser_gnss] api not init.");
         return QSER_RESULT_FAIL;
     }
     return QSER_RESULT_SUCCESS;
 }
 
-/*
+int qser_Gnss_injectEphemeris(uint32_t h_gnss)
+{
+    //UNUSED(h_gnss);
+
+    if(h_gnss != qser_h_gnss)
+    {
+        LOGE("[qser_gnss] h_gnss is error.");
+        return QSER_RESULT_FAIL;
+    }
+    return QSER_RESULT_SUCCESS;
+}
+
 int qser_Gnss_Set_Frequency(uint32_t h_gnss, int frequency)
 {
     //UNUSED(h_gnss);
     //UNUSED(frequency);
 
-    if(h_gnss != qser_h_sim)
+    if(h_gnss != qser_h_gnss)
     {
-        LOGE("[qser_gnss] h_sim is error.");
+        LOGE("[qser_gnss] h_gnss is error.");
         return QSER_RESULT_FAIL;
     }
 
@@ -496,16 +471,15 @@
     gnss_err_enum ret = GNSS_ERR_UNKNOWN;    
     char param_buf[32] = {0};
     int  length = 0;
-    length = snprintf(param_buf, 32, "NAVISYSCFG,7,%d", frequency);
-    ret = mbtk_gnss_dl(param_buf, length);
-    if(ret != MBTK_GNSS_RESULT_SUCCESS)
+    length = snprintf(param_buf, 32, "$FREQCFG,%d", frequency);
+    ret = mbtk_gnss_setting(param_buf, QSER_GNSS_TIMEOUT);
+    if(ret != GNSS_ERR_OK)
     {
-        LOGE("[qser_gnss] mbtk_gnss_param_config is error.");
+        LOGE("[qser_gnss] mbtk_gnss_setting fail.");
         return QSER_RESULT_FAIL;
     }
     return QSER_RESULT_SUCCESS;
 }
-*/
 /**********************************API***********************************/
 
 
diff --git a/mbtk/mbtk_gnssd/gnss_hd8122.c b/mbtk/mbtk_gnssd/gnss_hd8122.c
index ec7b515..5a328de 100755
--- a/mbtk/mbtk_gnssd/gnss_hd8122.c
+++ b/mbtk/mbtk_gnssd/gnss_hd8122.c
@@ -360,6 +360,26 @@
     return GNSS_ERR_OK;
 }
 
+static gnss_err_enum gnss_8122_freqcfg(int fd, uint8 mode)
+{
+    uint8 buff[GNSS_PACK_BUFF_SIZE];
+    LOGD("FREQCFG");
+    uint8 data[20];
+    memset(data, 0x00, 20);
+    data[1] = mode;
+    data[2] = 0x66;
+    int len = pack_create(HD8122_ID_TYPE_CFG, HD8122_ID_CFG_PWRCTL, 20, data, buff, sizeof(buff));
+    if(len <= 0)
+    {
+        LOGE("pack_create() fail.");
+        return GNSS_ERR_ARG;
+    }
+    log_hex("PACK", buff, len);
+    gnss_write(fd, buff, len);
+    msg_insert(HD8122_ID_TYPE_CFG, HD8122_ID_CFG_PWRCTL);
+    return GNSS_ERR_OK;
+}
+
 static gnss_err_enum gnss_8122_msgcfg(int fd, uint8 type, uint8 id, uint8 period)
 {
     uint8 buff[GNSS_PACK_BUFF_SIZE];
@@ -571,6 +591,23 @@
             }
             should_wait_rsp = TRUE;
         }
+        else if(memcmp(cmd, "$FREQCFG", 8) == 0)        //$FREQCFG,<freq>
+        {
+            uint32 freq = 0;
+            freq = (uint32)atoi(cmd + 9);
+            LOGD("set freq: %d", freq);
+            if((GNSS_SET_FREQCFG_1 != freq) && (GNSS_SET_FREQCFG_2 != freq) && (GNSS_SET_FREQCFG_5 != freq))
+            {
+                gnss_set_result = GNSS_ERR_ARG;
+                goto set_fail;
+            }
+            gnss_set_result = gnss_8122_freqcfg(fd, (uint8)freq);
+            if(gnss_set_result != GNSS_ERR_OK)
+            {
+                goto set_fail;
+            }
+            should_wait_rsp = TRUE;
+        }
         else if(memcmp(cmd, "$MSGCFG", 7) == 0)     // $MSGCFG,<mode>,<rate>
         {
             uint32 mode;
diff --git a/mbtk/mbtk_gnssd/gnss_info.h b/mbtk/mbtk_gnssd/gnss_info.h
index 2b91523..67d0238 100755
--- a/mbtk/mbtk_gnssd/gnss_info.h
+++ b/mbtk/mbtk_gnssd/gnss_info.h
@@ -21,6 +21,11 @@
 #define GNSS_SET_SYSCFG_GLO (1<<2)
 #define GNSS_SET_SYSCFG_GAL (1<<3)
 
+#define GNSS_SET_FREQCFG_1  (1)
+#define GNSS_SET_FREQCFG_2  (2)
+#define GNSS_SET_FREQCFG_5  (5)
+#define GNSS_SET_FREQCFG_10 (10)
+
 #define GNSS_SET_MSGCFG_RMC (1)
 #define GNSS_SET_MSGCFG_VTG (1<<1)
 #define GNSS_SET_MSGCFG_GGA (1<<2)
diff --git a/mbtk/test/liblynq_lib/qser_gnss_test.c b/mbtk/test/liblynq_lib/qser_gnss_test.c
old mode 100644
new mode 100755
index 2853942..8a9ec54
--- a/mbtk/test/liblynq_lib/qser_gnss_test.c
+++ b/mbtk/test/liblynq_lib/qser_gnss_test.c
@@ -60,16 +60,14 @@
            "\t5 gnss set get_para_from_nmea mode\n"
            "\t6 gnss start\n"
            "\t7 gnss stop\n"
-           /*
-           "\t8 gnss Delete_Aiding_Data and reset\n"
-           "\t9 gnss injecttime\n"
-           "\t10 gnss download agps\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"
            "\t11 gnss set frequency\n"
-           "\t12 gnss send agps data to 5311\n"
-           "\t13 gnss config agps server info\n"
+           "\t12 gnss send agps data to gnss (new not support)\n"
+           "\t13 gnss config agps server info (new not support)\n"
            "\t14 gnss set async cb\n"
            "\t15 gnss start async\n"
-           */
            "please input operator: >> \n");
 }
 void delete_type(void)
@@ -195,7 +193,6 @@
             printf("stop success\n");
             break; 
         }
-/*
         case 8:
         {
             int opt_1;
@@ -277,7 +274,7 @@
         {
             int frequency;
             //qser_Gnss_Set_Frequency=(int(*)(uint32_t, int))dlsym(dlHandle_gnss, "qser_Gnss_Set_Frequency");
-            printf("=========delete aiding data type=========\n");
+            printf("=========Set Frequency=========\n");
             scanf("%d", &frequency);
             ret = qser_Gnss_Set_Frequency(ph_gnss,frequency);
             if(ret < 0)
@@ -338,7 +335,6 @@
             printf("qser_Gnss_Start_Async ssuccess\n");
             break;
         }
-        */
         }
     }
     return 0;