@@ -125,15 +125,10 @@ const int sum_ngpios = sum_in_list(
125
125
* GPIO callback implementation
126
126
*/
127
127
128
- struct arduino_callback {
129
- voidFuncPtr handler;
130
- bool enabled;
131
- };
132
-
133
128
struct gpio_port_callback {
134
129
struct gpio_callback callback;
135
- struct arduino_callback handlers[max_ngpios];
136
- gpio_port_pins_t pins ;
130
+ voidFuncPtr handlers[max_ngpios];
131
+ uint64_t enabled_pins ;
137
132
const struct device *dev;
138
133
} port_callback[ARRAY_SIZE(gpios)] = {0 };
139
134
@@ -157,7 +152,7 @@ void setInterruptHandler(pin_size_t pinNumber, voidFuncPtr func)
157
152
struct gpio_port_callback *pcb = find_gpio_port_callback (local_gpio_port (pinNumber));
158
153
159
154
if (pcb) {
160
- pcb->handlers [local_gpio_pin (pinNumber)]. handler = func;
155
+ pcb->handlers [local_gpio_pin (pinNumber)] = func;
161
156
}
162
157
}
163
158
@@ -166,8 +161,10 @@ void handleGpioCallback(const struct device *port, struct gpio_callback *cb, uin
166
161
struct gpio_port_callback *pcb = (struct gpio_port_callback *)cb;
167
162
168
163
for (uint32_t i = 0 ; i < max_ngpios; i++) {
169
- if (pins & BIT (i) && pcb->handlers [i].enabled ) {
170
- pcb->handlers [i].handler ();
164
+ if (pins & BIT (i) && pcb->enabled_pins & BIT (i) {
165
+ if (pcb->handlers [i]) {
166
+ pcb->handlers [i]();
167
+ }
171
168
}
172
169
}
173
170
}
@@ -517,15 +514,15 @@ void enableInterrupt(pin_size_t pinNumber) {
517
514
struct gpio_port_callback *pcb = find_gpio_port_callback (local_gpio_port (pinNumber));
518
515
519
516
if (pcb) {
520
- pcb->handlers [ local_gpio_pin (pinNumber)]. enabled = true ;
517
+ pcb->enabled_pins |= BIT ( local_gpio_pin (pinNumber)) ;
521
518
}
522
519
}
523
520
524
521
void disableInterrupt (pin_size_t pinNumber) {
525
522
struct gpio_port_callback *pcb = find_gpio_port_callback (local_gpio_port (pinNumber));
526
523
527
524
if (pcb) {
528
- pcb->handlers [ local_gpio_pin (pinNumber)]. enabled = false ;
525
+ pcb->enabled_pins &= ~BIT ( local_gpio_pin(pinNumber)) ;
529
526
}
530
527
}
531
528
0 commit comments