STM32F469NI Discovery board drivers

Dependents:   DISCO-F469NI_LCDTS_GUI_demo Configurable_Robots DISCO-F469NI_LCD_demo DISCO-F469NI_SD_demo ... more

Committer:
aa6164
Date:
Wed Jun 09 12:45:23 2021 +0000
Revision:
4:27609b3a44ed
Parent:
3:3cdfcc4f7c9d
Updated wait_ms() to thread_sleep_for() for Mbed OS 6+

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jerome Coutant 2:123b894b49dd 1 /**
Jerome Coutant 2:123b894b49dd 2 ******************************************************************************
Jerome Coutant 2:123b894b49dd 3 * @file stm32469i_discovery_ts.c
Jerome Coutant 2:123b894b49dd 4 * @author MCD Application Team
Jerome Coutant 2:123b894b49dd 5 * @brief This file provides a set of functions needed to manage the Touch
Jerome Coutant 2:123b894b49dd 6 * Screen on STM32469I-Discovery board.
Jerome Coutant 2:123b894b49dd 7 ******************************************************************************
Jerome Coutant 2:123b894b49dd 8 * @attention
Jerome Coutant 2:123b894b49dd 9 *
Jerome Coutant 2:123b894b49dd 10 * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
Jerome Coutant 2:123b894b49dd 11 *
Jerome Coutant 2:123b894b49dd 12 * Redistribution and use in source and binary forms, with or without modification,
Jerome Coutant 2:123b894b49dd 13 * are permitted provided that the following conditions are met:
Jerome Coutant 2:123b894b49dd 14 * 1. Redistributions of source code must retain the above copyright notice,
Jerome Coutant 2:123b894b49dd 15 * this list of conditions and the following disclaimer.
Jerome Coutant 2:123b894b49dd 16 * 2. Redistributions in binary form must reproduce the above copyright notice,
Jerome Coutant 2:123b894b49dd 17 * this list of conditions and the following disclaimer in the documentation
Jerome Coutant 2:123b894b49dd 18 * and/or other materials provided with the distribution.
Jerome Coutant 2:123b894b49dd 19 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Jerome Coutant 2:123b894b49dd 20 * may be used to endorse or promote products derived from this software
Jerome Coutant 2:123b894b49dd 21 * without specific prior written permission.
Jerome Coutant 2:123b894b49dd 22 *
Jerome Coutant 2:123b894b49dd 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Jerome Coutant 2:123b894b49dd 24 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Jerome Coutant 2:123b894b49dd 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Jerome Coutant 2:123b894b49dd 26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Jerome Coutant 2:123b894b49dd 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Jerome Coutant 2:123b894b49dd 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Jerome Coutant 2:123b894b49dd 29 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Jerome Coutant 2:123b894b49dd 30 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Jerome Coutant 2:123b894b49dd 31 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Jerome Coutant 2:123b894b49dd 32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Jerome Coutant 2:123b894b49dd 33 *
Jerome Coutant 2:123b894b49dd 34 ******************************************************************************
Jerome Coutant 2:123b894b49dd 35 */
Jerome Coutant 2:123b894b49dd 36
Jerome Coutant 2:123b894b49dd 37 /* File Info : -----------------------------------------------------------------
Jerome Coutant 2:123b894b49dd 38 User NOTES
Jerome Coutant 2:123b894b49dd 39 1. How To use this driver:
Jerome Coutant 2:123b894b49dd 40 --------------------------
Jerome Coutant 2:123b894b49dd 41 - This driver is used to drive the touch screen module of the STM32469I-Discovery
Jerome Coutant 2:123b894b49dd 42 board on the K.O.D Optica Technology 480x800 TFT-LCD mounted on
Jerome Coutant 2:123b894b49dd 43 MB1189 board. The touch screen driver IC inside the K.O.D module KM-040TMP-02
Jerome Coutant 2:123b894b49dd 44 is a FT6206 by Focal Tech.
Jerome Coutant 2:123b894b49dd 45
Jerome Coutant 2:123b894b49dd 46 2. Driver description:
Jerome Coutant 2:123b894b49dd 47 ---------------------
Jerome Coutant 2:123b894b49dd 48 + Initialization steps:
Jerome Coutant 2:123b894b49dd 49 o Initialize the TS module using the BSP_TS_Init() function. This
Jerome Coutant 2:123b894b49dd 50 function includes the MSP layer hardware resources initialization and the
Jerome Coutant 2:123b894b49dd 51 communication layer configuration to start the TS use. The LCD size properties
Jerome Coutant 2:123b894b49dd 52 (x and y) are passed as parameters.
Jerome Coutant 2:123b894b49dd 53 o If TS interrupt mode is desired, you must configure the TS interrupt mode
Jerome Coutant 2:123b894b49dd 54 by calling the function BSP_TS_ITConfig(). The TS interrupt mode is generated
Jerome Coutant 2:123b894b49dd 55 as an external interrupt whenever a touch is detected.
Jerome Coutant 2:123b894b49dd 56 The interrupt mode internally uses the IO functionalities driver driven by
Jerome Coutant 2:123b894b49dd 57 the IO expander, to configure the IT line.
Jerome Coutant 2:123b894b49dd 58
Jerome Coutant 2:123b894b49dd 59 + Touch screen use
Jerome Coutant 2:123b894b49dd 60 o The touch screen state is captured whenever the function BSP_TS_GetState() is
Jerome Coutant 2:123b894b49dd 61 used. This function returns information about the last LCD touch occurred
Jerome Coutant 2:123b894b49dd 62 in the TS_StateTypeDef structure.
Jerome Coutant 2:123b894b49dd 63 o If TS interrupt mode is used, the function BSP_TS_ITGetStatus() is needed to get
Jerome Coutant 2:123b894b49dd 64 the interrupt status. To clear the IT pending bits, you should call the
Jerome Coutant 2:123b894b49dd 65 function BSP_TS_ITClear().
Jerome Coutant 2:123b894b49dd 66 o The IT is handled using the corresponding external interrupt IRQ handler,
Jerome Coutant 2:123b894b49dd 67 the user IT callback treatment is implemented on the same external interrupt
Jerome Coutant 2:123b894b49dd 68 callback.
Jerome Coutant 2:123b894b49dd 69
Jerome Coutant 2:123b894b49dd 70 ------------------------------------------------------------------------------*/
Jerome Coutant 2:123b894b49dd 71
Jerome Coutant 2:123b894b49dd 72 /* Includes ------------------------------------------------------------------*/
Jerome Coutant 2:123b894b49dd 73 #include "stm32469i_discovery_ts.h"
Jerome Coutant 2:123b894b49dd 74
Jerome Coutant 2:123b894b49dd 75 /** @addtogroup BSP
Jerome Coutant 2:123b894b49dd 76 * @{
Jerome Coutant 2:123b894b49dd 77 */
Jerome Coutant 2:123b894b49dd 78
Jerome Coutant 2:123b894b49dd 79 /** @addtogroup STM32469I_Discovery
Jerome Coutant 2:123b894b49dd 80 * @{
Jerome Coutant 2:123b894b49dd 81 */
Jerome Coutant 2:123b894b49dd 82
Jerome Coutant 2:123b894b49dd 83 /** @defgroup STM32469I-Discovery_TS STM32469I Discovery TS
Jerome Coutant 2:123b894b49dd 84 * @{
Jerome Coutant 2:123b894b49dd 85 */
Jerome Coutant 2:123b894b49dd 86
Jerome Coutant 2:123b894b49dd 87 /** @defgroup STM32469I-Discovery_TS_Private_Types_Definitions STM32469I Discovery TS Private Types Definitions
Jerome Coutant 2:123b894b49dd 88 * @{
Jerome Coutant 2:123b894b49dd 89 */
Jerome Coutant 2:123b894b49dd 90 /**
Jerome Coutant 2:123b894b49dd 91 * @}
Jerome Coutant 2:123b894b49dd 92 */
Jerome Coutant 2:123b894b49dd 93
Jerome Coutant 2:123b894b49dd 94 /** @defgroup STM32469I-Discovery_TS_Private_Defines STM32469I Discovery TS Private Types Defines
Jerome Coutant 2:123b894b49dd 95 * @{
Jerome Coutant 2:123b894b49dd 96 */
Jerome Coutant 2:123b894b49dd 97 /**
Jerome Coutant 2:123b894b49dd 98 * @}
Jerome Coutant 2:123b894b49dd 99 */
Jerome Coutant 2:123b894b49dd 100
Jerome Coutant 2:123b894b49dd 101 /** @defgroup STM32469I-Discovery_TS_Private_Macros STM32469I Discovery TS Private Macros
Jerome Coutant 2:123b894b49dd 102 * @{
Jerome Coutant 2:123b894b49dd 103 */
Jerome Coutant 2:123b894b49dd 104 /**
Jerome Coutant 2:123b894b49dd 105 * @}
Jerome Coutant 2:123b894b49dd 106 */
Jerome Coutant 2:123b894b49dd 107
Jerome Coutant 2:123b894b49dd 108 /** @defgroup STM32469I-Discovery_TS_Imported_Variables STM32469I Discovery TS Imported Variables
Jerome Coutant 2:123b894b49dd 109 * @{
Jerome Coutant 2:123b894b49dd 110 */
Jerome Coutant 2:123b894b49dd 111 /**
Jerome Coutant 2:123b894b49dd 112 * @}
Jerome Coutant 2:123b894b49dd 113 */
Jerome Coutant 2:123b894b49dd 114
Jerome Coutant 2:123b894b49dd 115 /** @defgroup STM32469I-Discovery_TS_Private_Variables STM32469I Discovery TS Private Variables
Jerome Coutant 2:123b894b49dd 116 * @{
Jerome Coutant 2:123b894b49dd 117 */
Jerome Coutant 2:123b894b49dd 118 static TS_DrvTypeDef *ts_driver;
Jerome Coutant 2:123b894b49dd 119 static uint8_t ts_orientation;
Jerome Coutant 2:123b894b49dd 120 uint8_t I2C_Address = 0;
Jerome Coutant 2:123b894b49dd 121
Jerome Coutant 2:123b894b49dd 122 /* Table for touchscreen event information display on LCD : table indexed on enum @ref TS_TouchEventTypeDef information */
Jerome Coutant 2:123b894b49dd 123 char * ts_event_string_tab[TOUCH_EVENT_NB_MAX] = { "None",
Jerome Coutant 2:123b894b49dd 124 "Press down",
Jerome Coutant 2:123b894b49dd 125 "Lift up",
Jerome Coutant 2:123b894b49dd 126 "Contact"
Jerome Coutant 2:123b894b49dd 127 };
Jerome Coutant 2:123b894b49dd 128
Jerome Coutant 2:123b894b49dd 129 /* Table for touchscreen gesture Id information display on LCD : table indexed on enum @ref TS_GestureIdTypeDef information */
Jerome Coutant 2:123b894b49dd 130 char * ts_gesture_id_string_tab[GEST_ID_NB_MAX] = { "None",
Jerome Coutant 2:123b894b49dd 131 "Move Up",
Jerome Coutant 2:123b894b49dd 132 "Move Right",
Jerome Coutant 2:123b894b49dd 133 "Move Down",
Jerome Coutant 2:123b894b49dd 134 "Move Left",
Jerome Coutant 2:123b894b49dd 135 "Zoom In",
Jerome Coutant 2:123b894b49dd 136 "Zoom Out"
Jerome Coutant 2:123b894b49dd 137 };
Jerome Coutant 2:123b894b49dd 138
Jerome Coutant 2:123b894b49dd 139 /**
Jerome Coutant 2:123b894b49dd 140 * @}
Jerome Coutant 2:123b894b49dd 141 */
Jerome Coutant 2:123b894b49dd 142
Jerome Coutant 2:123b894b49dd 143 /** @defgroup STM32469I-Discovery_TS_Private_Function_Prototypes STM32469I Discovery TS Private Function Prototypes
Jerome Coutant 2:123b894b49dd 144 * @{
Jerome Coutant 2:123b894b49dd 145 */
Jerome Coutant 2:123b894b49dd 146
Jerome Coutant 2:123b894b49dd 147 /**
Jerome Coutant 2:123b894b49dd 148 * @}
Jerome Coutant 2:123b894b49dd 149 */
Jerome Coutant 2:123b894b49dd 150
Jerome Coutant 2:123b894b49dd 151 /** @defgroup STM32469I-Discovery_TS_Public_Functions STM32469I Discovery TS Public Functions
Jerome Coutant 2:123b894b49dd 152 * @{
Jerome Coutant 2:123b894b49dd 153 */
Jerome Coutant 2:123b894b49dd 154
Jerome Coutant 2:123b894b49dd 155 /**
Jerome Coutant 2:123b894b49dd 156 * @brief Initializes and configures the touch screen functionalities and
Jerome Coutant 2:123b894b49dd 157 * configures all necessary hardware resources (GPIOs, I2C, clocks..).
Jerome Coutant 2:123b894b49dd 158 * @param ts_SizeX : Maximum X size of the TS area on LCD
Jerome Coutant 2:123b894b49dd 159 * @param ts_SizeY : Maximum Y size of the TS area on LCD
Jerome Coutant 2:123b894b49dd 160 * @retval TS_OK if all initializations are OK. Other value if error.
Jerome Coutant 2:123b894b49dd 161 */
Jerome Coutant 2:123b894b49dd 162 uint8_t BSP_TS_Init(uint16_t ts_SizeX, uint16_t ts_SizeY)
Jerome Coutant 2:123b894b49dd 163 {
Jerome Coutant 2:123b894b49dd 164 uint8_t ts_status = TS_OK;
Jerome Coutant 2:123b894b49dd 165 uint8_t ts_id1, ts_id2 = 0;
Jerome Coutant 2:123b894b49dd 166 /* Note : I2C_Address is un-initialized here, but is not used at all in init function */
Jerome Coutant 2:123b894b49dd 167 /* but the prototype of Init() is like that in template and should be respected */
Jerome Coutant 2:123b894b49dd 168
Jerome Coutant 2:123b894b49dd 169 /* Initialize the communication channel to sensor (I2C) if necessary */
Jerome Coutant 2:123b894b49dd 170 /* that is initialization is done only once after a power up */
Jerome Coutant 2:123b894b49dd 171 ft6x06_ts_drv.Init(I2C_Address);
Jerome Coutant 2:123b894b49dd 172
Jerome Coutant 2:123b894b49dd 173 ts_id1 = ft6x06_ts_drv.ReadID(TS_I2C_ADDRESS);
Jerome Coutant 2:123b894b49dd 174 if(ts_id1 != FT6206_ID_VALUE)
Jerome Coutant 2:123b894b49dd 175 {
Jerome Coutant 2:123b894b49dd 176 ts_id2 = ft6x06_ts_drv.ReadID(TS_I2C_ADDRESS_A02);
Jerome Coutant 2:123b894b49dd 177 I2C_Address = TS_I2C_ADDRESS_A02;
Jerome Coutant 2:123b894b49dd 178 }
Jerome Coutant 2:123b894b49dd 179 else
Jerome Coutant 2:123b894b49dd 180 {
Jerome Coutant 2:123b894b49dd 181 I2C_Address = TS_I2C_ADDRESS;
Jerome Coutant 2:123b894b49dd 182 }
Jerome Coutant 2:123b894b49dd 183
Jerome Coutant 2:123b894b49dd 184 /* Scan FT6xx6 TouchScreen IC controller ID register by I2C Read */
Jerome Coutant 2:123b894b49dd 185 /* Verify this is a FT6206 or FT6336G, otherwise this is an error case */
Jerome Coutant 2:123b894b49dd 186 if((ts_id1 == FT6206_ID_VALUE) || (ts_id2 == FT6206_ID_VALUE))
Jerome Coutant 2:123b894b49dd 187 {
Jerome Coutant 2:123b894b49dd 188 /* Found FT6206 : Initialize the TS driver structure */
Jerome Coutant 2:123b894b49dd 189 ts_driver = &ft6x06_ts_drv;
Jerome Coutant 2:123b894b49dd 190
Jerome Coutant 2:123b894b49dd 191 /* Get LCD chosen orientation */
Jerome Coutant 2:123b894b49dd 192 if(ts_SizeX < ts_SizeY)
Jerome Coutant 2:123b894b49dd 193 {
Jerome Coutant 2:123b894b49dd 194 ts_orientation = TS_SWAP_NONE;
Jerome Coutant 2:123b894b49dd 195 }
Jerome Coutant 2:123b894b49dd 196 else
Jerome Coutant 2:123b894b49dd 197 {
Jerome Coutant 2:123b894b49dd 198 ts_orientation = TS_SWAP_XY | TS_SWAP_Y;
Jerome Coutant 2:123b894b49dd 199 }
Jerome Coutant 2:123b894b49dd 200
Jerome Coutant 2:123b894b49dd 201 if(ts_status == TS_OK)
Jerome Coutant 2:123b894b49dd 202 {
Jerome Coutant 2:123b894b49dd 203 /* Software reset the TouchScreen */
Jerome Coutant 2:123b894b49dd 204 ts_driver->Reset(I2C_Address);
Jerome Coutant 2:123b894b49dd 205
Jerome Coutant 2:123b894b49dd 206 /* Calibrate, Configure and Start the TouchScreen driver */
Jerome Coutant 2:123b894b49dd 207 ts_driver->Start(I2C_Address);
Jerome Coutant 2:123b894b49dd 208
Jerome Coutant 2:123b894b49dd 209 } /* of if(ts_status == TS_OK) */
Jerome Coutant 2:123b894b49dd 210 }
Jerome Coutant 2:123b894b49dd 211 else
Jerome Coutant 2:123b894b49dd 212 {
Jerome Coutant 2:123b894b49dd 213 ts_status = TS_DEVICE_NOT_FOUND;
Jerome Coutant 2:123b894b49dd 214 }
Jerome Coutant 2:123b894b49dd 215
Jerome Coutant 2:123b894b49dd 216 return (ts_status);
Jerome Coutant 2:123b894b49dd 217 }
Jerome Coutant 2:123b894b49dd 218
Jerome Coutant 2:123b894b49dd 219 /**
Jerome Coutant 2:123b894b49dd 220 * @brief Configures and enables the touch screen interrupts both at GPIO level and
Jerome Coutant 2:123b894b49dd 221 * in TouchScreen IC driver configuration.
Jerome Coutant 2:123b894b49dd 222 * @retval TS_OK if all initializations are OK.
Jerome Coutant 2:123b894b49dd 223 */
Jerome Coutant 2:123b894b49dd 224 uint8_t BSP_TS_ITConfig(void)
Jerome Coutant 2:123b894b49dd 225 {
Jerome Coutant 2:123b894b49dd 226 uint8_t ts_status = TS_OK;
Jerome Coutant 2:123b894b49dd 227 GPIO_InitTypeDef gpio_init_structure;
Jerome Coutant 2:123b894b49dd 228
Jerome Coutant 2:123b894b49dd 229 /* Msp Init of GPIO used for TS_INT pin coming from TouchScreen driver IC FT6x06 */
Jerome Coutant 2:123b894b49dd 230 /* When touchscreen is operated in interrupt mode */
Jerome Coutant 2:123b894b49dd 231 BSP_TS_INT_MspInit();
Jerome Coutant 2:123b894b49dd 232
Jerome Coutant 2:123b894b49dd 233 /* Configure Interrupt mode for TS_INT pin falling edge : when a new touch is available */
Jerome Coutant 2:123b894b49dd 234 /* TS_INT pin is active on low level on new touch available */
Jerome Coutant 2:123b894b49dd 235 gpio_init_structure.Pin = TS_INT_PIN;
Jerome Coutant 2:123b894b49dd 236 gpio_init_structure.Pull = GPIO_PULLUP;
Jerome Coutant 2:123b894b49dd 237 gpio_init_structure.Speed = GPIO_SPEED_FAST;
Jerome Coutant 2:123b894b49dd 238 gpio_init_structure.Mode = GPIO_MODE_IT_FALLING;
Jerome Coutant 2:123b894b49dd 239 HAL_GPIO_Init(TS_INT_GPIO_PORT, &gpio_init_structure);
Jerome Coutant 2:123b894b49dd 240
Jerome Coutant 2:123b894b49dd 241 /* Enable and set the TS_INT EXTI Interrupt to an intermediate priority */
Jerome Coutant 2:123b894b49dd 242 HAL_NVIC_SetPriority((IRQn_Type)(TS_INT_EXTI_IRQn), 0x05, 0x00);
Jerome Coutant 2:123b894b49dd 243 HAL_NVIC_EnableIRQ((IRQn_Type)(TS_INT_EXTI_IRQn));
Jerome Coutant 2:123b894b49dd 244
Jerome Coutant 2:123b894b49dd 245 /* Enable the TS in interrupt mode */
Jerome Coutant 2:123b894b49dd 246 /* In that case the INT output of FT6206 when new touch is available */
Jerome Coutant 2:123b894b49dd 247 /* is active on low level and directed on EXTI */
Jerome Coutant 2:123b894b49dd 248 ts_driver->EnableIT(I2C_Address);
Jerome Coutant 2:123b894b49dd 249
Jerome Coutant 2:123b894b49dd 250 return (ts_status);
Jerome Coutant 2:123b894b49dd 251 }
Jerome Coutant 2:123b894b49dd 252
Jerome Coutant 2:123b894b49dd 253 /**
Jerome Coutant 2:123b894b49dd 254 * @brief Returns status and positions of the touch screen.
Jerome Coutant 2:123b894b49dd 255 * @param TS_State: Pointer to touch screen current state structure
Jerome Coutant 2:123b894b49dd 256 * @retval TS_OK if all initializations are OK. Other value if error.
Jerome Coutant 2:123b894b49dd 257 */
Jerome Coutant 2:123b894b49dd 258 uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State)
Jerome Coutant 2:123b894b49dd 259 {
Jerome Coutant 2:123b894b49dd 260 static uint32_t _x[TS_MAX_NB_TOUCH] = {0, 0};
Jerome Coutant 2:123b894b49dd 261 static uint32_t _y[TS_MAX_NB_TOUCH] = {0, 0};
Jerome Coutant 2:123b894b49dd 262 uint8_t ts_status = TS_OK;
Jerome Coutant 2:123b894b49dd 263 uint16_t tmp;
Jerome Coutant 2:123b894b49dd 264 uint16_t Raw_x[TS_MAX_NB_TOUCH];
Jerome Coutant 2:123b894b49dd 265 uint16_t Raw_y[TS_MAX_NB_TOUCH];
Jerome Coutant 2:123b894b49dd 266 uint16_t xDiff;
Jerome Coutant 2:123b894b49dd 267 uint16_t yDiff;
Jerome Coutant 2:123b894b49dd 268 uint32_t index;
Jerome Coutant 2:123b894b49dd 269 #if (TS_MULTI_TOUCH_SUPPORTED == 1)
Jerome Coutant 2:123b894b49dd 270 uint32_t weight = 0;
Jerome Coutant 2:123b894b49dd 271 uint32_t area = 0;
Jerome Coutant 2:123b894b49dd 272 uint32_t event = 0;
Jerome Coutant 2:123b894b49dd 273 #endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
Jerome Coutant 2:123b894b49dd 274
Jerome Coutant 2:123b894b49dd 275 /* Check and update the number of touches active detected */
Jerome Coutant 2:123b894b49dd 276 TS_State->touchDetected = ts_driver->DetectTouch(I2C_Address);
Jerome Coutant 2:123b894b49dd 277 if(TS_State->touchDetected)
Jerome Coutant 2:123b894b49dd 278 {
Jerome Coutant 2:123b894b49dd 279 for(index=0; index < TS_State->touchDetected; index++)
Jerome Coutant 2:123b894b49dd 280 {
Jerome Coutant 2:123b894b49dd 281 /* Get each touch coordinates */
Jerome Coutant 2:123b894b49dd 282 ts_driver->GetXY(I2C_Address, &(Raw_x[index]), &(Raw_y[index]));
Jerome Coutant 2:123b894b49dd 283
Jerome Coutant 2:123b894b49dd 284 if(ts_orientation & TS_SWAP_XY)
Jerome Coutant 2:123b894b49dd 285 {
Jerome Coutant 2:123b894b49dd 286 tmp = Raw_x[index];
Jerome Coutant 2:123b894b49dd 287 Raw_x[index] = Raw_y[index];
Jerome Coutant 2:123b894b49dd 288 Raw_y[index] = tmp;
Jerome Coutant 2:123b894b49dd 289 }
Jerome Coutant 2:123b894b49dd 290
Jerome Coutant 2:123b894b49dd 291 if(ts_orientation & TS_SWAP_X)
Jerome Coutant 2:123b894b49dd 292 {
Jerome Coutant 2:123b894b49dd 293 Raw_x[index] = FT_6206_MAX_WIDTH - 1 - Raw_x[index];
Jerome Coutant 2:123b894b49dd 294 }
Jerome Coutant 2:123b894b49dd 295
Jerome Coutant 2:123b894b49dd 296 if(ts_orientation & TS_SWAP_Y)
Jerome Coutant 2:123b894b49dd 297 {
Jerome Coutant 2:123b894b49dd 298 Raw_y[index] = FT_6206_MAX_HEIGHT - 1 - Raw_y[index];
Jerome Coutant 2:123b894b49dd 299 }
Jerome Coutant 2:123b894b49dd 300
Jerome Coutant 2:123b894b49dd 301 xDiff = Raw_x[index] > _x[index]? (Raw_x[index] - _x[index]): (_x[index] - Raw_x[index]);
Jerome Coutant 2:123b894b49dd 302 yDiff = Raw_y[index] > _y[index]? (Raw_y[index] - _y[index]): (_y[index] - Raw_y[index]);
Jerome Coutant 2:123b894b49dd 303
Jerome Coutant 2:123b894b49dd 304 if ((xDiff + yDiff) > 5)
Jerome Coutant 2:123b894b49dd 305 {
Jerome Coutant 2:123b894b49dd 306 _x[index] = Raw_x[index];
Jerome Coutant 2:123b894b49dd 307 _y[index] = Raw_y[index];
Jerome Coutant 2:123b894b49dd 308 }
Jerome Coutant 2:123b894b49dd 309
Jerome Coutant 2:123b894b49dd 310
Jerome Coutant 2:123b894b49dd 311 TS_State->touchX[index] = _x[index];
Jerome Coutant 2:123b894b49dd 312 TS_State->touchY[index] = _y[index];
Jerome Coutant 2:123b894b49dd 313
Jerome Coutant 2:123b894b49dd 314 #if (TS_MULTI_TOUCH_SUPPORTED == 1)
Jerome Coutant 2:123b894b49dd 315
Jerome Coutant 2:123b894b49dd 316 /* Get touch info related to the current touch */
Jerome Coutant 2:123b894b49dd 317 ft6x06_TS_GetTouchInfo(I2C_Address, index, &weight, &area, &event);
Jerome Coutant 2:123b894b49dd 318
Jerome Coutant 2:123b894b49dd 319 /* Update TS_State structure */
Jerome Coutant 2:123b894b49dd 320 TS_State->touchWeight[index] = weight;
Jerome Coutant 2:123b894b49dd 321 TS_State->touchArea[index] = area;
Jerome Coutant 2:123b894b49dd 322
Jerome Coutant 2:123b894b49dd 323 /* Remap touch event */
Jerome Coutant 2:123b894b49dd 324 switch(event)
Jerome Coutant 2:123b894b49dd 325 {
Jerome Coutant 2:123b894b49dd 326 case FT6206_TOUCH_EVT_FLAG_PRESS_DOWN :
Jerome Coutant 2:123b894b49dd 327 TS_State->touchEventId[index] = TOUCH_EVENT_PRESS_DOWN;
Jerome Coutant 2:123b894b49dd 328 break;
Jerome Coutant 2:123b894b49dd 329 case FT6206_TOUCH_EVT_FLAG_LIFT_UP :
Jerome Coutant 2:123b894b49dd 330 TS_State->touchEventId[index] = TOUCH_EVENT_LIFT_UP;
Jerome Coutant 2:123b894b49dd 331 break;
Jerome Coutant 2:123b894b49dd 332 case FT6206_TOUCH_EVT_FLAG_CONTACT :
Jerome Coutant 2:123b894b49dd 333 TS_State->touchEventId[index] = TOUCH_EVENT_CONTACT;
Jerome Coutant 2:123b894b49dd 334 break;
Jerome Coutant 2:123b894b49dd 335 case FT6206_TOUCH_EVT_FLAG_NO_EVENT :
Jerome Coutant 2:123b894b49dd 336 TS_State->touchEventId[index] = TOUCH_EVENT_NO_EVT;
Jerome Coutant 2:123b894b49dd 337 break;
Jerome Coutant 2:123b894b49dd 338 default :
Jerome Coutant 2:123b894b49dd 339 ts_status = TS_ERROR;
Jerome Coutant 2:123b894b49dd 340 break;
Jerome Coutant 2:123b894b49dd 341 } /* of switch(event) */
Jerome Coutant 2:123b894b49dd 342
Jerome Coutant 2:123b894b49dd 343 #endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
Jerome Coutant 2:123b894b49dd 344
Jerome Coutant 2:123b894b49dd 345 } /* of for(index=0; index < TS_State->touchDetected; index++) */
Jerome Coutant 2:123b894b49dd 346
Jerome Coutant 2:123b894b49dd 347 #if (TS_MULTI_TOUCH_SUPPORTED == 1)
Jerome Coutant 2:123b894b49dd 348 /* Get gesture Id */
Jerome Coutant 2:123b894b49dd 349 ts_status = BSP_TS_Get_GestureId(TS_State);
Jerome Coutant 2:123b894b49dd 350 #endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
Jerome Coutant 2:123b894b49dd 351
Jerome Coutant 2:123b894b49dd 352 } /* end of if(TS_State->touchDetected != 0) */
Jerome Coutant 2:123b894b49dd 353
Jerome Coutant 2:123b894b49dd 354 return (ts_status);
Jerome Coutant 2:123b894b49dd 355 }
Jerome Coutant 2:123b894b49dd 356
Jerome Coutant 2:123b894b49dd 357 #if (TS_MULTI_TOUCH_SUPPORTED == 1)
Jerome Coutant 2:123b894b49dd 358 /**
Jerome Coutant 2:123b894b49dd 359 * @brief Update gesture Id following a touch detected.
Jerome Coutant 2:123b894b49dd 360 * @param TS_State: Pointer to touch screen current state structure
Jerome Coutant 2:123b894b49dd 361 * @retval TS_OK if all initializations are OK. Other value if error.
Jerome Coutant 2:123b894b49dd 362 */
Jerome Coutant 2:123b894b49dd 363 uint8_t BSP_TS_Get_GestureId(TS_StateTypeDef *TS_State)
Jerome Coutant 2:123b894b49dd 364 {
Jerome Coutant 2:123b894b49dd 365 uint32_t gestureId = 0;
Jerome Coutant 2:123b894b49dd 366 uint8_t ts_status = TS_OK;
Jerome Coutant 2:123b894b49dd 367
Jerome Coutant 2:123b894b49dd 368 /* Get gesture Id */
Jerome Coutant 2:123b894b49dd 369 ft6x06_TS_GetGestureID(I2C_Address, &gestureId);
Jerome Coutant 2:123b894b49dd 370
Jerome Coutant 2:123b894b49dd 371 /* Remap gesture Id to a TS_GestureIdTypeDef value */
Jerome Coutant 2:123b894b49dd 372 switch(gestureId)
Jerome Coutant 2:123b894b49dd 373 {
Jerome Coutant 2:123b894b49dd 374 case FT6206_GEST_ID_NO_GESTURE :
Jerome Coutant 2:123b894b49dd 375 TS_State->gestureId = GEST_ID_NO_GESTURE;
Jerome Coutant 2:123b894b49dd 376 break;
Jerome Coutant 2:123b894b49dd 377 case FT6206_GEST_ID_MOVE_UP :
Jerome Coutant 2:123b894b49dd 378 TS_State->gestureId = GEST_ID_MOVE_UP;
Jerome Coutant 2:123b894b49dd 379 break;
Jerome Coutant 2:123b894b49dd 380 case FT6206_GEST_ID_MOVE_RIGHT :
Jerome Coutant 2:123b894b49dd 381 TS_State->gestureId = GEST_ID_MOVE_RIGHT;
Jerome Coutant 2:123b894b49dd 382 break;
Jerome Coutant 2:123b894b49dd 383 case FT6206_GEST_ID_MOVE_DOWN :
Jerome Coutant 2:123b894b49dd 384 TS_State->gestureId = GEST_ID_MOVE_DOWN;
Jerome Coutant 2:123b894b49dd 385 break;
Jerome Coutant 2:123b894b49dd 386 case FT6206_GEST_ID_MOVE_LEFT :
Jerome Coutant 2:123b894b49dd 387 TS_State->gestureId = GEST_ID_MOVE_LEFT;
Jerome Coutant 2:123b894b49dd 388 break;
Jerome Coutant 2:123b894b49dd 389 case FT6206_GEST_ID_ZOOM_IN :
Jerome Coutant 2:123b894b49dd 390 TS_State->gestureId = GEST_ID_ZOOM_IN;
Jerome Coutant 2:123b894b49dd 391 break;
Jerome Coutant 2:123b894b49dd 392 case FT6206_GEST_ID_ZOOM_OUT :
Jerome Coutant 2:123b894b49dd 393 TS_State->gestureId = GEST_ID_ZOOM_OUT;
Jerome Coutant 2:123b894b49dd 394 break;
Jerome Coutant 2:123b894b49dd 395 default :
Jerome Coutant 2:123b894b49dd 396 ts_status = TS_ERROR;
Jerome Coutant 2:123b894b49dd 397 break;
Jerome Coutant 2:123b894b49dd 398 } /* of switch(gestureId) */
Jerome Coutant 2:123b894b49dd 399
Jerome Coutant 2:123b894b49dd 400 return(ts_status);
Jerome Coutant 2:123b894b49dd 401 }
Jerome Coutant 2:123b894b49dd 402
Jerome Coutant 2:123b894b49dd 403
Jerome Coutant 2:123b894b49dd 404 /** @defgroup STM32469I-Discovery_TS_Private_Functions STM32469I Discovery TS Private Functions
Jerome Coutant 2:123b894b49dd 405 * @{
Jerome Coutant 2:123b894b49dd 406 */
Jerome Coutant 2:123b894b49dd 407
Jerome Coutant 2:123b894b49dd 408
Jerome Coutant 2:123b894b49dd 409 /**
Jerome Coutant 2:123b894b49dd 410 * @brief Function used to reset all touch data before a new acquisition
Jerome Coutant 2:123b894b49dd 411 * of touch information.
Jerome Coutant 2:123b894b49dd 412 * @param TS_State: Pointer to touch screen current state structure
Jerome Coutant 2:123b894b49dd 413 * @retval TS_OK if OK, TE_ERROR if problem found.
Jerome Coutant 2:123b894b49dd 414 */
Jerome Coutant 2:123b894b49dd 415 uint8_t BSP_TS_ResetTouchData(TS_StateTypeDef *TS_State)
Jerome Coutant 2:123b894b49dd 416 {
Jerome Coutant 2:123b894b49dd 417 uint8_t ts_status = TS_ERROR;
Jerome Coutant 2:123b894b49dd 418 uint32_t index;
Jerome Coutant 2:123b894b49dd 419
Jerome Coutant 2:123b894b49dd 420 if (TS_State != (TS_StateTypeDef *)NULL)
Jerome Coutant 2:123b894b49dd 421 {
Jerome Coutant 2:123b894b49dd 422 TS_State->gestureId = GEST_ID_NO_GESTURE;
Jerome Coutant 2:123b894b49dd 423 TS_State->touchDetected = 0;
Jerome Coutant 2:123b894b49dd 424
Jerome Coutant 2:123b894b49dd 425 for(index = 0; index < TS_MAX_NB_TOUCH; index++)
Jerome Coutant 2:123b894b49dd 426 {
Jerome Coutant 2:123b894b49dd 427 TS_State->touchX[index] = 0;
Jerome Coutant 2:123b894b49dd 428 TS_State->touchY[index] = 0;
Jerome Coutant 2:123b894b49dd 429 TS_State->touchArea[index] = 0;
Jerome Coutant 2:123b894b49dd 430 TS_State->touchEventId[index] = TOUCH_EVENT_NO_EVT;
Jerome Coutant 2:123b894b49dd 431 TS_State->touchWeight[index] = 0;
Jerome Coutant 2:123b894b49dd 432 }
Jerome Coutant 2:123b894b49dd 433
Jerome Coutant 2:123b894b49dd 434 ts_status = TS_OK;
Jerome Coutant 2:123b894b49dd 435
Jerome Coutant 2:123b894b49dd 436 } /* of if (TS_State != (TS_StateTypeDef *)NULL) */
Jerome Coutant 2:123b894b49dd 437
Jerome Coutant 2:123b894b49dd 438 return (ts_status);
Jerome Coutant 2:123b894b49dd 439 }
Jerome Coutant 2:123b894b49dd 440 #endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
Jerome Coutant 2:123b894b49dd 441 /**
Jerome Coutant 2:123b894b49dd 442 * @brief Initializes the TS_INT pin MSP.
Jerome Coutant 2:123b894b49dd 443 */
Jerome Coutant 2:123b894b49dd 444 __weak void BSP_TS_INT_MspInit(void)
Jerome Coutant 2:123b894b49dd 445 {
Jerome Coutant 2:123b894b49dd 446 GPIO_InitTypeDef gpio_init_structure;
Jerome Coutant 2:123b894b49dd 447
Jerome Coutant 2:123b894b49dd 448 TS_INT_GPIO_CLK_ENABLE();
Jerome Coutant 2:123b894b49dd 449
Jerome Coutant 2:123b894b49dd 450 /* GPIO configuration in input for TouchScreen interrupt signal on TS_INT pin */
Jerome Coutant 2:123b894b49dd 451 gpio_init_structure.Pin = TS_INT_PIN;
Jerome Coutant 2:123b894b49dd 452
Jerome Coutant 2:123b894b49dd 453 gpio_init_structure.Mode = GPIO_MODE_INPUT;
Jerome Coutant 2:123b894b49dd 454 gpio_init_structure.Pull = GPIO_PULLUP;
Jerome Coutant 2:123b894b49dd 455 gpio_init_structure.Speed = GPIO_SPEED_HIGH;
Jerome Coutant 2:123b894b49dd 456 HAL_GPIO_Init(TS_INT_GPIO_PORT, &gpio_init_structure);
Jerome Coutant 2:123b894b49dd 457 }
Jerome Coutant 2:123b894b49dd 458
Jerome Coutant 2:123b894b49dd 459
Jerome Coutant 2:123b894b49dd 460 /**
Jerome Coutant 2:123b894b49dd 461 * @}
Jerome Coutant 2:123b894b49dd 462 */
Jerome Coutant 2:123b894b49dd 463
Jerome Coutant 2:123b894b49dd 464 /**
Jerome Coutant 2:123b894b49dd 465 * @}
Jerome Coutant 2:123b894b49dd 466 */
Jerome Coutant 2:123b894b49dd 467
Jerome Coutant 2:123b894b49dd 468 /**
Jerome Coutant 2:123b894b49dd 469 * @}
Jerome Coutant 2:123b894b49dd 470 */
Jerome Coutant 2:123b894b49dd 471
Jerome Coutant 2:123b894b49dd 472 /**
Jerome Coutant 2:123b894b49dd 473 * @}
Jerome Coutant 2:123b894b49dd 474 */
Jerome Coutant 2:123b894b49dd 475
Jerome Coutant 2:123b894b49dd 476 /**
Jerome Coutant 2:123b894b49dd 477 * @}
Jerome Coutant 2:123b894b49dd 478 */
Jerome Coutant 2:123b894b49dd 479
Jerome Coutant 2:123b894b49dd 480 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/