diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-sim/lynq_qser_sim.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-sim/lynq_qser_sim.cpp
index 6416d9e..29b14e2 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-sim/lynq_qser_sim.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-sim/lynq_qser_sim.cpp
@@ -39,6 +39,9 @@
 
 int qser_sim_getimsi(sim_client_handle_type h_sim, QSER_SIM_APP_ID_INFO_T *pt_info, char *imsi, size_t imsiLen)
 {
+    int ret = 0;
+    //char imsi_data[30] = "";
+
     if(NULL == pt_info)
     {
         LYERRLOG("input  error\n");
@@ -54,11 +57,27 @@
         LYERRLOG("not init\n");
         return E_QSER_ERROR_BADPARM;
     }
-    return lynq_get_imsi(imsi);
+
+    ret = lynq_get_imsi(imsi);
+#if 0
+    int num_items = sscanf(imsi, "+CIMI: %s", imsi_data);
+    if (num_items == 1)
+    {
+        LYDBGLOG("imsi_data: %s\n", imsi_data);
+    }
+    else
+    {
+        LYERRLOG("imsi_data not found\n");
+    }
+#endif
+    LYINFLOG("[%s-%d] QSER_IMSI: %s\n", __FUNCTION__, __LINE__, imsi);
+
+    return ret;
 }
 
 int qser_sim_geticcid(sim_client_handle_type h_sim, QSER_SIM_SLOT_ID_TYPE_T simId, char *iccid, size_t iccidLen)
 {
+    int ret = 0;
     if(NULL == iccid)
     {
         LYERRLOG("input  error\n");
@@ -69,11 +88,14 @@
         LYERRLOG("not init\n");
         return E_QSER_ERROR_BADPARM;
     }
-    return lynq_get_iccid(iccid);
+    ret = lynq_get_iccid(iccid);
+    LYINFLOG("[%s-%d] QSER_ICCID: %s\n", __FUNCTION__, __LINE__, iccid);
+    return ret;
 }
 
 int qser_sim_getphonenumber(sim_client_handle_type h_sim, QSER_SIM_APP_ID_INFO_T *pt_info,  char *phone_num, size_t phoneLen)
 {
+    int ret = 0;
     if(NULL == pt_info)
     {
         LYERRLOG("input  error\n");
@@ -89,7 +111,9 @@
         LYERRLOG("not init\n");
         return E_QSER_ERROR_BADPARM;
     }
-    return lynq_query_phone_number(phone_num);
+    ret = lynq_query_phone_number(phone_num);
+    LYINFLOG("[%s-%d] QSER_PHONE_NUM: %s\n", __FUNCTION__, __LINE__, phone_num);
+    return ret;
 }
 
 int qser_sim_verifypin(sim_client_handle_type h_sim, QSER_SIM_VERIFY_PIN_INFO_T *pt_info)
@@ -169,6 +193,7 @@
 
 int qser_sim_getcardstatus(sim_client_handle_type h_sim,QSER_SIM_SLOT_ID_TYPE_T simId, QSER_SIM_CARD_STATUS_INFO_T   *pt_info)
 {
+    int ret = 0;
     if(NULL == pt_info)
     {
         LYERRLOG("input  error\n");
@@ -179,5 +204,7 @@
         LYERRLOG("not init\n");
         return E_QSER_ERROR_BADPARM;
     }
-    return lynq_get_sim_status((int*)&pt_info->e_card_state);
+    ret = lynq_get_sim_status((int*)&pt_info->e_card_state);
+    LYINFLOG("[%s-%d] QSER_CARD_STATUS: %d\n", __FUNCTION__, __LINE__, (int *)pt_info->e_card_state);
+    return ret;
 }
\ No newline at end of file
diff --git a/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/req_commands.h b/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/req_commands.h
index 121425e..2151052 100755
--- a/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/req_commands.h
+++ b/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/req_commands.h
@@ -76,9 +76,12 @@
     {"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_RIL_REQUEST_OEM_HOOK_RAW",query_phone_number_test, "query phone num", LYNQ_RIL_REQUEST_OEM_HOOK_RAW},
+    {"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},
+//
+
 //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},
diff --git a/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/sim.cpp b/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/sim.cpp
index 1a9da4a..ab1e4e7 100755
--- a/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/sim.cpp
+++ b/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/sim.cpp
@@ -26,6 +26,7 @@
     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;
 }
 
@@ -46,6 +47,8 @@
     char iccid[SIM_BUF] = "";
     ret = lynq_get_iccid(iccid);
     printf("%s%d\n",TEST_RESULT,ret);
+    printf("[%s-%d] ICCID:%d\n", __FUNCTION__, __LINE__, iccid);
+
     return ret;
 }
 
@@ -130,6 +133,7 @@
     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;
 }
 
@@ -141,6 +145,7 @@
     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;
 }
 
@@ -161,6 +166,7 @@
     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;
 }
 
@@ -172,6 +178,17 @@
     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;
+}
+
 
 //qser api
 sim_client_handle_type  ph_sim;
diff --git a/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/sim.h b/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/sim.h
index 98522ea..93fd530 100755
--- a/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/sim.h
+++ b/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/sim.h
@@ -16,6 +16,7 @@
 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);
 
 //QSER SIM
 int qser_init_sim(int argc, char *argv[], int sp_test);
