[Feature][L805-16] Check the signal strength of two SIM cards at once(lynq_solicited_signal_strength_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: Ic0f092186c98c7a4683972a3cf7673b9d2c258e8
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 ced745b..48a4b8c 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
@@ -83,6 +83,24 @@
 int lynq_set_feature_config_sbp(int sbp_flag);

 int lynq_query_feature_config_sbp(int *sbp_status );

 

+#ifdef MODE_DSDS

+

+typedef struct{

+    signalStrength_t solSigStren_for_sim0;

+    signalStrength_t solSigStren_for_sim1;

+}signalStrength_dual_t;

+

+/**

+ * @brief check signal_strength for all sim cards once

+ * @param signalStrength_dual_t:two signalStrength_t struct for two sim 

+ * @return int

+ * 0:success

+ * other:fail

+ */

+int lynq_solicited_signal_strength_dual(signalStrength_dual_t *solSigStren_dual);

+

+#endif

+

 

 typedef enum {

     NETWORK_STATE_BUFFER_TYPE_VOICE_REG,

diff --git a/common_src/lib/liblynq-network/lynq_module_socket.cpp b/common_src/lib/liblynq-network/lynq_module_socket.cpp
index 35dd9d6..3472454 100755
--- a/common_src/lib/liblynq-network/lynq_module_socket.cpp
+++ b/common_src/lib/liblynq-network/lynq_module_socket.cpp
@@ -37,6 +37,17 @@
     char param[LYNQ_REQUEST_PARAM_BUF];

 }lynq_client_t;

 

+#ifdef MODE_DSDS

+typedef struct{

+    int uToken;

+    int request;

+    int paramLen;

+    char param[LYNQ_REQUEST_PARAM_BUF];

+    char slot_status;

+    char slot;

+}lynq_client_dual_t;

+#endif

+

 typedef struct{

     int resp_type;

     int token;

@@ -293,6 +304,77 @@
     return ret;    

 }

 

+#ifdef MODE_DSDS

+int lynq_send_common_request_dual(Parcel*& p, int time_out, int request_id, int argc, char slot_status ,char slot,const char* format,...)

+{

+    lynq_client_dual_t client;

+    int ret;

+    int send_num;

+    

+    client.uToken = g_module_Global_uToken;

+    g_module_Global_uToken=(g_module_Global_uToken+1)%10000;/*0-10000*/

+    client.request = request_id;

+    client.paramLen = argc;

+    client.slot_status = slot_status;

+    client.slot = slot;

+    bzero(client.param,LYNQ_REQUEST_PARAM_BUF);

+    if(argc!=0)

+    {

+        va_list args;

+        va_start(args, format);

+        vsnprintf(client.param, LYNQ_REQUEST_PARAM_BUF, format, args);

+        va_end(args);    

+    }

+    LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s,slot_status=%c,slot=%c",client.uToken,client.request,client.paramLen,client.param,client.slot_status,client.slot);

+    pthread_mutex_lock(&s_sendto_mutex);

+     if(s_inner_test==1)

+    {

+        send_num = 1;          

+    }

+    else

+    {

+        send_num = sendto(module_rc_sock_fd,&client,sizeof(client),0,(struct sockaddr *)&module_rc_addr_serv,module_len_rc_addr_serv); 

+    }

+    if(s_inner_test>=1000)

+    {

+        time_out = s_inner_test-1000;

+    }        

+    pthread_mutex_unlock(&s_sendto_mutex);

+

+    if(send_num <= 0)       

+    {

+        LYERRLOG("send request fail, send num is %d", send_num);

+        return LYNQ_E_SEND_REQUEST_FAIL;

+    }

+    ret = waitResponse(p, client.uToken,time_out);

+

+    if(ret==0)

+    {

+        lynq_resp_t head; 

+        ret=GetHeader(p,head);

+        if(ret!=0)

+        {

+            LYERRLOG("%s %d get head error %d",__func__,client.uToken,ret);

+            delete p;

+            return LYNQ_E_GET_HEAD_ERROR;

+        }

+        if(head.error!=0)

+        {

+            LYERRLOG("%s %d mdm return head error %d",__func__,client.uToken,head.error);

+            delete p;

+            return head.error;

+        }

+        LYERRLOG("%s %d suc",__func__,client.uToken);

+        return RESULT_OK;  

+    }

+

+    LYERRLOG("%s %d fail, ret is %d",__func__,client.uToken,ret);

+   

+    return ret;    

+}

+

+#endif

+

 /*hq add for urc broadcase optimisson 2023/01/03 begin*/

 #define SHM_BUFFER_INDEX_OFFSET 1

 #define SHM_BUFFER_SIZE_OFFSET 16

diff --git a/common_src/lib/liblynq-network/lynq_module_socket.h b/common_src/lib/liblynq-network/lynq_module_socket.h
index 98f968e..299200d 100755
--- a/common_src/lib/liblynq-network/lynq_module_socket.h
+++ b/common_src/lib/liblynq-network/lynq_module_socket.h
@@ -9,6 +9,11 @@
 extern int g_wait_time;

 int lynq_send_common_request(Parcel*& p, int time_out, int request_id,  int argc, const char* format,...);

 

+#ifdef MODE_DSDS

+int lynq_send_common_request_dual(Parcel*& p, int time_out, int request_id, int argc, char slot_status ,char slot,const char* format,...);

+#endif

+

+

 int lynq_start_all_urc_socket_thread();

 void lynq_close_all_urc_socket_thread();

 int lynq_start_all_rc_socket_thread();

diff --git a/common_src/lib/liblynq-network/lynq_network.cpp b/common_src/lib/liblynq-network/lynq_network.cpp
index b89612e..dbc9c50 100755
--- a/common_src/lib/liblynq-network/lynq_network.cpp
+++ b/common_src/lib/liblynq-network/lynq_network.cpp
@@ -1169,6 +1169,134 @@
     delete p;

     return RESULT_OK;    

 }

