21
21
* @author Leonardo Cavagnis
22
22
* @brief Header file for the Arduino Giga Display Touch library.
23
23
*
24
- * This library allows to capture up to 5 concurrent touch points on Arduino Giga Display Shield.
25
- * Supported controller: Goodix GT911
24
+ * This library allows to capture up to 5 concurrent touch points on Arduino
25
+ * Giga Display Shield. Supported controller: Goodix GT911
26
26
*/
27
27
28
28
#ifndef __ARDUINO_GIGADISPLAYTOUCH_H
29
29
#define __ARDUINO_GIGADISPLAYTOUCH_H
30
30
31
31
/* Includes ------------------------------------------------------------------*/
32
- #include < Arduino.h>
33
32
#include " Wire.h"
33
+ #include < Arduino.h>
34
+ #ifdef __MBED__
34
35
#include " mbed.h"
35
36
#include " pinDefinitions.h"
37
+ #endif
36
38
37
39
/* Exported defines ----------------------------------------------------------*/
38
- #define GT911_I2C_ADDR_BA_BB (0x5D | 0x80 ) // 0xBA/0xBB - 0x5D (7bit address)
39
- #define GT911_I2C_ADDR_28_29 (0x14 | 0x80 ) // 0x28/0x29 - 0x14 (7bit address)
40
+ #define GT911_I2C_ADDR_BA_BB (0x5D | 0x80 ) // 0xBA/0xBB - 0x5D (7bit address)
41
+ #define GT911_I2C_ADDR_28_29 (0x14 | 0x80 ) // 0x28/0x29 - 0x14 (7bit address)
40
42
41
- #define GT911_CONTACT_SIZE 8
42
- #define GT911_MAX_CONTACTS 5
43
+ #define GT911_CONTACT_SIZE 8
44
+ #define GT911_MAX_CONTACTS 5
43
45
44
46
/* Exported types ------------------------------------------------------------*/
45
47
typedef struct GDTpoint_s GDTpoint_t;
@@ -52,87 +54,123 @@ typedef struct GDTpoint_s GDTpoint_t;
52
54
* @brief Struct representing a touch point.
53
55
*/
54
56
struct GDTpoint_s {
55
- // 0x814F-0x8156, ... 0x8176 (5 points)
57
+ // 0x814F-0x8156, ... 0x8176 (5 points)
56
58
uint8_t trackId;
57
59
uint16_t x;
58
60
uint16_t y;
59
61
uint16_t area;
60
62
uint8_t reserved;
61
63
};
62
64
63
- /* Class ----------------------------------------------------------------------*/
65
+ /* Class
66
+ * ----------------------------------------------------------------------*/
64
67
65
68
/* *
66
69
* @class Arduino_GigaDisplayTouch
67
70
* @brief Class for Giga Display Touch controller driver.
68
71
*/
69
72
class Arduino_GigaDisplayTouch {
70
- public:
71
- /* *
72
- * @brief Construct a new touch controller for Giga Display Shield.
73
- *
74
- * @param wire A reference to the Wire interface to be used for communication with the touch controller.
75
- * @param intPin The interrupt pin number for the touch controller.
76
- * @param rstPin The reset pin number for the touch controller.
77
- * @param addr The device address for the touch controller.
78
- */
79
- #if defined(ARDUINO_GIGA)
80
- Arduino_GigaDisplayTouch (TwoWire& wire = Wire1,
81
- uint8_t intPin = PinNameToIndex(PI_1),
82
- uint8_t rstPin = PinNameToIndex(PI_2),
83
- uint8_t addr = GT911_I2C_ADDR_BA_BB);
84
- #elif defined(ARDUINO_PORTENTA_H7_M7)
85
- Arduino_GigaDisplayTouch (TwoWire& wire = Wire,
86
- uint8_t intPin = PinNameToIndex(PD_4),
87
- uint8_t rstPin = PinNameToIndex(PD_5),
88
- uint8_t addr = GT911_I2C_ADDR_BA_BB);
89
- #else
90
- Arduino_GigaDisplayTouch (TwoWire& wire,
91
- uint8_t intPin,
92
- uint8_t rstPin,
93
- uint8_t addr);
94
- #endif
95
- ~Arduino_GigaDisplayTouch ();
96
-
97
-
98
- /* *
99
- * @brief Initialize the touch controller.
100
- *
101
- * @return true If the touch controller is successfully initialized, false Otherwise
102
- */
103
- bool begin ();
104
-
105
- /* *
106
- * @brief De-initialize the touch controller.
107
- */
108
- void end ();
109
-
110
- /* *
111
- * @brief Check if a touch event is detected and get the touch points.
112
- * @param points The array containing the coordinates of the touch points.
113
- * @return uint8_t The number of detected touch points.
114
- */
115
- uint8_t getTouchPoints (GDTpoint_t* points);
116
-
117
- /* *
118
- * @brief Attach an interrupt handler function for touch detection callbacks.
119
- * @param handler The pointer to the user-defined handler function.
120
- */
121
- void onDetect (void (*handler)(uint8_t , GDTpoint_t*));
122
- private:
123
- TwoWire& _wire;
124
- uint8_t _intPin;
125
- mbed::InterruptIn _irqInt;
126
- uint8_t _rstPin;
127
- uint8_t _addr;
128
- GDTpoint_t _points[GT911_MAX_CONTACTS];
129
- void (*_gt911TouchHandler)(uint8_t , GDTpoint_t*);
130
-
131
- uint8_t _gt911WriteOp (uint16_t reg, uint8_t data);
132
- uint8_t _gt911WriteBytesOp (uint16_t reg, uint8_t * data, uint8_t len);
133
- uint8_t _gt911ReadOp (uint16_t reg, uint8_t * data, uint8_t len);
134
- void _gt911onIrq ();
135
- uint8_t _gt911ReadInputCoord (uint8_t * pointsbuf, uint8_t & contacts);
73
+ public:
74
+ #ifdef __MBED__
75
+ /* *
76
+ * @brief Construct a new touch controller for Giga Display Shield.
77
+ *
78
+ * @param wire A reference to the Wire interface to be used for communication
79
+ * with the touch controller.
80
+ * @param intPin The interrupt pin number for the touch controller.
81
+ * @param rstPin The reset pin number for the touch controller.
82
+ * @param addr The device address for the touch controller.
83
+ */
84
+ #if defined(ARDUINO_GIGA)
85
+ Arduino_GigaDisplayTouch (TwoWire &wire = Wire1,
86
+ uint8_t intPin = PinNameToIndex(PI_1),
87
+ uint8_t rstPin = PinNameToIndex(PI_2),
88
+ uint8_t addr = GT911_I2C_ADDR_BA_BB);
89
+ #elif defined(ARDUINO_PORTENTA_H7_M7)
90
+ Arduino_GigaDisplayTouch (TwoWire &wire = Wire,
91
+ uint8_t intPin = PinNameToIndex(PD_4),
92
+ uint8_t rstPin = PinNameToIndex(PD_5),
93
+ uint8_t addr = GT911_I2C_ADDR_BA_BB);
94
+ #else
95
+ Arduino_GigaDisplayTouch (TwoWire &wire, uint8_t intPin, uint8_t rstPin,
96
+ uint8_t addr);
97
+ #endif
98
+ #elif defined(__ZEPHYR__)
99
+ Arduino_GigaDisplayTouch ();
100
+ #endif
101
+
102
+ ~Arduino_GigaDisplayTouch ();
103
+
104
+ /* *
105
+ * @brief Initialize the touch controller.
106
+ *
107
+ * @return true If the touch controller is successfully initialized, false
108
+ * Otherwise
109
+ */
110
+ bool begin ();
111
+
112
+ /* *
113
+ * @brief De-initialize the touch controller.
114
+ */
115
+ void end ();
116
+
117
+ #if defined(__MBED__)
118
+ /* *
119
+ * @brief Check if a touch event is detected and get the touch points.
120
+ * @param points The array containing the coordinates of the touch points.
121
+ * @return uint8_t The number of detected touch points.
122
+ */
123
+ uint8_t getTouchPoints (GDTpoint_t *points);
124
+ #elif defined(__ZEPHYR__)
125
+ /* *
126
+ * @brief Check if a touch event is detected and get the touch points.
127
+ * @param points The array containing the coordinates of the touch points.
128
+ * @param timeout in microseconds.
129
+ * @return uint8_t The number of detected touch points.
130
+ */
131
+ uint8_t getTouchPoints (GDTpoint_t *points, uint32_t timeout = 0 );
132
+
133
+ #endif
134
+ /* *
135
+ * @brief Attach an interrupt handler function for touch detection callbacks.
136
+ * @param handler The pointer to the user-defined handler function.
137
+ */
138
+ void onDetect (void (*handler)(uint8_t , GDTpoint_t *));
139
+
140
+ private:
141
+ #if defined(__MBED__)
142
+ TwoWire &_wire;
143
+ uint8_t _intPin;
144
+ uint8_t _rstPin;
145
+ uint8_t _addr;
146
+ mbed::InterruptIn _irqInt;
147
+ GDTpoint_t _points[GT911_MAX_CONTACTS];
148
+ void (*_gt911TouchHandler)(uint8_t , GDTpoint_t *);
149
+
150
+ uint8_t _gt911WriteOp (uint16_t reg, uint8_t data);
151
+ uint8_t _gt911WriteBytesOp (uint16_t reg, uint8_t *data, uint8_t len);
152
+ uint8_t _gt911ReadOp (uint16_t reg, uint8_t *data, uint8_t len);
153
+ void _gt911onIrq ();
154
+ uint8_t _gt911ReadInputCoord (uint8_t *pointsbuf, uint8_t &contacts);
155
+ #elif defined(__ZEPHYR__)
156
+ /*
157
+ * @brief Support for callbacks from zephyr
158
+ */
159
+ typedef struct {
160
+ size_t x;
161
+ size_t y;
162
+ bool pressed;
163
+ } touch_point_t ;
164
+
165
+ static touch_point_t
166
+ _zephyr_touch_points[CONFIG_INPUT_GT911_MAX_TOUCH_POINTS];
167
+
168
+ static uint8_t _zephyr_touch_cb_slot_num;
169
+ static struct k_sem _zephyr_touch_event_sync;
170
+
171
+ static void _touch_event_callback (struct input_event *evt, void *user_data);
172
+
173
+ #endif
136
174
};
137
175
138
176
#endif /* __ARDUINO_GIGADISPLAYTOUCH_H */
0 commit comments