sx127x_netdev: remove switch-case from ISR handler
Some LoRa modules don't provide all ISR lines. Thus, there are cases where different interrupts appear simultaneously in the ISR flags. It's required to use an AND/OR pattern to check which interrupts were triggered.
This commit is contained in:
parent
c5dab7e615
commit
2e7683b5e2
@ -223,32 +223,27 @@ static int _init(netdev_t *netdev)
|
|||||||
|
|
||||||
static void _isr(netdev_t *netdev)
|
static void _isr(netdev_t *netdev)
|
||||||
{
|
{
|
||||||
sx127x_t *dev = (sx127x_t *) netdev;
|
sx127x_t *dev = (sx127x_t *)netdev;
|
||||||
|
|
||||||
uint8_t interruptReg = sx127x_reg_read(dev, SX127X_REG_LR_IRQFLAGS);
|
uint8_t interruptReg = sx127x_reg_read(dev, SX127X_REG_LR_IRQFLAGS);
|
||||||
|
|
||||||
switch (interruptReg) {
|
if (interruptReg & (SX127X_RF_LORA_IRQFLAGS_TXDONE |
|
||||||
case SX127X_RF_LORA_IRQFLAGS_TXDONE:
|
SX127X_RF_LORA_IRQFLAGS_RXDONE)) {
|
||||||
case SX127X_RF_LORA_IRQFLAGS_RXDONE:
|
_on_dio0_irq(dev);
|
||||||
_on_dio0_irq(dev);
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case SX127X_RF_LORA_IRQFLAGS_RXTIMEOUT:
|
if (interruptReg & SX127X_RF_LORA_IRQFLAGS_RXTIMEOUT) {
|
||||||
_on_dio1_irq(dev);
|
_on_dio1_irq(dev);
|
||||||
break;
|
}
|
||||||
|
|
||||||
case SX127X_RF_LORA_IRQFLAGS_FHSSCHANGEDCHANNEL:
|
if (interruptReg & SX127X_RF_LORA_IRQFLAGS_FHSSCHANGEDCHANNEL) {
|
||||||
_on_dio2_irq(dev);
|
_on_dio2_irq(dev);
|
||||||
break;
|
}
|
||||||
|
|
||||||
case SX127X_RF_LORA_IRQFLAGS_CADDETECTED:
|
if (interruptReg & (SX127X_RF_LORA_IRQFLAGS_CADDETECTED |
|
||||||
case SX127X_RF_LORA_IRQFLAGS_CADDONE:
|
SX127X_RF_LORA_IRQFLAGS_CADDONE |
|
||||||
case SX127X_RF_LORA_IRQFLAGS_VALIDHEADER:
|
SX127X_RF_LORA_IRQFLAGS_VALIDHEADER)) {
|
||||||
_on_dio3_irq(dev);
|
_on_dio3_irq(dev);
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user