[Bugfix][API-853][GNSS]init deinit Adds fault tolerance
Change-Id: I1588f0ceadaa56e00fd5977d4d5c03b97c880123
(cherry picked from commit 3b578c4064a0bfad9f3bccf56fd90b663c2723fe)
diff --git a/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c b/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c
index 3565676..4d79d0f 100755
--- a/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c
+++ b/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c
@@ -42,6 +42,8 @@
*/
static int g_lynq_gnss_init_flag = 0;
+static int g_lynq_gnss_calback_flag = 0;
+
/**
* @brief mark gnss raw meas state
* 0: deinit state
@@ -56,6 +58,12 @@
RLOGD("init twice is not allowed");
return -1;
}
+ if (g_lynq_gnss_calback_flag == 0)
+ {
+ RLOGD("Plz Reg callback before init");
+ return -1;
+ }
+ g_lynq_gnss_init_flag = 1;
gpshal_set_gps_state_intent(GPSHAL_STATE_INIT);
gpshal2mnl_gps_init();
g_gpshal_ctx.mnl_retry_timer = mnldinf_init_timer(gpshal_mnl_retry_routine);
@@ -82,11 +90,17 @@
RLOGD("For cbs save error\r\n");
return -1;
}
+ g_lynq_gnss_calback_flag = 1;
return 0;
}
int lynq_gnss_deinit(void)
{
+ if (g_lynq_gnss_init_flag == 0)
+ {
+ RLOGD("deinit twice is not allowed");
+ return -1;
+ }
timer_t retry_timer;
gpshal_set_gps_state_intent(GPSHAL_STATE_CLEANUP);
gpshal2mnl_gps_cleanup();
@@ -101,6 +115,8 @@
return -1;
}
RLOGD("timer de init end");
+ g_lynq_gnss_calback_flag = 0;
+ g_lynq_gnss_init_flag = 0;
return 0;
}