This repository has been archived on 2024-01-25. You can view files and clone it, but cannot push or open issues or pull requests.
Solar-Panel/lcd/ft5xx6.h
2023-03-09 16:08:27 +01:00

971 lines
28 KiB
C

/****************************************************************************
**
** Copyright (C) 2020 MikroElektronika d.o.o.
** Contact: https://www.mikroe.com/contact
**
** This file is part of the mikroSDK package
**
** Commercial License Usage
**
** Licensees holding valid commercial NECTO compilers AI licenses may use this
** file in accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The mikroElektronika Company.
** For licensing terms and conditions see
** https://www.mikroe.com/legal/software-license-agreement.
** For further information use the contact form at
** https://www.mikroe.com/contact.
**
**
** GNU Lesser General Public License Usage
**
** Alternatively, this file may be used for
** non-commercial projects under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation: https://www.gnu.org/licenses/lgpl-3.0.html.
**
** The above copyright notice and this permission notice shall be
** included in all copies or substantial portions of the Software.
**
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
** OF MERCHANTABILITY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
** TO THE WARRANTIES FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
** OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
**
****************************************************************************/
/*!
* @file ft5xx6.h
* @brief FT5xx6 Touch Controller Driver.
*/
#ifndef FT5XX6_H
#define FT5XX6_H
#include "drv_i2c_master.h"
#include "drv_digital_in.h"
#include "drv_name.h"
#include "tp.h"
/*!
* @addtogroup middlewaregroup Middleware
* @brief This section includes the mikroSDK API Reference for Middleware Layer.
* @{
*/
/*!
* @addtogroup ft5xx6 FT5xx6 Touch Controllers Driver
* @brief FT5xx6 Touch Controller Driver API Reference.
* @{
*/
/**
* @defgroup ft5xx6_registers FT5xx6 Registers
* @brief FT5xx6 Registers List.
* @details FT5xx6 registers description with respective addresses.
*/
/**
* @addtogroup ft5xx6_registers
* @{
*/
/**
* @brief FT5xx6 Device Mode Register.
* @details Register address specified for device mode of FT5xx6 touch
* controller.
*/
#define FT5XX6_REG_DEVICE_MODE 0x0
/**
* @brief FT5xx6 Gesture ID Register.
* @details Register address specified for gesture ID of FT5xx6 touch
* controller.
*/
#define FT5XX6_REG_GEST_ID 0x1
/**
* @brief FT5xx6 Status Register.
* @details Register address specified for status of FT5xx6 touch controller.
*/
#define FT5XX6_REG_TD_STATUS 0x2
/**
* @brief FT5xx6 Touch1 X-coord MSB Register.
* @details Register address specified for touch1 x coordinate higher byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH1_XH 0x3
/**
* @brief FT5xx6 Touch1 X-coord LSB Register.
* @details Register address specified for touch1 x coordinate lower byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH1_XL 0x4
/**
* @brief FT5xx6 Touch1 Y-coord MSB Register.
* @details Register address specified for touch1 y coordinate higher byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH1_YH 0x5
/**
* @brief FT5xx6 Touch1 Y-coord LSB Register.
* @details Register address specified for touch1 y coordinate lower byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH1_YL 0x6
/**
* @brief FT5xx6 Touch2 X-coord MSB Register.
* @details Register address specified for touch2 x coordinate higher byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH2_XH 0x9
/**
* @brief FT5xx6 Touch2 X-coord LSB Register.
* @details Register address specified for touch2 x coordinate lower byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH2_XL 0xA
/**
* @brief FT5xx6 Touch2 Y-coord MSB Register.
* @details Register address specified for touch2 y coordinate higher byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH2_YH 0xB
/**
* @brief FT5xx6 Touch2 Y-coord LSB Register.
* @details Register address specified for touch2 y coordinate lower byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH2_YL 0xC
/**
* @brief FT5xx6 Touch3 X-coord MSB Register.
* @details Register address specified for touch3 x coordinate higher byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH3_XH 0xF
/**
* @brief FT5xx6 Touch3 X-coord LSB Register.
* @details Register address specified for touch3 x coordinate lower byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH3_XL 0x10
/**
* @brief FT5xx6 Touch3 Y-coord MSB Register.
* @details Register address specified for touch3 y coordinate higher byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH3_YH 0x11
/**
* @brief FT5xx6 Touch3 Y-coord LSB Register.
* @details Register address specified for touch3 y coordinate lower byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH3_YL 0x12
/**
* @brief FT5xx6 Touch4 X-coord MSB Register.
* @details Register address specified for touch4 x coordinate higher byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH4_XH 0x15
/**
* @brief FT5xx6 Touch4 X-coord LSB Register.
* @details Register address specified for touch4 x coordinate lower byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH4_XL 0x16
/**
* @brief FT5xx6 Touch4 Y-coord MSB Register.
* @details Register address specified for touch4 y coordinate higher byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH4_YH 0x17
/**
* @brief FT5xx6 Touch4 Y-coord LSB Register.
* @details Register address specified for touch4 y coordinate lower byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH4_YL 0x18
/**
* @brief FT5xx6 Touch5 X-coord MSB Register.
* @details Register address specified for touch5 x coordinate higher byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH5_XH 0x1B
/**
* @brief FT5xx6 Touch5 X-coord LSB Register.
* @details Register address specified for touch5 x coordinate lower byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH5_XL 0x1C
/**
* @brief FT5xx6 Touch5 Y-coord MSB Register.
* @details Register address specified for touch5 y coordinate higher byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH5_YH 0x1D
/**
* @brief FT5xx6 Touch5 Y-coord LSB Register.
* @details Register address specified for touch5 y coordinate lower byte of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH5_YL 0x1E
/**
* @brief FT5xx6 Touch Detection Threshold Register.
* @details Register address specified for touch detection threshold of FT5xx6
* touch controller.
*/
#define FT5XX6_REG_TOUCH_DET_TH 0x80
/**
* @brief FT5xx6 Touch Peak Detection Threshold Register.
* @details Register address specified for touch peak detection threshold of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH_PEAK_DET_TH 0x81
/**
* @brief FT5xx6 Touch Threshold Calibration Register.
* @details Register address specified for touch threshold calibration of FT5xx6
* touch controller.
*/
#define FT5XX6_REG_TOUCH_TH_CAL 0x82
/**
* @brief FT5xx6 Touch Threshold Water Register.
* @details Register address specified for touch threshold water of FT5xx6 touch
* controller.
*/
#define FT5XX6_REG_TOUCH_TH_WATER 0x83
/**
* @brief FT5xx6 Touch Threshold Temperature Compensation Register.
* @details Register address specified for touch threshold temperature
* compensation of FT5xx6 touch controller.
*/
#define FT5XX6_REG_TOUCH_TH_TEMP_COMP 0x84
/**
* @brief FT5xx6 Power Control Register.
* @details Register address specified for power control of FT5xx6 touch
* controller.
*/
#define FT5XX6_REG_POWER_CTRL_MODE 0x86
/**
* @brief FT5xx6 Timer Status Monitor Register.
* @details Register address specified for timer status monitor of FT5xx6 touch
* controller.
*/
#define FT5XX6_REG_MONITOR_STATUS_TMR 0x87
/**
* @brief FT5xx6 Actual Period Monitor Register.
* @details Register address specified for actual period monitor of FT5xx6 touch
* controller.
*/
#define FT5XX6_REG_MONITOR_ACT_PERIOD 0x88
/**
* @brief FT5xx6 Enter Idle Timer Register.
* @details Register address specified for enter idle timer of FT5xx6 touch
* controller.
*/
#define FT5XX6_REG_ENTER_IDLE_TIMER 0x89
/**
* @brief FT5xx6 Auto Calibration Register.
* @details Register address specified for auto calibration of FT5xx6 touch
* controller.
*/
#define FT5XX6_REG_AUTO_CALIB_MODE 0xA0
/**
* @brief FT5xx6 Version MSB Register.
* @details Register address specified for version higher byte of FT5xx6 touch
* controller.
*/
#define FT5XX6_REG_LIB_VERSION_H 0xA1
/**
* @brief FT5xx6 Version LSB Register.
* @details Register address specified for version lower byte of FT5xx6 touch
* controller.
*/
#define FT5XX6_REG_LIB_VERSION_L 0xA2
/**
* @brief FT5xx6 Chip Vendor ID Register.
* @details Register address specified for chip vendor ID of FT5xx6 touch
* controller.
*/
#define FT5XX6_REG_LIB_CHIP_VENDOR_ID 0xA3
/**
* @brief FT5xx6 IVT To Host Status Register.
* @details Register address specified for IVT to host status of FT5xx6 touch
* controller.
*/
#define FT5XX6_REG_IVT_TO_HOST_STATUS 0xA4
/**
* @brief FT5xx6 Power Consume Register.
* @details Register address specified for power consume of FT5xx6 touch
* controller.
*/
#define FT5XX6_REG_POWER_CONSUME_MODE 0xA5
/**
* @brief FT5xx6 FW ID Register.
* @details Register address specified for firmware ID of FT5xx6 touch
* controller.
*/
#define FT5XX6_REG_FW_ID 0xA6
/**
* @brief FT5xx6 Running State Register.
* @details Register address specified for running state of FT5xx6 touch
* controller.
*/
#define FT5XX6_REG_RUNNING_STATE 0xA7
/**
* @brief FT5xx6 CTPM Vendor ID Register.
* @details Register address specified for CTPM vendor ID of FT5xx6 touch
* controller.
*/
#define FT5XX6_REG_CTPM_VENDOR_ID 0xA8
/**
* @brief FT5xx6 Error ID Register.
* @details Register address specified for error ID of FT5xx6 touch controller.
*/
#define FT5XX6_REG_ERROR_ID 0xA9
/**
* @brief FT5xx6 Calibration Mode Configuration Register.
* @details Register address specified for calibration mode configuration of
* FT5xx6 touch controller.
*/
#define FT5XX6_REG_CONFIGURE_CAL_MODE 0xAA
/**
* @brief FT5xx6 Big Area Threshold Register.
* @details Register address specified for big area threshold of FT5xx6 touch
* controller.
*/
#define FT5XX6_REG_BIG_AREA_TH 0xAE
/*! @} */ // ft5xx6_registers
/**
* @defgroup ft5xx6_settings FT5xx6 Settings
* @brief FT5xx6 Settings List.
* @details FT5xx6 settings description with respective values.
*/
/**
* @addtogroup ft5xx6_settings
* @{
*/
/**
* @brief FT5xx6 Interrupt Polling Mode Setting.
* @details INT pin polling mode setting for FT5xx6 series touch controllers.
*/
#define FT5XX6_INT_MODE_POLLING 0
/**
* @brief FT5xx6 Interrupt Trigger Mode Setting.
* @details INT pin trigger mode setting for FT5xx6 series touch controllers.
*/
#define FT5XX6_INT_MODE_TRIGGER 1
/**
* @brief FT5xx6 Slave Address Setting.
* @details Slave address setting for FT5xx6 series touch controllers.
*/
#define FT5XX6_I2C_ADDR 0x38
/**
* @brief FT5xx6 Data Transfer Limits Setting.
* @details Data transfer limits for FT5xx6 series touch controllers.
*/
#define FT5XX6_N_DATA_TRANSFER_MIN 1
#define FT5XX6_N_DATA_TRANSFER_MAX 256
/**
* @brief FT5xx6 Gesture Items Limit Setting.
* @details Gesture items limit for FT5xx6 series touch controllers.
*/
#define FT5XX6_GESTURE_ITEMS_MAX 7
/**
* @brief FT5xx6 Touch Pressure Event.
* @details Touch pressure event for FT5xx6 series touch controllers.
*/
#define FT5XX6_EVENT_PRESS_DET 0x80
/**
* @defgroup ft5xx6_masks FT5xx6 Masks
* @brief FT5xx6 Masks List.
* @details FT5xx6 masks description with respective values.
*/
/**
* @addtogroup ft5xx6_masks
* @{
*/
/**
* @brief FT5xx6 Touch Coordinates Mask.
* @details Touch pressure coordinates mask for FT5xx6 series touch controllers.
*/
#define FT5XX6_MASK_PRESS_COORD 0xFFF
/**
* @brief FT5xx6 Touch Event Mask.
* @details Touch pressure event mask for FT5xx6 series touch controllers.
*/
#define FT5XX6_MASK_PRESS_EVENT 0xC0
/**
* @brief FT5xx6 Touch Detection Mask.
* @details Touch pressure detection mask for FT5xx6 series touch controllers.
*/
#define FT5XX6_MASK_PRESS_DET 0xC0
/**
* @brief FT5xx6 TP Number Mask.
* @details Touch point number mask for FT5xx6 series touch controllers.
*/
#define FT5XX6_MASK_TP_NUM 0xF
/*! @} */ // ft5xx6_masks
/**
* @defgroup ft5xx6_offsets FT5xx6 Offsets
* @brief FT5xx6 Offsets List.
* @details FT5xx6 offsets description with respective values.
*/
/**
* @addtogroup ft5xx6_offsets
* @{
*/
/**
* @brief FT5xx6 Touch Event Offset.
* @details Touch event offset for FT5xx6 series touch controllers.
*/
#define FT5XX6_OFFSET_PRESS_EVENT 6
/**
* @brief FT5xx6 Touch ID Offset.
* @details Touch ID offset for FT5xx6 series touch controllers.
*/
#define FT5XX6_OFFSET_PRESS_ID 4
/**
* @brief FT5xx6 Device Mode Offset.
* @details Device mode offset for FT5xx6 series touch controllers.
*/
#define FT5XX6_OFFSET_DEV_MODE 4
/**
* @brief FT5xx6 Touch Reading Offset.
* @details Reading of touches offset for FT5xx6 series touch controllers.
*/
#define FT5XX6_OFFSET_TOUCH_READING 6
/*! @} */ // ft5xx6_offsets
/**
* @brief FT5xx6 Pin Mapping.
* @details Utility macro for mapping FT5xx6 series touch controllers.
*/
#define FT5XX6_MAP_PINS( cfg ) \
cfg.i2c_cfg.scl = CTP_SCL; \
cfg.i2c_cfg.sda = CTP_SDA; \
cfg.int_pin = CTP_INT
/*! @} */ // ft5xx6_settings
/*! @} */ // ft5xx6
/*! @} */ // middlewaregroup
/**
* @brief FT5xx6 Device Mode Settings.
* @details Device mode definition for FT5xx6 series touch controllers.
*/
typedef enum
{
FT5XX6_DEV_MODE_NORMAL, /**< Normal mode. */
FT5XX6_DEV_MODE_SYS_INFO, /**< System info mode. */
FT5XX6_DEV_MODE_TEST = 4 /**< Device test mode. */
} ft5xx6_dev_mode_t;
/**
* @brief FT5xx6 Run Mode Settings.
* @details Run mode definition for FT5xx6 series touch controllers.
*/
typedef enum
{
FT5XX6_RUN_MODE_CFG, /**< Config mode. */
FT5XX6_RUN_MODE_WORK, /**< Working mode. */
FT5XX6_RUN_MODE_CAL, /**< Calibration mode. */
FT5XX6_RUN_MODE_FACT, /**< Factory mode. */
FT5XX6_RUN_MODE_AUTO_CAL /**< Auto calibration mode. */
} ft5xx6_run_mode_t;
/**
* @brief FT5xx6 Gesture Item Definition.
* @details Gesture item definition for FT5xx6 series touch controllers.
*/
typedef struct
{
uint8_t key; /**< Gesture key. */
tp_event_t value; /**< Gesture event value. */
} ft5xx6_gest_item_t;
/**
* @brief FT5xx6 Gesture Items.
* @details Gesture items for FT5xx6 series touch controllers.
*/
typedef struct
{
ft5xx6_gest_item_t gest_items[ FT5XX6_GESTURE_ITEMS_MAX ];
} ft5xx6_controller_t;
/**
* @brief FT5xx6 Configuration Object.
* @details Configuration object definition for FT5xx6 series touch controllers.
*/
typedef struct
{
pin_name_t int_pin; /**< Interrupt pin. */
i2c_master_config_t i2c_cfg; /**< Configuration of communication module. */
const ft5xx6_controller_t * controller; /**< Touch controller descriptor. */
} ft5xx6_cfg_t;
/**
* @brief FT5xx6 Context Object.
* @details Context object definition for FT5xx6 series touch controllers.
*/
typedef struct
{
i2c_master_t i2c; /**< Communication module object. */
digital_in_t int_pin; /**< Interrupt pin object. */
const ft5xx6_controller_t * controller; /**< Touch controller descriptor. */
tp_event_t press_det; /**< Touch pressure event. */
tp_touch_item_t touch; /**< Touch item. */
tp_event_t gesture; /**< Gesture event. */
} ft5xx6_t;
/**
* @brief FT5x06 Touch Controllers Descriptor.
* @details Specified descriptor that describe events of the
* gesture for each controller from FT5x06 series touch controllers.
*/
extern const ft5xx6_controller_t FT5X06_CONTROLLER;
/**
* @brief FT5x16 Touch Controllers Descriptor.
* @details Specified descriptor that describe events of the
* gesture for each controller from FT5x16 series touch controllers.
*/
extern const ft5xx6_controller_t FT5X16_CONTROLLER;
/**
* @brief FT5x26 Touch Controllers Descriptor.
* @details Specified descriptor that describe events of the
* gesture for each controller from FT5x26 series touch controllers.
*/
extern const ft5xx6_controller_t FT5X26_CONTROLLER;
/**
* @brief FT5x46 Touch Controllers Descriptor.
* @details Specified descriptor that describe events of the
* gesture for each controller from FT5x46 series touch controllers.
*/
extern const ft5xx6_controller_t FT5X46_CONTROLLER;
/*!
* @addtogroup middlewaregroup Middleware
* @brief This section includes the mikroSDK API Reference for Middleware Layer.
* @{
*/
/*!
* @addtogroup ft5xx6 FT5xx6 Touch Controllers Driver
* @brief API for configuring and manipulating FT5xx6 Touch Controller driver.
* @{
*/
#ifdef __cplusplus
extern "C"{
#endif
/**
* @brief FT5xx6 Configuration Object Setup Function.
* @details This function initializes FT5xx6 configuration structure to default
* values.
* @param[out] cfg : FT5xx6 configuration object. See #ft5xx6_cfg_t structure
* definition for detailed explanation.
* @param[in] controller : Touch controller selector from FT5xx6 series touch
* controllers. See #ft5xx6_controller_t structure definition for detailed
* explanation.
* @return Nothing.
* @note The all used pins will be set to unconnected state.
*
* @b Example
* @code
* // FT5xx6 configuration object.
* ft5xx6_cfg_t ft5xx6_cfg;
* // FT5x26 series touch controllers descriptor.
* const ft5xx6_controller_t FT5X26_CONTROLLER =
* {
* {
* { 0x00, TP_EVENT_GEST_NONE },
* { 0x1C, TP_EVENT_GEST_LEFT },
* { 0x14, TP_EVENT_GEST_RIGHT },
* { 0x10, TP_EVENT_GEST_UP },
* { 0x18, TP_EVENT_GEST_DOWN },
* { 0x48, TP_EVENT_GEST_ZOOM_IN },
* { 0x49, TP_EVENT_GEST_ZOOM_OUT }
* }
* };
*
* // FT5xx6 configuration setup.
* ft5xx6_cfg_setup( &ft5xx6_cfg, &FT5X26_CONTROLLER );
* @endcode
*/
void
ft5xx6_cfg_setup( ft5xx6_cfg_t * cfg, const ft5xx6_controller_t * controller );
/**
* @brief FT5xx6 Initialization Function.
* @details This function initializes FT5xx6 context object to default values
* and allows driver interface object to be linked with FT5xx6 driver functions.
* @param[out] ctx : FT5xx6 context object. See #ft5xx6_t structure definition
* for detailed explanation.
* @param[in] cfg : FT5xx6 configuration object. See #ft5xx6_cfg_t structure
* definition for detailed explanation.
* @param[out] drv : TP driver interface object. See #tp_drv_t structure
* definition for detailed explanation.
* @return @li @c 0 - OK,
* @li @c 1 - I2C driver init error,
* @li @c 2 - Unsupported pin.
* See #tp_err_t structure definition for detailed explanation.
*
* @b Example
* @code
* // FT5xx6 driver object.
* ft5xx6_t ft5xx6;
* // FT5xx6 configuration object.
* ft5xx6_cfg_t ft5xx6_cfg;
* // FT5x26 series touch controllers descriptor.
* const ft5xx6_controller_t FT5X26_CONTROLLER;
* // TP driver interface object.
* tp_drv_t tp_interface;
*
* // FT5xx6 configuration setup.
* ft5xx6_cfg_setup( &ft5xx6_cfg, &FT5X26_CONTROLLER );
* // FT5xx6 controller pin mapping.
* FT5XX6_MAP_PINS( ft5xx6_cfg );
* // FT5xx6 driver initialization.
* ft5xx6_init( &ft5xx6, &ft5xx6_cfg, &tp_interface );
* @endcode
*/
tp_err_t
ft5xx6_init( ft5xx6_t * ctx, ft5xx6_cfg_t * cfg, tp_drv_t * drv );
/**
* @brief FT5xx6 Default Configuration Function.
* @details This function puts the FT5xx6 touch controller to normal operating
* mode.
* @param[in] ctx : FT5xx6 context object. See #ft5xx6_t structure definition
* for detailed explanation.
* @return Nothing.
* @note It's necessary for this functon to be executed after Initialization
* function for properly working of entire driver.
*
* @b Example
* @code
* // FT5xx6 driver object.
* ft5xx6_t ft5xx6;
*
* // FT5xx6 driver default configuration.
* ft5xx6_default_cfg( &ft5xx6 );
* @endcode
*/
void
ft5xx6_default_cfg( ft5xx6_t * ctx );
/**
* @brief FT5xx6 Generic Write Function.
* @details This function allows user to write any 8-bit data to the selected
* register of the FT5xx6 series touch controllers.
* @param[in] ctx : FT5xx6 context object. See #ft5xx6_t structure definition
* for detailed explanation.
* @param[in] reg_addr : Register address where data be written.
* @param[in] data_in : Data to be written.
* @return Nothing.
*
* @b Example
* @code
* // FT5xx6 driver object.
* ft5xx6_t ft5xx6;
*
* // Setting FT5xx6 controller to configuration mode.
* ft5xx6_generic_write( &ft5xx6, FT5XX6_REG_RUNNING_STATE,
* FT5XX6_RUN_MODE_CFG );
* @endcode
*/
void
ft5xx6_generic_write( ft5xx6_t * ctx, uint8_t reg_addr, uint8_t data_in );
/**
* @brief FT5xx6 Generic Single Read Function.
* @details This function allows user to read any desired register of the FT5xx6
* series touch controllers.
* @param[in] ctx : FT5xx6 context object. See #ft5xx6_t structure definition
* for detailed explanation.
* @param[in] reg_addr : Register address which from data be read.
* @return 8-bit read data.
*
* @b Example
* @code
* // FT5xx6 driver object.
* ft5xx6_t ft5xx6;
* // Read value.
* uint8_t read_data;
*
* // Reading status of FT5xx6 controller to get number of pressed touches.
* read_data = ft5xx6_generic_read_single( &ft5xx6, FT5XX6_REG_TD_STATUS );
* @endcode
*/
uint8_t
ft5xx6_generic_read_single( ft5xx6_t * ctx, uint8_t reg_addr );
/**
* @brief FT5xx6 Generic Multiple Read Function.
* @details This function allows user to read the desired number of data bytes,
* starting from the selected register address.
* @param[in] ctx : FT5xx6 context object. See #ft5xx6_t structure definition
* for detailed explanation.
* @param[in] reg_addr : Register address which from the data reading will be
* started.
* @param[out] data_out : Memory where read data will be stored.
* @param[in] n_bytes : Number of data bytes to be read.
* @return @li @c 0 - OK,
* @li @c 6 - Number of transfered bytes is out of range.
* See #tp_err_t structure definition for detailed explanation.
*
* @b Example
* @code
* // FT5xx6 driver object.
* ft5xx6_t ft5xx6;
* // Read value.
* uint8_t read_data[ 2 ];
* // TP error code.
* tp_err_t error;
*
* // Reading two data bytes to get x coordinate value of touch1.
* error = ft5xx6_generic_read_multiple( &ft5xx6, FT5XX6_REG_TOUCH1_XH,
* read_data, 2 );
* @endcode
*/
tp_err_t
ft5xx6_generic_read_multiple( ft5xx6_t * ctx, uint8_t reg_addr,
uint8_t * data_out, uint16_t n_bytes );
/**
* @brief FT5xx6 Device Mode Setup Function.
* @details This function puts the FT5xx6 series touch controllers to the
* selected device mode.
* @param[in] ctx : FT5xx6 context object. See #ft5xx6_t structure definition
* for detailed explanation.
* @param[in] mode : device mode of operation. See #ft5xx6_dev_mode_t for valid
* values.
* @return Nothing.
*
* @b Example
* @code
* // FT5xx6 driver object.
* ft5xx6_t ft5xx6;
*
* // Setting device normal operating mode of FT5xx6 series touch controllers.
* ft5xx6_dev_mode_setup( &ft5xx6, FT5XX6_DEV_MODE_NORMAL );
* @endcode
*/
void
ft5xx6_dev_mode_setup( ft5xx6_t * ctx, ft5xx6_dev_mode_t mode );
/**
* @brief FT5xx6 Run Mode Setup Function.
* @details This function puts the FT5xx6 series touch controllers to the
* selected run mode.
* @param[in] ctx : FT5xx6 context object. See #ft5xx6_t structure definition
* for detailed explanation.
* @param[in] mode : run mode of operation. See #ft5xx6_run_mode_t for valid
* values.
* @return Nothing.
*
* @b Example
* @code
* // FT5xx6 driver object.
* ft5xx6_t ft5xx6;
*
* // Setting run working mode of FT5xx6 series touch controllers.
* ft5xx6_run_mode_setup( &ft5xx6, FT5XX6_RUN_MODE_WORK );
* @endcode
*/
void
ft5xx6_run_mode_setup( ft5xx6_t * ctx, ft5xx6_run_mode_t mode );
/**
* @brief FT5xx6 Touch Pressure Detect Function.
* @details This function allows the touch pressure detection.
* @param[in] ctx : FT5xx6 context object. See #ft5xx6_t structure definition
* for detailed explanation.
* @return @li @c 3 - Touch pressure is not detected,
* @li @c 4 - Touch pressure is detected.
* See #tp_event_t structure definition for detailed explanation.
* @note #ft5xx6_process function must be called to update all events.
*
* @b Example
* @code
* // FT5xx6 driver object.
* ft5xx6_t ft5xx6;
* // Touch pressure event.
* tp_event_t event;
*
* // Checking touch pressure event.
* event = ft5xx6_press_detect( &ft5xx6 );
* @endcode
*/
tp_event_t
ft5xx6_press_detect( ft5xx6_t * ctx );
/**
* @brief FT5xx6 Pressure Coordinates Check Function.
* @details This function allows user to get the informations about the number
* of pressed touch points, coordinates and touch event for each pressed touch
* point.
* @param[in] ctx : FT5xx6 context object. See #ft5xx6_t structure definition
* for detailed explanation.
* @param[out] touch_item : Touch item data. See #tp_touch_item_t structure
* definition for detailed explanation.
* @return Nothing.
* @note #ft5xx6_process function must be called to update all events.
*
* @b Example
* @code
* // FT5xx6 driver object.
* ft5xx6_t ft5xx6;
* // Touch pressure item.
* tp_touch_item_t tp_item;
*
* // To get all necessary data information about pressed touch.
* ft5xx6_press_coordinates( &ft5xx6, &tp_item );
* @endcode
*/
void
ft5xx6_press_coordinates( ft5xx6_t * ctx, tp_touch_item_t * touch_item );
/**
* @brief FT5xx6 Gesture Check Function.
* @details This function allows user to get the informations about the gesture
* (slide direction).
* @param[in] ctx : FT5xx6 context object. See #ft5xx6_t structure definition
* for detailed explanation.
* @param[out] event : Touch panel gesture data. See #tp_event_t structure
* definition for detailed explanation.
* @return Nothing.
* @note #ft5xx6_process function must be called to update all events.
*
* @b Example
* @code
* // FT5xx6 driver object.
* ft5xx6_t ft5xx6;
* // Gesture event.
* tp_event_t event;
*
* // Checking slide direction event of pressed touch.
* ft5xx6_gesture( &ft5xx6, &event );
* @endcode
*/
void
ft5xx6_gesture( ft5xx6_t * ctx, tp_event_t * event );
/**
* @brief FT5xx6 Process Function.
* @details This function detects a touch pressure, and if any touch pressure
* was detected, then collects all informations about the pressed touch and
* slide direction (gesture).
* @param[in] ctx : FT5xx6 context object. See #ft5xx6_t structure definition
* for detailed explanation.
* @return @li @c 0 - OK,
* @li @c 5 - Number of pressed touches is out of range.
* See #tp_err_t structure definition for detailed explanation.
* @note To update all possible events, just need to call this function before
* the any other function for checking events is called.
*
* @b Example
* @code
* // FT5xx6 driver object.
* ft5xx6_t ft5xx6;
* // TP error code.
* tp_err_t error;
*
* // Processing all data and events of the target touch controller.
* error = ft5xx6_process( &ft5xx6 );
* @endcode
*/
tp_err_t
ft5xx6_process( ft5xx6_t * ctx );
#ifdef __cplusplus
}
#endif
#endif // FT5XX6_H
/*! @} */ // ft5xx6
/*! @} */ // middlewaregroup
// ------------------------------------------------------------------------ END