[Feature][DSDS-1]Check the network registration of two SIM cards at once(lynq_query_registration_state_dual)
Only Configure:No
Affected branch:DSDS
Affected module:NETWORK
Is it affected on both ZXIC and MTK: MTK
Self-test: Yes
Doc Update:Need
Change-Id: Id47eb300eaefbb2920d3ce0525d8c89a39a2722d
diff --git a/common_src/lib/liblynq-network/include/lynq_network/lynq_network.h b/common_src/lib/liblynq-network/include/lynq_network/lynq_network.h
index 48a4b8c..7de3cf1 100755
--- a/common_src/lib/liblynq-network/include/lynq_network/lynq_network.h
+++ b/common_src/lib/liblynq-network/include/lynq_network/lynq_network.h
@@ -90,6 +90,52 @@
signalStrength_t solSigStren_for_sim1;
}signalStrength_dual_t;
+typedef struct{
+ int regState;
+ char LAC[128];
+ char CID[128];
+ int netType;
+ int netRejected;
+}lynq_data_registration_state_t;
+
+typedef struct{
+ int regState;
+ char LAC[128];
+ char CID[128];
+ int netType;
+ int netRejected;
+}lynq_voice_registration_state_t;
+
+typedef struct{
+ int imsRegState;
+ int radioTechFam;
+}lynq_ims_registration_state_t;
+
+typedef struct{
+ lynq_data_registration_state_t data_registration_info;
+ lynq_voice_registration_state_t
+ voice_registration_info;
+ lynq_ims_registration_state_t ims_registration_info;
+}lynq_registration_state_info_t;
+
+typedef struct{
+ lynq_registration_state_info_t registrtion_state_info_for_sim0;
+ lynq_registration_state_info_t registrtion_state_info_for_sim1;
+}lynq_registration_state_dual_info_t;
+
+
+
+/**
+ * @brief check registration for all sim cards once(data/voice/ims)
+ * @param char* type:which registration type to check(data/voice/ims)
+ * @param lynq_registration_state_dual_info_t registration_state_info: registration_state_info for two sim cards
+ * @return int
+ * 0:success
+ * other:fail
+ */
+int lynq_query_registration_state_dual(const char * type,lynq_registration_state_dual_info_t* registration_state_info);
+
+
/**
* @brief check signal_strength for all sim cards once
* @param signalStrength_dual_t:two signalStrength_t struct for two sim
diff --git a/common_src/lib/liblynq-network/lynq_network.cpp b/common_src/lib/liblynq-network/lynq_network.cpp
index dbc9c50..8e5b7ad 100755
--- a/common_src/lib/liblynq-network/lynq_network.cpp
+++ b/common_src/lib/liblynq-network/lynq_network.cpp
@@ -471,6 +471,7 @@
int lynq_query_registration_state_from_parcel(Parcel* p, int num,int reject_index, int* regState,char * LAC,char * CID,int *netType,int *netRejected)
{
+ LYINFLOG("ENTER %s",__func__);
int i;
char *resp[LYNQ_RESP_STRING_MAX_NUM]={0};
int ret = RESULT_OK;
@@ -1171,6 +1172,156 @@
}
#ifdef MODE_DSDS
+int lynq_store_registration_state_dual(Parcel* p,const char * str,lynq_registration_state_info_t* registration_info)
+{
+
+ int num;
+ int ret = 0;
+ char *resp[LYNQ_RESP_STRING_MAX_NUM]={0};
+ if(!strcmp(str,"VOICE"))
+ {
+ p->readInt32(&num);
+ if(num >0 && num<=15)
+ {
+ LYINFLOG("lynq_query_registration_state_from_parcel_Voice");
+ ret=lynq_query_registration_state_from_parcel(p, num, 13, &(registration_info->voice_registration_info.regState), registration_info->voice_registration_info.LAC,registration_info->voice_registration_info.CID,&(registration_info->voice_registration_info.netType),&(registration_info->voice_registration_info.netRejected));
+ if(ret!=RESULT_OK)
+ {
+ LYERRLOG("%s call lynq_query_registration_state_from_parcel fail",__func__);
+ goto registration_return;
+ }
+ goto registration_return;
+ }
+ else
+ {
+ LYERRLOG("%s type %s num %d error",__func__,str,num);
+ delete p;
+ return LYNQ_E_INNER_ERROR;
+ }
+ }
+ else if(!strcmp(str,"DATA")){
+ p->readInt32(&num);
+ if(num >0 && num <=11)
+ {
+ LYINFLOG("lynq_query_registration_state_from_parcel_data");
+ ret=lynq_query_registration_state_from_parcel(p, num, 4, &(registration_info->data_registration_info.regState), registration_info->data_registration_info.LAC,registration_info->data_registration_info.CID,&(registration_info->data_registration_info.netType),&(registration_info->data_registration_info.netRejected));
+ if(ret!=RESULT_OK)
+ {
+ LYERRLOG("%s call lynq_query_registration_state_from_parcel fail",__func__);
+ goto registration_return;
+ }
+
+ goto registration_return;
+ }
+ else
+ {
+ LYERRLOG("%s type %s num %d error",__func__,str,num);
+ delete p;
+ return LYNQ_E_INNER_ERROR;
+ }
+
+ }
+ else // "IMS"
+ {
+ p->readInt32(&num);
+ if(num == 2)
+ {
+ LYINFLOG("lynq_query_registration_state_from_parcel_ims");
+ p->readInt32(&(registration_info->ims_registration_info.imsRegState));
+ p->readInt32(&(registration_info->ims_registration_info.radioTechFam));
+ }
+ else
+ {
+ LYERRLOG("%s type %s num %d error",__func__,str,num);
+ delete p;
+ return LYNQ_E_INNER_ERROR;
+ }
+ }
+
+registration_return:
+
+ if(ret==RESULT_OK)
+ {
+ LYINFLOG("%s suc",__func__);
+ }
+
+ delete p;
+ return ret;
+
+}
+
+int lynq_query_registration_state_dual(const char * type,lynq_registration_state_dual_info_t* registration_state_info)
+{
+ if(g_module_init_flag != MODULE_RUNNING)
+ {
+ LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
+ return LYNQ_E_CONFLICT;
+ }
+
+ if(NULL == type || NULL ==registration_state_info)
+ {
+ LYERRLOG("%s there is parameter is NULL",__func__);
+ return LYNQ_E_PARAMETER_ANONALY;
+ }
+ if(strlen(type)>LYNQ_TYPE_BUF)
+ {
+ LYERRLOG("[%s]the parameter is inavaliable !",__FUNCTION__);
+ return LYNQ_E_PARAMETER_ANONALY;
+ }
+
+ int request;
+ char str[LYNQ_TYPE_BUF];
+ memcpy(str,type,strlen(type)+1);
+ strUpper(str);
+ if(!strcmp(str,"VOICE"))
+ {
+ request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
+ }else if(!strcmp(str,"DATA")){
+ request = RIL_REQUEST_DATA_REGISTRATION_STATE;
+ }else if(!strcmp(str,"IMS")){
+ request = RIL_REQUEST_IMS_REGISTRATION_STATE;
+ }else{
+ LYERRLOG("request error");
+ return LYNQ_E_PARAMETER_ANONALY;
+ }
+
+ Parcel* parcel_for_sim0=NULL;
+ Parcel* parcel_for_sim1=NULL;
+ int ret=lynq_send_common_request_dual(parcel_for_sim0,g_wait_time,request,0,'1','0',"");
+
+ if(ret!=RESULT_OK)
+ {
+ LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
+ return ret;
+ }
+
+ ret = lynq_store_registration_state_dual(parcel_for_sim0,type,&(registration_state_info->registrtion_state_info_for_sim0));
+
+ if(ret!=RESULT_OK)
+ {
+ LYERRLOG("%s call lynq_store_registration_state_dual failure, ret is %d",__func__,ret);
+ return ret;
+ }
+
+ ret=lynq_send_common_request_dual(parcel_for_sim1,g_wait_time,request,0,'1','1',"");
+
+ if(ret!=RESULT_OK)
+ {
+ LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
+ return ret;
+ }
+
+ ret = lynq_store_registration_state_dual(parcel_for_sim1,type,&(registration_state_info->registrtion_state_info_for_sim1));
+
+ if(ret!=RESULT_OK)
+ {
+ LYERRLOG("%s call lynq_store_registration_state_dual failure, ret is %d",__func__,ret);
+ return ret;
+ }
+ return ret;
+}
+
+
int lynq_store_signal_strength_dual(Parcel* p,signalStrength_t *solSigStren)
{
int none = 0;