1 /*
2  * Copyright (c) 2019 Piotr Mienkowski
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef TEST_GPIO_API_H_
8 #define TEST_GPIO_API_H_
9 
10 #include <zephyr/kernel.h>
11 #include <zephyr/drivers/gpio.h>
12 #include <zephyr/ztest.h>
13 
14 /* If possible, use a dedicated GPIO with an external pulldown resistor.
15  * Otherwise, fallback to repurposing led0 as a GPIO. The latter won't always
16  * work as expected when reconfigured as an input.
17  */
18 #if DT_NODE_HAS_STATUS(DT_INST(0, test_gpio_external_pulldown), okay)
19 #define TEST_NODE          DT_GPIO_CTLR(DT_INST(0, test_gpio_external_pulldown), gpios)
20 #define TEST_PIN           DT_GPIO_PIN(DT_INST(0, test_gpio_external_pulldown), gpios)
21 #define TEST_PIN_DTS_FLAGS DT_GPIO_FLAGS(DT_INST(0, test_gpio_external_pulldown), gpios)
22 #elif DT_NODE_HAS_PROP(DT_ALIAS(led0), gpios)
23 #define TEST_NODE          DT_GPIO_CTLR(DT_ALIAS(led0), gpios)
24 #define TEST_PIN           DT_GPIO_PIN(DT_ALIAS(led0), gpios)
25 #define TEST_PIN_DTS_FLAGS DT_GPIO_FLAGS(DT_ALIAS(led0), gpios)
26 #else
27 #error Unsupported board
28 #endif
29 
30 #define TEST_GPIO_MAX_RISE_FALL_TIME_US    200
31 
32 void test_gpio_pin_configure_push_pull(void);
33 void test_gpio_pin_configure_single_ended(void);
34 
35 void test_gpio_pin_set_get_raw(void);
36 void test_gpio_pin_set_get(void);
37 void test_gpio_pin_set_get_active_high(void);
38 void test_gpio_pin_set_get_active_low(void);
39 void test_gpio_pin_toggle(void);
40 void test_gpio_pin_toggle_visual(void);
41 
42 void test_gpio_port_set_masked_get_raw(void);
43 void test_gpio_port_set_masked_get(void);
44 void test_gpio_port_set_masked_get_active_high(void);
45 void test_gpio_port_set_masked_get_active_low(void);
46 void test_gpio_port_set_bits_clear_bits_raw(void);
47 void test_gpio_port_set_bits_clear_bits(void);
48 void test_gpio_port_set_clr_bits_raw(void);
49 void test_gpio_port_set_clr_bits(void);
50 void test_gpio_port_toggle(void);
51 
52 void test_gpio_int_edge_rising(void);
53 void test_gpio_int_edge_falling(void);
54 void test_gpio_int_edge_both(void);
55 void test_gpio_int_edge_to_active(void);
56 void test_gpio_int_edge_to_inactive(void);
57 void test_gpio_int_level_high_interrupt_count_1(void);
58 void test_gpio_int_level_high_interrupt_count_5(void);
59 void test_gpio_int_level_low_interrupt_count_1(void);
60 void test_gpio_int_level_low_interrupt_count_5(void);
61 void test_gpio_int_level_active(void);
62 void test_gpio_int_level_inactive(void);
63 
64 #endif /* TEST_GPIO_API_H_ */
65