sx127x: set ValidHeader interrupt to NETDEV_EVENT_RX_STARTED event

This commit is contained in:
korotkoves 2019-01-31 16:17:20 +03:00 committed by Alexandre Abadie
parent 4ccdb3ac80
commit 433ccc9a11
No known key found for this signature in database
GPG Key ID: 1C919A403CAE1405
2 changed files with 52 additions and 25 deletions

View File

@ -269,37 +269,41 @@ void sx127x_set_rx(sx127x_t *dev)
sx127x_reg_write(dev, SX127X_REG_LR_IRQFLAGSMASK, sx127x_reg_write(dev, SX127X_REG_LR_IRQFLAGSMASK,
/* SX127X_RF_LORA_IRQFLAGS_RXTIMEOUT | /* SX127X_RF_LORA_IRQFLAGS_RXTIMEOUT |
SX127X_RF_LORA_IRQFLAGS_RXDONE | SX127X_RF_LORA_IRQFLAGS_RXDONE |
SX127X_RF_LORA_IRQFLAGS_PAYLOADCRCERROR | */ SX127X_RF_LORA_IRQFLAGS_PAYLOADCRCERROR |
SX127X_RF_LORA_IRQFLAGS_VALIDHEADER | SX127X_RF_LORA_IRQFLAGS_VALIDHEADER | */
SX127X_RF_LORA_IRQFLAGS_TXDONE | SX127X_RF_LORA_IRQFLAGS_TXDONE |
SX127X_RF_LORA_IRQFLAGS_CADDONE | SX127X_RF_LORA_IRQFLAGS_CADDONE |
/* SX127X_RF_LORA_IRQFLAGS_FHSSCHANGEDCHANNEL | */ /* SX127X_RF_LORA_IRQFLAGS_FHSSCHANGEDCHANNEL | */
SX127X_RF_LORA_IRQFLAGS_CADDETECTED); SX127X_RF_LORA_IRQFLAGS_CADDETECTED);
/* DIO0=RxDone, DIO2=FhssChangeChannel */ /* DIO0=RxDone, DIO2=FhssChangeChannel, DIO3=ValidHeader */
sx127x_reg_write(dev, SX127X_REG_DIOMAPPING1, sx127x_reg_write(dev, SX127X_REG_DIOMAPPING1,
(sx127x_reg_read(dev, SX127X_REG_DIOMAPPING1) & (sx127x_reg_read(dev, SX127X_REG_DIOMAPPING1) &
SX127X_RF_LORA_DIOMAPPING1_DIO0_MASK & SX127X_RF_LORA_DIOMAPPING1_DIO0_MASK &
SX127X_RF_LORA_DIOMAPPING1_DIO2_MASK) | SX127X_RF_LORA_DIOMAPPING1_DIO2_MASK &
SX127X_RF_LORA_DIOMAPPING1_DIO3_MASK) |
SX127X_RF_LORA_DIOMAPPING1_DIO0_00 | SX127X_RF_LORA_DIOMAPPING1_DIO0_00 |
SX127X_RF_LORA_DIOMAPPING1_DIO2_00); SX127X_RF_LORA_DIOMAPPING1_DIO2_00 |
SX127X_RF_LORA_DIOMAPPING1_DIO3_01);
} }
else { else {
sx127x_reg_write(dev, SX127X_REG_LR_IRQFLAGSMASK, sx127x_reg_write(dev, SX127X_REG_LR_IRQFLAGSMASK,
/* SX127X_RF_LORA_IRQFLAGS_RXTIMEOUT | /* SX127X_RF_LORA_IRQFLAGS_RXTIMEOUT |
SX127X_RF_LORA_IRQFLAGS_RXDONE | SX127X_RF_LORA_IRQFLAGS_RXDONE |
SX127X_RF_LORA_IRQFLAGS_PAYLOADCRCERROR | */ SX127X_RF_LORA_IRQFLAGS_PAYLOADCRCERROR |
SX127X_RF_LORA_IRQFLAGS_VALIDHEADER | SX127X_RF_LORA_IRQFLAGS_VALIDHEADER | */
SX127X_RF_LORA_IRQFLAGS_TXDONE | SX127X_RF_LORA_IRQFLAGS_TXDONE |
SX127X_RF_LORA_IRQFLAGS_CADDONE | SX127X_RF_LORA_IRQFLAGS_CADDONE |
SX127X_RF_LORA_IRQFLAGS_FHSSCHANGEDCHANNEL | SX127X_RF_LORA_IRQFLAGS_FHSSCHANGEDCHANNEL |
SX127X_RF_LORA_IRQFLAGS_CADDETECTED); SX127X_RF_LORA_IRQFLAGS_CADDETECTED);
/* DIO0=RxDone */ /* DIO0=RxDone, DIO3=ValidHeader */
sx127x_reg_write(dev, SX127X_REG_DIOMAPPING1, sx127x_reg_write(dev, SX127X_REG_DIOMAPPING1,
(sx127x_reg_read(dev, SX127X_REG_DIOMAPPING1) & (sx127x_reg_read(dev, SX127X_REG_DIOMAPPING1) &
SX127X_RF_LORA_DIOMAPPING1_DIO0_MASK) | SX127X_RF_LORA_DIOMAPPING1_DIO0_MASK &
SX127X_RF_LORA_DIOMAPPING1_DIO0_00); SX127X_RF_LORA_DIOMAPPING1_DIO3_MASK) |
SX127X_RF_LORA_DIOMAPPING1_DIO0_00 |
SX127X_RF_LORA_DIOMAPPING1_DIO3_01);
} }
sx127x_reg_write(dev, SX127X_REG_LR_FIFORXBASEADDR, 0); sx127x_reg_write(dev, SX127X_REG_LR_FIFORXBASEADDR, 0);

