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();