diff --git a/mbtk/libgsw_lib/gsw_voice_interface.c b/mbtk/libgsw_lib/gsw_voice_interface.c
index 499ada1..ce4fd2f 100755
--- a/mbtk/libgsw_lib/gsw_voice_interface.c
+++ b/mbtk/libgsw_lib/gsw_voice_interface.c
@@ -138,10 +138,18 @@
     GSW_END_ABNORMAL,
 } gsw_call_end_reason_enum;
 
-const char* g_normal_end_reason[] = {
-MBTK_VOICE_END_REASON_NORMAL_CALL_CLEARING,
-MBTK_VOICE_END_REASON_NORMAL_UNSPECIFIED, 
+typedef struct {
+    char mbtk_end_reason[64];
+    gsw_call_end_reason_enum end_reason;
+}end_reason_map_t;
+
+end_reason_map_t g_end_reason_map[4] = {
+{MBTK_VOICE_END_REASON_NORMAL_CALL_CLEARING, GSW_OTHER_END_NORMAL}, 
+{MBTK_VOICE_END_REASON_NORMAL_UNSPECIFIED, GSW_OTHER_END_NORMAL}, 
+{MBTK_VOICE_END_REASON_USER_ALERTING_NO_ANSWER, GSW_PEER_END_NORMAL}, 
+{MBTK_VOICE_END_REASON_CALL_REJECTED, GSW_PEER_END_NORMAL}, 
 };
+
 int gsw_global_end_reason = GSW_OTHER_END_NORMAL;
 
 //----------------end_reason end------------
@@ -149,8 +157,6 @@
 
 typedef uint32_t voice_client_handle_type;
 
-
-
 static mbtk_info_handle_t* call_info_handle = NULL;
 static int level_call = 0;
 int gsw_voice_init_flag = 0;
@@ -334,17 +340,17 @@
 {
     LOGE(GSW_VOICE,"mbtk_reason:%s\n", mbtk_reason);
     gsw_global_end_reason = GSW_END_ABNORMAL;
-    int length=sizeof (g_normal_end_reason)/ sizeof(g_normal_end_reason[0]);
+    
+    int length=sizeof (g_end_reason_map)/ sizeof(g_end_reason_map[0]);
     for(int i = 0; i<length; i++)
     {
-         if(0 == strncmp(mbtk_reason, g_normal_end_reason[i], strlen(g_normal_end_reason[i])))
+         if(0 == strncmp(mbtk_reason, g_end_reason_map[i].mbtk_end_reason, strlen(g_end_reason_map[i].mbtk_end_reason)))
          {
-            gsw_global_end_reason=GSW_OTHER_END_NORMAL;
+            gsw_global_end_reason = g_end_reason_map[i].end_reason;
+            LOGE(GSW_VOICE,"mbtk call end reason %s gsw reason:%d\n", mbtk_reason,gsw_global_end_reason);
             return;
          }
     }
-
-    return;
 }
 
 void gsw_call_state_change_cb(const void *data, int data_len)
@@ -443,7 +449,6 @@
     }
 }
 
-
 /**
 * @brief init voice sdk,and  register the status indicated callback function
 * @param  [in] CallStateInd ind: status indicated callback function
@@ -452,8 +457,6 @@
 */
 int32_t gsw_voice_sdk_init(CallStateInd ind)
 {
-    int ret;
-
     if (gsw_voice_init_flag == 1 && call_info_handle != NULL)
     {
         return GSW_HAL_SUCCESS;
@@ -465,18 +468,15 @@
         return GSW_HAL_ARG_INVALID;
     }
 
-    ret = mbtk_call_api_import();
+    int ret = mbtk_call_api_import();
     if(ret != 0)
     {
         LOGE(GSW_VOICE,"[gsw_voice_sdk_init]mbtk_call_api_import fail\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
-    if(ret < 0)
-    {
-        LOGE(GSW_VOICE,"mbtk_call_api_import fail,ret = %d\n",ret);
-        return GSW_HAL_NORMAL_FAIL;
-    }
+
+   
     if(call_info_handle == NULL)
     {
         call_info_handle = mbtk_info_handle_get();
