diff --git a/Software/CMakeLists.txt b/Software/CMakeLists.txt
index c406cbf27b..94ae36828d 100644
--- a/Software/CMakeLists.txt
+++ b/Software/CMakeLists.txt
@@ -46,6 +46,7 @@ set (APP_LIST
"secure_element_lorawan"
"basic_azurertos"
"sensors_lorawan"
+"sensors_lorawan_se"
"basic_fuota")
#-------------------
# MCU Setup
diff --git a/Software/app/basic_fuota/conf/radio_conf.h b/Software/app/basic_fuota/conf/radio_conf.h
index ddaa683fd4..639da24358 100644
--- a/Software/app/basic_fuota/conf/radio_conf.h
+++ b/Software/app/basic_fuota/conf/radio_conf.h
@@ -69,7 +69,7 @@ extern "C" {
/**
* @brief voltage of vdd tcxo.
*/
-#define TCXO_CTRL_VOLTAGE TCXO_CTRL_1_7V
+#define TCXO_CTRL_VOLTAGE TCXO_CTRL_3_0V
#ifndef CRITICAL_SECTION_BEGIN
/**
diff --git a/Software/app/basic_lorawan/conf/radio_conf.h b/Software/app/basic_lorawan/conf/radio_conf.h
index ddaa683fd4..639da24358 100644
--- a/Software/app/basic_lorawan/conf/radio_conf.h
+++ b/Software/app/basic_lorawan/conf/radio_conf.h
@@ -69,7 +69,7 @@ extern "C" {
/**
* @brief voltage of vdd tcxo.
*/
-#define TCXO_CTRL_VOLTAGE TCXO_CTRL_1_7V
+#define TCXO_CTRL_VOLTAGE TCXO_CTRL_3_0V
#ifndef CRITICAL_SECTION_BEGIN
/**
diff --git a/Software/app/freefall_lorawan/conf/radio_conf.h b/Software/app/freefall_lorawan/conf/radio_conf.h
index ddaa683fd4..639da24358 100644
--- a/Software/app/freefall_lorawan/conf/radio_conf.h
+++ b/Software/app/freefall_lorawan/conf/radio_conf.h
@@ -69,7 +69,7 @@ extern "C" {
/**
* @brief voltage of vdd tcxo.
*/
-#define TCXO_CTRL_VOLTAGE TCXO_CTRL_1_7V
+#define TCXO_CTRL_VOLTAGE TCXO_CTRL_3_0V
#ifndef CRITICAL_SECTION_BEGIN
/**
diff --git a/Software/app/freertos_lorawan/conf/radio_conf.h b/Software/app/freertos_lorawan/conf/radio_conf.h
index ddaa683fd4..639da24358 100644
--- a/Software/app/freertos_lorawan/conf/radio_conf.h
+++ b/Software/app/freertos_lorawan/conf/radio_conf.h
@@ -69,7 +69,7 @@ extern "C" {
/**
* @brief voltage of vdd tcxo.
*/
-#define TCXO_CTRL_VOLTAGE TCXO_CTRL_1_7V
+#define TCXO_CTRL_VOLTAGE TCXO_CTRL_3_0V
#ifndef CRITICAL_SECTION_BEGIN
/**
diff --git a/Software/app/secure_element_lorawan/conf/radio_conf.h b/Software/app/secure_element_lorawan/conf/radio_conf.h
index ddaa683fd4..639da24358 100644
--- a/Software/app/secure_element_lorawan/conf/radio_conf.h
+++ b/Software/app/secure_element_lorawan/conf/radio_conf.h
@@ -69,7 +69,7 @@ extern "C" {
/**
* @brief voltage of vdd tcxo.
*/
-#define TCXO_CTRL_VOLTAGE TCXO_CTRL_1_7V
+#define TCXO_CTRL_VOLTAGE TCXO_CTRL_3_0V
#ifndef CRITICAL_SECTION_BEGIN
/**
diff --git a/Software/app/sensors_lorawan/conf/app_conf.h b/Software/app/sensors_lorawan/conf/app_conf.h
index 3a53f5e538..b9e9c75df4 100755
--- a/Software/app/sensors_lorawan/conf/app_conf.h
+++ b/Software/app/sensors_lorawan/conf/app_conf.h
@@ -24,7 +24,7 @@
#ifndef APP_CONF_H
#define APP_CONF_H
-#define GNSE_ADVANCED_TRACER_ENABLE 1
+#define GNSE_ADVANCED_TRACER_ENABLE 0
/* if ON (=1) it enables the debugger plus 4 dbg pins */
/* if OFF (=0) the debugger is OFF (lower consumption) */
@@ -42,7 +42,7 @@
#define SENSORS_DOWNLINK_CONF_PORT 1
/* Default, max, and min time interval of the TX dutycycle window in seconds */
-#define SENSORS_TX_DUTYCYCLE_DEFAULT_S 10
+#define SENSORS_TX_DUTYCYCLE_DEFAULT_S 60
#define SENSORS_DUTYCYCLE_CONF_MAX_S 8640
#define SENSORS_DUTYCYCLE_CONF_MIN_S 5
@@ -58,6 +58,8 @@
#define DEVEUI 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
#define APPKEY 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+
/**
* sequencer definitions
*/
diff --git a/Software/app/sensors_lorawan/conf/radio_conf.h b/Software/app/sensors_lorawan/conf/radio_conf.h
index ddaa683fd4..639da24358 100644
--- a/Software/app/sensors_lorawan/conf/radio_conf.h
+++ b/Software/app/sensors_lorawan/conf/radio_conf.h
@@ -69,7 +69,7 @@ extern "C" {
/**
* @brief voltage of vdd tcxo.
*/
-#define TCXO_CTRL_VOLTAGE TCXO_CTRL_1_7V
+#define TCXO_CTRL_VOLTAGE TCXO_CTRL_3_0V
#ifndef CRITICAL_SECTION_BEGIN
/**
diff --git a/Software/app/sensors_lorawan_se/.cproject b/Software/app/sensors_lorawan_se/.cproject
new file mode 100644
index 0000000000..bf949ae7af
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/.cproject
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Software/app/sensors_lorawan_se/.project b/Software/app/sensors_lorawan_se/.project
new file mode 100644
index 0000000000..61e3f4b5ca
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/.project
@@ -0,0 +1,1646 @@
+
+
+ sensors_loawan_se
+
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.genmakebuilder
+ clean,full,incremental,
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
+ full,incremental,
+
+
+
+
+
+ com.st.stm32cube.ide.mcu.MCUProjectNature
+ org.eclipse.cdt.core.cnature
+ com.st.stm32cube.ide.mcu.MCUCubeIdeServicesRevAev2ProjectNature
+ com.st.stm32cube.ide.mcu.MCUNonUnderRootProjectNature
+ com.st.stm32cube.ide.mcu.MCUCubeProjectNature
+ com.st.stm32cube.ide.mcu.MCUEndUserDisabledTrustZoneProjectNature
+ com.st.stm32cube.ide.mcu.MCUEndUserDisabledMultiCpuProjectNature
+ com.st.stm32cube.ide.mcu.MCUMultiCpuProjectNature
+ com.st.stm32cube.ide.mcu.MCURootProjectNature
+ org.eclipse.cdt.managedbuilder.core.managedBuildNature
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
+
+
+
+ app_common
+ 2
+ virtual:/virtual
+
+
+ lib
+ 2
+ virtual:/virtual
+
+
+ target
+ 2
+ virtual:/virtual
+
+
+ app_common/GNSE_app_helper.c
+ 1
+ copy_PARENT/app_common/GNSE_app_helper.c
+
+
+ app_common/GNSE_app_helper.h
+ 1
+ copy_PARENT/app_common/GNSE_app_helper.h
+
+
+ lib/BUZZER
+ 2
+ copy_PARENT1/lib/BUZZER
+
+
+ lib/GNSE_BSP
+ 2
+ copy_PARENT1/lib/GNSE_BSP
+
+
+ lib/GNSE_HAL
+ 2
+ copy_PARENT1/lib/GNSE_HAL
+
+
+ lib/GNSE_TRACER
+ 2
+ virtual:/virtual
+
+
+ lib/LIS2DH12
+ 2
+ copy_PARENT1/lib/LIS2DH12
+
+
+ lib/MCU_FLASH
+ 2
+ copy_PARENT1/lib/MCU_FLASH
+
+
+ lib/MX25R1635
+ 2
+ copy_PARENT1/lib/MX25R1635
+
+
+ lib/SHTC3
+ 2
+ copy_PARENT1/lib/SHTC3
+
+
+ lib/SPIFFS
+ 2
+ virtual:/virtual
+
+
+ lib/STM32WLxx_LoRaWAN
+ 2
+ virtual:/virtual
+
+
+ lib/Utilities
+ 2
+ virtual:/virtual
+
+
+ target/startup_stm32wl55xx.s
+ 1
+ copy_PARENT1/target/startup_stm32wl55xx.s
+
+
+ target/stm32wlxx_hal_driver
+ 2
+ virtual:/virtual
+
+
+ target/stm32wlxx_hal_msp.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_msp.c
+
+
+ target/syscalls.c
+ 1
+ copy_PARENT1/target/syscalls.c
+
+
+ target/sysmem.c
+ 1
+ copy_PARENT1/target/sysmem.c
+
+
+ target/system_stm32wlxx.c
+ 1
+ copy_PARENT1/target/system_stm32wlxx.c
+
+
+ lib/GNSE_TRACER/.DS_Store
+ 1
+ copy_PARENT1/lib/GNSE_TRACER/.DS_Store
+
+
+ lib/GNSE_TRACER/GNSE_tracer.h
+ 1
+ copy_PARENT1/lib/GNSE_TRACER/GNSE_tracer.h
+
+
+ lib/GNSE_TRACER/adv_tracer
+ 2
+ virtual:/virtual
+
+
+ lib/GNSE_TRACER/tiny_printf
+ 2
+ virtual:/virtual
+
+
+ lib/SPIFFS/spiffs.h
+ 1
+ copy_PARENT1/lib/SPIFFS/spiffs.h
+
+
+ lib/SPIFFS/spiffs_cache.c
+ 1
+ copy_PARENT1/lib/SPIFFS/spiffs_cache.c
+
+
+ lib/SPIFFS/spiffs_check.c
+ 1
+ copy_PARENT1/lib/SPIFFS/spiffs_check.c
+
+
+ lib/SPIFFS/spiffs_config.h
+ 1
+ copy_PARENT1/lib/SPIFFS/spiffs_config.h
+
+
+ lib/SPIFFS/spiffs_gc.c
+ 1
+ copy_PARENT1/lib/SPIFFS/spiffs_gc.c
+
+
+ lib/SPIFFS/spiffs_hydrogen.c
+ 1
+ copy_PARENT1/lib/SPIFFS/spiffs_hydrogen.c
+
+
+ lib/SPIFFS/spiffs_nucleus.c
+ 1
+ copy_PARENT1/lib/SPIFFS/spiffs_nucleus.c
+
+
+ lib/SPIFFS/spiffs_nucleus.h
+ 1
+ copy_PARENT1/lib/SPIFFS/spiffs_nucleus.h
+
+
+ lib/STM32WLxx_LoRaWAN/.DS_Store
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/.DS_Store
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN
+ 2
+ virtual:/virtual
+
+
+ lib/STM32WLxx_LoRaWAN/README.md
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/README.md
+
+
+ lib/STM32WLxx_LoRaWAN/SubGHz_Phy
+ 2
+ virtual:/virtual
+
+
+ lib/Utilities/.DS_Store
+ 1
+ copy_PARENT1/lib/Utilities/.DS_Store
+
+
+ lib/Utilities/baremetal
+ 2
+ virtual:/virtual
+
+
+ lib/Utilities/stm32_mem.c
+ 1
+ copy_PARENT1/lib/Utilities/stm32_mem.c
+
+
+ lib/Utilities/stm32_mem.h
+ 1
+ copy_PARENT1/lib/Utilities/stm32_mem.h
+
+
+ lib/Utilities/utilities_conf.h
+ 1
+ copy_PARENT1/lib/Utilities/utilities_conf.h
+
+
+ target/stm32wlxx_hal_driver/.DS_Store
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/.DS_Store
+
+
+ target/stm32wlxx_hal_driver/.github
+ 2
+ virtual:/virtual
+
+
+ target/stm32wlxx_hal_driver/CODE_OF_CONDUCT.md
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/CODE_OF_CONDUCT.md
+
+
+ target/stm32wlxx_hal_driver/CONTRIBUTING.md
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/CONTRIBUTING.md
+
+
+ target/stm32wlxx_hal_driver/Inc
+ 2
+ virtual:/virtual
+
+
+ target/stm32wlxx_hal_driver/License.md
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/License.md
+
+
+ target/stm32wlxx_hal_driver/README.md
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/README.md
+
+
+ target/stm32wlxx_hal_driver/Release_Notes.html
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Release_Notes.html
+
+
+ target/stm32wlxx_hal_driver/Src
+ 2
+ virtual:/virtual
+
+
+ target/stm32wlxx_hal_driver/_htmresc
+ 2
+ virtual:/virtual
+
+
+ lib/GNSE_TRACER/adv_tracer/stm32_adv_tracer.c
+ 1
+ copy_PARENT1/lib/GNSE_TRACER/adv_tracer/stm32_adv_tracer.c
+
+
+ lib/GNSE_TRACER/adv_tracer/stm32_adv_tracer.h
+ 1
+ copy_PARENT1/lib/GNSE_TRACER/adv_tracer/stm32_adv_tracer.h
+
+
+ lib/GNSE_TRACER/adv_tracer/stm32_adv_tracer_conf.h
+ 1
+ copy_PARENT1/lib/GNSE_TRACER/adv_tracer/stm32_adv_tracer_conf.h
+
+
+ lib/GNSE_TRACER/adv_tracer/stm32_adv_usart.c
+ 1
+ copy_PARENT1/lib/GNSE_TRACER/adv_tracer/stm32_adv_usart.c
+
+
+ lib/GNSE_TRACER/adv_tracer/stm32_adv_usart.h
+ 1
+ copy_PARENT1/lib/GNSE_TRACER/adv_tracer/stm32_adv_usart.h
+
+
+ lib/GNSE_TRACER/adv_tracer/stm32_tiny_vsnprintf.c
+ 1
+ copy_PARENT1/lib/GNSE_TRACER/adv_tracer/stm32_tiny_vsnprintf.c
+
+
+ lib/GNSE_TRACER/adv_tracer/stm32_tiny_vsnprintf.h
+ 1
+ copy_PARENT1/lib/GNSE_TRACER/adv_tracer/stm32_tiny_vsnprintf.h
+
+
+ lib/GNSE_TRACER/tiny_printf/tiny_printf.c
+ 1
+ copy_PARENT1/lib/GNSE_TRACER/tiny_printf/tiny_printf.c
+
+
+ lib/GNSE_TRACER/tiny_printf/tiny_printf.h
+ 1
+ copy_PARENT1/lib/GNSE_TRACER/tiny_printf/tiny_printf.h
+
+
+ lib/GNSE_TRACER/tiny_printf/tiny_printf_conf.h
+ 1
+ copy_PARENT1/lib/GNSE_TRACER/tiny_printf/tiny_printf_conf.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/.DS_Store
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/.DS_Store
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Crypto
+ 2
+ virtual:/virtual
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LICENSE.txt
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LICENSE.txt
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler
+ 2
+ virtual:/virtual
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac
+ 2
+ virtual:/virtual
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Utilities
+ 2
+ virtual:/virtual
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/readme.md
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/readme.md
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/st_readme.txt
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/st_readme.txt
+
+
+ lib/STM32WLxx_LoRaWAN/SubGHz_Phy/.DS_Store
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/SubGHz_Phy/.DS_Store
+
+
+ lib/STM32WLxx_LoRaWAN/SubGHz_Phy/LICENSE.txt
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/SubGHz_Phy/LICENSE.txt
+
+
+ lib/STM32WLxx_LoRaWAN/SubGHz_Phy/Release_notes.html
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/SubGHz_Phy/Release_notes.html
+
+
+ lib/STM32WLxx_LoRaWAN/SubGHz_Phy/_htmresc
+ 2
+ virtual:/virtual
+
+
+ lib/STM32WLxx_LoRaWAN/SubGHz_Phy/radio.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/SubGHz_Phy/radio.h
+
+
+ lib/STM32WLxx_LoRaWAN/SubGHz_Phy/radio_ex.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/SubGHz_Phy/radio_ex.h
+
+
+ lib/STM32WLxx_LoRaWAN/SubGHz_Phy/stm32_radio_driver
+ 2
+ virtual:/virtual
+
+
+ lib/Utilities/baremetal/stm32_seq.c
+ 1
+ copy_PARENT1/lib/Utilities/baremetal/stm32_seq.c
+
+
+ lib/Utilities/baremetal/stm32_seq.h
+ 1
+ copy_PARENT1/lib/Utilities/baremetal/stm32_seq.h
+
+
+ lib/Utilities/baremetal/stm32_systime.c
+ 1
+ copy_PARENT1/lib/Utilities/baremetal/stm32_systime.c
+
+
+ lib/Utilities/baremetal/stm32_systime.h
+ 1
+ copy_PARENT1/lib/Utilities/baremetal/stm32_systime.h
+
+
+ lib/Utilities/baremetal/stm32_timer.c
+ 1
+ copy_PARENT1/lib/Utilities/baremetal/stm32_timer.c
+
+
+ lib/Utilities/baremetal/stm32_timer.h
+ 1
+ copy_PARENT1/lib/Utilities/baremetal/stm32_timer.h
+
+
+ target/stm32wlxx_hal_driver/.github/ISSUE_TEMPLATE.md
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/.github/ISSUE_TEMPLATE.md
+
+
+ target/stm32wlxx_hal_driver/.github/PULL_REQUEST_TEMPLATE.md
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/.github/PULL_REQUEST_TEMPLATE.md
+
+
+ target/stm32wlxx_hal_driver/Inc/.DS_Store
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/.DS_Store
+
+
+ target/stm32wlxx_hal_driver/Inc/Legacy
+ 2
+ virtual:/virtual
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_adc.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_adc.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_adc_ex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_adc_ex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_comp.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_comp.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_cortex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_cortex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_crc.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_crc.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_crc_ex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_crc_ex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_cryp.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_cryp.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_cryp_ex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_cryp_ex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_dac.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_dac.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_dac_ex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_dac_ex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_def.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_def.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_dma.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_dma.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_dma_ex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_dma_ex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_exti.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_exti.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_flash.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_flash.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_flash_ex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_flash_ex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_gpio.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_gpio.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_gpio_ex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_gpio_ex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_gtzc.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_gtzc.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_hsem.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_hsem.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_i2c.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_i2c.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_i2c_ex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_i2c_ex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_i2s.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_i2s.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_ipcc.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_ipcc.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_irda.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_irda.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_irda_ex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_irda_ex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_iwdg.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_iwdg.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_lptim.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_lptim.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_pka.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_pka.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_pwr.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_pwr.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_pwr_ex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_pwr_ex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_rcc.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_rcc.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_rcc_ex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_rcc_ex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_rng.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_rng.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_rng_ex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_rng_ex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_rtc.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_rtc.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_rtc_ex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_rtc_ex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_smartcard.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_smartcard.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_smartcard_ex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_smartcard_ex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_smbus.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_smbus.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_spi.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_spi.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_spi_ex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_spi_ex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_subghz.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_subghz.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_tim.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_tim.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_tim_ex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_tim_ex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_uart.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_uart.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_uart_ex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_uart_ex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_usart.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_usart.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_usart_ex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_usart_ex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_wwdg.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_hal_wwdg.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_adc.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_adc.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_bus.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_bus.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_comp.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_comp.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_cortex.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_cortex.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_crc.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_crc.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_dac.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_dac.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_dma.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_dma.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_dmamux.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_dmamux.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_exti.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_exti.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_gpio.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_gpio.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_hsem.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_hsem.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_i2c.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_i2c.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_ipcc.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_ipcc.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_iwdg.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_iwdg.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_lptim.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_lptim.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_lpuart.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_lpuart.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_pka.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_pka.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_pwr.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_pwr.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_rcc.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_rcc.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_rng.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_rng.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_rtc.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_rtc.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_spi.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_spi.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_system.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_system.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_tim.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_tim.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_usart.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_usart.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_utils.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_utils.h
+
+
+ target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_wwdg.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/stm32wlxx_ll_wwdg.h
+
+
+ target/stm32wlxx_hal_driver/Src/.DS_Store
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/.DS_Store
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_adc.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_adc.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_adc_ex.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_adc_ex.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_comp.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_comp.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_cortex.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_cortex.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_crc.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_crc.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_crc_ex.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_crc_ex.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_cryp.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_cryp.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_cryp_ex.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_cryp_ex.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_dac.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_dac.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_dac_ex.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_dac_ex.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_dma.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_dma.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_dma_ex.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_dma_ex.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_exti.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_exti.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_flash.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_flash.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_flash_ex.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_flash_ex.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_gpio.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_gpio.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_gtzc.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_gtzc.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_hsem.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_hsem.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_i2c.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_i2c.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_i2c_ex.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_i2c_ex.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_i2s.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_i2s.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_ipcc.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_ipcc.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_irda.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_irda.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_iwdg.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_iwdg.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_lptim.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_lptim.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_pka.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_pka.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_pwr.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_pwr.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_pwr_ex.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_pwr_ex.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_rcc.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_rcc.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_rcc_ex.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_rcc_ex.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_rng.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_rng.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_rng_ex.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_rng_ex.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_rtc.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_rtc.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_rtc_ex.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_rtc_ex.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_smartcard.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_smartcard.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_smartcard_ex.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_smartcard_ex.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_smbus.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_smbus.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_spi.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_spi.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_spi_ex.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_spi_ex.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_subghz.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_subghz.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_tim.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_tim.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_tim_ex.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_tim_ex.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_uart.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_uart.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_uart_ex.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_uart_ex.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_usart.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_usart.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_usart_ex.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_usart_ex.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_wwdg.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_hal_wwdg.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_adc.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_adc.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_comp.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_comp.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_crc.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_crc.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_dac.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_dac.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_dma.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_dma.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_exti.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_exti.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_gpio.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_gpio.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_i2c.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_i2c.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_lptim.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_lptim.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_lpuart.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_lpuart.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_pka.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_pka.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_pwr.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_pwr.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_rcc.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_rcc.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_rng.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_rng.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_rtc.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_rtc.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_spi.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_spi.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_tim.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_tim.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_usart.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_usart.c
+
+
+ target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_utils.c
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Src/stm32wlxx_ll_utils.c
+
+
+ target/stm32wlxx_hal_driver/_htmresc/favicon.png
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/_htmresc/favicon.png
+
+
+ target/stm32wlxx_hal_driver/_htmresc/mini-st.css
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/_htmresc/mini-st.css
+
+
+ target/stm32wlxx_hal_driver/_htmresc/mini-st_2020.css
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/_htmresc/mini-st_2020.css
+
+
+ target/stm32wlxx_hal_driver/_htmresc/st_logo.png
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/_htmresc/st_logo.png
+
+
+ target/stm32wlxx_hal_driver/_htmresc/st_logo_2020.png
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/_htmresc/st_logo_2020.png
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Crypto/cmac.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Crypto/cmac.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Crypto/cmac.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Crypto/cmac.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Crypto/lorawan_aes.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Crypto/lorawan_aes.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Crypto/lorawan_aes.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Crypto/lorawan_aes.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Crypto/soft-se.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Crypto/soft-se.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/LmHandler.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/LmHandler.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/LmHandler.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/LmHandler.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/LmHandlerTypes.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/LmHandlerTypes.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/NvmCtxMgmt.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/NvmCtxMgmt.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/NvmCtxMgmt.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/NvmCtxMgmt.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/lorawan_version.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/lorawan_version.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages
+ 2
+ virtual:/virtual
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMac.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMac.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMac.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMac.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacAdr.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacAdr.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacAdr.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacAdr.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacClassB.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacClassB.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacClassB.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacClassB.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacClassBConfig.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacClassBConfig.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacCommands.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacCommands.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacCommands.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacCommands.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacConfirmQueue.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacConfirmQueue.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacConfirmQueue.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacConfirmQueue.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacCrypto.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacCrypto.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacCrypto.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacCrypto.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacHeaderTypes.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacHeaderTypes.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacMessageTypes.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacMessageTypes.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacParser.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacParser.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacParser.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacParser.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacSerializer.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacSerializer.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacSerializer.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacSerializer.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacTest.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacTest.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacTypes.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/LoRaMacTypes.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region
+ 2
+ virtual:/virtual
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/secure-element.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/secure-element.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Utilities/utilities.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Utilities/utilities.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Utilities/utilities.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Utilities/utilities.h
+
+
+ lib/STM32WLxx_LoRaWAN/SubGHz_Phy/_htmresc/mini-st.css
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/SubGHz_Phy/_htmresc/mini-st.css
+
+
+ lib/STM32WLxx_LoRaWAN/SubGHz_Phy/_htmresc/st_logo.png
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/SubGHz_Phy/_htmresc/st_logo.png
+
+
+ lib/STM32WLxx_LoRaWAN/SubGHz_Phy/stm32_radio_driver/radio.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/SubGHz_Phy/stm32_radio_driver/radio.c
+
+
+ lib/STM32WLxx_LoRaWAN/SubGHz_Phy/stm32_radio_driver/radio_driver.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/SubGHz_Phy/stm32_radio_driver/radio_driver.c
+
+
+ lib/STM32WLxx_LoRaWAN/SubGHz_Phy/stm32_radio_driver/radio_driver.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/SubGHz_Phy/stm32_radio_driver/radio_driver.h
+
+
+ lib/STM32WLxx_LoRaWAN/SubGHz_Phy/stm32_radio_driver/subghz_phy_version.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/SubGHz_Phy/stm32_radio_driver/subghz_phy_version.h
+
+
+ target/stm32wlxx_hal_driver/Inc/Legacy/stm32_hal_legacy.h
+ 1
+ copy_PARENT1/target/stm32wlxx_hal_driver/Inc/Legacy/stm32_hal_legacy.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/FragDecoder.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/FragDecoder.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/FragDecoder.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/FragDecoder.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhPackage.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhPackage.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpClockSync.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpClockSync.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpClockSync.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpClockSync.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpCompliance.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpCompliance.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpCompliance.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpCompliance.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpFirmwareManagement.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpFirmwareManagement.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpFirmwareManagement.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpFirmwareManagement.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpFragmentation.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpFragmentation.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpFragmentation.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpFragmentation.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpRemoteMcastSetup.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpRemoteMcastSetup.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpRemoteMcastSetup.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/LmHandler/packages/LmhpRemoteMcastSetup.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/Region.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/Region.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/Region.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/Region.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionAS923.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionAS923.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionAS923.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionAS923.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionAU915.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionAU915.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionAU915.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionAU915.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionCN470.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionCN470.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionCN470.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionCN470.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionCN779.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionCN779.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionCN779.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionCN779.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionCommon.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionCommon.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionCommon.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionCommon.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionEU433.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionEU433.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionEU433.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionEU433.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionEU868.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionEU868.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionEU868.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionEU868.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionIN865.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionIN865.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionIN865.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionIN865.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionKR920.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionKR920.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionKR920.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionKR920.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionRU864.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionRU864.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionRU864.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionRU864.h
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionUS915.c
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionUS915.c
+
+
+ lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionUS915.h
+ 1
+ copy_PARENT1/lib/STM32WLxx_LoRaWAN/LoRaWAN/Mac/region/RegionUS915.h
+
+
+
+
+ copy_PARENT
+ $%7BPARENT-5-PROJECT_LOC%7D/Documents/GitHub/generic-node-se/Software/app
+
+
+ copy_PARENT1
+ $%7BPARENT-1-copy_PARENT%7D
+
+
+
diff --git a/Software/app/sensors_lorawan_se/CMakeLists.txt b/Software/app/sensors_lorawan_se/CMakeLists.txt
new file mode 100644
index 0000000000..545225e672
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/CMakeLists.txt
@@ -0,0 +1,142 @@
+#-------------------
+# LoRaWAN library
+#-------------------
+file(GLOB LORAWAN_SRC
+ "${PROJECT_SOURCE_DIR}/lib/ATECC608A-TNGLORA/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/calib/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/crypto/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/crypto/hashes/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/hal/atca_hal.c"
+ "${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/host/*.c"
+ "${PROJECT_SOURCE_DIR}/${LORAWAN_DIR}/LoRaWAN/LmHandler/*.c"
+ "${PROJECT_SOURCE_DIR}/${LORAWAN_DIR}/LoRaWAN/LmHandler/packages/*.c"
+ "${PROJECT_SOURCE_DIR}/${LORAWAN_DIR}/LoRaWAN/Mac/*.c"
+ "${PROJECT_SOURCE_DIR}/${LORAWAN_DIR}/LoRaWAN/Mac/region/*.c"
+ "${PROJECT_SOURCE_DIR}/${LORAWAN_DIR}/LoRaWAN/Patterns/Basic/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/Utilities/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/GNSE_TRACER/adv_tracer/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/GNSE_TRACER/tiny_printf/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/Utilities/baremetal/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/GNSE_BSP/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/GNSE_HAL/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/SPIFFS/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/SHTC3/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/MX25R1635/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/LIS2DH12/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/BUZZER/*.c"
+ "${PROJECT_SOURCE_DIR}/${LORAWAN_DIR}/LoRaWAN/Utilities/*.c"
+ "${PROJECT_SOURCE_DIR}/${LORAWAN_DIR}/SubGHz_Phy/stm32_radio_driver/*.c"
+
+ )
+add_library(lorawan STATIC
+ ${LORAWAN_SRC}
+ )
+target_include_directories(lorawan
+ PUBLIC
+ ${PROJECT_SOURCE_DIR}/${HAL_DIR}/Inc
+ ${PROJECT_SOURCE_DIR}/${MCU_DIR}/Include
+ ${PROJECT_SOURCE_DIR}/${CMSIS_DIR}/Core/Include
+ ${PROJECT_SOURCE_DIR}/lib/ATECC608A-TNGLORA
+ ${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib
+ ${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/calib
+ ${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/crypto
+ ${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/crypto/hashes
+ ${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/hal
+ ${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/host
+ ${PROJECT_SOURCE_DIR}/${LORAWAN_DIR}/LoRaWAN/LmHandler
+ ${PROJECT_SOURCE_DIR}/${LORAWAN_DIR}/LoRaWAN/LmHandler/packages
+ ${PROJECT_SOURCE_DIR}/${LORAWAN_DIR}/LoRaWAN/Mac
+ ${PROJECT_SOURCE_DIR}/${LORAWAN_DIR}/LoRaWAN/Mac/region
+ ${PROJECT_SOURCE_DIR}/${LORAWAN_DIR}/LoRaWAN/Patterns/Basic
+ ${PROJECT_SOURCE_DIR}/lib/Utilities
+ ${PROJECT_SOURCE_DIR}/lib/GNSE_TRACER
+ ${PROJECT_SOURCE_DIR}/lib/GNSE_TRACER/adv_tracer
+ ${PROJECT_SOURCE_DIR}/lib/GNSE_TRACER/tiny_printf
+ ${PROJECT_SOURCE_DIR}/lib/Utilities/baremetal
+ ${PROJECT_SOURCE_DIR}/${LORAWAN_DIR}/LoRaWAN/Utilities
+ ${PROJECT_SOURCE_DIR}/${LORAWAN_DIR}/SubGHz_Phy
+ ${PROJECT_SOURCE_DIR}/${LORAWAN_DIR}/SubGHz_Phy/stm32_radio_driver
+ PRIVATE
+ ${PROJECT_SOURCE_DIR}/target
+ ${PROJECT_SOURCE_DIR}/app/sensors_lorawan_se/conf
+ ${PROJECT_SOURCE_DIR}/app/sensors_lorawan_se
+ ${PROJECT_SOURCE_DIR}/lib/GNSE_BSP
+ ${PROJECT_SOURCE_DIR}/lib/GNSE_HAL
+ ${PROJECT_SOURCE_DIR}/lib/SPIFFS
+ ${PROJECT_SOURCE_DIR}/lib/SHTC3
+ ${PROJECT_SOURCE_DIR}/lib/MX25R1635
+ ${PROJECT_SOURCE_DIR}/lib/LIS2DH12
+ ${PROJECT_SOURCE_DIR}/lib/BUZZER
+ )
+target_compile_definitions(lorawan
+ PUBLIC
+ ${MCU}
+ )
+#-------------------
+# Main elf
+#-------------------
+file(GLOB MAIN_SRC
+ "${PROJECT_SOURCE_DIR}/app/app_common/*.c"
+ "${PROJECT_SOURCE_DIR}/app/sensors_lorawan_se/*.c"
+ "${PROJECT_SOURCE_DIR}/target/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/GNSE_BSP/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/GNSE_HAL/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/SPIFFS/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/Utilities/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/GNSE_TRACER/adv_tracer/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/GNSE_TRACER/tiny_printf/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/Utilities/baremetal/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/SHTC3/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/MX25R1635/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/LIS2DH12/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/BUZZER/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/ATECC608A-TNGLORA/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/calib/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/crypto/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/crypto/hashes/*.c"
+ "${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/hal/atca_hal.c"
+ "${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/host/*.c"
+ )
+set(SOURCES
+ ${MAIN_SRC}
+ ${PROJECT_SOURCE_DIR}/${STARTUP_FILE}
+ ${PROJECT_SOURCE_DIR}/${SYSTEM_FILE}
+ )
+add_executable(${PROJECT_NAME}.elf
+ ${SOURCES}
+ )
+target_include_directories(${PROJECT_NAME}.elf
+ PUBLIC
+ ${PROJECT_SOURCE_DIR}/target
+ ${PROJECT_SOURCE_DIR}/app
+ ${PROJECT_SOURCE_DIR}/app/app_common
+ ${PROJECT_SOURCE_DIR}/app/sensors_lorawan_se
+ ${PROJECT_SOURCE_DIR}/app/sensors_lorawan_se/conf
+ ${PROJECT_SOURCE_DIR}/app/sensors_lorawan_se
+ ${PROJECT_SOURCE_DIR}/lib/GNSE_BSP
+ ${PROJECT_SOURCE_DIR}/lib/GNSE_HAL
+ ${PROJECT_SOURCE_DIR}/lib/SPIFFS
+ ${PROJECT_SOURCE_DIR}/lib/Utilities
+ ${PROJECT_SOURCE_DIR}/lib/GNSE_TRACER
+ ${PROJECT_SOURCE_DIR}/lib/GNSE_TRACER/adv_tracer
+ ${PROJECT_SOURCE_DIR}/lib/GNSE_TRACER/tiny_printf
+ ${PROJECT_SOURCE_DIR}/lib/Utilities/baremetal
+ ${PROJECT_SOURCE_DIR}/lib/SHTC3
+ ${PROJECT_SOURCE_DIR}/lib/MX25R1635
+ ${PROJECT_SOURCE_DIR}/lib/LIS2DH12
+ ${PROJECT_SOURCE_DIR}/lib/BUZZER
+ ${PROJECT_SOURCE_DIR}/lib/ATECC608A-TNGLORA
+ ${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib
+ ${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/calib
+ ${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/crypto
+ ${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/crypto/hashes
+ ${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/hal
+ ${PROJECT_SOURCE_DIR}/lib/cryptoauthlib/lib/host
+ )
+target_link_libraries(${PROJECT_NAME}.elf
+ PUBLIC
+ hal
+ lorawan
+ )
diff --git a/Software/app/sensors_lorawan_se/README.md b/Software/app/sensors_lorawan_se/README.md
new file mode 100644
index 0000000000..7e67e37188
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/README.md
@@ -0,0 +1,49 @@
+# sensors_lorawan_se
+
+## Description
+
+This application samples the on-board device sensors information and transmits the sensor data over LoRaWAN and showcases a HW secure element (ATECC608A-TNGLORA).
+You can learn more about LoRaWAN and HW secure elements from [here](https://www.thethingsindustries.com/secure-elements/) and [here](https://www.thethingsindustries.com/docs/devices/atecc608a/).
+
+## Configuration
+
+The application behavior can be adjusted by modifying [`conf/app_conf.h`](./conf/app_conf.h).
+
+- `GNSE_ADVANCED_TRACER_ENABLE` enables UART (115200/8-N-1) logging of application activity
+
+```c
+#define GNSE_ADVANCED_TRACER_ENABLE 1
+```
+
+- `DEBUGGER_ON` enables the use of a debugger in low power mode
+
+```c
+#define DEBUGGER_ON 1
+```
+
+> **Note:** Please keep in mind that it is best to disable the tracer and debugger functionalities to reduce power consumption.
+
+## Setup
+
+Follow this [tutorial](https://www.thethingsindustries.com/docs/devices/claim-atecc608a/) to claim your device, and your device will join via OTAA automatically.
+
+The application can be used with the following Javascript payload formatter:
+
+```javascript
+function decodeUplink(input) {
+ var data = {};
+ data.batt_volt = (input.bytes[0]/10);
+ data.temperature = ((input.bytes[1] << 8) + input.bytes[2])/10;
+ data.humidity = ((input.bytes[3] << 8) + input.bytes[4])/10;
+
+ return {
+ data: data,
+ };
+}
+```
+Please see [The Things Stack Javascript payload formatter documentation](https://www.thethingsindustries.com/docs/integrations/payload-formatters/javascript/) for more information.
+
+## Observation
+
+The device joins via OTAA using the on-board secure element and transmits the temperature, humidity and battery voltage information every `SENSORS_TX_DUTYCYCLE`.
+
diff --git a/Software/app/sensors_lorawan_se/conf/Commissioning.h b/Software/app/sensors_lorawan_se/conf/Commissioning.h
new file mode 100644
index 0000000000..1d2f87e9be
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/conf/Commissioning.h
@@ -0,0 +1,80 @@
+/*!
+ * \file Commissioning.h
+ *
+ * \brief End-device commissioning parameters
+ *
+ * \copyright Revised BSD License, see section \ref LICENSE.
+ *
+ * \code
+ * ______ _
+ * / _____) _ | |
+ * ( (____ _____ ____ _| |_ _____ ____| |__
+ * \____ \| ___ | (_ _) ___ |/ ___) _ \
+ * _____) ) ____| | | || |_| ____( (___| | | |
+ * (______/|_____)_|_|_| \__)_____)\____)_| |_|
+ * (C)2013-2020 Semtech
+ *
+ * \endcode
+ */
+/**
+ ******************************************************************************
+ *
+ * Portions COPYRIGHT 2020 STMicroelectronics
+ *
+ * @file Commissioning.h
+ * @author MCD Application Team
+ * @brief End-device commissioning parameters
+ ******************************************************************************
+ */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __COMMISSIONING_H__
+#define __COMMISSIONING_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*!
+ ******************************************************************************
+ ********************************** WARNING ***********************************
+ ******************************************************************************
+
+ The LoRaWAN AES128 keys are stored and pre-provisioned on secure-elements.
+
+ This project provides a software emulated secure-element.
+ The LoRaWAN AES128 keys SHALL be updated under
+ src/peripherals/-se\se-identity.h file.
+
+ ******************************************************************************
+ ******************************************************************************
+ ******************************************************************************
+ */
+#include "se-identity.h"
+
+/*!
+ * When using ABP activation the MAC layer must know in advance to which server
+ * version it will be connected.
+ */
+#define ABP_ACTIVATION_LRWAN_VERSION_V10x 0x01000300 /* 1.0.3.0 */
+
+#define ABP_ACTIVATION_LRWAN_VERSION ABP_ACTIVATION_LRWAN_VERSION_V10x
+
+/*!
+ * Indicates if the end-device support the operation with repeaters
+ */
+#define LORAWAN_REPEATER_SUPPORT false
+
+/*!
+ * Indicates if the end-device is to be connected to a private or public network
+ */
+#define LORAWAN_PUBLIC_NETWORK true
+
+/*!
+ * Current network ID
+ */
+#define LORAWAN_NETWORK_ID ( uint32_t )0
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __COMMISSIONING_H__ */
diff --git a/Software/app/sensors_lorawan_se/conf/app_conf.h b/Software/app/sensors_lorawan_se/conf/app_conf.h
new file mode 100644
index 0000000000..e2442e369b
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/conf/app_conf.h
@@ -0,0 +1,81 @@
+/** Copyright © 2021 The Things Industries B.V.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+/**
+ * @file app_conf.h
+ * @brief Common configuration file for GNSE applications
+ *
+ * @copyright Copyright (c) 2021 The Things Industries B.V.
+ *
+ */
+
+#ifndef APP_CONF_H
+#define APP_CONF_H
+
+#define GNSE_ADVANCED_TRACER_ENABLE 1
+
+/* if ON (=1) it enables the debugger plus 4 dbg pins */
+/* if OFF (=0) the debugger is OFF (lower consumption) */
+#define DEBUGGER_ON 1
+
+/*!
+ * LoRaWAN application port where sensors information can be retrieved by the application server
+ * @note do not use 224. It is reserved for certification
+ */
+#define SENSORS_PAYLOAD_APP_PORT 2
+
+/*! LoRaWAN application port where sensors transmission/uplink interval can be changed (via a downlink)
+ * @note Payload signifies the amount of minutes
+ * */
+#define SENSORS_DOWNLINK_CONF_PORT 1
+
+/* Default, max, and min time interval of the TX dutycycle window in minutes */
+#define SENSORS_TX_DUTYCYCLE_DEFAULT_M 10
+#define SENSORS_DUTYCYCLE_CONF_MAX_M 8640
+#define SENSORS_DUTYCYCLE_CONF_MIN_M 1
+
+/**
+ * RX LED definitions
+ */
+#define SENSORS_LED_RX_PERIOD_MS 200
+#define SENSORS_LED_UNHANDLED_RX_PERIOD_MS 20
+#define SENSORS_LED_RX_TOGGLES 5
+
+/**
+ * sequencer definitions
+ */
+
+/**
+ * This is the list of priority required by the application
+ * Each Id shall be in the range 0..31
+ */
+typedef enum
+{
+ CFG_SEQ_Prio_0,
+ CFG_SEQ_Prio_NBR,
+} CFG_SEQ_Prio_Id_t;
+
+/**
+ * This is the list of task id required by the application
+ * Each Id shall be in the range 0..31
+ */
+typedef enum
+{
+ CFG_SEQ_Task_LmHandlerProcess,
+ CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent,
+ CFG_SEQ_Task_NBR
+} CFG_SEQ_Task_Id_t;
+
+#endif /* APP_CONF_H */
diff --git a/Software/app/sensors_lorawan_se/conf/lorawan_conf.h b/Software/app/sensors_lorawan_se/conf/lorawan_conf.h
new file mode 100644
index 0000000000..9e55e24373
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/conf/lorawan_conf.h
@@ -0,0 +1,87 @@
+/**
+ ******************************************************************************
+ * @file lorawan_conf.h
+ * @author MCD Application Team
+ * @brief Header for LoRaWAN middleware instances
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __LORAWAN_CONF_H__
+#define __LORAWAN_CONF_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "stm32_systime.h"
+#include "lora_info.h"
+
+/* Region ------------------------------------*/
+/* the region listed here will be linked in the MW code */
+/* the applic (on sys_conf.h) shall just configure one region at the time */
+/*#define REGION_AS923*/
+/*#define REGION_AU915*/
+/*#define REGION_CN470*/
+/*#define REGION_CN779*/
+/*#define REGION_EU433*/
+#define REGION_EU868
+/*#define REGION_KR920*/
+/*#define REGION_IN865*/
+#define REGION_US915
+/*#define REGION_RU864*/
+
+#define HYBRID_ENABLED 0
+
+#define KEY_LOG_ENABLED 1
+
+/* Class B ------------------------------------*/
+#define LORAMAC_CLASSB_ENABLED 0
+
+#if ( LORAMAC_CLASSB_ENABLED == 1 )
+/* CLASS B LSE crystall calibration*/
+/**
+ * \brief Temperature coefficient of the clock source
+ */
+#define RTC_TEMP_COEFFICIENT ( -0.035 )
+
+/**
+ * \brief Temperature coefficient deviation of the clock source
+ */
+#define RTC_TEMP_DEV_COEFFICIENT ( 0.0035 )
+
+/**
+ * \brief Turnover temperature of the clock source
+ */
+#define RTC_TEMP_TURNOVER ( 25.0 )
+
+/**
+ * \brief Turnover temperature deviation of the clock source
+ */
+#define RTC_TEMP_DEV_TURNOVER ( 5.0 )
+#endif /* LORAMAC_CLASSB_ENABLED == 1 */
+
+#ifndef CRITICAL_SECTION_BEGIN
+#define CRITICAL_SECTION_BEGIN( ) UTILS_ENTER_CRITICAL_SECTION( )
+#endif /* !CRITICAL_SECTION_BEGIN */
+#ifndef CRITICAL_SECTION_END
+#define CRITICAL_SECTION_END( ) UTILS_EXIT_CRITICAL_SECTION( )
+#endif /* !CRITICAL_SECTION_END */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __LORAWAN_CONF_H__ */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Software/app/sensors_lorawan_se/conf/radio_conf.h b/Software/app/sensors_lorawan_se/conf/radio_conf.h
new file mode 100644
index 0000000000..c92b01a63e
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/conf/radio_conf.h
@@ -0,0 +1,109 @@
+/**
+ ******************************************************************************
+ * @file radio_conf.h
+ * @author MCD Application Team
+ * @brief Header of Radio configuration
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+#ifndef __RADIO_CONF_H__
+#define __RADIO_CONF_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "stm32_mem.h"
+#include "GNSE_tracer.h"
+#include "GNSE_bsp.h"
+#include "app_conf.h"
+
+/**
+ * @brief Set RX pin to high or low level
+ */
+#define DBG_GPIO_RADIO_RX(set_rst) //DBG_GPIO_##set_rst##_LINE(DGB_LINE1_PORT, DGB_LINE1_PIN);
+
+/**
+ * @brief Set TX pin to high or low level
+ */
+#define DBG_GPIO_RADIO_TX(set_rst) //DBG_GPIO_##set_rst##_LINE(DGB_LINE2_PORT, DGB_LINE2_PIN);
+
+/**
+ * @brief Max payload buffer size
+ */
+#define RADIO_RX_BUF_SIZE 255
+
+/**
+ * @brief drive value used anytime radio is NOT in TX low power mode
+ */
+#define SMPS_DRIVE_SETTING_DEFAULT SMPS_DRV_40
+
+/**
+ * @brief drive value used anytime radio is in TX low power mode
+ * TX low power mode is the worst case because the PA sinks from SMPS
+ * while in high power mode, current is sunk directly from the battery
+ */
+#define SMPS_DRIVE_SETTING_MAX SMPS_DRV_60
+
+/**
+ * @brief in XO mode, set internal capacitor (from 0x00 to 0x2F starting 11.2pF with 0.47pF steps)
+ */
+#define XTAL_DEFAULT_CAP_VALUE 0x20
+
+/**
+ * @brief Frequency error (in Hz) can be compensated here.
+ * warning XO frequency error generates (de)modulator sampling time error which can not be compensated
+ */
+#define RF_FREQUENCY_ERROR ((int32_t) 0)
+
+/**
+ * @brief voltage of vdd tcxo.
+ */
+#define TCXO_CTRL_VOLTAGE TCXO_CTRL_3_0V
+
+#ifndef CRITICAL_SECTION_BEGIN
+/**
+ * @brief macro used to enter the critical section
+ */
+#define CRITICAL_SECTION_BEGIN( ) UTILS_ENTER_CRITICAL_SECTION( )
+#endif /* !CRITICAL_SECTION_BEGIN */
+#ifndef CRITICAL_SECTION_END
+/**
+ * @brief macro used to exit the critical section
+ */
+#define CRITICAL_SECTION_END( ) UTILS_EXIT_CRITICAL_SECTION( )
+#endif /* !CRITICAL_SECTION_END */
+
+/* Function mapping */
+/**
+ * @brief SUBGHZ interface init to radio Middleware
+ */
+#define RADIO_INIT GNSE_BSP_SUBGHZ_Init
+
+/**
+ * @brief Delay interface to radio Middleware
+ */
+#define RADIO_DELAY_MS HAL_Delay
+
+/**
+ * @brief Memset utilities interface to radio Middleware
+ */
+#define RADIO_MEMSET8( dest, value, size ) UTIL_MEM_set_8( dest, value, size )
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __RADIO_CONF_H__*/
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Software/app/sensors_lorawan_se/conf/se-identity.h b/Software/app/sensors_lorawan_se/conf/se-identity.h
new file mode 100644
index 0000000000..6f2b340ef1
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/conf/se-identity.h
@@ -0,0 +1,375 @@
+/*!
+ * \file se-identity.h
+ *
+ * \brief Secure Element identity and keys
+ *
+ * \copyright Revised BSD License, see section \ref LICENSE.
+ *
+ * \code
+ * ______ _
+ * / _____) _ | |
+ * ( (____ _____ ____ _| |_ _____ ____| |__
+ * \____ \| ___ | (_ _) ___ |/ ___) _ \
+ * _____) ) ____| | | || |_| ____( (___| | | |
+ * (______/|_____)_|_|_| \__)_____)\____)_| |_|
+ * (C)2020 Semtech
+ *
+ * ___ _____ _ ___ _ _____ ___ ___ ___ ___
+ * / __|_ _/_\ / __| |/ / __/ _ \| _ \/ __| __|
+ * \__ \ | |/ _ \ (__| ' <| _| (_) | / (__| _|
+ * |___/ |_/_/ \_\___|_|\_\_| \___/|_|_\\___|___|
+ * embedded.connectivity.solutions===============
+ *
+ * \endcode
+ *
+ */
+/**
+ ******************************************************************************
+ *
+ * Portions COPYRIGHT 2020 STMicroelectronics
+ *
+ * @file se-identity_template.c
+ * @author MCD Application Team
+ * @brief Secure Element identity and keys
+ ******************************************************************************
+ */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __SOFT_SE_IDENTITY_H__
+#define __SOFT_SE_IDENTITY_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "app_conf.h"
+
+/*!
+ ******************************************************************************
+ ********************************** WARNING ***********************************
+ ******************************************************************************
+ The secure-element implementation supports both 1.0.x and 1.1.x LoRaWAN
+ versions of the specification.
+ Thus it has been decided to use the 1.1.x keys and EUI name definitions.
+ The below table shows the names equivalence between versions:
+ +---------------------+-------------------------+
+ | 1.0.x | 1.1.x |
+ +=====================+=========================+
+ | LORAWAN_DEVICE_EUI | LORAWAN_DEVICE_EUI |
+ +---------------------+-------------------------+
+ | LORAWAN_APP_EUI | LORAWAN_JOIN_EUI |
+ +---------------------+-------------------------+
+ | LORAWAN_GEN_APP_KEY | LORAWAN_APP_KEY |
+ +---------------------+-------------------------+
+ | LORAWAN_APP_KEY | LORAWAN_NWK_KEY |
+ +---------------------+-------------------------+
+ | LORAWAN_NWK_S_KEY | LORAWAN_F_NWK_S_INT_KEY |
+ +---------------------+-------------------------+
+ | LORAWAN_NWK_S_KEY | LORAWAN_S_NWK_S_INT_KEY |
+ +---------------------+-------------------------+
+ | LORAWAN_NWK_S_KEY | LORAWAN_NWK_S_ENC_KEY |
+ +---------------------+-------------------------+
+ | LORAWAN_APP_S_KEY | LORAWAN_APP_S_KEY |
+ +---------------------+-------------------------+
+ ******************************************************************************
+ ******************************************************************************
+ ******************************************************************************
+ */
+
+// TODO: Improve readability of this file, see https://github.com/TheThingsIndustries/generic-node-se/issues/56
+
+/*!
+ * When set to 1 DevEui is LORAWAN_DEVICE_EUI
+ * When set to 0 DevEui is automatically set with a value provided by MCU platform
+ */
+#define STATIC_DEVICE_EUI 1
+
+/*!
+ * end-device IEEE EUI (big endian)
+ */
+#define LORAWAN_DEVICE_EUI { DEVEUI }
+
+/*!
+ * App/Join server IEEE EUI (big endian)
+ */
+#define LORAWAN_JOIN_EUI { APPEUI }
+
+/*!
+ * When set to 1 DevAddr is LORAWAN_DEVICE_ADDRESS
+ * When set to 0 DevAddr is automatically set with a value provided by a pseudo
+ * random generator seeded with a value provided by the MCU platform
+ */
+#define STATIC_DEVICE_ADDRESS 0
+
+/*!
+ * Device address on the network (big endian)
+ */
+#define LORAWAN_DEVICE_ADDRESS ( uint32_t )0x00000000
+
+/*!
+ * Application root key
+ */
+#define LORAWAN_APP_KEY { APPKEY}
+
+/*!
+ * Network root key
+ */
+#define LORAWAN_NWK_KEY { APPKEY }
+
+/*!
+ * Forwarding Network session key
+ */
+#define LORAWAN_NWK_S_KEY { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }
+
+/*!
+ * Application session key
+ */
+#define LORAWAN_APP_S_KEY { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }
+
+#if (USE_LRWAN_1_1_X_CRYPTO == 1)
+#define SESSION_KEYS_LIST \
+ { \
+ /*! \
+ * Join session integrity key (Dynamically updated) \
+ * WARNING: NOT USED FOR 1.0.x DEVICES \
+ */ \
+ .KeyID = J_S_INT_KEY, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ { \
+ /*! \
+ * Join session encryption key (Dynamically updated) \
+ * WARNING: NOT USED FOR 1.0.x DEVICES \
+ */ \
+ .KeyID = J_S_ENC_KEY, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ { \
+ /*! \
+ * Forwarding Network session integrity key \
+ * WARNING: NWK_S_KEY FOR 1.0.x DEVICES \
+ */ \
+ .KeyID = F_NWK_S_INT_KEY, \
+ .KeyValue = LORAWAN_NWK_S_KEY, \
+ }, \
+ { \
+ /*! \
+ * Serving Network session integrity key \
+ * WARNING: NOT USED FOR 1.0.x DEVICES. MUST BE THE SAME AS \ref LORAWAN_F_NWK_S_INT_KEY \
+ */ \
+ .KeyID = S_NWK_S_INT_KEY, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ { \
+ /*! \
+ * Network session encryption key \
+ * WARNING: NOT USED FOR 1.0.x DEVICES. MUST BE THE SAME AS \ref LORAWAN_F_NWK_S_INT_KEY \
+ */ \
+ .KeyID = NWK_S_ENC_KEY, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ { \
+ /*! \
+ * Application session key \
+ */ \
+ .KeyID = APP_S_KEY, \
+ .KeyValue = LORAWAN_APP_S_KEY, \
+ },
+#else /* USE_LRWAN_1_1_X_CRYPTO == 0 */
+#define SESSION_KEYS_LIST \
+ { \
+ /*! \
+ * Network session key \
+ */ \
+ .KeyID = NWK_S_KEY, \
+ .KeyValue = LORAWAN_NWK_S_KEY, \
+ }, \
+ { \
+ /*! \
+ * Application session key \
+ */ \
+ .KeyID = APP_S_KEY, \
+ .KeyValue = LORAWAN_APP_S_KEY, \
+ },
+#endif /* USE_LRWAN_1_1_X_CRYPTO */
+
+#if (LORAMAC_MAX_MC_CTX == 1)
+#define SESSION_MC_KEYS_LIST \
+ { \
+ /*! \
+ * Multicast group #0 root key (Dynamically updated) \
+ */ \
+ .KeyID = MC_KEY_0, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ { \
+ /*! \
+ * Multicast group #0 application session key (Dynamically updated) \
+ */ \
+ .KeyID = MC_APP_S_KEY_0, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ { \
+ /*! \
+ * Multicast group #0 network session key (Dynamically updated) \
+ */ \
+ .KeyID = MC_NWK_S_KEY_0, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ },
+#else /* LORAMAC_MAX_MC_CTX > 1 */
+#define SESSION_MC_KEYS_LIST \
+ { \
+ /*! \
+ * Multicast group #0 root key (Dynamically updated) \
+ */ \
+ .KeyID = MC_KEY_0, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ { \
+ /*! \
+ * Multicast group #0 application session key (Dynamically updated) \
+ */ \
+ .KeyID = MC_APP_S_KEY_0, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ { \
+ /*! \
+ * Multicast group #0 network session key (Dynamically updated) \
+ */ \
+ .KeyID = MC_NWK_S_KEY_0, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ { \
+ /*! \
+ * Multicast group #1 root key (Dynamically updated) \
+ */ \
+ .KeyID = MC_KEY_1, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ { \
+ /*! \
+ * Multicast group #1 application session key (Dynamically updated) \
+ */ \
+ .KeyID = MC_APP_S_KEY_1, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ { \
+ /*! \
+ * Multicast group #1 network session key (Dynamically updated) \
+ */ \
+ .KeyID = MC_NWK_S_KEY_1, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ { \
+ /*! \
+ * Multicast group #2 root key (Dynamically updated) \
+ */ \
+ .KeyID = MC_KEY_2, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ { \
+ /*! \
+ * Multicast group #2 application session key (Dynamically updated) \
+ */ \
+ .KeyID = MC_APP_S_KEY_2, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ { \
+ /*! \
+ * Multicast group #2 network session key (Dynamically updated) \
+ */ \
+ .KeyID = MC_NWK_S_KEY_2, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ { \
+ /*! \
+ * Multicast group #3 root key (Dynamically updated) \
+ */ \
+ .KeyID = MC_KEY_3, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ { \
+ /*! \
+ * Multicast group #3 application session key (Dynamically updated) \
+ */ \
+ .KeyID = MC_APP_S_KEY_3, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ { \
+ /*! \
+ * Multicast group #3 network session key (Dynamically updated) \
+ */ \
+ .KeyID = MC_NWK_S_KEY_3, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ },
+#endif /* LORAMAC_MAX_MC_CTX */
+
+#define SOFT_SE_KEY_LIST \
+ { \
+ { \
+ /*! \
+ * Application root key \
+ * WARNING: FOR 1.0.x DEVICES IT IS THE \ref LORAWAN_GEN_APP_KEY \
+ */ \
+ .KeyID = APP_KEY, \
+ .KeyValue = LORAWAN_APP_KEY, \
+ }, \
+ { \
+ /*! \
+ * Network root key \
+ * WARNING: FOR 1.0.x DEVICES IT IS THE \ref LORAWAN_APP_KEY \
+ */ \
+ .KeyID = NWK_KEY, \
+ .KeyValue = LORAWAN_NWK_KEY, \
+ }, \
+ SESSION_KEYS_LIST \
+ { \
+ /*! \
+ * Multicast root key (Dynamically updated) \
+ */ \
+ .KeyID = MC_ROOT_KEY, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ { \
+ /*! \
+ * Multicast key encryption key (Dynamically updated) \
+ */ \
+ .KeyID = MC_KE_KEY, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ SESSION_MC_KEYS_LIST \
+ { \
+ /*! \
+ * All zeros key. (ClassB usage)(constant) \
+ */ \
+ .KeyID = SLOT_RAND_ZERO_KEY, \
+ .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00 }, \
+ }, \
+ }
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SOFT_SE_IDENTITY_H__ */
diff --git a/Software/app/sensors_lorawan_se/lora_app.c b/Software/app/sensors_lorawan_se/lora_app.c
new file mode 100644
index 0000000000..1c884f872c
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/lora_app.c
@@ -0,0 +1,384 @@
+/**
+ ******************************************************************************
+ * @file lora_app.c
+ * @author MCD Application Team
+ * @brief Application of the LRWAN Middleware
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+
+#include "app.h"
+#include "Region.h" /* Needed for LORAWAN_DEFAULT_DATA_RATE */
+#include "stm32_timer.h"
+#include "sys_app.h"
+#include "lora_app.h"
+#include "stm32_seq.h"
+#include "LmHandler.h"
+#include "lora_info.h"
+#include "sensors.h"
+
+static uint32_t sensors_tx_dutycycle = SENSORS_TX_DUTYCYCLE_DEFAULT_M * 60000;
+
+volatile uint8_t button_press = 0;
+
+static int32_t temp_fallback = 0;
+static int32_t humid_fallback = 0;
+
+// static uint8_t uplink_count_test = 0;
+
+/**
+ * @brief LoRa State Machine states
+ */
+typedef enum TxEventType_e
+{
+ /**
+ * @brief Application data transmission issue based on timer every TxDutyCycleTime
+ */
+ TX_ON_TIMER,
+ /**
+ * @brief AppdataTransmition external event plugged on OnSendEvent( )
+ */
+ TX_ON_EVENT
+} TxEventType_t;
+
+/**
+ * @brief LoRa endNode send request
+ * @param none
+ * @return none
+ */
+static void SendTxData(void);
+
+/**
+ * @brief TX timer callback function
+ * @param timer context
+ * @return none
+ */
+static void OnTxTimerEvent(void *context);
+
+/**
+ * @brief RX LED timer callback function
+ * @param LED context
+ * @return none
+ */
+static void OnRxTimerLedEvent(void *context);
+
+/**
+ * @brief join event callback function
+ * @param params
+ * @return none
+ */
+static void OnJoinRequest(LmHandlerJoinParams_t *joinParams);
+
+/**
+ * @brief tx event callback function
+ * @param params
+ * @return none
+ */
+static void OnTxData(LmHandlerTxParams_t *params);
+
+/**
+ * @brief callback when LoRa endNode has received a frame
+ * @param appData
+ * @param params
+ * @return None
+ */
+static void OnRxData(LmHandlerAppData_t *appData, LmHandlerRxParams_t *params);
+
+/*!
+ * Will be called each time a Radio IRQ is handled by the MAC layer
+ *
+ */
+static void OnMacProcessNotify(void);
+
+/**
+ * @brief User application buffer
+ */
+static uint8_t AppDataBuffer[LORAWAN_APP_DATA_BUFFER_MAX_SIZE];
+
+/**
+ * @brief User application data structure
+ */
+static LmHandlerAppData_t AppData = {0, 0, AppDataBuffer};
+
+static ActivationType_t ActivationType = LORAWAN_DEFAULT_ACTIVATION_TYPE;
+
+/**
+ * @brief LoRaWAN handler Callbacks
+ */
+static LmHandlerCallbacks_t LmHandlerCallbacks =
+ {
+ .GetBatteryLevel = GetBatteryLevel,
+ .GetTemperature = GetTemperatureLevel,
+ .OnMacProcess = OnMacProcessNotify,
+ .OnJoinRequest = OnJoinRequest,
+ .OnTxData = OnTxData,
+ .OnRxData = OnRxData
+ };
+
+/**
+ * @brief LoRaWAN handler parameters
+ */
+static LmHandlerParams_t LmHandlerParams =
+ {
+ .ActiveRegion = ACTIVE_REGION,
+ .DefaultClass = LORAWAN_DEFAULT_CLASS,
+ .AdrEnable = LORAWAN_ADR_STATE,
+ .TxDatarate = LORAWAN_DEFAULT_DATA_RATE,
+ .PingPeriodicity = LORAWAN_DEFAULT_PING_SLOT_PERIODICITY};
+
+/**
+ * @brief Type of Event to generate application Tx
+ */
+static TxEventType_t EventType = TX_ON_TIMER;
+
+/**
+ * @brief Timer to handle the application Tx
+ */
+static UTIL_TIMER_Object_t TxTimer;
+
+/**
+ * @brief Timer to handle rx led events
+ */
+static UTIL_TIMER_Object_t RxLedTimer;
+
+void LoRaWAN_Init(void)
+{
+ // User can add any indication here (LED manipulation or Buzzer)
+ GNSE_BSP_LED_Init(LED_BLUE);
+ GNSE_BSP_LED_Init(LED_RED);
+ GNSE_BSP_LED_Init(LED_GREEN);
+
+ GNSE_BSP_LED_On(LED_GREEN);
+
+ GNSE_BSP_PB_Init(BUTTON_SW1, BUTTON_MODE_EXTI); // each button press will call the HAL_GPIO_EXTI_Callback
+
+ UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_LmHandlerProcess), UTIL_SEQ_RFU, LmHandlerProcess);
+ UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), UTIL_SEQ_RFU, SendTxData);
+
+ /* Init Info table used by LmHandler*/
+ LoraInfo_Init();
+
+ /* Init the Lora Stack*/
+ LmHandlerInit(&LmHandlerCallbacks);
+
+ LmHandlerConfigure(&LmHandlerParams);
+
+ LmHandlerJoin(ActivationType);
+
+ if (EventType == TX_ON_TIMER)
+ {
+ /* send every time timer elapses */
+ UTIL_TIMER_Create(&TxTimer, 0xFFFFFFFFU, UTIL_TIMER_ONESHOT, OnTxTimerEvent, NULL);
+ UTIL_TIMER_SetPeriod(&TxTimer, sensors_tx_dutycycle);
+ UTIL_TIMER_Start(&TxTimer);
+ }
+ else
+ {
+ GNSE_BSP_PB_Init(BUTTON_SW1, BUTTON_MODE_EXTI);
+ }
+
+ HAL_Delay(1000);
+ GNSE_BSP_LED_Off(LED_GREEN);
+}
+
+void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
+{
+ if (GPIO_Pin == BUTTON_SW1_PIN)
+ {
+ /* Note: when "EventType == TX_ON_TIMER" this GPIO is not initialised */
+ button_press = 1;
+ UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
+ }
+}
+
+/*
+Downlink interval settings
+0x0A - 10 seconds
+0x3C - 60 seconds
+0x258 - 10 minutes
+0xE10 - 1 hour
+*/
+
+static void OnRxData(LmHandlerAppData_t *appData, LmHandlerRxParams_t *params)
+{
+ uint32_t rxbuffer = 0;
+ if ((appData != NULL) && (params != NULL))
+ {
+ APP_LOG(ADV_TRACER_TS_OFF, ADV_TRACER_VLEVEL_M, "\r\n Received Downlink on F_PORT:%d \r\n", appData->Port);
+ rxbuffer = sensors_downlink_conf_check(appData);
+ if (rxbuffer)
+ {
+ UTIL_TIMER_Create(&RxLedTimer, 0xFFFFFFFFU, UTIL_TIMER_PERIODIC, OnRxTimerLedEvent, NULL);
+ UTIL_TIMER_SetPeriod(&RxLedTimer, SENSORS_LED_RX_PERIOD_MS);
+ UTIL_TIMER_Start(&RxLedTimer);
+ UTIL_TIMER_SetPeriod(&TxTimer, rxbuffer);
+ }
+ else /* Function returns 0 on fail */
+ {
+ UTIL_TIMER_Create(&RxLedTimer, 0xFFFFFFFFU, UTIL_TIMER_PERIODIC, OnRxTimerLedEvent, NULL);
+ UTIL_TIMER_SetPeriod(&RxLedTimer, SENSORS_LED_UNHANDLED_RX_PERIOD_MS);
+ UTIL_TIMER_Start(&RxLedTimer);
+ }
+ }
+}
+
+static void SendTxData(void)
+{
+ sensors_t sensor_data;
+ UTIL_TIMER_Time_t nextTxIn = 0;
+
+ extern int32_t temp_fallback;
+ extern int32_t humid_fallback;
+// extern uint8_t uplink_count_test;
+
+ if(button_press == 1){
+ GNSE_BSP_LED_On(LED_RED);
+ }else{
+ GNSE_BSP_LED_On(LED_BLUE);
+ }
+
+ sensors_op_result_t rc = sensors_sample(&sensor_data);
+
+// // Simulate sensor failure every 4th uplink to check if fallback values work
+// if(uplink_count_test % 4 == 0)
+// {
+// uplink_count_test = 0;
+// rc = SENSORS_OP_FAIL;
+// }
+// uplink_count_test ++;
+
+ // Use the last reading of temperature and humidity in case sensor reading failed
+ if(rc != SENSORS_OP_SUCCESS)
+ {
+ APP_LOG(ADV_TRACER_TS_OFF, ADV_TRACER_VLEVEL_H,"Sensors returned SENSORS_OP_FAIL \r\n");
+ sensor_data.temperature = temp_fallback;
+ sensor_data.humidity = humid_fallback;
+ }
+
+ temp_fallback = sensor_data.temperature;
+ humid_fallback = sensor_data.humidity;
+ APP_LOG(ADV_TRACER_TS_OFF, ADV_TRACER_VLEVEL_H, "Temp fallback now: %d, Humid fallback now: %d \r\n", temp_fallback, humid_fallback);
+ APP_LOG(ADV_TRACER_TS_OFF, ADV_TRACER_VLEVEL_H, "Sensor Readings (raw): VBAT = %d, T:%d, H:%d \r\n",
+ sensor_data.battery_voltage, sensor_data.temperature, sensor_data.humidity );
+
+ uint8_t vbat_uint = (uint8_t)(sensor_data.battery_voltage / 100);
+ uint16_t temp_uint = (uint16_t)((sensor_data.temperature / 100) + 500); // negative temp offset
+ uint16_t humidity_uint = (uint16_t)(sensor_data.humidity / 100);
+
+ APP_LOG(ADV_TRACER_TS_OFF, ADV_TRACER_VLEVEL_H, "Sensor Readings (fmt): VBAT = %d, T:%d, H:%d \r\n", vbat_uint, temp_uint-500, humidity_uint );
+
+ AppData.Port = SENSORS_PAYLOAD_APP_PORT;
+ AppData.BufferSize = 6;
+ AppData.Buffer[0] = vbat_uint;
+ AppData.Buffer[1] = (uint8_t)(temp_uint >> 8);
+ AppData.Buffer[2] = (uint8_t)(temp_uint & 0xFF);
+ AppData.Buffer[3] = (uint8_t)(humidity_uint >> 8);
+ AppData.Buffer[4] = (uint8_t)(humidity_uint & 0xFF);
+ AppData.Buffer[5] = button_press;
+
+ if (LORAMAC_HANDLER_SUCCESS == LmHandlerSend(&AppData, LORAWAN_DEFAULT_CONFIRMED_MSG_STATE, &nextTxIn, false))
+ {
+ APP_LOG(ADV_TRACER_TS_ON, ADV_TRACER_VLEVEL_L, "SEND REQUEST\r\n");
+ }
+ else if (nextTxIn > 0)
+ {
+ APP_LOG(ADV_TRACER_TS_ON, ADV_TRACER_VLEVEL_L, "Next Tx in : ~%d second(s)\r\n", (nextTxIn / 1000));
+ }
+
+ if(button_press == 1){
+ GNSE_BSP_LED_Off(LED_RED);
+ }else{
+ GNSE_BSP_LED_Off(LED_BLUE);
+ }
+ button_press = 0; // clear the button press state
+}
+
+static void OnTxTimerEvent(void *context)
+{
+ UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
+
+ /*Wait for next tx slot*/
+ UTIL_TIMER_Start(&TxTimer);
+}
+
+static void OnRxTimerLedEvent(void *context)
+{
+ static uint8_t led_counter = 0;
+
+ if (led_counter == 0)
+ {
+ GNSE_BSP_LED_Init(LED_GREEN);
+ }
+ if (led_counter < SENSORS_LED_RX_TOGGLES)
+ {
+ GNSE_BSP_LED_Toggle(LED_GREEN);
+ led_counter++;
+ }
+ else
+ {
+ led_counter = 0;
+ GNSE_BSP_LED_Analog(LED_GREEN);
+ UTIL_TIMER_Stop(&RxLedTimer);
+
+ }
+}
+
+static void OnTxData(LmHandlerTxParams_t *params)
+{
+ if ((params != NULL) && (params->IsMcpsConfirm != 0))
+ {
+ APP_LOG(ADV_TRACER_TS_OFF, ADV_TRACER_VLEVEL_M, "\r\n###### ========== MCPS-Confirm =============\r\n");
+ APP_LOG(ADV_TRACER_TS_OFF, ADV_TRACER_VLEVEL_H, "###### U/L FRAME:%04d | PORT:%d | DR:%d | PWR:%d", params->UplinkCounter,
+ params->AppData.Port, params->Datarate, params->TxPower);
+
+ APP_LOG(ADV_TRACER_TS_OFF, ADV_TRACER_VLEVEL_H, " | MSG TYPE:");
+ if (params->MsgType == LORAMAC_HANDLER_CONFIRMED_MSG)
+ {
+ APP_LOG(ADV_TRACER_TS_OFF, ADV_TRACER_VLEVEL_H, "CONFIRMED [%s]\r\n", (params->AckReceived != 0) ? "ACK" : "NACK");
+ }
+ else
+ {
+ APP_LOG(ADV_TRACER_TS_OFF, ADV_TRACER_VLEVEL_H, "UNCONFIRMED\r\n");
+ }
+ }
+}
+
+static void OnJoinRequest(LmHandlerJoinParams_t *joinParams)
+{
+ if (joinParams != NULL)
+ {
+ if (joinParams->Status == LORAMAC_HANDLER_SUCCESS)
+ {
+ APP_LOG(ADV_TRACER_TS_OFF, ADV_TRACER_VLEVEL_M, "\r\n###### = JOINED = ");
+ if (joinParams->Mode == ACTIVATION_TYPE_ABP)
+ {
+ APP_LOG(ADV_TRACER_TS_OFF, ADV_TRACER_VLEVEL_M, "ABP ======================\r\n");
+ }
+ else
+ {
+ APP_LOG(ADV_TRACER_TS_OFF, ADV_TRACER_VLEVEL_M, "OTAA =====================\r\n");
+ }
+ }
+ else
+ {
+ APP_LOG(ADV_TRACER_TS_OFF, ADV_TRACER_VLEVEL_M, "\r\n###### = JOIN FAILED\r\n");
+ }
+ }
+}
+
+static void OnMacProcessNotify(void)
+{
+ UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LmHandlerProcess), CFG_SEQ_Prio_0);
+}
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Software/app/sensors_lorawan_se/lora_app.h b/Software/app/sensors_lorawan_se/lora_app.h
new file mode 100644
index 0000000000..cb4cf13884
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/lora_app.h
@@ -0,0 +1,82 @@
+/**
+ ******************************************************************************
+ * @file lora_app.h
+ * @author MCD Application Team
+ * @brief Header of application of the LRWAN Middleware
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+#ifndef __LORA_APP_H__
+#define __LORA_APP_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* LoraWAN application configuration (Mw is configured by lorawan_conf.h) */
+#define ACTIVE_REGION LORAMAC_REGION_EU868
+
+/*!
+ * LoRaWAN default endNode class port
+ */
+#define LORAWAN_DEFAULT_CLASS CLASS_A
+
+/*!
+ * LoRaWAN default confirm state
+ */
+#define LORAWAN_DEFAULT_CONFIRMED_MSG_STATE LORAMAC_HANDLER_UNCONFIRMED_MSG
+
+/*!
+ * LoRaWAN Adaptive Data Rate
+ * @note Please note that when ADR is enabled the end-device should be static
+ */
+#define LORAWAN_ADR_STATE LORAMAC_HANDLER_ADR_ON
+
+/*!
+ * LoRaWAN default activation type
+ */
+#define LORAWAN_DEFAULT_ACTIVATION_TYPE ACTIVATION_TYPE_OTAA
+
+/*!
+ * LoRaWAN Default data Rate Data Rate
+ * @note Please note that LORAWAN_DEFAULT_DATA_RATE is used only when LORAWAN_ADR_STATE is disabled
+ */
+#define LORAWAN_DEFAULT_DATA_RATE DR_0
+
+/*!
+ * User application data buffer size
+ */
+#define LORAWAN_APP_DATA_BUFFER_MAX_SIZE 242
+
+/*!
+ * Default Unicast ping slots periodicity
+ *
+ * \remark periodicity is equal to 2^LORAWAN_DEFAULT_PING_SLOT_PERIODICITY seconds
+ * example: 2^3 = 8 seconds. The end-device will open an Rx slot every 8 seconds.
+ */
+#define LORAWAN_DEFAULT_PING_SLOT_PERIODICITY 4
+
+/**
+ * @brief Init Lora Application
+ * @param None
+ * @return None
+ */
+void LoRaWAN_Init(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*__LORA_APP_H__*/
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Software/app/sensors_lorawan_se/lora_info.c b/Software/app/sensors_lorawan_se/lora_info.c
new file mode 100644
index 0000000000..6de0ec5c13
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/lora_info.c
@@ -0,0 +1,212 @@
+/**
+ ******************************************************************************
+ * @file lora_info.c
+ * @author MCD Application Team
+ * @brief To give info to the application about LoRaWAN configuration
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "LoRaMac.h"
+#include "lora_info.h"
+#include "app.h"
+
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+/* External variables ---------------------------------------------------------*/
+/* USER CODE BEGIN EV */
+
+/* USER CODE END EV */
+
+/* Private typedef -----------------------------------------------------------*/
+
+/* USER CODE BEGIN PTD */
+
+/* USER CODE END PTD */
+
+/* Private define ------------------------------------------------------------*/
+
+/* USER CODE BEGIN PD */
+
+/* USER CODE END PD */
+
+/* Private macro -------------------------------------------------------------*/
+
+/* USER CODE BEGIN PM */
+
+/* USER CODE END PM */
+
+/* Private variables ---------------------------------------------------------*/
+static LoraInfo_t loraInfo = {0, 0};
+
+/* USER CODE BEGIN PV */
+
+/* USER CODE END PV */
+
+/* Private function prototypes -----------------------------------------------*/
+
+/* USER CODE BEGIN PFP */
+
+/* USER CODE END PFP */
+
+/* Exported variables --------------------------------------------------------*/
+
+/* USER CODE BEGIN EV */
+
+/* USER CODE END EV */
+
+/* Exported functions --------------------------------------------------------*/
+void LoraInfo_Init(void)
+{
+ loraInfo.ActivationMode = 0;
+ loraInfo.Region = 0;
+ loraInfo.ClassB = 0;
+ loraInfo.Kms = 0;
+ /* USER CODE BEGIN LoraInfo_Init_1 */
+
+ /* USER CODE END LoraInfo_Init_1 */
+
+#ifdef REGION_AS923
+ loraInfo.Region |= (1 << LORAMAC_REGION_AS923) ;
+#endif /* REGION_AS923 */
+#ifdef REGION_AU915
+ loraInfo.Region |= (1 << LORAMAC_REGION_AU915) ;
+#endif /* REGION_AU915 */
+#ifdef REGION_CN470
+ loraInfo.Region |= (1 << LORAMAC_REGION_CN470) ;
+#endif /* REGION_CN470 */
+#ifdef REGION_CN779
+ loraInfo.Region |= (1 << LORAMAC_REGION_CN779) ;
+#endif /* REGION_CN779 */
+#ifdef REGION_EU433
+ loraInfo.Region |= (1 << LORAMAC_REGION_EU433) ;
+#endif /* REGION_EU433 */
+#ifdef REGION_EU868
+ loraInfo.Region |= (1 << LORAMAC_REGION_EU868) ;
+#endif /* REGION_EU868 */
+#ifdef REGION_KR920
+ loraInfo.Region |= (1 << LORAMAC_REGION_KR920) ;
+#endif /* REGION_KR920 */
+#ifdef REGION_IN865
+ loraInfo.Region |= (1 << LORAMAC_REGION_IN865) ;
+#endif /* REGION_IN865 */
+#ifdef REGION_US915
+ loraInfo.Region |= (1 << LORAMAC_REGION_US915) ;
+#endif /* REGION_US915 */
+#ifdef REGION_RU864
+ loraInfo.Region |= (1 << LORAMAC_REGION_RU864) ;
+#endif /* REGION_RU864 */
+
+ if (loraInfo.Region == 0)
+ {
+ APP_PRINTF("error: At least one region shall be defined in the MW: check lorawan_conf.h \r\n");
+ while (1) {} /* At least one region shall be defined */
+ }
+
+#if ( LORAMAC_CLASSB_ENABLED == 1 )
+ loraInfo.ClassB = 1;
+#elif !defined (LORAMAC_CLASSB_ENABLED)
+#error LORAMAC_CLASSB_ENABLED not defined ( shall be <0 or 1> )
+#endif /* LORAMAC_CLASSB_ENABLED */
+
+#if (!defined (LORAWAN_KMS) || (LORAWAN_KMS == 0))
+ loraInfo.Kms = 0;
+ loraInfo.ActivationMode = 3;
+#else /* LORAWAN_KMS == 1 */
+ loraInfo.Kms = 1;
+ loraInfo.ActivationMode = ACTIVATION_BY_PERSONALISATION + (OVER_THE_AIR_ACTIVATION << 1);
+#endif /* LORAWAN_KMS */
+ /* USER CODE BEGIN LoraInfo_Init_2 */
+
+ /* USER CODE END LoraInfo_Init_2 */
+}
+
+LoraInfo_t *LoraInfo_GetPtr(void)
+{
+ /* USER CODE BEGIN LoraInfo_GetPtr */
+
+ /* USER CODE END LoraInfo_GetPtr */
+ return &loraInfo;
+}
+
+uint8_t GetBatteryLevel(void)
+{
+ uint8_t batteryLevel = 3; // Dummy value to use in the basic app, user can add desired implementation depending on the board.
+ APP_LOG(ADV_TRACER_TS_ON, ADV_TRACER_VLEVEL_M, "VDDA= %d (Dummy value)\n\r", batteryLevel);
+
+ return batteryLevel;
+}
+
+uint16_t GetTemperatureLevel(void)
+{
+ return 20; // Dummy value to use in the basic app, user can add desired implementation depending on the board.
+}
+
+void GetUniqueId(uint8_t *id)
+{
+ uint32_t val = 0;
+ val = LL_FLASH_GetUDN();
+ if (val == 0xFFFFFFFF) /* Normally this should not happen */
+ {
+ uint32_t ID_1_3_val = HAL_GetUIDw0() + HAL_GetUIDw2();
+ uint32_t ID_2_val = HAL_GetUIDw1();
+
+ id[7] = (ID_1_3_val) >> 24;
+ id[6] = (ID_1_3_val) >> 16;
+ id[5] = (ID_1_3_val) >> 8;
+ id[4] = (ID_1_3_val);
+ id[3] = (ID_2_val) >> 24;
+ id[2] = (ID_2_val) >> 16;
+ id[1] = (ID_2_val) >> 8;
+ id[0] = (ID_2_val);
+ }
+ else /* Typical use case */
+ {
+ id[7] = val & 0xFF;
+ id[6] = (val >> 8) & 0xFF;
+ id[5] = (val >> 16) & 0xFF;
+ id[4] = (val >> 24) & 0xFF;
+ val = LL_FLASH_GetDeviceID();
+ id[3] = val & 0xFF;
+ val = LL_FLASH_GetSTCompanyID();
+ id[2] = val & 0xFF;
+ id[1] = (val >> 8) & 0xFF;
+ id[0] = (val >> 16) & 0xFF;
+ }
+}
+
+uint32_t GetDevAddr(void)
+{
+ uint32_t val = 0;
+ val = LL_FLASH_GetUDN();
+ if (val == 0xFFFFFFFF)
+ {
+ val = ((HAL_GetUIDw0()) ^ (HAL_GetUIDw1()) ^ (HAL_GetUIDw2()));
+ }
+ return val;
+}
+
+/* USER CODE BEGIN EF */
+
+/* USER CODE END EF */
+
+/* Private functions --------------------------------------------------------*/
+
+/* USER CODE BEGIN PF */
+
+/* USER CODE END PF */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Software/app/sensors_lorawan_se/lora_info.h b/Software/app/sensors_lorawan_se/lora_info.h
new file mode 100644
index 0000000000..d3b7bb6c3b
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/lora_info.h
@@ -0,0 +1,89 @@
+/**
+ ******************************************************************************
+ * @file lora_info.h
+ * @author MCD Application Team
+ * @brief To give info to the application about LoRaWAN configuration
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+#ifndef __LORA_INFO_H__
+#define __LORA_INFO_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include
+
+/*!
+ * To give info to the application about LoraWAN capability
+ * it can depend how it has been compiled (e.g. compiled regions ...)
+ * Params should be better uint32_t foe easier alignment with info_table concept
+ */
+typedef struct
+{
+ uint32_t ActivationMode; /*!< 1: ABP, 2 : OTAA, 3: ABP & OTAA */
+ uint32_t Region; /*!< Combination of regions compiled on MW */
+ uint32_t ClassB; /*!< 0: not compiled in Mw, 1 : compiled in MW */
+ uint32_t Kms; /*!< 0: not compiled in Mw, 1 : compiled in MW */
+} LoraInfo_t;
+
+/**
+ * @brief initialises the LoraInfo table
+ * @param none
+ * @retval none
+ */
+void LoraInfo_Init(void);
+
+/**
+ * @brief returns the pointer to the LoraInfo capabilities table
+ * @param none
+ * @retval LoraInfo pointer
+ */
+LoraInfo_t *LoraInfo_GetPtr(void);
+
+/**
+ * @brief callback to get the battery level in % of full charge (254 full charge, 0 no charge)
+ * @param none
+ * @return battery level
+ */
+uint8_t GetBatteryLevel(void);
+
+/**
+ * @brief callback to get the current temperature in the MCU
+ * @param none
+ * @return temperature level
+ */
+uint16_t GetTemperatureLevel(void);
+
+/**
+ * @brief callback to get the board 64 bits unique ID
+ * @param unique ID
+ * @return none
+ */
+void GetUniqueId(uint8_t *id);
+
+/**
+ * @brief callback to get the board 32 bits unique ID (LSB)
+ * @param none
+ * @retval devAddr Device Address
+ */
+uint32_t GetDevAddr(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __LORA_INFO_H__ */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Software/app/sensors_lorawan_se/main.c b/Software/app/sensors_lorawan_se/main.c
new file mode 100644
index 0000000000..20c9185ff7
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/main.c
@@ -0,0 +1,51 @@
+/** Copyright © 2021 The Things Industries B.V.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file main.c
+ *
+ * @copyright Copyright (c) 2021 The Things Industries B.V.
+ *
+ */
+
+#include "GNSE_hal.h"
+#include "stm32_seq.h"
+#include "sys_app.h"
+#include "lora_app.h"
+
+void MX_LoRaWAN_Init(void)
+{
+ SystemApp_Init();
+ LoRaWAN_Init();
+}
+
+void MX_LoRaWAN_Process(void)
+{
+ UTIL_SEQ_Run(UTIL_SEQ_DEFAULT);
+}
+
+int main(void)
+{
+ HAL_Init();
+ if (GNSE_HAL_SysClk_Init() != GNSE_HAL_OP_SUCCESS)
+ {
+ GNSE_HAL_Error_Handler();
+ }
+ MX_LoRaWAN_Init();
+ while (1)
+ {
+ MX_LoRaWAN_Process();
+ }
+}
diff --git a/Software/app/sensors_lorawan_se/sensors.c b/Software/app/sensors_lorawan_se/sensors.c
new file mode 100644
index 0000000000..c1d42cc275
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/sensors.c
@@ -0,0 +1,78 @@
+/** Copyright © 2021 The Things Industries B.V.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file sensors.c
+ *
+ * @copyright Copyright (c) 2021 The Things Industries B.V.
+ *
+ */
+
+#include "app.h"
+#include "GNSE_bm.h"
+#include "sensors.h"
+
+sensors_op_result_t sensors_init(void)
+{
+ if (GNSE_BSP_BM_Init() != GNSE_BSP_ERROR_NONE)
+ {
+ APP_PPRINTF("\r\n Failed to initialize battery monitor ADC \r\n");
+ return SENSORS_OP_FAIL;
+ }
+ GNSE_BSP_BM_Enable();
+ if (SHTC3_probe() != SHTC3_STATUS_OK)
+ {
+ APP_PPRINTF("\r\n Failed to initialize SHTC3 sensor \r\n");
+ return SENSORS_OP_FAIL;
+ }
+ APP_PPRINTF("\r\nSuccessfully intialized all sensors \r\n");
+ return SENSORS_OP_SUCCESS;
+}
+
+sensors_op_result_t sensors_sample(sensors_t *sensor_data)
+{
+ int16_t status = 0;
+ sensor_data->battery_voltage = GNSE_BM_GetBatteryVoltage();
+ status = SHTC3_measure_blocking_read(&sensor_data->temperature, &sensor_data->humidity);
+ if (status != SHTC3_STATUS_OK)
+ {
+ APP_PPRINTF("\r\n Failed to read data from SHTC3 sensor, Error status: %d \r\n", status);
+ return SENSORS_OP_FAIL;
+ }
+ APP_PPRINTF("\r\nSuccessfully sampled sensors \r\n");
+ return SENSORS_OP_SUCCESS;
+}
+
+uint32_t sensors_downlink_conf_check(LmHandlerAppData_t *appData)
+{
+ uint32_t rxbuffer = 0;
+ if (appData->Port == SENSORS_DOWNLINK_CONF_PORT)
+ {
+ if (appData->BufferSize <= sizeof(rxbuffer))
+ {
+ for (int i = appData->BufferSize - 1; i >= 0; i--)
+ {
+ rxbuffer += appData->Buffer[i] << (8 * (appData->BufferSize - 1 - i));
+ }
+ if (rxbuffer <= SENSORS_DUTYCYCLE_CONF_MAX_M && rxbuffer >= SENSORS_DUTYCYCLE_CONF_MIN_M)
+ {
+ APP_LOG(ADV_TRACER_TS_OFF, ADV_TRACER_VLEVEL_M, "\r\n RX time changed to %ld minutes \r\n", rxbuffer);
+ rxbuffer *= 60000; /* Time data has to be converted from m to ms */
+ return rxbuffer;
+ }
+ }
+ }
+ return 0;
+}
diff --git a/Software/app/sensors_lorawan_se/sensors.h b/Software/app/sensors_lorawan_se/sensors.h
new file mode 100644
index 0000000000..41b0f8fb74
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/sensors.h
@@ -0,0 +1,63 @@
+/** Copyright © 2021 The Things Industries B.V.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file sensors.h
+ *
+ * @copyright Copyright (c) 2021 The Things Industries B.V.
+ *
+ */
+
+#ifndef __SENSORS_H__
+#define __SENSORS_H__
+
+#include "LmHandler.h"
+
+typedef enum
+{
+ SENSORS_OP_SUCCESS = 0,
+ SENSORS_OP_FAIL = 1,
+} sensors_op_result_t;
+
+typedef struct
+{
+ uint16_t battery_voltage;
+ int32_t temperature;
+ int32_t humidity;
+} sensors_t;
+
+/**
+ * @brief Initializes the sensors that will be sampled
+ *
+ * @return sensors_op_result_t
+ */
+sensors_op_result_t sensors_init(void);
+
+/**
+ * @brief Retrieve and sample sensor data
+ *
+ * @param sensor_data passed reference sensor data
+ * @return sensors_op_result_t
+ */
+sensors_op_result_t sensors_sample(sensors_t *sensor_data);
+
+/**
+ * @brief This function checks the downlink data and tests if the data can be used to change the transmission intervals
+ * @param appData: received downlink data
+ * @return New transmission times in ms, or 0 on fail
+ */
+uint32_t sensors_downlink_conf_check(LmHandlerAppData_t *appData);
+
+#endif /* __SENSORS_H__ */
diff --git a/Software/app/sensors_lorawan_se/stm32wlxx_it.c b/Software/app/sensors_lorawan_se/stm32wlxx_it.c
new file mode 100644
index 0000000000..8dc1e72bd4
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/stm32wlxx_it.c
@@ -0,0 +1,162 @@
+/**
+ ******************************************************************************
+ * @file stm32wlxx_it.c
+ * @brief Interrupt Service Routines.
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+
+#include "GNSE_bsp.h"
+#include "stm32wlxx_it.h"
+
+extern RTC_HandleTypeDef hrtc;
+extern SUBGHZ_HandleTypeDef hsubghz;
+
+/******************************************************************************/
+/* Cortex Processor Interruption and Exception Handlers */
+/******************************************************************************/
+/**
+ * @brief This function handles Non maskable interrupt.
+ */
+void NMI_Handler(void)
+{
+}
+
+/**
+ * @brief This function handles Hard fault interrupt.
+ */
+void HardFault_Handler(void)
+{
+ while (1)
+ {
+ }
+}
+
+/**
+ * @brief This function handles Memory management fault.
+ */
+void MemManage_Handler(void)
+{
+ while (1)
+ {
+ }
+}
+
+/**
+ * @brief This function handles Prefetch fault, memory access fault.
+ */
+void BusFault_Handler(void)
+{
+ while (1)
+ {
+ }
+}
+
+/**
+ * @brief This function handles Undefined instruction or illegal state.
+ */
+void UsageFault_Handler(void)
+{
+ while (1)
+ {
+ }
+}
+
+/**
+ * @brief This function handles System service call via SWI instruction.
+ */
+void SVC_Handler(void)
+{
+}
+
+/**
+ * @brief This function handles Debug monitor.
+ */
+void DebugMon_Handler(void)
+{
+}
+
+/**
+ * @brief This function handles Pendable request for system service.
+ */
+void PendSV_Handler(void)
+{
+}
+
+/**
+ * @brief This function handles System tick timer.
+ */
+void SysTick_Handler(void)
+{
+ HAL_IncTick();
+}
+
+/**
+ * @brief This function handles RTC Tamper, RTC TimeStamp, LSECSS and RTC SSRU Interrupts.
+ */
+void TAMP_STAMP_LSECSS_SSRU_IRQHandler(void)
+{
+ HAL_RTCEx_SSRUIRQHandler(&GNSE_BSP_rtc);
+}
+
+/**
+ * @brief This function handles EXTI Line 0 Interrupt.
+ */
+void EXTI0_IRQHandler(void)
+{
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
+}
+
+/**
+ * @brief This function handles EXTI Line 1 Interrupt.
+ */
+void EXTI1_IRQHandler(void)
+{
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);
+}
+
+/**
+ * @brief This function handles EXTI Line 3 Interrupt.
+ */
+void EXTI3_IRQHandler(void)
+{
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
+}
+
+void USART2_IRQHandler(void)
+{
+ HAL_UART_IRQHandler(&GNSE_BSP_debug_usart);
+}
+
+void DMA1_Channel5_IRQHandler(void)
+{
+ HAL_DMA_IRQHandler(&GNSE_BSP_hdma_tx);
+}
+
+/**
+ * @brief This function handles RTC Alarms (A and B) Interrupt.
+ */
+void RTC_Alarm_IRQHandler(void)
+{
+ HAL_RTC_AlarmIRQHandler(&GNSE_BSP_rtc);
+}
+
+/**
+ * @brief This function handles SUBGHZ Radio Interrupt.
+ */
+void SUBGHZ_Radio_IRQHandler(void)
+{
+ HAL_SUBGHZ_IRQHandler(&hsubghz);
+}
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Software/app/sensors_lorawan_se/stm32wlxx_it.h b/Software/app/sensors_lorawan_se/stm32wlxx_it.h
new file mode 100644
index 0000000000..7e474f5af8
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/stm32wlxx_it.h
@@ -0,0 +1,50 @@
+/**
+ ******************************************************************************
+ * @file stm32wlxx_it.h
+ * @brief This file contains the headers of the interrupt handlers.
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+
+#ifndef __STM32WLxx_IT_H
+#define __STM32WLxx_IT_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+void NMI_Handler(void);
+void HardFault_Handler(void);
+void MemManage_Handler(void);
+void BusFault_Handler(void);
+void UsageFault_Handler(void);
+void SVC_Handler(void);
+void DebugMon_Handler(void);
+void PendSV_Handler(void);
+void SysTick_Handler(void);
+void TAMP_STAMP_LSECSS_SSRU_IRQHandler(void);
+void EXTI0_IRQHandler(void);
+void EXTI1_IRQHandler(void);
+void EXTI3_IRQHandler(void);
+void DMA1_Channel5_IRQHandler(void);
+void USART2_IRQHandler(void);
+void RTC_Alarm_IRQHandler(void);
+void SUBGHZ_Radio_IRQHandler(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STM32WLxx_IT_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Software/app/sensors_lorawan_se/sys_app.c b/Software/app/sensors_lorawan_se/sys_app.c
new file mode 100644
index 0000000000..76c9c62164
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/sys_app.c
@@ -0,0 +1,159 @@
+/**
+ ******************************************************************************
+ * @file sys_app.c
+ * @author MCD Application Team
+ * @brief Initializes HW and SW system entities (not related to the radio)
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+
+#include
+#include "app.h"
+#include "sys_app.h"
+#include "stm32_seq.h"
+#include "stm32_systime.h"
+#include "GNSE_lpm.h"
+#include "GNSE_rtc.h"
+#include "GNSE_bm.h"
+#include "sensors.h"
+
+#define MAX_TS_SIZE (int)16
+
+/**
+ * @brief Returns sec and msec based on the systime in use
+ * @param none
+ * @return none
+ */
+static void TimestampNow(uint8_t *buff, uint16_t *size);
+
+/**
+ * @brief it calls ADV_TRACER_VSNPRINTF
+ */
+static void tiny_snprintf_like(char *buf, uint32_t maxsize, const char *strFormat, ...);
+
+/**
+ * @brief initialises the system (dbg pins, trace, mbmux, systimer, LPM, ...)
+ * @param none
+ * @return none
+ * TODO: Improve with system wide Init(), see https://github.com/TheThingsIndustries/generic-node-se/issues/57
+ */
+void SystemApp_Init(void)
+{
+ /* Ensure that MSI is wake-up system clock */
+ __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_MSI);
+ /*Initialises timer and RTC*/
+ UTIL_TIMER_Init();
+
+ /* Initialize the Low Power Manager and Debugger */
+#if defined(DEBUGGER_ON) && (DEBUGGER_ON == 1)
+ GNSE_LPM_Init(GNSE_LPM_SLEEP_STOP_DEBUG_MODE);
+#elif defined(DEBUGGER_ON) && (DEBUGGER_ON == 0)
+ GNSE_LPM_Init(GNSE_LPM_SLEEP_STOP_MODE);
+#endif
+
+ GNSE_TRACER_INIT();
+ GNSE_TRACER_TIMESTAMP(TimestampNow);
+ GNSE_app_printAppInfo();
+
+ APP_PPRINTF("\r\n Powering and using HW secure element (ATECC608A-TNGLORA) \r\n");
+ GNSE_BSP_LS_Init(LOAD_SWITCH_SENSORS);
+ GNSE_BSP_LS_On(LOAD_SWITCH_SENSORS);
+ HAL_Delay(100);
+ APP_PPRINTF("\r\n Initializing on-board sensors bus I2C1 \r\n");
+ GNSE_BSP_Sensor_I2C1_Init();
+ APP_PPRINTF("\r\n Initializing on-board sensors \r\n");
+ sensors_init();
+}
+
+void GNSE_LPM_PreStopModeHook(void)
+{
+ GNSE_LPM_SensorBus_Off();
+}
+
+void GNSE_LPM_PostStopModeHook(void)
+{
+ GNSE_TRACER_RESUME();
+ GNSE_LPM_SensorBus_Resume();
+ GNSE_LPM_BatteryADC_Resume();
+}
+
+/**
+ * @brief redefines __weak function in stm32_seq.c such to enter low power
+ * @param none
+ * @return none
+ */
+void UTIL_SEQ_Idle(void)
+{
+ GNSE_LPM_EnterLowPower();
+}
+
+static void TimestampNow(uint8_t *buff, uint16_t *size)
+{
+ SysTime_t curtime = SysTimeGet();
+ tiny_snprintf_like((char *)buff, MAX_TS_SIZE, "%ds%03d:", curtime.Seconds, curtime.SubSeconds);
+ *size = strlen((char *)buff);
+}
+
+/* Disable StopMode when traces need to be printed */
+void ADV_TRACER_PreSendHook(void)
+{
+ GNSE_LPM_SetStopMode((1 << GNSE_LPM_UART_TRACER), GNSE_LPM_DISABLE);
+}
+
+/* Re-enable StopMode when traces have been printed */
+void ADV_TRACER_PostSendHook(void)
+{
+ GNSE_LPM_SetStopMode((1 << GNSE_LPM_UART_TRACER), GNSE_LPM_ENABLE);
+}
+
+static void tiny_snprintf_like(char *buf, uint32_t maxsize, const char *strFormat, ...)
+{
+ va_list vaArgs;
+ va_start(vaArgs, strFormat);
+ ADV_TRACER_VSNPRINTF(buf, maxsize, strFormat, vaArgs);
+ va_end(vaArgs);
+}
+
+/**
+ * @brief This function configures the source of the time base.
+ * @brief don't enable systick
+ * @param TickPriority: Tick interrupt priority.
+ * @return HAL status
+ */
+HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
+{
+ /*Initialize the RTC services */
+ return HAL_OK;
+}
+
+/**
+ * @brief Provide a tick value in millisecond measured using RTC
+ * @note This function overwrites the __weak one from HAL
+ * @return tick value
+ */
+uint32_t HAL_GetTick(void)
+{
+ return GNSE_RTC_GetTimerValue();
+}
+
+/**
+ * @brief This function provides delay (in ms)
+ * @param Delay: specifies the delay time length, in milliseconds.
+ * @return None
+ */
+void HAL_Delay(__IO uint32_t Delay)
+{
+ GNSE_RTC_DelayMs(Delay); /* based on RTC */
+}
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Software/app/sensors_lorawan_se/sys_app.h b/Software/app/sensors_lorawan_se/sys_app.h
new file mode 100644
index 0000000000..995d1fa6fa
--- /dev/null
+++ b/Software/app/sensors_lorawan_se/sys_app.h
@@ -0,0 +1,43 @@
+/**
+ ******************************************************************************
+ * @file sys_app.h
+ * @author MCD Application Team
+ * @brief Function prototypes for sys_app.c file
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+
+#ifndef __SYS_APP_H__
+#define __SYS_APP_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "stdint.h"
+#include "GNSE_tracer.h"
+
+/**
+ * @brief initialises the system (dbg pins, trace, systimer, LPM, ...)
+ * @param none
+ * @return none
+ */
+void SystemApp_Init(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SYS_APP_H__ */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Software/cross.cmake b/Software/cross.cmake
index 54c02daa7f..e25fd30b78 100644
--- a/Software/cross.cmake
+++ b/Software/cross.cmake
@@ -15,9 +15,11 @@
# Important: TOOLCHAIN_PREFIX must be configured as it's system and user dependant
# MAC OSX and Linux Example -> set(TOOLCHAIN_PREFIX "/Users/USER/opt/gcc-arm-none-eabi-9-2020-q2-update/")
# Ubuntu install from 'sudo apt install gcc-arm-none-eabi' -> set(TOOLCHAIN_PREFIX "/usr")
-# Windows Example -> set(TOOLCHAIN_PREFIX "C:/Program Files (x86)/GNU Tools ARM Embedded/9 2020-q2-update/")
+# Windows Example -> set(TOOLCHAIN_PREFIX "C:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2021.07")
# Docker Example -> set(TOOLCHAIN_PREFIX "/toolchain/gcc-arm-none-eabi-9-2020-q2-update/")
+# set(TOOLCHAIN_PREFIX "C:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2021.10")
+
if(NOT TOOLCHAIN_PREFIX)
message(FATAL_ERROR "[ERRR] TOOLCHAIN_PREFIX not specified, please update the with compiler toolchain location")
endif()