Skip to content

Commit f412e5d

Browse files
interrupt management with mbed os task
1 parent 78489d8 commit f412e5d

File tree

3 files changed

+20
-29
lines changed

3 files changed

+20
-29
lines changed

examples/GigaDisplay_touch/GigaDisplay_touch.ino

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,7 @@ void setup() {
3838
}
3939

4040
void loop() {
41-
#if TOUCH_MODE
42-
touch.detect();
43-
#else
41+
#if (TOUCH_MODE == 0)
4442
uint8_t contacts;
4543
GDTpoint_t points[5];
4644
if(touch.detect(contacts, points)) {

src/Arduino_GigaDisplayTouch.cpp

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@
1616
#define GT911_REG_CONFIG_VERSION 0x8047
1717

1818
/* Private variables ---------------------------------------------------------*/
19-
volatile bool _gt911DataReadyIrq = false;
19+
rtos::Thread t;
20+
events::EventQueue queue(32 * EVENTS_EVENT_SIZE);
2021

2122
/* Private function prototypes -----------------------------------------------*/
2223
void _gt911_irqHandler();
2324

2425
/* Functions -----------------------------------------------------------------*/
2526
Arduino_GigaDisplayTouch::Arduino_GigaDisplayTouch(TwoWire& wire, uint8_t intPin, uint8_t rstPin, uint8_t addr)
26-
: _wire{wire}, _intPin{intPin}, _rstPin{rstPin}, _addr{addr}
27+
: _wire{wire}, _intPin{intPin}, _rstPin{rstPin}, _addr{addr}, _irqInt{digitalPinToPinName(intPin)}
2728
{ }
2829

2930
Arduino_GigaDisplayTouch::~Arduino_GigaDisplayTouch()
@@ -55,7 +56,6 @@ bool Arduino_GigaDisplayTouch::begin() {
5556
delay(51);
5657
pinMode(_intPin, INPUT);
5758

58-
_gt911DataReadyIrq = false;
5959
_gt911TouchHandler = nullptr;
6060

6161
/* GT911 test communication */
@@ -68,13 +68,6 @@ bool Arduino_GigaDisplayTouch::begin() {
6868
void Arduino_GigaDisplayTouch::end()
6969
{ }
7070

71-
void Arduino_GigaDisplayTouch::detect() {
72-
if (_gt911DataReadyIrq) {
73-
_gt911onIrq();
74-
_gt911DataReadyIrq = false;
75-
}
76-
}
77-
7871
bool Arduino_GigaDisplayTouch::detect(uint8_t& contacts, GDTpoint_t* points) {
7972
uint8_t rawpoints[GT911_MAX_CONTACTS * GT911_CONTACT_SIZE];
8073
uint8_t error;
@@ -99,7 +92,9 @@ bool Arduino_GigaDisplayTouch::detect(uint8_t& contacts, GDTpoint_t* points) {
9992
}
10093

10194
void Arduino_GigaDisplayTouch::attach(void (*handler)(uint8_t, GDTpoint_t*)) {
102-
attachInterrupt(_intPin, _gt911_irqHandler, RISING);
95+
t.start(callback(&queue, &events::EventQueue::dispatch_forever));
96+
_irqInt.rise(queue.event(mbed::callback(this, &Arduino_GigaDisplayTouch::_gt911onIrq)));
97+
10398
_gt911TouchHandler = handler;
10499
}
105100

@@ -186,10 +181,4 @@ uint8_t Arduino_GigaDisplayTouch::_gt911ReadInputCoord(uint8_t * pointsbuf, uint
186181
return 0;
187182
}
188183

189-
void _gt911_irqHandler() {
190-
noInterrupts();
191-
_gt911DataReadyIrq = true;
192-
interrupts();
193-
}
194-
195184
/**** END OF FILE ****/

src/Arduino_GigaDisplayTouch.h

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
/* Includes ------------------------------------------------------------------*/
1515
#include <Arduino.h>
1616
#include "Wire.h"
17+
#include "mbed.h"
1718
#include "pinDefinitions.h"
1819

1920
/* Exported defines ----------------------------------------------------------*/
@@ -52,24 +53,27 @@ class Arduino_GigaDisplayTouch {
5253
uint8_t rstPin = PinNameToIndex(PD_5),
5354
uint8_t addr = GT911_I2C_ADDR_BA_BB);
5455
#else
55-
Arduino_GigaDisplayTouch(TwoWire& wire, uint8_t intPin, uint8_t rstPin, uint8_t addr);
56+
Arduino_GigaDisplayTouch(TwoWire& wire,
57+
uint8_t intPin,
58+
uint8_t rstPin,
59+
uint8_t addr);
5660
#endif
5761
~Arduino_GigaDisplayTouch();
5862

5963
bool begin();
6064
void end();
6165

62-
void detect();
6366
bool detect(uint8_t& contacts, GDTpoint_t* points);
6467
void attach(void (*handler)(uint8_t, GDTpoint_t*));
6568
private:
66-
TwoWire& _wire;
67-
uint8_t _intPin;
68-
uint8_t _rstPin;
69-
uint8_t _addr;
70-
GDTpoint_t _points[GT911_MAX_CONTACTS];
71-
void (*_gt911TouchHandler)(uint8_t, GDTpoint_t*);
72-
69+
TwoWire& _wire;
70+
uint8_t _intPin;
71+
mbed::InterruptIn _irqInt;
72+
uint8_t _rstPin;
73+
uint8_t _addr;
74+
GDTpoint_t _points[GT911_MAX_CONTACTS];
75+
void (*_gt911TouchHandler)(uint8_t, GDTpoint_t*);
76+
7377
uint8_t _gt911WriteOp(uint16_t reg, uint8_t data);
7478
uint8_t _gt911WriteBytesOp(uint16_t reg, uint8_t * data, uint8_t len);
7579
uint8_t _gt911ReadOp(uint16_t reg, uint8_t * data, uint8_t len);

0 commit comments

Comments
 (0)