Merge "[feature]at+cgmr/at+screen" into SZZT
diff --git a/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp b/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp
index a6737de..58df14c 100755
--- a/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp
@@ -143,7 +143,7 @@
     }
     return 0;
 }
-int lynqSetArgv(char **argv, char** Point,const char* value)
+void lynqSetArgv(char **argv, char** Point,const char* value)
 {
     *argv=*Point;
      sprintf(*argv, "%s", value);    
@@ -496,24 +496,53 @@
     return 0;
 }
 
+void * thread_test(void * arg)
+{
+    FILE *fp;
+    char buf[1024*3] = {0};
+    sprintf(buf, "echo 11 | emdlogger_ctrl 2>&1");
+    fp=popen(buf, "r");
+    if(!fp){
+        perror("popen:");
+    }
+    while(fgets(buf, 4072, fp) != NULL){}
+    pclose(fp);
+    return 0;
+}
+
 int lynq_screen(int argc,char*argv[],char *rilReq, int uToken){
-    system("echo 11 | emdlogger_ctrl");
-    sleep(5);
+    char eBuf[64] = {0};
+    sprintf(eBuf,"\nOK\n\0");
+    int n = write(ttyGS3_fd,eBuf,strlen(eBuf));
+    if(n<0)
+    {
+        perror("lynq resp write:");
+    }
+    pthread_t thid;
+    int ret = pthread_create(&thid, NULL, thread_test, NULL);
+    if(ret != 0){
+        RLOGD("pthread_create error!!!");
+        return ret;
+    }
     system("mdlogctl stop");
     system("echo mem > /sys/power/autosleep");
     system("echo 0 > /dev/wmtWifi");
     system("echo 7 9 0 > /proc/driver/wmt_dbg");
-    char *new_argv[10] = {};
+    char *new_argv[2] = {};
     if(argc < 4)
     {
         RLOGD("parameter error!!!");
-        return 1;
+        return -1;
     }
     new_argv[0] = (char *)rilReq;
     new_argv[1] = argv[3];
     android::lynqSendToRil(2,new_argv,uToken);
-    sleep(1);
     system("disown -a");
+    ret = pthread_join(thid,NULL);
+    if(ret != 0){
+        RLOGD("pthread_join error!!!");
+        return ret;
+    }
     return 0;
 }
 
diff --git a/src/lynq/framework/lynq-atsvc/src/ril.cpp b/src/lynq/framework/lynq-atsvc/src/ril.cpp
index 7c3c9e5..1b8d2ab 100755
--- a/src/lynq/framework/lynq-atsvc/src/ril.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/ril.cpp
@@ -3802,6 +3802,49 @@
 
 #endif
 
+static void parse_version_buf(char *buf){
+    char *p = buf;
+    int flag = 0;
+    int recv = 0;
+    int tmp = -1;
+    while (*p != '\0')
+    {   
+        recv++;
+        if(*p == '"'){
+            tmp = recv;        
+        }
+        if(tmp >= 0){
+            buf[flag++] = buf[tmp++];
+            if(buf[flag-1] == '\"'){
+                buf[flag-1] = '\0';
+            }
+        }
+        *p++;
+    }
+    return;
+}
+
+static int lynq_get_version(){
+    FILE *fp;
+    char buf[128] = {0};
+    char cgmr[128] = {0};
+    sprintf(buf, "getprop ro.lynq_sw_version 2>&1");
+    fp=popen(buf, "r");
+    int n;
+    while(fgets(buf, sizeof(buf), fp) != NULL){
+        
+    }
+    parse_version_buf(buf);
+    sprintf(cgmr, "%s %s", "+CGMR: ", buf);
+    n = write(ttyGS3_fd,cgmr,strlen(cgmr));
+    if(n<0)
+    {
+        perror("lynq resp write:");
+    }
+    pclose(fp);
+    return 0;
+}
+
 extern "C" void
 RIL_onRequestComplete(RIL_Token t, RIL_Errno e, void *response, size_t responselen) {
     RequestInfo *pRI;
@@ -4028,12 +4071,15 @@
                {
                    if(pRI->lynqEvent==1)
                    {
-                       int n = write(ttyGS3_fd,response,responselen);
-                       if(n<0)
-                       {
-                           perror("lynq resp write:");
-                       }
-                       printf("n = %d\n",n);
+                        if(strstr((const char*)response,"+CGMR")){
+                            lynq_get_version();
+                        }
+                        int n = write(ttyGS3_fd,response,responselen);
+                        if(n<0)
+                        {
+                            perror("lynq resp write:");
+                        }
+                        printf("n = %d\n",n);
                    }
                }
                default: