STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
ft6x06.h
Go to the documentation of this file.
1 
39 /* Define to prevent recursive inclusion -------------------------------------*/
40 #ifndef __FT6X06_H
41 #define __FT6X06_H
42 
43 #ifdef __cplusplus
44 extern "C" {
45 #endif
46 
47 /* Set Multi-touch as non supported */
48 #ifndef TS_MULTI_TOUCH_SUPPORTED
49  #define TS_MULTI_TOUCH_SUPPORTED 0
50 #endif
51 
52 /* Set Auto-calibration as non supported */
53 #ifndef TS_AUTO_CALIBRATION_SUPPORTED
54  #define TS_AUTO_CALIBRATION_SUPPORTED 0
55 #endif
56 
57 /* Includes ------------------------------------------------------------------*/
58 #include "../Common/ts.h"
59 
60 /* Macros --------------------------------------------------------------------*/
61 
65 typedef struct
66 {
67  uint8_t i2cInitialized;
68 
69  /* field holding the current number of simultaneous active touches */
71 
72  /* field holding the touch index currently managed */
74 
76 
89  /* Exported types ------------------------------------------------------------*/
90 
95  /* Exported constants --------------------------------------------------------*/
96 
101  /* Maximum border values of the touchscreen pad */
102 #define FT_6206_MAX_WIDTH ((uint16_t)800) /* Touchscreen pad max width */
103 #define FT_6206_MAX_HEIGHT ((uint16_t)480) /* Touchscreen pad max height */
104 
105  /* Possible values of driver functions return status */
106 #define FT6206_STATUS_OK 0
107 #define FT6206_STATUS_NOT_OK 1
108 
109  /* Possible values of global variable 'TS_I2C_Initialized' */
110 #define FT6206_I2C_NOT_INITIALIZED 0
111 #define FT6206_I2C_INITIALIZED 1
112 
113  /* Max detectable simultaneous touches */
114 #define FT6206_MAX_DETECTABLE_TOUCH 2
115 
120  /* Current mode register of the FT6206 (R/W) */
121 #define FT6206_DEV_MODE_REG 0x00
122 
123  /* Possible values of FT6206_DEV_MODE_REG */
124 #define FT6206_DEV_MODE_WORKING 0x00
125 #define FT6206_DEV_MODE_FACTORY 0x04
126 
127 #define FT6206_DEV_MODE_MASK 0x7
128 #define FT6206_DEV_MODE_SHIFT 4
129 
130  /* Gesture ID register */
131 #define FT6206_GEST_ID_REG 0x01
132 
133  /* Possible values of FT6206_GEST_ID_REG */
134 #define FT6206_GEST_ID_NO_GESTURE 0x00
135 #define FT6206_GEST_ID_MOVE_UP 0x10
136 #define FT6206_GEST_ID_MOVE_RIGHT 0x14
137 #define FT6206_GEST_ID_MOVE_DOWN 0x18
138 #define FT6206_GEST_ID_MOVE_LEFT 0x1C
139 #define FT6206_GEST_ID_ZOOM_IN 0x48
140 #define FT6206_GEST_ID_ZOOM_OUT 0x49
141 
142  /* Touch Data Status register : gives number of active touch points (0..2) */
143 #define FT6206_TD_STAT_REG 0x02
144 
145  /* Values related to FT6206_TD_STAT_REG */
146 #define FT6206_TD_STAT_MASK 0x0F
147 #define FT6206_TD_STAT_SHIFT 0x00
148 
149  /* Values Pn_XH and Pn_YH related */
150 #define FT6206_TOUCH_EVT_FLAG_PRESS_DOWN 0x00
151 #define FT6206_TOUCH_EVT_FLAG_LIFT_UP 0x01
152 #define FT6206_TOUCH_EVT_FLAG_CONTACT 0x02
153 #define FT6206_TOUCH_EVT_FLAG_NO_EVENT 0x03
154 
155 #define FT6206_TOUCH_EVT_FLAG_SHIFT 6
156 #define FT6206_TOUCH_EVT_FLAG_MASK (3 << FT6206_TOUCH_EVT_FLAG_SHIFT)
157 
158 #define FT6206_MSB_MASK 0x0F
159 #define FT6206_MSB_SHIFT 0
160 
161  /* Values Pn_XL and Pn_YL related */
162 #define FT6206_LSB_MASK 0xFF
163 #define FT6206_LSB_SHIFT 0
164 
165 #define FT6206_P1_XH_REG 0x03
166 #define FT6206_P1_XL_REG 0x04
167 #define FT6206_P1_YH_REG 0x05
168 #define FT6206_P1_YL_REG 0x06
169 
170  /* Touch Pressure register value (R) */
171 #define FT6206_P1_WEIGHT_REG 0x07
172 
173  /* Values Pn_WEIGHT related */
174 #define FT6206_TOUCH_WEIGHT_MASK 0xFF
175 #define FT6206_TOUCH_WEIGHT_SHIFT 0
176 
177  /* Touch area register */
178 #define FT6206_P1_MISC_REG 0x08
179 
180  /* Values related to FT6206_Pn_MISC_REG */
181 #define FT6206_TOUCH_AREA_MASK (0x04 << 4)
182 #define FT6206_TOUCH_AREA_SHIFT 0x04
183 
184 #define FT6206_P2_XH_REG 0x09
185 #define FT6206_P2_XL_REG 0x0A
186 #define FT6206_P2_YH_REG 0x0B
187 #define FT6206_P2_YL_REG 0x0C
188 #define FT6206_P2_WEIGHT_REG 0x0D
189 #define FT6206_P2_MISC_REG 0x0E
190 
191  /* Threshold for touch detection */
192 #define FT6206_TH_GROUP_REG 0x80
193 
194  /* Values FT6206_TH_GROUP_REG : threshold related */
195 #define FT6206_THRESHOLD_MASK 0xFF
196 #define FT6206_THRESHOLD_SHIFT 0
197 
198  /* Filter function coefficients */
199 #define FT6206_TH_DIFF_REG 0x85
200 
201  /* Control register */
202 #define FT6206_CTRL_REG 0x86
203 
204  /* Values related to FT6206_CTRL_REG */
205 
206  /* Will keep the Active mode when there is no touching */
207 #define FT6206_CTRL_KEEP_ACTIVE_MODE 0x00
208 
209  /* Switching from Active mode to Monitor mode automatically when there is no touching */
210 #define FT6206_CTRL_KEEP_AUTO_SWITCH_MONITOR_MODE 0x01
211 
212  /* The time period of switching from Active mode to Monitor mode when there is no touching */
213 #define FT6206_TIMEENTERMONITOR_REG 0x87
214 
215  /* Report rate in Active mode */
216 #define FT6206_PERIODACTIVE_REG 0x88
217 
218  /* Report rate in Monitor mode */
219 #define FT6206_PERIODMONITOR_REG 0x89
220 
221  /* The value of the minimum allowed angle while Rotating gesture mode */
222 #define FT6206_RADIAN_VALUE_REG 0x91
223 
224  /* Maximum offset while Moving Left and Moving Right gesture */
225 #define FT6206_OFFSET_LEFT_RIGHT_REG 0x92
226 
227  /* Maximum offset while Moving Up and Moving Down gesture */
228 #define FT6206_OFFSET_UP_DOWN_REG 0x93
229 
230  /* Minimum distance while Moving Left and Moving Right gesture */
231 #define FT6206_DISTANCE_LEFT_RIGHT_REG 0x94
232 
233  /* Minimum distance while Moving Up and Moving Down gesture */
234 #define FT6206_DISTANCE_UP_DOWN_REG 0x95
235 
236  /* Maximum distance while Zoom In and Zoom Out gesture */
237 #define FT6206_DISTANCE_ZOOM_REG 0x96
238 
239  /* High 8-bit of LIB Version info */
240 #define FT6206_LIB_VER_H_REG 0xA1
241 
242  /* Low 8-bit of LIB Version info */
243 #define FT6206_LIB_VER_L_REG 0xA2
244 
245  /* Chip Selecting */
246 #define FT6206_CIPHER_REG 0xA3
247 
248  /* Interrupt mode register (used when in interrupt mode) */
249 #define FT6206_GMODE_REG 0xA4
250 
251 #define FT6206_G_MODE_INTERRUPT_MASK 0x03
252 #define FT6206_G_MODE_INTERRUPT_SHIFT 0x00
253 
254  /* Possible values of FT6206_GMODE_REG */
255 #define FT6206_G_MODE_INTERRUPT_POLLING 0x00
256 #define FT6206_G_MODE_INTERRUPT_TRIGGER 0x01
257 
258  /* Current power mode the FT6206 system is in (R) */
259 #define FT6206_PWR_MODE_REG 0xA5
260 
261  /* FT6206 firmware version */
262 #define FT6206_FIRMID_REG 0xA6
263 
264  /* FT6206 Chip identification register */
265 #define FT6206_CHIP_ID_REG 0xA8
266 
267  /* Possible values of FT6206_CHIP_ID_REG */
268 #define FT6206_ID_VALUE 0x11
269 
270  /* Release code version */
271 #define FT6206_RELEASE_CODE_ID_REG 0xAF
272 
273  /* Current operating mode the FT6206 system is in (R) */
274 #define FT6206_STATE_REG 0xBC
275 
280  /* Exported macro ------------------------------------------------------------*/
281 
286  /* Exported functions --------------------------------------------------------*/
287 
303 void ft6x06_Init(uint16_t DeviceAddr);
304 
310 void ft6x06_Reset(uint16_t DeviceAddr);
311 
318 uint16_t ft6x06_ReadID(uint16_t DeviceAddr);
319 
325 void ft6x06_TS_Start(uint16_t DeviceAddr);
326 
334 uint8_t ft6x06_TS_DetectTouch(uint16_t DeviceAddr);
335 
345 void ft6x06_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y);
346 
353 void ft6x06_TS_EnableIT(uint16_t DeviceAddr);
354 
361 void ft6x06_TS_DisableIT(uint16_t DeviceAddr);
362 
370 uint8_t ft6x06_TS_ITStatus (uint16_t DeviceAddr);
371 
378 void ft6x06_TS_ClearIT (uint16_t DeviceAddr);
379 
380 /**** NEW FEATURES enabled when Multi-touch support is enabled ****/
381 
382 #if (TS_MULTI_TOUCH_SUPPORTED == 1)
383 
390 void ft6x06_TS_GetGestureID(uint16_t DeviceAddr, uint32_t * pGestureId);
391 
407 void ft6x06_TS_GetTouchInfo(uint16_t DeviceAddr,
408  uint32_t touchIdx,
409  uint32_t * pWeight,
410  uint32_t * pArea,
411  uint32_t * pEvent);
412 
413 #endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
414 
415 /* Imported TS IO functions --------------------------------------------------------*/
416 
421 /* TouchScreen (TS) external IO functions */
422 extern void TS_IO_Init(void);
423 extern void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value);
424 extern uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg);
425 extern uint16_t TS_IO_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length);
426 extern void TS_IO_Delay(uint32_t Delay);
427 
432  /* Imported global variables --------------------------------------------------------*/
433 
439 /* Touch screen driver structure */
441 
446 #ifdef __cplusplus
447 }
448 #endif
449 #endif /* __FT6X06_H */
450 
451 
467 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
void TS_IO_Init(void)
Initializes Touchscreen low level.
void ft6x06_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y)
Get the touch screen X and Y positions values Manage multi touch thanks to touch Index global variabl...
Definition: ft6x06.c:246
void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value)
Writes a single data.
void ft6x06_Init(uint16_t DeviceAddr)
ft6x06 Control functions
Definition: ft6x06.c:133
uint8_t currActiveTouchIdx
Definition: ft6x06.h:73
void ft6x06_Reset(uint16_t DeviceAddr)
Software Reset the ft6x06.
Definition: ft6x06.c:164
TS_DrvTypeDef ft6x06_ts_drv
Definition: ft6x06.c:71
uint8_t currActiveTouchNb
Definition: ft6x06.h:70
void ft6x06_TS_EnableIT(uint16_t DeviceAddr)
Configure the FT6206 device to generate IT on given INT pin connected to MCU as EXTI.
Definition: ft6x06.c:285
uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg)
Reads a single data.
uint8_t ft6x06_TS_DetectTouch(uint16_t DeviceAddr)
Return if there is touches detected or not. Try to detect new touches and forget the old ones (reset ...
Definition: ft6x06.c:214
void ft6x06_TS_ClearIT(uint16_t DeviceAddr)
Clear IT status in FT6206 interrupt status clear registers Should be called Following an EXTI coming ...
Definition: ft6x06.c:330
void ft6x06_TS_DisableIT(uint16_t DeviceAddr)
Configure the FT6206 device to stop generating IT on the given INT pin connected to MCU as EXTI...
Definition: ft6x06.c:300
uint16_t TS_IO_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length)
Reads multiple data with I2C communication channel from TouchScreen.
void TS_IO_Delay(uint32_t Delay)
Delay function used in TouchScreen low level driver.
uint8_t ft6x06_TS_ITStatus(uint16_t DeviceAddr)
Get IT status from FT6206 interrupt status registers Should be called Following an EXTI coming to the...
Definition: ft6x06.c:317
void ft6x06_TS_Start(uint16_t DeviceAddr)
Configures the touch Screen IC device to start detecting touches.
Definition: ft6x06.c:192
uint8_t i2cInitialized
Definition: ft6x06.h:67
uint16_t ft6x06_ReadID(uint16_t DeviceAddr)
Read the ft6x06 device ID, pre intitalize I2C in case of need to be able to read the FT6206 device ID...
Definition: ft6x06.c:176