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 <peter.bigot@nordicsemi.no>
This commit is contained in:
parent
ae7a59eae4
commit
8f4369bfd9
2 changed files with 65 additions and 33 deletions
|
@ -42,12 +42,12 @@ void test_main(void)
|
||||||
ztest_test_suite(gpio_basic_test,
|
ztest_test_suite(gpio_basic_test,
|
||||||
ztest_unit_test(test_gpio_port),
|
ztest_unit_test(test_gpio_port),
|
||||||
ztest_unit_test(test_gpio_pin_read_write),
|
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_add_remove),
|
||||||
ztest_unit_test(test_gpio_callback_self_remove),
|
ztest_unit_test(test_gpio_callback_self_remove),
|
||||||
ztest_unit_test(test_gpio_callback_enable_disable),
|
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_unit_test(test_gpio_callback_level_low));
|
||||||
ztest_run_test_suite(gpio_basic_test);
|
ztest_run_test_suite(gpio_basic_test);
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,43 +39,54 @@ static void callback_remove_self(struct device *dev,
|
||||||
dd->aux = gpio_remove_callback(dev, gpio_cb);
|
dd->aux = gpio_remove_callback(dev, gpio_cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void init_callback(struct device *dev,
|
static int init_callback(struct device *dev,
|
||||||
gpio_callback_handler_t handler_1,
|
gpio_callback_handler_t handler_1,
|
||||||
gpio_callback_handler_t handler_2)
|
gpio_callback_handler_t handler_2)
|
||||||
{
|
{
|
||||||
gpio_pin_disable_callback(dev, PIN_IN);
|
int rc = gpio_pin_interrupt_configure(dev, PIN_IN, GPIO_INT_DISABLE);
|
||||||
gpio_pin_disable_callback(dev, PIN_OUT);
|
|
||||||
|
|
||||||
/* 1. set PIN_OUT */
|
if (rc == 0) {
|
||||||
gpio_pin_configure(dev, PIN_OUT, GPIO_DIR_OUT);
|
rc = gpio_pin_interrupt_configure(dev, PIN_OUT, GPIO_INT_DISABLE);
|
||||||
gpio_pin_write(dev, PIN_OUT, 0);
|
}
|
||||||
|
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 */
|
if (rc == 0) {
|
||||||
gpio_pin_configure(dev, PIN_IN,
|
/* 2. configure PIN_IN callback, but don't enable */
|
||||||
GPIO_DIR_IN | GPIO_INT | GPIO_INT_EDGE | \
|
rc = gpio_pin_configure(dev, PIN_IN, GPIO_INPUT);
|
||||||
GPIO_INT_ACTIVE_HIGH | GPIO_INT_DEBOUNCE);
|
}
|
||||||
|
|
||||||
gpio_init_callback(&cb_data[0].gpio_cb, handler_1, BIT(PIN_IN));
|
if (rc == 0) {
|
||||||
gpio_add_callback(dev, &cb_data[0].gpio_cb);
|
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));
|
if (rc == 0) {
|
||||||
gpio_add_callback(dev, &cb_data[1].gpio_cb);
|
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)
|
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));
|
k_sleep(K_MSEC(100));
|
||||||
|
|
||||||
cb_cnt[0] = 0;
|
cb_cnt[0] = 0;
|
||||||
cb_cnt[1] = 0;
|
cb_cnt[1] = 0;
|
||||||
if (enable_cb == 1) {
|
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 {
|
} else {
|
||||||
gpio_pin_disable_callback(dev, PIN_IN);
|
gpio_pin_interrupt_configure(dev, PIN_IN, GPIO_INT_DISABLE);
|
||||||
}
|
}
|
||||||
k_sleep(K_MSEC(100));
|
k_sleep(K_MSEC(100));
|
||||||
gpio_pin_write(dev, PIN_OUT, 1);
|
gpio_pin_set(dev, PIN_OUT, 1);
|
||||||
k_sleep(K_MSEC(1000));
|
k_sleep(K_MSEC(1000));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,7 +95,14 @@ static int test_callback_add_remove(void)
|
||||||
struct device *dev = device_get_binding(DEV_NAME);
|
struct device *dev = device_get_binding(DEV_NAME);
|
||||||
|
|
||||||
/* SetUp: initialize environment */
|
/* 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 */
|
/* 3. enable callback, trigger PIN_IN interrupt by operate PIN_OUT */
|
||||||
trigger_callback(dev, 1);
|
trigger_callback(dev, 1);
|
||||||
|
@ -126,9 +144,16 @@ static int test_callback_self_remove(void)
|
||||||
struct device *dev = device_get_binding(DEV_NAME);
|
struct device *dev = device_get_binding(DEV_NAME);
|
||||||
|
|
||||||
/* SetUp: initialize environment */
|
/* 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));
|
k_sleep(K_MSEC(100));
|
||||||
|
|
||||||
cb_data[0].aux = INT_MAX;
|
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);
|
struct device *dev = device_get_binding(DEV_NAME);
|
||||||
|
|
||||||
/* SetUp: initialize environment */
|
/* 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 */
|
/* 3. enable callback, trigger PIN_IN interrupt by operate PIN_OUT */
|
||||||
trigger_callback(dev, 1);
|
trigger_callback(dev, 1);
|
||||||
|
@ -208,18 +240,18 @@ err_exit:
|
||||||
|
|
||||||
void test_gpio_callback_add_remove(void)
|
void test_gpio_callback_add_remove(void)
|
||||||
{
|
{
|
||||||
zassert_true(
|
zassert_equal(test_callback_add_remove(), TC_PASS,
|
||||||
test_callback_add_remove() == TC_PASS, NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_gpio_callback_self_remove(void)
|
void test_gpio_callback_self_remove(void)
|
||||||
{
|
{
|
||||||
zassert_true(
|
zassert_equal(test_callback_self_remove(), TC_PASS,
|
||||||
test_callback_self_remove() == TC_PASS, NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_gpio_callback_enable_disable(void)
|
void test_gpio_callback_enable_disable(void)
|
||||||
{
|
{
|
||||||
zassert_true(
|
zassert_equal(test_callback_enable_disable(), TC_PASS,
|
||||||
test_callback_enable_disable() == TC_PASS, NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue