diff --git a/README.md b/README.md index f65f25f..c3d31ee 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,9 @@ Sets LoRa Spread Factor. Accepts `6`-`12`. +### `double lora32_calc_datarate(lora32_cfg_t *lora);` +Returns data rate in Bits Per Second (bps) for given `lora32_cfg_t` configuration. + ### `void lora32_dump_regs(lora32_cfg_t *lora)` Dumps all registers from SX1276. diff --git a/include/esp32-lora.h b/include/esp32-lora.h index ceeeea8..46159da 100644 --- a/include/esp32-lora.h +++ b/include/esp32-lora.h @@ -126,6 +126,7 @@ lora32_cfg_t lora32_create(); uint8_t lora32_init(lora32_cfg_t *config); 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_cad(lora32_cfg_t *lora); diff --git a/main/esp32-lora.c b/main/esp32-lora.c index faf7029..9b4c998 100644 --- a/main/esp32-lora.c +++ b/main/esp32-lora.c @@ -1,4 +1,5 @@ #include +#include #include "freertos/FreeRTOS.h" #include "freertos/task.h" @@ -97,6 +98,15 @@ void lora32_write_reg(lora32_cfg_t *lora, uint8_t address, uint8_t value) { ESP_ERROR_CHECK(spi_device_transmit(spi, &t)); }; +double lora32_calc_datarate(lora32_cfg_t *lora) { + double cr = (4.0 / (long)lora->codingRate); + double sf = pow(2, lora->spreadingFactor); + double c2 = sf / bandwidths[lora->bandwidth]; + ESP_LOGI(TAG, "codingRate: %d cr: %f sf: %f c2: %f", lora->codingRate, cr, sf, c2); + + return lora->spreadingFactor * cr / c2 * 1000; +} + void lora23_set_explicit_header(lora32_cfg_t *lora) { lora->implicitHeader = false;