Merge "[Feature][T8TSK-79][Factory-test]Further optimize factory test sleep" into MR3.0
diff --git a/meta/meta-mediatek-mt2735/recipes-lynq/lynq-low-power/lynq-low-power.bb b/meta/meta-mediatek-mt2735/recipes-lynq/lynq-low-power/lynq-low-power.bb
index 264b643..02c62c7 100755
--- a/meta/meta-mediatek-mt2735/recipes-lynq/lynq-low-power/lynq-low-power.bb
+++ b/meta/meta-mediatek-mt2735/recipes-lynq/lynq-low-power/lynq-low-power.bb
@@ -3,7 +3,7 @@
 DESCRIPTION = "function test"
 LICENSE = "CLOSED"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=e1696b147d49d491bcb4da1a57173fff"
-DEPENDS += "platform-libs"
+DEPENDS += "platform-libs liblynq-sim"
 inherit workonsrc
 WORKONSRC = "${TOPDIR}/../src/lynq/packages/apps/lynq-low-power/src"
 
diff --git a/src/lynq/framework/lynq-ril-service/src/commands.h b/src/lynq/framework/lynq-ril-service/src/commands.h
index a0a13f4..c1686ed 100755
--- a/src/lynq/framework/lynq-ril-service/src/commands.h
+++ b/src/lynq/framework/lynq-ril-service/src/commands.h
@@ -200,6 +200,7 @@
     {"LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY",deleteSmsToMemory, "write sms to memory",LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY},
     {"LYNQ_REQUEST_LIST_SMS_FROM_MEMORY",listSmsToMemory, "write sms to memory",LYNQ_REQUEST_LIST_SMS_FROM_MEMORY},
     {"LYNQ_REQUEST_CHANGE_SCREEN_STATE",getScreenState,"lynq get Screen State",LYNQ_REQUEST_CHANGE_SCREEN_STATE},/*jb.qi change for two sim suspend 2022/9/19 */
+    {"LYNQ_REQUEST_CHANGE_RADIO",setRadioPower,"setRadioPower",LYNQ_REQUEST_CHANGE_RADIO},/*lei add for both radio on/off */
     /*Warren change for t800 ril service 2022/1/18 end*/
 
     #ifdef C2K_SUPPORT
diff --git a/src/lynq/framework/lynq-ril-service/src/lynq_interface.h b/src/lynq/framework/lynq-ril-service/src/lynq_interface.h
index adf98c5..4a94b10 100755
--- a/src/lynq/framework/lynq-ril-service/src/lynq_interface.h
+++ b/src/lynq/framework/lynq-ril-service/src/lynq_interface.h
@@ -22,6 +22,7 @@
 #define LYNQ_REQUEST_OOS_RECOVER_TIMER_INTERVAL (LYNQ_REQUEST_VENDOR_BASE +12)
 #define LYNQ_REQUEST_OOS_DEEP_SLEEP_RECOVER_TIMER_INTERVAL (LYNQ_REQUEST_VENDOR_BASE +13)
 #define LYNQ_REQUEST_CHANGE_SCREEN_STATE (LYNQ_REQUEST_VENDOR_BASE + 14)/*jb.qi add for two sim suspend 2022/9/19*/
+#define LYNQ_REQUEST_CHANGE_RADIO (LYNQ_REQUEST_VENDOR_BASE + 15)
 #ifdef ECALL_SUPPORT
 #define RIL_UNSOL_ECALL_T2_TIMER_OUT  9000
 #define RIL_UNSOL_ECALL_T5_TIMER_OUT  9001
diff --git a/src/lynq/framework/lynq-ril-service/src/ril.cpp b/src/lynq/framework/lynq-ril-service/src/ril.cpp
index 52a8c42..01386a2 100755
--- a/src/lynq/framework/lynq-ril-service/src/ril.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/ril.cpp
@@ -5157,6 +5157,7 @@
         case LYNQ_REQUEST_LIST_SMS_FROM_MEMORY: return "LYNQ_REQUEST_LIST_SMS_FROM_MEMORY";
         case LYNQ_REQUEST_SET_DEFAULT_SIM_ALL:return "SET_DEFAULT_SIM_ALL";
         case LYNQ_REQUEST_CHANGE_SCREEN_STATE:return "LYNQ_REQUEST_CHANGE_SCREEN_STATE";/*jb.qi add for two sim sleep 2022/9/19*/
+        case LYNQ_REQUEST_CHANGE_RADIO:return "LYNQ_REQUEST_CHANGE_RADIO";/*lei add for factory test of sleep 2022/9/19*/
         /*warren add for t800 ril service 2022/1/22 end*/
         default: return "<unknown request>";
     }
