gnss: add T108 agps api
Change-Id: If0efbf5fa712c01fd6b5ce5da7f9a201c8b125ae
diff --git a/mbtk/include/mbtk/mbtk_gnss_5311.h b/mbtk/include/mbtk/mbtk_gnss_5311.h
index 71ba515..f9badcd 100644
--- a/mbtk/include/mbtk/mbtk_gnss_5311.h
+++ b/mbtk/include/mbtk/mbtk_gnss_5311.h
@@ -59,4 +59,6 @@
MBTK_GNSS_5311_RESULT_TYPE mbtk_gnss_get_status(const char *status_buf, int status_buf_len, int *get_status_len);
MBTK_GNSS_5311_RESULT_TYPE mbtk_gnss_add_nmea_out_func(mbtk_gnss_nmea_func_t cb);
MBTK_GNSS_5311_RESULT_TYPE mbtk_gnss_set_nmea_out_type(MBTK_GNSS_MSG_INFO_TYPE type);
+MBTK_GNSS_5311_RESULT_TYPE mbtk_gnss_5311_download_tle(char *host, int alam_flag);
+MBTK_GNSS_5311_RESULT_TYPE mbtk_gnss_injectEphemeris(void);
#endif
\ No newline at end of file
diff --git a/mbtk/lynq_lib/src/lynq_gnss.c b/mbtk/lynq_lib/src/lynq_gnss.c
index f62df24..bd910b2 100755
--- a/mbtk/lynq_lib/src/lynq_gnss.c
+++ b/mbtk/lynq_lib/src/lynq_gnss.c
@@ -2,16 +2,26 @@
#include "lynq_gnss.h"
#include "mbtk_gnss_5311.h"
+#define QSER_LEN_MAX 128
+
#define QSER_RESULT_SUCCESS 0
#define QSER_RESULT_FAIL -1
/**********************************VARIABLE***********************************/
+typedef struct
+{
+ char host[QSER_LEN_MAX];
+ char id[QSER_LEN_MAX];
+ char passwd[QSER_LEN_MAX];
+}qser_gnss_info;
+
static bool inited = FALSE;
static int qser_info_handle_num = 0;
static uint qser_h_sim = 0x5F6F7F8F;
gnss_handler_func_t qser_gnss_callback = NULL;
e_msg_id_t qser_gnss_msg_type = E_MT_LOC_MSG_ID_NMEA_INFO;
static time_t qser_gnss_time = 0;
+qser_gnss_info qser_agps_info_save = {0};
extern long timezone;
@@ -167,7 +177,6 @@
else
{
qser_info_handle_num++;
- inited = TRUE;
}
*h_gnss = qser_h_sim;
@@ -239,7 +248,6 @@
}
qser_gnss_msg_type = type;
-
return QSER_RESULT_SUCCESS;
}
@@ -253,14 +261,13 @@
}
MBTK_GNSS_5311_RESULT_TYPE ret = MBTK_GNSS_RESULT_FAIL;
-
+
ret = mbtk_gnss_add_nmea_out_func(qser_gnss_msg_cb);
if(ret != MBTK_GNSS_RESULT_SUCCESS)
{
LOGE("[qser_gnss] mbtk_gnss_add_nmea_out_func fail.");
return QSER_RESULT_FAIL;
}
-
ret = mbtk_gnss_open();
if(ret != MBTK_GNSS_RESULT_SUCCESS)
{
@@ -353,22 +360,58 @@
int qser_Gnss_Server_Configuration(char *host, char *id, char *password)
{
- UNUSED(host);
- UNUSED(id);
- UNUSED(password);
- return 0;
+ //UNUSED(host);
+ //UNUSED(id);
+ //UNUSED(password);
+
+ if(host != NULL)
+ {
+ memcpy(qser_agps_info_save.host, host, QSER_LEN_MAX);
+ }
+
+ if(id != NULL)
+ {
+ memcpy(qser_agps_info_save.id, id, QSER_LEN_MAX);
+ }
+
+ if(password != NULL)
+ {
+ memcpy(qser_agps_info_save.passwd, password, QSER_LEN_MAX);
+ }
+ return QSER_RESULT_SUCCESS;
}
int qser_Gnss_download_tle()
{
- return 0;
+ MBTK_GNSS_5311_RESULT_TYPE ret = MBTK_GNSS_RESULT_FAIL;
+ char host[128] = {0};
+ ret = mbtk_gnss_5311_download_tle(host, 0);
+ if(ret != MBTK_GNSS_RESULT_DOWNLOAD_SUCCESS)
+ {
+ LOGE("[qser_gnss] mbtk_gnss_5311_download_tle is error.");
+ return QSER_RESULT_FAIL;
+ }
+ return QSER_RESULT_SUCCESS;
}
int qser_Gnss_injectEphemeris(uint32_t h_gnss)
{
- UNUSED(h_gnss);
+ //UNUSED(h_gnss);
- return 0;
+ if(h_gnss != qser_h_sim)
+ {
+ LOGE("[qser_gnss] h_sim is error.");
+ return QSER_RESULT_FAIL;
+ }
+
+ MBTK_GNSS_5311_RESULT_TYPE ret = MBTK_GNSS_RESULT_FAIL;
+ ret = mbtk_gnss_injectEphemeris();
+ if(ret != MBTK_GNSS_RESULT_SEND_SUCCESS)
+ {
+ LOGE("[qser_gnss] mbtk_gnss_injectEphemeris is error.");
+ return QSER_RESULT_FAIL;
+ }
+ return QSER_RESULT_SUCCESS;
}
int qser_Gnss_Set_Frequency(uint32_t h_gnss, int frequency)
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***********************************/
diff --git a/mbtk/test/asr1806/qser_gnss_test.c b/mbtk/test/asr1806/qser_gnss_test.c
index c3628e3..9baabfa 100644
--- a/mbtk/test/asr1806/qser_gnss_test.c
+++ b/mbtk/test/asr1806/qser_gnss_test.c
@@ -57,7 +57,11 @@
"\t7 gnss stop\n"
"\t8 gnss Delete_Aiding_Data and reset\n"
"\t9 gnss injecttime\n"
- "please input operator: >> ");
+ "\t10 gnss download agps\n"
+ "\t11 gnss set frequency\n"
+ "\t12 gnss send agps data to 5311\n"
+ "\t13 gnss config agps server info\n"
+ "please input operator: >> \n");
}
void delete_type(void)
{
@@ -67,7 +71,7 @@
"\t3 DELETE_POSITION_TIME \n"
"\t4 DELETE_UTC\n"
"\t5 DELETE_ALL\n"
- "please input operator: >> ");
+ "please input operator: >> \n");
}
int main(int argc, char *argv[])