Merge "[Bugfix][T106BUG-105][Network]lynq_query_radio_state, return 7100, Only Configure: No, Affected branch: unknown, Affected module: unknown, Is it affected on both ZXIC and MTK: Yes, Self-test: Yes, Doc Update: No"
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-network/lynq_network.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-network/lynq_network.cpp
index 17bf4d8..bba641e 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-network/lynq_network.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-network/lynq_network.cpp
@@ -450,6 +450,80 @@
return RESULT_OK;
}
+int lynq_query_registration_state_from_parcel(Parcel* p, int num,int reject_index, int* regState,char * LAC,char * CID,int *netType,int *netRejected)
+{
+ int i;
+ char *resp[LYNQ_RESP_STRING_MAX_NUM]={0};
+ int ret = RESULT_OK;
+ for(i=0;i<num;i++)
+ {
+ resp[i]=lynqStrdupReadString(p);
+ }
+ if(resp[0]==NULL)
+ {
+ LYERRLOG("%s resp[0] %s is NULL",__func__,resp[0]);
+ ret = LYNQ_E_INNER_ERROR;
+ goto registration_from_parcel_return;
+ }
+ *regState = atoi(resp[0]);
+ strcpy(CID,"");
+ strcpy(LAC,"");
+ *netType = RADIO_TECH_UNKNOWN;
+ *netRejected = -1;
+ if((*regState)==1 || (*regState)==5)
+ {
+ if(resp[1]!=NULL)
+ {
+ strcpy(LAC,resp[1]);
+ }
+ else
+ {
+ LYERRLOG("%s resp[1] %s is NULL",__func__);
+ }
+
+ if(resp[2]!=NULL)
+ {
+ strcpy(CID,resp[2]);
+ }
+ else
+ {
+ LYERRLOG("%s resp[2] %s is NULL",__func__);
+ }
+
+ if(resp[3]!=NULL)
+ {
+ *netType = atoi(resp[3]);
+ }
+ else
+ {
+ LYERRLOG("%s data resp[3] %s is NULL",__func__);
+ }
+ }
+ else if((*regState)==3 || (*regState)==13)
+ {
+ if(resp[reject_index]==NULL)
+ {
+ LYERRLOG("%s resp[%d] is NULL",__func__,reject_index);
+ }
+ else
+ {
+ *netRejected = atoi(resp[reject_index]);
+ }
+ }
+
+registration_from_parcel_return:
+
+ for(i=0;i<num;i++)
+ {
+ if(resp[i]!=NULL)
+ {
+ free(resp[i]);
+ }
+ }
+ return ret;
+}
+
+
int lynq_query_registration_state(const char *type,int* regState,int* imsRegState,char * LAC,char * CID,int *netType,int *radioTechFam,int *netRejected)
{
if(g_module_init_flag != MODULE_RUNNING)
@@ -474,14 +548,14 @@
memcpy(str,type,strlen(type)+1);
strUpper(str);
if(!strcmp(str,"VOICE"))
- {
- if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,3,regState,netType,netRejected,0)==0)
+ {
+ if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,3,regState,netType,netRejected,2,LAC,CID)==0)
{
return RESULT_OK;
}
request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
}else if(!strcmp(str,"DATA")){
- if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_DATA_REG,2,regState,netType,2,LAC,CID)==0)
+ if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_DATA_REG,3,regState,netType,netRejected,2,LAC,CID)==0)
{
return RESULT_OK;
}
@@ -511,36 +585,15 @@
if(!strcmp(str,"VOICE"))
{
p->readInt32(&num);
- if(num ==15)
+ if(num >0 && num<=15)
{
- for(i=0;i<num;i++)
+ ret=lynq_query_registration_state_from_parcel(p, num, 13, regState, LAC,CID,netType,netRejected);
+ if(ret!=RESULT_OK)
{
- resp[i]=lynqStrdupReadString(p);
+ LYERRLOG("%s call lynq_query_registration_state_from_parcel fail",__func__);
+ goto registration_return;
}
- if(resp[0]==NULL || resp[3]==NULL)
- {
- LYERRLOG("%s voice resp[0] resp[3] %s %s is NULL",__func__,resp[0],resp[3]);
- ret=LYNQ_E_INNER_ERROR;
- goto registration_return;
- }
- *regState = atoi(resp[0]);
- *netType = atoi(resp[3]);
- if(*regState==3)
- {
- if(resp[13]==NULL)
- {
- LYERRLOG("%s resp[13] is NULL",__func__);
- ret=LYNQ_E_INNER_ERROR;
- goto registration_return;
- }
- *netRejected = atoi(resp[13]);
- }
- else
- {
- *netRejected=0;
-
-}
- set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,3,*regState,*netType,*netRejected,0);
+ set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,3,*regState,*netType,*netRejected,2,LAC,CID);
goto registration_return;
}
else
@@ -552,39 +605,16 @@
}
else if(!strcmp(str,"DATA")){
p->readInt32(&num);
- if(num >=5 && num <=11)
- {
- num=5;
- for(i=0;i<num;i++)
+ if(num >0 && num <=11)
+ {
+ ret=lynq_query_registration_state_from_parcel(p, num, 4, regState, LAC,CID,netType,netRejected);
+ if(ret!=RESULT_OK)
{
- resp[i]=lynqStrdupReadString(p);
- }
- if(resp[0]==NULL || resp[1]==NULL || resp[2]==NULL || resp[3]==NULL)
- {
- LYERRLOG("%s data resp[0] resp[1] resp[2] resp[3] %s %s %s %s is NULL",__func__,resp[0],resp[1],resp[2],resp[3]);
- ret=LYNQ_E_INNER_ERROR;
- goto registration_return;
- }
- *regState = atoi(resp[0]);
- if(*regState==3)
- {
- if(resp[4]==NULL)
- {
- LYERRLOG("%s resp[4] is NULL",__func__);
- ret=LYNQ_E_INNER_ERROR;
- goto registration_return;
- }
- *netRejected = atoi(resp[4]);
- }
- else
- {
- *netRejected=0;
-
- }
- strcpy(LAC,resp[1]);
- strcpy(CID,resp[2]);
- *netType = atoi(resp[3]);
- set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_DATA_REG,2,*regState,*netType,2,LAC,CID);
+ LYERRLOG("%s call lynq_query_registration_state_from_parcel fail",__func__);
+ goto registration_return;
+ }
+
+ set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_DATA_REG,3,*regState,*netType,*netRejected,2,LAC,CID);
goto registration_return;
}
else
@@ -617,15 +647,8 @@
if(ret==RESULT_OK)
{
LYINFLOG("%s suc",__func__);
- }
-
- for(i=0;i<num;i++)
- {
- if(resp[i]!=NULL)
- {
- free(resp[i]);
- }
- }
+ }
+
delete p;
return ret;