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:
Jose Alamos 2019-07-04 17:27:44 +02:00
parent c5dab7e615
commit 2e7683b5e2

View File

@ -223,32 +223,27 @@ static int _init(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);
switch (interruptReg) {
case SX127X_RF_LORA_IRQFLAGS_TXDONE:
case SX127X_RF_LORA_IRQFLAGS_RXDONE:
if (interruptReg & (SX127X_RF_LORA_IRQFLAGS_TXDONE |
SX127X_RF_LORA_IRQFLAGS_RXDONE)) {
_on_dio0_irq(dev);
break;
}
case SX127X_RF_LORA_IRQFLAGS_RXTIMEOUT:
if (interruptReg & SX127X_RF_LORA_IRQFLAGS_RXTIMEOUT) {
_on_dio1_irq(dev);
break;
}
case SX127X_RF_LORA_IRQFLAGS_FHSSCHANGEDCHANNEL:
if (interruptReg & SX127X_RF_LORA_IRQFLAGS_FHSSCHANGEDCHANNEL) {
_on_dio2_irq(dev);
break;
}
case SX127X_RF_LORA_IRQFLAGS_CADDETECTED:
case SX127X_RF_LORA_IRQFLAGS_CADDONE:
case SX127X_RF_LORA_IRQFLAGS_VALIDHEADER:
if (interruptReg & (SX127X_RF_LORA_IRQFLAGS_CADDETECTED |
SX127X_RF_LORA_IRQFLAGS_CADDONE |
SX127X_RF_LORA_IRQFLAGS_VALIDHEADER)) {
_on_dio3_irq(dev);
break;
default:
break;
}
}