Squashed 'LYNQ_PUBLIC/' changes from 79d8f932f..369b02ab4
369b02ab4 [Bugfix][API-1515][POWER]Modify the modem log instruction
cbc08b623 [Feature][T8TSK-289] add compile macro for autosuspend
45e64ec0e [Feature][T8TSK-289]merge sync time and output to elt from zk
bc4e6a551 [Feature][T8TSK-289]fix codec compile fail for gsw and zk
git-subtree-dir: LYNQ_PUBLIC
git-subtree-split: 369b02ab472e58e68aecf27d00187f14094926b2
Change-Id: Iaf4d0de1197fd56a514bb81cafa5de3004cebe79
diff --git a/IC_src/mtk/lib/liblynq-gnss/include/lynq_gnss.h b/IC_src/mtk/lib/liblynq-gnss/include/lynq_gnss.h
index 362baaf..fac71b0 100755
--- a/IC_src/mtk/lib/liblynq-gnss/include/lynq_gnss.h
+++ b/IC_src/mtk/lib/liblynq-gnss/include/lynq_gnss.h
@@ -7,7 +7,7 @@
#include "gpshal.h"
#include "hal2mnl_interface.h"
-
+#define DEV "/dev/ttyGS3"
typedef enum{
LYNQ_MODE_GPS_GLONASS = 0,
LYNQ_MODE_GPS_BEIDOU,
diff --git a/IC_src/mtk/lib/liblynq-gnss/makefile b/IC_src/mtk/lib/liblynq-gnss/makefile
index f1ca7fc..fcf6780 100755
--- a/IC_src/mtk/lib/liblynq-gnss/makefile
+++ b/IC_src/mtk/lib/liblynq-gnss/makefile
@@ -32,8 +32,19 @@
-lcutils \
-lgnsshal \
-lpthread \
+ -llynq-uci \
# -llynq-log \
+
+
+ifeq ($(strip $(MOBILETEK_GNSS_ELT_OUTPUT_CFG)), yes)
+ LOCAL_CFLAGS += -DGNSS_ELT_OUTPUT_CFG
+endif
+
+ifeq ($(strip $(MOBILETEK_GNSS_SYNC_TIME_CFG)), yes)
+ LOCAL_CFLAGS += -DGNSS_SYNC_TIME_CFG
+endif
+
$(warning libs=$(LOCAL_LIBS))
CXXSRC=\
diff --git a/IC_src/mtk/lib/liblynq-gnss/src/lynq_callback.c b/IC_src/mtk/lib/liblynq-gnss/src/lynq_callback.c
index b8a402f..59a866a 100755
--- a/IC_src/mtk/lib/liblynq-gnss/src/lynq_callback.c
+++ b/IC_src/mtk/lib/liblynq-gnss/src/lynq_callback.c
@@ -3,11 +3,26 @@
#include<unistd.h>
#include<errno.h>
#include<string.h>
+#include <sys/time.h>
+#include <time.h>
+#include <log/log.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <sys/stat.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"
+
+time_t reopen_start;
extern lynq_gnss_cb* lynq_callbacks;
extern lynq_raw_gnss_cbs *lynq_meas_callbacks;
@@ -40,9 +55,89 @@
{
}
+#ifdef GNSS_SYNC_TIME_CFG
+extern int g_gnss_sync_enable_flag;
+extern int g_gnss_sync_done;
+#endif
+#ifdef GNSS_ELT_OUTPUT_CFG
+extern int g_ttyGS_fd;
+extern bool Open_ELT;
+#endif
+
+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)
{
+#ifdef GNSS_ELT_OUTPUT_CFG
+ int ret;
+ time_t reopen_end;
+#endif
+#ifdef GNSS_SYNC_TIME_CFG
+ 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;
+ }
+ }
+ }
+#endif
+#ifdef GNSS_ELT_OUTPUT_CFG
+ if(Open_ELT)
+ {
+ if(g_ttyGS_fd >= 0)
+ {
+ ret = write(g_ttyGS_fd,nmea,length);
+ if(ret<0)
+ {
+ close(g_ttyGS_fd);
+ g_ttyGS_fd = -1;
+ reopen_start = time(NULL);
+ }
+ }
+
+ else
+ {
+ reopen_end = time(NULL);
+ if(difftime(reopen_end,reopen_start) > 3)
+ {
+ g_ttyGS_fd= open(DEV, O_RDWR | O_NOCTTY | O_NDELAY);
+ if(g_ttyGS_fd < 0)
+ {
+ reopen_start = time(NULL);
+ }
+ else
+ {
+ RLOGD("Open dev success\n");
+ }
+ }
+ }
+ }
+#endif
lynq_callbacks->lynq_nmea_cb(timestamp,nmea,length);
}
@@ -153,13 +248,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/IC_src/mtk/lib/liblynq-gnss/src/lynq_gnss.c b/IC_src/mtk/lib/liblynq-gnss/src/lynq_gnss.c
index a812738..6c8ba42 100755
--- a/IC_src/mtk/lib/liblynq-gnss/src/lynq_gnss.c
+++ b/IC_src/mtk/lib/liblynq-gnss/src/lynq_gnss.c
@@ -16,6 +16,9 @@
#include <pthread.h>
#include <log/log.h>
#include <stdlib.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <sys/stat.h>
#include "lynq_gnss.h"
#include "gpshal.h"
@@ -24,6 +27,7 @@
#include "mtk_lbs_utility.h"
#include "lynq_prop.h"
#include "mnldinf_utility.h"
+#include "include/lynq_uci.h"
#define LOG_TAG "LYNQ_GNSS"
@@ -43,13 +47,22 @@
static int g_lynq_gnss_init_flag = 0;
static int g_lynq_gnss_calback_flag = 0;
-
+#ifdef GNSS_SYNC_TIME_CFG
+int g_gnss_sync_enable_flag = 0;
+int g_gnss_sync_done = 0;
+#endif
/**
* @brief mark gnss raw meas state
* 0: deinit state
* 1: init state
*/
static int g_lynq_gnss_raw_meas_flag = 0;
+int at_gps_status = 0;
+int at_gpsnmea_status = 0;
+#ifdef GNSS_ELT_OUTPUT_CFG
+int g_ttyGS_fd= -1;
+bool Open_ELT = true;
+#endif
int lynq_gnss_init(void)
{
@@ -67,6 +80,16 @@
gpshal_set_gps_state_intent(GPSHAL_STATE_INIT);
gpshal2mnl_gps_init();
g_gpshal_ctx.mnl_retry_timer = mnldinf_init_timer(gpshal_mnl_retry_routine);
+#ifdef GNSS_ELT_OUTPUT_CFG
+ if(Open_ELT)
+ {
+ g_ttyGS_fd= open(DEV, O_RDWR | O_NOCTTY | O_NDELAY);
+ if(g_ttyGS_fd < 0)
+ {
+ RLOGD("Open dev fail");
+ }
+ }
+#endif
return 0;
}
@@ -132,6 +155,13 @@
RLOGD("timer de init end");
g_lynq_gnss_calback_flag = 0;
g_lynq_gnss_init_flag = 0;
+#ifdef GNSS_ELT_OUTPUT_CFG
+ if(g_ttyGS_fd >= 0)
+ {
+ close(g_ttyGS_fd);
+ g_ttyGS_fd = -1;
+ }
+#endif
return 0;
}
@@ -142,6 +172,12 @@
RLOGD("start is not allowed");
return -1;
}
+#ifdef GNSS_SYNC_TIME_CFG
+ 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;
+#endif
//memset(&lynq_debug_data, 0, sizeof(DebugData));
gpshal_set_gps_state_intent(GPSHAL_STATE_START);
gpshal2mnl_gps_start();
@@ -353,8 +389,6 @@
int lynq_at_cgps(int at_type,char *at_paramter);
int lynq_at_cgpsnmea(int at_type,char *at_paramter);
-int at_gps_status = 0;
-int at_gpsnmea_status = 0;
int strUpper(char * str)
{
@@ -527,6 +561,9 @@
}
if (at_gps_status == 0)
{
+#ifdef GNSS_ELT_OUTPUT_CFG
+ Open_ELT = true;
+#endif
ret = lynq_gnss_stop();
if (ret != 0)
{
@@ -545,6 +582,9 @@
}
else if(at_gps_status == 1)
{
+#ifdef GNSS_ELT_OUTPUT_CFG
+ Open_ELT = false;
+#endif
lynq_at_callbacks = lynq_at_get__gnss_callbacks();
ret = lynq_gnss_callback_reg(lynq_at_callbacks);
if (ret != 0)