diff --git a/.gitignore b/.gitignore index 4a1f5a5..1e6b36c 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,8 @@ compile_commands.json CTestTestfile.cmake _deps +# ---> Output +*.o + +# ---> Folder +/EWARM/WiseEye-LTE/BrowseInfo \ No newline at end of file diff --git a/.mxproject b/.mxproject new file mode 100644 index 0000000..df5567b --- /dev/null +++ b/.mxproject @@ -0,0 +1,33 @@ +[PreviousLibFiles] +LibFiles=Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_cortex.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_cortex.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_def.h;Drivers\STM32WBAxx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_bus.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_system.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_rcc.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_rcc_ex.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_rcc.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_utils.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_flash.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_flash_ex.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_gpio.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_gpio_ex.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_gpio.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_dma.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_dma.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_dma_ex.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_exti.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_exti.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_pwr.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_pwr.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_pwr_ex.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_hsem.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_icache.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_icache.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_uart.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_usart.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_lpuart.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_uart_ex.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_rtc.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_rtc_ex.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_rtc.h;Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_cortex.c;Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal.c;Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rcc.c;Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rcc_ex.c;Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_flash.c;Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_flash_ex.c;Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_gpio.c;Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_dma.c;Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_dma_ex.c;Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_exti.c;Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_pwr.c;Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_pwr_ex.c;Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_hsem.c;Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_icache.c;Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_uart.c;Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_uart_ex.c;Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rtc.c;Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rtc_ex.c;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_cortex.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_cortex.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_def.h;Drivers\STM32WBAxx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_bus.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_system.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_rcc.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_rcc_ex.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_rcc.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_utils.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_flash.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_flash_ex.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_gpio.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_gpio_ex.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_gpio.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_dma.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_dma.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_dma_ex.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_exti.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_exti.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_pwr.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_pwr.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_pwr_ex.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_hsem.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_icache.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_icache.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_uart.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_usart.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_lpuart.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_uart_ex.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_rtc.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_hal_rtc_ex.h;Drivers\STM32WBAxx_HAL_Driver\Inc\stm32wbaxx_ll_rtc.h;Drivers\CMSIS\Device\ST\STM32WBAxx\Include\stm32wba52xx.h;Drivers\CMSIS\Device\ST\STM32WBAxx\Include\stm32wbaxx.h;Drivers\CMSIS\Device\ST\STM32WBAxx\Include\system_stm32wbaxx.h;Drivers\CMSIS\Device\ST\STM32WBAxx\Include\system_stm32wbaxx.h;Drivers\CMSIS\Device\ST\STM32WBAxx\Source\Templates\system_stm32wbaxx.c;Drivers\CMSIS\Include\cachel1_armv7.h;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_armclang_ltm.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv81mml.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm35p.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm55.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_cm85.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\core_starmc1.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\pac_armv81.h;Drivers\CMSIS\Include\pmu_armv8.h;Drivers\CMSIS\Include\tz_context.h; + +[PreviousUsedIarFiles] +SourceFiles=..\Core\Src\main.c;..\Core\Src\gpio.c;..\Core\Src\icache.c;..\Core\Src\usart.c;..\Core\Src\rtc.c;..\Core\Src\stm32wbaxx_it.c;..\Core\Src\stm32wbaxx_hal_msp.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_cortex.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rcc.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rcc_ex.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_flash.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_flash_ex.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_gpio.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_dma.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_dma_ex.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_exti.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_pwr.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_pwr_ex.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_hsem.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_icache.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_uart.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_uart_ex.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rtc.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rtc_ex.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\CMSIS\Device\ST\STM32WBAxx\Source\Templates\system_stm32wbaxx.c;..\Core\Src\system_stm32wbaxx.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_cortex.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rcc.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rcc_ex.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_flash.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_flash_ex.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_gpio.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_dma.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_dma_ex.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_exti.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_pwr.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_pwr_ex.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_hsem.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_icache.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_uart.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_uart_ex.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rtc.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rtc_ex.c;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\CMSIS\Device\ST\STM32WBAxx\Source\Templates\system_stm32wbaxx.c;..\Core\Src\system_stm32wbaxx.c;;; +HeaderPath=C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Inc;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Inc\Legacy;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\CMSIS\Device\ST\STM32WBAxx\Include;C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\CMSIS\Include;..\Core\Inc; +CDefines=USE_HAL_DRIVER;STM32WBA52xx;USE_HAL_DRIVER;USE_HAL_DRIVER; + +[PreviousGenFiles] +AdvancedFolderStructure=true +HeaderFileListSize=7 +HeaderFiles#0=..\Core\Inc\gpio.h +HeaderFiles#1=..\Core\Inc\icache.h +HeaderFiles#2=..\Core\Inc\usart.h +HeaderFiles#3=..\Core\Inc\rtc.h +HeaderFiles#4=..\Core\Inc\stm32wbaxx_it.h +HeaderFiles#5=..\Core\Inc\stm32wbaxx_hal_conf.h +HeaderFiles#6=..\Core\Inc\main.h +HeaderFolderListSize=1 +HeaderPath#0=..\Core\Inc +HeaderFiles=; +SourceFileListSize=7 +SourceFiles#0=..\Core\Src\gpio.c +SourceFiles#1=..\Core\Src\icache.c +SourceFiles#2=..\Core\Src\usart.c +SourceFiles#3=..\Core\Src\rtc.c +SourceFiles#4=..\Core\Src\stm32wbaxx_it.c +SourceFiles#5=..\Core\Src\stm32wbaxx_hal_msp.c +SourceFiles#6=..\Core\Src\main.c +SourceFolderListSize=1 +SourcePath#0=..\Core\Src +SourceFiles=; + diff --git a/.vscode/iar-vsc.json b/.vscode/iar-vsc.json new file mode 100644 index 0000000..0a4cab4 --- /dev/null +++ b/.vscode/iar-vsc.json @@ -0,0 +1,32 @@ +{ + "workspace": { + "path": "${workspaceFolder}\\EWARM\\Project.eww" + }, + "workspaces": { + "${workspaceFolder}\\EWARM\\Project.eww": { + "configs": { + "${workspaceFolder}\\EWARM\\WiseEye-LTE.ewp": "WiseEye-LTE" + }, + "selected": { + "path": "${workspaceFolder}\\EWARM\\WiseEye-LTE.ewp" + } + }, + "${workspaceFolder}\\EWARM\\WiseEye_LTE.eww": { + "configs": { + "${workspaceFolder}\\EWARM\\WiseEye-LTE.ewp": "WiseEye-LTE" + }, + "selected": { + "path": "${workspaceFolder}\\EWARM\\WiseEye-LTE.ewp" + } + } + }, + "workbench": { + "path": "C:\\Program Files\\IAR Systems\\Embedded Workbench 9.2" + }, + "configs": { + "${workspaceFolder}\\EWARM\\WiseEye-LTE.ewp": "WiseEye-LTE" + }, + "project": { + "path": "${workspaceFolder}\\EWARM\\WiseEye-LTE.ewp" + } +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..f1fde13 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "C_Cpp.default.configurationProvider": "iarsystems.iar-build", + "files.associations": { + "eg91.h": "c", + "lte_comms.h": "c" + } +} \ No newline at end of file diff --git a/Core/Inc/eg91.h b/Core/Inc/eg91.h new file mode 100644 index 0000000..d0c8f6d --- /dev/null +++ b/Core/Inc/eg91.h @@ -0,0 +1,334 @@ +#ifndef EG91_H +#define EG91_H + +#include +#include +#include +#include +#include "eg91_conf.h" + +/* Private Constants --------------------------------------------------------*/ +#define RET_NONE 0x0000 /* RET_NONE shall be 0x0: don't change this value! */ +#define RET_CRLF 0x0001 +#define RET_OK 0x0002 /* do not change this value */ +#define RET_SIM_READY 0x0004 +#define RET_ARROW 0x0008 +#define RET_SENT 0x0010 /* do not change this value */ +#define RET_OPEN 0x0020 +#define RET_ERROR 0x0040 /* do not change this value */ +#define RET_URC_CLOSED 0x0080 +#define RET_URC_RECV 0x0100 +#define RET_URC_IN_FULL 0x0200 +#define RET_URC_INCOM 0x0400 +#define RET_URC_PDPDEACT 0x0800 +#define RET_URC_DNS 0x1000 +#define RET_BUF_FULL 0x2000 /* do not change this value */ +#define RET_READ 0x4000 +#define RET_CME_ERROR 0x8000 /* do not change this value */ +#define RET_CMS_ERROR 0x10000 +#define RET_POWERED_DOWN 0x20000 +#define RET_SEND 0x40000 +#define RET_RESP 0x80000 +#define RET_NETCLOSE 0x80010 +#define RET_UART_READY 0x90000 +#define NUM_RESPONSES 23 + +/* Timeouts modem dependent */ +#define EG91_TOUT_SHORT 1000 /* 50 ms 1000 */ +#define EG91_TOUT_100 100 /* 100 ms */ +#define EG91_TOUT_300 350 /* 0,3 sec + margin */ +#define EG91_TOUT_ATSYNC 500 +/* Timeouts network dependent */ +#define EG91_TOUT_5000 5500 /* 5 sec + margin */ +#define EG91_TOUT_15000 16500 /* 15 sec + margin */ +#define EG91_TOUT_40000 42000 /* 40 sec + margin */ +#define EG91_TOUT_60000 64000 /* 1 min + margin */ +#define EG91_TOUT_75000 78000 /* 75 sec + margin */ +#define EG91_TOUT_150000 156000 /* 2,5 min + margin */ +#define EG91_TOUT_180000 186000 /* 3 min + margin */ + +/* Exported constants---------------------------------------------------------*/ + +#define EG91_MAX_APN_NAME_SIZE 32 +#define EG91_MAX_USER_NAME_SIZE 32 +#define EG91_MAX_PSW_NAME_SIZE 32 + +#define EG91_ERROR_STRING_SIZE 40 + +#define EG91_MFC_SIZE 10 +#define EG91_PROD_ID_SIZE 50 +#define EG91_FW_REV_SIZE 100 +#define EG91_IMEI_SIZE 50 +#define EG91_ICCID_SIZE 50 +#define EG91_IMSI_SIZE 50 + +/* Exported macro-------------------------------------------------------------*/ +#ifdef MIN +#undef MIN +#endif +#define MIN(a, b) ((a) < (b) ? (a) : (b)) + +/* Exported typedef ----------------------------------------------------------*/ +typedef int8_t (*IO_Init_Func)(void); +typedef int8_t (*IO_DeInit_Func)(void); +typedef int8_t (*IO_Baudrate_Func)(uint32_t BaudRate); +typedef void (*IO_Flush_Func)(void); +typedef int16_t (*IO_Send_Func)(uint8_t*, uint16_t); +typedef int16_t (*IO_ReceiveOne_Func)(uint8_t *pSingleData); +typedef uint32_t (*App_GetTickCb_Func)(void); + +typedef struct +{ + uint32_t retVal; + char retStr[100]; +} EG91_RetKeywords_t; + +typedef enum +{ + EG91_RETURN_OK = RET_OK, /* shall be aligned with above definitions */ + EG91_RETURN_ERROR = RET_ERROR, /* shall be aligned with above definitions */ + EG91_RETURN_CME_ERROR = RET_CME_ERROR, /* shall be aligned with above definitions */ + EG91_RETURN_RETRIEVE_ERROR = -1, + EG91_RETURN_SEND_ERROR = -2 +} EG91_Return_t; + +typedef enum +{ + /* See CME Error Codes */ + EG91_SIM_ERROR = 0, + EG91_SIM_NOT_INSERTED = 10, + EG91_SIM_PIN_REQUIRED = 11, + EG91_SIM_PUK_REQUIRED = 12, + EG91_SIM_FAILURE = 13, + EG91_SIM_BUSY = 14, + EG91_SIM_WRONG = 15, + EG91_INCORRECT_PSW = 16, + EG91_SIM_PIN2_REQUIRED = 17, + EG91_SIM_PUK2_REQUIRED = 18, + EG91_OPERATION_NOT_ALLOW = 3, + EG91_SIM_READY = 0xFF +} EG91_SIMState_t; + + +typedef enum +{ + EG91_NRS_NOT_REGISTERED = 0x00, + EG91_NRS_HOME_NETWORK = 0x01, + EG91_NRS_TRYING = 0x02, + EG91_NRS_REG_DENIED = 0x03, + EG91_NRS_UNKNOWN = 0x04, + EG91_NRS_ROAMING = 0x05, + EG91_NRS_ERROR = 0xFF +} EG91_NetworkRegistrationState_t; + +typedef enum +{ + EG91_AP_NOT_CONFIG = 0x00, + EG91_AP_CONFIGURED = 0x01, + EG91_AP_ACVTIVATED = 0x02, + EG91_AP_ERROR = 0xFF +} EG91_APState_t; + +typedef enum +{ + EG91_INIT_RET_OK = RET_OK, /*shall be aligned with above definitions */ + EG91_INIT_RET_AT_ERR = 0x04, + EG91_INIT_RET_SIM_ERR = 0x08, + EG91_INIT_RET_IO_ERR = 0x10, + EG91_INIT_OTHER_ERR = 0x20 +} EG91_InitRet_t; + +typedef enum +{ + EG91_SEND_RET_UART_FAIL = 0x1, + EG91_SEND_RET_SENT = RET_SENT, /*shall be aligned with above definitions */ + EG91_SEND_RET_BUF_FULL = RET_BUF_FULL, /*shall be aligned with above definitions */ + EG91_SEND_RET_CONN_ERR = RET_ERROR /*shall be aligned with above definitions */ +} EG91_SendRet_t; + + +typedef enum +{ + EG91_RECEIVE_RET_INCOMPLETE = 0x01, + EG91_RECEIVE_RET_OK = RET_OK, /*shall be aligned with above definitions */ + EG91_RECEIVE_RET_PARAM_ERR = 0x04, + EG91_RECEIVE_RET_COM_ERR = 0x08 +} EG91_ReceiveRet_t; + +typedef enum +{ + EG91_TCP_CONNECTION = 0, + EG91_UDP_CONNECTION = 1, + EG91_TCP_LISTENER_CONNECTION = 2, + EG91_UDP_SERVER_CONNECTION = 3 +} EG91_ConnType_t; + +typedef enum +{ + EG91_BUFFER_MODE = 0, + EG91_DIRECT_PUSH = 1, + EG91_TRANSPARENT_MODE = 2 +} EG91_AccessMode_t; + +/** + * \brief Authentication settings for C2C network + */ +typedef enum +{ + EG91_AUTHENT_NONE = 0x00, + EG91_AUTHENT_PAP = 0x01, + EG91_AUTHENT_CHAP = 0x02, + EG91_AUTHENT_PAP_CHAP = 0x03 +} EG91_Authent_t; + +typedef enum +{ + EG91_UART_FLW_CTL_NONE = 0x00, + EG91_UART_FLW_CTL_RTS = 0x01, + EG91_UART_FLW_CTL_CTS = 0x02, + EG91_UART_FLW_CTL_RTS_CTS = 0x03, +} EG91_UART_FLW_CTL_t; + +typedef struct +{ + uint32_t BaudRate; + uint32_t FlowControl; +} EG91_UARTConfig_t; + +typedef struct +{ + uint8_t ContextID; /*!< range is 1-20 */ + uint8_t ContextType; /*!< shall be 1 (IpV */ + uint8_t ApnString[32]; /*!< access point name, string of chars */ + uint8_t Username[32]; /*!< user name, string of chars */ + uint8_t Password[32]; /*!< password, string of chars */ + EG91_Authent_t Authentication; +} EG91_APConfig_t; + +typedef struct +{ + EG91_ConnType_t Type; + EG91_AccessMode_t AccessMode; + uint8_t ConnectID; + uint16_t RemotePort; + uint16_t LocalPort; + char *Url; +} EG91_Conn_t; + +typedef struct +{ + EG91_ConnType_t Type; + EG91_AccessMode_t AccessMode; + uint16_t ComulatedQirdData; + uint16_t HaveReadLength; + uint16_t UnreadLength; + int16_t UartRemaining; /* if Timeout respects UART speed this should always be 0 */ +} EG91_Socket_t; + +typedef struct +{ + IO_Init_Func IO_Init; + IO_DeInit_Func IO_DeInit; + IO_Baudrate_Func IO_Baudrate; + IO_Flush_Func IO_FlushBuffer; + IO_Send_Func IO_Send; + IO_ReceiveOne_Func IO_ReceiveOne; +} EG91_IO_t; + +typedef struct +{ + EG91_SIMState_t SimStatus; + uint8_t RegistStatusString[3]; + uint8_t IMSI[EG91_IMSI_SIZE]; + uint8_t ICCID[EG91_ICCID_SIZE + 1]; +} EG91_SIMInfo_t; + +typedef struct +{ + uint8_t Manufacturer[EG91_MFC_SIZE]; + uint8_t ProductID[EG91_PROD_ID_SIZE]; + uint8_t FW_Rev[EG91_FW_REV_SIZE]; + uint8_t Imei[EG91_IMEI_SIZE]; /*International Mobile Equipment Identity*/ + EG91_SIMInfo_t SimInfo; + uint8_t APsActive; + uint8_t APContextState[EG91_MAX_CONTEXTS]; /* to decide if keeping all EG91_APConfig_t info. maybe at c2c SW level*/ + EG91_Socket_t SocketInfo[EG91_MAX_SOCKETS]; /* to decide if keeping all EG91_Conn_t info. maybe at c2c SW level*/ + EG91_UARTConfig_t UART_Config; + EG91_IO_t fops; + App_GetTickCb_Func GetTickCb; + uint8_t CmdResp[EG91_CMD_SIZE]; + uint32_t RemainRxData; +} EG91Object_t; + +/* Exported functions --------------------------------------------------------*/ + +/* ==== Init and status ==== */ + +EG91_Return_t EG91_RegisterBusIO(EG91Object_t *Obj, IO_Init_Func IO_Init, + IO_DeInit_Func IO_DeInit, IO_Baudrate_Func IO_Baudrate, + IO_Send_Func IO_Send, IO_ReceiveOne_Func IO_ReceiveOne, + IO_Flush_Func IO_Flush); + +EG91_InitRet_t EG91_Init(EG91Object_t *Obj); + +EG91_Return_t EG91_PowerDown(EG91Object_t *Obj); + +/* ==== Registration and network selection ==== */ + +EG91_Return_t EG91_GetSignalQualityStatus(EG91Object_t *Obj, int32_t *Qvalue); +EG91_Return_t EG91_PSAttach(EG91Object_t *Obj); +EG91_Return_t EG91_AutomaticPlmnSelection(EG91Object_t *Obj); +EG91_Return_t EG91_SetFullFunctionality(EG91Object_t *Obj); +EG91_Return_t EG91_SetGSMLTE(EG91Object_t *Obj); +EG91_NetworkRegistrationState_t EG91_GetCsNetworkRegistrationStatus(EG91Object_t *Obj); +EG91_NetworkRegistrationState_t EG91_GetPsNetworkRegistrationStatus(EG91Object_t *Obj); + +EG91_Return_t EG91_ListOperators(EG91Object_t *Obj, char *Operators); +EG91_Return_t EG91_GetCurrentOperator(EG91Object_t *Obj, char *Operator, uint8_t Bufsize); +EG91_Return_t EG91_ForceOperator(EG91Object_t *Obj, int32_t OperatorCode); + +/* ==== AP Connection ==== */ + +EG91_Return_t EG91_ConfigureAP(EG91Object_t *Obj, EG91_APConfig_t *ApConfig); +EG91_Return_t EG91_Activate(EG91Object_t *Obj, uint8_t ContextID); +EG91_Return_t EG91_Deactivate(EG91Object_t *Obj, uint8_t ContextID); +EG91_APState_t EG91_IsActivated(EG91Object_t *Obj, uint8_t ContextID); + +/* ====IP Addr ==== */ + +EG91_Return_t EG91_GetActiveIpAddresses(EG91Object_t *Obj, char *IPaddr_string, uint8_t *IPaddr_int); + +/* ==== Ping ==== */ + +#if (EG91_USE_PING == 1) +EG91_Return_t EG91_Ping(EG91Object_t *Obj, uint8_t ContextID, char *host_addr_string, uint16_t count, uint16_t rep_delay_sec); +#endif + +/* ==== Client connection ==== */ + +EG91_Return_t EG91_DNS_LookUp(EG91Object_t *Obj, uint8_t ContextID, const char *IPaddr_string, uint8_t *IPaddr_int); +EG91_Return_t EG91_OpenClientConnection(EG91Object_t *Obj, uint8_t ContextID, EG91_Conn_t *conn); +EG91_Return_t EG91_CloseClientConnection(EG91Object_t *Obj, EG91_Conn_t *conn); + +EG91_SendRet_t EG91_SendData(EG91Object_t *Obj, uint8_t Socket, uint8_t *pdata, uint16_t Reqlen, uint16_t *SentLen, uint32_t Timeout); +EG91_ReceiveRet_t EG91_ReceiveData(EG91Object_t *Obj, uint8_t Socket, uint8_t *pdata, uint16_t Reqlen, uint16_t *Receivedlen, uint32_t Timeout); + +/* ==== Miscellaneus ==== */ + +EG91_Return_t EG91_ResetToFactoryDefault(EG91Object_t *Obj); +EG91_Return_t EG91_SetUARTBaudrate(EG91Object_t *Obj, EG91_UARTConfig_t *pconf); +EG91_Return_t EG91_GetUARTConfig(EG91Object_t *Obj, EG91_UARTConfig_t *pconf); + +void EG91_GetManufacturer(EG91Object_t *Obj, uint8_t *Manufacturer); +void EG91_GetProductID(EG91Object_t *Obj, uint8_t *ProductID); +void EG91_GetFWRevID(EG91Object_t *Obj, uint8_t *Fw_ver); + +EG91_Return_t EG91_RetrieveLastErrorDetails(EG91Object_t *Obj, char *error_string); + +/* Application must provide callback function that gives a Timer Tick in ms (e.g. HAL_GetTick())*/ +EG91_Return_t EG91_RegisterTickCb(EG91Object_t *Obj, App_GetTickCb_Func GetTickCb); +#ifdef __cplusplus +} +#endif + +#endif // EG91_H \ No newline at end of file diff --git a/Core/Inc/eg91_conf.h b/Core/Inc/eg91_conf.h new file mode 100644 index 0000000..9d88dc1 --- /dev/null +++ b/Core/Inc/eg91_conf.h @@ -0,0 +1,80 @@ +/** + ****************************************************************************** + * @file EG91_conf.h + * @author MCD Application Team + * @brief EG91 configuration file. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2017 STMicroelectronics International N.V. + * All rights reserved.

+ * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted, provided that the following conditions are met: + * + * 1. Redistribution of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific written permission. + * 4. This software, including modifications and/or derivative works of this + * software, must execute solely and exclusively on microcontroller or + * microprocessor devices manufactured by or for STMicroelectronics. + * 5. Redistribution and use of this software other than as permitted under + * this license is void and will automatically terminate your rights under + * this license. + * + * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY + * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT + * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +#ifndef __EG91_CONF_H +#define __EG91_CONF_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* --------------------------------------------------------------------------- */ +/* EG91 static parameter that can be configured by the user before compilation */ +/* --------------------------------------------------------------------------- */ + +/* Max sockets allowed by modem is 12 but beter use max 9 (sw not tested above) */ +#define EG91_MAX_SOCKETS 1 +/* Max context allowed by modem is 20 but beter use max 9 (sw not tested above) */ +#define EG91_MAX_CONTEXTS 1 + +/* 256 is normally sufficient, but if some params like URL are very long string it can be increased*/ +#define EG91_CMD_SIZE 256 + +/* EG91 and STM32 shall have same baudrate to communicate */ +#define EG91_DEFAULT_BAUDRATE 115200 + +/* Rx and Tx buffer size, depend as the applic handles the buffer */ +#define EG91_TX_DATABUF_SIZE 1460 /* mbedTLS needs at least 1460 */ +#define EG91_RX_DATABUF_SIZE 1500 + +/* 0 to disable, 1 to enable PING feature */ +#define EG91_USE_PING 1 + +#ifdef __cplusplus +} +#endif +#endif /* __EG91_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Core/Inc/gpio.h b/Core/Inc/gpio.h new file mode 100644 index 0000000..c758db6 --- /dev/null +++ b/Core/Inc/gpio.h @@ -0,0 +1,52 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file gpio.h + * @brief This file contains all the function prototypes for + * the gpio.c file + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __GPIO_H__ +#define __GPIO_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +void MX_GPIO_Init(void); + +/* USER CODE BEGIN Prototypes */ +void LEDStatus_Active(void); +void LEDStatus_Inactive(void); +void LTE_HardwarePowerUp(void); +void LTE_HardwarePowerDown(void); +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif +#endif /*__ GPIO_H__ */ + diff --git a/Core/Inc/icache.h b/Core/Inc/icache.h new file mode 100644 index 0000000..e686d12 --- /dev/null +++ b/Core/Inc/icache.h @@ -0,0 +1,50 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file icache.h + * @brief This file contains all the function prototypes for + * the icache.c file + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __ICACHE_H__ +#define __ICACHE_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +void MX_ICACHE_Init(void); + +/* USER CODE BEGIN Prototypes */ + +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif /* __ICACHE_H__ */ + diff --git a/Core/Inc/lte_comms.h b/Core/Inc/lte_comms.h new file mode 100644 index 0000000..87da1a2 --- /dev/null +++ b/Core/Inc/lte_comms.h @@ -0,0 +1,132 @@ +#ifndef __LTE_COMMS_H_ +#define __LTE_COMMS_H_ + +#ifdef __cplusplus + extern "C" { +#endif + +#include "eg91.h" +#include "eg91_conf.h" + +#define LTE_COMMS_MAX_DELAY 0xFFFFU + +#define LTE_OPERATOR_STRING 30 +#define LTE_OPERATORS_LIST 6 * LTE_OPERATOR_STRING +#define LTE_IPADDR_STRING 35 +#define LTE_IPADDR_LIST 3 * LTE_IPADDR_STRING +#define LTE_ERROR_STRING 40 + +#define LTE_MAN_SIZE 16 +#define LTE_PROD_ID_SIZE 16 +#define LTE_FW_REV_SIZE 100 +#define LTE_IMEI_SIZE 16 +#define LTE_ICCID_SIZE 20 + +#define LTE_MAX_NOS 100 /* Network Operators */ +#define LTE_MAX_CONNECTION EG91_MAX_SOCKETS +#define LTE_PAYLOAD_SIZE 1500 /* Should be = or > than EG91_RX_DATABUF_SIZE */ + +typedef enum +{ + LTE_IPV4 = 0x01, + LTE_IPV6 = 0x02 +} LTE_IPVer_t; + +typedef enum +{ + LTE_AUTHENT_NONE = 0x00, + LTE_AUTHENT_PAP = 0x01, + LTE_AUTHENT_CHAP = 0x02, + LTE_AUTHENT_PAP_CHAP = 0x03 +} LTE_Authent_t; + +typedef enum +{ + LTE_TCP_PROTOCOL = 0, + LTE_UDP_PROTOCOL = 1, + LTE_TCP_LISTENER_PROTOCOL = 2, + LTE_UDP_SERVICE_PROTOCOL = 3 +} LTE_Protocol_t; + +typedef enum +{ + /* Registration Status */ + LTE_REGISTATUS_NOT_REGISTERED = 0x00, + LTE_REGISTATUS_HOME_NETWORK = 0x01, + LTE_REGISTATUS_TRYING = 0x02, + LTE_REGISTATUS_REG_DENIED = 0x03, + LTE_REGISTATUS_UNKNOWN = 0x04, + LTE_REGISTATUS_ROAMING = 0x05, + LTE_REGISTATUS_SIM_NOT_INSERTED = 0x0A, + LTE_REGISTATUS_SIM_PIN_REQUIRED = 0x0B, + LTE_REGISTATUS_SIM_PUK_REGUIRED = 0x0C, + LTE_REGISTATUS_SIM_FAILURE = 0x0D, + LTE_REGISTATUS_SIM_BUSY = 0x0E, + LTE_REGISTATUS_SIM_WRONG = 0x0F, + LTE_REGISTATUS_INCORRECT_PSW = 0x10, + LTE_REGISTATUS_SIM_PIN2_REQUIRED = 0x11, + LTE_REGISTATUS_SIM_PUK2_REQUIRED = 0x12, + LTE_REGISTATUS_OP_NOT_ALLOWED = 0x13, + LTE_REGISTATUS_ERROR = 0xFF +} LTE_Registatus_t; + +typedef enum +{ + LTE_AP_NOT_CONFIG = 0x00, + LTE_AP_CONFIGURED = 0x01, + LTE_AP_ACTIVATED = 0x02, + LTE_AP_ERROR = 0xFF +} LTE_APState_t; + +typedef enum +{ + LTE_RET_OK = 0x00, + LTE_RET_NOT_SUPPORTED = 0x01, + LTE_RET_ERROR = 0x02 +} LTE_Ret_t; + +typedef enum +{ + LTE_SEND_OK = 0x00, + LTE_SEND_BUF_FULL = 0x01, + LTE_SEND_ERROR = 0xFF +} LTE_SendStatus_t; + +int Network_Init(void); + +void LTE_ConvertIpAddrToString(const uint8_t * ipArray, char *returnStr); +LTE_Registatus_t LTE_Init(uint16_t registration_timeout_sec); +LTE_Ret_t LTE_GetSignalQualityStatus(int32_t *qValue); +LTE_Ret_t LTE_ListOperators(char *operator); +LTE_Ret_t LTE_GetCurrentOperator (char *operator, int32_t bufSize); +LTE_Ret_t LTE_ForceOperator(int32_t code); +LTE_Ret_t LTE_ConfigureAP(uint8_t contextType, const char *apn, const char *username, + const char *password, uint8_t authenticationMode); +LTE_Ret_t LTE_Connect(void); +LTE_Ret_t LTE_Disconnect(void); +LTE_APState_t LTE_isConnected(void); +LTE_Ret_t LTE_GetActiveIpAddress(char * ipAddrStr, uint8_t *ipAddrInt); +LTE_Ret_t LTE_Ping(char *address, uint16_t count, uint16_t timeout); +LTE_Ret_t LTE_GetHostAddress(const char *address, uint8_t *ipaddr); +LTE_Ret_t LTE_StartClientConnection(uint32_t socket, LTE_Protocol_t type, const char *url, + uint8_t *ipaddr, uint16_t port, uint16_t local_port); +LTE_Ret_t LTE_StopClientConnection(uint32_t socket); +LTE_Ret_t LTE_StartServerConnection(uint32_t socket, LTE_Protocol_t type, uint16_t port, uint16_t local_port); +LTE_Ret_t LTE_StopServerConnection(uint32_t socket); +LTE_SendStatus_t LTE_SendData(uint32_t socket, uint8_t *pdata, uint16_t reqLen, uint16_t *sentDataLen, uint32_t timeout); +LTE_Ret_t LTE_ReceiveData(uint32_t socket, uint8_t *pdata, uint16_t reqLen, uint16_t *rcvDataLen, uint32_t timeout); +LTE_Ret_t LTE_RetrieveLastErrorDetails(char *errorStr); +LTE_Ret_t LTE_PowerOff(void); +LTE_Ret_t LTE_GetModuleFirmwareRevision(char *rev); +LTE_Ret_t LTE_GetModuleID(char *productId); +LTE_Ret_t LTE_GetModuleName(char *moduleName); +LTE_Ret_t LTE_GetSimId(char *simId); +LTE_Ret_t LTE_GetIMEI(char *imei); + + + +#ifdef __cplusplus +} +#endif + +#endif /* __LTE_COMMS_H_ */ \ No newline at end of file diff --git a/Core/Inc/main.h b/Core/Inc/main.h new file mode 100644 index 0000000..45dbec6 --- /dev/null +++ b/Core/Inc/main.h @@ -0,0 +1,88 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32wbaxx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ +#undef MIN +#define MIN(a,b) ( ((a)<(b)) ? (a) : (b) ) +#define MAX(a,b) ( ((a)<(b)) ? (b) : (a) ) +#define ROUND_DOWN(a,b) ( ((a) / (b)) * (b) ) +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ +#define LTE_TX_Pin GPIO_PIN_12 +#define LTE_TX_GPIO_Port GPIOB +#define DEBUG_TX_Pin GPIO_PIN_11 +#define DEBUG_TX_GPIO_Port GPIOB +#define LTE_RX_Pin GPIO_PIN_8 +#define LTE_RX_GPIO_Port GPIOA +#define STATUS_LED_Pin GPIO_PIN_7 +#define STATUS_LED_GPIO_Port GPIOB +#define LTE_EN_Pin GPIO_PIN_4 +#define LTE_EN_GPIO_Port GPIOB +#define LTE_RST_Pin GPIO_PIN_0 +#define LTE_RST_GPIO_Port GPIOB +#define LTE_PWRKEY_Pin GPIO_PIN_15 +#define LTE_PWRKEY_GPIO_Port GPIOB +#define DEBUG_RX_Pin GPIO_PIN_10 +#define DEBUG_RX_GPIO_Port GPIOA + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ diff --git a/Core/Inc/rtc.h b/Core/Inc/rtc.h new file mode 100644 index 0000000..2b87ae5 --- /dev/null +++ b/Core/Inc/rtc.h @@ -0,0 +1,52 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file rtc.h + * @brief This file contains all the function prototypes for + * the rtc.c file + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __RTC_H__ +#define __RTC_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +extern RTC_HandleTypeDef hrtc; + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +void MX_RTC_Init(void); + +/* USER CODE BEGIN Prototypes */ + +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif /* __RTC_H__ */ + diff --git a/Core/Inc/stm32wbaxx_hal_conf.h b/Core/Inc/stm32wbaxx_hal_conf.h new file mode 100644 index 0000000..1a73913 --- /dev/null +++ b/Core/Inc/stm32wbaxx_hal_conf.h @@ -0,0 +1,353 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32wbaxx_hal_conf.h + * @author MCD Application Team + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32WBAxx_HAL_CONF_H +#define STM32WBAxx_HAL_CONF_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** + * @brief This is the list of modules to be used in the HAL driver + */ +#define HAL_MODULE_ENABLED +/*#define HAL_ADC_MODULE_ENABLED */ +/*#define HAL_COMP_MODULE_ENABLED */ +/*#define HAL_CRC_MODULE_ENABLED */ +/*#define HAL_CRYP_MODULE_ENABLED */ +/*#define HAL_GTZC_MODULE_ENABLED */ +/*#define HAL_HASH_MODULE_ENABLED */ +#define HAL_HSEM_MODULE_ENABLED +/*#define HAL_I2C_MODULE_ENABLED */ +#define HAL_ICACHE_MODULE_ENABLED +/*#define HAL_IRDA_MODULE_ENABLED */ +/*#define HAL_IWDG_MODULE_ENABLED */ +/*#define HAL_LPTIM_MODULE_ENABLED */ +/*#define HAL_PKA_MODULE_ENABLED */ +/*#define HAL_RAMCFG_MODULE_ENABLED */ +/*#define HAL_RNG_MODULE_ENABLED */ +#define HAL_RTC_MODULE_ENABLED +/*#define HAL_SAI_MODULE_ENABLED */ +/*#define HAL_SMBUS_MODULE_ENABLED */ +/*#define HAL_SMARTCARD_MODULE_ENABLED */ +/*#define HAL_SPI_MODULE_ENABLED */ +/*#define HAL_TIM_MODULE_ENABLED */ +/*#define HAL_TSC_MODULE_ENABLED */ +#define HAL_UART_MODULE_ENABLED +/*#define HAL_USART_MODULE_ENABLED */ +/*#define HAL_WWDG_MODULE_ENABLED */ +#define HAL_EXTI_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_GPIO_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED + +/* ########################## Oscillator Values adaptation ####################*/ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ +#if !defined (HSE_VALUE) +#define HSE_VALUE 32000000UL /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) +#define HSE_STARTUP_TIMEOUT 100UL /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief Internal High Speed oscillator (HSI) value. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSI is used as system clock source, directly or through the PLL). + */ +#if !defined (HSI_VALUE) +#define HSI_VALUE 16000000UL /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) +#define LSI_VALUE 32000UL /*!< LSI Typical Value in Hz*/ +#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz + The real value may vary depending on the variations in voltage + and temperature.*/ + +#if defined (RCC_LSI2_SUPPORT) +#if !defined (LSI2_VALUE) +#define LSI2_VALUE 32000UL /*!< LSI2 Typical Value in Hz*/ +#endif /* LSI2_VALUE */ +#endif + +/** + * @brief External Low Speed oscillator (LSE) value. + * This value is used by the UART, RTC HAL module to compute the system frequency + */ +#if !defined (LSE_VALUE) +#define LSE_VALUE 32768UL /*!< Value of the External oscillator in Hz*/ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) +#define LSE_STARTUP_TIMEOUT 5000UL /*!< Time out for LSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief External clock source for SAI1 peripheral + * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source + * frequency. + */ +#if !defined (EXTERNAL_SAI1_CLOCK_VALUE) +#define EXTERNAL_SAI1_CLOCK_VALUE 48000UL /*!< Value of the SAI1 External clock source in Hz*/ +#endif /* EXTERNAL_SAI1_CLOCK_VALUE */ + +/* Tip: To avoid modifying this file each time you need to use different HSE, + === you can define the HSE value in your toolchain compiler preprocessor. */ + +/* ########################### System Configuration ######################### */ +/** + * @brief This is the HAL system configuration section + */ + +#define VDD_VALUE 3300UL /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY (15UL) /*!< tick interrupt priority (lowest by default) */ +#define USE_RTOS 0U +#define PREFETCH_ENABLE 1U /*!< Enable prefetch */ + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* ################## Register callback feature configuration ############### */ +/** + * @brief Set below the peripheral configuration to "1U" to add the support + * of HAL callback registration/unregistration feature for the HAL + * driver(s). This allows user application to provide specific callback + * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting + * the default weak callback functions (see each stm32wbaxx_hal_ppp.h file + * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef + * for each PPP peripheral). + */ +#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ +#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ +#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ +#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ + +#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ +#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ +#define USE_HAL_IWDG_REGISTER_CALLBACKS 0U /* IWDG register callback disabled */ +#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ + +#define USE_HAL_PKA_REGISTER_CALLBACKS 0U /* PKA register callback disabled */ +#define USE_HAL_RAMCFG_REGISTER_CALLBACKS 0U /* RAMCFG register callback disabled */ +#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ +#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ +#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ +#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ +#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ +#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ +#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ +#define USE_HAL_TSC_REGISTER_CALLBACKS 0U /* TSC register callback disabled */ +#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ +#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ +#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ + +/* ################## SPI peripheral configuration ########################## */ + +/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver + * Activated: CRC code is present inside driver + * Deactivated: CRC code cleaned from driver + */ +#define USE_SPI_CRC 0U + +/* ################## CRYP peripheral configuration ########################## */ + +#define USE_HAL_CRYP_SUSPEND_RESUME 0U + +/* ################## HASH peripheral configuration ########################## */ + +#define USE_HAL_HASH_SUSPEND_RESUME 0U + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#ifdef HAL_DMA_MODULE_ENABLED +#include "stm32wbaxx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED +#include "stm32wbaxx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_COMP_MODULE_ENABLED +#include "stm32wbaxx_hal_comp.h" +#endif /* HAL_COMP_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED +#include "stm32wbaxx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED +#include "stm32wbaxx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED +#include "stm32wbaxx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED +#include "stm32wbaxx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED +#include "stm32wbaxx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED +#include "stm32wbaxx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_GTZC_MODULE_ENABLED +#include "stm32wbaxx_hal_gtzc.h" +#endif /* HAL_GTZC_MODULE_ENABLED */ + +#ifdef HAL_HASH_MODULE_ENABLED +#include "stm32wbaxx_hal_hash.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_HSEM_MODULE_ENABLED +#include "stm32wbaxx_hal_hsem.h" +#endif /* HAL_HSEM_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED +#include "stm32wbaxx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_ICACHE_MODULE_ENABLED +#include "stm32wbaxx_hal_icache.h" +#endif /* HAL_ICACHE_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED +#include "stm32wbaxx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED +#include "stm32wbaxx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED +#include "stm32wbaxx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_PKA_MODULE_ENABLED +#include "stm32wbaxx_hal_pka.h" +#endif /* HAL_PKA_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED +#include "stm32wbaxx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RAMCFG_MODULE_ENABLED +#include "stm32wbaxx_hal_ramcfg.h" +#endif /* HAL_RAMCFG_MODULE_ENABLED */ + +#ifdef HAL_RCC_MODULE_ENABLED +#include "stm32wbaxx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED +#include "stm32wbaxx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED +#include "stm32wbaxx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SAI_MODULE_ENABLED +#include "stm32wbaxx_hal_sai.h" +#endif /* HAL_SAI_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED +#include "stm32wbaxx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED +#include "stm32wbaxx_hal_smbus.h" +#endif /* HAL_SMBUS_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED +#include "stm32wbaxx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED +#include "stm32wbaxx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_TSC_MODULE_ENABLED +#include "stm32wbaxx_hal_tsc.h" +#endif /* HAL_TSC_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED +#include "stm32wbaxx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED +#include "stm32wbaxx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED +#include "stm32wbaxx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ +#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ +void assert_failed(uint8_t *file, uint32_t line); +#else +#define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32WBAxx_HAL_CONF_H */ + diff --git a/Core/Inc/stm32wbaxx_it.h b/Core/Inc/stm32wbaxx_it.h new file mode 100644 index 0000000..5484f41 --- /dev/null +++ b/Core/Inc/stm32wbaxx_it.h @@ -0,0 +1,68 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32wbaxx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32WBAxx_IT_H +#define __STM32WBAxx_IT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +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 USART1_IRQHandler(void); +void HSEM_IRQHandler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32WBAxx_IT_H */ diff --git a/Core/Inc/usart.h b/Core/Inc/usart.h new file mode 100644 index 0000000..db698cf --- /dev/null +++ b/Core/Inc/usart.h @@ -0,0 +1,115 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file usart.h + * @brief This file contains all the function prototypes for + * the usart.c file + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USART_H__ +#define __USART_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* USER CODE BEGIN Includes */ +#include +#include +#include +/* USER CODE END Includes */ + +extern UART_HandleTypeDef hlpuart1; + +extern UART_HandleTypeDef huart1; + +/* USER CODE BEGIN Private defines */ + +// #define LOG_APP_DEBUG +#define LOG_APP_ERROR +#define LOG_APP_LOG +#define LOG_APP_LTE + +/** + * @brief Application general debug messages + * + * Enable by defining `LOG_APP_DEBUG` in config.h. + */ +#ifdef LOG_APP_DEBUG +# define APP_DEBUG_MSG(a, ...) printf(("DEBUG: " a), ##__VA_ARGS__) +#else +# define APP_DEBUG_MSG(...) ((void)0) +#endif + +/** + * @brief Application error messages + * + * Enable by defining `LOG_APP_ERROR` in config.h. + */ +#ifdef LOG_APP_ERROR +# define APP_ERROR_MSG(a, ...) printf(("ERROR: "a), ##__VA_ARGS__) +#else +# define APP_ERROR_MSG(...) ((void)0) +#endif + +/** + * @brief Application logging messages + * + * Enable by defining `LOG_APP_LOG` in config.h. + */ +#ifdef LOG_APP_LOG +# define APP_LOG_MSG(a, ...) printf((a), ##__VA_ARGS__) +#else +# define APP_LOG_MSG(...) ((void)0) +#endif + +/** + * @brief Application logging lte messages + * + * Enable by defining `LOG_APP_LTE` in config.h. + */ +#ifdef LOG_APP_LTE +# define APP_LTE_MSG(a, ...) printf(("AT RSP:" a), ##__VA_ARGS__) +#else +# define APP_LTE_MSG(...) ((void)0) +#endif + +/* USER CODE END Private defines */ + +void MX_LPUART1_UART_Init(void); +void MX_USART1_UART_Init(void); + +/* USER CODE BEGIN Prototypes */ +void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle); + +void LTE_ATSendCommand(const char *cmd); +void LTE_SendATCommand_Test(void); + +int8_t LTE_UART_SetBaudrate(uint32_t baudrate); +void LTE_UART_FlushBuffer(void); +int16_t LTE_UART_SendData(uint8_t *pData, uint16_t length); +int16_t LTE_UART_ReceiveSingleData(uint8_t *pSingleData); + +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif /* __USART_H__ */ + diff --git a/Core/Src/eg91.c b/Core/Src/eg91.c new file mode 100644 index 0000000..dae94f9 --- /dev/null +++ b/Core/Src/eg91.c @@ -0,0 +1,1801 @@ +/** + ****************************************************************************** + * @file EG91.c + * @author MCD Application Team + * @version V0.0.1 + * @date 11-08-2017 + * @brief Functions to manage the EG91 module (C2C cellular modem). + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2017 STMicroelectronics International N.V. + * All rights reserved.

+ * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted, provided that the following conditions are met: + * + * 1. Redistribution of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific written permission. + * 4. This software, including modifications and/or derivative works of this + * software, must execute solely and exclusively on microcontroller or + * microprocessor devices manufactured by or for STMicroelectronics. + * 5. Redistribution and use of this software other than as permitted under + * this license is void and will automatically terminate your rights under + * this license. + * + * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY + * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT + * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* Includes ------------------------------------------------------------------*/ + +#include "eg91.h" +#include "main.h" + +#define CHARISHEXNUM(x) (((x) >= '0' && (x) <= '9') || \ + ((x) >= 'a' && (x) <= 'f') || \ + ((x) >= 'A' && (x) <= 'F')) + +#define CHARISNUM(x) ((x) >= '0' && (x) <= '9') +#define CHAR2NUM(x) ((x) - '0') + +#define CTRL_Z 26 + +/* Private variable ---------------------------------------------------------*/ +char CmdString[EG91_CMD_SIZE]; + +/* Exported variable ---------------------------------------------------------*/ + +/* This should be reworked, _IO should not depend on component */ +const EG91_RetKeywords_t ReturnKeywords[] = +{ +/* send receive related keywords */ +{ RET_SENT, "OK\r\n" }, +{ RET_ARROW, ">" }, +{ RET_READ, "CIPRXGET" }, +{ RET_SEND, "CIPSEND" }, +{ RET_POWERED_DOWN, "POWERED DOWN\r\n" }, +{ RET_UART_READY, "RDY\r\n"}, +{ RET_URC_CLOSED, "closed\"" }, +{ RET_URC_RECV, "CIPRXGET:SUCCESS" }, +{ RET_URC_IN_FULL, "incoming full\"" }, +{ RET_URC_INCOM, "incoming\"" }, +{ RET_URC_PDPDEACT, "pdpdeact\"" }, +{ RET_URC_DNS, "+MDNSGIP:" }, +/* errors keywords */ +{ RET_ERROR, "ERROR\r\n" }, +{ RET_CME_ERROR, "CME ERROR:" }, +//{ RET_CMS_ERROR, "CMS ERROR:" }, +{ RET_BUF_FULL, "ERROR\r\n" }, +/* set-up keywords */ +{ RET_OK, "OK\r\n" }, +{ RET_OPEN, "OPEN:" }, +{ RET_SIM_READY, "ready\r\n" }, +{ RET_RESP, "\r\n\r\nOK" }, +{ RET_NETCLOSE, "\r\n\r\n" }, +{ RET_CRLF, "\r\n" }, /* keep RET_CRLF last !!! */ +}; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Parses and returns number from string. + * @param ptr: pointer to string + * @param cnt: pointer to the number of parsed digit + * @retval integer value. + */ +static int32_t ParseNumber(char *ptr, uint8_t *cnt) +{ + uint8_t minus = 0, i = 0; + int32_t sum = 0; + + if (*ptr == '-') + { /* Check for minus character */ + minus = 1; + ptr++; + i++; + } + while (CHARISNUM(*ptr)) + { /* Parse number */ + sum = 10 * sum + CHAR2NUM(*ptr); + ptr++; + i++; + } + if (cnt != NULL) + { /* Save number of characters used for number */ + *cnt = i; + } + if (minus) + { /* Minus detected */ + return 0 - sum; + } + return sum; /* Return number */ +} + +/** + * @brief Parses and returns QIRQ query response. + * @param ptr: pointer to string + * @param arr: pointer to IP array + * @retval None. + */ +static void ParseQIRD(char *ptr, uint16_t *arr) +{ + uint8_t hexnum = 0, hexcnt; + + while (*ptr) + { + hexcnt = 1; + if (*ptr != ',') + { + arr[hexnum++] = (uint16_t) ParseNumber(ptr, &hexcnt); + } + ptr = ptr + hexcnt; + if ((*ptr == '\r') || (hexnum == 3)) + { + return; + } + } +} + +/** + * @brief Parses and returns . + * @param ptr: pointer to string + * @retval The number of unread data in modem TX buffer. + */ +//static void ParseQISEND(char *ptr, uint32_t *unackedbytes) +//{ +// uint8_t hexnum = 0, hexcnt; +// uint32_t temp = 0; +// +// /* QISEND Response contains 3 kind of information +// * ,, +// * we're only interested to the 3rd one, unackedbytes for now */ +// while (*ptr) +// { +// hexcnt = 1; +// if (*ptr != ',') +// { +// temp = (uint32_t) ParseNumber(ptr, &hexcnt); +// /* Count up the number we've retrieved */ +// hexnum++; +// if (hexnum == 3) +// { +// *unackedbytes = temp; +// } +// } +// ptr = ptr + hexcnt; +// if ((*ptr == '\r') || (hexnum == 3)) +// { +// return; +// } +// } +//} + +/** + * @brief Parses and returns IP address. + * @param ptr: pointer to string + * @param arr: pointer to IP array + * @retval None. + */ +static void ParseIP(char *ptr, uint8_t *arr) +{ + uint8_t hexnum = 0, hexcnt; + + while (*ptr) + { + hexcnt = 1; + if (*ptr != '.') + { + arr[hexnum++] = ParseNumber(ptr, &hexcnt); + } + ptr = ptr + hexcnt; + if (*ptr == '"') + { + return; + } + } +} + +/** + * @brief Return the integer difference between 'init + timeout' and 'now'. + * The implementation is robust to uint32_t overflows. + * @param In: init Reference index. + * @param In: now Current index. + * @param In: timeout Target index. + * @retval Number of ms from now to target (init + timeout). + */ +static int32_t TimeLeftFromExpiration(uint32_t init, uint32_t now, + uint32_t timeout) +{ + int32_t ret = 0; + uint32_t wrap_end = 0; + + if (now < init) + { /* Timer wrap-around detected */ + wrap_end = UINT32_MAX - init; + } + ret = wrap_end - (now - init) + timeout; + + return ret; +} + +/** + * @brief Retrieve Data from the C2C module over the UART interface. + * This function receives data from the C2C module, the + * data is fetched from a ring buffer that is asynchronously and continuously + filled with the received data. + * @param Obj: pointer to module handle + * @param pData: a buffer inside which the data will be read. + * @param Length: Size of the data to receive. + * @param ScanVals: when param Length = 0 : values to be retrieved in the coming data in order to exit. + * @retval int32_t: if param Length = 0 : the actual RET_CODE found, + if param Length > 0 : the actual data size that has been received + if error (timeout): return -1 (EG91_RETURN_RETRIEVE_ERROR). + */ +static int32_t AT_RetrieveData(EG91Object_t *Obj, uint8_t *pData, + uint16_t Length, uint32_t ScanVals, uint32_t Timeout) +{ + uint32_t tickstart = Obj->GetTickCb(); + int16_t ReadData = 0; + uint16_t x; + uint16_t index[NUM_RESPONSES]; + uint16_t lens[NUM_RESPONSES]; + uint16_t pos; + uint8_t c; + int32_t min_requested_time; + + min_requested_time = 2 * (Length + 15) * 8 * 1000 / EG91_DEFAULT_BAUDRATE; /* 15 is the max length of the return keyword */ + if (Timeout < min_requested_time) /* UART speed 115200 bits per sec */ + { + Timeout = min_requested_time; + } + + for (x = 0; x < NUM_RESPONSES; x++) + { + index[x] = 0; + lens[x] = strlen(ReturnKeywords[x].retStr); + } + + if ((Length == 0) && (ScanVals == RET_NONE)) + { + return 0; /* to avoid waiting a RET_VAL in case the parsed_lenth of payload is zero */ + /* but no code needs to be retrieved */ + } + + memset(Obj->CmdResp, 0, EG91_CMD_SIZE); + + while (TimeLeftFromExpiration(tickstart, Obj->GetTickCb(), Timeout) > 0) + { + if (Obj->fops.IO_ReceiveOne(&c) == 0) /* Receive one sample from UART */ + { + /* serial data available, so return data to user */ + pData[ReadData++] = c; + + if (Length == 0) + { + /* Check whether we hit an ESP return values */ + for (x = 0; x < NUM_RESPONSES; x++) + { + if (c != ReturnKeywords[x].retStr[index[x]]) + { + index[x] = 0; + } + + if (c == ReturnKeywords[x].retStr[index[x]]) + { + pos = ++(index[x]); + if (pos >= lens[x]) + { + if (ScanVals & ReturnKeywords[x].retVal) + { + return ReturnKeywords[x].retVal; + } + } + } + } + } + else /* end (Length > 0) */ + { + if (ReadData < Length) + { + /* nothing to do except keep reading in the while loop */ + } + else /* ReadData >= Length */ + { + return ReadData; + } + } /* end (Length == 0) */ + } + } + + if ((Length > 0) && (ReadData > 0)) + { + return ReadData; + } + return EG91_RETURN_RETRIEVE_ERROR; +} + +/** + * @brief Execute AT command. + * @param Obj: pointer to module handle + * @param cmd: pointer to command string + * @param resp: expected response + * @retval Operation Status: OK or ERROR. + */ +static int32_t AT_ExecuteCommand(EG91Object_t *Obj, uint32_t timeout, + uint8_t *cmd, uint32_t resp) +{ + int32_t ret = EG91_RETURN_SEND_ERROR; + + if (timeout == 0) + { + timeout = EG91_TOUT_300; + } +#ifdef EG91_DBG_AT //alecks + printf("AT Request: %s \n", cmd); +#endif + if (Obj->fops.IO_Send(cmd, strlen((char*) cmd)) >= 0) + { + HAL_Delay(200); //return to 200 + ret = (AT_RetrieveData(Obj, Obj->CmdResp, 0, resp, timeout)); + if (ret < 0) + { +#ifdef EG91_DBG + printf("EG91 AT_ExecuteCommand() rcv TIMEOUT ret=%ld: %s \r\n", ret, cmd); +#endif + } +#ifdef EG91_DBG_AT + else + { + printf("AT Response: %s \n", Obj->CmdResp); + } +#endif + } + else + { +#ifdef EG91_DBG + printf("EG91 AT_ExecuteCommand() send ERROR: %s \r\n", cmd); +#endif + } + return ret; +} + +/** + * @brief Execute AT command with data. + * @param Obj: pointer to module handle + * @param pdata: pointer to returned data + * @param len: binary data length + * @param timeout: waiting that the modem confirms confirm that send command has been executed (SEND OK) + * @retval Operation Status. + */ +static EG91_SendRet_t AT_RequestSendData(EG91Object_t *Obj, uint8_t *pdata, + uint16_t len, uint32_t timeout) +{ + int32_t confirm; + + if (Obj->fops.IO_Send(pdata, len) >= 0) + { + confirm = AT_RetrieveData(Obj, Obj->CmdResp, 0, + (RET_SENT | RET_BUF_FULL | RET_ERROR), timeout); + return (EG91_SendRet_t) confirm; + } + return EG91_SEND_RET_UART_FAIL; /* UART error to transmit */ +} + +/** + * @brief Retrieve URC header and decode it + * @param Obj: pointer to module handle + * @param Timeout : ms + * @param ParseLength : pointer to return the length parsed from URC info + * @param AccMode : currently only EG91_BUFFER_MODE is used and tested + * @retval Operation Status. + */ +static int32_t AT_RetrieveUrc(EG91Object_t *Obj, uint32_t Timeout, + uint16_t *ParseLength, EG91_AccessMode_t AccMode) +{ + int32_t check_resp, ret; + uint32_t expected_resp; + uint8_t parse_ret; + uint8_t parse_count, ip_count; + uint32_t count = 0; + + expected_resp = RET_URC_CLOSED | RET_URC_RECV | RET_URC_IN_FULL + | RET_URC_INCOM | RET_URC_PDPDEACT | RET_URC_DNS; + check_resp = AT_RetrieveData(Obj, Obj->CmdResp, 0, expected_resp, Timeout); + switch (check_resp) + { + case RET_URC_CLOSED: + AT_RetrieveData(Obj, Obj->CmdResp, 0, RET_CRLF, EG91_TOUT_SHORT); + parse_ret = ParseNumber((char*) Obj->CmdResp + 1, &parse_count); + break; + case RET_URC_RECV: + /* retrieve contextID */ + ret = AT_RetrieveData(Obj, Obj->CmdResp, 3, RET_NONE, EG91_TOUT_SHORT); + if (ret > 0) + { + parse_ret = ParseNumber((char*) Obj->CmdResp + 1, &parse_count); + if (parse_count == 2) + { /* read next comma */ + AT_RetrieveData(Obj, Obj->CmdResp, 1, RET_NONE, EG91_TOUT_SHORT); + } + } + if (AccMode == EG91_BUFFER_MODE) + { + AT_RetrieveData(Obj, Obj->CmdResp, 1, RET_NONE, EG91_TOUT_SHORT); + } + else + { + for (; count < 6; count++) + { + if (ret < 0) + { + break; + } + ret = AT_RetrieveData(Obj, &Obj->CmdResp[count], 1, RET_NONE,EG91_TOUT_SHORT); + if (ret == 1) + { + if (Obj->CmdResp[count] == '\n') + { + *ParseLength = (uint16_t) ParseNumber((char*) Obj->CmdResp, &parse_count); + break; + } + } + } + } + break; + + case RET_URC_IN_FULL: + /* nothing to be done */ + break; + + case RET_URC_INCOM: + /* TBD: to be implemented for SERVER MODE*/ + break; + + case RET_URC_PDPDEACT: + AT_RetrieveData(Obj, Obj->CmdResp, 0, RET_CRLF, EG91_TOUT_SHORT); + parse_ret = ParseNumber((char*) Obj->CmdResp + 1, &parse_count); + break; + + case RET_URC_DNS: + AT_RetrieveData(Obj, Obj->CmdResp, 0, RET_CRLF, Timeout); + parse_ret = ParseNumber((char*) Obj->CmdResp + 1, &parse_count); + if (parse_ret == 0) /* means no errors */ + { + ip_count = ParseNumber((char*) Obj->CmdResp + 3, &parse_count); + for (count = 0; count < ip_count; count++) + { + expected_resp = RET_URC_DNS; + check_resp = AT_RetrieveData(Obj, Obj->CmdResp, 0, + expected_resp, Timeout); + AT_RetrieveData(Obj, Obj->CmdResp, 0, RET_CRLF, Timeout); + } + } + else + { + check_resp = -1; + } + break; + + default: + check_resp = -1; + break; + } + + return check_resp; +} + +/** + * @brief Synchronize the modem uart with the STM32 uart (autobauding) + * @param Obj: pointer to module handle + * @retval Operation status. + */ +static int32_t AT_Synchro(EG91Object_t *Obj) +{ + int32_t ret = RET_ERROR; + int8_t atSync = 0; + uint32_t tickstart; + + /* Init tickstart for timeout management */ + tickstart = Obj->GetTickCb(); + + /* Start AT SYNC: Send AT every 500ms, + if receive OK, SYNC success, + if no OK return after sending AT 10 times, SYNC fail */ + do + { + if (TimeLeftFromExpiration(tickstart, Obj->GetTickCb(), EG91_TOUT_ATSYNC) < 0) + { + ret = AT_ExecuteCommand(Obj, EG91_TOUT_100, (uint8_t*) "AT\r\n", RET_OK | RET_ERROR); + atSync++; + tickstart = Obj->GetTickCb(); + } + } while ((atSync < 10) && (ret != RET_OK)); + + return ret; +} + +/* --------------------------------------------------------------------------*/ +/* --- Public functions -----------------------------------------------------*/ +/* --------------------------------------------------------------------------*/ + +/** + * @brief Register EG91 BusIO external functions. + * @param Obj: pointer to module handle + * @retval Operation Status. + */ +EG91_Return_t EG91_RegisterBusIO(EG91Object_t *Obj, IO_Init_Func IO_Init, + IO_DeInit_Func IO_DeInit, IO_Baudrate_Func IO_Baudrate, + IO_Send_Func IO_Send, IO_ReceiveOne_Func IO_ReceiveOne, + IO_Flush_Func IO_Flush) +{ + if (!Obj || !IO_Init || !IO_DeInit || !IO_Baudrate || !IO_Send + || !IO_ReceiveOne || !IO_Flush) + { + return EG91_RETURN_ERROR; + } + + Obj->fops.IO_Init = IO_Init; + Obj->fops.IO_DeInit = IO_DeInit; + Obj->fops.IO_Baudrate = IO_Baudrate; + Obj->fops.IO_Send = IO_Send; + Obj->fops.IO_ReceiveOne = IO_ReceiveOne; + Obj->fops.IO_FlushBuffer = IO_Flush; + + return EG91_RETURN_OK; +} + +/** + * @brief Shut down the module. + * @retval Operation Status. + */ +EG91_Return_t EG91_PowerDown(EG91Object_t *Obj) +{ + EG91_Return_t ret = EG91_RETURN_ERROR; + + if ( RET_OK == (EG91_Return_t) AT_ExecuteCommand(Obj, EG91_TOUT_300, (uint8_t*) "AT+POWEROFF\r\n", + RET_OK | RET_ERROR | RET_CME_ERROR)) + { +// printf("Please wait, disconnecting and saving data. It may last until 60 s\n"); + /* expect for the "POWERED DOWN" */ + /* The maximum time for network log-off is 60 seconds */ + if (AT_RetrieveData(Obj, Obj->CmdResp, 0, RET_POWERED_DOWN, EG91_TOUT_60000) > 0) + { + printf("Modem is entered in power down\n"); + ret = EG91_RETURN_OK; + } + } + return ret; +} + +/** + * @brief Initialize EG91 module. + * @param Obj: pointer to module handle + * @retval Operation Status. + */ +EG91_InitRet_t EG91_Init(EG91Object_t *Obj) +{ + EG91_InitRet_t fret = EG91_INIT_OTHER_ERR; + int32_t ret = RET_ERROR; + int8_t i; + char *align_ptr, *token; + uint8_t parse_count; + uint32_t tickstart; + + Obj->APsActive = 0; + for (i = 0; i < EG91_MAX_SOCKETS; i++) + { + Obj->SocketInfo[i].Type = EG91_TCP_CONNECTION; + Obj->SocketInfo[i].AccessMode = EG91_BUFFER_MODE; + Obj->SocketInfo[i].ComulatedQirdData = 0; + Obj->SocketInfo[i].HaveReadLength = 0; + Obj->SocketInfo[i].UnreadLength = 0; + } + + Obj->fops.IO_FlushBuffer(); /* Flush Uart intermediate buffer */ + + if (Obj->fops.IO_Init() == 0) /* configure and initialize UART */ + { + ret = AT_Synchro(Obj); + + if (ret != RET_OK) + { + printf("Fail to AT SYNC, after several attempts\r\n"); + fret = EG91_INIT_RET_AT_ERR; /* if does not respond to AT command set specific return status */ + } + else + { + /* Retrieve Quectel Factory Default values */ + ret = EG91_ResetToFactoryDefault(Obj); + + /* Retrieve Quectel UART baud rate and flow control*/ + /* If not aligned to the UART of MCU (_io.h), already previous AT command will fail */ + ret = ret | EG91_GetUARTConfig(Obj, &Obj->UART_Config); + /* Use ATV1 to set the response format */ + ret = ret | AT_ExecuteCommand(Obj, EG91_TOUT_SHORT, (uint8_t*) "ATV1\r\n", RET_OK | RET_ERROR); + /* Use ATE1 to enable or ATE0 to disable echo mode */ + ret = ret | AT_ExecuteCommand(Obj, EG91_TOUT_SHORT, (uint8_t*) "ATE0\r\n", RET_OK | RET_ERROR); + /* Use AT+CMEE=1 to enable result code and use "integer" values */ + ret = ret | AT_ExecuteCommand(Obj, EG91_TOUT_300, (uint8_t*) "AT+CMEE=1\r\n", RET_OK | RET_ERROR); + } + + /* retrieve module info */ + if (ret == RET_OK) + { + ret = AT_ExecuteCommand(Obj, EG91_TOUT_SHORT, (uint8_t*) "AT+CGMI\r\n", RET_OK | RET_ERROR); + if (ret == RET_OK) + { + align_ptr = strtok((char *)Obj->CmdResp, "\r\n"); + strncpy((char*) Obj->Manufacturer, align_ptr, EG91_MFC_SIZE); + } + + ret = AT_ExecuteCommand(Obj, EG91_TOUT_SHORT, (uint8_t*) "AT+CGMM\r\n", RET_OK | RET_ERROR); + if (ret == RET_OK) + { + align_ptr = strtok((char *)Obj->CmdResp, "\r\n"); + strncpy((char*) Obj->ProductID, align_ptr, EG91_PROD_ID_SIZE); + } + + ret = AT_ExecuteCommand(Obj, EG91_TOUT_SHORT, (uint8_t*) "AT+CGMR\r\n", RET_OK | RET_ERROR); + if (ret == RET_OK) + { + align_ptr = strtok((char *)Obj->CmdResp, "\r\n"); + strncpy((char*) Obj->FW_Rev, align_ptr, EG91_FW_REV_SIZE); + } + + /* Use AT+GSN to query the IMEI (International Mobile Equipment Identity) of module */ + ret = AT_ExecuteCommand(Obj, EG91_TOUT_300, (uint8_t*) "AT+CGSN\r\n", RET_OK | RET_ERROR); + if (ret == RET_OK) + { + align_ptr = strtok((char *)Obj->CmdResp, "\r\n"); + strncpy((char*) Obj->Imei, align_ptr, EG91_IMEI_SIZE); + } + } + + /* retrieve SIM info */ + if (ret == RET_OK) + { + + /* A tempo is required to get the SIM ready. Set to 2000 ms */ + tickstart = Obj->GetTickCb(); + while ((Obj->GetTickCb() - tickstart) < 2000) + { + } + + ret = AT_ExecuteCommand(Obj, EG91_TOUT_5000, (uint8_t*) "AT+CPIN?\r\n", RET_OK | RET_ERROR | RET_CME_ERROR); + + if (RET_OK == ret) + { + align_ptr = strstr((char*) Obj->CmdResp, "+CPIN: READY"); + if ( NULL != align_ptr) + { + Obj->SimInfo.SimStatus = EG91_SIM_READY; + + if (RET_OK == AT_ExecuteCommand(Obj, EG91_TOUT_300, (uint8_t*) "AT+CIMI\r\n", RET_OK | RET_ERROR | RET_CME_ERROR)) + { + align_ptr = strtok((char *)Obj->CmdResp, "\r\n"); + strncpy((char*) Obj->SimInfo.IMSI, align_ptr, EG91_IMSI_SIZE); + } + + if (RET_OK == AT_ExecuteCommand(Obj, EG91_TOUT_300, (uint8_t*) "AT+ICCID\r\n", RET_OK | RET_ERROR)) + { + align_ptr = strtok((char *)Obj->CmdResp, "\r\n"); + token = strchr(align_ptr, ':'); + + if (token != NULL) + { + token++; + while(*token == ' ') + { + token++; + } + } + strncpy((char*) Obj->SimInfo.ICCID, token, EG91_ICCID_SIZE); + } + + fret = EG91_INIT_RET_OK; + } + } + else + { + if (RET_CME_ERROR == ret) + { + AT_RetrieveData(Obj, Obj->CmdResp, 0, RET_CRLF, EG91_TOUT_SHORT); + Obj->SimInfo.SimStatus = (EG91_SIMState_t) ParseNumber( (char*) Obj->CmdResp + 1, &parse_count); + fret = EG91_INIT_RET_SIM_ERR; + } + } + } + + /* Set the radio ON with the full functionality in the modem */ + ret = AT_ExecuteCommand(Obj, EG91_TOUT_15000, (uint8_t*) "AT+CFUN=1\r\n", RET_OK | RET_ERROR | RET_CME_ERROR); + if (RET_OK != ret) + { + fret = EG91_INIT_OTHER_ERR; + } + + for (int i = 0; i < 30; i++) + { + HAL_Delay(30); + } + /* Set the modem to GSM and LTE enable */ +// ret = AT_ExecuteCommand(Obj, EG91_TOUT_15000, (uint8_t*) "AT+CNMP=4\r\n", RET_OK | RET_ERROR | RET_CME_ERROR); +// if (RET_OK != ret) +// { +// fret = EG91_INIT_OTHER_ERR; +// } + } + else + { + fret = EG91_INIT_RET_IO_ERR; + } + + return fret; +} + +/** + * @brief Get Signal Quality value + * @param Obj: pointer to module handle + * @retval Operation status. + */ +EG91_Return_t EG91_GetSignalQualityStatus(EG91Object_t *Obj, int32_t *Qvalue) +{ + EG91_Return_t ret = EG91_RETURN_ERROR; + uint8_t parse_count; + char *align_ptr; + + ret = (EG91_Return_t) AT_ExecuteCommand(Obj, EG91_TOUT_300, + (uint8_t*) "AT+CSQ\r\n", + RET_OK | RET_ERROR | RET_CME_ERROR); + if (RET_OK == ret) + { + align_ptr = strstr((char*) Obj->CmdResp, "+CSQ:") + sizeof("+CSQ:"); + *Qvalue = ParseNumber(align_ptr, &parse_count); + } + return ret; +} + +/** + * @brief Attach the MT to the packet domain service + * @param Obj: pointer to module handle + * @retval Operation status. + */ +EG91_Return_t EG91_PSAttach(EG91Object_t *Obj) +{ + EG91_Return_t ret = EG91_RETURN_ERROR; + + if (Obj->SimInfo.SimStatus == EG91_SIM_READY) + { + if (RET_OK != AT_ExecuteCommand(Obj, EG91_TOUT_75000, (uint8_t*) "AT+CGATT=1\r\n", RET_OK | RET_ERROR | RET_CME_ERROR)) + { + AT_RetrieveData(Obj, Obj->CmdResp, 0, RET_CRLF, EG91_TOUT_SHORT); + ret = EG91_RETURN_ERROR; + } + else + { + ret = EG91_RETURN_OK; + } + } + return ret; +} + +/** + * @brief Force an automatic PLMN selection + * @param Obj: pointer to module handle + * @retval Operation status. + */ +EG91_Return_t EG91_AutomaticPlmnSelection(EG91Object_t *Obj) +{ + EG91_Return_t ret; + + if (RET_OK != AT_ExecuteCommand(Obj, EG91_TOUT_180000, (uint8_t*) "AT+COPS=0\r\n", RET_OK | RET_ERROR | RET_CME_ERROR)) + { + AT_RetrieveData(Obj, Obj->CmdResp, 0, RET_CRLF, EG91_TOUT_SHORT); + ret = EG91_RETURN_ERROR; + } + else + { + ret = EG91_RETURN_OK; + } + return ret; +} + +EG91_Return_t EG91_SetFullFunctionality(EG91Object_t *Obj) +{ + EG91_Return_t ret; + + if (RET_OK != AT_ExecuteCommand(Obj, EG91_TOUT_15000, (uint8_t*) "AT+CFUN=1\r\n", RET_OK | RET_ERROR | RET_CME_ERROR)) + { + AT_RetrieveData(Obj, Obj->CmdResp, 0, RET_CRLF, EG91_TOUT_SHORT); + ret = EG91_RETURN_ERROR; + } + else + { + ret = EG91_RETURN_OK; + } + return ret; +} + +EG91_Return_t EG91_SetGSMLTE(EG91Object_t *Obj) +{ + EG91_Return_t ret; + + if (RET_OK != AT_ExecuteCommand(Obj, EG91_TOUT_15000, (uint8_t*) "AT+CNMP=4\r\n", RET_OK | RET_ERROR | RET_CME_ERROR)) + { + AT_RetrieveData(Obj, Obj->CmdResp, 0, RET_CRLF, EG91_TOUT_SHORT); + ret = EG91_RETURN_ERROR; + } + else + { + ret = EG91_RETURN_OK; + } + return ret; +} + +/** + * @brief Get Circuit Switch Registration Status + * @param Obj: pointer to module handle + * @retval Registration Status. + */ +EG91_NetworkRegistrationState_t EG91_GetCsNetworkRegistrationStatus(EG91Object_t *Obj) +{ + int8_t received_string[3]; + int16_t val; + EG91_NetworkRegistrationState_t ret = EG91_NRS_ERROR; + char *align_ptr; + char *creg_ptr; + + if (Obj->SimInfo.SimStatus == EG91_SIM_READY) + { + if (RET_OK == AT_ExecuteCommand(Obj, EG91_TOUT_300, (uint8_t*) "AT+CEREG?\r\n", RET_OK | RET_ERROR | RET_CME_ERROR)) + { + creg_ptr = strstr((char*) Obj->CmdResp, "+CEREG:"); + + /* +CREG: is in the response*/ + if (NULL != creg_ptr) + { + /* search for is in the response */ + align_ptr = creg_ptr + sizeof("+CEREG:"); + strncpy((char*) received_string, align_ptr + 2, 1); + strncpy((char*) received_string + 1, "\r\n", 2); + val = atoi((char*) received_string); + ret = (EG91_NetworkRegistrationState_t) val; + } + } + } + return ret; +} + +/** + * @brief Get Packet Switch Registration Status + * @param Obj: pointer to module handle + * @retval Registration Status. + */ +EG91_NetworkRegistrationState_t EG91_GetPsNetworkRegistrationStatus(EG91Object_t *Obj) +{ + int8_t received_string[3]; + int16_t val; + EG91_NetworkRegistrationState_t ret = EG91_NRS_ERROR; + char *align_ptr; + char *cgreg_ptr; + + if (Obj->SimInfo.SimStatus == EG91_SIM_READY) + { + if (RET_OK == AT_ExecuteCommand(Obj, EG91_TOUT_300, (uint8_t*) "AT+CREG?\r\n", RET_OK | RET_ERROR | RET_CME_ERROR)) + { + cgreg_ptr = strstr((char*) Obj->CmdResp, "+CREG:"); + + /* +CGREG: is in the response*/ + if (NULL != cgreg_ptr) + { + align_ptr = cgreg_ptr + sizeof("+CREG:"); + strncpy((char*) received_string, align_ptr + 2, 1); + strncpy((char*) received_string + 1, "\r\n", 2); + val = atoi((char*) received_string); + ret = (EG91_NetworkRegistrationState_t) val; + } + } + } + return ret; +} + +/** + * @brief Get the list of Network Operator available in the area + * @param Obj: pointer to module handle + * @param Operator: pointer to a string + * @retval Operation Status. + */ +EG91_Return_t EG91_ListOperators(EG91Object_t *Obj, char *Operators) +{ + EG91_Return_t ret = EG91_RETURN_ERROR; + char *align_ptr; + + ret = (EG91_Return_t) AT_ExecuteCommand(Obj, EG91_TOUT_180000, (uint8_t*) "AT+COPS=?\r\n", RET_OK | RET_ERROR | RET_CME_ERROR); + if (RET_OK == ret) + { + align_ptr = strstr((char*) Obj->CmdResp, "+COPS:") + sizeof("+COPS:"); + strncpy((char*) Operators, align_ptr, 100); + } + return ret; +} + +/** + * @brief Get current Network Operator (by string descriptor). + * @param Obj: pointer to module handle + * @param Operator: pointer to a string + * @param bufsize: max string buffer length + * @retval Operation Status. + */ +EG91_Return_t EG91_GetCurrentOperator(EG91Object_t *Obj, char *Operator, + uint8_t Bufsize) +{ + EG91_Return_t ret = EG91_RETURN_ERROR; + char *align_ptr; + const char s[2] = ","; + char *token; + int i; + + ret = (EG91_Return_t) AT_ExecuteCommand(Obj, EG91_TOUT_180000, (uint8_t*) "AT+COPS?\r\n", RET_OK | RET_ERROR | RET_CME_ERROR); + + if (RET_OK == ret) + { + align_ptr = strstr((char*) Obj->CmdResp, "+COPS:") + sizeof("+COPS:"); + + strncpy((char*) Operator, align_ptr, Bufsize); + + /* get the first token */ + token = strtok(Operator, s); + + /* walk through tokens until operator info */ + i = 0; + while (token != NULL && i < 2) + { + token = strtok(NULL, s); + i++; + } + + if (token != NULL) + { + strncpy((char*) (Operator), token, Bufsize); + } + else + { + ret = EG91_RETURN_ERROR; + } + } + return ret; +} + +/** + * @brief Force registration to specific Network Operator (by operator code). + * @param Obj: pointer to module handle + * @param OperatorCode: http://www.imei.info/operator-codes/ + * @retval Operation Status. + */ +EG91_Return_t EG91_ForceOperator(EG91Object_t *Obj, int32_t OperatorCode) +{ + EG91_Return_t ret = EG91_RETURN_ERROR; + + snprintf(CmdString, 24, "AT+COPS=1,2,\"%ld\"\r\n", OperatorCode); + ret = (EG91_Return_t) AT_ExecuteCommand(Obj, EG91_TOUT_180000, (uint8_t*) CmdString, RET_OK | RET_ERROR | RET_CME_ERROR); + return ret; +} + +/** + * @brief Reset To factory defaults. + * @param Obj: pointer to module handle + * @retval Operation Status. + */ +EG91_Return_t EG91_ResetToFactoryDefault(EG91Object_t *Obj) +{ + EG91_Return_t ret; + + ret = (EG91_Return_t) AT_ExecuteCommand(Obj, EG91_TOUT_300, (uint8_t*) "AT&F\r\n", RET_OK | RET_ERROR); + return ret; +} + +/** + * @brief Set UART Configuration on the Quectel modem and on STM32. + * @param Obj: pointer to module handle + * @param pconf: pointer to UART config structure + * @retval Operation Status. + */ +EG91_Return_t EG91_SetUARTBaudrate(EG91Object_t *Obj, EG91_UARTConfig_t *pconf) +{ + EG91_Return_t ret = EG91_RETURN_ERROR; + + /* change the UART baudrate on EG91 module */ + snprintf(CmdString, 17, "AT+IPR=%lu\r\n", pconf->BaudRate); + ret = (EG91_Return_t) AT_ExecuteCommand(Obj, EG91_TOUT_300, (uint8_t*) CmdString, RET_OK | RET_ERROR); + + /* change the UART baudrate on STM32 microcontroller accordingly */ + Obj->fops.IO_Baudrate(pconf->BaudRate); + + return ret; +} + +/** + * @brief Get UART Configuration. + * @param Obj: pointer to module handle + * @param pconf: pointer to UART config structure + * @retval Operation Status. + */ +EG91_Return_t EG91_GetUARTConfig(EG91Object_t *Obj, EG91_UARTConfig_t *pconf) +{ + EG91_Return_t ret = EG91_RETURN_ERROR; + char *align_ptr; + uint8_t rts, cts; + + ret = (EG91_Return_t) AT_ExecuteCommand(Obj, EG91_TOUT_300, (uint8_t*) "AT+IPR?\r\n", RET_OK | RET_ERROR); + if (ret == RET_OK) + { + align_ptr = strstr((char*) Obj->CmdResp, "+IPR:") + sizeof("+IPR:"); + Obj->UART_Config.BaudRate = ParseNumber(align_ptr, NULL); + } + + ret = (EG91_Return_t) AT_ExecuteCommand(Obj, EG91_TOUT_300, (uint8_t*) "AT+IFC?\r\n", RET_OK | RET_ERROR); + if (ret == RET_OK) + { + align_ptr = strstr((char*) Obj->CmdResp, "+IFC:") + sizeof("+IPR:"); + rts = ParseNumber(align_ptr, NULL); + cts = ParseNumber(align_ptr + 2, NULL); + + if (rts == 2) + { + if (cts == 2) + { + pconf->FlowControl = EG91_UART_FLW_CTL_RTS_CTS; + } + else + { + pconf->FlowControl = EG91_UART_FLW_CTL_RTS; + } + } + else + { + if (cts == 2) + { + pconf->FlowControl = EG91_UART_FLW_CTL_CTS; + } + else + { + pconf->FlowControl = EG91_UART_FLW_CTL_NONE; + } + } + } + + return ret; +} + +/** + * @brief Return Manufacturer. + * @param Obj: pointer to module handle + * @param Manufacturer: pointer to Manufacturer + * @retval None. + */ +void EG91_GetManufacturer(EG91Object_t *Obj, uint8_t *Manufacturer) +{ + strncpy((char*) Manufacturer, (char*) Obj->Manufacturer, EG91_MFC_SIZE); +} + +/** + * @brief Return Model. + * @param Obj: pointer to module handle + * @param Model: pointer to Model + * @retval None. + */ +void EG91_GetProductID(EG91Object_t *Obj, uint8_t *ProductID) +{ + strncpy((char*) ProductID, (char*) Obj->ProductID, EG91_PROD_ID_SIZE); +} + +/** + * @brief Return FW revision. + * @param Obj: pointer to module handle + * @param Model: pointer to FW revision + * @retval None. + */ +void EG91_GetFWRevID(EG91Object_t *Obj, uint8_t *Fw_ver) +{ + strncpy((char*) Fw_ver, (char*) Obj->FW_Rev, EG91_FW_REV_SIZE); +} + +/** + * @brief Retrieve last IP error code + * @param Obj: pointer to module handle + * @param error_string: + * @param error_code + * @retval Operation Status. + */ +EG91_Return_t EG91_RetrieveLastErrorDetails(EG91Object_t *Obj, + char *error_string) +{ + EG91_Return_t ret = EG91_RETURN_ERROR; + char *align_ptr; + + ret = (EG91_Return_t) AT_ExecuteCommand(Obj, EG91_TOUT_SHORT, (uint8_t*) "AT+QIGETERROR\r\n", RET_OK | RET_ERROR); + align_ptr = strstr((char*) Obj->CmdResp, "+QIGETERROR:") + sizeof("+QIGETERROR:"); + strncpy((char*) error_string, align_ptr, EG91_ERROR_STRING_SIZE); + return ret; +} + +/** + * @brief Register EG91 Tick external cb functions to be provided by application (e.g. HAL_GetTick) + * @param Obj: pointer to module handle + * @param GetTickCb: pointer to callback function that should provide a Timer Tick in ms + * @retval Operation Status. + */ +EG91_Return_t EG91_RegisterTickCb(EG91Object_t *Obj, + App_GetTickCb_Func GetTickCb) +{ + if (!Obj || !GetTickCb) + { + return EG91_RETURN_ERROR; + } + + Obj->GetTickCb = GetTickCb; + + return EG91_RETURN_OK; +} + +/* ==== AP Connection ==== */ + +/** + * @brief Configure a PDP Access point. + * @param Obj: pointer to module handle + * @param ContextID : range is 1-20 + * @param Apn : access point name + * @param Username : Got IP Address + * @param Password : Network IP mask + * @param AuthenticationMode : 0: none, 1: PAP + * @retval Operation Status. + */ +EG91_Return_t EG91_ConfigureAP(EG91Object_t *Obj, EG91_APConfig_t *ApConfig) +{ + EG91_Return_t ret = EG91_RETURN_ERROR; + + snprintf(CmdString, EG91_CMD_SIZE, "AT+QICSGP=%d,1,\"%s\",\"%s\",\"%s\",%d\r\n", + ApConfig->ContextID, ApConfig->ApnString, ApConfig->Username, ApConfig->Password, ApConfig->Authentication); + ret = (EG91_Return_t) AT_ExecuteCommand(Obj, EG91_TOUT_SHORT, (uint8_t*) CmdString, RET_OK | RET_ERROR); + if (ret == EG91_RETURN_OK) + { + Obj->APContextState[ApConfig->ContextID - 1] = EG91_AP_CONFIGURED; + } + return ret; +} + +/** + * @brief Join a PDP Access point. + * @param Obj: pointer to module handle + * @param ContextID : range is 1-20 (max three can be connected simultaneously) + * @retval Operation Status. + */ +EG91_Return_t EG91_Activate(EG91Object_t *Obj, uint8_t ContextID) +{ + EG91_Return_t ret = EG91_RETURN_ERROR; + + snprintf(CmdString, strlen("AT+QICSGP=1, 1, \"%s\", \"\", \"\", 0\r\n") + 20, "AT+QICSGP=1, 1, \"%s\", \"\", \"\", 0\r\n", "testingAPN"); + ret = (EG91_Return_t) AT_ExecuteCommand(Obj, EG91_TOUT_SHORT, (uint8_t*) CmdString, RET_OK | RET_ERROR); + if (ret == EG91_RETURN_OK) + { + Obj->APContextState[ContextID - 1] = EG91_AP_CONFIGURED; + } + + HAL_Delay(1000); + + if (Obj->APContextState[ContextID - 1] == EG91_AP_CONFIGURED) + { + if (Obj->APsActive < 3) + { +// snprintf(CmdString, 24, "AT+QIACT=%d\r\n", ContextID); + snprintf(CmdString, 24, "AT+CGACT=1,%d\r\n", ContextID); + ret = (EG91_Return_t) AT_ExecuteCommand(Obj, EG91_TOUT_150000, (uint8_t*) CmdString, RET_OK | RET_ERROR); + HAL_Delay(10); + if (ret == EG91_RETURN_OK) + { + Obj->APContextState[ContextID - 1] = EG91_AP_ACVTIVATED; + Obj->APsActive++; + } + } + + snprintf(CmdString, EG91_CMD_SIZE, "AT+NETOPEN?\r\n"); + AT_ExecuteCommand(Obj, EG91_TOUT_150000 / 2, (uint8_t*) CmdString, RET_OPEN | RET_ERROR); + AT_RetrieveData(Obj, Obj->CmdResp, 0, RET_OK, EG91_TOUT_300); + if(strstr((char*)Obj->CmdResp, "0") != NULL) + { + snprintf(CmdString, EG91_CMD_SIZE, "AT+NETOPEN\r\n"); + AT_ExecuteCommand(Obj, EG91_TOUT_150000 / 2, (uint8_t*) CmdString, RET_OPEN | RET_ERROR); + } + else + { + //do nothing + } + HAL_Delay(500); + } +#ifdef EG91_DBG + printf(" EG91_Activate() PDP Access point, ret value: %d \n", ret); +#endif + return ret; +} + +/** + * @brief Leave a PDP Access point. + * @param Obj: pointer to module handle + * @param ContextID : range is 1-20 (max three are connected simultaneously) + * @retval Operation Status. + */ +EG91_Return_t EG91_Deactivate(EG91Object_t *Obj, uint8_t ContextID) +{ + EG91_Return_t ret = EG91_RETURN_ERROR; + +// snprintf(CmdString, 24, "AT+QIDEACT=%d\r\n", ContextID); + snprintf(CmdString, 24, "AT+CGACT=0,%d\r\n", ContextID); + ret = (EG91_Return_t) AT_ExecuteCommand(Obj, EG91_TOUT_40000, (uint8_t*) CmdString, RET_OK | RET_ERROR); + if (ret == EG91_RETURN_OK) + { + Obj->APContextState[ContextID - 1] = EG91_AP_CONFIGURED; + Obj->APsActive--; + } +#ifdef EG91_DBG + printf(" EG91_Deactivate() PDP Access point, ret value: %d \n", ret); +#endif + return ret; +} + +/** + * @brief Check whether the contextID is connected to an access point. + * @retval Operation Status. + */ +EG91_APState_t EG91_IsActivated(EG91Object_t *Obj, uint8_t ContextID) +{ + return (EG91_APState_t) Obj->APContextState[ContextID - 1]; +} + +/** + * @brief Get the list of the current activated context and its IP addresses + * @param Obj: pointer to module handle + * @param IPaddr_string: pointer where to retrieve the string with all active IP info + * @param IPaddr_int: pointer where to retrieve the first active IP address in int_array[] format + * @retval Operation Status. + */ +EG91_Return_t EG91_GetActiveIpAddresses(EG91Object_t *Obj, char *IPaddr_string, + uint8_t *IPaddr_int) +{ + EG91_Return_t ret = EG91_RETURN_ERROR; + int32_t cmdret; + char *align_ptr; + + /* Remove this if it is not working - Alecks*/ + snprintf(CmdString, EG91_CMD_SIZE, "AT+NETOPEN?\r\n"); + AT_ExecuteCommand(Obj, EG91_TOUT_150000 / 2, (uint8_t*) CmdString, RET_OPEN | RET_ERROR); + AT_RetrieveData(Obj, Obj->CmdResp, 0, RET_OK, EG91_TOUT_300); + + if(strstr((char*)Obj->CmdResp, "0") != NULL) + { + snprintf(CmdString, EG91_CMD_SIZE, "AT+NETOPEN\r\n"); + AT_ExecuteCommand(Obj, EG91_TOUT_150000 / 2, (uint8_t*) CmdString, RET_OPEN | RET_ERROR); + } + + cmdret = AT_ExecuteCommand(Obj, EG91_TOUT_150000, (uint8_t*) "AT+IPADDR\r\n", RET_OK | RET_ERROR); + if (cmdret == RET_OK) + { + align_ptr = strtok((char*)Obj->CmdResp, ","); + // loop through the string to extract all other tokens + for (int i = 0; i < 1; i++) + { + align_ptr = strtok(NULL, "\r\n"); + } + align_ptr = strtok(align_ptr, "\r\n\r\n"); + ParseIP(align_ptr, IPaddr_int); + ret = EG91_RETURN_OK; + } + return ret; +} + +#if (EG91_USE_PING == 1) +/** + * @brief Test the Internet Protocol reachability of a host + * @param Obj: pointer to module handle + * @param ContextID : range is 1-20 (max three are connected simultaneously) + * @param host_addr_string: domain name (e.g. www.amazon.com) or dotted decimal IP addr + * @param count: PING repetitions (default 4) (max 10) + * @param rep_delay_sec: timeout for each repetition in seconds + * @retval Operation Status. + */ +EG91_Return_t EG91_Ping(EG91Object_t *Obj, uint8_t ContextID, + char *host_addr_string, uint16_t count, uint16_t rep_delay_sec) +{ + EG91_Return_t ret = EG91_RETURN_ERROR; + char *align_ptr; + char *token; +// char *packetReceived; + + if (count > 10) + { + count = 10; + } + snprintf(CmdString, EG91_CMD_SIZE, "AT+MPING=%s, 1, %d, 32, %d\r\n", host_addr_string, count, rep_delay_sec ); + ret = (EG91_Return_t) AT_ExecuteCommand(Obj, EG91_TOUT_150000, (uint8_t*) CmdString, RET_OK | RET_ERROR); + + if(ret == EG91_RETURN_OK) + { + for(int i = 0; i < 11; i++) + { + memset(Obj->CmdResp, 0, sizeof(Obj->CmdResp)); + AT_RetrieveData(Obj, Obj->CmdResp, 0, RET_NETCLOSE, EG91_TOUT_SHORT); +// printf("Ping: %s\r\n", Obj->CmdResp); + HAL_Delay(1000); + } + + align_ptr = strtok((char*)Obj->CmdResp, "+MPING:"); + if (align_ptr != NULL) + { + for (int j = 0; j < 2; j++) + { + token = strtok_r(align_ptr, ",", &align_ptr); + } + + if (atoi(token) >= (count * 0.7)) + { + ret = EG91_RETURN_OK; + } + else + { + ret = EG91_RETURN_ERROR; + } + } + else + { + ret = EG91_RETURN_ERROR; + } + } + return ret; +} +#endif + +/* ==== Client connection and communication ==== */ + +/** + * @brief Get the last IP addresses associated to the host name via Google DNS service + * @param Obj: pointer to module handle + * @param ContextID : range is 1-20 (max three are connected simultaneously) + * @param IPaddr_string: host name (e.g. www.host.com) + * @param IPaddr_int: pointer where to retrieve the first active IP address in int_array[] format + * @retval Operation Status. + */ +EG91_Return_t EG91_DNS_LookUp(EG91Object_t *Obj, uint8_t ContextID, + const char *IPaddr_string, uint8_t *IPaddr_int) +{ + EG91_Return_t ret = EG91_RETURN_ERROR; +// int32_t urc_retval = 0; +// uint16_t parsedlen = 0; + int32_t cmdret; + char *align_ptr; + + /* force to use google DNS service : "8.8.8.8" */ + // Need to revisit + snprintf(CmdString, 255, "AT+MDNSGIP=\"%s\"\r\n", IPaddr_string); + cmdret = AT_ExecuteCommand(Obj, EG91_TOUT_300, (uint8_t*) CmdString, RET_OK | RET_ERROR); + + if (cmdret == RET_OK) + { + align_ptr = strtok((char*)Obj->CmdResp, ","); + // loop through the string to extract all other tokens + for (int i = 0; i < 1; i++) + { + align_ptr = strtok(NULL, " "); + } + align_ptr = strtok(align_ptr, "\r\n\r\n"); + ParseIP(align_ptr, IPaddr_int); + ret = EG91_RETURN_OK; + } + +#ifdef EG91_DBG + char error_string[40]; + if (ret == EG91_RETURN_OK) + { + printf("Host addr from DNS: %d.%d.%d.%d \n", IPaddr_int[0],IPaddr_int[1],IPaddr_int[2],IPaddr_int[3]); + } + else + { + EG91_RetrieveLastErrorDetails(Obj, error_string); + printf("EG91_DNS_LookUp error: %s\n", error_string); + } +#endif + return ret; +} + +/** + * @brief Configure and Start a Client connection. + * @param Obj: pointer to module handle + * @param ContextID : range is 1-20 (max three are connected simultaneously) + * @param conn: pointer to the connection structure + * @retval Operation Status. + */ +EG91_Return_t EG91_OpenClientConnection(EG91Object_t *Obj, uint8_t ContextID, + EG91_Conn_t *conn) +{ + EG91_Return_t ret = EG91_RETURN_ERROR; + char type_string[13]; + int16_t recv; + int32_t cmdret, retr_errcode; + + Obj->fops.IO_FlushBuffer(); + Obj->SocketInfo[conn->ConnectID].Type = conn->Type; + Obj->SocketInfo[conn->ConnectID].AccessMode = conn->AccessMode; + Obj->SocketInfo[conn->ConnectID].ComulatedQirdData = 0; + Obj->SocketInfo[conn->ConnectID].HaveReadLength = 0; + Obj->SocketInfo[conn->ConnectID].UnreadLength = 0; + + if (conn->Type == EG91_TCP_CONNECTION) + { + strcpy(type_string, "TCP"); + } + else if (conn->Type == EG91_UDP_CONNECTION) + { + strcpy(type_string, "UDP"); + } + else if (conn->Type == EG91_TCP_LISTENER_CONNECTION) + { + strcpy(type_string, "TCP_LISTENER"); + } + else if (conn->Type == EG91_UDP_SERVER_CONNECTION) + { + strcpy(type_string, "UDP_SERVER"); + } + +#ifdef EG91_DBG + printf(" EG91_OpenClientConnection() \n"); +#endif + + + snprintf(CmdString, EG91_CMD_SIZE, "AT+CIPOPEN=%d,\"%s\",\"%s\",%u,%u\r\n", + conn->ConnectID, type_string, conn->Url, conn->RemotePort, conn->LocalPort); +// snprintf(CmdString, EG91_CMD_SIZE, "AT+CIPOPEN=%d,\"%s\",\"%s\",%u\r\n", +// conn->ConnectID, type_string, conn->Url, conn->RemotePort); + /* The maximum timeout of TCP connect is 75 seconds, hence EG91_TOUT_150000/2 */ + cmdret = AT_ExecuteCommand(Obj, EG91_TOUT_150000 / 2, (uint8_t*) CmdString, + RET_OPEN | RET_ERROR); + if (cmdret == RET_OPEN) + { + recv = AT_RetrieveData(Obj, Obj->CmdResp, 6, RET_NONE, EG91_TOUT_SHORT); + if (recv > 0) + { + retr_errcode = ParseNumber((char*) Obj->CmdResp + 3, NULL); + if (retr_errcode != 0) /* read the remaining 2 characters if error nr 3 chiphers*/ + { + recv = AT_RetrieveData(Obj, Obj->CmdResp, 2, RET_NONE, + EG91_TOUT_SHORT); +#ifdef EG91_DBG + printf(" EG91_OpenClientConnection() retr_errcode: %ld \n", retr_errcode); +#endif + } + else + { +#ifdef EG91_DBG + snprintf(CmdString, EG91_CMD_SIZE, "AT+QISTATE=1,%d\r\n", conn->ConnectID); + cmdret = AT_ExecuteCommand(Obj, EG91_TOUT_300, (uint8_t *)CmdString, RET_OK | RET_ERROR); +#endif + ret = EG91_RETURN_OK; + } + } + else + { +#ifdef EG91_DBG + printf(" EG91_OpenClientConnection() missing part of the response \n"); +#endif + } + } + + return ret; +} + +/** + * @brief Stop Client connection. + * @param Obj: pointer to module handle + * @param conn: pointer to the connection structure + * @retval Operation Status. + */ +EG91_Return_t EG91_CloseClientConnection(EG91Object_t *Obj, EG91_Conn_t *conn) +{ + EG91_Return_t ret = EG91_RETURN_ERROR; + Obj->fops.IO_FlushBuffer(); + + snprintf(CmdString, 24, "AT+CIPCLOSE=%d\r\n", conn->ConnectID); + ret = (EG91_Return_t) AT_ExecuteCommand(Obj, EG91_TOUT_5000, (uint8_t*) CmdString, RET_ERROR | RET_OK); + AT_RetrieveData(Obj, Obj->CmdResp, 0, RET_NETCLOSE, EG91_TOUT_300); +#ifdef EG91_DBG + printf(" EG91_CloseClientConnection(), ret value: %d \n", ret); +#endif + return ret; +} + +/** + * @brief Send an amount data over C2C. + * @param Obj: pointer to module handle + * @param Socket: number of the socket + * @param pdata: pointer to data + * @param Reqlen : (IN) nr of bytes to be sent + * @param SentLen : (OUT) ptr to return the nr of bytes actually sent + * @param Timeout : time (ms) for the modem to confirm the data was sent. Function can take twice to return. + * @retval Operation Status. + */ +EG91_SendRet_t EG91_SendData(EG91Object_t *Obj, uint8_t Socket, uint8_t *pdata, + uint16_t Reqlen, uint16_t *SentLen, uint32_t Timeout) +{ + EG91_SendRet_t ret = EG91_SEND_RET_CONN_ERR; + int32_t cmdret = 0; + + *SentLen = 0; + if (Reqlen <= EG91_TX_DATABUF_SIZE) + { + snprintf(CmdString, 24, "AT+CIPRXGET=1,%d\r\n", Socket); + AT_ExecuteCommand(Obj, EG91_TOUT_300, (uint8_t*) CmdString, RET_ERROR | RET_READ); + + snprintf(CmdString, 24, "AT+CIPSEND=%d,%d\r\n", Socket, Reqlen); + cmdret = AT_ExecuteCommand(Obj, Timeout, (uint8_t*) CmdString, RET_ERROR | RET_ARROW); + if (cmdret == RET_ARROW) + { + ret = AT_RequestSendData(Obj, pdata, Reqlen, Timeout); + if (ret == RET_SENT) + { + *SentLen = Reqlen; + } + } + else + { +#ifdef EG91_DBG + printf("AT_ExecuteCommand() failed: %ld.\n", cmdret); +#endif + } + } +#ifdef EG91_DBG + if(ret == RET_SENT) + { + printf("EG91_SendData() OK sending from STM32 to EG91: length: %u \n", Reqlen); + } + else + { + printf("EG91_SendData() FAIL sending: length: %u, ret error: %d\n", Reqlen, ret); + } +#endif + return ret; +} + +/** + * @brief Receive an amount data over C2C. + * @param Obj: pointer to module handle + * @param Socket: number of the socket + * @param pdata: pointer to data + * @param Requestedlen (IN) : in EG91_BUFFER_MODE the req len, in EG91_DIRECT_PUSH is the max leng available in pdata[] buffer + * @param Receivedlen (OUT) : pointer to return the length of the data received + * @param Timeout : timeout (ms) used by each internal exchange Mcu<-->modem; hence function could take much longer to return + * @retval Operation Status. + */ +EG91_ReceiveRet_t EG91_ReceiveData(EG91Object_t *Obj, uint8_t Socket, + uint8_t *pdata, uint16_t Requestedlen, uint16_t *Receivedlen, + uint32_t Timeout) +{ + + EG91_ReceiveRet_t ret = EG91_RECEIVE_RET_COM_ERR; + int32_t urc_retval = 0, rcvlen = 0; + uint8_t *ptr = pdata; + uint16_t parsedlen = 0; + uint8_t parse_count; + int16_t qird_retval = 0; + + *Receivedlen = 0; + + if (Obj->SocketInfo[Socket].Type != EG91_TCP_CONNECTION) + { + return EG91_RECEIVE_RET_PARAM_ERR; /* currently only TCP connection is implemented */ + } + + if (Requestedlen <= EG91_RX_DATABUF_SIZE) + { + switch (Obj->SocketInfo[Socket].AccessMode) + { + case EG91_BUFFER_MODE: +#ifdef EG91_DBG + printf(" EG91_ReceiveData() Requestedlen: %d \n", Requestedlen); + printf(" EG91_ReceiveData() UnreadLength: %d \n", Obj->SocketInfo[Socket].UnreadLength); + printf(" EG91_ReceiveData() ComulatedQirdData: %d \n", Obj->SocketInfo[Socket].ComulatedQirdData); +#endif + + if (Obj->SocketInfo[Socket].UartRemaining > 0) /* if Timeout respects UART speed this should never happen*/ + { +#ifdef EG91_DBG + printf(" **** EG91_ReceiveData() UartRemaining %d \n", Obj->SocketInfo[Socket].UartRemaining); +#endif + rcvlen = AT_RetrieveData(Obj, ptr, Obj->SocketInfo[Socket].UartRemaining, RET_NONE, Timeout); + Obj->SocketInfo[Socket].UartRemaining -= rcvlen; + *Receivedlen = rcvlen; + if (Obj->SocketInfo[Socket].UartRemaining == 0) + { + /* update Obj->SocketInfo[Socket] and exit */ + snprintf(CmdString, 24, "AT+CIPRXGET=0,%d\r\n", Socket); + AT_ExecuteCommand(Obj, EG91_TOUT_300, (uint8_t*) CmdString, RET_ERROR | RET_READ ); + AT_RetrieveData(Obj, Obj->CmdResp, 0, RET_CRLF, EG91_TOUT_300); + ParseQIRD((char*) Obj->CmdResp, &Obj->SocketInfo[Socket].ComulatedQirdData); + ret = EG91_RECEIVE_RET_OK; + } + else + { + ret = EG91_RECEIVE_RET_INCOMPLETE; /* even this iteration was not sufficient to get all data from modem */ + } + break; + } + + + if (Obj->SocketInfo[Socket].UnreadLength > 0) /* some data remaining from previous operation */ + { + if (Requestedlen > Obj->SocketInfo[Socket].UnreadLength) + { + Requestedlen = Obj->SocketInfo[Socket].UnreadLength; /* Just take the one to end remaining data */ + } + } + else + { + /* Wait for parsing URC */ + urc_retval = AT_RetrieveUrc(Obj, Timeout, &parsedlen, EG91_BUFFER_MODE); +#ifdef EG91_DBG + if (urc_retval < 0) + { + printf(" EG91_ReceiveData() URC not received\n"); + } + else + { + printf(" EG91_ReceiveData() URC OK\n"); + } +#endif + } + + snprintf(CmdString, 24, "AT+CIPRXGET=2,%d,%u\r\n", Socket, Requestedlen); + qird_retval = AT_ExecuteCommand(Obj, EG91_TOUT_SHORT, (uint8_t*) CmdString, RET_ERROR | RET_READ); + if ((qird_retval < 0) || (qird_retval == RET_ERROR)) + { +#ifdef EG91_DBG + printf(" EG91_ReceiveData() QIRD issue\n"); +#endif + return EG91_RECEIVE_RET_COM_ERR; + } + /* length parsing */ + AT_RetrieveData(Obj, Obj->CmdResp, 0, RET_CRLF, EG91_TOUT_300); + char *token = strtok((char*)Obj->CmdResp, ","); + for(int i = 0; i < 3; i++) + { + token = strtok(NULL, ","); + } + parsedlen = (uint16_t) ParseNumber(token, &parse_count); + +#ifdef EG91_DBG + if ((Obj->SocketInfo[Socket].UnreadLength > 0) && (parsedlen != Requestedlen)) + { + printf(" EG91_ReceiveData() unexpected behaviour parsedlen != Requestedlen (%u)\n", Requestedlen); + } + printf(" EG91_ReceiveData() parsedlen is %u\n", parsedlen); +#endif + /* Retrieving data */ + rcvlen = AT_RetrieveData(Obj, ptr, parsedlen, RET_NONE, Timeout); + if (rcvlen < 0) + { + *Receivedlen = 0; + break; /* return EG91_RECEIVE_RET_COM_ERR */ + } + if (rcvlen != parsedlen) /* uart has not retrieved all data from modem yet*/ + { +#ifdef EG91_DBG + printf(" EG91_ReceiveData() Received length mismatch!!!\n"); +#endif + Obj->SocketInfo[Socket].UartRemaining = parsedlen - rcvlen; + Obj->SocketInfo[Socket].UnreadLength -= rcvlen; + *Receivedlen = rcvlen; + ret = EG91_RECEIVE_RET_INCOMPLETE; /* if Timeout respects UART speed this should never happen*/ + } + else + { +#ifdef EG91_DBG + printf(" EG91_ReceiveData() Received OK %ld \n", rcvlen); +#endif + *Receivedlen = rcvlen; + Obj->SocketInfo[Socket].UartRemaining = 0; + ret = EG91_RECEIVE_RET_OK; + } + + break; + + case EG91_DIRECT_PUSH: /* ******** Careful: NOT fully TESTED ******** */ + + if (Obj->RemainRxData > 0) /* some data remaining from previous operation */ + { + if (Requestedlen <= Obj->RemainRxData) /* in EG91_DIRECT_PUSH Requestedlen is the max the applic can receive */ + { + Obj->RemainRxData -= Requestedlen; + if (AT_RetrieveData(Obj, ptr, Requestedlen, RET_NONE, + Timeout) != Requestedlen) + { + return EG91_RECEIVE_RET_COM_ERR; + } + else + { + return EG91_RECEIVE_RET_OK; + } + } + else /* all remaining data can be retried */ + { + Requestedlen -= Obj->RemainRxData; + + if (AT_RetrieveData(Obj, ptr, Obj->RemainRxData, RET_NONE, + Timeout) == Obj->RemainRxData) + { + ptr += Obj->RemainRxData; + Obj->RemainRxData = 0; + } + else + { + /* error */ + return EG91_RECEIVE_RET_COM_ERR; + } + } + } + + urc_retval = AT_RetrieveUrc(Obj, Timeout, &parsedlen, + EG91_DIRECT_PUSH); + + if (urc_retval == RET_URC_RECV) + { + if (parsedlen > 0) + { + if (Requestedlen > parsedlen) /* retrieve all data */ + { + Obj->RemainRxData = 0; + Requestedlen = parsedlen; + } + else /* not enough space in the applic buffer */ + { + Obj->RemainRxData = parsedlen - Requestedlen; + } + + *Receivedlen = AT_RetrieveData(Obj, ptr, Requestedlen, + RET_NONE, Timeout); + if (*Receivedlen == Requestedlen) + { + ret = EG91_RECEIVE_RET_OK; + } + } + } + break; + + case EG91_TRANSPARENT_MODE: + /* TBD */ + ret = EG91_RECEIVE_RET_PARAM_ERR; + break; + + } /*end switch case */ + } + else + { + ret = EG91_RECEIVE_RET_PARAM_ERR; + } + return ret; +} + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c new file mode 100644 index 0000000..62bfaa1 --- /dev/null +++ b/Core/Src/gpio.c @@ -0,0 +1,136 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file gpio.c + * @brief This file provides code for the configuration + * of all used GPIO pins. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "gpio.h" + +/* USER CODE BEGIN 0 */ +#include "usart.h" +/* USER CODE END 0 */ + +/*----------------------------------------------------------------------------*/ +/* Configure GPIO */ +/*----------------------------------------------------------------------------*/ +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/** Configure pins + PC15-OSC32_OUT ------> RCC_OSC32_OUT + PC14-OSC32_IN ------> RCC_OSC32_IN + PA14 (JTCK/SWCLK) ------> DEBUG_JTCK-SWCLK + PA13 (JTMS/SWDIO) ------> DEBUG_JTMS-SWDIO + OSC_OUT ------> RCC_OSC_OUT + OSC_IN ------> RCC_OSC_IN +*/ +void MX_GPIO_Init(void) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOC_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOB, STATUS_LED_Pin|LTE_EN_Pin|LTE_RST_Pin|LTE_PWRKEY_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pins : STATUS_LED_Pin LTE_EN_Pin LTE_RST_Pin LTE_PWRKEY_Pin */ + GPIO_InitStruct.Pin = STATUS_LED_Pin|LTE_EN_Pin|LTE_RST_Pin|LTE_PWRKEY_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + +} + +/* USER CODE BEGIN 2 */ +void LEDStatus_Active(void) +{ + HAL_GPIO_WritePin(STATUS_LED_GPIO_Port, STATUS_LED_Pin, GPIO_PIN_SET); +} + +void LEDStatus_Inactive(void) +{ + HAL_GPIO_WritePin(STATUS_LED_GPIO_Port, STATUS_LED_Pin, GPIO_PIN_RESET); +} + +/** + * @brief Powers up the LTE module (Quectel EG91) using GPIO toggling. + * + * This function simulates pressing the PWRKEY and enables the level translator. + * A wait period is included to allow UART stabilization. + */ +void LTE_HardwarePowerUp(void) +{ + HAL_GPIO_WritePin(LTE_EN_GPIO_Port, LTE_EN_Pin, GPIO_PIN_SET); + + APP_LOG_MSG(" --- QUECTEL EG91 Power Up ---\r\n"); + + /* Power up the LTE Module Using Power Key */ + HAL_GPIO_WritePin(LTE_PWRKEY_GPIO_Port, LTE_PWRKEY_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(LTE_RST_GPIO_Port, LTE_RST_Pin, GPIO_PIN_RESET); + HAL_Delay(100); + HAL_GPIO_WritePin(LTE_RST_GPIO_Port, LTE_RST_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(LTE_PWRKEY_GPIO_Port, LTE_PWRKEY_Pin, GPIO_PIN_SET); + HAL_Delay(200); + HAL_GPIO_WritePin(LTE_RST_GPIO_Port, LTE_RST_Pin, GPIO_PIN_RESET); + HAL_Delay(350); + HAL_GPIO_WritePin(LTE_PWRKEY_GPIO_Port, LTE_PWRKEY_Pin, GPIO_PIN_RESET); + + HAL_Delay(100); + + for (uint8_t wait = 0; wait < 12; wait++) { + LEDStatus_Active(); + HAL_Delay(500); + LEDStatus_Inactive(); + HAL_Delay(500); + // APP_LOG_MSG("."); + } + // APP_LOG_MSG(" Done\r\n"); +} + +/** + * @brief Powers down the LTE module (Quectel EG91) via GPIO toggling. + * + * This simulates a long-press of the PWRKEY, then waits 30 seconds to allow the module to shut down safely. + */ +void LTE_HardwarePowerDown(void) +{ + APP_LOG_MSG(" --- QUECTEL EG91 Shut Down --- \r\n"); + + HAL_GPIO_WritePin(LTE_PWRKEY_GPIO_Port, LTE_PWRKEY_Pin, GPIO_PIN_RESET); + HAL_Delay(100); + HAL_GPIO_WritePin(LTE_PWRKEY_GPIO_Port, LTE_PWRKEY_Pin, GPIO_PIN_SET); + HAL_Delay(700); + HAL_GPIO_WritePin(LTE_PWRKEY_GPIO_Port, LTE_PWRKEY_Pin, GPIO_PIN_RESET); + + LEDStatus_Active(); + // APP_LOG_MSG("Shutting off "); + for (uint8_t wait = 0; wait < 30; wait++) + { + // APP_LOG_MSG("."); + HAL_Delay(1000); + } + // APP_LOG_MSG(" Done\r\n"); + LEDStatus_Inactive(); +} +/* USER CODE END 2 */ diff --git a/Core/Src/icache.c b/Core/Src/icache.c new file mode 100644 index 0000000..63795c3 --- /dev/null +++ b/Core/Src/icache.c @@ -0,0 +1,57 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file icache.c + * @brief This file provides code for the configuration + * of the ICACHE instances. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "icache.h" + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* ICACHE init function */ +void MX_ICACHE_Init(void) +{ + + /* USER CODE BEGIN ICACHE_Init 0 */ + + /* USER CODE END ICACHE_Init 0 */ + + /* USER CODE BEGIN ICACHE_Init 1 */ + + /* USER CODE END ICACHE_Init 1 */ + + /** Enable instruction cache in 1-way (direct mapped cache) + */ + if (HAL_ICACHE_ConfigAssociativityMode(ICACHE_1WAY) != HAL_OK) + { + Error_Handler(); + } + if (HAL_ICACHE_Enable() != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN ICACHE_Init 2 */ + + /* USER CODE END ICACHE_Init 2 */ + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/Core/Src/lte_comms.c b/Core/Src/lte_comms.c new file mode 100644 index 0000000..ce66777 --- /dev/null +++ b/Core/Src/lte_comms.c @@ -0,0 +1,586 @@ +#include +#include + +#include "main.h" +#include "usart.h" +#include "gpio.h" + +#include "eg91.h" +#include "lte_comms.h" + +#define LTE_CONTEXT_1 1 + +EG91Object_t Eg91Obj; +static uint16_t rnglocalport = 0; + +int Network_Init(void) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + LTE_Registatus_t reg_status = LTE_REGISTATUS_UNKNOWN; + int32_t quality_level = 0; + int8_t quality_level_db = 0; + int try_counter = 0; + + char moduleInfo[MAX(MAX(MAX(MAX(LTE_FW_REV_SIZE, LTE_MAN_SIZE), LTE_PROD_ID_SIZE), LTE_IMEI_SIZE), LTE_ICCID_SIZE) + 1]; + while (ret != LTE_RET_OK) + { + if (try_counter >= 3) + { + ret = LTE_RET_ERROR; + break; + } + else + { + try_counter++; + HAL_Delay(50); + + LTE_HardwarePowerUp(); + reg_status = LTE_Init(120); + + LTE_GetModuleName(moduleInfo); + APP_LOG_MSG("Module Name: %s\r\n", moduleInfo); + memset(moduleInfo, 0, sizeof(moduleInfo)); + + LTE_GetModuleID(moduleInfo); + APP_LOG_MSG("Product ID: %s\r\n", moduleInfo); + memset(moduleInfo, 0, sizeof(moduleInfo)); + + LTE_GetModuleFirmwareRevision(moduleInfo); + APP_LOG_MSG("FW Version: %s\r\n", moduleInfo); + memset(moduleInfo, 0, sizeof(moduleInfo)); + + LTE_GetIMEI(moduleInfo); + APP_LOG_MSG("IMEI: %s\r\n", moduleInfo); + memset(moduleInfo, 0, sizeof(moduleInfo)); + + LTE_GetSimId(moduleInfo); + APP_LOG_MSG("ICCID: %s\r\n", moduleInfo); + memset(moduleInfo, 0, sizeof(moduleInfo)); + + + if ((reg_status != LTE_REGISTATUS_ERROR) && (reg_status != LTE_REGISTATUS_SIM_NOT_INSERTED) && (reg_status == LTE_REGISTATUS_NOT_REGISTERED)) + { + APP_LOG_MSG("Successful Initialization of the Module\r\n\r\n"); + memset(moduleInfo, 0, sizeof(moduleInfo)); + + + /* Retrieve the Quality Level of the Connection */ + LTE_GetSignalQualityStatus(&quality_level); + if (quality_level != 99) + { + quality_level_db = (int8_t)(-113 + 2 * quality_level); + APP_LOG_MSG("Signal Quality Level %d dBm (GSM Format: %ld)\r\n", quality_level_db, quality_level); + } + else + { + APP_LOG_MSG("Signal Quality Level not detectable\r\n"); + } + APP_LOG_MSG("\r\n"); + } + switch (reg_status) + { + case LTE_REGISTATUS_HOME_NETWORK: + case LTE_REGISTATUS_ROAMING: + case LTE_REGISTATUS_UNKNOWN: + { + HAL_Delay(1000); + ret = LTE_RET_OK; + APP_LOG_MSG("\r\n >>> Module Registration Successful\r\n\r\n"); + break; + } + + case LTE_REGISTATUS_TRYING: + { + APP_LOG_MSG("\r\n >>> Module Registration Trying\r\n\r\n"); + break; + } + + case LTE_REGISTATUS_REG_DENIED: + { + APP_LOG_MSG("\r\n >>> Module Registration Denied\r\n\r\n"); + break; + } + + case LTE_REGISTATUS_NOT_REGISTERED: + { + APP_LOG_MSG("\r\n >>> Module Registration Failed\r\n\r\n"); + break; + } + + case LTE_REGISTATUS_ERROR: + { + APP_LOG_MSG("\r\n >>> Module AT Communication Error with the Device\r\n"); + APP_LOG_MSG(" >>> Device might be disconnected or wrongly connected\r\n\r\n"); + break; + } + + case LTE_REGISTATUS_SIM_NOT_INSERTED: + { + APP_LOG_MSG("\r\n >>> SIM is not INSERTED\r\n\r\n"); + break; + } + + default: + { + APP_LOG_MSG("\r\n >>> Module SIM Error: %d\r\n", reg_status); + APP_LOG_MSG(" >>> Please check if the SIM is inserted and valid, if credentials are ok, etc.\r\n\r\n"); + break; + } + + } + } + } + return (ret == LTE_RET_OK) ? 0 : -1; +} + + +void LTE_ConvertIpAddrToString(const uint8_t * ipArray, char *returnStr) +{ + snprintf((char*) returnStr, 16, "%d.%d.%d.%d", ipArray[0], ipArray[1], ipArray[2], ipArray[3]); +} + +LTE_Registatus_t LTE_Init(uint16_t registration_timeout_sec) +{ + EG91_InitRet_t init_status; + EG91_SIMState_t sim_tmp; + LTE_Registatus_t ret = LTE_REGISTATUS_ERROR; + + bool signalMsg = false; + + /* Channel Signal Quality */ + int32_t quality_level = 0; + int8_t quality_level_db = 0; + + /* Counter for PS Attachement */ + int8_t attRetry = 0; + + /* Init for timeout management */ + uint32_t tickstart; + uint32_t tickcurrent; + uint32_t registration_timeout_msec = registration_timeout_sec * 1000; + + tickstart = HAL_GetTick(); + + EG91_RegisterTickCb(&Eg91Obj, HAL_GetTick); + + if (EG91_RegisterBusIO(&Eg91Obj, (IO_Init_Func)MX_USART1_UART_Init, + (IO_DeInit_Func)HAL_UART_DeInit, (IO_Baudrate_Func)LTE_UART_SetBaudrate, + (IO_Send_Func)LTE_UART_SendData, (IO_ReceiveOne_Func)LTE_UART_ReceiveSingleData, + (IO_Flush_Func)LTE_UART_FlushBuffer) == EG91_RETURN_OK) + { + init_status = EG91_Init(&Eg91Obj); + if (init_status == EG91_INIT_RET_OK) + { + tickcurrent = HAL_GetTick() - tickstart; + while ((tickcurrent < registration_timeout_msec) || (registration_timeout_sec == LTE_COMMS_MAX_DELAY)) + { + /* Check Signal Quality*/ + if (EG91_GetSignalQualityStatus(&Eg91Obj, &quality_level) == EG91_RETURN_OK) + { + if (quality_level == 99) + { + if (signalMsg == false) + { + APP_LOG_MSG("Signal is not known or not detectable yet... "); + signalMsg = true; + } + else + { + APP_LOG_MSG("."); + } + HAL_Delay(1000); + } + else + { + quality_level_db = (int8_t)(-113 + 2 * quality_level); + APP_LOG_MSG("\r\nSignal Level: %d dBm\r\n", quality_level_db); + HAL_Delay(1000); + break; + } + } + tickcurrent = HAL_GetTick() - tickstart; + } + tickcurrent = HAL_GetTick() - tickstart; + while( (tickcurrent < registration_timeout_msec) || (registration_timeout_sec == LTE_COMMS_MAX_DELAY) ) + { + /* Attach the MT to the backet domain service */ + if (EG91_PSAttach(&Eg91Obj) == EG91_RETURN_OK) + { + APP_DEBUG_MSG("Packet Switched attachement succeeded\r\n"); + break; + } + else + { + /* Start an Automatic PLMN selection */ + attRetry++; + if (attRetry == 1) + { + APP_DEBUG_MSG("Trying an automatic registration. It may take until 3 minutes, please wait ...\r\n"); + if (EG91_RETURN_OK != EG91_AutomaticPlmnSelection(&Eg91Obj)) + { + break; + } + else + { + if (attRetry > 4) + { + APP_DEBUG_MSG("Unrecoverable Error, PS attachement failed\r\n"); + break; + } + } + } + HAL_Delay(1000); + } + tickcurrent = HAL_GetTick() - tickstart; + } + /* Check Packet Switched Registration */ + ret = (LTE_Registatus_t) EG91_GetPsNetworkRegistrationStatus(&Eg91Obj); + APP_DEBUG_MSG("Packet Switch Registration: %d\r\n", ret); + if ( (ret == LTE_REGISTATUS_HOME_NETWORK) || (ret == LTE_REGISTATUS_ROAMING) ) + { + tickcurrent = HAL_GetTick() - tickstart; + APP_DEBUG_MSG("Registation done in %lu ms\r\n", tickcurrent); + } + } + else + { + if (init_status == EG91_INIT_RET_SIM_ERR) + { + sim_tmp = Eg91Obj.SimInfo.SimStatus; + if (sim_tmp == EG91_OPERATION_NOT_ALLOW) + { + ret = LTE_REGISTATUS_OP_NOT_ALLOWED; + } + else + { + ret = (LTE_Registatus_t) Eg91Obj.SimInfo.SimStatus; + } + } + else + { + ret = LTE_REGISTATUS_ERROR; /* Generic e.g. module does not respond to AT command */ + } + } + } + return ret; +} + +LTE_Ret_t LTE_GetSignalQualityStatus(int32_t *qValue) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + if (EG91_GetSignalQualityStatus(&Eg91Obj, qValue) == EG91_RETURN_OK) + { + ret = LTE_RET_OK; + } + return ret; +} + +LTE_Ret_t LTE_ListOperators(char *operator) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + if (EG91_ListOperators(&Eg91Obj, operator) == EG91_RETURN_OK) + { + ret = LTE_RET_OK; + } + return ret; +} + +LTE_Ret_t LTE_GetCurrentOperator (char *operator, int32_t bufSize) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + if (EG91_GetCurrentOperator(&Eg91Obj, operator, bufSize) == EG91_RETURN_OK) + { + ret = LTE_RET_OK; + } + return ret; +} + +LTE_Ret_t LTE_ForceOperator(int32_t code) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + if (EG91_ForceOperator(&Eg91Obj, code) == EG91_RETURN_OK) + { + ret = LTE_RET_OK; + } + return ret; +} + +LTE_Ret_t LTE_ConfigureAP(uint8_t contextType, const char *apn, const char *username, + const char *password, uint8_t authenticationMode) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + EG91_APConfig_t apConfig; + + apConfig.ContextID = LTE_CONTEXT_1; + strncpy((char *)apConfig.ApnString, (char *)apn, EG91_MAX_APN_NAME_SIZE); + strncpy((char *)apConfig.Username, (char *)username, EG91_MAX_USER_NAME_SIZE); + strncpy((char *)apConfig.Password, (char *)password, EG91_MAX_PSW_NAME_SIZE); + apConfig.Authentication = (EG91_Authent_t)authenticationMode; + + if (EG91_ConfigureAP(&Eg91Obj, &apConfig) == EG91_RETURN_OK) + { + ret = LTE_RET_OK; + } + return ret; +} + +LTE_Ret_t LTE_Connect(void) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + if (EG91_Activate(&Eg91Obj, LTE_CONTEXT_1) == EG91_RETURN_OK) + { + ret = LTE_RET_OK; + } + return ret; +} + +LTE_Ret_t LTE_Disconnect(void) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + if (EG91_Deactivate(&Eg91Obj, LTE_CONTEXT_1) == EG91_RETURN_OK) + { + ret = LTE_RET_OK; + } + return ret; +} + +LTE_APState_t LTE_isConnected(void) +{ + return (LTE_APState_t) EG91_IsActivated(&Eg91Obj, LTE_CONTEXT_1); +} + +LTE_Ret_t LTE_GetActiveIpAddress(char * ipAddrStr, uint8_t *ipAddrInt) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + if (EG91_GetActiveIpAddresses(&Eg91Obj, ipAddrStr, ipAddrInt) == LTE_RET_OK) + { + ret = LTE_RET_OK; + } + return ret; +} + +LTE_Ret_t LTE_Ping(char *address, uint16_t count, uint16_t timeout) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + if (EG91_Ping(&Eg91Obj,LTE_CONTEXT_1, address, count, timeout) == EG91_RETURN_OK) + { + ret = LTE_RET_OK; + } + return ret; +} + +LTE_Ret_t LTE_GetHostAddress(const char *address, uint8_t *ipaddr) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + if (EG91_DNS_LookUp(&Eg91Obj, LTE_CONTEXT_1, address, ipaddr) == EG91_RETURN_OK) + { + ret = LTE_RET_OK; + } + return ret; +} + +LTE_Ret_t LTE_StartClientConnection(uint32_t socket, LTE_Protocol_t type, const char *url, + uint8_t *ipaddr, uint16_t port, uint16_t local_port) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + char converted_ipaddr[16] = { 0 }; + EG91_Conn_t conn; + int random_number = 0; + + conn.ConnectID = socket; + conn.RemotePort = port; + +#ifdef ACCESS_MODE_DIRECT_PUSH + conn.AccessMode = EG91_DIRECT_PUSH; +#else + conn.AccessMode = EG91_BUFFER_MODE; +#endif + + if (local_port != 0) + { + conn.LocalPort = local_port; + } + else + { + if(rnglocalport == 0) + { + random_number = rand(); + rnglocalport = ((uint16_t)(random_number & 0xFFFF) >> 2) + 49152; + } + else + { + rnglocalport += 1; + } + + if (rnglocalport < 49152) /* Wrap around */ + { + rnglocalport = 49152; + } + conn.LocalPort = rnglocalport; + } + + switch (type) + { + case LTE_TCP_PROTOCOL: + conn.Type = EG91_TCP_CONNECTION; + break; + + case LTE_UDP_PROTOCOL: + conn.Type = EG91_UDP_CONNECTION; + break; + + default: + conn.Type = LTE_RET_NOT_SUPPORTED; + break; + } + + if (ret != LTE_RET_NOT_SUPPORTED) + { + if (url == NULL) + { + LTE_ConvertIpAddrToString(ipaddr, converted_ipaddr); + conn.Url = converted_ipaddr; + } + else + { + conn.Url = (char*)url; + } + + if (EG91_OpenClientConnection(&Eg91Obj, LTE_CONTEXT_1, &conn) == EG91_RETURN_OK) + { + ret = LTE_RET_OK; + } + } + return ret; +} + +LTE_Ret_t LTE_StopClientConnection(uint32_t socket) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + EG91_Conn_t conn; + + conn.ConnectID = socket; + if (EG91_CloseClientConnection(&Eg91Obj, &conn) == EG91_RETURN_OK) + { + ret = LTE_RET_OK; + } + return ret; +} + +LTE_Ret_t LTE_StartServerConnection(uint32_t socket, LTE_Protocol_t type, uint16_t port, uint16_t local_port) +{ + return LTE_RET_NOT_SUPPORTED; +} + +LTE_Ret_t LTE_StopServerConnection(uint32_t socket) +{ + return LTE_RET_NOT_SUPPORTED; +} + +LTE_SendStatus_t LTE_SendData(uint32_t socket, uint8_t *pdata, uint16_t reqLen, uint16_t *sentDataLen, uint32_t timeout) +{ + LTE_SendStatus_t ret = LTE_SEND_ERROR; + EG91_SendRet_t status; + + status = EG91_SendData(&Eg91Obj, socket, pdata, reqLen, sentDataLen, timeout); + if (status == EG91_SEND_RET_SENT) + { + ret = LTE_SEND_OK; + } else if (status == EG91_SEND_RET_BUF_FULL) + { + ret = LTE_SEND_BUF_FULL; + } + return ret; +} + +LTE_Ret_t LTE_ReceiveData(uint32_t socket, uint8_t *pdata, uint16_t reqLen, uint16_t *rcvDataLen, uint32_t timeout) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + EG91_ReceiveRet_t result; + + result = EG91_ReceiveData(&Eg91Obj, socket, pdata, reqLen, rcvDataLen, timeout); + if ((result == EG91_RECEIVE_RET_OK) || (result == EG91_RECEIVE_RET_INCOMPLETE)) + { + ret = LTE_RET_OK; + } + return ret; +} + +LTE_Ret_t LTE_RetrieveLastErrorDetails(char *errorStr) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + char errStr[EG91_ERROR_STRING_SIZE]; + + memset(errStr, 0, EG91_ERROR_STRING_SIZE); + if (EG91_RetrieveLastErrorDetails(&Eg91Obj, errStr) == EG91_RETURN_OK) + { + strncpy(errorStr, errStr, MIN(LTE_ERROR_STRING, EG91_ERROR_STRING_SIZE)); + ret = LTE_RET_OK; + } + return ret; +} + +LTE_Ret_t LTE_PowerOff(void) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + if (EG91_PowerDown(&Eg91Obj) == EG91_RETURN_OK) + { + ret = LTE_RET_OK; + } + return ret; +} + +LTE_Ret_t LTE_GetModuleFirmwareRevision(char *rev) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + if (Eg91Obj.FW_Rev != NULL) + { + strncpy(rev, (char*)Eg91Obj.FW_Rev, MIN(LTE_FW_REV_SIZE, EG91_FW_REV_SIZE)); + ret = LTE_RET_OK; + } + return ret; +} + +LTE_Ret_t LTE_GetModuleID(char *productId) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + if (Eg91Obj.ProductID != NULL) + { + strncpy(productId, (char*)Eg91Obj.ProductID, MIN(LTE_PROD_ID_SIZE, EG91_PROD_ID_SIZE)); + ret = LTE_RET_OK; + } + return ret; +} + +LTE_Ret_t LTE_GetModuleName(char *moduleName) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + if (Eg91Obj.Manufacturer != NULL) + { + strncpy(moduleName, (char*)Eg91Obj.Manufacturer, MIN(LTE_MAN_SIZE, EG91_MFC_SIZE)); + ret = LTE_RET_OK; + } + return ret; +} + +LTE_Ret_t LTE_GetSimId(char *simId) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + if (Eg91Obj.SimInfo.ICCID != NULL) + { + strncpy(simId, (char*)Eg91Obj.SimInfo.ICCID, MIN(LTE_ICCID_SIZE, EG91_ICCID_SIZE)); + ret = LTE_RET_OK; + } + return ret; +} + +LTE_Ret_t LTE_GetIMEI(char *imei) +{ + LTE_Ret_t ret = LTE_RET_ERROR; + if (Eg91Obj.Imei != NULL) + { + strncpy(imei, (char*)Eg91Obj.Imei, MIN(LTE_IMEI_SIZE, EG91_IMEI_SIZE)); + ret = LTE_RET_OK; + } + return ret; +} diff --git a/Core/Src/main.c b/Core/Src/main.c new file mode 100644 index 0000000..bd1e740 --- /dev/null +++ b/Core/Src/main.c @@ -0,0 +1,212 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "icache.h" +#include "usart.h" +#include "rtc.h" +#include "gpio.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +#include +#include "lte_comms.h" +/* USER CODE END Includes */ + +/* 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 ---------------------------------------------------------*/ + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_LPUART1_UART_Init(); + MX_USART1_UART_Init(); + MX_RTC_Init(); + MX_ICACHE_Init(); + /* USER CODE BEGIN 2 */ + + Network_Init(); + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + uint8_t counter = 0; + uint8_t shut_lte_off = 1; + while (1) + { + if (shut_lte_off == 1) + { + LTE_HardwarePowerDown(); + APP_LOG_MSG("LTE TEST DONE\r\n"); + shut_lte_off = 0; + } + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK) + { + Error_Handler(); + } + + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.HSEDiv = RCC_HSE_DIV1; + RCC_OscInitStruct.LSIState = RCC_LSI1_ON; + RCC_OscInitStruct.LSIDiv = RCC_LSI_DIV1; + RCC_OscInitStruct.PLL1.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL1.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL1.PLLM = 2; + RCC_OscInitStruct.PLL1.PLLN = 8; + RCC_OscInitStruct.PLL1.PLLP = 2; + RCC_OscInitStruct.PLL1.PLLQ = 2; + RCC_OscInitStruct.PLL1.PLLR = 2; + RCC_OscInitStruct.PLL1.PLLFractional = 0; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2 + |RCC_CLOCKTYPE_PCLK7|RCC_CLOCKTYPE_HCLK5; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + RCC_ClkInitStruct.APB7CLKDivider = RCC_HCLK_DIV1; + RCC_ClkInitStruct.AHB5_PLL1_CLKDivider = RCC_SYSCLK_PLL1_DIV2; + RCC_ClkInitStruct.AHB5_HSEHSI_CLKDivider = RCC_SYSCLK_HSEHSI_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) + { + Error_Handler(); + } +} + +/* USER CODE BEGIN 4 */ + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + __disable_irq(); + while (1) + { + } + /* USER CODE END Error_Handler_Debug */ +} +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t *file, uint32_t line) +{ + /* USER CODE BEGIN 6 */ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + /* USER CODE END 6 */ +} +#endif /* USE_FULL_ASSERT */ diff --git a/Core/Src/rtc.c b/Core/Src/rtc.c new file mode 100644 index 0000000..4bf92d1 --- /dev/null +++ b/Core/Src/rtc.c @@ -0,0 +1,125 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file rtc.c + * @brief This file provides code for the configuration + * of the RTC instances. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "rtc.h" + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +RTC_HandleTypeDef hrtc; + +/* RTC init function */ +void MX_RTC_Init(void) +{ + + /* USER CODE BEGIN RTC_Init 0 */ + + /* USER CODE END RTC_Init 0 */ + + RTC_PrivilegeStateTypeDef privilegeState = {0}; + + /* USER CODE BEGIN RTC_Init 1 */ + + /* USER CODE END RTC_Init 1 */ + + /** Initialize RTC Only + */ + hrtc.Instance = RTC; + hrtc.Init.HourFormat = RTC_HOURFORMAT_24; + hrtc.Init.AsynchPrediv = 127; + hrtc.Init.SynchPrediv = 255; + hrtc.Init.OutPut = RTC_OUTPUT_DISABLE; + hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE; + hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; + hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; + hrtc.Init.OutPutPullUp = RTC_OUTPUT_PULLUP_NONE; + hrtc.Init.BinMode = RTC_BINARY_NONE; + if (HAL_RTC_Init(&hrtc) != HAL_OK) + { + Error_Handler(); + } + privilegeState.rtcPrivilegeFull = RTC_PRIVILEGE_FULL_NO; + privilegeState.backupRegisterPrivZone = RTC_PRIVILEGE_BKUP_ZONE_NONE; + privilegeState.backupRegisterStartZone2 = RTC_BKP_DR0; + privilegeState.backupRegisterStartZone3 = RTC_BKP_DR0; + if (HAL_RTCEx_PrivilegeModeSet(&hrtc, &privilegeState) != HAL_OK) + { + Error_Handler(); + } + + /** Enable the WakeUp + */ + if (HAL_RTCEx_SetWakeUpTimer(&hrtc, 0, RTC_WAKEUPCLOCK_RTCCLK_DIV16) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN RTC_Init 2 */ + + /* USER CODE END RTC_Init 2 */ + +} + +void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle) +{ + + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + if(rtcHandle->Instance==RTC) + { + /* USER CODE BEGIN RTC_MspInit 0 */ + + /* USER CODE END RTC_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC; + PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSI; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } + + /* RTC clock enable */ + __HAL_RCC_RTCAPB_CLK_ENABLE(); + /* USER CODE BEGIN RTC_MspInit 1 */ + + /* USER CODE END RTC_MspInit 1 */ + } +} + +void HAL_RTC_MspDeInit(RTC_HandleTypeDef* rtcHandle) +{ + + if(rtcHandle->Instance==RTC) + { + /* USER CODE BEGIN RTC_MspDeInit 0 */ + + /* USER CODE END RTC_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_RTCAPB_CLK_DISABLE(); + /* USER CODE BEGIN RTC_MspDeInit 1 */ + + /* USER CODE END RTC_MspDeInit 1 */ + } +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/Core/Src/stm32wbaxx_hal_msp.c b/Core/Src/stm32wbaxx_hal_msp.c new file mode 100644 index 0000000..4fc6fcd --- /dev/null +++ b/Core/Src/stm32wbaxx_hal_msp.c @@ -0,0 +1,87 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32wbaxx_hal_msp.c + * @brief This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_RCC_HSEM_CLK_ENABLE(); + + /* System interrupt init*/ + + /* Peripheral interrupt init */ + /* HSEM_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(HSEM_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(HSEM_IRQn); + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/Core/Src/stm32wbaxx_it.c b/Core/Src/stm32wbaxx_it.c new file mode 100644 index 0000000..2d6da87 --- /dev/null +++ b/Core/Src/stm32wbaxx_it.c @@ -0,0 +1,232 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32wbaxx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32wbaxx_it.h" +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +#include "gpio.h" +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* External variables --------------------------------------------------------*/ +extern UART_HandleTypeDef huart1; +/* USER CODE BEGIN EV */ + +/* USER CODE END EV */ + +/******************************************************************************/ +/* Cortex Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + while (1) + { + } + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_HardFault_IRQn 0 */ + /* USER CODE END W1_HardFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ + /* USER CODE END W1_MemoryManagement_IRQn 0 */ + } +} + +/** + * @brief This function handles Prefetch fault, memory access fault. + */ +void BusFault_Handler(void) +{ + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_BusFault_IRQn 0 */ + /* USER CODE END W1_BusFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) +{ + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ + /* USER CODE END W1_UsageFault_IRQn 0 */ + } +} + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVCall_IRQn 0 */ + + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ + + /* USER CODE END SVCall_IRQn 1 */ +} + +/** + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) +{ + /* USER CODE BEGIN DebugMonitor_IRQn 0 */ + + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + + /* USER CODE END DebugMonitor_IRQn 1 */ +} + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + +/******************************************************************************/ +/* STM32WBAxx Peripheral Interrupt Handlers */ +/* Add here the Interrupt Handlers for the used peripherals. */ +/* For the available peripheral interrupt handler names, */ +/* please refer to the startup file (startup_stm32wbaxx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles USART1 global interrupt. + */ +void USART1_IRQHandler(void) +{ + /* USER CODE BEGIN USART1_IRQn 0 */ + HAL_GPIO_TogglePin(STATUS_LED_GPIO_Port, STATUS_LED_Pin); + /* USER CODE END USART1_IRQn 0 */ + HAL_UART_IRQHandler(&huart1); + /* USER CODE BEGIN USART1_IRQn 1 */ + + /* USER CODE END USART1_IRQn 1 */ +} + +/** + * @brief This function handles HSEM non-secure global interrupt. + */ +void HSEM_IRQHandler(void) +{ + /* USER CODE BEGIN HSEM_IRQn 0 */ + + /* USER CODE END HSEM_IRQn 0 */ + HAL_HSEM_IRQHandler(); + /* USER CODE BEGIN HSEM_IRQn 1 */ + + /* USER CODE END HSEM_IRQn 1 */ +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/Core/Src/system_stm32wbaxx.c b/Core/Src/system_stm32wbaxx.c new file mode 100644 index 0000000..ede3f75 --- /dev/null +++ b/Core/Src/system_stm32wbaxx.c @@ -0,0 +1,390 @@ +/** + ****************************************************************************** + * @file system_stm32wbaxx.c + * @author MCD Application Team + * @brief CMSIS Cortex-M33 Device Peripheral Access Layer System Source File + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2022 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + * This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32wbaxx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32wbaxx.s" file, to + * configure the system clock before to branch to main program. + * + * This file configures the system clock as follows: + *============================================================================= + *----------------------------------------------------------------------------- + * System Clock source | HSI + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 16000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 16000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 1 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 1 + *----------------------------------------------------------------------------- + * PLL1_SRC | No clock + *----------------------------------------------------------------------------- + * PLL1_M | 1 + *----------------------------------------------------------------------------- + * PLL1_N | 128 + *----------------------------------------------------------------------------- + * PLL1_P | 1 + *----------------------------------------------------------------------------- + * PLL1_Q | 1 + *----------------------------------------------------------------------------- + * PLL1_R | 1 + *----------------------------------------------------------------------------- + * Require 48MHz for | Disabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup STM32WBAxx_system + * @{ + */ + +/** @addtogroup STM32WBAxx_System_Private_Includes + * @{ + */ + +#include "stm32wbaxx.h" +#include + +/** + * @} + */ + +/** @addtogroup STM32WBAxx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32WBAxx_System_Private_Defines + * @{ + */ +#if !defined (HSE_VALUE) +#define HSE_VALUE (32000000U) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSI_VALUE) +#define HSI_VALUE (16000000U) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/*!< The VTOR location information is based on information from the linker with a dependency + on the IDE, the cortex register is updated using the INTVECT_START. +*/ +#if defined(__ICCARM__) +extern uint32_t __vector_table; +#define INTVECT_START ((uint32_t)& __vector_table) +#elif defined(__CC_ARM) || defined(__ARMCC_VERSION) +extern void * __Vectors; +#define INTVECT_START ((uint32_t) & __Vectors) +#elif defined(__GNUC__) +extern void * g_pfnVectors; +#define INTVECT_START ((uint32_t)& g_pfnVectors) +#endif /* __ICCARM__*/ + +/******************************************************************************/ + +/** + * @} + */ + +/** @addtogroup STM32WBAxx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32WBAxx_System_Private_Variables + * @{ + */ + /* The SystemCoreClock variable is updated in three ways: + 1) by calling CMSIS function SystemCoreClockUpdate() + 2) by calling HAL API function HAL_RCC_GetHCLKFreq() + 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency + Note: If you use this function to configure the system clock; then there + is no need to call the 2 first functions listed above, since SystemCoreClock + variable is updated automatically. + */ + uint32_t SystemCoreClock = 16000000U; /* The HSI16 is used as system clock source after startup from reset, configured at 16 MHz. */ + + const uint8_t AHBPrescTable[8] = {0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U}; + const uint8_t APBPrescTable[8] = {0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U}; + const uint8_t AHB5PrescTable[8] = {1U, 1U, 1U, 1U, 2U, 3U, 4U, 6U}; +/** + * @} + */ + +/** @addtogroup STM32WBAxx_System_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32WBAxx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system. + * @param None + * @retval None + */ + +void SystemInit(void) +{ +#if defined(STM32WBAXX_SI_CUT1_0) + __IO uint32_t timeout_cpu_cycles; +#endif +#if defined(STM32WBAXX_SI_CUT1_0) || defined (VREFBUF) + __IO uint32_t tmpreg; +#endif + + /* FPU settings ------------------------------------------------------------*/ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 20U)|(3UL << 22U)); /* set CP10 and CP11 Full Access */ +#endif + + /* Configure the Vector Table location -------------------------------------*/ + SCB->VTOR = INTVECT_START; + +#if defined(STM32WBAXX_SI_CUT1_0) + /* Work-around for ADC peripheral issue possibly impacting system + power consumption. + Refer to STM32WBA errata sheet item "HSI16 clock cannot be stopped when + used as kernel clock by ADC". + Actions: Perform a ADC activation sequence in order to update state + of internal signals. + */ + /* Enable ADC kernel clock */ + SET_BIT(RCC->AHB4ENR, RCC_AHB4ENR_ADC4EN); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->AHB4ENR, RCC_AHB4ENR_ADC4EN); + (void)tmpreg; + + /* Enable ADC */ + SET_BIT(ADC4->CR, ADC_CR_ADEN); + + /* Poll for ADC ready */ + /* Set timeout 2 ADC clock cycles */ + /* Note: Approximative computation and timeout execution not taking into + account processing CPU cycles */ + timeout_cpu_cycles = 2; + while (READ_BIT(ADC4->ISR, ADC_ISR_ADRDY) == 0U) + { + timeout_cpu_cycles--; + if(timeout_cpu_cycles == 0U) + { + break; + } + } + + /* Disable ADC */ + SET_BIT(ADC4->CR, ADC_CR_ADDIS); + + /* Poll for ADC disable is effective */ + /* Set timeout 6 ADC clock cycles */ + /* Note: Approximative computation and timeout execution not taking into + account processing CPU cycles */ + timeout_cpu_cycles = 6; + while (READ_BIT(ADC4->CR, ADC_CR_ADEN) != 0U) + { + timeout_cpu_cycles--; + if(timeout_cpu_cycles == 0U) + { + break; + } + } + + /* Disable ADC internal voltage regulator */ + CLEAR_BIT(ADC4->CR, ADC_CR_ADVREGEN); + + /* Disable ADC kernel clock */ + CLEAR_BIT(RCC->AHB4ENR, RCC_AHB4ENR_ADC4EN); +#endif + +#if defined (VREFBUF) + /* Work-around for VREFBUF peripheral issue. + Refer to STM32WBA errata sheet item "VREF BUFF cannot be trimmed by EngiBit". + Actions: Our SW copies the TRIM V11 (R1) in VREFBUF CCR (to guarantee the correct start + trim instead the current bad value 111111). + */ + /* Enable VREFBUF kernel clock */ + SET_BIT(RCC->APB7ENR, RCC_APB7ENR_VREFEN); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->APB7ENR, RCC_APB7ENR_VREFEN); + (void)tmpreg; + + /* Set TRIM V11 (R1) value */ + MODIFY_REG(VREFBUF->CCR, VREFBUF_CCR_TRIM, ((*(uint32_t *)(FLASH_ENGY_BASE + 0x2ABUL)) & 0x3FUL)); + + /* Disable VREFBUF kernel clock */ + CLEAR_BIT(RCC->APB7ENR, RCC_APB7ENR_VREFEN); +#endif /* VREFBUF */ +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(**) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(***) + * + * - If SYSCLK source is PLL1, SystemCoreClock will contain the HSE_VALUE(***) + * or HSI_VALUE(*) multiplied/divided by the PLL1 factors. + * + * (**) HSI_VALUE is a constant defined in STM32WBAxx_hal.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (***) HSE_VALUE is a constant defined in STM32WBAxx_hal.h file (default value + * 32 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp1; + uint32_t tmp2; + uint32_t pllsource; + uint32_t pllr; + uint32_t pllm; + uint32_t plln; + float_t fracn; + float_t pllvco; + + /* Get SYSCLK source -------------------------------------------------------*/ + switch (RCC->CFGR1 & RCC_CFGR1_SWS) + { + case RCC_CFGR1_SWS_1: /* HSE used as system clock source */ + SystemCoreClock = (HSE_VALUE >> ((RCC->CR & RCC_CR_HSEPRE) >> RCC_CR_HSEPRE_Pos)); + break; + + case (RCC_CFGR1_SWS_0 | RCC_CFGR1_SWS_1): /* PLL1 used as system clock source */ + /* PLL_VCO = (PLLsource / PLLM) * PLLN * FractionnalPart + SYSCLK = PLL_VCO / PLLR */ + /* Get PLL1 CFGR and DIVR register values */ + tmp1 = RCC->PLL1CFGR; + tmp2 = RCC->PLL1DIVR; + + /* Retrieve PLL1 multiplication factor and divider */ + pllm = ((tmp1 & RCC_PLL1CFGR_PLL1M) >> RCC_PLL1CFGR_PLL1M_Pos) + 1U; + plln = (tmp2 & RCC_PLL1DIVR_PLL1N) + 1U; + pllr = ((tmp2 & RCC_PLL1DIVR_PLL1R) >> RCC_PLL1DIVR_PLL1R_Pos) + 1U; + + /* Check if fractional part is enable */ + if ((tmp1 & RCC_PLL1CFGR_PLL1FRACEN) != 0x00u) + { + fracn = (float_t)((uint32_t)((RCC->PLL1FRACR & RCC_PLL1FRACR_PLL1FRACN) >> RCC_PLL1FRACR_PLL1FRACN_Pos)); + } + else + { + fracn = (float_t)0U; + } + + /* determine PLL source */ + pllsource = (tmp1 & RCC_PLL1CFGR_PLL1SRC); + switch (pllsource) + { + /* HSI used as PLL1 clock source */ + case RCC_PLL1CFGR_PLL1SRC_1: + tmp1 = HSI_VALUE; + break; + + /* HSE used as PLL1 clock source */ + case (RCC_PLL1CFGR_PLL1SRC_0 | RCC_PLL1CFGR_PLL1SRC_1): + tmp1 = (HSE_VALUE >> ((RCC->CR & RCC_CR_HSEPRE) >> RCC_CR_HSEPRE_Pos)); + break; + + default: + tmp1 = 0U; + break; + } + + /* Compute VCO output frequency */ + pllvco = ((float_t) tmp1 / (float_t)pllm) * (((float_t)plln + (float_t)(fracn / (float_t)0x2000U))); + SystemCoreClock = (uint32_t)((float_t)(pllvco / (float_t)pllr)); + break; + + case 0x00u: /* HSI used as system clock source */ + default: + SystemCoreClock = HSI_VALUE; + break; + } + + /* Compute HCLK clock frequency --------------------------------------------*/ + /* Get HCLK prescaler */ + tmp1 = AHBPrescTable[(RCC->CFGR2 & RCC_CFGR2_HPRE)]; + + /* HCLK clock frequency */ + SystemCoreClock >>= tmp1; +} + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ diff --git a/Core/Src/usart.c b/Core/Src/usart.c new file mode 100644 index 0000000..f724cc4 --- /dev/null +++ b/Core/Src/usart.c @@ -0,0 +1,394 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file usart.c + * @brief This file provides code for the configuration + * of the USART instances. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "usart.h" + +/* USER CODE BEGIN 0 */ +#include + +#define RING_BUFFER_SIZE 1500 +#define UART_RX_BUF_SIZE 128 + +typedef struct +{ + uint8_t data[RING_BUFFER_SIZE]; + uint16_t tail; + uint16_t head; +} ringbuffer_t; + +ringbuffer_t UART_RxData; + +uint8_t UART1_RxByte; // For single-byte interrupt reception +uint8_t UART1_RxBuffer[UART_RX_BUF_SIZE]; // Circular or linear buffer +volatile uint16_t uart1_rx_index = 0; +volatile bool uart1_msg_ready = false; +/* USER CODE END 0 */ + +UART_HandleTypeDef hlpuart1; +UART_HandleTypeDef huart1; + +/* LPUART1 init function */ + +void MX_LPUART1_UART_Init(void) +{ + + /* USER CODE BEGIN LPUART1_Init 0 */ + + /* USER CODE END LPUART1_Init 0 */ + + /* USER CODE BEGIN LPUART1_Init 1 */ + + /* USER CODE END LPUART1_Init 1 */ + hlpuart1.Instance = LPUART1; + hlpuart1.Init.BaudRate = 115200; + hlpuart1.Init.WordLength = UART_WORDLENGTH_8B; + hlpuart1.Init.StopBits = UART_STOPBITS_1; + hlpuart1.Init.Parity = UART_PARITY_NONE; + hlpuart1.Init.Mode = UART_MODE_TX_RX; + hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + hlpuart1.Init.ClockPrescaler = UART_PRESCALER_DIV1; + hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + hlpuart1.FifoMode = UART_FIFOMODE_DISABLE; + if (HAL_UART_Init(&hlpuart1) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetTxFifoThreshold(&hlpuart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetRxFifoThreshold(&hlpuart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_DisableFifoMode(&hlpuart1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN LPUART1_Init 2 */ + + /* USER CODE END LPUART1_Init 2 */ + +} +/* USART1 init function */ + +void MX_USART1_UART_Init(void) +{ + + /* USER CODE BEGIN USART1_Init 0 */ + + /* USER CODE END USART1_Init 0 */ + + /* USER CODE BEGIN USART1_Init 1 */ + + /* USER CODE END USART1_Init 1 */ + huart1.Instance = USART1; + huart1.Init.BaudRate = 115200; + huart1.Init.WordLength = UART_WORDLENGTH_8B; + huart1.Init.StopBits = UART_STOPBITS_1; + huart1.Init.Parity = UART_PARITY_NONE; + huart1.Init.Mode = UART_MODE_TX_RX; + huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart1.Init.OverSampling = UART_OVERSAMPLING_16; + huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1; + huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart1) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART1_Init 2 */ + + UART_RxData.head = 0; + UART_RxData.tail = 0; + + HAL_UART_Receive_IT(&huart1, (uint8_t*)&UART_RxData.data[UART_RxData.tail], 1); + /* USER CODE END USART1_Init 2 */ + +} + +void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + if(uartHandle->Instance==LPUART1) + { + /* USER CODE BEGIN LPUART1_MspInit 0 */ + + /* USER CODE END LPUART1_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LPUART1; + PeriphClkInit.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_PCLK7; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } + + /* LPUART1 clock enable */ + __HAL_RCC_LPUART1_CLK_ENABLE(); + + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**LPUART1 GPIO Configuration + PB11 ------> LPUART1_TX + PA10 ------> LPUART1_RX + */ + GPIO_InitStruct.Pin = DEBUG_TX_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF8_LPUART1; + HAL_GPIO_Init(DEBUG_TX_GPIO_Port, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = DEBUG_RX_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF8_LPUART1; + HAL_GPIO_Init(DEBUG_RX_GPIO_Port, &GPIO_InitStruct); + + /* USER CODE BEGIN LPUART1_MspInit 1 */ + + /* USER CODE END LPUART1_MspInit 1 */ + } + else if(uartHandle->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1; + PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } + + /* USART1 clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART1 GPIO Configuration + PB12 ------> USART1_TX + PA8 ------> USART1_RX + */ + GPIO_InitStruct.Pin = LTE_TX_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF7_USART1; + HAL_GPIO_Init(LTE_TX_GPIO_Port, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = LTE_RX_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF7_USART1; + HAL_GPIO_Init(LTE_RX_GPIO_Port, &GPIO_InitStruct); + + /* USART1 interrupt Init */ + HAL_NVIC_SetPriority(USART1_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(USART1_IRQn); + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_MspInit 1 */ + } +} + +void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) +{ + + if(uartHandle->Instance==LPUART1) + { + /* USER CODE BEGIN LPUART1_MspDeInit 0 */ + + /* USER CODE END LPUART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_LPUART1_CLK_DISABLE(); + + /**LPUART1 GPIO Configuration + PB11 ------> LPUART1_TX + PA10 ------> LPUART1_RX + */ + HAL_GPIO_DeInit(DEBUG_TX_GPIO_Port, DEBUG_TX_Pin); + + HAL_GPIO_DeInit(DEBUG_RX_GPIO_Port, DEBUG_RX_Pin); + + /* USER CODE BEGIN LPUART1_MspDeInit 1 */ + + /* USER CODE END LPUART1_MspDeInit 1 */ + } + else if(uartHandle->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspDeInit 0 */ + + /* USER CODE END USART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART1_CLK_DISABLE(); + + /**USART1 GPIO Configuration + PB12 ------> USART1_TX + PA8 ------> USART1_RX + */ + HAL_GPIO_DeInit(LTE_TX_GPIO_Port, LTE_TX_Pin); + + HAL_GPIO_DeInit(LTE_RX_GPIO_Port, LTE_RX_Pin); + + /* USART1 interrupt Deinit */ + HAL_NVIC_DisableIRQ(USART1_IRQn); + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 1 */ + } +} + +/* USER CODE BEGIN 1 */ +int8_t LTE_UART_SetBaudrate(uint32_t baudrate) +{ + HAL_UART_DeInit(&huart1); + huart1.Init.BaudRate = baudrate; + if (HAL_UART_Init(&huart1) != HAL_OK) + { + return -1; + } + + UART_RxData.head = 0; + UART_RxData.tail = 0; + + HAL_UART_Receive_IT(&huart1, (uint8_t *)&UART_RxData.data[UART_RxData.tail], 1); + return 0; +} + +void LTE_UART_FlushBuffer(void) +{ + memset(UART_RxData.data, 0, RING_BUFFER_SIZE); + UART_RxData.head = 0; + UART_RxData.tail = 0; +} + +int16_t LTE_UART_SendData(uint8_t *pData, uint16_t length) +{ + if(HAL_UART_Transmit(&huart1, (uint8_t*)pData, length, HAL_MAX_DELAY) != HAL_OK) + { + return -1; + } + return 0; +} + +int16_t LTE_UART_ReceiveSingleData(uint8_t *pSingleData) +{ + if (UART_RxData.head != UART_RxData.tail) + { + *pSingleData = UART_RxData.data[UART_RxData.head++]; + + if (UART_RxData.head >= RING_BUFFER_SIZE) + { + UART_RxData.head = 0; + } + } else + { + return -1; + } + + return 0; +} + +void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) +{ + if (++UART_RxData.tail >= RING_BUFFER_SIZE) + { + UART_RxData.tail = 0; + } + HAL_UART_Receive_IT(huart, (uint8_t*) &UART_RxData.data[UART_RxData.tail], 1); +} + +#pragma module_name = "?__write" + +size_t __write(int handle, const unsigned char *buffer, size_t size) +{ + if (handle != _LLIO_STDOUT && handle != _LLIO_STDERR) + return _LLIO_ERROR; + + for (size_t i = 0; i < size; ++i) + { + HAL_UART_Transmit(&hlpuart1, (uint8_t *)&buffer[i], 1, HAL_MAX_DELAY); + } + + return size; +} + +void LTE_ATSendCommand(const char *cmd) +{ + HAL_UART_Transmit(&huart1, (uint8_t *)cmd, strlen(cmd), 1000); +} + +/* For Testing Purposes ONLY */ +void LTE_SendATCommand_Test(void) +{ + const char *cmd = "AT\r\n"; + uint8_t rx_byte; + uint8_t rx_buff[100] = {0}; + int idx = 0; + uint32_t startTick; + + // Transmit AT Command + if (HAL_UART_Transmit(&huart1, (uint8_t *)cmd, strlen(cmd), 1000) != HAL_OK) + { + APP_ERROR_MSG("UART TX Failed\r\n"); + return; + } + + // Wait and read each byte until timeout or buffer full + startTick = HAL_GetTick(); + while ((HAL_GetTick() - startTick) < 1000 && idx < sizeof(rx_buff) - 1) + { + if (HAL_UART_Receive(&huart1, &rx_byte, 1, 10) == HAL_OK) + { + rx_buff[idx++] = rx_byte; + + // Reset timeout if still receiving + startTick = HAL_GetTick(); + } + } + + rx_buff[idx] = '\0'; // Null-terminate the received string + + APP_LTE_MSG(" %s\r\n", rx_buff); +} +/* USER CODE END 1 */ diff --git a/EWARM/Backup of WiseEye-LTE.ewd b/EWARM/Backup of WiseEye-LTE.ewd new file mode 100644 index 0000000..85f1b3c --- /dev/null +++ b/EWARM/Backup of WiseEye-LTE.ewd @@ -0,0 +1,1534 @@ + + + 3 + + WiseEye-LTE + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/EWARM/Backup of WiseEye-LTE.ewp b/EWARM/Backup of WiseEye-LTE.ewp new file mode 100644 index 0000000..92e3aec --- /dev/null +++ b/EWARM/Backup of WiseEye-LTE.ewp @@ -0,0 +1,1166 @@ + + + 3 + + WiseEye-LTE + + ARM + + 1 + + General + 3 + + 34 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + Coder + 0 + + + + + Application + + EWARM + + $PROJ_DIR$/startup_stm32wba52xx.s + + + + User + + Core + + $PROJ_DIR$/../Core/Src/main.c + + + $PROJ_DIR$/../Core/Src/gpio.c + + + $PROJ_DIR$/../Core/Src/icache.c + + + $PROJ_DIR$/../Core/Src/usart.c + + + $PROJ_DIR$/../Core/Src/stm32wbaxx_it.c + + + $PROJ_DIR$/../Core/Src/stm32wbaxx_hal_msp.c + + + + + + Drivers + + STM32WBAxx_HAL_Driver + + C:/Users/Admin/STM32Cube/Repository/STM32Cube_FW_WBA_V1.7.0/Drivers/STM32WBAxx_HAL_Driver/Src/stm32wbaxx_hal_cortex.c + + + C:/Users/Admin/STM32Cube/Repository/STM32Cube_FW_WBA_V1.7.0/Drivers/STM32WBAxx_HAL_Driver/Src/stm32wbaxx_hal_icache.c + + + C:/Users/Admin/STM32Cube/Repository/STM32Cube_FW_WBA_V1.7.0/Drivers/STM32WBAxx_HAL_Driver/Src/stm32wbaxx_hal.c + + + C:/Users/Admin/STM32Cube/Repository/STM32Cube_FW_WBA_V1.7.0/Drivers/STM32WBAxx_HAL_Driver/Src/stm32wbaxx_hal_rcc.c + + + C:/Users/Admin/STM32Cube/Repository/STM32Cube_FW_WBA_V1.7.0/Drivers/STM32WBAxx_HAL_Driver/Src/stm32wbaxx_hal_rcc_ex.c + + + C:/Users/Admin/STM32Cube/Repository/STM32Cube_FW_WBA_V1.7.0/Drivers/STM32WBAxx_HAL_Driver/Src/stm32wbaxx_hal_flash.c + + + C:/Users/Admin/STM32Cube/Repository/STM32Cube_FW_WBA_V1.7.0/Drivers/STM32WBAxx_HAL_Driver/Src/stm32wbaxx_hal_flash_ex.c + + + C:/Users/Admin/STM32Cube/Repository/STM32Cube_FW_WBA_V1.7.0/Drivers/STM32WBAxx_HAL_Driver/Src/stm32wbaxx_hal_gpio.c + + + C:/Users/Admin/STM32Cube/Repository/STM32Cube_FW_WBA_V1.7.0/Drivers/STM32WBAxx_HAL_Driver/Src/stm32wbaxx_hal_dma.c + + + C:/Users/Admin/STM32Cube/Repository/STM32Cube_FW_WBA_V1.7.0/Drivers/STM32WBAxx_HAL_Driver/Src/stm32wbaxx_hal_dma_ex.c + + + C:/Users/Admin/STM32Cube/Repository/STM32Cube_FW_WBA_V1.7.0/Drivers/STM32WBAxx_HAL_Driver/Src/stm32wbaxx_hal_exti.c + + + C:/Users/Admin/STM32Cube/Repository/STM32Cube_FW_WBA_V1.7.0/Drivers/STM32WBAxx_HAL_Driver/Src/stm32wbaxx_hal_pwr.c + + + C:/Users/Admin/STM32Cube/Repository/STM32Cube_FW_WBA_V1.7.0/Drivers/STM32WBAxx_HAL_Driver/Src/stm32wbaxx_hal_pwr_ex.c + + + C:/Users/Admin/STM32Cube/Repository/STM32Cube_FW_WBA_V1.7.0/Drivers/STM32WBAxx_HAL_Driver/Src/stm32wbaxx_hal_uart.c + + + C:/Users/Admin/STM32Cube/Repository/STM32Cube_FW_WBA_V1.7.0/Drivers/STM32WBAxx_HAL_Driver/Src/stm32wbaxx_hal_uart_ex.c + + + + CMSIS + + $PROJ_DIR$/../Core/Src/system_stm32wbaxx.c + + + + + diff --git a/EWARM/Backup of WiseEye-LTE.ewt b/EWARM/Backup of WiseEye-LTE.ewt new file mode 100644 index 0000000..16fa6ce --- /dev/null +++ b/EWARM/Backup of WiseEye-LTE.ewt @@ -0,0 +1,1519 @@ + + + 4 + + WiseEye-LTE + + ARM + + 1 + + C-STAT + 517 + + 517 + + 0 + + 1 + 600 + 1 + 10 + 0 + 1 + 100 + WiseEye-LTE/C-STAT + + + 2.5.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RuntimeChecking + 0 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + Application + + EWARM + + $PROJ_DIR$\startup_stm32wba52xx.s + + + + User + + Core + + $PROJ_DIR$\..\Core\Src\gpio.c + + + $PROJ_DIR$\..\Core\Src\icache.c + + + $PROJ_DIR$\..\Core\Src\main.c + + + $PROJ_DIR$\..\Core\Src\stm32wbaxx_hal_msp.c + + + $PROJ_DIR$\..\Core\Src\stm32wbaxx_it.c + + + $PROJ_DIR$\..\Core\Src\usart.c + + + + + + Drivers + + CMSIS + + $PROJ_DIR$\..\Core\Src\system_stm32wbaxx.c + + + + STM32WBAxx_HAL_Driver + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_cortex.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_dma.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_dma_ex.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_exti.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_flash.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_flash_ex.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_gpio.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_icache.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_pwr.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_pwr_ex.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rcc.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rcc_ex.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_uart.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_uart_ex.c + + + + diff --git a/EWARM/Project.eww b/EWARM/Project.eww new file mode 100644 index 0000000..54f196f --- /dev/null +++ b/EWARM/Project.eww @@ -0,0 +1,7 @@ + + + + $WS_DIR$\WiseEye-LTE.ewp + + + diff --git a/EWARM/WiseEye-LTE.ewd b/EWARM/WiseEye-LTE.ewd new file mode 100644 index 0000000..226b4c4 --- /dev/null +++ b/EWARM/WiseEye-LTE.ewd @@ -0,0 +1,1615 @@ + + + 4 + + WiseEye-LTE + + ARM + + 1 + + C-SPY + 2 + + 33 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + E2_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9a.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/EWARM/WiseEye-LTE.ewp b/EWARM/WiseEye-LTE.ewp new file mode 100644 index 0000000..7f50d78 --- /dev/null +++ b/EWARM/WiseEye-LTE.ewp @@ -0,0 +1,1206 @@ + + + 4 + + WiseEye-LTE + + ARM + + 1 + + General + 3 + + 36 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 38 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 12 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BUILDACTION + 2 + + + + Coder + 0 + + + + + Application + + EWARM + + $PROJ_DIR$\startup_stm32wba52xx.s + + + + User + + Core + + $PROJ_DIR$\..\Core\Src\eg91.c + + + $PROJ_DIR$\..\Core\Src\gpio.c + + + $PROJ_DIR$\..\Core\Src\icache.c + + + $PROJ_DIR$\..\Core\Src\lte_comms.c + + + $PROJ_DIR$\..\Core\Src\main.c + + + $PROJ_DIR$\..\Core\Src\rtc.c + + + $PROJ_DIR$\..\Core\Src\stm32wbaxx_hal_msp.c + + + $PROJ_DIR$\..\Core\Src\stm32wbaxx_it.c + + + $PROJ_DIR$\..\Core\Src\usart.c + + + + + + Drivers + + CMSIS + + $PROJ_DIR$\..\Core\Src\system_stm32wbaxx.c + + + + STM32WBAxx_HAL_Driver + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_cortex.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_dma.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_dma_ex.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_exti.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_flash.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_flash_ex.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_gpio.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_hsem.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_icache.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_pwr.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_pwr_ex.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rcc.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rcc_ex.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rtc.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rtc_ex.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_uart.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_uart_ex.c + + + + diff --git a/EWARM/WiseEye-LTE.ewt b/EWARM/WiseEye-LTE.ewt new file mode 100644 index 0000000..fdd0820 --- /dev/null +++ b/EWARM/WiseEye-LTE.ewt @@ -0,0 +1,1537 @@ + + + 4 + + WiseEye-LTE + + ARM + + 1 + + C-STAT + 517 + + 517 + + 0 + + 1 + 600 + 1 + 10 + 0 + 1 + 100 + WiseEye-LTE/C-STAT + + + 2.5.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RuntimeChecking + 0 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + Application + + EWARM + + $PROJ_DIR$\startup_stm32wba52xx.s + + + + User + + Core + + $PROJ_DIR$\..\Core\Src\eg91.c + + + $PROJ_DIR$\..\Core\Src\gpio.c + + + $PROJ_DIR$\..\Core\Src\icache.c + + + $PROJ_DIR$\..\Core\Src\lte_comms.c + + + $PROJ_DIR$\..\Core\Src\main.c + + + $PROJ_DIR$\..\Core\Src\rtc.c + + + $PROJ_DIR$\..\Core\Src\stm32wbaxx_hal_msp.c + + + $PROJ_DIR$\..\Core\Src\stm32wbaxx_it.c + + + $PROJ_DIR$\..\Core\Src\usart.c + + + + + + Drivers + + CMSIS + + $PROJ_DIR$\..\Core\Src\system_stm32wbaxx.c + + + + STM32WBAxx_HAL_Driver + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_cortex.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_dma.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_dma_ex.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_exti.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_flash.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_flash_ex.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_gpio.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_hsem.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_icache.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_pwr.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_pwr_ex.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rcc.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rcc_ex.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rtc.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_rtc_ex.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_uart.c + + + $PROJ_DIR$\..\..\..\..\..\..\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Drivers\STM32WBAxx_HAL_Driver\Src\stm32wbaxx_hal_uart_ex.c + + + + diff --git a/EWARM/WiseEye-LTE/.WiseEye-LTE_build_cache b/EWARM/WiseEye-LTE/.WiseEye-LTE_build_cache new file mode 100644 index 0000000..45adb10 --- /dev/null +++ b/EWARM/WiseEye-LTE/.WiseEye-LTE_build_cache @@ -0,0 +1,12 @@ + + + + linker + + C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Exe\WiseEye-LTE.out + + C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\List\WiseEye-LTE.map + + + + diff --git a/EWARM/WiseEye-LTE/.ninja_deps b/EWARM/WiseEye-LTE/.ninja_deps new file mode 100644 index 0000000..016ac7c Binary files /dev/null and b/EWARM/WiseEye-LTE/.ninja_deps differ diff --git a/EWARM/WiseEye-LTE/.ninja_log b/EWARM/WiseEye-LTE/.ninja_log new file mode 100644 index 0000000..11543e5 --- /dev/null +++ b/EWARM/WiseEye-LTE/.ninja_log @@ -0,0 +1,94 @@ +# ninja log v5 +913 1359 7757315760265676 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/main.o d7bb6238eda97835 +25 332 7757315750015898 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/stm32wbaxx_it.o b1492b16968ccb3a +17 484 7757315751316791 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/usart.o fc760e94c1ec22d6 +362 909 7757315755758306 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_gpio.o d8794485a89ad2f +14 307 7757315749815823 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/CMSIS_6603591812247902717.dir/system_stm32wbaxx.o 3515f0d237f25ee1 +860 1250 7757315759040405 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/icache.o e5fc2cc393d04836 +488 1035 7757315756945716 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_pwr_ex.o d67c119bfda1211b +7 357 7757315750225023 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/gpio.o 106e1b368ea961f6 +850 1217 7757315758891650 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/stm32wbaxx_hal_msp.o 22404d930743ee6d +20 455 7757315751154916 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal.o 2bba1bc5ffab2df8 +1253 1282 7757315759666926 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/EWARM_18443280873093131863.dir/startup_stm32wba52xx.o 980d1ae4b050ec79 +336 856 7757315755117837 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_exti.o 7d767c0d10691ecd +10 394 7757315750663175 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_cortex.o 3de086e6b4548ee2 +35 444 7757315751113968 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_flash.o 737b74d2ab05fc2f +448 954 7757315756143436 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_icache.o e8f7a6841210f89c +458 983 7757315756237054 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_pwr.o a13a8cf6c7fd9ba5 +310 996 7757315756495286 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_flash_ex.o 784741301e8d236e +30 808 7757315754780026 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_dma.o bb545f39d3ef5f89 +1244 1884 7757315765514679 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_rcc_ex.o 36810b1623d15a67 +1285 1888 7757315765534765 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_uart_ex.o ca08aa8c8f1e31a2 +988 2079 7757315767519955 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_rcc.o 14ef3783a91bbc4e +3231 3251 7757315779337033 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Exe/WiseEye-LTE.hex 39975d729c88188e +40 1735 7757315764023161 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_dma_ex.o 8a76874fecc684f0 +1222 3087 7757315777561982 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_uart.o 41c927090a97bf66 +3092 3228 7757315779017690 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Exe/WiseEye-LTE.out 67e126dbefc696f +812 1239 7757315758996926 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/rtc.o c6ac9732a0803d21 +397 847 7757315755117837 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_hsem.o 778dcbb8e1aa00ca +1001 1833 7757315765048275 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_rtc.o da179d1fd6bd206c +1041 2017 7757315766868318 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_rtc_ex.o d8c2edea8f75509c +2 1476 7757315761417737 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/eg91.o 238ab17cd6d129e4 +958 1787 7757315764596475 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/lte_comms.o 2b72a3fbf43401b8 +28 1783 7757317473875002 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal.o 2bba1bc5ffab2df8 +16 1970 7757317475721387 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/stm32wbaxx_it.o b1492b16968ccb3a +20 2023 7757317476321785 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_cortex.o 3de086e6b4548ee2 +24 2034 7757317476367025 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/CMSIS_6603591812247902717.dir/system_stm32wbaxx.o 3515f0d237f25ee1 +10 2064 7757317476621991 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/gpio.o 106e1b368ea961f6 +12 2093 7757317476823301 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/usart.o fc760e94c1ec22d6 +36 2163 7757317477652192 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_exti.o 7d767c0d10691ecd +1787 2250 7757317478542119 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_flash.o 737b74d2ab05fc2f +40 2409 7757317480174383 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_dma.o bb545f39d3ef5f89 +2070 2461 7757317480652165 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_hsem.o 778dcbb8e1aa00ca +2039 2499 7757317481016294 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_pwr_ex.o d67c119bfda1211b +2028 2518 7757317481121226 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_pwr.o a13a8cf6c7fd9ba5 +2097 2582 7757317481872127 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_gpio.o d8794485a89ad2f +2167 2613 7757317482122049 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_icache.o e8f7a6841210f89c +1974 2647 7757317482325324 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_flash_ex.o 784741301e8d236e +2254 2657 7757317482275617 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/stm32wbaxx_hal_msp.o 22404d930743ee6d +2413 2789 7757317483993572 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/icache.o e5fc2cc393d04836 +2 2800 7757317483925500 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/eg91.o 238ab17cd6d129e4 +2805 2830 7757317484521828 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/EWARM_18443280873093131863.dir/startup_stm32wba52xx.o 980d1ae4b050ec79 +2466 2858 7757317484620720 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/rtc.o c6ac9732a0803d21 +2522 2882 7757317484848330 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/main.o d7bb6238eda97835 +31 3141 7757317487430019 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_dma_ex.o 8a76874fecc684f0 +2502 3219 7757317488275783 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/lte_comms.o 2b72a3fbf43401b8 +2624 3259 7757317488651231 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_rcc_ex.o 36810b1623d15a67 +2586 3352 7757317489621454 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_rtc.o da179d1fd6bd206c +2834 3376 7757317489873496 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_uart_ex.o ca08aa8c8f1e31a2 +2662 3507 7757317491125792 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_rtc_ex.o d8c2edea8f75509c +2793 3731 7757317493372244 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_rcc.o 14ef3783a91bbc4e +2651 4446 7757317500430692 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_uart.o 41c927090a97bf66 +4452 4579 7757317501925662 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Exe/WiseEye-LTE.out 67e126dbefc696f +4586 4603 7757317502279565 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Exe/WiseEye-LTE.hex 39975d729c88188e +19 329 7757319035449612 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/CMSIS_6603591812247902717.dir/system_stm32wbaxx.o 3515f0d237f25ee1 +26 356 7757319035643378 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/stm32wbaxx_it.o b1492b16968ccb3a +2 403 7757319036209637 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/gpio.o 106e1b368ea961f6 +22 452 7757319036689535 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_cortex.o 3de086e6b4548ee2 +12 479 7757319036831411 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal.o 2bba1bc5ffab2df8 +36 500 7757319037048963 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_flash.o 737b74d2ab05fc2f +14 553 7757319037739826 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/usart.o fc760e94c1ec22d6 +41 843 7757319040604345 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_dma.o bb545f39d3ef5f89 +455 873 7757319040761952 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_hsem.o 778dcbb8e1aa00ca +407 902 7757319041081491 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_pwr_ex.o d67c119bfda1211b +360 912 7757319041081491 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_exti.o 7d767c0d10691ecd +483 935 7757319041262507 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_icache.o e8f7a6841210f89c +504 1006 7757319041774557 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_pwr.o a13a8cf6c7fd9ba5 +332 1017 7757319042127579 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_flash_ex.o 784741301e8d236e +557 1089 7757319043088905 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_gpio.o d8794485a89ad2f +847 1234 7757319044492289 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/icache.o e5fc2cc393d04836 +943 1310 7757319045249180 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/stm32wbaxx_hal_msp.o 22404d930743ee6d +916 1320 7757319045266692 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/rtc.o c6ac9732a0803d21 +907 1343 7757319045388669 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/main.o d7bb6238eda97835 +1346 1373 7757319046051894 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/EWARM_18443280873093131863.dir/startup_stm32wba52xx.o 980d1ae4b050ec79 +9 1458 7757319046688067 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/eg91.o 238ab17cd6d129e4 +1010 1639 7757319048564776 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_rcc_ex.o 36810b1623d15a67 +877 1644 7757319048564776 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/Core_13247989168731456611.dir/lte_comms.o 2b72a3fbf43401b8 +31 1721 7757319049392531 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_dma_ex.o 8a76874fecc684f0 +1022 1807 7757319050231883 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_rtc.o da179d1fd6bd206c +1325 1897 7757319051132476 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_uart_ex.o ca08aa8c8f1e31a2 +1093 1982 7757319051962711 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_rtc_ex.o d8c2edea8f75509c +1314 2299 7757319055131708 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_rcc.o 14ef3783a91bbc4e +1238 3036 7757319062434339 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Obj/STM32WBAxx_HAL_Driver_814230103969653557.dir/stm32wbaxx_hal_uart.o 41c927090a97bf66 +3042 3170 7757319063851900 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Exe/WiseEye-LTE.out 67e126dbefc696f +3180 3199 7757319064330718 C:/Users/Admin/Documents/.Projects/7. Cellular Relay Controller/LTE-Code/WiseEye-LTE/EWARM/WiseEye-LTE/Exe/WiseEye-LTE.hex 39975d729c88188e diff --git a/EWARM/WiseEye-LTE/Exe/WiseEye-LTE.hex b/EWARM/WiseEye-LTE/Exe/WiseEye-LTE.hex new file mode 100644 index 0000000..6252481 --- /dev/null +++ b/EWARM/WiseEye-LTE/Exe/WiseEye-LTE.hex @@ -0,0 +1,1553 @@ +:020000040800F2 +:10000000D80E0020615F00088D5D00088F5D00083C +:10001000915D0008935D0008955D0008795F000818 +:10002000000000000000000000000000975D0008D4 +:10003000995D0008000000009B5D00089D5D0008C0 +:100040007D5F0008815F0008855F0008895F000808 +:100050008D5F0008915F0008955F0008995F0008B8 +:100060009D5F0008A15F0008A55F0008A95F000868 +:10007000AD5F0008B15F0008B55F0008B95F000818 +:10008000BD5F0008C15F0008C55F0008C95F0008C8 +:10009000CD5F0008D15F0008D55F0008D95F000878 +:1000A000DD5F0008E15F0008E55F0008E95F000828 +:1000B000ED5F0008F15F0008F55F0008F95F0008D8 +:1000C000FD5F000801600008056000080960000885 +:1000D0000D60000811600008156000081960000834 +:1000E0001D600008216000082560000829600008E4 +:1000F0002D60000831600008A15D0008356000082F +:10010000396000083D600008416000084560000853 +:1001100049600008000000004D60000851600008C0 +:100120000000000055600008596000085D6000088C +:100130006160000865600008696000086D60000883 +:100140007160000875600008796000087D60000833 +:10015000BD5D0008816000088560000840F0200057 +:1001600070472DE9F14FB0B0924604910DF1420174 +:100170003A9A2B9199464A7000200AE01AF8011B1E +:100180000498309A90470028049000F041860D981A +:10019000401C0D909AF8000050B12528EED10021A6 +:1001A00000220791089209910A920B910C9204E0A7 +:1001B0000D9800F02FBE41F001011AF8010F202820 +:1001C000F9D023280CD02B2804D02D2805D0302896 +:1001D00009D00BE041F00201EFE741F00401ECE748 +:1001E00041F00801E9E741F01001E6E72A280FD1C4 +:1001F000D9F8002052F8040BC9F8002000280F900D +:1002000003D540420F9041F004010AF1010A14E0C5 +:100210000F92DFF8083C0AE00F98984205DA00EBED +:10022000800402EB4402303A0F920AF1010A9AF874 +:100230000020A2F130000A28EED39AF800002E2800 +:1002400003D04FF0FF320E9229E01AF8010F2A284E +:1002500009D1D9F8000050F8042BC9F800000E921B +:100260000AF1010A1BE02D280CBF0AF1010A002047 +:1002700000220E92DFF8A44B0BE040B90E9AA24286 +:1002800005DA02EB820503EB4503303B0E930AF1DE +:10029000010A9AF80030A3F130020A2AEDD3ADF832 +:1002A00040100FF67C309AF8001000F0FBFE08B109 +:1002B0001AF8010B8DF842009DF84200682805D11C +:1002C0009AF8000068280CD1622106E06C2804BF6F +:1002D0009AF800006C2804D171218DF842100AF1BF +:1002E000010A12A806901AF801BBBBF125012CD017 +:1002F0001C3900F09481091F022940F290811339C2 +:1003000000F0B884093900F08A81891E00F04D851B +:10031000491E00F0FA84491E022940F28081091F1B +:1003200000F0F384491F00F0EF80491E00F0A28422 +:10033000491E00F0D780C91E0CD0891E00F09A8497 +:10034000C91E00F0978400F03BBD012307932521CF +:1003500000F033BDD9F8000050F8044BC9F8000094 +:10036000002C059440F0AB802B994878002800F0D1 +:10037000A1804FF0FF340FF6B02000F09FFE241A4A +:1003800040F0468500F028BD01236A4602A93046A8 +:1003900000F00EFE002840F03B85641EF4D130963C +:1003A000079C12AF74B1309E17F8011B0498B04738 +:1003B0000028049000F02C850D98401C641E0D90C0 +:1003C000F2D130960A9C3021002C8DF800100CDD03 +:1003D000309E01236A4602A9304600F0E9FD00285C +:1003E00040F01685641EF4D13096059F089C74B1C8 +:1003F000309E17F8011B0498B0470028049000F0C5 +:1004000007850D98401C641E0D90F2D130960B9C10 +:100410003021002C8DF800100CDD309E01236A463F +:1004200002A9304600F0C4FD002840F0F184641EAB +:10043000F4D1309605980899099C471874B1309EFC +:1004400017F8011B0498B0470028049000F0E084DE +:100450000D98401C641E0D90F2D130960C9C3021FA +:10046000002C8DF800100CDD309E01236A4602A995 +:10047000304600F09DFD002840F0CA84641EF4D18F +:1004800030969DF8400041077FF584AE2020002D76 +:100490008DF800007FF77EAE309C01236A4602A9EA +:1004A000204600F085FD002840F0B2846D1EF4D196 +:1004B00030946FE60FF65830059000F08DBC0E9D1D +:1004C000002D04D5204600F019FE044607E02A4618 +:1004D000204600F01DFE002814BF041B2C46089483 +:1004E00000F07ABCD9F8001051F8040BC9F80010DC +:1004F00020F00004002121F0FF35CDE9024512ABC8 +:100500000593782100F04DBC2B99487820B14FF02D +:10051000FF340FF6CC2030E79DF84200622860D00F +:10052000682817D06A283FD06C2806D0712847D099 +:1005300074282CD07A281DD062E0D9F8001051F828 +:10054000040BC9F80010002866D14FF0FF340FF6F5 +:10055000A82012E7D9F8001051F8040BC9F80010D0 +:1005600020B94FF0FF340FF6902006E70D99018077 +:1005700000F032BCD9F8001051F8040BC9F8001093 +:10058000002849D14FF0FF340FF66C20F5E6D9F87A +:10059000001051F8040BC9F8001000283CD14FF0AE +:1005A000FF340FF65420E8E6D9F8001051F8040B98 +:1005B000C9F8001080B94FF0FF340FF63C20DCE69C +:1005C000D9F8001051F8040BC9F8001020B94FF009 +:1005D000FF340FF62420D0E60D9AD317C0E900238C +:1005E000FAE3D9F8001051F8040BC9F8001020B94B +:1005F0004FF0FF340FF60020BFE60D990170EBE3DA +:10060000D9F8001051F8040BC9F8001020B94FF0C8 +:10061000FF340FF6E410B0E60D990160DCE39DF8BD +:1006200042004C2807BFD9F80010CA1DD9F80000B5 +:10063000C21D22F00702C9F80020D2E900010832E9 +:10064000C9F80020CDE90201C80F02D007982D217A +:100650000AE0BDF84000810702D507982B2103E08E +:10066000C00705D50798202112AA1154401C0790F5 +:1006700012A807994BF0200300EB010CDDE9020101 +:10068000CDE92C01612BCDF814C021AC0BD00E9814 +:10069000002848BF062105D404BF4BF0200067287E +:1006A00001D101210E91DDE902014F0047EAD07727 +:1006B0007E15FF174FF0FF32974208BF964210D1C8 +:1006C000090341EA10510003002908BF002808D09F +:1006D000ABF1610503211A2D089118D30FF63811DB +:1006E00010E0DDE902014A00521512F1010F11D1AB +:1006F00008030FD1ABF1610503211A2D08911FD317 +:100700000FF61C110322604600F02EFD64E30FF685 +:100710000411F7E7DDE902016A4600F031FDCDE999 +:1007200002014BF02000612811D1059830210170A1 +:10073000821C0592BBF1610F0CBF7821582102E0A9 +:100740000FF6D801DEE741700798801C0790DDE9BD +:10075000020120F0000231F0004308BF002A02D15C +:100760000026002542E14BF02008B8F1610F40F06F +:1007700092800E98002847BF21210191401C0190D2 +:10078000019FDDE92C017F1C00220023DDE90245E9 +:1007900000F02EFD38BF85F0004500998DF88420CB +:1007A000091F002F00910DF1850632DD20462946F4 +:1007B0000022002300F036FD2BD21C2200F04CFD5D +:1007C00004460D4600F0E6FDFF1F002F804609DDC0 +:1007D00000F0FCFD02460B462046294600F0BEFE16 +:1007E00004460D46F01D0721B8F1000F0CDD491E2F +:1007F0005EBF08F00F0200F8012D4FEA2818F3D56C +:1008000002E0002200F8012D491EFAD5C61D002F76 +:10081000CCDC0DF18500361A01980DF18504864275 +:10082000D8BF304600282FD4B04206DA0DF185013A +:100830000A5C082AA8BF0F2100DA0021024621AB7A +:10084000134400E0401E13F80159521E8D42F9D0A6 +:100850000F2904D10DF185018B5C5B1C8B54002AA0 +:1008600004D50099091D21AC401C0091411E0BD4F8 +:10087000621813783033DDB23A2DA4BF5B443A3BA3 +:10088000491E02F80139F4D50E99002940F1AC80D7 +:10089000421E0E92A8E00099DFF8042747F2975015 +:1008A000414391FBF2F20092DDE92C45C2F10702CF +:1008B000002A25F0004504DD2046294600F04CFBC7 +:1008C0000BE052420020DFF8DC1600F045FB024648 +:1008D0000B462046294600F0B3FE04460D46B8F10B +:1008E000660F06BF009F0A3706270E983F18142F81 +:1008F000C8BF142730208DF884000DF18506002F25 +:1009000034DD2046294600F0BFFF01460A4606F1C5 +:10091000080304200A26B2FBF6F606EB860EA2EBCD +:100920004E02303203F8012C0A22B6FBF2F202EB3F +:10093000820EA6EB4E063036401E03F8026DE9D15A +:10094000083F002F03F10806D9DD084600F0AEFF8E +:1009500002460B462046294600F000FE0022DFF842 +:10096000483600F0B1FF04460D46CAE70DF1850098 +:10097000361A0DF1850404E00098401E761E0090A2 +:10098000641C20783028F7D0B8F1660F02D10098A7 +:10099000401C04E0B8F1650F0CBF012000200E9947 +:1009A00040188642B8BF701E00281DD4B04204DA39 +:1009B000215C3429C8BF392100DC30210246631E86 +:1009C0009D1800E0401E15F80169521E8E42F9D0B4 +:1009D000392902D1A15C491CA154002A04D50099EF +:1009E000491C1C46401C00910646009D01F05AF827 +:1009F000406A0778DDF8388030B2002802DC012632 +:100A00000FF220644BF02000662808BF6D1C16D042 +:100A1000672845D128B210F1040F47DB404545DA7D +:100A20009DF840006D1C010703D430B24045D8BF8B +:100A3000804628B2B8EB000848BF4FF000080FFA14 +:100A400085FBBBF1000F00F3B4800898411C0891AE +:100A5000302205990A54B8F1000F03DC9DF84000DC +:100A6000010704D50898411C089105990F5418EB0B +:100A70000B0FB8BFC8F100052DB26842454432B231 +:100A80000B909542B8BF2E46059B089836B2099642 +:100A900032462146184400F067FBAD1B0C95D2E0AE +:100AA000BBF1610F17D14FF0700B19E030B2404528 +:100AB00004DA9DF840100A0758BF8046B8F10108D3 +:100AC00048BF4FF00008BBF1670F14BF4FF0450B54 +:100AD0004FF0650B04E0BBF1410F08BF4FF0500B26 +:100AE0000898411C0891B8F1000F059914F8012BE2 +:100AF0000A5403DC9DF8400001071AD50898411CF0 +:100B00000891B8F1000F05990F5412DD761E30B22E +:100B10008045B8BF46460598089B32B22146184426 +:100B200000F022FB089936B271180891A8EB060074 +:100B30000B9005980899084429B2002980F800B064 +:100B400003D42B224270821C04E02D2242700D46F9 +:100B5000821C6D4200212CAB28460AE004460A2084 +:100B600094FBF0F000EB8005A4EB450403F8014B87 +:100B7000491C00B20028F1DC012906DC4BF0200002 +:100B8000652804BF302002F8010B00292CAB08D1E6 +:100B9000302002F8010B06E0491E585C303002F8A4 +:100BA000010B0029F8DC059908980844121A0992EB +:100BB00049E030B229B288421CDA0598089B32B26B +:100BC0002146184400F0D0FA089936B271180891FD +:100BD000ABEB0600B8F1000F0B9003DC9DF8400072 +:100BE000020704D5059847540999491C0991CDF885 +:100BF000308028E00598089B2AB22146184400F06E +:100C0000B3FA0898761B5844B8F1000F089003DC3B +:100C10009DF840100A0703D5411C089105990F540F +:100C200030B28045B8BF46460598089B32B204EB07 +:100C30000B01184400F098FA089836B23018089062 +:100C4000A8EB06000B909DF8400000F0140010285F +:100C500040F0C280079A08980B99821809988A1860 +:100C600082180C980F998018884280F2B580081A73 +:100C70000A90B1E09DF84200622808D068280ED0A2 +:100C80006A2814D06C281FD0712810D01CE0D9F825 +:100C9000001051F8040BC9F80010C0B21AE0D9F8DE +:100CA000001051F8040BC9F8001080B212E0D9F816 +:100CB0000000C21D22F00702C9F80020D2E900019D +:100CC0000832C9F8002006E0D9F8001051F8040BEA +:100CD000C9F800100021CDE902019DF8400001078C +:100CE0005AD5DDE90223002B08BF002A54D04BF06F +:100CF0002000782850D1079812A930220A54401CAD +:100D0000431C079301F800B046E09DF842006228BA +:100D100008D068280ED06A2814D06C281FD07128FB +:100D200010D01CE0D9F8001051F8040BC9F80010DD +:100D300040B21AE0D9F8001051F8040BC9F80010BD +:100D400000B212E0D9F80000C21D22F00702C9F873 +:100D50000020D2E900010832C9F8002006E0D9F8E5 +:100D6000001051F8040BC9F80010C117CDE90201B9 +:100D7000002902D507982D210AE0BDF8400081071F +:100D800002D507982B2103E0C00705D5079820213D +:100D900012AA1154401C079012A80799014405910A +:100DA000594602A800F04EF816E001200790D9F845 +:100DB000000050F8041BC9F800008DF848100BE043 +:100DC00001212522BBF1000F07918DF8482003D0A7 +:100DD000022207928DF849B00F9D07990A986D1A63 +:100DE00008992D1A0B986D1A09992D1A0C986D1ADD +:100DF0009DF840102D1A48073FF5D2AA2021002D5A +:100E00008DF800107FF7CCAA309E2C46FFF7BCBAB5 +:100E10004FF0FF3031B0BDE8F08F0000CBCCCC0CF0 +:100E2000686A6C747A4C00007072696E74665F73E5 +:100E30003A2062616420257320617267756D656E6A +:100E4000740000002DE9FC4707468A463C6950467D +:100E50006F2808BF082505D0FFF780F9782814BF50 +:100E60000A251025D7E900013C2680468946BAF1BB +:100E7000640F18BFBAF1690F05D1002903D5D8F165 +:100E8000000869EB4909B9F1000F08BFB8F1000F7C +:100E90000CD1386B50B9082D3AD197F838000107BA +:100EA00036D530223B2684F83B2031E08DF800A077 +:100EB000404649462A46EB1700F0FAFD3032D0B2E0 +:100EC000761E3A2801960EDAA255404649462A4631 +:100ED000EB1700F0EDFD80465FEA010908BFB8F1AD +:100EE000000F05D108E09DF800001218513AEBE719 +:100EF000F868A1198842DBD3082D09D197F838008A +:100F0000010705D5A05D302802D0761E3020A055FF +:100F1000C6F13C03BB61A119F960386B834208DA62 +:100F2000C31A3B624FF6EF70398F01403987BDE835 +:100F3000F38700280ED597F8380000F01400102829 +:100F400008D17A6B7969386A521A121AD21A002AB1 +:100F5000C8BF3A62BDE8F3872DE9D04306460F4685 +:100F600014464FF00008DFF8449012E0E00707D580 +:100F700042464B463046394600F0A6FC06460F4630 +:100F80004046494642464B4600F09EFC641080466F +:100F90008946002CEAD130463946BDE8D0830000AE +:100FA000A08601000000F03F84D797410000244054 +:100FB000F8B505460E4617461C4600205CB117F8EA +:100FC000011BB068A847B06030B1F06A401CF06205 +:100FD0000020641EF3D1F2BD4FF0FF30F2BD0000DF +:100FE0007072696E74665F733A20256E206469734F +:100FF000616C6C6F776564007072696E74663A201C +:1010000062616420256E20617267756D656E740083 +:10101000000000006E616E004E414E00696E660079 +:10102000494E46003000F0B4024610689568131827 +:10103000506803EB5004C00748BF4D44A3422DD075 +:1010400013F8016B16F0030004BF13F8010BC01C6A +:1010500031090F2907D113F8011B0F3103E013F8F1 +:10106000017B05F8017B401EF9D10029E6D013F879 +:10107000010BC6F38106032E08BF13F8016B00EBCA +:101080000620404228440026B71E8F421EBF10F89B +:10109000017B05F8017B761CF6D1CFE7F0BC02F1AD +:1010A0000C007047C9B202788A421AB11CBF10F80E +:1010B000012FF9E718BF002070472E0080B500B956 +:1010C00006A005490B681BB122220021984701E0C8 +:1010D00000F071FD222002BDD40A0020636F6E7300 +:1010E000747261696E742068616E646C65723A2016 +:1010F000626164206D6573736167650000F10103CF +:1011000010F8011B11B110F8011BFBE7C01A704762 +:10111000C9B2830706D0521E22D310F8013B994270 +:10112000F7D11FE0083A13D302F1040241EA01218A +:1011300041EA014150F8043B121F21BF4B40A3F18B +:10114000013C2CEA030C1CF0803FF3D0C9B2001F15 +:10115000083210F8013B521E28BF91EA030FF8D85D +:1011600018BF0120401E70474AB1000011F8013B32 +:10117000521E00F8013B1CBF11F8013BF8E7704715 +:1011800010B5144600F002F8226010BDC1F30A53F6 +:1011900043B14A0012F5001F28D2A3F2FE32A1EBA0 +:1011A0000251704750EA410C20D001F0004C31EA66 +:1011B0000C01B1FA81F204BFB0FA80F3D2180B3AF5 +:1011C000B2F120032CBF00FA03F1914041EA0C0177 +:1011D0003EBFC2F1200C20FA0CF31943904052425A +:1011E00040F2FD33D21A01EB0351704700227047E1 +:1011F00041EA030C50EA4C0C52EA0C0C4FF4001C70 +:1012000009D307D01CEB410F9CBF1CEB430F8B4253 +:1012100008BF824270471CEB430FFBD8994208BFBE +:101220009042704741EA030C50EA4C0C52EA0C0C15 +:101230004FF4001C09D307D01CEB410F9CBF1CEBE3 +:10124000430F994208BF904270471CEB410FFBD8F7 +:101250008B4208BF82427047124254D440F2FF7C56 +:101260001CEA11530FD0634531D09B1863453CBF36 +:1012700001EB0251704701F0004141EA0C5100209E +:10128000AFF30080704750EA410320D001F0004CDA +:1012900091EA0C011CD0B1FA81F30B3B9A420DD9B3 +:1012A000D21A994051EA0C01C3F1200C20FA0CFC2F +:1012B00061449840531C40F2FF7CD7E7914041EADB +:1012C0000C01C2F1200C20FA0CF319439040704736 +:1012D000B0FA80F31533202BE0D3202AEED3203A46 +:1012E000203B9A4209D9D21A00FA03F141EA0C01D3 +:1012F0000020531C40F2FF7CB8E700FA02F141EAFB +:101300000C0100207047524240F2FF7C1CEA11534E +:101310000DD06345DBD0B2EB030C3CBFA1EB025117 +:1013200070470CF1010221EA035141F4801150EAA7 +:10133000410CCCD001F0004C352A27DC30B481EAD6 +:101340000C01B2F1200309DAC2F12003044601FACC +:1013500003F5D0402843D1409C400CE0C3F120026B +:10136000450020FA03F418BF44F0010421FA03F009 +:1013700091400C43002174F1004550F1000051EB05 +:101380000C01244230BC7FF47BAF704761460020E3 +:1013900076E74300C1F30A5340F21E42D31A0CDD34 +:1013A000CA0283F3070342EA505242F00042DA4095 +:1013B00002EBE17282EAE17070476FEAE17203F2D8 +:1013C000E13008B182F000407047000010F00041A9 +:1013D00060B148BF4042B0FA80F29040D21CC2F5E2 +:1013E000846241EA025202EBD021400570470000BE +:1013F000841A71EB030604D26E40001BB14112192E +:1014000073414FF4001C1CEB410F34BF7CEB4306CF +:1014100083E00C0DA4EB1356362E00F37C80012ED6 +:1014200045EAC32341DC43EA525312BFD20292027F +:101430005B08240545EAC12141EA5051D2EBC020A6 +:10144000994125D407D1B0FA80F610FA06F162D09E +:101450000020203608E0B1FA81F6B140C6F1200242 +:1014600020FA02F21143B0404FEAF474B4EB465450 +:1014700034F001064FEA74040AD8D6F50016760D4A +:1014800004F00044F04061FA06F25040F140484058 +:10149000C00A40EA415021F0004128BF5FEA5005F0 +:1014A00050F1000044EBD12135E0DB0A45EAC121CF +:1014B000C90AB6F120050EDD42EA0242120CC5F15E +:1014C000200603FA06F6EB4042EA06056D42984113 +:1014D00061F100010DE062FA06F5F240554063FA51 +:1014E00006FC82EA0C02F3405A406D42904161EBE7 +:1014F000030111F4801F05D1641E620502D06D0046 +:101500004041494121F48011430875F1004350F1F5 +:10151000000041EB045170BC70471CEB410F15D229 +:1015200023F0004352EA43060BD04FEA4C0CBCEBCD +:10153000410F04D80C0D661E342EB7DDEBE7801A80 +:10154000994150EA410608BF0021E4E708BF1CEBBF +:10155000430F28BF6FF00001DDE7000070B491EA8F +:10156000030F4FF000457FF543AF6B40841A71EBDA +:10157000030603D2001BB141121973414FF4001C42 +:101580001CEB410F34BF7CEB430442E00C0DA4EB99 +:101590001356352E4FDC45EAC323DB0A45EAC12149 +:1015A000C912B6F120050DDD63FA05F6EB4086EAB7 +:1015B0000305124218BF45F00105C01851F10001A2 +:1015C0000CD213E062FA06F5F2405540F3415A405E +:1015D000B340F3405A408018594107D349085FEAA5 +:1015E00030005FEA350528BF45F0010501F580119F +:1015F000420875F1004250F1000041EB04514E00E9 +:1016000016F5001F70BC38BF70470020090D090592 +:1016100070471CEB410F10D252EA43060BD0BCEBD3 +:10162000410F05D80C0DAB43661E342EB6DD02E02B +:10163000AB438018594170BC704770BC70470000C4 +:10164000F0B540F2FF7581EA030C0CF0004C15EA8E +:1016500011541DBF15EA1357AC42AF42E5E0BC413F +:10166000C1F31301C3F31303801A994143F48013A8 +:1016700004D2641E0018494180185941C90241EA48 +:101680005051B1FBF3F603FB1611A2FB0675D7EB25 +:10169000C020A94102D2761E80185941C90241EAF0 +:1016A0005051B1FBF3FE03FB1E11A2FB0E75D7EBED +:1016B000C020A94103D2AEF1010E80185941890220 +:1016C00041EA9051760546EA8E2EB1FBF3F603FB14 +:1016D0001611A2FB0675D7EB8020A94102D2761E17 +:1016E00080185941C90241EA50514EEA060EB1FB39 +:1016F000F3F603FB1611A2FB0675D7EBC020A94138 +:1017000002D2761E80185941C90241EA5051B1FBFC +:10171000F3F703FB1711A2FB0735D3EBC020A94158 +:1017200067F100070CBF004247F0010766F3D527B9 +:101730004FEA1E31B80814F5806412DDBD0775F15B +:10174000004250EB0E5051EB045111F5801F5CBF6D +:1017500041EA0C01F0BD4CF07F6141F0E041002016 +:10176000F0BDBD076D0840EA0E5041F48011D4F180 +:101770000104B4F120060ADAC4F120060200E040B8 +:1017800001FA06F3E1401843B24015430EE0342C51 +:1017900013DCC6F1200445EA40056D0820FA06F284 +:1017A000154321FA06F0A1400D43002175F10042D6 +:1017B00050F1000051EB0C01F0BD00205FEA0C017C +:1017C000F0BDCFB992185B41B3FA83F704BFB2FA08 +:1017D00082F6BF190B3FB7F120062FBF02FA06F3BE +:1017E000BB40C7F1200622FA06F638BF3343BA40A1 +:1017F0001CB1E419641E33E77F4231F00041B1FAB5 +:1018000081F404BFB0FA80F6A4190B3CB4F12006B1 +:101810002FBF00FA06F1A140C4F1200620FA06F617 +:1018200038BF3143A0403C1B1AE7AC421ABF05EA5F +:101830001357AF4212E050EA41061CBF52EA43067A +:10184000BFE750EA4107304661461CBF41EA0551F7 +:10185000F0BD52EA430C08BFC143F0BD00204FF475 +:10186000001616EB410F98BF16EB430F08BF16EB9F +:10187000410F24BFC14305E016EB430F0CBF614687 +:101880004CEA0551F0BD0000400D40F21E4C40EA0C +:10189000C120BCEB115C40F0004003D48CF3070185 +:1018A000C84070476FEAE1707047000050B1B0FA6D +:1018B00080F18840C91CC1F58461090501EBD02184 +:1018C000400570470146704730B540F2FF7C1CEA86 +:1018D00011541DBF1CEA1355644565453FE064196A +:1018E00081EA030C6FF35F530CF0004C43F4801358 +:1018F000C90241F0004141EA505EC5021100A5FB5A +:10190000020200284FF00000EEFB01204FF0000122 +:10191000E3FB052118BF42F00102401800214941B4 +:10192000E3FB0E01A4F580640D0302D2921840413E +:10193000494154F1010470DD450872F1004250F153 +:10194000000051EB0451A1F5801102D441EA0C01D1 +:1019500030BD40F2FF7E4CEA0E51002030BD0CEA53 +:101960001355644518BF654581EA030C0CF0004C23 +:1019700041D050EA410E1CBF52EA430E02E06146DC +:10198000002030BD24422C441BD15FEA050EF6D066 +:10199000090302BF01460020AEF1140EB1FA81F531 +:1019A000AEEB050401FA05FE0C35C5F1200100FA85 +:1019B00005F5C8404EEA000E6FF35F5343F4801301 +:1019C0009CE733F00043B3FA83F504BFB2FA82FE1A +:1019D00075440B3D641BB5F1200E2FBF02FA0EF3C8 +:1019E000AB40C5F1200E22FA0EFE38BF43EA0E03CB +:1019F000AA40641C7CE750EA410E14BF52EA430E31 +:101A00006FF000014FF4001515EB430F8EBF194620 +:101A100015EB410F9DE7B4D830BDD4F10104B4F10A +:101A200020050FDAC4F12005520828BF42F0010258 +:101A300010FA05FE01FA05F57244E2BFE0402843C2 +:101A4000E1400FE0352C9ADCC5F1200452EA400257 +:101A500020FA05F218BF42F0010231FA05F0A14068 +:101A60000A43002172F1004250F1000051EB0C01D9 +:101A700030BD0000FFE741381A288041C00F704791 +:101A8000A0F10901052901D3202801D101207047C7 +:101A900000207047A0F141011A2938BF203070475B +:101AA000014870470148704748000020100000209E +:101AB000D3BBD9B1B2F5803F5BD2022A1ED98C4686 +:101AC000B1FBF2F102FB11C31B0443EA1043B3FB69 +:101AD000F2FC02FB1C3380B240EA0343B3FBF2F09A +:101AE00002FB103240EA0C4000237047022A05D95D +:101AF0008446B0FBF2F002FB10C270474AB105D138 +:101B000000F0010249085FEA30007047002200231C +:101B1000704700F053B80B0002000021002070470E +:101B2000F7D3002200237047904271EB030CF2D3ED +:101B300070B5B1FA81F4B3FA83F52C1BA340C4F15C +:101B4000200532FA05F63343A2405FF00046E64036 +:101B500002E05B085FEA3202841A71EB030524BFDE +:101B6000204629467641F4D302000B0030000021C4 +:101B700070BD70B5B1FA81F4B2FA82F5C4F12004F7 +:101B80006419B4F12006DAD3B2405FF00044F440A7 +:101B9000002502E052085FEA3303C61A71EB020E19 +:101BA00024BF3046714664416D41F3D302000B00FF +:101BB0002000290070BD012000F002B8704700002D +:101BC00080B5AFF30080024A11001820ABBEFBE7DE +:101BD0002600020038B5040001D1012032BD04F115 +:101BE0008405686808B900F017F800F01AF808B121 +:101BF00000F031F800F02CF8012804D000F004F8CF +:101C000021F02A0116E032BD2068416821F490419C +:101C1000416020688168704700212970204600F0EB +:101C20007FBF24206860206801684908490001607E +:101C3000A06A7047816000F004F8BDE8324000F00F +:101C4000AFBB2068016841F0010101602046704788 +:101C5000204600F02DBA204600F03FBB38B5040006 +:101C600001D1012032BD04F184052420686000F018 +:101C700014F8226800200021106023685960216850 +:101C80008860204600F0DDFF0020E86000216960E8 +:101C9000A860E1662067297032BD206801684908A4 +:101CA0004900016070472DE9F843054605F15406E7 +:101CB000706B0C461746994620283ED10CB138006F +:101CC00001D101203AE00020F0632121716301F08D +:101CD00071F8378080467780A868B0F5805F04BFD0 +:101CE000286900281ABF204600272746044611E02D +:101CF0000022802100F024F8D8B92868002C12BFF7 +:101D000014F8011B37F8021BC1F3080181627088C7 +:101D1000411E71807088CDF8009043460028E7D1BD +:101D20000022402100F00CF818B920207063002038 +:101D300004E020207063032000E00220BDE8F2836D +:101D4000284600F074BB38B50346D3F88C00202831 +:101D50000AD109B1100001D1012032BD00F006F80E +:101D6000BDE8384000F0ABBB022032BD0020D86691 +:101D70001868DFF83843A0420CD04068040209D547 +:101D8000186850E8004F054644F0806445E800407C +:101D90000028F5D1184670472868816848067047C2 +:101DA0002DE9F04105462A68D36940F60F06104632 +:101DB0000768D2F8088005F15C0407F0200003F002 +:101DC000200133420ED1002914D018B95FEAC800AF +:101DD00040F18780A169002900F02F812846BDE8E5 +:101DE000F0410847DFF838C818EA0C0F04BFDFF8E5 +:101DF0003468374275D0DE0709D5FE0507D54FF0A8 +:101E0000010EC2F820E0626B42F0010262639A07A1 +:101E100048BF5FEAC87206D52E6802223262626B42 +:101E200042F0040262635A0748BF5FEAC87206D5EF +:101E30002E6804223262626B42F0020262631A0769 +:101E40000DD5002808BF18EA0C0F08D0D5F800C03F +:101E50000822CCF82020626B42F0080262631A0567 +:101E600009D57B0107D52F684FF400623A62626B97 +:101E700042F020026263626B002A31D039B110B99E +:101E80005FEAC80003D5A16909B128468847606B9D +:101E900029688A68510602D410F0280F1BD000F080 +:101EA000D4F8FFF779FF11D500F0D2F8FCD1606AC1 +:101EB00060B10FF2A171C166606A00F0BFFF002837 +:101EC0000ED0606AC16EBDE8F04108472846BDE803 +:101ED000F04100F0D4BF284600F0D1FF002060633D +:101EE000ABE02069012875D1D80673D5F90671D504 +:101EF000102010622A6821889068420632D5626AF2 +:101F00001068806C80B2002823D0884221DA60807B +:101F1000106D812816D000F0B4FCFCD100F0B8F8A8 +:101F2000FCD100F0A8F8FCD1202020630021216121 +:101F300000F09CF821F0100100F083F8F8D1606AFD +:101F400000F03EFF0220606121886088091A89B292 +:101F500006E0884204BF106D81286ED102226261C2 +:101F6000284633E062886088891A00281CBF88B23E +:101F7000002862D02A46106850E8003F054623F446 +:101F8000907345E800300028F5D1106800F108038F +:101F900053E8003F00F10808DFF82C03034048E84D +:101FA00000300028F1D12020206300232361A361A9 +:101FB000136853E8003F156823F0100345E800302C +:101FC0000028F5D10220606189B21046BDE8F041D9 +:101FD00000F056BF18060AD5390658BF5FEA082038 +:101FE00005D5E16949B32846BDE8F04108475806E0 +:101FF00011D579060FD500F039F821F0400100F035 +:1020000020F8F8D12020E0620021E1612846BDE8F7 +:10201000F04100F036BF180206D5790004D52846F5 +:10202000BDE8F04100F02EBFD80148BF002F04D515 +:102030002846BDE8F04100F026BFBDE8F08141F43C +:10204000807142E8001000287047284600F0BDBAB1 +:10205000296801F1080252E8001F286800F108030E +:1020600021F0400143E8001000287047286850E83C +:10207000001F02467047286800F1080151E8001F60 +:1020800000F1080321F0400143E8001000287047E8 +:10209000286800F1080151E8001F00F10803490811 +:1020A000490043E800100028704700000024004663 +:1020B000F8B504462268DFF8F40600251368A16825 +:1020C000034020690B4361690343E0690B43034309 +:1020D00013605168E06821F4405101435160DFF81A +:1020E0008417A3698A421CBF206A03439668DFF8FD +:1020F0007807DFF878E7064033439360D36A606A75 +:102100000FF25C561B0940EA0313DFF86407DFF89F +:102110006477D3624FF4004372453AD13F6807F0C9 +:102120000307032F5AD8DFE807F0025350564FF049 +:10213000010CE1694FF6F077B1F5004F40F0908067 +:10214000BCF1000F0FD0BCF1010F00F08180BCF199 +:10215000040F0CD0BCF1080F00F07D80BCF1100F13 +:1021600000F07C80A5E001F0B1F9002810D000F06B +:10217000ADF84A0802EB4002B2FBF1F0A0F1100109 +:10218000B942EFD20740C0F3420007432068C7605E +:1021900090E0DFF8A4C762450CD13F6817F00C0748 +:1021A00006D0042F14D0082F0FD00C2F13D015E019 +:1021B000AC46BEE78A4211D1BF6807F00307032F80 +:1021C0000CD8DFE807F01C0502084FF0040C07E00C +:1021D0004FF0080C04E04FF0100C01E04FF0200C21 +:1021E0008A42A6D1BCF1020F09D0BCF1040F0AD07B +:1021F000BCF1080F15D0BCF1100F15D059E001F05B +:1022000073F9002856D0616A36F81120B0FBF2F657 +:10221000626802EB42018E424BD31303B34205D2F4 +:1022200047E001F034F9ECE71846ECE750080021EC +:1022300010EB0620DFF8A87751EB16610023FFF7BB +:1022400037FCA0F54076BE4233D22168C86031E049 +:1022500001F041F989E701F01AF986E7184686E7A7 +:10226000BCF1000F0CD0BCF1010F1AD0BCF1040F6F +:1022700009D0BCF1080F17D0BCF1100F17D018E02F +:1022800001F024F9B0B100F021F800EB5100B0FBEF +:10229000F1F0A0F11001B9420BD2226880B2D060F7 +:1022A00008E001F018F9EDE701F0F1F8EAE7184667 +:1022B000E9E7012504F16800012100234180018044 +:1022C000C36003612846F2BDFEFFFFEF626A6168EA +:1022D00036F81230B0FBF3F0704790F828100A0778 +:1022E00006D502685368816B23F400430B435360A7 +:1022F00090F82810CA0706D502685368C16A23F40B +:1023000000330B43536090F828108A0706D5026803 +:102310005368016B23F480330B43536090F828100B +:102320004A0706D502685368416B23F480230B43A8 +:10233000536090F82810CA0606D502689368C16BEE +:1023400023F480530B43936090F828108A0606D537 +:1023500002689368016C23F400530B43936090F878 +:1023600028104A0610D502685368416C23F4801384 +:102370000B435360436CB3F5801F05D15368816CE8 +:1023800023F4C0030B43536090F828100A0606D5C7 +:1023900001684A68C06C22F4002202434A60704718 +:1023A000F8B5054605F184040020E06000F002FD68 +:1023B000064628686FF07E4701680A0711D5009726 +:1023C000334600224FF40011FFF7BAFC48B1FFF783 +:1023D0004DFE21F08001FFF734FEF8D1202060602F +:1023E00017E0286801684A0717D50097334600228E +:1023F0004FF48001FFF7A4FC78B1FFF737FE21F41A +:102400009071FFF71EFEF8D1FFF742FEFCD12020AD +:10241000A060002121700320F2BD202060602021F7 +:10242000A1600020E866002129672070F2BD2DE937 +:10243000F04105460E4690461F46069C2868C16935 +:102440003140B1420CBF01200020404535D114F18C +:10245000010FF3D000F0AEFCC01B844200D314B9CE +:102460000320BDE8F081286801684A07E6D5802E80 +:1024700018BF402EE2D0C169080704D42968C86992 +:102480000105DBD50CE02A6808201062FFF7DDFDAE +:1024900005F184000821C160002202700120E0E7FC +:1024A00029684FF400600862FFF7CFFD05F1840052 +:1024B0002021C16000220270D2E70020D1E750B590 +:1024C0000346996503F15C010A804A800020886117 +:1024D0009868FF24B0F5805F04D1186990B940F284 +:1024E000FF140FE018B9186960B17F2007E0B0F160 +:1024F000805F06D1186908B97F2403E03F208880F7 +:1025000001E000248C800020486322240C631868BA +:1025100000F098F844F0010446E800400028F6D1A5 +:102520008868B0F1005F21D1888982421ED39A6801 +:10253000B2F5805F04BF1869002803D10FF2593249 +:102540008A6109E00FF27D248C61186920B100F0E6 +:102550002FF8FFF774FDFAD100F02FF841F0805109 +:1025600044E800100028F7D1002050BD9868B0F56D +:10257000805F04BF186900280CD10FF24D128A61E8 +:10258000186850E8001F024641F02001FFF759FD8E +:10259000F6D1E9E70FF2E1028A6118690028EFD06D +:1025A00000F006F841F49071FFF74BFDF8D1DBE73E +:1025B000196851E8001F1A687047186800F108018F +:1025C00051E8001F00F10804704710B500F00EF844 +:1025D000FCD100F015F8FCD1C16E00F025F82021E7 +:1025E000C0F88C100022C266426710BD016851E835 +:1025F000002F0B4622F4907243E800210029704717 +:10260000016801F1080252E8002F01F10804DFF827 +:1026100044140A4044E800210029704700000000EB +:102620000100001020010004012909D1026852E8CC +:10263000002F036822F0100243E800210029F5D1A1 +:102640007047106800F1080454E8004F00F10806D4 +:1026500070470000C06D0021A0F85E1000F00FBCB4 +:10266000010002000400060008000A000C0010002F +:10267000200040008000000138B500F04DF81ED168 +:102680004B6A9188846D0B402370816D4B1C00F068 +:1026900049F818D100F04DF800F060F8FCD100F0D6 +:1026A0006AF80BD10023136100F04EF8FCD10168E9 +:1026B000CB69DC0644BF10230B6279E07DE08869BA +:1026C00040F00800886131BD38B500F025F81ED112 +:1026D0004B6A9188846D0B402380816D8B1C00F0C8 +:1026E00021F818D100F025F800F038F8FCD100F0FE +:1026F00042F80BD10023136100F026F8FCD10168E9 +:10270000CB69DC0644BF10230B6251E055E08869B9 +:1027100040F00800886131BD00F15C020168136B74 +:10272000222B7047836551884B1E538051880029A6 +:102730007047036853E8003F046823F4907344E84B +:1027400000310029F5D17047016851E8003F0C467F +:1027500023F0100344E8003100297047016801F1BB +:10276000080353E8003F01F108055B085B0045E8FA +:10277000003100297047202111630023936100215B +:1027800051610168374B99420CD049680B0209D559 +:10279000016851E8003F0C4623F0806344E80031B3 +:1027A0000029F5D11169012970470000F369FFCFB5 +:1027B0001188BDE8344000F063BBBDE8324000F052 +:1027C000B9BA00002DE9F84300F00CF946D1A08910 +:1027D000002835D0B80633D500F0B0F80870A86DE1 +:1027E000421C00F0D9F812D0F90748BF5FEAC8527E +:1027F00000F0AAF803D5F10701D500F0C5F800F004 +:10280000ACF820B1284600F03AFB002060636088F5 +:102810000028DFD100F035F8FCD100F0D3F8FCD16E +:1028200000F0FEF809D100F0EBF844BF102101627E +:102830002188284600F024FB02E0284600F07AFABE +:10284000608868B1A18988420ADA00F0AEF8FCD14C +:102850008148A06100F08EF8FCD101E000F00CF896 +:10286000BDE8F18300240046FFF4FF110038014069 +:102870000024F400E00C0246816941F00801816106 +:102880007047296851E8001F2A6821F4807142E8E6 +:1028900000100028704700002DE9F84300F0A2F86E +:1028A00046D1A089002835D0B80633D500F046F8C7 +:1028B0000880A86D821C00F06FF812D0F90748BF9D +:1028C0005FEAC85200F040F803D5F10701D500F0E7 +:1028D0005BF800F042F820B1284600F0D0FA002062 +:1028E000606360880028DFD1FFF7CBFFFCD100F0E8 +:1028F00069F8FCD100F094F809D100F081F844BFE8 +:10290000102101622188284600F0BAFA02E0284628 +:1029100000F010FA608868B1A18988420ADA00F0F4 +:1029200044F8FCD14D48A06100F024F8FCD101E04E +:10293000FFF7A2FFBDE8F183004400402968486A20 +:10294000A96D09EA0000704705D501210162606B9D +:1029500040F001006063B8077047780708D5F107B9 +:1029600006D52A6804201062606B40F002006063A4 +:10297000606B7047296851E8001F2A6841F0200108 +:1029800042E80010002870472A6802201062606B3D +:1029900040F0040060637047AA656088411E618052 +:1029A0002868C76917F0070F7047286800F1080208 +:1029B00052E8001F00F1080921F0805149E8001099 +:1029C00000287047286800F1080151E8001F00F155 +:1029D00008032048014043E8001000287047000029 +:1029E00000FD0F000546286805F15C04B4F804906A +:1029F000C7690146D1F800808668216B222970479B +:102A000000212161286850E8001F024621F01001D2 +:102A100042E800100028F5D12868C169CA0670474D +:102A2000202020630021A1610020606128680C49FA +:102A300088420CD04068010209D5286850E8001F80 +:102A4000024621F0806142E800100028F5D120699B +:102A500001287047FEFFFFEF79260008C92600080D +:102A60000024004610B5DFF82843DFF8280300F003 +:102A70004BF822626262A26262662046FFF7AAF801 +:102A800008B100F00DFE0021204600F031FE08B133 +:102A900000F006FE0021204600F035FE08B100F0EF +:102AA000FFFD204600F006FE18B1BDE8104000F022 +:102AB000F7BD10BD10B5DFF8E042DFF8E00200F02E +:102AC00023F8E26122626262A2622046FFF782F886 +:102AD00008B100F0E5FD0021204600F009FE08B134 +:102AE00000F0DEFD0021204600F00DFE08B100F0F0 +:102AF000D7FD204600F0DEFD08B100F0D1FD00F06A +:102B0000E3F82046012225E120600C204FF4E1315A +:102B1000002260616160A260E2602261A261704790 +:102B200070B596B004461421684600F03FFE40217F +:102B300006A800F03BFE20689649994C994D9A4EA4 +:102B4000884223D14FF40072002106920F9106A80B +:102B500000F030FE08B100F0A3FDF06940F0400045 +:102B6000F061F06900F0400000F05AF84FF40061A5 +:102B700000F04DF8082100F043F800224FF4806087 +:102B800000F033F8082200F036F82CE08349884240 +:102B900029D1012200210692079106A800F00AFE21 +:102BA00008B100F07DFDB06940F48040B061B069CB +:102BB00000F4804000F034F84FF4805100F027F822 +:102BC000072100F01DF800224FF4807000F00DF88E +:102BD000072200F010F8002200212E2000F0FBFE5A +:102BE0002E2000F01FFF16B070BD0221029203924A +:102BF00000900191704704926946204600F072BF30 +:102C00000222049101926946284600F06BBF02F04F +:102C100001020592059800910021029103917047ED +:102C200005900598316841F002013160326802F088 +:102C3000020205920598316841F001013160326865 +:102C4000704738B50168534B584A554C554899421E +:102C50000ED155684FF4006125F04005556000F035 +:102C6000F8FF20464FF48061BDE8344000F0F1BF2A +:102C70004A4B994211D1116821F4804111604FF4FF +:102C8000805100F0E6FF4FF48071204600F0E1FF34 +:102C90002E20BDE8324000F0D0BE31BD38B504462C +:102CA0003D4D2846FEF7DAFF6C602846FEF792FF9E +:102CB00010B14FF0FF3032BD00F006F80122284677 +:102CC000FFF741F8002032BD394901F2DC50002203 +:102CD0000260704710B5364C40F2DC51204600F0DF +:102CE00065FD04F2DC500022026010BD0A46014678 +:102CF00080B54FF0FF332848FEF7D5FF08B14FF0FD +:102D0000FF3002BD2A4910B501F2DC525388148805 +:102D1000A3420CD0C95C0170508840F2DC51401CC9 +:102D200083B28B42A8BF00205080002010BD4FF01E +:102D3000FF3010BD10B51E49B1F8DC3540F2DC544F +:102D40005B1C9AB2A242A8BF0023A1F8DC359BB25B +:102D500001221944BDE81040FEF7F5BFF8B50C4656 +:102D60001546012818BF022802D04FF0FF30F2BDEF +:102D70000026074F07E04FF0FF330122A119384624 +:102D8000FEF791FF761CAE42F5D32846F2BD000057 +:102D90002809002000240046BC090020003801401A +:102DA00000000242000402428C0C0246A40C0246BF +:102DB000D800002001484068704700BF0000002094 +:102DC00070B50446FFF7F6FF06462CB304F14C0538 +:102DD000287A022802D02021E9601BE0206841699E +:102DE00041F00401416105202872206801698A04CC +:102DF00014D4FFF7DFFF801B0628F6D3E868032111 +:102E000040F01000E86029722879010602D5A96A0D +:102E10000120087300202870012070BD416941F035 +:102E2000020141610420287222684FF4FE41012012 +:102E3000D16000F018F80020287070BD30B100F1AA +:102E400054010A78022A03D02020486001207047EC +:102E500004220A700068416941F4005141F0040104 +:102E600041610020704728722979080605D5A86AB3 +:102E700001210173226800219164704700007047AE +:102E800070477047704770472DE9F84F040044D0F1 +:102E9000DFF80477D7F81C90D7F828A0207809F03D +:102EA0000C090AF00305C1072AD5B9F1080F04D0AF +:102EB000B9F10C0F08BF032D62D1606800282CD037 +:102EC000B9F1080F1CD13968A068012221F48811DA +:102ED000014341F4803139603868DFF8DC16DFF8EF +:102EE000D436000D00F001008240B1FBF2F1DFF8B2 +:102EF000C0261160186800F027FF002840F0E98123 +:102F00002078810712D5B9F1000F04D0B9F10C0F68 +:102F100008BF022D57D12069002800F0DA813869F6 +:102F2000616920F4F81040EA014038612078DFF848 +:102F30008C86DFF88C56010740F1C08028684FF07E +:102F4000000A41070AD428684FF0010A40F0040043 +:102F50002860296801F0040100910098D8F8001059 +:102F6000C80751D400F0DDF90646D8F80000C107C3 +:102F70004AD4FFF71FFF801B0328F6D303207FE10D +:102F8000606888B13A68A16822F488121043084347 +:102F900000F0C4F9064638688103B1D4FFF70AFF90 +:102FA000801B6528F7D3E9E7386820F4881000F023 +:102FB000B5F9064638688103A2D5FFF7FBFE801BF2 +:102FC0006528F7D3DAE7206978B1396841F4807170 +:102FD0003960FFF7EFFE0546386841059FD4FFF7DB +:102FE000E9FE401B0328F7D3C8E7386820F4807057 +:102FF00000F094F905463868410597D5FFF7DAFEE9 +:10300000401B0328F7D3B9E7EE6DA069002843D031 +:1030100040011AD5E16906F08050814211D031019A +:103020000FD526F08066EE65FFF7C4FE8346E86D97 +:10303000010106D5FFF7BEFEA0EB0B001528F6D365 +:103040009CE726F08050E6690643A0690643EE65DA +:10305000FFF7B0FE0090B346A669E86D10EA460F90 +:1030600006D1FFF7A7FE0099401A1528F4D385E78B +:1030700086F010562BEA060BC5F85CB0FFF79AFEF7 +:103080008346E86D10EA460F16D0FFF793FEA0EBDB +:103090000B001528F5D371E726F01056EE65FFF703 +:1030A00089FE0646E86D10F0904F05D0FFF782FECE +:1030B000801B1528F6D361E700F028F9217848072E +:1030C0006CD529684FF0000A48070AD429684FF0E8 +:1030D000010A41F004012960286800F00400009012 +:1030E0000098D8F80010C8070CD400F01AF906466A +:1030F000D8F80000C10705D4FFF75CFE801B032849 +:10310000F6D33BE7E06841F2893828B3E96D21F056 +:1031100080010843E865FFF74DFE0646E86D81072C +:1031200005D4FFF747FE801B4045F7D326E7207BF9 +:10313000010608D5E86D01052ED4FFF73BFE801B84 +:103140004045F7D31AE7E86D010525D5FFF732FEB4 +:10315000801B4045F7D311E7E86D20F08100E8655A +:10316000E86D20F00400E865FFF724FE0646E86DF0 +:10317000810705D5FFF71EFE801B4045F7D3FDE60E +:10318000E86D010608D5E86D010505D5FFF712FECB +:10319000801B4045F7D3F1E600F0B8F8206A00281C +:1031A0006DD0B9F10C0F6DD00228386820F0807016 +:1031B000386053D1FFF7FEFD0546D7F800A0FFF7B2 +:1031C000F9FD401B0328E6D25FEA8A10F5D4626A53 +:1031D000032A07D14FEA1A51DFF8DC0301F001019D +:1031E000C84001E0DFF8C403A36ADFF8D813B0FBDE +:1031F000F3F088422CBF0C210021D7F82890DFF88B +:10320000C8035B1E00EA09000243114341EA03219F +:1032100041F48021B962E06A216B401E491E40EAF8 +:103220004120616B491E40EA0140A16B491E40EA02 +:1032300001607863E06B10B100F062F8B862386842 +:1032400040F0807000F06AF804463868810116D4B6 +:10325000FFF7B0FD001B0328F7D38FE6FFF7AAFDA9 +:1032600004463868810105D5FFF7A4FD001B03283B +:10327000F7D383E6B86ADFF854130840B862002039 +:10328000BDE8F28F012824D0B86A796B636A00F038 +:1032900003029A4201BFC0F30220401CA26A90427E +:1032A00017D1E26AC1F30800401C904201BFC1F38C +:1032B0004620401C226B90420BD1626BC1F306404A +:1032C000401C904201BFC1F30660401CA16B8842C4 +:1032D00001D00120D4E7B86BE16BC0F3CC00814290 +:1032E000CDD0B86A20F01000B862FFF763FD054644 +:1032F000FFF760FD401BFBD0E06B00F001F8BDE77D +:10330000C000B863B86A40F010007047BAF1000F0F +:1033100003D0286820F00400286070473860FFF769 +:1033200049BDD8F8001041F00101C8F80010FFF7BE +:1033300041BD2DE9F0410400884637D0DFF89052B6 +:10334000286800F00F00404509D22968090948EAB9 +:1033500001112960286800F00F00404526D121782E +:10336000880609D5DFF840221368A169E06923F0D7 +:1033700017030B43034313602178DFF81C72C8075F +:1033800042D53868616803290CD180016BD5F96991 +:1033900001F00C010C290CD0B96A012060F3155121 +:1033A000B96206E0022902D1800302D45BE0410544 +:1033B00059D5FA696068920840EA8202FA61FFF71B +:1033C000F9FC06466068F96901F00C01B1EB800F69 +:1033D00008D0FFF7EFFC801B41F289318842F1D31E +:1033E000032052E003280FD1B86A20F48010B8629D +:1033F000FFF7E0FC0646B86A410205D4FFF7DAFCA5 +:10340000801B0B28F7D3EBE7396A2268002093076B +:1034100004D5C908C800A16801430120530704D599 +:1034200021F07000E16801430120120705D52069F1 +:1034300021F4E06141EA001100E000B13962207836 +:10344000C10644BF60697862296801F00F018845B0 +:103450000BD22868000948EA00102860296801F0AA +:103460000F01414501D001200FE000F010F83A6A49 +:1034700058494F4B02F00702895CC84018604D481C +:103480000068BDE8F04100F05FBCBDE8F081424952 +:10349000C86910F00C0001D144487047082818BFD3 +:1034A00000F036B809684448090D01F00101C84030 +:1034B000704780B5FFF7EBFF47490968454A3C4B29 +:1034C00001F00701515CC840186002BD80B5FFF7EC +:1034D000F0FF414A0CE080B5FFF7EBFF3E4A13686E +:1034E0003E49C3F3022207E080B5FFF7E2FF3C4A02 +:1034F00013683A49C3F30212895CC84002BD10EE5A +:10350000100A491CB0FBF1F010BD3648046807E012 +:1035100010B5FFF7FAFFBCEEC00AC4F30661EEE790 +:103520001D48416BC1F30801491C00EE101A816A65 +:10353000B8EE400AC1F30222521C00EE902AF8EEC7 +:10354000600ACA0643BF826BC2F3CC0201EE102AA6 +:103550009FED121A01F00301B8EE411A022902D0C0 +:10356000032903D00DE0DFED0E1A0CE000681249CC +:10357000000D00F00100C14001EE901AF8EE611A52 +:1035800001E0DFED061AC1EEA00ADFED061A01EE3A +:10359000210A20EE800A7047000C0246000000005D +:1035A0000024744B00000039000E02460024F40091 +:1035B0000C000020080000200048E801280802460E +:1035C000940C024601127A00E0F8FFFFFCFFF8FFBE +:1035D00000200240A0450008200C0246705F000851 +:1035E000240C0246340C024680B500F0F7FB00F0D4 +:1035F00013F800F00DFCFFF735FAFFF75BFA00F067 +:10360000A9FC00F005FD00F013FD00F076FC00BF02 +:1036100024A000F0EBFEFEE780B598B0402108A89A +:1036200000F0C4F82021684600F0C0F84FF4803064 +:1036300000F0F0FE08B100F033F800220A920F9279 +:103640004FF480310322099111924FF080610822DA +:1036500009200E91139208900221002210911291DC +:10366000149115911691179208A8FFF70DFC08B157 +:1036700000F016F83F2100910021032202910491ED +:1036800001920421002206910392059207920121E2 +:103690006846FFF74EFE08B100F002F819B000BD11 +:1036A00072B6FEE74C5445205445535420444F4EC7 +:1036B000450D0A0010B500F184010A78012A01D1F4 +:1036C000022010BD01220A7024234B600268136897 +:1036D000146864086400146000224266006823F0E5 +:1036E0000053202203604A6000230B70002010BDAD +:1036F00070B500F01FF801D1022070BD00F020F875 +:1037000022F0604209E070B500F014F801D1022007 +:1037100070BD00F015F822F0606211438160204610 +:1037200000F01CF8206820210022066069602A70E1 +:10373000002070BD044604F18405287801287047F4 +:103740000120287024226A602068066802685208F6 +:1037500052000260206882687047000030B5416EF8 +:1037600011B90121012214E0016800BF0FF22C04FD +:103770000CA38A688968520E02F00702490F655C43 +:10378000A45C595C9A5CED00E40095FBF1F194FBBC +:10379000F2F268304180028030BD00000101010377 +:1037A000070100000804020408010101002200F0E2 +:1037B0005FBE00002DE9FC4706463078DFF8EC716B +:1037C000C10705D53A687068920840EA82023A60FB +:1037D0003178880705D53968B06821F00C010143BC +:1037E00039603178480705D53968F06821F44061BF +:1037F000014339603178080705D53968306921F40B +:103800004021014339603178C80605D539687069AF +:1038100021F44011014339603178880605D53968B3 +:10382000B06921F44001014339603178480605D57B +:103830003968F06921F00041014339603168DFF8EF +:103840007041C8050DD57968306A21F440510143B3 +:103850007960316AB1F5405F03D1206840F40030EF +:1038600020603168880505D5B968706A890840EA22 +:103870008101B9603168480505D5B968B06A21F0A1 +:1038800018010143B9603168080505D5B968F06AC7 +:1038900021F0C0010143B9603168C80405D5B96899 +:1038A000306B21F440610143B960316888040DD563 +:1038B000B968706B21F4E0410143B960716BB1F5F7 +:1038C000005F03D1206840F48030206031684804F4 +:1038D00058D5D7F81090B06B4FF0000809F4407934 +:1038E00081454FD0E16E48070AD4E16E4FF00108E0 +:1038F00041F00401E166E06E00F0040000900098E1 +:10390000DFF8B050286840F001002860FFF752FA55 +:1039100082462868C10707D4FFF74CFAA0EB0A00DB +:103920000228F6D903203FE03869B9F1000F20F4EE +:10393000407009D0B9693A6942F480323A613A6913 +:1039400022F480323A61B961B16B01433961DFF829 +:10395000681011EA00090ED0FFF72CFA0546386905 +:1039600010EA490F07D1FFF725FA401B41F28931D0 +:103970008842F4D3D6E7B8F1000F03D0E06E20F010 +:103980000400E066306801040DD53A69F06B22F45A +:10399000402202433A613969F06B01F440218142CF +:1039A00018BF012000D10020BDE8F687E00C0246D8 +:1039B000280C02462808024601000024414B1968E1 +:1039C0004FF6FF020002114000F4E06008433E4958 +:1039D00008431860704770B53A4B1C68C4F3022363 +:1039E0000124C3F10705052D2EBF0F2504FA05F5A7 +:1039F0006D1E1E1D072E34BF0023DB1E294099407B +:103A000004FA03F35B1E1A4011430901020002D4B9 +:103A10002E48815470BD2E4B02F00F021A4402F85A +:103A2000041C70BD010007D4012200F01F018A4070 +:103A3000284B400943F82020704701000BD4012295 +:103A400000F01F018A40244B400943F82020BFF3B7 +:103A50004F8FBFF36F8F7047401EB0F1807F07D24A +:103A60001E49486000228A600B6843F003030B6024 +:103A7000B0F1807F8041C043C00F70471849174A9A +:103A800004281ED8DFE800F00811141D0300106898 +:103A900040F0040010607047136823F004031360C3 +:103AA000086820F44000086070471368012001E0B6 +:103AB0001368022023F0040313600A6860F397522E +:103AC0000A6070470CED00E00000FA0500E400E039 +:103AD00018ED00E000E100E080E100E010E000E02F +:103AE000E00C02462DE9F04F4FF0000C924A934B48 +:103AF000DFF84C824FF00F0906460F46A2E0012482 +:103B000004FA0CF414EA010058D04FEA4C010325E2 +:103B10008D406FEA050E7D6805F0030ABAF1010FCA +:103B20001CBF05F00305022D13D1B568D7F80CA012 +:103B30000EEA05050AFA01FA4AEA0505B560756854 +:103B400025EA04047D68C5F3001505FA0CF52C433D +:103B500074603D79BC6805F00305032D08BF012C96 +:103B600005D0F5688C400EEA05052C43F4603C79DD +:103B700004F00304022C14D14FEADC0406EB8404A5 +:103B8000D4F820A04FEA8C0505F01C0509FA05FBC6 +:103B90002AEA0B0AD7F810B00BFA05F545EA0A0530 +:103BA000256234680EEA04053C7904F0030404FA43 +:103BB00001F129433160796811F4403F40D04FEA68 +:103BC0009C01DFF880A158F821E04FEACC040AEA12 +:103BD000962A04F0180409FA04F52EEA05050AFAF3 +:103BE00004F444EA050E48F821E0D3F800E07C68CC +:103BF000C14301EA0E0EE50248BF40EA0E0EC3F8CB +:103C000000E0D3F804E07C6801EA0E0EA50248BF8C +:103C100040EA0E0EC3F804E0D2F804E07C6801EA42 +:103C20000E0EA50348BF40EA0E0EC2F804E0D2F81B +:103C300000E07C6801EA0E01E40348BF0143116023 +:103C40000CF1010C396831FA0CF07FF458AFBDE883 +:103C5000F08F2DE9F04F02460027384BDFF8D8806F +:103C60004FF00F09DFF8D8A053E0012000FA07FC5D +:103C70001CEA01004CD04FEA970EDFF8C8B05AF8A2 +:103C80002E60FD000BEA922B05F0180509FA05F4E9 +:103C900026400BFA05F5AE4216D1D8F80050C043C5 +:103CA0000540C8F80050D8F804600640C8F8046021 +:103CB0005D6805405D601E68304018605AF82E004F +:103CC00020EA04044AF82E4003207C00A040146837 +:103CD000FD0802EB850E04431460DEF82040BD00B1 +:103CE00005F01C0509FA05F5AC43CEF82040D2F8E2 +:103CF00008E0C04300EA0E0EC2F808E0546824EA67 +:103D00000C0CC2F804C0D2F80CC000EA0C00D06061 +:103D10007F1C31FA07F0A8D1BDE8F08F0AB18161AC +:103D2000704781627047426901EA0203914341EAA8 +:103D30000341816170470000802002460020024656 +:103D4000602002467F7F2F00F8B504461F4D28787B +:103D5000002100282ED01E4A12681E4B1E687707CD +:103D600002D54FF47A710DE01B4B1B6813F440032E +:103D700006D0B3F5800F08D0B3F5000F0ED015E0D4 +:103D80004FF4FA51B1FBF0F00EE04FF47A72B2FB4F +:103D9000F0F24FF4FA43B3FBF2F107E04FF47A711B +:103DA000B1FBF0F04FF40042B2FBF0F10846FFF730 +:103DB00053FE08B10120F2BD002221464FF0FF3032 +:103DC000FFF709FEAC600020F2BD00BF000000203C +:103DD0000C00002010E000E0E00C024680B50B482B +:103DE000016841F4807101600320FFF7E7FD00F0F6 +:103DF00063FB0420FFF742FE0F20FFF7A5FF08B189 +:103E0000012002BD00F0D0FB002002BD00200240D6 +:103E100038B586B0142101A8FFF7C8FC46480168F0 +:103E200048F29105454C41F002010160026802F040 +:103E3000020200920099026842F0010202600368E7 +:103E400003F00103009300990268294642F004023E +:103E500002600068002200F004000090009800F06A +:103E600049F801210291002201950392049201A9CF +:103E70002046FFF737FE07B030BD012200E00022E8 +:103E800080212E48FFF74ABF10B52C4C012210218B +:103E900000F030F82A4800F0A9FA00F055F800F0D8 +:103EA00027F8642000F0A0FB012200F022F8012294 +:103EB00000F04BF8C82000F097FB00F019F84FF421 +:103EC000AF7000F091FB00F03FF8642000F08CFB35 +:103ED0000C24FFF7D2FF4FF4FA7000F085FBFFF7D8 +:103EE000CEFF4FF4FA7000F07FFB641EF1D110BDDD +:103EF000002201212046FFF711BF10B5114800F044 +:103F000075FA0E4C00F020F8642000F06DFB0122E1 +:103F100000F01BF84FF42F7000F066FB00F014F86F +:103F2000FFF7ABFF1E244FF47A7000F05DFB641EB8 +:103F3000F9D1BDE81040A2E78C0C02460004024211 +:103F40006C5E0008905E000800224FF4004120469D +:103F5000FFF7E4BE18B587B01C220021684600F0C8 +:103F600057FB284C28482060FF20E0604FF080403D +:103F700000217F22E0616160A26021616161A16135 +:103F800021626162204600F04DFB08B1FFF788FB1B +:103F9000002100910391049105916946204600F0AB +:103FA00042FC08B1FFF77CFB00220021204600F014 +:103FB000F7FB08B1FFF774FB08B010BD10B590B067 +:103FC000044640220021684600F022FB21680E4A88 +:103FD000914215D14FF480434FF4007100930E913C +:103FE0006846FFF7E7FB08B1FFF75AFB074801688F +:103FF00041F400110160006800F400100090009886 +:1040000010B010BDA00A002000780046A80C02469F +:1040100080B5002000F026FC08B1FFF741FB00F05E +:104020002DFC18B1BDE80140FFF73ABB01BD00000F +:104030002DE9F04F9BB0002000900027DFF8C4521C +:104040000FF234360FF21C3B0FF204380FF2EC295A +:10405000DFF8B4A2322000F0C7FAFFF715FF78208E +:1040600000F094F804460A22514601A800F016FC1C +:104070000146484600F0BAF900F084F801A800F0C3 +:1040800031F901A9404600F0B1F900F07BF801A830 +:1040900000F024F901A9584600F0A8F900F072F8E0 +:1040A00001A800F02AF901A9304600F09FF900F0BC +:1040B00069F801A800F01DF901A90FF2C82000F06D +:1040C00095F9652101A87F1CFFF770FBFF2C4FD0ED +:1040D0000A2C54D0002C1DD1284600F087F900F09E +:1040E00051F8684600F0E6F80098632808D04100CF +:1040F0000246713949B205F12C0000F077F903E06E +:1041000005F15C0000F072F970A000F06FF905F5A0 +:10411000807015E0FBD0012C17D0022C1FD0032C8F +:1041200023D0042C18BF052C0FD00A2C27D0FF2C2D +:104130001ED021460FF2782000F058F905F5CE7018 +:1041400000F054F9032F85DB0CE000F0AFF805F127 +:10415000840000F04BF900201BB0BDE8F08F05F1A2 +:10416000B000EDE74FF0FF30F6E705F1D800E7E7E4 +:1041700005F5947000F03AF905F5B070E0E70FF23C +:104180001020DDE7652101A8FFF710BB2DE9F04FF6 +:1041900085B0002603968DF81060DFF86CB182467A +:1041A000FEF708FE0546DFF86411584600F085FE6C +:1041B000DFF85C01DFF85C11DFF85C21029001910F +:1041C0000092DFF85831DFF85821DFF858115846CF +:1041D000FF274FF47A7400F047FC04FB0AF402282E +:1041E00060D1584600F064FC022855D1FEF7E2FD8C +:1041F000401B39A7DFF830814FF6FF790EE03846D3 +:1042000000F0F4F805E0002EF9D1404600F0EEF899 +:10421000012600F04BF8FEF7CDFD401BA04201D374 +:10422000CA4511D103A9584600F078FD0228F2D101 +:1042300003986328E7D04100713949B20FF290101A +:1042400000F0D4F800F032F8FEF7B4FD401B9DF901 +:10425000107004E000F02AF8FEF7ACFD401BA0420D +:1042600001D3CA450DD1584600F06FFD022808D091 +:104270007F1C78B20128EDD1584600F084FD022859 +:10428000E8D0584600F09EFD0746012818BF0528D3 +:1042900008D1FEF78FFD05E0082802BF9BF8D27019 +:1042A000032F1327384605B0BDE8F08F4FF47A701E +:1042B00000F09AB9014610B500F00BF800F02EFDA1 +:1042C000022808BF0024204610BD00000D0A00008F +:1042D00001210D48022470472E00000080B56422A1 +:1042E000124902E080B51022114900F0D7FA0020EF +:1042F00002BD80B514220F49F7E780B510220E49A0 +:10430000F3E70000D05A0008B8060020B52D0008D9 +:10431000D52C0008052D0008ED2C00089D2C000868 +:104320005D1C0008B52A0008E85D0008F4060020BE +:10433000C2060020C0070020580700204D6F64759A +:104340006C65204E616D653A2025730D0A000000F2 +:1043500050726F647563742049443A2025730D0AC6 +:104360000000000046572056657273696F6E3A2050 +:1043700025730D0A00000000494D45493A20257378 +:104380000D0A000049434349443A2025730D0A00B1 +:104390000D0A203E3E3E2053494D206973206E6F2A +:1043A0007420494E5345525445440D0A0D0A0000ED +:1043B0000D0A203E3E3E204D6F64756C65205349CA +:1043C0004D204572726F723A2025640D0A0000007C +:1043D0000D0A5369676E616C204C6576656C3A20F6 +:1043E00025642064426D0D0A000000000EB4C0B5C3 +:1043F000024603A800210190009101AB012104486D +:1044000078440C30FBF7ADFE06BC5DF810FB00BF36 +:10441000391B000010B5134A116B01F48031814241 +:104420001BD01168104B21F48031084310601C68C8 +:1044300032200E494443B4FBF1F1491C084601E027 +:1044400068B1401E13681C04FAD540B101E031B1D7 +:10445000491E106B0304FAD509B1002010BD0320DA +:1044600010BD00000C0802460C00002040420F0066 +:1044700000B500BF130096469446103928BFA0E847 +:104480000C50FAD85FEA417C28BF0CC048BF40F806 +:10449000042BC90728BF20F8022B48BF00F8012BC6 +:1044A00000BD000037480168374A41F470010160DF +:1044B000364810607047000030B53549CB69354843 +:1044C000354A03F00C03082B02D00C2B07D04BE02D +:1044D00010460A68120D02F00102D04044E08B6AD7 +:1044E0004C6BC3F302256D1C00EE105AC4F3080593 +:1044F000C4F30664641C6D1C01EE104A00EE905A71 +:10450000DC0607D58C6BC4F3CC0401EE904AFBEEBD +:10451000E91A01E0DFED1A1A03F00303022B02D0BF +:10452000032B03D00AE002EE100A09E00868000D30 +:1045300000F00100C24002EE102A01E09FED102AB7 +:10454000B8EE422AB8EE400AF8EE600A82EE000A9F +:1045500070EEA10A20EE200AF8EE410A80EE200A51 +:10456000BCEEC00A10EE100A0C4A1060096A00BFC7 +:104570000BA301F00701595CC840106030BD00007A +:104580000000000088ED00E008ED00E000000008F9 +:10459000000C02460024F4000048E8010C00002052 +:1045A000000000000102030480B50E48816841F05C +:1045B00004018160816801F00401009100990268A2 +:1045C000002142F4801202600068002200F4801092 +:1045D000009000984420FFF7FEF94420BDE8024017 +:1045E000FFF720BA8C0C024638B50446FEF7E2FB12 +:1045F000054614F1010F02D0044908780419FEF7AA +:10460000D9FB401BA042FAD331BD00BF00000020FF +:1046100010B5044610460A460146204600F0EEFC5E +:10462000204610BD70B504460120002C49D004F18D +:104630002C05697821B9002028702046FFF7BEFCC0 +:1046400002216970DFF850613068C10636D4CA2093 +:10465000B0615321B161204600F052F8010028D129 +:10466000F168DFF838010140F160F26860682169A3 +:104670000243A0690A430243F260E168A06841EA8C +:10468000004171603268616AA06A22F4F8520A43FC +:1046900002433260204600F057F8010009D1F36868 +:1046A000226AE16923F06043134362690B431343B9 +:1046B000F360FF21B161020003D100E0002001217D +:1046C000697070BD84F82D0070BD70B50446324D20 +:1046D000286820F020002860FEF76CFB064628685A +:1046E00081060BD4FEF766FB801B40F2E93188425D +:1046F000F5D32868810601D40320E3E7002070BDCC +:10470000F8B50546244C2068002641061AD42068D6 +:1047100040F080002060FEF74DFB074603E00320D9 +:10472000032685F82D00216848060BD4032E09D0F6 +:10473000FEF740FBC01B40F2E9318842F3D320680A +:104740004106ECD53046F2BD70B50446124D2868DE +:10475000002620F080002860E968880608D42046FA +:10476000FFF7B3FFA0B1032084F82D0003260FE06C +:10477000E86820F02000E8602046FFF7A6FF18B1A7 +:10478000032084F82D000326E86840F02000E8604C +:10479000304670BD000000000C780046BFFF8FFB64 +:1047A0002DE9F04100F12C0630780C461546012821 +:1047B00008BF02202FD00120307002217170DFF875 +:1047C0009870F86820F48060F8603968480614D45E +:1047D000FEF7F0FA8046386841070ED4FEF7EAFA91 +:1047E000A0EB080000F01BF8F5D33868410704D4AB +:1047F00003207070002131700DE0F8680121C008BD +:1048000045EAC005FD60BC60F86840F48060F8606F +:10481000717000203070BDE8F081A0EB090040F21B +:10482000E9318842704710B50A6848680C4B02436A +:104830001A608C68CA688869084B144304435C603A +:104840001A680869496922F0FF12024342EA0142EC +:1048500000201A6010BD00000C780046207C004645 +:104860001C78004610B500F010F801D5012010BDED +:10487000136823F004031943116010BD0648016852 +:1048800041F00101016000207047034A13680146AE +:104890000020DC07704700000004034001B55AB156 +:1048A00011F8013B521E00F8013B03B1F8D1110091 +:1048B0001CBF002200F0A2FB01BD000070B5024643 +:1048C00015780023002400202D2D0AD10123521C2D +:1048D000012406E012F8016B0A25641C05FB006048 +:1048E00030381578303D0A2DF4D301B10C7003B186 +:1048F000404270BD002381423CBF4FF0FF331B1A82 +:10490000591A4018101870472DE9F24F82460AF5DF +:10491000B2709AB0416893461C46249F8847019024 +:104920000BF10F024FF47A5042434FF4E13100266D +:1049300092FBF1F0B84238BF384624900025DFF8EA +:10494000A4750DF138090DF1080868206843391D78 +:1049500029F815600844FCF7D1FB28F815006D1CF8 +:10496000172DF2DB5FEA0B0008BF002C51D04FF48B +:1049700080710AF5B670FEF719FF0AF5B27A02E007 +:10498000521C172A1ADBDAF8040080470146249AE1 +:104990000198FFF7AFFF002836DDDAF8001068460F +:1049A00088470028EFD19DF800001A998855761C99 +:1049B00036B25FEA0B0224D10022682101FB02F02B +:1049C00039F812E09DF800C03B189E449EF8045050 +:1049D000AC451CBF002529F8125039F812509DF83B +:1049E00000E02B441B799E45CAD16D1C29F812505A +:1049F00038F81230ADB29D42C2D338580442BFD00D +:104A00000BE05E45BFDB04E0BBF1000F03D0002EDE +:104A100001DD304601E04FF0FF301BB0BDE8F08F04 +:104A20002DE9FC4105460C0016461F466FF00108B3 +:104A300008BF4FF4AF743046FCF760FBD5F8602137 +:104A400081B23046904700280BD4C820FFF7CCFD38 +:104A500000943B46002205F5B6712846FFF754FF47 +:104A600080464046BDE8F681F0B570B10C000CD030 +:104A700014000AD01C0008D0059C250005D0069D16 +:104A80002E0002D0079E370001D14020F0BD00F576 +:104A9000A87001604260836004614561C6600220C5 +:104AA000F0BD002204F5B67120462DE7000000009D +:104AB0002DE9FC4780460020202788F83B0100258F +:104AC000002200230A214143414401F59F71401C0B +:104AD0000A704B704D808A80CB800028F2DD08F58B +:104AE000A874E068804721688847002840F0068164 +:104AF000A06940254FF0000A8047814681A6A06941 +:104B0000804701464FF4FA724846FFF7F3FE00284B +:104B10000AD542233246642100F0FAF80546A0691E +:104B20000AF1010A804781464FFA8AF00A286ADAB8 +:104B3000022DE4D1404600F073F9064608F5A47151 +:104B4000404600F073F9054642230FF2A83200F008 +:104B5000DDF8814642230FF2A4324FF47A714046C9 +:104B60002E43FFF75DFF49EA0606064342230FF294 +:104B700094324FF4AF7100F0CBF8064308F5B675E8 +:104B80000FF29829022E46D142230FF2843200F010 +:104B9000BDF8022806D100F0BDF801460A224046C1 +:104BA000FFF77CFE42230FF2743200F0AFF80228C8 +:104BB00007D100F0AFF80146322208F10A00FFF7F2 +:104BC0006DFE42230FF2603200F0A0F8022807D1F8 +:104BD00000F0A0F80146642208F13C00FFF75EFEF9 +:104BE00042230FF250324FF4AF7100F091F80646B5 +:104BF000022E10D100F08EF80146322208F1A000FA +:104C0000FFF74CFE09E0022D94D0DFF8DC02FFF73D +:104C1000EDFB04275EE0022E5CD1A06980470646CA +:104C2000A1698847801BB0F5FA6FF9D348F24204B6 +:104C300023460FF20C3241F27C5100F069F8022851 +:104C400035D10FF20831284600F0E1F9002841D0B3 +:104C5000FF2088F8D20023460FF200324FF4AF71E4 +:104C600000F056F8022807D100F054F8014632222D +:104C700008F1D600FFF712FE42230FF2EC224FF4A8 +:104C8000AF7100F045F802280FD100F043F83A2147 +:104C9000FCF708FA18B110F8011F2029FBD00146D3 +:104CA000322208F58470FFF7F9FD022712E0B0F513 +:104CB000004F0FD100F063F801230022294640463F +:104CC000FFF722FE01A908F26D10FFF7F7FD88F843 +:104CD000D200082748F242030FF2982244F27401EE +:104CE00000F016F8022818BF20274FF01E081E20DB +:104CF000FFF77AFCB8F10108F9D100E01027384637 +:104D0000BDE8F68741540D0A000000004FF47A71A7 +:104D1000404685E64946284600F090B97CB500F04B +:104D20004CF80FF25C224FF4AF71FFF779FE0646A4 +:104D3000022E08D10FF2542100F0BBF86946801D05 +:104D4000FFF7BCFD2860304676BD38B5044694F8C0 +:104D5000D2004025FF2810D148F242030FF234223E +:104D6000DFF8881100F0BAF8022805D000F007F843 +:104D70000123FFF796FE00E00225284632BD4FF4DE +:104D80007A70009070471CB500F018F80FF21422EA +:104D9000DFF85C1101E044F27401FFF741FE0228E4 +:104DA0000AD04FF47A7000900123002204F5B67106 +:104DB0002046FFF7A9FD402016BD0D46044648F2E7 +:104DC0004203704738B500F022F818D148F2420388 +:104DD0000FF2DC1200F080F8022810D10FF2DC1183 +:104DE00000F067F858B100F1090101226846FFF7A9 +:104DF00055FD00F006F8684600F0E8F90546E8B20F +:104E000032BD022205A10DF10100FFF747BD0446A6 +:104E100094F8D200FF25FF28704700000D0A00001B +:104E200042230FF2A8124FF4AF71F9E5F8B50C4622 +:104E300042230FF2A0124FF4AF710546FFF7F0FDC9 +:104E400005F5B67602280AD10FF29411304600F02B +:104E5000DEF80021801DFFF731FDC5F8480142232F +:104E60000FF284124FF4AF7100F033F80546022DB3 +:104E70001BD10FF28011304600F0C9F8861D0021C9 +:104E80003046FFF71BFD07460021B01CFFF716FD5B +:104E9000FFB2C0B2022F04D1022814BF01200320A8 +:104EA00002E0022818BF002060602846F2BD0FF221 +:104EB000141104F5B67000F0AAB808B10A0001D1C7 +:104EC00040207047C0F868110220704760233A46BE +:104ED00041462846FFF7A4BD4FF4AF712046FFF7C7 +:104EE0009FBD000048520008185E0008B030010065 +:104EF00090D60200415456310D0A0000415445300D +:104F00000D0A000041542B434D45453D310D0A002B +:104F100041542B43474D490D0A00000041542B4397 +:104F2000474D4D0D0A00000041542B43474D520D93 +:104F30000A00000041542B4347534E0D0A00000065 +:104F400041542B4350494E3F0D0A00002B4350491A +:104F50004E3A2052454144590000000041542B4331 +:104F6000494D490D0A00000041542B49434349442F +:104F70000D0A000041542B4346554E3D310D0A00A9 +:104F800041542B4353510D0A000000002B43535151 +:104F90003A00000041542B43474154543D310D0A1F +:104FA0000000000041542B434F50533D300D0A0088 +:104FB00041542B435245473F0D0A00002B435245B5 +:104FC000473A00002B434F50533A000041542646C5 +:104FD0000D0A000041542B4950523F0D0A000000B9 +:104FE0002B4950523A00000041542B4946433F0D93 +:104FF0000A0000002B4946433A0000004018491CB3 +:105000001CBFB1F1010100F8012DF9D1704770B555 +:105010000D462C7834B970BD11F8013F1678B342B3 +:1050200006D0401C2146FCF73DF828B101462A462F +:1050300012F8013F002BEFD170BD000038B504001D +:105040000D460BD02946204600F0C7F804442078CE +:1050500048B90C4800210160002032BD09490C68A4 +:10506000002CEFD132BD2946204600F0C7F82118A8 +:10507000087810B1002201F8012B02480160204697 +:1050800032BD00BFD00A00202DE9F84F84B00E4693 +:1050900017460BB100221A600446A04601E008F151 +:1050A000010898F8000000F0BAF80028F7D198F845 +:1050B00000002D2816BF2B2818F8015B2B25002F88 +:1050C000019603D4012F01D0252F03DB002E56D0EB +:1050D000346054E0002F0CDD102F04BF98F800005E +:1050E000302802BF98F8010040F02000782811D144 +:1050F0000CE098F80000302818BF0A270AD198F869 +:10510000010040F02000782803D1102708F10208A0 +:1051100000E00827CDF80C8001E008F1010898F8BC +:1051200000003028F9D0064E7E4414364FF00009B6 +:1051300006F12800CDF80880CA468DF800000CE082 +:10514000800B000001469DF80000081ACA465FFA6D +:1051500080FB07FB09B908F1010898F8000000F08E +:1051600068F801463A4606F12800FBF7D1FF00280F +:10517000E8D10399414504D1019800B104600020B1 +:1051800020E00299F05DA8EB0101091A002910D472 +:1051900006DCB9EB0B0103D3B1FBF7F0504508D0A7 +:1051A000AFF30080049808B1012101604FF0FF398E +:1051B00003E02D2D08BFC9F10009019808B1C0F81E +:1051C0000080484605B0BDE8F08F04E000E0000034 +:1051D0000A220021F9E7002356E770B4044600E0F4 +:1051E000641C23783BB10D462A7822B115F8016B77 +:1051F000B342F9D1F4E7201A70BC704770B404468A +:1052000000E0641C23783BB10D462A78002AF8D0D0 +:1052100015F8016BB342F8D1201A70BC704710B575 +:105220000446FCF73DFC01462046096ABDE81040F3 +:10523000084710B50446FCF733FC01462046896A4E +:10524000BDE8104008470000100000004F4B0D0A59 +:10525000000000000000000000000000000000004E +:10526000000000000000000000000000000000003E +:10527000000000000000000000000000000000002E +:10528000000000000000000000000000000000001E +:10529000000000000000000000000000000000000E +:1052A00000000000000000000000000000000000FE +:1052B000080000003E0000000000000000000000A8 +:1052C00000000000000000000000000000000000DE +:1052D00000000000000000000000000000000000CE +:1052E00000000000000000000000000000000000BE +:1052F00000000000000000000000000000000000AE +:10530000000000000000000000000000000000009D +:10531000000000000000000000400000434950521F +:105320005847455400000000000000000000000045 +:10533000000000000000000000000000000000006D +:10534000000000000000000000000000000000005D +:10535000000000000000000000000000000000004D +:10536000000000000000000000000000000000003D +:10537000000000000000000000000000000000002D +:105380000000040043495053454E44000000000013 +:10539000000000000000000000000000000000000D +:1053A00000000000000000000000000000000000FD +:1053B00000000000000000000000000000000000ED +:1053C00000000000000000000000000000000000DD +:1053D00000000000000000000000000000000000CD +:1053E000000000000000000000000200504F574580 +:1053F00052454420444F574E0D0A00000000000063 +:10540000000000000000000000000000000000009C +:10541000000000000000000000000000000000008C +:10542000000000000000000000000000000000007C +:10543000000000000000000000000000000000006C +:10544000000000000000000000000000000000005C +:10545000000009005244590D0A000000000000003D +:10546000000000000000000000000000000000003C +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C +:10549000000000000000000000000000000000000C +:1054A00000000000000000000000000000000000FC +:1054B000000000000000000080000000636C6F73BB +:1054C00065642200000000000000000000000000F1 +:1054D00000000000000000000000000000000000CC +:1054E00000000000000000000000000000000000BC +:1054F00000000000000000000000000000000000AC +:10550000000000000000000000000000000000009B +:10551000000000000000000000000000000000008B +:105520000001000043495052584745543A535543EF +:10553000434553530000000000000000000000003D +:10554000000000000000000000000000000000005B +:10555000000000000000000000000000000000004B +:10556000000000000000000000000000000000003B +:10557000000000000000000000000000000000002B +:10558000000000000000000000020000696E636F70 +:105590006D696E672066756C6C220000000000006B +:1055A00000000000000000000000000000000000FB +:1055B00000000000000000000000000000000000EB +:1055C00000000000000000000000000000000000DB +:1055D00000000000000000000000000000000000CB +:1055E00000000000000000000000000000000000BB +:1055F00000040000696E636F6D696E672200000031 +:10560000000000000000000000000000000000009A +:10561000000000000000000000000000000000008A +:10562000000000000000000000000000000000007A +:10563000000000000000000000000000000000006A +:10564000000000000000000000000000000000005A +:10565000000000000000000000080000706470649A +:10566000656163742200000000000000000000007B +:10567000000000000000000000000000000000002A +:10568000000000000000000000000000000000001A +:10569000000000000000000000000000000000000A +:1056A00000000000000000000000000000000000FA +:1056B00000000000000000000000000000000000EA +:1056C000001000002B4D444E534749503A00000053 +:1056D00000000000000000000000000000000000CA +:1056E00000000000000000000000000000000000BA +:1056F00000000000000000000000000000000000AA +:105700000000000000000000000000000000000099 +:105710000000000000000000000000000000000089 +:105720000000000000000000400000004552524F01 +:10573000520D0A0000000000000000000000000000 +:105740000000000000000000000000000000000059 +:105750000000000000000000000000000000000049 +:105760000000000000000000000000000000000039 +:105770000000000000000000000000000000000029 +:105780000000000000000000000000000000000019 +:1057900000800000434D45204552524F523A0000D0 +:1057A00000000000000000000000000000000000F9 +:1057B00000000000000000000000000000000000E9 +:1057C00000000000000000000000000000000000D9 +:1057D00000000000000000000000000000000000C9 +:1057E00000000000000000000000000000000000B9 +:1057F0000000000000000000002000004552524F51 +:10580000520D0A000000000000000000000000002F +:105810000000000000000000000000000000000088 +:105820000000000000000000000000000000000078 +:105830000000000000000000000000000000000068 +:105840000000000000000000000000000000000058 +:105850000000000000000000000000000000000048 +:10586000020000004F4B0D0A000000000000000085 +:105870000000000000000000000000000000000028 +:105880000000000000000000000000000000000018 +:105890000000000000000000000000000000000008 +:1058A00000000000000000000000000000000000F8 +:1058B00000000000000000000000000000000000E8 +:1058C0000000000000000000200000004F50454E86 +:1058D0003A0000000000000000000000000000008E +:1058E00000000000000000000000000000000000B8 +:1058F00000000000000000000000000000000000A8 +:105900000000000000000000000000000000000097 +:105910000000000000000000000000000000000087 +:105920000000000000000000000000000000000077 +:105930000400000072656164790D0A000000000037 +:105940000000000000000000000000000000000057 +:105950000000000000000000000000000000000047 +:105960000000000000000000000000000000000037 +:105970000000000000000000000000000000000027 +:105980000000000000000000000000000000000017 +:105990000000000000000000000008000D0A0D0AD1 +:1059A0004F4B00000000000000000000000000005D +:1059B00000000000000000000000000000000000E7 +:1059C00000000000000000000000000000000000D7 +:1059D00000000000000000000000000000000000C7 +:1059E00000000000000000000000000000000000B7 +:1059F00000000000000000000000000000000000A7 +:105A0000100008000D0A0D0A000000000000000050 +:105A10000000000000000000000000000000000086 +:105A20000000000000000000000000000000000076 +:105A30000000000000000000000000000000000066 +:105A40000000000000000000000000000000000056 +:105A50000000000000000000000000000000000046 +:105A60000000000000000000010000000D0A00001E +:105A70000000000000000000000000000000000026 +:105A80000000000000000000000000000000000016 +:105A90000000000000000000000000000000000006 +:105AA00000000000000000000000000000000000F6 +:105AB00000000000000000000000000000000000E6 +:105AC00000000000000000000000000000000000D6 +:105AD0005375636365737366756C20496E69746989 +:105AE000616C697A6174696F6E206F662074686595 +:105AF000204D6F64756C650D0A0D0A005369676E61 +:105B0000616C205175616C697479204C6576656CA7 +:105B10002025642064426D202847534D20466F7233 +:105B20006D61743A20256C64290D0A005369676E13 +:105B3000616C205175616C697479204C6576656C77 +:105B4000206E6F742064657465637461626C650DAA +:105B50000A0000000D0A203E3E3E204D6F64756C29 +:105B60006520526567697374726174696F6E205342 +:105B700075636365737366756C0D0A0D0A0000002A +:105B80000D0A203E3E3E204D6F64756C65205265C7 +:105B900067697374726174696F6E20547279696E8B +:105BA000670D0A0D0A0000000D0A203E3E3E204D02 +:105BB0006F64756C6520526567697374726174698E +:105BC0006F6E2044656E6965640D0A0D0A00000061 +:105BD0000D0A203E3E3E204D6F64756C6520526577 +:105BE00067697374726174696F6E204661696C6570 +:105BF000640D0A0D0A0000000D0A203E3E3E204DB5 +:105C00006F64756C6520415420436F6D6D756E69CE +:105C1000636174696F6E204572726F722077697468 +:105C20006820746865204465766963650D0A000024 +:105C3000203E3E3E20446576696365206D69676855 +:105C40007420626520646973636F6E6E656374654A +:105C500064206F722077726F6E676C7920636F6E4D +:105C60006E65637465640D0A0D0A0000203E3E3EB9 +:105C700020506C6561736520636865636B2069669D +:105C8000207468652053494D20697320696E7365DF +:105C90007274656420616E642076616C69642C2086 +:105CA00069662063726564656E7469616C732061F6 +:105CB0007265206F6B2C206574632E0D0A0D0A002F +:105CC00000002115110E0D0C0B0B0A0A0909090918 +:105CD000090808080808080807070707070707074B +:105CE00007070707070000003031323334353637F5 +:105CF00038396162636465666768696A6B6C6D6E8A +:105D00006F707172737475767778797A000000001D +:105D100080B50D49794430310C4A7A442E32914293 +:105D200003D00B49AFF3008002BD8DF800000122C3 +:105D300069460120FDF712F8012802D19DF8000004 +:105D400002BD4FF0FF3002BDB8A2FFF7B4A2FFF7CB +:105D50009000002030B4002512E050F8042BD30747 +:105D600044BF4A44521E091F042942F8045BFAD278 +:105D700013468C0744BF15809B1CC90748BF1D7084 +:105D800050F8041B0029E8D130BC7047FEE7FEE75D +:105D9000FEE7FEE7FEE770477047704700F010B877 +:105DA00080B580210348FDF7BEFF0348BDE80240EF +:105DB000FBF7F6BF00040242BC09002000F008B85F +:105DC00002494A68087882184A607047000000203B +:105DD0000349C8680A6882430A60486000F002B854 +:105DE000001D0C42704700005369676E616C2069AA +:105DF00073206E6F74206B6E6F776E206F72206EE3 +:105E00006F742064657465637461626C6520796584 +:105E1000742E2E2E200000004661696C20746F20C5 +:105E200041542053594E432C20616674657220738F +:105E300065766572616C20617474656D7074730D44 +:105E40000A00000010B5074979441831064C7C441B +:105E5000163404E00A68081D114488470146A1422F +:105E6000F8D110BD7400000090000000202D2D2DF1 +:105E7000205155454354454C204547393120506FFA +:105E8000776572205570202D2D2D0D0A0000000021 +:105E9000202D2D2D205155454354454C2045473943 +:105EA00031205368757420446F776E202D2D2D207E +:105EB0000D0A00004EF68851CEF20001086840F449 +:105EC00070000860BFF34F8FBFF36F8F4FF001700A +:105ED000E1EE100A704700007DFEFFFF000A00009F +:105EE000D8000020000000003FB1FFFF9C0100002F +:105EF000A80000000000002000F00DF8002801D0EC +:105F0000FFF7A0FFAFF300800020AFF30080FDF7A4 +:105F10006BFB00F002F80120704700F001B80000B0 +:105F200007463846FBF74CFEFBE7000005480146F4 +:105F300003B4684680F30988AFF30080FFF7BAFF27 +:105F4000FFF7DAFFA5EDF5FE38B504460D46284605 +:105F5000FFF7DEFEA84218BF0024204632BD000035 +:105F60000148804701480047A54400082D5F00080C +:105F70000000000001020304FFF7FEBFFFF7FEBFB1 +:105F8000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF45 +:105F9000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF35 +:105FA000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF25 +:105FB000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF15 +:105FC000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF05 +:105FD000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFF5 +:105FE000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFE5 +:105FF000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFD5 +:10600000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFC4 +:10601000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFB4 +:10602000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFA4 +:10603000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF94 +:10604000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF84 +:10605000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF74 +:10606000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF64 +:10607000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF54 +:10608000FFF7FEBFFFF7FEBF43010001221008F03B +:10609000050724F400CA1300080452FF01E3BA10F4 +:1060A0001410010000920C214C1148F30220000151 +:1060B0001003811A00087504129504F10320618809 +:1060C000100702040101500A0020A00452500421CC +:0C60D0001B610812D460F206C064A1013C +:0400000508005F2D63 +:00000001FF diff --git a/EWARM/WiseEye-LTE/Exe/WiseEye-LTE.out b/EWARM/WiseEye-LTE/Exe/WiseEye-LTE.out new file mode 100644 index 0000000..ba64d28 Binary files /dev/null and b/EWARM/WiseEye-LTE/Exe/WiseEye-LTE.out differ diff --git a/EWARM/WiseEye-LTE/Exe/WiseEye-LTE.sim b/EWARM/WiseEye-LTE/Exe/WiseEye-LTE.sim new file mode 100644 index 0000000..fcdda2f Binary files /dev/null and b/EWARM/WiseEye-LTE/Exe/WiseEye-LTE.sim differ diff --git a/EWARM/WiseEye-LTE/List/WiseEye-LTE.map b/EWARM/WiseEye-LTE/List/WiseEye-LTE.map new file mode 100644 index 0000000..94a9b38 --- /dev/null +++ b/EWARM/WiseEye-LTE/List/WiseEye-LTE.map @@ -0,0 +1,822 @@ +############################################################################### +# +# IAR ELF Linker V9.40.2.374/W64 for ARM 01/Aug/2025 14:11:46 +# Copyright 2007-2023 IAR Systems AB. +# +# Output file = +# C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Exe\WiseEye-LTE.out +# Map file = +# C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\List\WiseEye-LTE.map +# Command line = +# -f "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Exe\WiseEye-LTE.out.rsp" +# ("C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\Core_13247989168731456611.dir\eg91.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\Core_13247989168731456611.dir\gpio.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\Core_13247989168731456611.dir\icache.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\Core_13247989168731456611.dir\lte_comms.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\Core_13247989168731456611.dir\main.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\Core_13247989168731456611.dir\rtc.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\EWARM_18443280873093131863.dir\startup_stm32wba52xx.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir\stm32wbaxx_hal.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir\stm32wbaxx_hal_cortex.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir\stm32wbaxx_hal_dma.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir\stm32wbaxx_hal_dma_ex.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir\stm32wbaxx_hal_exti.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir\stm32wbaxx_hal_flash.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir\stm32wbaxx_hal_flash_ex.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir\stm32wbaxx_hal_gpio.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir\stm32wbaxx_hal_hsem.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir\stm32wbaxx_hal_icache.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\Core_13247989168731456611.dir\stm32wbaxx_hal_msp.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir\stm32wbaxx_hal_pwr.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir\stm32wbaxx_hal_pwr_ex.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir\stm32wbaxx_hal_rcc.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir\stm32wbaxx_hal_rcc_ex.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir\stm32wbaxx_hal_rtc.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir\stm32wbaxx_hal_rtc_ex.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir\stm32wbaxx_hal_uart.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir\stm32wbaxx_hal_uart_ex.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\Core_13247989168731456611.dir\stm32wbaxx_it.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\CMSIS_6603591812247902717.dir\system_stm32wbaxx.o" +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\Core_13247989168731456611.dir\usart.o" +# --redirect _Printf=_PrintfFullNoMb --redirect _Scanf=_ScanfFullNoMb +# --no_out_extension -o "C:\Users\Admin\Documents\.Projects\7. Cellular +# Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Exe\WiseEye-LTE.out" +# --map "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\List\WiseEye-LTE.map" +# --config "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM/stm32wba52xx_flash.icf" +# --semihosting --entry __iar_program_start --vfe --text_out locale +# --cpu=Cortex-M33.no_dsp.no_se --fpu=VFPv5_sp) --dependencies=n +# "C:\Users\Admin\Documents\.Projects\7. Cellular Relay +# Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Exe\WiseEye-LTE.out.iar_deps" +# +############################################################################### + +******************************************************************************* +*** RUNTIME MODEL ATTRIBUTES +*** + +CppFlavor = * +__CPP_Runtime = 1 +__SystemLibrary = DLib +__dlib_version = 6 + + +******************************************************************************* +*** HEAP SELECTION +*** + +The basic heap was selected because --advanced_heap +was not specified and the application did not appear to +be primarily optimized for speed. + + +******************************************************************************* +*** PLACEMENT SUMMARY +*** + +"A0": place at address 0x800'0000 { ro section .intvec }; +"P1": place in [from 0x800'0000 to 0x80f'ffff] { ro }; +define block CSTACK with size = 1K, alignment = 8 { }; +define block HEAP with size = 512, alignment = 8 { }; +"P2": place in [from 0x2000'0000 to 0x2000'ffff] { + rw, block CSTACK, block HEAP }; +initialize by copy { rw }; + + Section Kind Address Size Object + ------- ---- ------- ---- ------ +"A0": 0x15c + .intvec ro code 0x800'0000 0x15c startup_stm32wba52xx.o [3] + - 0x800'015c 0x15c + +"P1": 0x5f80 + .text ro code 0x800'015c 0xeca xprintffull_nomb.o [5] + .text ro code 0x800'1026 0x7e lz77_init_single.o [7] + .text ro code 0x800'10a4 0x16 strchr.o [7] + .rodata const 0x800'10ba 0x2 xlocale_c.o [5] + .text ro code 0x800'10bc 0x40 xfail_s.o [5] + .text ro code 0x800'10fc 0x14 strlen_small.o [7] + .text ro code 0x800'1110 0x58 memchr.o [7] + .text ro code 0x800'1168 0x18 ABImemcpy_small.o [7] + .text ro code 0x800'1180 0x70 frexp.o [6] + .text ro code 0x800'11f0 0x34 DblCmpLe.o [6] + .text ro code 0x800'1224 0x34 DblCmpGe.o [6] + .text ro code 0x800'1258 0x13a ldexp.o [6] + .rodata const 0x800'1392 0x2 xlocale_c.o [5] + .text ro code 0x800'1394 0x36 DblToS32.o [6] + .rodata const 0x800'13ca 0x1 xlocale_c.o [5] + .text ro code 0x800'13cc 0x22 S32ToDbl.o [6] + .text ro code 0x800'13f0 0x24e DblAddSub.o [6] + .text ro code 0x800'1640 0x246 DblDiv.o [6] + .text ro code 0x800'1888 0x22 DblToU32.o [6] + .text ro code 0x800'18ac 0x1c U32ToDbl.o [6] + .text ro code 0x800'18c8 0x1aa DblMul.o [6] + .text ro code 0x800'1a74 0x3c xlocale_c.o [5] + .text ro code 0x800'1ab0 0x106 I64DivMod_small.o [7] + .text ro code 0x800'1bb6 0x6 abort.o [5] + .text ro code 0x800'1bbc 0x2 I64DivZer.o [7] + .text ro code 0x800'1bc0 0x14 exit.o [8] + .text ro code 0x800'1bd4 0xe90 stm32wbaxx_hal_uart.o [4] + .text ro code 0x800'2a64 0x350 usart.o [2] + .text ro code 0x800'2db4 0xc stm32wbaxx_hal.o [4] + .text ro code 0x800'2dc0 0xbe stm32wbaxx_hal_dma.o [4] + .text ro code 0x800'2e7e 0x2 stm32wbaxx_hal_uart.o [4] + .text ro code 0x800'2e80 0x2 stm32wbaxx_hal_uart.o [4] + .text ro code 0x800'2e82 0x2 stm32wbaxx_hal_uart.o [4] + .text ro code 0x800'2e84 0x2 stm32wbaxx_hal_uart_ex.o [4] + .text ro code 0x800'2e86 0x2 stm32wbaxx_hal_uart_ex.o [4] + .text ro code 0x800'2e88 0x760 stm32wbaxx_hal_rcc.o [4] + .text ro code 0x800'35e8 0xcc main.o [2] + .text ro code 0x800'36b4 0xf8 stm32wbaxx_hal_uart_ex.o [4] + .text ro code 0x800'37ac 0x6 ABImemclr4.o [7] + .text ro code 0x800'37b4 0x208 stm32wbaxx_hal_rcc_ex.o [4] + .text ro code 0x800'39bc 0x128 stm32wbaxx_hal_cortex.o [4] + .text ro code 0x800'3ae4 0x264 stm32wbaxx_hal_gpio.o [4] + .text ro code 0x800'3d48 0x94 stm32wbaxx_hal.o [4] + .text ro code 0x800'3ddc 0x34 stm32wbaxx_hal.o [4] + .text ro code 0x800'3e10 0x144 gpio.o [2] + .text ro code 0x800'3f54 0xbc rtc.o [2] + .text ro code 0x800'4010 0x1e icache.o [2] + .text ro code 0x800'4030 0x3bc lte_comms.o [2] + .text ro code 0x800'43ec 0x28 printf.o [5] + .text ro code 0x800'4414 0x5c stm32wbaxx_hal_pwr_ex.o [4] + .text ro code 0x800'4470 0x32 ABImemset48.o [7] + .text ro code 0x800'44a4 0x104 system_stm32wbaxx.o [1] + .text ro code 0x800'45a8 0x40 stm32wbaxx_hal_msp.o [2] + .text ro code 0x800'45e8 0x28 stm32wbaxx_hal.o [4] + .text ro code 0x800'4610 0x14 memset.o [7] + .text ro code 0x800'4624 0x17c stm32wbaxx_hal_rtc.o [4] + .text ro code 0x800'47a0 0xc4 stm32wbaxx_hal_rtc_ex.o [4] + .text ro code 0x800'4864 0x38 stm32wbaxx_hal_icache.o [4] + .text ro code 0x800'489c 0x1e strncpy_small.o [7] + .text ro code 0x800'48bc 0x740 eg91.o [2] + .text ro code 0x800'4ffc 0x12 ABImemset_small.o [7] + .text ro code 0x800'500e 0x2c strstr.o [5] + .text ro code 0x800'503c 0x4c strtok.o [5] + .text ro code 0x800'5088 0x152 iar_Stoulx.o [5] + .text ro code 0x800'51da 0x22 strspn.o [5] + .text ro code 0x800'51fc 0x22 strcspn.o [5] + .text ro code 0x800'521e 0x14 isspace.o [5] + .text ro code 0x800'5232 0x14 tolower.o [5] + .rodata const 0x800'5248 0x888 eg91.o [2] + .rodata const 0x800'5ad0 0x1f0 lte_comms.o [2] + .rodata const 0x800'5cc0 0x50 iar_Stoulx.o [5] + .text ro code 0x800'5d10 0x44 putchar.o [5] + .text ro code 0x800'5d54 0x38 zero_init3.o [7] + .text ro code 0x800'5d8c 0x34 stm32wbaxx_it.o [2] + .text ro code 0x800'5dc0 0x10 stm32wbaxx_hal.o [4] + .text ro code 0x800'5dd0 0x14 stm32wbaxx_hal_hsem.o [4] + .text ro code 0x800'5de4 0x2 stm32wbaxx_hal_hsem.o [4] + .rodata const 0x800'5de8 0x30 lte_comms.o [2] + .rodata const 0x800'5e18 0x2c eg91.o [2] + .text ro code 0x800'5e44 0x28 data_init.o [7] + .rodata const 0x800'5e6c 0x24 gpio.o [2] + .rodata const 0x800'5e90 0x24 gpio.o [2] + .text ro code 0x800'5eb4 0x22 fpinit_M.o [6] + .iar.init_table const 0x800'5ed8 0x20 - Linker created - + .text ro code 0x800'5ef8 0x1e cmain.o [7] + .text ro code 0x800'5f16 0x4 low_level_init.o [5] + .text ro code 0x800'5f1a 0x4 exit.o [5] + .text ro code 0x800'5f20 0xa cexit.o [7] + .text ro code 0x800'5f2c 0x1c cstartup_M.o [7] + .text ro code 0x800'5f48 0x16 xprout.o [5] + .text ro code 0x800'5f60 0x10 startup_stm32wba52xx.o [3] + .rodata const 0x800'5f70 0x8 system_stm32wbaxx.o [1] + .text ro code 0x800'5f78 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5f7c 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5f80 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5f84 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5f88 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5f8c 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5f90 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5f94 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5f98 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5f9c 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fa0 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fa4 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fa8 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fac 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fb0 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fb4 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fb8 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fbc 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fc0 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fc4 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fc8 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fcc 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fd0 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fd4 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fd8 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fdc 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fe0 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fe4 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fe8 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5fec 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5ff0 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5ff4 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5ff8 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'5ffc 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6000 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6004 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6008 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'600c 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6010 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6014 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6018 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'601c 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6020 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6024 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6028 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'602c 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6030 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6034 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6038 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'603c 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6040 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6044 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6048 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'604c 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6050 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6054 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6058 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'605c 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6060 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6064 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6068 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'606c 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6070 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6074 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6078 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'607c 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6080 0x4 startup_stm32wba52xx.o [3] + .text ro code 0x800'6084 0x4 startup_stm32wba52xx.o [3] + .rodata const 0x800'6088 0x0 zero_init3.o [7] + .rodata const 0x800'6088 0x0 lz77_init_single.o [7] + Initializer bytes const 0x800'6088 0x54 + - 0x800'60dc 0x5f80 + +"P2", part 1 of 3: 0xd8 + P2-1 0x2000'0000 0xd8 + .data inited 0x2000'0000 0xc stm32wbaxx_hal.o [4] + .data inited 0x2000'000c 0x4 system_stm32wbaxx.o [1] + .data inited 0x2000'0010 0x38 xlocale_c.o [5] + .data inited 0x2000'0048 0x48 xlocale_c.o [5] + .data inited 0x2000'0090 0x48 xfiles.o [5] + - 0x2000'00d8 0xd8 + +"P2", part 2 of 3: 0xa00 + .bss zero 0x2000'00d8 0x5e0 usart.o [2] + .bss zero 0x2000'06b8 0x270 lte_comms.o [2] + .bss zero 0x2000'0928 0x94 usart.o [2] + .bss zero 0x2000'09bc 0x94 usart.o [2] + .bss zero 0x2000'0a50 0x50 xfiles.o [5] + .bss zero 0x2000'0aa0 0x30 rtc.o [2] + .bss zero 0x2000'0ad0 0x4 strtok.o [5] + .bss zero 0x2000'0ad4 0x4 xfail_s.o [5] + - 0x2000'0ad8 0xa00 + +"P2", part 3 of 3: 0x400 + CSTACK 0x2000'0ad8 0x400 + CSTACK uninit 0x2000'0ad8 0x400 + - 0x2000'0ed8 0x400 + +Unused ranges: + + From To Size + ---- -- ---- + 0x800'60dc 0x80f'ffff 0xf'9f24 + 0x2000'0ed8 0x2000'ffff 0xf128 + + +******************************************************************************* +*** INIT TABLE +*** + + Address Size + ------- ---- +Zero (__iar_zero_init3) + 1 destination range, total size 0xa00: + 0x2000'00d8 0xa00 + +Copy/lz77 (__iar_lz77_init_single3) + 1 source range, total size 0x54 (38% of destination): + 0x800'6088 0x54 + 1 destination range, total size 0xd8: + 0x2000'0000 0xd8 + + + +******************************************************************************* +*** MODULE SUMMARY +*** + + Module ro code ro data rw data + ------ ------- ------- ------- +command line/config: + --------------------------------------------------- + Total: + +C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\CMSIS_6603591812247902717.dir: [1] + system_stm32wbaxx.o 260 10 4 + --------------------------------------------------- + Total: 260 10 4 + +C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\Core_13247989168731456611.dir: [2] + eg91.o 1'856 2'228 + gpio.o 324 72 + icache.o 30 + lte_comms.o 956 544 624 + main.o 204 + rtc.o 188 48 + stm32wbaxx_hal_msp.o 64 + stm32wbaxx_it.o 52 + usart.o 848 1'800 + --------------------------------------------------- + Total: 4'522 2'844 2'472 + +C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\EWARM_18443280873093131863.dir: [3] + startup_stm32wba52xx.o 636 + --------------------------------------------------- + Total: 636 + +C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir: [4] + stm32wbaxx_hal.o 268 4 12 + stm32wbaxx_hal_cortex.o 296 + stm32wbaxx_hal_dma.o 190 + stm32wbaxx_hal_gpio.o 612 + stm32wbaxx_hal_hsem.o 22 + stm32wbaxx_hal_icache.o 56 + stm32wbaxx_hal_pwr_ex.o 92 + stm32wbaxx_hal_rcc.o 1'888 + stm32wbaxx_hal_rcc_ex.o 520 + stm32wbaxx_hal_rtc.o 380 + stm32wbaxx_hal_rtc_ex.o 196 + stm32wbaxx_hal_uart.o 3'734 + stm32wbaxx_hal_uart_ex.o 252 + --------------------------------------------------- + Total: 8'506 4 12 + +dl7M_tlf.a: [5] + abort.o 6 + exit.o 4 + iar_Stoulx.o 338 80 + isspace.o 20 + low_level_init.o 4 + printf.o 40 + putchar.o 68 + strcspn.o 34 + strspn.o 34 + strstr.o 44 + strtok.o 76 4 + tolower.o 20 + xfail_s.o 64 4 + xfiles.o 28 152 + xlocale_c.o 60 55 128 + xprintffull_nomb.o 3'786 + xprout.o 22 + --------------------------------------------------- + Total: 4'620 163 288 + +m7M_tls.a: [6] + DblAddSub.o 590 + DblCmpGe.o 52 + DblCmpLe.o 52 + DblDiv.o 582 + DblMul.o 426 + DblToS32.o 54 + DblToU32.o 34 + S32ToDbl.o 34 + U32ToDbl.o 28 + fpinit_M.o 34 + frexp.o 112 + ldexp.o 314 + --------------------------------------------------- + Total: 2'312 + +rt7M_tl.a: [7] + ABImemclr4.o 6 + ABImemcpy_small.o 24 + ABImemset48.o 50 + ABImemset_small.o 18 + I64DivMod_small.o 262 + I64DivZer.o 2 + cexit.o 10 + cmain.o 30 + cstartup_M.o 28 + data_init.o 40 + lz77_init_single.o 126 + memchr.o 88 + memset.o 20 + strchr.o 22 + strlen_small.o 20 + strncpy_small.o 30 + zero_init3.o 56 + --------------------------------------------------- + Total: 832 + +shb_l.a: [8] + exit.o 20 + --------------------------------------------------- + Total: 20 + + Gaps 29 6 + Linker created 32 1'024 +------------------------------------------------------- + Grand Total: 21'737 3'059 3'800 + + +******************************************************************************* +*** ENTRY LIST +*** + +Entry Address Size Type Object +----- ------- ---- ---- ------ +.iar.init_table$$Base 0x800'5ed8 -- Gb - Linker created - +.iar.init_table$$Limit 0x800'5ef8 -- Gb - Linker created - +?main 0x800'5ef9 Code Gb cmain.o [7] +ADC4_IRQHandler 0x800'6075 Code Wk startup_stm32wba52xx.o [3] +AES_IRQHandler 0x800'6059 Code Wk startup_stm32wba52xx.o [3] +AHBPrescTable 0x800'45a0 0x8 Data Gb system_stm32wbaxx.o [1] +APBPrescTable 0x800'5f70 0x8 Data Gb system_stm32wbaxx.o [1] +AT_ExecuteCommand 0x800'4a21 0x48 Code Lc eg91.o [2] +AT_RetrieveData 0x800'4909 0x118 Code Lc eg91.o [2] +BusFault_Handler 0x800'5d93 0x2 Code Gb stm32wbaxx_it.o [2] +CSTACK$$Base 0x2000'0ad8 -- Gb - Linker created - +CSTACK$$Limit 0x2000'0ed8 -- Gb - Linker created - +DebugMon_Handler 0x800'5d99 0x2 Code Gb stm32wbaxx_it.o [2] +EG91_AutomaticPlmnSelection + 0x800'4d87 0x10 Code Gb eg91.o [2] +EG91_GetPsNetworkRegistrationStatus + 0x800'4dc5 0x3e Code Gb eg91.o [2] +EG91_GetSignalQualityStatus + 0x800'4d1d 0x2e Code Gb eg91.o [2] +EG91_GetUARTConfig 0x800'4e2d 0x82 Code Gb eg91.o [2] +EG91_Init 0x800'4ab1 0x254 Code Gb eg91.o [2] +EG91_PSAttach 0x800'4d4b 0x34 Code Gb eg91.o [2] +EG91_RegisterBusIO 0x800'4a69 0x3a Code Gb eg91.o [2] +EG91_RegisterTickCb 0x800'4ebb 0x12 Code Gb eg91.o [2] +EG91_ResetToFactoryDefault + 0x800'4e21 0xc Code Gb eg91.o [2] +EXTI0_IRQHandler 0x800'5fa9 Code Wk startup_stm32wba52xx.o [3] +EXTI10_IRQHandler 0x800'5fd1 Code Wk startup_stm32wba52xx.o [3] +EXTI11_IRQHandler 0x800'5fd5 Code Wk startup_stm32wba52xx.o [3] +EXTI12_IRQHandler 0x800'5fd9 Code Wk startup_stm32wba52xx.o [3] +EXTI13_IRQHandler 0x800'5fdd Code Wk startup_stm32wba52xx.o [3] +EXTI14_IRQHandler 0x800'5fe1 Code Wk startup_stm32wba52xx.o [3] +EXTI15_IRQHandler 0x800'5fe5 Code Wk startup_stm32wba52xx.o [3] +EXTI1_IRQHandler 0x800'5fad Code Wk startup_stm32wba52xx.o [3] +EXTI2_IRQHandler 0x800'5fb1 Code Wk startup_stm32wba52xx.o [3] +EXTI3_IRQHandler 0x800'5fb5 Code Wk startup_stm32wba52xx.o [3] +EXTI4_IRQHandler 0x800'5fb9 Code Wk startup_stm32wba52xx.o [3] +EXTI5_IRQHandler 0x800'5fbd Code Wk startup_stm32wba52xx.o [3] +EXTI6_IRQHandler 0x800'5fc1 Code Wk startup_stm32wba52xx.o [3] +EXTI7_IRQHandler 0x800'5fc5 Code Wk startup_stm32wba52xx.o [3] +EXTI8_IRQHandler 0x800'5fc9 Code Wk startup_stm32wba52xx.o [3] +EXTI9_IRQHandler 0x800'5fcd Code Wk startup_stm32wba52xx.o [3] +Eg91Obj 0x2000'06b8 0x270 Data Gb lte_comms.o [2] +Error_Handler 0x800'36a1 0x4 Code Gb main.o [2] +FLASH_IRQHandler 0x800'5f95 Code Wk startup_stm32wba52xx.o [3] +FLASH_S_IRQHandler 0x800'5f99 Code Wk startup_stm32wba52xx.o [3] +FPU_IRQHandler 0x800'6061 Code Wk startup_stm32wba52xx.o [3] +GPDMA1_Channel0_IRQHandler + 0x800'5ff1 Code Wk startup_stm32wba52xx.o [3] +GPDMA1_Channel1_IRQHandler + 0x800'5ff5 Code Wk startup_stm32wba52xx.o [3] +GPDMA1_Channel2_IRQHandler + 0x800'5ff9 Code Wk startup_stm32wba52xx.o [3] +GPDMA1_Channel3_IRQHandler + 0x800'5ffd Code Wk startup_stm32wba52xx.o [3] +GPDMA1_Channel4_IRQHandler + 0x800'6001 Code Wk startup_stm32wba52xx.o [3] +GPDMA1_Channel5_IRQHandler + 0x800'6005 Code Wk startup_stm32wba52xx.o [3] +GPDMA1_Channel6_IRQHandler + 0x800'6009 Code Wk startup_stm32wba52xx.o [3] +GPDMA1_Channel7_IRQHandler + 0x800'600d Code Wk startup_stm32wba52xx.o [3] +GTZC_IRQHandler 0x800'5f9d Code Wk startup_stm32wba52xx.o [3] +HAL_DMA_Abort 0x800'2dc1 0x7c Code Gb stm32wbaxx_hal_dma.o [4] +HAL_DMA_Abort_IT 0x800'2e3d 0x2a Code Gb stm32wbaxx_hal_dma.o [4] +HAL_Delay 0x800'45e9 0x28 Code Wk stm32wbaxx_hal.o [4] +HAL_GPIO_DeInit 0x800'3c53 0xca Code Gb stm32wbaxx_hal_gpio.o [4] +HAL_GPIO_Init 0x800'3ae5 0x16e Code Gb stm32wbaxx_hal_gpio.o [4] +HAL_GPIO_TogglePin 0x800'3d27 0x10 Code Gb stm32wbaxx_hal_gpio.o [4] +HAL_GPIO_WritePin 0x800'3d1d 0xa Code Gb stm32wbaxx_hal_gpio.o [4] +HAL_GetTick 0x800'2db5 0xc Code Wk stm32wbaxx_hal.o [4] +HAL_HSEM_FreeCallback 0x800'5de5 0x2 Code Wk stm32wbaxx_hal_hsem.o [4] +HAL_HSEM_IRQHandler 0x800'5dd1 0x10 Code Gb stm32wbaxx_hal_hsem.o [4] +HAL_ICACHE_ConfigAssociativityMode + 0x800'4865 0x18 Code Gb stm32wbaxx_hal_icache.o [4] +HAL_ICACHE_Enable 0x800'487d 0xe Code Gb stm32wbaxx_hal_icache.o [4] +HAL_IncTick 0x800'5dc1 0x10 Code Wk stm32wbaxx_hal.o [4] +HAL_Init 0x800'3ddd 0x30 Code Gb stm32wbaxx_hal.o [4] +HAL_InitTick 0x800'3d49 0x94 Code Wk stm32wbaxx_hal.o [4] +HAL_MspInit 0x800'45a9 0x40 Code Gb stm32wbaxx_hal_msp.o [2] +HAL_NVIC_DisableIRQ 0x800'3a3b 0x1e Code Gb stm32wbaxx_hal_cortex.o [4] +HAL_NVIC_EnableIRQ 0x800'3a25 0x16 Code Gb stm32wbaxx_hal_cortex.o [4] +HAL_NVIC_SetPriority 0x800'39d7 0x4e Code Gb stm32wbaxx_hal_cortex.o [4] +HAL_NVIC_SetPriorityGrouping + 0x800'39bd 0x1a Code Gb stm32wbaxx_hal_cortex.o [4] +HAL_PWREx_ControlVoltageScaling + 0x800'4415 0x4e Code Gb stm32wbaxx_hal_pwr_ex.o [4] +HAL_RCCEx_PeriphCLKConfig + 0x800'37b5 0x1f8 Code Gb stm32wbaxx_hal_rcc_ex.o [4] +HAL_RCC_ClockConfig 0x800'3333 0x15c Code Gb stm32wbaxx_hal_rcc.o [4] +HAL_RCC_GetHCLKFreq 0x800'34b3 0x1a Code Gb stm32wbaxx_hal_rcc.o [4] +HAL_RCC_GetPCLK1Freq 0x800'34cd 0xa Code Gb stm32wbaxx_hal_rcc.o [4] +HAL_RCC_GetPCLK2Freq 0x800'34d7 0x12 Code Gb stm32wbaxx_hal_rcc.o [4] +HAL_RCC_GetPCLK7Freq 0x800'34e9 0x8 Code Gb stm32wbaxx_hal_rcc.o [4] +HAL_RCC_GetPLL1RFreq 0x800'3511 0x10 Code Gb stm32wbaxx_hal_rcc.o [4] +HAL_RCC_GetSysClockFreq + 0x800'348f 0x24 Code Gb stm32wbaxx_hal_rcc.o [4] +HAL_RCC_OscConfig 0x800'2e89 0x478 Code Gb stm32wbaxx_hal_rcc.o [4] +HAL_RTCEx_PrivilegeModeSet + 0x800'4827 0x30 Code Gb stm32wbaxx_hal_rtc_ex.o [4] +HAL_RTCEx_SetWakeUpTimer + 0x800'47a1 0x7a Code Gb stm32wbaxx_hal_rtc_ex.o [4] +HAL_RTC_Init 0x800'4625 0xa0 Code Gb stm32wbaxx_hal_rtc.o [4] +HAL_RTC_MspInit 0x800'3fbd 0x48 Code Gb rtc.o [2] +HAL_RTC_WaitForSynchro 0x800'46cb 0x36 Code Gb stm32wbaxx_hal_rtc.o [4] +HAL_SYSTICK_CLKSourceConfig + 0x800'3a7d 0x48 Code Gb stm32wbaxx_hal_cortex.o [4] +HAL_SYSTICK_Config 0x800'3a59 0x24 Code Gb stm32wbaxx_hal_cortex.o [4] +HAL_UARTEx_DisableFifoMode + 0x800'36b5 0x3c Code Gb stm32wbaxx_hal_uart_ex.o [4] +HAL_UARTEx_RxEventCallback + 0x800'2e81 0x2 Code Wk stm32wbaxx_hal_uart.o [4] +HAL_UARTEx_RxFifoFullCallback + 0x800'2e87 0x2 Code Wk stm32wbaxx_hal_uart_ex.o [4] +HAL_UARTEx_SetRxFifoThreshold + 0x800'3707 0x14 Code Gb stm32wbaxx_hal_uart_ex.o [4] +HAL_UARTEx_SetTxFifoThreshold + 0x800'36f1 0x16 Code Gb stm32wbaxx_hal_uart_ex.o [4] +HAL_UARTEx_TxFifoEmptyCallback + 0x800'2e85 0x2 Code Wk stm32wbaxx_hal_uart_ex.o [4] +HAL_UART_DeInit 0x800'1c5d 0x3e Code Gb stm32wbaxx_hal_uart.o [4] +HAL_UART_ErrorCallback 0x800'2e7f 0x2 Code Wk stm32wbaxx_hal_uart.o [4] +HAL_UART_IRQHandler 0x800'1da1 0x29e Code Gb stm32wbaxx_hal_uart.o [4] +HAL_UART_Init 0x800'1bd5 0x34 Code Gb stm32wbaxx_hal_uart.o [4] +HAL_UART_MspDeInit 0x800'2c43 0x5a Code Gb usart.o [2] +HAL_UART_MspInit 0x800'2b21 0xca Code Gb usart.o [2] +HAL_UART_Receive_IT 0x800'1d47 0x26 Code Gb stm32wbaxx_hal_uart.o [4] +HAL_UART_RxCpltCallback + 0x800'2d35 0x20 Code Gb usart.o [2] +HAL_UART_Transmit 0x800'1ca7 0x9a Code Gb stm32wbaxx_hal_uart.o [4] +HAL_UART_TxCpltCallback + 0x800'2e83 0x2 Code Wk stm32wbaxx_hal_uart.o [4] +HASH_IRQHandler 0x800'6065 Code Wk startup_stm32wba52xx.o [3] +HSEM_IRQHandler 0x800'5dbd 0x4 Code Gb stm32wbaxx_it.o [2] +HSEM_S_IRQHandler 0x800'6081 Code Wk startup_stm32wba52xx.o [3] +HardFault_Handler 0x800'5d8f 0x2 Code Gb stm32wbaxx_it.o [2] +I2C1_ER_IRQHandler 0x800'602d Code Wk startup_stm32wba52xx.o [3] +I2C1_EV_IRQHandler 0x800'6029 Code Wk startup_stm32wba52xx.o [3] +I2C3_ER_IRQHandler 0x800'6051 Code Wk startup_stm32wba52xx.o [3] +I2C3_EV_IRQHandler 0x800'604d Code Wk startup_stm32wba52xx.o [3] +ICACHE_IRQHandler 0x800'6071 Code Wk startup_stm32wba52xx.o [3] +IWDG_IRQHandler 0x800'5fe9 Code Wk startup_stm32wba52xx.o [3] +LEDStatus_Active 0x800'3e7b 0x4 Code Gb gpio.o [2] +LEDStatus_Inactive 0x800'3e7f 0x2 Code Gb gpio.o [2] +LPTIM1_IRQHandler 0x800'603d Code Wk startup_stm32wba52xx.o [3] +LPTIM2_IRQHandler 0x800'6041 Code Wk startup_stm32wba52xx.o [3] +LPUART1_IRQHandler 0x800'6039 Code Wk startup_stm32wba52xx.o [3] +LTE_GetIMEI 0x800'42fb 0x8 Code Gb lte_comms.o [2] +LTE_GetModuleFirmwareRevision + 0x800'42dd 0x8 Code Gb lte_comms.o [2] +LTE_GetModuleID 0x800'42e5 0x6 Code Gb lte_comms.o [2] +LTE_GetSignalQualityStatus + 0x800'42b5 0x16 Code Gb lte_comms.o [2] +LTE_GetSimId 0x800'42f3 0x8 Code Gb lte_comms.o [2] +LTE_HardwarePowerDown 0x800'3efb 0x3e Code Gb gpio.o [2] +LTE_HardwarePowerUp 0x800'3e89 0x68 Code Gb gpio.o [2] +LTE_Init 0x800'418d 0x120 Code Gb lte_comms.o [2] +LTE_UART_FlushBuffer 0x800'2cd5 0x18 Code Gb usart.o [2] +LTE_UART_ReceiveSingleData + 0x800'2d05 0x30 Code Gb usart.o [2] +LTE_UART_SendData 0x800'2ced 0x18 Code Gb usart.o [2] +LTE_UART_SetBaudrate 0x800'2c9d 0x2c Code Gb usart.o [2] +MX_GPIO_Init 0x800'3e11 0x6a Code Gb gpio.o [2] +MX_ICACHE_Init 0x800'4011 0x1e Code Gb icache.o [2] +MX_LPUART1_UART_Init 0x800'2a65 0x50 Code Gb usart.o [2] +MX_RTC_Init 0x800'3f55 0x68 Code Gb rtc.o [2] +MX_USART1_UART_Init 0x800'2ab5 0x54 Code Gb usart.o [2] +MemManage_Handler 0x800'5d91 0x2 Code Gb stm32wbaxx_it.o [2] +NMI_Handler 0x800'5d8d 0x2 Code Gb stm32wbaxx_it.o [2] +Network_Init 0x800'4031 0x154 Code Gb lte_comms.o [2] +PKA_IRQHandler 0x800'6069 Code Wk startup_stm32wba52xx.o [3] +PVD_IRQHandler 0x800'5f81 Code Wk startup_stm32wba52xx.o [3] +ParseNumber 0x800'48bd 0x38 Code Lc eg91.o [2] +PendSV_Handler 0x800'5d9b 0x2 Code Gb stm32wbaxx_it.o [2] +RADIO_IRQHandler 0x800'6079 Code Wk startup_stm32wba52xx.o [3] +RAMCFG_IRQHandler 0x800'5f91 Code Wk startup_stm32wba52xx.o [3] +RCC_IRQHandler 0x800'5fa1 Code Wk startup_stm32wba52xx.o [3] +RCC_PLL1_GetVCOOutputFreq + 0x800'3521 0x78 Code Lc stm32wbaxx_hal_rcc.o [4] +RCC_S_IRQHandler 0x800'5fa5 Code Wk startup_stm32wba52xx.o [3] +RNG_IRQHandler 0x800'605d Code Wk startup_stm32wba52xx.o [3] +RTC_EnterInitMode 0x800'4701 0x48 Code Gb stm32wbaxx_hal_rtc.o [4] +RTC_ExitInitMode 0x800'4749 0x4c Code Gb stm32wbaxx_hal_rtc.o [4] +RTC_IRQHandler 0x800'5f85 Code Wk startup_stm32wba52xx.o [3] +RTC_S_IRQHandler 0x800'5f89 Code Wk startup_stm32wba52xx.o [3] +Region$$Table$$Base 0x800'5ed8 -- Gb - Linker created - +Region$$Table$$Limit 0x800'5ef8 -- Gb - Linker created - +Reset_Handler 0x800'5f61 Code Wk startup_stm32wba52xx.o [3] +ReturnKeywords 0x800'5248 0x888 Data Gb eg91.o [2] +SAES_IRQHandler 0x800'5fed Code Wk startup_stm32wba52xx.o [3] +SPI1_IRQHandler 0x800'6031 Code Wk startup_stm32wba52xx.o [3] +SPI3_IRQHandler 0x800'606d Code Wk startup_stm32wba52xx.o [3] +SVC_Handler 0x800'5d97 0x2 Code Gb stm32wbaxx_it.o [2] +SecureFault_Handler 0x800'5f79 Code Wk startup_stm32wba52xx.o [3] +SysTick_Handler 0x800'5d9d 0x4 Code Gb stm32wbaxx_it.o [2] +SystemClock_Config 0x800'3619 0x88 Code Gb main.o [2] +SystemCoreClock 0x2000'000c 0x4 Data Gb system_stm32wbaxx.o [1] +SystemCoreClockUpdate 0x800'44b9 0xc6 Code Gb system_stm32wbaxx.o [1] +SystemInit 0x800'44a5 0x12 Code Gb system_stm32wbaxx.o [1] +TAMP_IRQHandler 0x800'5f8d Code Wk startup_stm32wba52xx.o [3] +TIM16_IRQHandler 0x800'6045 Code Wk startup_stm32wba52xx.o [3] +TIM17_IRQHandler 0x800'6049 Code Wk startup_stm32wba52xx.o [3] +TIM1_BRK_IRQHandler 0x800'6011 Code Wk startup_stm32wba52xx.o [3] +TIM1_CC_IRQHandler 0x800'601d Code Wk startup_stm32wba52xx.o [3] +TIM1_TRG_COM_IRQHandler + 0x800'6019 Code Wk startup_stm32wba52xx.o [3] +TIM1_UP_IRQHandler 0x800'6015 Code Wk startup_stm32wba52xx.o [3] +TIM2_IRQHandler 0x800'6021 Code Wk startup_stm32wba52xx.o [3] +TIM3_IRQHandler 0x800'6025 Code Wk startup_stm32wba52xx.o [3] +TSC_IRQHandler 0x800'6055 Code Wk startup_stm32wba52xx.o [3] +TimeLeftFromExpiration 0x800'48f5 0x14 Code Lc eg91.o [2] +UARTEx_SetNbDataToProcess + 0x800'375d 0x3e Code Lc stm32wbaxx_hal_uart_ex.o [4] +UARTEx_SetNbDataToProcess::denominator + 0x800'37a4 0x8 Data Lc stm32wbaxx_hal_uart_ex.o [4] +UARTEx_SetNbDataToProcess::numerator + 0x800'379c 0x8 Data Lc stm32wbaxx_hal_uart_ex.o [4] +UARTPrescTable 0x800'2660 0x18 Data Gb stm32wbaxx_hal_uart.o [4] +UART_AdvFeatureConfig 0x800'22db 0xc6 Code Gb stm32wbaxx_hal_uart.o [4] +UART_CheckIdleState 0x800'23a1 0x8e Code Gb stm32wbaxx_hal_uart.o [4] +UART_DMAAbortOnError 0x800'2655 0xc Code Lc stm32wbaxx_hal_uart.o [4] +UART_EndRxTransfer 0x800'25cb 0x22 Code Lc stm32wbaxx_hal_uart.o [4] +UART_RxData 0x2000'00d8 0x5e0 Data Gb usart.o [2] +UART_RxISR_16BIT 0x800'26c9 0x50 Code Lc stm32wbaxx_hal_uart.o [4] +UART_RxISR_16BIT_FIFOEN + 0x800'2899 0xa0 Code Lc stm32wbaxx_hal_uart.o [4] +UART_RxISR_8BIT 0x800'2679 0x50 Code Lc stm32wbaxx_hal_uart.o [4] +UART_RxISR_8BIT_FIFOEN 0x800'27c5 0xa0 Code Lc stm32wbaxx_hal_uart.o [4] +UART_SetConfig 0x800'20b1 0x218 Code Gb stm32wbaxx_hal_uart.o [4] +UART_Start_Receive_IT 0x800'24bf 0xf2 Code Gb stm32wbaxx_hal_uart.o [4] +UART_WaitOnFlagUntilTimeout + 0x800'242f 0x90 Code Gb stm32wbaxx_hal_uart.o [4] +USART1_IRQHandler 0x800'5da1 0x14 Code Gb stm32wbaxx_it.o [2] +USART2_IRQHandler 0x800'6035 Code Wk startup_stm32wba52xx.o [3] +UsageFault_Handler 0x800'5d95 0x2 Code Gb stm32wbaxx_it.o [2] +WKUP_IRQHandler 0x800'607d Code Wk startup_stm32wba52xx.o [3] +WKUP_S_IRQHandler 0x800'6085 Code Wk startup_stm32wba52xx.o [3] +WWDG_IRQHandler 0x800'5f7d Code Wk startup_stm32wba52xx.o [3] +_LC 0x800'015d 0x6 Code Lc xprintffull_nomb.o [5] +_LitobFullNoMb 0x800'0e45 0x114 Code Lc xprintffull_nomb.o [5] +_LocaleC_isspace 0x800'1a81 0x14 Code Gb xlocale_c.o [5] +_LocaleC_isupper 0x800'1a75 0x2 Code Gb xlocale_c.o [5] +_LocaleC_tolower 0x800'1a95 0xc Code Gb xlocale_c.o [5] +_Locale_lconv 0x2000'0010 0x38 Data Lc xlocale_c.o [5] +_PrintfFullNoMb 0x800'0163 0xcb2 Code Gb xprintffull_nomb.o [5] +_Prout 0x800'5f49 0x16 Code Gb xprout.o [5] +_PutcharsFullNoMb 0x800'0fb1 0x2e Code Lc xprintffull_nomb.o [5] +_Strtok_ssave 0x2000'0ad0 0x4 Data Lc strtok.o [5] +__Vectors 0x800'0000 -- Gb startup_stm32wba52xx.o [3] +__Vectors_End 0x800'015c Data Gb startup_stm32wba52xx.o [3] +__Vectors_Size {Abs} 0x15c -- Gb startup_stm32wba52xx.o [3] +__aeabi_cdcmple 0x800'11f1 Code Gb DblCmpLe.o [6] +__aeabi_cdrcmple 0x800'1225 Code Gb DblCmpGe.o [6] +__aeabi_d2iz 0x800'1395 Code Gb DblToS32.o [6] +__aeabi_d2uiz 0x800'1889 Code Gb DblToU32.o [6] +__aeabi_ddiv 0x800'1641 Code Gb DblDiv.o [6] +__aeabi_dmul 0x800'18c9 Code Gb DblMul.o [6] +__aeabi_dsub 0x800'155d Code Gb DblAddSub.o [6] +__aeabi_i2d 0x800'13cd Code Gb S32ToDbl.o [6] +__aeabi_ldiv0 0x800'1bbd Code Gb I64DivZer.o [7] +__aeabi_memclr4 0x800'37ad Code Gb ABImemclr4.o [7] +__aeabi_ui2d 0x800'18ad Code Gb U32ToDbl.o [6] +__cmain 0x800'5ef9 Code Gb cmain.o [7] +__exit 0x800'1bc1 0x14 Code Gb exit.o [8] +__iar_Fail_s 0x800'10bd 0x1c Code Gb xfail_s.o [5] +__iar_Memchr 0x800'1111 Code Gb memchr.o [7] +__iar_Memset4_word 0x800'4471 Code Gb ABImemset48.o [7] +__iar_Memset8_word 0x800'4471 Code Gb ABImemset48.o [7] +__iar_Stdout 0x2000'0090 0x48 Data Gb xfiles.o [5] +__iar_Stoul 0x800'51cb 0x2 Code Gb iar_Stoulx.o [5] +__iar_Stoulx 0x800'5089 0x13c Code Gb iar_Stoulx.o [5] +__iar_Strchr 0x800'10a5 Code Gb strchr.o [7] +__iar_data_init3 0x800'5e45 0x28 Code Gb data_init.o [7] +__iar_frexp 0x800'118d Code Gb frexp.o [6] +__iar_frexpl 0x800'118d Code Gb frexp.o [6] +__iar_globLocale 0x2000'0048 0x48 Data Lc xlocale_c.o [5] +__iar_global_Locale 0x800'1aa1 0x4 Code Gb xlocale_c.o [5] +__iar_init_vfp 0x800'5eb5 Code Gb fpinit_M.o [6] +__iar_ldexp64 0x800'1259 Code Gb ldexp.o [6] +__iar_lz77_init_single3 + 0x800'1027 0x7e Code Gb lz77_init_single.o [7] +__iar_program_start 0x800'5f2d Code Gb cstartup_M.o [7] +__iar_scalbln64 0x800'1259 Code Gb ldexp.o [6] +__iar_scalbn64 0x800'1259 Code Gb ldexp.o [6] +__iar_small_Memcpy 0x800'116d Code Gb ABImemcpy_small.o [7] +__iar_small_Memset 0x800'4ffd Code Gb ABImemset_small.o [7] +__iar_small_Memset_word + 0x800'4ffd Code Gb ABImemset_small.o [7] +__iar_small_memcpy 0x800'1169 Code Gb ABImemcpy_small.o [7] +__iar_small_memcpy4 0x800'1169 Code Gb ABImemcpy_small.o [7] +__iar_small_memcpy8 0x800'1169 Code Gb ABImemcpy_small.o [7] +__iar_small_memset 0x800'4ffd Code Gb ABImemset_small.o [7] +__iar_small_strlen 0x800'10fd Code Gb strlen_small.o [7] +__iar_small_strncpy 0x800'489d Code Gb strncpy_small.o [7] +__iar_small_uldivmod 0x800'1ab1 Code Gb I64DivMod_small.o [7] +__iar_softfp___iar_frexp64 + 0x800'1181 Code Gb frexp.o [6] +__iar_softfp_frexp 0x800'1181 Code Gb frexp.o [6] +__iar_softfp_frexpl 0x800'1181 Code Gb frexp.o [6] +__iar_zero_init3 0x800'5d55 0x38 Code Gb zero_init3.o [7] +__low_level_init 0x800'5f17 0x4 Code Gb low_level_init.o [5] +__vector_table 0x800'0000 Data Gb startup_stm32wba52xx.o [3] +__write 0x800'2d5d 0x32 Code Gb usart.o [2] +_call_main 0x800'5f05 Code Gb cmain.o [7] +_exit 0x800'5f21 Code Gb cexit.o [7] +abort 0x800'1bb7 0x6 Code Gb abort.o [5] +atoi 0x800'51cd 0x2 Code Gb iar_Stoulx.o [5] +digits 0x800'5ce8 0x28 Data Lc iar_Stoulx.o [5] +exit 0x800'5f1b 0x4 Code Gb exit.o [5] +hlpuart1 0x2000'0928 0x94 Data Gb usart.o [2] +hrtc 0x2000'0aa0 0x30 Data Gb rtc.o [2] +huart1 0x2000'09bc 0x94 Data Gb usart.o [2] +isspace 0x800'521f 0x14 Code Gb isspace.o [5] +ldexp 0x800'1259 Code Gb ldexp.o [6] +ldexpl 0x800'1259 Code Gb ldexp.o [6] +localeconv 0x800'1aa5 0x4 Code Gb xlocale_c.o [5] +main 0x800'35e9 0x30 Code Gb main.o [2] +memchr 0x800'1111 Code Gb memchr.o [7] +memset 0x800'4611 0x14 Code Gb memset.o [7] +ndigs 0x800'5cc0 0x28 Data Lc iar_Stoulx.o [5] +obuf 0x2000'0a50 0x50 Data Lc xfiles.o [5] +printf 0x800'43ed 0x28 Code Gb printf.o [5] +putchar 0x800'5d11 0x44 Code Gb putchar.o [5] +scalbln 0x800'1259 Code Gb ldexp.o [6] +scalblnl 0x800'1259 Code Gb ldexp.o [6] +scalbn 0x800'1259 Code Gb ldexp.o [6] +scalbnl 0x800'1259 Code Gb ldexp.o [6] +scale 0x800'0f59 0x46 Code Lc xprintffull_nomb.o [5] +sec_hand 0x2000'0ad4 0x4 Data Lc xfail_s.o [5] +strchr 0x800'10a5 Code Gb strchr.o [7] +strcspn 0x800'51fd 0x22 Code Gb strcspn.o [5] +strspn 0x800'51db 0x22 Code Gb strspn.o [5] +strstr 0x800'500f 0x2c Code Gb strstr.o [5] +strtok 0x800'503d 0x4c Code Gb strtok.o [5] +tolower 0x800'5233 0x14 Code Gb tolower.o [5] +uwTick 0x2000'0004 0x4 Data Gb stm32wbaxx_hal.o [4] +uwTickFreq 0x2000'0000 0x1 Data Gb stm32wbaxx_hal.o [4] +uwTickPrio 0x2000'0008 0x4 Data Gb stm32wbaxx_hal.o [4] + + +[1] = C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\CMSIS_6603591812247902717.dir +[2] = C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\Core_13247989168731456611.dir +[3] = C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\EWARM_18443280873093131863.dir +[4] = C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Obj\STM32WBAxx_HAL_Driver_814230103969653557.dir +[5] = dl7M_tlf.a +[6] = m7M_tls.a +[7] = rt7M_tl.a +[8] = shb_l.a + + 21'737 bytes of readonly code memory + 3'059 bytes of readonly data memory + 3'800 bytes of readwrite data memory + +Errors: none +Warnings: none diff --git a/EWARM/settings/Project.wsdt b/EWARM/settings/Project.wsdt new file mode 100644 index 0000000..7fe45eb --- /dev/null +++ b/EWARM/settings/Project.wsdt @@ -0,0 +1,517 @@ + + + + + WiseEye-LTE/WiseEye-LTE + + + + + 34048 + 34049 + 34050 + 34051 + 34052 + 34053 + 34054 + 34055 + 34056 + 34057 + 34058 + 34059 + 34060 + 34061 + 34062 + 34063 + + + + + 34001 + 0 + + + + + 57600 + 57601 + 57603 + 33024 + 0 + 57607 + 0 + 57635 + 57634 + 57637 + 0 + 57643 + 57644 + 0 + 33090 + 33057 + 57636 + 57640 + 57641 + 33026 + 33065 + 33063 + 33064 + 33053 + 33054 + 0 + 33035 + 33037 + 34399 + 0 + 33038 + 33039 + 33877 + 0 + + + + + Log + _I0 + + + 250 + 20 + + 2 + $PROJ_DIR$\DebugLog.log + 0 + 0 + + + + WiseEye-LTE + WiseEye-LTE/Drivers + + + + 14 + 44 + + + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 5B000000050059840000010000004881000001000000558400001F0000000584000001000000108400003A000000 + + + 0F007784000007840000FFFFFFFF86840000808C000044D500004D970000488100000D8400000F8400000884000054840000328100001C81000009840000 + 1400048400004D000000318400005400000020810000590300000F810000510300000C8100004E030000068400004F000000038400004C00000000840000490000000E8400005100000030840000530000001F810000580300000E810000500300000B8100004D030000D18400003E030000058400004E000000028400004B000000108400005200000032840000550000000A840000500000000D8100004F030000 + + + 0 + 0A0000000A0000006E0000006E000000 + 00000000D70300003B040000E8030000 + 4096 + 0 + 0 + 32767 + 0 + + + 1 + + + 34050 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 4294967295 + A1FBFFFFEE010000BCFCFFFF93050000 + 20030000320000003B040000D7030000 + 4096 + 0 + 0 + 32767 + 0 + + + 1 + + + 34051 + 73F9FFFFB8030000E1FDFFFF69040000 + 240300004A00000037040000BD030000 + 16384 + 0 + 0 + 32767 + 0 + + + 1 + + + + File + Line + Messages + _I0 + + + 54 + 40 + 138 + 20 + + 2 + $WS_DIR$\BuildLog.log + 0 + 0 + + + 34055 + 73F9FFFFB8030000E1FDFFFF69040000 + 240300004A00000037040000BD030000 + 16384 + 0 + 0 + 32767 + 0 + + + 1 + + + 34056 + 73F9FFFFB8030000E1FDFFFF69040000 + 240300004A00000037040000BD030000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + 93 + 13 + 159 + 2 + + 0 + -1 + + + 34057 + 73F9FFFFB8030000E1FDFFFF69040000 + 240300004A00000037040000BD030000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + 93 + 13 + 159 + 2 + + 0 + -1 + + + 34058 + 73F9FFFFB8030000E1FDFFFF69040000 + 240300004A00000037040000BD030000 + 16384 + 0 + 0 + 32767 + 0 + + + 1 + + + + Line + Matched + Path + String + + + 67 + 100 + 444 + 246 + + + + 34059 + 73F9FFFFB8030000E1FDFFFF69040000 + 240300004A00000037040000BD030000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + 93 + 13 + 159 + 2 + + 0 + -1 + + + 34060 + 73F9FFFFB8030000E1FDFFFF69040000 + 240300004A00000037040000BD030000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + 2 + $WS_DIR/SourceBrowseLog.log + 0 + -1 + + + 34062 + 73F9FFFFB8030000E1FDFFFF69040000 + 240300004A00000037040000BD030000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + 2 + + 0 + -1 + + + 34052 + 000000001700000080020000A8000000 + 00000000000000008002000091000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 2 + + + + + + + + + <Right-click on a symbol in the editor to show a call graph> + + + + + + 0 + + + 0 + + + + + + 0 + + + 0 + + + File + Function + Line + + + 200 + 700 + 100 + + + + 34053 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34054 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + + Check + File + Line + Message + Severity + + + 200 + 200 + 100 + 500 + 100 + + + + 34061 + 000000001700000080020000A8000000 + 00000000000000008002000091000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 2 + + + 0 + + + C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\BrowseInfo\WiseEye-LTE.pbw + + + File + Name + Scope + Symbol type + + + 300 + 300 + 300 + 300 + + + + 34063 + 00000000170000000601000078010000 + 0000000032000000A7000000D7030000 + 4096 + 0 + 0 + 32767 + 0 + + + 1 + + + 000000000E000000000000000010000001000000FFFFFFFFFFFFFFFFA700000032000000AB000000D70300000100000002000010040000000100000091FFFFFF0D0200000F85000000000000000000000000000000000000010000000F850000010000000F850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000D85000000000000000000000000000000000000010000000D850000010000000D850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000068500000000000000000000000000000000000001000000068500000100000006850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000058500000000000000000000000000000000000001000000058500000100000005850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000048500000000000000000000000000000000000001000000048500000100000004850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000028500000000000000000000000000000000000001000000028500000100000002850000000000000040000001000000FFFFFFFFFFFFFFFF1C0300003200000020030000D703000001000000020000100400000001000000D6FEFFFFF201000000000000000000000000000001000000FFFFFFFF08000000038500000785000008850000098500000A8500000B8500000C8500000E850000FFFF02000B004354616262656450616E650040000001000000A1FBFFFFEE010000BCFCFFFF9305000020030000320000003B040000D7030000000000004080005608000000FFFEFF054200750069006C006400010000000385000001000000FFFFFFFFFFFFFFFFFFFEFF094400650062007500670020004C006F006700010000000785000001000000FFFFFFFFFFFFFFFFFFFEFF0C4400650063006C00610072006100740069006F006E007300000000000885000001000000FFFFFFFFFFFFFFFFFFFEFF0A5200650066006500720065006E00630065007300000000000985000001000000FFFFFFFFFFFFFFFFFFFEFF0D460069006E006400200069006E002000460069006C0065007300010000000A85000001000000FFFFFFFFFFFFFFFFFFFEFF1541006D0062006900670075006F0075007300200044006500660069006E006900740069006F006E007300000000000B85000001000000FFFFFFFFFFFFFFFFFFFEFF1153006F0075007200630065002000420072006F0077007300650020004C006F006700000000000C85000001000000FFFFFFFFFFFFFFFFFFFEFF0B54006F006F006C0020004F0075007400700075007400000000000E85000001000000FFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000001000000FFFFFFFF0385000001000000FFFFFFFF03850000000000000000000000000000 + + + CMSIS-Pack + 00200000010000000100FFFF01001100434D4643546F6F6C426172427574746F6ED1840000020000003E030000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF0A43004D005300490053002D005000610063006B0018000000 + + + 34048 + 0A0000000A0000006E0000006E000000 + D603000000000000040400001A000000 + 8192 + 0 + 0 + 24 + 0 + + + 1 + + + Main + 00200000010000002100FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000068030000FFFEFF000000000000000000000000000100000001000000018001E100000000000069030000FFFEFF000000000000000000000000000100000001000000018003E10000000000006B030000FFFEFF0000000000000000000000000001000000010000000180008100000000000048030000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E10000000000006E030000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E100000000040070030000FFFEFF000000000000000000000000000100000001000000018022E10000000004006F030000FFFEFF000000000000000000000000000100000001000000018025E100000000040071030000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE100000000040072030000FFFEFF00000000000000000000000000010000000100000001802CE100000000040073030000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01000D005061737465436F6D626F426F784281000000000000FFFFFFFFFFFEFF000100000000000000010000000000000001000000B400000002002050FFFFFFFFFFFEFF0096000000000000000000018021810000000004005A030000FFFEFF000000000000000000000000000100000001000000018024E100000000000063030000FFFEFF000000000000000000000000000100000001000000018028E100000000040062030000FFFEFF000000000000000000000000000100000001000000018029E100000000000064030000FFFEFF0000000000000000000000000001000000010000000180028100000000000049030000FFFEFF000000000000000000000000000100000001000000018029810000000000005E030000FFFEFF000000000000000000000000000100000001000000018027810000000000005C030000FFFEFF000000000000000000000000000100000001000000018028810000000000005D030000FFFEFF00000000000000000000000000010000000100000001801D8100000000000056030000FFFEFF00000000000000000000000000010000000100000001801E8100000000040057030000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B810000020000004D030000FFFEFF00000000000000000000000000010000000100000001800D810000020000004F030000FFFEFF00000000000000000000000000010000000100000001805F8600000200000061030000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800E8100000200000050030000FFFEFF00000000000000000000000000010000000100000001800F8100000200000051030000FFFEFF00000000000000000000000000010000000100000001805584000002000200FFFFFFFFFFFEFF1B44006F0077006E006C006F0061006400200061006300740069007600650020006100700070006C00690063006100740069006F006E00010000000000000001000000000000000100000000000000FFFEFF044D00610069006E00E9010000 + + + 34049 + 0A0000000A0000006E0000006E000000 + 0000000000000000D60300001A000000 + 8192 + 0 + 0 + 489 + 0 + + + 1 + + + + + 010000000300000001000000000000000000000001000000010000000200000000000000010000000100000000000000280000002800000001000000050000000200000001000000FFFEFF1C2400570053005F0044004900520024005C002E002E005C0043006F00720065005C005300720063005C00750073006100720074002E00630001000000FFFF010017004966436F6E74656E7453746F726167654D6663496D706CFFFEFF00FFFEFFFF22013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E003300310031003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0030003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0030003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF07750073006100720074002E00630000000000FFFFFFFFFFFFFFFFFFFEFF1B2400570053005F0044004900520024005C002E002E005C0043006F00720065005C0049006E0063005C0065006700390031002E006800010000000180FFFEFF00FFFEFFFF28013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E003200330030003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0037003300390038003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0037003300390038003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF0665006700390031002E00680000000000FFFFFFFFFFFFFFFFFFFEFF1B2400570053005F0044004900520024005C002E002E005C0043006F00720065005C005300720063005C0065006700390031002E006300010000000180FFFEFF00FFFEFFFF2A013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E003600370032003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E00320031003000350033003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E00320031003000350033003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF0665006700390031002E00630000000000FFFFFFFFFFFFFFFFFFFEFF202400570053005F0044004900520024005C002E002E005C0043006F00720065005C005300720063005C006C00740065005F0063006F006D006D0073002E006300010000000180FFFEFF00FFFEFFFF22013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E003300330034003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0030003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0030003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF0B6C00740065005F0063006F006D006D0073002E00630000000000FFFFFFFFFFFFFFFFFFFEFF1B2400570053005F0044004900520024005C002E002E005C0043006F00720065005C005300720063005C006D00610069006E002E006300010000000180FFFEFF00FFFEFFFF27013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E00370039003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0032003400300033003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0032003400300033003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF066D00610069006E002E00630000000000FFFFFFFFFFFFFFFF0000000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000001000000020000002CF9FFFFEE0100009DFBFFFF93050000 + + + + diff --git a/EWARM/settings/Project_EditorBookmarks.xml b/EWARM/settings/Project_EditorBookmarks.xml new file mode 100644 index 0000000..38c3485 --- /dev/null +++ b/EWARM/settings/Project_EditorBookmarks.xml @@ -0,0 +1,2 @@ + + diff --git a/EWARM/settings/WiseEye-LTE.WiseEye-LTE.cspy.bat b/EWARM/settings/WiseEye-LTE.WiseEye-LTE.cspy.bat new file mode 100644 index 0000000..1ab988d --- /dev/null +++ b/EWARM/settings/WiseEye-LTE.WiseEye-LTE.cspy.bat @@ -0,0 +1,40 @@ +@REM This batch file has been generated by the IAR Embedded Workbench +@REM C-SPY Debugger, as an aid to preparing a command line for running +@REM the cspybat command line utility using the appropriate settings. +@REM +@REM Note that this file is generated every time a new debug session +@REM is initialized, so you may want to move or rename the file before +@REM making changes. +@REM +@REM You can launch cspybat by typing the name of this batch file followed +@REM by the name of the debug file (usually an ELF/DWARF or UBROF file). +@REM +@REM Read about available command line parameters in the C-SPY Debugging +@REM Guide. Hints about additional command line parameters that may be +@REM useful in specific cases: +@REM --download_only Downloads a code image without starting a debug +@REM session afterwards. +@REM --silent Omits the sign-on message. +@REM --timeout Limits the maximum allowed execution time. +@REM + + +@echo off + +if not "%~1" == "" goto debugFile + +@echo on + +"C:\Program Files\IAR Systems\Embedded Workbench 9.2\common\bin\cspybat" -f "C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\settings\WiseEye-LTE.WiseEye-LTE.general.xcl" --backend -f "C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\settings\WiseEye-LTE.WiseEye-LTE.driver.xcl" + +@echo off +goto end + +:debugFile + +@echo on + +"C:\Program Files\IAR Systems\Embedded Workbench 9.2\common\bin\cspybat" -f "C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\settings\WiseEye-LTE.WiseEye-LTE.general.xcl" "--debug_file=%~1" --backend -f "C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\settings\WiseEye-LTE.WiseEye-LTE.driver.xcl" + +@echo off +:end \ No newline at end of file diff --git a/EWARM/settings/WiseEye-LTE.WiseEye-LTE.cspy.ps1 b/EWARM/settings/WiseEye-LTE.WiseEye-LTE.cspy.ps1 new file mode 100644 index 0000000..b4a35f4 --- /dev/null +++ b/EWARM/settings/WiseEye-LTE.WiseEye-LTE.cspy.ps1 @@ -0,0 +1,31 @@ +param([String]$debugfile = ""); + +# This powershell file has been generated by the IAR Embedded Workbench +# C - SPY Debugger, as an aid to preparing a command line for running +# the cspybat command line utility using the appropriate settings. +# +# Note that this file is generated every time a new debug session +# is initialized, so you may want to move or rename the file before +# making changes. +# +# You can launch cspybat by typing Powershell.exe -File followed by the name of this batch file, followed +# by the name of the debug file (usually an ELF / DWARF or UBROF file). +# +# Read about available command line parameters in the C - SPY Debugging +# Guide. Hints about additional command line parameters that may be +# useful in specific cases : +# --download_only Downloads a code image without starting a debug +# session afterwards. +# --silent Omits the sign - on message. +# --timeout Limits the maximum allowed execution time. +# + + +if ($debugfile -eq "") +{ +& "C:\Program Files\IAR Systems\Embedded Workbench 9.2\common\bin\cspybat" -f "C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\settings\WiseEye-LTE.WiseEye-LTE.general.xcl" --backend -f "C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\settings\WiseEye-LTE.WiseEye-LTE.driver.xcl" +} +else +{ +& "C:\Program Files\IAR Systems\Embedded Workbench 9.2\common\bin\cspybat" -f "C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\settings\WiseEye-LTE.WiseEye-LTE.general.xcl" --debug_file=$debugfile --backend -f "C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\settings\WiseEye-LTE.WiseEye-LTE.driver.xcl" +} diff --git a/EWARM/settings/WiseEye-LTE.WiseEye-LTE.driver.xcl b/EWARM/settings/WiseEye-LTE.WiseEye-LTE.driver.xcl new file mode 100644 index 0000000..3a48dfe --- /dev/null +++ b/EWARM/settings/WiseEye-LTE.WiseEye-LTE.driver.xcl @@ -0,0 +1,31 @@ +"--endian=little" + +"--cpu=Cortex-M33.no_se" + +"--fpu=VFPv5_SP" + +"-p" + +"C:\Program Files\IAR Systems\Embedded Workbench 9.2\arm\config\debugger\ST\STM32WBA52CG.ddf" + +"--drv_verify_download" + +"--semihosting" + +"--device=STM32WBA52CG" + +"--drv_interface=SWD" + +"--stlink_reset_strategy=0,2" + +"--drv_swo_clock_setup=64000000,0,2000000" + +"--drv_catch_exceptions=0x000" + +"--drv_debug_ap=1" + +"--stlink_probe_supplied_power=3.3" + + + + diff --git a/EWARM/settings/WiseEye-LTE.WiseEye-LTE.general.xcl b/EWARM/settings/WiseEye-LTE.WiseEye-LTE.general.xcl new file mode 100644 index 0000000..d839950 --- /dev/null +++ b/EWARM/settings/WiseEye-LTE.WiseEye-LTE.general.xcl @@ -0,0 +1,17 @@ +"C:\Program Files\IAR Systems\Embedded Workbench 9.2\arm\bin\armPROC.dll" + +"C:\Program Files\IAR Systems\Embedded Workbench 9.2\arm\bin\armSTLINK.dll" + +"C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\Exe\WiseEye-LTE.out" + +--plugin="C:\Program Files\IAR Systems\Embedded Workbench 9.2\arm\bin\armbat.dll" + +--device_macro="C:\Program Files\IAR Systems\Embedded Workbench 9.2\arm/config/debugger/ST/STM32WBAxx.dmac" + +--device_macro="C:\Program Files\IAR Systems\Embedded Workbench 9.2\arm/config/debugger/ST/STM32WBAxx_DBG.dmac" + +--flash_loader="C:\Program Files\IAR Systems\Embedded Workbench 9.2\arm/config/flashloader/ST/FlashSTM32WBAxxxG.board" + + + + diff --git a/EWARM/settings/WiseEye-LTE.crun b/EWARM/settings/WiseEye-LTE.crun new file mode 100644 index 0000000..d71ea55 --- /dev/null +++ b/EWARM/settings/WiseEye-LTE.crun @@ -0,0 +1,13 @@ + + + 1 + + + * + * + * + 0 + 1 + + + diff --git a/EWARM/settings/WiseEye-LTE.dbgdt b/EWARM/settings/WiseEye-LTE.dbgdt new file mode 100644 index 0000000..73e71f6 --- /dev/null +++ b/EWARM/settings/WiseEye-LTE.dbgdt @@ -0,0 +1,4 @@ + + + + diff --git a/EWARM/settings/WiseEye-LTE.dnx b/EWARM/settings/WiseEye-LTE.dnx new file mode 100644 index 0000000..cdf8292 --- /dev/null +++ b/EWARM/settings/WiseEye-LTE.dnx @@ -0,0 +1,124 @@ + + + + 0 + 1 + 90 + 1 + 1 + 1 + main + 0 + 50 + + + 0 + C:\Program Files\IAR Systems\Embedded Workbench 9.2\arm\config\debugger\ST\STM32WBA52CG.ddf + + + 0 + 1 + + + 0670FF343636574D43054237 + + _ 0 + _ 0 + 0 + 2 + + + 0 + 1 + + + 1 + 10 + $PROJ_DIR$\TermIOInput.txt + 1 + 0 + 2 + 2 + + + _ 0 + _ 0 + + + 0 + 64000000 + 0 + 2000000 + 2000000 + 32 + 0 + 0 + 1 + 15 + 0 + 0 + 0 + 0 + 0 + $PROJ_DIR$\ITM.log + + + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 1 + 0 + 1 + + + 0 + 0 + 1 + 0 + 1 + 0 + + + 0 + 0 + 1 + Ch3 + 0 0 1 + Ch2 + 0 0 1 + Ch1 + 0 0 1 + Ch0 + 0 0 1 + 0 + 1 + 0 + + + 0 + + + 0 + + + _ 0 + _ "" + + + 0 + 0 + + diff --git a/EWARM/settings/WiseEye_LTE.wsdt b/EWARM/settings/WiseEye_LTE.wsdt new file mode 100644 index 0000000..fd71c40 --- /dev/null +++ b/EWARM/settings/WiseEye_LTE.wsdt @@ -0,0 +1,506 @@ + + + + + WiseEye-LTE/WiseEye-LTE + + + + + 34048 + 34049 + 34050 + 34051 + 34052 + 34053 + 34054 + 34055 + 34056 + 34057 + 34058 + 34059 + 34060 + 34061 + 34062 + 34063 + + + + + 34001 + 0 + + + + + 57600 + 57601 + 57603 + 33024 + 0 + 57607 + 0 + 57635 + 57634 + 57637 + 0 + 57643 + 57644 + 0 + 33090 + 33057 + 57636 + 57640 + 57641 + 33026 + 33065 + 33063 + 33064 + 33053 + 33054 + 0 + 33035 + 33036 + 34399 + 0 + 33038 + 33039 + 33877 + 0 + + + + + Log + _I0 + + + 249 + 20 + + 2 + $PROJ_DIR$\DebugLog.log + 0 + 0 + + + + WiseEye-LTE + WiseEye-LTE/Application + WiseEye-LTE/Application/User + WiseEye-LTE/Application/User/Core + + + + 14 + 44 + + + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 160000000400598400000100000048810000010000005584000006000000108400000F000000 + + + 0A007784000007840000FFFFFFFF86840000808C000044D5000055840000568400005984000048810000 + 1300048400004D000000318400005400000020810000910100000F810000890100000C81000086010000068400004F000000038400004C0000000E8400005100000030840000530000001F810000900100000E810000880100000B81000085010000D184000076010000058400004E000000028400004B000000108400005200000032840000550000000A840000500000000D81000087010000 + + + 0 + 0A0000000A0000006E0000006E000000 + 000000002C030000A00500003D030000 + 4096 + 0 + 0 + 32767 + 0 + + + 1 + + + 34050 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 4294967295 + 8604000049000000A005000043030000 + 8604000032000000A00500002C030000 + 4096 + 0 + 0 + 32767 + 0 + + + 1 + + + 34051 + D8040000B3010000FA05000064020000 + 8A0400004A0000009C05000012030000 + 32768 + 0 + 0 + 32767 + 0 + + + 1 + + + + File + Line + Messages + _I0 + + + 65 + 40 + 143 + 20 + + 2 + $WS_DIR$\BuildLog.log + 0 + 0 + + + 34055 + D8040000B3010000FA05000064020000 + 8A0400004A0000009C05000012030000 + 32768 + 0 + 0 + 32767 + 0 + + + 1 + + + 34056 + D8040000B3010000FA05000064020000 + 8A0400004A0000009C05000012030000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + 93 + 13 + 159 + 2 + + 0 + -1 + + + 34057 + D8040000B3010000FA05000064020000 + 8A0400004A0000009C05000012030000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + 93 + 13 + 159 + 2 + + 0 + -1 + + + 34058 + D8040000B3010000FA05000064020000 + 8A0400004A0000009C05000012030000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34059 + D8040000B3010000FA05000064020000 + 8A0400004A0000009C05000012030000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + 93 + 13 + 159 + 2 + + 0 + -1 + + + 34060 + D8040000B3010000FA05000064020000 + 8A0400004A0000009C05000012030000 + 32768 + 0 + 0 + 32767 + 0 + + + 1 + + + 2 + $WS_DIR/SourceBrowseLog.log + 0 + -1 + + + 34062 + D8040000B3010000FA05000064020000 + 8A0400004A0000009C05000012030000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + 2 + + 0 + -1 + + + 34052 + 000000001700000080020000A8000000 + 00000000000000008002000091000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 2 + + + + + + + + + <Right-click on a symbol in the editor to show a call graph> + + + + + + 0 + + + 0 + + + + + + 0 + + + 0 + + + File + Function + Line + + + 200 + 700 + 100 + + + + 34053 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34054 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + + Check + File + Line + Message + Severity + + + 200 + 200 + 100 + 500 + 100 + + + + 34061 + 000000001700000080020000A8000000 + 00000000000000008002000091000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 2 + + + 0 + + + C:\Users\Admin\Documents\.Projects\7. Cellular Relay Controller\LTE-Code\WiseEye-LTE\EWARM\WiseEye-LTE\BrowseInfo\WiseEye-LTE.pbw + + + File + Name + Scope + Symbol type + + + 300 + 300 + 300 + 300 + + + + 34063 + 00000000170000000601000078010000 + 0000000032000000F50000002C030000 + 4096 + 0 + 0 + 32767 + 0 + + + 1 + + + 000000000E000000000000000010000001000000FFFFFFFFFFFFFFFFF500000032000000F90000002C03000001000000020000100400000001000000D0FEFFFFD00300000F85000000000000000000000000000000000000010000000F850000010000000F850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000D85000000000000000000000000000000000000010000000D850000010000000D850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000068500000000000000000000000000000000000001000000068500000100000006850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000058500000000000000000000000000000000000001000000058500000100000005850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000048500000000000000000000000000000000000001000000048500000100000004850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000028500000000000000000000000000000000000001000000028500000100000002850000000000000040000001000000FFFFFFFFFFFFFFFF8204000032000000860400002C03000001000000020000100400000001000000000000000000000000000000000000000000000001000000FFFFFFFF08000000038500000785000008850000098500000A8500000B8500000C8500000E850000FFFF02000B004354616262656450616E6500400000010000008604000049000000A0050000430300008604000032000000A00500002C030000000000004080005608000000FFFEFF054200750069006C006400010000000385000001000000FFFFFFFFFFFFFFFFFFFEFF094400650062007500670020004C006F006700010000000785000001000000FFFFFFFFFFFFFFFFFFFEFF0C4400650063006C00610072006100740069006F006E007300000000000885000001000000FFFFFFFFFFFFFFFFFFFEFF0A5200650066006500720065006E00630065007300000000000985000001000000FFFFFFFFFFFFFFFFFFFEFF0D460069006E006400200069006E002000460069006C0065007300000000000A85000001000000FFFFFFFFFFFFFFFFFFFEFF1541006D0062006900670075006F0075007300200044006500660069006E006900740069006F006E007300000000000B85000001000000FFFFFFFFFFFFFFFFFFFEFF1153006F0075007200630065002000420072006F0077007300650020004C006F006700010000000C85000001000000FFFFFFFFFFFFFFFFFFFEFF0B54006F006F006C0020004F0075007400700075007400000000000E85000001000000FFFFFFFFFFFFFFFF0600000000000000000000000000000000000000000000000000000001000000FFFFFFFF0385000001000000FFFFFFFF03850000000000000000000000000000 + + + CMSIS-Pack + 00200000010000000100FFFF01001100434D4643546F6F6C426172427574746F6ED184000002000000AF010000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF0A43004D005300490053002D005000610063006B0018000000 + + + 34048 + 0A0000000A0000006E0000006E000000 + CB03000000000000F90300001A000000 + 8192 + 0 + 0 + 24 + 0 + + + 1 + + + Main + 00200000010000002100FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000D9010000FFFEFF000000000000000000000000000100000001000000018001E1000000000000DA010000FFFEFF000000000000000000000000000100000001000000018003E1000000000400DC010000FFFEFF00000000000000000000000000010000000100000001800081000000000000B9010000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E1000000000400DF010000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E1000000000400E1010000FFFEFF000000000000000000000000000100000001000000018022E1000000000400E0010000FFFEFF000000000000000000000000000100000001000000018025E1000000000400E2010000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE1000000000400E3010000FFFEFF00000000000000000000000000010000000100000001802CE1000000000400E4010000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01000D005061737465436F6D626F426F784281000000000400FFFFFFFFFFFEFF000100000000000000010000000000000001000000B400000002002050FFFFFFFFFFFEFF009600000000000000000001802181000000000400CB010000FFFEFF000000000000000000000000000100000001000000018024E1000000000400D4010000FFFEFF000000000000000000000000000100000001000000018028E1000000000400D3010000FFFEFF000000000000000000000000000100000001000000018029E1000000000400D5010000FFFEFF00000000000000000000000000010000000100000001800281000000000400BA010000FFFEFF00000000000000000000000000010000000100000001802981000000000400CF010000FFFEFF00000000000000000000000000010000000100000001802781000000000400CD010000FFFEFF00000000000000000000000000010000000100000001802881000000000400CE010000FFFEFF00000000000000000000000000010000000100000001801D81000000000000C7010000FFFEFF00000000000000000000000000010000000100000001801E81000000000400C8010000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B81000002000400BE010000FFFEFF00000000000000000000000000010000000100000001800C81000002000000BF010000FFFEFF00000000000000000000000000010000000100000001805F86000002000000D2010000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800E81000002000000C1010000FFFEFF00000000000000000000000000010000000100000001800F81000002000000C2010000FFFEFF00000000000000000000000000010000000100000001805584000002000000FFFFFFFFFFFEFF1B44006F0077006E006C006F0061006400200061006300740069007600650020006100700070006C00690063006100740069006F006E00000000000000000001000000000000000100000000000000FFFEFF044D00610069006E00E4010000 + + + 34049 + 0A0000000A0000006E0000006E000000 + 0000000000000000CB0300001A000000 + 8192 + 0 + 0 + 484 + 0 + + + 1 + + + + + 01000000030000000100000000000000000000000100000001000000FFFFFFFF00000000010000000100000000000000280000002800000001000000030000000200000001000000FFFEFF1B2400570053005F0044004900520024005C002E002E005C0043006F00720065005C005300720063005C006700700069006F002E00630001000000FFFF010017004966436F6E74656E7453746F726167654D6663496D706CFFFEFF00FFFEFFFF26013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E0038003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0031003000370034003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0031003000370034003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF066700700069006F002E00630000000000FFFFFFFFFFFFFFFFFFFEFF1B2400570053005F0044004900520024005C002E002E005C0043006F00720065005C005300720063005C006D00610069006E002E006300010000000180FFFEFF00FFFEFFFF21013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E00370033003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0030003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0030003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF066D00610069006E002E00630000000000FFFFFFFFFFFFFFFFFFFEFF1C2400570053005F0044004900520024005C002E002E005C0043006F00720065005C005300720063005C00750073006100720074002E006300010000000180FFFEFF00FFFEFFFF28013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E003200330035003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0037003700320039003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0037003700320039003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF07750073006100720074002E00630000000000FFFFFFFFFFFFFFFF0000000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000100000002000000F9000000490000008204000043030000 + + + + diff --git a/EWARM/settings/WiseEye_LTE_EditorBookmarks.xml b/EWARM/settings/WiseEye_LTE_EditorBookmarks.xml new file mode 100644 index 0000000..38c3485 --- /dev/null +++ b/EWARM/settings/WiseEye_LTE_EditorBookmarks.xml @@ -0,0 +1,2 @@ + + diff --git a/EWARM/startup_stm32wba52xx.s b/EWARM/startup_stm32wba52xx.s new file mode 100644 index 0000000..ea2e30a --- /dev/null +++ b/EWARM/startup_stm32wba52xx.s @@ -0,0 +1,562 @@ +;******************************************************************************** +;* File Name : startup_stm32wba52xx.s +;* Author : MCD Application Team +;* Description : STM32WBA5xx Ultra Low Power Devices vector +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == _iar_program_start, +;* - Set the vector table entries with the exceptions ISR +;* address. +;* - Branches to main in the C library (which eventually +;* calls main()). +;* After Reset the Cortex-M33 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;******************************************************************************** +;* @attention +;* +;* Copyright (c) 2022 STMicroelectronics. +;* All rights reserved. +;* +;* This software is licensed under terms that can be found in the LICENSE file +;* in the root directory of this software component. +;* If no LICENSE file comes with this software, it is provided AS-IS. +;* +;******************************************************************************* +; +; +; The modules in this file are included in the libraries, and may be replaced +; by any user-defined modules that define the PUBLIC symbol _program_start or +; a user defined start symbol. +; To override the cstartup defined in the library, simply add your modified +; version to the workbench project. +; +; The vector table is normally located at address 0. +; When debugging in RAM, it can be located in RAM, aligned to at least 2^6. +; The name "__vector_table" has special meaning for C-SPY: +; it is where the SP start value is found, and the NVIC vector +; table register (VTOR) is initialized to this address if != 0. +; +; Cortex-M version +; + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + EXTERN SystemInit + PUBLIC __vector_table + PUBLIC __Vectors + PUBLIC __Vectors_End + PUBLIC __Vectors_Size + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD SecureFault_Handler ; Secure Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window WatchDog + DCD PVD_IRQHandler ; PVD through EXTI Line detection Interrupt + DCD RTC_IRQHandler ; RTC non-secure interrupt + DCD RTC_S_IRQHandler ; RTC secure interrupt + DCD TAMP_IRQHandler ; Tamper non-secure interrupt + DCD RAMCFG_IRQHandler ; RAMCFG global + DCD FLASH_IRQHandler ; FLASH non-secure global interrupt + DCD FLASH_S_IRQHandler ; FLASH secure global interrupt + DCD GTZC_IRQHandler ; Global TrustZone Controller interrupt + DCD RCC_IRQHandler ; RCC non-secure global interrupt + DCD RCC_S_IRQHandler ; RCC secure global interrupt + DCD EXTI0_IRQHandler ; EXTI Line0 interrupt + DCD EXTI1_IRQHandler ; EXTI Line1 interrupt + DCD EXTI2_IRQHandler ; EXTI Line2 interrupt + DCD EXTI3_IRQHandler ; EXTI Line3 interrupt + DCD EXTI4_IRQHandler ; EXTI Line4 interrupt + DCD EXTI5_IRQHandler ; EXTI Line5 interrupt + DCD EXTI6_IRQHandler ; EXTI Line6 interrupt + DCD EXTI7_IRQHandler ; EXTI Line7 interrupt + DCD EXTI8_IRQHandler ; EXTI Line8 interrupt + DCD EXTI9_IRQHandler ; EXTI Line9 interrupt + DCD EXTI10_IRQHandler ; EXTI Line10 interrupt + DCD EXTI11_IRQHandler ; EXTI Line11 interrupt + DCD EXTI12_IRQHandler ; EXTI Line12 interrupt + DCD EXTI13_IRQHandler ; EXTI Line13 interrupt + DCD EXTI14_IRQHandler ; EXTI Line14 interrupt + DCD EXTI15_IRQHandler ; EXTI Line15 interrupt + DCD IWDG_IRQHandler ; IWDG global interrupt + DCD SAES_IRQHandler ; Secure AES global interrupt + DCD GPDMA1_Channel0_IRQHandler ; GPDMA1 Channel 0 global interrupt + DCD GPDMA1_Channel1_IRQHandler ; GPDMA1 Channel 1 global interrupt + DCD GPDMA1_Channel2_IRQHandler ; GPDMA1 Channel 2 global interrupt + DCD GPDMA1_Channel3_IRQHandler ; GPDMA1 Channel 3 global interrupt + DCD GPDMA1_Channel4_IRQHandler ; GPDMA1 Channel 4 global interrupt + DCD GPDMA1_Channel5_IRQHandler ; GPDMA1 Channel 5 global interrupt + DCD GPDMA1_Channel6_IRQHandler ; GPDMA1 Channel 6 global interrupt + DCD GPDMA1_Channel7_IRQHandler ; GPDMA1 Channel 7 global interrupt + DCD TIM1_BRK_IRQHandler ; TIM1 Break interrupt + DCD TIM1_UP_IRQHandler ; TIM1 Update interrupt + DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation interrupt + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare interrupt + DCD TIM2_IRQHandler ; TIM2 global interrupt + DCD TIM3_IRQHandler ; TIM3 global interrupt + DCD I2C1_EV_IRQHandler ; I2C1 Event interrupt + DCD I2C1_ER_IRQHandler ; I2C1 Error interrupt + DCD SPI1_IRQHandler ; SPI1 global interrupt + DCD USART1_IRQHandler ; USART1 global interrupt + DCD USART2_IRQHandler ; USART2 global interrupt + DCD LPUART1_IRQHandler ; LPUART1 global interrupt + DCD LPTIM1_IRQHandler ; LPTIM1 global interrupt + DCD LPTIM2_IRQHandler ; LPTIM2 global interrupt + DCD TIM16_IRQHandler ; TIM16 global interrupt + DCD TIM17_IRQHandler ; TIM17 global interrupt + DCD 0 ; Reserved + DCD I2C3_EV_IRQHandler ; I2C3 event interrupt + DCD I2C3_ER_IRQHandler ; I2C3 error interrupt + DCD 0 ; Reserved + DCD TSC_IRQHandler ; Touch Sense Controller global interrupt + DCD AES_IRQHandler ; AES global interrupt + DCD RNG_IRQHandler ; RNG global interrupt + DCD FPU_IRQHandler ; FPU global interrupt + DCD HASH_IRQHandler ; HASH global interrupt + DCD PKA_IRQHandler ; PKA global interrupt + DCD SPI3_IRQHandler ; SPI3 global interrupt + DCD ICACHE_IRQHandler ; Instruction cache global interrupt + DCD ADC4_IRQHandler ; LP ADC (12bits) global interrupt + DCD RADIO_IRQHandler ; 2.4GHz RADIO global interrupt + DCD WKUP_IRQHandler ; PWR global WKUP pin interrupt + DCD HSEM_IRQHandler ; HSEM non-secure global interrupt + DCD HSEM_S_IRQHandler ; HSEM secure global interrupt + DCD WKUP_S_IRQHandler ; PWR secure global WKUP pin interrupt + +__Vectors_End + +__Vectors EQU __vector_table +__Vectors_Size EQU __Vectors_End - __Vectors + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + PUBWEAK Reset_Handler + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =SystemInit + BLX R0 + LDR R0, =__iar_program_start + BX R0 + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + PUBWEAK MemManage_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +MemManage_Handler + B MemManage_Handler + + PUBWEAK BusFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +BusFault_Handler + B BusFault_Handler + + PUBWEAK UsageFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +UsageFault_Handler + B UsageFault_Handler + + PUBWEAK SecureFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SecureFault_Handler + B SecureFault_Handler + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + PUBWEAK DebugMon_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +DebugMon_Handler + B DebugMon_Handler + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + PUBWEAK WWDG_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +WWDG_IRQHandler + B WWDG_IRQHandler + + PUBWEAK PVD_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PVD_IRQHandler + B PVD_IRQHandler + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + PUBWEAK RTC_S_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_S_IRQHandler + B RTC_S_IRQHandler + + PUBWEAK TAMP_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TAMP_IRQHandler + B TAMP_IRQHandler + + PUBWEAK RAMCFG_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RAMCFG_IRQHandler + B RAMCFG_IRQHandler + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + PUBWEAK FLASH_S_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_S_IRQHandler + B FLASH_S_IRQHandler + + PUBWEAK GTZC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +GTZC_IRQHandler + B GTZC_IRQHandler + + PUBWEAK RCC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RCC_IRQHandler + B RCC_IRQHandler + + PUBWEAK RCC_S_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RCC_S_IRQHandler + B RCC_S_IRQHandler + + PUBWEAK EXTI0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +EXTI0_IRQHandler + B EXTI0_IRQHandler + + PUBWEAK EXTI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +EXTI1_IRQHandler + B EXTI1_IRQHandler + + PUBWEAK EXTI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +EXTI2_IRQHandler + B EXTI2_IRQHandler + + PUBWEAK EXTI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +EXTI3_IRQHandler + B EXTI3_IRQHandler + + PUBWEAK EXTI4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +EXTI4_IRQHandler + B EXTI4_IRQHandler + + PUBWEAK EXTI5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +EXTI5_IRQHandler + B EXTI5_IRQHandler + + PUBWEAK EXTI6_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +EXTI6_IRQHandler + B EXTI6_IRQHandler + + PUBWEAK EXTI7_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +EXTI7_IRQHandler + B EXTI7_IRQHandler + + PUBWEAK EXTI8_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +EXTI8_IRQHandler + B EXTI8_IRQHandler + + PUBWEAK EXTI9_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +EXTI9_IRQHandler + B EXTI9_IRQHandler + + PUBWEAK EXTI10_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +EXTI10_IRQHandler + B EXTI10_IRQHandler + + PUBWEAK EXTI11_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +EXTI11_IRQHandler + B EXTI11_IRQHandler + + PUBWEAK EXTI12_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +EXTI12_IRQHandler + B EXTI12_IRQHandler + + PUBWEAK EXTI13_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +EXTI13_IRQHandler + B EXTI13_IRQHandler + + PUBWEAK EXTI14_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +EXTI14_IRQHandler + B EXTI14_IRQHandler + + PUBWEAK EXTI15_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +EXTI15_IRQHandler + B EXTI15_IRQHandler + + PUBWEAK IWDG_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +IWDG_IRQHandler + B IWDG_IRQHandler + + PUBWEAK SAES_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SAES_IRQHandler + B SAES_IRQHandler + + PUBWEAK GPDMA1_Channel0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +GPDMA1_Channel0_IRQHandler + B GPDMA1_Channel0_IRQHandler + + PUBWEAK GPDMA1_Channel1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +GPDMA1_Channel1_IRQHandler + B GPDMA1_Channel1_IRQHandler + + PUBWEAK GPDMA1_Channel2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +GPDMA1_Channel2_IRQHandler + B GPDMA1_Channel2_IRQHandler + + PUBWEAK GPDMA1_Channel3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +GPDMA1_Channel3_IRQHandler + B GPDMA1_Channel3_IRQHandler + + PUBWEAK GPDMA1_Channel4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +GPDMA1_Channel4_IRQHandler + B GPDMA1_Channel4_IRQHandler + + PUBWEAK GPDMA1_Channel5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +GPDMA1_Channel5_IRQHandler + B GPDMA1_Channel5_IRQHandler + + PUBWEAK GPDMA1_Channel6_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +GPDMA1_Channel6_IRQHandler + B GPDMA1_Channel6_IRQHandler + + PUBWEAK GPDMA1_Channel7_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +GPDMA1_Channel7_IRQHandler + B GPDMA1_Channel7_IRQHandler + + PUBWEAK TIM1_BRK_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TIM1_BRK_IRQHandler + B TIM1_BRK_IRQHandler + + PUBWEAK TIM1_UP_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TIM1_UP_IRQHandler + B TIM1_UP_IRQHandler + + PUBWEAK TIM1_TRG_COM_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TIM1_TRG_COM_IRQHandler + B TIM1_TRG_COM_IRQHandler + + PUBWEAK TIM1_CC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TIM1_CC_IRQHandler + B TIM1_CC_IRQHandler + + PUBWEAK TIM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TIM2_IRQHandler + B TIM2_IRQHandler + + PUBWEAK TIM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TIM3_IRQHandler + B TIM3_IRQHandler + + PUBWEAK I2C1_EV_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C1_EV_IRQHandler + B I2C1_EV_IRQHandler + + PUBWEAK I2C1_ER_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C1_ER_IRQHandler + B I2C1_ER_IRQHandler + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + PUBWEAK USART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +USART1_IRQHandler + B USART1_IRQHandler + + PUBWEAK USART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +USART2_IRQHandler + B USART2_IRQHandler + + PUBWEAK LPUART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +LPUART1_IRQHandler + B LPUART1_IRQHandler + + PUBWEAK LPTIM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +LPTIM1_IRQHandler + B LPTIM1_IRQHandler + + PUBWEAK LPTIM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +LPTIM2_IRQHandler + B LPTIM2_IRQHandler + + PUBWEAK TIM16_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TIM16_IRQHandler + B TIM16_IRQHandler + + PUBWEAK TIM17_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TIM17_IRQHandler + B TIM17_IRQHandler + + PUBWEAK I2C3_EV_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C3_EV_IRQHandler + B I2C3_EV_IRQHandler + + PUBWEAK I2C3_ER_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C3_ER_IRQHandler + B I2C3_ER_IRQHandler + + PUBWEAK TSC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TSC_IRQHandler + B TSC_IRQHandler + + PUBWEAK AES_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +AES_IRQHandler + B AES_IRQHandler + + PUBWEAK RNG_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RNG_IRQHandler + B RNG_IRQHandler + + PUBWEAK FPU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FPU_IRQHandler + B FPU_IRQHandler + + PUBWEAK HASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +HASH_IRQHandler + B HASH_IRQHandler + + PUBWEAK PKA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PKA_IRQHandler + B PKA_IRQHandler + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + PUBWEAK ICACHE_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ICACHE_IRQHandler + B ICACHE_IRQHandler + + PUBWEAK ADC4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ADC4_IRQHandler + B ADC4_IRQHandler + + PUBWEAK RADIO_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RADIO_IRQHandler + B RADIO_IRQHandler + + PUBWEAK WKUP_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +WKUP_IRQHandler + B WKUP_IRQHandler + + PUBWEAK HSEM_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +HSEM_IRQHandler + B HSEM_IRQHandler + + PUBWEAK HSEM_S_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +HSEM_S_IRQHandler + B HSEM_S_IRQHandler + + PUBWEAK WKUP_S_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +WKUP_S_IRQHandler + B WKUP_S_IRQHandler + + END diff --git a/EWARM/stm32wba52xx_flash.icf b/EWARM/stm32wba52xx_flash.icf new file mode 100644 index 0000000..12eae9f --- /dev/null +++ b/EWARM/stm32wba52xx_flash.icf @@ -0,0 +1,35 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x08000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x080FFFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +define symbol __region_SRAM2_start__ = 0x20010000; +define symbol __region_SRAM2_end__ = 0x2001FFFF; + +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x400; +define symbol __ICFEDIT_size_heap__ = 0x200; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +define region SRAM2_region = mem:[from __region_SRAM2_start__ to __region_SRAM2_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; +place in SRAM2_region { }; diff --git a/EWARM/stm32wba52xx_sram.icf b/EWARM/stm32wba52xx_sram.icf new file mode 100644 index 0000000..b384d48 --- /dev/null +++ b/EWARM/stm32wba52xx_sram.icf @@ -0,0 +1,36 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x20000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x20000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x20007FFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20008000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +define symbol __region_SRAM2_start__ = 0x20010000; +define symbol __region_SRAM2_end__ = 0x2001FFFF; + +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x400; +define symbol __ICFEDIT_size_heap__ = 0x200; +/**** End of ICF editor section. ###ICF###*/ + + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +define region SRAM2_region = mem:[from __region_SRAM2_start__ to __region_SRAM2_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; +place in SRAM2_region { }; diff --git a/WiseEye-LTE-2.ioc b/WiseEye-LTE-2.ioc new file mode 100644 index 0000000..2dfda16 --- /dev/null +++ b/WiseEye-LTE-2.ioc @@ -0,0 +1,194 @@ +#MicroXplorer Configuration settings - do not modify +CAD.formats= +CAD.pinconfig= +CAD.provider= +CORTEX_M33_NS.userName=CORTEX_M33 +File.Version=6 +GPIO.groupedBy= +KeepUserPlacement=false +LPUART1.BaudRate=115200 +LPUART1.IPParameters=BaudRate +MMTAppRegionsCount=0 +MMTConfigApplied=false +Mcu.CPN=STM32WBA52CGU6 +Mcu.ContextProject=TrustZoneDisabled +Mcu.Family=STM32WBA +Mcu.IP0=CORTEX_M33_NS +Mcu.IP1=ICACHE +Mcu.IP2=LPUART1 +Mcu.IP3=MEMORYMAP +Mcu.IP4=NVIC +Mcu.IP5=PWR +Mcu.IP6=RCC +Mcu.IP7=SYS +Mcu.IP8=USART1 +Mcu.IPNb=9 +Mcu.Name=STM32WBA52CGUx +Mcu.Package=UFQFPN48 +Mcu.Pin0=PB12 +Mcu.Pin1=PB11 +Mcu.Pin10=OSC_IN +Mcu.Pin11=PA10 +Mcu.Pin12=VP_CORTEX_M33_NS_VS_Hclk +Mcu.Pin13=VP_ICACHE_VS_ICACHE +Mcu.Pin14=VP_PWR_VS_SECSignals +Mcu.Pin15=VP_SYS_VS_Systick +Mcu.Pin16=VP_MEMORYMAP_VS_MEMORYMAP +Mcu.Pin2=PA8 +Mcu.Pin3=PC15-OSC32_OUT +Mcu.Pin4=PC14-OSC32_IN +Mcu.Pin5=PB7 +Mcu.Pin6=PB4 (NJTRST) +Mcu.Pin7=PA15 (JTDI) +Mcu.Pin8=PB0 +Mcu.Pin9=OSC_OUT +Mcu.PinsNb=17 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32WBA52CGUx +MxCube.Version=6.15.0 +MxDb.Version=DB.6.0.150 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false +NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +OSC_IN.Mode=HSE-External-Oscillator +OSC_IN.Signal=RCC_OSC_IN +OSC_OUT.Mode=HSE-External-Oscillator +OSC_OUT.Signal=RCC_OSC_OUT +PA10.GPIOParameters=GPIO_Label +PA10.GPIO_Label=DEBUG_RX +PA10.Locked=true +PA10.Mode=Asynchronous +PA10.Signal=LPUART1_RX +PA15\ (JTDI).GPIOParameters=GPIO_Label +PA15\ (JTDI).GPIO_Label=LTE_PWRKEY +PA15\ (JTDI).Locked=true +PA15\ (JTDI).Signal=GPIO_Output +PA8.GPIOParameters=GPIO_Label +PA8.GPIO_Label=LTE_RX +PA8.Mode=Asynchronous +PA8.Signal=USART1_RX +PB0.GPIOParameters=GPIO_Label +PB0.GPIO_Label=LTE_RST +PB0.Locked=true +PB0.Signal=GPIO_Output +PB11.GPIOParameters=GPIO_Label +PB11.GPIO_Label=DEBUG_TX +PB11.Mode=Asynchronous +PB11.Signal=LPUART1_TX +PB12.GPIOParameters=GPIO_Label +PB12.GPIO_Label=LTE_TX +PB12.Mode=Asynchronous +PB12.Signal=USART1_TX +PB4\ (NJTRST).GPIOParameters=GPIO_Label +PB4\ (NJTRST).GPIO_Label=LTE_EN +PB4\ (NJTRST).Locked=true +PB4\ (NJTRST).Signal=GPIO_Output +PB7.GPIOParameters=GPIO_Label +PB7.GPIO_Label=STATUS_LED +PB7.Locked=true +PB7.Signal=GPIO_Output +PC14-OSC32_IN.Mode=LSE-External-Oscillator +PC14-OSC32_IN.Signal=RCC_OSC32_IN +PC15-OSC32_OUT.Mode=LSE-External-Oscillator +PC15-OSC32_OUT.Signal=RCC_OSC32_OUT +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=true +ProjectManager.CompilerLinker=GCC +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=true +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=false +ProjectManager.DeviceId=STM32WBA52CGUx +ProjectManager.FirmwarePackage=STM32Cube FW_WBA V1.7.0 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=2 +ProjectManager.MainLocation=Core/Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=WiseEye-LTE.ioc +ProjectManager.ProjectName=WiseEye-LTE +ProjectManager.ProjectStructure= +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=EWARM V9.20 +ProjectManager.ToolChainLocation= +ProjectManager.UAScriptAfterPath= +ProjectManager.UAScriptBeforePath= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-SystemPower_Config-PWR-false-HAL-true,4-MX_LPUART1_UART_Init-LPUART1-false-HAL-true,5-MX_USART1_UART_Init-USART1-false-HAL-true,6-MX_ICACHE_Init-ICACHE-false-HAL-true,0-MX_CORTEX_M33_NS_Init-CORTEX_M33_NS-false-HAL-true +RCC.ADCFreq_Value=64000000 +RCC.AHB4Freq_Value=64000000 +RCC.AHB5CLKDivider=DIV2 +RCC.AHB5Freq_Value=32000000 +RCC.AHBFreq_Value=64000000 +RCC.APB1Freq_Value=64000000 +RCC.APB1TimFreq_Value=64000000 +RCC.APB2Freq_Value=64000000 +RCC.APB2TimFreq_Value=64000000 +RCC.APB7Freq_Value=64000000 +RCC.ASFreq_Value=64000000 +RCC.CortexFreq_Value=8000000 +RCC.FCLKCortexFreq_Value=64000000 +RCC.HCLKFreq_Value=64000000 +RCC.HSESYSFreq_VALUE=32000000 +RCC.HSE_VALUE=32000000 +RCC.HSI_VALUE=16000000 +RCC.I2C1Freq_Value=64000000 +RCC.I2C3Freq_Value=64000000 +RCC.IPParameters=ADCFreq_Value,AHB4Freq_Value,AHB5CLKDivider,AHB5Freq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,APB7Freq_Value,ASFreq_Value,CortexFreq_Value,FCLKCortexFreq_Value,HCLKFreq_Value,HSESYSFreq_VALUE,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2C3Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSI_VALUE,MCO1PinFreq_Value,PLLFRACN,PLLM,PLLN,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PLLSourceVirtual,RNGFreq_Value,RSTFreq_Value,RSTRFFreq_Value,SAESFreq_Value,SPI1Freq_Value,SPI3Freq_Value,SYSCLKFreq_VALUE,SYSCLKSourceVirtual,USART1Freq_Value,USART2Freq_Value,VCOInputFreq_Value,VCOOutputFreq_Value +RCC.LPTIM1Freq_Value=64000000 +RCC.LPTIM2Freq_Value=64000000 +RCC.LPUART1Freq_Value=64000000 +RCC.LSCOPinFreq_Value=32000 +RCC.LSI_VALUE=32000 +RCC.MCO1PinFreq_Value=64000000 +RCC.PLLFRACN=0 +RCC.PLLM=2 +RCC.PLLN=8 +RCC.PLLPoutputFreq_Value=64000000 +RCC.PLLQoutputFreq_Value=64000000 +RCC.PLLRCLKFreq_Value=64000000 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.RNGFreq_Value=16000000 +RCC.RSTFreq_Value=32000 +RCC.RSTRFFreq_Value=32000000 +RCC.SAESFreq_Value=64000000 +RCC.SPI1Freq_Value=64000000 +RCC.SPI3Freq_Value=64000000 +RCC.SYSCLKFreq_VALUE=64000000 +RCC.SYSCLKSourceVirtual=RCC_SYSCLKSOURCE_PLLCLK +RCC.USART1Freq_Value=64000000 +RCC.USART2Freq_Value=64000000 +RCC.VCOInputFreq_Value=16000000 +RCC.VCOOutputFreq_Value=128000000 +USART1.IPParameters=VirtualMode-Asynchronous +USART1.VirtualMode-Asynchronous=VM_ASYNC +VP_CORTEX_M33_NS_VS_Hclk.Mode=Hclk_Mode +VP_CORTEX_M33_NS_VS_Hclk.Signal=CORTEX_M33_NS_VS_Hclk +VP_ICACHE_VS_ICACHE.Mode=DirectMappedCache +VP_ICACHE_VS_ICACHE.Signal=ICACHE_VS_ICACHE +VP_MEMORYMAP_VS_MEMORYMAP.Mode=CurAppReg +VP_MEMORYMAP_VS_MEMORYMAP.Signal=MEMORYMAP_VS_MEMORYMAP +VP_PWR_VS_SECSignals.Mode=Security/Privilege +VP_PWR_VS_SECSignals.Signal=PWR_VS_SECSignals +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom diff --git a/WiseEye-LTE.ioc b/WiseEye-LTE.ioc new file mode 100644 index 0000000..c87fc78 --- /dev/null +++ b/WiseEye-LTE.ioc @@ -0,0 +1,249 @@ +#MicroXplorer Configuration settings - do not modify +CAD.formats= +CAD.pinconfig= +CAD.provider= +CORTEX_M33_NS.userName=CORTEX_M33 +File.Version=6 +GPIO.groupedBy=Expand Peripherals +KeepUserPlacement=false +LPUART1.BaudRate=115200 +LPUART1.IPParameters=BaudRate +MMTAppReg1.MEMORYMAP.AP=RW_priv_only +MMTAppReg1.MEMORYMAP.AppRegionName=RAM +MMTAppReg1.MEMORYMAP.ContextName=CortexM33 +MMTAppReg1.MEMORYMAP.CoreName=ARM Cortex-M33 +MMTAppReg1.MEMORYMAP.DefaultDataRegion=true +MMTAppReg1.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,DefaultDataRegion,ContextName,Name,AP +MMTAppReg1.MEMORYMAP.Name=RAM +MMTAppReg1.MEMORYMAP.Size=131072 +MMTAppReg1.MEMORYMAP.StartAddress=0x20000000 +MMTAppReg2.MEMORYMAP.AP=RO_priv_only +MMTAppReg2.MEMORYMAP.AppRegionName=FLASH +MMTAppReg2.MEMORYMAP.Cacheability=WTRA +MMTAppReg2.MEMORYMAP.ContextName=CortexM33 +MMTAppReg2.MEMORYMAP.CoreName=ARM Cortex-M33 +MMTAppReg2.MEMORYMAP.DefaultCodeRegion=true +MMTAppReg2.MEMORYMAP.DefaultDataRegion=false +MMTAppReg2.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,DefaultDataRegion,MemType,ContextName,Name,AP,Cacheability,DefaultCodeRegion +MMTAppReg2.MEMORYMAP.MemType=ROM +MMTAppReg2.MEMORYMAP.Name=FLASH +MMTAppReg2.MEMORYMAP.Size=1048576 +MMTAppReg2.MEMORYMAP.StartAddress=0x08000000 +MMTAppReg3.MEMORYMAP.AppRegionName=RX/TX_RAM_Radio +MMTAppReg3.MEMORYMAP.ContextName=CortexM33 +MMTAppReg3.MEMORYMAP.CoreName=ARM Cortex-M33 +MMTAppReg3.MEMORYMAP.DefaultDataRegion=false +MMTAppReg3.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,SizeUnit,DefaultDataRegion,ContextName,Name,ReservedRegion,Security +MMTAppReg3.MEMORYMAP.Name=RX/TX_RAM_Radio +MMTAppReg3.MEMORYMAP.ReservedRegion=true +MMTAppReg3.MEMORYMAP.Security=NS +MMTAppReg3.MEMORYMAP.Size=16384 +MMTAppReg3.MEMORYMAP.SizeUnit=B +MMTAppReg3.MEMORYMAP.StartAddress=0x48028000 +MMTAppRegionsCount=3 +MMTConfigApplied=false +Mcu.CPN=STM32WBA52CGU6 +Mcu.ContextProject=TrustZoneDisabled +Mcu.Family=STM32WBA +Mcu.IP0=CORTEX_M33_NS +Mcu.IP1=DEBUG +Mcu.IP10=SYS +Mcu.IP11=USART1 +Mcu.IP2=HSEM +Mcu.IP3=ICACHE +Mcu.IP4=LPUART1 +Mcu.IP5=MEMORYMAP +Mcu.IP6=NVIC +Mcu.IP7=PWR +Mcu.IP8=RCC +Mcu.IP9=RTC +Mcu.IPNb=12 +Mcu.Name=STM32WBA52CGUx +Mcu.Package=UFQFPN48 +Mcu.Pin0=PB12 +Mcu.Pin1=PB11 +Mcu.Pin10=PB15 +Mcu.Pin11=OSC_OUT +Mcu.Pin12=OSC_IN +Mcu.Pin13=PA10 +Mcu.Pin14=VP_CORTEX_M33_NS_VS_Hclk +Mcu.Pin15=VP_HSEM_VS_HSEM +Mcu.Pin16=VP_ICACHE_VS_ICACHE +Mcu.Pin17=VP_PWR_VS_SECSignals +Mcu.Pin18=VP_RTC_VS_RTC_Activate +Mcu.Pin19=VP_RTC_VS_RTC_WakeUp_intern +Mcu.Pin2=PA8 +Mcu.Pin20=VP_SYS_VS_Systick +Mcu.Pin21=VP_MEMORYMAP_VS_MEMORYMAP +Mcu.Pin3=PC15-OSC32_OUT +Mcu.Pin4=PC14-OSC32_IN +Mcu.Pin5=PB7 +Mcu.Pin6=PB4 (NJTRST) +Mcu.Pin7=PA14 (JTCK/SWCLK) +Mcu.Pin8=PA13 (JTMS/SWDIO) +Mcu.Pin9=PB0 +Mcu.PinsNb=22 +Mcu.ThirdParty0=STMicroelectronics.X-CUBE-FREERTOS.1.3.1 +Mcu.ThirdPartyNb=1 +Mcu.UserConstants= +Mcu.UserName=STM32WBA52CGUx +MxCube.Version=6.15.0 +MxDb.Version=DB.6.0.150 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.ForceEnableDMAVector=true +NVIC.HSEM_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false +NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +OSC_IN.Mode=HSE-External-Oscillator +OSC_IN.Signal=RCC_OSC_IN +OSC_OUT.Mode=HSE-External-Oscillator +OSC_OUT.Signal=RCC_OSC_OUT +PA10.GPIOParameters=GPIO_Label +PA10.GPIO_Label=DEBUG_RX +PA10.Locked=true +PA10.Mode=Asynchronous +PA10.Signal=LPUART1_RX +PA13\ (JTMS/SWDIO).Mode=Serial_Wire +PA13\ (JTMS/SWDIO).Signal=DEBUG_JTMS-SWDIO +PA14\ (JTCK/SWCLK).Mode=Serial_Wire +PA14\ (JTCK/SWCLK).Signal=DEBUG_JTCK-SWCLK +PA8.GPIOParameters=GPIO_Label +PA8.GPIO_Label=LTE_RX +PA8.Mode=Asynchronous +PA8.Signal=USART1_RX +PB0.GPIOParameters=GPIO_Label +PB0.GPIO_Label=LTE_RST +PB0.Locked=true +PB0.Signal=GPIO_Output +PB11.GPIOParameters=GPIO_Label +PB11.GPIO_Label=DEBUG_TX +PB11.Mode=Asynchronous +PB11.Signal=LPUART1_TX +PB12.GPIOParameters=GPIO_Label +PB12.GPIO_Label=LTE_TX +PB12.Mode=Asynchronous +PB12.Signal=USART1_TX +PB15.GPIOParameters=GPIO_Label +PB15.GPIO_Label=LTE_PWRKEY +PB15.Locked=true +PB15.Signal=GPIO_Output +PB4\ (NJTRST).GPIOParameters=GPIO_Label +PB4\ (NJTRST).GPIO_Label=LTE_EN +PB4\ (NJTRST).Locked=true +PB4\ (NJTRST).Signal=GPIO_Output +PB7.GPIOParameters=GPIO_Label +PB7.GPIO_Label=STATUS_LED +PB7.Locked=true +PB7.Signal=GPIO_Output +PC14-OSC32_IN.Mode=LSE-External-Oscillator +PC14-OSC32_IN.Signal=RCC_OSC32_IN +PC15-OSC32_OUT.Mode=LSE-External-Oscillator +PC15-OSC32_OUT.Signal=RCC_OSC32_OUT +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=true +ProjectManager.CompilerLinker=GCC +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=true +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=false +ProjectManager.DeviceId=STM32WBA52CGUx +ProjectManager.FirmwarePackage=STM32Cube FW_WBA V1.7.0 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=2 +ProjectManager.MainLocation=Core/Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain=STM32CubeIDE +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=WiseEye-LTE.ioc +ProjectManager.ProjectName=WiseEye-LTE +ProjectManager.ProjectStructure= +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=EWARM V9.20 +ProjectManager.ToolChainLocation= +ProjectManager.UAScriptAfterPath= +ProjectManager.UAScriptBeforePath= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_LPUART1_UART_Init-LPUART1-false-HAL-true,4-SystemPower_Config-PWR-false-HAL-true,5-MX_USART1_UART_Init-USART1-false-HAL-true,6-MX_RTC_Init-RTC-false-HAL-true,7-MX_ICACHE_Init-ICACHE-false-HAL-true,0-MX_CORTEX_M33_NS_Init-CORTEX_M33_NS-false-HAL-true,0-MX_HSEM_Init-HSEM-false-HAL-true +RCC.ADCFreq_Value=64000000 +RCC.AHB4Freq_Value=64000000 +RCC.AHB5CLKDivider=DIV2 +RCC.AHB5Freq_Value=32000000 +RCC.AHBFreq_Value=64000000 +RCC.APB1Freq_Value=64000000 +RCC.APB1TimFreq_Value=64000000 +RCC.APB2Freq_Value=64000000 +RCC.APB2TimFreq_Value=64000000 +RCC.APB7Freq_Value=64000000 +RCC.ASFreq_Value=64000000 +RCC.CortexFreq_Value=8000000 +RCC.FCLKCortexFreq_Value=64000000 +RCC.HCLKFreq_Value=64000000 +RCC.HSESYSFreq_VALUE=32000000 +RCC.HSE_VALUE=32000000 +RCC.HSI_VALUE=16000000 +RCC.I2C1Freq_Value=64000000 +RCC.I2C3Freq_Value=64000000 +RCC.IPParameters=ADCFreq_Value,AHB4Freq_Value,AHB5CLKDivider,AHB5Freq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,APB7Freq_Value,ASFreq_Value,CortexFreq_Value,FCLKCortexFreq_Value,HCLKFreq_Value,HSESYSFreq_VALUE,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2C3Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSI_VALUE,MCO1PinFreq_Value,PLLFRACN,PLLM,PLLN,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PLLSourceVirtual,RNGFreq_Value,RSTFreq_Value,RSTRFFreq_Value,RTCFreq_Value,SAESFreq_Value,SPI1Freq_Value,SPI3Freq_Value,SYSCLKFreq_VALUE,SYSCLKSourceVirtual,USART1Freq_Value,USART2Freq_Value,VCOInputFreq_Value,VCOOutputFreq_Value +RCC.LPTIM1Freq_Value=64000000 +RCC.LPTIM2Freq_Value=64000000 +RCC.LPUART1Freq_Value=64000000 +RCC.LSCOPinFreq_Value=32000 +RCC.LSI_VALUE=32000 +RCC.MCO1PinFreq_Value=64000000 +RCC.PLLFRACN=0 +RCC.PLLM=2 +RCC.PLLN=8 +RCC.PLLPoutputFreq_Value=64000000 +RCC.PLLQoutputFreq_Value=64000000 +RCC.PLLRCLKFreq_Value=64000000 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.RNGFreq_Value=16000000 +RCC.RSTFreq_Value=32000 +RCC.RSTRFFreq_Value=32000000 +RCC.RTCFreq_Value=32000 +RCC.SAESFreq_Value=64000000 +RCC.SPI1Freq_Value=64000000 +RCC.SPI3Freq_Value=64000000 +RCC.SYSCLKFreq_VALUE=64000000 +RCC.SYSCLKSourceVirtual=RCC_SYSCLKSOURCE_PLLCLK +RCC.USART1Freq_Value=64000000 +RCC.USART2Freq_Value=64000000 +RCC.VCOInputFreq_Value=16000000 +RCC.VCOOutputFreq_Value=128000000 +STMicroelectronics.X-CUBE-FREERTOS.1.3.1.CMSISJjRTOS2_Checked=false +STMicroelectronics.X-CUBE-FREERTOS.1.3.1_SwParameter=RTOS2CcCMSISJjRTOS2JjHeap\:HeapIi4;RTOS2CcCMSISJjRTOS2JjCore\:TZIiNonIiSupported; +USART1.IPParameters=VirtualMode-Asynchronous +USART1.VirtualMode-Asynchronous=VM_ASYNC +VP_CORTEX_M33_NS_VS_Hclk.Mode=Hclk_Mode +VP_CORTEX_M33_NS_VS_Hclk.Signal=CORTEX_M33_NS_VS_Hclk +VP_HSEM_VS_HSEM.Mode=HSEM_Activate +VP_HSEM_VS_HSEM.Signal=HSEM_VS_HSEM +VP_ICACHE_VS_ICACHE.Mode=DirectMappedCache +VP_ICACHE_VS_ICACHE.Signal=ICACHE_VS_ICACHE +VP_MEMORYMAP_VS_MEMORYMAP.Mode=CurAppReg +VP_MEMORYMAP_VS_MEMORYMAP.Signal=MEMORYMAP_VS_MEMORYMAP +VP_PWR_VS_SECSignals.Mode=Security/Privilege +VP_PWR_VS_SECSignals.Signal=PWR_VS_SECSignals +VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled +VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate +VP_RTC_VS_RTC_WakeUp_intern.Mode=WakeUp +VP_RTC_VS_RTC_WakeUp_intern.Signal=RTC_VS_RTC_WakeUp_intern +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom