1 #include "aos/hal/gpio.h"
2 #include "gpio_test.h"
3
4 /******************************************************
5 * Variables Definitions
6 ******************************************************/
7
8 extern const qc_test_gpio_pair_t qc_test_gpio_pairs[];
9 extern const int qc_test_gpio_pairs_num;
10
11 static int gpio_result = 0;
12
13 /******************************************************
14 * Function Definitions
15 ******************************************************/
16
_gpio_test_one(const qc_test_gpio_pair_t * gpio_test_pair)17 static int _gpio_test_one( const qc_test_gpio_pair_t* gpio_test_pair )
18 {
19 gpio_dev_t gpio_out;
20 gpio_dev_t gpio_in;
21 int ret=-1, val;
22
23 gpio_out.port = gpio_test_pair->output_pin;
24 gpio_out.config = OUTPUT_PUSH_PULL;
25 gpio_in.port = gpio_test_pair->input_pin;
26 gpio_in.config = INPUT_PULL_DOWN;
27 hal_gpio_init(&gpio_out);
28 hal_gpio_init(&gpio_in);
29 hal_gpio_output_high(&gpio_out);
30 aos_msleep(1);
31 hal_gpio_input_get(&gpio_in, &val);
32 if (val != 1)
33 goto EXIT;
34
35 gpio_in.config = INPUT_PULL_UP;
36 hal_gpio_init(&gpio_in);
37 hal_gpio_output_low(&gpio_out);
38 aos_msleep(1);
39 hal_gpio_input_get(&gpio_in, &val);
40 if (val != 0)
41 goto EXIT;
42
43 ret = 0;
44
45 EXIT:
46 hal_gpio_deinit(&gpio_out);
47 hal_gpio_deinit(&gpio_in);
48 return ret;
49 }
50
_gpio_test(const qc_test_gpio_pair_t * gpio_test_pair,int num)51 static int _gpio_test( const qc_test_gpio_pair_t* gpio_test_pair, int num )
52 {
53 int i;
54 int err = 0;
55 qc_test_gpio_pair_t * gpio_test = (qc_test_gpio_pair_t *)gpio_test_pair;
56
57 gpio_result = 0;
58
59 for ( i = 0; i < num; i++ )
60 {
61 if ( 0 == _gpio_test_one( &gpio_test_pair[i] ) )
62 {
63 gpio_result |= (1 << i);
64 }
65 else
66 {
67 err = -1;
68 }
69 }
70
71 return err;
72 }
73
qc_test_gpio(void)74 void qc_test_gpio( void )
75 {
76 char test_result[32];
77 int gpio_num = 0;
78
79 if (qc_test_gpio_pairs_num == 0)
80 return;
81
82 if ( 0 == _gpio_test( qc_test_gpio_pairs, qc_test_gpio_pairs_num ) )
83 {
84 qc_printf( "GPIO TEST: PASS\r\n" );
85 }
86 else
87 {
88 sprintf( test_result, "Fail: %d:%x", gpio_num, gpio_result );
89 qc_printf( "GPIO TEST: %s\r\n", test_result );
90 }
91
92 return;
93 }
94
95