@@ -5424,6 +5425,7 @@
         case LYNQ_REQUEST_LIST_SMS_FROM_MEMORY: return "LYNQ_REQUEST_LIST_SMS_FROM_MEMORY";
         case LYNQ_REQUEST_SET_DEFAULT_SIM_ALL:return "SET_DEFAULT_SIM_ALL";
         case LYNQ_REQUEST_CHANGE_SCREEN_STATE:return "LYNQ_REQUEST_CHANGE_SCREEN_STATE";/*jb.qi add for two sim sleep 2022/9/19*/
+        case LYNQ_REQUEST_CHANGE_RADIO:return "LYNQ_REQUEST_CHANGE_RADIO";/*lei add for factory test of sleep 2022/9/19*/
         /*warren add for t800 ril service 2022/1/22 end*/
         default: return "<unknown request>";
     }
@@ -5555,6 +5557,14 @@
             waitResponse(waittoken);
             break;
         }
+        case RIL_REQUEST_RADIO_POWER:
+        {
+            int waittoken = info->token;
+            RLOGD("LYNQ_REQUEST_CHANGE_RADIO\n");
+            setRadioPower(2, argv, (RIL_SOCKET_ID) ((slot_id)), info);
+            waitResponse(waittoken);
+            break;
+        }
         default:
             RLOGD("dont support %d in init", slot_id);
             if(info)
@@ -6039,14 +6049,25 @@
                     // FIXME this should perhaps return a response
                     continue;
                 }
-                /*jb.qi add for two sim suspend 2022/9/19 start*/
-                if(request == LYNQ_REQUEST_CHANGE_SCREEN_STATE)
+                /*jb.qi add for two sim suspend 2022/9/19 start  lei modify for factory test of sleep*/
+                if(request == LYNQ_REQUEST_CHANGE_SCREEN_STATE || request == LYNQ_REQUEST_CHANGE_RADIO)
                 {
                     int i;
                     RLOGD("lynq_request_change_screen_state");
-                    for(i=0;i<2;i++) //suspend sim0 and sim1
+                    if(request == LYNQ_REQUEST_CHANGE_SCREEN_STATE)
                     {
-                        lynq_sendRequestToMd(RIL_REQUEST_SCREEN_STATE, i, argv, lynqClient_addr, client_tmp->uToken);
+                        for(i=0;i<2;i++) //suspend sim0 and sim1
+                        {
+                            lynq_sendRequestToMd(RIL_REQUEST_SCREEN_STATE, i, argv, lynqClient_addr, client_tmp->uToken);
+                        }
+                    }
+                    /*lei modify for factory test of sleep*/
+                    if(request == LYNQ_REQUEST_CHANGE_RADIO)
+                    {
+                        for(i=0;i<2;i++) //both radio on/off
+                        {
+                            lynq_sendRequestToMd(RIL_REQUEST_RADIO_POWER, i, argv, lynqClient_addr, client_tmp->uToken);
+                        }
                     }
                     continue;
                 }
diff --git a/src/lynq/lib/liblynq-sim/include/lynq_sim.h b/src/lynq/lib/liblynq-sim/include/lynq_sim.h
index c6d9a8d..c2d7793 100755
--- a/src/lynq/lib/liblynq-sim/include/lynq_sim.h
+++ b/src/lynq/lib/liblynq-sim/include/lynq_sim.h
@@ -79,6 +79,12 @@
  */
 int lynq_reset_modem(void);
 
+/**
+ * @brief factory test to both radio on/off
+ * 
+ */
+int lynq_factory_radio_state(int num);
+
 
 #ifdef __cplusplus
 }
diff --git a/src/lynq/lib/liblynq-sim/src/lynq_sim.cpp b/src/lynq/lib/liblynq-sim/src/lynq_sim.cpp
index cb1729d..1fa5578 100755
--- a/src/lynq/lib/liblynq-sim/src/lynq_sim.cpp
+++ b/src/lynq/lib/liblynq-sim/src/lynq_sim.cpp
@@ -39,6 +39,7 @@
 #define RIL_REQUEST_DEVICE_IDENTITY 98
 #define LYNQ_REQUEST_SET_DEFAULT_SIM_ALL 8008
 #define LYNQ_REQUEST_CHANGE_SCREEN_STATE 8014 /*add for two sim suspend on 20220919*/
+#define LYNQ_REQUEST_CHANGE_RADIO 8015
 #define MAX_LEN 1024*8
 #define MAX_NUM 10
 #define LOG_TAG "LYNQ_SIM"
@@ -1025,6 +1026,85 @@
 
 }
 
