Library to control Silicon Labs SI570 10 MHZ TO 1.4 GHZ I2C PROGRAMMABLE XO/VCXO.

Dependencies:   mbed

Fork of SI570 by Gerrit Polder

Committer:
DL3LD
Date:
Sun Mar 27 06:55:59 2016 +0000
Revision:
1:1556bcaaf759
STM32F746NG SI570 VFO Test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DL3LD 1:1556bcaaf759 1 /**
DL3LD 1:1556bcaaf759 2 ******************************************************************************
DL3LD 1:1556bcaaf759 3 * @file ft5336.c
DL3LD 1:1556bcaaf759 4 * @author MCD Application Team
DL3LD 1:1556bcaaf759 5 * @version V1.0.0
DL3LD 1:1556bcaaf759 6 * @date 25-June-2015
DL3LD 1:1556bcaaf759 7 * @brief This file provides a set of functions needed to manage the FT5336
DL3LD 1:1556bcaaf759 8 * touch screen devices.
DL3LD 1:1556bcaaf759 9 ******************************************************************************
DL3LD 1:1556bcaaf759 10 * @attention
DL3LD 1:1556bcaaf759 11 *
DL3LD 1:1556bcaaf759 12 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
DL3LD 1:1556bcaaf759 13 *
DL3LD 1:1556bcaaf759 14 * Redistribution and use in source and binary forms, with or without modification,
DL3LD 1:1556bcaaf759 15 * are permitted provided that the following conditions are met:
DL3LD 1:1556bcaaf759 16 * 1. Redistributions of source code must retain the above copyright notice,
DL3LD 1:1556bcaaf759 17 * this list of conditions and the following disclaimer.
DL3LD 1:1556bcaaf759 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
DL3LD 1:1556bcaaf759 19 * this list of conditions and the following disclaimer in the documentation
DL3LD 1:1556bcaaf759 20 * and/or other materials provided with the distribution.
DL3LD 1:1556bcaaf759 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
DL3LD 1:1556bcaaf759 22 * may be used to endorse or promote products derived from this software
DL3LD 1:1556bcaaf759 23 * without specific prior written permission.
DL3LD 1:1556bcaaf759 24 *
DL3LD 1:1556bcaaf759 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
DL3LD 1:1556bcaaf759 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
DL3LD 1:1556bcaaf759 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DL3LD 1:1556bcaaf759 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
DL3LD 1:1556bcaaf759 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DL3LD 1:1556bcaaf759 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
DL3LD 1:1556bcaaf759 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
DL3LD 1:1556bcaaf759 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
DL3LD 1:1556bcaaf759 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
DL3LD 1:1556bcaaf759 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
DL3LD 1:1556bcaaf759 35 *
DL3LD 1:1556bcaaf759 36 ******************************************************************************
DL3LD 1:1556bcaaf759 37 */
DL3LD 1:1556bcaaf759 38
DL3LD 1:1556bcaaf759 39 /* Includes ------------------------------------------------------------------*/
DL3LD 1:1556bcaaf759 40 #include "ft5336.h"
DL3LD 1:1556bcaaf759 41
DL3LD 1:1556bcaaf759 42 /** @addtogroup BSP
DL3LD 1:1556bcaaf759 43 * @{
DL3LD 1:1556bcaaf759 44 */
DL3LD 1:1556bcaaf759 45
DL3LD 1:1556bcaaf759 46 /** @addtogroup Component
DL3LD 1:1556bcaaf759 47 * @{
DL3LD 1:1556bcaaf759 48 */
DL3LD 1:1556bcaaf759 49
DL3LD 1:1556bcaaf759 50 /** @defgroup FT5336
DL3LD 1:1556bcaaf759 51 * @{
DL3LD 1:1556bcaaf759 52 */
DL3LD 1:1556bcaaf759 53
DL3LD 1:1556bcaaf759 54 /* Private typedef -----------------------------------------------------------*/
DL3LD 1:1556bcaaf759 55
DL3LD 1:1556bcaaf759 56 /** @defgroup FT5336_Private_Types_Definitions
DL3LD 1:1556bcaaf759 57 * @{
DL3LD 1:1556bcaaf759 58 */
DL3LD 1:1556bcaaf759 59
DL3LD 1:1556bcaaf759 60 /* Private define ------------------------------------------------------------*/
DL3LD 1:1556bcaaf759 61
DL3LD 1:1556bcaaf759 62 /** @defgroup FT5336_Private_Defines
DL3LD 1:1556bcaaf759 63 * @{
DL3LD 1:1556bcaaf759 64 */
DL3LD 1:1556bcaaf759 65
DL3LD 1:1556bcaaf759 66 /* Private macro -------------------------------------------------------------*/
DL3LD 1:1556bcaaf759 67
DL3LD 1:1556bcaaf759 68 /** @defgroup FT5336_Private_Macros
DL3LD 1:1556bcaaf759 69 * @{
DL3LD 1:1556bcaaf759 70 */
DL3LD 1:1556bcaaf759 71
DL3LD 1:1556bcaaf759 72 /* Private variables ---------------------------------------------------------*/
DL3LD 1:1556bcaaf759 73
DL3LD 1:1556bcaaf759 74 /** @defgroup FT5336_Private_Variables
DL3LD 1:1556bcaaf759 75 * @{
DL3LD 1:1556bcaaf759 76 */
DL3LD 1:1556bcaaf759 77
DL3LD 1:1556bcaaf759 78 /* Touch screen driver structure initialization */
DL3LD 1:1556bcaaf759 79 TS_DrvTypeDef ft5336_ts_drv =
DL3LD 1:1556bcaaf759 80 {
DL3LD 1:1556bcaaf759 81 ft5336_Init,
DL3LD 1:1556bcaaf759 82 ft5336_ReadID,
DL3LD 1:1556bcaaf759 83 ft5336_Reset,
DL3LD 1:1556bcaaf759 84
DL3LD 1:1556bcaaf759 85 ft5336_TS_Start,
DL3LD 1:1556bcaaf759 86 ft5336_TS_DetectTouch,
DL3LD 1:1556bcaaf759 87 ft5336_TS_GetXY,
DL3LD 1:1556bcaaf759 88
DL3LD 1:1556bcaaf759 89 ft5336_TS_EnableIT,
DL3LD 1:1556bcaaf759 90 ft5336_TS_ClearIT,
DL3LD 1:1556bcaaf759 91 ft5336_TS_ITStatus,
DL3LD 1:1556bcaaf759 92 ft5336_TS_DisableIT
DL3LD 1:1556bcaaf759 93
DL3LD 1:1556bcaaf759 94 };
DL3LD 1:1556bcaaf759 95
DL3LD 1:1556bcaaf759 96 /* Global ft5336 handle */
DL3LD 1:1556bcaaf759 97 static ft5336_handle_TypeDef ft5336_handle = { FT5336_I2C_NOT_INITIALIZED, 0, 0};
DL3LD 1:1556bcaaf759 98
DL3LD 1:1556bcaaf759 99 /**
DL3LD 1:1556bcaaf759 100 * @}
DL3LD 1:1556bcaaf759 101 */
DL3LD 1:1556bcaaf759 102
DL3LD 1:1556bcaaf759 103 /** @defgroup ft5336_Private_Function_Prototypes
DL3LD 1:1556bcaaf759 104 * @{
DL3LD 1:1556bcaaf759 105 */
DL3LD 1:1556bcaaf759 106
DL3LD 1:1556bcaaf759 107 /* Private functions prototypes-----------------------------------------------*/
DL3LD 1:1556bcaaf759 108
DL3LD 1:1556bcaaf759 109 /**
DL3LD 1:1556bcaaf759 110 * @brief Return the status of I2C was initialized or not.
DL3LD 1:1556bcaaf759 111 * @param None.
DL3LD 1:1556bcaaf759 112 * @retval : I2C initialization status.
DL3LD 1:1556bcaaf759 113 */
DL3LD 1:1556bcaaf759 114 static uint8_t ft5336_Get_I2C_InitializedStatus(void);
DL3LD 1:1556bcaaf759 115
DL3LD 1:1556bcaaf759 116 /**
DL3LD 1:1556bcaaf759 117 * @brief I2C initialize if needed.
DL3LD 1:1556bcaaf759 118 * @param None.
DL3LD 1:1556bcaaf759 119 * @retval : None.
DL3LD 1:1556bcaaf759 120 */
DL3LD 1:1556bcaaf759 121 static void ft5336_I2C_InitializeIfRequired(void);
DL3LD 1:1556bcaaf759 122
DL3LD 1:1556bcaaf759 123 /**
DL3LD 1:1556bcaaf759 124 * @brief Basic static configuration of TouchScreen
DL3LD 1:1556bcaaf759 125 * @param DeviceAddr: FT5336 Device address for communication on I2C Bus.
DL3LD 1:1556bcaaf759 126 * @retval Status FT5336_STATUS_OK or FT5336_STATUS_NOT_OK.
DL3LD 1:1556bcaaf759 127 */
DL3LD 1:1556bcaaf759 128 static uint32_t ft5336_TS_Configure(uint16_t DeviceAddr);
DL3LD 1:1556bcaaf759 129
DL3LD 1:1556bcaaf759 130 /** @defgroup ft5336_Private_Functions
DL3LD 1:1556bcaaf759 131 * @{
DL3LD 1:1556bcaaf759 132 */
DL3LD 1:1556bcaaf759 133
DL3LD 1:1556bcaaf759 134 /** @defgroup ft5336_Public_Function_Body
DL3LD 1:1556bcaaf759 135 * @{
DL3LD 1:1556bcaaf759 136 */
DL3LD 1:1556bcaaf759 137
DL3LD 1:1556bcaaf759 138 /* Public functions bodies-----------------------------------------------*/
DL3LD 1:1556bcaaf759 139
DL3LD 1:1556bcaaf759 140
DL3LD 1:1556bcaaf759 141 /**
DL3LD 1:1556bcaaf759 142 * @brief Initialize the ft5336 communication bus
DL3LD 1:1556bcaaf759 143 * from MCU to FT5336 : ie I2C channel initialization (if required).
DL3LD 1:1556bcaaf759 144 * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
DL3LD 1:1556bcaaf759 145 * @retval None
DL3LD 1:1556bcaaf759 146 */
DL3LD 1:1556bcaaf759 147 void ft5336_Init(uint16_t DeviceAddr)
DL3LD 1:1556bcaaf759 148 {
DL3LD 1:1556bcaaf759 149 /* Wait at least 200ms after power up before accessing registers
DL3LD 1:1556bcaaf759 150 * Trsi timing (Time of starting to report point after resetting) from FT5336GQQ datasheet */
DL3LD 1:1556bcaaf759 151 TS_IO_Delay(200);
DL3LD 1:1556bcaaf759 152
DL3LD 1:1556bcaaf759 153 /* Initialize I2C link if needed */
DL3LD 1:1556bcaaf759 154 ft5336_I2C_InitializeIfRequired();
DL3LD 1:1556bcaaf759 155 }
DL3LD 1:1556bcaaf759 156
DL3LD 1:1556bcaaf759 157 /**
DL3LD 1:1556bcaaf759 158 * @brief Software Reset the ft5336.
DL3LD 1:1556bcaaf759 159 * @note : Not applicable to FT5336.
DL3LD 1:1556bcaaf759 160 * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
DL3LD 1:1556bcaaf759 161 * @retval None
DL3LD 1:1556bcaaf759 162 */
DL3LD 1:1556bcaaf759 163 void ft5336_Reset(uint16_t DeviceAddr)
DL3LD 1:1556bcaaf759 164 {
DL3LD 1:1556bcaaf759 165 /* Do nothing */
DL3LD 1:1556bcaaf759 166 /* No software reset sequence available in FT5336 IC */
DL3LD 1:1556bcaaf759 167 }
DL3LD 1:1556bcaaf759 168
DL3LD 1:1556bcaaf759 169 /**
DL3LD 1:1556bcaaf759 170 * @brief Read the ft5336 device ID, pre initialize I2C in case of need to be
DL3LD 1:1556bcaaf759 171 * able to read the FT5336 device ID, and verify this is a FT5336.
DL3LD 1:1556bcaaf759 172 * @param DeviceAddr: I2C FT5336 Slave address.
DL3LD 1:1556bcaaf759 173 * @retval The Device ID (two bytes).
DL3LD 1:1556bcaaf759 174 */
DL3LD 1:1556bcaaf759 175 uint16_t ft5336_ReadID(uint16_t DeviceAddr)
DL3LD 1:1556bcaaf759 176 {
DL3LD 1:1556bcaaf759 177 volatile uint8_t ucReadId = 0;
DL3LD 1:1556bcaaf759 178 uint8_t nbReadAttempts = 0;
DL3LD 1:1556bcaaf759 179 uint8_t bFoundDevice = 0; /* Device not found by default */
DL3LD 1:1556bcaaf759 180
DL3LD 1:1556bcaaf759 181 /* Initialize I2C link if needed */
DL3LD 1:1556bcaaf759 182 ft5336_I2C_InitializeIfRequired();
DL3LD 1:1556bcaaf759 183
DL3LD 1:1556bcaaf759 184 /* At maximum 4 attempts to read ID : exit at first finding of the searched device ID */
DL3LD 1:1556bcaaf759 185 for(nbReadAttempts = 0; ((nbReadAttempts < 3) && !(bFoundDevice)); nbReadAttempts++)
DL3LD 1:1556bcaaf759 186 {
DL3LD 1:1556bcaaf759 187 /* Read register FT5336_CHIP_ID_REG as DeviceID detection */
DL3LD 1:1556bcaaf759 188 ucReadId = TS_IO_Read(DeviceAddr, FT5336_CHIP_ID_REG);
DL3LD 1:1556bcaaf759 189
DL3LD 1:1556bcaaf759 190 /* Found the searched device ID ? */
DL3LD 1:1556bcaaf759 191 if(ucReadId == FT5336_ID_VALUE)
DL3LD 1:1556bcaaf759 192 {
DL3LD 1:1556bcaaf759 193 /* Set device as found */
DL3LD 1:1556bcaaf759 194 bFoundDevice = 1;
DL3LD 1:1556bcaaf759 195 }
DL3LD 1:1556bcaaf759 196 }
DL3LD 1:1556bcaaf759 197
DL3LD 1:1556bcaaf759 198 /* Return the device ID value */
DL3LD 1:1556bcaaf759 199 return (ucReadId);
DL3LD 1:1556bcaaf759 200 }
DL3LD 1:1556bcaaf759 201
DL3LD 1:1556bcaaf759 202 /**
DL3LD 1:1556bcaaf759 203 * @brief Configures the touch Screen IC device to start detecting touches
DL3LD 1:1556bcaaf759 204 * @param DeviceAddr: Device address on communication Bus (I2C slave address).
DL3LD 1:1556bcaaf759 205 * @retval None.
DL3LD 1:1556bcaaf759 206 */
DL3LD 1:1556bcaaf759 207 void ft5336_TS_Start(uint16_t DeviceAddr)
DL3LD 1:1556bcaaf759 208 {
DL3LD 1:1556bcaaf759 209 /* Minimum static configuration of FT5336 */
DL3LD 1:1556bcaaf759 210 FT5336_ASSERT(ft5336_TS_Configure(DeviceAddr));
DL3LD 1:1556bcaaf759 211
DL3LD 1:1556bcaaf759 212 /* By default set FT5336 IC in Polling mode : no INT generation on FT5336 for new touch available */
DL3LD 1:1556bcaaf759 213 /* Note TS_INT is active low */
DL3LD 1:1556bcaaf759 214 ft5336_TS_DisableIT(DeviceAddr);
DL3LD 1:1556bcaaf759 215 }
DL3LD 1:1556bcaaf759 216
DL3LD 1:1556bcaaf759 217 /**
DL3LD 1:1556bcaaf759 218 * @brief Return if there is touches detected or not.
DL3LD 1:1556bcaaf759 219 * Try to detect new touches and forget the old ones (reset internal global
DL3LD 1:1556bcaaf759 220 * variables).
DL3LD 1:1556bcaaf759 221 * @param DeviceAddr: Device address on communication Bus.
DL3LD 1:1556bcaaf759 222 * @retval : Number of active touches detected (can be 0, 1 or 2).
DL3LD 1:1556bcaaf759 223 */
DL3LD 1:1556bcaaf759 224 uint8_t ft5336_TS_DetectTouch(uint16_t DeviceAddr)
DL3LD 1:1556bcaaf759 225 {
DL3LD 1:1556bcaaf759 226 volatile uint8_t nbTouch = 0;
DL3LD 1:1556bcaaf759 227
DL3LD 1:1556bcaaf759 228 /* Read register FT5336_TD_STAT_REG to check number of touches detection */
DL3LD 1:1556bcaaf759 229 nbTouch = TS_IO_Read(DeviceAddr, FT5336_TD_STAT_REG);
DL3LD 1:1556bcaaf759 230 nbTouch &= FT5336_TD_STAT_MASK;
DL3LD 1:1556bcaaf759 231
DL3LD 1:1556bcaaf759 232 if(nbTouch > FT5336_MAX_DETECTABLE_TOUCH)
DL3LD 1:1556bcaaf759 233 {
DL3LD 1:1556bcaaf759 234 /* If invalid number of touch detected, set it to zero */
DL3LD 1:1556bcaaf759 235 nbTouch = 0;
DL3LD 1:1556bcaaf759 236 }
DL3LD 1:1556bcaaf759 237
DL3LD 1:1556bcaaf759 238 /* Update ft5336 driver internal global : current number of active touches */
DL3LD 1:1556bcaaf759 239 ft5336_handle.currActiveTouchNb = nbTouch;
DL3LD 1:1556bcaaf759 240
DL3LD 1:1556bcaaf759 241 /* Reset current active touch index on which to work on */
DL3LD 1:1556bcaaf759 242 ft5336_handle.currActiveTouchIdx = 0;
DL3LD 1:1556bcaaf759 243
DL3LD 1:1556bcaaf759 244 return(nbTouch);
DL3LD 1:1556bcaaf759 245 }
DL3LD 1:1556bcaaf759 246
DL3LD 1:1556bcaaf759 247 /**
DL3LD 1:1556bcaaf759 248 * @brief Get the touch screen X and Y positions values
DL3LD 1:1556bcaaf759 249 * Manage multi touch thanks to touch Index global
DL3LD 1:1556bcaaf759 250 * variable 'ft5336_handle.currActiveTouchIdx'.
DL3LD 1:1556bcaaf759 251 * @param DeviceAddr: Device address on communication Bus.
DL3LD 1:1556bcaaf759 252 * @param X: Pointer to X position value
DL3LD 1:1556bcaaf759 253 * @param Y: Pointer to Y position value
DL3LD 1:1556bcaaf759 254 * @retval None.
DL3LD 1:1556bcaaf759 255 */
DL3LD 1:1556bcaaf759 256 void ft5336_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y)
DL3LD 1:1556bcaaf759 257 {
DL3LD 1:1556bcaaf759 258 volatile uint8_t ucReadData = 0;
DL3LD 1:1556bcaaf759 259 static uint16_t coord;
DL3LD 1:1556bcaaf759 260 uint8_t regAddressXLow = 0;
DL3LD 1:1556bcaaf759 261 uint8_t regAddressXHigh = 0;
DL3LD 1:1556bcaaf759 262 uint8_t regAddressYLow = 0;
DL3LD 1:1556bcaaf759 263 uint8_t regAddressYHigh = 0;
DL3LD 1:1556bcaaf759 264
DL3LD 1:1556bcaaf759 265 if(ft5336_handle.currActiveTouchIdx < ft5336_handle.currActiveTouchNb)
DL3LD 1:1556bcaaf759 266 {
DL3LD 1:1556bcaaf759 267 switch(ft5336_handle.currActiveTouchIdx)
DL3LD 1:1556bcaaf759 268 {
DL3LD 1:1556bcaaf759 269 case 0 :
DL3LD 1:1556bcaaf759 270 regAddressXLow = FT5336_P1_XL_REG;
DL3LD 1:1556bcaaf759 271 regAddressXHigh = FT5336_P1_XH_REG;
DL3LD 1:1556bcaaf759 272 regAddressYLow = FT5336_P1_YL_REG;
DL3LD 1:1556bcaaf759 273 regAddressYHigh = FT5336_P1_YH_REG;
DL3LD 1:1556bcaaf759 274 break;
DL3LD 1:1556bcaaf759 275
DL3LD 1:1556bcaaf759 276 case 1 :
DL3LD 1:1556bcaaf759 277 regAddressXLow = FT5336_P2_XL_REG;
DL3LD 1:1556bcaaf759 278 regAddressXHigh = FT5336_P2_XH_REG;
DL3LD 1:1556bcaaf759 279 regAddressYLow = FT5336_P2_YL_REG;
DL3LD 1:1556bcaaf759 280 regAddressYHigh = FT5336_P2_YH_REG;
DL3LD 1:1556bcaaf759 281 break;
DL3LD 1:1556bcaaf759 282
DL3LD 1:1556bcaaf759 283 case 2 :
DL3LD 1:1556bcaaf759 284 regAddressXLow = FT5336_P3_XL_REG;
DL3LD 1:1556bcaaf759 285 regAddressXHigh = FT5336_P3_XH_REG;
DL3LD 1:1556bcaaf759 286 regAddressYLow = FT5336_P3_YL_REG;
DL3LD 1:1556bcaaf759 287 regAddressYHigh = FT5336_P3_YH_REG;
DL3LD 1:1556bcaaf759 288 break;
DL3LD 1:1556bcaaf759 289
DL3LD 1:1556bcaaf759 290 case 3 :
DL3LD 1:1556bcaaf759 291 regAddressXLow = FT5336_P4_XL_REG;
DL3LD 1:1556bcaaf759 292 regAddressXHigh = FT5336_P4_XH_REG;
DL3LD 1:1556bcaaf759 293 regAddressYLow = FT5336_P4_YL_REG;
DL3LD 1:1556bcaaf759 294 regAddressYHigh = FT5336_P4_YH_REG;
DL3LD 1:1556bcaaf759 295 break;
DL3LD 1:1556bcaaf759 296
DL3LD 1:1556bcaaf759 297 case 4 :
DL3LD 1:1556bcaaf759 298 regAddressXLow = FT5336_P5_XL_REG;
DL3LD 1:1556bcaaf759 299 regAddressXHigh = FT5336_P5_XH_REG;
DL3LD 1:1556bcaaf759 300 regAddressYLow = FT5336_P5_YL_REG;
DL3LD 1:1556bcaaf759 301 regAddressYHigh = FT5336_P5_YH_REG;
DL3LD 1:1556bcaaf759 302 break;
DL3LD 1:1556bcaaf759 303
DL3LD 1:1556bcaaf759 304 case 5 :
DL3LD 1:1556bcaaf759 305 regAddressXLow = FT5336_P6_XL_REG;
DL3LD 1:1556bcaaf759 306 regAddressXHigh = FT5336_P6_XH_REG;
DL3LD 1:1556bcaaf759 307 regAddressYLow = FT5336_P6_YL_REG;
DL3LD 1:1556bcaaf759 308 regAddressYHigh = FT5336_P6_YH_REG;
DL3LD 1:1556bcaaf759 309 break;
DL3LD 1:1556bcaaf759 310
DL3LD 1:1556bcaaf759 311 case 6 :
DL3LD 1:1556bcaaf759 312 regAddressXLow = FT5336_P7_XL_REG;
DL3LD 1:1556bcaaf759 313 regAddressXHigh = FT5336_P7_XH_REG;
DL3LD 1:1556bcaaf759 314 regAddressYLow = FT5336_P7_YL_REG;
DL3LD 1:1556bcaaf759 315 regAddressYHigh = FT5336_P7_YH_REG;
DL3LD 1:1556bcaaf759 316 break;
DL3LD 1:1556bcaaf759 317
DL3LD 1:1556bcaaf759 318 case 7 :
DL3LD 1:1556bcaaf759 319 regAddressXLow = FT5336_P8_XL_REG;
DL3LD 1:1556bcaaf759 320 regAddressXHigh = FT5336_P8_XH_REG;
DL3LD 1:1556bcaaf759 321 regAddressYLow = FT5336_P8_YL_REG;
DL3LD 1:1556bcaaf759 322 regAddressYHigh = FT5336_P8_YH_REG;
DL3LD 1:1556bcaaf759 323 break;
DL3LD 1:1556bcaaf759 324
DL3LD 1:1556bcaaf759 325 case 8 :
DL3LD 1:1556bcaaf759 326 regAddressXLow = FT5336_P9_XL_REG;
DL3LD 1:1556bcaaf759 327 regAddressXHigh = FT5336_P9_XH_REG;
DL3LD 1:1556bcaaf759 328 regAddressYLow = FT5336_P9_YL_REG;
DL3LD 1:1556bcaaf759 329 regAddressYHigh = FT5336_P9_YH_REG;
DL3LD 1:1556bcaaf759 330 break;
DL3LD 1:1556bcaaf759 331
DL3LD 1:1556bcaaf759 332 case 9 :
DL3LD 1:1556bcaaf759 333 regAddressXLow = FT5336_P10_XL_REG;
DL3LD 1:1556bcaaf759 334 regAddressXHigh = FT5336_P10_XH_REG;
DL3LD 1:1556bcaaf759 335 regAddressYLow = FT5336_P10_YL_REG;
DL3LD 1:1556bcaaf759 336 regAddressYHigh = FT5336_P10_YH_REG;
DL3LD 1:1556bcaaf759 337 break;
DL3LD 1:1556bcaaf759 338
DL3LD 1:1556bcaaf759 339 default :
DL3LD 1:1556bcaaf759 340 break;
DL3LD 1:1556bcaaf759 341
DL3LD 1:1556bcaaf759 342 } /* end switch(ft5336_handle.currActiveTouchIdx) */
DL3LD 1:1556bcaaf759 343
DL3LD 1:1556bcaaf759 344 /* Read low part of X position */
DL3LD 1:1556bcaaf759 345 ucReadData = TS_IO_Read(DeviceAddr, regAddressXLow);
DL3LD 1:1556bcaaf759 346 coord = (ucReadData & FT5336_TOUCH_POS_LSB_MASK) >> FT5336_TOUCH_POS_LSB_SHIFT;
DL3LD 1:1556bcaaf759 347
DL3LD 1:1556bcaaf759 348 /* Read high part of X position */
DL3LD 1:1556bcaaf759 349 ucReadData = TS_IO_Read(DeviceAddr, regAddressXHigh);
DL3LD 1:1556bcaaf759 350 coord |= ((ucReadData & FT5336_TOUCH_POS_MSB_MASK) >> FT5336_TOUCH_POS_MSB_SHIFT) << 8;
DL3LD 1:1556bcaaf759 351
DL3LD 1:1556bcaaf759 352 /* Send back ready X position to caller */
DL3LD 1:1556bcaaf759 353 *X = coord;
DL3LD 1:1556bcaaf759 354
DL3LD 1:1556bcaaf759 355 /* Read low part of Y position */
DL3LD 1:1556bcaaf759 356 ucReadData = TS_IO_Read(DeviceAddr, regAddressYLow);
DL3LD 1:1556bcaaf759 357 coord = (ucReadData & FT5336_TOUCH_POS_LSB_MASK) >> FT5336_TOUCH_POS_LSB_SHIFT;
DL3LD 1:1556bcaaf759 358
DL3LD 1:1556bcaaf759 359 /* Read high part of Y position */
DL3LD 1:1556bcaaf759 360 ucReadData = TS_IO_Read(DeviceAddr, regAddressYHigh);
DL3LD 1:1556bcaaf759 361 coord |= ((ucReadData & FT5336_TOUCH_POS_MSB_MASK) >> FT5336_TOUCH_POS_MSB_SHIFT) << 8;
DL3LD 1:1556bcaaf759 362
DL3LD 1:1556bcaaf759 363 /* Send back ready Y position to caller */
DL3LD 1:1556bcaaf759 364 *Y = coord;
DL3LD 1:1556bcaaf759 365
DL3LD 1:1556bcaaf759 366 ft5336_handle.currActiveTouchIdx++; /* next call will work on next touch */
DL3LD 1:1556bcaaf759 367
DL3LD 1:1556bcaaf759 368 } /* of if(ft5336_handle.currActiveTouchIdx < ft5336_handle.currActiveTouchNb) */
DL3LD 1:1556bcaaf759 369 }
DL3LD 1:1556bcaaf759 370
DL3LD 1:1556bcaaf759 371 /**
DL3LD 1:1556bcaaf759 372 * @brief Configure the FT5336 device to generate IT on given INT pin
DL3LD 1:1556bcaaf759 373 * connected to MCU as EXTI.
DL3LD 1:1556bcaaf759 374 * @param DeviceAddr: Device address on communication Bus (Slave I2C address of FT5336).
DL3LD 1:1556bcaaf759 375 * @retval None
DL3LD 1:1556bcaaf759 376 */
DL3LD 1:1556bcaaf759 377 void ft5336_TS_EnableIT(uint16_t DeviceAddr)
DL3LD 1:1556bcaaf759 378 {
DL3LD 1:1556bcaaf759 379 uint8_t regValue = 0;
DL3LD 1:1556bcaaf759 380 regValue = (FT5336_G_MODE_INTERRUPT_TRIGGER & (FT5336_G_MODE_INTERRUPT_MASK >> FT5336_G_MODE_INTERRUPT_SHIFT)) << FT5336_G_MODE_INTERRUPT_SHIFT;
DL3LD 1:1556bcaaf759 381
DL3LD 1:1556bcaaf759 382 /* Set interrupt trigger mode in FT5336_GMODE_REG */
DL3LD 1:1556bcaaf759 383 TS_IO_Write(DeviceAddr, FT5336_GMODE_REG, regValue);
DL3LD 1:1556bcaaf759 384 }
DL3LD 1:1556bcaaf759 385
DL3LD 1:1556bcaaf759 386 /**
DL3LD 1:1556bcaaf759 387 * @brief Configure the FT5336 device to stop generating IT on the given INT pin
DL3LD 1:1556bcaaf759 388 * connected to MCU as EXTI.
DL3LD 1:1556bcaaf759 389 * @param DeviceAddr: Device address on communication Bus (Slave I2C address of FT5336).
DL3LD 1:1556bcaaf759 390 * @retval None
DL3LD 1:1556bcaaf759 391 */
DL3LD 1:1556bcaaf759 392 void ft5336_TS_DisableIT(uint16_t DeviceAddr)
DL3LD 1:1556bcaaf759 393 {
DL3LD 1:1556bcaaf759 394 uint8_t regValue = 0;
DL3LD 1:1556bcaaf759 395 regValue = (FT5336_G_MODE_INTERRUPT_POLLING & (FT5336_G_MODE_INTERRUPT_MASK >> FT5336_G_MODE_INTERRUPT_SHIFT)) << FT5336_G_MODE_INTERRUPT_SHIFT;
DL3LD 1:1556bcaaf759 396
DL3LD 1:1556bcaaf759 397 /* Set interrupt polling mode in FT5336_GMODE_REG */
DL3LD 1:1556bcaaf759 398 TS_IO_Write(DeviceAddr, FT5336_GMODE_REG, regValue);
DL3LD 1:1556bcaaf759 399 }
DL3LD 1:1556bcaaf759 400
DL3LD 1:1556bcaaf759 401 /**
DL3LD 1:1556bcaaf759 402 * @brief Get IT status from FT5336 interrupt status registers
DL3LD 1:1556bcaaf759 403 * Should be called Following an EXTI coming to the MCU to know the detailed
DL3LD 1:1556bcaaf759 404 * reason of the interrupt.
DL3LD 1:1556bcaaf759 405 * @note : This feature is not applicable to FT5336.
DL3LD 1:1556bcaaf759 406 * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
DL3LD 1:1556bcaaf759 407 * @retval TS interrupts status : always return 0 here
DL3LD 1:1556bcaaf759 408 */
DL3LD 1:1556bcaaf759 409 uint8_t ft5336_TS_ITStatus(uint16_t DeviceAddr)
DL3LD 1:1556bcaaf759 410 {
DL3LD 1:1556bcaaf759 411 /* Always return 0 as feature not applicable to FT5336 */
DL3LD 1:1556bcaaf759 412 return 0;
DL3LD 1:1556bcaaf759 413 }
DL3LD 1:1556bcaaf759 414
DL3LD 1:1556bcaaf759 415 /**
DL3LD 1:1556bcaaf759 416 * @brief Clear IT status in FT5336 interrupt status clear registers
DL3LD 1:1556bcaaf759 417 * Should be called Following an EXTI coming to the MCU.
DL3LD 1:1556bcaaf759 418 * @note : This feature is not applicable to FT5336.
DL3LD 1:1556bcaaf759 419 * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
DL3LD 1:1556bcaaf759 420 * @retval None
DL3LD 1:1556bcaaf759 421 */
DL3LD 1:1556bcaaf759 422 void ft5336_TS_ClearIT(uint16_t DeviceAddr)
DL3LD 1:1556bcaaf759 423 {
DL3LD 1:1556bcaaf759 424 /* Nothing to be done here for FT5336 */
DL3LD 1:1556bcaaf759 425 }
DL3LD 1:1556bcaaf759 426
DL3LD 1:1556bcaaf759 427 /**** NEW FEATURES enabled when Multi-touch support is enabled ****/
DL3LD 1:1556bcaaf759 428
DL3LD 1:1556bcaaf759 429 #if (TS_MULTI_TOUCH_SUPPORTED == 1)
DL3LD 1:1556bcaaf759 430
DL3LD 1:1556bcaaf759 431 /**
DL3LD 1:1556bcaaf759 432 * @brief Get the last touch gesture identification (zoom, move up/down...).
DL3LD 1:1556bcaaf759 433 * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
DL3LD 1:1556bcaaf759 434 * @param pGestureId : Pointer to get last touch gesture Identification.
DL3LD 1:1556bcaaf759 435 * @retval None.
DL3LD 1:1556bcaaf759 436 */
DL3LD 1:1556bcaaf759 437 void ft5336_TS_GetGestureID(uint16_t DeviceAddr, uint32_t * pGestureId)
DL3LD 1:1556bcaaf759 438 {
DL3LD 1:1556bcaaf759 439 volatile uint8_t ucReadData = 0;
DL3LD 1:1556bcaaf759 440
DL3LD 1:1556bcaaf759 441 ucReadData = TS_IO_Read(DeviceAddr, FT5336_GEST_ID_REG);
DL3LD 1:1556bcaaf759 442
DL3LD 1:1556bcaaf759 443 * pGestureId = ucReadData;
DL3LD 1:1556bcaaf759 444 }
DL3LD 1:1556bcaaf759 445
DL3LD 1:1556bcaaf759 446 /**
DL3LD 1:1556bcaaf759 447 * @brief Get the touch detailed informations on touch number 'touchIdx' (0..1)
DL3LD 1:1556bcaaf759 448 * This touch detailed information contains :
DL3LD 1:1556bcaaf759 449 * - weight that was applied to this touch
DL3LD 1:1556bcaaf759 450 * - sub-area of the touch in the touch panel
DL3LD 1:1556bcaaf759 451 * - event of linked to the touch (press down, lift up, ...)
DL3LD 1:1556bcaaf759 452 * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
DL3LD 1:1556bcaaf759 453 * @param touchIdx : Passed index of the touch (0..1) on which we want to get the
DL3LD 1:1556bcaaf759 454 * detailed information.
DL3LD 1:1556bcaaf759 455 * @param pWeight : Pointer to to get the weight information of 'touchIdx'.
DL3LD 1:1556bcaaf759 456 * @param pArea : Pointer to to get the sub-area information of 'touchIdx'.
DL3LD 1:1556bcaaf759 457 * @param pEvent : Pointer to to get the event information of 'touchIdx'.
DL3LD 1:1556bcaaf759 458
DL3LD 1:1556bcaaf759 459 * @retval None.
DL3LD 1:1556bcaaf759 460 */
DL3LD 1:1556bcaaf759 461 void ft5336_TS_GetTouchInfo(uint16_t DeviceAddr,
DL3LD 1:1556bcaaf759 462 uint32_t touchIdx,
DL3LD 1:1556bcaaf759 463 uint32_t * pWeight,
DL3LD 1:1556bcaaf759 464 uint32_t * pArea,
DL3LD 1:1556bcaaf759 465 uint32_t * pEvent)
DL3LD 1:1556bcaaf759 466 {
DL3LD 1:1556bcaaf759 467 volatile uint8_t ucReadData = 0;
DL3LD 1:1556bcaaf759 468 uint8_t regAddressXHigh = 0;
DL3LD 1:1556bcaaf759 469 uint8_t regAddressPWeight = 0;
DL3LD 1:1556bcaaf759 470 uint8_t regAddressPMisc = 0;
DL3LD 1:1556bcaaf759 471
DL3LD 1:1556bcaaf759 472 if(touchIdx < ft5336_handle.currActiveTouchNb)
DL3LD 1:1556bcaaf759 473 {
DL3LD 1:1556bcaaf759 474 switch(touchIdx)
DL3LD 1:1556bcaaf759 475 {
DL3LD 1:1556bcaaf759 476 case 0 :
DL3LD 1:1556bcaaf759 477 regAddressXHigh = FT5336_P1_XH_REG;
DL3LD 1:1556bcaaf759 478 regAddressPWeight = FT5336_P1_WEIGHT_REG;
DL3LD 1:1556bcaaf759 479 regAddressPMisc = FT5336_P1_MISC_REG;
DL3LD 1:1556bcaaf759 480 break;
DL3LD 1:1556bcaaf759 481
DL3LD 1:1556bcaaf759 482 case 1 :
DL3LD 1:1556bcaaf759 483 regAddressXHigh = FT5336_P2_XH_REG;
DL3LD 1:1556bcaaf759 484 regAddressPWeight = FT5336_P2_WEIGHT_REG;
DL3LD 1:1556bcaaf759 485 regAddressPMisc = FT5336_P2_MISC_REG;
DL3LD 1:1556bcaaf759 486 break;
DL3LD 1:1556bcaaf759 487
DL3LD 1:1556bcaaf759 488 case 2 :
DL3LD 1:1556bcaaf759 489 regAddressXHigh = FT5336_P3_XH_REG;
DL3LD 1:1556bcaaf759 490 regAddressPWeight = FT5336_P3_WEIGHT_REG;
DL3LD 1:1556bcaaf759 491 regAddressPMisc = FT5336_P3_MISC_REG;
DL3LD 1:1556bcaaf759 492 break;
DL3LD 1:1556bcaaf759 493
DL3LD 1:1556bcaaf759 494 case 3 :
DL3LD 1:1556bcaaf759 495 regAddressXHigh = FT5336_P4_XH_REG;
DL3LD 1:1556bcaaf759 496 regAddressPWeight = FT5336_P4_WEIGHT_REG;
DL3LD 1:1556bcaaf759 497 regAddressPMisc = FT5336_P4_MISC_REG;
DL3LD 1:1556bcaaf759 498 break;
DL3LD 1:1556bcaaf759 499
DL3LD 1:1556bcaaf759 500 case 4 :
DL3LD 1:1556bcaaf759 501 regAddressXHigh = FT5336_P5_XH_REG;
DL3LD 1:1556bcaaf759 502 regAddressPWeight = FT5336_P5_WEIGHT_REG;
DL3LD 1:1556bcaaf759 503 regAddressPMisc = FT5336_P5_MISC_REG;
DL3LD 1:1556bcaaf759 504 break;
DL3LD 1:1556bcaaf759 505
DL3LD 1:1556bcaaf759 506 case 5 :
DL3LD 1:1556bcaaf759 507 regAddressXHigh = FT5336_P6_XH_REG;
DL3LD 1:1556bcaaf759 508 regAddressPWeight = FT5336_P6_WEIGHT_REG;
DL3LD 1:1556bcaaf759 509 regAddressPMisc = FT5336_P6_MISC_REG;
DL3LD 1:1556bcaaf759 510 break;
DL3LD 1:1556bcaaf759 511
DL3LD 1:1556bcaaf759 512 case 6 :
DL3LD 1:1556bcaaf759 513 regAddressXHigh = FT5336_P7_XH_REG;
DL3LD 1:1556bcaaf759 514 regAddressPWeight = FT5336_P7_WEIGHT_REG;
DL3LD 1:1556bcaaf759 515 regAddressPMisc = FT5336_P7_MISC_REG;
DL3LD 1:1556bcaaf759 516 break;
DL3LD 1:1556bcaaf759 517
DL3LD 1:1556bcaaf759 518 case 7 :
DL3LD 1:1556bcaaf759 519 regAddressXHigh = FT5336_P8_XH_REG;
DL3LD 1:1556bcaaf759 520 regAddressPWeight = FT5336_P8_WEIGHT_REG;
DL3LD 1:1556bcaaf759 521 regAddressPMisc = FT5336_P8_MISC_REG;
DL3LD 1:1556bcaaf759 522 break;
DL3LD 1:1556bcaaf759 523
DL3LD 1:1556bcaaf759 524 case 8 :
DL3LD 1:1556bcaaf759 525 regAddressXHigh = FT5336_P9_XH_REG;
DL3LD 1:1556bcaaf759 526 regAddressPWeight = FT5336_P9_WEIGHT_REG;
DL3LD 1:1556bcaaf759 527 regAddressPMisc = FT5336_P9_MISC_REG;
DL3LD 1:1556bcaaf759 528 break;
DL3LD 1:1556bcaaf759 529
DL3LD 1:1556bcaaf759 530 case 9 :
DL3LD 1:1556bcaaf759 531 regAddressXHigh = FT5336_P10_XH_REG;
DL3LD 1:1556bcaaf759 532 regAddressPWeight = FT5336_P10_WEIGHT_REG;
DL3LD 1:1556bcaaf759 533 regAddressPMisc = FT5336_P10_MISC_REG;
DL3LD 1:1556bcaaf759 534 break;
DL3LD 1:1556bcaaf759 535
DL3LD 1:1556bcaaf759 536 default :
DL3LD 1:1556bcaaf759 537 break;
DL3LD 1:1556bcaaf759 538
DL3LD 1:1556bcaaf759 539 } /* end switch(touchIdx) */
DL3LD 1:1556bcaaf759 540
DL3LD 1:1556bcaaf759 541 /* Read Event Id of touch index */
DL3LD 1:1556bcaaf759 542 ucReadData = TS_IO_Read(DeviceAddr, regAddressXHigh);
DL3LD 1:1556bcaaf759 543 * pEvent = (ucReadData & FT5336_TOUCH_EVT_FLAG_MASK) >> FT5336_TOUCH_EVT_FLAG_SHIFT;
DL3LD 1:1556bcaaf759 544
DL3LD 1:1556bcaaf759 545 /* Read weight of touch index */
DL3LD 1:1556bcaaf759 546 ucReadData = TS_IO_Read(DeviceAddr, regAddressPWeight);
DL3LD 1:1556bcaaf759 547 * pWeight = (ucReadData & FT5336_TOUCH_WEIGHT_MASK) >> FT5336_TOUCH_WEIGHT_SHIFT;
DL3LD 1:1556bcaaf759 548
DL3LD 1:1556bcaaf759 549 /* Read area of touch index */
DL3LD 1:1556bcaaf759 550 ucReadData = TS_IO_Read(DeviceAddr, regAddressPMisc);
DL3LD 1:1556bcaaf759 551 * pArea = (ucReadData & FT5336_TOUCH_AREA_MASK) >> FT5336_TOUCH_AREA_SHIFT;
DL3LD 1:1556bcaaf759 552
DL3LD 1:1556bcaaf759 553 } /* of if(touchIdx < ft5336_handle.currActiveTouchNb) */
DL3LD 1:1556bcaaf759 554 }
DL3LD 1:1556bcaaf759 555
DL3LD 1:1556bcaaf759 556 #endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
DL3LD 1:1556bcaaf759 557
DL3LD 1:1556bcaaf759 558 /** @defgroup ft5336_Static_Function_Body
DL3LD 1:1556bcaaf759 559 * @{
DL3LD 1:1556bcaaf759 560 */
DL3LD 1:1556bcaaf759 561
DL3LD 1:1556bcaaf759 562 /* Static functions bodies-----------------------------------------------*/
DL3LD 1:1556bcaaf759 563
DL3LD 1:1556bcaaf759 564
DL3LD 1:1556bcaaf759 565 /**
DL3LD 1:1556bcaaf759 566 * @brief Return the status of I2C was initialized or not.
DL3LD 1:1556bcaaf759 567 * @param None.
DL3LD 1:1556bcaaf759 568 * @retval : I2C initialization status.
DL3LD 1:1556bcaaf759 569 */
DL3LD 1:1556bcaaf759 570 static uint8_t ft5336_Get_I2C_InitializedStatus(void)
DL3LD 1:1556bcaaf759 571 {
DL3LD 1:1556bcaaf759 572 return(ft5336_handle.i2cInitialized);
DL3LD 1:1556bcaaf759 573 }
DL3LD 1:1556bcaaf759 574
DL3LD 1:1556bcaaf759 575 /**
DL3LD 1:1556bcaaf759 576 * @brief I2C initialize if needed.
DL3LD 1:1556bcaaf759 577 * @param None.
DL3LD 1:1556bcaaf759 578 * @retval : None.
DL3LD 1:1556bcaaf759 579 */
DL3LD 1:1556bcaaf759 580 static void ft5336_I2C_InitializeIfRequired(void)
DL3LD 1:1556bcaaf759 581 {
DL3LD 1:1556bcaaf759 582 if(ft5336_Get_I2C_InitializedStatus() == FT5336_I2C_NOT_INITIALIZED)
DL3LD 1:1556bcaaf759 583 {
DL3LD 1:1556bcaaf759 584 /* Initialize TS IO BUS layer (I2C) */
DL3LD 1:1556bcaaf759 585 TS_IO_Init();
DL3LD 1:1556bcaaf759 586
DL3LD 1:1556bcaaf759 587 /* Set state to initialized */
DL3LD 1:1556bcaaf759 588 ft5336_handle.i2cInitialized = FT5336_I2C_INITIALIZED;
DL3LD 1:1556bcaaf759 589 }
DL3LD 1:1556bcaaf759 590 }
DL3LD 1:1556bcaaf759 591
DL3LD 1:1556bcaaf759 592 /**
DL3LD 1:1556bcaaf759 593 * @brief Basic static configuration of TouchScreen
DL3LD 1:1556bcaaf759 594 * @param DeviceAddr: FT5336 Device address for communication on I2C Bus.
DL3LD 1:1556bcaaf759 595 * @retval Status FT5336_STATUS_OK or FT5336_STATUS_NOT_OK.
DL3LD 1:1556bcaaf759 596 */
DL3LD 1:1556bcaaf759 597 static uint32_t ft5336_TS_Configure(uint16_t DeviceAddr)
DL3LD 1:1556bcaaf759 598 {
DL3LD 1:1556bcaaf759 599 uint32_t status = FT5336_STATUS_OK;
DL3LD 1:1556bcaaf759 600
DL3LD 1:1556bcaaf759 601 /* Nothing special to be done for FT5336 */
DL3LD 1:1556bcaaf759 602
DL3LD 1:1556bcaaf759 603 return(status);
DL3LD 1:1556bcaaf759 604 }
DL3LD 1:1556bcaaf759 605
DL3LD 1:1556bcaaf759 606 /**
DL3LD 1:1556bcaaf759 607 * @}
DL3LD 1:1556bcaaf759 608 */
DL3LD 1:1556bcaaf759 609
DL3LD 1:1556bcaaf759 610 /**
DL3LD 1:1556bcaaf759 611 * @}
DL3LD 1:1556bcaaf759 612 */
DL3LD 1:1556bcaaf759 613
DL3LD 1:1556bcaaf759 614 /**
DL3LD 1:1556bcaaf759 615 * @}
DL3LD 1:1556bcaaf759 616 */
DL3LD 1:1556bcaaf759 617
DL3LD 1:1556bcaaf759 618 /**
DL3LD 1:1556bcaaf759 619 * @}
DL3LD 1:1556bcaaf759 620 */
DL3LD 1:1556bcaaf759 621
DL3LD 1:1556bcaaf759 622 /**
DL3LD 1:1556bcaaf759 623 * @}
DL3LD 1:1556bcaaf759 624 */
DL3LD 1:1556bcaaf759 625 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
DL3LD 1:1556bcaaf759 626