[BugFix][L805A][bug-view-73]When the primary card is different from the service card, the datacalllist returns empty

    Only Configure: Yes
    Affected branch: DSDS
    Affected module: Data
    Is it affected on both ZXIC and MTK: only MTK
    Self-test: Yes
    Doc Update: No

Change-Id: I570f08ebb3211d7ca74120127ee4ff3e741604d9
diff --git a/common_src/lib/liblynq-data/lynq_data.cpp b/common_src/lib/liblynq-data/lynq_data.cpp
index 3725623..9ed40da 100755
--- a/common_src/lib/liblynq-data/lynq_data.cpp
+++ b/common_src/lib/liblynq-data/lynq_data.cpp
@@ -38,6 +38,19 @@
     int paramLen;
     char param[LYNQ_REQUEST_PARAM_BUF];
 }lynq_client_t;
+//xy.he add for bug-view-73 on 2024-08-26 start
+#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
+//xy.he add for bug-view-73 on 2024-08-26 end
 typedef enum{
     LYNQ_E_CARDSTATE_ERROR=8000,
     /* The voice service state is out of service*/
@@ -513,6 +526,21 @@
         p = NULL;
     }
 }
+//xy.he add for bug-view-73 on 2024-08-26 start
+int send_request_dual(int sockfd,lynq_client_dual_t *client_tmp,int size)
+{
+    int ret=0;
+    LYINFLOG("client size = %d",size);
+    ret = sendto(sockfd,client_tmp,size,0,(struct sockaddr *)&lynq_data_socket_server_addr,lynq_data_socket_server_addr_len);
+    LYINFLOG("sendto size = %d",ret);
+    if(ret==-1)
+    {
+        LYERRLOG("%s:errno code:%d",__FUNCTION__,errno);
+        return -1;
+    }
+    return 0;
+}
+//xy.he add for bug-view-73 on 2024-08-26 end
 int send_request(int sockfd,lynq_client_t *client_tmp)
 {
     int ret=0;
@@ -859,7 +887,9 @@
 }
 int get_imsi();
 int check_apn_status();
-
+//xy.he add for bug-view-73 on 2024-08-26 start
+int getDataSim();
+//xy.he add for bug-view-73 on 2024-08-26 end
 int get_timeout_value();
 int lynq_init_data(int uToken)
 {
@@ -1335,7 +1365,12 @@
 int getDataCallLists(lynq_data_call_response_v11_t dataCallList[LYNQ_APN_CHANNEL_MAX],int *realNum)
 {
     Parcel *p = NULL;
+    //xy.he add for bug-view-73 on 2024-08-26 start
+    #ifdef MODE_DSDS
+    lynq_client_dual_t client;
+    #else
     lynq_client_t client;
+    #endif
     int resp_type = -1;
     int token;
     int request = -1;
@@ -1352,6 +1387,26 @@
     client.uToken = get_utoken();;
     client.request = 57;//RIL_REQUEST_DATA_CALL_LIST
     client.paramLen = 0;
+    #ifdef MODE_DSDS
+    bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
+    char slot_status = '0';
+    int data_sim = -1;
+    data_sim = getDataSim();
+    if(data_sim >= 0)
+    {
+        client.slot_status = '1';
+        client.slot = (char)('0'+data_sim);
+    }
+    LYINFLOG("uToken=%d,request=%d,slot_status=%c,slot=%c,paralen=%d,param=%s",client.uToken,client.request,client.slot_status,client.slot,client.paramLen,client.param);
+    pthread_mutex_lock(&g_lynq_data_sendto_mutex);
+    if(send_request_dual(lynq_client_sockfd,&client,sizeof(client))==-1)
+    {
+        LYERRLOG("send request fail");
+        perror("[LYNQ_DATA] send request fail:");
+        pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
+        return -1;
+    }
+    #else
     bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
     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);
@@ -1362,6 +1417,8 @@
         pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
         return -1;
     }
+    #endif
+    //xy.he add for bug-view-73 on 2024-08-26 start
     //get_response(lynq_client_sockfd,p);
     error = wait_response(lynq_client_sockfd,p,client.uToken);
     if(error!=0)
@@ -1978,6 +2035,42 @@
     fclose(fp);
     return 0;
 }
+//xy.he add for bug-view-73 on 2024-08-26 start
+int getDataSim()
+{
+    LYINFLOG("getDataSim enter");
+    const char *data_sim_cmd = "uci get radio_property.property.persist_vendor_radio_data_sim";
+    char cmd_ret[8] ={0};
+    int slot = 0;
+    int sim_ret = -1;
+    int ret = -1;
+    const char *empty_str = ":empty";
+
+    sim_ret = exec_cmd(data_sim_cmd,cmd_ret,8);
+    if(sim_ret==0)
+    {
+        if(strlen(cmd_ret)==0)
+        {
+            LYERRLOG("not have data_sim config in uci ram");
+            return -1;
+        }
+        if(strncmp(cmd_ret,empty_str,strlen(empty_str))==0)
+        {
+            LYERRLOG("sim is empty");
+            return -2;
+        }
+        LYINFLOG("sim is %s",cmd_ret);
+        slot = atoi(cmd_ret);
+        return (slot-1);
+    }
+    else
+    {
+        LYERRLOG("exec cmd fail");
+        return -1;
+    }
+}
+//xy.he add for bug-view-73 on 2024-08-26 end
+
 int check_apn_status()
 {
     LYINFLOG("check_apn_status enter");
diff --git a/common_src/lib/liblynq-data/makefile b/common_src/lib/liblynq-data/makefile
index e2d17d0..d31ca9c 100755
--- a/common_src/lib/liblynq-data/makefile
+++ b/common_src/lib/liblynq-data/makefile
@@ -39,6 +39,10 @@
 
 endif
 
+#xy.he add for bug-view-73 on 2024-08-26 start
+LOCAL_CFLAGS += -DMODE_DSDS
+#xy.he add for bug-view-73 on 2024-08-26 end
+
 SOURCES = $(wildcard *.cpp)
 
 EXECUTABLE = liblynq-data.so