gnss: add log save
Change-Id: I5bc9e30eba57c51f70db5b5e0cc7162b785286e8
diff --git a/mbtk/mbtk_gnssd/gnss_main.c b/mbtk/mbtk_gnssd/gnss_main.c
index c820489..3d48ea0 100755
--- a/mbtk/mbtk_gnssd/gnss_main.c
+++ b/mbtk/mbtk_gnssd/gnss_main.c
@@ -19,6 +19,7 @@
#include "gnss_hd8122.h"
#include "gnss_asr5311.h"
#include "gnss_n50db.h"
+#include "gnss_log.h"
#define GNSS_DEBUG 1
#define GNSS_UBUS_ENABLE 1
@@ -64,8 +65,6 @@
static int debug_fd_len = 0;
#endif
-static bool mbtk_gnss_time_set_flag = 0;
-
#if MBTK_GNSS_PTY_AUTO_INIT
static bool gnss_pty_print_enable = FALSE;
#endif
@@ -382,220 +381,6 @@
return TRUE;
}
-static int nmea_tokenizer_init(mbtk_nmeatokenizer* t, const char* head, const char* end, int param_num)
-{
- int count = 0;
- const char* p = head;
- const char* q = end;
- const char* tmp = NULL;
- // the initial '$' is optional
- if (p < q && p[0] == '$')
- {
- p += 1;
- }
- else
- {
- return -1;
- }
-
- //find '*',del '*25\r\n'
- // get rid of checksum at the end of the sentecne
- if (q >= p + 5 && q[-5] == '*')
- {
- q -= 5;
- }
- else
- {
- return -1;
- }
-
- while (p <= q)
- {
- tmp = memchr(p, ',', q-p);
- if (tmp == NULL)
- {
- tmp = q;
- }
- // if (q > p) {
- // q >= p include empty token: ,,
- if (tmp >= p)
- {
- if (count < MAX_NMEA_TOKENS)
- {
- t->tokens[count].head = p;
- t->tokens[count].end = tmp;
- count += 1;
- }
- }
-
- if (tmp <= q)
- {
- tmp += 1;
- }
-
- p = tmp;
- }
-
- if(count != param_num)
- {
- LOGD("count [%d], param_num [%d]", count, param_num);
- return -1;
- }
-
- t->count = count;
- return count;
-}
-
-static mbtk_token nmea_tokenizer_get(mbtk_nmeatokenizer* t, int index)
-{
- mbtk_token tok;
- static const char* dummy = "";
-
- if (index < 0 || index >= t->count)
- {
- tok.head = tok.end = dummy;
- }
- else
- {
- tok = t->tokens[index];
- }
- return tok;
-}
-
-static int mbtk_time_type_gnss_read() {
- int type = 0;
- char time_type[] ={0};
- property_get("persist.mbtk.time_type", time_type, "0");
-
- type = atoi(time_type);
-// LOGD("time_type :%d\n", type);
- if(type != LYNQ_TIME_TYPE_GNSS)
- mbtk_gnss_time_set_flag = 0;
-
- return type;
-}
-
-static int strstr_n(const char *s1, const char *s2)
-{
- int n;
- int strlen = 0;
-
- if(*s2)
- {
- while(*s1)
- {
- for(n = 0; *(s1+n) == *(s2 + n); n++)
- {
- if(!*(s2 + n + 1))
- {
- strlen++;
- return strlen;
- }
- }
- s1++;
- strlen++;
- }
- return 0;
- }
-
- return 0;
-}
-static int nmea_update_date_time(mbtk_token date, mbtk_token time)
-{
- char tmp_char[4] = {0};
- struct tm tmp_time;
- struct timeval tv;
-
- memset(&tmp_time, 0x0, sizeof(struct tm));
- if (date.head + 6 > date.end)
- {
- LOGD("date get fail");
- return -1;
- }
-
- memcpy(tmp_char, date.head, 2);
- tmp_time.tm_mday = atoi(tmp_char);
- memcpy(tmp_char, date.head + 2, 2);
- tmp_time.tm_mon = atoi(tmp_char) - 1;
- memcpy(tmp_char, date.head + 4, 2);
- tmp_time.tm_year = 100 + atoi(tmp_char);
-
- if (time.head + 6 > time.end)
- {
- LOGD("time get fail");
- return -1;
- }
-
- memcpy(tmp_char, time.head, 2);
- tmp_time.tm_hour = atoi(tmp_char);
- memcpy(tmp_char, time.head + 2, 2);
- tmp_time.tm_min = atoi(tmp_char);
- memcpy(tmp_char, time.head + 4, 2);
- tmp_time.tm_sec = atoi(tmp_char);
- tmp_time.tm_isdst = -1;
-
-
- LOGD("data:%d-%d-%d %d:%d:%d", tmp_time.tm_year + 1900,
- tmp_time.tm_mon,
- tmp_time.tm_mday,
- tmp_time.tm_hour,
- tmp_time.tm_min,
- tmp_time.tm_sec);
-
-
- time_t _t = mktime(&tmp_time);//parse location tmp_time
-
- tzset(); // auto set tz
- _t = _t - timezone;
-
- LOGD("timestamp:%ld, %ld", _t, timezone);
-
- tv.tv_sec = _t;
- if(settimeofday(&tv, NULL)) {
- LOGD("%s: , Set time fail\n", __func__);
- mbtk_gnss_time_set_flag = 0;
- } else {
- LOGD("%s: , Set time success \n", __func__);
- system("hwclock -w rtc0");
- mbtk_gnss_time_set_flag = 1;
- }
-
- return 0;
-}
-
-static int ind_nmea_parse(const char *data, int data_len)
-{
- int ret;
- mbtk_nmeatokenizer tzer = {0};
- if(strstr_n(data + 3, "RMC"))
- {
- ret = nmea_tokenizer_init(&tzer, data, data + data_len, NMEA_RMC_PARAM_NUM);
- if(ret < 0)
- {
- LOGD("nmea_tokenizer_init fail");
- return -1;
- }
-
- mbtk_token tok_time = nmea_tokenizer_get(&tzer,1);
- mbtk_token tok_fixStatus = nmea_tokenizer_get(&tzer,2);
- mbtk_token tok_date = nmea_tokenizer_get(&tzer,9);
-
- if(tok_fixStatus.head[0] == 'A')
- {
- ret = nmea_update_date_time(tok_date, tok_time);
- if(ret < 0)
- {
- LOGD("nmea_update_date_time fail");
- return -1;
- }
-
- }
- }
-
- return 0;
-}
-
-
static void gnss_nmea_process(const char *data, int data_len)
{
// LOGD("gnss_nmea_process() : data_len - %d", data_len);
@@ -628,8 +413,9 @@
log_save(nmea_log_fd, nmea, data_len);
#endif
- if( (mbtk_time_type_gnss_read() == LYNQ_TIME_TYPE_GNSS) && !mbtk_gnss_time_set_flag)
- ind_nmea_parse(nmea, data_len);
+#if MBTK_GNSS_PARAM_PARSE
+ gnss_ind_nmea_parse(nmea, data_len);
+#endif
nmea_print(nmea, data_len);
}
@@ -727,7 +513,11 @@
void* gnss_read_pthread(void* arg)
{
+#if MBTK_GNSS_TEST_LOG
+ gnss_test_log("gnss_read_pthread enter.");
+#endif
LOGD("gnss_read_pthread enter.");
+
char buffer[GNSS_BUFF_SIZE];
int len = 0;
int ret = 0;
@@ -754,6 +544,9 @@
}
#endif
+#if MBTK_GNSS_TEST_LOG
+ gnss_test_log("uart_fd - %d, exit_fd - %d", gnss_info.fd, gnss_info.exit_fd[0]);
+#endif
LOGD("uart_fd - %d, exit_fd - %d", gnss_info.fd, gnss_info.exit_fd[0]);
while(gnss_info.state >= GNSS_STATE_OPEN) {
@@ -783,6 +576,9 @@
{
continue;
}
+#if MBTK_GNSS_TEST_LOG
+ gnss_test_log("select error, errno = %d (%s)", errno, strerror(errno));
+#endif
LOGE("select error, errno = %d (%s)", errno, strerror(errno));
break;
}
@@ -833,6 +629,9 @@
}
else
{
+#if MBTK_GNSS_TEST_LOG
+ gnss_test_log("Unknown select event.");
+#endif
LOGW("Unknown select event.");
continue;
}
@@ -912,6 +711,10 @@
int gnss_init(uint32 print_port)
{
+#if MBTK_GNSS_TEST_LOG
+ gnss_test_log("[gnss_init] gnss state [%d]", gnss_info.state);
+#endif
+
if(gnss_info.state != GNSS_STATE_CLOSE) {
LOGW("GNSS not close:%d", gnss_info.state);
if(gnss_info.state == GNSS_STATE_READY) {
@@ -1020,6 +823,10 @@
LOGD("GNSS open success.");
+#if MBTK_GNSS_TEST_LOG
+ gnss_test_log("gnss open success.");
+#endif
+
return gnss_ports_open(print_port);
exit_with_thread_exit:
@@ -1047,6 +854,10 @@
int gnss_deinit()
{
+#if MBTK_GNSS_TEST_LOG
+ gnss_test_log("[gnss_deinit] gnss state [%d]", gnss_info.state);
+#endif
+
if(gnss_info.state == GNSS_STATE_CLOSE) {
LOGW("GNSS is closed.");
return GNSS_ERR_OK;
@@ -1069,6 +880,10 @@
}
gnss_info.state = GNSS_STATE_CLOSING;
+
+#if MBTK_GNSS_TEST_LOG
+ gnss_test_log("wait gnss pthread exit...");
+#endif
int ret = pthread_join(gnss_info.read_pid, NULL);
if(ret){
LOGE("pthrad_join fail(%d)",ret);
@@ -1085,6 +900,9 @@
return GNSS_ERR_UNKNOWN;
}
+#if MBTK_GNSS_TEST_LOG
+ gnss_test_log("gnss_ports_close() complete.");
+#endif
LOGD("gnss_ports_close() complete.");
gnss_info.fd = -1;
@@ -1097,7 +915,11 @@
gnss_info.exit_fd[1] = -1;
}
gnss_info.state = GNSS_STATE_CLOSE;
+#if MBTK_GNSS_TEST_LOG
+ gnss_test_log("gnss close success.");
+#endif
LOGD("GNSS close success.");
+
return GNSS_ERR_OK;
}
@@ -1336,6 +1158,9 @@
}
#endif
+#if MBTK_GNSS_TEST_LOG
+ gnss_test_log("gnss init success.");
+#endif
// Init ubus and waitting IPC commands.
#ifdef MBTK_GNSS_UBUS_ENABLE
if(gnss_ubus_init()) {