From 8f4369bfd94e072c744c664f1eabc78dc7890fd3 Mon Sep 17 00:00:00 2001 From: Peter Bigot Date: Mon, 26 Aug 2019 18:00:51 -0500 Subject: [PATCH] tests/drivers/gpio: replace legacy API in callback manage tests Switch to gpio_pin_interrupt_configure() and the new interrupt flags. Use logical level pin set operations. Signed-off-by: Peter Bigot --- tests/drivers/gpio/gpio_basic_api/src/main.c | 6 +- .../gpio_basic_api/src/test_callback_manage.c | 92 +++++++++++++------ 2 files changed, 65 insertions(+), 33 deletions(-) diff --git a/tests/drivers/gpio/gpio_basic_api/src/main.c b/tests/drivers/gpio/gpio_basic_api/src/main.c index a8292435c10..6bfb171d9bf 100644 --- a/tests/drivers/gpio/gpio_basic_api/src/main.c +++ b/tests/drivers/gpio/gpio_basic_api/src/main.c @@ -42,12 +42,12 @@ void test_main(void) ztest_test_suite(gpio_basic_test, ztest_unit_test(test_gpio_port), ztest_unit_test(test_gpio_pin_read_write), - ztest_unit_test(test_gpio_callback_edge_high), - ztest_unit_test(test_gpio_callback_edge_low), - ztest_unit_test(test_gpio_callback_level_high), ztest_unit_test(test_gpio_callback_add_remove), ztest_unit_test(test_gpio_callback_self_remove), ztest_unit_test(test_gpio_callback_enable_disable), + ztest_unit_test(test_gpio_callback_edge_high), + ztest_unit_test(test_gpio_callback_edge_low), + ztest_unit_test(test_gpio_callback_level_high), ztest_unit_test(test_gpio_callback_level_low)); ztest_run_test_suite(gpio_basic_test); } diff --git a/tests/drivers/gpio/gpio_basic_api/src/test_callback_manage.c b/tests/drivers/gpio/gpio_basic_api/src/test_callback_manage.c index 258ab96e6ed..eb2951e4832 100644 --- a/tests/drivers/gpio/gpio_basic_api/src/test_callback_manage.c +++ b/tests/drivers/gpio/gpio_basic_api/src/test_callback_manage.c @@ -39,43 +39,54 @@ static void callback_remove_self(struct device *dev, dd->aux = gpio_remove_callback(dev, gpio_cb); } -static void init_callback(struct device *dev, - gpio_callback_handler_t handler_1, - gpio_callback_handler_t handler_2) +static int init_callback(struct device *dev, + gpio_callback_handler_t handler_1, + gpio_callback_handler_t handler_2) { - gpio_pin_disable_callback(dev, PIN_IN); - gpio_pin_disable_callback(dev, PIN_OUT); + int rc = gpio_pin_interrupt_configure(dev, PIN_IN, GPIO_INT_DISABLE); - /* 1. set PIN_OUT */ - gpio_pin_configure(dev, PIN_OUT, GPIO_DIR_OUT); - gpio_pin_write(dev, PIN_OUT, 0); + if (rc == 0) { + rc = gpio_pin_interrupt_configure(dev, PIN_OUT, GPIO_INT_DISABLE); + } + if (rc == 0) { + /* 1. set PIN_OUT */ + rc = gpio_pin_configure(dev, PIN_OUT, GPIO_OUTPUT_LOW); + } - /* 2. configure PIN_IN callback and trigger condition */ - gpio_pin_configure(dev, PIN_IN, - GPIO_DIR_IN | GPIO_INT | GPIO_INT_EDGE | \ - GPIO_INT_ACTIVE_HIGH | GPIO_INT_DEBOUNCE); + if (rc == 0) { + /* 2. configure PIN_IN callback, but don't enable */ + rc = gpio_pin_configure(dev, PIN_IN, GPIO_INPUT); + } - gpio_init_callback(&cb_data[0].gpio_cb, handler_1, BIT(PIN_IN)); - gpio_add_callback(dev, &cb_data[0].gpio_cb); + if (rc == 0) { + gpio_init_callback(&cb_data[0].gpio_cb, handler_1, BIT(PIN_IN)); + rc = gpio_add_callback(dev, &cb_data[0].gpio_cb); + } - gpio_init_callback(&cb_data[1].gpio_cb, handler_2, BIT(PIN_IN)); - gpio_add_callback(dev, &cb_data[1].gpio_cb); + if (rc == 0) { + gpio_init_callback(&cb_data[1].gpio_cb, handler_2, BIT(PIN_IN)); + rc = gpio_add_callback(dev, &cb_data[1].gpio_cb); + } + + return rc; } static void trigger_callback(struct device *dev, int enable_cb) { - gpio_pin_write(dev, PIN_OUT, 0); + gpio_pin_set(dev, PIN_OUT, 0); k_sleep(K_MSEC(100)); cb_cnt[0] = 0; cb_cnt[1] = 0; if (enable_cb == 1) { - gpio_pin_enable_callback(dev, PIN_IN); + gpio_pin_interrupt_configure(dev, PIN_IN, + GPIO_INT_EDGE_RISING + | GPIO_INT_DEBOUNCE); } else { - gpio_pin_disable_callback(dev, PIN_IN); + gpio_pin_interrupt_configure(dev, PIN_IN, GPIO_INT_DISABLE); } k_sleep(K_MSEC(100)); - gpio_pin_write(dev, PIN_OUT, 1); + gpio_pin_set(dev, PIN_OUT, 1); k_sleep(K_MSEC(1000)); } @@ -84,7 +95,14 @@ static int test_callback_add_remove(void) struct device *dev = device_get_binding(DEV_NAME); /* SetUp: initialize environment */ - init_callback(dev, callback_1, callback_2); + int rc = init_callback(dev, callback_1, callback_2); + + if (rc == -ENOTSUP) { + TC_PRINT("%s not supported\n", __func__); + return TC_PASS; + } + zassert_equal(rc, 0, + "init_callback failed"); /* 3. enable callback, trigger PIN_IN interrupt by operate PIN_OUT */ trigger_callback(dev, 1); @@ -126,9 +144,16 @@ static int test_callback_self_remove(void) struct device *dev = device_get_binding(DEV_NAME); /* SetUp: initialize environment */ - init_callback(dev, callback_1, callback_remove_self); + int rc = init_callback(dev, callback_1, callback_remove_self); - gpio_pin_write(dev, PIN_OUT, 0); + if (rc == -ENOTSUP) { + TC_PRINT("%s not supported\n", __func__); + return TC_PASS; + } + zassert_equal(rc, 0, + "init_callback failed"); + + gpio_pin_set(dev, PIN_OUT, 0); k_sleep(K_MSEC(100)); cb_data[0].aux = INT_MAX; @@ -171,7 +196,14 @@ static int test_callback_enable_disable(void) struct device *dev = device_get_binding(DEV_NAME); /* SetUp: initialize environment */ - init_callback(dev, callback_1, callback_2); + int rc = init_callback(dev, callback_1, callback_2); + + if (rc == -ENOTSUP) { + TC_PRINT("%s not supported\n", __func__); + return TC_PASS; + } + zassert_equal(rc, 0, + "init_callback failed"); /* 3. enable callback, trigger PIN_IN interrupt by operate PIN_OUT */ trigger_callback(dev, 1); @@ -208,18 +240,18 @@ err_exit: void test_gpio_callback_add_remove(void) { - zassert_true( - test_callback_add_remove() == TC_PASS, NULL); + zassert_equal(test_callback_add_remove(), TC_PASS, + NULL); } void test_gpio_callback_self_remove(void) { - zassert_true( - test_callback_self_remove() == TC_PASS, NULL); + zassert_equal(test_callback_self_remove(), TC_PASS, + NULL); } void test_gpio_callback_enable_disable(void) { - zassert_true( - test_callback_enable_disable() == TC_PASS, NULL); + zassert_equal(test_callback_enable_disable(), TC_PASS, + NULL); }