+#ifdef MODE_DSDS

+

+int lynq_store_signal_strength_dual(Parcel* p,signalStrength_t *solSigStren)

+{

+    int none = 0;

+    int rscp;

+    int ecno;

+

+    p->readInt32(&solSigStren->rssi);

+    if(is_rssi_valid(solSigStren->rssi))

+    {

+        solSigStren->gw_sig_valid = 1;

+    }else{

+        solSigStren->gw_sig_valid = 0;

+    }

+

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&solSigStren->lte_signalstrength);

+

+    // p->readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);

+    p->readInt32(&solSigStren->rsrp);

+    p->readInt32(&solSigStren->rsrq);

+    p->readInt32(&solSigStren->rssnr);

+    LYINFLOG("LTE_signalstrength:%d",solSigStren->lte_signalstrength);

+    if(is_rssi_valid(solSigStren->lte_signalstrength))

+    {

+        solSigStren->lte_sig_valid = 1;

+    }else{

+        solSigStren->lte_sig_valid = 0;

+    }

+

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&solSigStren->wcdma_signalstrength);

+    p->readInt32(&none);

+    p->readInt32(&rscp);

+    p->readInt32(&ecno);

+    

+    

+    LYINFLOG("WCDMA_signalstrength:%d",solSigStren->wcdma_signalstrength);

+    if(is_rssi_valid(solSigStren->wcdma_signalstrength))

+    {

+        solSigStren->wcdma_sig_valid = 1;

+        convert_rscp(rscp,&solSigStren->rscp);

+        convert_ecno(ecno,&solSigStren->ecno);

+    }else{

+        solSigStren->wcdma_sig_valid = 0;

+    }

+    /*bug fix*/

+    p->readInt32(&solSigStren->ssRsrp);  

+    

+    if(is_nr_ss_rsrp_valid(solSigStren->ssRsrp))

