gnss: add T108 agps api

Change-Id: If0efbf5fa712c01fd6b5ce5da7f9a201c8b125ae
diff --git a/mbtk/mbtk_lib/src/mbtk_gnss_5311.c b/mbtk/mbtk_lib/src/mbtk_gnss_5311.c
index a3df60c..2a5540a 100755
--- a/mbtk/mbtk_lib/src/mbtk_gnss_5311.c
+++ b/mbtk/mbtk_lib/src/mbtk_gnss_5311.c
@@ -34,6 +34,10 @@
 #define MBTK_GNSS_UBUS_SET "gnss_setting"
 #define MBTK_GNSS_UBUS_SET_PARAM "gnss_setting_param"
 #define MBTK_GNSS_UBUS_GET_STATUS "gnss_get_state"
+#define MBTK_GNSS_UBUS_AGPS_SERVER "server_name"
+#define MBTK_GNSS_UBUS_ALAM_FLAG "alam_flag"
+#define MBTK_GNSS_UBUS_GET_AGPS "gnss_get_agps"
+#define MBTK_GNSS_UBUS_SET_AGPS "gnss_set_agps"
 
 #define MBTK_RESULT_FAIL -1
 #define MBTK_RESULT_SUCCESS 0
@@ -341,7 +345,8 @@
     char                nmea_buf[1025] = {0};
     struct epoll_event  events[2];
     int                 ne, nevents;
-    int                 cmd = -1, ret = -1;
+    int                 ret = -1;
+    char                cmd = 0;
     char                c;
 
     int pos = 0;
@@ -384,6 +389,7 @@
                     do {
                             ret = read( fd, &cmd, 1 );
                     } while (ret < 0 && errno == EINTR);
+                    LOGE("[mbtk_gnss_api] entry nmea thread quit cmd = [%d]!", cmd);
                     if (cmd == 1)
                     {
                         epoll_deregister( epoll_fd, control_fd );
@@ -451,7 +457,7 @@
     if(nmea_state.init == 1)
     {
         LOGE("[mbtk_gnss_api] nmea thread is open.");
-        return MBTK_RESULT_FAIL;
+        return MBTK_RESULT_SUCCESS;
     }
 
     mbtk_gnss_open_port(&nmea_state.fd, MBTK_GNSS_NMEA_PORT, O_RDWR | O_NONBLOCK | O_NOCTTY, 1);
@@ -611,6 +617,7 @@
         LOGE("[mbtk_gnss_api] mbtk_gnss_nmea_thread_init fail.");
         return MBTK_GNSS_RESULT_FAIL;
     }
+
     return MBTK_GNSS_RESULT_SUCCESS;
 }
 
@@ -641,7 +648,7 @@
 
     //UBUS_STATUS_OK
     ret = mbtk_invoke_reply_data_cb(MBTK_GNSS_UBUS_SERVER, MBTK_GNSS_UBUS_INIT, outBlob.head,
-                                    (ubus_data_handler_t *)mbtk_gnss_ubus_result_callback, &ubus_gnss_result, 8000);
+                                    (ubus_data_handler_t *)mbtk_gnss_ubus_result_callback, &ubus_gnss_result, 25000);
     blob_buf_free(&outBlob);
     if (ret != 0)
     {
@@ -887,6 +894,82 @@
     return MBTK_GNSS_RESULT_SUCCESS;
 }
 
+MBTK_GNSS_5311_RESULT_TYPE mbtk_gnss_5311_download_tle(char *host, int alam_flag)
+{
+    if (mbtk_gnss_uloop_init == 0)
+    {
+        LOGE("[mbtk_gnss_api] gnss not init.");
+        return MBTK_GNSS_RESULT_DOWNLOAD_FAIL;
+    }
+
+    if(mbtk_gnss_status == MBTK_GNSS_CLOSE)
+    {
+        LOGE("[mbtk_gnss_api] gnss not open.");
+        return MBTK_GNSS_RESULT_DOWNLOAD_FAIL;
+    }
+
+    int ret = -1;
+    MBTK_GNSS_5311_RESULT_TYPE ubus_gnss_result = MBTK_GNSS_RESULT_DOWNLOAD_SUCCESS;
+    struct blob_buf outBlob;
+    memset(&outBlob, 0, sizeof(outBlob));
+    
+    blob_buf_init(&outBlob, 0);
+    blobmsg_add_string(&outBlob, MBTK_GNSS_UBUS_AGPS_SERVER, host);
+    blobmsg_add_u32(&outBlob, MBTK_GNSS_UBUS_ALAM_FLAG, alam_flag);
+
+    //UBUS_STATUS_OK
+    ret = mbtk_invoke_reply_data_cb(MBTK_GNSS_UBUS_SERVER, MBTK_GNSS_UBUS_GET_AGPS, outBlob.head,
+                                    (ubus_data_handler_t *)mbtk_gnss_ubus_result_callback, &ubus_gnss_result, 8000);
+    blob_buf_free(&outBlob);
+    if (ret != 0)
+    {
+        LOGE("[mbtk_gnss_api] mbtk_invoke_reply_data_cb fail.");
+        return MBTK_GNSS_RESULT_DOWNLOAD_FAIL;
+    }
+
+    if(ubus_gnss_result != MBTK_GNSS_RESULT_DOWNLOAD_SUCCESS)
+    {
+        LOGE("[mbtk_gnss_api] ubus_gnss_result = [%d].", ubus_gnss_result);
+        return MBTK_GNSS_RESULT_DOWNLOAD_FAIL;
+    }
+
+    return MBTK_GNSS_RESULT_DOWNLOAD_SUCCESS;
+}
+
+MBTK_GNSS_5311_RESULT_TYPE mbtk_gnss_injectEphemeris(void)
+{
+    if (mbtk_gnss_uloop_init == 0)
+    {
+        LOGE("[mbtk_gnss_api] gnss not init.");
+        return MBTK_GNSS_RESULT_SEND_FAIL;
+    }
+
+    if(mbtk_gnss_status == MBTK_GNSS_CLOSE)
+    {
+        LOGE("[mbtk_gnss_api] gnss not open.");
+        return MBTK_GNSS_RESULT_SEND_FAIL;
+    }
+
+    int ret = -1;
+    MBTK_GNSS_5311_RESULT_TYPE ubus_gnss_result = MBTK_GNSS_RESULT_SUCCESS;
+
+    //UBUS_STATUS_OK
+    ret = mbtk_invoke_reply_data_cb(MBTK_GNSS_UBUS_SERVER, MBTK_GNSS_UBUS_SET_AGPS, NULL,
+                                    (ubus_data_handler_t *)mbtk_gnss_ubus_result_callback, &ubus_gnss_result, 8000);
+    if (ret != 0)
+    {
+        LOGE("[mbtk_gnss_api] mbtk_invoke_reply_data_cb fail.");
+        return MBTK_GNSS_RESULT_SEND_FAIL;
+    }
+
+    if(ubus_gnss_result != MBTK_GNSS_RESULT_SEND_SUCCESS)
+    {
+        LOGE("[mbtk_gnss_api] ubus_gnss_result = [%d].", ubus_gnss_result);
+        return MBTK_GNSS_RESULT_SEND_FAIL;
+    }
+
+    return MBTK_GNSS_RESULT_SEND_SUCCESS;
+}
 
 /**********************************API***********************************/