[Feature][ZK-14][gps] add sync systemtime from gps

Change-Id: I3d8494a80f3e88a9729679449c743c7d9eb3074c
diff --git a/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-gnss/liblynq-gnss.bb b/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-gnss/liblynq-gnss.bb
index bc8c208..011c71d 100755
--- a/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-gnss/liblynq-gnss.bb
+++ b/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-gnss/liblynq-gnss.bb
@@ -5,7 +5,7 @@
 LICENSE = "MediaTekProprietary"

 #LIC_FILES_CHKSUM = "file://LICENSE;md5=e1696b147d49d491bcb4da1a57173fff"

 inherit workonsrc

-DEPENDS += "platform-libs gpshal6635 openssl curl liblynq-log"

+DEPENDS += "platform-libs gpshal6635 openssl curl liblynq-log liblynq-uci"

 WORKONSRC = "${TOPDIR}/../src/lynq/lib/liblynq-gnss/"

 

 TARGET_CC_ARCH += "${LDFLAGS}"

@@ -62,4 +62,4 @@
 addtask bachclean

 do_bachclean () {

     oe_runmake clean

-}
\ No newline at end of file
+}

diff --git a/src/lynq/lib/liblynq-gnss/src/lynq_callback.c b/src/lynq/lib/liblynq-gnss/src/lynq_callback.c
index 2663332..37a4adc 100755
--- a/src/lynq/lib/liblynq-gnss/src/lynq_callback.c
+++ b/src/lynq/lib/liblynq-gnss/src/lynq_callback.c
@@ -3,11 +3,20 @@
 #include<unistd.h>

 #include<errno.h>

 #include<string.h>

+#include <sys/time.h>

+#include <time.h>

 

 #include"lynq_gnsshal.h"

 #include"mtk_lbs_utility.h"

 #include"lynq_gnss.h"

 

+#define NMEA_ACC "ACCURACY"

+#define NMEA_GSA "GSA"

+#define NMEA_RMC "RMC"

+#define NMEA_GGA "GGA"

+#define NMEA_VTG "VTG"

+#define NMEA_GSV "GSV"

+

 extern lynq_gnss_cb* lynq_callbacks;

 extern lynq_raw_gnss_cbs *lynq_meas_callbacks;

 

@@ -41,8 +50,46 @@
 

 }

 

+extern int g_gnss_sync_enable_flag;

+extern int g_gnss_sync_done;

+

+static inline int update_systime_time(GpsUtcTime gpstime)

+{

+    struct timeval tv;

+    int ret = gettimeofday(&tv, NULL);

+    if (ret == -1) {

+        perror("gettimeofday");

+        return -1;

+    }

+    if (tv.tv_sec == gpstime / 1000)

+    {

+        return 0;

+    }

+    printf("Now: %ld.%06ld\n", tv.tv_sec, tv.tv_usec);

+    tv.tv_sec = gpstime / 1000;

+    tv.tv_usec = (gpstime % 1000) * 1000;

+    ret = settimeofday(&tv, NULL);

+    if (ret == -1) {

+        perror("settimeofday");

+        return -1;

+    }

+

+    return 0;

+}

+

 void lynq_gps_nmea_callback(GpsUtcTime timestamp, const char* nmea, int length)

 {

+    if (g_gnss_sync_enable_flag == 1 && g_gnss_sync_done == 0)

+    {

+        if( strncmp(nmea+3,NMEA_RMC,strlen(NMEA_RMC)) == 0 && nmea[18] == 'A')

+        {

+            if (update_systime_time(timestamp) == 0)

+            {

+                g_gnss_sync_done = 1;

+            }

+        }

+    }

+

     lynq_callbacks->lynq_nmea_cb(timestamp,nmea,length);

 

 }

@@ -157,13 +204,6 @@
 

 }

 

-#define NMEA_ACC "ACCURACY"

-#define NMEA_GSA "GSA"

-#define NMEA_RMC "RMC"

-#define NMEA_GGA "GGA"

-#define NMEA_VTG "VTG"

-#define NMEA_GSV "GSV"

-

 void lynq_at_gps_nmea_callback(GpsUtcTime timestamp, const char* nmea, int length)

 {

     if (at_gpsnmea_status == 1)

diff --git a/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c b/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c
index 7ae6c4f..0fbf749 100755
--- a/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c
+++ b/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c
@@ -24,6 +24,7 @@
 #include "mtk_lbs_utility.h"

 #include "lynq_prop.h"

 #include "mnldinf_utility.h"

+#include "include/lynq_uci.h"

 

 #define LOG_TAG "LYNQ_GNSS"

 

@@ -44,6 +45,9 @@
 

 static int g_lynq_gnss_calback_flag = 0;

 

+int g_gnss_sync_enable_flag = 0;

+int g_gnss_sync_done = 0;

+

 enum

 {

     Gnss_ok = 0,

@@ -131,6 +135,10 @@
 

 int lynq_gnss_start(void)

 {

+    char gnss_sync_enable[24] = "";

+    lynq_get_value("lynq_uci", "lynq_sync_time", "lynq_gnss_sync_time_enable" , gnss_sync_enable);

+    g_gnss_sync_enable_flag = atoi(gnss_sync_enable);

+    g_gnss_sync_done = 0;

     //memset(&lynq_debug_data, 0, sizeof(DebugData));

     gpshal_set_gps_state_intent(GPSHAL_STATE_START);

     gpshal2mnl_gps_start();