diff --git a/mbtk/test/libmbtk_ecall/Makefile b/mbtk/test/libmbtk_ecall/Makefile
index 8d29a6a..a8a941b 100755
--- a/mbtk/test/libmbtk_ecall/Makefile
+++ b/mbtk/test/libmbtk_ecall/Makefile
@@ -5,13 +5,18 @@
 
 LIB_DIR +=
 
-LIBS += -lmbtk_lib -lmbtk_net -lmbtk_coap
+LIBS += -lmbtk_lib
 
-CFLAGS += 
+CFLAGS +=
 
 DEFINE +=
 
-LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+# LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+ifeq ($(MBTK_SOURCE_VERSION), 2)
+LOCAL_SRC_FILES = mbtk_ecall_test_v2.c
+else
+LOCAL_SRC_FILES = mbtk_ecall_test_v1.c
+endif
 
 $(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES))
 
diff --git a/mbtk/test/libmbtk_ecall/mbtk_ecall_test_v1.c b/mbtk/test/libmbtk_ecall/mbtk_ecall_test_v1.c
new file mode 100755
index 0000000..0f18108
--- /dev/null
+++ b/mbtk/test/libmbtk_ecall/mbtk_ecall_test_v1.c
@@ -0,0 +1,143 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <netinet/in.h>
+#include <pthread.h>
+#include <sys/epoll.h>
+#include <string.h>
+#include <fcntl.h>
+#include <signal.h>
+
+#include "mbtk_info_api.h"
+
+static mbtk_info_handle_t* info_handle = NULL;
+
+
+static void help()
+{
+    printf("msdcfg <item> <value>: Set MSD item value.\n");
+    printf("msdgen: Generate MSD by items.\n");
+    printf("msd <MSD>: Get/Set MSD.\n");
+    printf("msdpush: PUSH MSD.\n");
+    printf("only <0-5> <test_num> <reconfig_num>: Get/Set ecall only mode.\n");
+    printf("reg 0/1: Set ecall reg mode.\n");
+    printf("dial <0-5>: Get/Start ecall dial.\n");
+    printf("mode EU/ERA: Get/Set ecall mode\n");
+    printf("cfg <type> <value>: Get/Set ecall config item.\n");
+    printf("sms_num <number>: Get/Set sms number.\n");
+    printf("mute_spk <0/1>: Set spk mute or not.\n");
+    printf("gain <0/1/2> <gain>: Set ecall DSP gain.\n");
+}
+
+static void ecall_state_change_cb(const void* data, int data_len)
+{
+    if(data)
+    {
+        mbtk_ril_ecall_state_info_t *ecall_data = (mbtk_ril_ecall_state_info_t*)data;
+        printf("ecall state change : urc_id - %d, urc_data - %s\n", ecall_data->urc_id, ecall_data->urc_data);
+    }
+}
+
+
+static void sig_process(int sig)
+{
+    LOGI("I got signal %d\n", sig);
+    switch(sig)
+    {
+        case SIGINT: // Ctrl + C
+        {
+            LOGI("Exit by SIGINT.\n");
+            mbtk_info_handle_free(&info_handle);
+            exit(0);
+        }
+        case SIGQUIT: // Ctrl + \ (类似 SIGINT ，但要产生core文件)
+        {
+            LOGI("Exit by SIGQUIT.\n");
+            mbtk_info_handle_free(&info_handle);
+            exit(0);
+        }
+        case SIGTERM:// 默认kill   (同 SIGKILL ，但 SIGKILL 不可捕获)
+        {
+            LOGI("Exit by SIGTERM.\n");
+            mbtk_info_handle_free(&info_handle);
+            exit(0);
+        }
+        case SIGTSTP:// Ctrl + Z (同 SIGSTOP ，但 SIGSTOP 不可捕获)
+        {
+            LOGI("Exit by SIGTSTP.\n");
+            exit(0);
+        }
+        case SIGSEGV: // 如空指针
+        {
+            LOGI("Exit by SIGSEGV.\n");
+            exit(0);
+        }
+        default:
+        {
+            LOGI("Unknown sig:%d\n",sig);
+            break;
+        }
+    }
+}
+
+int main(int argc, char *argv[])
+{
+    signal(SIGINT, sig_process);
+    signal(SIGQUIT, sig_process);
+    signal(SIGTERM, sig_process);
+    //signal(SIGTSTP, sig_process);
+    //signal(SIGSEGV, sig_process);
+
+    mbtk_log_init("radio","ECALL_CLI");
+
+#ifdef MBTK_DUMP_SUPPORT
+    mbtk_debug_open(NULL, TRUE);
+#endif
+
+    //test2(0, "192.168.1.198");
+    //test2(1, "2409:8162:140:cd3c:1:2:1494:72ba");
+    //test2(1, "254.128.0.0.0.0.0.0.0.1.0.2.144.5.212.239");
+    //test2(1, "2400:3200::1");
+
+    info_handle = mbtk_info_handle_get();
+    if(!info_handle)
+    {
+        return -1;
+    }
+
+    mbtk_ecall_state_change_cb_reg(info_handle, ecall_state_change_cb);
+
+    printf(">>>>>>>>>>>>>>>>>>>>>>>>Enter cmd:\n");
+    char cmd[1024];
+    while(1)
+    {
+        memset(cmd, 0, sizeof(cmd));
+        if(fgets(cmd, sizeof(cmd), stdin))
+        {
+            char *ptr = cmd + strlen(cmd) - 1;
+            while(ptr >= cmd && (*ptr == '\r' || *ptr == '\n'))
+            {
+                *ptr-- = '\0';
+            }
+			
+			if(!strcasecmp(cmd, "h") || !strcasecmp(cmd, "help")) {
+                help();
+            } else if(!strcasecmp(cmd, "q")) {
+                break;
+            } else {
+                printf("\n");
+            }
+        }
+    }
+
+exit:
+    mbtk_info_handle_free(&info_handle);
+
+    LOG("Client exec complete.");
+
+    return 0;
+}
+
