[bugfix][T108][bug-view-1470][GNSS] The execution of the API for the GNSS function of the Gaoxing version without initialization will result in a segmentation error
Only Configure: No
Affected branch: GSW_V1453
Affected module: GNSS
Is it affected on IC: only ASR
Self-test: yes
Doc Update: no
Change-Id: Ia053358ae98a5ec1fe6438bfaffc56b0af2a3ebc
diff --git a/mbtk/libgsw_lib/gsw_gnss_interface.c b/mbtk/libgsw_lib/gsw_gnss_interface.c
index 2bd3959..8448a3b 100755
--- a/mbtk/libgsw_lib/gsw_gnss_interface.c
+++ b/mbtk/libgsw_lib/gsw_gnss_interface.c
@@ -263,6 +263,9 @@
*/
int gsw_gnss_set_freq(int freq)
{
+ if(!inited)
+ return GSW_HAL_FAIL;
+
int ret;
if (!strated)
{
@@ -289,6 +292,9 @@
*/
int gsw_gnss_set_start_mode(GSW_GNSS_MODE_CONFIGURATION start_mode)
{
+ if(!inited)
+ return GSW_HAL_FAIL;
+
int ret;
if (!strated)
{
@@ -320,6 +326,9 @@
*/
int gsw_gnss_epo_switch(GSW_CONF_SWITCH switch_op)
{
+ if(!inited)
+ return GSW_HAL_FAIL;
+
int ret;
if (!strated)
{
@@ -436,6 +445,9 @@
*/
int gsw_gnss_reg_cb_group(gsw_gnss_cb callback)
{
+ if(!inited)
+ return GSW_HAL_FAIL;
+
if(callback.gsw_location_cb == NULL && callback.gsw_nmea_cb == NULL)
{
LOGE("[GSW_gnss] handler_ptr is NULL.");
@@ -463,6 +475,14 @@
int gsw_gnss_start(void)
{
int ret;
+ if(!inited)
+ return GSW_HAL_FAIL;
+ ret = system("/usr/sbin/gnss_gpio.sh on > /dev/null 2>&1");
+ if(ret != 0)
+ {
+ LOGE("[GSW_gnss] gnss_gpio.sh on fail.ret = [%d]", ret);
+ return GSW_HAL_FAIL;
+ }
mbtk_gnss_open=(int(*)(int,int))dlsym(dlHandle_gnss, "mbtk_gnss_open");
ret = mbtk_gnss_open(255, QSER_GNSS_TIMEOUT);
if(ret != 0)
@@ -470,12 +490,6 @@
LOGE("[GSW_gnss] mbtk_gnss_open is error.ret = [%d]", ret);
return GSW_HAL_FAIL;
}
- ret = system("/usr/sbin/gnss_gpio.sh on > /dev/null 2>&1");
- if(ret != 0)
- {
- LOGE("[GSW_gnss] gnss_gpio.sh on fail.ret = [%d]", ret);
- return GSW_HAL_FAIL;
- }
strated = true;
/*
@@ -500,13 +514,8 @@
int gsw_gnss_stop(void)
{
int ret;
- ret = system("/usr/sbin/gnss_gpio.sh off > /dev/null 2>&1");
-
- if(ret != 0)
- {
- LOGE("[GSW_gnss] gnss_gpio.sh off fail.ret = [%d]", ret);
+ if(!inited)
return GSW_HAL_FAIL;
- }
mbtk_gnss_close=(int(*)(int))dlsym(dlHandle_gnss, "mbtk_gnss_close");
ret = mbtk_gnss_close(QSER_GNSS_TIMEOUT);
if(ret != 0)
@@ -514,6 +523,12 @@
LOGE("[GSW_gnss] mbtk_gnss_close is error.ret = [%d]", ret);
return GSW_HAL_FAIL;
}
+ ret = system("/usr/sbin/gnss_gpio.sh off > /dev/null 2>&1");
+ if(ret != 0)
+ {
+ LOGE("[GSW_gnss] gnss_gpio.sh off fail.ret = [%d]", ret);
+ return GSW_HAL_FAIL;
+ }
strated = false;
return GSW_HAL_SUCCESS;
}
@@ -527,6 +542,8 @@
int gsw_gnss_deinit(void)
{
int ret;
+ if(!inited)
+ return GSW_HAL_FAIL;
if(inited)
{
mbtk_gnss_deinit=(int(*)())dlsym(dlHandle_gnss, "mbtk_gnss_deinit");
@@ -576,6 +593,9 @@
*/
int gsw_gnss_delete_aiding_data(unsigned int flags) /*1-don`t delete == hot_start ; 2-delete EPH == warm start ; 3-delete all == cold start*/
{
+ if(!inited)
+ return GSW_HAL_FAIL;
+
int ret;
char param_buf[32] = {0};
snprintf(param_buf, 32, "$RESET,%u", flags);