gnss: add gnss async api
Change-Id: I439e1e4c41cfdb17133ecdffae04201efa0eeef9
diff --git a/mbtk/liblynq_lib/src/lynq_gnss.c b/mbtk/liblynq_lib/src/lynq_gnss.c
index bd910b2..51e586a 100755
--- a/mbtk/liblynq_lib/src/lynq_gnss.c
+++ b/mbtk/liblynq_lib/src/lynq_gnss.c
@@ -1,4 +1,6 @@
#include <time.h>
+#include <pthread.h>
+
#include "lynq_gnss.h"
#include "mbtk_gnss_5311.h"
@@ -17,17 +19,28 @@
static bool inited = FALSE;
static int qser_info_handle_num = 0;
-static uint qser_h_sim = 0x5F6F7F8F;
+static uint32_t 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};
-
+gnss_async_func_t qser_gnss_async_callback = NULL;
extern long timezone;
/**********************************VARIABLE***********************************/
/**********************************FUNC***********************************/
+static void qser_gnss_async_set_cb(gnss_async_func_t cb)
+{
+ qser_gnss_async_callback = cb;
+}
+
+static gnss_async_func_t qser_gnss_async_get_cb(void)
+{
+ return qser_gnss_async_callback;
+}
+
+
static time_t qser_get_timestamp(char *time)
{
char tmp_char[4] = {0};
@@ -152,6 +165,25 @@
//UNKNOWN
}
}
+
+static void* gnss_async_thread(void* arg)
+{
+ qser_gnss_error_e state = QSER_GNSS_ERROR_SUCCESS;
+ gnss_async_func_t cb = qser_gnss_async_get_cb();
+ int ret = qser_Gnss_Start(qser_h_sim);
+ if(ret != QSER_RESULT_SUCCESS)
+ {
+ LOGE("[qser_gnss] gnss_async_thread() fail.");
+ state = QSER_GNSS_ERROR_FAIL;
+ }
+
+ if(cb != NULL)
+ {
+ cb(state);
+ }
+ return NULL;
+}
+
/**********************************FUNC***********************************/
/**********************************API***********************************/
@@ -251,6 +283,12 @@
return QSER_RESULT_SUCCESS;
}
+int qser_Gnss_Set_Async_Callback(gnss_async_func_t cb)
+{
+ qser_gnss_async_set_cb(cb);
+ return QSER_RESULT_SUCCESS;
+}
+
int qser_Gnss_Start (uint32_t h_gnss)
{
//UNUSED(h_gnss);
@@ -278,6 +316,36 @@
return QSER_RESULT_SUCCESS;
}
+int qser_Gnss_Start_Async(uint32_t h_gnss)
+{
+ //UNUSED(h_gnss);
+ if(h_gnss != qser_h_sim)
+ {
+ LOGE("[qser_gnss] h_sim is error.");
+ return QSER_RESULT_FAIL;
+ }
+
+ pthread_attr_t thread_attr;
+ pthread_t gnss_thread_id;
+ pthread_attr_init(&thread_attr);
+ if(pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED))
+ {
+ LOGE("[qser_gnss] pthread_attr_setdetachstate() fail.");
+ return QSER_RESULT_FAIL;
+ }
+
+ //memcpy(&qser_data_backup, data_call, sizeof(qser_data_call_s));
+ if(pthread_create(&gnss_thread_id, &thread_attr, gnss_async_thread, NULL))
+ {
+ LOGE("[qser_gnss] pthread_create() fail.");
+ return QSER_RESULT_FAIL;
+ }
+ pthread_attr_destroy(&thread_attr);
+
+ return QSER_RESULT_SUCCESS;
+}
+
+
int qser_Gnss_Stop (uint32_t h_gnss)
{
//UNUSED(h_gnss);