[feature][SZZT-69][AT]At + LCSUS switching card commands support query
[feature][SZZT-65][AT]Low power instruction for dual cards

Change-Id: Ia4d40a5620d5fdff1a34350a397e6d828ff359ef
diff --git a/src/lynq/framework/lynq-atsvc/src/lynq_commands.h b/src/lynq/framework/lynq-atsvc/src/lynq_commands.h
index d232c31..ae1d99e 100755
--- a/src/lynq/framework/lynq-atsvc/src/lynq_commands.h
+++ b/src/lynq/framework/lynq-atsvc/src/lynq_commands.h
@@ -12,7 +12,7 @@
 {LYNQ_REQUEST_ELAPNACT,"RIL_REQUEST_SETUP_DATA_CALL","ELAPNACT",setupData_e,NULL},
 {LYNQ_USER_REQUEST_GNSS,NULL,"LYNQGNSS",NULL,lynqGnss},
 {LYNQ_USER_REQUEST_OTHRE,NULL,"LYNQOTHER",NULL,lynqOther},
-{LYNQ_REQUEST_SWITCH_SIM,"SET_DEFAULT_SIM_ALL","LCSUS",switchSim,NULL},
+{LYNQ_REQUEST_SWITCH_SIM,"SET_DEFAULT_SIM_ALL","LCSUS",lynq_dsds_support,NULL},
 {LYNQ_REQUEST_SCREEN_STATE,"RIL_REQUEST_SCREEN_STATE","SCREEN",lynq_screen,NULL},
 {LYNQ_PLAT_LGMDS,"LYNQ_PLAT_LGMDS","LGMDS",NULL,getMDstate},
 {LYNQ_REQUEST_RST,"LYNQ_REQUEST_RST","RST",NULL,rst},
diff --git a/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp b/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp
index 5115d7c..91e38f9 100755
--- a/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp
@@ -18,6 +18,7 @@
 #define USB_BUF_SIZE 8192
 #include <liblog/lynq_deflog.h>
 #include <sys/time.h>
+#include "utils.h"
 #include "Phone_utils.h"
 usb_cmd_t Usb_commands[] = {
 #include "lynq_commands.h"
@@ -497,20 +498,58 @@
     }
     return 0;
 }
-int switchSim(int argc,char*argv[],char *rilReq, int uToken)
+
+static void lynq_get_current_card(void)
+{
+    int id = get_default_sim_all();
+    lynq_output_info("+LCSUS: %d\n", id);
+    lynq_output_info("OK\n");
+    return;
+}
+
+static void lynq_switch_card(char*argv[], char *rilReq, int uToken)
 {
     int slot = 0;
     int ret = -1;
     char *new_argv[10] = {};
+    slot = atoi(argv[3]);
+    new_argv[0] = (char *)rilReq;
+    new_argv[1] = argv[3];
+    android::lynqSendToRil(2,new_argv,uToken);
+    return;
+}
+
+static void lynq_display_dsds_mode(void)
+{
+    lynq_output_info("+LCSUS: (0-1)\n");
+    lynq_output_info("OK\n");
+    return;
+}
+
+
+int lynq_dsds_support(int argc,char*argv[],char *rilReq, int uToken)
+{
     if(argc < 4)
     {
         RLOGD("parameter error!!!");
         return 1;
     }
-    slot = atoi(argv[3]);
-    new_argv[0] = (char *)rilReq;
-    new_argv[1] = argv[3];
-    android::lynqSendToRil(2,new_argv,uToken);
+    int type = atoi(argv[2]);
+    if(type == 2)//get mode
+    {
+        RLOGD("lynq_dsds_support get mode\n");
+        lynq_get_current_card();
+    }
+    else if(type == 0)//set mode
+    {
+        RLOGD("lynq_dsds_support set mode\n");
+        lynq_switch_card(argv, rilReq, uToken);
+    }
+    else if(type == 1)//get list mode
+    {
+        RLOGD("lynq_dsds_support get list mode\n");
+        lynq_display_dsds_mode();
+    }
     return 0;
 }
 
@@ -525,7 +564,7 @@
     }
     while(fgets(buf, 4072, fp) != NULL){}
     pclose(fp);
-    return 0;
+    return NULL;
 }
 
 int lynq_screen(int argc,char*argv[],char *rilReq, int uToken){
@@ -647,6 +686,31 @@
     }
 }
 
+void lynq_switch_card(char *card)
+{
+    char *sim_argv[3] = {};
+    sim_argv[0] = "SET_DEFAULT_SIM_ALL";
+    sim_argv[1] = card;
+    sim_argv[2] = "sleep";
+    android::lynqSendToRil(2,sim_argv,8888);
+    sleep(1);
+    return;
+}
+
+/*
+/**
+ * @brief Switch the card and shut down the modem
+ * 
+ * @param card 0 or 1
+ */
+void lynq_shutdown_modem(void)
+{
+    char *new_argv[2] = {};
+    new_argv[0] = "RIL_REQUEST_SCREEN_STATE";
+    new_argv[1] = "0";
+    android::lynqSendToRil(2,new_argv,77777);
+    return;
+}
 
 /**
  * @brief auto_suspend
@@ -683,25 +747,16 @@
     system("echo 0 > /dev/wmtWifi");
     system("echo 7 9 0 > /proc/driver/wmt_dbg");
     /*If have two cards*/
