1 /*
2  * Copyright (c) 2024 Antmicro <www.antmicro.com>
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 #ifndef ZEPHYR_INCLUDE_INPUT_TOUCH_H_
7 #define ZEPHYR_INCLUDE_INPUT_TOUCH_H_
8 
9 /**
10  * @brief Touch Events API
11  * @defgroup touch_events Touchscreen Event Report API
12  * @since 3.7
13  * @version 0.1.0
14  * @ingroup io_interfaces
15  * @{
16  */
17 
18 #include <zephyr/input/input.h>
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
24 /**
25  * @brief Common touchscreen config.
26  *
27  * This structure **must** be placed first in the driver's config structure.
28  *
29  * @param screen_width Horizontal resolution of touchscreen
30  * @param screen_height Vertical resolution of touchscreen
31  * @param inverted_x  X axis is inverted
32  * @param inverted_y Y axis is inverted
33  * @param swapped_x_y X and Y axes are swapped
34  *
35  * see touchscreem-common.yaml for more details
36  */
37 struct input_touchscreen_common_config {
38 	uint32_t screen_width;
39 	uint32_t screen_height;
40 	bool inverted_x;
41 	bool inverted_y;
42 	bool swapped_x_y;
43 };
44 
45 /**
46  * @brief Initialize common touchscreen config from devicetree
47  *
48  * @param node_id The devicetree node identifier.
49  */
50 #define INPUT_TOUCH_DT_COMMON_CONFIG_INIT(node_id)			\
51 	{								\
52 		.screen_width = DT_PROP(node_id, screen_width),		\
53 		.screen_height = DT_PROP(node_id, screen_height),	\
54 		.inverted_x = DT_PROP(node_id, inverted_x),		\
55 		.inverted_y = DT_PROP(node_id, inverted_y),		\
56 		.swapped_x_y = DT_PROP(node_id, swapped_x_y)		\
57 	}
58 
59 /**
60  * @brief Initialize common touchscreen config from devicetree instance.
61  *
62  * @param inst Instance.
63  */
64 #define INPUT_TOUCH_DT_INST_COMMON_CONFIG_INIT(inst) \
65 	INPUT_TOUCH_DT_COMMON_CONFIG_INIT(DT_DRV_INST(inst))
66 
67 /**
68  * @brief Validate the offset of the common config structure.
69  *
70  * @param config Name of the config structure.
71  */
72 #define INPUT_TOUCH_STRUCT_CHECK(config) \
73 	BUILD_ASSERT(offsetof(config, common) == 0, \
74 		     "struct input_touchscreen_common_config must be placed first");
75 
76 /**
77  * @brief Common utility for reporting touchscreen position events.
78  *
79  * @param dev Touchscreen controller
80  * @param x X coordinate as reported by the controller
81  * @param y Y coordinate as reported by the controller
82  * @param timeout Timeout for reporting the event
83  */
84 void input_touchscreen_report_pos(const struct device *dev,
85 		uint32_t x, uint32_t y,
86 		k_timeout_t timeout);
87 
88 #ifdef __cplusplus
89 }
90 #endif
91 
92 /** @} */
93 
94 #endif /* ZEPHYR_INCLUDE_INPUT_TOUCH_H_ */
95