[Feature][T8TSK-313]Print CN values to syslog every 10 seconds

Only Configure: No
Affected branch: master
Affected module: gnss
Is it affected on both ZXIC and MTK: only MTK
Self-test: Yes
Doc Update: No

Change-Id: I4017e64b2669741a366f6f1522cbd44d07d89739
diff --git a/IC_meta/mtk/2735/liblynq-gnss/liblynq-gnss.bb b/IC_meta/mtk/2735/liblynq-gnss/liblynq-gnss.bb
index d9c78b8..7a6ef90 100755
--- a/IC_meta/mtk/2735/liblynq-gnss/liblynq-gnss.bb
+++ b/IC_meta/mtk/2735/liblynq-gnss/liblynq-gnss.bb
@@ -23,6 +23,11 @@
 MOBILETEK_GNSS_SYNC_TIME_CFG ?= "no"

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

 

+MOBILETEK_GNSS_CN_OUTPUT_SYSLOG ?= "no"

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

+

+

+

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

                ${base_bindir}\

                ${base_sbindir} \

diff --git a/IC_src/mtk/lib/liblynq-gnss/makefile b/IC_src/mtk/lib/liblynq-gnss/makefile
index fcf6780..051046c 100755
--- a/IC_src/mtk/lib/liblynq-gnss/makefile
+++ b/IC_src/mtk/lib/liblynq-gnss/makefile
@@ -45,6 +45,12 @@
     LOCAL_CFLAGS += -DGNSS_SYNC_TIME_CFG

 endif

 

+ifeq ($(strip $(MOBILETEK_GNSS_CN_OUTPUT_SYSLOG)), yes)

+    LOCAL_CFLAGS += -DGNSS_CN_OUTPUT_SYSLOG

+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 1c236be..ccb6a27 100755
--- a/IC_src/mtk/lib/liblynq-gnss/src/lynq_callback.c
+++ b/IC_src/mtk/lib/liblynq-gnss/src/lynq_callback.c
@@ -10,6 +10,7 @@
 #include <fcntl.h>

 #include <sys/stat.h>

 #include <time.h>

+#include <stdlib.h>

 

 #include"lynq_gnsshal.h"

 #include"mtk_lbs_utility.h"

@@ -63,6 +64,13 @@
 extern int g_ttyGS_fd;

 extern bool Open_ELT;

 #endif

+#ifdef GNSS_CN_OUTPUT_SYSLOG

+char GSV_SNR[256] = {0};

+int arr[64] = {0};

+extern int frequency_turn;

+int count = 0;

+int nmea_count = 0;

+#endif

 

 static inline int update_systime_time(GpsUtcTime gpstime)

 {

@@ -88,8 +96,67 @@
     return 0;

 }

 

+void parse_gpgsv(const char* sentence)

+{

+    int comma_count = 0;

+    char* token;

+    char tmp[128] = {0};

+    char copy[128] = {0};

+    strcpy(copy,sentence);

+    for (int i = 0; copy[i] != '*'; i++) // NMEA statement ends with  "*"

+    {

+        if (copy[i] == ',')

+        {

+            comma_count++;

+            /*in the GSV of NMEA,the value after the 7th, 11th, 15th, and 19th commas is the CN value */

+            if (comma_count == 7 || comma_count == 11 || comma_count == 15 || comma_count == 19)

+            {

+                if(copy[i+1] == ',')

+                {

+                    i+=2;

+                    comma_count++;

+                    continue;

+                }

+                /*strtok will change the original sentence content, before strtok, copy and save the remaining sentences*/

+                strcpy(tmp,copy+i+1);

+                token = strtok(copy+i+1, ",");

+                if (strcmp(token,"")!=0)

+                {

+                    count %= 64;

+                    arr[count++] = atoi(token); // save CN_VALUE in arr[]

+                }

+                strcpy(copy+i+1,tmp);  // restore the original sentence content

+            }

+        }

+    }

+}

+

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

 {

+#ifdef GNSS_CN_OUTPUT_SYSLOG

+if (strncmp(nmea+3,NMEA_RMC,strlen(NMEA_RMC))==0)

+    nmea_count++;

+if (nmea_count/frequency_turn == 10 && strncmp(nmea+3,NMEA_GSV,strlen(NMEA_GSV))==0)

+{

+    parse_gpgsv(nmea);

+}

+if (nmea_count/frequency_turn == 11)

+{

+    for(int i=0; i < count; i++)

+    {

+        if(strlen(GSV_SNR)>0)

+        {

+            strcat(GSV_SNR,",");

+        }

+        sprintf(GSV_SNR,"%s%d",GSV_SNR,arr[i]);

+    }

+    RLOGE("CN_VALUE:%s\n",GSV_SNR);

+    memset(arr,0,sizeof(int)*64);

+    memset(GSV_SNR,0,strlen(GSV_SNR));

+    nmea_count = 0;

+    count = 0;

+}

+#endif

 #ifdef GNSS_ELT_OUTPUT_CFG

     int ret;

     time_t reopen_end;

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 0f9181f..0e23edf 100755
--- a/IC_src/mtk/lib/liblynq-gnss/src/lynq_gnss.c
+++ b/IC_src/mtk/lib/liblynq-gnss/src/lynq_gnss.c
@@ -51,7 +51,7 @@
 int g_gnss_sync_enable_flag = 0;

 int g_gnss_sync_done = 0;

 #endif

-

+int frequency_turn = 1;

 enum

 {

     Gnss_ok = 0,

@@ -387,7 +387,7 @@
 

 int lynq_gnss_output_frequency_set(int frequency)

 {

-    int frequency_turn = frequency;

+    frequency_turn = frequency;

 

     int freq_num = 1000/frequency_turn;

     char freq[LYNQ_MAX_FRREQUENCY];