1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/drivers/include/ft5x06.h
2022-01-21 13:13:09 +01:00

164 lines
4.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (C) 2021 Inria
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @defgroup drivers_ft5x06 FocalTech FT5x06 touch panel driver
* @ingroup drivers_sensors
* @brief Multi-touch capacitive panel controller
*
* This driver should also support FT5x06FT5606FT5x16FT6x06Ft6x36
* FT5x06iFT5336FT3316FT5436iFT5336iFT5x46.
*
* @{
*
* @file
*
* @author Alexandre Abadie <alexandre.abadie@inria.fr>
*/
#ifndef FT5X06_H
#define FT5X06_H
#include <stdint.h>
#include "periph/gpio.h"
#include "periph/i2c.h"
#include "ft5x06_constants.h"
#ifdef MODULE_TOUCH_DEV
#include "touch_dev.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Touch position structure
*/
typedef struct {
uint16_t x; /**< X position */
uint16_t y; /**< Y position */
} ft5x06_touch_position_t;
/**
* @brief Touch gesture
*/
typedef enum {
FT5X06_TOUCH_NO_GESTURE, /**< No gesture detected */
FT5X06_TOUCH_MOVE_UP, /**< Move up gesture detected */
FT5X06_TOUCH_MOVE_LEFT, /**< Move left gesture detected */
FT5X06_TOUCH_MOVE_DOWN, /**< Move down gesture detected */
FT5X06_TOUCH_MOVE_RIGHT, /**< Move right gesture detected */
FT5X06_TOUCH_ZOOM_IN, /**< Zoom int gesture detected */
FT5X06_TOUCH_ZOOM_OUT, /**< Zoom out gesture detected */
} ft5x06_touch_gesture_t;
/**
* @brief Device type
*/
typedef enum {
FT5X06_TYPE_FT5X06, /**< FT5X06 */
FT5X06_TYPE_FT5606, /**< FT5606 */
FT5X06_TYPE_FT5X16, /**< FT5X16 */
FT5X06_TYPE_FT6X06, /**< FT6X06 */
FT5X06_TYPE_FT6X36, /**< FT6X36 */
FT5X06_TYPE_FT5X06I, /**< FT5X06I */
FT5X06_TYPE_FT5336, /**< FT5336 */
FT5X06_TYPE_FT3316, /**< FT3316 */
FT5X06_TYPE_FT5436I, /**< FT5436I */
FT5X06_TYPE_FT5336I, /**< FT5336I */
FT5X06_TYPE_FT5X46, /**< FT5X46 */
} ft5x06_type_t;
/**
* @brief Signature of the touch event callback triggered from interrupt
*
* @param[in] arg optional context for the callback
*/
typedef void (*ft5x06_event_cb_t)(void *arg);
/**
* @brief Device initialization parameters
*/
typedef struct {
i2c_t i2c; /**< I2C device which is used */
uint8_t addr; /**< Device I2C address */
gpio_t int_pin; /**< Touch screen interrupt pin */
uint16_t xmax; /**< Touch screen max X position */
uint16_t ymax; /**< Touch screen max Y position */
ft5x06_type_t type; /**< Device type */
} ft5x06_params_t;
/**
* @brief Device descriptor for the driver
*/
typedef struct {
#ifdef MODULE_TOUCH_DEV
touch_dev_t *dev; /**< Pointer to the generic touch device */
#endif
ft5x06_params_t params; /**< Initialization parameters */
} ft5x06_t;
/**
* @brief Initialize the given device
*
* @param[inout] dev Device descriptor of the driver
* @param[in] params Initialization parameters
* @param[in] cb Callback function called on touch interrupts
* @param[in] arg Context argument used in callback function
*
* @return 0 on success
* @return -ENODEV when no valid device
* @return -EPROTO on any bus error
*/
int ft5x06_init(ft5x06_t *dev, const ft5x06_params_t *params,
ft5x06_event_cb_t cb, void *arg);
/**
* @brief Read the touch positions
*
* @param[in] dev Device descriptor of the FT5x06
* @param[out] positions Touch positions
* @param[in] len Number of touch positions to read
*
* @return 0 on success
* @return -EPROTO on any bus error
*/
int ft5x06_read_touch_positions(const ft5x06_t *dev, ft5x06_touch_position_t *positions, size_t len);
/**
* @brief Read the number of touch
*
* @param[in] dev Device descriptor of the FT5x06
* @param[out] count Number of touch detected
*
* @return 0 on success
* @return -EPROTO on any bus error
*/
int ft5x06_read_touch_count(const ft5x06_t *dev, uint8_t *count);
/**
* @brief Read the gesture detected
*
* @param[in] dev Device descriptor of the FT5X06
* @param[out] gesture Gesture ID
*
* @return 0 on success
* @return -EPROTO on any bus error
*/
int ft5x06_read_touch_gesture(const ft5x06_t *dev, ft5x06_touch_gesture_t *gesture);
#ifdef __cplusplus
}
#endif
#endif /* FT5X06_H */
/** @} */