gnssd: add 8122 agps func

Change-Id: Ie87dcafc1da9cf5cffd9f5397f1640f19aa36aab
diff --git a/mbtk/mbtk_gnssd/gnss_hd8122.c b/mbtk/mbtk_gnssd/gnss_hd8122.c
index 8b476ce..3163819 100755
--- a/mbtk/mbtk_gnssd/gnss_hd8122.c
+++ b/mbtk/mbtk_gnssd/gnss_hd8122.c
@@ -27,6 +27,8 @@
 #include "gnss_utils.h"
 #include "gnss_hd8122.h"
 #include "hd8122_dl/hd8040_upgrade.h"
+#include "agps/agnss_http_download.h"
+#include "agps/8122_agnss.h"
 
 #define UART_BITRATE_NMEA_DEF_FW    115200   // Default bitrate.
 #define GNSS_POWER_GPIO 43
@@ -37,6 +39,18 @@
 #define GNSS_FW_GQALS_PATH "/lib/firmware/HD8122.YIKE.GN3.115200.0035.720e5.53ef0.GQALS.ANT.EPH.CFG.PPS13.240115R1.bin"
 #define GNSS_FW_GAQBS_PATH "/lib/firmware/HD8122.YIKE.GN3.115200.0037.dbd12.53ef0.GAQBS.B1C.ANT.EPH.CFG.PPS13.240416R1.bin"
 
+//#define AGNSS_TEST_URL               "http://aclientt.allystar.com:80/ephemeris/HD_GPS_BDS.hdb"
+#define AGNSS_URL                    "http://uagnss.allystar.com:80/ephemeris/%s?compid=yikecs1&token=Z38w5urAuawubTxi"
+#define AGNSS_INDIVIDUATION_URL_HEAD "http://cagnss.allystar.com/api/v1/eph/rt?"
+#define AGNSS_ALLSTAR_URL_HEAD       "http://cagnss.allystar.com/api/v1/eph/rta?"
+#define AGNSS_EPH_FILE_PATH          "/lib/firmware/eph_data.txt"
+
+#define AGNSS_EPH_GPS                "HD_GPS.hdb"
+#define AGNSS_EPH_BDS                "HD_BDS.hdb"
+#define AGNSS_EPH_GLO                "HD_GLO.hdb"
+#define AGNSS_EPH_GPS_BDS            "HD_GPS_BDS.hdb"
+#define AGNSS_EPH_GPS_GLO            "HD_GPS_GLO.hdb"
+
 static pthread_cond_t read_cond;
 static pthread_mutex_t read_mutex;
 static bool setting_waitting = FALSE;
@@ -358,6 +372,7 @@
             pthread_mutex_unlock(&read_mutex);
             setting_waitting = FALSE;
         }
+        
     }
     else
     {
@@ -586,6 +601,76 @@
     return GNSS_ERR_DL_FW;
 }
 
+gnss_err_enum gnss_8122_agnss_get_eph(const char *param)
+{
+    if(param == NULL)
+    {
+        LOGD("gnss_8122_agnss_get_eph param is NULL");
+        return GNSS_ERR_ARG;
+    }
+
+    int eph_type = 0;
+    int alam_flag = 0;
+    int ret = -1;
+    char url[256] = {0};
+    if(2 == sscanf(param, "%d,%d", &eph_type, &alam_flag))
+    {
+        if((gnss_eph_data_enum)eph_type == GNSS_EPH_GPS)
+        {
+            snprintf(url, 256,AGNSS_URL, AGNSS_EPH_GPS);
+        }
+        else if((gnss_eph_data_enum)eph_type == GNSS_EPH_BDS)
+        {
+            snprintf(url, 256,AGNSS_URL, AGNSS_EPH_BDS);
+        }
+        else if((gnss_eph_data_enum)eph_type == GNSS_EPH_GLO)
+        {
+            snprintf(url, 256,AGNSS_URL, AGNSS_EPH_GLO);
+        }
+        else if((gnss_eph_data_enum)eph_type == GNSS_EPH_GPS_BDS)
+        {
+            snprintf(url, 256,AGNSS_URL, AGNSS_EPH_GPS_BDS);
+        }
+        else if((gnss_eph_data_enum)eph_type == GNSS_EPH_GPS_GLO)
+        {
+            snprintf(url, 256,AGNSS_URL, AGNSS_EPH_GPS_GLO);
+        }
+        else
+        {
+            return GNSS_ERR_UNSUPPORT;
+        }
+
+        ret = eph_data_from_http_get(url, AGNSS_EPH_FILE_PATH);
+        if (ret < 0)
+        {
+            LOGD("eph_data_from_http_get fail");
+            return GNSS_ERR_EPH_GET_FAIL;
+        }
+        LOGD("get_eph_data_from_http success");
+    }
+    else
+    {
+        LOGD("param num error");
+        return GNSS_ERR_ARG;
+    }
+    return GNSS_ERR_OK;
+}
+
+
+gnss_err_enum gnss_8122_agnss_inject(int fd)
+{
+    int ret = 0;
+    hd_set_gnss_dev_fd(fd);
+    ret = hd_agnss_inject(AGNSS_EPH_FILE_PATH, 0, 0, 0, 0, NULL);
+    hd_set_gnss_dev_fd(-1);
+    if(ret < 0)
+    {
+        LOGD("hd_agnss_inject fail");
+        return GNSS_ERR_EPH_INJECT_FAIL;
+    }
+    return GNSS_ERR_OK;
+}
+
 void gnss_8122_set_cb(const void *data, int data_len)
 {
     const char *buff = (const char*)data;
@@ -593,6 +678,20 @@
     {
         gnss_cmd_rsp_process(data, data_len);
     }
+
+    if(hd_get_eph_inject_status() == HD_EPH_INJECT_STATUS_WAIT_RETURN)
+    {
+        log_hex("EPH_RSP", (const char*)data, data_len);
+        int ret = hd_eph_inject_result_check(data, data_len);
+        if(ret < 0)
+        {
+            hd_set_eph_inject_status(HD_EPH_INJECT_STATUS_FAIL);
+        }
+        else
+        {
+            hd_set_eph_inject_status(HD_EPH_INJECT_STATUS_SUCCESS);
+        }       
+    }
 }
 
 gnss_err_enum gnss_8122_set(int fd, const char *cmd, void *cmd_rsp, int cmd_rsp_len)