[Bugfix][API-1400]fix after reset modem, lynq_verify_pin fail
Only Configure: No
Affected branch: master
Affected module: sim
Is it affected on both ZXIC and MTK: only MTK
Self-test: Yes
Doc Update: No
Change-Id: I9c27af8c823c9824a24f71de8cd0251f1573b61e
diff --git a/common_src/lib/liblynq-sim/src/lynq_sim.cpp b/common_src/lib/liblynq-sim/src/lynq_sim.cpp
index c780859..0ce669e 100755
--- a/common_src/lib/liblynq-sim/src/lynq_sim.cpp
+++ b/common_src/lib/liblynq-sim/src/lynq_sim.cpp
@@ -49,6 +49,7 @@
struct sockaddr_in addr_serv;
static int sock_fd = 0;
int Global_uToken = 0;
+static int default_cnt = 20;
static pthread_mutex_t g_lynq_sim_sendto_mutex;
/**
* @brief mark call initialization state
@@ -144,15 +145,18 @@
return RESULT_ERROR;
}
}
-
-int lynq_send_common_request(Parcel* p, int request_id, int argc, int cnt, const char* format,...)
+int get_utoken()
+{
+ return (Global_uToken++)%10000;/*0-10000*/
+}
+int lynq_send_common_request(Parcel* p, int request_id, int argc, int cnt, int sim_count, 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;
+ client.uToken = get_utoken();
if(request_id == RIL_REQUEST_SCREEN_STATE)
{
client.request = LYNQ_REQUEST_CHANGE_SCREEN_STATE;
@@ -185,8 +189,13 @@
}
lynq_resp_t head;
head.request = -1;
- for(int i = 0; i < cnt;)
+ for(int i = 0; i < cnt; i++)
{
+ head.resp_type = -1;
+ head.token = -1;
+ head.request = -1;
+ head.slot_id = -1;
+ head.error = -1;
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)
{
@@ -200,12 +209,30 @@
if(ret!=0)
{
RLOGD("%s %d get head error %d",__FUNCTION__,client.uToken,ret);
+
+ if (head.token != client.uToken)
+ {
+ RLOGD("head.token is %d != client.uToken is %d", head.token, client.uToken);
+ ret = RESULT_ERROR;
+ continue;
+ }
+
pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
return ret;
}
+ if (head.token != client.uToken)
+ {
+ RLOGD("head.token is %d != client.uToken is %d", head.token, client.uToken);
+ ret = RESULT_ERROR;
+ continue;
+ }
if(request_id == head.request)
{
- i++;
+ sim_count--;
+ if(sim_count <= 0)
+ break;
+ else
+ continue;
}
}
pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
@@ -296,7 +323,7 @@
return -1;
}
Parcel p;
- int res = lynq_send_common_request(&p,RIL_REQUEST_GET_SIM_STATUS,0,1,"");
+ int res = lynq_send_common_request(&p,RIL_REQUEST_GET_SIM_STATUS,0,default_cnt,1,"");
if(res != 0)
{
RLOGD("function %s execute error", __FUNCTION__);
@@ -313,7 +340,7 @@
return -1;
}
Parcel p;
- int res = lynq_send_common_request(&p,RIL_REQUEST_GET_IMSI,0,1,"");
+ int res = lynq_send_common_request(&p,RIL_REQUEST_GET_IMSI,0,default_cnt,1,"");
if(res != 0)
{
RLOGD("function %s execute error", __FUNCTION__);
@@ -334,7 +361,7 @@
return -1;
}
Parcel p;
- int res = lynq_send_common_request(&p,RIL_REQUEST_QUERY_ICCID,0,1,"");
+ int res = lynq_send_common_request(&p,RIL_REQUEST_QUERY_ICCID,0,default_cnt,1,"");
if(res != 0)
{
RLOGD("function %s execute error", __FUNCTION__);
@@ -352,7 +379,7 @@
return -1;
}
Parcel p;
- int res = lynq_send_common_request(&p,RIL_REQUEST_SET_FACILITY_LOCK,4,1,"%s %s %s %s\n", "SC", pin, "11", "1");
+ int res = lynq_send_common_request(&p,RIL_REQUEST_SET_FACILITY_LOCK,4,default_cnt,1,"%s %s %s %s\n", "SC", pin, "11", "1");
if(res != 0)
{
RLOGD("function %s execute error", __FUNCTION__);
@@ -368,7 +395,7 @@
return -1;
}
Parcel p;
- int res = lynq_send_common_request(&p,RIL_REQUEST_OEM_HOOK_RAW,1,1,"%s%d", "AT+ESIMPOWER=", mode);
+ int res = lynq_send_common_request(&p,RIL_REQUEST_OEM_HOOK_RAW,1,default_cnt,1,"%s%d", "AT+ESIMPOWER=", mode);
if(res != 0)
{
RLOGD("function %s execute error", __FUNCTION__);
@@ -383,7 +410,7 @@
return -1;
}
Parcel p;
- int res = lynq_send_common_request(&p,RIL_REQUEST_SET_FACILITY_LOCK,4,1,"%s %s %s %s\n", "SC", pin, "11", "0");
+ int res = lynq_send_common_request(&p,RIL_REQUEST_SET_FACILITY_LOCK,4,default_cnt,1,"%s %s %s %s\n", "SC", pin, "11", "0");
if(res != 0)
{
RLOGD("function %s execute error", __FUNCTION__);
@@ -398,7 +425,7 @@
return -1;
}
Parcel p;
- int res = lynq_send_common_request(&p,RIL_REQUEST_QUERY_FACILITY_LOCK,3,1,"%s %s %s\n", "SC", pin, "11");
+ int res = lynq_send_common_request(&p,RIL_REQUEST_QUERY_FACILITY_LOCK,3,default_cnt,1,"%s %s %s\n", "SC", pin, "11");
if(res != 0)
{
RLOGD("function %s execute error", __FUNCTION__);
@@ -424,7 +451,7 @@
return -1;
}
Parcel p;
- int res = lynq_send_common_request(&p,RIL_REQUEST_ENTER_SIM_PIN,1,1,"%s\n", pin);
+ int res = lynq_send_common_request(&p,RIL_REQUEST_ENTER_SIM_PIN,1,default_cnt,1,"%s\n", pin);
if(res != 0)
{
RLOGD("function %s execute error", __FUNCTION__);
@@ -446,7 +473,7 @@
if(!strlen(old_pin))
return res;
Parcel p;
- res = lynq_send_common_request(&p,RIL_REQUEST_CHANGE_SIM_PIN,2,1,"%s %s\n", old_pin, new_pin);
+ res = lynq_send_common_request(&p,RIL_REQUEST_CHANGE_SIM_PIN,2,default_cnt,1,"%s %s\n", old_pin, new_pin);
if(res != 0)
{
RLOGD("function %s execute error", __FUNCTION__);
@@ -463,7 +490,7 @@
if(puk == NULL || pin == NULL)
return -1;
Parcel p;
- int res = lynq_send_common_request(&p,RIL_REQUEST_ENTER_SIM_PUK,2,1,"%s %s\n", puk, pin);
+ int res = lynq_send_common_request(&p,RIL_REQUEST_ENTER_SIM_PUK,2,default_cnt,1,"%s %s\n", puk, pin);
if(res != 0)
{
RLOGD("function %s execute error", __FUNCTION__);
@@ -540,7 +567,7 @@
return -1;
}
Parcel p;
- int res = lynq_send_common_request(&p,RIL_REQUEST_OEM_HOOK_RAW,1,1,"%s\n", "AT+CNUM");
+ int res = lynq_send_common_request(&p,RIL_REQUEST_OEM_HOOK_RAW,1,default_cnt,1,"%s\n", "AT+CNUM");
if(res != 0)
{
RLOGD("function %s execute error", __FUNCTION__);
@@ -566,7 +593,7 @@
return -1;
}
Parcel p;
- int res = lynq_send_common_request(&p,RIL_REQUEST_DEVICE_IDENTITY,0,1,"");
+ int res = lynq_send_common_request(&p,RIL_REQUEST_DEVICE_IDENTITY,0,default_cnt,1,"");
if(res != 0)
{
RLOGD("function %s execute error", __FUNCTION__);
@@ -587,7 +614,7 @@
return -1;
}
Parcel p;
- int res = lynq_send_common_request(&p,RIL_REQUEST_DEVICE_IDENTITY,0,1,"");
+ int res = lynq_send_common_request(&p,RIL_REQUEST_DEVICE_IDENTITY,0,default_cnt,1,"");
if(res != 0)
{
RLOGD("function %s execute error", __FUNCTION__);
@@ -650,7 +677,7 @@
lynq_client_t client_t;
client_t.request = LYNQ_REQUEST_SET_DEFAULT_SIM_ALL;
client_t.paramLen = 1;
- client_t.uToken = Global_uToken;
+ client_t.uToken = get_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); //because ril of id = -1
@@ -675,7 +702,7 @@
if(!judge(num))
return -1;
Parcel p;
- int res = lynq_send_common_request(&p,RIL_REQUEST_SCREEN_STATE,1,2,"%d\n",num);
+ int res = lynq_send_common_request(&p,RIL_REQUEST_SCREEN_STATE,1,default_cnt,2,"%d\n",num);
if(res != 0)
{
RLOGD("function %s execute error", __FUNCTION__);
@@ -697,7 +724,7 @@
if(!judge(num))
return -1;
Parcel p;
- int res = lynq_send_common_request(&p,RIL_REQUEST_RADIO_POWER,1,2,"%d\n",num);
+ int res = lynq_send_common_request(&p,RIL_REQUEST_RADIO_POWER,1,default_cnt,2,"%d\n",num);
if(res != 0)
{
RLOGD("function %s execute error", __FUNCTION__);
@@ -780,7 +807,7 @@
return -1;
}
Parcel p;
- 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);
+ int res = lynq_send_common_request(&p,RIL_REQUEST_SIM_IO,9,default_cnt,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)
{
RLOGD("function %s execute error", __FUNCTION__);
@@ -822,7 +849,7 @@
lynq_client_t client_t;
client_t.request = RIL_REQUEST_OEM_HOOK_RAW;
client_t.paramLen = 1;
- client_t.uToken = Global_uToken;
+ client_t.uToken = get_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);//because response not by ril callback
@@ -914,3 +941,4 @@
return 0;
}
+