mirror of
https://github.com/manuelbl/ttn-esp32.git
synced 2025-06-15 12:24:27 +02:00
Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
1057aa09de | ||
|
61771c0bfa | ||
|
89ad39d463 | ||
|
c32c6b4cd6 | ||
|
569afe84e9 | ||
|
4e0587bb8e |
@ -74,12 +74,10 @@ extern "C" void app_main(void)
|
|||||||
|
|
||||||
// Initialize SPI bus
|
// Initialize SPI bus
|
||||||
spi_bus_config_t spi_bus_config;
|
spi_bus_config_t spi_bus_config;
|
||||||
|
memset(&spi_bus_config, 0, sizeof(spi_bus_config));
|
||||||
spi_bus_config.miso_io_num = TTN_PIN_SPI_MISO;
|
spi_bus_config.miso_io_num = TTN_PIN_SPI_MISO;
|
||||||
spi_bus_config.mosi_io_num = TTN_PIN_SPI_MOSI;
|
spi_bus_config.mosi_io_num = TTN_PIN_SPI_MOSI;
|
||||||
spi_bus_config.sclk_io_num = TTN_PIN_SPI_SCLK;
|
spi_bus_config.sclk_io_num = TTN_PIN_SPI_SCLK;
|
||||||
spi_bus_config.quadwp_io_num = -1;
|
|
||||||
spi_bus_config.quadhd_io_num = -1;
|
|
||||||
spi_bus_config.max_transfer_sz = 0;
|
|
||||||
err = spi_bus_initialize(TTN_SPI_HOST, &spi_bus_config, TTN_SPI_DMA_CHAN);
|
err = spi_bus_initialize(TTN_SPI_HOST, &spi_bus_config, TTN_SPI_DMA_CHAN);
|
||||||
ESP_ERROR_CHECK(err);
|
ESP_ERROR_CHECK(err);
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "esp_event.h"
|
#include "esp_event.h"
|
||||||
#include "driver/gpio.h"
|
#include "driver/gpio.h"
|
||||||
#include "nvs_flash.h"
|
#include "nvs_flash.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "TheThingsNetwork.h"
|
#include "TheThingsNetwork.h"
|
||||||
|
|
||||||
@ -81,12 +82,10 @@ extern "C" void app_main(void)
|
|||||||
|
|
||||||
// Initialize SPI bus
|
// Initialize SPI bus
|
||||||
spi_bus_config_t spi_bus_config;
|
spi_bus_config_t spi_bus_config;
|
||||||
|
memset(&spi_bus_config, 0, sizeof(spi_bus_config));
|
||||||
spi_bus_config.miso_io_num = TTN_PIN_SPI_MISO;
|
spi_bus_config.miso_io_num = TTN_PIN_SPI_MISO;
|
||||||
spi_bus_config.mosi_io_num = TTN_PIN_SPI_MOSI;
|
spi_bus_config.mosi_io_num = TTN_PIN_SPI_MOSI;
|
||||||
spi_bus_config.sclk_io_num = TTN_PIN_SPI_SCLK;
|
spi_bus_config.sclk_io_num = TTN_PIN_SPI_SCLK;
|
||||||
spi_bus_config.quadwp_io_num = -1;
|
|
||||||
spi_bus_config.quadhd_io_num = -1;
|
|
||||||
spi_bus_config.max_transfer_sz = 0;
|
|
||||||
err = spi_bus_initialize(TTN_SPI_HOST, &spi_bus_config, TTN_SPI_DMA_CHAN);
|
err = spi_bus_initialize(TTN_SPI_HOST, &spi_bus_config, TTN_SPI_DMA_CHAN);
|
||||||
ESP_ERROR_CHECK(err);
|
ESP_ERROR_CHECK(err);
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "driver/gpio.h"
|
#include "driver/gpio.h"
|
||||||
#include "esp_event.h"
|
#include "esp_event.h"
|
||||||
#include "nvs_flash.h"
|
#include "nvs_flash.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "TheThingsNetwork.h"
|
#include "TheThingsNetwork.h"
|
||||||
|
|
||||||
@ -74,12 +75,10 @@ extern "C" void app_main(void)
|
|||||||
|
|
||||||
// Initialize SPI bus
|
// Initialize SPI bus
|
||||||
spi_bus_config_t spi_bus_config;
|
spi_bus_config_t spi_bus_config;
|
||||||
|
memset(&spi_bus_config, 0, sizeof(spi_bus_config));
|
||||||
spi_bus_config.miso_io_num = TTN_PIN_SPI_MISO;
|
spi_bus_config.miso_io_num = TTN_PIN_SPI_MISO;
|
||||||
spi_bus_config.mosi_io_num = TTN_PIN_SPI_MOSI;
|
spi_bus_config.mosi_io_num = TTN_PIN_SPI_MOSI;
|
||||||
spi_bus_config.sclk_io_num = TTN_PIN_SPI_SCLK;
|
spi_bus_config.sclk_io_num = TTN_PIN_SPI_SCLK;
|
||||||
spi_bus_config.quadwp_io_num = -1;
|
|
||||||
spi_bus_config.quadhd_io_num = -1;
|
|
||||||
spi_bus_config.max_transfer_sz = 0;
|
|
||||||
err = spi_bus_initialize(TTN_SPI_HOST, &spi_bus_config, TTN_SPI_DMA_CHAN);
|
err = spi_bus_initialize(TTN_SPI_HOST, &spi_bus_config, TTN_SPI_DMA_CHAN);
|
||||||
ESP_ERROR_CHECK(err);
|
ESP_ERROR_CHECK(err);
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "esp_event.h"
|
#include "esp_event.h"
|
||||||
#include "driver/gpio.h"
|
#include "driver/gpio.h"
|
||||||
#include "nvs_flash.h"
|
#include "nvs_flash.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "TheThingsNetwork.h"
|
#include "TheThingsNetwork.h"
|
||||||
|
|
||||||
@ -62,12 +63,12 @@ void printRFSettings(const char* window, const TTNRFSettings& settings)
|
|||||||
}
|
}
|
||||||
else if (settings.spreadingFactor == kTTNFSK)
|
else if (settings.spreadingFactor == kTTNFSK)
|
||||||
{
|
{
|
||||||
printf("%s: FSK, BW %dkHz, %d.%d MHz\n",
|
printf("%s: FSK, BW %dkHz, %ld.%ld MHz\n",
|
||||||
window, bw, settings.frequency / 1000000, (settings.frequency % 1000000 + 50000) / 100000);
|
window, bw, settings.frequency / 1000000, (settings.frequency % 1000000 + 50000) / 100000);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("%s: SF%d, BW %dkHz, %d.%d MHz\n",
|
printf("%s: SF%d, BW %dkHz, %ld.%ld MHz\n",
|
||||||
window, sf, bw, settings.frequency / 1000000, (settings.frequency % 1000000 + 50000) / 100000);
|
window, sf, bw, settings.frequency / 1000000, (settings.frequency % 1000000 + 50000) / 100000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -113,12 +114,10 @@ extern "C" void app_main(void)
|
|||||||
|
|
||||||
// Initialize SPI bus
|
// Initialize SPI bus
|
||||||
spi_bus_config_t spi_bus_config;
|
spi_bus_config_t spi_bus_config;
|
||||||
|
memset(&spi_bus_config, 0, sizeof(spi_bus_config));
|
||||||
spi_bus_config.miso_io_num = TTN_PIN_SPI_MISO;
|
spi_bus_config.miso_io_num = TTN_PIN_SPI_MISO;
|
||||||
spi_bus_config.mosi_io_num = TTN_PIN_SPI_MOSI;
|
spi_bus_config.mosi_io_num = TTN_PIN_SPI_MOSI;
|
||||||
spi_bus_config.sclk_io_num = TTN_PIN_SPI_SCLK;
|
spi_bus_config.sclk_io_num = TTN_PIN_SPI_SCLK;
|
||||||
spi_bus_config.quadwp_io_num = -1;
|
|
||||||
spi_bus_config.quadhd_io_num = -1;
|
|
||||||
spi_bus_config.max_transfer_sz = 0;
|
|
||||||
err = spi_bus_initialize(TTN_SPI_HOST, &spi_bus_config, TTN_SPI_DMA_CHAN);
|
err = spi_bus_initialize(TTN_SPI_HOST, &spi_bus_config, TTN_SPI_DMA_CHAN);
|
||||||
ESP_ERROR_CHECK(err);
|
ESP_ERROR_CHECK(err);
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include "esp_sleep.h"
|
#include "esp_sleep.h"
|
||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "nvs_flash.h"
|
#include "nvs_flash.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "TheThingsNetwork.h"
|
#include "TheThingsNetwork.h"
|
||||||
|
|
||||||
@ -70,12 +71,10 @@ extern "C" void app_main(void)
|
|||||||
|
|
||||||
// Initialize SPI bus
|
// Initialize SPI bus
|
||||||
spi_bus_config_t spi_bus_config;
|
spi_bus_config_t spi_bus_config;
|
||||||
|
memset(&spi_bus_config, 0, sizeof(spi_bus_config));
|
||||||
spi_bus_config.miso_io_num = TTN_PIN_SPI_MISO;
|
spi_bus_config.miso_io_num = TTN_PIN_SPI_MISO;
|
||||||
spi_bus_config.mosi_io_num = TTN_PIN_SPI_MOSI;
|
spi_bus_config.mosi_io_num = TTN_PIN_SPI_MOSI;
|
||||||
spi_bus_config.sclk_io_num = TTN_PIN_SPI_SCLK;
|
spi_bus_config.sclk_io_num = TTN_PIN_SPI_SCLK;
|
||||||
spi_bus_config.quadwp_io_num = -1;
|
|
||||||
spi_bus_config.quadhd_io_num = -1;
|
|
||||||
spi_bus_config.max_transfer_sz = 0;
|
|
||||||
err = spi_bus_initialize(TTN_SPI_HOST, &spi_bus_config, TTN_SPI_DMA_CHAN);
|
err = spi_bus_initialize(TTN_SPI_HOST, &spi_bus_config, TTN_SPI_DMA_CHAN);
|
||||||
ESP_ERROR_CHECK(err);
|
ESP_ERROR_CHECK(err);
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "driver/gpio.h"
|
#include "driver/gpio.h"
|
||||||
#include "esp_event.h"
|
#include "esp_event.h"
|
||||||
#include "nvs_flash.h"
|
#include "nvs_flash.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "TheThingsNetwork.h"
|
#include "TheThingsNetwork.h"
|
||||||
|
|
||||||
@ -65,12 +66,11 @@ extern "C" void app_main(void)
|
|||||||
|
|
||||||
// Initialize SPI bus
|
// Initialize SPI bus
|
||||||
spi_bus_config_t spi_bus_config;
|
spi_bus_config_t spi_bus_config;
|
||||||
|
memset(&spi_bus_config, 0, sizeof(spi_bus_config));
|
||||||
spi_bus_config.miso_io_num = TTN_PIN_SPI_MISO;
|
spi_bus_config.miso_io_num = TTN_PIN_SPI_MISO;
|
||||||
spi_bus_config.mosi_io_num = TTN_PIN_SPI_MOSI;
|
spi_bus_config.mosi_io_num = TTN_PIN_SPI_MOSI;
|
||||||
spi_bus_config.sclk_io_num = TTN_PIN_SPI_SCLK;
|
spi_bus_config.sclk_io_num = TTN_PIN_SPI_SCLK;
|
||||||
spi_bus_config.quadwp_io_num = -1;
|
|
||||||
spi_bus_config.quadhd_io_num = -1;
|
|
||||||
spi_bus_config.max_transfer_sz = 0;
|
|
||||||
err = spi_bus_initialize(TTN_SPI_HOST, &spi_bus_config, TTN_SPI_DMA_CHAN);
|
err = spi_bus_initialize(TTN_SPI_HOST, &spi_bus_config, TTN_SPI_DMA_CHAN);
|
||||||
ESP_ERROR_CHECK(err);
|
ESP_ERROR_CHECK(err);
|
||||||
|
|
||||||
|
@ -152,6 +152,7 @@ void init_io(void)
|
|||||||
ESP_LOGI(TAG, "IO initialized");
|
ESP_LOGI(TAG, "IO initialized");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__attribute__((weak)) // duplicate this symbol if your pin is controlled by e.g. I2C
|
||||||
void hal_pin_rxtx(u1_t val)
|
void hal_pin_rxtx(u1_t val)
|
||||||
{
|
{
|
||||||
if (pin_rx_tx == LMIC_UNUSED_PIN)
|
if (pin_rx_tx == LMIC_UNUSED_PIN)
|
||||||
@ -160,6 +161,7 @@ void hal_pin_rxtx(u1_t val)
|
|||||||
gpio_set_level(pin_rx_tx, val);
|
gpio_set_level(pin_rx_tx, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__attribute__((weak)) // duplicate this symbol if your pin is controlled by e.g. I2C
|
||||||
void hal_pin_rst(u1_t val)
|
void hal_pin_rst(u1_t val)
|
||||||
{
|
{
|
||||||
if (pin_rst == LMIC_UNUSED_PIN)
|
if (pin_rst == LMIC_UNUSED_PIN)
|
||||||
@ -252,6 +254,7 @@ void hal_spi_read(u1_t cmd, u1_t *buf, size_t len)
|
|||||||
ESP_ERROR_CHECK(err);
|
ESP_ERROR_CHECK(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void IRAM_ATTR assert_nss(spi_transaction_t* trans)
|
void IRAM_ATTR assert_nss(spi_transaction_t* trans)
|
||||||
{
|
{
|
||||||
gpio_set_level(pin_nss, 0);
|
gpio_set_level(pin_nss, 0);
|
||||||
@ -305,7 +308,7 @@ int64_t os_time_to_esp_time(int64_t esp_now, uint32_t os_time)
|
|||||||
return esp_time;
|
return esp_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t get_current_time()
|
int64_t IRAM_ATTR get_current_time()
|
||||||
{
|
{
|
||||||
return esp_timer_get_time() + time_offset;
|
return esp_timer_get_time() + time_offset;
|
||||||
}
|
}
|
||||||
|
@ -291,8 +291,8 @@ bool join_core(void)
|
|||||||
xQueueReset(lmic_event_queue);
|
xQueueReset(lmic_event_queue);
|
||||||
waiting_reason = TTN_WAITING_FOR_JOIN;
|
waiting_reason = TTN_WAITING_FOR_JOIN;
|
||||||
|
|
||||||
LMIC_startJoining();
|
|
||||||
config_rf_params();
|
config_rf_params();
|
||||||
|
LMIC_startJoining();
|
||||||
|
|
||||||
hal_esp32_wake_up();
|
hal_esp32_wake_up();
|
||||||
hal_esp32_leave_critical_section();
|
hal_esp32_leave_critical_section();
|
||||||
|
@ -28,6 +28,8 @@
|
|||||||
#define NVS_FLASH_KEY_CHUNK_3 "chunk3"
|
#define NVS_FLASH_KEY_CHUNK_3 "chunk3"
|
||||||
#define NVS_FLASH_KEY_TIME "time"
|
#define NVS_FLASH_KEY_TIME "time"
|
||||||
|
|
||||||
|
static struct lmic_t tmp_LMIC;
|
||||||
|
|
||||||
void ttn_nvs_save()
|
void ttn_nvs_save()
|
||||||
{
|
{
|
||||||
nvs_handle handle = 0;
|
nvs_handle handle = 0;
|
||||||
@ -82,21 +84,21 @@ bool ttn_nvs_restore(int off_duration)
|
|||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
size_t len1 = LMIC_DIST(radio, pendTxData);
|
size_t len1 = LMIC_DIST(radio, pendTxData);
|
||||||
res = nvs_get_blob(handle, NVS_FLASH_KEY_CHUNK_1, &LMIC.radio, &len1);
|
res = nvs_get_blob(handle, NVS_FLASH_KEY_CHUNK_1, &tmp_LMIC.radio, &len1);
|
||||||
if (res != ESP_OK)
|
if (res != ESP_OK)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
memset(LMIC.pendTxData, 0, MAX_LEN_PAYLOAD);
|
memset(LMIC.pendTxData, 0, MAX_LEN_PAYLOAD);
|
||||||
|
|
||||||
size_t len2 = LMIC_DIST(pendTxData, frame) - MAX_LEN_PAYLOAD;
|
size_t len2 = LMIC_DIST(pendTxData, frame) - MAX_LEN_PAYLOAD;
|
||||||
res = nvs_get_blob(handle, NVS_FLASH_KEY_CHUNK_2, (u1_t *)&LMIC.pendTxData + MAX_LEN_PAYLOAD, &len2);
|
res = nvs_get_blob(handle, NVS_FLASH_KEY_CHUNK_2, (u1_t *)&tmp_LMIC.pendTxData + MAX_LEN_PAYLOAD, &len2);
|
||||||
if (res != ESP_OK)
|
if (res != ESP_OK)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
memset(LMIC.frame, 0, MAX_LEN_FRAME);
|
memset(LMIC.frame, 0, MAX_LEN_FRAME);
|
||||||
|
|
||||||
size_t len3 = sizeof(struct lmic_t) - LMIC_OFFSET(frame) - MAX_LEN_FRAME;
|
size_t len3 = sizeof(struct lmic_t) - LMIC_OFFSET(frame) - MAX_LEN_FRAME;
|
||||||
res = nvs_get_blob(handle, NVS_FLASH_KEY_CHUNK_3, (u1_t *)&LMIC.frame + MAX_LEN_FRAME, &len3);
|
res = nvs_get_blob(handle, NVS_FLASH_KEY_CHUNK_3, (u1_t *)&tmp_LMIC.frame + MAX_LEN_FRAME, &len3);
|
||||||
if (res != ESP_OK)
|
if (res != ESP_OK)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
@ -115,8 +117,14 @@ bool ttn_nvs_restore(int off_duration)
|
|||||||
done:
|
done:
|
||||||
nvs_close(handle);
|
nvs_close(handle);
|
||||||
|
|
||||||
if (res != ESP_OK)
|
if (res == ESP_OK) {
|
||||||
memset(&LMIC.radio, 0, sizeof(LMIC) - LMIC_OFFSET(radio));
|
// copy temporary data to actual
|
||||||
|
memcpy(&LMIC.radio, &tmp_LMIC.radio, LMIC_DIST(radio, pendTxData));
|
||||||
|
memcpy((u1_t *)&LMIC.pendTxData + MAX_LEN_PAYLOAD, (u1_t *)&tmp_LMIC.pendTxData + MAX_LEN_PAYLOAD,
|
||||||
|
LMIC_DIST(pendTxData, frame) - MAX_LEN_PAYLOAD);
|
||||||
|
memcpy((u1_t *)&LMIC.frame + MAX_LEN_FRAME, (u1_t *)&tmp_LMIC.frame + MAX_LEN_FRAME,
|
||||||
|
sizeof(struct lmic_t) - LMIC_OFFSET(frame) - MAX_LEN_FRAME);
|
||||||
|
}
|
||||||
|
|
||||||
return res == ESP_OK;
|
return res == ESP_OK;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user