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)