[Feature][T8TSK-289] merge liblynq-sim from old platform branch

Only Configure: No
Affected branch: LYNQ_PUBLIC
Affected module: sim
Is it affected on both ZXIC and MTK: only MTK
Self-test: No
Doc Update: No

Change-Id: I75ec91f3e0e2ca3fd6b5f6624697a2999c886c74
diff --git a/common_src/lib/liblynq-sim/src/lynq_sim.cpp b/common_src/lib/liblynq-sim/src/lynq_sim.cpp
index f14fda2..c780859 100755
--- a/common_src/lib/liblynq-sim/src/lynq_sim.cpp
+++ b/common_src/lib/liblynq-sim/src/lynq_sim.cpp
@@ -16,27 +16,16 @@
 #include <log/log.h>
 #include <cutils/jstring.h>
 #include <pthread.h>
-#include "lynq_sim.h"
-#include <sys/socket.h>   
-#include <netinet/in.h>   
+#include <vendor-ril/telephony/ril.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
 #include <arpa/inet.h>
 #include <errno.h> /*add for get recvfrom errorid on 20220921*/
 #include <sys/stat.h>
 #include <fcntl.h>
+#include "lynq_sim.h"
 #define MAX_BUF 20
 #define MAX_NUM 80
-#define RIL_REQUEST_GET_SIM_STATUS 1
-#define RIL_REQUEST_GET_IMSI 11
-#define RIL_REQUEST_QUERY_ICCID 2026
-#define RIL_REQUEST_SET_FACILITY_LOCK 43
-#define RIL_REQUEST_QUERY_FACILITY_LOCK 42
-#define RIL_REQUEST_ENTER_SIM_PIN 2
-#define RIL_REQUEST_ENTER_SIM_PUK 3
-#define RIL_REQUEST_CHANGE_SIM_PIN 6
-#define RIL_REQUEST_OEM_HOOK_RAW 59
-#define RIL_REQUEST_SCREEN_STATE 61
-#define RIL_REQUEST_SIM_IO 28
-#define RIL_REQUEST_DEVICE_IDENTITY 98
 #define LYNQ_REQUEST_SET_DEFAULT_SIM_ALL 8008
 #define LYNQ_REQUEST_CHANGE_SCREEN_STATE 8014 /*add for two sim suspend on 20220919*/
 #define LYNQ_REQUEST_CHANGE_RADIO 8015
@@ -55,17 +44,11 @@
     char param[MAX_LEN];
 }lynq_client_t;
 
-lynq_client_t client_t;
 /* socket文件描述符 */ 
 int len_addr_serv;
 struct sockaddr_in addr_serv;
 static int sock_fd = 0;
-int Global_uToken = 0; 
-int solicited_token = -1;
-int resp_type = -1;
-int request = -1;
-int slot_id = -1;
-int error1 = -1;
+int Global_uToken = 0;
 static pthread_mutex_t g_lynq_sim_sendto_mutex;
 /**
  * @brief mark call initialization state
@@ -81,11 +64,154 @@
 char pin2_buf[32] = {0};
 char aidPtr_buf[32] = {0};
 
-/**/
+/**
+ * @brief lynq_shutdown need
+ */
 char options_buf[32] = {0};
 char time_buf[32] = {0};
 char message_buf[32] = {0};
 
