Skip to content

Commit 5c3dfe3

Browse files
committed
fixup! drivers/sx126x: add support for Dio2 and Dio3
1 parent 981628a commit 5c3dfe3

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

drivers/sx126x/sx126x.c

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,15 +150,38 @@ static void _dio1_isr(void *arg)
150150
}
151151
#endif
152152
#if IS_USED(MODULE_SX126X_DIO2)
153-
static void _dio2_isr(void *arg)
153+
__attribute__((weak))
154+
void sx126x_dio2_isr(void *dev, sx126x_irq_mask_t irq_mask)
154155
{
155-
netdev_trigger_event_isr(arg);
156+
(void)dev;
157+
(void)irq_mask;
158+
}
159+
static void _dio2_isr(void *dev)
160+
{
161+
(void)dev;
162+
sx126x_t *sx126x = (sx126x_t *)dev;
163+
sx126x_irq_mask_t irq_mask;
164+
sx126x_get_irq_status(sx126x, &irq_mask);
165+
irq_mask &= sx126x->params->dio2_arg.dio2_irq_mask; /* only process events from DIO2 */
166+
sx126x_clear_irq_status(sx126x, irq_mask);
167+
sx126x_dio2_isr(sx126x, irq_mask);
156168
}
157169
#endif
158170
#if IS_USED(MODULE_SX126X_DIO3)
159-
static void _dio3_isr(void *arg)
171+
__attribute__((weak))
172+
void sx126x_dio3_isr(void *dev, sx126x_irq_mask_t irq_mask)
160173
{
161-
netdev_trigger_event_isr(arg);
174+
(void)dev;
175+
(void)irq_mask;
176+
}
177+
static void _dio3_isr(void *dev)
178+
{
179+
sx126x_t *sx126x = (sx126x_t *)dev;
180+
sx126x_irq_mask_t irq_mask;
181+
sx126x_get_irq_status(sx126x, &irq_mask);
182+
irq_mask &= sx126x->params->u_dio3_arg.dio3_irq_mask; /* only process events from DIO3 */
183+
sx126x_clear_irq_status(sx126x, irq_mask);
184+
sx126x_dio3_isr(sx126x, irq_mask);
162185
}
163186
#endif
164187

drivers/sx126x/sx126x_netdev.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,9 @@ static void _isr(netdev_t *netdev)
155155

156156
sx126x_irq_mask_t irq_mask;
157157

158-
sx126x_get_and_clear_irq_status(dev, &irq_mask);
158+
sx126x_get_irq_status(dev, &irq_mask);
159+
irq_mask &= dev->params->dio1_irq_mask; /* only process events from DIO1 */
160+
sx126x_clear_irq_status(dev, irq_mask);
159161

160162
if (sx126x_is_stm32wl(dev)) {
161163
#if IS_USED(MODULE_SX126X_STM32WL)

0 commit comments

Comments
 (0)