SPKT

Dependents:   Player

Committer:
phungductung
Date:
Fri Jun 07 05:06:42 2019 +0000
Revision:
0:4e245f4bc8ac
spkt

Who changed what in which revision?

UserRevisionLine numberNew contents of line
phungductung 0:4e245f4bc8ac 1 /**
phungductung 0:4e245f4bc8ac 2 ******************************************************************************
phungductung 0:4e245f4bc8ac 3 * @file stm32746g_discovery_ts.c
phungductung 0:4e245f4bc8ac 4 * @author MCD Application Team
phungductung 0:4e245f4bc8ac 5 * @version V1.0.0
phungductung 0:4e245f4bc8ac 6 * @date 25-June-2015
phungductung 0:4e245f4bc8ac 7 * @brief This file provides a set of functions needed to manage the Touch
phungductung 0:4e245f4bc8ac 8 * Screen on STM32746G-Discovery board.
phungductung 0:4e245f4bc8ac 9 @verbatim
phungductung 0:4e245f4bc8ac 10 1. How To use this driver:
phungductung 0:4e245f4bc8ac 11 --------------------------
phungductung 0:4e245f4bc8ac 12 - This driver is used to drive the touch screen module of the STM32746G-Discovery
phungductung 0:4e245f4bc8ac 13 board on the RK043FN48H-CT672B 480x272 LCD screen with capacitive touch screen.
phungductung 0:4e245f4bc8ac 14 - The FT5336 component driver must be included in project files according to
phungductung 0:4e245f4bc8ac 15 the touch screen driver present on this board.
phungductung 0:4e245f4bc8ac 16
phungductung 0:4e245f4bc8ac 17 2. Driver description:
phungductung 0:4e245f4bc8ac 18 ---------------------
phungductung 0:4e245f4bc8ac 19 + Initialization steps:
phungductung 0:4e245f4bc8ac 20 o Initialize the TS module using the BSP_TS_Init() function. This
phungductung 0:4e245f4bc8ac 21 function includes the MSP layer hardware resources initialization and the
phungductung 0:4e245f4bc8ac 22 communication layer configuration to start the TS use. The LCD size properties
phungductung 0:4e245f4bc8ac 23 (x and y) are passed as parameters.
phungductung 0:4e245f4bc8ac 24 o If TS interrupt mode is desired, you must configure the TS interrupt mode
phungductung 0:4e245f4bc8ac 25 by calling the function BSP_TS_ITConfig(). The TS interrupt mode is generated
phungductung 0:4e245f4bc8ac 26 as an external interrupt whenever a touch is detected.
phungductung 0:4e245f4bc8ac 27 The interrupt mode internally uses the IO functionalities driver driven by
phungductung 0:4e245f4bc8ac 28 the IO expander, to configure the IT line.
phungductung 0:4e245f4bc8ac 29
phungductung 0:4e245f4bc8ac 30 + Touch screen use
phungductung 0:4e245f4bc8ac 31 o The touch screen state is captured whenever the function BSP_TS_GetState() is
phungductung 0:4e245f4bc8ac 32 used. This function returns information about the last LCD touch occurred
phungductung 0:4e245f4bc8ac 33 in the TS_StateTypeDef structure.
phungductung 0:4e245f4bc8ac 34 o If TS interrupt mode is used, the function BSP_TS_ITGetStatus() is needed to get
phungductung 0:4e245f4bc8ac 35 the interrupt status. To clear the IT pending bits, you should call the
phungductung 0:4e245f4bc8ac 36 function BSP_TS_ITClear().
phungductung 0:4e245f4bc8ac 37 o The IT is handled using the corresponding external interrupt IRQ handler,
phungductung 0:4e245f4bc8ac 38 the user IT callback treatment is implemented on the same external interrupt
phungductung 0:4e245f4bc8ac 39 callback.
phungductung 0:4e245f4bc8ac 40 @endverbatim
phungductung 0:4e245f4bc8ac 41 ******************************************************************************
phungductung 0:4e245f4bc8ac 42 * @attention
phungductung 0:4e245f4bc8ac 43 *
phungductung 0:4e245f4bc8ac 44 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
phungductung 0:4e245f4bc8ac 45 *
phungductung 0:4e245f4bc8ac 46 * Redistribution and use in source and binary forms, with or without modification,
phungductung 0:4e245f4bc8ac 47 * are permitted provided that the following conditions are met:
phungductung 0:4e245f4bc8ac 48 * 1. Redistributions of source code must retain the above copyright notice,
phungductung 0:4e245f4bc8ac 49 * this list of conditions and the following disclaimer.
phungductung 0:4e245f4bc8ac 50 * 2. Redistributions in binary form must reproduce the above copyright notice,
phungductung 0:4e245f4bc8ac 51 * this list of conditions and the following disclaimer in the documentation
phungductung 0:4e245f4bc8ac 52 * and/or other materials provided with the distribution.
phungductung 0:4e245f4bc8ac 53 * 3. Neither the name of STMicroelectronics nor the names of its contributors
phungductung 0:4e245f4bc8ac 54 * may be used to endorse or promote products derived from this software
phungductung 0:4e245f4bc8ac 55 * without specific prior written permission.
phungductung 0:4e245f4bc8ac 56 *
phungductung 0:4e245f4bc8ac 57 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
phungductung 0:4e245f4bc8ac 58 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
phungductung 0:4e245f4bc8ac 59 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
phungductung 0:4e245f4bc8ac 60 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
phungductung 0:4e245f4bc8ac 61 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
phungductung 0:4e245f4bc8ac 62 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
phungductung 0:4e245f4bc8ac 63 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
phungductung 0:4e245f4bc8ac 64 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
phungductung 0:4e245f4bc8ac 65 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
phungductung 0:4e245f4bc8ac 66 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
phungductung 0:4e245f4bc8ac 67 *
phungductung 0:4e245f4bc8ac 68 ******************************************************************************
phungductung 0:4e245f4bc8ac 69 */
phungductung 0:4e245f4bc8ac 70
phungductung 0:4e245f4bc8ac 71 /* Includes ------------------------------------------------------------------*/
phungductung 0:4e245f4bc8ac 72 #include "stm32746g_discovery_ts.h"
phungductung 0:4e245f4bc8ac 73
phungductung 0:4e245f4bc8ac 74 /** @addtogroup BSP
phungductung 0:4e245f4bc8ac 75 * @{
phungductung 0:4e245f4bc8ac 76 */
phungductung 0:4e245f4bc8ac 77
phungductung 0:4e245f4bc8ac 78 /** @addtogroup STM32746G_DISCOVERY
phungductung 0:4e245f4bc8ac 79 * @{
phungductung 0:4e245f4bc8ac 80 */
phungductung 0:4e245f4bc8ac 81
phungductung 0:4e245f4bc8ac 82 /** @defgroup STM32746G_DISCOVERY_TS STM32746G_DISCOVERY_TS
phungductung 0:4e245f4bc8ac 83 * @{
phungductung 0:4e245f4bc8ac 84 */
phungductung 0:4e245f4bc8ac 85
phungductung 0:4e245f4bc8ac 86 /** @defgroup STM32746G_DISCOVERY_TS_Private_Types_Definitions STM32746G_DISCOVERY_TS Types Definitions
phungductung 0:4e245f4bc8ac 87 * @{
phungductung 0:4e245f4bc8ac 88 */
phungductung 0:4e245f4bc8ac 89 /**
phungductung 0:4e245f4bc8ac 90 * @}
phungductung 0:4e245f4bc8ac 91 */
phungductung 0:4e245f4bc8ac 92
phungductung 0:4e245f4bc8ac 93 /** @defgroup STM32746G_DISCOVERY_TS_Private_Defines STM32746G_DISCOVERY_TS Types Defines
phungductung 0:4e245f4bc8ac 94 * @{
phungductung 0:4e245f4bc8ac 95 */
phungductung 0:4e245f4bc8ac 96 /**
phungductung 0:4e245f4bc8ac 97 * @}
phungductung 0:4e245f4bc8ac 98 */
phungductung 0:4e245f4bc8ac 99
phungductung 0:4e245f4bc8ac 100 /** @defgroup STM32746G_DISCOVERY_TS_Private_Macros STM32746G_DISCOVERY_TS Private Macros
phungductung 0:4e245f4bc8ac 101 * @{
phungductung 0:4e245f4bc8ac 102 */
phungductung 0:4e245f4bc8ac 103 /**
phungductung 0:4e245f4bc8ac 104 * @}
phungductung 0:4e245f4bc8ac 105 */
phungductung 0:4e245f4bc8ac 106
phungductung 0:4e245f4bc8ac 107 /** @defgroup STM32746G_DISCOVERY_TS_Imported_Variables STM32746G_DISCOVERY_TS Imported Variables
phungductung 0:4e245f4bc8ac 108 * @{
phungductung 0:4e245f4bc8ac 109 */
phungductung 0:4e245f4bc8ac 110 /**
phungductung 0:4e245f4bc8ac 111 * @}
phungductung 0:4e245f4bc8ac 112 */
phungductung 0:4e245f4bc8ac 113
phungductung 0:4e245f4bc8ac 114 /** @defgroup STM32746G_DISCOVERY_TS_Private_Variables STM32746G_DISCOVERY_TS Private Variables
phungductung 0:4e245f4bc8ac 115 * @{
phungductung 0:4e245f4bc8ac 116 */
phungductung 0:4e245f4bc8ac 117 static TS_DrvTypeDef *tsDriver;
phungductung 0:4e245f4bc8ac 118 static uint16_t tsXBoundary, tsYBoundary;
phungductung 0:4e245f4bc8ac 119 static uint8_t tsOrientation;
phungductung 0:4e245f4bc8ac 120 static uint8_t I2cAddress;
phungductung 0:4e245f4bc8ac 121 /**
phungductung 0:4e245f4bc8ac 122 * @}
phungductung 0:4e245f4bc8ac 123 */
phungductung 0:4e245f4bc8ac 124
phungductung 0:4e245f4bc8ac 125 /** @defgroup STM32746G_DISCOVERY_TS_Private_Function_Prototypes STM32746G_DISCOVERY_TS Private Function Prototypes
phungductung 0:4e245f4bc8ac 126 * @{
phungductung 0:4e245f4bc8ac 127 */
phungductung 0:4e245f4bc8ac 128 /**
phungductung 0:4e245f4bc8ac 129 * @}
phungductung 0:4e245f4bc8ac 130 */
phungductung 0:4e245f4bc8ac 131
phungductung 0:4e245f4bc8ac 132 /** @defgroup STM32746G_DISCOVERY_TS_Exported_Functions STM32746G_DISCOVERY_TS Exported Functions
phungductung 0:4e245f4bc8ac 133 * @{
phungductung 0:4e245f4bc8ac 134 */
phungductung 0:4e245f4bc8ac 135
phungductung 0:4e245f4bc8ac 136 /**
phungductung 0:4e245f4bc8ac 137 * @brief Initializes and configures the touch screen functionalities and
phungductung 0:4e245f4bc8ac 138 * configures all necessary hardware resources (GPIOs, I2C, clocks..).
phungductung 0:4e245f4bc8ac 139 * @param ts_SizeX: Maximum X size of the TS area on LCD
phungductung 0:4e245f4bc8ac 140 * @param ts_SizeY: Maximum Y size of the TS area on LCD
phungductung 0:4e245f4bc8ac 141 * @retval TS_OK if all initializations are OK. Other value if error.
phungductung 0:4e245f4bc8ac 142 */
phungductung 0:4e245f4bc8ac 143 uint8_t BSP_TS_Init(uint16_t ts_SizeX, uint16_t ts_SizeY)
phungductung 0:4e245f4bc8ac 144 {
phungductung 0:4e245f4bc8ac 145 uint8_t status = TS_OK;
phungductung 0:4e245f4bc8ac 146 tsXBoundary = ts_SizeX;
phungductung 0:4e245f4bc8ac 147 tsYBoundary = ts_SizeY;
phungductung 0:4e245f4bc8ac 148
phungductung 0:4e245f4bc8ac 149 /* Read ID and verify if the touch screen driver is ready */
phungductung 0:4e245f4bc8ac 150 ft5336_ts_drv.Init(TS_I2C_ADDRESS);
phungductung 0:4e245f4bc8ac 151 if(ft5336_ts_drv.ReadID(TS_I2C_ADDRESS) == FT5336_ID_VALUE)
phungductung 0:4e245f4bc8ac 152 {
phungductung 0:4e245f4bc8ac 153 /* Initialize the TS driver structure */
phungductung 0:4e245f4bc8ac 154 tsDriver = &ft5336_ts_drv;
phungductung 0:4e245f4bc8ac 155 I2cAddress = TS_I2C_ADDRESS;
phungductung 0:4e245f4bc8ac 156 tsOrientation = TS_SWAP_XY;
phungductung 0:4e245f4bc8ac 157
phungductung 0:4e245f4bc8ac 158 /* Initialize the TS driver */
phungductung 0:4e245f4bc8ac 159 tsDriver->Start(I2cAddress);
phungductung 0:4e245f4bc8ac 160 }
phungductung 0:4e245f4bc8ac 161 else
phungductung 0:4e245f4bc8ac 162 {
phungductung 0:4e245f4bc8ac 163 status = TS_DEVICE_NOT_FOUND;
phungductung 0:4e245f4bc8ac 164 }
phungductung 0:4e245f4bc8ac 165
phungductung 0:4e245f4bc8ac 166 return status;
phungductung 0:4e245f4bc8ac 167 }
phungductung 0:4e245f4bc8ac 168
phungductung 0:4e245f4bc8ac 169 /**
phungductung 0:4e245f4bc8ac 170 * @brief DeInitializes the TouchScreen.
phungductung 0:4e245f4bc8ac 171 * @retval TS state
phungductung 0:4e245f4bc8ac 172 */
phungductung 0:4e245f4bc8ac 173 uint8_t BSP_TS_DeInit(void)
phungductung 0:4e245f4bc8ac 174 {
phungductung 0:4e245f4bc8ac 175 /* Actually ts_driver does not provide a DeInit function */
phungductung 0:4e245f4bc8ac 176 return TS_OK;
phungductung 0:4e245f4bc8ac 177 }
phungductung 0:4e245f4bc8ac 178
phungductung 0:4e245f4bc8ac 179 /**
phungductung 0:4e245f4bc8ac 180 * @brief Configures and enables the touch screen interrupts.
phungductung 0:4e245f4bc8ac 181 * @retval TS_OK if all initializations are OK. Other value if error.
phungductung 0:4e245f4bc8ac 182 */
phungductung 0:4e245f4bc8ac 183 uint8_t BSP_TS_ITConfig(void)
phungductung 0:4e245f4bc8ac 184 {
phungductung 0:4e245f4bc8ac 185 GPIO_InitTypeDef gpio_init_structure;
phungductung 0:4e245f4bc8ac 186
phungductung 0:4e245f4bc8ac 187 /* Configure Interrupt mode for SD detection pin */
phungductung 0:4e245f4bc8ac 188 gpio_init_structure.Pin = TS_INT_PIN;
phungductung 0:4e245f4bc8ac 189 gpio_init_structure.Pull = GPIO_NOPULL;
phungductung 0:4e245f4bc8ac 190 gpio_init_structure.Speed = GPIO_SPEED_FAST;
phungductung 0:4e245f4bc8ac 191 gpio_init_structure.Mode = GPIO_MODE_IT_RISING;
phungductung 0:4e245f4bc8ac 192 HAL_GPIO_Init(TS_INT_GPIO_PORT, &gpio_init_structure);
phungductung 0:4e245f4bc8ac 193
phungductung 0:4e245f4bc8ac 194 /* Enable and set Touch screen EXTI Interrupt to the lowest priority */
phungductung 0:4e245f4bc8ac 195 HAL_NVIC_SetPriority((IRQn_Type)(TS_INT_EXTI_IRQn), 0x0F, 0x00);
phungductung 0:4e245f4bc8ac 196 HAL_NVIC_EnableIRQ((IRQn_Type)(TS_INT_EXTI_IRQn));
phungductung 0:4e245f4bc8ac 197
phungductung 0:4e245f4bc8ac 198 /* Enable the TS ITs */
phungductung 0:4e245f4bc8ac 199 tsDriver->EnableIT(I2cAddress);
phungductung 0:4e245f4bc8ac 200
phungductung 0:4e245f4bc8ac 201 return TS_OK;
phungductung 0:4e245f4bc8ac 202 }
phungductung 0:4e245f4bc8ac 203
phungductung 0:4e245f4bc8ac 204 /**
phungductung 0:4e245f4bc8ac 205 * @brief Gets the touch screen interrupt status.
phungductung 0:4e245f4bc8ac 206 * @retval TS_OK if all initializations are OK. Other value if error.
phungductung 0:4e245f4bc8ac 207 */
phungductung 0:4e245f4bc8ac 208 uint8_t BSP_TS_ITGetStatus(void)
phungductung 0:4e245f4bc8ac 209 {
phungductung 0:4e245f4bc8ac 210 /* Return the TS IT status */
phungductung 0:4e245f4bc8ac 211 return (tsDriver->GetITStatus(I2cAddress));
phungductung 0:4e245f4bc8ac 212 }
phungductung 0:4e245f4bc8ac 213
phungductung 0:4e245f4bc8ac 214 /**
phungductung 0:4e245f4bc8ac 215 * @brief Returns status and positions of the touch screen.
phungductung 0:4e245f4bc8ac 216 * @param TS_State: Pointer to touch screen current state structure
phungductung 0:4e245f4bc8ac 217 * @retval TS_OK if all initializations are OK. Other value if error.
phungductung 0:4e245f4bc8ac 218 */
phungductung 0:4e245f4bc8ac 219 uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State)
phungductung 0:4e245f4bc8ac 220 {
phungductung 0:4e245f4bc8ac 221 static uint32_t _x[TS_MAX_NB_TOUCH] = {0, 0};
phungductung 0:4e245f4bc8ac 222 static uint32_t _y[TS_MAX_NB_TOUCH] = {0, 0};
phungductung 0:4e245f4bc8ac 223 uint8_t ts_status = TS_OK;
phungductung 0:4e245f4bc8ac 224 uint16_t x[TS_MAX_NB_TOUCH];
phungductung 0:4e245f4bc8ac 225 uint16_t y[TS_MAX_NB_TOUCH];
phungductung 0:4e245f4bc8ac 226 uint16_t brute_x[TS_MAX_NB_TOUCH];
phungductung 0:4e245f4bc8ac 227 uint16_t brute_y[TS_MAX_NB_TOUCH];
phungductung 0:4e245f4bc8ac 228 uint16_t x_diff;
phungductung 0:4e245f4bc8ac 229 uint16_t y_diff;
phungductung 0:4e245f4bc8ac 230 uint32_t index;
phungductung 0:4e245f4bc8ac 231 #if (TS_MULTI_TOUCH_SUPPORTED == 1)
phungductung 0:4e245f4bc8ac 232 uint32_t weight = 0;
phungductung 0:4e245f4bc8ac 233 uint32_t area = 0;
phungductung 0:4e245f4bc8ac 234 uint32_t event = 0;
phungductung 0:4e245f4bc8ac 235 #endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
phungductung 0:4e245f4bc8ac 236
phungductung 0:4e245f4bc8ac 237 /* Check and update the number of touches active detected */
phungductung 0:4e245f4bc8ac 238 TS_State->touchDetected = tsDriver->DetectTouch(I2cAddress);
phungductung 0:4e245f4bc8ac 239
phungductung 0:4e245f4bc8ac 240 if(TS_State->touchDetected)
phungductung 0:4e245f4bc8ac 241 {
phungductung 0:4e245f4bc8ac 242 for(index=0; index < TS_State->touchDetected; index++)
phungductung 0:4e245f4bc8ac 243 {
phungductung 0:4e245f4bc8ac 244 /* Get each touch coordinates */
phungductung 0:4e245f4bc8ac 245 tsDriver->GetXY(I2cAddress, &(brute_x[index]), &(brute_y[index]));
phungductung 0:4e245f4bc8ac 246
phungductung 0:4e245f4bc8ac 247 if(tsOrientation == TS_SWAP_NONE)
phungductung 0:4e245f4bc8ac 248 {
phungductung 0:4e245f4bc8ac 249 x[index] = brute_x[index];
phungductung 0:4e245f4bc8ac 250 y[index] = brute_y[index];
phungductung 0:4e245f4bc8ac 251 }
phungductung 0:4e245f4bc8ac 252
phungductung 0:4e245f4bc8ac 253 if(tsOrientation & TS_SWAP_X)
phungductung 0:4e245f4bc8ac 254 {
phungductung 0:4e245f4bc8ac 255 x[index] = 4096 - brute_x[index];
phungductung 0:4e245f4bc8ac 256 }
phungductung 0:4e245f4bc8ac 257
phungductung 0:4e245f4bc8ac 258 if(tsOrientation & TS_SWAP_Y)
phungductung 0:4e245f4bc8ac 259 {
phungductung 0:4e245f4bc8ac 260 y[index] = 4096 - brute_y[index];
phungductung 0:4e245f4bc8ac 261 }
phungductung 0:4e245f4bc8ac 262
phungductung 0:4e245f4bc8ac 263 if(tsOrientation & TS_SWAP_XY)
phungductung 0:4e245f4bc8ac 264 {
phungductung 0:4e245f4bc8ac 265 y[index] = brute_x[index];
phungductung 0:4e245f4bc8ac 266 x[index] = brute_y[index];
phungductung 0:4e245f4bc8ac 267 }
phungductung 0:4e245f4bc8ac 268
phungductung 0:4e245f4bc8ac 269 x_diff = x[index] > _x[index]? (x[index] - _x[index]): (_x[index] - x[index]);
phungductung 0:4e245f4bc8ac 270 y_diff = y[index] > _y[index]? (y[index] - _y[index]): (_y[index] - y[index]);
phungductung 0:4e245f4bc8ac 271
phungductung 0:4e245f4bc8ac 272 if ((x_diff + y_diff) > 5)
phungductung 0:4e245f4bc8ac 273 {
phungductung 0:4e245f4bc8ac 274 _x[index] = x[index];
phungductung 0:4e245f4bc8ac 275 _y[index] = y[index];
phungductung 0:4e245f4bc8ac 276 }
phungductung 0:4e245f4bc8ac 277
phungductung 0:4e245f4bc8ac 278 if(I2cAddress == FT5336_I2C_SLAVE_ADDRESS)
phungductung 0:4e245f4bc8ac 279 {
phungductung 0:4e245f4bc8ac 280 TS_State->touchX[index] = x[index];
phungductung 0:4e245f4bc8ac 281 TS_State->touchY[index] = y[index];
phungductung 0:4e245f4bc8ac 282 }
phungductung 0:4e245f4bc8ac 283 else
phungductung 0:4e245f4bc8ac 284 {
phungductung 0:4e245f4bc8ac 285 /* 2^12 = 4096 : indexes are expressed on a dynamic of 4096 */
phungductung 0:4e245f4bc8ac 286 TS_State->touchX[index] = (tsXBoundary * _x[index]) >> 12;
phungductung 0:4e245f4bc8ac 287 TS_State->touchY[index] = (tsYBoundary * _y[index]) >> 12;
phungductung 0:4e245f4bc8ac 288 }
phungductung 0:4e245f4bc8ac 289
phungductung 0:4e245f4bc8ac 290 #if (TS_MULTI_TOUCH_SUPPORTED == 1)
phungductung 0:4e245f4bc8ac 291
phungductung 0:4e245f4bc8ac 292 /* Get touch info related to the current touch */
phungductung 0:4e245f4bc8ac 293 ft5336_TS_GetTouchInfo(I2cAddress, index, &weight, &area, &event);
phungductung 0:4e245f4bc8ac 294
phungductung 0:4e245f4bc8ac 295 /* Update TS_State structure */
phungductung 0:4e245f4bc8ac 296 TS_State->touchWeight[index] = weight;
phungductung 0:4e245f4bc8ac 297 TS_State->touchArea[index] = area;
phungductung 0:4e245f4bc8ac 298
phungductung 0:4e245f4bc8ac 299 /* Remap touch event */
phungductung 0:4e245f4bc8ac 300 switch(event)
phungductung 0:4e245f4bc8ac 301 {
phungductung 0:4e245f4bc8ac 302 case FT5336_TOUCH_EVT_FLAG_PRESS_DOWN :
phungductung 0:4e245f4bc8ac 303 TS_State->touchEventId[index] = TOUCH_EVENT_PRESS_DOWN;
phungductung 0:4e245f4bc8ac 304 break;
phungductung 0:4e245f4bc8ac 305 case FT5336_TOUCH_EVT_FLAG_LIFT_UP :
phungductung 0:4e245f4bc8ac 306 TS_State->touchEventId[index] = TOUCH_EVENT_LIFT_UP;
phungductung 0:4e245f4bc8ac 307 break;
phungductung 0:4e245f4bc8ac 308 case FT5336_TOUCH_EVT_FLAG_CONTACT :
phungductung 0:4e245f4bc8ac 309 TS_State->touchEventId[index] = TOUCH_EVENT_CONTACT;
phungductung 0:4e245f4bc8ac 310 break;
phungductung 0:4e245f4bc8ac 311 case FT5336_TOUCH_EVT_FLAG_NO_EVENT :
phungductung 0:4e245f4bc8ac 312 TS_State->touchEventId[index] = TOUCH_EVENT_NO_EVT;
phungductung 0:4e245f4bc8ac 313 break;
phungductung 0:4e245f4bc8ac 314 default :
phungductung 0:4e245f4bc8ac 315 ts_status = TS_ERROR;
phungductung 0:4e245f4bc8ac 316 break;
phungductung 0:4e245f4bc8ac 317 } /* of switch(event) */
phungductung 0:4e245f4bc8ac 318
phungductung 0:4e245f4bc8ac 319 #endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
phungductung 0:4e245f4bc8ac 320
phungductung 0:4e245f4bc8ac 321 } /* of for(index=0; index < TS_State->touchDetected; index++) */
phungductung 0:4e245f4bc8ac 322
phungductung 0:4e245f4bc8ac 323 #if (TS_MULTI_TOUCH_SUPPORTED == 1)
phungductung 0:4e245f4bc8ac 324 /* Get gesture Id */
phungductung 0:4e245f4bc8ac 325 ts_status = BSP_TS_Get_GestureId(TS_State);
phungductung 0:4e245f4bc8ac 326 #endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
phungductung 0:4e245f4bc8ac 327
phungductung 0:4e245f4bc8ac 328 } /* end of if(TS_State->touchDetected != 0) */
phungductung 0:4e245f4bc8ac 329
phungductung 0:4e245f4bc8ac 330 return (ts_status);
phungductung 0:4e245f4bc8ac 331 }
phungductung 0:4e245f4bc8ac 332
phungductung 0:4e245f4bc8ac 333 #if (TS_MULTI_TOUCH_SUPPORTED == 1)
phungductung 0:4e245f4bc8ac 334 /**
phungductung 0:4e245f4bc8ac 335 * @brief Update gesture Id following a touch detected.
phungductung 0:4e245f4bc8ac 336 * @param TS_State: Pointer to touch screen current state structure
phungductung 0:4e245f4bc8ac 337 * @retval TS_OK if all initializations are OK. Other value if error.
phungductung 0:4e245f4bc8ac 338 */
phungductung 0:4e245f4bc8ac 339 uint8_t BSP_TS_Get_GestureId(TS_StateTypeDef *TS_State)
phungductung 0:4e245f4bc8ac 340 {
phungductung 0:4e245f4bc8ac 341 uint32_t gestureId = 0;
phungductung 0:4e245f4bc8ac 342 uint8_t ts_status = TS_OK;
phungductung 0:4e245f4bc8ac 343
phungductung 0:4e245f4bc8ac 344 /* Get gesture Id */
phungductung 0:4e245f4bc8ac 345 ft5336_TS_GetGestureID(I2cAddress, &gestureId);
phungductung 0:4e245f4bc8ac 346
phungductung 0:4e245f4bc8ac 347 /* Remap gesture Id to a TS_GestureIdTypeDef value */
phungductung 0:4e245f4bc8ac 348 switch(gestureId)
phungductung 0:4e245f4bc8ac 349 {
phungductung 0:4e245f4bc8ac 350 case FT5336_GEST_ID_NO_GESTURE :
phungductung 0:4e245f4bc8ac 351 TS_State->gestureId = GEST_ID_NO_GESTURE;
phungductung 0:4e245f4bc8ac 352 break;
phungductung 0:4e245f4bc8ac 353 case FT5336_GEST_ID_MOVE_UP :
phungductung 0:4e245f4bc8ac 354 TS_State->gestureId = GEST_ID_MOVE_UP;
phungductung 0:4e245f4bc8ac 355 break;
phungductung 0:4e245f4bc8ac 356 case FT5336_GEST_ID_MOVE_RIGHT :
phungductung 0:4e245f4bc8ac 357 TS_State->gestureId = GEST_ID_MOVE_RIGHT;
phungductung 0:4e245f4bc8ac 358 break;
phungductung 0:4e245f4bc8ac 359 case FT5336_GEST_ID_MOVE_DOWN :
phungductung 0:4e245f4bc8ac 360 TS_State->gestureId = GEST_ID_MOVE_DOWN;
phungductung 0:4e245f4bc8ac 361 break;
phungductung 0:4e245f4bc8ac 362 case FT5336_GEST_ID_MOVE_LEFT :
phungductung 0:4e245f4bc8ac 363 TS_State->gestureId = GEST_ID_MOVE_LEFT;
phungductung 0:4e245f4bc8ac 364 break;
phungductung 0:4e245f4bc8ac 365 case FT5336_GEST_ID_ZOOM_IN :
phungductung 0:4e245f4bc8ac 366 TS_State->gestureId = GEST_ID_ZOOM_IN;
phungductung 0:4e245f4bc8ac 367 break;
phungductung 0:4e245f4bc8ac 368 case FT5336_GEST_ID_ZOOM_OUT :
phungductung 0:4e245f4bc8ac 369 TS_State->gestureId = GEST_ID_ZOOM_OUT;
phungductung 0:4e245f4bc8ac 370 break;
phungductung 0:4e245f4bc8ac 371 default :
phungductung 0:4e245f4bc8ac 372 ts_status = TS_ERROR;
phungductung 0:4e245f4bc8ac 373 break;
phungductung 0:4e245f4bc8ac 374 } /* of switch(gestureId) */
phungductung 0:4e245f4bc8ac 375
phungductung 0:4e245f4bc8ac 376 return(ts_status);
phungductung 0:4e245f4bc8ac 377 }
phungductung 0:4e245f4bc8ac 378 #endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
phungductung 0:4e245f4bc8ac 379
phungductung 0:4e245f4bc8ac 380 /**
phungductung 0:4e245f4bc8ac 381 * @brief Clears all touch screen interrupts.
phungductung 0:4e245f4bc8ac 382 */
phungductung 0:4e245f4bc8ac 383 void BSP_TS_ITClear(void)
phungductung 0:4e245f4bc8ac 384 {
phungductung 0:4e245f4bc8ac 385 /* Clear TS IT pending bits */
phungductung 0:4e245f4bc8ac 386 tsDriver->ClearIT(I2cAddress);
phungductung 0:4e245f4bc8ac 387 }
phungductung 0:4e245f4bc8ac 388
phungductung 0:4e245f4bc8ac 389
phungductung 0:4e245f4bc8ac 390 /** @defgroup STM32756G_DISCOVERY_TS_Private_Functions TS Private Functions
phungductung 0:4e245f4bc8ac 391 * @{
phungductung 0:4e245f4bc8ac 392 */
phungductung 0:4e245f4bc8ac 393
phungductung 0:4e245f4bc8ac 394
phungductung 0:4e245f4bc8ac 395 /**
phungductung 0:4e245f4bc8ac 396 * @brief Function used to reset all touch data before a new acquisition
phungductung 0:4e245f4bc8ac 397 * of touch information.
phungductung 0:4e245f4bc8ac 398 * @param TS_State: Pointer to touch screen current state structure
phungductung 0:4e245f4bc8ac 399 * @retval TS_OK if OK, TE_ERROR if problem found.
phungductung 0:4e245f4bc8ac 400 */
phungductung 0:4e245f4bc8ac 401 uint8_t BSP_TS_ResetTouchData(TS_StateTypeDef *TS_State)
phungductung 0:4e245f4bc8ac 402 {
phungductung 0:4e245f4bc8ac 403 uint8_t ts_status = TS_ERROR;
phungductung 0:4e245f4bc8ac 404 uint32_t index;
phungductung 0:4e245f4bc8ac 405
phungductung 0:4e245f4bc8ac 406 if (TS_State != (TS_StateTypeDef *)NULL)
phungductung 0:4e245f4bc8ac 407 {
phungductung 0:4e245f4bc8ac 408 TS_State->gestureId = GEST_ID_NO_GESTURE;
phungductung 0:4e245f4bc8ac 409 TS_State->touchDetected = 0;
phungductung 0:4e245f4bc8ac 410
phungductung 0:4e245f4bc8ac 411 for(index = 0; index < TS_MAX_NB_TOUCH; index++)
phungductung 0:4e245f4bc8ac 412 {
phungductung 0:4e245f4bc8ac 413 TS_State->touchX[index] = 0;
phungductung 0:4e245f4bc8ac 414 TS_State->touchY[index] = 0;
phungductung 0:4e245f4bc8ac 415 TS_State->touchArea[index] = 0;
phungductung 0:4e245f4bc8ac 416 TS_State->touchEventId[index] = TOUCH_EVENT_NO_EVT;
phungductung 0:4e245f4bc8ac 417 TS_State->touchWeight[index] = 0;
phungductung 0:4e245f4bc8ac 418 }
phungductung 0:4e245f4bc8ac 419
phungductung 0:4e245f4bc8ac 420 ts_status = TS_OK;
phungductung 0:4e245f4bc8ac 421
phungductung 0:4e245f4bc8ac 422 } /* of if (TS_State != (TS_StateTypeDef *)NULL) */
phungductung 0:4e245f4bc8ac 423
phungductung 0:4e245f4bc8ac 424 return (ts_status);
phungductung 0:4e245f4bc8ac 425 }
phungductung 0:4e245f4bc8ac 426
phungductung 0:4e245f4bc8ac 427 /**
phungductung 0:4e245f4bc8ac 428 * @}
phungductung 0:4e245f4bc8ac 429 */
phungductung 0:4e245f4bc8ac 430
phungductung 0:4e245f4bc8ac 431 /**
phungductung 0:4e245f4bc8ac 432 * @}
phungductung 0:4e245f4bc8ac 433 */
phungductung 0:4e245f4bc8ac 434
phungductung 0:4e245f4bc8ac 435 /**
phungductung 0:4e245f4bc8ac 436 * @}
phungductung 0:4e245f4bc8ac 437 */
phungductung 0:4e245f4bc8ac 438
phungductung 0:4e245f4bc8ac 439 /**
phungductung 0:4e245f4bc8ac 440 * @}
phungductung 0:4e245f4bc8ac 441 */
phungductung 0:4e245f4bc8ac 442
phungductung 0:4e245f4bc8ac 443 /**
phungductung 0:4e245f4bc8ac 444 * @}
phungductung 0:4e245f4bc8ac 445 */
phungductung 0:4e245f4bc8ac 446
phungductung 0:4e245f4bc8ac 447 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/