diff --git a/mbtk/libgsw_lib/gsw_sim_interface.c b/mbtk/libgsw_lib/gsw_sim_interface.c
index d85d7df..a3f66d6 100755
--- a/mbtk/libgsw_lib/gsw_sim_interface.c
+++ b/mbtk/libgsw_lib/gsw_sim_interface.c
@@ -9,7 +9,6 @@
 #define GSW_SIM_ICCID_LENGTH 20+1 
 #define GSW_SIM_IMSI_LENGTH 20+1 
 #define GSW_SIM_MSISDN_LENGTH 20+1
-#define GSW_SIM_IMEI_LENGTH 20+1
 
 //mbtk include
 typedef unsigned int uint32;
@@ -83,7 +82,6 @@
 int (*mbtk_imsi_get)(mbtk_info_handle_t* handle, void *imsi);
 int (*mbtk_iccid_get)(mbtk_info_handle_t* handle, void *iccid);
 int (*mbtk_phone_number_get)(mbtk_info_handle_t* handle, void *phone_number);
-int (*mbtk_imei_get)(mbtk_info_handle_t* handle, void *imei);
 int (*mbtk_set_modem_fun)(mbtk_info_handle_t* handle, mbtk_modem_info_t *info);
 int (*mbtk_sim_power_set)(int power);
 static void (*mbtk_log)(int level, const char *format, ...);
@@ -238,13 +236,7 @@
         return GSW_HAL_NORMAL_FAIL;
     }
 
-    mbtk_imei_get = (int (*)(mbtk_info_handle_t* handle, void *imei))dlsym(dlHandle_mbtk, "mbtk_imei_get");
-    if (mbtk_imei_get == NULL) 
-    {
-        LOGE("mbtk_imei_get dlsym fail\n");
-        return GSW_HAL_NORMAL_FAIL;
-    }
-
+   
     mbtk_sim_state_get = (int (*)(mbtk_info_handle_t* handle, mbtk_sim_state_enum *sim_state))dlsym(dlHandle_mbtk, "mbtk_sim_state_get");
     if (mbtk_sim_state_get == NULL) 
     {
@@ -319,9 +311,9 @@
 {
     int ret = -1;
 
-    if(sim_init_flag == 0 && sim_info_handle == NULL)
+    if(sim_init_flag == 0 || sim_info_handle == NULL)
     {
-        LOGE("sim sdk has been deinit\n");
+        printf("sim sdk has been deinit\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
@@ -349,12 +341,12 @@
  */
 int gsw_get_sim_status(int *sim_state)
 {
-    LOGD("gsw_get_sim_status enter\n");
+    printf("gsw_get_sim_status enter\n");
     int ret = -1;
 
-    if(sim_init_flag == 0 && sim_info_handle == NULL)
+    if(sim_init_flag == 0 || sim_info_handle == NULL)
     {
-        LOGE("sim sdk has been deinit\n");
+        printf("sim sdk has been deinit\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
@@ -423,9 +415,9 @@
 {
     int ret = -1;
 
-    if(sim_init_flag == 0 && sim_info_handle == NULL)
+    if(sim_init_flag == 0 || sim_info_handle == NULL)
     {
-        LOGE("sim sdk has been deinit\n");
+        printf("sim sdk has been deinit\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
@@ -462,9 +454,9 @@
 {
     int ret = -1;
 
-    if(sim_init_flag == 0 && sim_info_handle == NULL)
+    if(sim_init_flag == 0 || sim_info_handle == NULL)
     {
-        LOGE("sim sdk has been deinit\n");
+        printf("sim sdk has been deinit\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
@@ -501,7 +493,7 @@
 {
     int ret = -1;
 
-    if(sim_init_flag == 0 && sim_info_handle == NULL)
+    if(sim_init_flag == 0 || sim_info_handle == NULL)
     {
         printf("sim sdk has been deinit\n");
         return GSW_HAL_NORMAL_FAIL;
@@ -530,46 +522,6 @@
 }
 
 /**
- * @brief get imei function
- * @param  [in] len imei length,max is 20
- * @param  [out] imei return imei from this func
- * @retval 0: success
- * @retval other: fail
- */
-int gsw_get_imei(int len, char *imei)
-{
-    int ret = -1;
-
-    if(sim_init_flag == 0 && sim_info_handle == NULL)
-    {
-        LOGE("sim sdk has been deinit\n");
-        return GSW_HAL_NORMAL_FAIL;
-    }
-
-    if(imei == NULL)
-    {
-        LOGE("imei is NULL.");
-        return GSW_HAL_ARG_INVALID;
-    }
-
-    if(len < GSW_SIM_MSISDN_LENGTH)
-    {
-        LOGE("imei len is too short,len = %d\n", len);
-        return GSW_HAL_NORMAL_FAIL;
-    }
-
-    ret = mbtk_imei_get(sim_info_handle, (void *)imei);
-    if(ret != MBTK_ERR_OK)
-    {
-        LOGE("[gsw_sim] mbtk_imei_get fail [err = %d].", ret);
-        return GSW_HAL_NORMAL_FAIL;
-    }
-
-    return GSW_HAL_SUCCESS;
-}
-
-
-/**
  * @brief set sim power down
  * @param  
  * @retval 0: success
@@ -578,9 +530,9 @@
 int gsw_set_sim_power_down(void)
 {
     int ret = -1;
-    if(sim_init_flag == 0 && sim_info_handle == NULL)
+    if(sim_init_flag == 0 || sim_info_handle == NULL)
     {
-        LOGE("sim sdk has been deinit\n");
+        printf("sim sdk has been deinit\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
@@ -609,9 +561,9 @@
 int gsw_set_sim_power_up(void)
 {
     int ret = -1;
-    if(sim_init_flag == 0 && sim_info_handle == NULL)
+    if(sim_init_flag == 0 || sim_info_handle == NULL)
     {
-        LOGE("sim sdk has been deinit\n");
+        printf("sim sdk has been deinit\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
@@ -628,43 +580,3 @@
     
     return GSW_HAL_SUCCESS;
 }
-
-
-/**
- * @brief reset modem stack only, notice: after use this method, all ril sdk
- * need restart by app, means network, sim, sms, data need deinit then init!
- * @param  
- * @retval 0: success
- * @retval other: fail
- */
-int gsw_reset_modem(void)
-{
-    int ret = -1;
-    if(sim_init_flag == 0 && sim_info_handle == NULL)
-    {
-        LOGE("sim sdk has been deinit\n");
-        return GSW_HAL_NORMAL_FAIL;
-    }
-
-    mbtk_modem_info_t info;
-    info.fun = MBTK_DEV_MODEM_MIN_FUN;
-    info.rst = 0;
-
-    ret = mbtk_set_modem_fun(sim_info_handle, &info);
-    if(ret)
-    {
-        LOGE("[gsw_sim] mbtk_set_modem_fun fail [err = %d].", ret);
-        return GSW_HAL_NORMAL_FAIL;
-    }
-
-    sleep(1);
-
-    info.fun = MBTK_DEV_MODEM_FULL_FUN;
-    ret = mbtk_set_modem_fun(sim_info_handle, &info);
-    if(ret)
-    {
-        LOGE("[gsw_sim] mbtk_set_modem_fun fail [err = %d].", ret);
-        return GSW_HAL_NORMAL_FAIL;
-    }
-    return GSW_HAL_SUCCESS;
-}
\ No newline at end of file
