From 24cdaa14681fccc6ac643a9dd0b53fc98e2cb261 Mon Sep 17 00:00:00 2001 From: Bartosz Golaszewski Date: Wed, 7 Aug 2019 14:09:37 +0200 Subject: [PATCH] tests: event: add two additional test cases for both edge events Add two test cases explicitly verifying that watching events of both types works correctly (in active-high and active-low modes). Signed-off-by: Bartosz Golaszewski --- tests/tests-event.c | 79 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/tests/tests-event.c b/tests/tests-event.c index 9e372cc..28b77ec 100644 --- a/tests/tests-event.c +++ b/tests/tests-event.c @@ -117,6 +117,85 @@ GPIOD_TEST_CASE(rising_edge_ignore_falling, 0, { 8 }) g_assert_cmpint(ev[2].event_type, ==, GPIOD_LINE_EVENT_RISING_EDGE); } +GPIOD_TEST_CASE(both_edges, 0, { 8 }) +{ + g_autoptr(GpiodTestEventThread) ev_thread = NULL; + g_autoptr(gpiod_chip_struct) chip = NULL; + struct timespec ts = { 1, 0 }; + struct gpiod_line_event ev; + struct gpiod_line *line; + gint ret; + + chip = gpiod_chip_open(gpiod_test_chip_path(0)); + g_assert_nonnull(chip); + gpiod_test_return_if_failed(); + + line = gpiod_chip_get_line(chip, 7); + g_assert_nonnull(line); + gpiod_test_return_if_failed(); + + ret = gpiod_line_request_both_edges_events(line, GPIOD_TEST_CONSUMER); + g_assert_cmpint(ret, ==, 0); + + ev_thread = gpiod_test_start_event_thread(0, 7, 100); + + ret = gpiod_line_event_wait(line, &ts); + g_assert_cmpint(ret, ==, 1); + + ret = gpiod_line_event_read(line, &ev); + g_assert_cmpint(ret, ==, 0); + + g_assert_cmpint(ev.event_type, ==, GPIOD_LINE_EVENT_RISING_EDGE); + + ret = gpiod_line_event_wait(line, &ts); + g_assert_cmpint(ret, ==, 1); + + ret = gpiod_line_event_read(line, &ev); + g_assert_cmpint(ret, ==, 0); + + g_assert_cmpint(ev.event_type, ==, GPIOD_LINE_EVENT_FALLING_EDGE); +} + +GPIOD_TEST_CASE(both_edges_active_low, 0, { 8 }) +{ + g_autoptr(GpiodTestEventThread) ev_thread = NULL; + g_autoptr(gpiod_chip_struct) chip = NULL; + struct timespec ts = { 1, 0 }; + struct gpiod_line_event ev; + struct gpiod_line *line; + gint ret; + + chip = gpiod_chip_open(gpiod_test_chip_path(0)); + g_assert_nonnull(chip); + gpiod_test_return_if_failed(); + + line = gpiod_chip_get_line(chip, 7); + g_assert_nonnull(line); + gpiod_test_return_if_failed(); + + ret = gpiod_line_request_both_edges_events_flags(line, + GPIOD_TEST_CONSUMER, GPIOD_LINE_REQUEST_FLAG_ACTIVE_LOW); + g_assert_cmpint(ret, ==, 0); + + ev_thread = gpiod_test_start_event_thread(0, 7, 100); + + ret = gpiod_line_event_wait(line, &ts); + g_assert_cmpint(ret, ==, 1); + + ret = gpiod_line_event_read(line, &ev); + g_assert_cmpint(ret, ==, 0); + + g_assert_cmpint(ev.event_type, ==, GPIOD_LINE_EVENT_FALLING_EDGE); + + ret = gpiod_line_event_wait(line, &ts); + g_assert_cmpint(ret, ==, 1); + + ret = gpiod_line_event_read(line, &ev); + g_assert_cmpint(ret, ==, 0); + + g_assert_cmpint(ev.event_type, ==, GPIOD_LINE_EVENT_RISING_EDGE); +} + GPIOD_TEST_CASE(falling_edge_active_low, 0, { 8 }) { g_autoptr(GpiodTestEventThread) ev_thread = NULL; -- 2.30.2