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], ®State, &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, ¤t, &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