Baseline update from LYNQ_SDK_ASR_T108_V05.03.01.00(kernel build error.)

Change-Id: I56fc72cd096e82c589920026553170e5cb9692eb
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/Makefile b/mbtk/test/Mobiletek_Tester_RDIT/Makefile
new file mode 100755
index 0000000..150ba51
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/Makefile
@@ -0,0 +1,56 @@
+BUILD_ROOT = $(shell pwd)/../..
+include $(BUILD_ROOT)/Make.defines
+
+INC_DIR += 
+
+LIB_DIR += -I.
+
+LIBS += -lmbtk_lib -llynq_lib -ldl -lprop2uci
+
+CFLAGS = $(CFLAGS_TEST)
+
+DEFINE +=
+
+LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+
+LOCAL_SRC_FILES = $(wildcard src/*.c) $(wildcard src/*.cpp)
+OBJS = $(patsubst %.c, %.o, $(patsubst %.cpp, %.o, $(LOCAL_SRC_FILES)))
+$(info OBJS = $(OBJS))
+
+SOURCES = main.cpp dispatch.cpp sms.cpp network.cpp data.cpp qser-voice.cpp sim.cpp
+SOURCES_TOOL = sms.cpp network.cpp data.cpp qser-voice.cpp sim.cpp dispatch.cpp socket-tool.cpp
+
+EXECUTABLE := $(OUT_DIR)/bin/Mobiletek-Tester-RDIT
+EXEC_TOOL =  $(OUT_DIR)/bin/socket-tool
+
+#EXECUTABLE := Mobiletek-Tester-RDIT
+#EXEC_TOOL := socket-tool
+
+OBJECTS=$(SOURCES:.cpp=.o)
+
+OBJECTS_TOOL=$(SOURCES_TOOL:.cpp=.o)
+
+all: $(EXECUTABLE) $(EXEC_TOOL)
+
+$(EXECUTABLE): $(OBJECTS)
+	@echo "  BIN     $@"
+	$(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $(OBJECTS) -o $@
+
+%.o:%.c
+	$(CC) $(CFLAGS) $(INC_DIR) $(LIBS) $(DEFINE) -c $< -o $@
+	
+%.o:%.cpp
+	$(CC) $(CFLAGS) $(INC_DIR) $(LIBS) $(DEFINE) -c $< -o $@
+
+$(EXEC_TOOL): $(OBJECTS_TOOL)
+	@echo "  BIN     $@"
+	$(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $(OBJECTS_TOOL) -o $@
+
+%.o:%.c
+	$(CC) $(CFLAGS) $(INC_DIR) $(LIBS) $(DEFINE) -c $< -o $@
+	
+%.o:%.cpp
+	$(CC) $(CFLAGS) $(INC_DIR) $(LIBS) $(DEFINE) -c $< -o $@
+
+clean:
+	rm -f $(OBJECTS) $(OBJECTS_TOOL) $(EXECUTABLE) $(EXEC_TOOL)
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/cc.cpp b/mbtk/test/Mobiletek_Tester_RDIT/cc.cpp
new file mode 100755
index 0000000..8c5b2ad
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/cc.cpp
@@ -0,0 +1,41 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "lynq_call.h"
+#include "cc.h"
+#define TEST_RESULT "lynq_result="
+
+static int handle = 0;
+
+int init_call(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = -1;
+    int uToken = atoi(argv[1]);
+    ret = lynq_init_call(uToken);
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret;
+}
+int dial_test(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = -1;
+    ret = lynq_call(&handle,argv[1]);
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret;
+}
+int answer_test(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = -1;
+    ret = lynq_call_answer();
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret;
+}
+int hungup_test(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = -1;
+    ret = lynq_call_hungup(&handle);
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret;
+}
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/cc.h b/mbtk/test/Mobiletek_Tester_RDIT/cc.h
new file mode 100755
index 0000000..a746002
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/cc.h
@@ -0,0 +1,4 @@
+int init_call(int argc, char *argv[], int sp_test);
+int dial_test(int argc, char *argv[], int sp_test);
+int answer_test(int argc, char *argv[], int sp_test);
+int hungup_test(int argc, char *argv[], int sp_test);
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/data.cpp b/mbtk/test/Mobiletek_Tester_RDIT/data.cpp
new file mode 100755
index 0000000..e628023
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/data.cpp
@@ -0,0 +1,458 @@
+#include <stdio.h>

+#include <stdlib.h>

+#include <string.h>

+#include <sys/socket.h>

+#include <netinet/in.h>

+#include <arpa/inet.h>

+#include "lynq_data.h"

+#include "lynq_qser_data.h"

+#include "data.h"

+#define TEST_RESULT "lynq_result="

+

+// int init_data(int argc, char *argv[], int sp_test)

+// {   

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     int uToken = atoi(argv[1]);

+//     ret = lynq_init_data(uToken);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     return ret;

+// }

+// int deinit_data(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     ret = lynq_deinit_data();

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     return ret;

+// }

+// int setup_data_call(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     int handle = atoi(argv[1]);

+

+//     ret = lynq_setup_data_call(&handle);

+    

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     printf("handle = %d\n", handle);

+//     return ret;

+// }

+// int deactivte_data_call(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     int handle = atoi(argv[1]);

+

+//     ret = lynq_deactive_data_call(&handle);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     return ret;   

+// }

+// int wait_data_call(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     int handle = atoi(argv[1]);

+

+//     ret = lynq_wait_data_call_state_change(&handle);

+//     printf("LYNQ_WAIT_DATA_CALL: handle = %d\n", handle);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     return ret;   

+// }

+// int setup_data_call_sp(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     int flag = atoi(argv[5]);

+//     int handle = atoi(argv[1]);

+

+//     ret = lynq_setup_data_call_sp(&handle, argv[2], argv[3], NULL, NULL, NULL, argv[4], NULL);

+    

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     printf("handle = %d\n", handle);

+//     return ret;

+// }

+// int get_data_call_list(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     int handle = atoi(argv[1]);

+//     lynq_data_call_response_v11_t dataCallList = {-1, -1, -1, -1,"", "", "", "", "", "", -1};

+

+//     ret = lynq_get_data_call_list(&handle, &dataCallList);

+

+//     printf("LYNQ_GET_DATA_CALL_LIST: handle = %d\n", handle);

+//     printf("LYNQ_GET_DATA_CALL_LIST: status=%d, suggestedRetryTime=%d, cid=%d, active=%d, type=%s, ifname=%s, addresses=%s, dnses=%s, gateways=%s, pcscf=%s, mtu=%d\n",

+//         dataCallList.status, dataCallList.suggestedRetryTime, dataCallList.cid, dataCallList.active, 

+//         dataCallList.type, dataCallList.ifname, dataCallList.addresses, dataCallList.dnses, dataCallList.gateways, dataCallList.pcscf, 

+//         dataCallList.mtu);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     return ret;  

+// }

+//=====================================QSER-DATA=========================================================

+

+qser_data_call_state_s state = {0};

+void evt_cb(qser_data_call_state_s *state)

+{

+    char buf_ip[64] = {0};

+    char buf_gateway[64] = {0};

+    char buf_pri_dns[64] = {0};

+    char buf_sec_dns[64] = {0};

+    printf("LYNQ_QSER_DATA_INIT: profile_idx=%d, name=%s, ip_family=%d, state=%d, error=%d\n"

+        , state->profile_idx, state->name, state->ip_family, state->state, state->err);

+    printf("LYNQ_QSER_DATA_INIT: v4.ip=%s\n"

+        , inet_ntoa(state->v4.ip));

+    printf("LYNQ_QSER_DATA_INIT: v4.gateway=%s\n"

+        , inet_ntoa(state->v4.gateway));

+    printf("LYNQ_QSER_DATA_INIT: v4.pri_dns=%s\n"

+        , inet_ntoa(state->v4.pri_dns));

+    printf("LYNQ_QSER_DATA_INIT: v4.sec_dns=%s\n"

+        , inet_ntoa(state->v4.sec_dns));

+    inet_ntop(AF_INET6, &(state->v6.ip), buf_ip, sizeof(buf_ip));

+    inet_ntop(AF_INET6, &(state->v6.gateway), buf_gateway, sizeof(buf_gateway));

+    inet_ntop(AF_INET6, &(state->v6.pri_dns), buf_pri_dns, sizeof(buf_pri_dns));

+    inet_ntop(AF_INET6, &(state->v6.sec_dns), buf_sec_dns, sizeof(buf_sec_dns));

+    printf("LYNQ_QSER_DATA_INIT: v6.ip=%s, v6.gateway=%s, v6.pri_dns=%s, v6.sec_dns=%s\n"

+        , buf_ip, buf_gateway, buf_pri_dns, buf_sec_dns);

+}

+

+int qser_init_data(int argc, char *argv[], int sp_test)

+{   

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+    int ret = -1;

+    int uToken = atoi(argv[1]);

+    ret = qser_data_call_init(evt_cb);

+    printf("%s%d\n",TEST_RESULT,ret);

+    return ret;

+}

+

+int qser_deinit_data(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+

+    qser_data_call_destroy();

+    printf("LYNQ_QSER_DATA_DEINIT end\n");

+    return 0;

+}

+int qser_setup_data_call(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+    int ret = -1;

+    qser_data_call_s datacall;

+    qser_data_call_error_e err = QSER_DATA_CALL_ERROR_NONE;

+    int ip_family_flag = atoi(argv[3]);

+

+    datacall.profile_idx = atoi(argv[1]);

+    datacall.reconnect = (bool)atoi(argv[2]);

+

+    if(strcmp(argv[3], "QSER_DATA_CALL_TYPE_IPV4") == 0)

+    {

+        datacall.ip_family = QSER_DATA_CALL_TYPE_IPV4;

+    }

+    else if(strcmp(argv[3], "QSER_DATA_CALL_TYPE_IPV6") == 0)

+    {

+        datacall.ip_family = QSER_DATA_CALL_TYPE_IPV6;

+    }

+    else if(strcmp(argv[3], "QSER_DATA_CALL_TYPE_IPV4V6") == 0)

+    {

+        datacall.ip_family = QSER_DATA_CALL_TYPE_IPV4V6;

+    }

+    else

+    {

+        printf("LYNQ_QSER_SETUP_DATA_CALL: ip_family input error\n");

+        return ret;

+    }

+

+    memcpy(datacall.cdma_username, argv[4], QSER_APN_USERNAME_SIZE);

+    memcpy(datacall.cdma_password, argv[5], QSER_APN_PASSWORD_SIZE);    

+    

+    ret = qser_data_call_start(&datacall, &err);

+    printf("LYNQ_QSER_SETUP_DATA_CALL err = %d\n", err);

+    printf("%s%d\n",TEST_RESULT,ret);

+    return ret;

+}

+int qser_setup_data_call_async(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+    int ret = -1;

+    qser_data_call_s datacall;

+    qser_data_call_error_e err = QSER_DATA_CALL_ERROR_NONE;

+    int ip_family_flag = atoi(argv[3]);

+

+    datacall.profile_idx = atoi(argv[1]);

+    datacall.reconnect = (bool)atoi(argv[2]);

+

+    if(strcmp(argv[3], "QSER_DATA_CALL_TYPE_IPV4") == 0)

+    {

+        datacall.ip_family = QSER_DATA_CALL_TYPE_IPV4;

+    }

+    else if(strcmp(argv[3], "QSER_DATA_CALL_TYPE_IPV6") == 0)

+    {

+        datacall.ip_family = QSER_DATA_CALL_TYPE_IPV6;

+    }

+    else if(strcmp(argv[3], "QSER_DATA_CALL_TYPE_IPV4V6") == 0)

+    {

+        datacall.ip_family = QSER_DATA_CALL_TYPE_IPV4V6;

+    }

+    else

+    {

+        printf("LYNQ_QSER_SETUP_DATA_CALL_ASYNC: ip_family input error\n");

+        return ret;

+    }

+

+    memcpy(datacall.cdma_username, argv[4], QSER_APN_USERNAME_SIZE);

+    memcpy(datacall.cdma_password, argv[5], QSER_APN_PASSWORD_SIZE);    

+    

+    ret = qser_data_call_start_async(&datacall, &err);

+    printf("LYNQ_QSER_SETUP_DATA_CALL_ASYNC err = %d\n", err);

+    printf("%s%d\n",TEST_RESULT,ret);

+    return ret;

+}

+int qser_deactivte_data_call(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+    int ret = -1;

+    int profile_idx_int = atoi(argv[1]);

+    qser_data_call_ip_family_e ip_family = QSER_DATA_CALL_TYPE_IPV4V6;

+    qser_data_call_error_e err = QSER_DATA_CALL_ERROR_NONE;

+

+    if(strcmp(argv[2], "QSER_DATA_CALL_TYPE_IPV4") == 0)

+    {

+        ip_family = QSER_DATA_CALL_TYPE_IPV4;

+    }

+    else if(strcmp(argv[2], "QSER_DATA_CALL_TYPE_IPV6") == 0)

+    {

+        ip_family = QSER_DATA_CALL_TYPE_IPV6;

+    }

+    else if(strcmp(argv[2], "QSER_DATA_CALL_TYPE_IPV4V6") == 0)

+    {

+        ip_family = QSER_DATA_CALL_TYPE_IPV4V6;

+    }

+    else

+    {

+        printf("LYNQ_QSER_DEACTIVATE_DATA_CALL: ip_family input error\n");

+        return ret;

+    }

+

+    ret = qser_data_call_stop(profile_idx_int, ip_family, &err);

+    printf("LYNQ_QSER_DEACTIVATE_DATA_CALL err = %d\n", err);

+    printf("%s%d\n",TEST_RESULT,ret);

+    return ret;

+}

+int qser_get_data_call_list(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+    int ret = -1;

+    char buf_ip[64] = {0};

+    char buf_gateway[64] = {0};

+    char buf_pri_dns[64] = {0};

+    char buf_sec_dns[64] = {0};

+    qser_data_call_info_s info = {0};

+    int profile_idx_int = atoi(argv[1]);

+    qser_data_call_error_e err = QSER_DATA_CALL_ERROR_NONE;

+    qser_data_call_ip_family_e ip_family = QSER_DATA_CALL_TYPE_IPV4V6;

+

+    if(strcmp(argv[2], "QSER_DATA_CALL_TYPE_IPV4") == 0)

+    {

+        ip_family = QSER_DATA_CALL_TYPE_IPV4;

+    }

+    else if(strcmp(argv[2], "QSER_DATA_CALL_TYPE_IPV6") == 0)

+    {

+        ip_family = QSER_DATA_CALL_TYPE_IPV6;

+    }

+    else if(strcmp(argv[2], "QSER_DATA_CALL_TYPE_IPV4V6") == 0)

+    {

+        ip_family = QSER_DATA_CALL_TYPE_IPV4V6;

+    }

+    else

+    {

+        printf("LYNQ_QSER_GET_DATA_CALL_LIST: ip_family input error\n");

+        return ret;

+    }

+    

+    ret = qser_data_call_info_get(profile_idx_int, ip_family, &info, &err);

+    printf("%s%d\n",TEST_RESULT,ret);

+    printf("LYNQ_QSER_GET_DATA_CALL_LIST: error=%d, profile_idx=%d, ip_family=%d\n", err, info.profile_idx, info.ip_family);

+    printf("LYNQ_QSER_GET_DATA_CALL_LIST: v4.name=%s, v4.state=%d, v4.reconnect=%d\n", info.v4.name, info.v4.state, info.v4.reconnect);

+    printf("LYNQ_QSER_GET_DATA_CALL_LIST: v4.ip=%s\n"

+        , inet_ntoa(info.v4.addr.ip));

+    printf("LYNQ_QSER_GET_DATA_CALL_LIST: v4.gateway=%s\n"

+        , inet_ntoa(info.v4.addr.gateway));

+    printf("LYNQ_QSER_GET_DATA_CALL_LIST: v4.pri_dns=%s\n"

+        , inet_ntoa(info.v4.addr.pri_dns));

+    printf("LYNQ_QSER_GET_DATA_CALL_LIST: v4.sec_dns=%s\n"

+        , inet_ntoa(info.v4.addr.sec_dns));

+

+    printf("LYNQ_QSER_GET_DATA_CALL_LIST: v6.name=%s, v6.state=%d, v6.reconnect=%d\n", info.v6.name, info.v6.state, info.v6.reconnect);

+    inet_ntop(AF_INET6, &(info.v6.addr.ip), buf_ip, sizeof(buf_ip));

+    inet_ntop(AF_INET6, &(info.v6.addr.gateway), buf_gateway, sizeof(buf_gateway));

+    inet_ntop(AF_INET6, &(info.v6.addr.pri_dns), buf_pri_dns, sizeof(buf_pri_dns));

+    inet_ntop(AF_INET6, &(info.v6.addr.sec_dns), buf_sec_dns, sizeof(buf_sec_dns));

+    printf("LYNQ_QSER_GET_DATA_CALL_LIST: v6.ip=%s, v6.gateway=%s, v6.pri_dns=%s, v6.sec_dns=%s\n"

+        , buf_ip, buf_gateway, buf_pri_dns, buf_sec_dns);

+    return ret;

+}

+

+int lynq_qser_apn_set(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+    int ret = -1;

+    qser_apn_info_s apn = {'1', QSER_APN_PDP_TYPE_IPV4V6, QSER_APN_AUTH_PROTO_DEFAULT, NULL, NULL, NULL, NULL};

+

+    apn.profile_idx = atoi(argv[1]);

+    //set pdptype

+    if(strcmp(argv[2], "QSER_APN_PDP_TYPE_IPV4") == 0)

+    {

+        apn.pdp_type = QSER_APN_PDP_TYPE_IPV4;

+    }

+    else if(strcmp(argv[2], "QSER_APN_PDP_TYPE_PPP") == 0)

+    {

+        apn.pdp_type = QSER_APN_PDP_TYPE_PPP;

+    }

+    else if(strcmp(argv[2], "QSER_APN_PDP_TYPE_IPV6") == 0)

+    {

+        apn.pdp_type = QSER_APN_PDP_TYPE_IPV6;

+    }

+    else if(strcmp(argv[2], "QSER_APN_PDP_TYPE_IPV4V6") == 0)

+    {

+        apn.pdp_type = QSER_APN_PDP_TYPE_IPV4V6;

+    }

+    else

+    {

+        printf("LYNQ_QSER_APN_SET: pdp_type input error\n");

+        return ret;

+    }

+    //set auth_proto

+    if(strcmp(argv[3], "QSER_APN_AUTH_PROTO_DEFAULT") == 0)

+    {

+        apn.auth_proto = QSER_APN_AUTH_PROTO_DEFAULT;

+    }

+    else if(strcmp(argv[3], "QSER_APN_AUTH_PROTO_NONE") == 0)

+    {

+        apn.auth_proto = QSER_APN_AUTH_PROTO_NONE;

+    }

+    else if(strcmp(argv[3], "QSER_APN_AUTH_PROTO_PAP") == 0)

+    {

+        apn.auth_proto = QSER_APN_AUTH_PROTO_PAP;

+    }

+    else if(strcmp(argv[3], "QSER_APN_AUTH_PROTO_CHAP") == 0)

+    {

+        apn.auth_proto = QSER_APN_AUTH_PROTO_CHAP;

+    }

+    else if(strcmp(argv[3], "QSER_APN_AUTH_PROTO_PAP_CHAP") == 0)

+    {

+        apn.auth_proto = QSER_APN_AUTH_PROTO_PAP_CHAP;

+    }

+    else

+    {

+        printf("LYNQ_QSER_APN_SET: auth_proto input error\n");

+        return ret;

+    }

+    memcpy(apn.apn_name,argv[4],QSER_APN_NAME_SIZE);

+    memcpy(apn.username,argv[5],QSER_APN_USERNAME_SIZE);

+    memcpy(apn.password,argv[6],QSER_APN_PASSWORD_SIZE);

+    memcpy(apn.apn_type,argv[7],QSER_APN_NAME_SIZE);

+    ret = qser_apn_set(&apn);

+    printf("%s%d\n",TEST_RESULT,ret);

+    return ret;

+}

+int lynq_qser_apn_get(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+    int ret = -1;

+    qser_apn_info_s apn = {0};

+    int profile_idx_int = atoi(argv[1]);

+    ret = qser_apn_get(profile_idx_int, &apn);

+    printf("%s%d\n",TEST_RESULT,ret);

+    printf("LYNQ_QSER_APN_GET: pdp_type=%d, auth_proto=%d, apn_name=%s, username=%s, password=%s, apn_type=%s\n"

+        ,apn.pdp_type, apn.auth_proto, apn.apn_name, apn.username, apn.password, apn.apn_type);

+    return ret;

+}

+int lynq_qser_apn_add(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+    int ret = -1;

+    unsigned char profile_idx_char;

+    qser_apn_add_s apn = {QSER_APN_PDP_TYPE_IPV4V6, QSER_APN_AUTH_PROTO_DEFAULT, "cmnet", NULL, NULL, NULL};

+

+    if(strcmp(argv[1], "QSER_APN_PDP_TYPE_IPV4") == 0)

+    {

+        apn.pdp_type = QSER_APN_PDP_TYPE_IPV4;

+    }

+    else if(strcmp(argv[1], "QSER_APN_PDP_TYPE_PPP") == 0)

+    {

+        apn.pdp_type = QSER_APN_PDP_TYPE_PPP;

+    }

+    else if(strcmp(argv[1], "QSER_APN_PDP_TYPE_IPV6") == 0)

+    {

+        apn.pdp_type = QSER_APN_PDP_TYPE_IPV6;

+    }

+    else if(strcmp(argv[1], "QSER_APN_PDP_TYPE_IPV4V6") == 0)

+    {

+        apn.pdp_type = QSER_APN_PDP_TYPE_IPV4V6;

+    }

+    else

+    {

+        printf("LYNQ_QSER_APN_ADD: pdp_type input error\n");

+        return ret;

+    }

+    //set auth_proto

+    if(strcmp(argv[2], "QSER_APN_AUTH_PROTO_DEFAULT") == 0)

+    {

+        apn.auth_proto = QSER_APN_AUTH_PROTO_DEFAULT;

+    }

+    else if(strcmp(argv[2], "QSER_APN_AUTH_PROTO_NONE") == 0)

+    {

+        apn.auth_proto = QSER_APN_AUTH_PROTO_NONE;

+    }

+    else if(strcmp(argv[2], "QSER_APN_AUTH_PROTO_PAP") == 0)

+    {

+        apn.auth_proto = QSER_APN_AUTH_PROTO_PAP;

+    }

+    else if(strcmp(argv[2], "QSER_APN_AUTH_PROTO_CHAP") == 0)

+    {

+        apn.auth_proto = QSER_APN_AUTH_PROTO_CHAP;

+    }

+    else if(strcmp(argv[2], "QSER_APN_AUTH_PROTO_PAP_CHAP") == 0)

+    {

+        apn.auth_proto = QSER_APN_AUTH_PROTO_PAP_CHAP;

+    }

+    else

+    {

+        printf("LYNQ_QSER_APN_ADD: auth_proto input error\n");

+        return ret;

+    }

+

+    memcpy(apn.apn_name,argv[3],QSER_APN_NAME_SIZE);

+    memcpy(apn.username,argv[4],QSER_APN_USERNAME_SIZE);

+    memcpy(apn.password,argv[5],QSER_APN_PASSWORD_SIZE);

+    memcpy(apn.apn_type,argv[6],QSER_APN_NAME_SIZE);

+

+    printf("LYNQ_QSER_APN_ADD: ready to qser_apn_add\n");

+    ret = qser_apn_add(&apn, &profile_idx_char);

+    printf("%s%d,profile = %d\n",TEST_RESULT,ret,profile_idx_char);

+    return ret;

+}

+int lynq_qser_apn_del(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+    int ret = -1;

+    int profile_idx_int = atoi(argv[1]);

+    ret = qser_apn_del(profile_idx_int);

+    printf("%s%d\n",TEST_RESULT,ret);

+    return ret;

+}

+int lynq_qser_apn_get_list(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+    int ret = -1;

+    qser_apn_info_list_s apn_list = {0};

+    ret = qser_apn_get_list(&apn_list);

+    printf("%s%d\n",TEST_RESULT,ret);

+    for(int i = 0; i < apn_list.cnt; i++)

+    {

+        printf("LYNQ_QSER_APN_GET_LIST: profile_idx=%d, pdp_type=%d, auth_proto=%d, apn_name=%s, username=%s, password=%s, apn_type=%s\n"

+            ,apn_list.apn[i].profile_idx, apn_list.apn[i].pdp_type, apn_list.apn[i].auth_proto, apn_list.apn[i].apn_name, apn_list.apn[i].username, apn_list.apn[i].password, apn_list.apn[i].apn_type);

+    }

+    return ret;

+}

diff --git a/mbtk/test/Mobiletek_Tester_RDIT/data.h b/mbtk/test/Mobiletek_Tester_RDIT/data.h
new file mode 100755
index 0000000..33364fb
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/data.h
@@ -0,0 +1,19 @@
+//DATA

+int init_data(int argc, char *argv[], int sp_test);

+int deinit_data(int argc, char *argv[], int sp_test);

+int setup_data_call(int argc, char *argv[], int sp_test);

+int deactivte_data_call(int argc, char *argv[], int sp_test);

+int wait_data_call(int argc, char *argv[], int sp_test);

+int setup_data_call_sp(int argc, char *argv[], int sp_test);

+int get_data_call_list(int argc, char *argv[], int sp_test);

+int qser_init_data(int argc, char *argv[], int sp_test);

+int qser_deinit_data(int argc, char *argv[], int sp_test);

+int qser_setup_data_call(int argc, char *argv[], int sp_test);

+int qser_setup_data_call_async(int argc, char *argv[], int sp_test);

+int qser_deactivte_data_call(int argc, char *argv[], int sp_test);

+int qser_get_data_call_list(int argc, char *argv[], int sp_test);

+int lynq_qser_apn_set(int argc, char *argv[], int sp_test);

+int lynq_qser_apn_get(int argc, char *argv[], int sp_test);

+int lynq_qser_apn_add(int argc, char *argv[], int sp_test);

+int lynq_qser_apn_del(int argc, char *argv[], int sp_test);

+int lynq_qser_apn_get_list(int argc, char *argv[], int sp_test);
\ No newline at end of file
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/dispatch.cpp b/mbtk/test/Mobiletek_Tester_RDIT/dispatch.cpp
new file mode 100755
index 0000000..a4f6071
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/dispatch.cpp
@@ -0,0 +1,396 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <sys/types.h>
+#include <pthread.h>
+#include <errno.h>
+
+#include "dispatch.h"
+#include "lynq.h"
+#include "cc.h"
+#include "sms.h"
+#include "network.h"
+#include "data.h"
+#include "qser-voice.h"
+#include "sim.h"
+
+#define SOCKET_BUF_SIZE 512
+typedef struct {
+    char *name;           /* User printable name of the function. */
+    int (*func)(int argc, char *argv[], int sp_test);       /* Function to call to do the job. */
+    char *doc;            /* Documentation for this function.  */
+    int request;
+} COMMAND;
+
+COMMAND commands[] = {
+#include "req_commands.h"
+};
+
+int g_rdit_socket_fd = 0;
+int g_rdit_client_connect = -1;
+static pthread_mutex_t s_startupMutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t s_startupCond = PTHREAD_COND_INITIALIZER;
+
+int has_registe_cmd = 0;
+struct sockaddr_un g_remote_addr = {0};
+struct sockaddr_un g_local_addr = {0};
+int g_create_socket = 0;
+int g_start_main_loop = 0;
+
+
+COMMAND* find_command (char *name)
+{
+  register int i;
+
+  for (i = 0; commands[i].name; i++)
+    if (strcmp (name, commands[i].name) == 0)
+      return (&commands[i]);
+
+  return ((COMMAND *)NULL);
+}
+
+const char *requestToString(int request)
+{
+    switch(request)
+    {
+        case LYNQ_DIAL: return "LYNQ_DIAL";
+        case LYNQ_ANSWER: return "LYNQ_ANSWER";
+        case LYNQ_HUNGUP: return "LYNQ_HUNGUP";
+        case LYNQ_QSER_CALL_INIT :return  "LYNQ_QSER_CALL_INIT";
+        case LYNQ_QSER_CALL_DEINIT : return "LYNQ_QSER_CALL_DEINIT";
+        case LYNQ_QSER_CALL_START : return "LYNQ_QSER_CALL_START";
+        case LYNQ_QSER_CALL_ANSWER : return "LYNQ_QSER_CALL_ANSWER";
+        case LYNQ_QSER_CALL_END : return "LYNQ_QSER_CALL_END";
+        case LYNQ_QSER_CALL_HANDLER : return "LYNQ_QSER_CALL_HANDLER";
+        case LYNQ_QSER_CALL_REMOVE : return "LYNQ_QSER_CALL_REMOVE ";
+        default: return "<unknown request>";
+    }
+}
+int parse_param(char *cmd, char *argv[], int max_args)
+{
+    char *pos, *pos2;
+    int argc = 0;
+    printf("recive tester cmd=%s\n",cmd);
+    pos = cmd;
+    while (1) {
+        // Trim the space characters.
+        while (*pos == ' ') {
+            pos++;
+        }
+
+        if (*pos == '\0') {
+            break;
+        }
+
+        // One token may start with '"' or other characters.
+        if (*pos == '"' && (pos2 = strrchr(pos+1, '"'))) {
+            argv[argc++] = pos + 1;
+            *pos2 = '\0';
+            pos = pos2 + 1;
+            if(*pos == '\n'){
+                *pos = '\0';
+                pos = pos + 1;
+            }
+
+        } else {
+            argv[argc++] = pos;
+            while (*pos != '\0' && *pos != ' '&& *pos != '\n') {
+                pos++;
+            }
+            *pos++ = '\0';
+
+            if(argc == 1) {
+              char* at_cmd = strstr(argv[0], "RIL_REQUEST_OEM_HOOK_RAW");
+              if(at_cmd != NULL) {
+                while (*pos == ' ') {
+                    pos++;
+                }
+                argv[argc++] = pos;
+                while (*pos != '\0' && *pos != '\n') {
+                    pos++;
+                }
+                *pos++ = '\0';
+                break;
+              }
+            }
+
+        }
+
+        // Check if the maximum of arguments is reached.
+        if (argc == max_args) {
+            break;
+        }
+    }
+
+    return argc;
+}
+dispatch_manager::dispatch_manager()
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    __init_msg();
+}
+dispatch_manager::~ dispatch_manager(){}
+
+int dispatch_manager::__init_msg()
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    __request = 0;
+    __argc = 0;
+    __argv = NULL;
+    __socket_name = NULL;
+    return 0;
+}
+int dispatch_manager::__set_request_msg(int req,int argc,char *argv)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    printf("requet=%d,argc=%d,argv p=%x\n");
+    __request = req;
+    __argc = argc;
+    __argv = argv;
+    return 0;
+}
+int dispatch_manager::set_request_msg(int req,int argc,char *argv)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    return __set_request_msg(req,argc,argv);
+}
+
+
+int actsvc_cmd_recv(int fd, char *buf, int len)
+{
+    int ret = 0;
+    ret = recv(fd, buf, len, 0);
+    printf("[%d][%s] recv before\n",__LINE__,__FUNCTION__);
+    if (ret < 0)
+    {
+        printf("acti_cmd_recv service select error, ret=%d, error=%s(%d),fd=%d\n", ret,strerror(errno), errno, fd);
+        return LYNQ_E_SOCKET_FAIL;
+    }
+    else if(ret == 0)
+    {
+        printf("acti_cmd_recv service recv error, ret=%d, error=%s(%d),fd=%d\n", ret,strerror(errno), errno, fd);
+        return LYNQ_E_SOCKET_ZERO;
+    }
+    else
+    {
+        printf("[%d][%s] buf is:%s\n",__LINE__,__FUNCTION__,buf);
+        return LYNQ_E_SOCKET_SUCC;
+    }
+}
+
+int create_socket(const int domain, const int type, const int protocol,const int port,const char *IP,const char *socket_name,void * addr,int backlog,int cs)
+{
+    printf("[%d][%s]start create socket\n",__LINE__,__FUNCTION__);
+    printf("domain:%d,type:%d,protocol:%d,port:%d,IP:%s,socket_name:%s,backlog:%d\n",domain,type,protocol,port,IP,socket_name,backlog);
+    int socket_fd = -1;
+    char acBuf[1024] = {0};
+    struct sockaddr_un *local_addr = NULL;
+    local_addr = (struct sockaddr_un *)addr;
+    socket_fd = socket(domain, type,protocol);
+    if(0 > socket_fd)
+    {
+        printf("create socket fail:fd = %d\n",socket_fd);
+        return socket_fd;
+    }
+    switch (domain)
+    {
+        case AF_UNIX:
+        {
+            if (strlen(socket_name) > sizeof(local_addr->sun_path) - 1)
+            {
+                printf("Server socket path too long: %s\n", socket_name);
+                return (-strlen(socket_name));
+            }
+            if(cs == 0)//0:service 1:client
+            {
+                printf("remove %s\n", socket_name);
+                if (remove(socket_name) == -1 && errno != ENOENT)
+                { 
+                    printf("remove-%s fail and errno:%d\n", socket_name,errno);
+                }
+            }
+            if(type == SOCK_STREAM)
+            {
+                while(access(socket_name, R_OK)==0)
+                {
+                    printf("%s still exist\n", socket_name);
+                    usleep(10);
+                }
+            }
+            local_addr->sun_family = AF_UNIX;
+            sprintf(local_addr->sun_path, "%s", socket_name);
+            if(cs == 0)//0:service 1:client
+            {
+                if(bind(socket_fd, (struct sockaddr *)local_addr, sizeof(struct sockaddr_un)) < 0)
+                {
+                    printf("bind failed name=[%s] reason=[%s]\n", socket_name, strerror(errno));
+                    //printf("[%d][%s]bind fail and errno: %d",LINE,FUNC,errno);
+                    close(socket_fd);
+                    return -1;
+                }
+                if(type == SOCK_STREAM)
+                {
+                    if(listen(socket_fd,backlog) == -1)
+                    {
+                        printf("[%d]listen fd: %dfail\n",__LINE__);
+                        close(socket_fd);
+                        return -1;
+                    }
+                }
+            }
+            else
+            {
+                printf("init this client\n");
+            }
+            break;
+        }
+        case AF_INET:
+        {
+            break;
+        }
+        default:
+            break;
+    }
+    return socket_fd;
+}
+
+int dispatch_manager::init_socket(char *socket_name)
+{
+    socklen_t client_len;
+    int ret;
+    char parser_buf[SOCKET_BUF_SIZE];
+    TryNewSocket:
+    g_rdit_socket_fd = create_socket(AF_UNIX, SOCK_DGRAM,0, 0, NULL,socket_name, (void *)&g_local_addr, 2, 0);
+    if(0 > g_rdit_socket_fd)
+    {
+        printf("init socket fail and fd:%d",g_rdit_socket_fd);
+        g_create_socket++;
+        if(g_create_socket == 10)
+        {
+            printf("create_socket max try count is %d\n", g_create_socket);
+            return LYNQ_E_SOCKET_CREATE_FAIL;
+        }
+        else
+        {
+            printf("create_socket try again %d\n", g_create_socket);
+            usleep(500*1000);
+            goto TryNewSocket;
+        }
+    }
+    set_socket_fd(g_rdit_socket_fd);
+    return LYNQ_E_SUCCESS;
+}
+
+void *socket_read_loop(void *param)
+{
+    socklen_t client_len;
+    int ret = -1;
+    int socket_fd = -1;
+    char parser_buf[SOCKET_BUF_SIZE];
+    char *argv[32] = {0};
+    int  argc = 0;
+    int *temp = (int*)param;
+    printf("in socket_read_loop , param=%p, *param=%d\n", param, (int)*(int*)param);
+    printf("[%d][%s] TryNewLink!\n", __LINE__,__FUNCTION__);
+    socket_fd = (int)*(int*)param;
+    pthread_mutex_lock(&s_startupMutex);
+    g_start_main_loop = 1;
+    pthread_cond_broadcast(&s_startupCond);
+    pthread_mutex_unlock(&s_startupMutex);
+    client_len = sizeof(g_local_addr);
+    printf("[%d][%s] socket_fd = %d,*temp=%d,%p, *param=%d!\n",__LINE__,__FUNCTION__,socket_fd,*temp, temp, (int)*(int*)param);
+#if 0
+    int conn = accept(socket_fd,(struct sockaddr *) &g_local_addr, &client_len);
+    if (conn <= 0)
+    {
+        printf("[%d][%s] accept error!",__LINE__,__FUNCTION__);
+        close(conn);
+        return NULL;
+    }
+    printf("Accept a client , fd is %d", conn);
+    if(g_rdit_client_connect >= 0)
+    {
+        printf("g_rdit_client_connect need close!");
+        close(g_rdit_client_connect);
+    }
+    g_rdit_client_connect = conn;
+#endif
+    /* tranlate data */
+    while (true)
+    {
+        memset(parser_buf, 0, sizeof(parser_buf));
+        ret = actsvc_cmd_recv(socket_fd, parser_buf, SOCKET_BUF_SIZE);
+        if (ret == LYNQ_E_SOCKET_FAIL)
+        {
+            printf("[%d][%s] LYNQ_E_SOCKET_FAIL receive CMD error\n",__LINE__,__FUNCTION__);
+            continue;
+        }
+        argc = parse_param(parser_buf,argv,32);
+        if(argc < 1)
+        {
+            printf("%s: error input.\n", parser_buf);
+            continue;
+        }
+        for(int i = 0;i < argc;i++)
+        {
+            printf("argc:%d---argv = %s\n",i,argv[i]);
+        }
+        COMMAND *command =  find_command(argv[0]);
+        if(!command)
+        {
+            printf("%s: No such command for MobileTek_Tester_RDIT\n", argv[0]);
+            continue;
+        }
+        (*(command->func))(argc,argv,0);
+    }
+    return NULL;
+}
+
+
+void dispatch_manager::start_main_loop()
+{
+    printf("[%d][%s] enter!\n",__LINE__,__FUNCTION__);
+    g_start_main_loop = 0;
+    pthread_t s_tid_dispatch;
+    pthread_mutex_lock(&s_startupMutex);
+    pthread_attr_t attr;
+    pthread_attr_init(&attr);
+    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+    int socket_fd = get_socket_fd();
+    printf("[%d][%s] socket_fd = %d,%p!\n",__LINE__,__FUNCTION__,socket_fd,&socket_fd);
+    int result = pthread_create(&s_tid_dispatch, &attr,socket_read_loop, (void *)&socket_fd);
+    if (result != 0) {
+        printf("Failed to create dispatch thread: %s\n", strerror(result));
+        goto done;
+    }
+   
+    while (g_start_main_loop == 0) {
+        pthread_cond_wait(&s_startupCond, &s_startupMutex);
+    }
+    //warren delete,beacuse of update at fwk.
+    /*mobiletek add*
+    s_started = 0;
+    result = pthread_create(&s_tid_dispatch, &attr, eventLoop_at, NULL);
+    if (result != 0) {
+        printf("Failed to create dispatch thread: %s", strerror(result));
+        goto done;
+    }
+
+    while (s_started == 0) {
+        pthread_cond_wait(&s_startupCond, &s_startupMutex);
+    }
+    *mobiletek add
+    result = pthread_create(&s_tid_dispatch, &attr, responseLoop, NULL);
+    if (result != 0) {
+        printf("Failed to create response dispatch thread: %s", strerror(result));
+        goto done;
+    }
+
+    while (s_responseDispatch == 0) {
+        pthread_cond_wait(&s_startupCond, &s_startupMutex);
+    }
+    */
+done:
+    pthread_mutex_unlock(&s_startupMutex);
+}
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/dispatch.h b/mbtk/test/Mobiletek_Tester_RDIT/dispatch.h
new file mode 100755
index 0000000..5c3fb49
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/dispatch.h
@@ -0,0 +1,53 @@
+/*============================================================================= 
+#     FileName: dispatch.h
+#     Desc: 
+#     Author: Warren
+#     Version: V1.0
+#     LastChange: 2023-04-17 
+#     History: 
+=============================================================================*/
+#ifndef __LYNQ_DISPATCH__
+#define __LYNQ_DISPATCH__
+#ifdef __cplusplus
+extern "C" {
+#endif
+class dispatch_manager
+{
+    public:
+        dispatch_manager(void);
+        virtual ~ dispatch_manager();
+        char *get_socket_name()
+        {
+            return __socket_name;
+        }
+        int get_request_msg()
+        {
+            return __request;
+        }
+        int get_socket_fd()
+        {
+            return __socket_fd;
+        }
+        void set_socket_fd(int fd)
+        {
+            __socket_fd = fd;
+        }
+        int set_request_msg(int req,int argc,char *argv);
+        int init_socket(char *socket_name);
+        void start_main_loop();
+        int dispatch_request();
+        int run_event();
+        
+    private:
+        int __init_msg();
+        int __set_request_msg(int req,int argc,char *argv);
+        int __request;
+        int __argc;
+        int __socket_fd;
+        char *__argv;
+        char *__socket_name;
+};
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/lynq.h b/mbtk/test/Mobiletek_Tester_RDIT/lynq.h
new file mode 100755
index 0000000..19ec1f0
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/lynq.h
@@ -0,0 +1,127 @@
+
+typedef enum
+{
+    LYNQ_E_SUCCESS=0,
+    LYNQ_E_SOCKET_CREATE_FAIL,
+    LYNQ_E_SOCKET_FAIL,
+    LYNQ_E_SOCKET_ZERO,
+    LYNQ_E_SOCKET_SUCC,
+    LYNQ_E_SOCKET_LINK_FAIL
+}LYNQ_E_T;
+
+#define LYNQ_BASE 100
+#define LYNQ_DIAL LYNQ_BASE + 1
+#define LYNQ_ANSWER LYNQ_BASE + 2
+#define LYNQ_HUNGUP LYNQ_BASE + 3
+#define LYNQ_CALL_INIT LYNQ_BASE + 4
+
+#define LYNQ_SMS LYNQ_BASE + 20
+#define LYNQ_SMS_INIT LYNQ_SMS + 1
+#define LYNQ_SMS_DEINIT LYNQ_SMS + 2
+#define LYNQ_SEND_SMS LYNQ_SMS + 3
+#define LYNQ_READ_SMS LYNQ_SMS + 4
+#define LYNQ_LIST_SMS LYNQ_SMS + 5
+#define LYNQ_DELETE_SMS LYNQ_SMS + 6
+#define LYNQ_WAIT_SMS LYNQ_SMS + 7
+#define LYNQ_GET_SMSC_ADDRESS LYNQ_SMS + 8
+#define LYNQ_SET_SMSC_ADDRESS  LYNQ_SMS + 9
+
+#define LYNQ_NETWORK LYNQ_BASE + 30
+#define LYNQ_NETWORK_INIT LYNQ_NETWORK + 1
+#define LYNQ_NETWORK_DEINIT LYNQ_NETWORK + 2
+#define LYNQ_QUERY_OPERATER LYNQ_NETWORK + 3
+#define LYNQ_QUERY_NETWORK_SELECTION_MODE LYNQ_NETWORK + 4
+#define LYNQ_SET_NETWORK_SELECTION_MODE LYNQ_NETWORK + 5
+#define LYNQ_QUERY_AVAILABLE_NETWORK LYNQ_NETWORK + 6
+#define LYNQ_QUERY_REGISTRATION_STATE LYNQ_NETWORK + 7
+#define LYNQ_QUERY_PREFFERRED_NETWORKTYPE LYNQ_NETWORK + 8
+#define LYNQ_SET_PREFFERRED_NETWORKTYPE LYNQ_NETWORK + 9
+#define LYNQ_SOLICITED_SIGNAL_STRENGTH LYNQ_NETWORK + 10
+#define LYNQ_SET_IMS LYNQ_NETWORK + 11
+
+#define LYNQ_DATA LYNQ_BASE + 60
+#define LYNQ_DATA_INIT LYNQ_DATA + 1
+#define LYNQ_DATA_DEINIT LYNQ_DATA + 2
+#define LYNQ_DEACTIVATE_DATA_CALL LYNQ_DATA + 3
+#define LYNQ_WAIT_DATA_CALL LYNQ_DATA + 4
+#define LYNQ_SETUP_DATA_CALL LYNQ_DATA + 5
+#define LYNQ_SETUP_DATA_CALL_SP LYNQ_DATA + 6
+#define LYNQ_GET_DATA_CALL_LIST LYNQ_DATA + 7
+
+#define LYNQ_QSER_DATA LYNQ_BASE + 70
+#define LYNQ_QSER_DATA_INIT LYNQ_QSER_DATA + 1
+#define LYNQ_QSER_DATA_DEINIT LYNQ_QSER_DATA + 2
+#define LYNQ_QSER_SETUP_DATA_CALL LYNQ_QSER_DATA + 3
+#define LYNQ_QSER_DEACTIVATE_DATA_CALL LYNQ_QSER_DATA + 4
+#define LYNQ_QSER_GET_DATA_CALL_LIST LYNQ_QSER_DATA + 5
+#define LYNQ_QSER_APN_SET LYNQ_QSER_DATA + 6
+#define LYNQ_QSER_APN_GET LYNQ_QSER_DATA + 7
+#define LYNQ_QSER_APN_ADD LYNQ_QSER_DATA + 8
+#define LYNQ_QSER_APN_DEL LYNQ_QSER_DATA + 9
+#define LYNQ_QSER_APN_GET_LIST LYNQ_QSER_DATA + 10
+#define LYNQ_QSER_SETUP_DATA_CALL_ASYNC LYNQ_QSER_DATA + 11
+
+
+#define LYNQ_QSER_NETWORK LYNQ_BASE + 100
+#define LYNQ_QSER_NETWORK_INIT LYNQ_QSER_NETWORK + 1
+#define LYNQ_QSER_NETWORK_DEINIT LYNQ_QSER_NETWORK + 2
+#define LYNQ_QSER_NETWORK_SET_CONCIFG LYNQ_QSER_NETWORK + 3
+#define LYNQ_QSER_NETWORK_GTE_OPERRATOR_NAME LYNQ_QSER_NETWORK + 4
+#define LYNQ_QSER_NETWORK_GET_REG_STATUS LYNQ_QSER_NETWORK + 5
+#define LYNQ_QSER_NETWORK_SOLICITED_SIGNAL_STRENGTH LYNQ_QSER_NETWORK + 6
+
+#define LYNQ_QSER LYNQ_BASE + 110
+#define LYNQ_QSER_CALL_INIT       LYNQ_QSER + 1
+#define LYNQ_QSER_CALL_DEINIT     LYNQ_QSER + 2
+#define LYNQ_QSER_CALL_START      LYNQ_QSER + 3
+#define LYNQ_QSER_CALL_ANSWER     LYNQ_QSER + 4
+#define LYNQ_QSER_CALL_END        LYNQ_QSER + 5
+#define LYNQ_QSER_CALL_HANDLER    LYNQ_QSER + 6
+#define LYNQ_QSER_CALL_REMOVE     LYNQ_QSER + 7
+
+#define LYNQ_SIM LYNQ_BASE + 120
+#define LYNQ_SIM_INIT LYNQ_SIM + 1
+#define LYNQ_GET_IMSI LYNQ_SIM + 2
+#define LYNQ_GET_SIM_STATUS LYNQ_SIM + 3
+#define LYNQ_GET_ICCID LYNQ_SIM + 4
+#define LYNQ_ENABLE_PIN LYNQ_SIM + 5
+#define LYNQ_DISABLE_PIN LYNQ_SIM + 6
+#define LYNQ_SIM_POWER LYNQ_SIM + 7
+#define LYNQ_QUERY_PIN_LOCK LYNQ_SIM + 8
+#define LYNQ_VERIFY_PIN LYNQ_SIM + 9
+#define LYNQ_CHANGE_PIN LYNQ_SIM + 10
+#define LYNQ_UNLOCK_PIN LYNQ_SIM + 11
+#define LYNQ_GET_IMEI_AND_SV LYNQ_SIM + 12
+#define LYNQ_GETPHONENUMBER LYNQ_SIM + 13
+#define LYNQ_SIM_DEINIT LYNQ_SIM + 14
+#define LYNQ_GET_IMEI LYNQ_SIM + 15
+#define LYNQ_GET_VERSION LYNQ_SIM + 16
+#define LYNQ_RESET_MD LYNQ_SIM + 17
+#define LYNQ_GET_MSISDN LYNQ_SIM + 18
+#define LYNQ_RESET_SIMCARD LYNQ_SIM + 19
+
+
+#define LYNQ_QSER_SIM LYNQ_BASE + 140
+#define LYNQ_QSER_SIM_INIT LYNQ_QSER_SIM + 1
+#define LYNQ_QSER_GET_IMSI LYNQ_QSER_SIM + 2
+#define LYNQ_QSER_GET_ICCID LYNQ_QSER_SIM + 3
+#define LYNQ_QSER_GETPHONENUMBER LYNQ_QSER_SIM + 4
+#define LYNQ_QSER_VERIFY_PIN LYNQ_QSER_SIM + 5
+#define LYNQ_QSER_CHANGE_PIN LYNQ_QSER_SIM + 6
+#define LYNQ_QSER_UNLOCK_PIN LYNQ_QSER_SIM + 7
+#define LYNQ_QSER_ENABLE_PIN LYNQ_QSER_SIM + 8
+#define LYNQ_QSER_DISABLE_PIN LYNQ_QSER_SIM + 9
+#define LYNQ_QSER_GET_SIM_STATUS LYNQ_QSER_SIM + 10
+#define LYNQ_QSER_SIM_DEINIT LYNQ_QSER_SIM + 11
+
+#define LYNQ_QSER_SMS LYNQ_BASE + 160
+#define LYNQ_QSER_SMS_INIT LYNQ_QSER_SMS + 1
+#define LYNQ_QSER_SEND_SMS LYNQ_QSER_SMS + 2
+#define LYNQ_QSER_READ_SMS LYNQ_QSER_SMS + 3
+#define LYNQ_QSER_LIST_SMS LYNQ_QSER_SMS + 4
+#define LYNQ_QSER_DELETE_SMS LYNQ_QSER_SMS + 5
+#define LYNQ_QSER_WAIT_SMS LYNQ_QSER_SMS + 6
+#define LYNQ_QSER_SMS_DEINIT LYNQ_QSER_SMS + 7
+
+
+int create_socket(const int domain, const int type, const int protocol,const int port,const char *IP,const char *socket_name,void * addr,int backlog,int cs);
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/main.cpp b/mbtk/test/Mobiletek_Tester_RDIT/main.cpp
new file mode 100755
index 0000000..3f7bbf0
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/main.cpp
@@ -0,0 +1,58 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include "dispatch.h"
+#include "lynq.h"
+dispatch_manager *g_dispatch;
+
+int init_msg_dispatch(char * socket_name,int token)
+{
+    int ret;
+    g_dispatch = new dispatch_manager;
+    if(g_dispatch == NULL)
+    {
+        printf("[%s][%d] new class fail!\n",__FUNCTION__,__LINE__);
+        return -1;
+    }
+    ret = g_dispatch->init_socket(socket_name);
+    if(ret!=LYNQ_E_SUCCESS)
+    {
+        printf("[%s][%d] create socket fail!\n",__FUNCTION__,__LINE__);
+        return ret;
+    }
+    g_dispatch->start_main_loop();
+    return LYNQ_E_SUCCESS;
+}
+int main(int argc,char*argv[])
+{
+    printf("[%s][%d] enter\n",__FUNCTION__,__LINE__);
+    int ret = 0;
+    char socket_name[64]={0};
+
+    system("rm -rf /var/run/socket");
+    system("mkdir -p /var/run/socket");
+
+    if(argc < 3)
+    {
+        printf("[%s][%d] please input socket name and token\n",__FUNCTION__,__LINE__);
+        exit(1);
+    }
+    if((argv[1] != NULL) && (argv[2]!=NULL))
+    {
+        sprintf(socket_name,"/var/run/socket/%s",argv[1]);
+        if(LYNQ_E_SUCCESS != init_msg_dispatch(socket_name, atoi(argv[2])))
+        {
+            exit(1);
+        }
+    }
+    else
+    {
+	printf("[%s][%d] param fail!\n",__FUNCTION__,__LINE__);
+        exit(1);
+    }
+    while (1)
+    {
+        sleep(1);
+    }
+    return 0;
+}
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/network.cpp b/mbtk/test/Mobiletek_Tester_RDIT/network.cpp
new file mode 100755
index 0000000..c78f218
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/network.cpp
@@ -0,0 +1,311 @@
+#include <stdio.h>

+#include <stdlib.h>

+#include <stdint.h>

+#include <string.h>

+#include "lynq_network.h"

+#include "network.h"

+#include "lynq_qser_network.h"

+#define TEST_RESULT "lynq_result="

+

+// int init_network(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     int uToken = atoi(argv[1]);

+//     ret = lynq_network_init(uToken);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     return ret;

+// }

+// int deinit_network(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     ret = lynq_network_deinit();

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     return ret;

+// }

+// int query_operater(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     ret = lynq_query_operater(argv[1], argv[2], argv[3]);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     printf("LYNQ_QUERY_OPERATER: OperatorFN=%s, OperatorSH=%s, MccMnc=%s\n", argv[1], argv[2], argv[3]);

+//     return ret;

+// }

+// int query_network_selection_mode(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     int netselMode = atoi(argv[1]);

+//     ret = lynq_query_network_selection_mode(&netselMode);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     printf("LYNQ_QUERY_NETWORK_SELECTION_MODE: netselMode=%d\n", netselMode);

+//     return ret;

+// }

+// int set_network_selection_mode(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     ret = lynq_set_network_selection_mode(argv[1], argv[2]);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     return ret;

+// }

+// int query_available_network(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     ret = lynq_query_available_network(argv[1], argv[2], argv[3], argv[4]);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     printf("LYNQ_QUERY_AVAILABLE_NETWORK: OperatorFN=%s, OperatorSH=%s, MccMnc=%s, NetStatus=%s\n", argv[1], argv[2], argv[3], argv[4]);

+//     return ret;    

+// }

+// int query_registration_state(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     int regState = atoi(argv[2]);

+//     int imsRegState = atoi(argv[3]);

+//     int netType = atoi(argv[6]);

+//     int radioTechFam = atoi(argv[7]);

+//     int netRejected = atoi(argv[8]);

+//     ret = lynq_query_registration_state(argv[1], &regState, &imsRegState, argv[4], argv[5], &netType, &radioTechFam, &netRejected);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     printf("LYNQ_QUERY_REGISTRATION_STATE: regState=%d, imsRegState=%d, LAC=%s, CID=%s, netType=%d, radioTechFam=%d, netRejected=%d\n", regState, imsRegState, argv[4], argv[5], netType, radioTechFam, netRejected);

+//     return ret;  

+// }

+// int query_prefferred_networktype(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     int preNetType = atoi(argv[1]);

+//     ret = lynq_query_prefferred_networktype(&preNetType);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     printf("LYNQ_QUERY_PREFFERRED_NETWORKTYPE: preNetType=%d\n", preNetType);

+//     return ret;

+// }

+// int set_prefferred_networktype(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     int preNetType = atoi(argv[1]);

+//     ret = lynq_set_prefferred_networktype(preNetType);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     return ret;

+// }

+// int solicited_signal_strength(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     signalStrength_t solSigStren = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};

+

+//     ret = lynq_solicited_signal_strength(&solSigStren);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     if(ret==0)

+//     {

+//         printf("solicited_signal_strength gw_sig_valid = %d\n"

+//                                                " rssi = %d\n"

+//                                                " wcdma_sig_valid = %d\n"                                                

+//                                                " wcdma_signalstrength = %d\n"

+//                                                " rscp"

+//                                                " ecio = %d\n"                                      

+//                                                " lte_sig_info_valid = %d\n"

+//                                                " lte_signalstrength = %d\n"

+//                                                " rsrp = %d\n"

+//                                                " rsrq = %d\n"

+//                                                " rssnr = %d\n"                                             

+//                                                " nr_sig_valid = %d\n"

+//                                                " ssRsrp = %d\n"

+//                                                " ssRsrq = %d\n"

+//                                                " ssSinr = %d\n"

+//                                                " csiRsrp = %d\n"

+//                                                " csiRsrq = %d\n"

+//                                                " nr_sig_info.csiSinr = %d\n",

+//               solSigStren.gw_sig_valid, solSigStren.rssi,

+//                 solSigStren.wcdma_sig_valid, solSigStren.wcdma_signalstrength,  solSigStren.rscp,solSigStren.ecno,        

+//               solSigStren.lte_sig_valid, solSigStren.lte_signalstrength, solSigStren.rsrp, solSigStren.rsrq, solSigStren.rssnr,    

+//               solSigStren.nr_sig_valid, solSigStren.ssRsrp, solSigStren.ssRsrq, solSigStren.ssSinr,

+//               solSigStren.csiRsrp, solSigStren.csiRsrq, solSigStren.csiSinr);

+//     }    

+//     return ret;

+// }

+// int set_ims(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     int ims_mode = atoi(argv[1]);

+//     ret = lynq_set_ims(ims_mode);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     return ret;

+// }

+

+int qser_network_init(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+    

+    int ret = -1;  

+    nw_client_handle_type h_nw;

+    

+    ret = qser_nw_client_init(&h_nw);       

+    printf("%s%d\n",TEST_RESULT,ret);

+    if(ret==0)

+    {

+        printf("qser_nw_client_init: h_nw=%d\n", h_nw);          

+    }    

+    return ret;    

+}

+

+int qser_network_deinit(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+

+    if(argc !=2)

+    {

+        printf("error, argc %d is not equal 2 \n",argc);

+        return -1;

+    }

+    

+    int ret = -1;  

+    nw_client_handle_type h_nw;

+    

+    h_nw=atoi(argv[1]);

+    ret = qser_nw_client_deinit(h_nw);

+    printf("%s%d\n",TEST_RESULT,ret);    

+    return ret;    

+}

+

+int qser_network_set_config(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+

+    if(argc !=3)

+    {

+        printf("error, argc %d is not equal 3 \n",argc);

+        return -1;

+    }

+

+    nw_client_handle_type       h_nw;

+    QSER_NW_CONFIG_INFO_T     t_info;

+

+    h_nw=atoi(argv[1]);

+    t_info.preferred_nw_mode=atoi(argv[2]);

+    

+    int ret = -1;  

+    ret = qser_nw_set_config(h_nw,&t_info);

+    printf("%s%d\n",TEST_RESULT,ret);    

+    return ret;    

+}

+

+int qser_network_get_operator_name(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+

+    if(argc !=2)

+    {

+        printf("error, argc %d is not equal 2 \n",argc);

+        return -1;

+    }

+

+    nw_client_handle_type       h_nw;

+    QSER_NW_OPERATOR_NAME_INFO_T  t_info;

+

+    h_nw=atoi(argv[1]);    

+    

+    int ret = -1;  

+    ret = qser_nw_get_operator_name(h_nw,&t_info);

+    printf("%s%d\n",TEST_RESULT,ret);    

+    if(ret==0)

+    {

+        printf("qser_nw_get_operator_name: h_nw=%d, long_eons=%s, short_eons=%s, mcc=%s, mnc=%s \n", h_nw, t_info.long_eons,t_info.short_eons,t_info.mcc,t_info.mnc);          

+    }    

+    return ret;    

+}

+

+int qser_network_get_reg_status(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+

+    if(argc !=2)

+    {

+        printf("error, argc %d is not equal 3 \n",argc);

+        return -1;

+    }

+

+    nw_client_handle_type       h_nw;

+    QSER_NW_REG_STATUS_INFO_T  t_info;

+

+    h_nw=atoi(argv[1]);    

+    

+    int ret = -1;  

+    ret = qser_nw_get_reg_status(h_nw,&t_info);

+    printf("%s%d\n",TEST_RESULT,ret);    

+    if(ret==0)

+    {    

+        printf("qser_nw_get_reg_status: voice_registration_valid=%d, tech_domain=%d, radio_tech=%d, roaming=%d deny_reason=%d registration_state=%d\n", 

+                      t_info.voice_registration_valid,

+                      t_info.voice_registration.tech_domain,

+                      t_info.voice_registration.radio_tech,

+                      t_info.voice_registration.roaming,

+                      t_info.voice_registration.deny_reason,

+                      t_info.voice_registration.registration_state);         

+        printf("qser_nw_get_reg_status: data_registration_valid=%d, tech_domain=%d, radio_tech=%d, roaming=%d deny_reason=%d registration_state=%d\n", 

+                      t_info.data_registration_valid,

+                      t_info.data_registration.tech_domain,

+                      t_info.data_registration.radio_tech,

+                      t_info.data_registration.roaming,

+                      t_info.data_registration.deny_reason,

+                      t_info.data_registration.registration_state);       

+    }    

+    return ret;        

+}

+

+

+int qser_network_solicited_signal_strength(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+    if(argc !=2)

+    {

+        printf("error, argc %d is not equal 2 \n",argc);

+        return -1;

+    }

+    int ret = -1;  

+    nw_client_handle_type h_nw;

+    QSER_NW_SIGNAL_STRENGTH_INFO_T t_info;

+    memset(&t_info,sizeof (t_info) , 0);

+    h_nw=atoi(argv[1]);

+    ret = qser_nw_get_signal_strength(h_nw,&t_info);

+    printf("%s%d\n",TEST_RESULT,ret);

+    if(ret==0)

+    {         

+        printf("qser_solicited_signal_strength gsm_sig_info_valid = %d\n"

+               "                               gsm_sig_info.rssi = %d\n"

+               "                               wcdma     _sig_info_valid = %d\n" 

+               "                               wcdma_sig_info.rssi = %d\n"

+               "                               wcdma_sig_info.ecio = %d\n"

+               "                               tdscdma_sig_info_valid = %d\n"

+               "                               lte_sig_info_valid = %d\n"

+               "                               lte_sig_info.rssi = %d\n"

+               "                               lte_sig_info.rsrp = %d\n"

+               "                               lte_sig_info.rsrq = %d\n"

+               "                               lte_sig_info.snr = %d\n"

+               "                               cdma_sig_info_valid = %d\n"

+               "                               hdr_sig_info_valid = %d\n"

+               "                               nr_sig_info_valid = %d\n"

+               "                               nr_sig_info.ssRsrp = %d\n"

+               "                               nr_sig_info.ssRsrq = %d\n"

+               "                               nr_sig_info.ssSinr = %d\n"

+               "                               nr_sig_info.csiRsrp = %d\n"

+               "                               nr_sig_info.csiRsrq = %d\n"

+               "                               nr_sig_info.csiSinr = %d\n",

+              t_info.gsm_sig_info_valid, t_info.gsm_sig_info.rssi,

+                t_info.wcdma_sig_info_valid, t_info.wcdma_sig_info.rssi,  t_info.wcdma_sig_info.ecio,

+              t_info.tdscdma_sig_info_valid,

+              t_info.lte_sig_info_valid, t_info.lte_sig_info.rssi, t_info.lte_sig_info.rsrp, t_info.lte_sig_info.rsrq, t_info.lte_sig_info.snr,

+              t_info.cdma_sig_info_valid, 

+              t_info.hdr_sig_info_valid, 

+              t_info.nr_sig_info_valid, t_info.nr_sig_info.ssRsrp, t_info.nr_sig_info.ssRsrq, t_info.nr_sig_info.ssSinr,

+              t_info.nr_sig_info.csiRsrp, t_info.nr_sig_info.csiRsrq, t_info.nr_sig_info.csiSinr);

+    }    

+    return ret;

+}

+

diff --git a/mbtk/test/Mobiletek_Tester_RDIT/network.h b/mbtk/test/Mobiletek_Tester_RDIT/network.h
new file mode 100755
index 0000000..c7791b1
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/network.h
@@ -0,0 +1,18 @@
+//network

+int init_network(int argc, char *argv[], int sp_test);

+int deinit_network(int argc, char *argv[], int sp_test);

+int query_operater(int argc, char *argv[], int sp_test);

+int query_network_selection_mode(int argc, char *argv[], int sp_test);

+int set_network_selection_mode(int argc, char *argv[], int sp_test);

+int query_available_network(int argc, char *argv[], int sp_test);

+int query_registration_state(int argc, char *argv[], int sp_test);

+int query_prefferred_networktype(int argc, char *argv[], int sp_test);

+int set_prefferred_networktype(int argc, char *argv[], int sp_test);

+int solicited_signal_strength(int argc, char *argv[], int sp_test);

+int set_ims(int argc, char *argv[], int sp_test);

+int qser_network_init(int argc, char *argv[], int sp_test);

+int qser_network_deinit(int argc, char *argv[], int sp_test);

+int qser_network_set_config(int argc, char *argv[], int sp_test);

+int qser_network_get_operator_name(int argc, char *argv[], int sp_test);

+int qser_network_get_reg_status(int argc, char *argv[], int sp_test);

+int qser_network_solicited_signal_strength(int argc, char *argv[], int sp_test);
\ No newline at end of file
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/qser-voice.cpp b/mbtk/test/Mobiletek_Tester_RDIT/qser-voice.cpp
new file mode 100755
index 0000000..30efe86
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/qser-voice.cpp
@@ -0,0 +1,104 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <cstring>
+#include "lynq-qser-voice.h"
+
+#include "qser-voice.h"
+
+#define TEST_RESULT "lynq_result="
+
+static int qser_hadler = 1 ;
+
+
+static int handle = -1;
+void callback_state_handler_fun(int id,char *num,qser_voice_call_state_t  state, void  *contextPtr )
+{
+    printf("callback show call id is %d,call num %s,call_state is %d,\n",id,num,state);
+    handle = id;
+    return ;
+}
+
+
+//lynq_call_init
+int qser_voice_call_client_init_test(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret= 0;
+    unsigned int uToken = atoi(argv[1]);
+    ret = qser_voice_call_client_init(&uToken);//
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret;
+}
+
+//call deinit
+int qser_voice_call_client_deinit_test(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = 0;
+    ret = qser_voice_call_client_deinit(qser_hadler);
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret;
+
+}
+
+//lynq_call
+int qser_voice_call_start_test(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = 0;
+    int call_id = -1;
+    char addr[16] = {0};
+    strncpy(addr,argv[1],sizeof(addr) - 1);
+    ret = qser_voice_call_start(qser_hadler,E_QSER_VCALL_EXTERNAL_SLOT_1,addr,&call_id);
+    printf("%s%d%d\n",TEST_RESULT,ret,call_id);
+    return ret;
+
+}
+
+//lynq_call_answer
+int qser_voice_call_answer_test(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = 0;
+    ret = qser_voice_call_answer(qser_hadler,qser_hadler);
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret;
+}
+
+//hugup
+int qser_voice_call_end_test(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = 0;
+    ret = qser_voice_call_end(qser_hadler,handle);
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret;
+}
+
+
+//add callback
+int qser_voice_call_addstatehandler_test(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = 0;
+    ret = qser_voice_call_addstatehandler(qser_hadler,callback_state_handler_fun,NULL);
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret ;
+}
+
+//remove
+int qser_voice_call_removestatehandle_test(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = 0;
+    ret = qser_voice_call_removestatehandle(qser_hadler);
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret ;
+
+}
+
+
+
+
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/qser-voice.h b/mbtk/test/Mobiletek_Tester_RDIT/qser-voice.h
new file mode 100755
index 0000000..2f365f0
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/qser-voice.h
@@ -0,0 +1,10 @@
+
+int qser_voice_call_client_init_test(int argc, char *argv[], int sp_test);
+int qser_voice_call_client_deinit_test(int argc, char *argv[], int sp_test);
+int qser_voice_call_start_test(int argc, char *argv[], int sp_test);
+int qser_voice_call_answer_test(int argc, char *argv[], int sp_test);
+int qser_voice_call_end_test(int argc, char *argv[], int sp_test);
+int qser_voice_call_addstatehandler_test(int argc, char *argv[], int sp_test);
+int qser_voice_call_removestatehandle_test(int argc, char *argv[], int sp_test);
+
+
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/req_commands.h b/mbtk/test/Mobiletek_Tester_RDIT/req_commands.h
new file mode 100755
index 0000000..d6f32f7
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/req_commands.h
@@ -0,0 +1,113 @@
+// //CC
+//     {"LYNQ_DIAL",dial_test, "dial a call", LYNQ_DIAL},
+//     {"LYNQ_CALL_INIT",init_call, "init the call lib", LYNQ_CALL_INIT},
+//     {"LYNQ_ANSWER",answer_test, "answer a call", LYNQ_ANSWER},
+//     {"LYNQ_HUNGUP",hungup_test, "hungup a call", LYNQ_HUNGUP},
+// //SMS
+//     {"LYNQ_SMS_INIT",init_sms, "init the sms lib", LYNQ_SMS_INIT},
+//     {"LYNQ_SMS_DEINIT",deinit_sms, "deinit the sms lib", LYNQ_SMS_DEINIT},
+//     {"LYNQ_SEND_SMS",send_sms, "send short message", LYNQ_SEND_SMS},
+//     {"LYNQ_READ_SMS",read_sms, "read short message", LYNQ_READ_SMS},
+//     {"LYNQ_LIST_SMS",list_sms, "list short message", LYNQ_LIST_SMS},
+//     {"LYNQ_DELETE_SMS",delete_sms, "delete short messsage", LYNQ_DELETE_SMS},
+//     {"LYNQ_WAIT_SMS",wait_sms, "wait short messsage", LYNQ_WAIT_SMS},
+//     {"LYNQ_GET_SMSC_ADDRESS",get_smsc_address, "get smsc address", LYNQ_GET_SMSC_ADDRESS},
+//     {"LYNQ_SET_SMSC_ADDRESS",set_smsc_address, "set smsc address", LYNQ_SET_SMSC_ADDRESS},
+// //NETWORK
+//     {"LYNQ_NETWORK_INIT",init_network, "init the network lib", LYNQ_NETWORK_INIT},
+//     {"LYNQ_NETWORK_DEINIT",deinit_network, "deinit the network lib", LYNQ_NETWORK_DEINIT},
+//     {"LYNQ_QUERY_OPERATER",query_operater, "query operater infomation ", LYNQ_QUERY_OPERATER},
+//     {"LYNQ_QUERY_NETWORK_SELECTION_MODE",query_network_selection_mode, "query network selection mode", LYNQ_QUERY_NETWORK_SELECTION_MODE},
+//     {"LYNQ_SET_NETWORK_SELECTION_MODE",set_network_selection_mode, "set network selection mode", LYNQ_SET_NETWORK_SELECTION_MODE},
+//     {"LYNQ_QUERY_AVAILABLE_NETWORK",query_available_network, "query available network", LYNQ_QUERY_AVAILABLE_NETWORK},
+//     {"LYNQ_QUERY_REGISTRATION_STATE",query_registration_state, "query registration state", LYNQ_QUERY_REGISTRATION_STATE},
+//     {"LYNQ_QUERY_PREFFERRED_NETWORKTYPE",query_prefferred_networktype, "query prefferred networktype", LYNQ_QUERY_PREFFERRED_NETWORKTYPE},
+//     {"LYNQ_SET_PREFFERRED_NETWORKTYPE",set_prefferred_networktype, "set prefferred networktype", LYNQ_SET_PREFFERRED_NETWORKTYPE},
+//     {"LYNQ_SOLICITED_SIGNAL_STRENGTH",solicited_signal_strength, "solicited signal strength", LYNQ_SOLICITED_SIGNAL_STRENGTH},
+//     {"LYNQ_SET_IMS",set_ims, "set ims open or close", LYNQ_SET_IMS},
+// //DATA
+//     {"LYNQ_DATA_INIT",init_data, "init the data lib", LYNQ_DATA_INIT},
+//     {"LYNQ_DATA_DEINIT",deinit_data, "deinit the data lib", LYNQ_DATA_DEINIT},
+//     {"LYNQ_SETUP_DATA_CALL",setup_data_call, "set up data call", LYNQ_SETUP_DATA_CALL},
+//     {"LYNQ_SETUP_DATA_CALL_SP",setup_data_call_sp, "set up data call sp", LYNQ_SETUP_DATA_CALL_SP},
+//     {"LYNQ_DEACTIVATE_DATA_CALL",deactivte_data_call, "deactive data call", LYNQ_DEACTIVATE_DATA_CALL},
+//     {"LYNQ_WAIT_DATA_CALL",wait_data_call, "wait data call", LYNQ_WAIT_DATA_CALL},
+//     {"LYNQ_GET_DATA_CALL_LIST",get_data_call_list, "get data call list", LYNQ_GET_DATA_CALL_LIST},
+//QSER_NETWORK
+    {"LYNQ_QSER_NETWORK_INIT",qser_network_init, "init the network lib", LYNQ_QSER_NETWORK_INIT},
+    {"LYNQ_QSER_NETWORK_DEINIT",qser_network_deinit, "deinit the network lib", LYNQ_QSER_NETWORK_DEINIT},
+    {"LYNQ_QSER_NETWORK_SET_CONCIFG",qser_network_set_config, "set network config", LYNQ_QSER_NETWORK_SET_CONCIFG},
+    {"LYNQ_QSER_NETWORK_GTE_OPERRATOR_NAME",qser_network_get_operator_name, "query operater infomation", LYNQ_QSER_NETWORK_GTE_OPERRATOR_NAME},
+    {"LYNQ_QSER_NETWORK_GET_REG_STATUS",qser_network_get_reg_status, "query registration status", LYNQ_QSER_NETWORK_GET_REG_STATUS},
+    {"LYNQ_QSER_NETWORK_SOLICITED_SIGNAL_STRENGTH",qser_network_solicited_signal_strength, "solicited signal strength", LYNQ_QSER_NETWORK_SOLICITED_SIGNAL_STRENGTH},
+//QSER_DATA
+    {"LYNQ_QSER_DATA_INIT",qser_init_data, "init the data lib", LYNQ_QSER_DATA_INIT},
+    {"LYNQ_QSER_DATA_DEINIT",qser_deinit_data, "deinit the data lib", LYNQ_QSER_DATA_DEINIT},
+    {"LYNQ_QSER_SETUP_DATA_CALL",qser_setup_data_call, "set up data call", LYNQ_QSER_SETUP_DATA_CALL},
+    {"LYNQ_QSER_SETUP_DATA_CALL_ASYNC",qser_setup_data_call_async, "set up data call asynchronously", LYNQ_QSER_SETUP_DATA_CALL_ASYNC},
+    {"LYNQ_QSER_DEACTIVATE_DATA_CALL",qser_deactivte_data_call, "deactive data call", LYNQ_QSER_DEACTIVATE_DATA_CALL},
+    {"LYNQ_QSER_GET_DATA_CALL_LIST",qser_get_data_call_list, "get data call list", LYNQ_QSER_GET_DATA_CALL_LIST},
+    {"LYNQ_QSER_APN_SET",lynq_qser_apn_set, "set apn", LYNQ_QSER_APN_SET},
+    {"LYNQ_QSER_APN_GET",lynq_qser_apn_get, "get apn", LYNQ_QSER_APN_GET},
+    {"LYNQ_QSER_APN_ADD",lynq_qser_apn_add, "set apn", LYNQ_QSER_APN_ADD},
+    {"LYNQ_QSER_APN_DEL",lynq_qser_apn_del, "del apn", LYNQ_QSER_APN_DEL},
+    {"LYNQ_QSER_APN_GET_LIST",lynq_qser_apn_get_list, "get apn list", LYNQ_QSER_APN_GET_LIST},
+//QSER VOICE
+    {"LYNQ_QSER_CALL_INIT",qser_voice_call_client_init_test,"qser_voice_call_client_init_test",LYNQ_QSER_CALL_INIT},
+    {"LYNQ_QSER_CALL_DEINIT",qser_voice_call_client_deinit_test,"qser_voice_call_client_deinit_test",LYNQ_QSER_CALL_DEINIT},
+    {"LYNQ_QSER_CALL_START",qser_voice_call_start_test,"qser_voice_call_start_test",LYNQ_QSER_CALL_START},
+    {"LYNQ_QSER_CALL_ANSWER",qser_voice_call_answer_test,"qser_voice_call_answer_test",LYNQ_QSER_CALL_ANSWER},
+    {"LYNQ_QSER_CALL_END",qser_voice_call_end_test,"qser_voice_call_end_test",LYNQ_QSER_CALL_END},
+    {"LYNQ_QSER_CALL_HANDLER",qser_voice_call_addstatehandler_test,"qser_voice_call_addstatehandler_test",LYNQ_QSER_CALL_HANDLER},
+    {"LYNQ_QSER_CALL_REMOVE",qser_voice_call_removestatehandle_test,"qser_voice_call_removestatehandle_test",LYNQ_QSER_CALL_REMOVE},
+
+// //SIM
+//     {"LYNQ_SIM_INIT",init_sim, "init sim lib", LYNQ_SIM_INIT},
+//     {"LYNQ_GET_IMSI",get_imsi_test, "get imsi", LYNQ_GET_IMSI},
+//     {"LYNQ_GET_SIM_STATUS",get_sim_status_test, "get sim status", LYNQ_GET_SIM_STATUS}, 
+//     //GET_SIM_STATUS,					/*radiooptions 11 1 0*/
+//     {"LYNQ_GET_ICCID",get_iccid_test, "get iccid", LYNQ_GET_ICCID},
+//     //QUERY_ICCID,					/*radiooptions 30 1 0*/
+//     {"LYNQ_ENABLE_PIN",enable_pin_test, "enable pin", LYNQ_ENABLE_PIN},
+//     {"LYNQ_SIM_POWER",sim_power_test, "sim power", LYNQ_SIM_POWER},
+//     {"LYNQ_DISABLE_PIN",disable_pin_test, "disable pin", LYNQ_DISABLE_PIN},
+//     {"LYNQ_QUERY_PIN_LOCK",query_pin_lock_test, "query pin lock", LYNQ_QUERY_PIN_LOCK},
+//     //QUERY_FACILITY_LOCK,			/*radiooptions 35 fac 1 0*/
+//     {"LYNQ_VERIFY_PIN",verify_pin_test, "verify pin", LYNQ_VERIFY_PIN},
+//     {"LYNQ_CHANGE_PIN",change_pin_test, "change pin", LYNQ_CHANGE_PIN},
+//     {"LYNQ_UNLOCK_PIN",unlock_pin_test, "unlock pin", LYNQ_UNLOCK_PIN},
+//     {"LYNQ_GET_IMEI",get_imei_test, "get imei", LYNQ_GET_IMEI},//lynq_get_imei ,at cmd
+//     {"LYNQ_GET_IMEI_AND_SV",get_imei_and_sv_test, "get imei and sv", LYNQ_GET_IMEI_AND_SV},
+//     {"LYNQ_SWITCH_CARD",switch_card_test, "switch card", LYNQ_GET_IMEI_AND_SV},
+//     {"LYNQ_GETPHONENUMBER",query_phone_number_test, "query phone num", LYNQ_GETPHONENUMBER},//LYNQ_RIL_REQUEST_OEM_HOOK_RAW
+//     //RIL_REQUEST_OEM_HOOK_RAW
+//     {"LYNQ_SIM_DEINIT",deinit_sim, "deinit sim lib", LYNQ_SIM_DEINIT},
+//     {"LYNQ_GET_VERSION",get_version, "lynq get version", LYNQ_GET_VERSION},
+//     {"LYNQ_RESET_MD",reset_modem,"reset modem",LYNQ_RESET_MD},
+//     {"LYNQ_GET_MSISDN",get_msisdn, "lynq get msisdn", LYNQ_GET_MSISDN},
+
+
+//QSER SIM
+    {"LYNQ_QSER_SIM_INIT",qser_init_sim, "init sim lib", LYNQ_QSER_SIM_INIT},
+    {"LYNQ_QSER_GET_IMSI",qser_get_imsi_test, "get imsi", LYNQ_QSER_GET_IMSI},
+    {"LYNQ_QSER_GET_ICCID",qser_get_iccid_test, "get iccid", LYNQ_QSER_GET_ICCID},
+    {"LYNQ_QSER_GETPHONENUMBER",qser_get_phonenumber_test, "get phonenumber", LYNQ_QSER_GETPHONENUMBER},
+    {"LYNQ_QSER_VERIFY_PIN",qser_verify_pin_test, "verify pin", LYNQ_QSER_VERIFY_PIN},
+    {"LYNQ_QSER_CHANGE_PIN",qser_change_pin_test, "change pin", LYNQ_QSER_CHANGE_PIN},
+    {"LYNQ_QSER_UNLOCK_PIN",qser_unlock_pin_test, "unlock pin", LYNQ_QSER_UNLOCK_PIN},
+    {"LYNQ_QSER_ENABLE_PIN",qser_enable_pin_test, "enable pin", LYNQ_QSER_ENABLE_PIN},
+    {"LYNQ_QSER_DISABLE_PIN",qser_disable_pin_test, "disable pin", LYNQ_QSER_DISABLE_PIN},
+    {"LYNQ_QSER_GET_SIM_STATUS",qser_get_sim_status_test, "get sim status", LYNQ_QSER_GET_SIM_STATUS},
+    {"LYNQ_QSER_SIM_DEINIT",qser_deinit_sim, "deinit sim lib", LYNQ_QSER_SIM_DEINIT},
+//QSER SMS
+    {"LYNQ_QSER_SMS_INIT",qser_init_sms, "init the sms lib", LYNQ_QSER_SMS_INIT},
+    {"LYNQ_QSER_SMS_DEINIT",qser_deinit_sms, "deinit the sms lib", LYNQ_QSER_SMS_DEINIT},
+    {"LYNQ_QSER_SEND_SMS",qser_send_sms, "send short message", LYNQ_QSER_SEND_SMS},
+    //{"LYNQ_QSER_READ_SMS",qser_read_sms, "read short message", LYNQ_QSER_READ_SMS},
+    //{"LYNQ_QSER_LIST_SMS",qser_list_sms, "list short message", LYNQ_QSER_LIST_SMS},
+    {"LYNQ_QSER_DELETE_SMS",qser_delete_sms, "delete short messsage", LYNQ_QSER_DELETE_SMS},
+    //{"LYNQ_QSER_WAIT_SMS",qser_wait_sms, "wait short messsage", LYNQ_QSER_WAIT_SMS},
+
+    {(char *)NULL, NULL, (char *)NULL , -1},
+
+
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/sim.cpp b/mbtk/test/Mobiletek_Tester_RDIT/sim.cpp
new file mode 100755
index 0000000..9a8a2a6
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/sim.cpp
@@ -0,0 +1,363 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "lynq_sim.h"
+#include "lynq_qser_sim.h"
+#include "sim.h"
+#define TEST_RESULT "lynq_result="
+
+static int handle = 0;
+
+
+// int init_sim(int argc, char *argv[], int sp_test)
+// {
+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+//     int ret = -1;
+//     int uToken = atoi(argv[1]);
+//     ret = lynq_sim_init(uToken);
+//     printf("%s%d\n",TEST_RESULT,ret);
+//     return ret;
+// }
+
+// int get_imsi_test(int argc, char *argv[], int sp_test)
+// {
+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+//     int ret = -1;
+//     char imsi_buf[SIM_BUF] = "";
+//     ret = lynq_get_imsi(imsi_buf);
+//     printf("%s%d\n",TEST_RESULT,ret);
+//     printf("[%s-%d] IMSI:%s\n", __FUNCTION__, __LINE__, imsi_buf);
+//     return ret;
+// }
+
+// int get_sim_status_test(int argc, char *argv[], int sp_test)
+// {
+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+//     int ret = -1;
+//     int sim_status = -1;
+//     //ret = lynq_get_sim_status(&sim_status);
+//     printf("%s%d\n",TEST_RESULT,ret);
+//     return ret;
+// }
+
+// int get_iccid_test(int argc, char *argv[], int sp_test)
+// {
+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+//     int ret = -1;
+//     char iccid[SIM_BUF] = "";
+//     ret = lynq_get_iccid(iccid);
+//     printf("%s%d\n",TEST_RESULT,ret);
+//     if(!ret)
+//         printf("[%s-%d] ICCID:%s\n", __FUNCTION__, __LINE__, iccid);
+
+//     return ret;
+// }
+
+// int enable_pin_test(int argc, char *argv[], int sp_test)
+// {
+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+//     int ret = -1;
+//     char pin[SIM_BUF] = "";
+//     ret = lynq_enable_pin(pin);
+//     printf("%s%d\n",TEST_RESULT,ret);
+//     return ret;
+// }
+
+
+
+// int sim_power_test(int argc, char *argv[], int sp_test)
+// {
+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+//     int ret = -1;
+//     int mode = 0;
+// #ifdef MOBILETEK_TARGET_PLATFORM_T106
+//     ret = lynq_reset_sim();
+// #else
+//     ret = lynq_sim_power(mode);
+// #endif
+//     printf("%s%d\n",TEST_RESULT,ret);
+//     return ret;
+// }
+
+// int disable_pin_test(int argc, char *argv[], int sp_test)
+// {
+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+//     int ret = -1;
+//     char pin[SIM_BUF] = "";
+//     ret = lynq_disable_pin(pin);
+//     printf("%s%d\n",TEST_RESULT,ret);
+//     return ret;
+// }
+
+// int query_pin_lock_test(int argc, char *argv[], int sp_test)
+// {
+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+//     int ret = -1;
+//     char pin[SIM_BUF] = "";
+//     int lock[SIM_BUF] = {0};
+//     ret = lynq_query_pin_lock(pin,lock);
+//     printf("%s%d\n",TEST_RESULT,ret);
+//     return ret;
+// }
+
+// int verify_pin_test(int argc, char *argv[], int sp_test)
+// {
+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+//     int ret = -1;
+//     char pin[SIM_BUF] = "";
+//     ret = lynq_verify_pin(pin);
+//     printf("%s%d\n",TEST_RESULT,ret);
+//     return ret;
+// }
+
+// int change_pin_test(int argc, char *argv[], int sp_test)
+// {
+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+//     int ret = -1;
+//     char old_pin[SIM_BUF] = "";
+//     char new_pin[SIM_BUF] = "";
+//     ret = lynq_change_pin(old_pin, new_pin);
+//     printf("%s%d\n",TEST_RESULT,ret);
+//     return ret;
+// }
+
+// int unlock_pin_test(int argc, char *argv[], int sp_test)
+// {
+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+//     int ret = -1;
+//     char puk[SIM_BUF] = "";
+//     char new_pin[SIM_BUF] = "";
+//     ret = lynq_unlock_pin(puk, new_pin);
+//     printf("%s%d\n",TEST_RESULT,ret);
+//     return ret;
+// }
+// //#error rita
+
+// int get_imei_test(int argc, char *argv[], int sp_test)
+// {
+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+//     int ret = -1;
+//     char buf[SIM_BUF] = "";
+//     ret = lynq_get_imei(buf);
+//     printf("%s%d\n",TEST_RESULT,ret);
+//     printf("[%s-%d] IMEI:%s\n", __FUNCTION__, __LINE__, buf);
+//     return ret;
+// }
+
+// int get_imei_and_sv_test(int argc, char *argv[], int sp_test)
+// {
+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+//     int ret = -1;
+//     char imei[SIM_BUF] = "";
+//     char sv[SIM_BUF] = "";
+//     ret = lynq_get_imei_and_sv(imei, sv);
+//     printf("%s%d\n",TEST_RESULT,ret);
+//     printf("[%s-%d] IMEI:%s, SV:%s\n", __FUNCTION__, __LINE__, imei, sv);
+//     return ret;
+// }
+
+// int switch_card_test(int argc, char *argv[], int sp_test)
+// {
+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+//     int ret = -1;
+//     char solt = 0;
+//     ret = lynq_switch_card(solt);
+//     printf("%s%d\n",TEST_RESULT,ret);
+//     return ret;
+// }
+
+// int query_phone_number_test(int argc, char *argv[], int sp_test)
+// {
+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+//     int ret = -1;
+//     char buf[SIM_BUF] = "";
+//     ret = lynq_query_phone_number(buf);
+//     printf("%s%d\n",TEST_RESULT,ret);
+//     printf("[%s-%d] PHONE_NUM:%s\n", __FUNCTION__, __LINE__, buf);
+//     return ret;
+// }
+
+// int deinit_sim(int argc, char *argv[], int sp_test)
+// {
+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+//     int ret = -1;
+//     ret = lynq_sim_deinit();
+//     printf("%s%d\n",TEST_RESULT,ret);
+//     return ret;
+// }
+// int get_version(int argc, char *argv[], int sp_test)
+// {
+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+//     char buf[128] = "";
+//     int ret = -1;
+//     ret = lynq_get_version(buf);
+//     printf("%s%d\n",TEST_RESULT,ret);
+//     printf("[%s-%d] VERSION:%s\n", __FUNCTION__, __LINE__, buf);
+//     return ret;
+// }
+
+// int reset_modem(int argc, char *argv[], int sp_test)
+// {
+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+//     char buf[128] = "";
+//     int ret = -1;
+//     ret = lynq_reset_modem();
+//     printf("%s%d\n",TEST_RESULT,ret);
+//     return ret;
+// }
+
+// int get_msisdn(int argc, char *argv[], int sp_test)
+// {
+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+//     char buf[128] = "";
+//     int ret = -1;
+//     ret = lynq_query_phone_number(buf);
+//     printf("[%s][%d] buf = %s\n",__FUNCTION__,__LINE__, buf);
+//     printf("%s%d\n",TEST_RESULT,ret);
+//     return ret;
+// }
+
+//qser api
+sim_client_handle_type  ph_sim;
+int qser_init_sim(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = -1;
+    ph_sim = (sim_client_handle_type)atoi(argv[1]);
+    ret = qser_sim_client_init(&ph_sim);
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret;
+}
+
+int qser_get_imsi_test(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = -1;
+    char imsi_buf[SIM_BUF] = "";
+    //sim_client_handle_type h_sim = ph_sim;
+    QSER_SIM_APP_ID_INFO_T pt_info; 
+    size_t imsiLen = 0;
+    ret = qser_sim_getimsi(ph_sim, &pt_info, imsi_buf, imsiLen);
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret;
+}
+
+int qser_get_iccid_test(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = -1;
+    char iccid[SIM_BUF] = "";
+    int uToken = atoi(argv[1]);
+    //sim_client_handle_type h_sim = gtoken;
+    QSER_SIM_SLOT_ID_TYPE_T simId;
+    int iccidLen = 0;
+    ret = qser_sim_geticcid(ph_sim, simId, iccid, iccidLen);
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret;
+}
+
+int qser_get_phonenumber_test(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = -1;
+    char phone_num[SIM_BUF] = "";
+    //sim_client_handle_type h_sim = gtoken;
+    QSER_SIM_APP_ID_INFO_T pt_info; 
+    int phoneLen = 0;
+    ret = qser_sim_getphonenumber(ph_sim, &pt_info, phone_num, phoneLen);
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret;
+}
+
+int qser_verify_pin_test(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = -1;
+    //sim_client_handle_type h_sim = gtoken;
+    QSER_SIM_VERIFY_PIN_INFO_T pt_info;
+    strcpy(pt_info.pin_value, argv[1]);
+    ret =  qser_sim_verifypin(ph_sim, &pt_info);
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret;
+}
+
+int qser_change_pin_test(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = -1;
+    //sim_client_handle_type h_sim = gtoken;
+    QSER_SIM_CHANGE_PIN_INFO_T pt_info;
+
+    strcpy(pt_info.old_pin_value, argv[1]);
+    strcpy(pt_info.new_pin_value, argv[2]);
+    ret =  qser_sim_changepin(ph_sim, &pt_info);
+    
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret;
+}
+
+int qser_unlock_pin_test(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = -1;
+    //sim_client_handle_type h_sim = gtoken;
+    QSER_SIM_UNBLOCK_PIN_INFO_T pt_info;
+
+    strcpy(pt_info.puk_value, argv[1]);
+    strcpy(pt_info.new_pin_value, argv[2]);
+    ret =  qser_sim_unblockpin(ph_sim, &pt_info);
+    
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret;
+}
+
+int qser_enable_pin_test(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = -1;
+    //sim_client_handle_type h_sim = gtoken;
+    QSER_SIM_ENABLE_PIN_INFO_T pt_info;
+
+    strcpy(pt_info.pin_value, argv[1]);
+    ret =  qser_sim_enablepin(ph_sim, &pt_info);
+    
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret;
+}
+
+int qser_disable_pin_test(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = -1;
+    //sim_client_handle_type h_sim = gtoken;
+    QSER_SIM_DISABLE_PIN_INFO_T pt_info;
+
+    strcpy(pt_info.pin_value, argv[1]);
+    ret =  qser_sim_disablepin(ph_sim, &pt_info);
+    
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret;
+}
+
+int qser_get_sim_status_test(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = -1;
+    //sim_client_handle_type h_sim = gtoken;
+    QSER_SIM_SLOT_ID_TYPE_T simId;
+    QSER_SIM_CARD_STATUS_INFO_T pt_info;
+
+    ret =  qser_sim_getcardstatus(ph_sim, simId, &pt_info);
+    
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret;
+}
+
+int qser_deinit_sim(int argc, char *argv[], int sp_test)
+{
+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+    int ret = -1;
+    ret = qser_sim_client_deinit(ph_sim);
+    printf("%s%d\n",TEST_RESULT,ret);
+    return ret;
+}
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/sim.h b/mbtk/test/Mobiletek_Tester_RDIT/sim.h
new file mode 100755
index 0000000..bd6511f
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/sim.h
@@ -0,0 +1,36 @@
+//SIM
+#define SIM_BUF 32
+int init_sim(int argc, char *argv[], int sp_test);
+int get_imsi_test(int argc, char *argv[], int sp_test);
+int get_sim_status_test(int argc, char *argv[], int sp_test);
+int get_iccid_test(int argc, char *argv[], int sp_test);
+int enable_pin_test(int argc, char *argv[], int sp_test);
+int sim_power_test(int argc, char *argv[], int sp_test);
+int disable_pin_test(int argc, char *argv[], int sp_test);
+int query_pin_lock_test(int argc, char *argv[], int sp_test);
+int verify_pin_test(int argc, char *argv[], int sp_test);
+int change_pin_test(int argc, char *argv[], int sp_test);
+int unlock_pin_test(int argc, char *argv[], int sp_test);
+int get_imei_test(int argc, char *argv[], int sp_test);
+int get_imei_and_sv_test(int argc, char *argv[], int sp_test);
+int switch_card_test(int argc, char *argv[], int sp_test);
+int query_phone_number_test(int argc, char *argv[], int sp_test);
+int deinit_sim(int argc, char *argv[], int sp_test);
+int get_version(int argc, char *argv[], int sp_test);
+int reset_modem(int argc, char *argv[], int sp_test);
+int get_msisdn(int argc, char *argv[], int sp_test);
+int reset_simcard(int argc, char *argv[], int sp_test);
+
+//QSER SIM
+int qser_init_sim(int argc, char *argv[], int sp_test);
+int qser_get_imsi_test(int argc, char *argv[], int sp_test);
+int qser_get_iccid_test(int argc, char *argv[], int sp_test);
+int qser_get_phonenumber_test(int argc, char *argv[], int sp_test);
+int qser_verify_pin_test(int argc, char *argv[], int sp_test);
+int qser_change_pin_test(int argc, char *argv[], int sp_test);
+int qser_unlock_pin_test(int argc, char *argv[], int sp_test);
+int qser_enable_pin_test(int argc, char *argv[], int sp_test);
+int qser_disable_pin_test(int argc, char *argv[], int sp_test);
+int qser_get_sim_status_test(int argc, char *argv[], int sp_test);
+int qser_deinit_sim(int argc, char *argv[], int sp_test);
+
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/sms.cpp b/mbtk/test/Mobiletek_Tester_RDIT/sms.cpp
new file mode 100755
index 0000000..ef22c29
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/sms.cpp
@@ -0,0 +1,157 @@
+#include <stdio.h>

+#include <stdlib.h>

+#include <string.h>

+#include "lynq_sms.h"

+#include "lynq_qser_sms.h"

+#include "sms.h"

+#define TEST_RESULT "lynq_result="

+

+// int init_sms(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     int uToken = atoi(argv[1]);

+//     ret = lynq_sms_init(uToken);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     return ret;

+// }

+// int deinit_sms(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     ret = lynq_sms_deinit();

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     return ret;

+// }

+// int send_sms(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     int charset = atoi(argv[2]);

+//     int msglen = atoi(argv[4]);

+//     ret = lynq_send_sms(argv[1], charset, argv[3], msglen);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     return ret;

+// }

+// int read_sms(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     int index = atoi(argv[1]);

+//     int status = atoi(argv[2]);

+//     int charset = atoi(argv[3]);

+//     int smscLen = atoi(argv[5]);

+//     int smslen = atoi(argv[7]);

+//     int numLen = atoi(argv[9]);

+//     int current = atoi(argv[10]);

+//     int total = atoi(argv[11]);

+//     ret = lynq_read_sms(index, &status, &charset, argv[4], &smscLen, &smslen, argv[6], argv[8], &numLen, &current, &total);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     printf("LYNQ_SMS_READ: status=%d, charset=%d, smsc=%s, smscLen=%d, message=%s, smslen=%d, teleNum=%s, numLen=%d, current=%d, total=%d\n", status, charset, argv[4], smscLen, argv[6], smslen, argv[8], numLen, current, total);

+//     return ret;

+// }

+// int list_sms(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+    

+//     ret = lynq_list_sms(argv[1]);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     printf("LYNQ_LIST_SMS: index_list=%s\n", argv[1]);

+//     return ret;

+// }

+// int delete_sms(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     int index = atoi(argv[1]);

+

+//     ret = lynq_delete_sms(index);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     return ret;

+// }

+// int wait_sms(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     int handle = atoi(argv[1]);

+

+//     ret = lynq_wait_receive_new_sms(&handle);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     printf("LYNQ_WAIT_SMS: handle=%d\n", handle);

+//     return ret;

+// }

+

+// int get_smsc_address(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     //int handle = atoi(argv[1]);

+//     char service_num[22] = "";

+//     ret = lynq_get_smsc_address(service_num);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     printf("LYNQ_GET_SMSC_ADDRESS: %s\n", service_num);

+//     return ret;

+// }

+

+// int set_smsc_address(int argc, char *argv[], int sp_test)

+// {

+//     printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+//     int ret = -1;

+//     //int handle = atoi(argv[1]);

+//     char service_num[22] = "";

+//     strncpy(service_num, argv[1], 22);

+//     ret = lynq_set_smsc_address(service_num);

+//     printf("%s%d\n",TEST_RESULT,ret);

+//     return ret;

+// }

+

+//QSER API

+sms_client_handle_type  ph_sms;

+int qser_init_sms(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+    int ret = -1;

+    ph_sms = atoi(argv[1]);

+    ret = qser_sms_client_init(&ph_sms);

+    printf("%s%d\n",TEST_RESULT,ret);

+    return ret;

+}

+

+int qser_deinit_sms(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+    int ret = -1;

+    ret = qser_sms_client_deinit(ph_sms);

+    printf("%s%d\n",TEST_RESULT,ret);

+    return ret;

+}

+

+int qser_send_sms(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+    int ret = -1;

+    QSER_sms_info_t pt_sms_info;

+    

+    strcpy(pt_sms_info.src_addr, argv[1]);

+    pt_sms_info.format = (QSER_SMS_T)atoi(argv[2]);

+    strcpy(pt_sms_info.sms_data, argv[3]);

+    pt_sms_info.sms_data_len = atoi(argv[4]);

+    

+    ret = qser_sms_send_sms(ph_sms, &pt_sms_info);

+    printf("%s%d\n",TEST_RESULT,ret);

+    return ret;

+}

+#if 1

+int qser_delete_sms(int argc, char *argv[], int sp_test)

+{

+    printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);

+    int ret = -1;

+    QSER_sms_storage_info_t  pt_sms_storage;

+    

+    pt_sms_storage.storage_idx= atoi(argv[1]);

+    ret = qser_sms_deletefromstorage(ph_sms, &pt_sms_storage);

+    printf("%s%d\n",TEST_RESULT,ret);

+    return ret;

+}

