HPM SDK
HPMicro Software Development Kit
hpm_gt9xx.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_GT9XX_H
9 #define HPM_GT9XX_H
10 #include "board.h"
11 #include "hpm_common.h"
12 #include "hpm_i2c_drv.h"
13 
14 #ifdef BOARD_GT9XX_ADDR
15 /* if i2c addres is specified by board, use it */
16 #define GT9XX_I2C_ADDR BOARD_GT9XX_ADDR
17 /* no auto probe in this case */
18 #define GT9XX_NO_AUTO_PROBE 1
19 #else
20 #undef GT9XX_I2C_ADDR
21 
22 /* enable auto probe */
23 #ifndef GT9XX_NO_AUTO_PROBE
24 #define GT9XX_NO_AUTO_PROBE 0
25 #endif
26 
27 /* i2c device address candidates */
28 #define GT9XX_I2C_ADDR0 (0x14U)
29 #define GT9XX_I2C_ADDR1 (0x5DU)
30 #endif
31 
32 #define GT9XX_PRODUCT_ID (0x313139U)
33 /*
34  * GT9XX registers at operation mode
35  */
36 
37 #define GT9XX_CMD (0x8040U)
38 #define GT9XX_CMD_READ_COORD_STAT (0U)
39 #define GT9XX_CMD_READ_RAW_DATA (1U)
40 #define GT9XX_CMD_SOFT_RESET (2U)
41 #define GT9XX_CMD_READ_SCREEN_OFF (5U)
42 
43 #define GT9XX_CONFIG (0x8047U)
44 
45 #define GT9XX_ID_B0 (0x8140U)
46 #define GT9XX_ID_B1 (0x8141U)
47 #define GT9XX_ID_B2 (0x8142U)
48 #define GT9XX_ID_B4 (0x8143U)
49 #define GT9XX_FW_VERSION_L (0x8144U)
50 #define GT9XX_FW_VERSION_H (0x8145U)
51 #define GT9XX_TOUCH_XL (0x8146U)
52 #define GT9XX_TOUCH_XH (0x8147U)
53 #define GT9XX_TOUCH_YL (0x8148U)
54 #define GT9XX_TOUCH_YH (0x8149U)
55 #define GT9XX_VENDOR_ID (0x814AU)
56 #define GT9XX_STATUS (0x814EU)
57 #define GT9XX_GET_STATUS_NUM_OF_POINTS(x) ((x) & 0xFU)
58 #define GT9XX_GET_STATUS_LARGE_DETECT(x) (((x) & 0x40U) >> 6)
59 #define GT9XX_GET_STATUS_BUFFER_STAT(x) (((x) & 0x80U) >> 7)
60 #define GT9XX_FIRST_POINT (0x814FU)
61 
62 #define GT9XX_MAX_TOUCH_POINTS (5U)
63 #define GT9XX_CONFIG_DATA_SIZE (186U)
64 #define GT9XX_CONFIG_DATA_CONFIG_VERSION (0U)
65 #define GT9XX_CONFIG_DATA_RESOLUTION_XL (1U)
66 #define GT9XX_CONFIG_DATA_RESOLUTION_XH (2U)
67 #define GT9XX_CONFIG_DATA_RESOLUTION_YL (3U)
68 #define GT9XX_CONFIG_DATA_RESOLUTION_YH (4U)
69 #define GT9XX_CONFIG_DATA_TOUCH_NUMBER (5U)
70 #define GT9XX_CONFIG_DATA_MODULE_SWITCH1 (6U)
71 
72 typedef struct {
73  uint8_t track_id;
74  uint8_t x_l;
75  uint8_t x_h;
76  uint8_t y_l;
77  uint8_t y_h;
78  uint8_t size_l;
79  uint8_t size_h;
80  uint8_t reserved;
82 
83 typedef struct {
84  uint8_t status;
87 
88 typedef struct {
90  uint16_t abs_x_max;
91  uint16_t abs_y_max;
93  bool reverse_x;
94  bool reverse_y;
96 
97 #ifdef __cplusplus
98 extern "C" {
99 #endif
100 
101 /*
102  * gt9xx initialization routine
103  */
104 hpm_stat_t gt9xx_init(gt9xx_context_t *context, uint16_t width, uint16_t height);
105 
106 /*
107  * gt9xx read touch data
108  */
110  gt9xx_touch_data_t *touch_data);
111 
112 /*
113  * gt9xx read data
114  */
115 hpm_stat_t gt9xx_read_data(gt9xx_context_t *context, uint16_t addr,
116  uint8_t *buf, uint32_t size);
117 
118 /*
119  * gt9xx write value to given register
120  */
122  uint16_t reg, uint8_t val);
123 
124 /*
125  * gt9xx read value of given register
126  */
127 hpm_stat_t gt9xx_read_register(gt9xx_context_t *context, uint16_t reg, uint8_t *buf);
128 
129 /*
130  * gt9xx read config data
131  */
132 hpm_stat_t gt9xx_read_config(gt9xx_context_t *context, uint8_t *buf, uint8_t size);
133 #ifdef __cplusplus
134 }
135 #endif
136 #endif /* HPM_GT9XX_H */
uint32_t hpm_stat_t
Definition: hpm_common.h:126
static void size
Definition: hpm_math.h:6938
hpm_stat_t gt9xx_read_config(gt9xx_context_t *context, uint8_t *buf, uint8_t size)
Definition: hpm_gt9xx.c:52
hpm_stat_t gt9xx_read_register(gt9xx_context_t *context, uint16_t reg, uint8_t *buf)
Definition: hpm_gt9xx.c:28
hpm_stat_t gt9xx_init(gt9xx_context_t *context, uint16_t width, uint16_t height)
Definition: hpm_gt9xx.c:57
hpm_stat_t gt9xx_write_register(gt9xx_context_t *context, uint16_t reg, uint8_t val)
Definition: hpm_gt9xx.c:33
hpm_stat_t gt9xx_read_touch_data(gt9xx_context_t *context, gt9xx_touch_data_t *touch_data)
Definition: hpm_gt9xx.c:133
#define GT9XX_MAX_TOUCH_POINTS
Definition: hpm_gt9xx.h:62
hpm_stat_t gt9xx_read_data(gt9xx_context_t *context, uint16_t addr, uint8_t *buf, uint32_t size)
Definition: hpm_gt9xx.c:11
Definition: hpm_i2c_regs.h:12
Definition: hpm_gt9xx.h:88
I2C_Type * ptr
Definition: hpm_gt9xx.h:89
bool reverse_x
Definition: hpm_gt9xx.h:93
bool exchange_xy
Definition: hpm_gt9xx.h:92
bool reverse_y
Definition: hpm_gt9xx.h:94
uint16_t abs_y_max
Definition: hpm_gt9xx.h:91
uint16_t abs_x_max
Definition: hpm_gt9xx.h:90
Definition: hpm_gt9xx.h:83
uint8_t status
Definition: hpm_gt9xx.h:84
Definition: hpm_gt9xx.h:72
uint8_t y_h
Definition: hpm_gt9xx.h:77
uint8_t reserved
Definition: hpm_gt9xx.h:80
uint8_t y_l
Definition: hpm_gt9xx.h:76
uint8_t size_l
Definition: hpm_gt9xx.h:78
uint8_t x_h
Definition: hpm_gt9xx.h:75
uint8_t size_h
Definition: hpm_gt9xx.h:79
uint8_t track_id
Definition: hpm_gt9xx.h:73
uint8_t x_l
Definition: hpm_gt9xx.h:74