[Bugfix][API-1099]occasionally,setup data call fail,due to tele-fwk can not get mccmnc <new solution>
Change-Id: Iea6bf4172b3ae06ae34853fc876639a856ae0d01
diff --git a/lib/liblynq-data/lynq_data.cpp b/lib/liblynq-data/lynq_data.cpp
index 67e112d..70f6daa 100755
--- a/lib/liblynq-data/lynq_data.cpp
+++ b/lib/liblynq-data/lynq_data.cpp
@@ -782,6 +782,8 @@
return 0;
}
int get_imsi();
+int check_apn_status();
+int radio_switch(int status);
int lynq_init_data(int uToken)
{
if (g_lynq_data_init_flag == 1)
@@ -815,7 +817,28 @@
return -1;
}
memset(lynq_apn_table,0,sizeof(lynq_apn_table));
+ LYINFLOG("[%s] radio on/off solution 20230724",__FUNCTION__);
int count = 0;
+ while(count < 2)//try recover the network within 10s.
+ {
+ result = check_apn_status();
+ if(result==0)
+ {
+ break;
+ }
+ radio_switch(0);
+ sleep(1);
+ radio_switch(1);
+ sleep(3);
+ count++;
+ }
+ LYINFLOG("[%s] count is %d",__FUNCTION__,count);
+ if(result!=0)
+ {
+ LYDBGLOG("lynq init call fail!!!");
+ return LYNQ_E_MD_NOT_READY;//
+ }
+ /* old
while(count < 10)
{
result = get_imsi();
@@ -832,6 +855,7 @@
LYDBGLOG("lynq init call fail!!!");
return LYNQ_E_MD_NOT_READY;//
}
+ */
LYDBGLOG("lynq init call success!!!");
return 0;
@@ -1813,3 +1837,96 @@
}
/*Typethree add for T800 platform 2022/04/21 end*/
+static int exec_cmd(const char *str_cmd, char * str_cmd_ret, size_t max_len) {
+ FILE *fp;
+ //printf("to exec cmd:%s\n", str_cmd);
+ if((fp=popen(str_cmd,"r"))==NULL)
+ {
+ perror("popen error!");
+ return -1;
+ }
+ if((fread(str_cmd_ret,max_len,1,fp))<0)
+ {
+ perror("fread fail!");
+ fclose(fp);
+ return -1;
+ }
+ fclose(fp);
+ return 0;
+}
+int check_apn_status()
+{
+ LYINFLOG("check_apn_status enter");
+ int ret = -1;
+ char cmd_ret[8] ={0};//get mccmnc
+ const char *cmd = "uci get radio_property.property.vendor_ril_data_gsm_mcc_mnc0";
+ const char *empty_str = ":empty";
+ ret = exec_cmd(cmd,cmd_ret,8);
+ if(ret==0)
+ {
+ if(strlen(cmd_ret)==0)
+ {
+ LYERRLOG("not have mccmnc config in uci ram");
+ return 1;
+ }
+ if(strncmp(cmd_ret,empty_str,strlen(empty_str))==0)
+ {
+ LYERRLOG("mccmnc is empty");
+ return 2;
+ }
+ LYINFLOG("mccmnc is %s",cmd_ret);
+ return 0;
+ }
+ else
+ {
+ LYERRLOG("exec cmd fail");
+ return -1;
+ }
+ return 0;
+}
+int radio_switch(int status)
+{
+ Parcel *p =NULL;
+ lynq_client_t client;
+ int resp_type = -1;
+ int token;
+ int request = -1;
+ int slot_id = -1;
+ int error = -1;
+ int version =0;
+ int num = 0;
+ char *temp_char = NULL;
+ char mccmnc[32] = {0};
+ char mccmnckey[64] = {0};
+ client.uToken = get_utoken();
+ client.request = 59;//RIL_REQUEST_OEM_HOOK_RAW 59
+ client.paramLen = 1;
+ bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
+ sprintf(client.param,"AT+CFUN=%d",status);
+ LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
+ pthread_mutex_lock(&g_lynq_data_sendto_mutex);
+ if(send_request(lynq_client_sockfd,&client)==-1)
+ {
+ LYERRLOG("send request fail");
+ perror("[LYNQ_DATA] send request fail:");
+ pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
+ return -1;
+ }
+ //get_response(lynq_client_sockfd,p);
+ error = wait_response(lynq_client_sockfd,p,client.uToken);
+ if(error!=0)
+ {
+ LYERRLOG("wait_response fail,ret:%d",error);
+ pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
+ return error;
+ }
+ pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
+ if(JumpHeader(p,&resp_type,&client.uToken,&request,&slot_id,&error)!=0)
+ {
+ LYERRLOG("JumpHeader fail");
+ return -1;
+ }
+ LYINFLOG("resp_type=%d,uToken=%d,request=%d,slot_id=%d,error_code=%d",resp_type,client.uToken,request,slot_id,error);
+ free_parcel(p);
+ return error;
+}