[Bugfix][T106BUG-135]after gnss init,execute deinit immediately will caton.
Only Configure:No;
Affected branch:master;
Affected module:Gnss;
Is it affected on both ZXIC and MTK: only ZXIC;
Self-test: Yes;
Doc Update:No

Change-Id: I1ce25d58b2d2c59c83c05fd5331b119644434b07
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/mbtk_gnss.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/mbtk_gnss.cpp
index 97744ac..b90ff63 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/mbtk_gnss.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/mbtk_gnss.cpp
@@ -62,7 +62,8 @@
 static pthread_mutex_t loc_cond_mutex_r = PTHREAD_MUTEX_INITIALIZER;
 static pthread_cond_t loc_sync_cond = PTHREAD_COND_INITIALIZER;
 #endif
-
+volatile int nmea_state = 0;
+volatile int nmea_reading = 0;
 static struct mbtk_gnss_cmd_msg_t mbtk_gnss_cmd_msg_map[] = {
 { 1,     "$OK",         NULL,                 0},
 { 2,     "$Fail",       NULL,                 0},
@@ -736,6 +737,7 @@
 
     memset(buf, 0, sizeof(buf));
     mbtk_gnss_handle->getap_status = 0;
+
     while(mbtk_gnss_handle->inited)
     {
         while(mbtk_gnss_handle->getap_status){
@@ -743,13 +745,18 @@
             printf("g");
             usleep(100000);
         }
-        ret = mopen_gnss_read(gnss_handle->dev_fd, buf, MBTK_UART_RECV_BUFFER_SIZE);
-        if(ret > 0) {
-            printf("read: [%d] %s\n", ret, buf);
-            ring_buffer_queue_arr(&gnss_handle->ring_buffer, buf, ret);
-            memset(buf, 0, sizeof(buf));
-        } else {
-            gnss_log("read error\n");
+        if(nmea_state == 1)
+        {
+            nmea_reading = 1;
+            ret = mopen_gnss_read(gnss_handle->dev_fd, buf, MBTK_UART_RECV_BUFFER_SIZE);
+            nmea_reading = 0;
+            if(ret > 0) {
+                printf("read: [%d] %s\n", ret, buf);
+                ring_buffer_queue_arr(&gnss_handle->ring_buffer, buf, ret);
+                memset(buf, 0, sizeof(buf));
+            } else {
+                gnss_log("read error\n");
+            }
         }
         usleep(100000);
     }
@@ -853,6 +860,15 @@
 
     if(0 == state)
     {
+        nmea_state = 0;
+        for(int cont = 0; cont < 200; cont++)
+        {
+            if (nmea_reading == 0)
+            {
+                break;
+            }
+            usleep(10000);
+        }
         ret = exec_cmd(cmd,NULL);
         if(0 != ret)
         {
@@ -863,11 +879,13 @@
         if(0 != ret)
         {
             printf("stop fail %x\n", ret);
-        }
+        }   
     }
 
     if(1 == state)
     {
+        nmea_state = 1;
+
         ret = exec_cmd(cmd,NULL);
         if(0 != ret)
         {