Merge commit '2e177267f1cc007efed09f12bfebfc520e25a969' into MR3.0-Merge-v2.0

Change-Id: I99a05c31c704005e1fcff8a6f32c074c416ecd8a
diff --git a/LYNQ_PUBLIC/IC_meta/mtk/2735/liblynq-gnss/liblynq-gnss.bb b/LYNQ_PUBLIC/IC_meta/mtk/2735/liblynq-gnss/liblynq-gnss.bb
index fbe7ce6..d9c78b8 100755
--- a/LYNQ_PUBLIC/IC_meta/mtk/2735/liblynq-gnss/liblynq-gnss.bb
+++ b/LYNQ_PUBLIC/IC_meta/mtk/2735/liblynq-gnss/liblynq-gnss.bb
@@ -17,6 +17,12 @@
                 'TARGET_PLATFORM = ${TARGET_PLATFORM}'"

 

 

+MOBILETEK_GNSS_ELT_OUTPUT_CFG ?= "no"

+EXTRA_OEMAKE += "'MOBILETEK_GNSS_ELT_OUTPUT_CFG = ${MOBILETEK_GNSS_ELT_OUTPUT_CFG}'"

+

+MOBILETEK_GNSS_SYNC_TIME_CFG ?= "no"

+EXTRA_OEMAKE += "'MOBILETEK_GNSS_SYNC_TIME_CFG = ${MOBILETEK_GNSS_SYNC_TIME_CFG}'"

+

 FILES_${PN} = "${base_libdir}/*.so \

                ${base_bindir}\

                ${base_sbindir} \

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

 do_bachclean () {

     oe_runmake clean

-}
\ No newline at end of file
+}

diff --git a/LYNQ_PUBLIC/IC_meta/mtk/2735/suspend-service/files/autosuspend_wakeup_count.c b/LYNQ_PUBLIC/IC_meta/mtk/2735/suspend-service/files/autosuspend_wakeup_count.c
index 0ea28ce..dcb82a6 100755
--- a/LYNQ_PUBLIC/IC_meta/mtk/2735/suspend-service/files/autosuspend_wakeup_count.c
+++ b/LYNQ_PUBLIC/IC_meta/mtk/2735/suspend-service/files/autosuspend_wakeup_count.c
@@ -244,7 +244,7 @@
 
     if(adb_debug_mode == 2)
     {
-        system("echo 11 | emdlogger_ctrl");
+        system("echo 11 | emdlogger_ctrl socket");
     }
 
     if (lynq_screen(0) != 0)  //notify ril for screen off
