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)
