修复508X6gpiotest

Change-Id: I445a4ab2734161b22a30ca981ad645015d7501f8
diff --git a/mbtk/libmbtk_factory/mbtk_gpio.c b/mbtk/libmbtk_factory/mbtk_gpio.c
index b3cc748..e2f0cd2 100755
--- a/mbtk/libmbtk_factory/mbtk_gpio.c
+++ b/mbtk/libmbtk_factory/mbtk_gpio.c
@@ -1199,21 +1199,21 @@
 
 
 #elif defined(MBTK_PROJECT_L508_X6)
-int gpio_register_test_out_0(int port, int value)
+int gpio_register_test_out_0(int port)
 {
     int ret;
     int i;
     int valueh = 0;
     int valuel = 1;
     
-    printf("Gpio port [%d] test start!\n", port);
+    //printf("Gpio port [%d] test start!\n", port);
     ret = gpio_register_set_func_0(port);           //设功能为GPIO
     if(ret){
         printf("gpio_port can't support!\n");
         return -1;
     }
     gpio_register_set_direction(port, 1);           //设方向为输出
-    ret = gpio_register_get_value(port);
+    //ret = gpio_register_get_value(port);
     //printf("gpio default value is : %d.\n", ret);
     
     
@@ -1227,8 +1227,8 @@
             break;
         }
     }
