[Feature]SCREEN

Change-Id: I21c8805ee3a4aaac905d3cc0fea0a205f589539b
diff --git a/src/lynq/framework/lynq-atsvc/src/factory/lynq_factory.cpp b/src/lynq/framework/lynq-atsvc/src/factory/lynq_factory.cpp
index d30b6e0..0efb08d 100755
--- a/src/lynq/framework/lynq-atsvc/src/factory/lynq_factory.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/factory/lynq_factory.cpp
@@ -523,10 +523,10 @@
     else if(!strcmp(argv[3], "sim1")){
         lynq_get_sim_state(sim1);
     }
-    #endif
     else if(!strcmp(argv[3], "sim2")){
         lynq_get_sim_state(sim2);
     }
+    #endif
     else if(!strcmp(argv[3], "rgmii")){
         lynq_test_RGMII();
     }
diff --git a/src/lynq/framework/lynq-atsvc/src/lynq_at_transfer_table.h b/src/lynq/framework/lynq-atsvc/src/lynq_at_transfer_table.h
index d0d6c47..2eec664 100755
--- a/src/lynq/framework/lynq-atsvc/src/lynq_at_transfer_table.h
+++ b/src/lynq/framework/lynq-atsvc/src/lynq_at_transfer_table.h
@@ -8,6 +8,7 @@
 {LYNQ_REQUEST_LAPNACT,"LAPNACT",7},

 {LYNQ_REQUEST_ELAPNACT,"ELAPNACT",7},

 {LYNQ_REQUEST_SWITCH_SIM,"LCSUS",7},

+{LYNQ_REQUEST_SCREEN_STATE,"SCREEN",7},

 {LYNQ_REQUEST_SEND_LOG_DATA,"LOGS",7},

 {LYNQ_PLAT_LGMDS,"LGMDS",7},

 {LYNQ_REQUEST_RNDIS,"LRNDISHANDLE",7},

diff --git a/src/lynq/framework/lynq-atsvc/src/lynq_commands.h b/src/lynq/framework/lynq-atsvc/src/lynq_commands.h
index 4e2c0ba..adfda0f 100755
--- a/src/lynq/framework/lynq-atsvc/src/lynq_commands.h
+++ b/src/lynq/framework/lynq-atsvc/src/lynq_commands.h
@@ -13,5 +13,6 @@
 {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_SCREEN_STATE,"RIL_REQUEST_SCREEN_STATE","SCREEN",lynq_screen,NULL},
 {LYNQ_PLAT_LGMDS,"LYNQ_PLAT_LGMDS","LGMDS",NULL,getMDstate},
 {-1,NULL,NULL,NULL,NULL},
diff --git a/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp b/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp
index b29cb17..1ceef03 100755
--- a/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp
@@ -81,6 +81,7 @@
         case LYNQ_REQUEST_ATD:
         case LYNQ_REQUEST_LAPNACT:
         case LYNQ_REQUEST_ELAPNACT:
+        case LYNQ_REQUEST_SCREEN_STATE:
         case LYNQ_REQUEST_SWITCH_SIM:
         {
             return LYNQ_GOTO_TELE_REQ;
@@ -91,12 +92,12 @@
         }
         case LYNQ_USER_REQUEST_GNSS:
         case LYNQ_USER_REQUEST_OTHRE:
-		case LYNQ_PLAT_LGMDS:
+        case LYNQ_PLAT_LGMDS:
         {
             return LYNQ_GOTO_USER_REQ;
         }
-	 case LYNQ_REQUEST_RNDIS:
-	 {
+        case LYNQ_REQUEST_RNDIS:
+        {
 
             return LYNQ_GOTO_RNDIS_REQ;
         }
@@ -140,13 +141,20 @@
     }
     return 0;
 }
+int lynqSetArgv(char **argv, char** Point,const char* value)
+{
+    *argv=*Point;
+     sprintf(*argv, "%s", value);    
+     (*Point) += (strlen(value)+1);
+}
 //argv[2]:0 send,1 list,2 get
-int lynqParseUsbCommand(const char* cmd,char *argv[],char test[],int maxArgc)
+int lynqParseUsbCommand(const char* cmd,char *argv[],char test[],char* parser_buf,int maxArgc)
 {
     char *token;
     char *str = test;
     char *string;
     char *parameter;
+    char* Point=parser_buf;
     int cnt = g_number(cmd);
     memcpy(test, cmd, strlen(cmd));
     test[strlen(cmd)] = '\0';
@@ -155,15 +163,13 @@
     {
         token = strtok(str, "=?");
         //argv[0] = token;
-        argv[0] = strstr(token, "+")+1;
-        argv[2] = "1";
+        argv[0] = strstr(token, "+")+1; 
+        lynqSetArgv(&(argv[2]),&Point,"1");
         while (token != NULL)
         {
             string = token;
             token = strtok(NULL, "=?");
         }
-        if(string == NULL)
-            return -1;
         parameter = strtok(string, ",");
         int i = 3;
         while (parameter != NULL)
@@ -174,7 +180,7 @@
     }
     else if(strstr(cmd,"="))
     {
-        argv[2] = "0";
+        lynqSetArgv(&(argv[2]),&Point,"0");
         token = strtok(str, "=");
         //argv[0] = token;
         argv[0] = strstr(token, "+")+1;
@@ -183,8 +189,6 @@
             string = token;
             token = strtok(NULL, "=");
         }
-        if(string == NULL)
-            return -1;
         parameter = strtok(string, ",");
         int i = 3;
         while (parameter != NULL)
@@ -195,7 +199,7 @@
     }
     else if(strstr(cmd,"?"))
     {
-        argv[2] = "2";
+        lynqSetArgv(&(argv[2]),&Point,"2");
         token = strtok(str, "?");
         //argv[0] = token;
         argv[0] = strstr(token, "+")+1;
@@ -205,8 +209,6 @@
             token = strtok(NULL, "?");
         }
         parameter = strtok(string, ",");
