Skip to content

Commit 6353b0e

Browse files
committed
interrupt_enable
1 parent 183ff60 commit 6353b0e

File tree

1 file changed

+9
-12
lines changed

1 file changed

+9
-12
lines changed

cores/arduino/zephyrCommon.cpp

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -125,15 +125,10 @@ const int sum_ngpios = sum_in_list(
125125
* GPIO callback implementation
126126
*/
127127

128-
struct arduino_callback {
129-
voidFuncPtr handler;
130-
bool enabled;
131-
};
132-
133128
struct gpio_port_callback {
134129
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;
137132
const struct device *dev;
138133
} port_callback[ARRAY_SIZE(gpios)] = {0};
139134

@@ -157,7 +152,7 @@ void setInterruptHandler(pin_size_t pinNumber, voidFuncPtr func)
157152
struct gpio_port_callback *pcb = find_gpio_port_callback(local_gpio_port(pinNumber));
158153

159154
if (pcb) {
160-
pcb->handlers[local_gpio_pin(pinNumber)].handler = func;
155+
pcb->handlers[local_gpio_pin(pinNumber)] = func;
161156
}
162157
}
163158

@@ -166,8 +161,10 @@ void handleGpioCallback(const struct device *port, struct gpio_callback *cb, uin
166161
struct gpio_port_callback *pcb = (struct gpio_port_callback *)cb;
167162

168163
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+
}
171168
}
172169
}
173170
}
@@ -517,15 +514,15 @@ void enableInterrupt(pin_size_t pinNumber) {
517514
struct gpio_port_callback *pcb = find_gpio_port_callback(local_gpio_port(pinNumber));
518515

519516
if (pcb) {
520-
pcb->handlers[local_gpio_pin(pinNumber)].enabled = true;
517+
pcb->enabled_pins |= BIT(local_gpio_pin(pinNumber));
521518
}
522519
}
523520

524521
void disableInterrupt(pin_size_t pinNumber) {
525522
struct gpio_port_callback *pcb = find_gpio_port_callback(local_gpio_port(pinNumber));
526523

527524
if (pcb) {
528-
pcb->handlers[local_gpio_pin(pinNumber)].enabled = false;
525+
pcb->enabled_pins &= ~BIT(local_gpio_pin(pinNumber));
529526
}
530527
}
531528

0 commit comments

Comments
 (0)