[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;