Merge "[feature][SZZT-56][V2X]Added v2X automatic startup" into SZZT
diff --git a/meta/meta-mediatek-mt2731/conf/machine/auto2731evb-ivt-main.conf b/meta/meta-mediatek-mt2731/conf/machine/auto2731evb-ivt-main.conf
index c382e9a..c61969e 100755
--- a/meta/meta-mediatek-mt2731/conf/machine/auto2731evb-ivt-main.conf
+++ b/meta/meta-mediatek-mt2731/conf/machine/auto2731evb-ivt-main.conf
@@ -15,7 +15,7 @@
 DEFAULTTUNE_virtclass-multilib-lib64 = "aarch64"
 
 #LYNQ
-LYNQ_SW_VERSION = "T103R4_SZZT_v02.MP2_MR2.b02.03"
+LYNQ_SW_VERSION = "T103R4_SZZT_v02.MP2_MR2.b02.04"
 SMS_INDEX = "0"
 SMS_FLAG = "0"
 # lynq
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 9d033cd..df2eee8 100755
--- a/src/lynq/framework/lynq-atsvc/src/factory/lynq_factory.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/factory/lynq_factory.cpp
@@ -16,6 +16,8 @@
 int already_gps = 0;
 int enable_nema = 0;
 int sustain = 1;
+char rgmii[32] = {0};
+//char sgmii[32] = {0};
 pthread_t lynq_gps_tid;
 // static pthread_mutex_t s_gps_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
 // static pthread_cond_t s_gps_change_cond = PTHREAD_COND_INITIALIZER;
@@ -118,53 +120,46 @@
 }
 
 void *thread_test_RGMII(void *arg){
+    char cmd[128] = {0};
     FILE *fp;
-    char ipv4[128] = {0};
-    fp= popen("ifconfig 'eth0' | grep \"inet addr\" | cut -f 2 -d \":\" | cut -f 1 -d \" \" 2>&1", "r");
+    sprintf(cmd, "%s %s %s %s", "ping -I eth0", rgmii, "-c4", "2>&1");
+    fp=popen(cmd, "r");
     if(NULL == fp){
         lynq_factory_response_ttyGS3("popen errorn\n");
-        return 0;
+        return NULL;
     }
-    fgets(ipv4,sizeof(ipv4),fp);
-    if(strstr(ipv4, "error"))
+    char lynq_factory_buf[1024] = {0};
+    while (NULL != fgets(lynq_factory_buf,sizeof(lynq_factory_buf),fp))
     {
-        lynq_factory_response_ttyGS3("RGMII don't insert\n");
-        return 0;
-    }
-    else
-    {
-        parse_ipv4(ipv4);
-        char cmd[128] = {0};
-        sprintf(cmd, "%s %s %s %s", "ping -I eth0", ipv4, "-c4", "2>&1");
-        fp=popen(cmd, "r");
-        if(NULL == fp){
-            lynq_factory_response_ttyGS3("popen errorn\n");
-            return 0;
-        }
-        char lynq_factory_buf[1024] = {0};
-        while (NULL != fgets(lynq_factory_buf,sizeof(lynq_factory_buf),fp))
+        if(strstr(lynq_factory_buf, "Usage"))
         {
-            if(strstr(lynq_factory_buf, "Usage"))
-            {
-                lynq_factory_response_ttyGS3("RGMII cannot recognize IP addresses\n");
-                lynq_factory_response_ttyGS3("ERROR\n");
-                pclose(fp);
-                return 0;
-            }
-            lynq_factory_response_ttyGS3(lynq_factory_buf);
+            lynq_factory_response_ttyGS3("RGMII cannot recognize IP addresses\n");
+            lynq_factory_response_ttyGS3("ERROR\n");
+            pclose(fp);
+            return NULL;
         }
-        lynq_factory_response_ttyGS3("OK\n");
-        pclose(fp);
-        return 0;
+        lynq_factory_response_ttyGS3(lynq_factory_buf);
     }
+    lynq_factory_response_ttyGS3("OK\n");
+    pclose(fp);
+    return NULL;
 }
 
-static void lynq_test_RGMII(void){
-    pthread_t thid;
-    if(pthread_create(&thid, NULL, thread_test_RGMII, NULL) != 0) {
+static void lynq_test_RGMII(char *argv){
+    if(argv == NULL)
+    {
+        lynq_factory_response_ttyGS3("\nERROR\n");
         return;
     }
-    pthread_join(thid, NULL);
+    strcpy(rgmii, argv);
+    pthread_t thid;
+    pthread_attr_t a;
+    pthread_attr_init(&a);
+    pthread_attr_setdetachstate(&a, PTHREAD_CREATE_DETACHED);
+    if(pthread_create(&thid, &a, thread_test_RGMII, NULL) != 0) {
+        return;
+    }
+    //pthread_join(thid, NULL);
     return;
 }
 
@@ -549,6 +544,15 @@
     return err;
 }
 
+static void lynq_gps_close(void)
+{
+    already_gps = 0;
+    enable_nema = 0;
+    system("killall lynq-gnss-test");
+    lynq_factory_response_ttyGS3("+GPS CLOSE:OK\n");
+    return;
+}
+
 int lynq_factory_read_sn()
 {
     int err = -1;
@@ -568,6 +572,13 @@
     return err;
 }
 
+static void lynq_gps_disable(void)
+{
+    enable_nema = 0;
+    lynq_factory_response_ttyGS3("+GPS DISABLE:OK\n");
+    return;
+}
+
 int lynq_get_factory_data(int num,char *argv[MAX_ARGS]){
     if(num < 4)
         return -1;
@@ -583,6 +594,12 @@
     else if(!strcmp(argv[3], "gps_enable")){
         lynq_gps_enable();
     }
+    else if(!strcmp(argv[3], "gps_disable")){
+        lynq_gps_disable();
+    }
+    else if(!strcmp(argv[3], "gps_close")){
+        lynq_gps_close();
+    }
     #if 0
     else if(!strcmp(argv[3], "gpsinfo")){
         lynq_gpsinfo(argv[4]);
@@ -595,7 +612,7 @@
     }
     #endif
     else if(!strcmp(argv[3], "rgmii")){
-        lynq_test_RGMII();
+        lynq_test_RGMII(argv[4]);
     }
     else if((!strcmp(argv[3],"adc")))
     {