-    //usleep(10000);
-    for(i = 0; i <= 35; i++){
+    usleep(5000);
+    for(i = 0; i <= 10; i++){
         ret = mbtk_gpio_adc(0);  
         usleep(3000);
         if(1 == ret){
@@ -1254,15 +1254,15 @@
             break;
         }
     }
-    //usleep(10000);
-    for(i = 0; i <= 35; i++){
+    usleep(5000);
+    for(i = 0; i <= 10; i++){
         ret = mbtk_gpio_adc(0);  
         usleep(3000);
         if(0 == ret){
             break;
         }
     }
-    //printf("******gpio should is low: %d.******\n", ret);
+    printf("******gpio should is low: %d.******\n", ret);
     if(0 != ret){
         ret=-1;
         goto exit;
@@ -1270,26 +1270,26 @@
 
 exit:
 	gpio_register_set_value(port, 0);
-    gpio_register_set_direction(port, 0);  //设方向为输入
+    //gpio_register_set_direction(port, 0);  //设方向为输入
     return ret;
 }
 
-int gpio_register_test_out_1(int port, int value)
+int gpio_register_test_out_1(int port)
 {
     int ret;
     int i;
     int valueh = 0;
     int valuel = 1;
     
-    printf("Gpio port [%d] test start!\n", port);
+    //printf("Gpio port [%d] test start!\n", port);
     ret = gpio_register_set_func_0(port);           //设功能为GPIO
     if(ret){
         printf("gpio_port can't support!\n");
         return -1;
     }
     gpio_register_set_direction(port, 1);           //设方向为输出
-    ret = gpio_register_get_value(port);
-    printf("gpio default value is : %d.\n", ret);
+    //ret = gpio_register_get_value(port);
+    //printf("gpio default value is : %d.\n", ret);
     
     
     //[High]
@@ -1302,8 +1302,8 @@
             break;
         }
     }
-    //usleep(10000);
-    for(i = 0; i <= 35; i++){
+    usleep(5000);
+    for(i = 0; i <= 10; i++){
         ret = mbtk_gpio_adc(1);  
         usleep(3000);
         if(1 == ret){
@@ -1328,8 +1328,8 @@
             break;
         }
     }
-    //usleep(10000);
-    for(i = 0; i <= 35; i++){
+    usleep(10000);
+    for(i = 0; i <= 10; i++){
         ret = mbtk_gpio_adc(1);  
         usleep(3000);
         if(0 == ret){
@@ -1344,12 +1344,12 @@
 
 exit:
     gpio_register_set_value(port, 0);
-    gpio_register_set_direction(port, 0);  //设方向为输入
+    //error: no need set direction in gpio_register_set_direction(port, 0);
     return ret;
 }
 
 
-int gpio_register_test_out_2(int port_in, int port_out, int value)
+int gpio_register_test_out_2(int port_in, int port_out)
 {
     int ret_in;
 	int ret_out;
@@ -1357,7 +1357,7 @@
     int valueh = 0;
     int valuel = 1;
     
-    printf("Gpio port [%d] test start!\n", port_out);
+    //printf("Gpio port [%d] test start!\n", port_out);
     ret_in = gpio_register_set_func_0(port_in);           //设功能为GPIO
 	ret_out = gpio_register_set_func_0(port_out);
     if((ret_in+ret_out)){
@@ -1366,8 +1366,8 @@
     }
     gpio_register_set_direction(port_out, 1);           //设方向为输出
 	gpio_register_set_direction(port_in, 0);           //设方向为输入
-    ret_in = gpio_register_get_value(port_in);
-    printf("gpio default value is : %d.\n", ret_in);
+    //ret_in = gpio_register_get_value(port_in);
+    //printf("gpio default value is : %d.\n", ret_in);
     
     
     //[High]
@@ -1375,14 +1375,14 @@
         gpio_register_set_value(port_out, 1);
         usleep(50);
         valueh = gpio_register_get_value(port_out);
-        printf("set high? %d\n",valueh);
+        //printf("set high? %d\n",valueh);
         if(1 == valueh){
             break;
         }
     }
 
-
-    for(i = 0; i <= 35; i++){
+	usleep(5000);
+    for(i = 0; i <= 10; i++){
        ret_in = gpio_register_get_value(port_in); 
         usleep(3000);
         if(1 == ret_in){
@@ -1394,7 +1394,7 @@
 		printf("get high failed! \n");
         goto exit;
     }
-    printf("******gpio should is high: %d.******\n", ret_in);
+    //printf("******gpio should is high: %d.******\n", ret_in);
 
 
     //[Low]
@@ -1403,20 +1403,21 @@
         gpio_register_set_value(port_out, 0);               //输出低
         usleep(50);
         valuel = gpio_register_get_value(port_out);
-        printf("set low? %d\n",valuel);
+        //printf("set low? %d\n",valuel);
         if(0 == valuel){
             break;
         }
     }
 	
-    for(i = 0; i <= 35; i++){
+	usleep(5000);
+    for(i = 0; i <= 10; i++){
         ret_in = gpio_register_get_value(port_in);  
         usleep(3000);
         if(0 == ret_in){
             break;
         }
     }
-    printf("******gpio should is low: %d.******\n", ret_in);
+    //printf("******gpio should is low: %d.******\n", ret_in);
     if(0 != ret_in){
         ret_in=-1;
 		printf("get low failed! \n");
@@ -1425,28 +1426,24 @@
 
 exit:
     gpio_register_set_value(port_out, 0);
-    gpio_register_set_direction(port_out, 0);  //设方向为输入
+    //gpio_register_set_direction(port_out, 0);  
     return ret_in;
 }
 
 
-void gpio_test_init_test_gpio_mode(void )
+static int gpio_test_init_test_gpio_mode(void )
 {
-
-	   
-    int test_gpio_1[] = {
-		40, 33, 34, 39, 99, 
-		56, 58, 55, 57, 48, 59, 123, 122, 20, 53,
-		19, 49, 50, 32 ,31, 6, 11, 10,
-	    88, 87, 86, 85, 84, 89, 
-		90, 46, 127, 117, 119, 
+	const int test_gpio_1[] = {
+		40, 33, 34, 39, 99, 10, 11, 88, 87, 86, 85, 84, 89,
+		56, 55, 58, 57, 48, 59, 10, 90, 20, 53, 19, 46, 127, 
+		49, 50, 32, 31, 6, 7
 	};
 	
-	int test_gpio_0[] = {
-		7,  8, 27, 28, 26, 25, 15, 1, 3, 0, 
+	const int test_gpio_0[] = {
+		8, 27, 28, 26, 25, 15, 1, 3, 0, 
 		37, 38,35, 36, 42, 41, 21, 22, 24, 23,
 		54, 125, 18, 13, 14, 17, 16, 5, 4, 2, 12,
-		44, 45, 47
+		43, 44, 45, 47, 117, 119
 	};
     int i, j, ret_0, ret_1, total_1, total_0, n = 0;
     total_0 = (sizeof(test_gpio_0)/sizeof(int));
@@ -1460,82 +1457,138 @@
        //printf("[init]gpio_test_init_test_gpio_mode FINISH\n");
 		/* [1 all gpio set to low] */
     for(j = 0; j < 6 ; j++){
+        for(i = 0; i < total_0; i++){
+            gpio_register_set_func_0(test_gpio_0[i]);
+            gpio_register_set_direction(test_gpio_0[i], 1);
+            gpio_register_set_value(test_gpio_0[i], 0);
+        }
         for(i = 0; i < total_1; i++){
             gpio_register_set_func_0(test_gpio_1[i]);
             gpio_register_set_direction(test_gpio_1[i], 1);
             gpio_register_set_value(test_gpio_1[i], 0);
         }
-		for(i = 0; i < total_0; i++){
-            gpio_register_set_func_0(test_gpio_0[i]);
-            gpio_register_set_direction(test_gpio_0[i], 1);
-            gpio_register_set_value(test_gpio_0[i], 0);
+
+        usleep(50000);
+        for(i = 0; i <= 10; i++){
+            ret_0 = mbtk_gpio_adc(0);
+            usleep(3000);
+            ret_1 = mbtk_gpio_adc(1);
+        
+            if(ret_0 ==0  && ret_1 == 0){
+                break;
+            }        
         }
-      //usleep(10000);
-	  
-      for(i = 0; i <= 35; i++){
-          ret_0 = mbtk_gpio_adc(0);
-		  usleep(3000);
-		  ret_1 = mbtk_gpio_adc(1);
-          
-          if(0 == (ret_0 + ret_1)){
-              break;
-          }
-      }
-      printf("pre set ADC: %d, times: %d\n",(ret_0 + ret_1), j);
-      if(0 == (ret_0 + ret_1)){
-          break;
-      }
+        printf("pre set ADC0: %d, ADC1: %d, times: %d\n", ret_0, ret_1, j);
+        if(ret_0 ==0  && ret_1 == 0){
+            break;
+        }    
     }
-	if(0 != (ret_0 + ret_1)){
+	if(!(ret_0 ==0  && ret_1 == 0)){
 		
 		printf("Fail, please retest");
 		return -1;
 	}
 	gpio_register_set_value(119, 1);
 	gpio_register_set_value(117, 1);
-
+    return 0;
 }
 
 int mbtk_at_gpio(bool gnss_support, void* arg)
 {
-
-    printf("Start test gpio V1.0\n");
-    int test_gpio_1[] = {
-		40, 33, 34, 39, 99, 
-		56, 58, 55, 57, 48, 59, 20, 53,
-		19, 49, 50, 32 ,31, 6, 11, 10,7,
-		90, 46, 127,	
-		88, 87, 86, 85, 84, 89,   
+	const int test_gpio_0[] = {
+		35, 93,
+		36, 94,
+		42, 97,
+		41, 98,
+		21, 100,
+		22, 101,
+		24, 102,
+		23, 103,
+		54, 107,
+		125, 108,
+		18, 109,
+		13, 114,
+		14, 115,
+		17, 116,
+		16, 117,
+		5, 119,
+		4, 127,
+		2, 120,
+		12, 126,
+		0, 90,
+		27, 73,
+		28, 74,
+		26, 75,
+		25, 76,
+		15, 86,
+		1, 88,
+		3, 89,
+		37, 91,
+		38, 92,
+		8, 72
 	};
 	
-	int test_gpio_0[] = {
-		35, 36, 42, 41, 21, 22, 24, 23,
-		54, 125, 18, 13, 14, 17, 16, 5, 4, 2, 12,0,
-		27, 28, 26, 25, 15, 1, 3,  
-		37, 38,8
+    const int test_gpio_1[] = {
+		40,	6,
+		33, 7,
+		34, 8,
+		39, 9,
+		99, 16,
+		56, 27,
+		58, 29,
+		55, 28,
+		57, 30,
+		48, 31,
+		59, 32,
+		20, 49,
+		53, 50,
+		19, 51,
+		49, 55,
+		50, 56,
+		32, 66,
+		31, 67,
+		6, 68,
+		11, 83,
+		10, 84,
+		7, 69,
+		90, 48,
+		46, 52,
+		127, 54,
+		88, 21,
+		87, 22,
+		86, 23,
+		85, 24,
+		84, 25,
+		89, 26,
 	};
-	int test_gpio_2[] = {		//GPS组
-		43,47,
-		//45,44
+
+	const int test_gpio_2[] = {		//GPS组
+		43, 53,
+		47, 95,
+		45, 71,
+		44, 70,
 	};
 
     int i, j, ret_0, ret_1, ret_2, total_1, total_0, total_2, n = 0;
     int *fail_io = (int *)arg;
-    total_0 = (sizeof(test_gpio_0)/sizeof(int));
+    total_0 = (sizeof(test_gpio_0)/sizeof(int));	//GPIO+PIN
     total_1 = (sizeof(test_gpio_1)/sizeof(int));
 	total_2 = (sizeof(test_gpio_2)/sizeof(int));
-
+	if(gnss_support == 1){
+		total_2 = total_2 - 4;
+	}
+    printf("L508-X6 Start test gpio V1.1\n");
     /* [1 all gpio Init] */
     gpio_test_init_test_gpio_mode();
 
 
     /* [2 GPIOTEST] */
 	//Test 0
-	for(i = 0; i < total_0; i++){
-        ret_0 = gpio_register_test_out_0(test_gpio_0[i], 0);
+	for(i = 0; i < total_0; i=i+2){
+        ret_0 = gpio_register_test_out_0(test_gpio_0[i]);
         if(-1 == ret_0){
             printf("!!!!!!!!!!!!gpio [%d] test failed!!!!!!!!!!!!\n", test_gpio_0[i]);
-            fail_io[n] = test_gpio_0[i];
+            fail_io[n] = test_gpio_0[i+1];
             n++;
         }else{
             //printf("############gpio [%d] test success############\n", test_gpio_0[i]);
@@ -1543,11 +1596,11 @@
     }
 	
 	//Test 1	
-    for(i = 0; i < total_1; i++){
-        ret_1 = gpio_register_test_out_1(test_gpio_1[i], 0);
+    for(i = 0; i < total_1; i=i+2){
+        ret_1 = gpio_register_test_out_1(test_gpio_1[i]);
         if(-1 == ret_1){
             printf("!!!!!!!!!!!!gpio [%d] test failed!!!!!!!!!!!!\n", test_gpio_1[i]);
-            fail_io[n] = test_gpio_1[i];
+            fail_io[n] = test_gpio_1[i+1];
             n++;
         }else{
             //printf("############gpio [%d] test success############\n", test_gpio_1[i]);
@@ -1555,14 +1608,14 @@
     }
 
 	//Test 2	
-    for(i = 0; i < total_2; i=i+2){
-        ret_2 = gpio_register_test_out_2(test_gpio_2[i], test_gpio_2[i+1], 0);
+    for(i = 0; i < total_2; i=i+4){
+        ret_2 = gpio_register_test_out_2(test_gpio_2[i], test_gpio_2[i+2]);
         if(-1 == ret_2){
-            //printf("!!!!!!!!!!!!gpio [%d] test failed!!!!!!!!!!!!\n", test_gpio_2[i+1]);
-            fail_io[n] = test_gpio_2[i];
+            printf("!!!!!!!!!!!!gpio [%d] test failed!!!!!!!!!!!!\n", test_gpio_2[i+2]);
+            fail_io[n] = test_gpio_2[i+3];
             n++;
         }else{
-            printf("############gpio [%d] test success############\n", test_gpio_2[i+1]);
+            //printf("############gpio [%d] test success############\n", test_gpio_2[i+2]);
         }
     }