Files
CelloEffects/Drivers/STM32H7RSxx_BSP/STM32H7S78-DK/stm32h7s78_discovery_ts.h
T
2026-09-04 09:57:30 +02:00

218 lines
6.9 KiB
C

/**
******************************************************************************
* @file stm32h7s78_discovery_ts.h
* @author MCD Application Team
* @brief This file is the header of stm32h7s78_discovery_bus.c file
******************************************************************************
* @attention
*
* Copyright (c) 2022 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef STM32H7S78_DK_TS_H
#define STM32H7S78_DK_TS_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32h7s78_discovery_conf.h"
#include "stm32h7s78_discovery_errno.h"
#include "../Components/gt911/gt911.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM32H7S78_DK
* @{
*/
/** @addtogroup STM32H7S78_DK_TS
* @{
*/
/** @defgroup STM32H7S78_DK_TS_Exported_Constants Exported Constants
* @{
*/
#ifndef USE_TS_MULTI_TOUCH
#define USE_TS_MULTI_TOUCH 1U
#endif
#ifndef USE_TS_GESTURE
#define USE_TS_GESTURE 1U
#endif
#ifndef TS_TOUCH_NBR
#define TS_TOUCH_NBR 5U
#endif
#define TS_INSTANCES_NBR 1U
/* Maximum border values of the touchscreen pad */
#define TS_MAX_WIDTH GT911_MAX_X_LENGTH /* Touchscreen pad max width */
#define TS_MAX_HEIGHT GT911_MAX_Y_LENGTH /* Touchscreen pad max height */
#define TS_SWAP_NONE 0x01U
#define TS_SWAP_X 0x02U
#define TS_SWAP_Y 0x04U
#define TS_SWAP_XY 0x08U
/**
* @brief TouchScreen Slave I2C address 1
*/
#define TS_I2C_ADDRESS 0xBAU
/**
* @brief Touch screen interrupt signal
*/
#define TS_INT_PIN GPIO_PIN_3
#define TS_INT_GPIO_PORT GPIOE
#define TS_INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE()
#define TS_INT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOE_CLK_DISABLE()
#define TS_INT_EXTI_IRQn EXTI3_IRQn
#define TS_EXTI_LINE EXTI_LINE_3
/**
* @}
*/
/** @defgroup STM32H7S78_DK_TS_Exported_Types Exported Types
* @{
*/
typedef struct
{
uint32_t Width; /* Screen Width */
uint32_t Height; /* Screen Height */
uint32_t Orientation; /* Touch Screen orientation from the upper left position */
uint32_t Accuracy; /* Expressed in pixel and means the x or y difference vs old
position to consider the new values valid */
} TS_Init_t;
typedef struct
{
uint32_t Width;
uint32_t Height;
uint32_t Orientation;
uint32_t Accuracy;
uint32_t MaxX;
uint32_t MaxY;
uint32_t PreviousX[TS_TOUCH_NBR];
uint32_t PreviousY[TS_TOUCH_NBR];
} TS_Ctx_t;
typedef struct
{
uint8_t MultiTouch; /* Multi-touch supported : 0 means no, 1 means yes */
uint8_t Gesture; /* Gesture supported : 0 means no, 1 means yes */
uint8_t MaxTouch; /* Maximum number of touches detected if multi-touch supported */
uint32_t MaxXl; /* Maximum value of x coordinate */
uint32_t MaxYl; /* Maximum value of y coordinate */
} TS_Capabilities_t;
typedef struct
{
uint32_t TouchDetected; /* Touch detected : 0 means no, 1 means yes */
uint32_t TouchX; /* x coordinate */
uint32_t TouchY; /* y coordinate */
} TS_State_t;
typedef struct
{
uint32_t TouchDetected; /* Number of touch detected (from 0 to maximum of touches) */
uint32_t TouchX[TS_TOUCH_NBR]; /* x coordinates */
uint32_t TouchY[TS_TOUCH_NBR]; /* y coordinates */
} TS_MultiTouch_State_t;
#if (USE_TS_GESTURE > 0)
/**
* @brief TS_Gesture_Id_t
* Define Possible managed gesture identification values returned by touch screen
* driver.
*/
#define GESTURE_ID_NO_GESTURE 0x00U /*!< Gesture not defined / recognized */
#define GESTURE_ID_SWIPE_UP 0x01U /*!< Gesture Swipe Up */
#define GESTURE_ID_SWIPE_RIGHT 0x02U /*!< Gesture Swipe Right */
#define GESTURE_ID_SWIPE_DOWN 0x03U /*!< Gesture Swipe Down */
#define GESTURE_ID_SWIPE_LEFT 0x04U /*!< Gesture Swipe Left */
#define GESTURE_ID_DOUBLE_TAP 0x05U /*!< Gesture Double Tap */
#define GESTURE_ID_NB_MAX 0x06U /*!< max number of gesture id */
typedef struct
{
uint32_t DistanceLeftRight; /* Maximum distance while moving left and moving right gesture.
Value from 0 to TS_LENGTH/16 (default value is TS_LENGTH/8). */
uint32_t DistanceUpDown; /* Maximum distance while moving up and moving down gesture.
Value from 0 to TS_LENGTH/16 (default value is TS_LENGTH/8). */
uint8_t RefreshRate; /* Report Rate in Gesture Mode. */
uint8_t GestureThreshold; /* Touch Threshold in Gesture Mode. */
uint8_t Gain; /* Gesture PGA gain. */
} TS_Gesture_Config_t;
#endif /* (USE_TS_GESTURE > 0) */
/**
* @}
*/
/** @addtogroup STM32H7S78_DK_TS_Exported_Variables
* @{
*/
extern void *Ts_CompObj[TS_INSTANCES_NBR];
extern EXTI_HandleTypeDef hts_exti[TS_INSTANCES_NBR];
extern TS_Ctx_t Ts_Ctx[TS_INSTANCES_NBR];
/**
* @}
*/
/** @defgroup STM32H7S78_DK_TS_Exported_FunctionsPrototypes Exported Functions Prototypes
* @{
*/
int32_t BSP_TS_Init(uint32_t Instance, TS_Init_t *TS_Init);
int32_t BSP_TS_DeInit(uint32_t Instance);
int32_t BSP_TS_EnableIT(uint32_t Instance);
int32_t BSP_TS_DisableIT(uint32_t Instance);
int32_t BSP_TS_GetState(uint32_t Instance, TS_State_t *TS_State);
#if (USE_TS_MULTI_TOUCH == 1)
int32_t BSP_TS_Get_MultiTouchState(uint32_t Instance, TS_MultiTouch_State_t *TS_State);
#endif /* USE_TS_MULTI_TOUCH == 1 */
#if (USE_TS_GESTURE == 1)
int32_t BSP_TS_GestureConfig(uint32_t Instance, TS_Gesture_Config_t *GestureConfig);
int32_t BSP_TS_GetGestureId(uint32_t Instance, uint32_t *GestureId);
#endif /* (USE_TS_GESTURE == 1) */
int32_t BSP_TS_Set_Orientation(uint32_t Instance, uint32_t Orientation);
int32_t BSP_TS_Get_Orientation(uint32_t Instance, uint32_t *Orientation);
int32_t BSP_TS_GetCapabilities(uint32_t Instance, TS_Capabilities_t *Capabilities);
void BSP_TS_Callback(uint32_t Instance);
void BSP_TS_IRQHandler(uint32_t Instance);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* STM32H7S78_DK_TS_H */