[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];