View File

@ -80,7 +80,8 @@ static int _send(netdev_t *netdev, const iolist_t *iolist)
} }
break; break;
default: default:
puts("sx127x_netdev, Unsupported modem"); DEBUG("[sx127x] netdev: Unsupported modem (%d)\n",
dev->settings.modem);
break; break;
} }
@ -241,6 +242,7 @@ static void _isr(netdev_t *netdev)
case SX127X_RF_LORA_IRQFLAGS_CADDETECTED: case SX127X_RF_LORA_IRQFLAGS_CADDETECTED:
case SX127X_RF_LORA_IRQFLAGS_CADDONE: case SX127X_RF_LORA_IRQFLAGS_CADDONE:
case SX127X_RF_LORA_IRQFLAGS_VALIDHEADER:
irq = SX127X_IRQ_DIO3; irq = SX127X_IRQ_DIO3;
break; break;
@ -690,23 +692,44 @@ void _on_dio3_irq(void *arg)
sx127x_t *dev = (sx127x_t *) arg; sx127x_t *dev = (sx127x_t *) arg;
netdev_t *netdev = (netdev_t *) dev; netdev_t *netdev = (netdev_t *) dev;
switch (dev->settings.modem) { switch (dev->settings.state) {
case SX127X_MODEM_FSK: case SX127X_RF_CAD:
break; switch (dev->settings.modem) {
case SX127X_MODEM_LORA: case SX127X_MODEM_FSK:
/* Clear IRQ */ break;
sx127x_reg_write(dev, SX127X_REG_LR_IRQFLAGS, case SX127X_MODEM_LORA:
SX127X_RF_LORA_IRQFLAGS_CADDETECTED | /* Clear IRQ */
SX127X_RF_LORA_IRQFLAGS_CADDONE); sx127x_reg_write(dev, SX127X_REG_LR_IRQFLAGS,
SX127X_RF_LORA_IRQFLAGS_CADDETECTED |
SX127X_RF_LORA_IRQFLAGS_CADDONE);
/* Send event message */ /* Send event message */
dev->_internal.is_last_cad_success = ((sx127x_reg_read(dev, SX127X_REG_LR_IRQFLAGS) & dev->_internal.is_last_cad_success = ((sx127x_reg_read(dev, SX127X_REG_LR_IRQFLAGS) &
SX127X_RF_LORA_IRQFLAGS_CADDETECTED) == SX127X_RF_LORA_IRQFLAGS_CADDETECTED) ==
SX127X_RF_LORA_IRQFLAGS_CADDETECTED); SX127X_RF_LORA_IRQFLAGS_CADDETECTED);
netdev->event_callback(netdev, NETDEV_EVENT_CAD_DONE); netdev->event_callback(netdev, NETDEV_EVENT_CAD_DONE);
break;
default:
puts("[sx127x] netdev: sx127x_on_dio3: unknown modem");
break;
}
break;
case SX127X_RF_RX_RUNNING:
switch (dev->settings.modem) {
case SX127X_MODEM_FSK:
break;
case SX127X_MODEM_LORA:
/* Clear IRQ */
sx127x_reg_write(dev, SX127X_REG_LR_IRQFLAGS, SX127X_RF_LORA_IRQFLAGS_VALIDHEADER);
netdev->event_callback(netdev, NETDEV_EVENT_RX_STARTED);
break;
default:
break;
}
break; break;
default: default:
puts("[sx127x] netdev: sx127x_on_dio3: unknown modem"); DEBUG("[sx127x] netdev: sx127x_on_dio3: unknown state");
break; break;
} }
} }