Fix mbtk_gnssd setting.
Change-Id: I3fc4664ff357f869466ee5aaf1648658493c64c8
diff --git a/mbtk/mbtk_gnssd/gnss_main.c b/mbtk/mbtk_gnssd/gnss_main.c
index b3ab5c6..688f8dc 100755
--- a/mbtk/mbtk_gnssd/gnss_main.c
+++ b/mbtk/mbtk_gnssd/gnss_main.c
@@ -17,7 +17,7 @@
#include "gnss_hd8122.h"
#define GNSS_DEBUG 1
-#define GNSS_UBUS_ENABLE 0
+#define GNSS_UBUS_ENABLE 1
#define GNSS_TAG "MBTK_GNSS"
#define GNSS_BUFF_SIZE 2048
@@ -37,7 +37,7 @@
gnss_info_t gnss_info;
-#if GNSS_UBUS_ENABLE
+#ifdef MBTK_GNSS_UBUS_ENABLE
struct ubus_context *gnss_ubus_init(void);
#else
int gnss_ipc_service_start();
@@ -45,8 +45,11 @@
int gnss_init_config(int fd);
-static char gnss_buff[GNSS_BUFF_SIZE*2] = {0};
-static uint32 gnss_buff_len = 0;
+static char nmea_buff[GNSS_BUFF_SIZE*2] = {0};
+static char data_buff[GNSS_BUFF_SIZE] = {0};
+static uint32 nmea_buff_len = 0;
+static uint32 data_buff_len = 0;
+
static bool nmea_found = FALSE;
#ifdef GNSS_DEBUG
static bool nmea_log_enable = FALSE;
@@ -262,7 +265,7 @@
static bool nmea_char_check(char ch)
{
if(isalnum(ch) || ch == '$' || ch == '\r' || ch == '\n' || ch == '.'
- || ch == ',' || ch == '*' || ch == '\0' || ch == '/')
+ || ch == ',' || ch == '*' || ch == '\0' || ch == '/' || ch == '_')
return TRUE;
return FALSE;
@@ -280,33 +283,40 @@
while(index < data_len) {
if(nmea_found) {
if(!nmea_char_check(data[index])) {
- gnss_buff_len = 0;
+ // Copy nmea_buff to data_buff
+ // Start with '$', but not nmea data, so copy to data_buff.
+ memcpy(data_buff + data_buff_len, nmea_buff, nmea_buff_len);
+ data_buff_len += nmea_buff_len;
+ data_buff[data_buff_len++] = data[index];
+
+ nmea_buff_len = 0;
nmea_found = FALSE;
-#if 0
- if(isascii(data[index])) {
- LOGD("\n\n###%c###%s\n\n", data[index], data);
- }
-#endif
continue;
}
if(data[index] != '\0') {
- gnss_buff[gnss_buff_len++] = data[index];
- if(gnss_buff[gnss_buff_len - 1] == '\n') {
-
- if(gnss_buff_len > 6 && gnss_buff[gnss_buff_len - 5] == '*') { // $XXX*YY\r\n
- gnss_nmea_process(gnss_buff, gnss_buff_len);
+ nmea_buff[nmea_buff_len++] = data[index];
+ if(nmea_buff[nmea_buff_len - 1] == '\n') {
+ if(data_buff_len > 0) {
+ gnss_info.gnss_set_cb(data_buff, data_buff_len);
+ data_buff_len = 0;
}
- gnss_buff_len = 0;
+ if(nmea_buff_len > 6 && nmea_buff[nmea_buff_len - 5] == '*') { // $XXX*YY\r\n
+ gnss_nmea_process(nmea_buff, nmea_buff_len);
+ }
+
+ nmea_buff_len = 0;
nmea_found = FALSE;
}
}
} else {
if(data[index] == '$') {
- gnss_buff_len = 0;
+ nmea_buff_len = 0;
nmea_found = TRUE;
- gnss_buff[gnss_buff_len++] = data[index];
+ nmea_buff[nmea_buff_len++] = data[index];
+ } else {
+ data_buff[data_buff_len++] = data[index];
}
}
index++;
@@ -331,8 +341,10 @@
fd_max = (gnss_info.fd > fd_max) ? gnss_info.fd : fd_max;
FD_SET(gnss_info.exit_fd[0], &fdr);
fd_max = (gnss_info.exit_fd[0] > fd_max) ? gnss_info.exit_fd[0] : fd_max;
- memset(gnss_buff, 0, sizeof(gnss_buff));
- gnss_buff_len = 0;
+ memset(nmea_buff, 0, sizeof(nmea_buff));
+ memset(data_buff, 0, sizeof(data_buff));
+ nmea_buff_len = 0;
+ data_buff_len = 0;
#if GNSS_DEBUG
int debug_fd = -1;
int debug_fd_len = 0;
@@ -628,6 +640,8 @@
return -1;
}
+ LOGD("gnss_ports_close() complete.");
+
gnss_info.fd = -1;
if(gnss_info.exit_fd[0] > 0) {
close(gnss_info.exit_fd[0]);
@@ -644,8 +658,10 @@
int gnss_set(const void* buf, unsigned int buf_len, void *cmd_rsp, int cmd_rsp_len)
{
- if(cmd_rsp && buf && buf_len > 0 && cmd_rsp_len > 0) {
- memset(cmd_rsp, 0, cmd_rsp_len);
+ if(buf && buf_len > 0) {
+ if(cmd_rsp && cmd_rsp_len > 0) {
+ memset(cmd_rsp, 0, cmd_rsp_len);
+ }
return gnss_info.gnss_set(gnss_info.fd, buf, cmd_rsp, cmd_rsp_len);
} else {
return -1;
@@ -764,7 +780,7 @@
}
// Init ubus and waitting IPC commands.
-#if GNSS_UBUS_ENABLE
+#ifdef MBTK_GNSS_UBUS_ENABLE
if(gnss_ubus_init()) {
LOGD("main() run...");
uloop_run();