diff --git a/tests/kernel/timer/timer_api/src/main.c b/tests/kernel/timer/timer_api/src/main.c index f2d2f7dcea1..d4bdd8fa9c2 100644 --- a/tests/kernel/timer/timer_api/src/main.c +++ b/tests/kernel/timer/timer_api/src/main.c @@ -39,6 +39,7 @@ void test_main(void *p1, void *p2, void *p3) ztest_unit_test(test_timer_status_get), ztest_unit_test(test_timer_status_get_anytime), ztest_unit_test(test_timer_status_sync), - ztest_unit_test(test_timer_k_define)); + ztest_unit_test(test_timer_k_define), + ztest_unit_test(test_timer_user_data)); ztest_run_test_suite(test_timer_api); } diff --git a/tests/kernel/timer/timer_api/src/test_timer.h b/tests/kernel/timer/timer_api/src/test_timer.h index 56b03dfbf40..6a20421b8e6 100644 --- a/tests/kernel/timer/timer_api/src/test_timer.h +++ b/tests/kernel/timer/timer_api/src/test_timer.h @@ -31,5 +31,6 @@ void test_timer_status_get(void); void test_timer_status_get_anytime(void); void test_timer_status_sync(void); void test_timer_k_define(void); +void test_timer_user_data(void); #endif /* __TEST_TIMER_H__ */ diff --git a/tests/kernel/timer/timer_api/src/test_timer_api.c b/tests/kernel/timer/timer_api/src/test_timer_api.c index 27f182f6e79..2adff3fe78d 100644 --- a/tests/kernel/timer/timer_api/src/test_timer_api.c +++ b/tests/kernel/timer/timer_api/src/test_timer_api.c @@ -213,3 +213,64 @@ void test_timer_k_define(void) /* cleanup environment */ k_timer_stop(&ktimer); } + +/* k_timer_user_data_set/get test */ + +static void user_data_timer_handler(struct k_timer *timer); + +static struct k_timer user_data_timer[5] = { + K_TIMER_INITIALIZER(user_data_timer[0], user_data_timer_handler, NULL), + K_TIMER_INITIALIZER(user_data_timer[1], user_data_timer_handler, NULL), + K_TIMER_INITIALIZER(user_data_timer[2], user_data_timer_handler, NULL), + K_TIMER_INITIALIZER(user_data_timer[3], user_data_timer_handler, NULL), + K_TIMER_INITIALIZER(user_data_timer[4], user_data_timer_handler, NULL), +}; + +static const intptr_t user_data[5] = {0x1337, 0xbabe, 0xd00d, 0xdeaf, 0xfade}; + +static int user_data_correct[5] = {0, 0, 0, 0, 0}; + +static void user_data_timer_handler(struct k_timer *timer) +{ + int timer_num = timer == &user_data_timer[0] ? 0 : + timer == &user_data_timer[1] ? 1 : + timer == &user_data_timer[2] ? 2 : + timer == &user_data_timer[3] ? 3 : + timer == &user_data_timer[4] ? 4 : -1; + + if (timer_num == -1) { + return; + } + + intptr_t data_retrieved = (intptr_t)k_timer_user_data_get(timer); + user_data_correct[timer_num] = user_data[timer_num] == data_retrieved; +} + +void test_timer_user_data(void) +{ + int ii; + + for (ii = 0; ii < 5; ii++) { + intptr_t check; + + k_timer_user_data_set(&user_data_timer[ii], + (void *)user_data[ii]); + check = (intptr_t)k_timer_user_data_get(&user_data_timer[ii]); + + assert_true(check == user_data[ii], NULL); + } + + for (ii = 0; ii < 5; ii++) { + k_timer_start(&user_data_timer[ii], 50 + ii * 50, 0); + } + + k_sleep(50 * ii + 50); + + for (ii = 0; ii < 5; ii++) { + k_timer_stop(&user_data_timer[ii]); + } + + for (ii = 0; ii < 5; ii++) { + assert_true(user_data_correct[ii], NULL); + } +}