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