Merge "[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"
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)
{