-        if(string == NULL)
-            return -1;
         int i = 3;
         while (parameter != NULL)
         {
@@ -216,58 +218,50 @@
     }
     else
     {
+        lynqSetArgv(&(argv[2]),&Point,"0");
         if(strstr(cmd,"+"))
         {
-            argv[2] = "0";
             argv[0] = test+3;
             return 3;
         }
         else
         {
             RLOGD("sp test 01");
-            if(!strcmp(cmd, "ATA")){
-                argv[0] = "ATA";
-                argv[2] = "0";
+            if(!strcmp(cmd, "ATA")){               
+                lynqSetArgv(&(argv[0]),&Point,"ATA");                      
                 return 3;
             }
             if(!strcmp(cmd, "AT")){
-                argv[0] = "AT";
-                argv[2] = "0";
+                lynqSetArgv(&(argv[0]),&Point,"AT");               
                 return 3;
             }
             /*UNKNOW*/
             else if(!strncmp(cmd, "ATD", 3)){
-                argv[0] = "ATD";
-                argv[2] = "0";
+                lynqSetArgv(&(argv[0]),&Point,"ATD");                
                 argv[3] = test+3;
                 return 4;
             }
             else if(!strncmp(cmd, "ATE", 3)){
-                argv[0] = "ATE";
-                argv[2] = "0";
+                lynqSetArgv(&(argv[0]),&Point,"ATE");               
                 argv[3] = test+3;
                 return 4;
             }
             else if(!strcmp(cmd, "ATH")){
-                argv[0] = "ATH";
-                argv[2] = "0";
+                lynqSetArgv(&(argv[0]),&Point,"ATH");               
                 return 3;
             }
             else if(!strncmp(cmd, "ATI", 3)){
-                argv[0] = "ATI";
-                argv[2] = "0";
+                lynqSetArgv(&(argv[0]),&Point,"ATI");               
                 argv[3] = test+3;
                 return 4;
             }
             else if(!strncmp(cmd, "ATL", 3)){
-                argv[0] = "ATI";
-                argv[2] = "0";
+                lynqSetArgv(&(argv[0]),&Point,"ATL");               
                 argv[3] = test+3;
                 return 4;
             }
             else if(!strncmp(cmd, "ATO", 3)){
-                argv[0] = "ATO";
-                argv[2] = "0";
+                lynqSetArgv(&(argv[0]),&Point,"ATO");                
                 argv[3] = test+3;
                 return 3;
             }
@@ -275,32 +269,27 @@
             /*
             */
             else if(!strncmp(cmd, "ATQ", 3)){
-                argv[0] = "ATQ";
-                argv[2] = "0";
+                lynqSetArgv(&(argv[0]),&Point,"ATQ");               
                 argv[3] = test+3;
                 return 4;
             }
             else if(!strncmp(cmd, "ATSO", 4)){
-                argv[0] = "ATSO";
-                argv[2] = "0";
+                lynqSetArgv(&(argv[0]),&Point,"ATSO");               
                 argv[3] = test+4;
                 return 4;
             }
             else if(!strncmp(cmd, "ATS3", 4)){
-                argv[0] = "ATS3";
-                argv[2] = "0";
+                lynqSetArgv(&(argv[0]),&Point,"ATS3");              
                 argv[3] = test+4;
                 return 4;
             }
             else if(!strncmp(cmd, "ATS4", 4)){
-                argv[0] = "ATS4";
-                argv[2] = "0";
+                lynqSetArgv(&(argv[0]),&Point,"ATS4");              
                 argv[3] = test+4;
                 return 4;
             }
             else if(!strncmp(cmd, "ATS5", 4)){
-                argv[0] = "ATS5";
-                argv[2] = "0";
+                lynqSetArgv(&(argv[0]),&Point,"ATS5");          
                 argv[3] = test+4;
                 return 4;
             }
@@ -308,20 +297,17 @@
             /*
             */
             else if(!strncmp(cmd, "ATS7", 4)){
-                argv[0] = "ATS7";
-                argv[2] = "0";
+                lynqSetArgv(&(argv[0]),&Point,"ATS7");              
                 argv[3] = test+4;
                 return 4;
             }
             else if(!strncmp(cmd, "ATS8", 4)){
-                argv[0] = "ATS8";
-                argv[2] = "0";
+                lynqSetArgv(&(argv[0]),&Point,"ATS8");       
                 argv[3] = test+4;
                 return 4;
             }
             else if(!strncmp(cmd, "ATS10", 5)){
-                argv[0] = "ATS10";
-                argv[2] = "0";
+                lynqSetArgv(&(argv[0]),&Point,"ATS10");      
                 argv[3] = test+5;
                 return 4;
             }
@@ -332,8 +318,7 @@
 
             */
             else if(!strncmp(cmd, "ATV", 3)){
-                argv[0] = "ATV";
-                argv[2] = "0";
+                lynqSetArgv(&(argv[0]),&Point,"ATV");
                 argv[3] = test+3;
                 return 4;
             }
@@ -344,14 +329,12 @@
 
             */
             else if(!strncmp(cmd, "ATZ", 3)){
-                argv[0] = "ATZ";
-                argv[2] = "0";
+                lynqSetArgv(&(argv[0]),&Point,"ATZ");
                 argv[3] = test+3;
                 return 4;
             }
             else if(!strncmp(cmd, "AT&F", 4)){
-                argv[0] = "AT&F";
-                argv[2] = "0";
+                lynqSetArgv(&(argv[0]),&Point,"AT&F");
                 argv[3] = test+4;
                 return 4;
             }
@@ -510,6 +493,20 @@
     android::lynqSendToRil(2,new_argv,uToken);
     return 0;
 }
+
+int lynq_screen(int argc,char*argv[],char *rilReq, int uToken){
+    char *new_argv[10] = {};
+    if(argc < 4)
+    {
+        RLOGD("parameter error!!!");
+        return 1;
+    }
+    new_argv[0] = (char *)rilReq;
+    new_argv[1] = argv[3];
+    android::lynqSendToRil(2,new_argv,uToken);
+    return 0;
+}
+
 void* getMDstate(int argc,char*argv[],int uToken)
 {
     FILE *FP;
diff --git a/src/lynq/framework/lynq-atsvc/src/lynq_common.h b/src/lynq/framework/lynq-atsvc/src/lynq_common.h
index f2da811..0672529 100755
--- a/src/lynq/framework/lynq-atsvc/src/lynq_common.h
+++ b/src/lynq/framework/lynq-atsvc/src/lynq_common.h
@@ -56,6 +56,7 @@
 #define LYNQ_REQUEST_RNDIS (LYNQ_VERSION +15)
 #define LYNQ_REQUEST_FACTORY (LYNQ_VERSION +16)
 #define LYNQ_REQUEST_LINFO (LYNQ_VERSION +17)
+#define LYNQ_REQUEST_SCREEN_STATE (LYNQ_VERSION +18)
 #define LYNQ_USER_REQUEST_GNSS (LYNQ_VERSION +100)
 #define LYNQ_USER_REQUEST_OTHRE (LYNQ_VERSION +101)
 
@@ -90,7 +91,7 @@
 usb_cmd_t * lynqFindUsbEvent(char *cmd);
 int transferAtToRequest(char *cmd);
 //argv[2]:0 send,1 list,2 get
-int lynqParseUsbCommand(const char* cmd,char *argv[],char test[],int maxArgc);
+int lynqParseUsbCommand(const char* cmd,char *argv[],char test[],char* parser_buf,int maxArgc);
 
 int routeCmd(int request);
 
@@ -99,6 +100,7 @@
 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_screen(int argc,char*argv[],char *rilReq, int uToken);
 void* getMDstate(int argc,char*argv[],int uToken);
 int lynqATWaitWithTime(int time);//time(s)
 void lynqAtRespWatingEvent();
diff --git a/src/lynq/framework/lynq-atsvc/src/ril.cpp b/src/lynq/framework/lynq-atsvc/src/ril.cpp
index 4c16695..097872d 100755
--- a/src/lynq/framework/lynq-atsvc/src/ril.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/ril.cpp
@@ -6408,6 +6408,7 @@
     int routeId = -1;
     char buffer[1024]={};
     char tempbuf[1024]={};
+    char buf_parser[64] = {};
     int argc = 0;
     char *argv[MAX_ARGS];//argv[0]:at name,argv[1]:raw data,argv[2]:at type,argv[3]:paramter1,argv[4]:paramter2 ....
     char eBuf[1024];
@@ -6425,6 +6426,7 @@
     {
         bzero(buffer, 1024);
         bzero(tempbuf, 1024);
+        bzero(buf_parser, 64);
         if((nread=read(ttyGS3_fd,buffer,1024))>0)
         {
             if(nread<2)
@@ -6446,7 +6448,7 @@
                 }
             }
             printf("buffer is %s\n",buffer);
-            argc = lynqParseUsbCommand(buffer,argv,tempbuf,MAX_ARGS);
+            argc = lynqParseUsbCommand(buffer,argv,tempbuf,buf_parser,MAX_ARGS);
             if(argc<0)
             {  
                bzero(eBuf, 1024);