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
