HPM SDK
HPMicro Software Development Kit
hpm_ft5406.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_FT5406_H
9 #define HPM_FT5406_H
10 #include "hpm_common.h"
11 #include "hpm_i2c_drv.h"
12 
13 #define FT5406_I2C_ADDR (0x38U)
14 
15 /*
16  * FT5406 registers at operation mode
17  */
18 #define FT5406_DEVICE_MODE (0U)
19 #define FT5406_GEST_ID (0x1U)
20 #define FT5406_TD_STATUS (0x2U)
21 #define FT5406_TOUCH1_XH (0x3U)
22 #define FT5406_TOUCH1_XL (0x4U)
23 #define FT5406_TOUCH1_YH (0x5U)
24 #define FT5406_TOUCH1_YL (0x6U)
25 
26 #define FT5406_TOUCH2_XH (0x9U)
27 #define FT5406_TOUCH2_XL (0xAU)
28 #define FT5406_TOUCH2_YH (0xBU)
29 #define FT5406_TOUCH2_YL (0xCU)
30 
31 #define FT5406_TOUCH3_XH (0xFU)
32 #define FT5406_TOUCH3_XL (0x10U)
33 #define FT5406_TOUCH3_YH (0x11U)
34 #define FT5406_TOUCH3_YL (0x12U)
35 
36 #define FT5406_TOUCH4_XH (0x15U)
37 #define FT5406_TOUCH4_XL (0x16U)
38 #define FT5406_TOUCH4_YH (0x17U)
39 #define FT5406_TOUCH4_YL (0x18U)
40 
41 #define FT5406_TOUCH5_XH (0x1BU)
42 #define FT5406_TOUCH5_XL (0x1CU)
43 #define FT5406_TOUCH5_YH (0x1DU)
44 #define FT5406_TOUCH5_YL (0x1EU)
45 
46 #define FT5406_ID_G_THGROUP (0x80U)
47 #define FT5406_ID_G_THPEAK (0x81U)
48 #define FT5406_ID_G_THCAL (0x82U)
49 #define FT5406_ID_G_THWARTER (0x83U)
50 #define FT5406_ID_G_THTEMP (0x84U)
51 
52 #define FT5406_ID_G_CTRL (0x86U)
53 #define FT5406_ID_G_TIME_ENTER_MONITOR (0x87U)
54 #define FT5406_ID_G_PERIODACTIVE (0x88U)
55 #define FT5406_ID_G_PERIODMONITOR (0x89U)
56 
57 #define FT5406_ID_G_AUTO_CLB_MODE (0xA0U)
58 #define FT5406_ID_G_LIB_VERSION_H (0xA1U)
59 #define FT5406_ID_G_LIB_VERSION_L (0xA2U)
60 #define FT5406_ID_G_CIPHER (0xA3U)
61 #define FT5406_ID_G_MODE (0xA4U)
62 #define FT5406_ID_G_PMODE (0xA5U)
63 #define FT5406_ID_G_FIRM_ID (0xA6U)
64 #define FT5406_ID_G_STATE (0xA7U)
65 #define FT5406_ID_G_FT5201ID (0xA8U)
66 #define FT5406_ID_G_ERR (0xA9U)
67 #define FT5406_ID_G_CLB (0xAAU)
68 #define FT5406_ID_G_B_AREA_TH (0xAEU)
69 
70 #define FT5406_DEVICE_MODE_NORMAL (0)
71 #define FT5406_DEVICE_MODE_SYS_INFO (1U)
72 #define FT5406_DEVICE_MODE_TEST (2U)
73 
74 #define FT5406_STATUS_CONFIGURE (0)
75 #define FT5406_STATUS_WORK (1U)
76 #define FT5406_STATUS_CALIBRATION (2U)
77 #define FT5406_STATUS_FACTORY (3U)
78 #define FT5406_STATUS_AUTO_CALIBRATION (4U)
79 
80 #define FT5406_GESTURE_NO_GESTURE (0)
81 #define FT5406_GESTURE_MOVE_UP (0x10U)
82 #define FT5406_GESTURE_MOVE_LEFT (0x14U)
83 #define FT5406_GESTURE_MOVE_DOWN (0x18U)
84 #define FT5406_GESTURE_MOVE_RIGHT (0x1CU)
85 #define FT5406_GESTURE_ZOOM_IN (0x48U)
86 #define FT5406_GESTURE_ZOOM_OUT (0x49U)
87 
88 #define FT5406_MAX_TOUCH_POINTS (5U)
89 
90 typedef struct {
91  uint8_t x_h;
92  uint8_t x_l;
93  uint8_t y_h;
94  uint8_t y_l;
95  uint16_t reserved;
97 
98 typedef struct {
99  uint8_t gesture;
100  uint8_t status;
103 
104 typedef struct {
107 
108 typedef struct {
109  uint8_t mode;
110  uint8_t bist_comm;
111  uint8_t bist_stat;
112  uint8_t reserved0[4];
113  uint8_t uid[8];
114  uint8_t bl_verh;
115  uint8_t bl_verl;
116  uint8_t fts_ic_verh;
117  uint8_t fts_ic_verl;
118  uint8_t app_idh;
119  uint8_t app_idl;
120  uint8_t app_verh;
121  uint8_t app_verl;
122  uint8_t reserved1[4];
123  uint8_t cid[5];
125 
126 #ifdef __cplusplus
127 extern "C" {
128 #endif
129 
130 /*
131  * ft5406 initialization routine
132  */
134 
135 /*
136  * ft5406 set working mode
137  */
138 hpm_stat_t ft5406_set_mode(ft5406_context_t *context, uint8_t mode);
139 
140 /*
141  * ft5406 get system information
142  */
144  ft5406_sys_info_t *info);
145 
146 /*
147  * ft5406 read touch data
148  */
150  ft5406_touch_data_t *touch_data);
151 
152 /*
153  * ft5406 read data
154  */
155 hpm_stat_t ft5406_read_data(ft5406_context_t *context, uint8_t addr,
156  uint8_t *buf, uint32_t size);
157 
158 /*
159  * ft5406 write value to given register
160  */
162  uint8_t reg, uint8_t val);
163 
164 /*
165  * ft5406 read value of given register
166  */
167 hpm_stat_t ft5406_read_register(ft5406_context_t *context, uint8_t reg, uint8_t *buf);
168 
169 #ifdef __cplusplus
170 }
171 #endif
172 #endif /* HPM_FT5406_H */
uint32_t hpm_stat_t
Definition: hpm_common.h:123
static void size
Definition: hpm_math.h:6899
hpm_stat_t ft5406_get_sys_info(ft5406_context_t *context, ft5406_sys_info_t *info)
Definition: hpm_ft5406.c:30
hpm_stat_t ft5406_read_touch_data(ft5406_context_t *context, ft5406_touch_data_t *touch_data)
Definition: hpm_ft5406.c:47
hpm_stat_t ft5406_set_mode(ft5406_context_t *context, uint8_t mode)
Definition: hpm_ft5406.c:20
hpm_stat_t ft5406_write_register(ft5406_context_t *context, uint8_t reg, uint8_t val)
Definition: hpm_ft5406.c:15
#define FT5406_MAX_TOUCH_POINTS
Definition: hpm_ft5406.h:88
hpm_stat_t ft5406_init(ft5406_context_t *context)
Definition: hpm_ft5406.c:25
hpm_stat_t ft5406_read_data(ft5406_context_t *context, uint8_t addr, uint8_t *buf, uint32_t size)
Definition: hpm_ft5406.c:42
hpm_stat_t ft5406_read_register(ft5406_context_t *context, uint8_t reg, uint8_t *buf)
Definition: hpm_ft5406.c:10
Definition: hpm_i2c_regs.h:12
Definition: hpm_ft5406.h:104
I2C_Type * ptr
Definition: hpm_ft5406.h:105
Definition: hpm_ft5406.h:108
uint8_t app_idh
Definition: hpm_ft5406.h:118
uint8_t app_verh
Definition: hpm_ft5406.h:120
uint8_t mode
Definition: hpm_ft5406.h:109
uint8_t app_idl
Definition: hpm_ft5406.h:119
uint8_t bist_comm
Definition: hpm_ft5406.h:110
uint8_t app_verl
Definition: hpm_ft5406.h:121
uint8_t bist_stat
Definition: hpm_ft5406.h:111
uint8_t fts_ic_verh
Definition: hpm_ft5406.h:116
uint8_t bl_verl
Definition: hpm_ft5406.h:115
uint8_t fts_ic_verl
Definition: hpm_ft5406.h:117
uint8_t bl_verh
Definition: hpm_ft5406.h:114
Definition: hpm_ft5406.h:98
uint8_t status
Definition: hpm_ft5406.h:100
uint8_t gesture
Definition: hpm_ft5406.h:99
Definition: hpm_ft5406.h:90
uint8_t x_h
Definition: hpm_ft5406.h:91
uint16_t reserved
Definition: hpm_ft5406.h:95
uint8_t y_l
Definition: hpm_ft5406.h:94
uint8_t y_h
Definition: hpm_ft5406.h:93
uint8_t x_l
Definition: hpm_ft5406.h:92