1 /*
2  * Copyright (c) 2020 Hubert Miś
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 /**
8  * @file
9  * @brief FT8XX public API
10  */
11 
12 #ifndef ZEPHYR_DRIVERS_MISC_FT8XX_FT8XX_H_
13 #define ZEPHYR_DRIVERS_MISC_FT8XX_FT8XX_H_
14 
15 #include <stdint.h>
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 /**
22  * @brief FT8xx driver public APIs
23  * @defgroup ft8xx_interface FT8xx driver APIs
24  * @ingroup misc_interfaces
25  * @{
26  */
27 
28 /**
29  * @struct ft8xx_touch_transform
30  * @brief Structure holding touchscreen calibration data
31  *
32  * The content of this structure is filled by ft8xx_calibrate().
33  */
34 struct ft8xx_touch_transform {
35 	uint32_t a;
36 	uint32_t b;
37 	uint32_t c;
38 	uint32_t d;
39 	uint32_t e;
40 	uint32_t f;
41 };
42 
43 /**
44  * @typedef ft8xx_int_callback
45  * @brief Callback API to inform API user that FT8xx triggered interrupt
46  *
47  * This callback is called from IRQ context.
48  */
49 typedef void (*ft8xx_int_callback)(void);
50 
51 /**
52  * @brief Calibrate touchscreen
53  *
54  * Run touchscreen calibration procedure that collects three touches from touch
55  * screen. Computed calibration result is automatically applied to the
56  * touchscreen processing and returned with @p data.
57  *
58  * The content of @p data may be stored and used after reset in
59  * ft8xx_touch_transform_set() to avoid calibrating touchscreen after each
60  * device reset.
61  *
62  * @param data Pointer to touchscreen transform structure to populate
63  */
64 void ft8xx_calibrate(struct ft8xx_touch_transform *data);
65 
66 /**
67  * @brief Set touchscreen calibration data
68  *
69  * Apply given touchscreen transform data to the touchscreen processing.
70  * Data is to be obtained from calibration procedure started with
71  * ft8xx_calibrate().
72  *
73  * @param data Pointer to touchscreen transform structure to apply
74  */
75 void ft8xx_touch_transform_set(const struct ft8xx_touch_transform *data);
76 
77 /**
78  * @brief Get tag of recently touched element
79  *
80  * @return Tag value 0-255 of recently touched element
81  */
82 int ft8xx_get_touch_tag(void);
83 
84 /**
85  * @brief Set callback executed when FT8xx triggers interrupt
86  *
87  * This function configures FT8xx to trigger interrupt when touch event changes
88  * tag value.
89  *
90  * When touch event changes tag value, FT8xx activates INT line. The line is
91  * kept active until ft8xx_get_touch_tag() is called. It results in single
92  * execution of @p callback until ft8xx_get_touch_tag() is called.
93  *
94  * @param callback Pointer to function called when FT8xx triggers interrupt
95  */
96 void ft8xx_register_int(ft8xx_int_callback callback);
97 
98 /**
99  * @}
100  */
101 
102 #ifdef __cplusplus
103 }
104 #endif
105 
106 #endif /* ZEPHYR_DRIVERS_MISC_FT8XX_FT8XX_H_ */
107