+/**@breif    change screen state
+*param       num type: [IN]  screen_state,0:close,1:open
+*param       ret type: [OUT] result,0:success,other:fail
+*return int
+*/
+int lynq_factory_radio_state(int num){
+    if(g_lynq_sim_init_flag == 0)
+    {
+        return -1;
+    }
+
+    int ret = -1;
+    if(!judge(num))
+        return ret;
+    int send_num = 0;
+    int recv_num = 0;
+    int error[2];
+    char res_data[MAX_LEN] = {0};
+    //change the first screen
+    client_t.request = LYNQ_REQUEST_CHANGE_RADIO; //8015
+    client_t.paramLen = 1;
+    client_t.uToken = Global_uToken;
+    sprintf(client_t.param, "%d\n", num);
+
+    pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
+    send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
+    if(send_num < 0)
+    {
+        RLOGD("sendto error:\n");
+        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
+        return send_num;
+    }
+    for(int i=0;i<2;i++)
+    {
+        recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
+        if(recv_num < 0 || recv_num == 0)
+        {
+            pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);//recvfrom fail
+            RLOGD("screen recvform error\n");
+            return errno;
+        }
+        if(i == 1)
+        {
+            pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
+            RLOGD("recvfrom success\n");
+        }
+        Parcel p;
+        p.setData((uint8_t *)res_data,sizeof(char)*recv_num);
+        p.setDataPosition(0);
+        if(p.dataAvail() > 0)
+        {
+            p.readInt32(&resp_type);
+            p.readInt32(&solicited_token);
+            p.readInt32(&request);
+            p.readInt32(&slot_id);
+            p.readInt32(&error1);
+            error[i] = error1;//change screen state result
+        }
+    }
+    
+    if((error[0] != 0) || (error[1] != 0))
+    {
+        RLOGD("error[0] = %d errpr[1] = %d\n",error[0], error[1]);
+        if(error[0] != 0)
+        {
+            return error[0];
+        }
+        else
+        {
+            return error[1];
+        }
+    }
+    else
+    {
+        return 0;
+    }
+
+}
+
 /**
  * @brief                   Check whether the input is valid  for lynq_req_sim_io api
  * @param  list             type: [IN] list[0]:one of the commands listed for TS 27.007 +CRSM.(command)
diff --git a/src/lynq/packages/apps/lynq-low-power/src/main.cpp b/src/lynq/packages/apps/lynq-low-power/src/main.cpp
index 892f83f..c82265b 100755
--- a/src/lynq/packages/apps/lynq-low-power/src/main.cpp
+++ b/src/lynq/packages/apps/lynq-low-power/src/main.cpp
@@ -3,12 +3,24 @@
 #include <unistd.h>
 #include <stdlib.h>
 #include <stdint.h>
+#include <include/lynq_sim.h>
 #ifdef __cplusplus
 extern "C" {
 #endif
 int main(void){
     system("echo \"Sys flight mode\" >/dev/console");
-    system("source /data/lynq-low-power.sh");
+    //system("source /data/lynq-low-power.sh");
+    lynq_sim_init(2022);
+    int ret = lynq_sim_power(0);
+    printf("ret %d\n", ret);
+    ret = lynq_factory_radio_state(0);
+    printf("ret %d\n", ret);
+    system("echo reg_netsys_srcclkena_mask_b 0 > /sys/power/spm/suspend_ctrl");
+    system("echo reg_netsys_infra_req_mask_b 0 > /sys/power/spm/suspend_ctrl");
+    system("echo reg_netsys_apsrc_req_mask_b 0 > /sys/power/spm/suspend_ctrl");
+    system("echo reg_netsys_vrf18_req_mask_b 0 > /sys/power/spm/suspend_ctrl");
+    system("echo reg_netsys_ddr_en_mask_b 0 > /sys/power/spm/suspend_ctrl");
+    system("echo mem > /sys/power/autosleep");
     return 0;
 }
 #ifdef __cplusplus
diff --git a/src/lynq/packages/apps/lynq-low-power/src/makefile b/src/lynq/packages/apps/lynq-low-power/src/makefile
index ab12d0d..59c05f1 100755
--- a/src/lynq/packages/apps/lynq-low-power/src/makefile
+++ b/src/lynq/packages/apps/lynq-low-power/src/makefile
@@ -62,6 +62,7 @@
     -lutils \
     -lbinder \
     -lpthread \
+    -llynq-sim \
 
 LOCAL_SRC_FILES_CPP = $(wildcard *.cpp gpio/*.cpp ril/*.cpp)
 LOCAL_SRC_FILES_C = $(wildcard *.c gps/*.c)