+#endif

diff --git a/mbtk/test/Mobiletek_Tester_RDIT/sms.h b/mbtk/test/Mobiletek_Tester_RDIT/sms.h
new file mode 100755
index 0000000..307ff56
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/sms.h
@@ -0,0 +1,15 @@
+//SMS

+int init_sms(int argc, char *argv[], int sp_test);

+int deinit_sms(int argc, char *argv[], int sp_test);

+int send_sms(int argc, char *argv[], int sp_test);

+int read_sms(int argc, char *argv[], int sp_test);

+int list_sms(int argc, char *argv[], int sp_test);

+int delete_sms(int argc, char *argv[], int sp_test);

+int wait_sms(int argc, char *argv[], int sp_test);

+int get_smsc_address(int argc, char *argv[], int sp_test);

+int set_smsc_address(int argc, char *argv[], int sp_test);

+//QSER SMS

+int qser_init_sms(int argc, char *argv[], int sp_test);

+int qser_deinit_sms(int argc, char *argv[], int sp_test);

+int qser_send_sms(int argc, char *argv[], int sp_test);

+int qser_delete_sms(int argc, char *argv[], int sp_test);
\ No newline at end of file
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/socket-tool.cpp b/mbtk/test/Mobiletek_Tester_RDIT/socket-tool.cpp
new file mode 100755
index 0000000..990a910
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/socket-tool.cpp
@@ -0,0 +1,48 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <sys/types.h>
+#include <pthread.h>
+#include <errno.h>
+#include "lynq.h"
+
+struct sockaddr_un g_client_local_addr = {0};
+
+int main(int argc,char*argv[])
+{
+    int client_socket_fd = -1;
+    char socket_name_client[64]={0};
+    char socket_name_service[64]={0};
+    memset(&g_client_local_addr,0,sizeof(g_client_local_addr));
+    socklen_t addrlen = sizeof(g_client_local_addr);
+    if(argc < 3)
+    {
+        printf("please input socket name and msg\n");
+    }
+    if((argv[1] != NULL) && (argv[2]!=NULL))
+    {
+        sprintf(socket_name_service,"/var/run/socket/%s",argv[1]);
+        //sprintf(socket_name_client,"/var/socket/%s-client",argv[1]);
+        client_socket_fd = create_socket(AF_UNIX, SOCK_DGRAM,0, 0, NULL,socket_name_service, (void *)&g_client_local_addr, 2, 1);
+        if(0 > client_socket_fd)
+        {
+            printf("init socket fail and fd:%d\n",client_socket_fd);
+            return -1;
+        }
+    }
+    else
+    {
+        return -1;
+    }
+    //g_client_local_addr.sun_family = AF_UNIX;
+    //sprintf(g_client_local_addr.sun_path, socket_name_service);
+    int data_len = sendto(client_socket_fd, argv[2], strlen(argv[2]), 0, (sockaddr*)&g_client_local_addr,addrlen);
+    //int data_len = send(client_socket_fd,argv[2],strlen(argv[2]),0);
+    if(data_len <= 0 )
+    {
+         printf("end msg fail er_code:%s\n",strerror(errno));
+    }
+    close(client_socket_fd);
+    return 0;
+}
diff --git a/mbtk/test/libql_lib_v2/ql_ecall_test.c b/mbtk/test/libql_lib_v2/ql_ecall_test.c
index 0ad1113..5ce5d2e 100755
--- a/mbtk/test/libql_lib_v2/ql_ecall_test.c
+++ b/mbtk/test/libql_lib_v2/ql_ecall_test.c
@@ -821,6 +821,7 @@
 void item_ql_ecall_set_config_info(void)
 {
     ql_ecall_config_t ecall_context_info;
+    memset(&ecall_context_info, 0, sizeof(ql_ecall_config_t));
 
     printf("Whether the time of T5 timer is valid(0:no, 1:yes):\n");
     scanf("%hhd", &ecall_context_info.t5_timeout_ms_valid);
diff --git a/mbtk/test/libql_lib_v2/ql_tee_test.c b/mbtk/test/libql_lib_v2/ql_tee_test.c
new file mode 100755
index 0000000..58c7463
--- /dev/null
+++ b/mbtk/test/libql_lib_v2/ql_tee_test.c
@@ -0,0 +1,67 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include "ql_tee_service.h"
+
+
+#define TEST_OBJECT_SIZE	128
+
+int main(void)
+{
+    int ret;
+    unsigned int len;
+    char obj1_id[] = "object#1";
+    char obj1_data[] = "123456789";
+    char read_data[TEST_OBJECT_SIZE];
+    uint32_t object;
+    uint32_t count;
+
+
+    printf("ql_ss_initialize start\n");
+    ret =  ql_ss_initialize();
+    if(ret != 0)
+    {
+        printf("ql_ss_initialize fail\n");
+    }
+
+    ret = ql_ss_open(obj1_id, sizeof(obj1_id), &object);
+    if(ret != 0)
+    {
+        printf("ql_ss_open fail\n");
+	return 0;
+    }
+
+    ret = ql_ss_write(object, obj1_data, sizeof(obj1_data));
+    if(ret != 0)
+    {
+        printf("ql_ss_write fail\n");
+        return 0;
+    }
+
+    ret = ql_ss_read(object, read_data, sizeof(obj1_data), &count);
+    if(ret != 0)
+    {
+        printf("ql_ss_read fail\n");
+        return 0;
+    }
+    printf("read_data: %s\n", read_data);
+    
+
+    ret = ql_ss_unlink(object);
+    if(ret != 0)
+    {
+        printf("ql_ss_unlink fail\n");
+        return 0;
+    }
+
+    ql_ss_close(object);
+    ql_ss_deinitialize();
+
+    return 0;
+
+
+}
+
+
+
diff --git a/mbtk/test/others/key_ev_demo.c b/mbtk/test/others/key_ev_demo.c
new file mode 100755
index 0000000..728b5d0
--- /dev/null
+++ b/mbtk/test/others/key_ev_demo.c
@@ -0,0 +1,251 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <poll.h>
+#include <errno.h>
+#include <linux/input.h>
+#include <sys/stat.h>
+#include <sys/reboot.h>
+#include <sys/timerfd.h>
+#include <time.h>
+
+#include "mbtk_type.h"
+#include "mbtk_log.h"
+
+
+#define MAX_DEVICES 16
+#define EVIOCSSUSPENDBLOCK _IOW('E', 0x91, int)
+#define POWER_KEY_LONG_PRESS_TIMEOUT 8000  // 8s
+#define POWER_KEY_PRESS_TIMEOUT 2000  // 2s
+
+static struct pollfd ev_fds[MAX_DEVICES];
+static unsigned ev_count = 0;
+
+
+static int ev_init(void)
+{
+    DIR *dir;
+    struct dirent *de;
+    int fd;
+
+    fd = open("/dev/rtc0", O_RDONLY);
+    if (fd < 0)
+    {
+        LOGW("open rtc0 error\n");
+    }
+    else
+    {
+        ev_fds[ev_count].fd = fd;
+        ev_fds[ev_count].events = POLLIN;
+        ev_count++;
+        LOGI("Monitor /dev/rtc0");
+    }
+
+    dir = opendir("/dev/input");
+    if (dir != NULL)
+    {
+        LOGI("dir = /dev/input");
+        while ((de = readdir(dir)) != NULL)
+        {
+            if (strncmp(de->d_name, "event", 5))
+                continue;
+            fd = openat(dirfd(dir), de->d_name, O_RDONLY);
+            if (fd < 0)
+                continue;
+
+            ev_fds[ev_count].fd = fd;
+            ev_fds[ev_count].events = POLLIN;
+            ioctl(fd, EVIOCSSUSPENDBLOCK, 1);
+            ev_count++;
+            if (ev_count == MAX_DEVICES)
+                break;
+
+            LOGI("Monitor /dev/input/%s", de->d_name);
+        }
+
+        closedir(dir);
+    }
+    else
+    {
+        LOGE("opendir() fail.[%d]",errno);
+        return -1;
+    }
+    return 0;
+}
+
+#if 0
+static void ev_exit(void)
+{
+    while (ev_count > 0)
+    {
+        close(ev_fds[--ev_count].fd);
+    }
+}
+#endif
+
+/* wait: 0 dont wait; -1 wait forever; >0 wait ms */
+static int ev_get(struct input_event *ev, int wait_ms)
+{
+    int r;
+    unsigned n;
+    unsigned long alarm_data;
+
+//    if(wait_ms < 0)
+//    {
+//        LOGE("poll event return\n");
+//        return -1;
+//    }
+
+    LOGI("Waitting data...");
+    r = poll(ev_fds, ev_count, wait_ms);
+    LOGI("Get Data:result = %d",r);
+
+    if (r > 0)
+    {
+        for (n = 0; n < ev_count; n++)
+        {
+            if (ev_fds[n].revents & POLLIN)
+            {
+                if (n == 0)
+                {
+                    r = read(ev_fds[n].fd, &alarm_data, sizeof(alarm_data));
+                    LOGD("get form 0 is %ld", alarm_data);
+                    ev->type = EV_KEY;
+                    ev->code = KEY_BRL_DOT8;
+                    ev->value = 1;
+                    return 0;
+                }
+                else
+                {
+                    r = read(ev_fds[n].fd, ev, sizeof(*ev));
+                    if (r == sizeof(*ev))
+                        return 0;
+                }
+            }
+        }
+    }
+    return -1;
+}
+
+
+static void power_process(bool down, struct timeval *time)
+{
+    printf("POWER_KEY - %s,Time : %ld %ld \n", down ? "DOWN" : "UP", time->tv_sec, time->tv_usec);
+#if 0
+	static struct timeval down_time;
+    static bool key_down;
+    if(down)  // Down
+    {
+        key_down = true;
+        power_long_press_timeout = false;
+        down_time.tv_sec = time->tv_sec;
+        down_time.tv_usec = time->tv_usec;
+        signal(SIGALRM, power_key_timer_alrm);
+        struct itimerval val;
+        // Only time
+        val.it_interval.tv_sec  = 0;
+        val.it_interval.tv_usec = 0;
+        // Time
+        if(POWER_KEY_LONG_PRESS_TIMEOUT >= 1000)
+        {
+            val.it_value.tv_sec  = POWER_KEY_LONG_PRESS_TIMEOUT/1000;
+            val.it_value.tv_usec = POWER_KEY_LONG_PRESS_TIMEOUT%1000;
+        }
+        else
+        {
+            val.it_value.tv_sec  = 0;
+            val.it_value.tv_usec = POWER_KEY_LONG_PRESS_TIMEOUT;
+        }
+        if (setitimer(ITIMER_REAL, &val, NULL) == -1)
+        {
+            LOGE("setitimer fail.[%d]",errno);
+            return;
+        }
+    }
+    else     // UP
+    {
+        if(key_down)
+        {
+            // ms
+            long time_used = (time->tv_sec - down_time.tv_sec) * 1000 + (time->tv_usec - down_time.tv_usec) / 1000;
+            LOGI("Down time[%ld,%ld], Up time[%ld,%ld], time_used = %ld ms",down_time.tv_sec,down_time.tv_usec,
+                 time->tv_sec,time->tv_usec,time_used);
+
+            if(!power_long_press_timeout)
+            {
+                // Cancel alarm
+                struct itimerval value;
+                value.it_value.tv_sec = 0;
+                value.it_value.tv_usec = 0;
+                value.it_interval = value.it_value;
+                setitimer(ITIMER_REAL, &value, NULL);
+
+                if(time_used <= POWER_KEY_PRESS_TIMEOUT)
+                {
+                    screen_state_change(false);
+                }
+                else
+                {
+                    LOGI("Press timeout.");
+                }
+            }
+            else
+            {
+                LOGI("Long Press timeout.");
+            }
+        }
+        else
+        {
+            LOGI("UP key for screen on.");
+        }
+
+        key_down = false;
+    }
+#endif
+}
+
+
+int main(int argc, char *argv[])
+{
+	mbtk_log_init(NULL, "MBTK_KEY");
+    // Open dev
+    ev_init();
+
+    int ret = 0;
+    struct input_event ev;
+    while(1)
+    {
+        ret = ev_get(&ev, -1);
+        if(ret)
+        {
+            LOGW("ev_get() fail.");
+            continue;
+        }
+
+        LOGI("ev:time[%ld,%ld],type:%d,code:%d,value:%d",ev.time.tv_sec,ev.time.tv_usec,
+             ev.type,ev.code,ev.value);
+        if(ev.type != EV_KEY)
+        {
+            LOGW("event type error.[%d]",ev.type);
+            continue;
+        }
+
+        switch(ev.code)
+        {
+            case KEY_POWER:   // Power key
+            {
+                power_process(ev.value, &(ev.time));
+                break;
+            }
+            default:
+            {
+                LOGD("Unknown KEY[%d]",ev.code);
+                break;
+            }
+        }
+    }
+    return 0;
+}
diff --git a/mbtk/test/others/rtc_alarm_test.c b/mbtk/test/others/rtc_alarm_test.c
new file mode 100755
index 0000000..805aef9
--- /dev/null
+++ b/mbtk/test/others/rtc_alarm_test.c
@@ -0,0 +1,62 @@
+#include <stdio.h>

+#include <fcntl.h>

+#include <sys/ioctl.h>

+#include <linux/rtc.h>

+

+int main() {

+    int rtc_fd = open("/dev/rtc0", O_RDWR);

+    if (rtc_fd == -1) {

+        perror("open");

+        return 1;

+    }

+

+    struct rtc_time rtc_tm;

+    struct rtc_wkalrm rtc_alarm;

+    int flags;

+

+    // ......

+    if (ioctl(rtc_fd, RTC_RD_TIME, &rtc_alarm.time) == -1) {

+        perror("ioctl RTC_RD_TIME");

+        close(rtc_fd);

+        return 1;

+    }

+

+    // ......

+    printf("Current RTC time: %d-%d-%d   %02d:%02d:%02d\n",

+           rtc_alarm.time.tm_year, rtc_alarm.time.tm_mon, rtc_alarm.time.tm_mday, rtc_alarm.time.tm_hour, rtc_alarm.time.tm_min, rtc_alarm.time.tm_sec);

+

+    // .. RTC ...

+    rtc_alarm.time.tm_sec = rtc_tm.tm_sec + 10;  // 10 .......

+    rtc_alarm.enabled = 1;

+

+    if (ioctl(rtc_fd, RTC_WKALM_SET, &rtc_alarm) == -1) {

+        perror("ioctl RTC_WKALM_SET1");

+        close(rtc_fd);

+        return 1;

+    }

+    if (ioctl(rtc_fd, RTC_AIE_ON) == -1) {

+        perror("ioctl RTC_AIE_ON");

+        close(rtc_fd);

+        return 1;

+    }

+    printf("RTC alarm set for 10 seconds from now1\n");

+

+#if 0

+    rtc_alarm.time.tm_sec = rtc_tm.tm_sec + 10;  // 10 .......

+    rtc_alarm.enabled = 0;

+

+    if (ioctl(rtc_fd, RTC_WKALM_SET, &rtc_alarm) == -1) {

+        perror("ioctl RTC_WKALM_SET2");

+        close(rtc_fd);

+        return 1;

+    }

+    if (ioctl(rtc_fd, RTC_AIE_OFF) == -1) {

+        perror("ioctl RTC_AIE_OFF");

+        close(rtc_fd);

+        return 1;

+    }

+    printf("RTC alarm disable2\n");

+#endif

+    close(rtc_fd);

+    return 0;

+}
\ No newline at end of file