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()