@@ -324,7 +324,7 @@
     {
        if(adb_debug_mode == 2)
         {
-            system("echo 12 | emdlogger_ctrl");
+            system("echo 12 | emdlogger_ctrl socket");
         }
 
        usleep(200000); 
@@ -339,7 +339,7 @@
 
      if(adb_debug_mode == 2)
     {
-        system("echo 12 | emdlogger_ctrl");
+        system("echo 12 | emdlogger_ctrl socket");
     }
 
 
diff --git a/LYNQ_PUBLIC/IC_meta/mtk/2735/suspend-service/files/makefile b/LYNQ_PUBLIC/IC_meta/mtk/2735/suspend-service/files/makefile
old mode 100644
new mode 100755
index 75e1102..e17db4e
--- a/LYNQ_PUBLIC/IC_meta/mtk/2735/suspend-service/files/makefile
+++ b/LYNQ_PUBLIC/IC_meta/mtk/2735/suspend-service/files/makefile
@@ -10,6 +10,9 @@
                 -D__LINUX_OS__ \
                 -DECALL_SUPPORT
 
+ifeq ($(strip $(MOBILETEK_SUSPEND_CFG)), GSW)
+    LOCAL_CFLAGS += -DGSW_SUSPEND_CFG
+endif
 
 
 
diff --git a/LYNQ_PUBLIC/IC_meta/mtk/2735/suspend-service/lynq-autosuspend.bb b/LYNQ_PUBLIC/IC_meta/mtk/2735/suspend-service/lynq-autosuspend.bb
old mode 100644
new mode 100755
index 97046eb..ccf4034
--- a/LYNQ_PUBLIC/IC_meta/mtk/2735/suspend-service/lynq-autosuspend.bb
+++ b/LYNQ_PUBLIC/IC_meta/mtk/2735/suspend-service/lynq-autosuspend.bb
@@ -23,6 +23,9 @@
 
 OBJECTS = "$(SOURCES:.c=.o)"
 
+MOBILETEK_SUSPEND_CFG ?= ""
+EXTRA_OEMAKE += "'MOBILETEK_SUSPEND_CFG = ${MOBILETEK_SUSPEND_CFG}'"
+
 EXECUTABLE = "autosuspend"
 S = "${WORKDIR}"
 TARGET_CC_ARCH += "${LDFLAGS}"
diff --git a/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-codec/liblynq-codec/lynq_codec.c b/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-codec/liblynq-codec/lynq_codec.c
index 9cd770d..f42ba33 100755
--- a/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-codec/liblynq-codec/lynq_codec.c
+++ b/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-codec/liblynq-codec/lynq_codec.c
@@ -1,5 +1,9 @@
 #include <stdio.h>

 #include <stdlib.h>

+#include <fcntl.h>

+#include <linux/i2c-dev.h>

+#include <sys/ioctl.h>

+#include <unistd.h>

 #include "lynq_codec.h"

 #include <syslog.h>

 #include <log/log.h>

@@ -293,7 +297,7 @@
 

 void set_codec(media_src_t src, codec_op open_close)

 {

-    RLOGD("set_zk_3104_codec src=[%d] op=[%d]", src, open);

+    RLOGD("set_zk_3104_codec src=[%d] op=[%d]", src, open_close);

     set_zk_3104_codec(open_close);

 }

 

@@ -368,14 +372,14 @@
 

 int customer_get_pa_volume(int* volume)

 {

-    int file;

+int file;

     char *filename = "/dev/i2c-0";

     int addr = 0x6c;

     char buf[2];

 

-    if (volume < 1 || volume > 4)

+    if(volume == NULL)

     {

-        RLOGE("Invalid volume specified\n");

+        RLOGE("lynq_get_pa_volume Invalid pointer to volume\n");

         return -1;

     }

 

@@ -392,44 +396,35 @@
         return -1;

     }

 

-    switch (volume) {

-        case 1:

-            buf[0] = 0x03;

-            buf[1] = 0x00;  //Gain set to 20 dB

-            break;

-        case 2:

-            buf[0] = 0x03;

-            buf[1] = 0x78;  //Gain set to 26 dB

-            break;

-        case 3:

-            buf[0] = 0x03;

-            buf[1] = 0x80;  //Gain set to 32 dB

-            break;

-        case 4:

-            buf[0] = 0x03;

-            buf[1] = 0xc0;  //Gain set to 36 dB

-            break;

-    }

+    buf[0] = 0x03;

 

-    if (write(file, buf, 2) != 2)

+    if (write(file, buf, 1) != 1)

     {

         RLOGE("Failed to write to the i2c bus\n");

         close(file);

         return -1;

     }

 

-    RLOGE("Set the 0x%02x register value to 0x%02x\n", buf[0], buf[1]);

+    if (read(file, buf, 1) != 1)

+    {

+        RLOGE("Failed to read from the i2c bus\n");

+        close(file);

+        return -1;

+    }

 

     close(file);

 

+    *volume = (buf[0] >> 6) + 1;

+

     return 0;

+

 }

 

 #elif defined(GSW_CODEC_CFG)

 

 void set_codec(media_src_t src, codec_op open_close)

 {

-    RLOGD("set_gsw_3104_codec src=[%d] op=[%d]", src, open);

+    RLOGD("set_gsw_3104_codec src=[%d] op=[%d]", src, open_close);

     set_gsw_3104_codec(open_close);

 }

 

diff --git a/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-gnss/include/lynq_gnss.h b/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-gnss/include/lynq_gnss.h
index 362baaf..fac71b0 100755
--- a/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-gnss/include/lynq_gnss.h
+++ b/LYNQ_PUBLIC/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/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-gnss/makefile b/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-gnss/makefile
index f1ca7fc..fcf6780 100755
--- a/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-gnss/makefile
+++ b/LYNQ_PUBLIC/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/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-gnss/src/lynq_callback.c b/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-gnss/src/lynq_callback.c
index b8a402f..59a866a 100755
--- a/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-gnss/src/lynq_callback.c
+++ b/LYNQ_PUBLIC/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/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-gnss/src/lynq_gnss.c b/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-gnss/src/lynq_gnss.c
index a812738..6c8ba42 100755
--- a/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-gnss/src/lynq_gnss.c
+++ b/LYNQ_PUBLIC/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)