+typedef struct{
+    int resp_type;
+    int token;
+    int request;
+    int slot_id;
+    int error;
+}lynq_resp_t;
+
+#define RESULT_OK (0)
+#define RESULT_ERROR (-1)
+
+typedef enum{
+    /*base abnormal*/
+    LYNQ_E_PARAMETER_ANONALY=7000,
+    LYNQ_E_SEND_REQUEST_FAIL=7001,
+    LYNQ_E_GET_HEAD_ERROR=7002,
+    LYNQ_E_INNER_ERROR=7100,
+    LYNQ_E_MALLOC_ERROR=7101,
+    /**/
+    LYNQ_E_CARDSTATE_ERROR=8000,
+    /* The voice service state is out of service*/
+    LYNQ_E_STATE_OUT_OF_SERVICE=8001,
+    /* The voice service state is EMERGENCY_ONLY*/
+    LYNQ_E_STATE_EMERGENCY_ONLY=8002,
+    /* The radio power is power off*/
+    LYNQ_E_STATE_POWER_OFF=8003,
+    LYNQ_E_TIME_OUT=8004,
+    /*create or open sms DB fail */
+    LYNQ_E_SMS_DB_FAIL=8005,
+    /*Failed to execute sql statement*/
+    LYNQ_E_SMS_SQL_FAIL = 8006,
+    LYNQ_E_SMS_NOT_FIND = 8007,
+    /* The logic conflict*/
+    LYNQ_E_CONFLICT=9000,
+    /*Null anomaly*/
+    LYNQ_E_NULL_ANONALY=9001,
+     /*Invalid id anomaly*/
+    LYNQ_E_INVALID_ID_ANONALY=9002,
+#ifdef ECALL_SUPPORT
+    LYNQ_E_ECALL_BEING_RUNNING =9003,
+    LYNQ_E_ECALL_MSD_LENGTH_ERROR =9004,
+    LYNQ_E_ECALL_DAILING_NO_ANSWER =9005,
+#endif
+}LYNQ_E;
+
+/**@brief print solicied response msg's head information
+* @param head [IN]: head information
+* @return none
+*/
+void PrintHeader(lynq_resp_t& head)
+{
+    RLOGD("resp_type=%d,token=%d,request=%d,slot_id=%d,error_code=%d",head.resp_type,head.token,head.request,head.slot_id,head.error);
+}
+
+int GetHeader(Parcel* &p, lynq_resp_t& head, int request_id)
+{
+    RLOGD("get header");
+    if(p->dataAvail() > 0)
+    {
+        p->readInt32(&(head.resp_type));
+        p->readInt32(&(head.token));
+        p->readInt32(&(head.request));
+        RLOGD("%s %d", __FUNCTION__, head.request);
+        p->readInt32(&(head.slot_id));
+        p->readInt32(&(head.error));
+        PrintHeader(head);
+        return head.error;
+    }
+    else
+    {
+        return RESULT_ERROR;
+    }
+}
+
+int lynq_send_common_request(Parcel* p, int request_id, int argc, int cnt, const char* format,...)
+{
+    lynq_client_t client;
+    int ret;
+    int send_num;
+    int recv_num;
+    char res_data[MAX_LEN] = {0};
+    client.uToken = Global_uToken;
+    if(request_id == RIL_REQUEST_SCREEN_STATE)
+    {
+        client.request = LYNQ_REQUEST_CHANGE_SCREEN_STATE;
+    }
+    else if(request_id == RIL_REQUEST_RADIO_POWER)
+    {
+        client.request = LYNQ_REQUEST_CHANGE_RADIO;
+    }
+    else
+    {
+        client.request = request_id;
+    }
+    client.paramLen = argc;
+    bzero(client.param,MAX_LEN);
+    if(argc!=0)
+    {
+        va_list args;
+        va_start(args, format);
+        vsnprintf(client.param, MAX_LEN, format, args);
+        va_end(args);
+    }
+    RLOGD("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
+    pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
+    send_num = sendto(sock_fd,&client,sizeof(client),0,(struct sockaddr *)&addr_serv,len_addr_serv);
+    if(send_num <= 0)
+    {
+        RLOGD("send request fail, send num is %d", send_num);
+        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
+        return LYNQ_E_SEND_REQUEST_FAIL;
+    }
+    lynq_resp_t head;
+    head.request = -1;
+    for(int i = 0; i < cnt;)
+    {
+        recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN, 0, (struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
+        if(recv_num <= 0)
+        {
+            RLOGD("recv request fail, recv num is %d", recv_num);
+            pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
+            return recv_num;
+        }
+        p->setData((uint8_t *)res_data,sizeof(char)*recv_num);
+        p->setDataPosition(0);
+        ret=GetHeader(p,head,request_id);
+        if(ret!=0)
+        {
+            RLOGD("%s %d get head error %d",__FUNCTION__,client.uToken,ret);
+            pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
+            return ret;
+        }
+        if(request_id == head.request)
+        {
+            i++;
+        }
+    }
+    pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
+    return ret;
+}
+
 int lynq_sim_init(int utoken){
 
     RLOGE("%s start, parameter is %d", __func__,utoken);
@@ -169,104 +295,34 @@
     {
         return -1;
     }
-    int ret = -1;
-    if(card_status == NULL)
-        return ret;
-    int send_num = 0;
-    int recv_num = 0;
-    int len = 0;
-    lynq_client_t client_t1;
-    memset(&client_t1, 0, sizeof(client_t1) );
-    client_t1.request = RIL_REQUEST_GET_SIM_STATUS;
-    client_t1.paramLen = 0;
-    client_t1.uToken = Global_uToken;
-    char res_data[MAX_LEN] = {0};
-    int len1 = sizeof(client_t1.param);
-    memset(client_t1.param, 0, sizeof(char)*MAX_LEN);
-    pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
-    send_num = sendto(sock_fd, &client_t1, sizeof(client_t1), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
-    if(send_num < 0)  
-    {  
-        RLOGD("function %s sendto error:", __FUNCTION__);
-        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-        return send_num;
-    }
-    //get data msg
-    recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN, 0, (struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
-    if(recv_num < 0 || recv_num == 0)
+    Parcel p;
+    int res = lynq_send_common_request(&p,RIL_REQUEST_GET_SIM_STATUS,0,1,"");
+    if(res != 0)
     {
-        RLOGD("recvfrom step2 fail:");
-        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-        return recv_num;
+        RLOGD("function %s execute error", __FUNCTION__);
+        return res;
     }
-    pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-    Parcel p;;
-    p.setData((uint8_t *)res_data,sizeof(char)*recv_num); // p.setData((uint8_t *) buffer, buflen);
-    p.setDataPosition(0);
-    if(p.dataAvail() > 0)
-    {
-        p.readInt32(&resp_type);
-        p.readInt32(&solicited_token);
-        p.readInt32(&request);
-        p.readInt32(&slot_id);
-        p.readInt32(&error1);
-        p.readInt32(card_status);
-    }
-    return error1;
+    p.readInt32(card_status);
+    return res;
 }
 
 int lynq_get_imsi(char buf[])
-{   
+{
     if(g_lynq_sim_init_flag == 0)
     {
         return -1;
     }
-    int ret = -1;
-    if(buf == NULL)
-        return ret;
-    int send_num = 0;
-    int recv_num = 0;
-    int len = 0;
-    lynq_client_t client_t1;
-    memset(&client_t1, 0, sizeof(client_t1) );
-    client_t1.request = RIL_REQUEST_GET_IMSI;
-    client_t1.paramLen = 0;
-    client_t1.uToken = Global_uToken;
-    char res_data[MAX_LEN] = {0};
-    memset(client_t1.param, 0, sizeof(client_t1.param));
-    pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
-    send_num = sendto(sock_fd, &client_t1, sizeof(client_t1), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
-    if(send_num < 0)  
-    {  
-        RLOGD("function %s sendto error:", __FUNCTION__);
-        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-        return send_num;
-    }
-    //get data msg
-    recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
-    pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-    if(recv_num < 0 || recv_num == 0)
-    {
-        RLOGD("recvfrom step2 fail:");
-        return recv_num;
-    }
     Parcel p;
-    p.setData((uint8_t *)res_data,sizeof(char)*recv_num); // p.setData((uint8_t *) buffer, buflen);
-    p.setDataPosition(0);
-    if(p.dataAvail() > 0)
+    int res = lynq_send_common_request(&p,RIL_REQUEST_GET_IMSI,0,1,"");
+    if(res != 0)
     {
-        p.readInt32(&resp_type);
-        p.readInt32(&solicited_token);
-        p.readInt32(&request);
-        p.readInt32(&slot_id);
-        p.readInt32(&error1);
-        if(!error1){
-            char * test = lynqStrdupReadString(p);
-            memcpy(buf, test, strlen(test));
-            free(test);
-        }
+        RLOGD("function %s execute error", __FUNCTION__);
+        return res;
     }
-    return error1;
+    char * test = lynqStrdupReadString(p);
+    memcpy(buf, test, strlen(test));
+    free(test);
+    return res;
 }
 
 
@@ -277,50 +333,17 @@
     {
         return -1;
     }
-    int ret = -1;
-    if(buf == NULL)
-        return ret;
-    int send_num = 0;
-    int recv_num = 0;
-    int len = 0; 
-    client_t.request = RIL_REQUEST_QUERY_ICCID;
-    client_t.paramLen = 0;
-    client_t.uToken = Global_uToken;
-    char res_data[MAX_LEN] = {0};
-    memset(client_t.param, 0, sizeof(client_t.param));
-    pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
-    send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
-    if(send_num < 0)  
-    {  
-        RLOGD("function %s sendto error:", __FUNCTION__);
-        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-        return send_num;
-    }
-    //get data msg
-    recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
-    pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-    if(recv_num < 0 || recv_num == 0)
-    {
-        RLOGD("recvfrom step2 fail:");
-        return recv_num;
-    }
     Parcel p;
-    p.setData((uint8_t *)res_data,sizeof(char)*recv_num); // p.setData((uint8_t *) buffer, buflen);
-    p.setDataPosition(0);
-    if(p.dataAvail() > 0)
+    int res = lynq_send_common_request(&p,RIL_REQUEST_QUERY_ICCID,0,1,"");
+    if(res != 0)
     {
-        p.readInt32(&resp_type);
-        p.readInt32(&solicited_token);
-        p.readInt32(&request);
-        p.readInt32(&slot_id);
-        p.readInt32(&error1);
-        if(!error1){
-            char * test = lynqStrdupReadString(p);
-            memcpy(buf, test, strlen(test));
-            free(test);
-        }
+        RLOGD("function %s execute error", __FUNCTION__);
+        return res;
     }
-    return error1;
+    char * test = lynqStrdupReadString(p);
+    memcpy(buf, test, strlen(test));
+    free(test);
+    return res;
 }
 
 int lynq_enable_pin(char *pin){
@@ -328,47 +351,14 @@
     {
         return -1;
     }
-    int ret = -1;
-    if(pin == NULL)
-        return ret;
-    if(!strlen(pin))
-        return ret;
-    int send_num = 0;
-    int recv_num = 0;  
-    char res_data[MAX_LEN] = {0};
-    client_t.request = RIL_REQUEST_SET_FACILITY_LOCK;
-    client_t.paramLen = 4;
-    client_t.uToken = Global_uToken;
-    sprintf(client_t.param, "%s %s %s %s\n", "SC", pin, "11", "1");
-    pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
-    send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
-    if(send_num < 0)  
-    {  
-        RLOGD("function %s sendto error:", __FUNCTION__);
-        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-        return send_num;
-    }
-
-    //get data msg
-    recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
-    pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-    if(recv_num < 0 || recv_num == 0)
-    {
-        RLOGD("recvfrom step2 fail:");
-        return recv_num;
-    }
     Parcel p;
-    p.setData((uint8_t *)res_data,sizeof(char)*recv_num); // p.setData((uint8_t *) buffer, buflen);
-    p.setDataPosition(0);
-    if(p.dataAvail() > 0)
+    int res = lynq_send_common_request(&p,RIL_REQUEST_SET_FACILITY_LOCK,4,1,"%s %s %s %s\n", "SC", pin, "11", "1");
+    if(res != 0)
     {
-        p.readInt32(&resp_type);
-        p.readInt32(&solicited_token);
-        p.readInt32(&request);
-        p.readInt32(&slot_id);
-        p.readInt32(&error1);
+        RLOGD("function %s execute error", __FUNCTION__);
+        return res;
     }
-    return error1;
+    return res;
 }
 
 int lynq_sim_power(int mode)
@@ -377,53 +367,14 @@
     {
         return -1;
     }
-    int ret = -1;
-    int send_num = 0;
-    int recv_num = 0;
-    int len = 0;
-    char res_data[MAX_LEN] = {0};
-    client_t.request = RIL_REQUEST_OEM_HOOK_RAW;
-    client_t.paramLen = 1;
-    client_t.uToken = Global_uToken;
-    char buf[64] = {0};
-    sprintf(buf, "%s%d", "AT+ESIMPOWER=", mode);
-    sprintf(client_t.param, "%s\n", buf);
-    pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
-    send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
-    if(send_num < 0)  
-    {  
-        RLOGD("function %s sendto error:", __FUNCTION__);
-        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-        return ret;
-    }
-     //get data msg
-    recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
-    pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-    if(recv_num < 0 || recv_num == 0)
-    {
-        RLOGD("recvfrom step2 fail:");
-        return recv_num;
-    }
     Parcel p;
-    p.setData((uint8_t *)res_data,sizeof(char)*recv_num); // p.setData((uint8_t *) buffer, buflen);
-    p.setDataPosition(0);
-    int num = -1;
-    if(p.dataAvail() > 0)
-    {   
-        char test[128] = {0};
-        p.readInt32(&resp_type);
-        p.readInt32(&solicited_token);
-        p.readInt32(&request);
-        p.readInt32(&slot_id);
-        p.readInt32(&error1);
-        p.readInt32(&num);
-        if(num == -1){
-        }else{
-            p.read(test, num);
-            return error1;
-        }
+    int res = lynq_send_common_request(&p,RIL_REQUEST_OEM_HOOK_RAW,1,1,"%s%d", "AT+ESIMPOWER=", mode);
+    if(res != 0)
+    {
+        RLOGD("function %s execute error", __FUNCTION__);
+        return res;
     }
-    return error1;
+    return res;
 }
 
 int lynq_disable_pin(char *pin){
@@ -431,44 +382,14 @@
     {
         return -1;
     }
-    int ret = -1;
-    if(pin == NULL)
-        return ret;
-    int send_num = 0;  
-    int recv_num = 0;
-    char res_data[MAX_LEN] = {0};
-    client_t.request = RIL_REQUEST_SET_FACILITY_LOCK;
-    client_t.paramLen = 4;
-    client_t.uToken = Global_uToken;
-    sprintf(client_t.param, "%s %s %s %s\n", "SC", pin, "11", "0");
-    pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
-    send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
-    if(send_num < 0)  
-    {  
-        RLOGD("function %s sendto error:", __FUNCTION__);
-        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-        return send_num;
-    }
-    //get data msg
-    recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
-    pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-    if(recv_num < 0 || recv_num == 0)
-    {
-        RLOGD("recvfrom step2 fail:");
-        return recv_num;
-    }
     Parcel p;
-    p.setData((uint8_t *)res_data,sizeof(char)*recv_num); // p.setData((uint8_t *) buffer, buflen);
-    p.setDataPosition(0);
-    if(p.dataAvail() > 0)
+    int res = lynq_send_common_request(&p,RIL_REQUEST_SET_FACILITY_LOCK,4,1,"%s %s %s %s\n", "SC", pin, "11", "0");
+    if(res != 0)
     {
-        p.readInt32(&resp_type);
-        p.readInt32(&solicited_token);
-        p.readInt32(&request);
-        p.readInt32(&slot_id);
-        p.readInt32(&error1);
+        RLOGD("function %s execute error", __FUNCTION__);
+        return res;
     }
-    return error1;
+    return res;
 }
 
 int lynq_query_pin_lock(char *pin,int buf[]){
@@ -476,55 +397,25 @@
     {
         return -1;
     }
-    int ret = -1;
-    if(pin == NULL)
-        return ret;
-    int send_num = 0;
-    int recv_num = 0;
-    int len = 0; 
-    client_t.request = RIL_REQUEST_QUERY_FACILITY_LOCK;
-    client_t.paramLen = 3;
-    client_t.uToken = Global_uToken;
-    char res_data[MAX_LEN] = {0};
-    sprintf(client_t.param, "%s %s %s\n", "SC", pin, "11");
-    pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
-    send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
-    if(send_num < 0)  
-    {  
-        RLOGD("function %s sendto error:", __FUNCTION__);
-        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);  
-        return send_num;
-    }
-    //get data msg
-    recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
-    pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-    if(recv_num < 0 || recv_num == 0)
-    {
-        RLOGD("recvfrom step2 fail:");
-        return recv_num;
-    }
     Parcel p;
-    p.setData((uint8_t *)res_data,sizeof(char)*recv_num); // p.setData((uint8_t *) buffer, buflen);
-    p.setDataPosition(0);
-    int num = -1;
-    if(p.dataAvail() > 0)
+    int res = lynq_send_common_request(&p,RIL_REQUEST_QUERY_FACILITY_LOCK,3,1,"%s %s %s\n", "SC", pin, "11");
+    if(res != 0)
     {
-        p.readInt32(&resp_type);
-        p.readInt32(&solicited_token);
-        p.readInt32(&request);
-        p.readInt32(&slot_id);
-        p.readInt32(&error1);
-        p.readInt32(&num);
-        if(num > 0){
-            int *test = (int *)calloc(1, sizeof(int)*num);
-            for(int i =0; i <num; i++){
-                p.readInt32(&test[i]);
-                buf[i] = test[i];
-            }
-            free(test);
-        }
+        RLOGD("function %s execute error", __FUNCTION__);
+        return res;
     }
-    return error1;
+    int num = -1;
+    p.readInt32(&num);
+    if(num > 0)
+    {
+        int *test = (int *)calloc(num, sizeof(int));
+        for(int i =0; i <num; i++){
+            p.readInt32(&test[i]);
+            buf[i] = test[i];
+        }
+        free(test);
+    }
+    return res;
 }
 
 int lynq_verify_pin(char *pin){
@@ -532,45 +423,14 @@
     {
         return -1;
     }
-    int ret = -1;
-    if(pin == NULL)
-        return ret;
-    int send_num = 0;
-    int recv_num = 0;
-    char res_data[MAX_LEN] = {0};
-    int len = 0; 
-    client_t.request = RIL_REQUEST_ENTER_SIM_PIN;
-    client_t.paramLen = 1;
-    client_t.uToken = Global_uToken;
-    sprintf(client_t.param, "%s\n", pin);
-    pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
-    send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
-    if(send_num < 0)  
-    {  
-        RLOGD("function %s sendto error:", __FUNCTION__);
-        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-        return send_num;
-    }
-   //get data msg
-    recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
-    pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-    if(recv_num < 0 || recv_num == 0)
-    {
-        RLOGD("recvfrom step2 fail:");
-        return recv_num;
-    }
     Parcel p;
-    p.setData((uint8_t *)res_data,sizeof(char)*recv_num); // p.setData((uint8_t *) buffer, buflen);
-    p.setDataPosition(0);
-    if(p.dataAvail() > 0)
+    int res = lynq_send_common_request(&p,RIL_REQUEST_ENTER_SIM_PIN,1,1,"%s\n", pin);
+    if(res != 0)
     {
-        p.readInt32(&resp_type);
-        p.readInt32(&solicited_token);
-        p.readInt32(&request);
-        p.readInt32(&slot_id);
-        p.readInt32(&error1);
+        RLOGD("function %s execute error", __FUNCTION__);
+        return res;
     }
-    return error1;
+    return res;
 }
 
 int lynq_change_pin(char *old_pin, char *new_pin){
@@ -578,49 +438,21 @@
     {
         return -1;
     }
-    int ret = -1;
+    int res = -1;
     if(old_pin == NULL || new_pin == NULL)
-        return ret;
+        return res;
     if(!strlen(new_pin))
-        return ret;
+        return res;
     if(!strlen(old_pin))
-        return ret;
-    int send_num = 0;
-    int recv_num = 0;
-    char res_data[MAX_LEN] = {0};
-    int len = 0; 
-    client_t.request = RIL_REQUEST_CHANGE_SIM_PIN;
-    client_t.paramLen = 2;
-    client_t.uToken = Global_uToken;
-    sprintf(client_t.param, "%s %s\n", old_pin, new_pin);
-    pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
-    send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
-    if(send_num < 0)  
-    {  
-        RLOGD("function %s sendto error:", __FUNCTION__);
-        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-        return send_num;
-    }
-    //get data msg
-    recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
-    pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-    if(recv_num < 0 || recv_num == 0)
-    {
-        RLOGD("recvfrom step2 fail:");
-        return recv_num;
-    }
+        return res;
     Parcel p;
-    p.setData((uint8_t *)res_data,sizeof(char)*recv_num); // p.setData((uint8_t *) buffer, buflen);
-    p.setDataPosition(0);
-    if(p.dataAvail() > 0)
+    res = lynq_send_common_request(&p,RIL_REQUEST_CHANGE_SIM_PIN,2,1,"%s %s\n", old_pin, new_pin);
+    if(res != 0)
     {
-        p.readInt32(&resp_type);
-        p.readInt32(&solicited_token);
-        p.readInt32(&request);
-        p.readInt32(&slot_id);
-        p.readInt32(&error1);
+        RLOGD("function %s execute error", __FUNCTION__);
+        return res;
     }
-    return error1;
+    return res;
 }
 
 int lynq_unlock_pin(char *puk, char *pin){
@@ -628,45 +460,16 @@
     {
         return -1;
     }
-    int ret = -1;
     if(puk == NULL || pin == NULL)
-        return ret;
-    int send_num = 0;
-    int recv_num = 0;
-    char res_data[MAX_LEN] = {0};
-    int len = 0; 
-    client_t.request = RIL_REQUEST_ENTER_SIM_PUK;
-    client_t.paramLen = 2;
-    client_t.uToken = Global_uToken;
-    sprintf(client_t.param, "%s %s\n", puk, pin);
-    pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
-    send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
-    if(send_num < 0)  
-    {  
-        RLOGD("function %s sendto error:", __FUNCTION__);
-        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-        return send_num;
-    }
-    //get data msg
-    recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
-    pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-    if(recv_num < 0 || recv_num == 0)
-    {
-        RLOGD("recvfrom step2 fail:");
-        return recv_num;
-    }
+        return -1;
     Parcel p;
-    p.setData((uint8_t *)res_data,sizeof(char)*recv_num); // p.setData((uint8_t *) buffer, buflen);
-    p.setDataPosition(0);
-    if(p.dataAvail() > 0)
+    int res = lynq_send_common_request(&p,RIL_REQUEST_ENTER_SIM_PUK,2,1,"%s %s\n", puk, pin);
+    if(res != 0)
     {
-        p.readInt32(&resp_type);
-        p.readInt32(&solicited_token);
-        p.readInt32(&request);
-        p.readInt32(&slot_id);
-        p.readInt32(&error1);
+        RLOGD("function %s execute error", __FUNCTION__);
+        return res;
     }
-    return error1;
+    return res;
 }
 
 static void delete_char(char str[],char target){
@@ -736,55 +539,24 @@
     {
         return -1;
     }
-    int ret = -1;
-    if(buf == NULL)
-        return ret;
-    int send_num = 0;
-    int recv_num = 0;
-    int len = 0;
-    char res_data[MAX_LEN] = {0};
-    client_t.request = RIL_REQUEST_OEM_HOOK_RAW;
-    client_t.paramLen = 1;
-    client_t.uToken = Global_uToken;
-    sprintf(client_t.param, "%s\n", "AT+CNUM");
-    pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
-    send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
-    if(send_num < 0)  
-    {  
-        RLOGD("function %s sendto error:", __FUNCTION__);
-        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-        return ret;
-    }
-     //get data msg
-    recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
-    pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-    if(recv_num < 0 || recv_num == 0)
-    {
-        RLOGD("recvfrom step2 fail:");
-        return recv_num;
-    }
     Parcel p;
-    p.setData((uint8_t *)res_data,sizeof(char)*recv_num); // p.setData((uint8_t *) buffer, buflen);
-    p.setDataPosition(0);
-    int num = -1;
-    if(p.dataAvail() > 0)
-    {   
-        char test[128] = {0};
-        char *argv[5] = {0};
-        p.readInt32(&resp_type);
-        p.readInt32(&solicited_token);
-        p.readInt32(&request);
-        p.readInt32(&slot_id);
-        p.readInt32(&error1);
-        p.readInt32(&num);
-        if(num == -1){
-        }else{
-            p.read(test, num);
-            num = parse_param(test, argv, buf);
-            return num;
-        }
+    int res = lynq_send_common_request(&p,RIL_REQUEST_OEM_HOOK_RAW,1,1,"%s\n", "AT+CNUM");
+    if(res != 0)
+    {
+        RLOGD("function %s execute error", __FUNCTION__);
+        return res;
     }
-    return error1;
+    int num = -1;
+    p.readInt32(&num);
+    char test[128] = {0};
+    char *argv[5] = {0};
+    if(num != -1)
+    {
+        p.read(test, num);
+        num = parse_param(test, argv, buf);
+        return num;
+    }
+    return res;
 }
 
 int lynq_get_imei(char buf[])
@@ -793,147 +565,68 @@
     {
         return -1;
     }
-    int ret = -1;
-    if(buf == NULL)
-        return ret;
-    int send_num = 0;
-    int recv_num = 0;
-    int len = 0;
-    lynq_client_t client_t1;
-    memset(&client_t1, 0, sizeof(client_t1) );
-    client_t1.request = RIL_REQUEST_DEVICE_IDENTITY;
-    client_t1.paramLen = 0;
-    client_t1.uToken = Global_uToken;
-    char res_data[MAX_LEN] = {0};
-    memset(client_t1.param, 0, sizeof(client_t1.param));
-    pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
-    send_num = sendto(sock_fd, &client_t1, sizeof(client_t1), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
-    if(send_num < 0)  
-    {  
-        RLOGD("function %s sendto error:", __FUNCTION__);
-        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-        return send_num;
-    }
-    //get data msg
-    recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
-    pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-    if(recv_num < 0 || recv_num == 0)
-    {
-        RLOGD("recvfrom step2 fail:");
-        return recv_num;
-    }
     Parcel p;
-    p.setData((uint8_t *)res_data,sizeof(char)*recv_num); // p.setData((uint8_t *) buffer, buflen);
-    p.setDataPosition(0);
-    int num = 0;
-    if(p.dataAvail() > 0)
+    int res = lynq_send_common_request(&p,RIL_REQUEST_DEVICE_IDENTITY,0,1,"");
+    if(res != 0)
     {
-        p.readInt32(&resp_type);
-        p.readInt32(&solicited_token);
-        p.readInt32(&request);
-        p.readInt32(&slot_id);
-        p.readInt32(&error1);
-        if(!error1){
-            p.readInt32(&num);
-            char * test = lynqStrdupReadString(p);          
-            memcpy(buf, test, strlen(test));
-            free(test);
-        }
+        RLOGD("function %s execute error", __FUNCTION__);
+        return res;
     }
-    return error1;
+    int num = 0;
+    p.readInt32(&num);
+    char * test = lynqStrdupReadString(p);
+    memcpy(buf, test, strlen(test));
+    free(test);
+    return res;
 }
 
 int lynq_get_imei_and_sv(char imei[],char sv[])
 {
-    RLOGD("%s called",__func__);  
     if(g_lynq_sim_init_flag == 0)
     {
-        RLOGD("%s init_flag is %d",__func__,g_lynq_sim_init_flag);  
-        return -2;
-    }
-    int ret = -1;
-    if(imei == NULL || sv== NULL)
-    {
-        RLOGD("%s imei is NULL or sv is NULL",__func__);  
-        return ret;
-    }
-    
-    int send_num = 0;
-    int recv_num = 0;
-    int len = 0;
-    lynq_client_t client_t1;
-    memset(&client_t1, 0, sizeof(client_t1) );
-    client_t1.request = RIL_REQUEST_DEVICE_IDENTITY;
-    client_t1.paramLen = 0;
-    client_t1.uToken = Global_uToken;
-    char res_data[MAX_LEN] = {0};
-    memset(client_t1.param, 0, sizeof(client_t1.param));
-    pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
-    send_num = sendto(sock_fd, &client_t1, sizeof(client_t1), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
-    if(send_num < 0)  
-    {  
-        RLOGD("%s sendto error: %d",__func__,send_num);
-        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-        return send_num;
-    }
-    //get data msg
-    recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
-    pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-    if(recv_num < 0 || recv_num == 0)
-    {
-        RLOGD("%s recvfrom step2 fail:%d",__func__,recv_num);
-        return recv_num;
+        return -1;
     }
     Parcel p;
-    p.setData((uint8_t *)res_data,sizeof(char)*recv_num); // p.setData((uint8_t *) buffer, buflen);
-    p.setDataPosition(0);
-    int num = 0;
-    if(p.dataAvail() > 0)
+    int res = lynq_send_common_request(&p,RIL_REQUEST_DEVICE_IDENTITY,0,1,"");
+    if(res != 0)
     {
-        p.readInt32(&resp_type);
-        p.readInt32(&solicited_token);
-        p.readInt32(&request);
-        p.readInt32(&slot_id);
-        p.readInt32(&error1);
-        if(!error1){
-            p.readInt32(&num);
-            if(num<2)
-            {
-                RLOGD("%s num %d error, should greater than 1",__func__,num);
-                return -1;
-            }
-            char *resp[2]={NULL,NULL};
-            int i;
-            for(i=0;i<2;i++)
-            {
-                resp[i]= lynqStrdupReadString(p);
-                if(resp[i]==NULL)
-                {
-                    break;
-                }
-            }            
-
-            if(i==2){           
-                memcpy(imei, resp[0], strlen(resp[0])+1);
-                memcpy(sv, resp[1], strlen(resp[1])+1);
-            }
-            else 
-            {
-                RLOGD("%s resp[%d] is null",__func__,i);
-            }             
-
-            for(i=0;i<2;i++)
-            {
-                if(resp[i]!=NULL)
-                {
-                    free(resp[i]);            
-                }            
-            }                        
-            return i==2? 0:-1;
+        RLOGD("function %s execute error", __FUNCTION__);
+        return res;
+    }
+    int num = 0;
+    p.readInt32(&num);
+    if(num<2)
+    {
+        RLOGD("%s num %d error, should greater than 1",__func__,num);
+        return -1;
+    }
+    char *resp[2]={NULL,NULL};
+    int i;
+    for(i=0;i<2;i++)
+    {
+        resp[i]= lynqStrdupReadString(p);
+        if(resp[i]==NULL)
+        {
+            break;
         }
-    }    
-    RLOGD("%s called failed %d",__func__,error1);  
-    return error1;
+    }
+    if(i==2){
+        memcpy(imei, resp[0], strlen(resp[0])+1);
+        memcpy(sv, resp[1], strlen(resp[1])+1);
+    }
+    else
+    {
+        RLOGD("%s resp[%d] is null",__func__,i);
+    }
+    for(i=0;i<2;i++)
+    {
+        if(resp[i]!=NULL)
+        {
+            free(resp[i]);
+        }
+    }
+    return i==2? 0:-1;
+
 }
 
 static int judge(int slot){
@@ -951,16 +644,16 @@
     {
         return -1;
     }
-    int ret = -1;
     if(!judge(slot))
-        return ret;
+        return -1;
     int send_num = 0;
+    lynq_client_t client_t;
     client_t.request = LYNQ_REQUEST_SET_DEFAULT_SIM_ALL;
     client_t.paramLen = 1;
     client_t.uToken = Global_uToken;
     sprintf(client_t.param, "%d\n", slot);
     pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
-    send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
+    send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv); //because ril of id = -1
     if(send_num < 0)  
     {  
         RLOGD("function %s sendto error:", __FUNCTION__);  
@@ -979,74 +672,16 @@
     {
         return -1;
     }
-
-    int ret = -1;
     if(!judge(num))
-        return ret;
-    int send_num = 0;
-    int recv_num = 0;
-    int error[2];
-    char res_data[MAX_LEN] = {0};
-
-    //change the first screen
-    client_t.request = LYNQ_REQUEST_CHANGE_SCREEN_STATE; //8014
-    client_t.paramLen = 1;
-    client_t.uToken = Global_uToken;
-    sprintf(client_t.param, "%d\n", num);
-
-    pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
-    send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
-    if(send_num < 0)
+        return -1;
+    Parcel p;
+    int res = lynq_send_common_request(&p,RIL_REQUEST_SCREEN_STATE,1,2,"%d\n",num);
+    if(res != 0)
     {
-        RLOGD("sendto error:\n");
-        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-        return send_num;
+        RLOGD("function %s execute error", __FUNCTION__);
+        return res;
     }
-    for(int i=0;i<2;i++)
-    {
-        recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
-        if(recv_num < 0 || recv_num == 0)
-        {
-            pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);//recvfrom fail
-            RLOGD("screen recvform error\n");
-            return errno;
-        }
-        if(i == 1)
-        {
-            pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-            RLOGD("recvfrom success\n");
-        }
-        Parcel p;
-        p.setData((uint8_t *)res_data,sizeof(char)*recv_num);
-        p.setDataPosition(0);
-        if(p.dataAvail() > 0)
-        {
-            p.readInt32(&resp_type);
-            p.readInt32(&solicited_token);
-            p.readInt32(&request);
-            p.readInt32(&slot_id);
-            p.readInt32(&error1);
-            error[i] = error1;//change screen state result
-        }
-    }
-    
-    if((error[0] != 0) || (error[1] != 0))
-    {
-        RLOGD("error[0] = %d errpr[1] = %d\n",error[0], error[1]);
-        if(error[0] != 0)
-        {
-            return error[0];
-        }
-        else
-        {
-            return error[1];
-        }
-    }
-    else
-    {
-        return 0;
-    }
-
+    return res;
 }
 
 /**@breif    change screen state
@@ -1059,73 +694,16 @@
     {
         return -1;
     }
-
-    int ret = -1;
     if(!judge(num))
-        return ret;
-    int send_num = 0;
-    int recv_num = 0;
-    int error[2];
-    char res_data[MAX_LEN] = {0};
-    //change the first screen
-    client_t.request = LYNQ_REQUEST_CHANGE_RADIO; //8015
-    client_t.paramLen = 1;
-    client_t.uToken = Global_uToken;
-    sprintf(client_t.param, "%d\n", num);
-
-    pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
-    send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
-    if(send_num < 0)
+        return -1;
+    Parcel p;
+    int res = lynq_send_common_request(&p,RIL_REQUEST_RADIO_POWER,1,2,"%d\n",num);
+    if(res != 0)
     {
-        RLOGD("sendto error:\n");
-        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-        return send_num;
+        RLOGD("function %s execute error", __FUNCTION__);
+        return res;
     }
-    for(int i=0;i<2;i++)
-    {
-        recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
-        if(recv_num < 0 || recv_num == 0)
-        {
-            pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);//recvfrom fail
-            RLOGD("screen recvform error\n");
-            return errno;
-        }
-        if(i == 1)
-        {
-            pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-            RLOGD("recvfrom success\n");
-        }
-        Parcel p;
-        p.setData((uint8_t *)res_data,sizeof(char)*recv_num);
-        p.setDataPosition(0);
-        if(p.dataAvail() > 0)
-        {
-            p.readInt32(&resp_type);
-            p.readInt32(&solicited_token);
-            p.readInt32(&request);
-            p.readInt32(&slot_id);
-            p.readInt32(&error1);
-            error[i] = error1;//change screen state result
-        }
-    }
-    
-    if((error[0] != 0) || (error[1] != 0))
-    {
-        RLOGD("error[0] = %d errpr[1] = %d\n",error[0], error[1]);
-        if(error[0] != 0)
-        {
-            return error[0];
-        }
-        else
-        {
-            return error[1];
-        }
-    }
-    else
-    {
-        return 0;
-    }
-
+    return res;
 }
 
 /**
@@ -1197,54 +775,23 @@
     {
         return -1;
     }
-    int ret = -1;
     if(judge_illegal(list, path, data, pin2, aidPtr, sw, simResponse))
     {
-        return ret;
-    }
-    int send_num = 0;
-    int recv_num = 0;
-    char res_data[MAX_LEN] = {0};
-    client_t.request = RIL_REQUEST_SIM_IO;
-    client_t.paramLen = 9;
-    client_t.uToken = Global_uToken;
-    sprintf(client_t.param, "%d %d %s %d %d %d %s %s %s\n", list[0], list[1], path, list[2], list[3], list[4], data_buf, pin2_buf, aidPtr_buf);
-    pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
-    send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
-    if(send_num < 0)
-    {
-        RLOGD("function %s sendto error:", __FUNCTION__);
-        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-        return send_num;
-    }
-    recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
-    pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-    if(recv_num < 0 || recv_num == 0)
-    {
-        RLOGD("recvfrom step2 fail:");
-        return recv_num;
+        return -1;
     }
     Parcel p;
-    p.setData((uint8_t *)res_data,sizeof(char)*recv_num); // p.setData((uint8_t *) buffer, buflen);
-    p.setDataPosition(0);
-    if(p.dataAvail() > 0)
+    int res = lynq_send_common_request(&p,RIL_REQUEST_SIM_IO,9,1,"%d %d %s %d %d %d %s %s %s\n", list[0], list[1], path, list[2], list[3], list[4], data_buf, pin2_buf, aidPtr_buf);
+    if(res != 0)
     {
-        p.readInt32(&resp_type);
-        p.readInt32(&solicited_token);
-        p.readInt32(&request);
-        p.readInt32(&slot_id);
-        p.readInt32(&error1);
-        if(!error1)
-        {
-            p.readInt32(&sw[0]);
-            p.readInt32(&sw[1]);
-            char * test = lynqStrdupReadString(p);
-            memcpy(simResponse, test, strlen(test));
-            free(test);
-        }
-
+        RLOGD("function %s execute error", __FUNCTION__);
+        return res;
     }
-    return error1;
+    p.readInt32(&sw[0]);
+    p.readInt32(&sw[1]);
+    char * test = lynqStrdupReadString(p);
+    memcpy(simResponse, test, strlen(test));
+    free(test);
+    return res;
 }
 
 static void wait_reset_mipc_response(int *response)
@@ -1272,12 +819,13 @@
     }
     int ret = -1;
     int send_num = 0;
+    lynq_client_t client_t;
     client_t.request = RIL_REQUEST_OEM_HOOK_RAW;
     client_t.paramLen = 1;
     client_t.uToken = Global_uToken;
     sprintf(client_t.param, "%s\n", "AT+LRSTMD");
     pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
-    send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
+    send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);//because response not by ril callback
     if(send_num < 0)  
     {  
         RLOGD("function %s sendto error:", __FUNCTION__);
@@ -1286,7 +834,7 @@
     }
     wait_reset_mipc_response(&ret);
     pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
-    RLOGD("function %d ret %d",__FUNCTION__, ret);
+    RLOGD("function %s ret %d",__FUNCTION__, ret);
     return ret;
 }
 
@@ -1338,60 +886,31 @@
 
 int lynq_get_version(char buf[])
 {
-    FILE * fp;
+    FILE *fp;
     char buffer[128];
     sprintf(buffer, "%s", "uci get lynq_uci_ro.lynq_version.LYNQ_SW_VERSION");
     fp = popen(buffer, "r");
-    fgets(buffer, sizeof(buffer), fp);
+    if(NULL == fp)
+    {
+        RLOGE("popen failed !");
+        return -1;
+    }
+    if(NULL != fgets(buffer, sizeof(buffer), fp))
+    {
+        if('\n' == buffer[strlen(buffer) - 1])
+        {
+            buffer[strlen(buffer) - 1] = '\0';
+        }
+    }
+    else
+    {
+        RLOGE("fgets failed !");
+        pclose(fp);
+        return -1;
+    }
     memcpy(buf, buffer, strlen(buffer));
     buf[strlen(buffer)] = '\0';
     pclose(fp);
     return 0;
 }
-#if FLAG_TESS
-int lynq_query_operator(char buf[]){
-    int32_t token = -1;
-    if(buf == NULL)
-        return token;
-    char msg_imsi[20] = {0};
-    memset(msg_imsi,0,sizeof(msg_imsi));
-    token = lynq_get_imsi(msg_imsi);
-    if(strlen(msg_imsi) != 0){
-        FindOperator *ope_command = NULL;
-        ope_command = find_ope_command(msg_imsi, findOperator);
-        if(ope_command){
-            memcpy(buf, ope_command->buf, strlen(ope_command->buf));
-            buf[strlen(ope_command->buf)] = '\0';
-        }
-        else{
-            /*more*/
-            char mccmnc[5] = {0};
-            memcpy(buf, msg_imsi, 5);
-            buf[5] = '\0';
-            /*more*/
-        }
-        return token;
-    }
-    else{
-        //msg->base.e = err;
-        const char *test = "please insert sim card";
-        memcpy(buf, test, strlen(test));
-        return token;
-    }
-}
-FindOperator findOperator[] = {
-#include "operator.h"
-};
 
-static FindOperator*find_ope_command (char *name,FindOperator *Class){
-    if(name == NULL || Class == NULL){
-        return ((FindOperator *)NULL);
-    }
-    register int i;
-    for (i = 0; Class[i].MCCMCN; i++)
-        if (strncmp (name, Class[i].MCCMCN, 5) == 0)
-            return (&Class[i]);
-    return ((FindOperator *)NULL);
-}
-
-#endif