/* * Copyright 2023 Google LLC * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include #include static const struct device *kscan_dev = DEVICE_DT_GET( DT_NODELABEL(kscan_input)); static const struct device *input_dev = DEVICE_DT_GET( DT_NODELABEL(fake_input_device)); DEVICE_DT_DEFINE(DT_INST(0, vnd_input_device), NULL, NULL, NULL, NULL, PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEVICE, NULL); static struct { uint32_t row; uint32_t col; bool pressed; } last_cb_val; static int callback_calls_count; static void kscan_callback(const struct device *dev, uint32_t row, uint32_t col, bool pressed) { TC_PRINT("row = %u col = %u %d\n", row, col, pressed); callback_calls_count++; last_cb_val.row = row; last_cb_val.col = col; last_cb_val.pressed = pressed; } ZTEST(kscan_input, test_kscan_input) { kscan_config(kscan_dev, kscan_callback); kscan_enable_callback(kscan_dev); input_report_abs(input_dev, INPUT_ABS_X, 101, false, K_FOREVER); zassert_equal(callback_calls_count, 0); input_report_abs(input_dev, INPUT_ABS_Y, 102, false, K_FOREVER); zassert_equal(callback_calls_count, 0); input_report_key(input_dev, INPUT_BTN_TOUCH, 1, true, K_FOREVER); zassert_equal(callback_calls_count, 1); zassert_equal(last_cb_val.col, 101); zassert_equal(last_cb_val.row, 102); zassert_equal(last_cb_val.pressed, true); input_report_abs(input_dev, INPUT_ABS_X, 103, true, K_FOREVER); zassert_equal(callback_calls_count, 2); zassert_equal(last_cb_val.col, 103); zassert_equal(last_cb_val.row, 102); zassert_equal(last_cb_val.pressed, true); input_report_key(input_dev, INPUT_BTN_TOUCH, 0, true, K_FOREVER); zassert_equal(callback_calls_count, 3); zassert_equal(last_cb_val.col, 103); zassert_equal(last_cb_val.row, 102); zassert_equal(last_cb_val.pressed, false); } ZTEST_SUITE(kscan_input, NULL, NULL, NULL, NULL, NULL);