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