diff --git a/include/esp32-lora.h b/include/esp32-lora.h index 9fc0b8f..f3d62f3 100644 --- a/include/esp32-lora.h +++ b/include/esp32-lora.h @@ -138,6 +138,7 @@ uint8_t lora32_data_available(lora32_cfg_t *lora); double lora32_calc_datarate(lora32_cfg_t *lora); void lora32_dump_regs(lora32_cfg_t *lora); void lora32_enable_continuous_rx(lora32_cfg_t *lora); +void lora32_enable_single_rx(lora32_cfg_t *lora); void lora32_enable_cad(lora32_cfg_t *lora); void lora32_toggle_reset(lora32_cfg_t *lora); void lora32_send(lora32_cfg_t *config, uint8_t *data, uint8_t len); diff --git a/main/esp32-lora.c b/main/esp32-lora.c index 14f60ff..deef1ce 100644 --- a/main/esp32-lora.c +++ b/main/esp32-lora.c @@ -246,6 +246,18 @@ void lora32_set_spreadfactor(lora32_cfg_t *lora, uint8_t factor) { lora32_write_reg(lora, REG_MODEM_CONFIG_2, (lora32_read_reg(lora, REG_MODEM_CONFIG_2) & 0x0F) | ((factor << 4) & 0xF0)); } +void lora32_enable_single_rx(lora32_cfg_t *lora) { + ESP_LOGD(TAG, "MODE_RX_SINGLE"); + + if(lora->receive != NULL) { + lora32_write_reg(lora, REG_DIO_MAPPING_1, DIO0_MODE_RXDONE); + } + + lora32_standby(lora); + + lora32_write_reg(lora, REG_OP_MODE, MODE_LONG_RANGE_MODE | MODE_RX_SINGLE); +} + void lora32_enable_continuous_rx(lora32_cfg_t *lora) { ESP_LOGD(TAG, "MODE_RX_CONTINUOUS");