gpio: add L508_X6 gpio factory test

Change-Id: Ic33e5ee37eebfc120a39c85b6b16a2d98a516cfc
diff --git a/mbtk/mbtk_lib/src/mbtk_gpio.c b/mbtk/mbtk_lib/src/mbtk_gpio.c
index bd641e1..a389252 100755
--- a/mbtk/mbtk_lib/src/mbtk_gpio.c
+++ b/mbtk/mbtk_lib/src/mbtk_gpio.c
@@ -138,12 +138,12 @@
 };
 
 
-static int mbtk_gpio_adc()
+static int mbtk_gpio_adc(channel)
 {
     int ret = 0;
 
-    ret =  mbtk_adc_get(0);
-    //printf("ADC_value =%d\n", ret);
+    ret =  mbtk_adc_get(channel);
+    //printf("ADC_%d_value =%d\n", channel, ret);
     if(ret >= 500 ){
         ret = 1;
     }
@@ -483,7 +483,7 @@
     }
     //usleep(10000);
     for(i = 0; i <= 35; i++){
-        ret = mbtk_gpio_adc();  
+        ret = mbtk_gpio_adc(0);  
         usleep(3000);
         if(1 == ret){
             break;
@@ -509,7 +509,7 @@
     }
     //usleep(10000);
     for(i = 0; i <= 35; i++){
-        ret = mbtk_gpio_adc();  
+        ret = mbtk_gpio_adc(0);  
         usleep(3000);
         if(0 == ret){
             break;
@@ -549,7 +549,7 @@
         }
       //usleep(10000);
       for(i = 0; i <= 35; i++){
-          ret = mbtk_gpio_adc();
+          ret = mbtk_gpio_adc(0);
           usleep(3000);
           if(0 == ret){
               break;
@@ -930,6 +930,280 @@
 	return  test_fail_count;
 }
 
+#elif defined(MBTK_PROJECT_L508_X6)
+
+
+int gpio_register_test_out_0(int port, int value)
+{
+    int ret;
+    int i;
+    int valueh = 0;
+    int valuel = 1;
+    
+    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);
+    
+    
+    //[High]
+    for(i = 0; i <= 10; i++){
+        gpio_register_set_value(port, 1);
+        usleep(50);
+        valueh = gpio_register_get_value(port);
+        //printf("set high? %d\n",valueh);
+        if(1 == valueh){
+            break;
+        }
+    }
+    //usleep(10000);
+    for(i = 0; i <= 35; i++){
+        ret = mbtk_gpio_adc(0);  
+        usleep(3000);
+        if(1 == ret){
+            break;
+        }
+    }
+	//printf("******gpio should is high: %d.******\n", ret);
+    if(1 != ret){
+        ret=-1;
+        goto exit;
+    }
+
+
+
+    //[Low]
+     usleep(200);
+     for(i = 0; i <= 10; i++){
+        gpio_register_set_value(port, 0);               //输出低
+        usleep(50);
+        valuel = gpio_register_get_value(port);
+        //printf("set low? %d\n",valuel);
+        if(0 == valuel){
+            break;
+        }
+    }
+    //usleep(10000);
+    for(i = 0; i <= 35; i++){
+        ret = mbtk_gpio_adc(0);  
+        usleep(3000);
+        if(0 == ret){
+            break;
+        }
+    }
+    //printf("******gpio should is low: %d.******\n", ret);
+    if(0 != ret){
+        ret=-1;
+        goto exit;
+    }
+
+exit:
+	gpio_register_set_value(port, 0);
+    gpio_register_set_direction(port, 0);  //设方向为输入
+    return ret;
+}
+
+int gpio_register_test_out_1(int port, int value)
+{
+    int ret;
+    int i;
+    int valueh = 0;
+    int valuel = 1;
+    
+    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);
+    
+    
+    //[High]
+    for(i = 0; i <= 10; i++){
+        gpio_register_set_value(port, 1);
+        usleep(50);
+        valueh = gpio_register_get_value(port);
+        //printf("set high? %d\n",valueh);
+        if(1 == valueh){
+            break;
+        }
+    }
+    //usleep(10000);
+    for(i = 0; i <= 35; i++){
+        ret = mbtk_gpio_adc(1);  
+        usleep(3000);
+        if(1 == ret){
+            break;
+        }
+    }
+    if(1 != ret){
+        ret=-1;
+        goto exit;
+    }
+    //printf("******gpio should is high: %d.******\n", ret);
+
+
+    //[Low]
+     usleep(200);
+     for(i = 0; i <= 10; i++){
+        gpio_register_set_value(port, 0);               //输出低
+        usleep(50);
+        valuel = gpio_register_get_value(port);
+        //printf("set low? %d\n",valuel);
+        if(0 == valuel){
+            break;
+        }
+    }
+    //usleep(10000);
+    for(i = 0; i <= 35; i++){
+        ret = mbtk_gpio_adc(1);  
+        usleep(3000);
+        if(0 == ret){
+            break;
+        }
+    }
+    //printf("******gpio should is low: %d.******\n", ret);
+    if(0 != ret){
+        ret=-1;
+        goto exit;
+    }
+
+exit:
+    //gpio_register_set_direction(port, 0);  //设方向为输入
+    return ret;
+}
+
+void 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, 43, 46, 127
+	};
+	
+	int test_gpio_0[] = {
+		7,  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
+	};
+    int i, j, ret_0, ret_1, total_1, total_0, n = 0;
+    total_0 = (sizeof(test_gpio_0)/sizeof(int));
+    total_1 = (sizeof(test_gpio_1)/sizeof(int));
+	
+		system("i2cset -y -f 2 0x32 0x0d 0x00"); 
+		usleep(10000);		
+	
+       //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_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(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;
+      }
+    }
+	if(0 != (ret_0 + ret_1)){
+		printf("Fail, please retest");
+		return -1;
+	}
+
+
+}
+
+int mbtk_at_gpio(void* arg)
+{
+	//123,122,7,8,27,28,26,25,15,1,3,0 error
+    printf("Start test gpio V0.3\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,
+		/* 88, 87, 86, 85, 84, 89,   SD卡*/
+		90, 43, 46, 127
+		/* 123, 122   这两没接*/
+	};
+	
+	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
+		/* 44, 45, 47   UART_GPS*/
+	};
+
+    int i, j, ret_0, ret_1, total_1, total_0, n = 0;
+    int *fail_io = (int *)arg;
+    total_0 = (sizeof(test_gpio_0)/sizeof(int));
+    total_1 = (sizeof(test_gpio_1)/sizeof(int));
+
+    /* [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);
+        if(-1 == ret_0){
+            printf("!!!!!!!!!!!!gpio [%d] test failed!!!!!!!!!!!!\n", test_gpio_0[i]);
+            fail_io[n] = test_gpio_0[i];
+            n++;
+        }else{
+            //printf("############gpio [%d] test success############\n", test_gpio_0[i]);
+        }
+    }
+	
+	//Test 1	
+    for(i = 0; i < total_1; i++){
+        ret_1 = gpio_register_test_out_1(test_gpio_1[i], 0);
+        if(-1 == ret_1){
+            printf("!!!!!!!!!!!!gpio [%d] test failed!!!!!!!!!!!!\n", test_gpio_1[i]);
+            fail_io[n] = test_gpio_1[i];
+            n++;
+        }else{
+            //printf("############gpio [%d] test success############\n", test_gpio_1[i]);
+        }
+    }
+    mbtk_adc_close();
+    return n;
+}
+
+
 
 #else