+    {

+        solSigStren->nr_sig_valid = 1;

+        p->readInt32(&solSigStren->ssRsrq);

+        p->readInt32(&solSigStren->ssSinr);

+        p->readInt32(&solSigStren->csiRsrp);

+        p->readInt32(&solSigStren->csiRsrq);

+        p->readInt32(&solSigStren->csiSinr);

+    }

+    else{

+        LYERRLOG("None of NR signal info");

+        solSigStren->nr_sig_valid = 0;

+    }        

+

+    LYINFLOG("%s suc",__func__);  

+    delete p;

+    return RESULT_OK;    

+

+}

+    

+int lynq_solicited_signal_strength_dual(signalStrength_dual_t *solSigStren_dual)

+{

+    if(g_module_init_flag != MODULE_RUNNING)

+    {

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

+    }

+    if(NULL == solSigStren_dual)

+    {

+        LYERRLOG("%s parameter is NULL",__func__);  

+        return LYNQ_E_PARAMETER_ANONALY;

+    }

+

+    Parcel* p_for_sim0=NULL;

+    Parcel* p_for_sim1=NULL;

+    int ret=lynq_send_common_request_dual(p_for_sim0,g_wait_time,RIL_REQUEST_SIGNAL_STRENGTH,0,'1','0',"");

+    if(ret!=RESULT_OK)

+    {

+        LYERRLOG("%s for sim0 call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }            

+    

+    ret=lynq_store_signal_strength_dual(p_for_sim0,&(solSigStren_dual->solSigStren_for_sim0));

+    if(ret!=RESULT_OK)

+    {

+        LYERRLOG("lynq_store_signal_strength_DSDS failure, ret is %d",__func__,ret);

+        return ret;  

+    }           

+

+    ret=lynq_send_common_request_dual(p_for_sim1,g_wait_time,RIL_REQUEST_SIGNAL_STRENGTH,0,'1','1',"");

+    if(ret!=RESULT_OK)

+    {

+        LYERRLOG("%s for sim1 call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }            

+    

+    ret=lynq_store_signal_strength_dual(p_for_sim1,&(solSigStren_dual->solSigStren_for_sim1));

+    if(ret!=RESULT_OK)

+    {

+        LYERRLOG("lynq_store_signal_strength_DSDS failure, ret is %d",__func__,ret);

+        return ret;  

+    }            

+    

+    return RESULT_OK;    

+}

+

+

+#endif

 

 int lynq_set_ims(const int ims_mode)

 {

@@ -1216,6 +1344,11 @@
         LYINFLOG("incoming solSigStren or slot_id is NULL!!!");

         return LYNQ_E_PARAMETER_ANONALY;

     }

+    #ifdef MODE_DSDS

+    *slot_id = s_module_urc_slot_id;

+    LYINFLOG("slot_id = %d",s_module_urc_slot_id);

+    #else

+    #endif

     switch(handle)

     {        

         case RIL_UNSOL_SIGNAL_STRENGTH: //1009

@@ -1241,8 +1374,11 @@
         }

         default:

         {

+            #ifdef MODE_DSDS

+            #else

             *slot_id = s_module_urc_slot_id;

             LYINFLOG("slot_id = %d",s_module_urc_slot_id);

+            #endif

 		}

     }        

     return RESULT_OK;   

diff --git a/common_src/lib/liblynq-network/makefile b/common_src/lib/liblynq-network/makefile
index 044d7f5..a5c8892 100755
--- a/common_src/lib/liblynq-network/makefile
+++ b/common_src/lib/liblynq-network/makefile
@@ -14,6 +14,12 @@
     LOCAL_CFLAGS += -DGSW_RIL_CFG
 endif
 
+ifeq ($(strip $(MTK_MULTI_SIM_SUPPORT)), dsds)
+    LOCAL_CFLAGS += -DANDROID_SIM_COUNT_2 \
+                     -DANDROID_MULTI_SIM \
+                     -DMODE_DSDS
+endif
+
 $(warning ################# lynq network demo ROOT: $(ROOT),includedir:$(includedir))
 LOCAL_PATH   = .