-    char *new_argv[2] = {};
-    new_argv[0] = "RIL_REQUEST_SCREEN_STATE";
-    new_argv[1] = "0";
-    /*sim2*/
-    char *sim2_argv[2] = {};
-    sim2_argv[0] = "SET_DEFAULT_SIM_ALL";
-    sim2_argv[1] = "1";
-    android::lynqSendToRil(2,sim2_argv,666);
-    sleep(2);
-    
-    android::lynqSendToRil(2,new_argv,666);
-    sleep(2);
-    /*sim1*/
-    char *sim1_argv[2] = {};
-    sim1_argv[0] = "SET_DEFAULT_SIM_ALL";
-    sim1_argv[1] = "0";
-    android::lynqSendToRil(2,sim1_argv,666);
-    sleep(2);
-    android::lynqSendToRil(2,new_argv,666);
+    /*Query the current card*/
+    int id = get_default_sim_all();
+    lynq_switch_card("1");
+    lynq_shutdown_modem();
+    lynq_switch_card("0");
+    lynq_shutdown_modem();
+    if(id == RIL_SOCKET_2)
+    {
+        lynq_switch_card("1");
+    }
     /*If have two cards*/
     if(!strcmp(argv,"1"))
     {
@@ -896,6 +951,7 @@
                 #endif
                 RLOGD("g_lynq_csclk = 0, entry sleep mode, dont't check dtr pin level\n");
                 auto_suspend(argv[3]);
+                syncRespToUsb(0);
                 return;
             }
             /*DTR pin*/
@@ -912,6 +968,7 @@
                     system("echo out 62 0 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
                     #endif
                     auto_suspend(argv[3]);
+                    syncRespToUsb(0);
                     return;
                 }
                 else
@@ -920,34 +977,6 @@
                     return; 
                 }
             }
-            #if 0
-            /*WAKEUP_IN pin*/
-            else if(g_lynq_csclk == 2)
-            {
-                if(g_lynq_wakeup_in == 0)
-                {
-                    /*don't check WAKEUP_IN level*/
-                    auto_suspend(argv[3]);
-                    /*if module entry sleep mode, need to pull ring pin high level*/
-                    system("echo out 4 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
-                }
-                /*check WAKEUP_IN level*/
-                else if (g_lynq_wakeup_in == 1)
-                {
-                    if(cat_pin_level("xxx"))
-                    {
-                        auto_suspend(argv[3]);
-                        /*if module entry sleep mode, need to pull ring pin high level*/
-                        system("echo out 4 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
-                    }
-                    else
-                    {
-                        syncRespToUsb(10);//WAKEUP_IN pin is low level, so can't entry sleep mode
-                        return;
-                    }
-                }
-            }
-            #endif
         }
         /*invalid value*/
         else
diff --git a/src/lynq/framework/lynq-atsvc/src/lynq_common.h b/src/lynq/framework/lynq-atsvc/src/lynq_common.h
index b20456d..7bc9be1 100755
--- a/src/lynq/framework/lynq-atsvc/src/lynq_common.h
+++ b/src/lynq/framework/lynq-atsvc/src/lynq_common.h
@@ -128,7 +128,7 @@
 int dialACall(int argc,char*argv[],char *rilReq, int uToken);
 int setupData(int argc,char*argv[],char *rilReq, int uToken);
 int setupData_e(int argc,char*argv[],char *rilReq, int uToken);
-int switchSim(int argc,char*argv[],char *rilReq, int uToken);
+int lynq_dsds_support(int argc,char*argv[],char *rilReq, int uToken);
 int lynq_screen(int argc,char*argv[],char *rilReq, int uToken);
 void* getMDstate(int argc,char*argv[],int uToken);
 int lynqATWaitWithTime(int time);//time(s)
diff --git a/src/lynq/framework/lynq-atsvc/src/ril.cpp b/src/lynq/framework/lynq-atsvc/src/ril.cpp
index cb27c32..496bfc7 100755
--- a/src/lynq/framework/lynq-atsvc/src/ril.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/ril.cpp
@@ -6515,7 +6515,16 @@
 
 
     RequestInfo *pRI  = creatRILInfoAndInit(request, UDP, (RIL_SOCKET_ID)(id));
-    pRI->lynqEvent = 1;
+    /*lei modify to not display RIL_REQUEST_SCREEN_STATE of ok only sleep mode*/
+    if(uToken == 77777 && request == RIL_REQUEST_SCREEN_STATE)
+    {
+        pRI->lynqEvent = 2;
+    }
+    else
+    {
+        pRI->lynqEvent = 1;
+    }
+    /*lei modify to not display RIL_REQUEST_SCREEN_STATE of ok only sleep mode*/
     //Radio on/off only allow one thread operate.
     if(request == RIL_REQUEST_RADIO_POWER)
     {
diff --git a/src/lynq/framework/lynq-atsvc/src/sim.cpp b/src/lynq/framework/lynq-atsvc/src/sim.cpp
index b32a21d..2235373 100644
--- a/src/lynq/framework/lynq-atsvc/src/sim.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/sim.cpp
@@ -219,7 +219,14 @@
         android::emResultNotify("Set successful.\n");
         /*Warren add for FAW platform 2021/12/08 start*/
         printf("set successful\n");
-        sendAtTottyGS(0);
+        if(argv[2] != NULL)
+        {
+            /*do nothing*/
+        }
+        else
+        {
+            sendAtTottyGS(0);
+        }
         /*Warren add for FAW platform 2021/12/08 end*/
         free(pRI);
     } else {