Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Flipper-Zero/STM32CubeWB.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrihab kouki <rihab.kouki@st.com>2021-04-26 18:54:33 +0300
committerrihab kouki <rihab.kouki@st.com>2021-04-26 18:54:33 +0300
commit2d1f0ea0748169a268228d0f7b6416e5127e6027 (patch)
tree852cfc0a7382d2763adf6c267ef43536624e71cb
parenta0b02a23ac8c0e6d3a076bb721ea9376d5e693c3 (diff)
Release v1.11.1
-rw-r--r--Middlewares/ST/STM32_WPAN/Release_Notes.html58
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/core/auto/ble_events.h111
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gap_aci.h53
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gatt_aci.h6
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hal_aci.c21
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hal_aci.h29
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hci_le.h189
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/core/auto/ble_types.h10
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/core/ble_legacy.h165
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/core/ble_std.h98
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/core/doc/STM32WB_BLE_Wireless_Interface.html255
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_GCC.abin306334 -> 306366 bytes
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_GCC_DEBUG.abin3059000 -> 3059616 bytes
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_IAR.abin672542 -> 673378 bytes
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_IAR_DEBUG.abin3475434 -> 3478320 bytes
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_Keil.libbin554658 -> 554690 bytes
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_Keil_DEBUG.libbin3577740 -> 3578072 bytes
-rw-r--r--Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/lhci/lhci.c5
-rw-r--r--Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci/shci.c10
-rw-r--r--Middlewares/ST/STM32_WPAN/stm32_wpan_common.h2
-rw-r--r--Middlewares/ST/STM32_WPAN/utilities/utilities_common.h2
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/Core/Inc/app_conf.h12
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/Core/Inc/stm32wbxx_hal_conf.h4
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/STM32CubeIDE/.cproject2
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/STM32_WPAN/App/app_ble.c4
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/STM32_WPAN/App/dt_client_app.c6
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate/Core/Inc/app_conf.h2
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/Core/Inc/app_conf.h2
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/MDK-ARM/BLE_HeartRate_ota.uvoptx949
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/MDK-ARM/BLE_HeartRate_ota.uvprojx756
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/MDK-ARM/startup_stm32wb15xx_cm4.s336
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/MDK-ARM/stm32wb15xx_flash_cm4.sct34
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_Ota/Core/Inc/app_conf.h2
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_TransparentMode/Core/Inc/app_conf.h2
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_TransparentMode/STM32_WPAN/App/tm.c4
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pClient/Core/Inc/app_conf.h2
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer/Core/Inc/app_conf.h2
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer/STM32_WPAN/App/app_ble.c6
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/Core/Inc/app_conf.h2
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/MDK-ARM/BLE_p2pServer_ota.uvoptx937
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/MDK-ARM/BLE_p2pServer_ota.uvprojx735
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/MDK-ARM/startup_stm32wb15xx_cm4.s336
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/MDK-ARM/stm32wb15xx_flash_cm4.sct34
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/STM32_WPAN/App/app_ble.c8
-rw-r--r--Projects/NUCLEO-WB15CC/Release_Notes.html20
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Beacon/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_BloodPressure/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_CableReplacement/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Custom/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_DataThroughput/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_DataThroughput/STM32CubeIDE/.cproject3
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HealthThermometer/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRate/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRateFreeRTOS/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRateFreeRTOS_ANCS/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRate_ANCS/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRate_ota/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Hid/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingLPN/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingPRFNode/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingProvisioner/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingProvisioner/STM32_WPAN/app/appli_nvm.c4
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MultiAppAt/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Inc/flash_driver.h179
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Src/app_entry.c3
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Src/flash_driver.c322
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Src/system_stm32wbxx.c43
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/EWARM/BLE_Ota.ewp9
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/MDK-ARM/BLE_Ota.uvoptx856
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/MDK-ARM/BLE_Ota.uvprojx205
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/STM32CubeIDE/.project5
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/STM32_WPAN/App/app_ble.c59
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/STM32_WPAN/App/otas_app.c30
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Peripheral_Lite/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Proximity/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_RfWithFlash/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_TransparentMode/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pClient/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pRouteur/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer/STM32_WPAN/App/app_ble.c8
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer_ota/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer_ota/STM32_WPAN/App/app_ble.c8
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE_Mac/BLE_Mac_Static/STM32_WPAN/App/app_ffd_mac_802_15_4.c8
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/Core/Src/app_lld_tests.c2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/EWARM/Phy_802_15_4_Cli.ewp12
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/EWARM/app_lld_tests_iar_asm.s86
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/readme.txt1
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Cli_Cmd/Core/Inc/stm32wbxx_it.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_DataTransfer/Core/Inc/stm32wbxx_it.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_Generic/Core/Inc/stm32wbxx_it.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_Generic_Ota/Core/Inc/stm32wbxx_it.h4
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_MultiBoard/Core/Inc/stm32wbxx_it.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_Secure/Core/Inc/stm32wbxx_it.h4
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Commissioning/Core/Inc/stm32wbxx_it.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_FTD_Coap_Multicast/Core/Inc/stm32wbxx_it.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Ota/Core/Inc/stm32wbxx_it.h4
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_SED_Coap_FreeRTOS/Core/Inc/stm32wbxx_it.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_SED_Coap_Multicast/Core/Inc/stm32wbxx_it.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Udp/Core/Inc/stm32wbxx_it.h4
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/USB_Device/HID_Standalone/MDK-ARM/HID_Standalone.uvoptx661
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/USB_Device/HID_Standalone/MDK-ARM/HID_Standalone.uvprojx607
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/USB_Device/HID_Standalone/MDK-ARM/startup_stm32wb55xx_cm4.s368
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/USB_Device/HID_Standalone/MDK-ARM/stm32wb55xx_flash_cm4.sct21
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_MeterId_Client_Router/Core/Inc/stm32wbxx_it.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_MeterId_Server_Coord/Core/Inc/stm32wbxx_it.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OTA_Server_Coord/STM32_WPAN/App/app_zigbee.c4
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Distrib/Core/Inc/stm32wbxx_it.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router/Core/Inc/stm32wbxx_it.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/FreeRTOSConfig.h171
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/app_common.h119
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/app_conf.h338
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/app_entry.h68
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/hw_conf.h268
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/hw_if.h250
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/main.h76
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/stm32_lpm_if.h81
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/stm32wbxx_hal_conf.h353
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/stm32wbxx_it.h81
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/stm_logging.h60
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/utilities_conf.h68
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/app_entry.c547
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/freertos_port.c322
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/hw_timerserver.c895
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/hw_uart.c320
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/main.c749
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm32_lpm_if.c295
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm32wbxx_hal_msp.c391
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm32wbxx_hal_timebase_tim.c149
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm32wbxx_it.c396
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm_logging.c204
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/system_stm32wbxx.c353
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/Project.eww7
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/Zigbee_OnOff_Client_Router_FreeRTOS.ewd1419
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/Zigbee_OnOff_Client_Router_FreeRTOS.ewp1316
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/startup_stm32wb55xx_cm4.s517
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/stm32wb55xx_flash_cm4.icf47
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/STM32_WPAN/App/app_zigbee.c752
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/STM32_WPAN/App/app_zigbee.h91
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/STM32_WPAN/App/tl_dbg_conf.h136
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/STM32_WPAN/Target/hw_ipcc.c675
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/readme.txt126
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_SED/Core/Inc/stm32wbxx_it.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord/Core/Inc/stm32wbxx_it.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/FreeRTOSConfig.h171
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/app_common.h119
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/app_conf.h336
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/app_entry.h68
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/hw_conf.h268
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/hw_if.h250
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/main.h76
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/stm32_lpm_if.h81
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/stm32wbxx_hal_conf.h353
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/stm32wbxx_it.h80
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/stm_logging.h60
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/utilities_conf.h68
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/app_entry.c543
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/freertos_port.c322
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/hw_timerserver.c895
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/hw_uart.c320
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/main.c750
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm32_lpm_if.c295
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm32wbxx_hal_msp.c391
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm32wbxx_hal_timebase_tim.c149
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm32wbxx_it.c396
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm_logging.c204
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/system_stm32wbxx.c353
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/Project.eww7
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/Zigbee_OnOff_Server_Coord_FreeRTOS.ewd1419
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/Zigbee_OnOff_Server_Coord_FreeRTOS.ewp1316
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/startup_stm32wb55xx_cm4.s517
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/stm32wb55xx_flash_cm4.icf47
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/STM32_WPAN/App/app_zigbee.c757
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/STM32_WPAN/App/app_zigbee.h90
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/STM32_WPAN/App/tl_dbg_conf.h136
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/STM32_WPAN/Target/hw_ipcc.c675
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/readme.txt126
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Distrib/Core/Inc/stm32wbxx_it.h2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Examples/COMP/COMP_CompareGpioVsVrefInt_Window_IT/readme.txt2
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/.cproject185
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/.project170
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/Application/Startup/startup_stm32wb55rgvx.s445
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/Application/User/syscalls.c159
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/Application/User/sysmem.c58
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/STM32WB55RGVX_FLASH.ld187
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/Src/main.c12
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Release_Notes.html56
-rw-r--r--Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_HeartRate/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_MeshLightingLPN/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_MeshLightingPRFNode/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_TransparentModeVCP/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pClient/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pRouteur/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pServer/Core/Inc/app_conf.h2
-rw-r--r--Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/app_conf.h11
-rw-r--r--Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/hw_conf.h26
-rw-r--r--Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/hw_if.h2
-rw-r--r--Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/stm32wbxx_it.h3
-rw-r--r--Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Src/hw_timerserver.c4
-rw-r--r--Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Src/hw_uart.c4
-rw-r--r--Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Src/stm_logging.c6
-rw-r--r--Projects/P-NUCLEO-WB55.USBDongle/Release_Notes.html51
-rw-r--r--Projects/STM32CubeProjectsList.html34
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/Release_Notes.html107
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_HCILayer_fw.binbin78700 -> 78520 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_HCI_AdvScan_fw.binbin39748 -> 39736 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_LLD_fw.binbin29076 -> 29076 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_Stack_full_fw.binbin171516 -> 171388 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_Stack_light_fw.binbin122828 -> 122484 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html435
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_HCILayer_fw.binbin78340 -> 78180 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_HCI_AdvScan_fw.binbin39388 -> 39396 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_Stack_full_fw.binbin170752 -> 170604 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_Stack_light_fw.binbin122068 -> 121704 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_FUS_fw.binbin24492 -> 24492 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_FUS_fw_1_0_2.binbin24492 -> 0 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_FUS_fw_for_fus_0_5_3.binbin0 -> 24492 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Mac_802_15_4_fw.binbin67316 -> 67580 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Phy_802_15_4_fw.binbin87452 -> 87652 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Thread_FTD_fw.binbin375668 -> 376132 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Thread_MTD_fw.binbin297288 -> 297752 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Zigbee_FFD_fw.binbin314520 -> 314516 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Zigbee_RFD_fw.binbin255588 -> 255692 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html533
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_HCILayer_fw.binbin78340 -> 78180 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_HCI_AdvScan_fw.binbin39388 -> 39396 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_Stack_full_fw.binbin170752 -> 170604 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_Stack_light_fw.binbin122068 -> 121704 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw.binbin24492 -> 24492 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw_1_0_2.binbin24492 -> 0 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw_for_fus_0_5_3.binbin0 -> 24492 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Mac_802_15_4_fw.binbin67316 -> 67580 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Phy_802_15_4_fw.binbin87452 -> 87652 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Thread_FTD_fw.binbin375668 -> 376132 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Thread_MTD_fw.binbin297288 -> 297752 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Zigbee_FFD_fw.binbin314520 -> 314516 bytes
-rw-r--r--Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Zigbee_RFD_fw.binbin255588 -> 255692 bytes
-rw-r--r--Release_Notes.html803
-rw-r--r--_htmresc/ReleaseNotes.html22
-rw-r--r--_htmresc/ReleaseNotes_Patch.html14
-rw-r--r--package.xml4
242 files changed, 34143 insertions, 1293 deletions
diff --git a/Middlewares/ST/STM32_WPAN/Release_Notes.html b/Middlewares/ST/STM32_WPAN/Release_Notes.html
index 6a7e3477c..9c2aecbc3 100644
--- a/Middlewares/ST/STM32_WPAN/Release_Notes.html
+++ b/Middlewares/ST/STM32_WPAN/Release_Notes.html
@@ -11,7 +11,7 @@
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
</style>
- <link rel="stylesheet" href="_htmresc/mini-st.css" />
+ <link rel="stylesheet" href="../../../_htmresc/mini-st.css" />
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
@@ -56,13 +56,35 @@
<div class="col-sm-12 col-lg-8">
<h1 id="update-history">Update History</h1>
<div class="collapse">
-<input type="checkbox" id="collapse-section13" checked aria-hidden="true"> <label for="collapse-section13" aria-hidden="false">V1.11.0 / 5-February-2021</label>
+<input type="checkbox" id="collapse-section14" checked aria-hidden="true"> <label for="collapse-section14" aria-hidden="false">V1.11.1 / 19-March-2021</label>
<div>
<h2 id="main-changes">Main Changes</h2>
<ul>
+<li>BLE WPAN updates:
+<ul>
+<li><strong>ID 101921</strong> - PTS issue ticket CASE0070853</li>
+<li><strong>ID 99680 </strong> - 2nd link secure fail if master database is clear during 1st link connection</li>
+<li><strong>ID 101052</strong> - HCI_LE_READ_LOCAL_P256 event happen after ending 3 success pairing</li>
+<li><strong>ID 83778 </strong> - add slave latency enable/disable command</li>
+<li><strong>ID 101346</strong> - ACI_GAP_BOND_LOST_Event timeout does not work if ALLOW rebond not sent</li>
+<li><strong>ID 100904</strong> - ACI_HAL_READ_CONFIG_DATA of CONFIG_DATA_RANDOM_ADDRESS</li>
+</ul></li>
+<li>BLE :
+<ul>
+<li>ID 101598: Incorrect #elif usage in stm32_wpan_common.h</li>
+<li>ID 94289 ,ID 102395 ,ID 100425: BLE_Ota improvments (SBSFU ready, Flash driver use, SEM7 flash activity control)</li>
+</ul></li>
+</ul>
+</div>
+</div>
+<div class="collapse">
+<input type="checkbox" id="collapse-section13" aria-hidden="true"> <label for="collapse-section13" aria-hidden="false">V1.11.0 / 5-February-2021</label>
+<div>
+<h2 id="main-changes-1">Main Changes</h2>
+<ul>
<li>BLE-Mesh library version 1.13.002
<ul>
-<li>Updated max number of element to 5 and max number of Model per element to 11: Ā  Ā  Ā  To support lighting control system with occupancy sensing. Ā </li>
+<li>Updated max number of element to 5 and max number of Model per element to 11: To support lighting control system with occupancy sensing. Ā </li>
<li>Bug fix: Client API, Light LC model and sensor status, modify Light LC FSM default Lightness values</li>
<li>Sensor &amp; Light LC Server Models updated</li>
<li>Client Models updated</li>
@@ -70,9 +92,10 @@
<li>Save &amp; Restore APIs for Models parameters in Flash updated</li>
<li>Publication enabled for multiple elements</li>
<li>Remove double disconnection to accelerate provisioning with IOS ST BLE Mesh App version 1.08.001</li>
-<li>Bug correction during unprovisioning with ST BLE Mesh App of non GATT connected Nodes. Ā  Ā  Ā Ā </li>
+<li>Bug correction during unprovisioning with ST BLE Mesh App of non GATT connected Nodes.</li>
+<li>Bug correction for loss of Vendor model publication: fix on dynamic memory allocation leak when publishing vendor command into groupĀ  Ā  Ā Ā </li>
</ul></li>
-<li>BLE:
+<li>BLE is Compliant BT5.2:
<ul>
<li>HID: added: Battery Service and Device Information Service, connection and disconnection events -Ā ID 97936 :Ā  L2CAP update to support IP over BLE (M.6874), SHCI_C2_BLE_init() updated parameters to be provided to CPU2 with new BLE stack Options flags to be configured as:
<ul>
@@ -86,6 +109,7 @@
<li>SHCI_C2_BLE_INIT_OPTIONS_POWER_CLASS_2_3</li>
</ul></li>
<li>ID 95186 :Ā  SHCI_C2_FUS_GetState fixed to identify when wireless stackĀ running (with correct error code)</li>
+<li>ID 94042, ID 97931 : STM32WB to handle certification BT5.2 (tcrl 2019-2)</li>
</ul></li>
<li>THREAD:
<ul>
@@ -109,7 +133,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section12" aria-hidden="true"> <label for="collapse-section12" aria-hidden="false">V1.10.0 / 26-October-2020</label>
<div>
-<h2 id="main-changes-1">Main Changes</h2>
+<h2 id="main-changes-2">Main Changes</h2>
<ul>
<li>General:
<ul>
@@ -145,7 +169,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section11" aria-hidden="true"> <label for="collapse-section11" aria-hidden="false">V1.9.0 / 21-September-2020</label>
<div>
-<h2 id="main-changes-2">Main Changes</h2>
+<h2 id="main-changes-3">Main Changes</h2>
<ul>
<li>BLE-Mesh library version 1.13.000
<ul>
@@ -207,7 +231,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section10" aria-hidden="true"> <label for="collapse-section10" aria-hidden="false">V1.8.0 / 22-June-2020</label>
<div>
-<h2 id="main-changes-3">Main Changes</h2>
+<h2 id="main-changes-4">Main Changes</h2>
<ul>
<li>BLE-Mesh library version 1.12.008
<ul>
@@ -243,7 +267,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section9" aria-hidden="true"> <label for="collapse-section9" aria-hidden="false">V1.7.0 / 11-May-2020</label>
<div>
-<h2 id="main-changes-4">Main Changes</h2>
+<h2 id="main-changes-5">Main Changes</h2>
<p>BLE-Mesh:</p>
<ul>
<li>BLE Mesh Models Fixe/Update</li>
@@ -253,7 +277,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section8" aria-hidden="true"> <label for="collapse-section8" aria-hidden="false">V1.6.0 / 27-March-2020</label>
<div>
-<h2 id="main-changes-5">Main Changes</h2>
+<h2 id="main-changes-6">Main Changes</h2>
<p>BLE-Mesh:</p>
<ul>
<li>BLE-Mesh library version 1.12.007
@@ -525,7 +549,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section7" aria-hidden="true"> <label for="collapse-section7" aria-hidden="false">V1.5.0 / 22-January-2020</label>
<div>
-<h2 id="main-changes-6">Main Changes</h2>
+<h2 id="main-changes-7">Main Changes</h2>
<p>Interface:</p>
<ul>
<li>Added new commmand SHCI_C2_SetFlashActivityControl() to configure BLE timing protection</li>
@@ -568,7 +592,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section6" aria-hidden="true"> <label for="collapse-section6" aria-hidden="true">V1.4.0 / 22-November-2019</label>
<div>
-<h2 id="main-changes-7">Main Changes</h2>
+<h2 id="main-changes-8">Main Changes</h2>
<p>Interface:</p>
<ul>
<li>Added new commmand SHCI_C2_ExtpaConfig() to support external PA</li>
@@ -584,7 +608,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section5" aria-hidden="true"> <label for="collapse-section5" aria-hidden="true">V1.3.0 / 4-September-2019</label>
<div>
-<h2 id="main-changes-8">Main Changes</h2>
+<h2 id="main-changes-9">Main Changes</h2>
<p>General:</p>
<ul>
<li>Introducing support of Zigbee</li>
@@ -622,7 +646,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section4" aria-hidden="true"> <label for="collapse-section4" aria-hidden="true">V1.2.0 / 27-June-2019</label>
<div>
-<h2 id="main-changes-9">Main Changes</h2>
+<h2 id="main-changes-10">Main Changes</h2>
<p>General:</p>
<ul>
<li>Following utilities : Scheduler and Low Power Manager reworked and moved to ā€œUtilitiesā€ directory</li>
@@ -648,7 +672,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section3" aria-hidden="true"> <label for="collapse-section3" aria-hidden="true">V1.1.1 / 10-May-2019</label>
<div>
-<h2 id="main-changes-10">Main Changes</h2>
+<h2 id="main-changes-11">Main Changes</h2>
<p>BLE:</p>
<ul>
<li>Fix race condition in transport layer when an operating system is used.</li>
@@ -694,7 +718,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section2" aria-hidden="true"> <label for="collapse-section2" aria-hidden="true">V1.1.0 / 29-March-2019</label>
<div>
-<h2 id="main-changes-11">Main Changes</h2>
+<h2 id="main-changes-12">Main Changes</h2>
<p>General:</p>
<ul>
<li>Licenses in utilities and patterns moved from sla0044 to 3-clauses BSD</li>
@@ -720,7 +744,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section1" aria-hidden="true"> <label for="collapse-section1" aria-hidden="true">V1.0.0 / 31-January-2019</label>
<div>
-<h2 id="main-changes-12">Main Changes</h2>
+<h2 id="main-changes-13">Main Changes</h2>
<p>First release</p>
</div>
</div>
diff --git a/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_events.h b/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_events.h
index 939cc1920..2a2884cc2 100644
--- a/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_events.h
+++ b/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_events.h
@@ -54,8 +54,8 @@ extern const hci_event_table_t hci_vs_event_table[HCI_VS_EVENT_TABLE_SIZE];
* @param Connection_Handle Connection_Handle which was disconnected.
* Values:
* - 0x0000 ... 0x0EFF
- * @param Reason Reason for disconnection (see Bluetooth Core Specification
- * [Vol 2] Part D, Error Codes).
+ * @param Reason Reason for disconnection (see Bluetooth spec. [Vol 1, Part F]
+ * Error Codes).
* @return None
*/
void hci_disconnection_complete_event( uint8_t Status,
@@ -79,7 +79,7 @@ void hci_disconnection_complete_event( uint8_t Status,
* Secure_Connections_Host_Support is 'disabled' or the Connection_Handle
* refers to an LE link, the Controller shall only use Encryption_Enabled
* values 0x00 (OFF) and 0x01 (ON).
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.7.8)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.8].
*
* @param Status Status error code.
* @param Connection_Handle Connection handle for which the command applies.
@@ -114,7 +114,7 @@ void hci_encryption_change_event( uint8_t Status,
* Version event parameter shall be Link Layer VersNr parameter, the
* Manufacturer_Name event parameter shall be the CompId parameter, and the
* Subversion event parameter shall be the SubVersNr parameter.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.7.12)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.12].
*
* @param Status Status error code.
* @param Connection_Handle Connection handle for which the command applies.
@@ -212,8 +212,8 @@ void hci_encryption_key_refresh_complete_event( uint8_t Status,
* and received a Command Status event if the connection establishment failed
* or was successful.
* The Master_Clock_Accuracy parameter is only valid for a slave. On a master,
- * this parameter shall be set to 0x00. See Bluetooth spec 5.0 vol 2 [part E]
- * 7.7.65.1
+ * this parameter shall be set to 0x00.
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.1].
*
* @param Status Status error code.
* @param Connection_Handle Connection handle for which the event applies.
@@ -270,9 +270,10 @@ void hci_le_connection_complete_event( uint8_t Status,
* The LE Advertising Report event indicates that a device or multiple devices
* have responded to an active scan or received some information during a
* passive scan. The Controller may queue these advertising reports and send
- * information from multiple devices in one LE Advertising Report event (see
- * Bluetooth spec 5.0 vol 2 [part E] 7.7.65.2). In the current BLE stack
- * version, only one report is sent per event (Num_Reports = 1).
+ * information from multiple devices in one LE Advertising Report event.
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.2].
+ * Note: in the current BLE stack version, only one report is sent per event
+ * (Num_Reports = 1).
*
* @param Num_Reports Number of responses in this event.
* Values:
@@ -290,7 +291,8 @@ void hci_le_advertising_report_event( uint8_t Num_Reports,
* On a slave, if no connection parameters are updated, then this event shall
* not be issued.
* On a master, this event shall be issued if the Connection_Update command was
- * sent. See Bluetooth spec 5.0 vol 2 [part E] 7.7.65.3
+ * sent.
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.3].
*
* @param Status Status error code.
* @param Connection_Handle Connection handle for which the event applies.
@@ -324,7 +326,7 @@ void hci_le_connection_update_complete_event( uint8_t Status,
* completion of the process of the Controller obtaining the used features of
* the remote Bluetooth device specified by the Connection_Handle event
* parameter.
- * See Bluetooth spec 5.0 vol 2 [part E] 7.7.65.4
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.4].
*
* @param Status Status error code.
* @param Connection_Handle Connection handle for which the event applies.
@@ -343,8 +345,8 @@ void hci_le_read_remote_features_complete_event( uint8_t Status,
* The LE Long Term Key Request event indicates that the master device is
* attempting to encrypt or re-encrypt the link and is requesting the Long Term
* Key from the Host.
- * (See [Vol 6] Part B, Section 5.1.3)and Bluetooth spec 5.0 vol 2 [part E]
- * 7.7.65.5
+ * See Bluetooth spec. v.5.2 [Vol 6, Part B, 5.1.3] and [Vol 4, Part E,
+ * 7.7.65.5].
*
* @param Connection_Handle Connection handle for which the event applies.
* Values:
@@ -365,7 +367,7 @@ void hci_le_long_term_key_request_event( uint16_t Connection_Handle,
* the connection following the change, except that on the LE Coded PHY a
* packet taking up to 2704 us to transmit may be sent even though the
* corresponding parameter has a lower value.
- * See Bluetooth spec 5.0 vol 2 [part E] 7.7.65.7
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.7].
*
* @param Connection_Handle Connection handle for which the event applies.
* Values:
@@ -402,7 +404,7 @@ void hci_le_data_length_change_event( uint16_t Connection_Handle,
/**
* @brief HCI_LE_READ_LOCAL_P256_PUBLIC_KEY_COMPLETE_EVENT
* This event is generated when local P-256 key generation is complete.
- * See Bluetooth spec 5.0 vol 2 [part E] 7.7.65.8
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.8].
*
* @param Status Status error code.
* @param Local_P256_Public_Key Local P-256 public key.
@@ -415,7 +417,7 @@ void hci_le_read_local_p256_public_key_complete_event( uint8_t Status,
* @brief HCI_LE_GENERATE_DHKEY_COMPLETE_EVENT
* This event indicates that LE Diffie Hellman key generation has been
* completed by the Controller.
- * See Bluetooth spec 5.0 vol 2 [part E] 7.7.65.9
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.9].
*
* @param Status Status error code.
* @param DHKey Diffie Hellman Key
@@ -440,7 +442,7 @@ void hci_le_generate_dhkey_complete_event( uint8_t Status,
* or was successful.
* The Master_Clock_Accuracy parameter is only valid for a slave. On a master,
* this parameter shall be set to 0x00.
- * See Bluetooth spec 5.0 vol 2 [part E] 7.7.65.10
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.10].
*
* @param Status Status error code.
* @param Connection_Handle Connection handle for which the event applies.
@@ -522,7 +524,7 @@ void hci_le_enhanced_connection_complete_event( uint8_t Status,
* Direct_Address_Type and Direct_Addres is the address the directed
* advertisements are being directed to. Address_Type and Address is the
* address of the advertiser sending the directed advertisements.
- * See Bluetooth spec 5.0 vol 2 [part E] 7.7.65.11.
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.11].
*
* @param Num_Reports Number of responses in this event.
* Values:
@@ -541,7 +543,7 @@ void hci_le_direct_advertising_report_event( uint8_t Num_Reports,
* PHYs, this event shall be issued.
* If an LE_Set_PHY command was sent and the Controller determines that neither
* PHY will change as a result, it issues this event immediately.
- * See See Bluetooth spec 5.0 vol 2 [part E] 7.7.65.12.
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.12].
*
* @param Status Status error code.
* @param Connection_Handle Connection handle to be used to identify the
@@ -703,7 +705,7 @@ void aci_gap_addr_not_resolved_event( uint16_t Connection_Handle );
/**
* @brief ACI_GAP_NUMERIC_COMPARISON_VALUE_EVENT
- * This event is sent only during SC v.4.2 Pairing, when Numeric Comparison
+ * This event is sent only during SC Pairing, when Numeric Comparison
* Association model is selected, in order to show the Numeric Value generated,
* and to ask for Confirmation to the User. When this event is received, the
* application has to respond with the ACI_GAP_NUMERIC_COMPARISON_RESP command.
@@ -716,8 +718,8 @@ void aci_gap_numeric_comparison_value_event( uint16_t Connection_Handle,
/**
* @brief ACI_GAP_KEYPRESS_NOTIFICATION_EVENT
- * This event is sent only during SC v.4.2 Pairing, when Keypress Notifications
- * are supported, in order to show the input type signalled by the peer device,
+ * This event is sent only during SC Pairing, when Keypress Notifications are
+ * supported, in order to show the input type signalled by the peer device,
* having Keyboard only I/O capabilities. When this event is received, no
* action is required to the User.
*
@@ -794,9 +796,8 @@ void aci_att_exchange_mtu_resp_event( uint16_t Connection_Handle,
/**
* @brief ACI_ATT_FIND_INFO_RESP_EVENT
* This event is generated in response to a Find Information Request. See
- * ACI_ATT_FIND_INFO_REQ and Find Information Response in Bluetooth Core v5.0
- * spec. This event is also generated in response to
- * ACI_GATT_DISC_ALL_CHAR_DESC
+ * ACI_ATT_FIND_INFO_REQ and Find Information Response in Bluetooth Core spec.
+ * This event is also generated in response to ACI_GATT_DISC_ALL_CHAR_DESC
*
* @param Connection_Handle Connection handle for which the event applies.
* Values:
@@ -839,9 +840,8 @@ void aci_att_find_by_type_value_resp_event( uint16_t Connection_Handle,
* @param Handle_Value_Pair_Length The size of each attribute handle-value pair
* @param Data_Length Length of Handle_Value_Pair_Data in octets
* @param Handle_Value_Pair_Data Attribute Data List as defined in Bluetooth
- * Core v5.0 spec. A sequence of handle-value pairs: [2 octets for
- * Attribute Handle, (Handle_Value_Pair_Length - 2 octets) for Attribute
- * Value]
+ * Core spec. A sequence of handle-value pairs: [2 octets for Attribute
+ * Handle, (Handle_Value_Pair_Length - 2 octets) for Attribute Value]
* @return None
*/
void aci_att_read_by_type_resp_event( uint16_t Connection_Handle,
@@ -909,9 +909,9 @@ void aci_att_read_multiple_resp_event( uint16_t Connection_Handle,
* @param Attribute_Data_Length The size of each attribute data
* @param Data_Length Length of Attribute_Data_List in octets
* @param Attribute_Data_List Attribute Data List as defined in Bluetooth Core
- * v5.0 spec. A sequence of attribute handle, end group handle,
- * attribute value tuples: [2 octets for Attribute Handle, 2 octets End
- * Group Handle, (Attribute_Data_Length - 4 octets) for Attribute Value]
+ * spec. A sequence of attribute handle, end group handle, attribute
+ * value tuples: [2 octets for Attribute Handle, 2 octets End Group
+ * Handle, (Attribute_Data_Length - 4 octets) for Attribute Value]
* @return None
*/
void aci_att_read_by_group_type_resp_event( uint16_t Connection_Handle,
@@ -1043,8 +1043,8 @@ void aci_gatt_error_resp_event( uint16_t Connection_Handle,
* This event can be generated during a "Discover Characteristics By UUID"
* procedure or a "Read using Characteristic UUID" procedure.
* The attribute value will be a service declaration as defined in Bluetooth
- * Core v5.0.spec (vol.3, Part G, ch. 3.3.1), when a "Discover Characteristics
- * By UUID" has been started. It will be the value of the Characteristic if a*
+ * spec. v.5.2 [Vol 3, Part G, 3.3.1], when a "Discover Characteristics By
+ * UUID" has been started. It will be the value of the Characteristic if a*
* "Read using Characteristic UUID" has been performed.
*
* @param Connection_Handle Connection handle for which the event applies.
@@ -1053,7 +1053,7 @@ void aci_gatt_error_resp_event( uint16_t Connection_Handle,
* @param Attribute_Handle The handle of the attribute
* @param Attribute_Value_Length Length of Attribute_Value in octets
* @param Attribute_Value The attribute value will be a service declaration as
- * defined in Bluetooth Core v5.0 (vol.3, Part G, ch. 3.3.1), when a
+ * defined in Bluetooth spec. v.5.2 [Vol 3, Part G, 3.3.1], when a
* "Discover Characteristics By UUID" has been started.
* It will be the value of the Characteristic if a "Read using
* Characteristic UUID" has been performed.
@@ -1102,8 +1102,8 @@ void aci_gatt_write_permit_req_event( uint16_t Connection_Handle,
* to the application only if the event bit for this event generation is set
* when the characteristic was added.
* On receiving this event, the application can update the value of the handle
- * if it desires and when done, it has to send the ACI_GATT_ALLOW_READ command
- * to indicate to the stack that it can send the response to the client.
+ * if it desires and when done, it must send the ACI_GATT_ALLOW_READ command to
+ * indicate to the stack that it can send the response to the client.
*
* @param Connection_Handle Connection handle for which the event applies.
* Values:
@@ -1123,7 +1123,7 @@ void aci_gatt_read_permit_req_event( uint16_t Connection_Handle,
* be given to the application only if the event bit for this event generation
* is set when the characteristic was added.
* On receiving this event, the application can update the values of the
- * handles if it desires and when done, it has to send the ACI_GATT_ALLOW_READ
+ * handles if it desires and when done, it must send the ACI_GATT_ALLOW_READ
* command to indicate to the stack that it can send the response to the
* client.
*
@@ -1363,7 +1363,8 @@ void aci_l2cap_command_reject_event( uint16_t Connection_Handle,
/**
* @brief ACI_L2CAP_COC_CONNECT_EVENT
* This event is generated when receiving a valid Credit Based Connection
- * Request packet. See Bluetooth Core specification Vol.3 Part A.
+ * Request packet.
+ * See Bluetooth spec. v.5.2 [Vol 3, Part A].
*
* @param Connection_Handle Handle of the connection where this event occurred.
* Values:
@@ -1399,7 +1400,8 @@ void aci_l2cap_coc_connect_event( uint16_t Connection_Handle,
/**
* @brief ACI_L2CAP_COC_CONNECT_CONFIRM_EVENT
* This event is generated when receiving a valid Credit Based Connection
- * Response packet. See Bluetooth Core specification Vol.3 Part A.
+ * Response packet.
+ * See Bluetooth spec. v.5.2 [Vol 3, Part A].
*
* @param Connection_Handle Handle of the connection where this event occurred.
* Values:
@@ -1438,7 +1440,8 @@ void aci_l2cap_coc_connect_confirm_event( uint16_t Connection_Handle,
/**
* @brief ACI_L2CAP_COC_RECONF_EVENT
* This event is generated when receiving a valid Credit Based Reconfigure
- * Request packet. See Bluetooth Core specification Vol.3 Part A.
+ * Request packet.
+ * See Bluetooth spec. v.5.2 [Vol 3, Part A].
*
* @param Connection_Handle Handle of the connection where this event occurred.
* Values:
@@ -1466,7 +1469,8 @@ void aci_l2cap_coc_reconf_event( uint16_t Connection_Handle,
/**
* @brief ACI_L2CAP_COC_RECONF_CONFIRM_EVENT
* This event is generated when receiving a valid Credit Based Reconfigure
- * Response packet. See Bluetooth Core specification Vol.3 Part A.
+ * Response packet.
+ * See Bluetooth spec. v.5.2 [Vol 3, Part A].
*
* @param Connection_Handle Handle of the connection where this event occurred.
* Values:
@@ -1484,8 +1488,8 @@ void aci_l2cap_coc_reconf_confirm_event( uint16_t Connection_Handle,
/**
* @brief ACI_L2CAP_COC_DISCONNECT_EVENT
* This event is generated when a connection-oriented channel is disconnected
- * following an L2CAP channel termination procedure. See Bluetooth Core
- * specification Vol.3 Part A.
+ * following an L2CAP channel termination procedure.
+ * See Bluetooth spec. v.5.2 [Vol 3, Part A].
*
* @param Channel_Index Index of the connection-oriented channel for which the
* primitive applies.
@@ -1496,7 +1500,8 @@ void aci_l2cap_coc_disconnect_event( uint8_t Channel_Index );
/**
* @brief ACI_L2CAP_COC_FLOW_CONTROL_EVENT
* This event is generated when receiving a valid Flow Control Credit signaling
- * packet. See Bluetooth Core specification Vol.3 Part A.
+ * packet.
+ * See Bluetooth spec. v.5.2 [Vol 3, Part A].
*
* @param Channel_Index Index of the connection-oriented channel for which the
* primitive applies.
@@ -1513,7 +1518,8 @@ void aci_l2cap_coc_flow_control_event( uint8_t Channel_Index,
/**
* @brief ACI_L2CAP_COC_RX_DATA_EVENT
* This event is generated when receiving a valid K-frame packet on a
- * connection-oriented channel. See Bluetooth Core specification Vol.3 Part A.
+ * connection-oriented channel.
+ * See Bluetooth spec. v.5.2 [Vol 3, Part A].
* Note: for the first K-frame of the SDU, the Information data contains the
* L2CAP SDU Length coded on two octets followed by the K-frame information
* payload. For the next K-frames of the SDU, the Information data only
@@ -1545,18 +1551,17 @@ void aci_l2cap_coc_tx_pool_available_event( void );
/**
* @brief ACI_HAL_END_OF_RADIO_ACTIVITY_EVENT
* This event is generated when the device completes a radio activity and
- * provide information when a new radio acitivity will be performed.
- * Informtation provided includes type of radio activity and absolute time in
- * system ticks when a new radio acitivity is schedule, if any. Application can
+ * provide information when a new radio activity will be performed.
+ * Information provided includes type of radio activity and absolute time in
+ * system ticks when a new radio activity is schedule, if any. Application can
* use this information to schedule user activities synchronous to selected
* radio activitities. A command ACI_HAL_SET_RADIO_ACTIVITY_MASK is provided to
* enable radio activity events of user interests, by default no events are
* enabled.
- * User should take into account that enablinng radio events in application
- * with intense radio activity could lead to a fairly high rate of events
- * generated.
+ * User should take into account that enabling radio events in application with
+ * intense radio activity could lead to a fairly high rate of events generated.
* Application use cases includes synchronizing notification with connection
- * interval, switiching antenna at the end of advertising or performing flash
+ * interval, switching antenna at the end of advertising or performing flash
* erase operation while radio is idle.
*
* @param Last_State Completed radio events
@@ -1590,7 +1595,7 @@ void aci_hal_end_of_radio_activity_event( uint8_t Last_State,
/**
* @brief ACI_HAL_SCAN_REQ_REPORT_EVENT
* This event is reported to the application after a scan request is received
- * and a scan reponse is scheduled to be transmitted.
+ * and a scan response is scheduled to be transmitted.
*
* @param RSSI N Size: 1 Octet (signed integer)
* Units: dBm
diff --git a/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gap_aci.h b/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gap_aci.h
index 0e663dd29..934531b75 100644
--- a/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gap_aci.h
+++ b/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gap_aci.h
@@ -34,10 +34,10 @@ tBleStatus aci_gap_set_non_discoverable( void );
/**
* @brief ACI_GAP_SET_LIMITED_DISCOVERABLE
- * Put the device in limited discoverable mode (as defined in Bluetooth
- * Specification v.5.0, Vol. 3, Part C, section 9.2.3). The device will be
- * discoverable for maximum period of TGAP (lim_adv_timeout) = 180 seconds
- * (from errata). The advertising can be disabled at any time by issuing
+ * Put the device in limited discoverable mode (as defined in Bluetooth spec.
+ * v.5.2 [Vol 3, Part C, 9.2.3]). The device will be discoverable for maximum
+ * period of TGAP (lim_adv_timeout) = 180 seconds (from errata). The
+ * advertising can be disabled at any time by issuing
* ACI_GAP_SET_NON_DISCOVERABLE command.
* The Adv_Interval_Min and Adv_Interval_Max parameters are optional. If both
* are set to 0, the GAP will use default values for adv intervals for limited
@@ -90,7 +90,6 @@ tBleStatus aci_gap_set_non_discoverable( void );
* If there is no service to be advertised, set this field to 0x00.
* @param Service_Uuid_List This is the list of the UUIDs as defined in Volume
* 3, Section 11 of GAP Specification. First byte is the AD Type.
- * See also Supplement to the Bluetooth Core 5.0 specification.
* @param Slave_Conn_Interval_Min Slave connection interval minimum value
* suggested by Peripheral.
* If Slave_Conn_Interval_Min and Slave_Conn_Interval_Max are not
@@ -129,12 +128,11 @@ tBleStatus aci_gap_set_limited_discoverable( uint8_t Advertising_Type,
/**
* @brief ACI_GAP_SET_DISCOVERABLE
- * Put the device in general discoverable mode (as defined in Bluetooth
- * Specification v.5.0, Vol. 3, Part C, section 9.2.4). The device will be
- * discoverable until the host issues the ACI_GAP_SET_NON_DISCOVERABLE command.
- * The Adv_Interval_Min and Adv_Interval_Max parameters are optional. If both
- * are set to 0, the GAP uses the default values for adv intervals for general
- * discoverable mode.
+ * Put the device in general discoverable mode (as defined in Bluetooth spec.
+ * v.5.2 [Vol 3, Part C, 9.2.4]). The device will be discoverable until the
+ * host issues the ACI_GAP_SET_NON_DISCOVERABLE command. The Adv_Interval_Min
+ * and Adv_Interval_Max parameters are optional. If both are set to 0, the GAP
+ * uses the default values for adv intervals for general discoverable mode.
* When using connectable undirected advertising events:
* - Adv_Interval_Min = 30 ms
* - Adv_Interval_Max = 60 ms
@@ -189,7 +187,6 @@ tBleStatus aci_gap_set_limited_discoverable( uint8_t Advertising_Type,
* If there is no service to be advertised, set this field to 0x00.
* @param Service_Uuid_List This is the list of the UUIDs as defined in Volume
* 3, Section 11 of GAP Specification. First byte is the AD Type.
- * See also Supplement to the Bluetooth Core 5.0 specification.
* @param Slave_Conn_Interval_Min Slave connection interval minimum value
* suggested by Peripheral.
* If Slave_Conn_Interval_Min and Slave_Conn_Interval_Max are not
@@ -228,12 +225,12 @@ tBleStatus aci_gap_set_discoverable( uint8_t Advertising_Type,
/**
* @brief ACI_GAP_SET_DIRECT_CONNECTABLE
- * Set the device in direct connectable mode (as defined in Bluetooth
- * Specification v.5.0, Vol. 3, Part C, section 9.3.3). Device uses direct
- * connectable mode to advertise using High Duty cycle advertisement events or
- * Low Duty cycle advertisement events and the address as either what is
- * specified in the Own Address Type parameter. The command specifies the type
- * of the advertising used.
+ * Set the device in direct connectable mode (as defined in Bluetooth spec.
+ * v.5.2 [Vol 3, Part C, 9.3.3]). Device uses direct connectable mode to
+ * advertise using High Duty cycle advertisement events or Low Duty cycle
+ * advertisement events and the address as either what is specified in the Own
+ * Address Type parameter. The command specifies the type of the advertising
+ * used.
* If the privacy is enabled, the Type parameter in reconnection address is
* used for advertising, otherwise the address of the type specified in
* OwnAddrType is used.
@@ -549,8 +546,7 @@ tBleStatus aci_gap_update_adv_data( uint8_t AdvDataLen,
* This command can be used to delete the specified AD type from the
* advertisement data if present.
*
- * @param ADType One of the AD types like in Bluetooth specification (see
- * volume 3, Part C, 11.1)
+ * @param ADType One of the AD types as in Bluetooth spec. [Vol 3, Part C, 11].
* @return Value indicating success or error code.
*/
tBleStatus aci_gap_delete_ad_type( uint8_t ADType );
@@ -832,13 +828,13 @@ tBleStatus aci_gap_start_name_discovery_proc( uint16_t LE_Scan_Interval,
/**
* @brief ACI_GAP_START_AUTO_CONNECTION_ESTABLISH_PROC
* Start the auto connection establishment procedure. The devices specified are
- * added to the white list of the controller and a LE_Create_Connection call
+ * added to the whitelist of the controller and a LE_Create_Connection call
* will be made to the controller by GAP with the initiator filter policy set
* to "use whitelist to determine which advertiser to connect to". When a
* command is issued to terminate the procedure by upper layer, a
* LE_Create_Connection_Cancel call will be made to the controller by GAP.
* The procedure is terminated when either a connection is successfully
- * established with one of the specified devices in the white list or the
+ * established with one of the specified devices in the whitelist or the
* procedure is explicitly terminated by issuing the command
* ACI_GAP_TERMINATE_GAP_PROC with the procedure code set to 0x08. A
* ACI_GAP_PROC_COMPLETE_EVENT event is returned with the procedure code set to
@@ -1000,7 +996,7 @@ tBleStatus aci_gap_start_general_connection_establish_proc( uint8_t LE_Scan_Type
/**
* @brief ACI_GAP_START_SELECTIVE_CONNECTION_ESTABLISH_PROC
* Start a selective connection establishment procedure. The GAP adds the
- * specified device addresses into white list and enables scanning in the
+ * specified device addresses into whitelist and enables scanning in the
* controller with the scanner filter policy set to "accept packets only from
* devices in whitelist". All the devices found are sent to the upper layer by
* the event HCI_LE_ADVERTISING_REPORT_EVENT. The upper layer then has to
@@ -1325,8 +1321,7 @@ tBleStatus aci_gap_set_broadcast_mode( uint16_t Advertising_Interval_Min,
* @brief ACI_GAP_START_OBSERVATION_PROC
* Starts an Observation procedure, when the device is in Observer Role. The
* host enables scanning in the controller. The advertising reports are sent to
- * the upper layer using standard LE Advertising Report Event. (See Bluetooth
- * Core v5.0, Vol. 2, part E, Ch. 7.7.65.2, LE Advertising Report Event).
+ * the upper layer using standard LE Advertising Report Event.
* If controller privacy is enabled and the peer device (advertiser) is in the
* resolving list then the link layer will generate a RPA, if it is not then
* the RPA/NRPA generated by the Host will be used.
@@ -1469,8 +1464,8 @@ tBleStatus aci_gap_passkey_input( uint16_t Connection_Handle,
* @param OOB_Data_Type OOB Data type
* Values:
* - 0x00: TK (LP v.4.1)
- * - 0x01: Random (SC v.4.2)
- * - 0x02: Confirm (SC v.4.2)
+ * - 0x01: Random (SC)
+ * - 0x02: Confirm (SC)
* @param[out] Address_Type Identity address type.
* Values:
* - 0x00: Public Identity Address
@@ -1504,8 +1499,8 @@ tBleStatus aci_gap_get_oob_data( uint8_t OOB_Data_Type,
* @param OOB_Data_Type OOB Data type
* Values:
* - 0x00: TK (LP v.4.1)
- * - 0x01: Random (SC v.4.2)
- * - 0x02: Confirm (SC v.4.2)
+ * - 0x01: Random (SC)
+ * - 0x02: Confirm (SC)
* @param OOB_Data_Len Length of OOB Data
* @param OOB_Data Pairing Data received through OOB from remote device
* @return Value indicating success or error code.
diff --git a/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gatt_aci.h b/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gatt_aci.h
index 04ad116b3..a01b3e576 100644
--- a/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gatt_aci.h
+++ b/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gatt_aci.h
@@ -107,7 +107,7 @@ tBleStatus aci_gatt_include_service( uint16_t Service_Handle,
* @param Char_UUID See @ref Char_UUID_t
* @param Char_Value_Length Maximum length of the characteristic value.
* @param Char_Properties Characteristic Properties (Volume 3, Part G, section
- * 3.3.1.1 of Bluetooth Specification 5.0)
+ * 3.3.1.1 of Bluetooth Core Specification)
* Flags:
* - 0x00: CHAR_PROP_NONE
* - 0x01: CHAR_PROP_BROADCAST (Broadcast)
@@ -238,7 +238,7 @@ tBleStatus aci_gatt_add_char_desc( uint16_t Service_Handle,
* parameters (decided by the master, see
* aci_l2cap_connection_parameter_update_request() for more info on how to
* suggest new connection parameters from a slave). If the application does not
- * want to lose notifications because STM32WB buffer becomes full, it has to
+ * want to lose notifications because STM32WB buffer becomes full, it must
* retry again till the function returns BLE_STATUS_SUCCESS or any other error
* code.
*
@@ -914,7 +914,7 @@ tBleStatus aci_gatt_write_resp( uint16_t Connection_Handle,
* ACI_GATT_READ_PERMIT_REQ_EVENT or ACI_GATT_READ_MULTI_PERMIT_REQ_EVENT. This
* command indicates to the stack that the response can be sent to the client.
* So if the application wishes to update any of the attributes before they are
- * read by the client, it has to update the characteristic values using the
+ * read by the client, it must update the characteristic values using the
* ACI_GATT_UPDATE_CHAR_VALUE and then give this command. The application
* should perform the required operations within 30 seconds. Otherwise the GATT
* procedure will be timeout.
diff --git a/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hal_aci.c b/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hal_aci.c
index 147839ad5..a1348d41f 100644
--- a/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hal_aci.c
+++ b/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hal_aci.c
@@ -297,6 +297,27 @@ tBleStatus aci_hal_get_pm_debug_info( uint8_t* Allocated_For_TX,
return BLE_STATUS_SUCCESS;
}
+tBleStatus aci_hal_set_slave_latency( uint8_t Enable )
+{
+ struct hci_request rq;
+ uint8_t cmd_buffer[BLE_CMD_MAX_PARAM_LEN];
+ aci_hal_set_slave_latency_cp0 *cp0 = (aci_hal_set_slave_latency_cp0*)(cmd_buffer);
+ tBleStatus status = 0;
+ int index_input = 0;
+ cp0->Enable = Enable;
+ index_input += 1;
+ Osal_MemSet( &rq, 0, sizeof(rq) );
+ rq.ogf = 0x3f;
+ rq.ocf = 0x020;
+ rq.cparam = cmd_buffer;
+ rq.clen = index_input;
+ rq.rparam = &status;
+ rq.rlen = 1;
+ if ( hci_send_req(&rq, FALSE) < 0 )
+ return BLE_STATUS_TIMEOUT;
+ return status;
+}
+
tBleStatus aci_hal_read_radio_reg( uint8_t Register_Address,
uint8_t* reg_val )
{
diff --git a/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hal_aci.h b/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hal_aci.h
index 9a04aa497..8866d77dd 100644
--- a/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hal_aci.h
+++ b/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hal_aci.h
@@ -35,9 +35,10 @@ tBleStatus aci_hal_get_fw_build_number( uint16_t* Build_Number );
/**
* @brief ACI_HAL_WRITE_CONFIG_DATA
- * This command writes a value to a low level configure data structure. It is
- * useful to setup directly some low level parameters for the system in the
- * runtime.
+ * This command writes a value to a configure data structure. It is useful to
+ * setup directly some parameters for the system in the runtime.
+ * Note: the static random address set by this command is taken into account by
+ * the GAP only when it receives the ACI_GAP_INIT command.
*
* @param Offset Offset of the element in the configuration data structure
* which has to be written.
@@ -60,8 +61,8 @@ tBleStatus aci_hal_write_config_data( uint8_t Offset,
/**
* @brief ACI_HAL_READ_CONFIG_DATA
- * This command requests the value in the low level configure data structure.
- * The number of read bytes changes for different Offset.
+ * This command requests the value in the configure data structure. The number
+ * of read bytes changes for different Offset.
*
* @param Offset Offset of the element in the configuration data structure
* which has to be read.
@@ -72,8 +73,8 @@ tBleStatus aci_hal_write_config_data( uint8_t Offset,
* Encryption root key used to derive LTK and CSRK; 16 bytes
* - 0x18: CONFIG_DATA_IR_OFFSET
* Identity root key used to derive LTK and CSRK; 16 bytes
- * - 0x80: CONFIG_DATA_RANDOM_ADDRESS
- * Static random address; 6 bytes (read-only)
+ * - 0x2E: CONFIG_DATA_RANDOM_ADDRESS_WR;
+ * Static Random Address; 6 bytes
* @param[out] Data_Length Length of Data in octets
* @param[out] Data Data field associated with Offset parameter
* @return Value indicating success or error code.
@@ -302,6 +303,20 @@ tBleStatus aci_hal_get_pm_debug_info( uint8_t* Allocated_For_TX,
uint8_t* Allocated_MBlocks );
/**
+ * @brief ACI_HAL_SET_SLAVE_LATENCY
+ * This command is used to disable/enable the slave latency feature during a
+ * connection. Note that, by default, the slave latency is enabled at
+ * connection time.
+ *
+ * @param Enable Enable/disable slave latency.
+ * Values:
+ * - 0x00: Slave latency is disabled
+ * - 0x01: Slave latency is enabled
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_hal_set_slave_latency( uint8_t Enable );
+
+/**
* @brief ACI_HAL_READ_RADIO_REG
* This command Reads Register value from the RF module.
*
diff --git a/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hci_le.h b/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hci_le.h
index 8f9c5faf8..c8072f4c0 100644
--- a/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hci_le.h
+++ b/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hci_le.h
@@ -32,7 +32,7 @@
* parameter in the HCI_DISCONNECTION_COMPLETE_EVENT event. All synchronous
* connections on a physical link should be disconnected before the ACL
* connection on the same physical connection is disconnected.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.1.6)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.1.6].
*
* @param Connection_Handle Connection handle for which the command applies.
* Values:
@@ -55,7 +55,7 @@ tBleStatus hci_disconnect( uint16_t Connection_Handle,
* This command will obtain the values for the version information for the
* remote device identified by the Connection_Handle parameter. The
* Connection_Handle must be a Connection_Handle for an ACL or LE connection.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.1.23)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.1.23].
*
* @param Connection_Handle Connection handle for which the command applies.
* Values:
@@ -70,10 +70,9 @@ tBleStatus hci_read_remote_version_information( uint16_t Connection_Handle );
* the HCI for the Host. If the bit in the Event_Mask is set to a one, then the
* event associated with that bit will be enabled. For an LE Controller, the LE
* Meta Event bit in the Event_Mask shall enable or disable all LE events in
- * the LE Meta Event (see Section 7.7.65). The Host has to deal with each event
- * that occurs. The event mask allows the Host to control how much it is
- * interrupted.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.3.1)
+ * the LE Meta Event. The Host has to deal with each event that occurs. The
+ * event mask allows the Host to control how much it is interrupted.
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.3.1].
*
* @param Event_Mask Event mask. Default: 0x20001FFFFFFFFFFF
* Flags:
@@ -101,7 +100,7 @@ tBleStatus hci_set_event_mask( const uint8_t* Event_Mask );
* is implementation defined.
* The Host shall not send additional HCI commands before the Command Complete
* event related to the Reset command has been received.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.3.2)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.3.2].
*
* @return Value indicating success or error code.
*/
@@ -112,7 +111,7 @@ tBleStatus hci_reset( void );
* This command reads the values for the Transmit_Power_Level parameter for the
* specified Connection_Handle. The Connection_Handle shall be a
* Connection_Handle for an ACL connection.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.3.35)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.3.35].
*
* @param Connection_Handle Connection handle for which the command applies.
* Values:
@@ -149,7 +148,7 @@ tBleStatus hci_read_transmit_power_level( uint16_t Connection_Handle,
* connections and synchronous connections.
* The Flow_Control_Enable parameter shall only be changed if no connections
* exist.
- * (See Bluetooth Spec v.5.0, Vol. 2, Part E, 7.3.38)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.3.38].
*
* @param Flow_Control_Enable Enable/Disable the Flow Control
* Values:
@@ -200,7 +199,7 @@ tBleStatus hci_set_controller_to_host_flow_control( uint8_t Flow_Control_Enable
* Note: The Host_ACL_Data_Packet_Length and
* Host_Synchronous_Data_Packet_Length command parameters do not include the
* length of the HCI Data Packet header.
- * (See Bluetooth Spec v.5.0, Vol. 2, Part E, 7.3.39)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.3.39].
*
* @param Host_ACL_Data_Packet_Length Maximum length (in octets) of the data
* portion of each HCI ACL Data Packet that the Host is able to accept.
@@ -250,7 +249,7 @@ tBleStatus hci_host_buffer_size( uint16_t Host_ACL_Data_Packet_Length,
* least one connection, or if the Controller is in local loopback mode
* independent of other commands. The normal flow control for commands is not
* used for the Host_Number_Of_Completed_Packets command.
- * (See Bluetooth Spec v.5.0, Vol. 2, Part E, 7.3.40)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.3.40].
*
* @param Number_Of_Handles The number of Connection_Handles and
* Host_Num_Of_Completed_Packets parameters pairs contained in this
@@ -272,7 +271,7 @@ tBleStatus hci_host_number_of_completed_packets( uint8_t Number_Of_Handles,
* LMP or PAL. The Manufacturer_Name information indicates the manufacturer of
* the local device. The HCI Revision and LMP/PAL Subversion are implementation
* dependent.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.4.1)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.4.1].
*
* @param[out] HCI_Version See Bluetooth Assigned Numbers
* (https://www.bluetooth.org/en-us/specification/assigned-numbers)
@@ -302,7 +301,7 @@ tBleStatus hci_read_local_version_information( uint8_t* HCI_Version,
* Controller. This command shall return the Supported_Commands configuration
* parameter. It is implied that if a command is listed as supported, the
* feature underlying that command is also supported.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.4.2)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.4.2].
*
* @param[out] Supported_Commands Bit mask for each HCI Command. If a bit is 1,
* the Controller supports the corresponding command and the features
@@ -316,8 +315,8 @@ tBleStatus hci_read_local_supported_commands( uint8_t* Supported_Commands );
* @brief HCI_READ_LOCAL_SUPPORTED_FEATURES
* This command requests a list of the supported features for the local
* Controller. This command will return a list of the LMP features. For details
- * see Part C, Link Manager Protocol Specification on page 227.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.4.3)
+ * see Part C, Link Manager Protocol Specification.
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.4.3].
*
* @param[out] LMP_Features Bit Mask List of LMP features.
* @return Value indicating success or error code.
@@ -331,7 +330,7 @@ tBleStatus hci_read_local_supported_features( uint8_t* LMP_Features );
* does not have a Public Device Address, the value 0x000000000000 shall be
* returned.
* On an LE Controller, the public address shall be the same as the BD_ADDR.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.4.6)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.4.6].
*
* @param[out] BD_ADDR BD_ADDR ( Bluetooth Device Address) of the Device.
* @return Value indicating success or error code.
@@ -345,7 +344,7 @@ tBleStatus hci_read_bd_addr( uint8_t* BD_ADDR );
* command parameter and return parameter. The meaning of the RSSI metric is an
* absolute receiver signal strength value in dBm to +/- 6 dB accuracy. If the
* RSSI cannot be read, the RSSI metric shall be set to 127.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.5.4)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.5.4].
*
* @param Connection_Handle Connection handle for which the command applies.
* Values:
@@ -370,7 +369,7 @@ tBleStatus hci_read_rssi( uint16_t Connection_Handle,
* For LE events to be generated, the LE Meta-Event bit in the Event_Mask shall
* also be set. If that bit is not set, then LE events shall not be generated,
* regardless of how the LE_Event_Mask is set.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.1)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.1].
*
* @param LE_Event_Mask LE event mask. Default: 0x00000000000FFFFF.
* Flags:
@@ -424,7 +423,7 @@ tBleStatus hci_le_set_event_mask( const uint8_t* LE_Event_Mask );
* buffers are to be divided between different Connection Handles.
* Note: The HC_LE_ACL_Data_Packet_Length return parameter does not include the
* length of the HCI Data Packet header.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.2)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.2].
*
* @param[out] HC_LE_ACL_Data_Packet_Length 0x0000 No dedicated LE Buffer - use
* Read_Buffer_Size command.
@@ -443,10 +442,10 @@ tBleStatus hci_le_read_buffer_size( uint16_t* HC_LE_ACL_Data_Packet_Length,
* @brief HCI_LE_READ_LOCAL_SUPPORTED_FEATURES
* This command requests the list of the supported LE features for the
* Controller.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.3)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.3].
*
- * @param[out] LE_Features Bit Mask List of LE features. See Core v5.0, Vol. 6,
- * Part B, Section 4.6.
+ * @param[out] LE_Features Bit Mask List of LE features. See Bluetooth Core
+ * specification.
* @return Value indicating success or error code.
*/
tBleStatus hci_le_read_local_supported_features( uint8_t* LE_Features );
@@ -455,7 +454,7 @@ tBleStatus hci_le_read_local_supported_features( uint8_t* LE_Features );
* @brief HCI_LE_SET_RANDOM_ADDRESS
* The LE_Set_Random_Address command is used by the Host to set the LE Random
* Device Address in the Controller (see [Vol 6] Part B, Section 1.3).
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.4)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.4].
*
* @param Random_Address Random Device Address.
* @return Value indicating success or error code.
@@ -493,7 +492,7 @@ tBleStatus hci_le_set_random_address( const uint8_t* Random_Address );
* advertising is enabled.
* The Host shall not issue this command when advertising is enabled in the
* Controller; if it is the Command Disallowed error code shall be used.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.5)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.5].
*
* @param Advertising_Interval_Min Minimum advertising interval.
* Time = N * 0.625 msec.
@@ -563,7 +562,7 @@ tBleStatus hci_le_set_advertising_parameters( uint16_t Advertising_Interval_Min,
* @brief HCI_LE_READ_ADVERTISING_CHANNEL_TX_POWER
* The LE_Read_Advertising_Channel_Tx_Power command is used by the Host to read
* the transmit power level used for LE advertising channel packets.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.6)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.6].
*
* @param[out] Transmit_Power_Level Size: 1 Octet (signed integer)
* Units: dBm
@@ -580,7 +579,7 @@ tBleStatus hci_le_read_advertising_channel_tx_power( uint8_t* Transmit_Power_Lev
* advertising packets that have a data field.
* Only the significant part of the Advertising_Data is transmitted in the
* advertising packets, as defined in [Vol 3] Part C, Section 11.,
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.7)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.7].
*
* @param Advertising_Data_Length The number of significant octets in the
* following data field
@@ -597,7 +596,7 @@ tBleStatus hci_le_set_advertising_data( uint8_t Advertising_Data_Length,
* data field.
* Only the significant part of the Scan_Response_Data is transmitted in the
* Scanning Packets, as defined in [Vol 3] Part C, Section 11.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.8)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.8].
*
* @param Scan_Response_Data_Length The number of significant octets in the
* following data field
@@ -619,7 +618,7 @@ tBleStatus hci_le_set_scan_response_data( uint8_t Scan_Response_Data_Length,
* (Advertising is disabled) or until a connection is created or until the
* Advertising is timed out due to high duty cycle Directed Advertising. In
* these cases, advertising is then disabled.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.9)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.9].
*
* @param Advertising_Enable Enable/disable advertise. Default is 0 (disabled).
* Values:
@@ -643,7 +642,7 @@ tBleStatus hci_le_set_advertise_enable( uint8_t Advertising_Enable );
* Device Address) when performing active scan.
* The Host shall not issue this command when scanning is enabled in the
* Controller; if it is the Command Disallowed error code shall be used.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.10)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.10].
*
* @param LE_Scan_Type Passive or active scanning. With active scanning
* SCAN_REQ packets are sent.
@@ -708,7 +707,7 @@ tBleStatus hci_le_set_scan_parameters( uint8_t LE_Scan_Type,
* The Filter_Duplicates parameter controls whether the Link Layer shall filter
* duplicate advertising reports to the Host, or if the Link Layer should
* generate advertising reports for each packet received.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.11)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.11].
*
* @param LE_Scan_Enable Enable/disable scan. Default is 0 (disabled).
* Values:
@@ -732,9 +731,9 @@ tBleStatus hci_le_set_scan_enable( uint8_t LE_Scan_Enable,
* the Controller should scan. The LE_Scan_Window parameter shall be set to a
* value smaller or equal to the value set for the LE_Scan_Interval parameter.
* If both are set to the same value, scanning should run continuously.
- * The Initiator_Filter_Policy is used to determine whether the White List is
+ * The Initiator_Filter_Policy is used to determine whether the WhiteList is
* used.
- * If the White List is not used, the Peer_Address_Type and the Peer_Address
+ * If the whitelist is not used, the Peer_Address_Type and the Peer_Address
* parameters specify the address type and address of the advertising device to
* connect to.
* The Link Layer shall set the address in the CONNECT_REQ packets to either
@@ -743,12 +742,11 @@ tBleStatus hci_le_set_scan_enable( uint8_t LE_Scan_Enable,
* The Conn_Interval_Min and Conn_Interval_Max parameters define the minimum
* and maximum allowed connection interval. The Conn_Interval_Min parameter
* shall not be greater than the Conn_Interval_Max parameter.
- * The Conn_Latency parameter defines the maximum allowed connection latency
- * (see [Vol 6] Part B, Section 4.5.1).
+ * The Conn_Latency parameter defines the maximum allowed connection latency.
* The Supervision_Timeout parameter defines the link supervision timeout for
* the connection. The Supervision_Timeout in milliseconds shall be larger than
* (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given
- * in milliseconds. (See [Vol 6] Part B, Section 4.5.2).
+ * in milliseconds.
* The Minimum_CE_Length and Maximum_CE_Length parameters are informative
* parameters providing the Controller with the expected minimum and maximum
* length of the connection events. The Minimum_CE_Length parameter shall be
@@ -756,7 +754,7 @@ tBleStatus hci_le_set_scan_enable( uint8_t LE_Scan_Enable,
* The Host shall not issue this command when another LE_Create_Connection is
* pending in the Controller; if this does occur the Controller shall return
* the Command Disallowed error code shall be used.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.12)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.12].
*
* @param LE_Scan_Interval This is defined as the time interval from when the
* Controller started its last LE scan until it begins the subsequent LE
@@ -857,7 +855,7 @@ tBleStatus hci_le_create_connection( uint16_t LE_Scan_Interval,
* LE_Create_Connection command has been issued, a Command Status event has
* been received for the LE Create Connection command and before the LE
* Connection Complete event.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.13)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.13].
*
* @return Value indicating success or error code.
*/
@@ -866,8 +864,8 @@ tBleStatus hci_le_create_connection_cancel( void );
/**
* @brief HCI_LE_READ_WHITE_LIST_SIZE
* The LE_Read_White_List_Size command is used to read the total number of
- * white list entries that can be stored in the Controller.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.14)
+ * whitelist entries that can be stored in the Controller.
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.14].
*
* @param[out] White_List_Size Total number of white list entries that can be
* stored in the Controller.
@@ -877,15 +875,15 @@ tBleStatus hci_le_read_white_list_size( uint8_t* White_List_Size );
/**
* @brief HCI_LE_CLEAR_WHITE_LIST
- * The LE_Clear_White_List command is used to clear the white list stored in
- * the Controller.
+ * The LE_Clear_White_List command is used to clear the whitelist stored in the
+ * Controller.
* This command can be used at any time except when:
- * - the advertising filter policy uses the white list and advertising is
+ * - the advertising filter policy uses the whitelist and advertising is
* enabled.
- * - the scanning filter policy uses the white list and scanning is enabled.
- * - the initiator filter policy uses the white list and an
- * LE_Create_Connection command is outstanding.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.15)
+ * - the scanning filter policy uses the whitelist and scanning is enabled.
+ * - the initiator filter policy uses the whitelist and an LE_Create_Connection
+ * command is outstanding.
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.15].
*
* @return Value indicating success or error code.
*/
@@ -894,14 +892,14 @@ tBleStatus hci_le_clear_white_list( void );
/**
* @brief HCI_LE_ADD_DEVICE_TO_WHITE_LIST
* The LE_Add_Device_To_White_List command is used to add a single device to
- * the white list stored in the Controller.
+ * the whitelist stored in the Controller.
* This command can be used at any time except when:
- * - the advertising filter policy uses the white list and advertising is
+ * - the advertising filter policy uses the whitelist and advertising is
* enabled.
- * - the scanning filter policy uses the white list and scanning is enabled.
- * - the initiator filter policy uses the white list and a create connection
+ * - the scanning filter policy uses the whitelist and scanning is enabled.
+ * - the initiator filter policy uses the whitelist and a create connection
* command is outstanding.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.16)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.16].
*
* @param Address_Type Address type.
* Values:
@@ -916,14 +914,14 @@ tBleStatus hci_le_add_device_to_white_list( uint8_t Address_Type,
/**
* @brief HCI_LE_REMOVE_DEVICE_FROM_WHITE_LIST
* The LE_Remove_Device_From_White_List command is used to remove a single
- * device from the white list stored in the Controller.
+ * device from the whitelist stored in the Controller.
* This command can be used at any time except when:
- * - the advertising filter policy uses the white list and advertising is
+ * - the advertising filter policy uses the whitelist and advertising is
* enabled.
- * - the scanning filter policy uses the white list and scanning is enabled.
- * - the initiator filter policy uses the white list and a create connection
+ * - the scanning filter policy uses the whitelist and scanning is enabled.
+ * - the initiator filter policy uses the whitelist and a create connection
* command is outstanding.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.17)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.17].
*
* @param Address_Type Address type.
* Values:
@@ -954,7 +952,7 @@ tBleStatus hci_le_remove_device_from_white_list( uint8_t Address_Type,
* equal to the Maximum_CE_Length.
* The actual parameter values selected by the Link Layer may be different from
* the parameter values provided by the Host through this command.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.18)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.18].
*
* @param Connection_Handle Connection handle for which the command applies.
* Values:
@@ -1011,7 +1009,7 @@ tBleStatus hci_le_connection_update( uint16_t Connection_Handle,
* two successive commands sent shall be at least one second.
* This command shall only be used when the local device supports the Master
* role.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.19)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.19].
*
* @param LE_Channel_Map This parameter contains 37 1-bit fields.
* The nth such field (in the range 0 to 36) contains the value for the
@@ -1032,7 +1030,7 @@ tBleStatus hci_le_set_host_channel_classification( const uint8_t* LE_Channel_Map
* CONNECT_REQ or LL_CHANNEL_MAP_REQ message) for the specified
* Connection_Handle, regardless of whether the Master has received an
* acknowledgement.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.20)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.20].
*
* @param Connection_Handle Connection handle for which the command applies.
* Values:
@@ -1054,7 +1052,7 @@ tBleStatus hci_le_read_channel_map( uint16_t Connection_Handle,
* This command shall return a list of the used LE features. For details see
* [Vol 6] Part B, Section 4.6.
* This command may be issued on both the master and slave.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.21)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.21].
*
* @param Connection_Handle Connection handle for which the command applies.
* Values:
@@ -1070,7 +1068,7 @@ tBleStatus hci_le_read_remote_features( uint16_t Connection_Handle );
* the Encrypted_Data to the Host. The AES-128 bit block cypher is defined in
* NIST Publication FIPS-197
* (http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf).
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.22)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.22].
*
* @param Key 128 bit key for the encryption of the data given in the command.
* @param Plaintext_Data 128 bit data block that is requested to be encrypted.
@@ -1087,7 +1085,7 @@ tBleStatus hci_le_encrypt( const uint8_t* Key,
* of random data to be sent to the Host. The Random_Number shall be generated
* according to [Vol 2] Part H, Section 2 if the LE Feature (LL Encryption) is
* supported.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.23)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.23].
*
* @param[out] Random_Number Random Number
* @return Value indicating success or error code.
@@ -1108,7 +1106,7 @@ tBleStatus hci_le_rand( uint8_t* Random_Number );
* disconnected by the Link Layer. If this command succeeds, then the
* connection shall be encrypted.
* This command shall only be used when the local device's role is Master.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.24)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.24].
*
* @param Connection_Handle Connection handle for which the command applies.
* Values:
@@ -1129,7 +1127,7 @@ tBleStatus hci_le_start_encryption( uint16_t Connection_Handle,
* Term Key Request event from the Controller, and specifies the Long_Term_Key
* parameter that shall be used for this Connection_Handle. The Long_Term_Key
* is used as defined in [Vol 6] Part B, Section 5.1.3.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.25)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.25].
*
* @param Connection_Handle Connection handle for which the command applies.
* Values:
@@ -1145,7 +1143,7 @@ tBleStatus hci_le_long_term_key_request_reply( uint16_t Connection_Handle,
* The LE_Long_Term_Key_Request_Negative_Reply command is used to reply to an
* LE Long Term Key Request event from the Controller if the Host cannot
* provide a Long Term Key for this Connection_Handle.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.26)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.26].
*
* @param Connection_Handle Connection handle for which the command applies.
* Values:
@@ -1167,11 +1165,10 @@ tBleStatus hci_le_long_term_key_requested_negative_reply( uint16_t Connection_Ha
* set.
* All the Scanning types and the Initiate State combinations shall be set only
* if the corresponding Scanning types and Master Role combination are set.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.27)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.27].
*
* @param[out] LE_States State or state combination is supported by the
* Controller.
- * See Core v5.0, Vol.2, part E, Ch. 7.8.27.
* @return Value indicating success or error code.
*/
tBleStatus hci_le_read_supported_states( uint8_t* LE_States );
@@ -1181,7 +1178,7 @@ tBleStatus hci_le_read_supported_states( uint8_t* LE_States );
* This command is used to start a test where the DUT receives test reference
* packets at a fixed interval. The tester generates the test reference
* packets.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.28)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.28].
*
* @param RX_Frequency N = (F - 2402) / 2
* Frequency Range : 2402 MHz to 2480 MHz
@@ -1198,7 +1195,7 @@ tBleStatus hci_le_receiver_test( uint8_t RX_Frequency );
* An LE Controller supporting the LE_Transmitter_Test command shall support
* Packet_Payload values 0x00, 0x01 and 0x02. An LE Controller may support
* other values of Packet_Payload.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.29)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.29].
*
* @param TX_Frequency N = (F - 2402) / 2
* Frequency Range : 2402 MHz to 2480 MHz
@@ -1229,7 +1226,7 @@ tBleStatus hci_le_transmitter_test( uint8_t TX_Frequency,
* Number_Of_Packets for a transmitter test shall be reported as 0x0000. The
* Number_Of_Packets is an unsigned number and contains the number of received
* packets.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.30)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.30].
*
* @param[out] Number_Of_Packets Number of packets received
* @return Value indicating success or error code.
@@ -1240,9 +1237,10 @@ tBleStatus hci_le_test_end( uint16_t* Number_Of_Packets );
* @brief HCI_LE_SET_DATA_LENGTH
* The LE_Set_Data_Length command allows the Host to suggest maximum
* transmission packet size and maximum packet transmission time
- * (connMaxTxOctets and connMaxTxTime - see Bluetooth Specification v5.0 [Vol
- * 6] Part B, Section 4.5.10) to be used for a given connection. The Controller
- * may use smaller or larger values based on local information.
+ * (connMaxTxOctets and connMaxTxTime - see Bluetooth spec. Vol 6 [Part B]
+ * 4.5.10) to be used for a given connection. The Controller may use smaller or
+ * larger values based on local information.
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.33].
*
* @param Connection_Handle Connection handle for which the command applies.
* Values:
@@ -1268,8 +1266,8 @@ tBleStatus hci_le_set_data_length( uint16_t Connection_Handle,
* The LE_Read_Suggested_Default_Data_Length command allows the Host to read
* the Host's suggested values (SuggestedMaxTxOctets and SuggestedMaxTxTime)
* for the Controller's maximum transmitted number of payload octets and
- * maximum packet transmission time to be used for new connections (see
- * Bluetooth Specification v5.0 [Vol 6] Part B, Section 4.5.10).
+ * maximum packet transmission time to be used for new connections.
+ * See Bluetooth spec. v.5.2 [Vol 6, Part B, 4.5.10].
*
* @param[out] SuggestedMaxTxOctets The Host's suggested value for the
* Controller's maximum transmitted number of payload octets to be used
@@ -1293,7 +1291,7 @@ tBleStatus hci_le_read_suggested_default_data_length( uint16_t* SuggestedMaxTxOc
* number of payload octets and maximum packet transmission time to be used for
* new connections. The Controller may use smaller or larger values for
* connInitialMaxTxOctets and connInitialMaxTxTime based on local information.
- * (see Bluetooth Specification [Vol 6] Part B, Section 4.5.10).
+ * See Bluetooth spec. v.5.2 [Vol 6, Part B, 4.5.10].
*
* @param SuggestedMaxTxOctets The Host's suggested value for the Controller's
* maximum transmitted number of payload octets to be used for new
@@ -1314,7 +1312,7 @@ tBleStatus hci_le_write_suggested_default_data_length( uint16_t SuggestedMaxTxOc
* The LE_Read_Local_P-256_Public_Key command is used to return the local P-256
* public key from the Controller. The Controller shall generate a new P-256
* public/private key pair upon receipt of this command.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.36)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.36].
*
* @return Value indicating success or error code.
*/
@@ -1327,7 +1325,7 @@ tBleStatus hci_le_read_local_p256_public_key( void );
* takes the remote P-256 public key as input. The Diffie-Hellman key
* generation uses the private key generated by LE_Read_Local_P256_Public_Key
* command.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.37)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.37].
*
* @param Remote_P256_Public_Key The remote P-256 public key in X, Y format:
* Octets 31-0: X co-ordinate
@@ -1351,7 +1349,7 @@ tBleStatus hci_le_generate_dhkey( const uint8_t* Remote_P256_Public_Key );
* the Controller.
* When a Controller cannot add a device to the resolving list because the list
* is full, it shall respond with error code 0x07 (Memory Capacity Exceeded).
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.38)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.38].
*
* @param Peer_Identity_Address_Type Identity address type.
* Values:
@@ -1383,7 +1381,7 @@ tBleStatus hci_le_add_device_to_resolving_list( uint8_t Peer_Identity_Address_Ty
* When a Controller cannot remove a device from the resolving list because it
* is not found, it shall respond with error code 0x02 (Unknown Connection
* Identifier).
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.39)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.39].
*
* @param Peer_Identity_Address_Type Identity address type.
* Values:
@@ -1408,7 +1406,7 @@ tBleStatus hci_le_remove_device_from_resolving_list( uint8_t Peer_Identity_Addre
* - Create connection command is outstanding
* This command can be used at any time when address translation is disabled in
* the Controller.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.40)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.40].
*
* @return Value indicating success or error code.
*/
@@ -1419,7 +1417,7 @@ tBleStatus hci_le_clear_resolving_list( void );
* The LE_Read_Resolving_List_Size command is used to read the total number of
* address translation entries in the resolving list that can be stored in the
* Controller.
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.41)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.41].
*
* @param[out] Resolving_List_Size Number of address translation entries in the
* resolving list
@@ -1437,7 +1435,7 @@ tBleStatus hci_le_read_resolving_list_size( uint8_t* Resolving_List_Size );
* When a Controller cannot find a Resolvable Private Address associated with
* the Peer Identity Address, it shall respond with error code 0x02 (Unknown
* Connection Identifier).
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.42)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.42].
*
* @param Peer_Identity_Address_Type Identity address type.
* Values:
@@ -1463,7 +1461,7 @@ tBleStatus hci_le_read_peer_resolvable_address( uint8_t Peer_Identity_Address_Ty
* When a Controller cannot find a Resolvable Private Address associated with
* the Peer Identity Address, it shall respond with error code 0x02 (Unknown
* Connection Identifier).
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.43)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.43].
*
* @param Peer_Identity_Address_Type Identity address type.
* Values:
@@ -1489,7 +1487,7 @@ tBleStatus hci_le_read_local_resolvable_address( uint8_t Peer_Identity_Address_T
* - Advertising is enabled
* - Scanning is enabled
* - Create connection command is outstanding
- * (See Bluetooth Specification v.5.0, Vol. 2, Part E, Section 7.8.44)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.44].
*
* @param Address_Resolution_Enable Enable/disable address resolution in the
* controller.
@@ -1508,7 +1506,7 @@ tBleStatus hci_le_set_address_resolution_enable( uint8_t Address_Resolution_Enab
* the controller uses a Resolvable Private Address before a new resolvable
* private address is generated and starts being used. This timeout applies to
* all addresses generated by the controller.
- * (See Bluetooth Specification v.5.0 [Vol 2] Part E, Section 7.8.45)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.45].
*
* @param RPA_Timeout RPA_Timeout measured in seconds.
* Range for N: 0x0001 - 0xA1B8 (1 sec - approximately 11.5 hours)
@@ -1522,8 +1520,8 @@ tBleStatus hci_le_set_resolvable_private_address_timeout( uint16_t RPA_Timeout )
* The LE_Read_Maximum_Data_Length command allows the Host to read the
* Controller's maximum supported payload octets and packet duration times for
* transmission and reception (supportedMaxTxOctets and supportedMaxTxTime,
- * supportedMaxRxOctets, and supportedMaxRxTime, see Bluetooth Specification
- * v5.0 [Vol 6] Part B, Section 4.5.10).
+ * supportedMaxRxOctets, and supportedMaxRxTime, see Bluetooth spec. v.5.2 [Vol
+ * 6, Part B, 4.5.10]).
*
* @param[out] supportedMaxTxOctets Maximum number of payload octets that the
* local Controller supports for transmission of a single Link Layer
@@ -1555,8 +1553,8 @@ tBleStatus hci_le_read_maximum_data_length( uint16_t* supportedMaxTxOctets,
/**
* @brief HCI_LE_READ_PHY
* The LE_Read_PHY command is used to read the current transmitter PHY and
- * receiver PHY on the connection identified by the Connection_Handle. see
- * Bluetooth Specification [Vol 2] part E, Section 7.8.47
+ * receiver PHY on the connection identified by the Connection_Handle.
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.47].
*
* @param Connection_Handle Connection handle for which the command applies.
* Values:
@@ -1597,7 +1595,7 @@ tBleStatus hci_le_read_phy( uint16_t Connection_Handle,
* the Host prefers the Controller to use. If the ALL_PHYS parameter specifies
* that the Host has no preference, the RX_PHYS parameter is ignored; otherwise
* at least one bit shall be set to 1.
- * See Bluetooth Specification [Vol2] Part E Section 7.8.48
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.48].
*
* @param ALL_PHYS Host preferences for TX PHY and RX PHY
* Values:
@@ -1645,7 +1643,7 @@ tBleStatus hci_le_set_default_phy( uint8_t ALL_PHYS,
* the LE Coded PHY.
* The Host may specify a preferred coding even if it prefers not to use the LE
* Coded transmitter PHY since the Controller may override the PHY preference.
- * (See Bluetooth Specification v5.0 [Vol 6] Part B, Section 7.8.49)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.49].
*
* @param Connection_Handle Connection handle for which the command applies.
* Values:
@@ -1673,7 +1671,7 @@ tBleStatus hci_le_set_phy( uint16_t Connection_Handle,
* This command is used to start a test where the DUT receives test reference
* packets at a fixed interval. The tester generates the test reference
* packets.
- * (See Bluetooth Specification v5.0 [Vol 6] Part B, Section 7.8.50)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.50].
*
* @param RX_Frequency N = (F - 2402) / 2
* Frequency Range : 2402 MHz to 2480 MHz
@@ -1705,7 +1703,7 @@ tBleStatus hci_le_enhanced_receiver_test( uint8_t RX_Frequency,
* supporting the LE Coded PHY shall also support Packet_Payload value 0x04
* (not supported by STM32WB). An LE Controller may support other values of
* Packet_Payload.
- * (See Bluetooth Specification v5.0 [Vol 6] Part B, Section 7.8.51)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.51].
*
* @param TX_Frequency N = (F - 2402) / 2
* Frequency Range : 2402 MHz to 2480 MHz
@@ -1742,6 +1740,7 @@ tBleStatus hci_le_enhanced_transmitter_test( uint8_t TX_Frequency,
* @brief HCI_LE_READ_TRANSMIT_POWER
* This command is used to read the minimum and maximum transmit powers
* supported by the Controller.
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.74].
*
* @param[out] Min_TX_Power Signed integer. Units: dBm
* Values:
@@ -1758,7 +1757,7 @@ tBleStatus hci_le_read_transmit_power( uint8_t* Min_TX_Power,
* @brief HCI_LE_SET_PRIVACY_MODE
* This command is used to allow the Host to specify the privacy mode to be
* used for a given entry on the resolving list.
- * (See Bluetooth Specification v.5.0 [Vol 2] Part E, Section 7.8.77)
+ * See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.77].
*
* @param Peer_Identity_Address_Type Identity address type.
* Values:
diff --git a/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_types.h b/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_types.h
index 3ba9cbb97..f00fdb249 100644
--- a/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_types.h
+++ b/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_types.h
@@ -1076,6 +1076,16 @@ typedef PACKED(struct)
typedef PACKED(struct)
{
+ uint8_t Enable;
+} aci_hal_set_slave_latency_cp0;
+
+typedef PACKED(struct)
+{
+ uint8_t Status;
+} aci_hal_set_slave_latency_rp0;
+
+typedef PACKED(struct)
+{
uint8_t Register_Address;
} aci_hal_read_radio_reg_cp0;
diff --git a/Middlewares/ST/STM32_WPAN/ble/core/ble_legacy.h b/Middlewares/ST/STM32_WPAN/ble/core/ble_legacy.h
index 29d272e41..b2cec561b 100644
--- a/Middlewares/ST/STM32_WPAN/ble/core/ble_legacy.h
+++ b/Middlewares/ST/STM32_WPAN/ble/core/ble_legacy.h
@@ -25,20 +25,19 @@
/*
* The event code in the @ref hci_event_pckt structure.
- * If event code is HCI_VENDOR_SPECIFIC_DEBUG_EVT_CODE, application can use @ref evt_blecore_aci
+ * If event code is EVT_VENDOR, application can use @ref evt_blue_aci
* structure to parse the packet.
*/
-
-#define EVT_VENDOR HCI_VENDOR_SPECIFIC_DEBUG_EVT_CODE /* 0xFF */
-
-#define EVT_CONN_COMPLETE HCI_LE_CONNECTION_UPDATE_COMPLETE_SUBEVT_CODE /* 0x03 */
-#define EVT_DISCONN_COMPLETE HCI_DISCONNECTION_COMPLETE_EVT_CODE /* 0x05 */
-#define EVT_LE_META_EVENT HCI_LE_META_EVT_CODE /* 0x3E */
-#define EVT_LE_CONN_UPDATE_COMPLETE HCI_LE_CONNECTION_UPDATE_COMPLETE_SUBEVT_CODE /* 0x03 */
-#define EVT_LE_CONN_COMPLETE HCI_LE_CONNECTION_COMPLETE_SUBEVT_CODE /* 0x01 */
-#define EVT_LE_ADVERTISING_REPORT HCI_LE_ADVERTISING_REPORT_SUBEVT_CODE /* 0x02 */
-#define EVT_LE_PHY_UPDATE_COMPLETE HCI_LE_PHY_UPDATE_COMPLETE_SUBEVT_CODE /* 0x0C */
-#define EVT_LE_ENHANCED_CONN_COMPLETE HCI_LE_ENHANCED_CONNECTION_COMPLETE_SUBEVT_CODE /* 0x0A */
+#define EVT_VENDOR 0xFF
+
+#define EVT_CONN_COMPLETE 0x03
+#define EVT_DISCONN_COMPLETE 0x05
+#define EVT_LE_META_EVENT 0x3E
+#define EVT_LE_CONN_UPDATE_COMPLETE 0x03
+#define EVT_LE_CONN_COMPLETE 0x01
+#define EVT_LE_ADVERTISING_REPORT 0x02
+#define EVT_LE_PHY_UPDATE_COMPLETE 0x0C
+#define EVT_LE_ENHANCED_CONN_COMPLETE 0x0A
typedef PACKED(struct) _hci_uart_pckt
{
@@ -72,46 +71,42 @@ typedef PACKED(struct) _evt_blecore_aci
/* BLE core event codes */
-#define EVT_BLUE_GATT_ATTRIBUTE_MODIFIED ACI_GATT_ATTRIBUTE_MODIFIED_VSEVT_CODE /*(0x0C01)*/
-#define EVT_BLUE_GATT_PROCEDURE_TIMEOUT ACI_GATT_PROC_TIMEOUT_VSEVT_CODE /*(0x0C02)*/
-#define EVT_BLUE_ATT_EXCHANGE_MTU_RESP ACI_ATT_EXCHANGE_MTU_RESP_VSEVT_CODE /*(0x0C03)*/
-#define EVT_BLUE_ATT_FIND_INFORMATION_RESP ACI_ATT_FIND_INFO_RESP_VSEVT_CODE /*(0x0C04)*/
-#define EVT_BLUE_ATT_FIND_BY_TYPE_VAL_RESP ACI_ATT_FIND_BY_TYPE_VALUE_RESP_VSEVT_CODE /*(0x0C05)*/
-#define EVT_BLUE_ATT_READ_BY_TYPE_RESP ACI_ATT_READ_BY_TYPE_RESP_VSEVT_CODE /*(0x0C06)*/
-#define EVT_BLUE_ATT_READ_RESP ACI_ATT_READ_RESP_VSEVT_CODE /*(0x0C07)*/
-#define EVT_BLUE_ATT_READ_BLOB_RESP ACI_ATT_READ_BLOB_RESP_VSEVT_CODE /*(0x0C08)*/
-#define EVT_BLUE_ATT_READ_MULTIPLE_RESP ACI_ATT_READ_MULTIPLE_RESP_VSEVT_CODE /*(0x0C09)*/
-#define EVT_BLUE_ATT_READ_BY_GROUP_TYPE_RESP ACI_ATT_READ_BY_GROUP_TYPE_RESP_VSEVT_CODE /*(0x0C0A)*/
-#define EVT_BLUE_ATT_PREPARE_WRITE_RESP ACI_ATT_PREPARE_WRITE_RESP_VSEVT_CODE /*(0x0C0C)*/
-#define EVT_BLUE_ATT_EXEC_WRITE_RESP ACI_ATT_EXEC_WRITE_RESP_VSEVT_CODE /*(0x0C0D)*/
-#define EVT_BLUE_GATT_INDICATION ACI_GATT_INDICATION_VSEVT_CODE /*(0x0C0E)*/
-#define EVT_BLUE_GATT_NOTIFICATION ACI_GATT_NOTIFICATION_VSEVT_CODE /*(0x0C0F)*/
-#define EVT_BLUE_GATT_PROCEDURE_COMPLETE ACI_GATT_PROC_COMPLETE_VSEVT_CODE /*(0x0C10)*/
-#define EVT_BLUE_GATT_ERROR_RESP ACI_GATT_ERROR_RESP_VSEVT_CODE /*(0x0C11)*/
-#define EVT_BLUE_GATT_DISC_READ_CHAR_BY_UUID_RESP ACI_GATT_DISC_READ_CHAR_BY_UUID_RESP_VSEVT_CODE /*(0x0C12)*/
-#define EVT_BLUE_GATT_WRITE_PERMIT_REQ ACI_GATT_WRITE_PERMIT_REQ_VSEVT_CODE /*(0x0C13)*/
-#define EVT_BLUE_GATT_READ_PERMIT_REQ ACI_GATT_READ_PERMIT_REQ_VSEVT_CODE /*(0x0C14)*/
-#define EVT_BLUE_GATT_READ_MULTI_PERMIT_REQ ACI_GATT_READ_MULTI_PERMIT_REQ_VSEVT_CODE /*(0x0C15)*/
-#define EVT_BLUE_GATT_TX_POOL_AVAILABLE ACI_GATT_TX_POOL_AVAILABLE_VSEVT_CODE /*(0x0C16)*/
-#define EVT_BLUE_GATT_SERVER_CONFIRMATION_EVENT ACI_GATT_SERVER_CONFIRMATION_VSEVT_CODE /*(0x0C17)*/
-#define EVT_BLUE_GATT_PREPARE_WRITE_PERMIT_REQ ACI_GATT_PREPARE_WRITE_PERMIT_REQ_VSEVT_CODE /*(0x0C18)*/
-
-#define EVT_BLUE_GAP_LIMITED_DISCOVERABLE ACI_GAP_LIMITED_DISCOVERABLE_VSEVT_CODE /*(0x0400)*/
-#define EVT_BLUE_GAP_PAIRING_CMPLT ACI_GAP_PAIRING_COMPLETE_VSEVT_CODE /*(0x0401)*/
-#define EVT_BLUE_GAP_PASS_KEY_REQUEST ACI_GAP_PASS_KEY_REQ_VSEVT_CODE /*(0x0402)*/
-#define EVT_BLUE_GAP_AUTHORIZATION_REQUEST ACI_GAP_AUTHORIZATION_REQ_VSEVT_CODE /*(0x0403)*/
-#define EVT_BLUE_GAP_SLAVE_SECURITY_INITIATED ACI_GAP_SLAVE_SECURITY_INITIATED_VSEVT_CODE /*(0X0404)*/
-#define EVT_BLUE_GAP_BOND_LOST ACI_GAP_BOND_LOST_VSEVT_CODE /*(0X0405)*/
-
-#define EVT_BLUE_GAP_DEVICE_FOUND (0x0406) /*removed*/
-
-#define EVT_BLUE_GAP_PROCEDURE_COMPLETE ACI_GAP_PROC_COMPLETE_VSEVT_CODE /*(0x0407)*/
-#define EVT_BLUE_GAP_ADDR_NOT_RESOLVED ACI_GAP_ADDR_NOT_RESOLVED_VSEVT_CODE /*(0x0408)*/
-#define EVT_BLUE_GAP_NUMERIC_COMPARISON_VALUE ACI_GAP_NUMERIC_COMPARISON_VALUE_VSEVT_CODE /*(0x0409)*/
-#define EVT_BLUE_GAP_KEYPRESS_NOTIFICATION ACI_GAP_KEYPRESS_NOTIFICATION_VSEVT_CODE /*(0x040A)*/
-
-#define EVT_BLUE_L2CAP_CONNECTION_UPDATE_REQ ACI_L2CAP_CONNECTION_UPDATE_REQ_VSEVT_CODE /*(0x0802)*/
-#define EVT_BLUE_L2CAP_CONNECTION_UPDATE_RESP ACI_L2CAP_CONNECTION_UPDATE_RESP_VSEVT_CODE /*(0x0800)*/
+#define EVT_BLUE_GATT_ATTRIBUTE_MODIFIED (0x0C01)
+#define EVT_BLUE_GATT_PROCEDURE_TIMEOUT (0x0C02)
+#define EVT_BLUE_ATT_EXCHANGE_MTU_RESP (0x0C03)
+#define EVT_BLUE_ATT_FIND_INFORMATION_RESP (0x0C04)
+#define EVT_BLUE_ATT_FIND_BY_TYPE_VAL_RESP (0x0C05)
+#define EVT_BLUE_ATT_READ_BY_TYPE_RESP (0x0C06)
+#define EVT_BLUE_ATT_READ_RESP (0x0C07)
+#define EVT_BLUE_ATT_READ_BLOB_RESP (0x0C08)
+#define EVT_BLUE_ATT_READ_MULTIPLE_RESP (0x0C09)
+#define EVT_BLUE_ATT_READ_BY_GROUP_TYPE_RESP (0x0C0A)
+#define EVT_BLUE_ATT_PREPARE_WRITE_RESP (0x0C0C)
+#define EVT_BLUE_ATT_EXEC_WRITE_RESP (0x0C0D)
+#define EVT_BLUE_GATT_INDICATION (0x0C0E)
+#define EVT_BLUE_GATT_NOTIFICATION (0x0C0F)
+#define EVT_BLUE_GATT_PROCEDURE_COMPLETE (0x0C10)
+#define EVT_BLUE_GATT_ERROR_RESP (0x0C11)
+#define EVT_BLUE_GATT_DISC_READ_CHAR_BY_UUID_RESP (0x0C12)
+#define EVT_BLUE_GATT_WRITE_PERMIT_REQ (0x0C13)
+#define EVT_BLUE_GATT_READ_PERMIT_REQ (0x0C14)
+#define EVT_BLUE_GATT_READ_MULTI_PERMIT_REQ (0x0C15)
+#define EVT_BLUE_GATT_TX_POOL_AVAILABLE (0x0C16)
+#define EVT_BLUE_GATT_SERVER_CONFIRMATION_EVENT (0x0C17)
+#define EVT_BLUE_GATT_PREPARE_WRITE_PERMIT_REQ (0x0C18)
+#define EVT_BLUE_GAP_LIMITED_DISCOVERABLE (0x0400)
+#define EVT_BLUE_GAP_PAIRING_CMPLT (0x0401)
+#define EVT_BLUE_GAP_PASS_KEY_REQUEST (0x0402)
+#define EVT_BLUE_GAP_AUTHORIZATION_REQUEST (0x0403)
+#define EVT_BLUE_GAP_SLAVE_SECURITY_INITIATED (0X0404)
+#define EVT_BLUE_GAP_BOND_LOST (0X0405)
+#define EVT_BLUE_GAP_DEVICE_FOUND (0x0406)
+#define EVT_BLUE_GAP_PROCEDURE_COMPLETE (0x0407)
+#define EVT_BLUE_GAP_ADDR_NOT_RESOLVED (0x0408)
+#define EVT_BLUE_GAP_NUMERIC_COMPARISON_VALUE (0x0409)
+#define EVT_BLUE_GAP_KEYPRESS_NOTIFICATION (0x040A)
+#define EVT_BLUE_L2CAP_CONNECTION_UPDATE_REQ (0x0802)
+#define EVT_BLUE_L2CAP_CONNECTION_UPDATE_RESP (0x0800)
/* Macro to get RSSI from advertising report #0.
@@ -137,31 +132,32 @@ typedef uint8_t tBDAddr[6];
/* Error Codes as specified by the specification
*/
-#define ERR_CMD_SUCCESS HCI_SUCCESS_ERR_CODE /*0x00*/
-#define ERR_UNKNOWN_HCI_COMMAND HCI_UNKNOWN_HCI_COMMAND_ERR_CODE /*0x01*/
-#define ERR_UNKNOWN_CONN_IDENTIFIER HCI_UNKNOWN_CONNECTION_IDENTIFIER_ERR_CODE /*0x02*/
-#define ERR_AUTH_FAILURE HCI_AUTHENTICATION_FAILURE_ERR_CODE /*0x05*/
-#define ERR_PIN_OR_KEY_MISSING HCI_PIN_OR_KEY_MISSING_ERR_CODE /*0x06*/
-#define ERR_MEM_CAPACITY_EXCEEDED HCI_MEMORY_CAPACITY_EXCEEDED_ERR_CODE /*0x07*/
-#define ERR_CONNECTION_TIMEOUT HCI_CONNECTION_TIMEOUT_ERR_CODE /*0x08*/
-#define ERR_COMMAND_DISALLOWED HCI_COMMAND_DISALLOWED_ERR_CODE /*0x0C*/
-#define ERR_UNSUPPORTED_FEATURE HCI_UNSUPPORTED_FEATURE_OR_PARAMETER_VALUE_ERR_CODE /*0x11*/
-#define ERR_INVALID_HCI_CMD_PARAMS HCI_INVALID_HCI_COMMAND_PARAMETERS_ERR_CODE /*0x12*/
-#define ERR_RMT_USR_TERM_CONN HCI_REMOTE_USER_TERMINATED_CONNECTION_ERR_CODE /*0x13*/
+#define ERR_CMD_SUCCESS 0x00
+#define ERR_UNKNOWN_HCI_COMMAND 0x01
+#define ERR_UNKNOWN_CONN_IDENTIFIER 0x02
+#define ERR_AUTH_FAILURE 0x05
+#define ERR_PIN_OR_KEY_MISSING 0x06
+#define ERR_MEM_CAPACITY_EXCEEDED 0x07
+#define ERR_CONNECTION_TIMEOUT 0x08
+#define ERR_COMMAND_DISALLOWED 0x0C
+#define ERR_UNSUPPORTED_FEATURE 0x11
+#define ERR_INVALID_HCI_CMD_PARAMS 0x12
+#define ERR_RMT_USR_TERM_CONN 0x13
#define ERR_RMT_DEV_TERM_CONN_LOW_RESRCES 0x14
#define ERR_RMT_DEV_TERM_CONN_POWER_OFF 0x15
-#define ERR_LOCAL_HOST_TERM_CONN HCI_CONNECTION_TERMINATED_BY_LOCAL_HOST_ERR_CODE /*0x16*/
-#define ERR_UNSUPP_RMT_FEATURE HCI_LMP_FEATURE_ERR_CODE /*0x1A*/
-#define ERR_INVALID_LMP_PARAM HCI_INVALID_LL_PARAMETERS_ERR_CODE /*0x1E*/
-#define ERR_UNSPECIFIED_ERROR HCI_UNSPECIFIED_ERROR_ERR_CODE /*0x1F*/
-#define ERR_LL_RESP_TIMEOUT HCI_LL_RESPONSE_TIMEOUT_ERR_CODE /*0x22*/
-#define ERR_LMP_PDU_NOT_ALLOWED HCI_LMP_PDU_NOT_ALLOWED_ERR_CODE /*0x24*/
-#define ERR_INSTANT_PASSED HCI_INSTANT_PASSED_ERR_CODE /*0x28*/
+#define ERR_LOCAL_HOST_TERM_CONN 0x16
+#define ERR_UNSUPP_RMT_FEATURE 0x1A
+#define ERR_INVALID_LMP_PARAM 0x1E
+#define ERR_UNSPECIFIED_ERROR 0x1F
+#define ERR_LL_RESP_TIMEOUT 0x22
+#define ERR_LMP_PDU_NOT_ALLOWED 0x24
+#define ERR_INSTANT_PASSED 0x28
#define ERR_PAIR_UNIT_KEY_NOT_SUPP 0x29
-#define ERR_CONTROLLER_BUSY HCI_DIFFERENT_TRANSACTION_COLLISION_ERR_CODE /*0x3A*/
-#define ERR_DIRECTED_ADV_TIMEOUT HCI_ADVERTISING_TIMEOUT_ERR_CODE /*0x3C*/
-#define ERR_CONN_END_WITH_MIC_FAILURE HCI_CONNECTION_TERMINATED_DUE_TO_MIC_FAILURE_ERR_CODE /*0x3D*/
-#define ERR_CONN_FAILED_TO_ESTABLISH HCI_CONNECTION_FAILED_TO_BE_ESTABLISHED_ERR_CODE /*0x3E*/
+#define ERR_CONTROLLER_BUSY 0x3A
+#define ERR_DIRECTED_ADV_TIMEOUT 0x3C
+#define ERR_CONN_END_WITH_MIC_FAILURE 0x3D
+#define ERR_CONN_FAILED_TO_ESTABLISH 0x3E
+
/* ------------------------------------------------------------------------- */
@@ -218,19 +214,18 @@ typedef uint8_t tBDAddr[6];
#define SM_LINK_AUTHORIZED 0x02
#define SM_LINK_ENCRYPTED 0x04
-#define SM_PAIRING_SUCCESS SMP_PAIRING_STATUS_SUCCESS /*0x00*/
-#define SM_PAIRING_TIMEOUT SMP_PAIRING_STATUS_SMP_TIMEOUT /*0x01*/
-#define SM_PAIRING_FAILED SMP_PAIRING_STATUS_PAIRING_FAILED /*0x02*/
-
+#define SM_PAIRING_SUCCESS 0x00
+#define SM_PAIRING_TIMEOUT 0x01
+#define SM_PAIRING_FAILED 0x02
#define PASSKEY_ENTRY_FAILED 0x01
-#define ADV_IND GAP_ADV_IND /*0*/
-#define ADV_DIRECT_IND 1
-#define ADV_SCAN_IND GAP_ADV_SCAN_IND /*2*/
-#define ADV_NONCONN_IND GAP_ADV_NONCONN_IND /*3*/
-#define SCAN_RSP 4
-#define HIGH_DUTY_CYCLE_DIRECTED_ADV GAP_ADV_HIGH_DC_DIRECT_IND /*1*/
-#define LOW_DUTY_CYCLE_DIRECTED_ADV GAP_ADV_LOW_DC_DIRECT_IND /*4*/
+#define ADV_IND 0
+#define ADV_DIRECT_IND 1
+#define ADV_SCAN_IND 2
+#define ADV_NONCONN_IND 3
+#define SCAN_RSP 4
+#define HIGH_DUTY_CYCLE_DIRECTED_ADV 1
+#define LOW_DUTY_CYCLE_DIRECTED_ADV 4
#define ADV_INTERVAL_LOWEST_CONN 0X0020
#define ADV_INTERVAL_HIGHEST 0X4000
diff --git a/Middlewares/ST/STM32_WPAN/ble/core/ble_std.h b/Middlewares/ST/STM32_WPAN/ble/core/ble_std.h
index fb81cbeb9..1bdd84013 100644
--- a/Middlewares/ST/STM32_WPAN/ble/core/ble_std.h
+++ b/Middlewares/ST/STM32_WPAN/ble/core/ble_std.h
@@ -43,75 +43,35 @@
#define HCI_EVENT_PKT_MAX_SIZE \
(HCI_EVENT_HDR_SIZE + HCI_EVENT_MAX_PARAM_LEN)
-/* HCI Event codes */
-
-/* HCI_DISCONNECTION_COMPLETE_EVENT code: */
-#define HCI_DISCONNECTION_COMPLETE_EVT_CODE 0x05
-
-/* HCI_ENCRYPTION_CHANGE_EVENT code: */
-#define HCI_ENCRYPTION_CHANGE_EVT_CODE 0x08
-
-/* HCI_READ_REMOTE_VERSION_INFORMATION_COMPLETE EVENT code: */
-#define HCI_READ_REMOTE_VERSION_INFORMATION_COMPLETE_EVT_CODE 0x0C
-
-/* HCI_COMMAND_COMPLETE_EVENT code: */
- #define HCI_COMMAND_COMPLETE_EVT_CODE 0x0E
-
-/* HCI_COMMAND_STATUS_EVENT code: */
- #define HCI_COMMAND_STATUS_EVT_CODE 0x0F
-
-/* HCI_HARDWARE_ERROR_EVENT code: */
- #define HCI_HARDWARE_ERROR_EVT_CODE 0x10
-
-/* HCI_NUMBER_OF_COMPLETED_PACKETS_EVENT code: */
- #define HCI_NUMBER_OF_COMPLETED_PACKETS_EVT_CODE 0x13
-
-/* HCI_DATA_BUFFER_OVERFLOW_EVENT code: */
- #define HCI_DATA_BUFFER_OVERFLOW_EVT_CODE 0x1A
-
-/* HCI_ENCRYPTION_KEY_REFRESH_COMPLETE_EVENT code: */
-#define HCI_ENCRYPTION_KEY_REFRESH_COMPLETE_EVT_CODE 0x30
-
-/* */
-#define HCI_LE_META_EVT_CODE 0x3E
-
-/* */
-#define HCI_VENDOR_SPECIFIC_DEBUG_EVT_CODE 0xFF
-
-/* HCI LE SubEvent codes */
-
- /* HCI_LE_CONNECTION_COMPLETE_EVENT code: */
- #define HCI_LE_CONNECTION_COMPLETE_SUBEVT_CODE 0x01
-
- /* HCI_LE_ADVERTISING_REPORT_EVENT code: */
- #define HCI_LE_ADVERTISING_REPORT_SUBEVT_CODE 0x02
-
- /* HCI_LE_CONNECTION_UPDATE_COMPLETE_EVENT code: */
- #define HCI_LE_CONNECTION_UPDATE_COMPLETE_SUBEVT_CODE 0x03
-
- /* HCI_LE_READ_REMOTE_FEATURES_COMPLETE_EVENT code: */
- #define HCI_LE_READ_REMOTE_FEATURES_COMPLETE_SUBEVT_CODE 0x04
-
- /* HCI_LE_LONG_TERM_KEY_REQUEST_EVENT code: */
- #define HCI_LE_LONG_TERM_KEY_REQUEST_SUBEVT_CODE 0x05
-
- /* HCI_LE_DATA_LENGTH_CHANGE_EVENT code: */
- #define HCI_LE_DATA_LENGTH_CHANGE_SUBEVT_CODE 0x07
-
- /* HCI_LE_READ_LOCAL_P256_PUBLIC_KEY_COMPLETE_EVENT code: */
- #define HCI_LE_READ_LOCAL_P256_PUBLIC_KEY_COMPLETE_SUBEVT_CODE 0x08
-
- /* HCI_LE_GENERATE_DHKEY_COMPLETE_EVENT code: */
- #define HCI_LE_GENERATE_DHKEY_COMPLETE_SUBEVT_CODE 0x09
-
- /* HCI_LE_ENHANCED_CONNECTION_COMPLETE_EVENT code: */
- #define HCI_LE_ENHANCED_CONNECTION_COMPLETE_SUBEVT_CODE 0x0A
-
- /* HCI_LE_DIRECT_ADVERTISING_REPORT_EVENT code: */
- #define HCI_LE_DIRECT_ADVERTISING_REPORT_SUBEVT_CODE 0x0B
-
- /* HCI_LE_PHY_UPDATE_COMPLETE_EVENT code: */
- #define HCI_LE_PHY_UPDATE_COMPLETE_SUBEVT_CODE 0x0C
+/* HCI event code */
+#define HCI_DISCONNECTION_COMPLETE_EVT_CODE 0x05
+#define HCI_ENCRYPTION_CHANGE_EVT_CODE 0x08
+#define HCI_READ_REMOTE_VERSION_INFORMATION_COMPLETE_EVT_CODE 0x0C
+#define HCI_COMMAND_COMPLETE_EVT_CODE 0x0E
+#define HCI_COMMAND_STATUS_EVT_CODE 0x0F
+#define HCI_HARDWARE_ERROR_EVT_CODE 0x10
+#define HCI_NUMBER_OF_COMPLETED_PACKETS_EVT_CODE 0x13
+#define HCI_DATA_BUFFER_OVERFLOW_EVT_CODE 0x1A
+#define HCI_ENCRYPTION_KEY_REFRESH_COMPLETE_EVT_CODE 0x30
+#define HCI_LE_META_EVT_CODE 0x3E
+#define HCI_VENDOR_SPECIFIC_DEBUG_EVT_CODE 0xFF
+
+/* HCI LE subevent code */
+#define HCI_LE_CONNECTION_COMPLETE_SUBEVT_CODE 0x01
+#define HCI_LE_ADVERTISING_REPORT_SUBEVT_CODE 0x02
+#define HCI_LE_CONNECTION_UPDATE_COMPLETE_SUBEVT_CODE 0x03
+#define HCI_LE_READ_REMOTE_FEATURES_COMPLETE_SUBEVT_CODE 0x04
+#define HCI_LE_LONG_TERM_KEY_REQUEST_SUBEVT_CODE 0x05
+#define HCI_LE_DATA_LENGTH_CHANGE_SUBEVT_CODE 0x07
+#define HCI_LE_READ_LOCAL_P256_PUBLIC_KEY_COMPLETE_SUBEVT_CODE 0x08
+#define HCI_LE_GENERATE_DHKEY_COMPLETE_SUBEVT_CODE 0x09
+#define HCI_LE_ENHANCED_CONNECTION_COMPLETE_SUBEVT_CODE 0x0A
+#define HCI_LE_DIRECT_ADVERTISING_REPORT_SUBEVT_CODE 0x0B
+#define HCI_LE_PHY_UPDATE_COMPLETE_SUBEVT_CODE 0x0C
+#define HCI_LE_EXTENDED_ADVERTISING_REPORT_SUBEVT_CODE 0x0D
+#define HCI_LE_SCAN_TIMEOUT_SUBEVT_CODE 0x11
+#define HCI_LE_ADVERTISING_SET_TERMINATED_SUBEVT_CODE 0x12
+#define HCI_LE_SCAN_REQUEST_RECEIVED_SUBEVT_CODE 0x13
/* HCI error code */
#define HCI_SUCCESS_ERR_CODE 0x00
diff --git a/Middlewares/ST/STM32_WPAN/ble/core/doc/STM32WB_BLE_Wireless_Interface.html b/Middlewares/ST/STM32_WPAN/ble/core/doc/STM32WB_BLE_Wireless_Interface.html
index d88efa0af..e9992c8b3 100644
--- a/Middlewares/ST/STM32_WPAN/ble/core/doc/STM32WB_BLE_Wireless_Interface.html
+++ b/Middlewares/ST/STM32_WPAN/ble/core/doc/STM32WB_BLE_Wireless_Interface.html
@@ -636,7 +636,7 @@ padding-right: 0px;
}
td.gsib_a {padding:0px;padding-top:4px;padding-left:3px;}
-</style></head><body><font face="arial"><h1>STM32WB BLE Wireless Interface</h1><p>This document describes the STM32WB BLE Application Commands Interface (ACI) and Host Commands Interface (HCI).</p><p><a href="https://www.st.com/en/microcontrollers/stm32wb-series.html">STM32WB Series website</a></p><h2>Revision history</h2><p>December 2018 - Rev 1.0 - First release for interface 1.0 </p><p>February 2019 - Rev 1.1 - Modified HCI_HARDWARE_ERROR_EVENT comment</p><p>March 2019 - Rev 1.2 - Removed unused event documentation </p><p>March 2019 - Rev 1.3 - Modification ACI_HAL_FW_ERROR_EVENT error code</p><p>March 2019 - Rev 1.4 - Changed default mask of HCI_SET_EVENT_MASK </p><p>May 2019 - Rev 1.5 - ACI_GATT_NOTIFICATION_EXT_EVENT added</p><p>June 2019 - Rev 1.6 - Changed comment on usage of Char Handles in multiple ACI_GATT commands; Added ACI_GATT_INDICATION_EXT_EVENT</p><p>June 2019 - Rev 1.7 - Changed descriptions of ACI_ATT_READ_BY_TYPE_REQ and ACI_GATT_READ_USING_CHAR_UUID</p><p>July 2019 - Rev 1.8 - Reworked error codes section; Added GAP_ prefix to the GAP procedure bitmap definitions</p><p>September 2019 - Rev 1.9 - Added ACI_GATT_READ_EXT_EVENT; Modified ACI_GAP_CONFIGURE_WHITELIST comment</p><p>October 2019 - Rev 1.10 - Changed descriptions of ACI_GATT_WRITE_WITHOUT_RESP and ACI_GATT_SIGNED_WRITE_WITHOUT_RESP; Removed obsolete configuration data elements</p><p>November 2019 - Rev 1.11 - Completed description of ACI_GAP_INIT; Added specific pairing status definitions</p><p>November 2019 - Rev 1.12 - Fixed status error codes</p><p>January 2020 - Rev 1.13 - Removed DIV unused configuration data; Fixed naming of HCI_LE_READ_REMOTE_FEATURES command and complete event</p><p>March 2020 - Rev 1.14 - Removed unused HCI_Data_Buffer_Overflow event; Fixed naming of FW_Error_Type possible values; Fixed pairing status possible values</p><p>March 2020 - Rev 1.15 - Added GAP scan timeout value</p><p>April 2020 - Rev 1.16 - Fixed various format issues; Added LO and PO columns for command and event tables.</p><p>May 2020 - Rev 1.17 - Updated PO stack features; Added comment in HCI_LE_ADVERTISING_REPORT_EVENT description.</p><p>June 2020 - Rev 1.18 - Added BO column for command and event tables; Fixed advertising commands description; Fixed various format issues.</p><p>June 2020 - Rev 1.19 - Completed interval possible values for ACI_GAP_SET_DIRECT_CONNECTABLE.</p><p>July 2020 - Rev 1.20 - Added HCI_LE_SET_PRIVACY_MODE.</p><p>July 2020 - Rev 1.21 - Updated "beacon only" stack features.</p><p>September 2020 - Rev 1.22 - Fixed various minor issues.</p><p>November 2020 - Rev 1.23 - Added connection-oriented channels feature; Added HCI_LE_READ_TRANSMIT_POWER; Updated PO variant.</p><p>December 2020 - Rev 1.24 - Added BF column for command and event tables.</p><p>January 2021 - Rev 1.25 - Added Link_Status possible values.</p><h2>Contents</h2><p><a href="#HCI/ACI commands_anchor">HCI/ACI commands</a></p><p><a href="#HCI/ACI events_anchor">HCI/ACI events</a></p><p><a href="#Status error codes_anchor">Status error codes</a></p><h1><a name="HCI/ACI commands_anchor">HCI/ACI commands</a></h1><p><a href="#HCI commands_anchor">HCI commands</a></p><p><a href="#HCI TESTING commands_anchor">HCI TESTING commands</a></p><p><a href="#ACI HAL commands_anchor">ACI HAL commands</a></p><p><a href="#ACI GAP commands_anchor">ACI GAP commands</a></p><p><a href="#ACI GATT/ATT commands_anchor">ACI GATT/ATT commands</a></p><p><a href="#ACI L2CAP commands_anchor">ACI L2CAP commands</a></p><p>Note: in the command tables, a "Y" in the "BF", "PO", "LO" or "BO" column, means that the corresponding command applies to the "Basic Features", "Peripheral Only", "Link Layer Only" or "Beacon Only" variant of the BLE stack, respectively.</p><h2><a name="HCI commands_anchor">HCI commands</a></h2><h2></h2><table width="800" border="1" class="reference">
+</style></head><body><font face="arial"><h1>STM32WB BLE Wireless Interface</h1><p>This document describes the STM32WB BLE Application Commands Interface (ACI) and Host Commands Interface (HCI).</p><p><a href="https://www.st.com/en/microcontrollers/stm32wb-series.html">STM32WB Series website</a></p><h2>Revision history</h2><p>December 2018 - Rev 1.0 - First release for interface 1.0 </p><p>February 2019 - Rev 1.1 - Modified HCI_HARDWARE_ERROR_EVENT comment</p><p>March 2019 - Rev 1.2 - Removed unused event documentation </p><p>March 2019 - Rev 1.3 - Modification ACI_HAL_FW_ERROR_EVENT error code</p><p>March 2019 - Rev 1.4 - Changed default mask of HCI_SET_EVENT_MASK </p><p>May 2019 - Rev 1.5 - ACI_GATT_NOTIFICATION_EXT_EVENT added</p><p>June 2019 - Rev 1.6 - Changed comment on usage of Char Handles in multiple ACI_GATT commands; Added ACI_GATT_INDICATION_EXT_EVENT</p><p>June 2019 - Rev 1.7 - Changed descriptions of ACI_ATT_READ_BY_TYPE_REQ and ACI_GATT_READ_USING_CHAR_UUID</p><p>July 2019 - Rev 1.8 - Reworked error codes section; Added GAP_ prefix to the GAP procedure bitmap definitions</p><p>September 2019 - Rev 1.9 - Added ACI_GATT_READ_EXT_EVENT; Modified ACI_GAP_CONFIGURE_WHITELIST comment</p><p>October 2019 - Rev 1.10 - Changed descriptions of ACI_GATT_WRITE_WITHOUT_RESP and ACI_GATT_SIGNED_WRITE_WITHOUT_RESP; Removed obsolete configuration data elements</p><p>November 2019 - Rev 1.11 - Completed description of ACI_GAP_INIT; Added specific pairing status definitions</p><p>November 2019 - Rev 1.12 - Fixed status error codes</p><p>January 2020 - Rev 1.13 - Removed DIV unused configuration data; Fixed naming of HCI_LE_READ_REMOTE_FEATURES command and complete event</p><p>March 2020 - Rev 1.14 - Removed unused HCI_Data_Buffer_Overflow event; Fixed naming of FW_Error_Type possible values; Fixed pairing status possible values</p><p>March 2020 - Rev 1.15 - Added GAP scan timeout value</p><p>April 2020 - Rev 1.16 - Fixed various format issues; Added LO and PO columns for command and event tables.</p><p>May 2020 - Rev 1.17 - Updated PO stack features; Added comment in HCI_LE_ADVERTISING_REPORT_EVENT description.</p><p>June 2020 - Rev 1.18 - Added BO column for command and event tables; Fixed advertising commands description; Fixed various format issues.</p><p>June 2020 - Rev 1.19 - Completed interval possible values for ACI_GAP_SET_DIRECT_CONNECTABLE.</p><p>July 2020 - Rev 1.20 - Added HCI_LE_SET_PRIVACY_MODE.</p><p>July 2020 - Rev 1.21 - Updated "beacon only" stack features.</p><p>September 2020 - Rev 1.22 - Fixed various minor issues.</p><p>November 2020 - Rev 1.23 - Added connection-oriented channels feature; Added HCI_LE_READ_TRANSMIT_POWER; Updated PO variant.</p><p>December 2020 - Rev 1.24 - Added BF column for command and event tables.</p><p>January 2021 - Rev 1.25 - Added Link_Status possible values.</p><p>January 2021 - Rev 1.26 - Fixed some specification references.</p><p>February 2021 - Rev 1.27 - Added ACI_HAL_SET_SLAVE_LATENCY; Updated comments of ACI_HAL_WRITE_CONFIG_DATA and ACI_HAL_READ_CONFIG_DATA.</p><h2>Contents</h2><p><a href="#HCI/ACI commands_anchor">HCI/ACI commands</a></p><p><a href="#HCI/ACI events_anchor">HCI/ACI events</a></p><p><a href="#Status error codes_anchor">Status error codes</a></p><h1><a name="HCI/ACI commands_anchor">HCI/ACI commands</a></h1><p><a href="#HCI commands_anchor">HCI commands</a></p><p><a href="#HCI TESTING commands_anchor">HCI TESTING commands</a></p><p><a href="#ACI HAL commands_anchor">ACI HAL commands</a></p><p><a href="#ACI GAP commands_anchor">ACI GAP commands</a></p><p><a href="#ACI GATT/ATT commands_anchor">ACI GATT/ATT commands</a></p><p><a href="#ACI L2CAP commands_anchor">ACI L2CAP commands</a></p><p>Note: in the command tables, a "Y" in the "BF", "PO", "LO" or "BO" column, means that the corresponding command applies to the "Basic Features", "Peripheral Only", "Link Layer Only" or "Beacon Only" variant of the BLE stack, respectively.</p><h2><a name="HCI commands_anchor">HCI commands</a></h2><h2></h2><table width="800" border="1" class="reference">
<tr><th>Command</th><th>Opcode</th><th>BF</th><th>PO</th><th>LO</th><th>BO</th></tr>
<tr><td><a href="#HCI_DISCONNECT_anchor">HCI_DISCONNECT</a></td><td><p>0x0406</p>
</td><td></td><td></td><td><p>Y</p>
@@ -874,7 +874,7 @@ td.gsib_a {padding:0px;padding-top:4px;padding-left:3px;}
<tr><td><a href="#HCI_LE_SET_PRIVACY_MODE_anchor">HCI_LE_SET_PRIVACY_MODE</a></td><td><p>0x204E</p>
</td><td></td><td></td><td><p>Y</p>
</td><td></td></tr>
-</table><h2><a name="HCI_DISCONNECT_anchor">HCI_DISCONNECT</a></h2><h3>Description</h3><p>The <a href="#HCI_DISCONNECT_anchor">HCI_DISCONNECT</a> is used to terminate an existing connection. The Connection_Handle command parameter indicates which connection is to be disconnected. The Reason command parameter indicates the reason for ending the connection. The remote Controller will receive the Reason command parameter in the <a href="#HCI_DISCONNECTION_COMPLETE_EVENT_anchor">HCI_DISCONNECTION_COMPLETE_EVENT</a> event. All synchronous connections on a physical link should be disconnected before the ACL connection on the same physical connection is disconnected.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.1.6)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="HCI_DISCONNECT_anchor">HCI_DISCONNECT</a></h2><h3>Description</h3><p>The <a href="#HCI_DISCONNECT_anchor">HCI_DISCONNECT</a> is used to terminate an existing connection. The Connection_Handle command parameter indicates which connection is to be disconnected. The Reason command parameter indicates the reason for ending the connection. The remote Controller will receive the Reason command parameter in the <a href="#HCI_DISCONNECTION_COMPLETE_EVENT_anchor">HCI_DISCONNECTION_COMPLETE_EVENT</a> event. All synchronous connections on a physical link should be disconnected before the ACL connection on the same physical connection is disconnected.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.1.6].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -890,7 +890,7 @@ td.gsib_a {padding:0px;padding-top:4px;padding-left:3px;}
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#HCI_DISCONNECTION_COMPLETE_EVENT_anchor">HCI_DISCONNECTION_COMPLETE_EVENT</a></li><h2><a name="HCI_READ_REMOTE_VERSION_INFORMATION_anchor">HCI_READ_REMOTE_VERSION_INFORMATION</a></h2><h3>Description</h3><p>This command will obtain the values for the version information for the remote device identified by the Connection_Handle parameter. The Connection_Handle must be a Connection_Handle for an ACL or LE connection.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.1.23)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#HCI_DISCONNECTION_COMPLETE_EVENT_anchor">HCI_DISCONNECTION_COMPLETE_EVENT</a></li><h2><a name="HCI_READ_REMOTE_VERSION_INFORMATION_anchor">HCI_READ_REMOTE_VERSION_INFORMATION</a></h2><h3>Description</h3><p>This command will obtain the values for the version information for the remote device identified by the Connection_Handle parameter. The Connection_Handle must be a Connection_Handle for an ACL or LE connection.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.1.23].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -902,7 +902,7 @@ td.gsib_a {padding:0px;padding-top:4px;padding-left:3px;}
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#HCI_READ_REMOTE_VERSION_INFORMATION_COMPLETE_EVENT_anchor">HCI_READ_REMOTE_VERSION_INFORMATION_COMPLETE_EVENT</a></li><h2><a name="HCI_SET_EVENT_MASK_anchor">HCI_SET_EVENT_MASK</a></h2><h3>Description</h3><p>The Set_Event_Mask command is used to control which events are generated by the HCI for the Host. If the bit in the Event_Mask is set to a one, then the event associated with that bit will be enabled. For an LE Controller, the LE Meta Event bit in the Event_Mask shall enable or disable all LE events in the LE Meta Event (see Section 7.7.65). The Host has to deal with each event that occurs. The event mask allows the Host to control how much it is interrupted.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.3.1)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#HCI_READ_REMOTE_VERSION_INFORMATION_COMPLETE_EVENT_anchor">HCI_READ_REMOTE_VERSION_INFORMATION_COMPLETE_EVENT</a></li><h2><a name="HCI_SET_EVENT_MASK_anchor">HCI_SET_EVENT_MASK</a></h2><h3>Description</h3><p>The Set_Event_Mask command is used to control which events are generated by the HCI for the Host. If the bit in the Event_Mask is set to a one, then the event associated with that bit will be enabled. For an LE Controller, the LE Meta Event bit in the Event_Mask shall enable or disable all LE events in the LE Meta Event. The Host has to deal with each event that occurs. The event mask allows the Host to control how much it is interrupted.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.3.1].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Event_Mask</p>
</td><td><p>8</p>
@@ -914,13 +914,13 @@ td.gsib_a {padding:0px;padding-top:4px;padding-left:3px;}
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_RESET_anchor">HCI_RESET</a></h2><h3>Description</h3><p>The Reset command resets the Link Layer on an LE Controller. The Reset command shall not affect the used HCI transport layer since the HCI transport layers may have reset mechanisms of their own. After the reset is completed, the current operational state is lost, the Controller enters standby mode and the Controller automatically reverts to the default values for the parameters for which default values are defined in the specification.<br>Note: The Reset command does not necessarily perform a hardware reset. This is implementation defined.<br>The Host shall not send additional HCI commands before the Command Complete event related to the Reset command has been received.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.3.2)</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_RESET_anchor">HCI_RESET</a></h2><h3>Description</h3><p>The Reset command resets the Link Layer on an LE Controller. The Reset command shall not affect the used HCI transport layer since the HCI transport layers may have reset mechanisms of their own. After the reset is completed, the current operational state is lost, the Controller enters standby mode and the Controller automatically reverts to the default values for the parameters for which default values are defined in the specification.<br>Note: The Reset command does not necessarily perform a hardware reset. This is implementation defined.<br>The Host shall not send additional HCI commands before the Command Complete event related to the Reset command has been received.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.3.2].</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_READ_TRANSMIT_POWER_LEVEL_anchor">HCI_READ_TRANSMIT_POWER_LEVEL</a></h2><h3>Description</h3><p>This command reads the values for the Transmit_Power_Level parameter for the specified Connection_Handle. The Connection_Handle shall be a Connection_Handle for an ACL connection.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.3.35)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_READ_TRANSMIT_POWER_LEVEL_anchor">HCI_READ_TRANSMIT_POWER_LEVEL</a></h2><h3>Description</h3><p>This command reads the values for the Transmit_Power_Level parameter for the specified Connection_Handle. The Connection_Handle shall be a Connection_Handle for an ACL connection.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.3.35].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -945,7 +945,7 @@ td.gsib_a {padding:0px;padding-top:4px;padding-left:3px;}
</td><td><p>Size: 1 Octet (signed integer)
Units: dBm</p>
</td><td><li>-30 ... 20</li></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL_anchor">HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL</a></h2><h3>Description</h3><p>This command is used by the Host to turn flow control on or off for data and/or voice sent in the direction from the Controller to the Host. If flow control is turned off, the Host should not send the Host_Number_Of_Completed_Packets command. That command will be ignored by the Controller if it is sent by the Host and flow control is off. If flow control is turned on for HCI ACL Data Packets and off for HCI synchronous Data Packets, Host_Number_Of_Completed_Packets commands sent by the Host should only contain Connection_Handles for ACL connections. If flow control is turned off for HCI ACL Data Packets and on for HCI synchronous Data Packets, Host_Number_Of_Completed_Packets commands sent by the Host should only contain Connection_Handles for synchronous connections. If flow control is turned on for HCI ACL Data Packets and HCI synchronous Data Packets, the Host will send Host_Number_Of_Completed_Packets commands both for ACL connections and synchronous connections.<br>The Flow_Control_Enable parameter shall only be changed if no connections exist.<br>(See Bluetooth Spec v.5.0, Vol. 2, Part E, 7.3.38)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL_anchor">HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL</a></h2><h3>Description</h3><p>This command is used by the Host to turn flow control on or off for data and/or voice sent in the direction from the Controller to the Host. If flow control is turned off, the Host should not send the Host_Number_Of_Completed_Packets command. That command will be ignored by the Controller if it is sent by the Host and flow control is off. If flow control is turned on for HCI ACL Data Packets and off for HCI synchronous Data Packets, Host_Number_Of_Completed_Packets commands sent by the Host should only contain Connection_Handles for ACL connections. If flow control is turned off for HCI ACL Data Packets and on for HCI synchronous Data Packets, Host_Number_Of_Completed_Packets commands sent by the Host should only contain Connection_Handles for synchronous connections. If flow control is turned on for HCI ACL Data Packets and HCI synchronous Data Packets, the Host will send Host_Number_Of_Completed_Packets commands both for ACL connections and synchronous connections.<br>The Flow_Control_Enable parameter shall only be changed if no connections exist.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.3.38].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Flow_Control_Enable</p>
</td><td><p>1</p>
@@ -957,7 +957,7 @@ Units: dBm</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><h2><a name="HCI_HOST_BUFFER_SIZE_anchor">HCI_HOST_BUFFER_SIZE</a></h2><h3>Description</h3><p>The Host_Buffer_Size command is used by the Host to notify the Controller about the maximum size of the data portion of HCI ACL and synchronous Data Packets sent from the Controller to the Host. The Controller shall segment the data to be transmitted from the Controller to the Host according to these sizes, so that the HCI Data Packets will contain data with up to these sizes. The Host_Buffer_Size command also notifies the Controller about the total number of HCI ACL and synchronous Data Packets that can be stored in the data buffers of the Host. If flow control from the Controller to the Host is turned off, and the Host_Buffer_Size command has not been issued by the Host, this means that the Controller will send HCI Data Packets to the Host with any lengths the Controller wants to use, and it is assumed that the data buffer sizes of the Host are unlimited. If flow control from the Controller to the Host is turned on, the Host_Buffer_Size command shall after a power-on or a reset always be sent by the Host before the first Host_Number_Of_Completed_Packets command is sent.<br>The Set Controller To Host Flow Control Command is used to turn flow control on or off.<br>The Host_ACL_Data_Packet_Length command parameter will be used to determine the size of the L2CAP segments contained in ACL Data Packets, which are transferred from the Controller to the Host.<br>The Host_Synchronous_Data_Packet_Length command parameter is used to determine the maximum size of HCI synchronous Data Packets. Both the Host and the Controller shall support command and event packets, where the data portion (excluding header) contained in the packets is 255 octets in size.<br>The Host_Total_Num_ACL_Data_Packets command parameter contains the total number of HCI ACL Data Packets that can be stored in the data buffers of the Host. The Controller will determine how the buffers are to be divided between different Connection_Handles.<br>The Host_Total_Num_Synchronous_Data_Packets command parameter gives the same information for HCI synchronous Data Packets.<br>Note: The Host_ACL_Data_Packet_Length and Host_Synchronous_Data_Packet_Length command parameters do not include the length of the HCI Data Packet header.<br>(See Bluetooth Spec v.5.0, Vol. 2, Part E, 7.3.39)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><h2><a name="HCI_HOST_BUFFER_SIZE_anchor">HCI_HOST_BUFFER_SIZE</a></h2><h3>Description</h3><p>The Host_Buffer_Size command is used by the Host to notify the Controller about the maximum size of the data portion of HCI ACL and synchronous Data Packets sent from the Controller to the Host. The Controller shall segment the data to be transmitted from the Controller to the Host according to these sizes, so that the HCI Data Packets will contain data with up to these sizes. The Host_Buffer_Size command also notifies the Controller about the total number of HCI ACL and synchronous Data Packets that can be stored in the data buffers of the Host. If flow control from the Controller to the Host is turned off, and the Host_Buffer_Size command has not been issued by the Host, this means that the Controller will send HCI Data Packets to the Host with any lengths the Controller wants to use, and it is assumed that the data buffer sizes of the Host are unlimited. If flow control from the Controller to the Host is turned on, the Host_Buffer_Size command shall after a power-on or a reset always be sent by the Host before the first Host_Number_Of_Completed_Packets command is sent.<br>The Set Controller To Host Flow Control Command is used to turn flow control on or off.<br>The Host_ACL_Data_Packet_Length command parameter will be used to determine the size of the L2CAP segments contained in ACL Data Packets, which are transferred from the Controller to the Host.<br>The Host_Synchronous_Data_Packet_Length command parameter is used to determine the maximum size of HCI synchronous Data Packets. Both the Host and the Controller shall support command and event packets, where the data portion (excluding header) contained in the packets is 255 octets in size.<br>The Host_Total_Num_ACL_Data_Packets command parameter contains the total number of HCI ACL Data Packets that can be stored in the data buffers of the Host. The Controller will determine how the buffers are to be divided between different Connection_Handles.<br>The Host_Total_Num_Synchronous_Data_Packets command parameter gives the same information for HCI synchronous Data Packets.<br>Note: The Host_ACL_Data_Packet_Length and Host_Synchronous_Data_Packet_Length command parameters do not include the length of the HCI Data Packet header.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.3.39].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Host_ACL_Data_Packet_Length</p>
</td><td><p>2</p>
@@ -981,7 +981,7 @@ Units: dBm</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><h2><a name="HCI_HOST_NUMBER_OF_COMPLETED_PACKETS_anchor">HCI_HOST_NUMBER_OF_COMPLETED_PACKETS</a></h2><h3>Description</h3><p>The Host_Number_Of_Completed_Packets command is used by the Host to indicate to the Controller the number of HCI Data Packets that have been completed for each Connection_Handle since the previous Host_Number_Of_Completed_Packets command was sent to the Controller. This means that the corresponding buffer space has been freed in the Host. Based on this information, and the Host_Total_Num_ACL_Data_Packets and Host_Total_Num_Synchronous_Data_Packets command parameters of the Host_Buffer_Size command, the Controller can determine for which Connection_Handles the following HCI Data Packets should be sent to the Host. The command should only be issued by the Host if flow control in the direction from the Controller to the Host is on and there is at least one connection, or if the Controller is in local loopback mode. Otherwise, the command will be ignored by the Controller. When the Host has completed one or more HCI Data Packet(s) it shall send a Host_Number_Of_Completed_Packets command to the Controller, until it finally reports that all pending HCI Data Packets have been completed. The frequency at which this command is sent is manufacturer specific.<br>The Set Controller To Host Flow Control Command is used to turn flow control on or off. If flow control from the Controller to the Host is turned on, the Host_Buffer_Size command shall always be sent by the Host after a power-on or a reset before the first Host_Number_Of_Completed_Packets command is sent.<br>Note: The Host_Number_Of_Completed_Packets command is a special command in the sense that no event is normally generated after the command has completed. The command may be sent at any time by the Host when there is at least one connection, or if the Controller is in local loopback mode independent of other commands. The normal flow control for commands is not used for the Host_Number_Of_Completed_Packets command.<br>(See Bluetooth Spec v.5.0, Vol. 2, Part E, 7.3.40)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><h2><a name="HCI_HOST_NUMBER_OF_COMPLETED_PACKETS_anchor">HCI_HOST_NUMBER_OF_COMPLETED_PACKETS</a></h2><h3>Description</h3><p>The Host_Number_Of_Completed_Packets command is used by the Host to indicate to the Controller the number of HCI Data Packets that have been completed for each Connection_Handle since the previous Host_Number_Of_Completed_Packets command was sent to the Controller. This means that the corresponding buffer space has been freed in the Host. Based on this information, and the Host_Total_Num_ACL_Data_Packets and Host_Total_Num_Synchronous_Data_Packets command parameters of the Host_Buffer_Size command, the Controller can determine for which Connection_Handles the following HCI Data Packets should be sent to the Host. The command should only be issued by the Host if flow control in the direction from the Controller to the Host is on and there is at least one connection, or if the Controller is in local loopback mode. Otherwise, the command will be ignored by the Controller. When the Host has completed one or more HCI Data Packet(s) it shall send a Host_Number_Of_Completed_Packets command to the Controller, until it finally reports that all pending HCI Data Packets have been completed. The frequency at which this command is sent is manufacturer specific.<br>The Set Controller To Host Flow Control Command is used to turn flow control on or off. If flow control from the Controller to the Host is turned on, the Host_Buffer_Size command shall always be sent by the Host after a power-on or a reset before the first Host_Number_Of_Completed_Packets command is sent.<br>Note: The Host_Number_Of_Completed_Packets command is a special command in the sense that no event is normally generated after the command has completed. The command may be sent at any time by the Host when there is at least one connection, or if the Controller is in local loopback mode independent of other commands. The normal flow control for commands is not used for the Host_Number_Of_Completed_Packets command.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.3.40].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Number_Of_Handles</p>
</td><td><p>1</p>
@@ -998,7 +998,7 @@ Units: dBm</p>
</td><td><p>The number of HCI Data Packets that have been completed for the associated Connection_Handle since the previous time the event was returned.</p>
</td><td><p>0x0000-0xFFFF</p>
</td></tr>
-</table><h3>Output parameters</h3><p>None</p><h3>Events generated</h3><p>Normally, no event is generated after the Host_Number_Of_Completed_Packets command has completed. However, if the Host_Number_Of_Completed_Packets command contains one or more invalid parameters, the Controller shall return a Command Complete event with a failure status indicating the Invalid HCI Command Parameters error code. The Host may send the Host_Number_Of_Completed_Packets command at any time when there is at least one connection, or if the Controller is in local loopback mode. The normal flow control for commands is not used for this command.</p><h2><a name="HCI_READ_LOCAL_VERSION_INFORMATION_anchor">HCI_READ_LOCAL_VERSION_INFORMATION</a></h2><h3>Description</h3><p>This command reads the values for the version information for the local Controller. The HCI Version information defines the version information of the HCI layer. The LMP/PAL Version information defines the version of the LMP or PAL. The Manufacturer_Name information indicates the manufacturer of the local device. The HCI Revision and LMP/PAL Subversion are implementation dependent.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.4.1)</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Output parameters</h3><p>None</p><h3>Events generated</h3><p>Normally, no event is generated after the Host_Number_Of_Completed_Packets command has completed. However, if the Host_Number_Of_Completed_Packets command contains one or more invalid parameters, the Controller shall return a Command Complete event with a failure status indicating the Invalid HCI Command Parameters error code. The Host may send the Host_Number_Of_Completed_Packets command at any time when there is at least one connection, or if the Controller is in local loopback mode. The normal flow control for commands is not used for this command.</p><h2><a name="HCI_READ_LOCAL_VERSION_INFORMATION_anchor">HCI_READ_LOCAL_VERSION_INFORMATION</a></h2><h3>Description</h3><p>This command reads the values for the version information for the local Controller. The HCI Version information defines the version information of the HCI layer. The LMP/PAL Version information defines the version of the LMP or PAL. The Manufacturer_Name information indicates the manufacturer of the local device. The HCI Revision and LMP/PAL Subversion are implementation dependent.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.4.1].</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -1027,7 +1027,7 @@ See Bluetooth Assigned Numbers (<a class="reference external" href="https://www.
</td><td><p>Subversion of the Current LMP or PAL in the Controller. This value is
implementation dependent.</p>
</td><td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_READ_LOCAL_SUPPORTED_COMMANDS_anchor">HCI_READ_LOCAL_SUPPORTED_COMMANDS</a></h2><h3>Description</h3><p>This command reads the list of HCI commands supported for the local Controller. This command shall return the Supported_Commands configuration parameter. It is implied that if a command is listed as supported, the feature underlying that command is also supported.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.4.2)</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_READ_LOCAL_SUPPORTED_COMMANDS_anchor">HCI_READ_LOCAL_SUPPORTED_COMMANDS</a></h2><h3>Description</h3><p>This command reads the list of HCI commands supported for the local Controller. This command shall return the Supported_Commands configuration parameter. It is implied that if a command is listed as supported, the feature underlying that command is also supported.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.4.2].</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -1038,7 +1038,7 @@ implementation dependent.</p>
</td><td><p>Bit mask for each HCI Command. If a bit is 1, the Controller supports the corresponding command and the features required for the command.
Unsupported or undefined commands shall be set to 0.</p>
</td><td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_READ_LOCAL_SUPPORTED_FEATURES_anchor">HCI_READ_LOCAL_SUPPORTED_FEATURES</a></h2><h3>Description</h3><p>This command requests a list of the supported features for the local Controller. This command will return a list of the LMP features. For details see Part C, Link Manager Protocol Specification on page 227.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.4.3)</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_READ_LOCAL_SUPPORTED_FEATURES_anchor">HCI_READ_LOCAL_SUPPORTED_FEATURES</a></h2><h3>Description</h3><p>This command requests a list of the supported features for the local Controller. This command will return a list of the LMP features. For details see Part C, Link Manager Protocol Specification.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.4.3].</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -1048,7 +1048,7 @@ Unsupported or undefined commands shall be set to 0.</p>
</td><td><p>8</p>
</td><td><p>Bit Mask List of LMP features.</p>
</td><td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_READ_BD_ADDR_anchor">HCI_READ_BD_ADDR</a></h2><h3>Description</h3><p>On an LE Controller, this command shall read the Public Device Address as defined in [Vol 6] Part B, Section 1.3, Device Address. If this Controller does not have a Public Device Address, the value 0x000000000000 shall be returned.<br>On an LE Controller, the public address shall be the same as the BD_ADDR.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.4.6)</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_READ_BD_ADDR_anchor">HCI_READ_BD_ADDR</a></h2><h3>Description</h3><p>On an LE Controller, this command shall read the Public Device Address as defined in [Vol 6] Part B, Section 1.3, Device Address. If this Controller does not have a Public Device Address, the value 0x000000000000 shall be returned.<br>On an LE Controller, the public address shall be the same as the BD_ADDR.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.4.6].</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -1058,7 +1058,7 @@ Unsupported or undefined commands shall be set to 0.</p>
</td><td><p>6</p>
</td><td><p>BD_ADDR ( Bluetooth Device Address) of the Device.</p>
</td><td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_READ_RSSI_anchor">HCI_READ_RSSI</a></h2><h3>Description</h3><p>This command reads the Received Signal Strength Indication (RSSI) value from a Controller. For an LE transport, a Connection_Handle is used as the Handle command parameter and return parameter. The meaning of the RSSI metric is an absolute receiver signal strength value in dBm to +/- 6 dB accuracy. If the RSSI cannot be read, the RSSI metric shall be set to 127.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.5.4)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_READ_RSSI_anchor">HCI_READ_RSSI</a></h2><h3>Description</h3><p>This command reads the Received Signal Strength Indication (RSSI) value from a Controller. For an LE transport, a Connection_Handle is used as the Handle command parameter and return parameter. The meaning of the RSSI metric is an absolute receiver signal strength value in dBm to +/- 6 dB accuracy. If the RSSI cannot be read, the RSSI metric shall be set to 127.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.5.4].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -1079,7 +1079,7 @@ Unsupported or undefined commands shall be set to 0.</p>
</td><td><p>N Size: 1 Octet (signed integer)
Units: dBm</p>
</td><td><li>127: RSSI not available</li><li>-127 ... 20</li></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_EVENT_MASK_anchor">HCI_LE_SET_EVENT_MASK</a></h2><h3>Description</h3><p>The LE_Set_Event_Mask command is used to control which LE events are generated by the HCI for the Host. If the bit in the LE_Event_Mask is set to a one, then the event associated with that bit will be enabled. The Host has to deal with each event that is generated by an LE Controller. The event mask allows the Host to control which events will interrupt it.<br>For LE events to be generated, the LE Meta-Event bit in the Event_Mask shall also be set. If that bit is not set, then LE events shall not be generated, regardless of how the LE_Event_Mask is set.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.1)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_EVENT_MASK_anchor">HCI_LE_SET_EVENT_MASK</a></h2><h3>Description</h3><p>The LE_Set_Event_Mask command is used to control which LE events are generated by the HCI for the Host. If the bit in the LE_Event_Mask is set to a one, then the event associated with that bit will be enabled. The Host has to deal with each event that is generated by an LE Controller. The event mask allows the Host to control which events will interrupt it.<br>For LE events to be generated, the LE Meta-Event bit in the Event_Mask shall also be set. If that bit is not set, then LE events shall not be generated, regardless of how the LE_Event_Mask is set.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.1].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>LE_Event_Mask</p>
</td><td><p>8</p>
@@ -1091,7 +1091,7 @@ Units: dBm</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_BUFFER_SIZE_anchor">HCI_LE_READ_BUFFER_SIZE</a></h2><h3>Description</h3><p>The LE_Read_Buffer_Size command is used to read the maximum size of the data portion of HCI LE ACL Data Packets sent from the Host to the Controller.<br>The Host will segment the data transmitted to the Controller according to these values, so that the HCI Data Packets will contain data with up to this size. The LE_Read_Buffer_Size command also returns the total number of HCI LE ACL Data Packets that can be stored in the data buffers of the Controller. The LE_Read_Buffer_Size command must be issued by the Host before it sends any data to an LE Controller (see Section 4.1.1).<br>If the Controller returns a length value of zero, the Host shall use the Read_Buffer_Size command to determine the size of the data buffers.<br>Note: Both the Read_Buffer_Size and LE_Read_Buffer_Size commands may return buffer length and number of packets parameter values that are nonzero.<br>The HC_LE_ACL_Data_Packet_Length return parameter shall be used to determine the size of the L2CAP PDU segments contained in ACL Data Packets, which are transferred from the Host to the Controller to be broken up into packets by the Link Layer. Both the Host and the Controller shall support command and event packets, where the data portion (excluding header) contained in the packets is 255 octets in size. The HC_Total_Num_LE_ACL_Data_Packets return parameter contains the total number of HCI ACL Data Packets that can be stored in the data buffers of the Controller. The Host determines how the buffers are to be divided between different Connection Handles.<br>Note: The HC_LE_ACL_Data_Packet_Length return parameter does not include the length of the HCI Data Packet header.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.2)</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_BUFFER_SIZE_anchor">HCI_LE_READ_BUFFER_SIZE</a></h2><h3>Description</h3><p>The LE_Read_Buffer_Size command is used to read the maximum size of the data portion of HCI LE ACL Data Packets sent from the Host to the Controller.<br>The Host will segment the data transmitted to the Controller according to these values, so that the HCI Data Packets will contain data with up to this size. The LE_Read_Buffer_Size command also returns the total number of HCI LE ACL Data Packets that can be stored in the data buffers of the Controller. The LE_Read_Buffer_Size command must be issued by the Host before it sends any data to an LE Controller (see Section 4.1.1).<br>If the Controller returns a length value of zero, the Host shall use the Read_Buffer_Size command to determine the size of the data buffers.<br>Note: Both the Read_Buffer_Size and LE_Read_Buffer_Size commands may return buffer length and number of packets parameter values that are nonzero.<br>The HC_LE_ACL_Data_Packet_Length return parameter shall be used to determine the size of the L2CAP PDU segments contained in ACL Data Packets, which are transferred from the Host to the Controller to be broken up into packets by the Link Layer. Both the Host and the Controller shall support command and event packets, where the data portion (excluding header) contained in the packets is 255 octets in size. The HC_Total_Num_LE_ACL_Data_Packets return parameter contains the total number of HCI ACL Data Packets that can be stored in the data buffers of the Controller. The Host determines how the buffers are to be divided between different Connection Handles.<br>Note: The HC_LE_ACL_Data_Packet_Length return parameter does not include the length of the HCI Data Packet header.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.2].</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -1107,7 +1107,7 @@ Units: dBm</p>
</td><td><p>0x00 No dedicated LE Buffer - use Read_Buffer_Size command.
0x01 - 0xFF Total number of HCI ACL Data Packets that can be stored in the data buffers of the Controller.</p>
</td><td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_LOCAL_SUPPORTED_FEATURES_anchor">HCI_LE_READ_LOCAL_SUPPORTED_FEATURES</a></h2><h3>Description</h3><p>This command requests the list of the supported LE features for the Controller.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.3)</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_LOCAL_SUPPORTED_FEATURES_anchor">HCI_LE_READ_LOCAL_SUPPORTED_FEATURES</a></h2><h3>Description</h3><p>This command requests the list of the supported LE features for the Controller.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.3].</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -1115,9 +1115,9 @@ Units: dBm</p>
</td><td></td></tr>
<tr><td><p>LE_Features</p>
</td><td><p>8</p>
-</td><td><p>Bit Mask List of LE features. See Core v5.0, Vol. 6, Part B, Section 4.6.</p>
+</td><td><p>Bit Mask List of LE features. See Bluetooth Core specification.</p>
</td><td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_RANDOM_ADDRESS_anchor">HCI_LE_SET_RANDOM_ADDRESS</a></h2><h3>Description</h3><p>The LE_Set_Random_Address command is used by the Host to set the LE Random Device Address in the Controller (see [Vol 6] Part B, Section 1.3).<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.4)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_RANDOM_ADDRESS_anchor">HCI_LE_SET_RANDOM_ADDRESS</a></h2><h3>Description</h3><p>The LE_Set_Random_Address command is used by the Host to set the LE Random Device Address in the Controller (see [Vol 6] Part B, Section 1.3).<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.4].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Random_Address</p>
</td><td><p>6</p>
@@ -1129,7 +1129,7 @@ Units: dBm</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_ADVERTISING_PARAMETERS_anchor">HCI_LE_SET_ADVERTISING_PARAMETERS</a></h2><h3>Description</h3><p>The LE_Set_Advertising_Parameters command is used by the Host to set the advertising parameters.<br>The Advertising_Interval_Min shall be less than or equal to the Advertising_Interval_Max.<br>The Advertising_Interval_Min and Advertising_Interval_Max should not be the same value to enable the Controller to determine the best advertising interval given other activities.<br>For high duty cycle directed advertising, i.e. when Advertising_Type is 0x01 (ADV_DIRECT_IND, high duty cycle), the Advertising_Interval_Min and Advertising_Interval_Max parameters are not used and shall be ignored.<br>The Advertising_Type is used to determine the packet type that is used for advertising when advertising is enabled.<br>The Advertising_Interval_Min and Advertising_Interval_Max shall not be set to less than 0x00A0 (100 ms) if the Advertising_Type is set to 0x02 (ADV_SCAN_IND) or 0x03 (ADV_NONCONN_IND). The Own_Address_Type determines if the advertising packets are identified with the Public Device Address of the device, or a Random Device Address as written by the LE_Set_Random_Address command.<br>If directed advertising is performed, i.e. when Advertising_Type is set to 0x01 (ADV_DIRECT_IND, high duty cycle) or 0x04 (ADV_DIRECT_IND, low duty cycle mode), then the Direct_Address_Type and Direct_Address shall be valid, otherwise they shall be ignored by the Controller and not used.<br>The Advertising_Channel_Map is a bit field that indicates the advertising channels that shall be used when transmitting advertising packets. At least one channel bit shall be set in the Advertising_Channel_Map parameter.<br>The Advertising_Filter_Policy parameter shall be ignored when directed advertising is enabled.<br>The Host shall not issue this command when advertising is enabled in the Controller; if it is the Command Disallowed error code shall be used.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.5)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_ADVERTISING_PARAMETERS_anchor">HCI_LE_SET_ADVERTISING_PARAMETERS</a></h2><h3>Description</h3><p>The LE_Set_Advertising_Parameters command is used by the Host to set the advertising parameters.<br>The Advertising_Interval_Min shall be less than or equal to the Advertising_Interval_Max.<br>The Advertising_Interval_Min and Advertising_Interval_Max should not be the same value to enable the Controller to determine the best advertising interval given other activities.<br>For high duty cycle directed advertising, i.e. when Advertising_Type is 0x01 (ADV_DIRECT_IND, high duty cycle), the Advertising_Interval_Min and Advertising_Interval_Max parameters are not used and shall be ignored.<br>The Advertising_Type is used to determine the packet type that is used for advertising when advertising is enabled.<br>The Advertising_Interval_Min and Advertising_Interval_Max shall not be set to less than 0x00A0 (100 ms) if the Advertising_Type is set to 0x02 (ADV_SCAN_IND) or 0x03 (ADV_NONCONN_IND). The Own_Address_Type determines if the advertising packets are identified with the Public Device Address of the device, or a Random Device Address as written by the LE_Set_Random_Address command.<br>If directed advertising is performed, i.e. when Advertising_Type is set to 0x01 (ADV_DIRECT_IND, high duty cycle) or 0x04 (ADV_DIRECT_IND, low duty cycle mode), then the Direct_Address_Type and Direct_Address shall be valid, otherwise they shall be ignored by the Controller and not used.<br>The Advertising_Channel_Map is a bit field that indicates the advertising channels that shall be used when transmitting advertising packets. At least one channel bit shall be set in the Advertising_Channel_Map parameter.<br>The Advertising_Filter_Policy parameter shall be ignored when directed advertising is enabled.<br>The Host shall not issue this command when advertising is enabled in the Controller; if it is the Command Disallowed error code shall be used.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.5].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Advertising_Interval_Min</p>
</td><td><p>2</p>
@@ -1181,7 +1181,7 @@ Default: 00000111b (all channels enabled).</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_ADVERTISING_CHANNEL_TX_POWER_anchor">HCI_LE_READ_ADVERTISING_CHANNEL_TX_POWER</a></h2><h3>Description</h3><p>The LE_Read_Advertising_Channel_Tx_Power command is used by the Host to read the transmit power level used for LE advertising channel packets.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.6)</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_ADVERTISING_CHANNEL_TX_POWER_anchor">HCI_LE_READ_ADVERTISING_CHANNEL_TX_POWER</a></h2><h3>Description</h3><p>The LE_Read_Advertising_Channel_Tx_Power command is used by the Host to read the transmit power level used for LE advertising channel packets.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.6].</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -1193,7 +1193,7 @@ Default: 00000111b (all channels enabled).</p>
Units: dBm
Accuracy: +/- 4 dBm</p>
</td><td><li>-20 ... 10</li></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_ADVERTISING_DATA_anchor">HCI_LE_SET_ADVERTISING_DATA</a></h2><h3>Description</h3><p>The LE_Set_Advertising_Data command is used to set the data used in advertising packets that have a data field.<br>Only the significant part of the Advertising_Data is transmitted in the advertising packets, as defined in [Vol 3] Part C, Section 11.,<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.7)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_ADVERTISING_DATA_anchor">HCI_LE_SET_ADVERTISING_DATA</a></h2><h3>Description</h3><p>The LE_Set_Advertising_Data command is used to set the data used in advertising packets that have a data field.<br>Only the significant part of the Advertising_Data is transmitted in the advertising packets, as defined in [Vol 3] Part C, Section 11.,<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.7].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Advertising_Data_Length</p>
</td><td><p>1</p>
@@ -1209,7 +1209,7 @@ Accuracy: +/- 4 dBm</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_SCAN_RESPONSE_DATA_anchor">HCI_LE_SET_SCAN_RESPONSE_DATA</a></h2><h3>Description</h3><p>This command is used to provide data used in Scanning Packets that have a data field.<br>Only the significant part of the Scan_Response_Data is transmitted in the Scanning Packets, as defined in [Vol 3] Part C, Section 11.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.8)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_SCAN_RESPONSE_DATA_anchor">HCI_LE_SET_SCAN_RESPONSE_DATA</a></h2><h3>Description</h3><p>This command is used to provide data used in Scanning Packets that have a data field.<br>Only the significant part of the Scan_Response_Data is transmitted in the Scanning Packets, as defined in [Vol 3] Part C, Section 11.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.8].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Scan_Response_Data_Length</p>
</td><td><p>1</p>
@@ -1225,7 +1225,7 @@ Accuracy: +/- 4 dBm</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_ADVERTISE_ENABLE_anchor">HCI_LE_SET_ADVERTISE_ENABLE</a></h2><h3>Description</h3><p>The LE_Set_Advertise_Enable command is used to request the Controller to start or stop advertising. The Controller manages the timing of advertisements as per the advertising parameters given in the LE_Set_Advertising_Parameters command.<br>The Controller shall continue advertising until the Host issues an LE_Set_Advertise_Enable command with Advertising_Enable set to 0x00 (Advertising is disabled) or until a connection is created or until the Advertising is timed out due to high duty cycle Directed Advertising. In these cases, advertising is then disabled.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.9)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_ADVERTISE_ENABLE_anchor">HCI_LE_SET_ADVERTISE_ENABLE</a></h2><h3>Description</h3><p>The LE_Set_Advertise_Enable command is used to request the Controller to start or stop advertising. The Controller manages the timing of advertisements as per the advertising parameters given in the LE_Set_Advertising_Parameters command.<br>The Controller shall continue advertising until the Host issues an LE_Set_Advertise_Enable command with Advertising_Enable set to 0x00 (Advertising is disabled) or until a connection is created or until the Advertising is timed out due to high duty cycle Directed Advertising. In these cases, advertising is then disabled.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.9].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Advertising_Enable</p>
</td><td><p>1</p>
@@ -1237,7 +1237,7 @@ Accuracy: +/- 4 dBm</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><li><a href="#HCI_LE_CONNECTION_COMPLETE_EVENT_anchor">HCI_LE_CONNECTION_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_SCAN_PARAMETERS_anchor">HCI_LE_SET_SCAN_PARAMETERS</a></h2><h3>Description</h3><p>The LE_Set_Scan_Parameters command is used to set the scan parameters.<br>The LE_Scan_Type parameter controls the type of scan to perform.<br>The LE_Scan_Interval and LE_Scan_Window parameters are recommendations from the Host on how long (LE_Scan_Window) and how frequently (LE_Scan_Interval) the Controller should scan (See [Vol 6] Part B, Section 4.4.3). The LE_Scan_Window parameter shall always be set to a value smaller or equal to the value set for the LE_Scan_Interval parameter. If they are set to the same value scanning should be run continuously.<br>The Own_Address_Type parameter determines the address used (Public or Random Device Address) when performing active scan.<br>The Host shall not issue this command when scanning is enabled in the Controller; if it is the Command Disallowed error code shall be used.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.10)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><li><a href="#HCI_LE_CONNECTION_COMPLETE_EVENT_anchor">HCI_LE_CONNECTION_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_SCAN_PARAMETERS_anchor">HCI_LE_SET_SCAN_PARAMETERS</a></h2><h3>Description</h3><p>The LE_Set_Scan_Parameters command is used to set the scan parameters.<br>The LE_Scan_Type parameter controls the type of scan to perform.<br>The LE_Scan_Interval and LE_Scan_Window parameters are recommendations from the Host on how long (LE_Scan_Window) and how frequently (LE_Scan_Interval) the Controller should scan (See [Vol 6] Part B, Section 4.4.3). The LE_Scan_Window parameter shall always be set to a value smaller or equal to the value set for the LE_Scan_Interval parameter. If they are set to the same value scanning should be run continuously.<br>The Own_Address_Type parameter determines the address used (Public or Random Device Address) when performing active scan.<br>The Host shall not issue this command when scanning is enabled in the Controller; if it is the Command Disallowed error code shall be used.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.10].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>LE_Scan_Type</p>
</td><td><p>1</p>
@@ -1279,7 +1279,7 @@ Time = N * 0.625 msec.</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_SCAN_ENABLE_anchor">HCI_LE_SET_SCAN_ENABLE</a></h2><h3>Description</h3><p>The LE_Set_Scan_Enable command is used to start scanning. Scanning is used to discover advertising devices nearby.<br>The Filter_Duplicates parameter controls whether the Link Layer shall filter duplicate advertising reports to the Host, or if the Link Layer should generate advertising reports for each packet received.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.11)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_SCAN_ENABLE_anchor">HCI_LE_SET_SCAN_ENABLE</a></h2><h3>Description</h3><p>The LE_Set_Scan_Enable command is used to start scanning. Scanning is used to discover advertising devices nearby.<br>The Filter_Duplicates parameter controls whether the Link Layer shall filter duplicate advertising reports to the Host, or if the Link Layer should generate advertising reports for each packet received.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.11].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>LE_Scan_Enable</p>
</td><td><p>1</p>
@@ -1295,7 +1295,7 @@ Time = N * 0.625 msec.</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><li><a href="#HCI_LE_ADVERTISING_REPORT_EVENT_anchor">HCI_LE_ADVERTISING_REPORT_EVENT</a></li><h2><a name="HCI_LE_CREATE_CONNECTION_anchor">HCI_LE_CREATE_CONNECTION</a></h2><h3>Description</h3><p>The LE_Create_Connection command is used to create a Link Layer connection to a connectable advertiser.<br>The LE_Scan_Interval and LE_Scan_Window parameters are recommendations from the Host on how long (LE_Scan_Window) and how frequently (LE_Scan_Interval) the Controller should scan. The LE_Scan_Window parameter shall be set to a value smaller or equal to the value set for the LE_Scan_Interval parameter. If both are set to the same value, scanning should run continuously.<br>The Initiator_Filter_Policy is used to determine whether the White List is used.<br>If the White List is not used, the Peer_Address_Type and the Peer_Address parameters specify the address type and address of the advertising device to connect to.<br>The Link Layer shall set the address in the CONNECT_REQ packets to either the Public Device Address or the Random Device Addressed based on the Own_Address_Type parameter.<br>The Conn_Interval_Min and Conn_Interval_Max parameters define the minimum and maximum allowed connection interval. The Conn_Interval_Min parameter shall not be greater than the Conn_Interval_Max parameter.<br>The Conn_Latency parameter defines the maximum allowed connection latency (see [Vol 6] Part B, Section 4.5.1).<br>The Supervision_Timeout parameter defines the link supervision timeout for the connection. The Supervision_Timeout in milliseconds shall be larger than (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given in milliseconds. (See [Vol 6] Part B, Section 4.5.2).<br>The Minimum_CE_Length and Maximum_CE_Length parameters are informative parameters providing the Controller with the expected minimum and maximum length of the connection events. The Minimum_CE_Length parameter shall be less than or equal to the Maximum_CE_Length parameter.<br>The Host shall not issue this command when another LE_Create_Connection is pending in the Controller; if this does occur the Controller shall return the Command Disallowed error code shall be used.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.12)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><li><a href="#HCI_LE_ADVERTISING_REPORT_EVENT_anchor">HCI_LE_ADVERTISING_REPORT_EVENT</a></li><h2><a name="HCI_LE_CREATE_CONNECTION_anchor">HCI_LE_CREATE_CONNECTION</a></h2><h3>Description</h3><p>The LE_Create_Connection command is used to create a Link Layer connection to a connectable advertiser.<br>The LE_Scan_Interval and LE_Scan_Window parameters are recommendations from the Host on how long (LE_Scan_Window) and how frequently (LE_Scan_Interval) the Controller should scan. The LE_Scan_Window parameter shall be set to a value smaller or equal to the value set for the LE_Scan_Interval parameter. If both are set to the same value, scanning should run continuously.<br>The Initiator_Filter_Policy is used to determine whether the WhiteList is used.<br>If the whitelist is not used, the Peer_Address_Type and the Peer_Address parameters specify the address type and address of the advertising device to connect to.<br>The Link Layer shall set the address in the CONNECT_REQ packets to either the Public Device Address or the Random Device Addressed based on the Own_Address_Type parameter.<br>The Conn_Interval_Min and Conn_Interval_Max parameters define the minimum and maximum allowed connection interval. The Conn_Interval_Min parameter shall not be greater than the Conn_Interval_Max parameter.<br>The Conn_Latency parameter defines the maximum allowed connection latency.<br>The Supervision_Timeout parameter defines the link supervision timeout for the connection. The Supervision_Timeout in milliseconds shall be larger than (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given in milliseconds.<br>The Minimum_CE_Length and Maximum_CE_Length parameters are informative parameters providing the Controller with the expected minimum and maximum length of the connection events. The Minimum_CE_Length parameter shall be less than or equal to the Maximum_CE_Length parameter.<br>The Host shall not issue this command when another LE_Create_Connection is pending in the Controller; if this does occur the Controller shall return the Command Disallowed error code shall be used.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.12].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>LE_Scan_Interval</p>
</td><td><p>2</p>
@@ -1375,13 +1375,13 @@ Time = N * 0.625 msec.</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#HCI_LE_CONNECTION_COMPLETE_EVENT_anchor">HCI_LE_CONNECTION_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_CREATE_CONNECTION_CANCEL_anchor">HCI_LE_CREATE_CONNECTION_CANCEL</a></h2><h3>Description</h3><p>The LE_Create_Connection_Cancel command is used to cancel the LE_Create_Connection command. This command shall only be issued after the LE_Create_Connection command has been issued, a Command Status event has been received for the LE Create Connection command and before the LE Connection Complete event.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.13)</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#HCI_LE_CONNECTION_COMPLETE_EVENT_anchor">HCI_LE_CONNECTION_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_CREATE_CONNECTION_CANCEL_anchor">HCI_LE_CREATE_CONNECTION_CANCEL</a></h2><h3>Description</h3><p>The LE_Create_Connection_Cancel command is used to cancel the LE_Create_Connection command. This command shall only be issued after the LE_Create_Connection command has been issued, a Command Status event has been received for the LE Create Connection command and before the LE Connection Complete event.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.13].</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><li><a href="#HCI_LE_CONNECTION_COMPLETE_EVENT_anchor">HCI_LE_CONNECTION_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_WHITE_LIST_SIZE_anchor">HCI_LE_READ_WHITE_LIST_SIZE</a></h2><h3>Description</h3><p>The LE_Read_White_List_Size command is used to read the total number of white list entries that can be stored in the Controller.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.14)</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><li><a href="#HCI_LE_CONNECTION_COMPLETE_EVENT_anchor">HCI_LE_CONNECTION_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_WHITE_LIST_SIZE_anchor">HCI_LE_READ_WHITE_LIST_SIZE</a></h2><h3>Description</h3><p>The LE_Read_White_List_Size command is used to read the total number of whitelist entries that can be stored in the Controller.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.14].</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -1391,13 +1391,13 @@ Time = N * 0.625 msec.</p>
</td><td><p>1</p>
</td><td><p>Total number of white list entries that can be stored in the Controller.</p>
</td><td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_CLEAR_WHITE_LIST_anchor">HCI_LE_CLEAR_WHITE_LIST</a></h2><h3>Description</h3><p>The LE_Clear_White_List command is used to clear the white list stored in the Controller.<br>This command can be used at any time except when:<br>- the advertising filter policy uses the white list and advertising is enabled.<br>- the scanning filter policy uses the white list and scanning is enabled.<br>- the initiator filter policy uses the white list and an LE_Create_Connection command is outstanding.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.15)</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_CLEAR_WHITE_LIST_anchor">HCI_LE_CLEAR_WHITE_LIST</a></h2><h3>Description</h3><p>The LE_Clear_White_List command is used to clear the whitelist stored in the Controller.<br>This command can be used at any time except when:<br>- the advertising filter policy uses the whitelist and advertising is enabled.<br>- the scanning filter policy uses the whitelist and scanning is enabled.<br>- the initiator filter policy uses the whitelist and an LE_Create_Connection command is outstanding.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.15].</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_ADD_DEVICE_TO_WHITE_LIST_anchor">HCI_LE_ADD_DEVICE_TO_WHITE_LIST</a></h2><h3>Description</h3><p>The LE_Add_Device_To_White_List command is used to add a single device to the white list stored in the Controller.<br>This command can be used at any time except when:<br>- the advertising filter policy uses the white list and advertising is enabled.<br>- the scanning filter policy uses the white list and scanning is enabled.<br>- the initiator filter policy uses the white list and a create connection command is outstanding.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.16)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_ADD_DEVICE_TO_WHITE_LIST_anchor">HCI_LE_ADD_DEVICE_TO_WHITE_LIST</a></h2><h3>Description</h3><p>The LE_Add_Device_To_White_List command is used to add a single device to the whitelist stored in the Controller.<br>This command can be used at any time except when:<br>- the advertising filter policy uses the whitelist and advertising is enabled.<br>- the scanning filter policy uses the whitelist and scanning is enabled.<br>- the initiator filter policy uses the whitelist and a create connection command is outstanding.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.16].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Address_Type</p>
</td><td><p>1</p>
@@ -1413,7 +1413,7 @@ Time = N * 0.625 msec.</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_REMOVE_DEVICE_FROM_WHITE_LIST_anchor">HCI_LE_REMOVE_DEVICE_FROM_WHITE_LIST</a></h2><h3>Description</h3><p>The LE_Remove_Device_From_White_List command is used to remove a single device from the white list stored in the Controller.<br>This command can be used at any time except when:<br>- the advertising filter policy uses the white list and advertising is enabled.<br>- the scanning filter policy uses the white list and scanning is enabled.<br>- the initiator filter policy uses the white list and a create connection command is outstanding.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.17)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_REMOVE_DEVICE_FROM_WHITE_LIST_anchor">HCI_LE_REMOVE_DEVICE_FROM_WHITE_LIST</a></h2><h3>Description</h3><p>The LE_Remove_Device_From_White_List command is used to remove a single device from the whitelist stored in the Controller.<br>This command can be used at any time except when:<br>- the advertising filter policy uses the whitelist and advertising is enabled.<br>- the scanning filter policy uses the whitelist and scanning is enabled.<br>- the initiator filter policy uses the whitelist and a create connection command is outstanding.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.17].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Address_Type</p>
</td><td><p>1</p>
@@ -1429,7 +1429,7 @@ Time = N * 0.625 msec.</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_CONNECTION_UPDATE_anchor">HCI_LE_CONNECTION_UPDATE</a></h2><h3>Description</h3><p>The LE_Connection_Update command is used to change the Link Layer connection parameters of a connection. This command is supported only on master side.<br>The Conn_Interval_Min and Conn_Interval_Max parameters are used to define the minimum and maximum allowed connection interval. The Conn_Interval_Min parameter shall not be greater than the Conn_Interval_Max parameter.<br>The Conn_Latency parameter shall define the maximum allowed connection latency.<br>The Supervision_Timeout parameter shall define the link supervision timeout for the LE link. The Supervision_Timeout in milliseconds shall be larger than (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given in milliseconds.<br>The Minimum_CE_Length and Maximum_CE_Length are information parameters providing the Controller with a hint about the expected minimum and maximum length of the connection events. The Minimum_CE_Length shall be less than or equal to the Maximum_CE_Length.<br>The actual parameter values selected by the Link Layer may be different from the parameter values provided by the Host through this command.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.18)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_CONNECTION_UPDATE_anchor">HCI_LE_CONNECTION_UPDATE</a></h2><h3>Description</h3><p>The LE_Connection_Update command is used to change the Link Layer connection parameters of a connection. This command is supported only on master side.<br>The Conn_Interval_Min and Conn_Interval_Max parameters are used to define the minimum and maximum allowed connection interval. The Conn_Interval_Min parameter shall not be greater than the Conn_Interval_Max parameter.<br>The Conn_Latency parameter shall define the maximum allowed connection latency.<br>The Supervision_Timeout parameter shall define the link supervision timeout for the LE link. The Supervision_Timeout in milliseconds shall be larger than (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given in milliseconds.<br>The Minimum_CE_Length and Maximum_CE_Length are information parameters providing the Controller with a hint about the expected minimum and maximum length of the connection events. The Minimum_CE_Length shall be less than or equal to the Maximum_CE_Length.<br>The actual parameter values selected by the Link Layer may be different from the parameter values provided by the Host through this command.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.18].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -1471,7 +1471,7 @@ Time = N * 0.625 msec.</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#HCI_LE_CONNECTION_UPDATE_COMPLETE_EVENT_anchor">HCI_LE_CONNECTION_UPDATE_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION_anchor">HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION</a></h2><h3>Description</h3><p>The LE_Set_Host_Channel_Classification command allows the Host to specify a channel classification for data channels based on its "local information". This classification persists until overwritten with a subsequent LE_Set_Host_Channel_Classification command or until the Controller is reset using the Reset command (see [Vol 6] Part B, Section 4.5.8.1).<br>If this command is used, the Host should send it within 10 seconds of knowing that the channel classification has changed. The interval between two successive commands sent shall be at least one second.<br>This command shall only be used when the local device supports the Master role.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.19)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#HCI_LE_CONNECTION_UPDATE_COMPLETE_EVENT_anchor">HCI_LE_CONNECTION_UPDATE_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION_anchor">HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION</a></h2><h3>Description</h3><p>The LE_Set_Host_Channel_Classification command allows the Host to specify a channel classification for data channels based on its "local information". This classification persists until overwritten with a subsequent LE_Set_Host_Channel_Classification command or until the Controller is reset using the Reset command (see [Vol 6] Part B, Section 4.5.8.1).<br>If this command is used, the Host should send it within 10 seconds of knowing that the channel classification has changed. The interval between two successive commands sent shall be at least one second.<br>This command shall only be used when the local device supports the Master role.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.19].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>LE_Channel_Map</p>
</td><td><p>5</p>
@@ -1488,7 +1488,7 @@ At least one channel shall be marked as unknown.</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_CHANNEL_MAP_anchor">HCI_LE_READ_CHANNEL_MAP</a></h2><h3>Description</h3><p>The LE_Read_Channel_Map command returns the current Channel_Map for the specified Connection_Handle. The returned value indicates the state of the Channel_Map specified by the last transmitted or received Channel_Map (in a CONNECT_REQ or LL_CHANNEL_MAP_REQ message) for the specified Connection_Handle, regardless of whether the Master has received an acknowledgement.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.20)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_CHANNEL_MAP_anchor">HCI_LE_READ_CHANNEL_MAP</a></h2><h3>Description</h3><p>The LE_Read_Channel_Map command returns the current Channel_Map for the specified Connection_Handle. The returned value indicates the state of the Channel_Map specified by the last transmitted or received Channel_Map (in a CONNECT_REQ or LL_CHANNEL_MAP_REQ message) for the specified Connection_Handle, regardless of whether the Master has received an acknowledgement.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.20].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -1513,7 +1513,7 @@ Channel n is unused = 0.
Channel n is used = 1.
The most significant bits are reserved and shall be set to 0.</p>
</td><td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_REMOTE_FEATURES_anchor">HCI_LE_READ_REMOTE_FEATURES</a></h2><h3>Description</h3><p>This command requests a list of the used LE features from the remote device.<br>This command shall return a list of the used LE features. For details see [Vol 6] Part B, Section 4.6.<br>This command may be issued on both the master and slave.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.21)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_REMOTE_FEATURES_anchor">HCI_LE_READ_REMOTE_FEATURES</a></h2><h3>Description</h3><p>This command requests a list of the used LE features from the remote device.<br>This command shall return a list of the used LE features. For details see [Vol 6] Part B, Section 4.6.<br>This command may be issued on both the master and slave.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.21].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -1525,7 +1525,7 @@ The most significant bits are reserved and shall be set to 0.</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#HCI_LE_READ_REMOTE_FEATURES_COMPLETE_EVENT_anchor">HCI_LE_READ_REMOTE_FEATURES_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_ENCRYPT_anchor">HCI_LE_ENCRYPT</a></h2><h3>Description</h3><p>The LE_Encrypt command is used to request the Controller to encrypt the Plaintext_Data in the command using the Key given in the command and returns the Encrypted_Data to the Host. The AES-128 bit block cypher is defined in NIST Publication FIPS-197 (http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf).<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.22)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#HCI_LE_READ_REMOTE_FEATURES_COMPLETE_EVENT_anchor">HCI_LE_READ_REMOTE_FEATURES_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_ENCRYPT_anchor">HCI_LE_ENCRYPT</a></h2><h3>Description</h3><p>The LE_Encrypt command is used to request the Controller to encrypt the Plaintext_Data in the command using the Key given in the command and returns the Encrypted_Data to the Host. The AES-128 bit block cypher is defined in NIST Publication FIPS-197 (http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf).<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.22].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Key</p>
</td><td><p>16</p>
@@ -1545,7 +1545,7 @@ The most significant bits are reserved and shall be set to 0.</p>
</td><td><p>16</p>
</td><td><p>128 bit encrypted data block.</p>
</td><td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_RAND_anchor">HCI_LE_RAND</a></h2><h3>Description</h3><p>The LE_Rand command is used to request the Controller to generate 8 octets of random data to be sent to the Host. The Random_Number shall be generated according to [Vol 2] Part H, Section 2 if the LE Feature (LL Encryption) is supported.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.23)</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_RAND_anchor">HCI_LE_RAND</a></h2><h3>Description</h3><p>The LE_Rand command is used to request the Controller to generate 8 octets of random data to be sent to the Host. The Random_Number shall be generated according to [Vol 2] Part H, Section 2 if the LE Feature (LL Encryption) is supported.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.23].</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -1555,7 +1555,7 @@ The most significant bits are reserved and shall be set to 0.</p>
</td><td><p>8</p>
</td><td><p>Random Number</p>
</td><td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_START_ENCRYPTION_anchor">HCI_LE_START_ENCRYPTION</a></h2><h3>Description</h3><p>The LE_Start_Encryption command is used to authenticate the given encryption key associated with the remote device specified by the connection handle, and once authenticated will encrypt the connection. The parameters are as defined in [Vol 3] Part H, Section 2.4.4.<br>If the connection is already encrypted then the Controller shall pause connection encryption before attempting to authenticate the given encryption key, and then re-encrypt the connection. While encryption is paused no user data shall be transmitted.<br>On an authentication failure, the connection shall be automatically disconnected by the Link Layer. If this command succeeds, then the connection shall be encrypted.<br>This command shall only be used when the local device's role is Master.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.24)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_START_ENCRYPTION_anchor">HCI_LE_START_ENCRYPTION</a></h2><h3>Description</h3><p>The LE_Start_Encryption command is used to authenticate the given encryption key associated with the remote device specified by the connection handle, and once authenticated will encrypt the connection. The parameters are as defined in [Vol 3] Part H, Section 2.4.4.<br>If the connection is already encrypted then the Controller shall pause connection encryption before attempting to authenticate the given encryption key, and then re-encrypt the connection. While encryption is paused no user data shall be transmitted.<br>On an authentication failure, the connection shall be automatically disconnected by the Link Layer. If this command succeeds, then the connection shall be encrypted.<br>This command shall only be used when the local device's role is Master.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.24].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -1579,7 +1579,7 @@ The most significant bits are reserved and shall be set to 0.</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#HCI_ENCRYPTION_CHANGE_EVENT_anchor">HCI_ENCRYPTION_CHANGE_EVENT</a></li><li><a href="#HCI_ENCRYPTION_KEY_REFRESH_COMPLETE_EVENT_anchor">HCI_ENCRYPTION_KEY_REFRESH_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_LONG_TERM_KEY_REQUEST_REPLY_anchor">HCI_LE_LONG_TERM_KEY_REQUEST_REPLY</a></h2><h3>Description</h3><p>The LE_Long_Term_Key_Request_Reply command is used to reply to an LE Long Term Key Request event from the Controller, and specifies the Long_Term_Key parameter that shall be used for this Connection_Handle. The Long_Term_Key is used as defined in [Vol 6] Part B, Section 5.1.3.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.25)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#HCI_ENCRYPTION_CHANGE_EVENT_anchor">HCI_ENCRYPTION_CHANGE_EVENT</a></li><li><a href="#HCI_ENCRYPTION_KEY_REFRESH_COMPLETE_EVENT_anchor">HCI_ENCRYPTION_KEY_REFRESH_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_LONG_TERM_KEY_REQUEST_REPLY_anchor">HCI_LE_LONG_TERM_KEY_REQUEST_REPLY</a></h2><h3>Description</h3><p>The LE_Long_Term_Key_Request_Reply command is used to reply to an LE Long Term Key Request event from the Controller, and specifies the Long_Term_Key parameter that shall be used for this Connection_Handle. The Long_Term_Key is used as defined in [Vol 6] Part B, Section 5.1.3.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.25].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -1599,7 +1599,7 @@ The most significant bits are reserved and shall be set to 0.</p>
</td><td><p>2</p>
</td><td><p>Connection handle for which the event applies.</p>
</td><td><li>0x0000 ... 0x0EFF</li></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_LONG_TERM_KEY_REQUESTED_NEGATIVE_REPLY_anchor">HCI_LE_LONG_TERM_KEY_REQUESTED_NEGATIVE_REPLY</a></h2><h3>Description</h3><p>The LE_Long_Term_Key_Request_Negative_Reply command is used to reply to an LE Long Term Key Request event from the Controller if the Host cannot provide a Long Term Key for this Connection_Handle.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.26)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_LONG_TERM_KEY_REQUESTED_NEGATIVE_REPLY_anchor">HCI_LE_LONG_TERM_KEY_REQUESTED_NEGATIVE_REPLY</a></h2><h3>Description</h3><p>The LE_Long_Term_Key_Request_Negative_Reply command is used to reply to an LE Long Term Key Request event from the Controller if the Host cannot provide a Long Term Key for this Connection_Handle.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.26].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -1615,7 +1615,7 @@ The most significant bits are reserved and shall be set to 0.</p>
</td><td><p>2</p>
</td><td><p>Connection handle for which the event applies.</p>
</td><td><li>0x0000 ... 0x0EFF</li></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_SUPPORTED_STATES_anchor">HCI_LE_READ_SUPPORTED_STATES</a></h2><h3>Description</h3><p>The LE_Read_Supported_States command reads the states and state combinations that the link layer supports. See [Vol 6] Part B, Section 1.1.1.<br>LE_States is an 8-octet bit field. If a bit is set to 1 then this state or state combination is supported by the Controller. Multiple bits in LE_States may be set to 1 to indicate support for multiple state and state combinations.<br>All the Advertising type with the Initiate State combinations shall be set only if the corresponding Advertising types and Master Role combination are set.<br>All the Scanning types and the Initiate State combinations shall be set only if the corresponding Scanning types and Master Role combination are set.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.27)</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_SUPPORTED_STATES_anchor">HCI_LE_READ_SUPPORTED_STATES</a></h2><h3>Description</h3><p>The LE_Read_Supported_States command reads the states and state combinations that the link layer supports. See [Vol 6] Part B, Section 1.1.1.<br>LE_States is an 8-octet bit field. If a bit is set to 1 then this state or state combination is supported by the Controller. Multiple bits in LE_States may be set to 1 to indicate support for multiple state and state combinations.<br>All the Advertising type with the Initiate State combinations shall be set only if the corresponding Advertising types and Master Role combination are set.<br>All the Scanning types and the Initiate State combinations shall be set only if the corresponding Scanning types and Master Role combination are set.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.27].</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -1623,10 +1623,9 @@ The most significant bits are reserved and shall be set to 0.</p>
</td><td></td></tr>
<tr><td><p>LE_States</p>
</td><td><p>8</p>
-</td><td><p>State or state combination is supported by the Controller.
-See Core v5.0, Vol.2, part E, Ch. 7.8.27.</p>
+</td><td><p>State or state combination is supported by the Controller.</p>
</td><td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_DATA_LENGTH_anchor">HCI_LE_SET_DATA_LENGTH</a></h2><h3>Description</h3><p>The LE_Set_Data_Length command allows the Host to suggest maximum transmission packet size and maximum packet transmission time (connMaxTxOctets and connMaxTxTime - see Bluetooth Specification v5.0 [Vol 6] Part B, Section 4.5.10) to be used for a given connection. The Controller may use smaller or larger values based on local information. </p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_DATA_LENGTH_anchor">HCI_LE_SET_DATA_LENGTH</a></h2><h3>Description</h3><p>The LE_Set_Data_Length command allows the Host to suggest maximum transmission packet size and maximum packet transmission time (connMaxTxOctets and connMaxTxTime - see Bluetooth spec. Vol 6 [Part B] 4.5.10) to be used for a given connection. The Controller may use smaller or larger values based on local information.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.33].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -1650,7 +1649,7 @@ See Core v5.0, Vol.2, part E, Ch. 7.8.27.</p>
</td><td><p>2</p>
</td><td><p>Connection handle for which the event applies.</p>
</td><td><li>0x0000 ... 0x0EFF</li></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH_anchor">HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH</a></h2><h3>Description</h3><p>The LE_Read_Suggested_Default_Data_Length command allows the Host to read the Host's suggested values (SuggestedMaxTxOctets and SuggestedMaxTxTime) for the Controller's maximum transmitted number of payload octets and maximum packet transmission time to be used for new connections (see Bluetooth Specification v5.0 [Vol 6] Part B, Section 4.5.10). </p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH_anchor">HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH</a></h2><h3>Description</h3><p>The LE_Read_Suggested_Default_Data_Length command allows the Host to read the Host's suggested values (SuggestedMaxTxOctets and SuggestedMaxTxTime) for the Controller's maximum transmitted number of payload octets and maximum packet transmission time to be used for new connections.<br>See Bluetooth spec. v.5.2 [Vol 6, Part B, 4.5.10].</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -1664,7 +1663,7 @@ See Core v5.0, Vol.2, part E, Ch. 7.8.27.</p>
</td><td><p>2</p>
</td><td><p>The Host's suggested value for the Controller's maximum packet transmission time to be used for new connections.</p>
</td><td><li>0x0148 ... 0x4290</li></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH_anchor">HCI_LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH</a></h2><h3>Description</h3><p>The LE_Write_Suggested_Default_Data_Length command allows the Host to specify its suggested values for the Controller's maximum transmission number of payload octets and maximum packet transmission time to be used for new connections. The Controller may use smaller or larger values for connInitialMaxTxOctets and connInitialMaxTxTime based on local information.<br>(see Bluetooth Specification [Vol 6] Part B, Section 4.5.10). </p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH_anchor">HCI_LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH</a></h2><h3>Description</h3><p>The LE_Write_Suggested_Default_Data_Length command allows the Host to specify its suggested values for the Controller's maximum transmission number of payload octets and maximum packet transmission time to be used for new connections. The Controller may use smaller or larger values for connInitialMaxTxOctets and connInitialMaxTxTime based on local information.<br>See Bluetooth spec. v.5.2 [Vol 6, Part B, 4.5.10].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>SuggestedMaxTxOctets</p>
</td><td><p>2</p>
@@ -1680,13 +1679,13 @@ See Core v5.0, Vol.2, part E, Ch. 7.8.27.</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_LOCAL_P256_PUBLIC_KEY_anchor">HCI_LE_READ_LOCAL_P256_PUBLIC_KEY</a></h2><h3>Description</h3><p>The LE_Read_Local_P-256_Public_Key command is used to return the local P-256 public key from the Controller. The Controller shall generate a new P-256 public/private key pair upon receipt of this command.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.36)</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_LOCAL_P256_PUBLIC_KEY_anchor">HCI_LE_READ_LOCAL_P256_PUBLIC_KEY</a></h2><h3>Description</h3><p>The LE_Read_Local_P-256_Public_Key command is used to return the local P-256 public key from the Controller. The Controller shall generate a new P-256 public/private key pair upon receipt of this command.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.36].</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#HCI_LE_READ_LOCAL_P256_PUBLIC_KEY_COMPLETE_EVENT_anchor">HCI_LE_READ_LOCAL_P256_PUBLIC_KEY_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_GENERATE_DHKEY_anchor">HCI_LE_GENERATE_DHKEY</a></h2><h3>Description</h3><p>The LE_Generate_DHKey command is used to initiate generation of a Diffie-Hellman key in the Controller for use over the LE transport. This command takes the remote P-256 public key as input. The Diffie-Hellman key generation uses the private key generated by LE_Read_Local_P256_Public_Key command.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.37)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#HCI_LE_READ_LOCAL_P256_PUBLIC_KEY_COMPLETE_EVENT_anchor">HCI_LE_READ_LOCAL_P256_PUBLIC_KEY_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_GENERATE_DHKEY_anchor">HCI_LE_GENERATE_DHKEY</a></h2><h3>Description</h3><p>The LE_Generate_DHKey command is used to initiate generation of a Diffie-Hellman key in the Controller for use over the LE transport. This command takes the remote P-256 public key as input. The Diffie-Hellman key generation uses the private key generated by LE_Read_Local_P256_Public_Key command.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.37].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Remote_P256_Public_Key</p>
</td><td><p>64</p>
@@ -1701,7 +1700,7 @@ Little Endian Format</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#HCI_LE_GENERATE_DHKEY_COMPLETE_EVENT_anchor">HCI_LE_GENERATE_DHKEY_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_ADD_DEVICE_TO_RESOLVING_LIST_anchor">HCI_LE_ADD_DEVICE_TO_RESOLVING_LIST</a></h2><h3>Description</h3><p>The LE_Add_Device_To_Resolving_List command is used to add one device to the list of address translations used to resolve Resolvable Private Addresses in the Controller.<br>This command cannot be used when address translation is enabled in the Controller and:<br>- Advertising is enabled<br>- Scanning is enabled<br>- Create connection command is outstanding<br>This command can be used at any time when address translation is disabled in the Controller.<br>When a Controller cannot add a device to the resolving list because the list is full, it shall respond with error code 0x07 (Memory Capacity Exceeded).<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.38)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#HCI_LE_GENERATE_DHKEY_COMPLETE_EVENT_anchor">HCI_LE_GENERATE_DHKEY_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_ADD_DEVICE_TO_RESOLVING_LIST_anchor">HCI_LE_ADD_DEVICE_TO_RESOLVING_LIST</a></h2><h3>Description</h3><p>The LE_Add_Device_To_Resolving_List command is used to add one device to the list of address translations used to resolve Resolvable Private Addresses in the Controller.<br>This command cannot be used when address translation is enabled in the Controller and:<br>- Advertising is enabled<br>- Scanning is enabled<br>- Create connection command is outstanding<br>This command can be used at any time when address translation is disabled in the Controller.<br>When a Controller cannot add a device to the resolving list because the list is full, it shall respond with error code 0x07 (Memory Capacity Exceeded).<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.38].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Peer_Identity_Address_Type</p>
</td><td><p>1</p>
@@ -1725,7 +1724,7 @@ Little Endian Format</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_REMOVE_DEVICE_FROM_RESOLVING_LIST_anchor">HCI_LE_REMOVE_DEVICE_FROM_RESOLVING_LIST</a></h2><h3>Description</h3><p>The LE_Remove_Device_From_Resolving_List command is used to remove one device from the list of address translations used to resolve Resolvable Private Addresses in the controller.<br>This command cannot be used when address translation is enabled in the Controller and:<br>- Advertising is enabled<br>- Scanning is enabled<br>- Create connection command is outstanding<br>This command can be used at any time when address translation is disabled in the Controller.<br>When a Controller cannot remove a device from the resolving list because it is not found, it shall respond with error code 0x02 (Unknown Connection Identifier).<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.39)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_REMOVE_DEVICE_FROM_RESOLVING_LIST_anchor">HCI_LE_REMOVE_DEVICE_FROM_RESOLVING_LIST</a></h2><h3>Description</h3><p>The LE_Remove_Device_From_Resolving_List command is used to remove one device from the list of address translations used to resolve Resolvable Private Addresses in the controller.<br>This command cannot be used when address translation is enabled in the Controller and:<br>- Advertising is enabled<br>- Scanning is enabled<br>- Create connection command is outstanding<br>This command can be used at any time when address translation is disabled in the Controller.<br>When a Controller cannot remove a device from the resolving list because it is not found, it shall respond with error code 0x02 (Unknown Connection Identifier).<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.39].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Peer_Identity_Address_Type</p>
</td><td><p>1</p>
@@ -1741,13 +1740,13 @@ Little Endian Format</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_CLEAR_RESOLVING_LIST_anchor">HCI_LE_CLEAR_RESOLVING_LIST</a></h2><h3>Description</h3><p>The LE_Clear_Resolving_List command is used to remove all devices from the list of address translations used to resolve Resolvable Private Addresses in the Controller.<br>This command cannot be used when address translation is enabled in the Controller and:<br>- Advertising is enabled<br>- Scanning is enabled<br>- Create connection command is outstanding<br>This command can be used at any time when address translation is disabled in the Controller.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.40)</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_CLEAR_RESOLVING_LIST_anchor">HCI_LE_CLEAR_RESOLVING_LIST</a></h2><h3>Description</h3><p>The LE_Clear_Resolving_List command is used to remove all devices from the list of address translations used to resolve Resolvable Private Addresses in the Controller.<br>This command cannot be used when address translation is enabled in the Controller and:<br>- Advertising is enabled<br>- Scanning is enabled<br>- Create connection command is outstanding<br>This command can be used at any time when address translation is disabled in the Controller.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.40].</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_RESOLVING_LIST_SIZE_anchor">HCI_LE_READ_RESOLVING_LIST_SIZE</a></h2><h3>Description</h3><p>The LE_Read_Resolving_List_Size command is used to read the total number of address translation entries in the resolving list that can be stored in the Controller.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.41)</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_RESOLVING_LIST_SIZE_anchor">HCI_LE_READ_RESOLVING_LIST_SIZE</a></h2><h3>Description</h3><p>The LE_Read_Resolving_List_Size command is used to read the total number of address translation entries in the resolving list that can be stored in the Controller.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.41].</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -1757,7 +1756,7 @@ Little Endian Format</p>
</td><td><p>1</p>
</td><td><p>Number of address translation entries in the resolving list</p>
</td><td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_PEER_RESOLVABLE_ADDRESS_anchor">HCI_LE_READ_PEER_RESOLVABLE_ADDRESS</a></h2><h3>Description</h3><p>The LE_Read_Peer_Resolvable_Address command is used to get the current peer Resolvable Private Address being used for the corresponding peer Public and Random (static) Identity Address. The peer's resolvable address being used may change after the command is called.<br>This command can be used at any time.<br>When a Controller cannot find a Resolvable Private Address associated with the Peer Identity Address, it shall respond with error code 0x02 (Unknown Connection Identifier).<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.42)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_PEER_RESOLVABLE_ADDRESS_anchor">HCI_LE_READ_PEER_RESOLVABLE_ADDRESS</a></h2><h3>Description</h3><p>The LE_Read_Peer_Resolvable_Address command is used to get the current peer Resolvable Private Address being used for the corresponding peer Public and Random (static) Identity Address. The peer's resolvable address being used may change after the command is called.<br>This command can be used at any time.<br>When a Controller cannot find a Resolvable Private Address associated with the Peer Identity Address, it shall respond with error code 0x02 (Unknown Connection Identifier).<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.42].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Peer_Identity_Address_Type</p>
</td><td><p>1</p>
@@ -1777,7 +1776,7 @@ Little Endian Format</p>
</td><td><p>6</p>
</td><td><p>Resolvable Private Address being used by the peer device</p>
</td><td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_LOCAL_RESOLVABLE_ADDRESS_anchor">HCI_LE_READ_LOCAL_RESOLVABLE_ADDRESS</a></h2><h3>Description</h3><p>The LE_Read_Local_Resolvable_Address command is used to get the current local Resolvable Private Address being used for the corresponding peer Identity Address. The local's resolvable address being used may change after the command is called.<br>This command can be used at any time.<br>When a Controller cannot find a Resolvable Private Address associated with the Peer Identity Address, it shall respond with error code 0x02 (Unknown Connection Identifier).<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.43)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_LOCAL_RESOLVABLE_ADDRESS_anchor">HCI_LE_READ_LOCAL_RESOLVABLE_ADDRESS</a></h2><h3>Description</h3><p>The LE_Read_Local_Resolvable_Address command is used to get the current local Resolvable Private Address being used for the corresponding peer Identity Address. The local's resolvable address being used may change after the command is called.<br>This command can be used at any time.<br>When a Controller cannot find a Resolvable Private Address associated with the Peer Identity Address, it shall respond with error code 0x02 (Unknown Connection Identifier).<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.43].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Peer_Identity_Address_Type</p>
</td><td><p>1</p>
@@ -1797,7 +1796,7 @@ Little Endian Format</p>
</td><td><p>6</p>
</td><td><p>Resolvable Private Address being used by the local device</p>
</td><td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_ADDRESS_RESOLUTION_ENABLE_anchor">HCI_LE_SET_ADDRESS_RESOLUTION_ENABLE</a></h2><h3>Description</h3><p>The LE_Set_Address_Resolution_Enable command is used to enable resolution of Resolvable Private Addresses in the Controller. This causes the Controller to use the resolving list whenever the Controller receives a local or peer Resolvable Private Address.<br>This command can be used at any time except when:<br>- Advertising is enabled<br>- Scanning is enabled<br>- Create connection command is outstanding<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, Section 7.8.44)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_ADDRESS_RESOLUTION_ENABLE_anchor">HCI_LE_SET_ADDRESS_RESOLUTION_ENABLE</a></h2><h3>Description</h3><p>The LE_Set_Address_Resolution_Enable command is used to enable resolution of Resolvable Private Addresses in the Controller. This causes the Controller to use the resolving list whenever the Controller receives a local or peer Resolvable Private Address.<br>This command can be used at any time except when:<br>- Advertising is enabled<br>- Scanning is enabled<br>- Create connection command is outstanding<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.44].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Address_Resolution_Enable</p>
</td><td><p>1</p>
@@ -1811,7 +1810,7 @@ Little Endian Format</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT_anchor">HCI_LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT</a></h2><h3>Description</h3><p>The LE_Set_Resolvable_Private_Address_Timeout command set the length of time the controller uses a Resolvable Private Address before a new resolvable private address is generated and starts being used. This timeout applies to all addresses generated by the controller.<br>(See Bluetooth Specification v.5.0 [Vol 2] Part E, Section 7.8.45)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT_anchor">HCI_LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT</a></h2><h3>Description</h3><p>The LE_Set_Resolvable_Private_Address_Timeout command set the length of time the controller uses a Resolvable Private Address before a new resolvable private address is generated and starts being used. This timeout applies to all addresses generated by the controller.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.45].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>RPA_Timeout</p>
</td><td><p>2</p>
@@ -1825,7 +1824,7 @@ Default: N= 0x0384 (900 secs or 15 minutes)</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_MAXIMUM_DATA_LENGTH_anchor">HCI_LE_READ_MAXIMUM_DATA_LENGTH</a></h2><h3>Description</h3><p>The LE_Read_Maximum_Data_Length command allows the Host to read the Controller's maximum supported payload octets and packet duration times for transmission and reception (supportedMaxTxOctets and supportedMaxTxTime, supportedMaxRxOctets, and supportedMaxRxTime, see Bluetooth Specification v5.0 [Vol 6] Part B, Section 4.5.10). </p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_MAXIMUM_DATA_LENGTH_anchor">HCI_LE_READ_MAXIMUM_DATA_LENGTH</a></h2><h3>Description</h3><p>The LE_Read_Maximum_Data_Length command allows the Host to read the Controller's maximum supported payload octets and packet duration times for transmission and reception (supportedMaxTxOctets and supportedMaxTxTime, supportedMaxRxOctets, and supportedMaxRxTime, see Bluetooth spec. v.5.2 [Vol 6, Part B, 4.5.10]). </p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -1847,7 +1846,7 @@ Default: N= 0x0384 (900 secs or 15 minutes)</p>
</td><td><p>2</p>
</td><td><p>Maximum time, in microseconds, that the local Controller supports for reception of a single Link Layer packet on a data connection.</p>
</td><td><li>0x0148 ... 0x4290</li></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_PHY_anchor">HCI_LE_READ_PHY</a></h2><h3>Description</h3><p>The LE_Read_PHY command is used to read the current transmitter PHY and receiver PHY on the connection identified by the Connection_Handle. see Bluetooth Specification [Vol 2] part E, Section 7.8.47</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_PHY_anchor">HCI_LE_READ_PHY</a></h2><h3>Description</h3><p>The LE_Read_PHY command is used to read the current transmitter PHY and receiver PHY on the connection identified by the Connection_Handle.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.47].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -1873,7 +1872,7 @@ Default: N= 0x0384 (900 secs or 15 minutes)</p>
</td><td><p>Receiver PHY in use</p>
</td><td><li>0x01: The receiver PHY for the connection is LE 1M</li><li>0x02: The receiver PHY for the connection is LE 2M</li><li>0x03: The receiver PHY for the connection is LE Coded
(Not supported by STM32WB)</li></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_DEFAULT_PHY_anchor">HCI_LE_SET_DEFAULT_PHY</a></h2><h3>Description</h3><p>The LE_Set_Default_PHY command allows the Host to specify its preferred values for the transmitter PHY and receiver PHY to be used for all subsequent connections over the LE transport.<br>The ALL_PHYS parameter is a bit field that allows the Host to specify, for each<br>direction, whether it has no preference among the PHYs that the Controller supports in a given direction or whether it has specified particular PHYs that it prefers in the TX_PHYS or RX_PHYS parameter.<br>The TX_PHYS parameter is a bit field that indicates the transmitter PHYs that the Host prefers the Controller to use. If the ALL_PHYS parameter specifies that the Host has no preference, the TX_PHYS parameter is ignored; otherwise at least one bit shall be set to 1.<br>The RX_PHYS parameter is a bit field that indicates the receiver PHYs that the Host prefers the Controller to use. If the ALL_PHYS parameter specifies that the Host has no preference, the RX_PHYS parameter is ignored; otherwise at least one bit shall be set to 1.<br>See Bluetooth Specification [Vol2] Part E Section 7.8.48</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_DEFAULT_PHY_anchor">HCI_LE_SET_DEFAULT_PHY</a></h2><h3>Description</h3><p>The LE_Set_Default_PHY command allows the Host to specify its preferred values for the transmitter PHY and receiver PHY to be used for all subsequent connections over the LE transport.<br>The ALL_PHYS parameter is a bit field that allows the Host to specify, for each<br>direction, whether it has no preference among the PHYs that the Controller supports in a given direction or whether it has specified particular PHYs that it prefers in the TX_PHYS or RX_PHYS parameter.<br>The TX_PHYS parameter is a bit field that indicates the transmitter PHYs that the Host prefers the Controller to use. If the ALL_PHYS parameter specifies that the Host has no preference, the TX_PHYS parameter is ignored; otherwise at least one bit shall be set to 1.<br>The RX_PHYS parameter is a bit field that indicates the receiver PHYs that the Host prefers the Controller to use. If the ALL_PHYS parameter specifies that the Host has no preference, the RX_PHYS parameter is ignored; otherwise at least one bit shall be set to 1.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.48].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>ALL_PHYS</p>
</td><td><p>1</p>
@@ -1893,7 +1892,7 @@ Default: N= 0x0384 (900 secs or 15 minutes)</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_PHY_anchor">HCI_LE_SET_PHY</a></h2><h3>Description</h3><p>The LE_Set_PHY command is used to set the PHY preferences for the connection identified by the Connection_Handle. The Controller might not be able to make the change (e.g. because the peer does not support the requested PHY) or may decide that the current PHY is preferable.<br>The ALL_PHYS parameter is a bit field that allows the Host to specify, for each direction, whether it has no preference among the PHYs that the Controller supports in a given direction or whether it has specified particular PHYs that it prefers in the TX_PHYS or RX_PHYS parameter.<br>The TX_PHYS parameter is a bit field that indicates the transmitter PHYs that the Host prefers the Controller to use. If the ALL_PHYS parameter specifies that the Host has no preference, the TX_PHYS parameter is ignored; otherwise at least one bit shall be set to 1.<br>The RX_PHYS parameter is a bit field that indicates the receiver PHYs that the Host prefers the Controller to use. If the ALL_PHYS parameter specifies that the Host has no preference, the RX_PHYS parameter is ignored; otherwise at least one bit shall be set to 1.<br>If, for at least one direction, the Host has specified a preference and the current PHY is not one of those preferred, the Controller shall request a change. Otherwise the Controller may, but need not, request a change.<br>The PHY preferences provided by the LE Set PHY command override those provided via the LE Set Default PHY command (Section 7.8.48) or any preferences previously set using the LE Set PHY command on the same connection.<br>The PHY_options parameter is a bit field that allows the Host to specify options for PHYs. The default value for a new connection shall be all zero bits. The Controller may override any preferred coding for transmitting on the LE Coded PHY.<br>The Host may specify a preferred coding even if it prefers not to use the LE Coded transmitter PHY since the Controller may override the PHY preference.<br>(See Bluetooth Specification v5.0 [Vol 6] Part B, Section 7.8.49)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_PHY_anchor">HCI_LE_SET_PHY</a></h2><h3>Description</h3><p>The LE_Set_PHY command is used to set the PHY preferences for the connection identified by the Connection_Handle. The Controller might not be able to make the change (e.g. because the peer does not support the requested PHY) or may decide that the current PHY is preferable.<br>The ALL_PHYS parameter is a bit field that allows the Host to specify, for each direction, whether it has no preference among the PHYs that the Controller supports in a given direction or whether it has specified particular PHYs that it prefers in the TX_PHYS or RX_PHYS parameter.<br>The TX_PHYS parameter is a bit field that indicates the transmitter PHYs that the Host prefers the Controller to use. If the ALL_PHYS parameter specifies that the Host has no preference, the TX_PHYS parameter is ignored; otherwise at least one bit shall be set to 1.<br>The RX_PHYS parameter is a bit field that indicates the receiver PHYs that the Host prefers the Controller to use. If the ALL_PHYS parameter specifies that the Host has no preference, the RX_PHYS parameter is ignored; otherwise at least one bit shall be set to 1.<br>If, for at least one direction, the Host has specified a preference and the current PHY is not one of those preferred, the Controller shall request a change. Otherwise the Controller may, but need not, request a change.<br>The PHY preferences provided by the LE Set PHY command override those provided via the LE Set Default PHY command (Section 7.8.48) or any preferences previously set using the LE Set PHY command on the same connection.<br>The PHY_options parameter is a bit field that allows the Host to specify options for PHYs. The default value for a new connection shall be all zero bits. The Controller may override any preferred coding for transmitting on the LE Coded PHY.<br>The Host may specify a preferred coding even if it prefers not to use the LE Coded transmitter PHY since the Controller may override the PHY preference.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.49].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -1921,7 +1920,7 @@ Default: N= 0x0384 (900 secs or 15 minutes)</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#HCI_LE_PHY_UPDATE_COMPLETE_EVENT_anchor">HCI_LE_PHY_UPDATE_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_TRANSMIT_POWER_anchor">HCI_LE_READ_TRANSMIT_POWER</a></h2><h3>Description</h3><p>This command is used to read the minimum and maximum transmit powers supported by the Controller.</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#HCI_LE_PHY_UPDATE_COMPLETE_EVENT_anchor">HCI_LE_PHY_UPDATE_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_READ_TRANSMIT_POWER_anchor">HCI_LE_READ_TRANSMIT_POWER</a></h2><h3>Description</h3><p>This command is used to read the minimum and maximum transmit powers supported by the Controller.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.74].</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -1935,7 +1934,7 @@ Default: N= 0x0384 (900 secs or 15 minutes)</p>
</td><td><p>1</p>
</td><td><p>Signed integer. Units: dBm</p>
</td><td><li>-127 ... 20</li></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_PRIVACY_MODE_anchor">HCI_LE_SET_PRIVACY_MODE</a></h2><h3>Description</h3><p>This command is used to allow the Host to specify the privacy mode to be used for a given entry on the resolving list.<br>(See Bluetooth Specification v.5.0 [Vol 2] Part E, Section 7.8.77)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_SET_PRIVACY_MODE_anchor">HCI_LE_SET_PRIVACY_MODE</a></h2><h3>Description</h3><p>This command is used to allow the Host to specify the privacy mode to be used for a given entry on the resolving list.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.77].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Peer_Identity_Address_Type</p>
</td><td><p>1</p>
@@ -1978,7 +1977,7 @@ Default: N= 0x0384 (900 secs or 15 minutes)</p>
<tr><td><a href="#HCI_LE_ENHANCED_TRANSMITTER_TEST_anchor">HCI_LE_ENHANCED_TRANSMITTER_TEST</a></td><td><p>0x2034</p>
</td><td></td><td></td><td><p>Y</p>
</td><td></td></tr>
-</table><h2><a name="HCI_LE_RECEIVER_TEST_anchor">HCI_LE_RECEIVER_TEST</a></h2><h3>Description</h3><p>This command is used to start a test where the DUT receives test reference packets at a fixed interval. The tester generates the test reference packets.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.28)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="HCI_LE_RECEIVER_TEST_anchor">HCI_LE_RECEIVER_TEST</a></h2><h3>Description</h3><p>This command is used to start a test where the DUT receives test reference packets at a fixed interval. The tester generates the test reference packets.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.28].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>RX_Frequency</p>
</td><td><p>1</p>
@@ -1991,7 +1990,7 @@ Frequency Range : 2402 MHz to 2480 MHz</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_TRANSMITTER_TEST_anchor">HCI_LE_TRANSMITTER_TEST</a></h2><h3>Description</h3><p>This command is used to start a test where the DUT generates test reference packets at a fixed interval. The Controller shall transmit at maximum power.<br>An LE Controller supporting the LE_Transmitter_Test command shall support Packet_Payload values 0x00, 0x01 and 0x02. An LE Controller may support other values of Packet_Payload.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.29)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_TRANSMITTER_TEST_anchor">HCI_LE_TRANSMITTER_TEST</a></h2><h3>Description</h3><p>This command is used to start a test where the DUT generates test reference packets at a fixed interval. The Controller shall transmit at maximum power.<br>An LE Controller supporting the LE_Transmitter_Test command shall support Packet_Payload values 0x00, 0x01 and 0x02. An LE Controller may support other values of Packet_Payload.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.29].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>TX_Frequency</p>
</td><td><p>1</p>
@@ -2012,7 +2011,7 @@ Frequency Range : 2402 MHz to 2480 MHz</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_TEST_END_anchor">HCI_LE_TEST_END</a></h2><h3>Description</h3><p>This command is used to stop any test which is in progress. The Number_Of_Packets for a transmitter test shall be reported as 0x0000. The Number_Of_Packets is an unsigned number and contains the number of received packets.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.8.30)</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_TEST_END_anchor">HCI_LE_TEST_END</a></h2><h3>Description</h3><p>This command is used to stop any test which is in progress. The Number_Of_Packets for a transmitter test shall be reported as 0x0000. The Number_Of_Packets is an unsigned number and contains the number of received packets.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.30].</p><h3>Input parameters</h3><p>None</p><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -2022,7 +2021,7 @@ Frequency Range : 2402 MHz to 2480 MHz</p>
</td><td><p>2</p>
</td><td><p>Number of packets received</p>
</td><td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_ENHANCED_RECEIVER_TEST_anchor">HCI_LE_ENHANCED_RECEIVER_TEST</a></h2><h3>Description</h3><p>This command is used to start a test where the DUT receives test reference packets at a fixed interval. The tester generates the test reference packets.<br>(See Bluetooth Specification v5.0 [Vol 6] Part B, Section 7.8.50)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_ENHANCED_RECEIVER_TEST_anchor">HCI_LE_ENHANCED_RECEIVER_TEST</a></h2><h3>Description</h3><p>This command is used to start a test where the DUT receives test reference packets at a fixed interval. The tester generates the test reference packets.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.50].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>RX_Frequency</p>
</td><td><p>1</p>
@@ -2043,7 +2042,7 @@ Frequency Range : 2402 MHz to 2480 MHz</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_ENHANCED_TRANSMITTER_TEST_anchor">HCI_LE_ENHANCED_TRANSMITTER_TEST</a></h2><h3>Description</h3><p>This command is used to start a test where the DUT generates test reference packets at a fixed interval. The Controller shall transmit at maximum power.<br>An LE Controller supporting the LE_Enhanced Transmitter_Test command shall support Packet_Payload values 0x00, 0x01 and 0x02. An LE Controller supporting the LE Coded PHY shall also support Packet_Payload value 0x04 (not supported by STM32WB). An LE Controller may support other values of Packet_Payload.<br>(See Bluetooth Specification v5.0 [Vol 6] Part B, Section 7.8.51)</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="HCI_LE_ENHANCED_TRANSMITTER_TEST_anchor">HCI_LE_ENHANCED_TRANSMITTER_TEST</a></h2><h3>Description</h3><p>This command is used to start a test where the DUT generates test reference packets at a fixed interval. The Controller shall transmit at maximum power.<br>An LE Controller supporting the LE_Enhanced Transmitter_Test command shall support Packet_Payload values 0x00, 0x01 and 0x02. An LE Controller supporting the LE Coded PHY shall also support Packet_Payload value 0x04 (not supported by STM32WB). An LE Controller may support other values of Packet_Payload.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.8.51].</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>TX_Frequency</p>
</td><td><p>1</p>
@@ -2125,6 +2124,8 @@ Frequency Range : 2402 MHz to 2480 MHz</p>
<tr><td><a href="#ACI_HAL_GET_PM_DEBUG_INFO_anchor">ACI_HAL_GET_PM_DEBUG_INFO</a></td><td><p>0xFC1C</p>
</td><td></td><td></td><td><p>Y</p>
</td><td></td></tr>
+<tr><td><a href="#ACI_HAL_SET_SLAVE_LATENCY_anchor">ACI_HAL_SET_SLAVE_LATENCY</a></td><td><p>0xFC20</p>
+</td><td></td><td></td><td></td><td></td></tr>
<tr><td><a href="#ACI_HAL_READ_RADIO_REG_anchor">ACI_HAL_READ_RADIO_REG</a></td><td><p>0xFC30</p>
</td><td></td><td><p>Y</p>
</td><td><p>Y</p>
@@ -2161,7 +2162,7 @@ Frequency Range : 2402 MHz to 2480 MHz</p>
</td><td><p>2</p>
</td><td><p>Build number of the firmware.</p>
</td><td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="ACI_HAL_WRITE_CONFIG_DATA_anchor">ACI_HAL_WRITE_CONFIG_DATA</a></h2><h3>Description</h3><p>This command writes a value to a low level configure data structure. It is useful to setup directly some low level parameters for the system in the runtime.</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="ACI_HAL_WRITE_CONFIG_DATA_anchor">ACI_HAL_WRITE_CONFIG_DATA</a></h2><h3>Description</h3><p>This command writes a value to a configure data structure. It is useful to setup directly some parameters for the system in the runtime.<br>Note: the static random address set by this command is taken into account by the GAP only when it receives the <a href="#ACI_GAP_INIT_anchor">ACI_GAP_INIT</a> command.</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Offset</p>
</td><td><p>1</p>
@@ -2186,7 +2187,7 @@ Static Random Address; 6 bytes</li></td></tr>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="ACI_HAL_READ_CONFIG_DATA_anchor">ACI_HAL_READ_CONFIG_DATA</a></h2><h3>Description</h3><p>This command requests the value in the low level configure data structure.<br>The number of read bytes changes for different Offset. </p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="ACI_HAL_READ_CONFIG_DATA_anchor">ACI_HAL_READ_CONFIG_DATA</a></h2><h3>Description</h3><p>This command requests the value in the configure data structure. The number of read bytes changes for different Offset. </p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Offset</p>
</td><td><p>1</p>
@@ -2195,8 +2196,8 @@ which has to be read.</p>
</td><td><li>0x00: CONFIG_DATA_PUBADDR_OFFSET;
Bluetooth public address; 6 bytes</li><li>0x08: CONFIG_DATA_ER_OFFSET;
Encryption root key used to derive LTK and CSRK; 16 bytes</li><li>0x18: CONFIG_DATA_IR_OFFSET
-Identity root key used to derive LTK and CSRK; 16 bytes</li><li>0x80: CONFIG_DATA_RANDOM_ADDRESS
-Static random address; 6 bytes (read-only)</li></td></tr>
+Identity root key used to derive LTK and CSRK; 16 bytes</li><li>0x2E: CONFIG_DATA_RANDOM_ADDRESS_WR;
+Static Random Address; 6 bytes</li></td></tr>
</table><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
@@ -2347,6 +2348,18 @@ T = N * 0.625 ms.</p>
</td><td><p>1</p>
</td><td><p>Overall allocated MBlocks</p>
</td><td></tr>
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="ACI_HAL_SET_SLAVE_LATENCY_anchor">ACI_HAL_SET_SLAVE_LATENCY</a></h2><h3>Description</h3><p>This command is used to disable/enable the slave latency feature during a connection. Note that, by default, the slave latency is enabled at connection time.</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
+<tr><td><p>Enable</p>
+</td><td><p>1</p>
+</td><td><p>Enable/disable slave latency.</p>
+</td><td><li>0x00: Slave latency is disabled</li><li>0x01: Slave latency is enabled</li></td></tr>
+</table><h3>Output parameters</h3><table width="800" border="1" class="reference">
+<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
+<tr><td><p>Status</p>
+</td><td><p>1</p>
+</td><td><p>Status error code.</p>
+</td><td></td></tr>
</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="ACI_HAL_READ_RADIO_REG_anchor">ACI_HAL_READ_RADIO_REG</a></h2><h3>Description</h3><p>This command Reads Register value from the RF module.</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Register_Address</p>
@@ -2579,7 +2592,7 @@ frequency deviation (250kHz).</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="ACI_GAP_SET_LIMITED_DISCOVERABLE_anchor">ACI_GAP_SET_LIMITED_DISCOVERABLE</a></h2><h3>Description</h3><p>Put the device in limited discoverable mode (as defined in Bluetooth Specification v.5.0, Vol. 3, Part C, section 9.2.3). The device will be discoverable for maximum period of TGAP (lim_adv_timeout) = 180 seconds (from errata). The advertising can be disabled at any time by issuing <a href="#ACI_GAP_SET_NON_DISCOVERABLE_anchor">ACI_GAP_SET_NON_DISCOVERABLE</a> command.<br>The Adv_Interval_Min and Adv_Interval_Max parameters are optional. If both are set to 0, the GAP will use default values for adv intervals for limited discoverable mode (250 ms and 500 ms respectively).<br>To allow a fast connection, the host can set Local_Name, Service_Uuid_List, Slave_Conn_Interval_Min and Slave_Conn_Interval_Max. If provided, these data will be inserted into the advertising packet payload as AD data. These parameters are optional in this command. These values can be set in advertised data using <a href="#ACI_GAP_UPDATE_ADV_DATA_anchor">ACI_GAP_UPDATE_ADV_DATA</a> command separately.<br>The total size of data in advertising packet cannot exceed 31 bytes.<br>With this command, the BLE Stack will also add automatically the following standard AD types:<br>- AD Flags<br>- Power Level<br>When advertising timeout happens (i.e. limited discovery period has elapsed), controller generates <a href="#ACI_GAP_LIMITED_DISCOVERABLE_EVENT_anchor">ACI_GAP_LIMITED_DISCOVERABLE_EVENT</a> event. </p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="ACI_GAP_SET_LIMITED_DISCOVERABLE_anchor">ACI_GAP_SET_LIMITED_DISCOVERABLE</a></h2><h3>Description</h3><p>Put the device in limited discoverable mode (as defined in Bluetooth spec. v.5.2 [Vol 3, Part C, 9.2.3]). The device will be discoverable for maximum period of TGAP (lim_adv_timeout) = 180 seconds (from errata). The advertising can be disabled at any time by issuing <a href="#ACI_GAP_SET_NON_DISCOVERABLE_anchor">ACI_GAP_SET_NON_DISCOVERABLE</a> command.<br>The Adv_Interval_Min and Adv_Interval_Max parameters are optional. If both are set to 0, the GAP will use default values for adv intervals for limited discoverable mode (250 ms and 500 ms respectively).<br>To allow a fast connection, the host can set Local_Name, Service_Uuid_List, Slave_Conn_Interval_Min and Slave_Conn_Interval_Max. If provided, these data will be inserted into the advertising packet payload as AD data. These parameters are optional in this command. These values can be set in advertised data using <a href="#ACI_GAP_UPDATE_ADV_DATA_anchor">ACI_GAP_UPDATE_ADV_DATA</a> command separately.<br>The total size of data in advertising packet cannot exceed 31 bytes.<br>With this command, the BLE Stack will also add automatically the following standard AD types:<br>- AD Flags<br>- Power Level<br>When advertising timeout happens (i.e. limited discovery period has elapsed), controller generates <a href="#ACI_GAP_LIMITED_DISCOVERABLE_EVENT_anchor">ACI_GAP_LIMITED_DISCOVERABLE_EVENT</a> event. </p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Advertising_Type</p>
</td><td><p>1</p>
@@ -2623,8 +2636,7 @@ If there is no service to be advertised, set this field to 0x00.</p>
</td><td></tr>
<tr><td><p>Service_Uuid_List</p>
</td><td><p>Service_Uuid_length</p>
-</td><td><p>This is the list of the UUIDs as defined in Volume 3, Section 11 of GAP Specification. First byte is the AD Type.
-See also Supplement to the Bluetooth Core 5.0 specification.</p>
+</td><td><p>This is the list of the UUIDs as defined in Volume 3, Section 11 of GAP Specification. First byte is the AD Type.</p>
</td><td></tr>
<tr><td><p>Slave_Conn_Interval_Min</p>
</td><td><p>2</p>
@@ -2646,7 +2658,7 @@ connIntervalmax = Slave_Conn_Interval_Max x 1.25ms</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#ACI_GAP_LIMITED_DISCOVERABLE_EVENT_anchor">ACI_GAP_LIMITED_DISCOVERABLE_EVENT</a></li><h2><a name="ACI_GAP_SET_DISCOVERABLE_anchor">ACI_GAP_SET_DISCOVERABLE</a></h2><h3>Description</h3><p>Put the device in general discoverable mode (as defined in Bluetooth Specification v.5.0, Vol. 3, Part C, section 9.2.4). The device will be discoverable until the host issues the <a href="#ACI_GAP_SET_NON_DISCOVERABLE_anchor">ACI_GAP_SET_NON_DISCOVERABLE</a> command. The Adv_Interval_Min and Adv_Interval_Max parameters are optional. If both are set to 0, the GAP uses the default values for adv intervals for general discoverable mode.<br>When using connectable undirected advertising events:<br>- Adv_Interval_Min = 30 ms <br>- Adv_Interval_Max = 60 ms<br>When using non-connectable advertising events or scannable undirected advertising events:<br>- Adv_Interval_Min = 100 ms <br>- Adv_Interval_Max = 150 ms <br>Host can set the Local Name, a Service UUID list and the Slave Connection Interval Range.<br>If provided, these data will be inserted into the advertising packet payload as AD data.<br>These parameters are optional in this command. These values can be also set using <a href="#ACI_GAP_UPDATE_ADV_DATA_anchor">ACI_GAP_UPDATE_ADV_DATA</a> command separately.<br>The total size of data in advertising packet cannot exceed 31 bytes.<br>With this command, the BLE Stack will also add automatically the following standard AD types:<br>- AD Flags<br>- TX Power Level</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#ACI_GAP_LIMITED_DISCOVERABLE_EVENT_anchor">ACI_GAP_LIMITED_DISCOVERABLE_EVENT</a></li><h2><a name="ACI_GAP_SET_DISCOVERABLE_anchor">ACI_GAP_SET_DISCOVERABLE</a></h2><h3>Description</h3><p>Put the device in general discoverable mode (as defined in Bluetooth spec. v.5.2 [Vol 3, Part C, 9.2.4]). The device will be discoverable until the host issues the <a href="#ACI_GAP_SET_NON_DISCOVERABLE_anchor">ACI_GAP_SET_NON_DISCOVERABLE</a> command. The Adv_Interval_Min and Adv_Interval_Max parameters are optional. If both are set to 0, the GAP uses the default values for adv intervals for general discoverable mode.<br>When using connectable undirected advertising events:<br>- Adv_Interval_Min = 30 ms <br>- Adv_Interval_Max = 60 ms<br>When using non-connectable advertising events or scannable undirected advertising events:<br>- Adv_Interval_Min = 100 ms <br>- Adv_Interval_Max = 150 ms <br>Host can set the Local Name, a Service UUID list and the Slave Connection Interval Range.<br>If provided, these data will be inserted into the advertising packet payload as AD data.<br>These parameters are optional in this command. These values can be also set using <a href="#ACI_GAP_UPDATE_ADV_DATA_anchor">ACI_GAP_UPDATE_ADV_DATA</a> command separately.<br>The total size of data in advertising packet cannot exceed 31 bytes.<br>With this command, the BLE Stack will also add automatically the following standard AD types:<br>- AD Flags<br>- TX Power Level</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Advertising_Type</p>
</td><td><p>1</p>
@@ -2690,8 +2702,7 @@ If there is no service to be advertised, set this field to 0x00.</p>
</td><td></tr>
<tr><td><p>Service_Uuid_List</p>
</td><td><p>Service_Uuid_length</p>
-</td><td><p>This is the list of the UUIDs as defined in Volume 3, Section 11 of GAP Specification. First byte is the AD Type.
-See also Supplement to the Bluetooth Core 5.0 specification.</p>
+</td><td><p>This is the list of the UUIDs as defined in Volume 3, Section 11 of GAP Specification. First byte is the AD Type.</p>
</td><td></tr>
<tr><td><p>Slave_Conn_Interval_Min</p>
</td><td><p>2</p>
@@ -2713,7 +2724,7 @@ connIntervalmax = Slave_Conn_Interval_Max x 1.25ms</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="ACI_GAP_SET_DIRECT_CONNECTABLE_anchor">ACI_GAP_SET_DIRECT_CONNECTABLE</a></h2><h3>Description</h3><p>Set the device in direct connectable mode (as defined in Bluetooth Specification v.5.0, Vol. 3, Part C, section 9.3.3). Device uses direct connectable mode to advertise using High Duty cycle advertisement events or Low Duty cycle advertisement events and the address as either what is specified in the Own Address Type parameter. The command specifies the type of the advertising used.<br>If the privacy is enabled, the Type parameter in reconnection address is used for advertising, otherwise the address of the type specified in OwnAddrType is used.<br>The device stays in directed connectable mode only for 1.28 seconds. If no connection is established within this duration, the device enters non discoverable mode and advertising has to be again enabled explicitly.<br>The controller generates a <a href="#HCI_LE_CONNECTION_COMPLETE_EVENT_anchor">HCI_LE_CONNECTION_COMPLETE_EVENT</a> event with the status set to HCI_ADVERTISING_TIMEOUT_ERR_CODE if the connection was not established and BLE_STATUS_SUCCESS (0x00) if the connection was successfully established.<br>If Host privacy is enabled this command returns BLE_STATUS_INVALID_PARAMS.</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="ACI_GAP_SET_DIRECT_CONNECTABLE_anchor">ACI_GAP_SET_DIRECT_CONNECTABLE</a></h2><h3>Description</h3><p>Set the device in direct connectable mode (as defined in Bluetooth spec. v.5.2 [Vol 3, Part C, 9.3.3]). Device uses direct connectable mode to advertise using High Duty cycle advertisement events or Low Duty cycle advertisement events and the address as either what is specified in the Own Address Type parameter. The command specifies the type of the advertising used.<br>If the privacy is enabled, the Type parameter in reconnection address is used for advertising, otherwise the address of the type specified in OwnAddrType is used.<br>The device stays in directed connectable mode only for 1.28 seconds. If no connection is established within this duration, the device enters non discoverable mode and advertising has to be again enabled explicitly.<br>The controller generates a <a href="#HCI_LE_CONNECTION_COMPLETE_EVENT_anchor">HCI_LE_CONNECTION_COMPLETE_EVENT</a> event with the status set to HCI_ADVERTISING_TIMEOUT_ERR_CODE if the connection was not established and BLE_STATUS_SUCCESS (0x00) if the connection was successfully established.<br>If Host privacy is enabled this command returns BLE_STATUS_INVALID_PARAMS.</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Own_Address_Type</p>
</td><td><p>1</p>
@@ -2972,7 +2983,7 @@ Time = N * 0.625 msec.</p>
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>ADType</p>
</td><td><p>1</p>
-</td><td><p>One of the AD types like in Bluetooth specification (see volume 3, Part C, 11.1)</p>
+</td><td><p>One of the AD types as in Bluetooth spec. [Vol 3, Part C, 11].</p>
</td><td></tr>
</table><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
@@ -3176,7 +3187,7 @@ Time = N * 0.625 msec.</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#ACI_GAP_PROC_COMPLETE_EVENT_anchor">ACI_GAP_PROC_COMPLETE_EVENT</a></li><h2><a name="ACI_GAP_START_AUTO_CONNECTION_ESTABLISH_PROC_anchor">ACI_GAP_START_AUTO_CONNECTION_ESTABLISH_PROC</a></h2><h3>Description</h3><p>Start the auto connection establishment procedure. The devices specified are added to the white list of the controller and a LE_Create_Connection call will be made to the controller by GAP with the initiator filter policy set to "use whitelist to determine which advertiser to connect to". When a command is issued to terminate the procedure by upper layer, a LE_Create_Connection_Cancel call will be made to the controller by GAP.<br>The procedure is terminated when either a connection is successfully established with one of the specified devices in the white list or the procedure is explicitly terminated by issuing the command <a href="#ACI_GAP_TERMINATE_GAP_PROC_anchor">ACI_GAP_TERMINATE_GAP_PROC</a> with the procedure code set to 0x08. A <a href="#ACI_GAP_PROC_COMPLETE_EVENT_anchor">ACI_GAP_PROC_COMPLETE_EVENT</a> event is returned with the procedure code set to 0x08.<br>If controller privacy is enabled and the peer device (advertiser) is in the resolving list then the link layer will generate a RPA, if it is not then the RPA/NRPA generated by the Host will be used.</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#ACI_GAP_PROC_COMPLETE_EVENT_anchor">ACI_GAP_PROC_COMPLETE_EVENT</a></li><h2><a name="ACI_GAP_START_AUTO_CONNECTION_ESTABLISH_PROC_anchor">ACI_GAP_START_AUTO_CONNECTION_ESTABLISH_PROC</a></h2><h3>Description</h3><p>Start the auto connection establishment procedure. The devices specified are added to the whitelist of the controller and a LE_Create_Connection call will be made to the controller by GAP with the initiator filter policy set to "use whitelist to determine which advertiser to connect to". When a command is issued to terminate the procedure by upper layer, a LE_Create_Connection_Cancel call will be made to the controller by GAP.<br>The procedure is terminated when either a connection is successfully established with one of the specified devices in the whitelist or the procedure is explicitly terminated by issuing the command <a href="#ACI_GAP_TERMINATE_GAP_PROC_anchor">ACI_GAP_TERMINATE_GAP_PROC</a> with the procedure code set to 0x08. A <a href="#ACI_GAP_PROC_COMPLETE_EVENT_anchor">ACI_GAP_PROC_COMPLETE_EVENT</a> event is returned with the procedure code set to 0x08.<br>If controller privacy is enabled and the peer device (advertiser) is in the resolving list then the link layer will generate a RPA, if it is not then the RPA/NRPA generated by the Host will be used.</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>LE_Scan_Interval</p>
</td><td><p>2</p>
@@ -3292,7 +3303,7 @@ Time = N * 0.625 msec.</p>
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#ACI_GAP_PROC_COMPLETE_EVENT_anchor">ACI_GAP_PROC_COMPLETE_EVENT</a></li><h2><a name="ACI_GAP_START_SELECTIVE_CONNECTION_ESTABLISH_PROC_anchor">ACI_GAP_START_SELECTIVE_CONNECTION_ESTABLISH_PROC</a></h2><h3>Description</h3><p>Start a selective connection establishment procedure. The GAP adds the specified device addresses into white list and enables scanning in the controller with the scanner filter policy set to "accept packets only from devices in whitelist". All the devices found are sent to the upper layer by the event <a href="#HCI_LE_ADVERTISING_REPORT_EVENT_anchor">HCI_LE_ADVERTISING_REPORT_EVENT</a>. The upper layer then has to select one of the devices to which it wants to connect by issuing the command <a href="#ACI_GAP_CREATE_CONNECTION_anchor">ACI_GAP_CREATE_CONNECTION</a>.<br>On completion of the procedure a <a href="#ACI_GAP_PROC_COMPLETE_EVENT_anchor">ACI_GAP_PROC_COMPLETE_EVENT</a> event is generated with the procedure code set to 0x20. The procedure is terminated when a connection is established or the upper layer terminates the procedure by issuing the command <a href="#ACI_GAP_TERMINATE_GAP_PROC_anchor">ACI_GAP_TERMINATE_GAP_PROC</a> with the procedure code set to 0x20.<br>If controller privacy is enabled and the peer device (advertiser) is in the resolving list then the link layer will generate a RPA, if it is not then the RPA/NRPA generated by the Host will be used.</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_STATUS_EVENT_anchor">HCI_COMMAND_STATUS_EVENT</a></li><li><a href="#ACI_GAP_PROC_COMPLETE_EVENT_anchor">ACI_GAP_PROC_COMPLETE_EVENT</a></li><h2><a name="ACI_GAP_START_SELECTIVE_CONNECTION_ESTABLISH_PROC_anchor">ACI_GAP_START_SELECTIVE_CONNECTION_ESTABLISH_PROC</a></h2><h3>Description</h3><p>Start a selective connection establishment procedure. The GAP adds the specified device addresses into whitelist and enables scanning in the controller with the scanner filter policy set to "accept packets only from devices in whitelist". All the devices found are sent to the upper layer by the event <a href="#HCI_LE_ADVERTISING_REPORT_EVENT_anchor">HCI_LE_ADVERTISING_REPORT_EVENT</a>. The upper layer then has to select one of the devices to which it wants to connect by issuing the command <a href="#ACI_GAP_CREATE_CONNECTION_anchor">ACI_GAP_CREATE_CONNECTION</a>.<br>On completion of the procedure a <a href="#ACI_GAP_PROC_COMPLETE_EVENT_anchor">ACI_GAP_PROC_COMPLETE_EVENT</a> event is generated with the procedure code set to 0x20. The procedure is terminated when a connection is established or the upper layer terminates the procedure by issuing the command <a href="#ACI_GAP_TERMINATE_GAP_PROC_anchor">ACI_GAP_TERMINATE_GAP_PROC</a> with the procedure code set to 0x20.<br>If controller privacy is enabled and the peer device (advertiser) is in the resolving list then the link layer will generate a RPA, if it is not then the RPA/NRPA generated by the Host will be used.</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>LE_Scan_Type</p>
</td><td><p>1</p>
@@ -3552,7 +3563,7 @@ If Privacy is enabled, then the address can be a resolvable private address or a
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="ACI_GAP_START_OBSERVATION_PROC_anchor">ACI_GAP_START_OBSERVATION_PROC</a></h2><h3>Description</h3><p>Starts an Observation procedure, when the device is in Observer Role. The host enables scanning in the controller. The advertising reports are sent to the upper layer using standard LE Advertising Report Event. (See Bluetooth Core v5.0, Vol. 2, part E, Ch. 7.7.65.2, LE Advertising Report Event).<br>If controller privacy is enabled and the peer device (advertiser) is in the resolving list then the link layer will generate a RPA, if it is not then the RPA/NRPA generated by the Host will be used.</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="ACI_GAP_START_OBSERVATION_PROC_anchor">ACI_GAP_START_OBSERVATION_PROC</a></h2><h3>Description</h3><p>Starts an Observation procedure, when the device is in Observer Role. The host enables scanning in the controller. The advertising reports are sent to the upper layer using standard LE Advertising Report Event.<br>If controller privacy is enabled and the peer device (advertiser) is in the resolving list then the link layer will generate a RPA, if it is not then the RPA/NRPA generated by the Host will be used.</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>LE_Scan_Interval</p>
</td><td><p>2</p>
@@ -3672,7 +3683,7 @@ Time = N * 0.625 msec.</p>
<tr><td><p>OOB_Data_Type</p>
</td><td><p>1</p>
</td><td><p>OOB Data type</p>
-</td><td><li>0x00: TK (LP v.4.1)</li><li>0x01: Random (SC v.4.2)</li><li>0x02: Confirm (SC v.4.2)</li></td></tr>
+</td><td><li>0x00: TK (LP v.4.1)</li><li>0x01: Random (SC)</li><li>0x02: Confirm (SC)</li></td></tr>
</table><h3>Output parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
@@ -3690,7 +3701,7 @@ Time = N * 0.625 msec.</p>
<tr><td><p>OOB_Data_Type</p>
</td><td><p>1</p>
</td><td><p>OOB Data type</p>
-</td><td><li>0x00: TK (LP v.4.1)</li><li>0x01: Random (SC v.4.2)</li><li>0x02: Confirm (SC v.4.2)</li></td></tr>
+</td><td><li>0x00: TK (LP v.4.1)</li><li>0x01: Random (SC)</li><li>0x02: Confirm (SC)</li></td></tr>
<tr><td><p>OOB_Data_Len</p>
</td><td><p>1</p>
</td><td><p>Length of OOB Data</p>
@@ -3716,7 +3727,7 @@ Time = N * 0.625 msec.</p>
<tr><td><p>OOB_Data_Type</p>
</td><td><p>1</p>
</td><td><p>OOB Data type</p>
-</td><td><li>0x00: TK (LP v.4.1)</li><li>0x01: Random (SC v.4.2)</li><li>0x02: Confirm (SC v.4.2)</li></td></tr>
+</td><td><li>0x00: TK (LP v.4.1)</li><li>0x01: Random (SC)</li><li>0x02: Confirm (SC)</li></td></tr>
<tr><td><p>OOB_Data_Len</p>
</td><td><p>1</p>
</td><td><p>Length of OOB Data</p>
@@ -4014,7 +4025,7 @@ Server also allocates a range of handles for this service from serviceHandle to
</td><td></tr>
<tr><td><p>Char_Properties</p>
</td><td><p>1</p>
-</td><td><p>Characteristic Properties (Volume 3, Part G, section 3.3.1.1 of Bluetooth Specification 5.0)</p>
+</td><td><p>Characteristic Properties (Volume 3, Part G, section 3.3.1.1 of Bluetooth Core Specification)</p>
</td><td><p>Bitmask of:</p><li>0x00: CHAR_PROP_NONE</li><li>0x01: CHAR_PROP_BROADCAST (Broadcast)</li><li>0x02: CHAR_PROP_READ (Read)</li><li>0x04: CHAR_PROP_WRITE_WITHOUT_RESP (Write w/o resp)</li><li>0x08: CHAR_PROP_WRITE (Write)</li><li>0x10: CHAR_PROP_NOTIFY (Notify)</li><li>0x20: CHAR_PROP_INDICATE (Indicate)</li><li>0x40: CHAR_PROP_SIGNED_WRITE (Authenticated Signed Writes)</li><li>0x80: CHAR_PROP_EXT (Extended Properties)</li></td></tr>
<tr><td><p>Security_Permissions</p>
</td><td><p>1</p>
@@ -4105,7 +4116,7 @@ a variable length.</p>
</td><td><p>2</p>
</td><td><p>Handle of the characteristic descriptor</p>
</td><td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="ACI_GATT_UPDATE_CHAR_VALUE_anchor">ACI_GATT_UPDATE_CHAR_VALUE</a></h2><h3>Description</h3><p>Update a characteristic value in a service. If notifications (or indications) are enabled on that characteristic, a notification (or indication) is sent to the client after sending this command. The command is queued into the STM32WB command queue. <br>If the buffer is full, because previous commands could not be still processed, the function will return BLE_STATUS_INSUFFICIENT_RESOURCES. This will happen if notifications (or indications) are enabled and the application calls <a href="#ACI_GATT_UPDATE_CHAR_VALUE_anchor">ACI_GATT_UPDATE_CHAR_VALUE</a> at an higher rate than what is allowed by the link. <br>Throughput on BLE link depends on connection interval and connection length parameters (decided by the master, see aci_l2cap_connection_parameter_update_request() for more info on how to suggest new connection parameters from a slave). If the application does not want to lose notifications because STM32WB buffer becomes full, it has to retry again till the function returns BLE_STATUS_SUCCESS or any other error code.</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="ACI_GATT_UPDATE_CHAR_VALUE_anchor">ACI_GATT_UPDATE_CHAR_VALUE</a></h2><h3>Description</h3><p>Update a characteristic value in a service. If notifications (or indications) are enabled on that characteristic, a notification (or indication) is sent to the client after sending this command. The command is queued into the STM32WB command queue. <br>If the buffer is full, because previous commands could not be still processed, the function will return BLE_STATUS_INSUFFICIENT_RESOURCES. This will happen if notifications (or indications) are enabled and the application calls <a href="#ACI_GATT_UPDATE_CHAR_VALUE_anchor">ACI_GATT_UPDATE_CHAR_VALUE</a> at an higher rate than what is allowed by the link. <br>Throughput on BLE link depends on connection interval and connection length parameters (decided by the master, see aci_l2cap_connection_parameter_update_request() for more info on how to suggest new connection parameters from a slave). If the application does not want to lose notifications because STM32WB buffer becomes full, it must retry again till the function returns BLE_STATUS_SUCCESS or any other error code.</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Service_Handle</p>
</td><td><p>2</p>
@@ -4819,7 +4830,7 @@ If the Val_Offset is set to a value greater than 0, then the length of the attri
</td><td><p>1</p>
</td><td><p>Status error code.</p>
</td><td></td></tr>
-</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="ACI_GATT_ALLOW_READ_anchor">ACI_GATT_ALLOW_READ</a></h2><h3>Description</h3><p>Allow the GATT server to send a response to a read request from a client.<br>The application has to send this command when it receives the<br><a href="#ACI_GATT_READ_PERMIT_REQ_EVENT_anchor">ACI_GATT_READ_PERMIT_REQ_EVENT</a> or <a href="#ACI_GATT_READ_MULTI_PERMIT_REQ_EVENT_anchor">ACI_GATT_READ_MULTI_PERMIT_REQ_EVENT</a>. This command indicates to the stack that the response can be sent to the client. So if the application wishes to update any of the attributes before they are read by the client, it has to update the characteristic values using the <a href="#ACI_GATT_UPDATE_CHAR_VALUE_anchor">ACI_GATT_UPDATE_CHAR_VALUE</a> and then give this command. The application should perform the required operations within 30 seconds. Otherwise the GATT procedure will be timeout.</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
+</table><h3>Events generated</h3><li><a href="#HCI_COMMAND_COMPLETE_EVENT_anchor">HCI_COMMAND_COMPLETE_EVENT</a></li><h2><a name="ACI_GATT_ALLOW_READ_anchor">ACI_GATT_ALLOW_READ</a></h2><h3>Description</h3><p>Allow the GATT server to send a response to a read request from a client.<br>The application has to send this command when it receives the<br><a href="#ACI_GATT_READ_PERMIT_REQ_EVENT_anchor">ACI_GATT_READ_PERMIT_REQ_EVENT</a> or <a href="#ACI_GATT_READ_MULTI_PERMIT_REQ_EVENT_anchor">ACI_GATT_READ_MULTI_PERMIT_REQ_EVENT</a>. This command indicates to the stack that the response can be sent to the client. So if the application wishes to update any of the attributes before they are read by the client, it must update the characteristic values using the <a href="#ACI_GATT_UPDATE_CHAR_VALUE_anchor">ACI_GATT_UPDATE_CHAR_VALUE</a> and then give this command. The application should perform the required operations within 30 seconds. Otherwise the GATT procedure will be timeout.</p><h3>Input parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -5311,9 +5322,9 @@ Time = N * 0.625 msec.</p>
</td><td><li>0x0000 ... 0x0EFF</li></td></tr>
<tr><td><p>Reason</p>
</td><td><p>1</p>
-</td><td><p>Reason for disconnection (see Bluetooth Core Specification [Vol 2] Part D, Error Codes).</p>
+</td><td><p>Reason for disconnection (see Bluetooth spec. [Vol 1, Part F] Error Codes).</p>
</td><td></tr>
-</table><h2><a name="HCI_ENCRYPTION_CHANGE_EVENT_anchor">HCI_ENCRYPTION_CHANGE_EVENT</a></h2><h3>Description</h3><p>The Encryption Change event is used to indicate that the change of the encryption mode has been completed. The Connection_Handle will be a Connection_Handle for an ACL connection. The Encryption_Enabled event parameter specifies the new Encryption_Enabled parameter for the Connection_Handle specified by the Connection_Handle event parameter. This event will occur on both devices to notify the Hosts when Encryption has changed for the specified Connection_Handle between two devices. Note: This event shall not be generated if encryption is paused or resumed; during a role switch, for example.<br>The meaning of the Encryption_Enabled parameter depends on whether the Host has indicated support for Secure Connections in the Secure_Connections_Host_Support parameter. When Secure_Connections_Host_Support is 'disabled' or the Connection_Handle refers to an LE link, the Controller shall only use Encryption_Enabled values 0x00 (OFF) and 0x01 (ON).<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.7.8)</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="HCI_ENCRYPTION_CHANGE_EVENT_anchor">HCI_ENCRYPTION_CHANGE_EVENT</a></h2><h3>Description</h3><p>The Encryption Change event is used to indicate that the change of the encryption mode has been completed. The Connection_Handle will be a Connection_Handle for an ACL connection. The Encryption_Enabled event parameter specifies the new Encryption_Enabled parameter for the Connection_Handle specified by the Connection_Handle event parameter. This event will occur on both devices to notify the Hosts when Encryption has changed for the specified Connection_Handle between two devices. Note: This event shall not be generated if encryption is paused or resumed; during a role switch, for example.<br>The meaning of the Encryption_Enabled parameter depends on whether the Host has indicated support for Secure Connections in the Secure_Connections_Host_Support parameter. When Secure_Connections_Host_Support is 'disabled' or the Connection_Handle refers to an LE link, the Controller shall only use Encryption_Enabled values 0x00 (OFF) and 0x01 (ON).<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.8].</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -5327,7 +5338,7 @@ Time = N * 0.625 msec.</p>
</td><td><p>1</p>
</td><td><p>Link Level Encryption.</p>
</td><td><li>0x00: Link Level Encryption OFF</li><li>0x01: Link Level Encryption is ON with AES-CCM</li></td></tr>
-</table><h2><a name="HCI_READ_REMOTE_VERSION_INFORMATION_COMPLETE_EVENT_anchor">HCI_READ_REMOTE_VERSION_INFORMATION_COMPLETE_EVENT</a></h2><h3>Description</h3><p>The Read Remote Version Information Complete event is used to indicate the completion of the process obtaining the version information of the remote Controller specified by the Connection_Handle event parameter. The Connection_Handle shall be for an ACL connection.<br>The Version event parameter defines the specification version of the LE Controller.<br>The Manufacturer_Name event parameter indicates the manufacturer of the remote Controller. The Subversion event parameter is controlled by the manufacturer and is implementation dependent. The Subversion event parameter defines the various revisions that each version of the Bluetooth hardware will go through as design processes change and errors are fixed. This allows the software to determine what Bluetooth hardware is being used and, if necessary, to work around various bugs in the hardware.<br>When the Connection_Handle is associated with an LE-U logical link, the Version event parameter shall be Link Layer VersNr parameter, the Manufacturer_Name event parameter shall be the CompId parameter, and the Subversion event parameter shall be the SubVersNr parameter.<br>(See Bluetooth Specification v.5.0, Vol. 2, Part E, 7.7.12)</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="HCI_READ_REMOTE_VERSION_INFORMATION_COMPLETE_EVENT_anchor">HCI_READ_REMOTE_VERSION_INFORMATION_COMPLETE_EVENT</a></h2><h3>Description</h3><p>The Read Remote Version Information Complete event is used to indicate the completion of the process obtaining the version information of the remote Controller specified by the Connection_Handle event parameter. The Connection_Handle shall be for an ACL connection.<br>The Version event parameter defines the specification version of the LE Controller.<br>The Manufacturer_Name event parameter indicates the manufacturer of the remote Controller. The Subversion event parameter is controlled by the manufacturer and is implementation dependent. The Subversion event parameter defines the various revisions that each version of the Bluetooth hardware will go through as design processes change and errors are fixed. This allows the software to determine what Bluetooth hardware is being used and, if necessary, to work around various bugs in the hardware.<br>When the Connection_Handle is associated with an LE-U logical link, the Version event parameter shall be Link Layer VersNr parameter, the Manufacturer_Name event parameter shall be the CompId parameter, and the Subversion event parameter shall be the SubVersNr parameter.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.12].</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -5462,7 +5473,7 @@ Error code 3 is internal FIFO full.</p>
<tr><td><a href="#HCI_LE_PHY_UPDATE_COMPLETE_EVENT_anchor">HCI_LE_PHY_UPDATE_COMPLETE_EVENT</a></td><td><p>0x0C</p>
</td><td></td><td></td><td><p>Y</p>
</td><td></td></tr>
-</table><h2><a name="HCI_LE_CONNECTION_COMPLETE_EVENT_anchor">HCI_LE_CONNECTION_COMPLETE_EVENT</a></h2><h3>Description</h3><p>The LE Connection Complete event indicates to both of the Hosts forming the connection that a new connection has been created. Upon the creation of the connection a Connection_Handle shall be assigned by the Controller, and passed to the Host in this event. If the connection establishment fails this event shall be provided to the Host that had issued the LE_Create_Connection command.<br>This event indicates to the Host which issued a LE_Create_Connection command and received a Command Status event if the connection establishment failed or was successful.<br>The Master_Clock_Accuracy parameter is only valid for a slave. On a master, this parameter shall be set to 0x00. See Bluetooth spec 5.0 vol 2 [part E] 7.7.65.1</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="HCI_LE_CONNECTION_COMPLETE_EVENT_anchor">HCI_LE_CONNECTION_COMPLETE_EVENT</a></h2><h3>Description</h3><p>The LE Connection Complete event indicates to both of the Hosts forming the connection that a new connection has been created. Upon the creation of the connection a Connection_Handle shall be assigned by the Controller, and passed to the Host in this event. If the connection establishment fails this event shall be provided to the Host that had issued the LE_Create_Connection command.<br>This event indicates to the Host which issued a LE_Create_Connection command and received a Command Status event if the connection establishment failed or was successful.<br>The Master_Clock_Accuracy parameter is only valid for a slave. On a master, this parameter shall be set to 0x00.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.1].</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -5503,7 +5514,7 @@ Time = N * 10 msec.</p>
</td><td><p>1</p>
</td><td><p>Master clock accuracy. Only valid for a slave.</p>
</td><td><li>0x00: 500 ppm</li><li>0x01: 250 ppm</li><li>0x02: 150 ppm</li><li>0x03: 100 ppm</li><li>0x04: 75 ppm</li><li>0x05: 50 ppm</li><li>0x06: 30 ppm</li><li>0x07: 20 ppm</li></td></tr>
-</table><h2><a name="HCI_LE_ADVERTISING_REPORT_EVENT_anchor">HCI_LE_ADVERTISING_REPORT_EVENT</a></h2><h3>Description</h3><p>The LE Advertising Report event indicates that a device or multiple devices have responded to an active scan or received some information during a passive scan. The Controller may queue these advertising reports and send information from multiple devices in one LE Advertising Report event (see Bluetooth spec 5.0 vol 2 [part E] 7.7.65.2). In the current BLE stack version, only one report is sent per event (Num_Reports = 1).</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="HCI_LE_ADVERTISING_REPORT_EVENT_anchor">HCI_LE_ADVERTISING_REPORT_EVENT</a></h2><h3>Description</h3><p>The LE Advertising Report event indicates that a device or multiple devices have responded to an active scan or received some information during a passive scan. The Controller may queue these advertising reports and send information from multiple devices in one LE Advertising Report event.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.2].<br>Note: in the current BLE stack version, only one report is sent per event (Num_Reports = 1).</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Num_Reports</p>
</td><td><p>1</p>
@@ -5544,7 +5555,7 @@ as defined in [Vol 3] Part C, Section 8.</p>
</td><td><p>N Size: 1 Octet (signed integer)
Units: dBm</p>
</td><td><li>127: RSSI not available</li><li>-127 ... 20</li></td></tr>
-</table><h2><a name="HCI_LE_CONNECTION_UPDATE_COMPLETE_EVENT_anchor">HCI_LE_CONNECTION_UPDATE_COMPLETE_EVENT</a></h2><h3>Description</h3><p>The LE Connection Update Complete event is used to indicate that the Controller process to update the connection has completed.<br>On a slave, if no connection parameters are updated, then this event shall not be issued.<br>On a master, this event shall be issued if the Connection_Update command was sent. See Bluetooth spec 5.0 vol 2 [part E] 7.7.65.3</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="HCI_LE_CONNECTION_UPDATE_COMPLETE_EVENT_anchor">HCI_LE_CONNECTION_UPDATE_COMPLETE_EVENT</a></h2><h3>Description</h3><p>The LE Connection Update Complete event is used to indicate that the Controller process to update the connection has completed.<br>On a slave, if no connection parameters are updated, then this event shall not be issued.<br>On a master, this event shall be issued if the Connection_Update command was sent.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.3].</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -5569,7 +5580,7 @@ Time = N * 1.25 msec</p>
It shall be a multiple of 10 ms and larger than (1 + connSlaveLatency) * connInterval * 2.
Time = N * 10 msec.</p>
</td><td><li>0x000A (100 ms) ... 0x0C80 (32000 ms) </li></td></tr>
-</table><h2><a name="HCI_LE_READ_REMOTE_FEATURES_COMPLETE_EVENT_anchor">HCI_LE_READ_REMOTE_FEATURES_COMPLETE_EVENT</a></h2><h3>Description</h3><p>The LE Read Remote Features Complete event is used to indicate the completion of the process of the Controller obtaining the used features of the remote Bluetooth device specified by the Connection_Handle event parameter.<br>See Bluetooth spec 5.0 vol 2 [part E] 7.7.65.4</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="HCI_LE_READ_REMOTE_FEATURES_COMPLETE_EVENT_anchor">HCI_LE_READ_REMOTE_FEATURES_COMPLETE_EVENT</a></h2><h3>Description</h3><p>The LE Read Remote Features Complete event is used to indicate the completion of the process of the Controller obtaining the used features of the remote Bluetooth device specified by the Connection_Handle event parameter.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.4].</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -5583,7 +5594,7 @@ Time = N * 10 msec.</p>
</td><td><p>8</p>
</td><td><p>Bit Mask List of used LE features. For details see LE Link Layer specification.</p>
</td><td></tr>
-</table><h2><a name="HCI_LE_LONG_TERM_KEY_REQUEST_EVENT_anchor">HCI_LE_LONG_TERM_KEY_REQUEST_EVENT</a></h2><h3>Description</h3><p>The LE Long Term Key Request event indicates that the master device is attempting to encrypt or re-encrypt the link and is requesting the Long Term Key from the Host.<br>(See [Vol 6] Part B, Section 5.1.3)and Bluetooth spec 5.0 vol 2 [part E] 7.7.65.5</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="HCI_LE_LONG_TERM_KEY_REQUEST_EVENT_anchor">HCI_LE_LONG_TERM_KEY_REQUEST_EVENT</a></h2><h3>Description</h3><p>The LE Long Term Key Request event indicates that the master device is attempting to encrypt or re-encrypt the link and is requesting the Long Term Key from the Host.<br>See Bluetooth spec. v.5.2 [Vol 6, Part B, 5.1.3] and [Vol 4, Part E, 7.7.65.5].</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -5597,7 +5608,7 @@ Time = N * 10 msec.</p>
</td><td><p>2</p>
</td><td><p>16-bit encrypted diversifier</p>
</td><td></tr>
-</table><h2><a name="HCI_LE_DATA_LENGTH_CHANGE_EVENT_anchor">HCI_LE_DATA_LENGTH_CHANGE_EVENT</a></h2><h3>Description</h3><p>The LE Data Length Change event notifies the Host of a change to either the maximum Payload length or the maximum transmission time of packets in either direction. The values reported are the maximum that will actually be used on the connection following the change, except that on the LE Coded PHY a packet taking up to 2704 us to transmit may be sent even though the corresponding parameter has a lower value.<br>See Bluetooth spec 5.0 vol 2 [part E] 7.7.65.7</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="HCI_LE_DATA_LENGTH_CHANGE_EVENT_anchor">HCI_LE_DATA_LENGTH_CHANGE_EVENT</a></h2><h3>Description</h3><p>The LE Data Length Change event notifies the Host of a change to either the maximum Payload length or the maximum transmission time of packets in either direction. The values reported are the maximum that will actually be used on the connection following the change, except that on the LE Coded PHY a packet taking up to 2704 us to transmit may be sent even though the corresponding parameter has a lower value.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.7].</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -5619,7 +5630,7 @@ Time = N * 10 msec.</p>
</td><td><p>2</p>
</td><td><p>The maximum time that the local Controller expects to take to receive a Link Layer packet on this connection (connEffectiveMaxRxTime defined in [Vol 6] Part B, Section 4.5.10).</p>
</td><td><li>0x0148 ... 0x4290</li></td></tr>
-</table><h2><a name="HCI_LE_READ_LOCAL_P256_PUBLIC_KEY_COMPLETE_EVENT_anchor">HCI_LE_READ_LOCAL_P256_PUBLIC_KEY_COMPLETE_EVENT</a></h2><h3>Description</h3><p>This event is generated when local P-256 key generation is complete.<br>See Bluetooth spec 5.0 vol 2 [part E] 7.7.65.8</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="HCI_LE_READ_LOCAL_P256_PUBLIC_KEY_COMPLETE_EVENT_anchor">HCI_LE_READ_LOCAL_P256_PUBLIC_KEY_COMPLETE_EVENT</a></h2><h3>Description</h3><p>This event is generated when local P-256 key generation is complete.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.8].</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -5629,7 +5640,7 @@ Time = N * 10 msec.</p>
</td><td><p>64</p>
</td><td><p>Local P-256 public key.</p>
</td><td></tr>
-</table><h2><a name="HCI_LE_GENERATE_DHKEY_COMPLETE_EVENT_anchor">HCI_LE_GENERATE_DHKEY_COMPLETE_EVENT</a></h2><h3>Description</h3><p>This event indicates that LE Diffie Hellman key generation has been completed by the Controller.<br>See Bluetooth spec 5.0 vol 2 [part E] 7.7.65.9</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="HCI_LE_GENERATE_DHKEY_COMPLETE_EVENT_anchor">HCI_LE_GENERATE_DHKEY_COMPLETE_EVENT</a></h2><h3>Description</h3><p>This event indicates that LE Diffie Hellman key generation has been completed by the Controller.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.9].</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -5639,7 +5650,7 @@ Time = N * 10 msec.</p>
</td><td><p>32</p>
</td><td><p>Diffie Hellman Key</p>
</td><td></tr>
-</table><h2><a name="HCI_LE_ENHANCED_CONNECTION_COMPLETE_EVENT_anchor">HCI_LE_ENHANCED_CONNECTION_COMPLETE_EVENT</a></h2><h3>Description</h3><p>The LE Enhanced Connection Complete event indicates to both of the Hosts forming the connection that a new connection has been created. Upon the creation of the connection a Connection_Handle shall be assigned by the Controller, and passed to the Host in this event. If the connection establishment fails, this event shall be provided to the Host that had issued the LE_Create_Connection command.<br>If this event is unmasked and LE Connection Complete event is unmasked, only the LE Enhanced Connection Complete event is sent when a new connection has been completed.<br>This event indicates to the Host that issued a LE_Create_Connection command and received a Command Status event if the connection establishment failed or was successful.<br>The Master_Clock_Accuracy parameter is only valid for a slave. On a master, this parameter shall be set to 0x00.<br>See Bluetooth spec 5.0 vol 2 [part E] 7.7.65.10</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="HCI_LE_ENHANCED_CONNECTION_COMPLETE_EVENT_anchor">HCI_LE_ENHANCED_CONNECTION_COMPLETE_EVENT</a></h2><h3>Description</h3><p>The LE Enhanced Connection Complete event indicates to both of the Hosts forming the connection that a new connection has been created. Upon the creation of the connection a Connection_Handle shall be assigned by the Controller, and passed to the Host in this event. If the connection establishment fails, this event shall be provided to the Host that had issued the LE_Create_Connection command.<br>If this event is unmasked and LE Connection Complete event is unmasked, only the LE Enhanced Connection Complete event is sent when a new connection has been completed.<br>This event indicates to the Host that issued a LE_Create_Connection command and received a Command Status event if the connection establishment failed or was successful.<br>The Master_Clock_Accuracy parameter is only valid for a slave. On a master, this parameter shall be set to 0x00.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.10].</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -5694,7 +5705,7 @@ Time = N * 10 msec.</p>
</td><td><p>1</p>
</td><td><p>Master clock accuracy. Only valid for a slave.</p>
</td><td><li>0x00: 500 ppm</li><li>0x01: 250 ppm</li><li>0x02: 150 ppm</li><li>0x03: 100 ppm</li><li>0x04: 75 ppm</li><li>0x05: 50 ppm</li><li>0x06: 30 ppm</li><li>0x07: 20 ppm</li></td></tr>
-</table><h2><a name="HCI_LE_DIRECT_ADVERTISING_REPORT_EVENT_anchor">HCI_LE_DIRECT_ADVERTISING_REPORT_EVENT</a></h2><h3>Description</h3><p>The LE Direct Advertising Report event indicates that directed advertisements have been received where the advertiser is using a resolvable private address for the InitA field in the ADV_DIRECT_IND PDU and the Scanning_Filter_Policy is equal to 0x02 or 0x03, see HCI_LE_Set_Scan_Parameters.<br>Direct_Address_Type and Direct_Addres is the address the directed advertisements are being directed to. Address_Type and Address is the address of the advertiser sending the directed advertisements.<br>See Bluetooth spec 5.0 vol 2 [part E] 7.7.65.11.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="HCI_LE_DIRECT_ADVERTISING_REPORT_EVENT_anchor">HCI_LE_DIRECT_ADVERTISING_REPORT_EVENT</a></h2><h3>Description</h3><p>The LE Direct Advertising Report event indicates that directed advertisements have been received where the advertiser is using a resolvable private address for the InitA field in the ADV_DIRECT_IND PDU and the Scanning_Filter_Policy is equal to 0x02 or 0x03, see HCI_LE_Set_Scan_Parameters.<br>Direct_Address_Type and Direct_Addres is the address the directed advertisements are being directed to. Address_Type and Address is the address of the advertiser sending the directed advertisements.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.11].</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Num_Reports</p>
</td><td><p>1</p>
@@ -5729,7 +5740,7 @@ Time = N * 10 msec.</p>
</td><td><p>N Size: 1 Octet (signed integer)
Units: dBm</p>
</td><td><li>127: RSSI not available</li><li>-127 ... 20</li></td></tr>
-</table><h2><a name="HCI_LE_PHY_UPDATE_COMPLETE_EVENT_anchor">HCI_LE_PHY_UPDATE_COMPLETE_EVENT</a></h2><h3>Description</h3><p>The LE PHY Update Complete Event is used to indicate that the Controller has changed the transmitter PHY or receiver PHY in use.<br>If the Controller changes the transmitter PHY, the receiver PHY, or both PHYs, this event shall be issued.<br>If an LE_Set_PHY command was sent and the Controller determines that neither PHY will change as a result, it issues this event immediately.<br>See See Bluetooth spec 5.0 vol 2 [part E] 7.7.65.12.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="HCI_LE_PHY_UPDATE_COMPLETE_EVENT_anchor">HCI_LE_PHY_UPDATE_COMPLETE_EVENT</a></h2><h3>Description</h3><p>The LE PHY Update Complete Event is used to indicate that the Controller has changed the transmitter PHY or receiver PHY in use.<br>If the Controller changes the transmitter PHY, the receiver PHY, or both PHYs, this event shall be issued.<br>If an LE_Set_PHY command was sent and the Controller determines that neither PHY will change as a result, it issues this event immediately.<br>See Bluetooth spec. v.5.2 [Vol 4, Part E, 7.7.65.12].</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Status</p>
</td><td><p>1</p>
@@ -5842,7 +5853,7 @@ Units: dBm</p>
</td><td><p>2</p>
</td><td><p>Connection handle for which the private address could not be resolved with any of the stored IRK's.</p>
</td><td></tr>
-</table><h2><a name="ACI_GAP_NUMERIC_COMPARISON_VALUE_EVENT_anchor">ACI_GAP_NUMERIC_COMPARISON_VALUE_EVENT</a></h2><h3>Description</h3><p>This event is sent only during SC v.4.2 Pairing, when Numeric Comparison Association model is selected, in order to show the Numeric Value generated, and to ask for Confirmation to the User. When this event is received, the application has to respond with the <a href="#ACI_GAP_NUMERIC_COMPARISON_RESP_anchor">ACI_GAP_NUMERIC_COMPARISON_RESP</a> command.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="ACI_GAP_NUMERIC_COMPARISON_VALUE_EVENT_anchor">ACI_GAP_NUMERIC_COMPARISON_VALUE_EVENT</a></h2><h3>Description</h3><p>This event is sent only during SC Pairing, when Numeric Comparison Association model is selected, in order to show the Numeric Value generated, and to ask for Confirmation to the User. When this event is received, the application has to respond with the <a href="#ACI_GAP_NUMERIC_COMPARISON_RESP_anchor">ACI_GAP_NUMERIC_COMPARISON_RESP</a> command.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -5851,7 +5862,7 @@ Units: dBm</p>
<tr><td><p>Numeric_Value</p>
</td><td><p>4</p>
</td><td></td><td></tr>
-</table><h2><a name="ACI_GAP_KEYPRESS_NOTIFICATION_EVENT_anchor">ACI_GAP_KEYPRESS_NOTIFICATION_EVENT</a></h2><h3>Description</h3><p>This event is sent only during SC v.4.2 Pairing, when Keypress Notifications are supported, in order to show the input type signalled by the peer device, having Keyboard only I/O capabilities. When this event is received, no action is required to the User.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="ACI_GAP_KEYPRESS_NOTIFICATION_EVENT_anchor">ACI_GAP_KEYPRESS_NOTIFICATION_EVENT</a></h2><h3>Description</h3><p>This event is sent only during SC Pairing, when Keypress Notifications are supported, in order to show the input type signalled by the peer device, having Keyboard only I/O capabilities. When this event is received, no action is required to the User.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -5989,7 +6000,7 @@ Units: dBm</p>
</td><td><p>2</p>
</td><td><p>Attribute server receive MTU size</p>
</td><td></tr>
-</table><h2><a name="ACI_ATT_FIND_INFO_RESP_EVENT_anchor">ACI_ATT_FIND_INFO_RESP_EVENT</a></h2><h3>Description</h3><p>This event is generated in response to a Find Information Request. See <a href="#ACI_ATT_FIND_INFO_REQ_anchor">ACI_ATT_FIND_INFO_REQ</a> and Find Information Response in Bluetooth Core v5.0 spec. This event is also generated in response to <a href="#ACI_GATT_DISC_ALL_CHAR_DESC_anchor">ACI_GATT_DISC_ALL_CHAR_DESC</a></p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="ACI_ATT_FIND_INFO_RESP_EVENT_anchor">ACI_ATT_FIND_INFO_RESP_EVENT</a></h2><h3>Description</h3><p>This event is generated in response to a Find Information Request. See <a href="#ACI_ATT_FIND_INFO_REQ_anchor">ACI_ATT_FIND_INFO_REQ</a> and Find Information Response in Bluetooth Core spec. This event is also generated in response to <a href="#ACI_GATT_DISC_ALL_CHAR_DESC_anchor">ACI_GATT_DISC_ALL_CHAR_DESC</a></p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -6041,7 +6052,7 @@ Units: dBm</p>
</td><td></tr>
<tr><td><p>Handle_Value_Pair_Data</p>
</td><td><p>Data_Length</p>
-</td><td><p>Attribute Data List as defined in Bluetooth Core v5.0 spec. A sequence of handle-value pairs: [2 octets for Attribute Handle, (Handle_Value_Pair_Length - 2 octets) for Attribute Value]</p>
+</td><td><p>Attribute Data List as defined in Bluetooth Core spec. A sequence of handle-value pairs: [2 octets for Attribute Handle, (Handle_Value_Pair_Length - 2 octets) for Attribute Value]</p>
</td><td></tr>
</table><h2><a name="ACI_ATT_READ_RESP_EVENT_anchor">ACI_ATT_READ_RESP_EVENT</a></h2><h3>Description</h3><p>This event is generated in response to a Read Request. See <a href="#ACI_GATT_READ_CHAR_VALUE_anchor">ACI_GATT_READ_CHAR_VALUE</a>.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
@@ -6102,7 +6113,7 @@ A concatenation of attribute values for each of the attribute handles in the req
</td><td></tr>
<tr><td><p>Attribute_Data_List</p>
</td><td><p>Data_Length</p>
-</td><td><p>Attribute Data List as defined in Bluetooth Core v5.0 spec. A sequence of attribute handle, end group handle, attribute value tuples: [2 octets for Attribute Handle, 2 octets End Group Handle, (Attribute_Data_Length - 4 octets) for Attribute Value]</p>
+</td><td><p>Attribute Data List as defined in Bluetooth Core spec. A sequence of attribute handle, end group handle, attribute value tuples: [2 octets for Attribute Handle, 2 octets End Group Handle, (Attribute_Data_Length - 4 octets) for Attribute Value]</p>
</td><td></tr>
</table><h2><a name="ACI_ATT_PREPARE_WRITE_RESP_EVENT_anchor">ACI_ATT_PREPARE_WRITE_RESP_EVENT</a></h2><h3>Description</h3><p>This event is generated in response to a <a href="#ACI_ATT_PREPARE_WRITE_REQ_anchor">ACI_ATT_PREPARE_WRITE_REQ</a>.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
@@ -6196,7 +6207,7 @@ A concatenation of attribute values for each of the attribute handles in the req
</td><td><p>1</p>
</td><td><p>The reason why the request has generated an error response (ATT error codes)</p>
</td><td><li>0x01: Invalid handle</li><li>0x02: Read not permitted</li><li>0x03: Write not permitted</li><li>0x04: Invalid PDU</li><li>0x05: Insufficient authentication</li><li>0x06: Request not supported</li><li>0x07: Invalid offset</li><li>0x08: Insufficient authorization</li><li>0x09: Prepare queue full</li><li>0x0A: Attribute not found</li><li>0x0B: Attribute not long</li><li>0x0C: Insufficient encryption key size</li><li>0x0D: Invalid attribute value length</li><li>0x0E: Unlikely error</li><li>0x0F: Insufficient encryption</li><li>0x10: Unsupported group type</li><li>0x11: Insufficient resources</li></td></tr>
-</table><h2><a name="ACI_GATT_DISC_READ_CHAR_BY_UUID_RESP_EVENT_anchor">ACI_GATT_DISC_READ_CHAR_BY_UUID_RESP_EVENT</a></h2><h3>Description</h3><p>This event can be generated during a "Discover Characteristics By UUID" procedure or a "Read using Characteristic UUID" procedure.<br>The attribute value will be a service declaration as defined in Bluetooth Core v5.0.spec (vol.3, Part G, ch. 3.3.1), when a "Discover Characteristics By UUID" has been started. It will be the value of the Characteristic if a* "Read using Characteristic UUID" has been performed.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="ACI_GATT_DISC_READ_CHAR_BY_UUID_RESP_EVENT_anchor">ACI_GATT_DISC_READ_CHAR_BY_UUID_RESP_EVENT</a></h2><h3>Description</h3><p>This event can be generated during a "Discover Characteristics By UUID" procedure or a "Read using Characteristic UUID" procedure.<br>The attribute value will be a service declaration as defined in Bluetooth spec. v.5.2 [Vol 3, Part G, 3.3.1], when a "Discover Characteristics By UUID" has been started. It will be the value of the Characteristic if a* "Read using Characteristic UUID" has been performed.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -6212,7 +6223,7 @@ A concatenation of attribute values for each of the attribute handles in the req
</td><td></tr>
<tr><td><p>Attribute_Value</p>
</td><td><p>Attribute_Value_Length</p>
-</td><td><p>The attribute value will be a service declaration as defined in Bluetooth Core v5.0 (vol.3, Part G, ch. 3.3.1), when a &quot;Discover Characteristics By UUID&quot; has been started.
+</td><td><p>The attribute value will be a service declaration as defined in Bluetooth spec. v.5.2 [Vol 3, Part G, 3.3.1], when a &quot;Discover Characteristics By UUID&quot; has been started.
It will be the value of the Characteristic if a &quot;Read using Characteristic UUID&quot; has been performed.</p>
</td><td></tr>
</table><h2><a name="ACI_GATT_WRITE_PERMIT_REQ_EVENT_anchor">ACI_GATT_WRITE_PERMIT_REQ_EVENT</a></h2><h3>Description</h3><p>This event is given to the application when a write request, write command or signed write command is received by the server from the client. This event will be given to the application only if the event bit for this event generation is set when the characteristic was added.<br>When this event is received, the application has to check whether the value being requested for write can be allowed to be written and respond with the command <a href="#ACI_GATT_WRITE_RESP_anchor">ACI_GATT_WRITE_RESP</a>.<br>The details of the parameters of the command can be found. Based on the response from the application, the attribute value will be modified by the stack. If the write is rejected by the application, then the value of the attribute will not be modified. In case of a write REQ, an error response will be sent to the client, with the error code as specified by the application.<br>In case of write/signed write commands, no response is sent to the client but the attribute is not modified.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
@@ -6233,7 +6244,7 @@ It will be the value of the Characteristic if a &quot;Read using Characteristic
</td><td><p>Data_Length</p>
</td><td><p>The data that the client has requested to write</p>
</td><td></tr>
-</table><h2><a name="ACI_GATT_READ_PERMIT_REQ_EVENT_anchor">ACI_GATT_READ_PERMIT_REQ_EVENT</a></h2><h3>Description</h3><p>This event is given to the application when a read request or read blob request is received by the server from the client. This event will be given to the application only if the event bit for this event generation is set when the characteristic was added.<br>On receiving this event, the application can update the value of the handle if it desires and when done, it has to send the <a href="#ACI_GATT_ALLOW_READ_anchor">ACI_GATT_ALLOW_READ</a> command to indicate to the stack that it can send the response to the client.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="ACI_GATT_READ_PERMIT_REQ_EVENT_anchor">ACI_GATT_READ_PERMIT_REQ_EVENT</a></h2><h3>Description</h3><p>This event is given to the application when a read request or read blob request is received by the server from the client. This event will be given to the application only if the event bit for this event generation is set when the characteristic was added.<br>On receiving this event, the application can update the value of the handle if it desires and when done, it must send the <a href="#ACI_GATT_ALLOW_READ_anchor">ACI_GATT_ALLOW_READ</a> command to indicate to the stack that it can send the response to the client.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -6247,7 +6258,7 @@ It will be the value of the Characteristic if a &quot;Read using Characteristic
</td><td><p>2</p>
</td><td><p>Contains the offset from which the read has been requested</p>
</td><td></tr>
-</table><h2><a name="ACI_GATT_READ_MULTI_PERMIT_REQ_EVENT_anchor">ACI_GATT_READ_MULTI_PERMIT_REQ_EVENT</a></h2><h3>Description</h3><p>This event is given to the application when a read multiple request or read by type request is received by the server from the client. This event will be given to the application only if the event bit for this event generation is set when the characteristic was added.<br>On receiving this event, the application can update the values of the handles if it desires and when done, it has to send the <a href="#ACI_GATT_ALLOW_READ_anchor">ACI_GATT_ALLOW_READ</a> command to indicate to the stack that it can send the response to the client.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="ACI_GATT_READ_MULTI_PERMIT_REQ_EVENT_anchor">ACI_GATT_READ_MULTI_PERMIT_REQ_EVENT</a></h2><h3>Description</h3><p>This event is given to the application when a read multiple request or read by type request is received by the server from the client. This event will be given to the application only if the event bit for this event generation is set when the characteristic was added.<br>On receiving this event, the application can update the values of the handles if it desires and when done, it must send the <a href="#ACI_GATT_ALLOW_READ_anchor">ACI_GATT_ALLOW_READ</a> command to indicate to the stack that it can send the response to the client.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -6468,7 +6479,7 @@ Time = N * 1.25 msec.</p>
</td><td><p>Data_Length</p>
</td><td><p>Data field associated with Reason</p>
</td><td></tr>
-</table><h2><a name="ACI_L2CAP_COC_CONNECT_EVENT_anchor">ACI_L2CAP_COC_CONNECT_EVENT</a></h2><h3>Description</h3><p>This event is generated when receiving a valid Credit Based Connection Request packet. See Bluetooth Core specification Vol.3 Part A.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="ACI_L2CAP_COC_CONNECT_EVENT_anchor">ACI_L2CAP_COC_CONNECT_EVENT</a></h2><h3>Description</h3><p>This event is generated when receiving a valid Credit Based Connection Request packet.<br>See Bluetooth spec. v.5.2 [Vol 3, Part A].</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -6494,7 +6505,7 @@ Time = N * 1.25 msec.</p>
</td><td><p>1</p>
</td><td><p>Number of channels to be created. If this parameter is set to 0, it requests the creation of one LE credit based connection-oriented channel. Otherwise, it requests the creation of one or more enhanced credit based connection-oriented channels.</p>
</td><td><li>0 ... 5</li></td></tr>
-</table><h2><a name="ACI_L2CAP_COC_CONNECT_CONFIRM_EVENT_anchor">ACI_L2CAP_COC_CONNECT_CONFIRM_EVENT</a></h2><h3>Description</h3><p>This event is generated when receiving a valid Credit Based Connection Response packet. See Bluetooth Core specification Vol.3 Part A.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="ACI_L2CAP_COC_CONNECT_CONFIRM_EVENT_anchor">ACI_L2CAP_COC_CONNECT_CONFIRM_EVENT</a></h2><h3>Description</h3><p>This event is generated when receiving a valid Credit Based Connection Response packet.<br>See Bluetooth spec. v.5.2 [Vol 3, Part A].</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -6524,7 +6535,7 @@ Time = N * 1.25 msec.</p>
</td><td><p>Channel_Number</p>
</td><td><p>List of channel indexes for which the primitive applies.</p>
</td><td></tr>
-</table><h2><a name="ACI_L2CAP_COC_RECONF_EVENT_anchor">ACI_L2CAP_COC_RECONF_EVENT</a></h2><h3>Description</h3><p>This event is generated when receiving a valid Credit Based Reconfigure Request packet. See Bluetooth Core specification Vol.3 Part A.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="ACI_L2CAP_COC_RECONF_EVENT_anchor">ACI_L2CAP_COC_RECONF_EVENT</a></h2><h3>Description</h3><p>This event is generated when receiving a valid Credit Based Reconfigure Request packet.<br>See Bluetooth spec. v.5.2 [Vol 3, Part A].</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -6546,7 +6557,7 @@ Time = N * 1.25 msec.</p>
</td><td><p>Channel_Number</p>
</td><td><p>List of channel indexes for which the primitive applies.</p>
</td><td></tr>
-</table><h2><a name="ACI_L2CAP_COC_RECONF_CONFIRM_EVENT_anchor">ACI_L2CAP_COC_RECONF_CONFIRM_EVENT</a></h2><h3>Description</h3><p>This event is generated when receiving a valid Credit Based Reconfigure Response packet. See Bluetooth Core specification Vol.3 Part A.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="ACI_L2CAP_COC_RECONF_CONFIRM_EVENT_anchor">ACI_L2CAP_COC_RECONF_CONFIRM_EVENT</a></h2><h3>Description</h3><p>This event is generated when receiving a valid Credit Based Reconfigure Response packet.<br>See Bluetooth spec. v.5.2 [Vol 3, Part A].</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Connection_Handle</p>
</td><td><p>2</p>
@@ -6556,13 +6567,13 @@ Time = N * 1.25 msec.</p>
</td><td><p>2</p>
</td><td><p>This parameter indicates the outcome of the request. A value of 0x0000 indicates success while a non-zero value indicates the request is refused.</p>
</td><td><li>0x0000 ... 0x000C</li></td></tr>
-</table><h2><a name="ACI_L2CAP_COC_DISCONNECT_EVENT_anchor">ACI_L2CAP_COC_DISCONNECT_EVENT</a></h2><h3>Description</h3><p>This event is generated when a connection-oriented channel is disconnected following an L2CAP channel termination procedure. See Bluetooth Core specification Vol.3 Part A.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="ACI_L2CAP_COC_DISCONNECT_EVENT_anchor">ACI_L2CAP_COC_DISCONNECT_EVENT</a></h2><h3>Description</h3><p>This event is generated when a connection-oriented channel is disconnected following an L2CAP channel termination procedure.<br>See Bluetooth spec. v.5.2 [Vol 3, Part A].</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Channel_Index</p>
</td><td><p>1</p>
</td><td><p>Index of the connection-oriented channel for which the primitive applies.</p>
</td><td></tr>
-</table><h2><a name="ACI_L2CAP_COC_FLOW_CONTROL_EVENT_anchor">ACI_L2CAP_COC_FLOW_CONTROL_EVENT</a></h2><h3>Description</h3><p>This event is generated when receiving a valid Flow Control Credit signaling packet. See Bluetooth Core specification Vol.3 Part A.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="ACI_L2CAP_COC_FLOW_CONTROL_EVENT_anchor">ACI_L2CAP_COC_FLOW_CONTROL_EVENT</a></h2><h3>Description</h3><p>This event is generated when receiving a valid Flow Control Credit signaling packet.<br>See Bluetooth spec. v.5.2 [Vol 3, Part A].</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Channel_Index</p>
</td><td><p>1</p>
@@ -6572,7 +6583,7 @@ Time = N * 1.25 msec.</p>
</td><td><p>2</p>
</td><td><p>Number of credits the receiving device can increment, corresponding to the number of K-frames that can be sent to the peer device sending the Flow Control Credit packet.</p>
</td><td><li>1 ... 65535</li></td></tr>
-</table><h2><a name="ACI_L2CAP_COC_RX_DATA_EVENT_anchor">ACI_L2CAP_COC_RX_DATA_EVENT</a></h2><h3>Description</h3><p>This event is generated when receiving a valid K-frame packet on a connection-oriented channel. See Bluetooth Core specification Vol.3 Part A.<br>Note: for the first K-frame of the SDU, the Information data contains the L2CAP SDU Length coded on two octets followed by the K-frame information payload. For the next K-frames of the SDU, the Information data only contains the K-frame information payload.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="ACI_L2CAP_COC_RX_DATA_EVENT_anchor">ACI_L2CAP_COC_RX_DATA_EVENT</a></h2><h3>Description</h3><p>This event is generated when receiving a valid K-frame packet on a connection-oriented channel.<br>See Bluetooth spec. v.5.2 [Vol 3, Part A].<br>Note: for the first K-frame of the SDU, the Information data contains the L2CAP SDU Length coded on two octets followed by the K-frame information payload. For the next K-frames of the SDU, the Information data only contains the K-frame information payload.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Channel_Index</p>
</td><td><p>1</p>
@@ -6600,7 +6611,7 @@ Time = N * 1.25 msec.</p>
</td><td><p>Y</p>
</td><td><p>Y</p>
</td><td></td><td></td></tr>
-</table><h2><a name="ACI_HAL_END_OF_RADIO_ACTIVITY_EVENT_anchor">ACI_HAL_END_OF_RADIO_ACTIVITY_EVENT</a></h2><h3>Description</h3><p>This event is generated when the device completes a radio activity and provide information when a new radio acitivity will be performed.<br>Informtation provided includes type of radio activity and absolute time in system ticks when a new radio acitivity is schedule, if any. Application can use this information to schedule user activities synchronous to selected radio activitities. A command <a href="#ACI_HAL_SET_RADIO_ACTIVITY_MASK_anchor">ACI_HAL_SET_RADIO_ACTIVITY_MASK</a> is provided to enable radio activity events of user interests, by default no events are enabled.<br>User should take into account that enablinng radio events in application with intense radio activity could lead to a fairly high rate of events generated.<br>Application use cases includes synchronizing notification with connection interval, switiching antenna at the end of advertising or performing flash erase operation while radio is idle.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="ACI_HAL_END_OF_RADIO_ACTIVITY_EVENT_anchor">ACI_HAL_END_OF_RADIO_ACTIVITY_EVENT</a></h2><h3>Description</h3><p>This event is generated when the device completes a radio activity and provide information when a new radio activity will be performed.<br>Information provided includes type of radio activity and absolute time in system ticks when a new radio activity is schedule, if any. Application can use this information to schedule user activities synchronous to selected radio activitities. A command <a href="#ACI_HAL_SET_RADIO_ACTIVITY_MASK_anchor">ACI_HAL_SET_RADIO_ACTIVITY_MASK</a> is provided to enable radio activity events of user interests, by default no events are enabled.<br>User should take into account that enabling radio events in application with intense radio activity could lead to a fairly high rate of events generated.<br>Application use cases includes synchronizing notification with connection interval, switching antenna at the end of advertising or performing flash erase operation while radio is idle.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>Last_State</p>
</td><td><p>1</p>
@@ -6614,7 +6625,7 @@ Time = N * 1.25 msec.</p>
</td><td><p>4</p>
</td><td><p>32bit absolute current time expressed in internal time units.</p>
</td><td></tr>
-</table><h2><a name="ACI_HAL_SCAN_REQ_REPORT_EVENT_anchor">ACI_HAL_SCAN_REQ_REPORT_EVENT</a></h2><h3>Description</h3><p>This event is reported to the application after a scan request is received and a scan reponse is scheduled to be transmitted.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
+</table><h2><a name="ACI_HAL_SCAN_REQ_REPORT_EVENT_anchor">ACI_HAL_SCAN_REQ_REPORT_EVENT</a></h2><h3>Description</h3><p>This event is reported to the application after a scan request is received and a scan response is scheduled to be transmitted.</p><h3>Event parameters</h3><table width="800" border="1" class="reference">
<tr><th>Parameter</th><th>Size</th><th>Description</th><th>Possible values</th></tr>
<tr><td><p>RSSI</p>
</td><td><p>1</p>
@@ -6647,7 +6658,7 @@ Units: dBm</p>
</td><td><p>Data_Length</p>
</td><td><p>The error event info</p>
</td><td></tr>
-</table><p></p><h1><a name="Status error codes_anchor">Status error codes</a></h1><p>Status error codes are used for the return status of all commands. Only the codes from 0 to 0x3E are used for HCI commands (see Core Specification v5.0, Vol. 2, part D), while more codes are defined for ACI commands (see table below).</p><h2></h2><table width="800" border="1" class="reference">
+</table><p></p><h1><a name="Status error codes_anchor">Status error codes</a></h1><p>Status error codes are used for the return status of all commands. Only the codes from 0 to 0x3E are used for HCI commands (see Core Specification Vol. 2, part D), while more codes are defined for ACI commands (see table below).</p><h2></h2><table width="800" border="1" class="reference">
<tr><th>Status error code</th><th>Description</th></tr>
<tr><td><p>0x00</p>
</td><td><p>Success</p>
diff --git a/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_GCC.a b/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_GCC.a
index 8cbc4815a..b3f279d93 100644
--- a/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_GCC.a
+++ b/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_GCC.a
Binary files differ
diff --git a/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_GCC_DEBUG.a b/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_GCC_DEBUG.a
index 760c635ff..c86f0094e 100644
--- a/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_GCC_DEBUG.a
+++ b/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_GCC_DEBUG.a
Binary files differ
diff --git a/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_IAR.a b/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_IAR.a
index 2d4da306d..314828748 100644
--- a/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_IAR.a
+++ b/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_IAR.a
Binary files differ
diff --git a/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_IAR_DEBUG.a b/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_IAR_DEBUG.a
index 5102b50fe..2fe07dffe 100644
--- a/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_IAR_DEBUG.a
+++ b/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_IAR_DEBUG.a
Binary files differ
diff --git a/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_Keil.lib b/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_Keil.lib
index bb18d7218..45cc25085 100644
--- a/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_Keil.lib
+++ b/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_Keil.lib
Binary files differ
diff --git a/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_Keil_DEBUG.lib b/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_Keil_DEBUG.lib
index d87d684d5..eb4781e5b 100644
--- a/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_Keil_DEBUG.lib
+++ b/Middlewares/ST/STM32_WPAN/ble/mesh/Library/libBle_Mesh_CM4_Keil_DEBUG.lib
Binary files differ
diff --git a/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/lhci/lhci.c b/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/lhci/lhci.c
index aeaed2812..7e6372c52 100644
--- a/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/lhci/lhci.c
+++ b/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/lhci/lhci.c
@@ -130,11 +130,8 @@ void LHCI_C1_Read_Device_Information( TL_CmdPacket_t *pcmd )
MB_RefTable_t * p_ref_table;
ipccdba = READ_BIT(FLASH->IPCCBR, FLASH_IPCCBR_IPCCDBA);
-#if(STM32WB15xx == 0)
- p_ref_table = (MB_RefTable_t*)((ipccdba<<2) + (SRAM_BASE + 0x00030000));
-#else
p_ref_table = (MB_RefTable_t*)((ipccdba<<2) + SRAM2A_BASE);
-#endif
+
((TL_EvtPacket_t*) pcmd)->evtserial.type = TL_LOCRSP_PKT_TYPE;
((TL_EvtPacket_t*) pcmd)->evtserial.evt.evtcode = TL_BLEEVT_CC_OPCODE;
((TL_EvtPacket_t*) pcmd)->evtserial.evt.plen = TL_EVT_HDR_SIZE + sizeof(LHCI_C1_Device_Information_ccrp_t);
diff --git a/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci/shci.c b/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci/shci.c
index dae16e3d4..d6e7c5656 100644
--- a/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci/shci.c
+++ b/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci/shci.c
@@ -668,12 +668,7 @@ SHCI_CmdStatus_t SHCI_GetWirelessFwInfo( WirelessFwInfo_t* pWirelessInfo )
* If the FUS is running on CPU2, FUS_DEVICE_INFO_TABLE_VALIDITY_KEYWORD shall be written in the table.
* Otherwise, it means the Wireless Firmware is running on the CPU2
*/
-
-#if(STM32WB15xx == 0)
- p_fus_device_info_table = (MB_FUS_DeviceInfoTable_t*)(*(uint32_t*)((ipccdba<<2) + (SRAM_BASE + 0x00030000)));
-#else
p_fus_device_info_table = (MB_FUS_DeviceInfoTable_t*)(*(uint32_t*)((ipccdba<<2) + SRAM2A_BASE));
-#endif
if(p_fus_device_info_table->DeviceInfoTableState == FUS_DEVICE_INFO_TABLE_VALIDITY_KEYWORD)
{
@@ -696,12 +691,7 @@ SHCI_CmdStatus_t SHCI_GetWirelessFwInfo( WirelessFwInfo_t* pWirelessInfo )
else
{
/* The Wireless Firmware is running on CPU2 */
-
-#if(STM32WB15xx == 0)
- p_RefTable = (MB_RefTable_t*)((ipccdba<<2) + (SRAM_BASE + 0x00030000));
-#else
p_RefTable = (MB_RefTable_t*)((ipccdba<<2) + SRAM2A_BASE);
-#endif
/**
* Retrieve the WirelessFwInfoTable
diff --git a/Middlewares/ST/STM32_WPAN/stm32_wpan_common.h b/Middlewares/ST/STM32_WPAN/stm32_wpan_common.h
index cad9026d4..ada159b74 100644
--- a/Middlewares/ST/STM32_WPAN/stm32_wpan_common.h
+++ b/Middlewares/ST/STM32_WPAN/stm32_wpan_common.h
@@ -157,7 +157,7 @@ extern "C" {
#define PACKED_STRUCT struct PACKED__
#elif defined (__ICCARM__)
#define PACKED_STRUCT __packed struct
-#elif
+#else
#define PACKED_STRUCT __packed struct
#endif
diff --git a/Middlewares/ST/STM32_WPAN/utilities/utilities_common.h b/Middlewares/ST/STM32_WPAN/utilities/utilities_common.h
index 18163c36b..ac6c4323c 100644
--- a/Middlewares/ST/STM32_WPAN/utilities/utilities_common.h
+++ b/Middlewares/ST/STM32_WPAN/utilities/utilities_common.h
@@ -143,7 +143,7 @@ extern "C" {
#define PACKED_STRUCT struct PACKED__
#elif defined (__ICCARM__)
#define PACKED_STRUCT __packed struct
-#elif
+#else
#define PACKED_STRUCT __packed struct
#endif
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/Core/Inc/app_conf.h b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/Core/Inc/app_conf.h
index 5a4fe3cb1..61106b886 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/Core/Inc/app_conf.h
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/Core/Inc/app_conf.h
@@ -40,8 +40,8 @@
/**
* Define Advertising parameters
*/
-#define CFG_ADV_BD_ADDRESS (0)
-#define CFG_FAST_CONN_ADV_INTERVAL_MIN (0x80) /**< 80ms */
+#define CFG_ADV_BD_ADDRESS (0x7257acd87a6c)
+#define CFG_FAST_CONN_ADV_INTERVAL_MIN (0x80) /**< 80ms */
#define CFG_FAST_CONN_ADV_INTERVAL_MAX (0xA0) /**< 100ms */
#define CFG_LP_CONN_ADV_INTERVAL_MIN (0x640) /**< 1s */
#define CFG_LP_CONN_ADV_INTERVAL_MAX (0xFA0) /**< 2.5s */
@@ -126,9 +126,9 @@
* When set to 1, the device is central
* When set to 0, the device is peripheral
*/
-#define CFG_BLE_CENTRAL 1
+#define CFG_BLE_CENTRAL 0
-#define CFG_SERVER_ONLY 0
+#define CFG_SERVER_ONLY 1
/**
* in this specific application, the device is either central
* or peripheral but cannot be both
@@ -284,7 +284,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
@@ -423,7 +423,7 @@
#define CFG_RTCCLK_DIV (16)
#define CFG_RTC_WUCKSEL_DIVIDER (0)
-#define CFG_RTC_ASYNCH_PRESCALER (0x0F)
+#define CFG_RTC_ASYNCH_PRESCALER (CFG_RTCCLK_DIV - 1)
#define CFG_RTC_SYNCH_PRESCALER (0x7FFF)
#else
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/Core/Inc/stm32wbxx_hal_conf.h b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/Core/Inc/stm32wbxx_hal_conf.h
index e95c655cf..6bb14069c 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/Core/Inc/stm32wbxx_hal_conf.h
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/Core/Inc/stm32wbxx_hal_conf.h
@@ -169,8 +169,8 @@
* @brief This is the HAL system configuration section
*/
-#define VDD_VALUE 3300U /*!< Value of VDD in mv */
-#define TICK_INT_PRIORITY 0U /*!< tick interrupt priority */
+#define VDD_VALUE ((uint32_t)3300) /*!< Value of VDD in mv */
+#define TICK_INT_PRIORITY ((uint32_t)(1<<__NVIC_PRIO_BITS) - 1) /*!< tick interrupt priority (lowest by default) */
#define USE_RTOS 0U
#define PREFETCH_ENABLE 1U
#define INSTRUCTION_CACHE_ENABLE 1U
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/STM32CubeIDE/.cproject b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/STM32CubeIDE/.cproject
index 5c4119788..bd6b2ad6d 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/STM32CubeIDE/.cproject
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/STM32CubeIDE/.cproject
@@ -26,6 +26,7 @@
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.434899454" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.4 || Debug || true || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || NUCLEO-WB15CC || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../../../../../../../Middlewares/ST/STM32_WPAN/ble/core/template | ../../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto | ../../../../../../../Middlewares/ST/STM32_WPAN | ../../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include | ../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc | ../../../../../../../Drivers/BSP/NUCLEO-WB15CC | ../../../../../../../Middlewares/ST/STM32_WPAN/ble/core | ../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl | ../../../../../../../Middlewares/ST/STM32_WPAN/utilities | ../../../../../../../Utilities/lpm/tiny_lpm | ../../../../../../../Utilities/sequencer | ../../../../../../../Drivers/CMSIS/Include | ../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci | ../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread | ../../../../../../../Middlewares/ST/STM32_WPAN/ble | ../../Core/Inc | ../../STM32_WPAN/App | ../../../../../../../Drivers/BSP/NUCLEO-WB15CC || || || STM32WB15xx | USE_STM32WBXX_NUCLEO | USE_HAL_DRIVER || || || || || ${workspace_loc:/${ProjName}/STM32WB15CCUX_FLASH.ld} || true || NonSecure || || || || None" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.converthex.423624531" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.converthex" value="true" valueType="boolean"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertbinary.1879578142" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertbinary" value="false" valueType="boolean"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat.594239114" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat" value="true" valueType="boolean"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.511437415" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
<builder buildPath="${workspace_loc:/BLE_DataThroughput}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.1339153990" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.418753113" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
@@ -114,6 +115,7 @@
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.1362531011" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.4 || Release || false || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || NUCLEO-WB15CC || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../../../../../../../Middlewares/ST/STM32_WPAN/ble/core/template | ../../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto | ../../../../../../../Middlewares/ST/STM32_WPAN | ../../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include | ../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc | ../../../../../../../Drivers/BSP/NUCLEO-WB15CC | ../../../../../../../Middlewares/ST/STM32_WPAN/ble/core | ../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl | ../../../../../../../Middlewares/ST/STM32_WPAN/utilities | ../../../../../../../Utilities/lpm/tiny_lpm | ../../../../../../../Utilities/sequencer | ../../../../../../../Drivers/CMSIS/Include | ../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci | ../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread | ../../../../../../../Middlewares/ST/STM32_WPAN/ble | ../../Core/Inc | ../../STM32_WPAN/App | ../../../../../../../Drivers/BSP/NUCLEO-WB15CC || || || STM32WB15xx | USE_STM32WBXX_NUCLEO | USE_HAL_DRIVER || || || || || ${workspace_loc:/${ProjName}/STM32WB15CCUX_FLASH.ld} || true || NonSecure || Size || || || None" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.converthex.1774756377" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.converthex" value="true" valueType="boolean"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertbinary.1026183683" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertbinary" value="false" valueType="boolean"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat.1847520735" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat" value="true" valueType="boolean"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.16762783" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
<builder buildPath="${workspace_loc:/BLE_DataThroughput}/Release" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.1480658126" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.340950544" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/STM32_WPAN/App/app_ble.c b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/STM32_WPAN/App/app_ble.c
index 3acce582c..e9b993cf4 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/STM32_WPAN/App/app_ble.c
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/STM32_WPAN/App/app_ble.c
@@ -923,8 +923,8 @@ static void Connect_Request( void )
SCAN_L,
PUBLIC_ADDR, SERVER_REMOTE_BDADDR,
PUBLIC_ADDR,
- CONN_P1_400, //CONN_P1_7_5,
- CONN_P2_400, //CONN_P2_7_5,
+ CONN_P1_7_5,
+ CONN_P2_7_5,
0, 0x3e8, 0x0000, 0x3E8);
if (result != BLE_STATUS_SUCCESS)
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/STM32_WPAN/App/dt_client_app.c b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/STM32_WPAN/App/dt_client_app.c
index 21b0ae43e..855ba6a1b 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/STM32_WPAN/App/dt_client_app.c
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_DataThroughput/STM32_WPAN/App/dt_client_app.c
@@ -159,9 +159,9 @@ void DTC_App_LinkReadyNotification(uint16_t ConnectionHandle)
}
#endif
-//#if(CFG_BLE_CENTRAL != 0)
-// UTIL_SEQ_SetTask(1<<CFG_TASK_CONN_UPDATE_ID, CFG_SCH_PRIO_0);
-//#endif
+#if(CFG_BLE_CENTRAL != 0)
+ UTIL_SEQ_SetTask(1<<CFG_TASK_CONN_UPDATE_ID, CFG_SCH_PRIO_0);
+#endif
return;
}
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate/Core/Inc/app_conf.h b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate/Core/Inc/app_conf.h
index 504632963..113aeaccd 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate/Core/Inc/app_conf.h
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate/Core/Inc/app_conf.h
@@ -241,7 +241,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/Core/Inc/app_conf.h b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/Core/Inc/app_conf.h
index 504632963..113aeaccd 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/Core/Inc/app_conf.h
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/Core/Inc/app_conf.h
@@ -241,7 +241,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/MDK-ARM/BLE_HeartRate_ota.uvoptx b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/MDK-ARM/BLE_HeartRate_ota.uvoptx
new file mode 100644
index 000000000..ec3d4ec87
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/MDK-ARM/BLE_HeartRate_ota.uvoptx
@@ -0,0 +1,949 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
+
+ <SchemaVersion>1.0</SchemaVersion>
+
+ <Header>### uVision Project, (C) Keil Software</Header>
+
+ <Extensions>
+ <cExt>*.c</cExt>
+ <aExt>*.s*; *.src; *.a*</aExt>
+ <oExt>*.obj; *.o</oExt>
+ <lExt>*.lib</lExt>
+ <tExt>*.txt; *.h; *.inc</tExt>
+ <pExt>*.plm</pExt>
+ <CppX>*.cpp</CppX>
+ <nMigrate>0</nMigrate>
+ </Extensions>
+
+ <DaveTm>
+ <dwLowDateTime>0</dwLowDateTime>
+ <dwHighDateTime>0</dwHighDateTime>
+ </DaveTm>
+
+ <Target>
+ <TargetName>BLE_HeartRate_ota</TargetName>
+ <ToolsetNumber>0x4</ToolsetNumber>
+ <ToolsetName>ARM-ADS</ToolsetName>
+ <TargetOption>
+ <CLKADS>12000000</CLKADS>
+ <OPTTT>
+ <gFlags>1</gFlags>
+ <BeepAtEnd>1</BeepAtEnd>
+ <RunSim>0</RunSim>
+ <RunTarget>1</RunTarget>
+ <RunAbUc>0</RunAbUc>
+ </OPTTT>
+ <OPTHX>
+ <HexSelection>1</HexSelection>
+ <FlashByte>65535</FlashByte>
+ <HexRangeLowAddress>0</HexRangeLowAddress>
+ <HexRangeHighAddress>0</HexRangeHighAddress>
+ <HexOffset>0</HexOffset>
+ </OPTHX>
+ <OPTLEX>
+ <PageWidth>79</PageWidth>
+ <PageLength>66</PageLength>
+ <TabStop>8</TabStop>
+ <ListingPath></ListingPath>
+ </OPTLEX>
+ <ListingPage>
+ <CreateCListing>1</CreateCListing>
+ <CreateAListing>1</CreateAListing>
+ <CreateLListing>1</CreateLListing>
+ <CreateIListing>0</CreateIListing>
+ <AsmCond>1</AsmCond>
+ <AsmSymb>1</AsmSymb>
+ <AsmXref>0</AsmXref>
+ <CCond>1</CCond>
+ <CCode>0</CCode>
+ <CListInc>0</CListInc>
+ <CSymb>0</CSymb>
+ <LinkerCodeListing>0</LinkerCodeListing>
+ </ListingPage>
+ <OPTXL>
+ <LMap>1</LMap>
+ <LComments>1</LComments>
+ <LGenerateSymbols>1</LGenerateSymbols>
+ <LLibSym>1</LLibSym>
+ <LLines>1</LLines>
+ <LLocSym>1</LLocSym>
+ <LPubSym>1</LPubSym>
+ <LXref>0</LXref>
+ <LExpSel>0</LExpSel>
+ </OPTXL>
+ <OPTFL>
+ <tvExp>1</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <IsCurrentTarget>1</IsCurrentTarget>
+ </OPTFL>
+ <CpuCode>18</CpuCode>
+ <DebugOpt>
+ <uSim>0</uSim>
+ <uTrg>1</uTrg>
+ <sLdApp>1</sLdApp>
+ <sGomain>1</sGomain>
+ <sRbreak>1</sRbreak>
+ <sRwatch>1</sRwatch>
+ <sRmem>1</sRmem>
+ <sRfunc>1</sRfunc>
+ <sRbox>1</sRbox>
+ <tLdApp>1</tLdApp>
+ <tGomain>1</tGomain>
+ <tRbreak>1</tRbreak>
+ <tRwatch>1</tRwatch>
+ <tRmem>1</tRmem>
+ <tRfunc>1</tRfunc>
+ <tRbox>1</tRbox>
+ <tRtrace>1</tRtrace>
+ <sRSysVw>1</sRSysVw>
+ <tRSysVw>1</tRSysVw>
+ <sRunDeb>0</sRunDeb>
+ <sLrtime>0</sLrtime>
+ <bEvRecOn>1</bEvRecOn>
+ <bSchkAxf>0</bSchkAxf>
+ <bTchkAxf>0</bTchkAxf>
+ <nTsel>6</nTsel>
+ <sDll></sDll>
+ <sDllPa></sDllPa>
+ <sDlgDll></sDlgDll>
+ <sDlgPa></sDlgPa>
+ <sIfile></sIfile>
+ <tDll></tDll>
+ <tDllPa></tDllPa>
+ <tDlgDll></tDlgDll>
+ <tDlgPa></tDlgPa>
+ <tIfile></tIfile>
+ <pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
+ </DebugOpt>
+ <TargetDriverDllRegistry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>UL2CM3</Key>
+ <Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32WB1x_320_M4 -FS08000000 -FL050000 -FP0($$Device:STM32WB15CCUx$Drivers\CMSIS\Flash\STM32WB1x_320_M4.FLM))</Name>
+ </SetRegEntry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>ST-LINKIII-KEIL_SWO</Key>
+ <Name>-U066EFF333536414257131121 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(6BA02477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32WB1x_320_M4.FLM -FS08000000 -FL050000 -FP0($$Device:STM32WB15CCUx$Drivers\CMSIS\Flash\STM32WB1x_320_M4.FLM)</Name>
+ </SetRegEntry>
+ </TargetDriverDllRegistry>
+ <Breakpoint/>
+ <Tracepoint>
+ <THDelay>0</THDelay>
+ </Tracepoint>
+ <DebugFlag>
+ <trace>0</trace>
+ <periodic>1</periodic>
+ <aLwin>1</aLwin>
+ <aCover>0</aCover>
+ <aSer1>0</aSer1>
+ <aSer2>0</aSer2>
+ <aPa>0</aPa>
+ <viewmode>1</viewmode>
+ <vrSel>0</vrSel>
+ <aSym>0</aSym>
+ <aTbox>0</aTbox>
+ <AscS1>0</AscS1>
+ <AscS2>0</AscS2>
+ <AscS3>0</AscS3>
+ <aSer3>0</aSer3>
+ <eProf>0</eProf>
+ <aLa>0</aLa>
+ <aPa1>0</aPa1>
+ <AscS4>0</AscS4>
+ <aSer4>0</aSer4>
+ <StkLoc>1</StkLoc>
+ <TrcWin>0</TrcWin>
+ <newCpu>0</newCpu>
+ <uProt>0</uProt>
+ </DebugFlag>
+ <LintExecutable></LintExecutable>
+ <LintConfigFile></LintConfigFile>
+ <bLintAuto>0</bLintAuto>
+ <bAutoGenD>0</bAutoGenD>
+ <LntExFlags>0</LntExFlags>
+ <pMisraName></pMisraName>
+ <pszMrule></pszMrule>
+ <pSingCmds></pSingCmds>
+ <pMultCmds></pMultCmds>
+ <pMisraNamep></pMisraNamep>
+ <pszMrulep></pszMrulep>
+ <pSingCmdsp></pSingCmdsp>
+ <pMultCmdsp></pMultCmdsp>
+ </TargetOption>
+ </Target>
+
+ <Group>
+ <GroupName>Application/MDK-ARM</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>1</GroupNumber>
+ <FileNumber>1</FileNumber>
+ <FileType>2</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>startup_stm32wb15xx_cm4.s</PathWithFileName>
+ <FilenameWithoutPath>startup_stm32wb15xx_cm4.s</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Application/User/Core</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>2</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/app_debug.c</PathWithFileName>
+ <FilenameWithoutPath>app_debug.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>3</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/app_entry.c</PathWithFileName>
+ <FilenameWithoutPath>app_entry.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>4</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/hw_timerserver.c</PathWithFileName>
+ <FilenameWithoutPath>hw_timerserver.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>5</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/main.c</PathWithFileName>
+ <FilenameWithoutPath>main.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>6</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/standby_stm32wb15.c</PathWithFileName>
+ <FilenameWithoutPath>standby_stm32wb15.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>7</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/stm32_lpm_if.c</PathWithFileName>
+ <FilenameWithoutPath>stm32_lpm_if.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>8</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/stm32wbxx_hal_msp.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_msp.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>9</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/stm32wbxx_it.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_it.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Application/User/STM32_WPAN/App</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>3</GroupNumber>
+ <FileNumber>10</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../STM32_WPAN/App/app_ble.c</PathWithFileName>
+ <FilenameWithoutPath>app_ble.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>3</GroupNumber>
+ <FileNumber>11</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../STM32_WPAN/App/dis_app.c</PathWithFileName>
+ <FilenameWithoutPath>dis_app.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>3</GroupNumber>
+ <FileNumber>12</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../STM32_WPAN/App/hrs_app.c</PathWithFileName>
+ <FilenameWithoutPath>hrs_app.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Application/User/STM32_WPAN/Target</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>4</GroupNumber>
+ <FileNumber>13</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../STM32_WPAN/Target/hw_ipcc.c</PathWithFileName>
+ <FilenameWithoutPath>hw_ipcc.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Doc</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>5</GroupNumber>
+ <FileNumber>14</FileNumber>
+ <FileType>5</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../readme.txt</PathWithFileName>
+ <FilenameWithoutPath>readme.txt</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Drivers/BSP/NUCLEO-WB15CC</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>6</GroupNumber>
+ <FileNumber>15</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/BSP/NUCLEO-WB15CC/nucleo_wb15cc.c</PathWithFileName>
+ <FilenameWithoutPath>nucleo_wb15cc.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Drivers/CMSIS</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>7</GroupNumber>
+ <FileNumber>16</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/system_stm32wbxx.c</PathWithFileName>
+ <FilenameWithoutPath>system_stm32wbxx.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Drivers/STM32WBxx_HAL_Driver</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>17</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>18</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cortex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_cortex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>19</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_dma.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>20</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_dma_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>21</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_exti.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_exti.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>22</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_flash.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>23</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_flash_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>24</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_gpio.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_gpio.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>25</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_hsem.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_hsem.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>26</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_ipcc.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_ipcc.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>27</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_pwr.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>28</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_pwr_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>29</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_rcc.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>30</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_rcc_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>31</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_rtc.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>32</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_rtc_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>33</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_tim.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>34</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_tim_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>35</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_uart.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>36</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_uart_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Middlewares/STM32_WPAN</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>37</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gap_aci.c</PathWithFileName>
+ <FilenameWithoutPath>ble_gap_aci.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>38</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gatt_aci.c</PathWithFileName>
+ <FilenameWithoutPath>ble_gatt_aci.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>39</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hal_aci.c</PathWithFileName>
+ <FilenameWithoutPath>ble_hal_aci.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>40</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hci_le.c</PathWithFileName>
+ <FilenameWithoutPath>ble_hci_le.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>41</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_l2cap_aci.c</PathWithFileName>
+ <FilenameWithoutPath>ble_l2cap_aci.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>42</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/utilities/dbg_trace.c</PathWithFileName>
+ <FilenameWithoutPath>dbg_trace.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>43</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/svc/Src/dis.c</PathWithFileName>
+ <FilenameWithoutPath>dis.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>44</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/hci_tl.c</PathWithFileName>
+ <FilenameWithoutPath>hci_tl.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>45</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/hci_tl_if.c</PathWithFileName>
+ <FilenameWithoutPath>hci_tl_if.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>46</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/svc/Src/hrs.c</PathWithFileName>
+ <FilenameWithoutPath>hrs.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>47</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/template/osal.c</PathWithFileName>
+ <FilenameWithoutPath>osal.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>48</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/utilities/otp.c</PathWithFileName>
+ <FilenameWithoutPath>otp.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>49</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci/shci.c</PathWithFileName>
+ <FilenameWithoutPath>shci.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>50</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/shci_tl.c</PathWithFileName>
+ <FilenameWithoutPath>shci_tl.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>51</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/shci_tl_if.c</PathWithFileName>
+ <FilenameWithoutPath>shci_tl_if.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>52</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/utilities/stm_list.c</PathWithFileName>
+ <FilenameWithoutPath>stm_list.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>53</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/utilities/stm_queue.c</PathWithFileName>
+ <FilenameWithoutPath>stm_queue.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>54</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/svc/Src/svc_ctl.c</PathWithFileName>
+ <FilenameWithoutPath>svc_ctl.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>55</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/tl_mbox.c</PathWithFileName>
+ <FilenameWithoutPath>tl_mbox.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Utilities</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>10</GroupNumber>
+ <FileNumber>56</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Utilities/lpm/tiny_lpm/stm32_lpm.c</PathWithFileName>
+ <FilenameWithoutPath>stm32_lpm.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>10</GroupNumber>
+ <FileNumber>57</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Utilities/sequencer/stm32_seq.c</PathWithFileName>
+ <FilenameWithoutPath>stm32_seq.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>::CMSIS</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>1</RteFlg>
+ </Group>
+
+</ProjectOpt>
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/MDK-ARM/BLE_HeartRate_ota.uvprojx b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/MDK-ARM/BLE_HeartRate_ota.uvprojx
new file mode 100644
index 000000000..7f0228422
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/MDK-ARM/BLE_HeartRate_ota.uvprojx
@@ -0,0 +1,756 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
+
+ <SchemaVersion>2.1</SchemaVersion>
+
+ <Header>### uVision Project, (C) Keil Software</Header>
+
+ <Targets>
+ <Target>
+ <TargetName>BLE_HeartRate_ota</TargetName>
+ <ToolsetNumber>0x4</ToolsetNumber>
+ <ToolsetName>ARM-ADS</ToolsetName>
+ <pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARMCC</pCCUsed>
+ <uAC6>0</uAC6>
+ <TargetOption>
+ <TargetCommonOption>
+ <Device>STM32WB15CCUx</Device>
+ <Vendor>STMicroelectronics</Vendor>
+ <PackID>Keil.STM32WB1x_DFP.0.0.1</PackID>
+ <PackURL>http://www.keil.com/pack</PackURL>
+ <Cpu>IRAM(0x20000000,0x00003000) IROM(0x08000000,0x00050000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE</Cpu>
+ <FlashUtilSpec></FlashUtilSpec>
+ <StartupFile></StartupFile>
+ <FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32WB1x_320_M4 -FS08000000 -FL050000 -FP0($$Device:STM32WB15CCUx$Drivers\CMSIS\Flash\STM32WB1x_320_M4.FLM))</FlashDriverDll>
+ <DeviceId>0</DeviceId>
+ <RegisterFile>$$Device:STM32WB15CCUx$Drivers\CMSIS\Device\ST\STM32WBxx\Include\stm32wb15xx.h</RegisterFile>
+ <MemoryEnv></MemoryEnv>
+ <Cmp></Cmp>
+ <Asm></Asm>
+ <Linker></Linker>
+ <OHString></OHString>
+ <InfinionOptionDll></InfinionOptionDll>
+ <SLE66CMisc></SLE66CMisc>
+ <SLE66AMisc></SLE66AMisc>
+ <SLE66LinkerMisc></SLE66LinkerMisc>
+ <SFDFile>$$Device:STM32WB15CCUx$Drivers\CMSIS\SVD\STM32WB15_CM4.svd</SFDFile>
+ <bCustSvd>0</bCustSvd>
+ <UseEnv>0</UseEnv>
+ <BinPath></BinPath>
+ <IncludePath></IncludePath>
+ <LibPath></LibPath>
+ <RegisterFilePath></RegisterFilePath>
+ <DBRegisterFilePath></DBRegisterFilePath>
+ <TargetStatus>
+ <Error>0</Error>
+ <ExitCodeStop>0</ExitCodeStop>
+ <ButtonStop>0</ButtonStop>
+ <NotGenerated>0</NotGenerated>
+ <InvalidFlash>1</InvalidFlash>
+ </TargetStatus>
+ <OutputDirectory>BLE_HeartRate_ota\Exe\</OutputDirectory>
+ <OutputName>BLE_HeartRate_ota</OutputName>
+ <CreateExecutable>1</CreateExecutable>
+ <CreateLib>0</CreateLib>
+ <CreateHexFile>0</CreateHexFile>
+ <DebugInformation>1</DebugInformation>
+ <BrowseInformation>0</BrowseInformation>
+ <ListingPath></ListingPath>
+ <HexFormatSelection>1</HexFormatSelection>
+ <Merge32K>0</Merge32K>
+ <CreateBatchFile>0</CreateBatchFile>
+ <BeforeCompile>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name></UserProg1Name>
+ <UserProg2Name></UserProg2Name>
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopU1X>0</nStopU1X>
+ <nStopU2X>0</nStopU2X>
+ </BeforeCompile>
+ <BeforeMake>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name></UserProg1Name>
+ <UserProg2Name></UserProg2Name>
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopB1X>0</nStopB1X>
+ <nStopB2X>0</nStopB2X>
+ </BeforeMake>
+ <AfterMake>
+ <RunUserProg1>1</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name>fromelf #L --bincombined --output=$L@L.bin</UserProg1Name>
+ <UserProg2Name></UserProg2Name>
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopA1X>0</nStopA1X>
+ <nStopA2X>0</nStopA2X>
+ </AfterMake>
+ <SelectedForBatchBuild>1</SelectedForBatchBuild>
+ <SVCSIdString></SVCSIdString>
+ </TargetCommonOption>
+ <CommonProperty>
+ <UseCPPCompiler>0</UseCPPCompiler>
+ <RVCTCodeConst>0</RVCTCodeConst>
+ <RVCTZI>0</RVCTZI>
+ <RVCTOtherData>0</RVCTOtherData>
+ <ModuleSelection>0</ModuleSelection>
+ <IncludeInBuild>1</IncludeInBuild>
+ <AlwaysBuild>0</AlwaysBuild>
+ <GenerateAssemblyFile>0</GenerateAssemblyFile>
+ <AssembleAssemblyFile>0</AssembleAssemblyFile>
+ <PublicsOnly>0</PublicsOnly>
+ <StopOnExitCode>3</StopOnExitCode>
+ <CustomArgument></CustomArgument>
+ <IncludeLibraryModules></IncludeLibraryModules>
+ <ComprImg>0</ComprImg>
+ </CommonProperty>
+ <DllOption>
+ <SimDllName>SARMCM3.DLL</SimDllName>
+ <SimDllArguments> -REMAP -MPU</SimDllArguments>
+ <SimDlgDll>DCM.DLL</SimDlgDll>
+ <SimDlgDllArguments>-pCM4</SimDlgDllArguments>
+ <TargetDllName>SARMCM3.DLL</TargetDllName>
+ <TargetDllArguments> -MPU</TargetDllArguments>
+ <TargetDlgDll>TCM.DLL</TargetDlgDll>
+ <TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
+ </DllOption>
+ <DebugOption>
+ <OPTHX>
+ <HexSelection>1</HexSelection>
+ <HexRangeLowAddress>0</HexRangeLowAddress>
+ <HexRangeHighAddress>0</HexRangeHighAddress>
+ <HexOffset>0</HexOffset>
+ <Oh166RecLen>16</Oh166RecLen>
+ </OPTHX>
+ </DebugOption>
+ <Utilities>
+ <Flash1>
+ <UseTargetDll>1</UseTargetDll>
+ <UseExternalTool>0</UseExternalTool>
+ <RunIndependent>0</RunIndependent>
+ <UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
+ <Capability>1</Capability>
+ <DriverSelection>4101</DriverSelection>
+ </Flash1>
+ <bUseTDR>1</bUseTDR>
+ <Flash2>BIN\UL2CM3.DLL</Flash2>
+ <Flash3></Flash3>
+ <Flash4></Flash4>
+ <pFcarmOut></pFcarmOut>
+ <pFcarmGrp></pFcarmGrp>
+ <pFcArmRoot></pFcArmRoot>
+ <FcArmLst>0</FcArmLst>
+ </Utilities>
+ <TargetArmAds>
+ <ArmAdsMisc>
+ <GenerateListings>0</GenerateListings>
+ <asHll>1</asHll>
+ <asAsm>1</asAsm>
+ <asMacX>1</asMacX>
+ <asSyms>1</asSyms>
+ <asFals>1</asFals>
+ <asDbgD>1</asDbgD>
+ <asForm>1</asForm>
+ <ldLst>0</ldLst>
+ <ldmm>1</ldmm>
+ <ldXref>1</ldXref>
+ <BigEnd>0</BigEnd>
+ <AdsALst>1</AdsALst>
+ <AdsACrf>1</AdsACrf>
+ <AdsANop>0</AdsANop>
+ <AdsANot>0</AdsANot>
+ <AdsLLst>1</AdsLLst>
+ <AdsLmap>1</AdsLmap>
+ <AdsLcgr>1</AdsLcgr>
+ <AdsLsym>1</AdsLsym>
+ <AdsLszi>1</AdsLszi>
+ <AdsLtoi>1</AdsLtoi>
+ <AdsLsun>1</AdsLsun>
+ <AdsLven>1</AdsLven>
+ <AdsLsxf>1</AdsLsxf>
+ <RvctClst>0</RvctClst>
+ <GenPPlst>0</GenPPlst>
+ <AdsCpuType>"Cortex-M4"</AdsCpuType>
+ <RvctDeviceName></RvctDeviceName>
+ <mOS>0</mOS>
+ <uocRom>0</uocRom>
+ <uocRam>0</uocRam>
+ <hadIROM>1</hadIROM>
+ <hadIRAM>1</hadIRAM>
+ <hadXRAM>0</hadXRAM>
+ <uocXRam>0</uocXRam>
+ <RvdsVP>2</RvdsVP>
+ <RvdsMve>0</RvdsMve>
+ <RvdsCdeCp>0</RvdsCdeCp>
+ <hadIRAM2>0</hadIRAM2>
+ <hadIROM2>0</hadIROM2>
+ <StupSel>8</StupSel>
+ <useUlib>1</useUlib>
+ <EndSel>1</EndSel>
+ <uLtcg>0</uLtcg>
+ <nSecure>0</nSecure>
+ <RoSelD>3</RoSelD>
+ <RwSelD>3</RwSelD>
+ <CodeSel>0</CodeSel>
+ <OptFeed>0</OptFeed>
+ <NoZi1>0</NoZi1>
+ <NoZi2>0</NoZi2>
+ <NoZi3>0</NoZi3>
+ <NoZi4>0</NoZi4>
+ <NoZi5>0</NoZi5>
+ <Ro1Chk>0</Ro1Chk>
+ <Ro2Chk>0</Ro2Chk>
+ <Ro3Chk>0</Ro3Chk>
+ <Ir1Chk>1</Ir1Chk>
+ <Ir2Chk>1</Ir2Chk>
+ <Ra1Chk>0</Ra1Chk>
+ <Ra2Chk>0</Ra2Chk>
+ <Ra3Chk>0</Ra3Chk>
+ <Im1Chk>1</Im1Chk>
+ <Im2Chk>0</Im2Chk>
+ <OnChipMemories>
+ <Ocm1>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm1>
+ <Ocm2>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm2>
+ <Ocm3>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm3>
+ <Ocm4>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm4>
+ <Ocm5>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm5>
+ <Ocm6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm6>
+ <IRAM>
+ <Type>0</Type>
+ <StartAddress>0x20000000</StartAddress>
+ <Size>0x3000</Size>
+ </IRAM>
+ <IROM>
+ <Type>1</Type>
+ <StartAddress>0x8000000</StartAddress>
+ <Size>0x50000</Size>
+ </IROM>
+ <XRAM>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </XRAM>
+ <OCR_RVCT1>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT1>
+ <OCR_RVCT2>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT2>
+ <OCR_RVCT3>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT3>
+ <OCR_RVCT4>
+ <Type>1</Type>
+ <StartAddress>0x8007000</StartAddress>
+ <Size>0x260</Size>
+ </OCR_RVCT4>
+ <OCR_RVCT5>
+ <Type>1</Type>
+ <StartAddress>0x8007260</StartAddress>
+ <Size>0x18fff</Size>
+ </OCR_RVCT5>
+ <OCR_RVCT6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT6>
+ <OCR_RVCT7>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT7>
+ <OCR_RVCT8>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT8>
+ <OCR_RVCT9>
+ <Type>0</Type>
+ <StartAddress>0x20000000</StartAddress>
+ <Size>0x3000</Size>
+ </OCR_RVCT9>
+ <OCR_RVCT10>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT10>
+ </OnChipMemories>
+ <RvctStartVector></RvctStartVector>
+ </ArmAdsMisc>
+ <Cads>
+ <interw>1</interw>
+ <Optim>4</Optim>
+ <oTime>0</oTime>
+ <SplitLS>0</SplitLS>
+ <OneElfS>1</OneElfS>
+ <Strict>0</Strict>
+ <EnumInt>0</EnumInt>
+ <PlainCh>0</PlainCh>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <wLevel>2</wLevel>
+ <uThumb>0</uThumb>
+ <uSurpInc>0</uSurpInc>
+ <uC99>1</uC99>
+ <uGnu>0</uGnu>
+ <useXO>0</useXO>
+ <v6Lang>5</v6Lang>
+ <v6LangP>3</v6LangP>
+ <vShortEn>0</vShortEn>
+ <vShortWch>0</vShortWch>
+ <v6Lto>0</v6Lto>
+ <v6WtE>0</v6WtE>
+ <v6Rtti>0</v6Rtti>
+ <VariousControls>
+ <MiscControls>--diag_suppress 1296</MiscControls>
+ <Define>USE_STM32WBXX_NUCLEO,USE_HAL_DRIVER,STM32WB15xx</Define>
+ <Undefine></Undefine>
+ <IncludePath>../Core/Inc;../STM32_WPAN/App;../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc;../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc/Legacy;../../../../../../Middlewares/ST/STM32_WPAN;../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread;../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl;../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci;../../../../../../Middlewares/ST/STM32_WPAN/utilities;../../../../../../Utilities/lpm/tiny_lpm;../../../../../../Utilities/sequencer;../../../../../../Middlewares/ST/STM32_WPAN/ble;../../../../../../Middlewares/ST/STM32_WPAN/ble/core/template;../../../../../../Middlewares/ST/STM32_WPAN/ble/core;../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include;../../../../../../Drivers/CMSIS/Include;../../../../../../Drivers/BSP/NUCLEO-WB15CC</IncludePath>
+ </VariousControls>
+ </Cads>
+ <Aads>
+ <interw>1</interw>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <thumb>0</thumb>
+ <SplitLS>0</SplitLS>
+ <SwStkChk>0</SwStkChk>
+ <NoWarn>0</NoWarn>
+ <uSurpInc>0</uSurpInc>
+ <useXO>0</useXO>
+ <ClangAsOpt>4</ClangAsOpt>
+ <VariousControls>
+ <MiscControls></MiscControls>
+ <Define></Define>
+ <Undefine></Undefine>
+ <IncludePath></IncludePath>
+ </VariousControls>
+ </Aads>
+ <LDads>
+ <umfTarg>0</umfTarg>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <noStLib>0</noStLib>
+ <RepFail>1</RepFail>
+ <useFile>0</useFile>
+ <TextAddressRange></TextAddressRange>
+ <DataAddressRange></DataAddressRange>
+ <pXoBase></pXoBase>
+ <ScatterFile>stm32wb15xx_flash_cm4.sct</ScatterFile>
+ <IncludeLibs></IncludeLibs>
+ <IncludeLibsPath></IncludeLibsPath>
+ <Misc>--diag_suppress L6314W
+--diag_suppress 1296
+--keep *.o(TAG_OTA_START)
+--keep *.o(TAG_OTA_END)</Misc>
+ <LinkerInputFile></LinkerInputFile>
+ <DisabledWarnings></DisabledWarnings>
+ </LDads>
+ </TargetArmAds>
+ </TargetOption>
+ <Groups>
+ <Group>
+ <GroupName>Application/MDK-ARM</GroupName>
+ <Files>
+ <File>
+ <FileName>startup_stm32wb15xx_cm4.s</FileName>
+ <FileType>2</FileType>
+ <FilePath>startup_stm32wb15xx_cm4.s</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Application/User/Core</GroupName>
+ <Files>
+ <File>
+ <FileName>app_debug.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/app_debug.c</FilePath>
+ </File>
+ <File>
+ <FileName>app_entry.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/app_entry.c</FilePath>
+ </File>
+ <File>
+ <FileName>hw_timerserver.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/hw_timerserver.c</FilePath>
+ </File>
+ <File>
+ <FileName>main.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/main.c</FilePath>
+ </File>
+ <File>
+ <FileName>standby_stm32wb15.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/standby_stm32wb15.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32_lpm_if.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/stm32_lpm_if.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_msp.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/stm32wbxx_hal_msp.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_it.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/stm32wbxx_it.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Application/User/STM32_WPAN/App</GroupName>
+ <Files>
+ <File>
+ <FileName>app_ble.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../STM32_WPAN/App/app_ble.c</FilePath>
+ </File>
+ <File>
+ <FileName>dis_app.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../STM32_WPAN/App/dis_app.c</FilePath>
+ </File>
+ <File>
+ <FileName>hrs_app.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../STM32_WPAN/App/hrs_app.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Application/User/STM32_WPAN/Target</GroupName>
+ <Files>
+ <File>
+ <FileName>hw_ipcc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../STM32_WPAN/Target/hw_ipcc.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Doc</GroupName>
+ <Files>
+ <File>
+ <FileName>readme.txt</FileName>
+ <FileType>5</FileType>
+ <FilePath>../readme.txt</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers/BSP/NUCLEO-WB15CC</GroupName>
+ <Files>
+ <File>
+ <FileName>nucleo_wb15cc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/BSP/NUCLEO-WB15CC/nucleo_wb15cc.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers/CMSIS</GroupName>
+ <Files>
+ <File>
+ <FileName>system_stm32wbxx.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/system_stm32wbxx.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers/STM32WBxx_HAL_Driver</GroupName>
+ <Files>
+ <File>
+ <FileName>stm32wbxx_hal.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_cortex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cortex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_dma.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_dma_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_exti.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_exti.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_flash.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_flash_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_gpio.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_gpio.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_hsem.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_hsem.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_ipcc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_ipcc.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_pwr.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_pwr_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_rcc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_rcc_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_rtc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_rtc_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_tim.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_tim_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_uart.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_uart_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart_ex.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Middlewares/STM32_WPAN</GroupName>
+ <Files>
+ <File>
+ <FileName>ble_gap_aci.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gap_aci.c</FilePath>
+ </File>
+ <File>
+ <FileName>ble_gatt_aci.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gatt_aci.c</FilePath>
+ </File>
+ <File>
+ <FileName>ble_hal_aci.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hal_aci.c</FilePath>
+ </File>
+ <File>
+ <FileName>ble_hci_le.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hci_le.c</FilePath>
+ </File>
+ <File>
+ <FileName>ble_l2cap_aci.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_l2cap_aci.c</FilePath>
+ </File>
+ <File>
+ <FileName>dbg_trace.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/utilities/dbg_trace.c</FilePath>
+ </File>
+ <File>
+ <FileName>dis.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/ble/svc/Src/dis.c</FilePath>
+ </File>
+ <File>
+ <FileName>hci_tl.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/hci_tl.c</FilePath>
+ </File>
+ <File>
+ <FileName>hci_tl_if.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/hci_tl_if.c</FilePath>
+ </File>
+ <File>
+ <FileName>hrs.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/ble/svc/Src/hrs.c</FilePath>
+ </File>
+ <File>
+ <FileName>osal.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/template/osal.c</FilePath>
+ </File>
+ <File>
+ <FileName>otp.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/utilities/otp.c</FilePath>
+ </File>
+ <File>
+ <FileName>shci.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci/shci.c</FilePath>
+ </File>
+ <File>
+ <FileName>shci_tl.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/shci_tl.c</FilePath>
+ </File>
+ <File>
+ <FileName>shci_tl_if.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/shci_tl_if.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm_list.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/utilities/stm_list.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm_queue.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/utilities/stm_queue.c</FilePath>
+ </File>
+ <File>
+ <FileName>svc_ctl.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/ble/svc/Src/svc_ctl.c</FilePath>
+ </File>
+ <File>
+ <FileName>tl_mbox.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/tl_mbox.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Utilities</GroupName>
+ <Files>
+ <File>
+ <FileName>stm32_lpm.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Utilities/lpm/tiny_lpm/stm32_lpm.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32_seq.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Utilities/sequencer/stm32_seq.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>::CMSIS</GroupName>
+ </Group>
+ </Groups>
+ </Target>
+ </Targets>
+
+ <RTE>
+ <apis/>
+ <components>
+ <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.4.0" condition="ARMv6_7_8-M Device">
+ <package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.7.0"/>
+ <targetInfos>
+ <targetInfo name="BLE_HeartRate_ota"/>
+ </targetInfos>
+ </component>
+ </components>
+ <files/>
+ </RTE>
+
+ <LayerInfo>
+ <Layers>
+ <Layer>
+ <LayName>&lt;Project Info&gt;</LayName>
+ <LayDesc></LayDesc>
+ <LayUrl></LayUrl>
+ <LayKeys></LayKeys>
+ <LayCat></LayCat>
+ <LayLic></LayLic>
+ <LayTarg>0</LayTarg>
+ <LayPrjMark>1</LayPrjMark>
+ </Layer>
+ </Layers>
+ </LayerInfo>
+
+</Project>
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/MDK-ARM/startup_stm32wb15xx_cm4.s b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/MDK-ARM/startup_stm32wb15xx_cm4.s
new file mode 100644
index 000000000..f7cdf820d
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/MDK-ARM/startup_stm32wb15xx_cm4.s
@@ -0,0 +1,336 @@
+;******************************************************************************
+;* File Name : startup_stm32wb15xx_cm4.s
+;* Author : MCD Application Team
+;* Description : STM32WB15xx devices vector table for MDK-ARM toolchain.
+;* This module performs:
+;* - Set the initial SP
+;* - Set the initial PC == Reset_Handler
+;* - Set the vector table entries with the exceptions ISR address
+;* - Branches to __main in the C library (which eventually
+;* calls main()).
+;* After Reset the CortexM4 processor is in Thread mode,
+;* priority is Privileged, and the Stack is set to Main.
+;* <<< Use Configuration Wizard in Context Menu >>>
+;******************************************************************************
+;* @attention
+;*
+;* Copyright (c) 2019 STMicroelectronics. All rights reserved.
+;*
+;* This software component is licensed by ST under Apache License, Version 2.0,
+;* the "License"; You may not use this file except in compliance with the
+;* License. You may obtain a copy of the License at:
+;* opensource.org/licenses/Apache-2.0
+;*
+;******************************************************************************
+
+; Amount of memory (in bytes) allocated for Stack
+; Tailor this value to your application needs
+; <h> Stack Configuration
+; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; </h>
+
+Stack_Size EQU 0x1000
+
+ AREA STACK, NOINIT, READWRITE, ALIGN=3
+Stack_Mem SPACE Stack_Size
+__initial_sp
+
+
+; <h> Heap Configuration
+; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; </h>
+
+Heap_Size EQU 0x400
+
+ AREA HEAP, NOINIT, READWRITE, ALIGN=3
+__heap_base
+Heap_Mem SPACE Heap_Size
+__heap_limit
+
+ PRESERVE8
+ THUMB
+
+
+; Vector Table Mapped to Address 0 at Reset
+ AREA RESET, DATA, READONLY
+ EXPORT __Vectors
+ EXPORT __Vectors_End
+ EXPORT __Vectors_Size
+
+__Vectors DCD __initial_sp ; Top of Stack
+ 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 0 ; Reserved
+ 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_PVM_IRQHandler ; PVD and PVM detector
+ DCD TAMP_STAMP_LSECSS_IRQHandler ; RTC Tamper and TimeStamp Interrupts and LSECSS Interrupts
+ DCD RTC_WKUP_IRQHandler ; RTC Wakeup Interrupt
+ DCD FLASH_IRQHandler ; FLASH global Interrupt
+ DCD RCC_IRQHandler ; RCC Interrupt
+ DCD EXTI0_IRQHandler ; EXTI Line 0 Interrupt
+ DCD EXTI1_IRQHandler ; EXTI Line 1 Interrupt
+ DCD EXTI2_IRQHandler ; EXTI Line 2 Interrupt
+ DCD EXTI3_IRQHandler ; EXTI Line 3 Interrup
+ DCD EXTI4_IRQHandler ; EXTI Line 4 Interrupt
+ DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 Interrupt
+ DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 Interrupt
+ DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 Interrupt
+ DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 Interrupt
+ DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 Interrupt
+ DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 Interrupt
+ DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 Interrupt
+ DCD ADC1_IRQHandler ; ADC1 Interrupt
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD C2SEV_PWR_C2H_IRQHandler ; CPU M0+ SEV Interrupt
+ DCD COMP_IRQHandler ; COMP1 Interrupts
+ DCD EXTI9_5_IRQHandler ; EXTI Lines [9:5] Interrupt
+ DCD TIM1_BRK_IRQHandler ; TIM1 Break Interrupt
+ DCD TIM1_UP_IRQHandler ; TIM1 Update Interrupt
+ DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Communication Interrupts
+ DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare Interrupt
+ DCD TIM2_IRQHandler ; TIM2 Global Interrupt
+ DCD PKA_IRQHandler ; PKA Interrupt
+ DCD I2C1_EV_IRQHandler ; I2C1 Event Interrupt
+ DCD I2C1_ER_IRQHandler ; I2C1 Error Interrupt
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD SPI1_IRQHandler ; SPI1 Interrupt
+ DCD 0 ; Reserved
+ DCD USART1_IRQHandler ; USART1 Interrupt
+ DCD LPUART1_IRQHandler ; LPUART1 Interrupt
+ DCD 0 ; Reserved
+ DCD TSC_IRQHandler ; TSC Interrupt
+ DCD EXTI15_10_IRQHandler ; EXTI Lines1[15:10 ]Interrupts
+ DCD RTC_Alarm_IRQHandler ; RTC Alarms (A and B) Interrupt
+ DCD 0 ; Reserved
+ DCD PWR_SOTF_BLEACT_RFPHASE_IRQHandler ; WKUP Interrupt from PWR
+ DCD IPCC_C1_RX_IRQHandler ; IPCC CPU1 RX occupied interrupt
+ DCD IPCC_C1_TX_IRQHandler ; IPCC CPU1 RX free interrupt
+ DCD HSEM_IRQHandler ; HSEM0 Interrupt
+ DCD LPTIM1_IRQHandler ; LPTIM1 Interrupt
+ DCD LPTIM2_IRQHandler ; LPTIM2 Interrupt
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD AES2_IRQHandler ; AES2 Interrupt
+ DCD RNG_IRQHandler ; RNG1 Interrupt
+ DCD FPU_IRQHandler ; FPU Interrupt
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD DMAMUX1_OVR_IRQHandler ; DMAMUX overrun Interrupt
+
+__Vectors_End
+
+__Vectors_Size EQU __Vectors_End - __Vectors
+
+ AREA |.text|, CODE, READONLY
+
+; Reset handler
+Reset_Handler PROC
+ EXPORT Reset_Handler [WEAK]
+ IMPORT SystemInit
+ IMPORT __main
+
+ LDR R0, =SystemInit
+ BLX R0
+ LDR R0, =__main
+ BX R0
+ ENDP
+
+; Dummy Exception Handlers (infinite loops which can be modified)
+
+NMI_Handler PROC
+ EXPORT NMI_Handler [WEAK]
+ B .
+ ENDP
+HardFault_Handler\
+ PROC
+ EXPORT HardFault_Handler [WEAK]
+ B .
+ ENDP
+MemManage_Handler\
+ PROC
+ EXPORT MemManage_Handler [WEAK]
+ B .
+ ENDP
+BusFault_Handler\
+ PROC
+ EXPORT BusFault_Handler [WEAK]
+ B .
+ ENDP
+UsageFault_Handler\
+ PROC
+ EXPORT UsageFault_Handler [WEAK]
+ B .
+ ENDP
+SVC_Handler PROC
+ EXPORT SVC_Handler [WEAK]
+ B .
+ ENDP
+DebugMon_Handler\
+ PROC
+ EXPORT DebugMon_Handler [WEAK]
+ B .
+ ENDP
+PendSV_Handler PROC
+ EXPORT PendSV_Handler [WEAK]
+ B .
+ ENDP
+SysTick_Handler PROC
+ EXPORT SysTick_Handler [WEAK]
+ B .
+ ENDP
+
+Default_Handler PROC
+
+ EXPORT WWDG_IRQHandler [WEAK]
+ EXPORT PVD_PVM_IRQHandler [WEAK]
+ EXPORT TAMP_STAMP_LSECSS_IRQHandler [WEAK]
+ EXPORT RTC_WKUP_IRQHandler [WEAK]
+ EXPORT FLASH_IRQHandler [WEAK]
+ EXPORT RCC_IRQHandler [WEAK]
+ EXPORT EXTI0_IRQHandler [WEAK]
+ EXPORT EXTI1_IRQHandler [WEAK]
+ EXPORT EXTI2_IRQHandler [WEAK]
+ EXPORT EXTI3_IRQHandler [WEAK]
+ EXPORT EXTI4_IRQHandler [WEAK]
+ EXPORT DMA1_Channel1_IRQHandler [WEAK]
+ EXPORT DMA1_Channel2_IRQHandler [WEAK]
+ EXPORT DMA1_Channel3_IRQHandler [WEAK]
+ EXPORT DMA1_Channel4_IRQHandler [WEAK]
+ EXPORT DMA1_Channel5_IRQHandler [WEAK]
+ EXPORT DMA1_Channel6_IRQHandler [WEAK]
+ EXPORT DMA1_Channel7_IRQHandler [WEAK]
+ EXPORT ADC1_IRQHandler [WEAK]
+ EXPORT C2SEV_PWR_C2H_IRQHandler [WEAK]
+ EXPORT COMP_IRQHandler [WEAK]
+ EXPORT EXTI9_5_IRQHandler [WEAK]
+ EXPORT TIM1_BRK_IRQHandler [WEAK]
+ EXPORT TIM1_UP_IRQHandler [WEAK]
+ EXPORT TIM1_TRG_COM_IRQHandler [WEAK]
+ EXPORT TIM1_CC_IRQHandler [WEAK]
+ EXPORT TIM2_IRQHandler [WEAK]
+ EXPORT PKA_IRQHandler [WEAK]
+ EXPORT I2C1_EV_IRQHandler [WEAK]
+ EXPORT I2C1_ER_IRQHandler [WEAK]
+ EXPORT SPI1_IRQHandler [WEAK]
+ EXPORT USART1_IRQHandler [WEAK]
+ EXPORT LPUART1_IRQHandler [WEAK]
+ EXPORT TSC_IRQHandler [WEAK]
+ EXPORT EXTI15_10_IRQHandler [WEAK]
+ EXPORT RTC_Alarm_IRQHandler [WEAK]
+ EXPORT PWR_SOTF_BLEACT_RFPHASE_IRQHandler [WEAK]
+ EXPORT IPCC_C1_RX_IRQHandler [WEAK]
+ EXPORT IPCC_C1_TX_IRQHandler [WEAK]
+ EXPORT HSEM_IRQHandler [WEAK]
+ EXPORT LPTIM1_IRQHandler [WEAK]
+ EXPORT LPTIM2_IRQHandler [WEAK]
+ EXPORT AES1_IRQHandler [WEAK]
+ EXPORT AES2_IRQHandler [WEAK]
+ EXPORT RNG_IRQHandler [WEAK]
+ EXPORT FPU_IRQHandler [WEAK]
+ EXPORT DMAMUX1_OVR_IRQHandler [WEAK]
+
+WWDG_IRQHandler
+PVD_PVM_IRQHandler
+TAMP_STAMP_LSECSS_IRQHandler
+RTC_WKUP_IRQHandler
+FLASH_IRQHandler
+RCC_IRQHandler
+EXTI0_IRQHandler
+EXTI1_IRQHandler
+EXTI2_IRQHandler
+EXTI3_IRQHandler
+EXTI4_IRQHandler
+DMA1_Channel1_IRQHandler
+DMA1_Channel2_IRQHandler
+DMA1_Channel3_IRQHandler
+DMA1_Channel4_IRQHandler
+DMA1_Channel5_IRQHandler
+DMA1_Channel6_IRQHandler
+DMA1_Channel7_IRQHandler
+ADC1_IRQHandler
+C2SEV_PWR_C2H_IRQHandler
+COMP_IRQHandler
+EXTI9_5_IRQHandler
+TIM1_BRK_IRQHandler
+TIM1_UP_IRQHandler
+TIM1_TRG_COM_IRQHandler
+TIM1_CC_IRQHandler
+TIM2_IRQHandler
+PKA_IRQHandler
+I2C1_EV_IRQHandler
+I2C1_ER_IRQHandler
+SPI1_IRQHandler
+USART1_IRQHandler
+LPUART1_IRQHandler
+TSC_IRQHandler
+EXTI15_10_IRQHandler
+RTC_Alarm_IRQHandler
+PWR_SOTF_BLEACT_RFPHASE_IRQHandler
+IPCC_C1_RX_IRQHandler
+IPCC_C1_TX_IRQHandler
+HSEM_IRQHandler
+LPTIM1_IRQHandler
+LPTIM2_IRQHandler
+AES1_IRQHandler
+AES2_IRQHandler
+RNG_IRQHandler
+FPU_IRQHandler
+DMAMUX1_OVR_IRQHandler
+
+ B .
+
+ ENDP
+
+ ALIGN
+
+;*******************************************************************************
+; User Stack and Heap initialization
+;*******************************************************************************
+ IF :DEF:__MICROLIB
+
+ EXPORT __initial_sp
+ EXPORT __heap_base
+ EXPORT __heap_limit
+
+ ELSE
+
+ IMPORT __use_two_region_memory
+ EXPORT __user_initial_stackheap
+
+__user_initial_stackheap
+
+ LDR R0, = Heap_Mem
+ LDR R1, =(Stack_Mem + Stack_Size)
+ LDR R2, = (Heap_Mem + Heap_Size)
+ LDR R3, = Stack_Mem
+ BX LR
+
+ ALIGN
+
+ ENDIF
+
+ END
+
+;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE*****
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/MDK-ARM/stm32wb15xx_flash_cm4.sct b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/MDK-ARM/stm32wb15xx_flash_cm4.sct
new file mode 100644
index 000000000..2e70c58d4
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_HeartRate_ota/MDK-ARM/stm32wb15xx_flash_cm4.sct
@@ -0,0 +1,34 @@
+; *************************************************************
+; *** Scatter-Loading Description File generated by uVision ***
+; *************************************************************
+
+LR_IROM1 0x08007000 0x140{ ; load region size_region
+ ER_IROM1_LOW 0x08007000 0x140 { ; load address = execution address
+ *.o(RESET, +First)
+ }
+ }
+
+LR_IROM2 0x08007140 0x4{ ; load region size_region
+ ER_IROM2_LOW 0x08007140 0x4 {
+ *.o (TAG_OTA_START)
+ }
+ }
+
+LR_IROM3 0x08007144 0x146BC{
+ ER_IROM1_HIGH 0x08007144 0x146BC { ; load address = execution address
+ *(InRoot$$Sections)
+ .ANY (+RO)
+ *.o (TAG_OTA_END)
+ }
+
+ RW_IRAM1 0x20000004 0x2FFC { ; RW data
+ .ANY (+RW +ZI)
+ }
+
+ RW_RAM2aRet_SHARED 0x20030000 0x2800 { ; RW data
+ *(MAPPING_TABLE)
+ *(MB_MEM1)
+ *(MB_MEM2)
+ }
+ }
+ \ No newline at end of file
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_Ota/Core/Inc/app_conf.h b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_Ota/Core/Inc/app_conf.h
index 549014a1d..7c95f77a2 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_Ota/Core/Inc/app_conf.h
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_Ota/Core/Inc/app_conf.h
@@ -233,7 +233,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_TransparentMode/Core/Inc/app_conf.h b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_TransparentMode/Core/Inc/app_conf.h
index 04d33a93e..577f5dd41 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_TransparentMode/Core/Inc/app_conf.h
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_TransparentMode/Core/Inc/app_conf.h
@@ -198,7 +198,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_TransparentMode/STM32_WPAN/App/tm.c b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_TransparentMode/STM32_WPAN/App/tm.c
index 32654df65..9be3fda24 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_TransparentMode/STM32_WPAN/App/tm.c
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_TransparentMode/STM32_WPAN/App/tm.c
@@ -141,7 +141,7 @@ void TM_Init( void )
};
ipccdba = READ_BIT( FLASH->IPCCBR, FLASH_IPCCBR_IPCCDBA );
- p_RefTable = (MB_RefTable_t*)((ipccdba<<2) + (SRAM_BASE + 0x00030000));
+ p_RefTable = (MB_RefTable_t*)((ipccdba<<2) + SRAM2A_BASE);
tl_ble_init_conf.p_cmdbuffer = (uint8_t*)&BleCmdBuffer;
tl_ble_init_conf.p_AclDataBuffer = HciAclDataBuffer;
@@ -495,7 +495,7 @@ void shci_send( uint16_t cmd_code, uint8_t len_cmd_payload, uint8_t * p_cmd_payl
MB_RefTable_t * p_ref_table;
ipccdba = READ_BIT( FLASH->IPCCBR, FLASH_IPCCBR_IPCCDBA );
- p_ref_table = (MB_RefTable_t*)((ipccdba<<2) + (SRAM_BASE + 0x00030000));
+ p_ref_table = (MB_RefTable_t*)((ipccdba<<2) + SRAM2A_BASE);
SysLocalCmdStatus = 1;
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pClient/Core/Inc/app_conf.h b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pClient/Core/Inc/app_conf.h
index 9f4a00ed2..30cc641fe 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pClient/Core/Inc/app_conf.h
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pClient/Core/Inc/app_conf.h
@@ -235,7 +235,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer/Core/Inc/app_conf.h b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer/Core/Inc/app_conf.h
index 996d9927d..6cca09282 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer/Core/Inc/app_conf.h
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer/Core/Inc/app_conf.h
@@ -273,7 +273,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer/STM32_WPAN/App/app_ble.c b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer/STM32_WPAN/App/app_ble.c
index 4c8bca693..a01d49863 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer/STM32_WPAN/App/app_ble.c
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer/STM32_WPAN/App/app_ble.c
@@ -617,12 +617,6 @@ SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt )
handleNotification.ConnectionHandle = BleApplicationContext.BleApplicationContext_legacy.connectionHandle;
P2PS_APP_Notification(&handleNotification);
/* USER CODE BEGIN HCI_EVT_LE_CONN_COMPLETE */
-/*
-* SPECIFIC to P2P Server APP
-*/
- handleNotification.P2P_Evt_Opcode = PEER_CONN_HANDLE_EVT;
- handleNotification.ConnectionHandle = BleApplicationContext.BleApplicationContext_legacy.connectionHandle;
- P2PS_APP_Notification(&handleNotification);
/* USER CODE END HCI_EVT_LE_CONN_COMPLETE */
}
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/Core/Inc/app_conf.h b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/Core/Inc/app_conf.h
index 996d9927d..6cca09282 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/Core/Inc/app_conf.h
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/Core/Inc/app_conf.h
@@ -273,7 +273,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/MDK-ARM/BLE_p2pServer_ota.uvoptx b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/MDK-ARM/BLE_p2pServer_ota.uvoptx
new file mode 100644
index 000000000..43d11b472
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/MDK-ARM/BLE_p2pServer_ota.uvoptx
@@ -0,0 +1,937 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
+
+ <SchemaVersion>1.0</SchemaVersion>
+
+ <Header>### uVision Project, (C) Keil Software</Header>
+
+ <Extensions>
+ <cExt>*.c</cExt>
+ <aExt>*.s*; *.src; *.a*</aExt>
+ <oExt>*.obj; *.o</oExt>
+ <lExt>*.lib</lExt>
+ <tExt>*.txt; *.h; *.inc</tExt>
+ <pExt>*.plm</pExt>
+ <CppX>*.cpp</CppX>
+ <nMigrate>0</nMigrate>
+ </Extensions>
+
+ <DaveTm>
+ <dwLowDateTime>0</dwLowDateTime>
+ <dwHighDateTime>0</dwHighDateTime>
+ </DaveTm>
+
+ <Target>
+ <TargetName>BLE_p2pServer_ota</TargetName>
+ <ToolsetNumber>0x4</ToolsetNumber>
+ <ToolsetName>ARM-ADS</ToolsetName>
+ <TargetOption>
+ <CLKADS>12000000</CLKADS>
+ <OPTTT>
+ <gFlags>1</gFlags>
+ <BeepAtEnd>1</BeepAtEnd>
+ <RunSim>0</RunSim>
+ <RunTarget>1</RunTarget>
+ <RunAbUc>0</RunAbUc>
+ </OPTTT>
+ <OPTHX>
+ <HexSelection>1</HexSelection>
+ <FlashByte>65535</FlashByte>
+ <HexRangeLowAddress>0</HexRangeLowAddress>
+ <HexRangeHighAddress>0</HexRangeHighAddress>
+ <HexOffset>0</HexOffset>
+ </OPTHX>
+ <OPTLEX>
+ <PageWidth>79</PageWidth>
+ <PageLength>66</PageLength>
+ <TabStop>8</TabStop>
+ <ListingPath></ListingPath>
+ </OPTLEX>
+ <ListingPage>
+ <CreateCListing>1</CreateCListing>
+ <CreateAListing>1</CreateAListing>
+ <CreateLListing>1</CreateLListing>
+ <CreateIListing>0</CreateIListing>
+ <AsmCond>1</AsmCond>
+ <AsmSymb>1</AsmSymb>
+ <AsmXref>0</AsmXref>
+ <CCond>1</CCond>
+ <CCode>0</CCode>
+ <CListInc>0</CListInc>
+ <CSymb>0</CSymb>
+ <LinkerCodeListing>0</LinkerCodeListing>
+ </ListingPage>
+ <OPTXL>
+ <LMap>1</LMap>
+ <LComments>1</LComments>
+ <LGenerateSymbols>1</LGenerateSymbols>
+ <LLibSym>1</LLibSym>
+ <LLines>1</LLines>
+ <LLocSym>1</LLocSym>
+ <LPubSym>1</LPubSym>
+ <LXref>0</LXref>
+ <LExpSel>0</LExpSel>
+ </OPTXL>
+ <OPTFL>
+ <tvExp>1</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <IsCurrentTarget>1</IsCurrentTarget>
+ </OPTFL>
+ <CpuCode>18</CpuCode>
+ <DebugOpt>
+ <uSim>0</uSim>
+ <uTrg>1</uTrg>
+ <sLdApp>1</sLdApp>
+ <sGomain>1</sGomain>
+ <sRbreak>1</sRbreak>
+ <sRwatch>1</sRwatch>
+ <sRmem>1</sRmem>
+ <sRfunc>1</sRfunc>
+ <sRbox>1</sRbox>
+ <tLdApp>1</tLdApp>
+ <tGomain>1</tGomain>
+ <tRbreak>1</tRbreak>
+ <tRwatch>1</tRwatch>
+ <tRmem>1</tRmem>
+ <tRfunc>1</tRfunc>
+ <tRbox>1</tRbox>
+ <tRtrace>1</tRtrace>
+ <sRSysVw>1</sRSysVw>
+ <tRSysVw>1</tRSysVw>
+ <sRunDeb>0</sRunDeb>
+ <sLrtime>0</sLrtime>
+ <bEvRecOn>1</bEvRecOn>
+ <bSchkAxf>0</bSchkAxf>
+ <bTchkAxf>0</bTchkAxf>
+ <nTsel>6</nTsel>
+ <sDll></sDll>
+ <sDllPa></sDllPa>
+ <sDlgDll></sDlgDll>
+ <sDlgPa></sDlgPa>
+ <sIfile></sIfile>
+ <tDll></tDll>
+ <tDllPa></tDllPa>
+ <tDlgDll></tDlgDll>
+ <tDlgPa></tDlgPa>
+ <tIfile></tIfile>
+ <pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
+ </DebugOpt>
+ <TargetDriverDllRegistry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>UL2CM3</Key>
+ <Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32WB1x_320_M4 -FS08000000 -FL050000 -FP0($$Device:STM32WB15CCUx$Drivers\CMSIS\Flash\STM32WB1x_320_M4.FLM))</Name>
+ </SetRegEntry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>ST-LINKIII-KEIL_SWO</Key>
+ <Name>-U066EFF333536414257131121 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(6BA02477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32WB1x_320_M4.FLM -FS08000000 -FL050000 -FP0($$Device:STM32WB15CCUx$Drivers\CMSIS\Flash\STM32WB1x_320_M4.FLM)</Name>
+ </SetRegEntry>
+ </TargetDriverDllRegistry>
+ <Breakpoint/>
+ <Tracepoint>
+ <THDelay>0</THDelay>
+ </Tracepoint>
+ <DebugFlag>
+ <trace>0</trace>
+ <periodic>1</periodic>
+ <aLwin>1</aLwin>
+ <aCover>0</aCover>
+ <aSer1>0</aSer1>
+ <aSer2>0</aSer2>
+ <aPa>0</aPa>
+ <viewmode>1</viewmode>
+ <vrSel>0</vrSel>
+ <aSym>0</aSym>
+ <aTbox>0</aTbox>
+ <AscS1>0</AscS1>
+ <AscS2>0</AscS2>
+ <AscS3>0</AscS3>
+ <aSer3>0</aSer3>
+ <eProf>0</eProf>
+ <aLa>0</aLa>
+ <aPa1>0</aPa1>
+ <AscS4>0</AscS4>
+ <aSer4>0</aSer4>
+ <StkLoc>1</StkLoc>
+ <TrcWin>0</TrcWin>
+ <newCpu>0</newCpu>
+ <uProt>0</uProt>
+ </DebugFlag>
+ <LintExecutable></LintExecutable>
+ <LintConfigFile></LintConfigFile>
+ <bLintAuto>0</bLintAuto>
+ <bAutoGenD>0</bAutoGenD>
+ <LntExFlags>0</LntExFlags>
+ <pMisraName></pMisraName>
+ <pszMrule></pszMrule>
+ <pSingCmds></pSingCmds>
+ <pMultCmds></pMultCmds>
+ <pMisraNamep></pMisraNamep>
+ <pszMrulep></pszMrulep>
+ <pSingCmdsp></pSingCmdsp>
+ <pMultCmdsp></pMultCmdsp>
+ </TargetOption>
+ </Target>
+
+ <Group>
+ <GroupName>Application/MDK-ARM</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>1</GroupNumber>
+ <FileNumber>1</FileNumber>
+ <FileType>2</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>startup_stm32wb15xx_cm4.s</PathWithFileName>
+ <FilenameWithoutPath>startup_stm32wb15xx_cm4.s</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Application/User/Core</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>2</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/app_debug.c</PathWithFileName>
+ <FilenameWithoutPath>app_debug.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>3</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/app_entry.c</PathWithFileName>
+ <FilenameWithoutPath>app_entry.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>4</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/hw_timerserver.c</PathWithFileName>
+ <FilenameWithoutPath>hw_timerserver.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>5</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/hw_uart.c</PathWithFileName>
+ <FilenameWithoutPath>hw_uart.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>6</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/main.c</PathWithFileName>
+ <FilenameWithoutPath>main.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>7</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/standby_stm32wb15.c</PathWithFileName>
+ <FilenameWithoutPath>standby_stm32wb15.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>8</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/stm32_lpm_if.c</PathWithFileName>
+ <FilenameWithoutPath>stm32_lpm_if.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>9</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/stm32wbxx_hal_msp.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_msp.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>10</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/stm32wbxx_it.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_it.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Application/User/STM32_WPAN/App</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>3</GroupNumber>
+ <FileNumber>11</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../STM32_WPAN/App/app_ble.c</PathWithFileName>
+ <FilenameWithoutPath>app_ble.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>3</GroupNumber>
+ <FileNumber>12</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../STM32_WPAN/App/p2p_server_app.c</PathWithFileName>
+ <FilenameWithoutPath>p2p_server_app.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Application/User/STM32_WPAN/Target</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>4</GroupNumber>
+ <FileNumber>13</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../STM32_WPAN/Target/hw_ipcc.c</PathWithFileName>
+ <FilenameWithoutPath>hw_ipcc.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Doc</GroupName>
+ <tvExp>1</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>5</GroupNumber>
+ <FileNumber>14</FileNumber>
+ <FileType>5</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../readme.txt</PathWithFileName>
+ <FilenameWithoutPath>readme.txt</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Drivers/BSP/NUCLEO-WB15CC</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>6</GroupNumber>
+ <FileNumber>15</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/BSP/NUCLEO-WB15CC/nucleo_wb15cc.c</PathWithFileName>
+ <FilenameWithoutPath>nucleo_wb15cc.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Drivers/CMSIS</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>7</GroupNumber>
+ <FileNumber>16</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/system_stm32wbxx.c</PathWithFileName>
+ <FilenameWithoutPath>system_stm32wbxx.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Drivers/STM32WBxx_HAL_Driver</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>17</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>18</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cortex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_cortex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>19</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_dma.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>20</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_dma_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>21</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_exti.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_exti.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>22</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_flash.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>23</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_flash_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>24</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_gpio.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_gpio.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>25</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_hsem.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_hsem.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>26</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_ipcc.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_ipcc.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>27</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_pwr.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>28</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_pwr_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>29</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_rcc.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>30</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_rcc_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>31</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_rtc.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>32</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_rtc_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>33</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_tim.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>34</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_tim_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>35</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_uart.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>36</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_uart_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Middlewares/STM32_WPAN</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>37</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gap_aci.c</PathWithFileName>
+ <FilenameWithoutPath>ble_gap_aci.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>38</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gatt_aci.c</PathWithFileName>
+ <FilenameWithoutPath>ble_gatt_aci.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>39</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hal_aci.c</PathWithFileName>
+ <FilenameWithoutPath>ble_hal_aci.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>40</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hci_le.c</PathWithFileName>
+ <FilenameWithoutPath>ble_hci_le.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>41</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_l2cap_aci.c</PathWithFileName>
+ <FilenameWithoutPath>ble_l2cap_aci.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>42</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/utilities/dbg_trace.c</PathWithFileName>
+ <FilenameWithoutPath>dbg_trace.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>43</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/hci_tl.c</PathWithFileName>
+ <FilenameWithoutPath>hci_tl.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>44</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/hci_tl_if.c</PathWithFileName>
+ <FilenameWithoutPath>hci_tl_if.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>45</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/template/osal.c</PathWithFileName>
+ <FilenameWithoutPath>osal.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>46</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/utilities/otp.c</PathWithFileName>
+ <FilenameWithoutPath>otp.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>47</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/svc/Src/p2p_stm.c</PathWithFileName>
+ <FilenameWithoutPath>p2p_stm.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>48</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci/shci.c</PathWithFileName>
+ <FilenameWithoutPath>shci.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>49</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/shci_tl.c</PathWithFileName>
+ <FilenameWithoutPath>shci_tl.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>50</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/shci_tl_if.c</PathWithFileName>
+ <FilenameWithoutPath>shci_tl_if.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>51</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/utilities/stm_list.c</PathWithFileName>
+ <FilenameWithoutPath>stm_list.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>52</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/utilities/stm_queue.c</PathWithFileName>
+ <FilenameWithoutPath>stm_queue.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>53</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/svc/Src/svc_ctl.c</PathWithFileName>
+ <FilenameWithoutPath>svc_ctl.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>54</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/tl_mbox.c</PathWithFileName>
+ <FilenameWithoutPath>tl_mbox.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Utilities</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>10</GroupNumber>
+ <FileNumber>55</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Utilities/lpm/tiny_lpm/stm32_lpm.c</PathWithFileName>
+ <FilenameWithoutPath>stm32_lpm.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>10</GroupNumber>
+ <FileNumber>56</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Utilities/sequencer/stm32_seq.c</PathWithFileName>
+ <FilenameWithoutPath>stm32_seq.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>::CMSIS</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>1</RteFlg>
+ </Group>
+
+</ProjectOpt>
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/MDK-ARM/BLE_p2pServer_ota.uvprojx b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/MDK-ARM/BLE_p2pServer_ota.uvprojx
new file mode 100644
index 000000000..ca098f3d5
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/MDK-ARM/BLE_p2pServer_ota.uvprojx
@@ -0,0 +1,735 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
+
+ <SchemaVersion>2.1</SchemaVersion>
+
+ <Header>### uVision Project, (C) Keil Software</Header>
+
+ <Targets>
+ <Target>
+ <TargetName>BLE_p2pServer_ota</TargetName>
+ <ToolsetNumber>0x4</ToolsetNumber>
+ <ToolsetName>ARM-ADS</ToolsetName>
+ <pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARMCC</pCCUsed>
+ <uAC6>0</uAC6>
+ <TargetOption>
+ <TargetCommonOption>
+ <Device>STM32WB15CCUx</Device>
+ <Vendor>STMicroelectronics</Vendor>
+ <PackID>Keil.STM32WB1x_DFP.0.0.1</PackID>
+ <PackURL>http://www.keil.com/pack</PackURL>
+ <Cpu>IRAM(0x20000000,0x00003000) IROM(0x08000000,0x00050000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE</Cpu>
+ <FlashUtilSpec></FlashUtilSpec>
+ <StartupFile></StartupFile>
+ <FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32WB1x_320_M4 -FS08000000 -FL050000 -FP0($$Device:STM32WB15CCUx$Drivers\CMSIS\Flash\STM32WB1x_320_M4.FLM))</FlashDriverDll>
+ <DeviceId>0</DeviceId>
+ <RegisterFile>$$Device:STM32WB15CCUx$Drivers\CMSIS\Device\ST\STM32WBxx\Include\stm32wb15xx.h</RegisterFile>
+ <MemoryEnv></MemoryEnv>
+ <Cmp></Cmp>
+ <Asm></Asm>
+ <Linker></Linker>
+ <OHString></OHString>
+ <InfinionOptionDll></InfinionOptionDll>
+ <SLE66CMisc></SLE66CMisc>
+ <SLE66AMisc></SLE66AMisc>
+ <SLE66LinkerMisc></SLE66LinkerMisc>
+ <SFDFile>$$Device:STM32WB15CCUx$Drivers\CMSIS\SVD\STM32WB15_CM4.svd</SFDFile>
+ <bCustSvd>0</bCustSvd>
+ <UseEnv>0</UseEnv>
+ <BinPath></BinPath>
+ <IncludePath></IncludePath>
+ <LibPath></LibPath>
+ <RegisterFilePath></RegisterFilePath>
+ <DBRegisterFilePath></DBRegisterFilePath>
+ <TargetStatus>
+ <Error>0</Error>
+ <ExitCodeStop>0</ExitCodeStop>
+ <ButtonStop>0</ButtonStop>
+ <NotGenerated>0</NotGenerated>
+ <InvalidFlash>1</InvalidFlash>
+ </TargetStatus>
+ <OutputDirectory>BLE_p2pServer_ota\Exe\</OutputDirectory>
+ <OutputName>BLE_p2pServer_ota</OutputName>
+ <CreateExecutable>1</CreateExecutable>
+ <CreateLib>0</CreateLib>
+ <CreateHexFile>0</CreateHexFile>
+ <DebugInformation>1</DebugInformation>
+ <BrowseInformation>1</BrowseInformation>
+ <ListingPath></ListingPath>
+ <HexFormatSelection>1</HexFormatSelection>
+ <Merge32K>0</Merge32K>
+ <CreateBatchFile>0</CreateBatchFile>
+ <BeforeCompile>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name></UserProg1Name>
+ <UserProg2Name></UserProg2Name>
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopU1X>0</nStopU1X>
+ <nStopU2X>0</nStopU2X>
+ </BeforeCompile>
+ <BeforeMake>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name></UserProg1Name>
+ <UserProg2Name></UserProg2Name>
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopB1X>0</nStopB1X>
+ <nStopB2X>0</nStopB2X>
+ </BeforeMake>
+ <AfterMake>
+ <RunUserProg1>1</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name>fromelf #L --bincombined --output=$L@L.bin</UserProg1Name>
+ <UserProg2Name></UserProg2Name>
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopA1X>0</nStopA1X>
+ <nStopA2X>0</nStopA2X>
+ </AfterMake>
+ <SelectedForBatchBuild>1</SelectedForBatchBuild>
+ <SVCSIdString></SVCSIdString>
+ </TargetCommonOption>
+ <CommonProperty>
+ <UseCPPCompiler>0</UseCPPCompiler>
+ <RVCTCodeConst>0</RVCTCodeConst>
+ <RVCTZI>0</RVCTZI>
+ <RVCTOtherData>0</RVCTOtherData>
+ <ModuleSelection>0</ModuleSelection>
+ <IncludeInBuild>1</IncludeInBuild>
+ <AlwaysBuild>0</AlwaysBuild>
+ <GenerateAssemblyFile>0</GenerateAssemblyFile>
+ <AssembleAssemblyFile>0</AssembleAssemblyFile>
+ <PublicsOnly>0</PublicsOnly>
+ <StopOnExitCode>3</StopOnExitCode>
+ <CustomArgument></CustomArgument>
+ <IncludeLibraryModules></IncludeLibraryModules>
+ <ComprImg>0</ComprImg>
+ </CommonProperty>
+ <DllOption>
+ <SimDllName>SARMCM3.DLL</SimDllName>
+ <SimDllArguments> -REMAP -MPU</SimDllArguments>
+ <SimDlgDll>DCM.DLL</SimDlgDll>
+ <SimDlgDllArguments>-pCM4</SimDlgDllArguments>
+ <TargetDllName>SARMCM3.DLL</TargetDllName>
+ <TargetDllArguments> -MPU</TargetDllArguments>
+ <TargetDlgDll>TCM.DLL</TargetDlgDll>
+ <TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
+ </DllOption>
+ <DebugOption>
+ <OPTHX>
+ <HexSelection>1</HexSelection>
+ <HexRangeLowAddress>0</HexRangeLowAddress>
+ <HexRangeHighAddress>0</HexRangeHighAddress>
+ <HexOffset>0</HexOffset>
+ <Oh166RecLen>16</Oh166RecLen>
+ </OPTHX>
+ </DebugOption>
+ <Utilities>
+ <Flash1>
+ <UseTargetDll>1</UseTargetDll>
+ <UseExternalTool>0</UseExternalTool>
+ <RunIndependent>0</RunIndependent>
+ <UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
+ <Capability>1</Capability>
+ <DriverSelection>4096</DriverSelection>
+ </Flash1>
+ <bUseTDR>1</bUseTDR>
+ <Flash2>BIN\UL2CM3.DLL</Flash2>
+ <Flash3>"" ()</Flash3>
+ <Flash4></Flash4>
+ <pFcarmOut></pFcarmOut>
+ <pFcarmGrp></pFcarmGrp>
+ <pFcArmRoot></pFcArmRoot>
+ <FcArmLst>0</FcArmLst>
+ </Utilities>
+ <TargetArmAds>
+ <ArmAdsMisc>
+ <GenerateListings>0</GenerateListings>
+ <asHll>1</asHll>
+ <asAsm>1</asAsm>
+ <asMacX>1</asMacX>
+ <asSyms>1</asSyms>
+ <asFals>1</asFals>
+ <asDbgD>1</asDbgD>
+ <asForm>1</asForm>
+ <ldLst>0</ldLst>
+ <ldmm>1</ldmm>
+ <ldXref>1</ldXref>
+ <BigEnd>0</BigEnd>
+ <AdsALst>1</AdsALst>
+ <AdsACrf>1</AdsACrf>
+ <AdsANop>0</AdsANop>
+ <AdsANot>0</AdsANot>
+ <AdsLLst>1</AdsLLst>
+ <AdsLmap>1</AdsLmap>
+ <AdsLcgr>1</AdsLcgr>
+ <AdsLsym>1</AdsLsym>
+ <AdsLszi>1</AdsLszi>
+ <AdsLtoi>1</AdsLtoi>
+ <AdsLsun>1</AdsLsun>
+ <AdsLven>1</AdsLven>
+ <AdsLsxf>1</AdsLsxf>
+ <RvctClst>0</RvctClst>
+ <GenPPlst>0</GenPPlst>
+ <AdsCpuType>"Cortex-M4"</AdsCpuType>
+ <RvctDeviceName></RvctDeviceName>
+ <mOS>0</mOS>
+ <uocRom>0</uocRom>
+ <uocRam>0</uocRam>
+ <hadIROM>1</hadIROM>
+ <hadIRAM>1</hadIRAM>
+ <hadXRAM>0</hadXRAM>
+ <uocXRam>0</uocXRam>
+ <RvdsVP>2</RvdsVP>
+ <hadIRAM2>0</hadIRAM2>
+ <hadIROM2>0</hadIROM2>
+ <StupSel>8</StupSel>
+ <useUlib>1</useUlib>
+ <EndSel>1</EndSel>
+ <uLtcg>0</uLtcg>
+ <nSecure>0</nSecure>
+ <RoSelD>3</RoSelD>
+ <RwSelD>3</RwSelD>
+ <CodeSel>0</CodeSel>
+ <OptFeed>0</OptFeed>
+ <NoZi1>0</NoZi1>
+ <NoZi2>0</NoZi2>
+ <NoZi3>0</NoZi3>
+ <NoZi4>0</NoZi4>
+ <NoZi5>0</NoZi5>
+ <Ro1Chk>0</Ro1Chk>
+ <Ro2Chk>0</Ro2Chk>
+ <Ro3Chk>0</Ro3Chk>
+ <Ir1Chk>1</Ir1Chk>
+ <Ir2Chk>0</Ir2Chk>
+ <Ra1Chk>0</Ra1Chk>
+ <Ra2Chk>0</Ra2Chk>
+ <Ra3Chk>0</Ra3Chk>
+ <Im1Chk>1</Im1Chk>
+ <Im2Chk>0</Im2Chk>
+ <OnChipMemories>
+ <Ocm1>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm1>
+ <Ocm2>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm2>
+ <Ocm3>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm3>
+ <Ocm4>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm4>
+ <Ocm5>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm5>
+ <Ocm6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm6>
+ <IRAM>
+ <Type>0</Type>
+ <StartAddress>0x20000000</StartAddress>
+ <Size>0x3000</Size>
+ </IRAM>
+ <IROM>
+ <Type>1</Type>
+ <StartAddress>0x8000000</StartAddress>
+ <Size>0x50000</Size>
+ </IROM>
+ <XRAM>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </XRAM>
+ <OCR_RVCT1>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT1>
+ <OCR_RVCT2>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT2>
+ <OCR_RVCT3>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT3>
+ <OCR_RVCT4>
+ <Type>1</Type>
+ <StartAddress>0x8007000</StartAddress>
+ <Size>0x79000</Size>
+ </OCR_RVCT4>
+ <OCR_RVCT5>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT5>
+ <OCR_RVCT6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT6>
+ <OCR_RVCT7>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT7>
+ <OCR_RVCT8>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT8>
+ <OCR_RVCT9>
+ <Type>0</Type>
+ <StartAddress>0x20000000</StartAddress>
+ <Size>0x3000</Size>
+ </OCR_RVCT9>
+ <OCR_RVCT10>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT10>
+ </OnChipMemories>
+ <RvctStartVector></RvctStartVector>
+ </ArmAdsMisc>
+ <Cads>
+ <interw>1</interw>
+ <Optim>4</Optim>
+ <oTime>0</oTime>
+ <SplitLS>0</SplitLS>
+ <OneElfS>1</OneElfS>
+ <Strict>0</Strict>
+ <EnumInt>0</EnumInt>
+ <PlainCh>0</PlainCh>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <wLevel>2</wLevel>
+ <uThumb>0</uThumb>
+ <uSurpInc>0</uSurpInc>
+ <uC99>1</uC99>
+ <uGnu>0</uGnu>
+ <useXO>0</useXO>
+ <v6Lang>5</v6Lang>
+ <v6LangP>3</v6LangP>
+ <vShortEn>0</vShortEn>
+ <vShortWch>0</vShortWch>
+ <v6Lto>0</v6Lto>
+ <v6WtE>0</v6WtE>
+ <v6Rtti>0</v6Rtti>
+ <VariousControls>
+ <MiscControls>--diag_suppress 1296</MiscControls>
+ <Define>USE_STM32WBXX_NUCLEO,USE_HAL_DRIVER,STM32WB15xx</Define>
+ <Undefine></Undefine>
+ <IncludePath>../Core/Inc;../STM32_WPAN/App;../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc;../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc/Legacy;../../../../../../Middlewares/ST/STM32_WPAN;../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread;../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl;../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci;../../../../../../Middlewares/ST/STM32_WPAN/utilities;../../../../../../Utilities/lpm/tiny_lpm;../../../../../../Utilities/sequencer;../../../../../../Middlewares/ST/STM32_WPAN/ble;../../../../../../Middlewares/ST/STM32_WPAN/ble/core/template;../../../../../../Middlewares/ST/STM32_WPAN/ble/core;../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include;../../../../../../Drivers/CMSIS/Include;../../../../../../Drivers/BSP/NUCLEO-WB15CC</IncludePath>
+ </VariousControls>
+ </Cads>
+ <Aads>
+ <interw>1</interw>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <thumb>0</thumb>
+ <SplitLS>0</SplitLS>
+ <SwStkChk>0</SwStkChk>
+ <NoWarn>0</NoWarn>
+ <uSurpInc>0</uSurpInc>
+ <useXO>0</useXO>
+ <uClangAs>0</uClangAs>
+ <VariousControls>
+ <MiscControls></MiscControls>
+ <Define></Define>
+ <Undefine></Undefine>
+ <IncludePath></IncludePath>
+ </VariousControls>
+ </Aads>
+ <LDads>
+ <umfTarg>0</umfTarg>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <noStLib>0</noStLib>
+ <RepFail>1</RepFail>
+ <useFile>0</useFile>
+ <TextAddressRange></TextAddressRange>
+ <DataAddressRange></DataAddressRange>
+ <pXoBase></pXoBase>
+ <ScatterFile>stm32wb15xx_flash_cm4.sct</ScatterFile>
+ <IncludeLibs></IncludeLibs>
+ <IncludeLibsPath></IncludeLibsPath>
+ <Misc>--diag_suppress L6314W
+--diag_suppress 1296
+--diag_suppress 1296-D
+--keep *.o(TAG_OTA_START)
+--keep *.o(TAG_OTA_END)</Misc>
+ <LinkerInputFile></LinkerInputFile>
+ <DisabledWarnings></DisabledWarnings>
+ </LDads>
+ </TargetArmAds>
+ </TargetOption>
+ <Groups>
+ <Group>
+ <GroupName>Application/MDK-ARM</GroupName>
+ <Files>
+ <File>
+ <FileName>startup_stm32wb15xx_cm4.s</FileName>
+ <FileType>2</FileType>
+ <FilePath>startup_stm32wb15xx_cm4.s</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Application/User/Core</GroupName>
+ <Files>
+ <File>
+ <FileName>app_debug.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/app_debug.c</FilePath>
+ </File>
+ <File>
+ <FileName>app_entry.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/app_entry.c</FilePath>
+ </File>
+ <File>
+ <FileName>hw_timerserver.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/hw_timerserver.c</FilePath>
+ </File>
+ <File>
+ <FileName>hw_uart.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/hw_uart.c</FilePath>
+ </File>
+ <File>
+ <FileName>main.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/main.c</FilePath>
+ </File>
+ <File>
+ <FileName>standby_stm32wb15.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/standby_stm32wb15.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32_lpm_if.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/stm32_lpm_if.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_msp.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/stm32wbxx_hal_msp.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_it.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/stm32wbxx_it.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Application/User/STM32_WPAN/App</GroupName>
+ <Files>
+ <File>
+ <FileName>app_ble.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../STM32_WPAN/App/app_ble.c</FilePath>
+ </File>
+ <File>
+ <FileName>p2p_server_app.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../STM32_WPAN/App/p2p_server_app.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Application/User/STM32_WPAN/Target</GroupName>
+ <Files>
+ <File>
+ <FileName>hw_ipcc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../STM32_WPAN/Target/hw_ipcc.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Doc</GroupName>
+ <Files>
+ <File>
+ <FileName>readme.txt</FileName>
+ <FileType>5</FileType>
+ <FilePath>../readme.txt</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers/BSP/NUCLEO-WB15CC</GroupName>
+ <Files>
+ <File>
+ <FileName>nucleo_wb15cc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/BSP/NUCLEO-WB15CC/nucleo_wb15cc.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers/CMSIS</GroupName>
+ <Files>
+ <File>
+ <FileName>system_stm32wbxx.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/system_stm32wbxx.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers/STM32WBxx_HAL_Driver</GroupName>
+ <Files>
+ <File>
+ <FileName>stm32wbxx_hal.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_cortex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cortex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_dma.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_dma_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_exti.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_exti.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_flash.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_flash_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_gpio.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_gpio.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_hsem.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_hsem.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_ipcc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_ipcc.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_pwr.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_pwr_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_rcc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_rcc_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_rtc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_rtc_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_tim.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_tim_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_uart.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_uart_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart_ex.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Middlewares/STM32_WPAN</GroupName>
+ <Files>
+ <File>
+ <FileName>ble_gap_aci.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gap_aci.c</FilePath>
+ </File>
+ <File>
+ <FileName>ble_gatt_aci.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gatt_aci.c</FilePath>
+ </File>
+ <File>
+ <FileName>ble_hal_aci.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hal_aci.c</FilePath>
+ </File>
+ <File>
+ <FileName>ble_hci_le.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hci_le.c</FilePath>
+ </File>
+ <File>
+ <FileName>ble_l2cap_aci.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_l2cap_aci.c</FilePath>
+ </File>
+ <File>
+ <FileName>dbg_trace.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/utilities/dbg_trace.c</FilePath>
+ </File>
+ <File>
+ <FileName>hci_tl.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/hci_tl.c</FilePath>
+ </File>
+ <File>
+ <FileName>hci_tl_if.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/hci_tl_if.c</FilePath>
+ </File>
+ <File>
+ <FileName>osal.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/template/osal.c</FilePath>
+ </File>
+ <File>
+ <FileName>otp.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/utilities/otp.c</FilePath>
+ </File>
+ <File>
+ <FileName>p2p_stm.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/ble/svc/Src/p2p_stm.c</FilePath>
+ </File>
+ <File>
+ <FileName>shci.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci/shci.c</FilePath>
+ </File>
+ <File>
+ <FileName>shci_tl.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/shci_tl.c</FilePath>
+ </File>
+ <File>
+ <FileName>shci_tl_if.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/shci_tl_if.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm_list.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/utilities/stm_list.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm_queue.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/utilities/stm_queue.c</FilePath>
+ </File>
+ <File>
+ <FileName>svc_ctl.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/ble/svc/Src/svc_ctl.c</FilePath>
+ </File>
+ <File>
+ <FileName>tl_mbox.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/tl_mbox.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Utilities</GroupName>
+ <Files>
+ <File>
+ <FileName>stm32_lpm.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Utilities/lpm/tiny_lpm/stm32_lpm.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32_seq.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Utilities/sequencer/stm32_seq.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>::CMSIS</GroupName>
+ </Group>
+ </Groups>
+ </Target>
+ </Targets>
+
+ <RTE>
+ <apis/>
+ <components>
+ <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.4.0" condition="ARMv6_7_8-M Device">
+ <package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.7.0"/>
+ <targetInfos>
+ <targetInfo name="BLE_p2pServer_ota"/>
+ </targetInfos>
+ </component>
+ </components>
+ <files/>
+ </RTE>
+
+</Project>
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/MDK-ARM/startup_stm32wb15xx_cm4.s b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/MDK-ARM/startup_stm32wb15xx_cm4.s
new file mode 100644
index 000000000..f7cdf820d
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/MDK-ARM/startup_stm32wb15xx_cm4.s
@@ -0,0 +1,336 @@
+;******************************************************************************
+;* File Name : startup_stm32wb15xx_cm4.s
+;* Author : MCD Application Team
+;* Description : STM32WB15xx devices vector table for MDK-ARM toolchain.
+;* This module performs:
+;* - Set the initial SP
+;* - Set the initial PC == Reset_Handler
+;* - Set the vector table entries with the exceptions ISR address
+;* - Branches to __main in the C library (which eventually
+;* calls main()).
+;* After Reset the CortexM4 processor is in Thread mode,
+;* priority is Privileged, and the Stack is set to Main.
+;* <<< Use Configuration Wizard in Context Menu >>>
+;******************************************************************************
+;* @attention
+;*
+;* Copyright (c) 2019 STMicroelectronics. All rights reserved.
+;*
+;* This software component is licensed by ST under Apache License, Version 2.0,
+;* the "License"; You may not use this file except in compliance with the
+;* License. You may obtain a copy of the License at:
+;* opensource.org/licenses/Apache-2.0
+;*
+;******************************************************************************
+
+; Amount of memory (in bytes) allocated for Stack
+; Tailor this value to your application needs
+; <h> Stack Configuration
+; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; </h>
+
+Stack_Size EQU 0x1000
+
+ AREA STACK, NOINIT, READWRITE, ALIGN=3
+Stack_Mem SPACE Stack_Size
+__initial_sp
+
+
+; <h> Heap Configuration
+; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; </h>
+
+Heap_Size EQU 0x400
+
+ AREA HEAP, NOINIT, READWRITE, ALIGN=3
+__heap_base
+Heap_Mem SPACE Heap_Size
+__heap_limit
+
+ PRESERVE8
+ THUMB
+
+
+; Vector Table Mapped to Address 0 at Reset
+ AREA RESET, DATA, READONLY
+ EXPORT __Vectors
+ EXPORT __Vectors_End
+ EXPORT __Vectors_Size
+
+__Vectors DCD __initial_sp ; Top of Stack
+ 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 0 ; Reserved
+ 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_PVM_IRQHandler ; PVD and PVM detector
+ DCD TAMP_STAMP_LSECSS_IRQHandler ; RTC Tamper and TimeStamp Interrupts and LSECSS Interrupts
+ DCD RTC_WKUP_IRQHandler ; RTC Wakeup Interrupt
+ DCD FLASH_IRQHandler ; FLASH global Interrupt
+ DCD RCC_IRQHandler ; RCC Interrupt
+ DCD EXTI0_IRQHandler ; EXTI Line 0 Interrupt
+ DCD EXTI1_IRQHandler ; EXTI Line 1 Interrupt
+ DCD EXTI2_IRQHandler ; EXTI Line 2 Interrupt
+ DCD EXTI3_IRQHandler ; EXTI Line 3 Interrup
+ DCD EXTI4_IRQHandler ; EXTI Line 4 Interrupt
+ DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 Interrupt
+ DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 Interrupt
+ DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 Interrupt
+ DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 Interrupt
+ DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 Interrupt
+ DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 Interrupt
+ DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 Interrupt
+ DCD ADC1_IRQHandler ; ADC1 Interrupt
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD C2SEV_PWR_C2H_IRQHandler ; CPU M0+ SEV Interrupt
+ DCD COMP_IRQHandler ; COMP1 Interrupts
+ DCD EXTI9_5_IRQHandler ; EXTI Lines [9:5] Interrupt
+ DCD TIM1_BRK_IRQHandler ; TIM1 Break Interrupt
+ DCD TIM1_UP_IRQHandler ; TIM1 Update Interrupt
+ DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Communication Interrupts
+ DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare Interrupt
+ DCD TIM2_IRQHandler ; TIM2 Global Interrupt
+ DCD PKA_IRQHandler ; PKA Interrupt
+ DCD I2C1_EV_IRQHandler ; I2C1 Event Interrupt
+ DCD I2C1_ER_IRQHandler ; I2C1 Error Interrupt
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD SPI1_IRQHandler ; SPI1 Interrupt
+ DCD 0 ; Reserved
+ DCD USART1_IRQHandler ; USART1 Interrupt
+ DCD LPUART1_IRQHandler ; LPUART1 Interrupt
+ DCD 0 ; Reserved
+ DCD TSC_IRQHandler ; TSC Interrupt
+ DCD EXTI15_10_IRQHandler ; EXTI Lines1[15:10 ]Interrupts
+ DCD RTC_Alarm_IRQHandler ; RTC Alarms (A and B) Interrupt
+ DCD 0 ; Reserved
+ DCD PWR_SOTF_BLEACT_RFPHASE_IRQHandler ; WKUP Interrupt from PWR
+ DCD IPCC_C1_RX_IRQHandler ; IPCC CPU1 RX occupied interrupt
+ DCD IPCC_C1_TX_IRQHandler ; IPCC CPU1 RX free interrupt
+ DCD HSEM_IRQHandler ; HSEM0 Interrupt
+ DCD LPTIM1_IRQHandler ; LPTIM1 Interrupt
+ DCD LPTIM2_IRQHandler ; LPTIM2 Interrupt
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD AES2_IRQHandler ; AES2 Interrupt
+ DCD RNG_IRQHandler ; RNG1 Interrupt
+ DCD FPU_IRQHandler ; FPU Interrupt
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD DMAMUX1_OVR_IRQHandler ; DMAMUX overrun Interrupt
+
+__Vectors_End
+
+__Vectors_Size EQU __Vectors_End - __Vectors
+
+ AREA |.text|, CODE, READONLY
+
+; Reset handler
+Reset_Handler PROC
+ EXPORT Reset_Handler [WEAK]
+ IMPORT SystemInit
+ IMPORT __main
+
+ LDR R0, =SystemInit
+ BLX R0
+ LDR R0, =__main
+ BX R0
+ ENDP
+
+; Dummy Exception Handlers (infinite loops which can be modified)
+
+NMI_Handler PROC
+ EXPORT NMI_Handler [WEAK]
+ B .
+ ENDP
+HardFault_Handler\
+ PROC
+ EXPORT HardFault_Handler [WEAK]
+ B .
+ ENDP
+MemManage_Handler\
+ PROC
+ EXPORT MemManage_Handler [WEAK]
+ B .
+ ENDP
+BusFault_Handler\
+ PROC
+ EXPORT BusFault_Handler [WEAK]
+ B .
+ ENDP
+UsageFault_Handler\
+ PROC
+ EXPORT UsageFault_Handler [WEAK]
+ B .
+ ENDP
+SVC_Handler PROC
+ EXPORT SVC_Handler [WEAK]
+ B .
+ ENDP
+DebugMon_Handler\
+ PROC
+ EXPORT DebugMon_Handler [WEAK]
+ B .
+ ENDP
+PendSV_Handler PROC
+ EXPORT PendSV_Handler [WEAK]
+ B .
+ ENDP
+SysTick_Handler PROC
+ EXPORT SysTick_Handler [WEAK]
+ B .
+ ENDP
+
+Default_Handler PROC
+
+ EXPORT WWDG_IRQHandler [WEAK]
+ EXPORT PVD_PVM_IRQHandler [WEAK]
+ EXPORT TAMP_STAMP_LSECSS_IRQHandler [WEAK]
+ EXPORT RTC_WKUP_IRQHandler [WEAK]
+ EXPORT FLASH_IRQHandler [WEAK]
+ EXPORT RCC_IRQHandler [WEAK]
+ EXPORT EXTI0_IRQHandler [WEAK]
+ EXPORT EXTI1_IRQHandler [WEAK]
+ EXPORT EXTI2_IRQHandler [WEAK]
+ EXPORT EXTI3_IRQHandler [WEAK]
+ EXPORT EXTI4_IRQHandler [WEAK]
+ EXPORT DMA1_Channel1_IRQHandler [WEAK]
+ EXPORT DMA1_Channel2_IRQHandler [WEAK]
+ EXPORT DMA1_Channel3_IRQHandler [WEAK]
+ EXPORT DMA1_Channel4_IRQHandler [WEAK]
+ EXPORT DMA1_Channel5_IRQHandler [WEAK]
+ EXPORT DMA1_Channel6_IRQHandler [WEAK]
+ EXPORT DMA1_Channel7_IRQHandler [WEAK]
+ EXPORT ADC1_IRQHandler [WEAK]
+ EXPORT C2SEV_PWR_C2H_IRQHandler [WEAK]
+ EXPORT COMP_IRQHandler [WEAK]
+ EXPORT EXTI9_5_IRQHandler [WEAK]
+ EXPORT TIM1_BRK_IRQHandler [WEAK]
+ EXPORT TIM1_UP_IRQHandler [WEAK]
+ EXPORT TIM1_TRG_COM_IRQHandler [WEAK]
+ EXPORT TIM1_CC_IRQHandler [WEAK]
+ EXPORT TIM2_IRQHandler [WEAK]
+ EXPORT PKA_IRQHandler [WEAK]
+ EXPORT I2C1_EV_IRQHandler [WEAK]
+ EXPORT I2C1_ER_IRQHandler [WEAK]
+ EXPORT SPI1_IRQHandler [WEAK]
+ EXPORT USART1_IRQHandler [WEAK]
+ EXPORT LPUART1_IRQHandler [WEAK]
+ EXPORT TSC_IRQHandler [WEAK]
+ EXPORT EXTI15_10_IRQHandler [WEAK]
+ EXPORT RTC_Alarm_IRQHandler [WEAK]
+ EXPORT PWR_SOTF_BLEACT_RFPHASE_IRQHandler [WEAK]
+ EXPORT IPCC_C1_RX_IRQHandler [WEAK]
+ EXPORT IPCC_C1_TX_IRQHandler [WEAK]
+ EXPORT HSEM_IRQHandler [WEAK]
+ EXPORT LPTIM1_IRQHandler [WEAK]
+ EXPORT LPTIM2_IRQHandler [WEAK]
+ EXPORT AES1_IRQHandler [WEAK]
+ EXPORT AES2_IRQHandler [WEAK]
+ EXPORT RNG_IRQHandler [WEAK]
+ EXPORT FPU_IRQHandler [WEAK]
+ EXPORT DMAMUX1_OVR_IRQHandler [WEAK]
+
+WWDG_IRQHandler
+PVD_PVM_IRQHandler
+TAMP_STAMP_LSECSS_IRQHandler
+RTC_WKUP_IRQHandler
+FLASH_IRQHandler
+RCC_IRQHandler
+EXTI0_IRQHandler
+EXTI1_IRQHandler
+EXTI2_IRQHandler
+EXTI3_IRQHandler
+EXTI4_IRQHandler
+DMA1_Channel1_IRQHandler
+DMA1_Channel2_IRQHandler
+DMA1_Channel3_IRQHandler
+DMA1_Channel4_IRQHandler
+DMA1_Channel5_IRQHandler
+DMA1_Channel6_IRQHandler
+DMA1_Channel7_IRQHandler
+ADC1_IRQHandler
+C2SEV_PWR_C2H_IRQHandler
+COMP_IRQHandler
+EXTI9_5_IRQHandler
+TIM1_BRK_IRQHandler
+TIM1_UP_IRQHandler
+TIM1_TRG_COM_IRQHandler
+TIM1_CC_IRQHandler
+TIM2_IRQHandler
+PKA_IRQHandler
+I2C1_EV_IRQHandler
+I2C1_ER_IRQHandler
+SPI1_IRQHandler
+USART1_IRQHandler
+LPUART1_IRQHandler
+TSC_IRQHandler
+EXTI15_10_IRQHandler
+RTC_Alarm_IRQHandler
+PWR_SOTF_BLEACT_RFPHASE_IRQHandler
+IPCC_C1_RX_IRQHandler
+IPCC_C1_TX_IRQHandler
+HSEM_IRQHandler
+LPTIM1_IRQHandler
+LPTIM2_IRQHandler
+AES1_IRQHandler
+AES2_IRQHandler
+RNG_IRQHandler
+FPU_IRQHandler
+DMAMUX1_OVR_IRQHandler
+
+ B .
+
+ ENDP
+
+ ALIGN
+
+;*******************************************************************************
+; User Stack and Heap initialization
+;*******************************************************************************
+ IF :DEF:__MICROLIB
+
+ EXPORT __initial_sp
+ EXPORT __heap_base
+ EXPORT __heap_limit
+
+ ELSE
+
+ IMPORT __use_two_region_memory
+ EXPORT __user_initial_stackheap
+
+__user_initial_stackheap
+
+ LDR R0, = Heap_Mem
+ LDR R1, =(Stack_Mem + Stack_Size)
+ LDR R2, = (Heap_Mem + Heap_Size)
+ LDR R3, = Stack_Mem
+ BX LR
+
+ ALIGN
+
+ ENDIF
+
+ END
+
+;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE*****
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/MDK-ARM/stm32wb15xx_flash_cm4.sct b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/MDK-ARM/stm32wb15xx_flash_cm4.sct
new file mode 100644
index 000000000..2e70c58d4
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/MDK-ARM/stm32wb15xx_flash_cm4.sct
@@ -0,0 +1,34 @@
+; *************************************************************
+; *** Scatter-Loading Description File generated by uVision ***
+; *************************************************************
+
+LR_IROM1 0x08007000 0x140{ ; load region size_region
+ ER_IROM1_LOW 0x08007000 0x140 { ; load address = execution address
+ *.o(RESET, +First)
+ }
+ }
+
+LR_IROM2 0x08007140 0x4{ ; load region size_region
+ ER_IROM2_LOW 0x08007140 0x4 {
+ *.o (TAG_OTA_START)
+ }
+ }
+
+LR_IROM3 0x08007144 0x146BC{
+ ER_IROM1_HIGH 0x08007144 0x146BC { ; load address = execution address
+ *(InRoot$$Sections)
+ .ANY (+RO)
+ *.o (TAG_OTA_END)
+ }
+
+ RW_IRAM1 0x20000004 0x2FFC { ; RW data
+ .ANY (+RW +ZI)
+ }
+
+ RW_RAM2aRet_SHARED 0x20030000 0x2800 { ; RW data
+ *(MAPPING_TABLE)
+ *(MB_MEM1)
+ *(MB_MEM2)
+ }
+ }
+ \ No newline at end of file
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/STM32_WPAN/App/app_ble.c b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/STM32_WPAN/App/app_ble.c
index 4c8bca693..8f0593fef 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/STM32_WPAN/App/app_ble.c
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_p2pServer_ota/STM32_WPAN/App/app_ble.c
@@ -617,13 +617,7 @@ SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt )
handleNotification.ConnectionHandle = BleApplicationContext.BleApplicationContext_legacy.connectionHandle;
P2PS_APP_Notification(&handleNotification);
/* USER CODE BEGIN HCI_EVT_LE_CONN_COMPLETE */
-/*
-* SPECIFIC to P2P Server APP
-*/
- handleNotification.P2P_Evt_Opcode = PEER_CONN_HANDLE_EVT;
- handleNotification.ConnectionHandle = BleApplicationContext.BleApplicationContext_legacy.connectionHandle;
- P2PS_APP_Notification(&handleNotification);
-
+
/* USER CODE END HCI_EVT_LE_CONN_COMPLETE */
}
break; /* HCI_LE_CONNECTION_COMPLETE_SUBEVT_CODE */
diff --git a/Projects/NUCLEO-WB15CC/Release_Notes.html b/Projects/NUCLEO-WB15CC/Release_Notes.html
index be3f3e80a..e8bef7281 100644
--- a/Projects/NUCLEO-WB15CC/Release_Notes.html
+++ b/Projects/NUCLEO-WB15CC/Release_Notes.html
@@ -46,9 +46,27 @@
<div class="col-sm-12 col-lg-8">
<h1 id="update-history">Update History</h1>
<div class="collapse">
-<input type="checkbox" id="collapse-section1" checked aria-hidden="true"> <label for="collapse-section1" aria-hidden="true">V1.0.0 / 12-February-2021</label>
+<input type="checkbox" id="collapse-section2" checked aria-hidden="true"> <label for="collapse-section2" aria-hidden="true">V1.11.1 / 02-April-2021</label>
<div>
<h2 id="main-changes">Main Changes</h2>
+<h3 id="maintenance">Maintenance</h3>
+<ul>
+<li>Update BLE applications:
+<ul>
+<li>Default CFG_BLE_MAX_CONN_EVENT_LENGTH value updated for all BLE examples<br />
+</li>
+<li>BLE_DataThroughput displayed float values correction with Cube IDE project</li>
+<li>BLE_p2pServer and BLE_p2pServer_ota code duplication removed</li>
+</ul></li>
+</ul>
+<p><br />
+</p>
+</div>
+</div>
+<div class="collapse">
+<input type="checkbox" id="collapse-section1" aria-hidden="true"> <label for="collapse-section1" aria-hidden="true">V1.11.0 / 12-February-2021</label>
+<div>
+<h2 id="main-changes-1">Main Changes</h2>
<h3 id="first-release">First release</h3>
<p>First official release.</p>
<ul>
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Beacon/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Beacon/Core/Inc/app_conf.h
index 4fe0809ea..926a6ffd5 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Beacon/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Beacon/Core/Inc/app_conf.h
@@ -238,7 +238,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_BloodPressure/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_BloodPressure/Core/Inc/app_conf.h
index 9ab0a52d8..14157f7ce 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_BloodPressure/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_BloodPressure/Core/Inc/app_conf.h
@@ -235,7 +235,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_CableReplacement/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_CableReplacement/Core/Inc/app_conf.h
index 8be62845c..1c913f8c0 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_CableReplacement/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_CableReplacement/Core/Inc/app_conf.h
@@ -242,7 +242,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Custom/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Custom/Core/Inc/app_conf.h
index ff67c3a46..e1795a416 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Custom/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Custom/Core/Inc/app_conf.h
@@ -260,7 +260,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_DataThroughput/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_DataThroughput/Core/Inc/app_conf.h
index 1b2c2ac40..c7c66ffde 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_DataThroughput/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_DataThroughput/Core/Inc/app_conf.h
@@ -305,7 +305,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_DataThroughput/STM32CubeIDE/.cproject b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_DataThroughput/STM32CubeIDE/.cproject
index 75f0a275d..87f97486d 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_DataThroughput/STM32CubeIDE/.cproject
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_DataThroughput/STM32CubeIDE/.cproject
@@ -27,7 +27,7 @@
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.1396530578" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" value="genericBoard" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.1824731499" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.3 || Debug || true || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.base.gnu-tools-for-stm32 || STM32WB55RGVx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../../../../../../../Middlewares/ST/STM32_WPAN/ble/core/template | ../../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto | ../../../../../../../Middlewares/ST/STM32_WPAN | ../../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include | ../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc | ../../../../../../../Drivers/BSP/P-NUCLEO-WB55.Nucleo | ../../../../../../../Middlewares/ST/STM32_WPAN/ble/core | ../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl | ../../../../../../../Middlewares/ST/STM32_WPAN/utilities | ../../../../../../../Utilities/lpm/tiny_lpm | ../../../../../../../Utilities/sequencer | ../../../../../../../Drivers/CMSIS/Include | ../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci | ../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread | ../../../../../../../Middlewares/ST/STM32_WPAN/ble | ../../Core/Inc | ../../STM32_WPAN/app || || || USE_HAL_DRIVER | USE_STM32WBXX_NUCLEO | CORE_CM4 | STM32WB55xx || || || || || ${workspace_loc:/${ProjName}/STM32WB55RGVX_FLASH.ld} || true || NonSecure || || || " valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.converthex.1295284897" name="Convert to Intel Hex file (-O ihex)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.converthex" value="true" valueType="boolean"/>
- <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertbinary.1130403254" name="Convert to binary file (-O binary)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertbinary" value="false" valueType="boolean"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertbinary.1130403254" name="Convert to binary file (-O binary)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertbinary" value="false" valueType="boolean"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat.364443751" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat" value="true" valueType="boolean"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.1475653623" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
<builder buildPath="${workspace_loc:/BLE_DataThroughput}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.160515416" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.2009148975" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
@@ -121,6 +121,7 @@
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.134497775" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.3 || Release || false || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.base.gnu-tools-for-stm32 || STM32WB55RGVx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../../../../../../../Middlewares/ST/STM32_WPAN/ble/core/template | ../../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto | ../../../../../../../Middlewares/ST/STM32_WPAN | ../../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include | ../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc | ../../../../../../../Drivers/BSP/P-NUCLEO-WB55.Nucleo | ../../../../../../../Middlewares/ST/STM32_WPAN/ble/core | ../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl | ../../../../../../../Middlewares/ST/STM32_WPAN/utilities | ../../../../../../../Utilities/lpm/tiny_lpm | ../../../../../../../Utilities/sequencer | ../../../../../../../Drivers/CMSIS/Include | ../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci | ../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread | ../../../../../../../Middlewares/ST/STM32_WPAN/ble | ../../Core/Inc | ../../STM32_WPAN/app || || || USE_HAL_DRIVER | USE_STM32WBXX_NUCLEO | CORE_CM4 | STM32WB55xx || || || || || ${workspace_loc:/${ProjName}/STM32WB55RGVX_FLASH.ld} || true || NonSecure || Most || || " valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.converthex.563531181" name="Convert to Intel Hex file (-O ihex)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.converthex" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertbinary.1277122458" name="Convert to binary file (-O binary)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertbinary" useByScannerDiscovery="false" value="false" valueType="boolean"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat.1394051469" name="Use float with printf from newlib-nano (-u _printf_float)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.1396281212" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
<builder buildPath="${workspace_loc:/BLE_DataThroughput}/Release" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.655463198" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.12731543" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HealthThermometer/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HealthThermometer/Core/Inc/app_conf.h
index 4b1987b0d..14bbe6bd2 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HealthThermometer/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HealthThermometer/Core/Inc/app_conf.h
@@ -235,7 +235,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRate/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRate/Core/Inc/app_conf.h
index faccba286..2fbeea772 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRate/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRate/Core/Inc/app_conf.h
@@ -240,7 +240,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRateFreeRTOS/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRateFreeRTOS/Core/Inc/app_conf.h
index b271d9227..42cacdbc2 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRateFreeRTOS/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRateFreeRTOS/Core/Inc/app_conf.h
@@ -240,7 +240,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRateFreeRTOS_ANCS/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRateFreeRTOS_ANCS/Core/Inc/app_conf.h
index 27353aed1..8f09b2586 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRateFreeRTOS_ANCS/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRateFreeRTOS_ANCS/Core/Inc/app_conf.h
@@ -252,7 +252,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRate_ANCS/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRate_ANCS/Core/Inc/app_conf.h
index 8d655cb99..3da51ece5 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRate_ANCS/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRate_ANCS/Core/Inc/app_conf.h
@@ -252,7 +252,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRate_ota/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRate_ota/Core/Inc/app_conf.h
index fff34cc9d..91d355609 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRate_ota/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRate_ota/Core/Inc/app_conf.h
@@ -235,7 +235,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Hid/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Hid/Core/Inc/app_conf.h
index d4df8a823..0be1bf56c 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Hid/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Hid/Core/Inc/app_conf.h
@@ -235,7 +235,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingLPN/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingLPN/Core/Inc/app_conf.h
index 485f1f0b2..ae7d61ab5 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingLPN/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingLPN/Core/Inc/app_conf.h
@@ -249,7 +249,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingPRFNode/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingPRFNode/Core/Inc/app_conf.h
index 9afa276e8..0f02d8147 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingPRFNode/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingPRFNode/Core/Inc/app_conf.h
@@ -249,7 +249,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingProvisioner/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingProvisioner/Core/Inc/app_conf.h
index 9afa276e8..0f02d8147 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingProvisioner/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingProvisioner/Core/Inc/app_conf.h
@@ -249,7 +249,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingProvisioner/STM32_WPAN/app/appli_nvm.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingProvisioner/STM32_WPAN/app/appli_nvm.c
index 10abb9275..f02ffe123 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingProvisioner/STM32_WPAN/app/appli_nvm.c
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingProvisioner/STM32_WPAN/app/appli_nvm.c
@@ -846,13 +846,15 @@ MOBLE_RESULT AppliPrvnNvm_SaveData(uint8_t* devkey,
MOBLE_RESULT result = MOBLE_RESULT_SUCCESS; /* if save model state not defined, return MOBLE_RESULT_FAIL */
uint8_t *pNodeInfo;
MOBLEUINT16 sizeTosave=0;
+ uint16_t numOfElements = 0;
pNodeInfo = PrvnNvm_Reqs.prvnData;
/* Copy the Address and Number of Elements */
memcpy(pNodeInfo, &address, 2);
pNodeInfo += 2;
- memcpy(pNodeInfo, &numElements, 2);
+ numOfElements = numElements;
+ memcpy(pNodeInfo, &numOfElements, 2);
pNodeInfo += 2;
sizeTosave += 4;
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MultiAppAt/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MultiAppAt/Core/Inc/app_conf.h
index dd341fc23..6be161a0a 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MultiAppAt/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MultiAppAt/Core/Inc/app_conf.h
@@ -313,7 +313,7 @@ typedef enum {
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Inc/app_conf.h
index 5ebb97cd6..c362c2538 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Inc/app_conf.h
@@ -232,7 +232,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Inc/flash_driver.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Inc/flash_driver.h
new file mode 100644
index 000000000..ad8a207e6
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Inc/flash_driver.h
@@ -0,0 +1,179 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * @file flash_driver.h
+ * @author MCD Application Team
+ * @brief Dual core Flash driver interface
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef FLASH_DRIVER_H
+#define FLASH_DRIVER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /* Includes ------------------------------------------------------------------*/
+
+/* Private includes ----------------------------------------------------------*/
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+/* Exported types ------------------------------------------------------------*/
+typedef enum
+{
+ SINGLE_FLASH_OPERATION_DONE,
+ SINGLE_FLASH_OPERATION_NOT_EXECUTED,
+}SingleFlashOperationStatus_t;
+
+typedef enum
+{
+ WAITED_SEM_BUSY,
+ WAITED_SEM_FREE,
+}WaitedSemStatus_t;
+
+typedef enum
+{
+ WAIT_FOR_SEM_BLOCK_FLASH_REQ_BY_CPU1,
+ WAIT_FOR_SEM_BLOCK_FLASH_REQ_BY_CPU2,
+}WaitedSemId_t;
+
+/* Exported functions ------------------------------------------------------- */
+
+ /**
+ * @brief Implements the Dual core algorithm to erase multiple sectors in flash with CPU1
+ * It calls for each sector to be erased the API FD_EraseSingleSector()
+ *
+ * @param FirstSector: The first sector to be erased
+ * This parameter must be a value between 0 and (SFSA - 1)
+ * @param NbrOfSectors: The number of sectors to erase
+ * This parameter must be a value between 1 and (SFSA - FirstSector)
+ * @retval Number of sectors not erased:
+ * Depending on the implementation of FD_WaitForSemAvailable(),
+ * it may still have some sectors not erased when the timing protection has been
+ * enabled by either CPU1 or CPU2. When the value returned is not 0, the application
+ * should wait until both timing protection before retrying to erase the last missing sectors.
+ *
+ * In addition, When the returned value is not 0:
+ * - The Sem2 is NOT released
+ * - The FLASH is NOT locked
+ * - SHCI_C2_FLASH_EraseActivity(ERASE_ACTIVITY_OFF) is NOT called
+ * It is expected that the user will call one more time this function to finish the process
+ */
+uint32_t FD_EraseSectors(uint32_t FirstSector, uint32_t NbrOfSectors);
+
+ /**
+ * @brief Implements the Dual core algorithm to write multiple 64bits data in flash with CPU1
+ * The user shall first make sure the location to be written has been first erase.
+ * Otherwise, the API will loop for ever as it will be not able to write in flash
+ * The only value that can be written even though the destination is not erased is 0.
+ * It calls for each 64bits to be written the API FD_WriteSingleData()
+ *
+ * @param DestAddress: Address of the flash to write the first data. It shall be 64bits aligned
+ * @param pSrcBuffer: Address of the buffer holding the 64bits data to be written in flash
+ * @param NbrOfData: Number of 64bits data to be written
+ * @retval Number of 64bits data not written:
+ * Depending on the implementation of FD_WaitForSemAvailable(),
+ * it may still have 64bits data not written when the timing protection has been
+ * enabled by either CPU1 or CPU2. When the value returned is not 0, the application
+ * should wait until both timing protection before retrying to write the last missing 64bits data.
+ *
+ * In addition, When the returned value is not 0:
+ * - The Sem2 is NOT released
+ * - The FLASH is NOT locked
+ * It is expected that the user will call one more time this function to finish the process
+ */
+ uint32_t FD_WriteData(uint32_t DestAddress, uint64_t * pSrcBuffer, uint32_t NbrOfData);
+
+ /**
+ * @brief Implements the Dual core algorithm to erase one sector in flash with CPU1
+ *
+ * It expects the following point before calling this API:
+ * - The Sem2 is taken
+ * - The FLASH is unlocked
+ * - SHCI_C2_FLASH_EraseActivity(ERASE_ACTIVITY_ON) has been called
+ * It expects the following point to be done when no more sectors need to be erased
+ * - The Sem2 is released
+ * - The FLASH is locked
+ * - SHCI_C2_FLASH_EraseActivity(ERASE_ACTIVITY_OFF) is called
+ *
+ * The two point above are implemented in FD_EraseSectors()
+ * This API needs to be used instead of FD_EraseSectors() in case a provided library is taking
+ * care of these two points and request only a single operation.
+ *
+ * @param FirstSector: The sector to be erased
+ * This parameter must be a value between 0 and (SFSA - 1)
+ * @retval: SINGLE_FLASH_OPERATION_DONE -> The data has been written
+ * SINGLE_FLASH_OPERATION_NOT_EXECUTED -> The data has not been written due to timing protection
+ * from either CPU1 or CPU2. On a failure status, the user should check
+ * both timing protection before retrying.
+ */
+ SingleFlashOperationStatus_t FD_EraseSingleSector(uint32_t SectorNumber);
+
+ /**
+ * @brief Implements the Dual core algorithm to write one 64bits data in flash with CPU1
+ * The user shall first make sure the location to be written has been first erase.
+ * Otherwise, the API will loop for ever as it will be not able to write in flash
+ * The only value that can be written even though the destination is not erased is 0.
+ *
+ * It expects the following point before calling this API:
+ * - The Sem2 is taken
+ * - The FLASH is unlocked
+ * It expects the following point to be done when no more sectors need to be erased
+ * - The Sem2 is released
+ * - The FLASH is locked
+ *
+ * The two point above are implemented in FD_WriteData()
+ * This API needs to be used instead of FD_WriteData() in case a provided library is taking
+ * care of these two points and request only a single operation.
+ *
+ * @param DestAddress: Address of the flash to write the data. It shall be 64bits aligned
+ * @param Data: 64bits Data to be written
+ * @retval: SINGLE_FLASH_OPERATION_DONE -> The data has been written
+ * SINGLE_FLASH_OPERATION_NOT_EXECUTED -> The data has not been written due to timing protection
+ * from either CPU1 or CPU2. On a failure status, the user should check
+ * both timing protection before retrying.
+ */
+ SingleFlashOperationStatus_t FD_WriteSingleData(uint32_t DestAddress, uint64_t Data);
+
+ /**
+ * By default, this function is implemented weakly in flash_driver.c to return WAITED_SEM_BUSY.
+ * When the semaphore is busy, this will result in either FD_WriteSingleData() or FD_EraseSingleSector()
+ * to loop until the semaphore is free.
+ *
+ * This function may be implemented so that when using either an OS or the UTIL_SEQ_WaitEvt() API from the sequencer,
+ * it could possible to run other tasks or enter idle mode until the waited semaphore is free.
+ * This function shall not take the waited semaphore but just return when it is free.
+ *
+ * @param WaitedSemId: The semaphore ID this function should not return until it is free
+ * @retval: WAITED_SEM_BUSY -> The function returned before waiting for the semaphore to be free. This will exit the loop
+ * from either FD_EraseSingleSector() or FD_WriteSingleData() and the number of actions left to
+ * be processed are reported to the user
+ * WAITED_SEM_FREE -> The semaphore has been checked as free. Both FD_EraseSingleSector() and FD_WriteSingleData()
+ * try again to process one more time the flash.
+ */
+ WaitedSemStatus_t FD_WaitForSemAvailable(WaitedSemId_t WaitedSemId);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*FLASH_DRIVER_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Src/app_entry.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Src/app_entry.c
index b3fdb2258..e85ce7d50 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Src/app_entry.c
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Src/app_entry.c
@@ -61,6 +61,9 @@ static SHCI_TL_UserEventFlowStatus_t APPE_SysevtReadyProcessing( SHCI_C2_Ready_E
/* Functions Definition ------------------------------------------------------*/
void APPE_Init( void )
{
+ /* Select which mechanism is used by CPU2 to protect its timing versus flash operation */
+ SHCI_C2_SetFlashActivityControl(FLASH_ACTIVITY_CONTROL_SEM7);
+
SystemPower_Config(); /**< Configure the system Power Mode */
HW_TS_Init(hw_ts_InitMode_Full, &hrtc); /**< Initialize the TimerServer */
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Src/flash_driver.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Src/flash_driver.c
new file mode 100644
index 000000000..dcd415b18
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Src/flash_driver.c
@@ -0,0 +1,322 @@
+/**
+ ******************************************************************************
+ * File Name : flash_driver.c
+ * Description : Dual core Flash driver
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "app_common.h"
+
+#include "flash_driver.h"
+#include "shci.h"
+#include "utilities_conf.h"
+
+/* Private typedef -----------------------------------------------------------*/
+typedef enum
+{
+ SEM_LOCK_SUCCESSFUL,
+ SEM_LOCK_BUSY,
+}SemStatus_t;
+
+typedef enum
+{
+ FLASH_ERASE,
+ FLASH_WRITE,
+}FlashOperationType_t;
+
+/* Private defines -----------------------------------------------------------*/
+/* Private macros ------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+/* Global variables ----------------------------------------------------------*/
+/* Private function prototypes -----------------------------------------------*/
+static SingleFlashOperationStatus_t ProcessSingleFlashOperation(FlashOperationType_t FlashOperationType,
+ uint32_t SectorNumberOrDestAddress,
+ uint64_t Data);
+/* Public functions ----------------------------------------------------------*/
+uint32_t FD_EraseSectors(uint32_t FirstSector, uint32_t NbrOfSectors)
+{
+ uint32_t loop_flash;
+ uint32_t return_value;
+ SingleFlashOperationStatus_t single_flash_operation_status;
+
+ single_flash_operation_status = SINGLE_FLASH_OPERATION_DONE;
+
+ /**
+ * Take the semaphore to take ownership of the Flash IP
+ */
+ while(LL_HSEM_1StepLock(HSEM, CFG_HW_FLASH_SEMID));
+
+ HAL_FLASH_Unlock();
+
+ /**
+ * Notify the CPU2 that some flash erase activity may be executed
+ * On reception of this command, the CPU2 enables the BLE timing protection versus flash erase processing
+ * The Erase flash activity will be executed only when the BLE RF is idle for at least 25ms
+ * The CPU2 will prevent all flash activity (write or erase) in all cases when the BL RF Idle is shorter than 25ms.
+ */
+ SHCI_C2_FLASH_EraseActivity(ERASE_ACTIVITY_ON);
+
+ for(loop_flash = 0; (loop_flash < NbrOfSectors) && (single_flash_operation_status == SINGLE_FLASH_OPERATION_DONE) ; loop_flash++)
+ {
+ single_flash_operation_status = FD_EraseSingleSector(FirstSector+loop_flash);
+ }
+
+ if(single_flash_operation_status != SINGLE_FLASH_OPERATION_DONE)
+ {
+ return_value = NbrOfSectors - loop_flash + 1;
+ }
+ else
+ {
+ /**
+ * Notify the CPU2 there will be no request anymore to erase the flash
+ * On reception of this command, the CPU2 disables the BLE timing protection versus flash erase processing
+ */
+ SHCI_C2_FLASH_EraseActivity(ERASE_ACTIVITY_OFF);
+
+ HAL_FLASH_Lock();
+
+ /**
+ * Release the ownership of the Flash IP
+ */
+ LL_HSEM_ReleaseLock(HSEM, CFG_HW_FLASH_SEMID, 0);
+
+ return_value = 0;
+ }
+
+ return return_value;
+}
+
+uint32_t FD_WriteData(uint32_t DestAddress, uint64_t * pSrcBuffer, uint32_t NbrOfData)
+{
+ uint32_t loop_flash;
+ uint32_t return_value;
+ SingleFlashOperationStatus_t single_flash_operation_status;
+
+ single_flash_operation_status = SINGLE_FLASH_OPERATION_DONE;
+
+ /**
+ * Take the semaphore to take ownership of the Flash IP
+ */
+ while(LL_HSEM_1StepLock(HSEM, CFG_HW_FLASH_SEMID));
+
+ HAL_FLASH_Unlock();
+
+ for(loop_flash = 0; (loop_flash < NbrOfData) && (single_flash_operation_status == SINGLE_FLASH_OPERATION_DONE) ; loop_flash++)
+ {
+ single_flash_operation_status = FD_WriteSingleData(DestAddress+(8*loop_flash), *(pSrcBuffer+loop_flash));
+ }
+
+ if(single_flash_operation_status != SINGLE_FLASH_OPERATION_DONE)
+ {
+ return_value = NbrOfData - loop_flash + 1;
+ }
+ else
+ {
+ HAL_FLASH_Lock();
+
+ /**
+ * Release the ownership of the Flash IP
+ */
+ LL_HSEM_ReleaseLock(HSEM, CFG_HW_FLASH_SEMID, 0);
+
+ return_value = 0;
+ }
+
+ return return_value;
+}
+
+SingleFlashOperationStatus_t FD_EraseSingleSector(uint32_t SectorNumber)
+{
+ SingleFlashOperationStatus_t return_value;
+
+ /* The last parameter is unused in that case and set to 0 */
+ return_value = ProcessSingleFlashOperation(FLASH_ERASE, SectorNumber, 0);
+
+ return return_value;
+}
+
+SingleFlashOperationStatus_t FD_WriteSingleData(uint32_t DestAddress, uint64_t Data)
+{
+ SingleFlashOperationStatus_t return_value;
+
+ return_value = ProcessSingleFlashOperation(FLASH_WRITE, DestAddress, Data);
+
+ return return_value;
+}
+
+/*************************************************************
+ *
+ * LOCAL FUNCTIONS
+ *
+ *************************************************************/
+static SingleFlashOperationStatus_t ProcessSingleFlashOperation(FlashOperationType_t FlashOperationType,
+ uint32_t SectorNumberOrDestAddress,
+ uint64_t Data)
+{
+ SemStatus_t cpu1_sem_status;
+ SemStatus_t cpu2_sem_status;
+ WaitedSemStatus_t waited_sem_status;
+ SingleFlashOperationStatus_t return_status;
+
+ uint32_t page_error;
+ FLASH_EraseInitTypeDef p_erase_init;
+
+ waited_sem_status = WAITED_SEM_FREE;
+
+ p_erase_init.TypeErase = FLASH_TYPEERASE_PAGES;
+ p_erase_init.NbPages = 1;
+ p_erase_init.Page = SectorNumberOrDestAddress;
+
+ do
+ {
+ /**
+ * When the PESD bit mechanism is used by CPU2 to protect its timing, the PESD bit should be polled here.
+ * If the PESD is set, the CPU1 will be stalled when reading literals from an ISR that may occur after
+ * the flash processing has been requested but suspended due to the PESD bit.
+ *
+ * Note: This code is required only when the PESD mechanism is used to protect the CPU2 timing.
+ * However, keeping that code make it compatible with the two mechanisms.
+ */
+ while(LL_FLASH_IsActiveFlag_OperationSuspended());
+
+ UTILS_ENTER_CRITICAL_SECTION();
+
+ /**
+ * Depending on the application implementation, in case a multitasking is possible with an OS,
+ * it should be checked here if another task in the application disallowed flash processing to protect
+ * some latency in critical code execution
+ * When flash processing is ongoing, the CPU cannot access the flash anymore.
+ * Trying to access the flash during that time stalls the CPU.
+ * The only way for CPU1 to disallow flash processing is to take CFG_HW_BLOCK_FLASH_REQ_BY_CPU1_SEMID.
+ */
+ cpu1_sem_status = (SemStatus_t)LL_HSEM_GetStatus(HSEM, CFG_HW_BLOCK_FLASH_REQ_BY_CPU1_SEMID);
+ if(cpu1_sem_status == SEM_LOCK_SUCCESSFUL)
+ {
+ /**
+ * Check now if the CPU2 disallows flash processing to protect its timing.
+ * If the semaphore is locked, the CPU2 does not allow flash processing
+ *
+ * Note: By default, the CPU2 uses the PESD mechanism to protect its timing,
+ * therefore, it is useless to get/release the semaphore.
+ *
+ * However, keeping that code make it compatible with the two mechanisms.
+ * The protection by semaphore is enabled on CPU2 side with the command SHCI_C2_SetFlashActivityControl()
+ *
+ */
+ cpu2_sem_status = (SemStatus_t)LL_HSEM_1StepLock(HSEM, CFG_HW_BLOCK_FLASH_REQ_BY_CPU2_SEMID);
+ if(cpu2_sem_status == SEM_LOCK_SUCCESSFUL)
+ {
+ /**
+ * When CFG_HW_BLOCK_FLASH_REQ_BY_CPU2_SEMID is taken, it is allowed to only erase one sector or
+ * write one single 64bits data
+ * When either several sectors need to be erased or several 64bits data need to be written,
+ * the application shall first exit from the critical section and try again.
+ */
+ if(FlashOperationType == FLASH_ERASE)
+ {
+ HAL_FLASHEx_Erase(&p_erase_init, &page_error);
+ }
+ else
+ {
+ HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, SectorNumberOrDestAddress, Data);
+ }
+ /**
+ * Release the semaphore to give the opportunity to CPU2 to protect its timing versus the next flash operation
+ * by taking this semaphore.
+ * Note that the CPU2 is polling on this semaphore so CPU1 shall release it as fast as possible.
+ * This is why this code is protected by a critical section.
+ */
+ LL_HSEM_ReleaseLock(HSEM, CFG_HW_BLOCK_FLASH_REQ_BY_CPU2_SEMID, 0);
+ }
+ }
+
+ UTILS_EXIT_CRITICAL_SECTION();
+
+ if(cpu1_sem_status != SEM_LOCK_SUCCESSFUL)
+ {
+ /**
+ * To avoid looping in ProcessSingleFlashOperation(), FD_WaitForSemAvailable() should implement a mechanism to
+ * continue only when CFG_HW_BLOCK_FLASH_REQ_BY_CPU1_SEMID is free
+ */
+ waited_sem_status = FD_WaitForSemAvailable(WAIT_FOR_SEM_BLOCK_FLASH_REQ_BY_CPU1);
+ }
+ else if(cpu2_sem_status != SEM_LOCK_SUCCESSFUL)
+ {
+ /**
+ * To avoid looping in ProcessSingleFlashOperation(), FD_WaitForSemAvailable() should implement a mechanism to
+ * continue only when CFG_HW_BLOCK_FLASH_REQ_BY_CPU2_SEMID is free
+ */
+ waited_sem_status = FD_WaitForSemAvailable(WAIT_FOR_SEM_BLOCK_FLASH_REQ_BY_CPU2);
+ }
+ }
+ while( ((cpu2_sem_status != SEM_LOCK_SUCCESSFUL) || (cpu1_sem_status != SEM_LOCK_SUCCESSFUL))
+ && (waited_sem_status != WAITED_SEM_BUSY) );
+
+ /**
+ * In most BLE application, the flash should not be blocked by the CPU2 longer than FLASH_TIMEOUT_VALUE (1000ms)
+ * However, it could be that for some marginal application, this time is longer.
+ * In that case either HAL_FLASHEx_Erase() or HAL_FLASH_Program() will exit with FLASH_TIMEOUT_VALUE value.
+ * This is not a failing case and there is no other way than waiting the operation to be completed.
+ * If for any reason this test is never passed, this means there is a failure in the system and there is no other
+ * way to recover than applying a device reset.
+ *
+ * Note: This code is required only when the PESD mechanism is used to protect the CPU2 timing.
+ * However, keeping that code make it compatible with the two mechanisms.
+ */
+ while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_CFGBSY));
+
+ if(waited_sem_status != WAITED_SEM_BUSY)
+ {
+ /**
+ * The flash processing has been done. It has not been checked whether it has been successful or not.
+ * The only commitment is that it is possible to request a new flash processing
+ */
+ return_status = SINGLE_FLASH_OPERATION_DONE;
+ }
+ else
+ {
+ /**
+ * The flash processing has not been executed due to timing protection from either the CPU1 or the CPU2.
+ * This status is reported up to the user that should retry after checking that each CPU do not
+ * protect its timing anymore.
+ */
+ return_status = SINGLE_FLASH_OPERATION_NOT_EXECUTED;
+ }
+
+ return return_status;
+}
+
+/*************************************************************
+ *
+ * WEAK FUNCTIONS
+ *
+ *************************************************************/
+__WEAK WaitedSemStatus_t FD_WaitForSemAvailable(WaitedSemId_t WaitedSemId)
+{
+ /**
+ * The timing protection is enabled by either CPU1 or CPU2. It should be decided here if the driver shall
+ * keep trying to erase/write the flash until successful or if it shall exit ans report to the user that the action
+ * has not been executed.
+ * WAITED_SEM_BUSY returns to the user
+ * WAITED_SEM_FREE keep looping in the driver until the action is executed. This will result in the current tack looping
+ * until this is done. In a bare metal implementation, only the code within interrupt handler can be executed. With an OS,
+ * only task with higher priority can be processed
+ *
+ */
+ return WAITED_SEM_BUSY;
+}
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Src/system_stm32wbxx.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Src/system_stm32wbxx.c
index 4cbcede97..1a1ec888e 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Src/system_stm32wbxx.c
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/Core/Src/system_stm32wbxx.c
@@ -410,6 +410,28 @@ void SystemInit(void)
SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
#endif
+/**
+ * When out of the SBSFU, the system configuration is
+ * System Clock source = PLL (MSI)
+ * SYSCLK(Hz) = 64000000
+ * HCLK(Hz) = 64000000
+ * HCLK1 Prescaler = 1
+ * HCKL2 Prescaler = 2
+ * HCKLS Prescaler = 1
+ * APB1 Prescaler = 1
+ * APB2 Prescaler = 1
+ * MSI Frequency(Hz) = 4000000
+ * PLL_M = 1
+ * PLL_N = 32
+ * PLL_P = 5
+ * PLL_Q = 4
+ * PLL_R = 2
+ * Flash Latency(WS) = 3
+ *
+ * The new system configuration shall be applied in a different way when SBSFU is used versus
+ * the case when the device is out of reset
+ */
+
/**
* Read HSE_Tuning from OTP
*/
@@ -421,11 +443,13 @@ void SystemInit(void)
LL_RCC_HSE_Enable();
+#ifndef OTA_SBSFU
/**
* Set FLASH latency to 1WS
*/
LL_FLASH_SetLatency( LL_FLASH_LATENCY_1 );
while( LL_FLASH_GetLatency() != LL_FLASH_LATENCY_1 );
+#endif
/**
* Switch to HSE
@@ -435,12 +459,29 @@ void SystemInit(void)
LL_RCC_SetSysClkSource( LL_RCC_SYS_CLKSOURCE_HSE );
while (LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSE);
+#ifdef OTA_SBSFU
+ /**
+ * Switch OFF the PLL to save power
+ */
+ LL_RCC_PLL_Disable();
+
+ /**
+ * Set FLASH latency to 1WS
+ */
+ LL_FLASH_SetLatency( LL_FLASH_LATENCY_1 );
+ while( LL_FLASH_GetLatency() != LL_FLASH_LATENCY_1 );
+
+ /**
+ * Set AHB2 prescaler so that CPU is clocked by 32 MHz
+ */
+ LL_C2_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
+#endif
+
/**
* Switch OFF MSI
*/
LL_RCC_MSI_Disable();
-
/* Configure the Vector Table location add offset address ------------------*/
#if defined(VECT_TAB_SRAM)
/* program in SRAM1 */
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/EWARM/BLE_Ota.ewp b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/EWARM/BLE_Ota.ewp
index 49eecad89..646dba6fe 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/EWARM/BLE_Ota.ewp
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/EWARM/BLE_Ota.ewp
@@ -349,7 +349,6 @@
<state>$PROJ_DIR$\..\..\..\..\..\..\Drivers\CMSIS\Device\ST\STM32WBxx\Include</state>
<state>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Inc</state>
<state>$PROJ_DIR$\..\..\..\..\..\..\Drivers\BSP\P-NUCLEO-WB55.Nucleo</state>
-
<state>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\ble\core\</state>
<state>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\interface\patterns\ble_thread\tl</state>
<state>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\utilities</state>
@@ -1038,6 +1037,11 @@
<archiveVersion>0</archiveVersion>
<data />
</settings>
+ <settings>
+ <name>Coder</name>
+ <archiveVersion>0</archiveVersion>
+ <data />
+ </settings>
</configuration>
<group>
<name>Application</name>
@@ -1050,6 +1054,9 @@
<name>$PROJ_DIR$\..\Core\Src\app_entry.c</name>
</file>
<file>
+ <name>$PROJ_DIR$\..\Core\Src\flash_driver.c</name>
+ </file>
+ <file>
<name>$PROJ_DIR$\..\Core\Src\hw_timerserver.c</name>
</file>
<file>
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/MDK-ARM/BLE_Ota.uvoptx b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/MDK-ARM/BLE_Ota.uvoptx
index 007805502..0888ed788 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/MDK-ARM/BLE_Ota.uvoptx
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/MDK-ARM/BLE_Ota.uvoptx
@@ -1,5 +1,26 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_opt.xsd">
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
+
+ <SchemaVersion>1.0</SchemaVersion>
+
+ <Header>### uVision Project, (C) Keil Software</Header>
+
+ <Extensions>
+ <cExt>*.c</cExt>
+ <aExt>*.s*; *.src; *.a*</aExt>
+ <oExt>*.obj; *.o</oExt>
+ <lExt>*.lib</lExt>
+ <tExt>*.txt; *.h; *.inc</tExt>
+ <pExt>*.plm</pExt>
+ <CppX>*.cpp</CppX>
+ <nMigrate>0</nMigrate>
+ </Extensions>
+
+ <DaveTm>
+ <dwLowDateTime>0</dwLowDateTime>
+ <dwHighDateTime>0</dwHighDateTime>
+ </DaveTm>
+
<Target>
<TargetName>BLE_Ota</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
@@ -11,6 +32,7 @@
<BeepAtEnd>1</BeepAtEnd>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
+ <RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>1</HexSelection>
@@ -23,7 +45,7 @@
<PageWidth>79</PageWidth>
<PageLength>66</PageLength>
<TabStop>8</TabStop>
- <ListingPath />
+ <ListingPath></ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
@@ -51,7 +73,7 @@
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
- <tvExp>0</tvExp>
+ <tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget>
</OPTFL>
@@ -73,33 +95,43 @@
<tRmem>1</tRmem>
<tRfunc>1</tRfunc>
<tRbox>1</tRbox>
+ <tRtrace>1</tRtrace>
+ <sRSysVw>1</sRSysVw>
+ <tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
- <nTsel>13</nTsel>
- <sDll />
- <sDllPa />
- <sDlgDll />
- <sDlgPa />
- <sIfile />
- <tDll />
- <tDllPa />
- <tDlgDll />
- <tDlgPa />
- <tIfile />
+ <bEvRecOn>1</bEvRecOn>
+ <bSchkAxf>0</bSchkAxf>
+ <bTchkAxf>0</bTchkAxf>
+ <nTsel>6</nTsel>
+ <sDll></sDll>
+ <sDllPa></sDllPa>
+ <sDlgDll></sDlgDll>
+ <sDlgPa></sDlgPa>
+ <sIfile></sIfile>
+ <tDll></tDll>
+ <tDllPa></tDllPa>
+ <tDlgDll></tDlgDll>
+ <tDlgPa></tDlgPa>
+ <tIfile></tIfile>
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
</DebugOpt>
- <TargetDriverDllRegistry>
+ <TargetDriverDllRegistry>
<SetRegEntry>
- <Number>0</Number>
- <Key>ST-LINKIII-KEIL_SWO</Key>
- <Name>-U-O142 -O2254 -S0 -C0 -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32WB_M4.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32WB55RG$CMSIS\Flash\STM32WB_M4.FLM)</Name>
- </SetRegEntry>
- <SetRegEntry>
- <Number>0</Number>
- <Key />
- <Name>-U-O142 -O2254 -S0 -C0 -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32WB_M4.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32WB55RG$CMSIS\Flash\STM32WB_M4.FLM)</Name>
- </SetRegEntry>
- </TargetDriverDllRegistry>
+ <Number>0</Number>
+ <Key>UL2CM3</Key>
+ <Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32WB_M4 -FS08000000 -FL01000000 -FP0($$Device:STM32WB55RGVx$CMSIS\Flash\STM32WB_M4.FLM))</Name>
+ </SetRegEntry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>ST-LINKIII-KEIL_SWO</Key>
+ <Name>-U-O142 -O2254 -S0 -C0 -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32WB_M4.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32WB55RGVx$CMSIS\Flash\STM32WB_M4.FLM)</Name>
+ </SetRegEntry>
+ </TargetDriverDllRegistry>
+ <Breakpoint/>
+ <Tracepoint>
+ <THDelay>0</THDelay>
+ </Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>1</periodic>
@@ -126,8 +158,776 @@
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
- <LintExecutable />
- <LintConfigFile />
+ <LintExecutable></LintExecutable>
+ <LintConfigFile></LintConfigFile>
+ <bLintAuto>0</bLintAuto>
+ <bAutoGenD>0</bAutoGenD>
+ <LntExFlags>0</LntExFlags>
+ <pMisraName></pMisraName>
+ <pszMrule></pszMrule>
+ <pSingCmds></pSingCmds>
+ <pMultCmds></pMultCmds>
+ <pMisraNamep></pMisraNamep>
+ <pszMrulep></pszMrulep>
+ <pSingCmdsp></pSingCmdsp>
+ <pMultCmdsp></pMultCmdsp>
</TargetOption>
</Target>
+
+ <Group>
+ <GroupName>::CMSIS</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>1</RteFlg>
+ </Group>
+
+ <Group>
+ <GroupName>Application/Core</GroupName>
+ <tvExp>1</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>1</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/app_debug.c</PathWithFileName>
+ <FilenameWithoutPath>app_debug.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>2</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/app_entry.c</PathWithFileName>
+ <FilenameWithoutPath>app_entry.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>3</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/stm32_lpm_if.c</PathWithFileName>
+ <FilenameWithoutPath>stm32_lpm_if.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>4</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/hw_timerserver.c</PathWithFileName>
+ <FilenameWithoutPath>hw_timerserver.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>5</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/hw_uart.c</PathWithFileName>
+ <FilenameWithoutPath>hw_uart.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>6</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/main.c</PathWithFileName>
+ <FilenameWithoutPath>main.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>7</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/stm32wbxx_it.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_it.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>8</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>..\Core\Src\flash_driver.c</PathWithFileName>
+ <FilenameWithoutPath>flash_driver.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Application/MDK-ARM</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>3</GroupNumber>
+ <FileNumber>9</FileNumber>
+ <FileType>2</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>startup_stm32wb55xx_cm4.s</PathWithFileName>
+ <FilenameWithoutPath>startup_stm32wb55xx_cm4.s</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Application/STM32_WPAN/app</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>4</GroupNumber>
+ <FileNumber>10</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../STM32_WPAN/App/app_ble.c</PathWithFileName>
+ <FilenameWithoutPath>app_ble.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>4</GroupNumber>
+ <FileNumber>11</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../STM32_WPAN/App/otas_app.c</PathWithFileName>
+ <FilenameWithoutPath>otas_app.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Application/STM32_WPAN/target</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>5</GroupNumber>
+ <FileNumber>12</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../STM32_WPAN/Target/hw_ipcc.c</PathWithFileName>
+ <FilenameWithoutPath>hw_ipcc.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Doc</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>6</GroupNumber>
+ <FileNumber>13</FileNumber>
+ <FileType>5</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../readme.txt</PathWithFileName>
+ <FilenameWithoutPath>readme.txt</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Drivers/BSP/P-NUCLEO-WB55.Nucleo</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>7</GroupNumber>
+ <FileNumber>14</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/BSP/P-NUCLEO-WB55.Nucleo/stm32wbxx_nucleo.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_nucleo.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Drivers/CMSIS</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>15</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/system_stm32wbxx.c</PathWithFileName>
+ <FilenameWithoutPath>system_stm32wbxx.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Drivers/STM32WBxx_HAL_Driver</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>16</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>17</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_adc.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_adc.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>18</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_adc_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_adc_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>19</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cortex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_cortex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>20</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_dma.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>21</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_flash.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>22</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_flash_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>23</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_gpio.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_gpio.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>24</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_pwr.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>25</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_pwr_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>26</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_rcc.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>27</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_rcc_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>28</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_rtc.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>29</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_rtc_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>30</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_spi.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_spi.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>31</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_spi_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_spi_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>32</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_uart.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>33</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_uart_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Middlewares/STM32_WPAN/ble/blesvc</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>10</GroupNumber>
+ <FileNumber>34</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/svc/Src/otas_stm.c</PathWithFileName>
+ <FilenameWithoutPath>otas_stm.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>10</GroupNumber>
+ <FileNumber>35</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/svc/Src/svc_ctl.c</PathWithFileName>
+ <FilenameWithoutPath>svc_ctl.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Middlewares/STM32_WPAN/ble/core</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>11</GroupNumber>
+ <FileNumber>36</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gap_aci.c</PathWithFileName>
+ <FilenameWithoutPath>ble_gap_aci.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>11</GroupNumber>
+ <FileNumber>37</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gatt_aci.c</PathWithFileName>
+ <FilenameWithoutPath>ble_gatt_aci.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>11</GroupNumber>
+ <FileNumber>38</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hal_aci.c</PathWithFileName>
+ <FilenameWithoutPath>ble_hal_aci.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>11</GroupNumber>
+ <FileNumber>39</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hci_le.c</PathWithFileName>
+ <FilenameWithoutPath>ble_hci_le.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>11</GroupNumber>
+ <FileNumber>40</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto/ble_l2cap_aci.c</PathWithFileName>
+ <FilenameWithoutPath>ble_l2cap_aci.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>11</GroupNumber>
+ <FileNumber>41</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/template/osal.c</PathWithFileName>
+ <FilenameWithoutPath>osal.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Middlewares/STM32_WPAN/interface/patterns/ble_thread/shci</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>12</GroupNumber>
+ <FileNumber>42</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci/shci.c</PathWithFileName>
+ <FilenameWithoutPath>shci.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Middlewares/STM32_WPAN/interface/patterns/ble_thread/tl</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>13</GroupNumber>
+ <FileNumber>43</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/hci_tl.c</PathWithFileName>
+ <FilenameWithoutPath>hci_tl.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>13</GroupNumber>
+ <FileNumber>44</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/shci_tl.c</PathWithFileName>
+ <FilenameWithoutPath>shci_tl.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>13</GroupNumber>
+ <FileNumber>45</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/hci_tl_if.c</PathWithFileName>
+ <FilenameWithoutPath>hci_tl_if.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>13</GroupNumber>
+ <FileNumber>46</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/shci_tl_if.c</PathWithFileName>
+ <FilenameWithoutPath>shci_tl_if.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>13</GroupNumber>
+ <FileNumber>47</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/tl_mbox.c</PathWithFileName>
+ <FilenameWithoutPath>tl_mbox.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Middlewares/STM32_WPAN/utilities</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>14</GroupNumber>
+ <FileNumber>48</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/utilities/dbg_trace.c</PathWithFileName>
+ <FilenameWithoutPath>dbg_trace.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>14</GroupNumber>
+ <FileNumber>49</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/utilities/otp.c</PathWithFileName>
+ <FilenameWithoutPath>otp.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>14</GroupNumber>
+ <FileNumber>50</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/utilities/stm_list.c</PathWithFileName>
+ <FilenameWithoutPath>stm_list.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>14</GroupNumber>
+ <FileNumber>51</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/utilities/stm_queue.c</PathWithFileName>
+ <FilenameWithoutPath>stm_queue.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Utilities</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>15</GroupNumber>
+ <FileNumber>52</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Utilities/lpm/tiny_lpm/stm32_lpm.c</PathWithFileName>
+ <FilenameWithoutPath>stm32_lpm.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>15</GroupNumber>
+ <FileNumber>53</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Utilities/sequencer/stm32_seq.c</PathWithFileName>
+ <FilenameWithoutPath>stm32_seq.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
</ProjectOpt>
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/MDK-ARM/BLE_Ota.uvprojx b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/MDK-ARM/BLE_Ota.uvprojx
index c1f60cc18..d7a78f9d2 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/MDK-ARM/BLE_Ota.uvprojx
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/MDK-ARM/BLE_Ota.uvprojx
@@ -1,41 +1,46 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" noNamespaceSchemaLocation="project_proj.xsd">
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
- <SchemaVersion>1.1</SchemaVersion>
+ <SchemaVersion>2.1</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Targets>
- <Target>
+ <Target>
<TargetName>BLE_Ota</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
+ <pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
+ <uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>STM32WB55RGVx</Device>
<Vendor>STMicroelectronics</Vendor>
+ <PackID>Keil.STM32WBxx_DFP.1.0.0</PackID>
+ <PackURL>http://www.keil.com/pack</PackURL>
<Cpu>IROM(0x08000000-0x807FFFF) IRAM(0x20000004-0x2002FC03) CLOCK(8000000) FPU2 CPUTYPE("Cortex-M4")</Cpu>
- <FlashUtilSpec/>
- <StartupFile/>
- <FlashDriverDll/>
- <DeviceId/>
- <RegisterFile/>
- <MemoryEnv/>
- <Cmp/>
- <Asm/>
- <Linker/>
- <OHString/>
- <InfinionOptionDll/>
- <SLE66CMisc/>
- <SLE66AMisc/>
- <SLE66LinkerMisc/>
- <SFDFile/>
+ <FlashUtilSpec></FlashUtilSpec>
+ <StartupFile></StartupFile>
+ <FlashDriverDll></FlashDriverDll>
+ <DeviceId></DeviceId>
+ <RegisterFile></RegisterFile>
+ <MemoryEnv></MemoryEnv>
+ <Cmp></Cmp>
+ <Asm></Asm>
+ <Linker></Linker>
+ <OHString></OHString>
+ <InfinionOptionDll></InfinionOptionDll>
+ <SLE66CMisc></SLE66CMisc>
+ <SLE66AMisc></SLE66AMisc>
+ <SLE66LinkerMisc></SLE66LinkerMisc>
+ <SFDFile>$$Device:STM32WB55RGVx$CMSIS\SVD\STM32WBxx_CM4.svd</SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
- <BinPath/>
- <IncludePath/>
- <LibPath/>
- <RegisterFilePath/>
- <DBRegisterFilePath/>
+ <BinPath></BinPath>
+ <IncludePath></IncludePath>
+ <LibPath></LibPath>
+ <RegisterFilePath></RegisterFilePath>
+ <DBRegisterFilePath></DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
@@ -50,23 +55,25 @@
<CreateHexFile>1</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
- <ListingPath>BLE_Ota\List</ListingPath>
+ <ListingPath></ListingPath>
<HexFormatSelection>1</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name/>
- <UserProg2Name/>
+ <UserProg1Name></UserProg1Name>
+ <UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopU1X>0</nStopU1X>
+ <nStopU2X>0</nStopU2X>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name/>
- <UserProg2Name/>
+ <UserProg1Name></UserProg1Name>
+ <UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopB1X>0</nStopB1X>
@@ -75,13 +82,15 @@
<AfterMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name/>
- <UserProg2Name/>
+ <UserProg1Name></UserProg1Name>
+ <UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopA1X>0</nStopA1X>
+ <nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
- <SVCSIdString/>
+ <SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
@@ -95,9 +104,9 @@
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
- <CustomArgument/>
- <IncludeLibraryModules/>
- <ComprImg/>
+ <CustomArgument></CustomArgument>
+ <IncludeLibraryModules></IncludeLibraryModules>
+ <ComprImg>0</ComprImg>
</CommonProperty>
<DllOption>
<SimDllName>SARMCM3.DLL</SimDllName>
@@ -117,47 +126,6 @@
<HexOffset>0</HexOffset>
<Oh166RecLen>16</Oh166RecLen>
</OPTHX>
- <Simulator>
- <UseSimulator>0</UseSimulator>
- <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
- <RunToMain>1</RunToMain>
- <RestoreBreakpoints>1</RestoreBreakpoints>
- <RestoreWatchpoints>1</RestoreWatchpoints>
- <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
- <RestoreFunctions>1</RestoreFunctions>
- <RestoreToolbox>1</RestoreToolbox>
- <LimitSpeedToRealTime>0</LimitSpeedToRealTime>
- <RestoreSysVw>1</RestoreSysVw>
- </Simulator>
- <Target>
- <UseTarget>1</UseTarget>
- <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
- <RunToMain>1</RunToMain>
- <RestoreBreakpoints>1</RestoreBreakpoints>
- <RestoreWatchpoints>1</RestoreWatchpoints>
- <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
- <RestoreFunctions>0</RestoreFunctions>
- <RestoreToolbox>1</RestoreToolbox>
- <RestoreTracepoints>1</RestoreTracepoints>
- <RestoreSysVw>1</RestoreSysVw>
- </Target>
- <RunDebugAfterBuild>0</RunDebugAfterBuild>
- <TargetSelection>13</TargetSelection>
- <SimDlls>
- <CpuDll/>
- <CpuDllArguments/>
- <PeripheralDll/>
- <PeripheralDllArguments/>
- <InitializationFile/>
- </SimDlls>
- <TargetDlls>
- <CpuDll/>
- <CpuDllArguments/>
- <PeripheralDll/>
- <PeripheralDllArguments/>
- <InitializationFile/>
- <Driver>STLink\ST-LINKIII-KEIL_SWO.dll</Driver>
- </TargetDlls>
</DebugOption>
<Utilities>
<Flash1>
@@ -170,11 +138,11 @@
</Flash1>
<bUseTDR>1</bUseTDR>
<Flash2>STLink\ST-LINKIII-KEIL_SWO.dll</Flash2>
- <Flash3/>
- <Flash4/>
- <pFcarmOut/>
- <pFcarmGrp/>
- <pFcArmRoot/>
+ <Flash3></Flash3>
+ <Flash4></Flash4>
+ <pFcarmOut></pFcarmOut>
+ <pFcarmGrp></pFcarmGrp>
+ <pFcArmRoot></pFcArmRoot>
<FcArmLst>0</FcArmLst>
</Utilities>
<TargetArmAds>
@@ -207,7 +175,7 @@
<RvctClst>0</RvctClst>
<GenPPlst>0</GenPPlst>
<AdsCpuType>"Cortex-M4"</AdsCpuType>
- <RvctDeviceName/>
+ <RvctDeviceName></RvctDeviceName>
<mOS>0</mOS>
<uocRom>0</uocRom>
<uocRam>0</uocRam>
@@ -216,12 +184,14 @@
<hadXRAM>0</hadXRAM>
<uocXRam>0</uocXRam>
<RvdsVP>2</RvdsVP>
+ <RvdsMve>0</RvdsMve>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
<useUlib>1</useUlib>
<EndSel>0</EndSel>
<uLtcg>0</uLtcg>
+ <nSecure>0</nSecure>
<RoSelD>3</RoSelD>
<RwSelD>3</RwSelD>
<CodeSel>0</CodeSel>
@@ -274,13 +244,13 @@
</Ocm6>
<IRAM>
<Type>0</Type>
- <StartAddress/>
- <Size/>
+ <StartAddress>0x20000004</StartAddress>
+ <Size>0x2fc00</Size>
</IRAM>
<IROM>
<Type>1</Type>
- <StartAddress/>
- <Size/>
+ <StartAddress>0x8000000</StartAddress>
+ <Size>0x80000</Size>
</IROM>
<XRAM>
<Type>0</Type>
@@ -304,8 +274,8 @@
</OCR_RVCT3>
<OCR_RVCT4>
<Type>1</Type>
- <StartAddress/>
- <Size/>
+ <StartAddress>0x8000000</StartAddress>
+ <Size>0x80000</Size>
</OCR_RVCT4>
<OCR_RVCT5>
<Type>1</Type>
@@ -329,8 +299,8 @@
</OCR_RVCT8>
<OCR_RVCT9>
<Type>0</Type>
- <StartAddress/>
- <Size/>
+ <StartAddress>0x20000004</StartAddress>
+ <Size>0x2fc00</Size>
</OCR_RVCT9>
<OCR_RVCT10>
<Type>0</Type>
@@ -338,7 +308,7 @@
<Size>0x0</Size>
</OCR_RVCT10>
</OnChipMemories>
- <RvctStartVector/>
+ <RvctStartVector></RvctStartVector>
</ArmAdsMisc>
<Cads>
<interw>1</interw>
@@ -355,11 +325,19 @@
<uThumb>0</uThumb>
<uSurpInc>0</uSurpInc>
<uC99>1</uC99>
+ <uGnu>0</uGnu>
<useXO>0</useXO>
+ <v6Lang>1</v6Lang>
+ <v6LangP>1</v6LangP>
+ <vShortEn>1</vShortEn>
+ <vShortWch>1</vShortWch>
+ <v6Lto>0</v6Lto>
+ <v6WtE>0</v6WtE>
+ <v6Rtti>0</v6Rtti>
<VariousControls>
<MiscControls>--diag_suppress 111</MiscControls>
<Define>USE_STM32WBXX_NUCLEO,STM32WB55xx,USE_HAL_DRIVER,CORE_CM4</Define>
- <Undefine/>
+ <Undefine></Undefine>
<IncludePath>../../../../../../Middlewares/ST/STM32_WPAN/ble/core/template;../../../../../../Middlewares/ST/STM32_WPAN/ble/core/auto;../../../../../../Middlewares/ST/STM32_WPAN;../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include;../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc;../../../../../../Drivers/BSP/P-NUCLEO-WB55.Nucleo;../../../../../../Middlewares/ST/STM32_WPAN/ble/core/;../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl;../../../../../../Middlewares/ST/STM32_WPAN/utilities;../../../../../../Utilities/lpm/tiny_lpm;../../../../../../Utilities/sequencer;../../../../../../Drivers/CMSIS/Include;../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci;../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread;../../../../../../Middlewares/ST/STM32_WPAN/ble;../Core/Inc;../STM32_WPAN/app</IncludePath>
</VariousControls>
</Cads>
@@ -371,11 +349,14 @@
<SplitLS>0</SplitLS>
<SwStkChk>0</SwStkChk>
<NoWarn>0</NoWarn>
+ <uSurpInc>0</uSurpInc>
+ <useXO>0</useXO>
+ <uClangAs>0</uClangAs>
<VariousControls>
- <MiscControls/>
- <Define/>
- <Undefine/>
- <IncludePath/>
+ <MiscControls></MiscControls>
+ <Define></Define>
+ <Undefine></Undefine>
+ <IncludePath></IncludePath>
</VariousControls>
</Aads>
<LDads>
@@ -387,22 +368,21 @@
<useFile>0</useFile>
<TextAddressRange>0x08000000</TextAddressRange>
<DataAddressRange>0x20000000</DataAddressRange>
- <pXoBase/>
+ <pXoBase></pXoBase>
<ScatterFile>.\stm32wb55xx_flash_cm4.sct</ScatterFile>
- <IncludeLibs/>
- <IncludeLibsPath/>
- <Misc/>
- <LinkerInputFile/>
- <DisabledWarnings/>
+ <IncludeLibs></IncludeLibs>
+ <IncludeLibsPath></IncludeLibsPath>
+ <Misc></Misc>
+ <LinkerInputFile></LinkerInputFile>
+ <DisabledWarnings></DisabledWarnings>
</LDads>
</TargetArmAds>
- </TargetOption>
+ </TargetOption>
<Groups>
-
- <Group>
+ <Group>
<GroupName>::CMSIS</GroupName>
</Group>
- <Group>
+ <Group>
<GroupName>Application/Core</GroupName>
<Files>
<File>
@@ -436,20 +416,20 @@
<FilePath>../Core/Src/main.c</FilePath>
</File>
<File>
- <FileName>app_debug.c</FileName>
+ <FileName>stm32wbxx_it.c</FileName>
<FileType>1</FileType>
- <FilePath>../Core/Src/app_debug.c</FilePath>
+ <FilePath>../Core/Src/stm32wbxx_it.c</FilePath>
</File>
<File>
- <FileName>stm32wbxx_it.c</FileName>
+ <FileName>flash_driver.c</FileName>
<FileType>1</FileType>
- <FilePath>../Core/Src/stm32wbxx_it.c</FilePath>
+ <FilePath>..\Core\Src\flash_driver.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>Application/MDK-ARM</GroupName>
- <Files>
+ <Files>
<File>
<FileName>startup_stm32wb55xx_cm4.s</FileName>
<FileType>2</FileType>
@@ -738,9 +718,9 @@
</Files>
</Group>
</Groups>
-
</Target>
</Targets>
+
<RTE>
<apis/>
<components>
@@ -753,4 +733,5 @@
</components>
<files/>
</RTE>
-</Project> \ No newline at end of file
+
+</Project>
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/STM32CubeIDE/.project b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/STM32CubeIDE/.project
index a58d3871d..402168d31 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/STM32CubeIDE/.project
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/STM32CubeIDE/.project
@@ -57,6 +57,11 @@
<locationURI>$%7BPARENT-1-PROJECT_LOC%7D/Core/Src/app_entry.c</locationURI>
</link>
<link>
+ <name>Application/Core/flash_driver.c</name>
+ <type>1</type>
+ <locationURI>PARENT-1-PROJECT_LOC/Core/Src/flash_driver.c</locationURI>
+ </link>
+ <link>
<name>Application/Core/hw_timerserver.c</name>
<type>1</type>
<locationURI>$%7BPARENT-1-PROJECT_LOC%7D/Core/Src/hw_timerserver.c</locationURI>
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/STM32_WPAN/App/app_ble.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/STM32_WPAN/App/app_ble.c
index 8a3f9bf49..40fde8b7d 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/STM32_WPAN/App/app_ble.c
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/STM32_WPAN/App/app_ble.c
@@ -36,13 +36,15 @@
#include "ota_sbsfu.h"
#endif /* OTA_SBSFU */
+#include "flash_driver.h"
+
/* Private typedef -----------------------------------------------------------*/
/* Private defines -----------------------------------------------------------*/
#define APPBLE_GAP_DEVICE_NAME_LENGTH 7
#define BD_ADDR_SIZE_LOCAL 6
-
+
/* Private macros ------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static TL_CmdPacket_t BleCmdBuffer;
@@ -393,10 +395,10 @@ static void Ble_Hci_Gap_Gatt_Init(void){
static void Adv_Request(void){
aci_gap_set_discoverable(ADV_IND,
- CFG_FAST_CONN_ADV_INTERVAL_MIN,
- CFG_FAST_CONN_ADV_INTERVAL_MAX,
- PUBLIC_ADDR,
- NO_WHITE_LIST_USE, sizeof(local_name), (uint8_t*) &local_name, 0, 0, 0, 0);
+ CFG_FAST_CONN_ADV_INTERVAL_MIN,
+ CFG_FAST_CONN_ADV_INTERVAL_MAX,
+ PUBLIC_ADDR,
+ NO_WHITE_LIST_USE, sizeof(local_name), (uint8_t*) &local_name, 0, 0, 0, 0);
/* Send Advertising data */
aci_gap_update_adv_data(sizeof(manuf_data), (uint8_t*) manuf_data);
@@ -406,25 +408,17 @@ static void Delete_Sectors( void )
{
#ifdef OTA_SBSFU
- uint32_t page_error;
- FLASH_EraseInitTypeDef p_erase_init;
+ uint32_t NbrOfSectorToBeErased;
- p_erase_init.TypeErase = FLASH_TYPEERASE_PAGES;
- p_erase_init.Page = (SLOT_ACTIVE_1_START&0x00FFF000)>>12;
- p_erase_init.NbPages = (((SLOT_ACTIVE_1_END-SLOT_ACTIVE_1_START)&0x00FFF000)>>12)+1;
-
- HAL_FLASH_Unlock();
- HAL_FLASHEx_Erase(&p_erase_init, &page_error);
- HAL_FLASH_Lock();
+ NbrOfSectorToBeErased = (((SLOT_ACTIVE_1_END-SLOT_ACTIVE_1_START)&0x00FFF000)>>12)+1;
+
+ FD_EraseSectors((SLOT_ACTIVE_1_START&0x00FFF000)>>12,
+ NbrOfSectorToBeErased);
- p_erase_init.TypeErase = FLASH_TYPEERASE_PAGES;
- p_erase_init.Page = (SLOT_DWL_1_START&0x00FFF000)>>12;
- p_erase_init.NbPages = (((SLOT_DWL_1_END-SLOT_DWL_1_START)&0x00FFF000)>>12)+1;
-
- HAL_FLASH_Unlock();
- HAL_FLASHEx_Erase(&p_erase_init, &page_error);
- HAL_FLASH_Lock();
+ NbrOfSectorToBeErased = (((SLOT_DWL_1_END-SLOT_DWL_1_START)&0x00FFF000)>>12)+1;
+ FD_EraseSectors((SLOT_DWL_1_START&0x00FFF000)>>12,
+ NbrOfSectorToBeErased);
return;
#else
/**
@@ -433,16 +427,12 @@ static void Delete_Sectors( void )
* The limit can be read from the SFSA option byte which provides the first secured sector address.
*/
- uint32_t page_error;
- FLASH_EraseInitTypeDef p_erase_init;
uint32_t first_secure_sector_idx;
+ uint32_t NbrOfSectorToBeErased;
first_secure_sector_idx = (READ_BIT(FLASH->SFR, FLASH_SFR_SFSA) >> FLASH_SFR_SFSA_Pos);
- p_erase_init.TypeErase = FLASH_TYPEERASE_PAGES;
-
- p_erase_init.Page = CFG_OTA_START_SECTOR_IDX_VAL_MSG;
- if(p_erase_init.Page < (CFG_APP_START_SECTOR_INDEX - 1))
+ if(CFG_OTA_START_SECTOR_IDX_VAL_MSG < (CFG_APP_START_SECTOR_INDEX - 1))
{
/**
* Something has been wrong as there is no case we should delete the BLE_Ota application
@@ -451,19 +441,16 @@ static void Delete_Sectors( void )
CFG_OTA_REBOOT_VAL_MSG = CFG_REBOOT_ON_FW_APP;
NVIC_SystemReset(); /* it waits until reset */
}
- p_erase_init.NbPages = CFG_OTA_NBR_OF_SECTOR_VAL_MSG;
- if ((p_erase_init.Page + p_erase_init.NbPages) > first_secure_sector_idx)
+ NbrOfSectorToBeErased = CFG_OTA_NBR_OF_SECTOR_VAL_MSG;
+
+ if ((CFG_OTA_START_SECTOR_IDX_VAL_MSG + NbrOfSectorToBeErased) > first_secure_sector_idx)
{
- p_erase_init.NbPages = first_secure_sector_idx - p_erase_init.Page;
+ NbrOfSectorToBeErased = first_secure_sector_idx - CFG_OTA_START_SECTOR_IDX_VAL_MSG;
}
- HAL_FLASH_Unlock();
-
- HAL_FLASHEx_Erase(&p_erase_init, &page_error);
-
- HAL_FLASH_Lock();
-
+ FD_EraseSectors(CFG_OTA_START_SECTOR_IDX_VAL_MSG,
+ NbrOfSectorToBeErased);
return;
#endif /* OTA_SBSFU */
}
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/STM32_WPAN/App/otas_app.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/STM32_WPAN/App/otas_app.c
index 2c97d63ef..2fbb5de4c 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/STM32_WPAN/App/otas_app.c
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Ota/STM32_WPAN/App/otas_app.c
@@ -29,6 +29,8 @@
#include "ota_sbsfu.h"
#endif /* OTA_SBSFU */
+#include "flash_driver.h"
+
/* Private typedef -----------------------------------------------------------*/
typedef enum
{
@@ -111,21 +113,21 @@ void OTAS_STM_Notification( OTA_STM_Notification_t *p_notification )
count = 0;
size_left = p_notification->ValueLength;
- while( LL_HSEM_1StepLock( HSEM, CFG_HW_FLASH_SEMID ) );
- HAL_FLASH_Unlock();
/**
* The flash is written by bunch of DOUBLEWORD_SIZE_FOR_FLASH_PROGRAMMING bytes
* Data are written in flash as long as there are at least DOUBLEWORD_SIZE_FOR_FLASH_PROGRAMMING bytes
*/
while( size_left >= (DOUBLEWORD_SIZE_FOR_FLASH_PROGRAMMING - OTAS_APP_Context.write_value_index) )
{
+ uint32_t NbrOfDataToBeWritten = 1;
+
memcpy( (uint8_t*)&OTAS_APP_Context.write_value + OTAS_APP_Context.write_value_index,
((OTA_STM_Raw_Data_Event_Format_t*)(p_notification->pPayload))->Raw_Data + count,
DOUBLEWORD_SIZE_FOR_FLASH_PROGRAMMING - OTAS_APP_Context.write_value_index );
- while(LL_FLASH_IsActiveFlag_OperationSuspended());
- HAL_FLASH_Program( FLASH_TYPEPROGRAM_DOUBLEWORD,
- OTAS_APP_Context.base_address,
- OTAS_APP_Context.write_value);
+ while(NbrOfDataToBeWritten > 0)
+ NbrOfDataToBeWritten = FD_WriteData(OTAS_APP_Context.base_address,
+ &(OTAS_APP_Context.write_value),
+ 1);
if(*(uint64_t*)(OTAS_APP_Context.base_address)==OTAS_APP_Context.write_value)
{
OTAS_APP_Context.base_address += DOUBLEWORD_SIZE_FOR_FLASH_PROGRAMMING;
@@ -134,8 +136,6 @@ void OTAS_STM_Notification( OTA_STM_Notification_t *p_notification )
OTAS_APP_Context.write_value_index = 0;
}
}
- HAL_FLASH_Lock();
- LL_HSEM_ReleaseLock( HSEM, CFG_HW_FLASH_SEMID, 0 );
/**
* The Flash shall be written by DOUBLEWORD_SIZE_FOR_FLASH_PROGRAMMING number of bytes.
@@ -173,17 +173,15 @@ void OTAS_STM_Notification( OTA_STM_Notification_t *p_notification )
0xFF,
DOUBLEWORD_SIZE_FOR_FLASH_PROGRAMMING - OTAS_APP_Context.write_value_index );
- while( LL_HSEM_1StepLock( HSEM, CFG_HW_FLASH_SEMID ) );
- HAL_FLASH_Unlock();
while(*(uint64_t*)(OTAS_APP_Context.base_address) != OTAS_APP_Context.write_value)
{
- while(LL_FLASH_IsActiveFlag_OperationSuspended());
- HAL_FLASH_Program( FLASH_TYPEPROGRAM_DOUBLEWORD,
- OTAS_APP_Context.base_address,
- OTAS_APP_Context.write_value);
+ uint32_t NbrOfDataToBeWritten = 1;
+
+ while(NbrOfDataToBeWritten > 0)
+ NbrOfDataToBeWritten = FD_WriteData(OTAS_APP_Context.base_address,
+ &(OTAS_APP_Context.write_value),
+ 1);
}
- HAL_FLASH_Lock();
- LL_HSEM_ReleaseLock( HSEM, CFG_HW_FLASH_SEMID, 0 );
}
/**
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Peripheral_Lite/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Peripheral_Lite/Inc/app_conf.h
index 815fb6ebb..dbe214bee 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Peripheral_Lite/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Peripheral_Lite/Inc/app_conf.h
@@ -142,7 +142,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Proximity/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Proximity/Core/Inc/app_conf.h
index cbc5d7215..74d64b36c 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Proximity/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_Proximity/Core/Inc/app_conf.h
@@ -213,7 +213,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_RfWithFlash/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_RfWithFlash/Core/Inc/app_conf.h
index 86d9a41a2..04a9c5ce2 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_RfWithFlash/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_RfWithFlash/Core/Inc/app_conf.h
@@ -292,7 +292,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_TransparentMode/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_TransparentMode/Core/Inc/app_conf.h
index 622936a90..0c4dd2e59 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_TransparentMode/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_TransparentMode/Core/Inc/app_conf.h
@@ -198,7 +198,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pClient/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pClient/Core/Inc/app_conf.h
index 5f8bee08b..47e9ccfb8 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pClient/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pClient/Core/Inc/app_conf.h
@@ -234,7 +234,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pRouteur/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pRouteur/Core/Inc/app_conf.h
index 610fb3b84..c1d6b0603 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pRouteur/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pRouteur/Core/Inc/app_conf.h
@@ -245,7 +245,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer/Core/Inc/app_conf.h
index 277dcd1af..51389acba 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer/Core/Inc/app_conf.h
@@ -274,7 +274,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer/STM32_WPAN/App/app_ble.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer/STM32_WPAN/App/app_ble.c
index cf90e2c25..b67381b6c 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer/STM32_WPAN/App/app_ble.c
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer/STM32_WPAN/App/app_ble.c
@@ -618,13 +618,7 @@ SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt )
handleNotification.ConnectionHandle = BleApplicationContext.BleApplicationContext_legacy.connectionHandle;
P2PS_APP_Notification(&handleNotification);
/* USER CODE BEGIN HCI_EVT_LE_CONN_COMPLETE */
- /*
- * SPECIFIC to P2P Server APP
- */
- handleNotification.P2P_Evt_Opcode = PEER_CONN_HANDLE_EVT;
- handleNotification.ConnectionHandle = BleApplicationContext.BleApplicationContext_legacy.connectionHandle;
- P2PS_APP_Notification(&handleNotification);
- /**/
+
/* USER CODE END HCI_EVT_LE_CONN_COMPLETE */
}
break; /* HCI_LE_CONNECTION_COMPLETE_SUBEVT_CODE */
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer_ota/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer_ota/Core/Inc/app_conf.h
index 58ab0d972..c63d37d99 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer_ota/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer_ota/Core/Inc/app_conf.h
@@ -273,7 +273,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer_ota/STM32_WPAN/App/app_ble.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer_ota/STM32_WPAN/App/app_ble.c
index 2d8bd8795..d828128e6 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer_ota/STM32_WPAN/App/app_ble.c
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer_ota/STM32_WPAN/App/app_ble.c
@@ -612,13 +612,7 @@ SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt )
handleNotification.ConnectionHandle = BleApplicationContext.BleApplicationContext_legacy.connectionHandle;
P2PS_APP_Notification(&handleNotification);
/* USER CODE BEGIN HCI_HCI_LE_CONNECTION_COMPLETE_SUBEVT_CODE */
- /*
-* SPECIFIC to P2P Server APP
-*/
- handleNotification.P2P_Evt_Opcode = PEER_CONN_HANDLE_EVT;
- handleNotification.ConnectionHandle = BleApplicationContext.BleApplicationContext_legacy.connectionHandle;
- P2PS_APP_Notification(&handleNotification);
-/**/
+
/* USER CODE END HCI_HCI_LE_CONNECTION_COMPLETE_SUBEVT_CODE */
}
break; /* HCI_HCI_LE_CONNECTION_COMPLETE_SUBEVT_CODE */
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE_Mac/BLE_Mac_Static/STM32_WPAN/App/app_ffd_mac_802_15_4.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE_Mac/BLE_Mac_Static/STM32_WPAN/App/app_ffd_mac_802_15_4.c
index a7bf5fc85..ef1ceae7e 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE_Mac/BLE_Mac_Static/STM32_WPAN/App/app_ffd_mac_802_15_4.c
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE_Mac/BLE_Mac_Static/STM32_WPAN/App/app_ffd_mac_802_15_4.c
@@ -84,6 +84,14 @@ void APP_FFD_MAC_802_15_4_Init( APP_MAC_802_15_4_InitMode_t InitMode, TL_CmdPack
void APP_FFD_MAC_802_15_4_Stop()
{
+ MAC_resetReq_t ResetReq;
+
+ memset(&ResetReq,0x00,sizeof(MAC_resetReq_t));
+ ResetReq.set_default_PIB = TRUE;
+
+ MAC_MLMEResetReq( &ResetReq );
+ UTIL_SEQ_WaitEvt(EVENT_DEVICE_RESET_CNF);
+
/* Pause the different MAC tasks */
UTIL_SEQ_PauseTask( 1<<CFG_TASK_MSG_FROM_RF_CORE);
UTIL_SEQ_PauseTask( 1<<CFG_TASK_FFD);
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/Core/Src/app_lld_tests.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/Core/Src/app_lld_tests.c
index fb69e5397..471a55835 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/Core/Src/app_lld_tests.c
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/Core/Src/app_lld_tests.c
@@ -200,7 +200,7 @@ void APP_LLDTESTS_Init( void )
#else
#error Unnknown target
#endif
- sprintf(traceBuff, "%s RF 802_15_4 LLDs test\r\n", traceBuff);
+ sprintf(traceBuff, "%s RF 802_15_4 LLDs test\r\n", strtok(traceBuff, "\0"));
uartTxBufferAdd(traceBuff);
uartTxBufferAdd("=================================\r\n");
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/EWARM/Phy_802_15_4_Cli.ewp b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/EWARM/Phy_802_15_4_Cli.ewp
index 6f9f7993f..8edab7ba0 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/EWARM/Phy_802_15_4_Cli.ewp
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/EWARM/Phy_802_15_4_Cli.ewp
@@ -1040,6 +1040,9 @@
<group>
<name>EWARM</name>
<file>
+ <name>$PROJ_DIR$\app_lld_tests_iar_asm.s</name>
+ </file>
+ <file>
<name>$PROJ_DIR$\startup_stm32wb55xx_cm4.s</name>
</file>
</group>
@@ -1054,9 +1057,6 @@
<name>$PROJ_DIR$\..\Core\Src\app_lld_tests.c</name>
</file>
<file>
- <name>$PROJ_DIR$\..\Core\Src\app_lld_tests_iar_asm.s</name>
- </file>
- <file>
<name>$PROJ_DIR$\..\Core\Src\gpio_lld.c</name>
</file>
<file>
@@ -1084,6 +1084,12 @@
</group>
</group>
<group>
+ <name>Doc</name>
+ <file>
+ <name>$PROJ_DIR$\..\readme.txt</name>
+ </file>
+ </group>
+ <group>
<name>Drivers</name>
<group>
<name>BSP</name>
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/EWARM/app_lld_tests_iar_asm.s b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/EWARM/app_lld_tests_iar_asm.s
new file mode 100644
index 000000000..987eb201e
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/EWARM/app_lld_tests_iar_asm.s
@@ -0,0 +1,86 @@
+;/**
+; ******************************************************************************
+; * @file app_lld_tests_iar_asm.s
+; * @brief Common functionnalities for RF LLD tests that must be writen
+; * in assembler for IAR compilator
+; ******************************************************************************
+; * @attention
+; *
+; * <h2><center>&copy; COPYRIGHT 2018 STMicroelectronics</center></h2>
+; *
+; ******************************************************************************
+; */
+;
+;/**
+; * @brief Active polling for a given delay
+; * @param microsec the delay in us unit
+; *
+; * Caution:
+; * - This function has been implemented for system clock set to 16MHz. It must
+; * be rewiewed (twice more NOP) for 32Mhz config.
+; * - This function can be interrupted if used in interruptible part of code.
+; * - Be carefull with the use of critical section that can interrupt the reel
+; * time during input microsec value.
+; * - If 0 is given as input
+; */
+ PUBLIC us_delay_16m
+ SECTION .text:CODE:NOROOT(3)
+us_delay_16m
+loop_16m:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ SUBS R0, R0, #1
+ BHI loop_16m
+ BX LR
+
+ PUBLIC us_delay_32m
+ SECTION .text:CODE:NOROOT(3)
+us_delay_32m
+loop_32m:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ SUBS R0, R0, #1
+ BHI loop_32m
+ BX LR
+
+ END
+
+;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE*****
+
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/readme.txt b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/readme.txt
index 3b9e6e75b..ba879f816 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/readme.txt
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/readme.txt
@@ -34,6 +34,7 @@ How to create a "PHY_802.15.4 command line interface" application on STM32WB55xx
The commands are sent via an UART from an HyperTerminal (PC) to the STM32WB55RG_Nucleo Board.
At startup. after typing return on the HyperTerminal, a prompt '802.15.4 valid cli >' should
be displayed on the Hyperterminal.
+ The red LED (LED3) is on.
The Hyperterminal must be configured as follow :
- BaudRate = 115200 baud
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Cli_Cmd/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Cli_Cmd/Core/Inc/stm32wbxx_it.h
index 8e0a412f2..007570152 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Cli_Cmd/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Cli_Cmd/Core/Inc/stm32wbxx_it.h
@@ -72,8 +72,6 @@ void FPU_IRQHandler(void);
/* USER CODE BEGIN EFP */
void RTC_WKUP_IRQHandler(void);
void EXTI4_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_DataTransfer/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_DataTransfer/Core/Inc/stm32wbxx_it.h
index 8e0a412f2..007570152 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_DataTransfer/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_DataTransfer/Core/Inc/stm32wbxx_it.h
@@ -72,8 +72,6 @@ void FPU_IRQHandler(void);
/* USER CODE BEGIN EFP */
void RTC_WKUP_IRQHandler(void);
void EXTI4_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_Generic/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_Generic/Core/Inc/stm32wbxx_it.h
index 8e0a412f2..007570152 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_Generic/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_Generic/Core/Inc/stm32wbxx_it.h
@@ -72,8 +72,6 @@ void FPU_IRQHandler(void);
/* USER CODE BEGIN EFP */
void RTC_WKUP_IRQHandler(void);
void EXTI4_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_Generic_Ota/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_Generic_Ota/Core/Inc/stm32wbxx_it.h
index a3a535f13..fd0e7d1bc 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_Generic_Ota/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_Generic_Ota/Core/Inc/stm32wbxx_it.h
@@ -65,13 +65,13 @@ void C2SEV_PWR_C2H_IRQHandler(void);
void USART1_IRQHandler(void);
void LPUART1_IRQHandler(void);
void PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler(void);
+void IPCC_C1_RX_IRQHandler(void);
+void IPCC_C1_TX_IRQHandler(void);
void HSEM_IRQHandler(void);
void FPU_IRQHandler(void);
/* USER CODE BEGIN EFP */
void RTC_WKUP_IRQHandler(void);
void EXTI4_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_MultiBoard/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_MultiBoard/Core/Inc/stm32wbxx_it.h
index adde103e3..5695b8ba4 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_MultiBoard/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_MultiBoard/Core/Inc/stm32wbxx_it.h
@@ -73,8 +73,6 @@ void FPU_IRQHandler(void);
void RTC_WKUP_IRQHandler(void);
void EXTI4_IRQHandler(void);
void EXTI1_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_Secure/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_Secure/Core/Inc/stm32wbxx_it.h
index 07cbd808c..007570152 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_Secure/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Coap_Secure/Core/Inc/stm32wbxx_it.h
@@ -65,13 +65,13 @@ void C2SEV_PWR_C2H_IRQHandler(void);
void USART1_IRQHandler(void);
void LPUART1_IRQHandler(void);
void PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler(void);
+void IPCC_C1_RX_IRQHandler(void);
+void IPCC_C1_TX_IRQHandler(void);
void HSEM_IRQHandler(void);
void FPU_IRQHandler(void);
/* USER CODE BEGIN EFP */
void RTC_WKUP_IRQHandler(void);
void EXTI4_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Commissioning/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Commissioning/Core/Inc/stm32wbxx_it.h
index adde103e3..5695b8ba4 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Commissioning/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Commissioning/Core/Inc/stm32wbxx_it.h
@@ -73,8 +73,6 @@ void FPU_IRQHandler(void);
void RTC_WKUP_IRQHandler(void);
void EXTI4_IRQHandler(void);
void EXTI1_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_FTD_Coap_Multicast/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_FTD_Coap_Multicast/Core/Inc/stm32wbxx_it.h
index 8e0a412f2..007570152 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_FTD_Coap_Multicast/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_FTD_Coap_Multicast/Core/Inc/stm32wbxx_it.h
@@ -72,8 +72,6 @@ void FPU_IRQHandler(void);
/* USER CODE BEGIN EFP */
void RTC_WKUP_IRQHandler(void);
void EXTI4_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Ota/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Ota/Core/Inc/stm32wbxx_it.h
index a3a535f13..fd0e7d1bc 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Ota/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Ota/Core/Inc/stm32wbxx_it.h
@@ -65,13 +65,13 @@ void C2SEV_PWR_C2H_IRQHandler(void);
void USART1_IRQHandler(void);
void LPUART1_IRQHandler(void);
void PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler(void);
+void IPCC_C1_RX_IRQHandler(void);
+void IPCC_C1_TX_IRQHandler(void);
void HSEM_IRQHandler(void);
void FPU_IRQHandler(void);
/* USER CODE BEGIN EFP */
void RTC_WKUP_IRQHandler(void);
void EXTI4_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_SED_Coap_FreeRTOS/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_SED_Coap_FreeRTOS/Core/Inc/stm32wbxx_it.h
index ad8c2e32d..ee7b20910 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_SED_Coap_FreeRTOS/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_SED_Coap_FreeRTOS/Core/Inc/stm32wbxx_it.h
@@ -69,8 +69,6 @@ void HSEM_IRQHandler(void);
void FPU_IRQHandler(void);
/* USER CODE BEGIN EFP */
void RTC_WKUP_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_SED_Coap_Multicast/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_SED_Coap_Multicast/Core/Inc/stm32wbxx_it.h
index 86bef71a2..5361f2c98 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_SED_Coap_Multicast/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_SED_Coap_Multicast/Core/Inc/stm32wbxx_it.h
@@ -71,8 +71,6 @@ void HSEM_IRQHandler(void);
void FPU_IRQHandler(void);
/* USER CODE BEGIN EFP */
void RTC_WKUP_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Udp/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Udp/Core/Inc/stm32wbxx_it.h
index a3a535f13..fd0e7d1bc 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Udp/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Thread/Thread_Udp/Core/Inc/stm32wbxx_it.h
@@ -65,13 +65,13 @@ void C2SEV_PWR_C2H_IRQHandler(void);
void USART1_IRQHandler(void);
void LPUART1_IRQHandler(void);
void PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler(void);
+void IPCC_C1_RX_IRQHandler(void);
+void IPCC_C1_TX_IRQHandler(void);
void HSEM_IRQHandler(void);
void FPU_IRQHandler(void);
/* USER CODE BEGIN EFP */
void RTC_WKUP_IRQHandler(void);
void EXTI4_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/USB_Device/HID_Standalone/MDK-ARM/HID_Standalone.uvoptx b/Projects/P-NUCLEO-WB55.Nucleo/Applications/USB_Device/HID_Standalone/MDK-ARM/HID_Standalone.uvoptx
new file mode 100644
index 000000000..2f2e3641a
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/USB_Device/HID_Standalone/MDK-ARM/HID_Standalone.uvoptx
@@ -0,0 +1,661 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
+
+ <SchemaVersion>1.0</SchemaVersion>
+
+ <Header>### uVision Project, (C) Keil Software</Header>
+
+ <Extensions>
+ <cExt>*.c</cExt>
+ <aExt>*.s*; *.src; *.a*</aExt>
+ <oExt>*.obj; *.o</oExt>
+ <lExt>*.lib</lExt>
+ <tExt>*.txt; *.h; *.inc</tExt>
+ <pExt>*.plm</pExt>
+ <CppX>*.cpp</CppX>
+ <nMigrate>0</nMigrate>
+ </Extensions>
+
+ <DaveTm>
+ <dwLowDateTime>0</dwLowDateTime>
+ <dwHighDateTime>0</dwHighDateTime>
+ </DaveTm>
+
+ <Target>
+ <TargetName>HID_Standalone</TargetName>
+ <ToolsetNumber>0x4</ToolsetNumber>
+ <ToolsetName>ARM-ADS</ToolsetName>
+ <TargetOption>
+ <CLKADS>8000000</CLKADS>
+ <OPTTT>
+ <gFlags>1</gFlags>
+ <BeepAtEnd>1</BeepAtEnd>
+ <RunSim>0</RunSim>
+ <RunTarget>1</RunTarget>
+ <RunAbUc>0</RunAbUc>
+ </OPTTT>
+ <OPTHX>
+ <HexSelection>1</HexSelection>
+ <FlashByte>65535</FlashByte>
+ <HexRangeLowAddress>0</HexRangeLowAddress>
+ <HexRangeHighAddress>0</HexRangeHighAddress>
+ <HexOffset>0</HexOffset>
+ </OPTHX>
+ <OPTLEX>
+ <PageWidth>79</PageWidth>
+ <PageLength>66</PageLength>
+ <TabStop>8</TabStop>
+ <ListingPath></ListingPath>
+ </OPTLEX>
+ <ListingPage>
+ <CreateCListing>1</CreateCListing>
+ <CreateAListing>1</CreateAListing>
+ <CreateLListing>1</CreateLListing>
+ <CreateIListing>0</CreateIListing>
+ <AsmCond>1</AsmCond>
+ <AsmSymb>1</AsmSymb>
+ <AsmXref>0</AsmXref>
+ <CCond>1</CCond>
+ <CCode>0</CCode>
+ <CListInc>0</CListInc>
+ <CSymb>0</CSymb>
+ <LinkerCodeListing>0</LinkerCodeListing>
+ </ListingPage>
+ <OPTXL>
+ <LMap>1</LMap>
+ <LComments>1</LComments>
+ <LGenerateSymbols>1</LGenerateSymbols>
+ <LLibSym>1</LLibSym>
+ <LLines>1</LLines>
+ <LLocSym>1</LLocSym>
+ <LPubSym>1</LPubSym>
+ <LXref>0</LXref>
+ <LExpSel>0</LExpSel>
+ </OPTXL>
+ <OPTFL>
+ <tvExp>1</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <IsCurrentTarget>1</IsCurrentTarget>
+ </OPTFL>
+ <CpuCode>18</CpuCode>
+ <DebugOpt>
+ <uSim>0</uSim>
+ <uTrg>1</uTrg>
+ <sLdApp>1</sLdApp>
+ <sGomain>1</sGomain>
+ <sRbreak>1</sRbreak>
+ <sRwatch>1</sRwatch>
+ <sRmem>1</sRmem>
+ <sRfunc>1</sRfunc>
+ <sRbox>1</sRbox>
+ <tLdApp>1</tLdApp>
+ <tGomain>1</tGomain>
+ <tRbreak>1</tRbreak>
+ <tRwatch>1</tRwatch>
+ <tRmem>1</tRmem>
+ <tRfunc>1</tRfunc>
+ <tRbox>1</tRbox>
+ <tRtrace>1</tRtrace>
+ <sRSysVw>1</sRSysVw>
+ <tRSysVw>1</tRSysVw>
+ <sRunDeb>0</sRunDeb>
+ <sLrtime>0</sLrtime>
+ <bEvRecOn>1</bEvRecOn>
+ <bSchkAxf>0</bSchkAxf>
+ <bTchkAxf>0</bTchkAxf>
+ <nTsel>6</nTsel>
+ <sDll></sDll>
+ <sDllPa></sDllPa>
+ <sDlgDll></sDlgDll>
+ <sDlgPa></sDlgPa>
+ <sIfile></sIfile>
+ <tDll></tDll>
+ <tDllPa></tDllPa>
+ <tDlgDll></tDlgDll>
+ <tDlgPa></tDlgPa>
+ <tIfile></tIfile>
+ <pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
+ </DebugOpt>
+ <TargetDriverDllRegistry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>ARMRTXEVENTFLAGS</Key>
+ <Name>-L70 -Z18 -C0 -M0 -T1</Name>
+ </SetRegEntry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>DLGTARM</Key>
+ <Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)</Name>
+ </SetRegEntry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>ARMDBGFLAGS</Key>
+ <Name></Name>
+ </SetRegEntry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>DLGUARM</Key>
+ <Name>(105=-1,-1,-1,-1,0)</Name>
+ </SetRegEntry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>UL2CM3</Key>
+ <Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32WB_M4 -FS08000000 -FL0100000 -FP0($$Device:STM32WB55RGVx$CMSIS\Flash\STM32WB_M4.FLM))</Name>
+ </SetRegEntry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>ST-LINKIII-KEIL_SWO</Key>
+ <Name>-U-O142 -O2254 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(6BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32WB_M4.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32WB55RGVx$CMSIS\Flash\STM32WB_M4.FLM)</Name>
+ </SetRegEntry>
+ </TargetDriverDllRegistry>
+ <Breakpoint/>
+ <Tracepoint>
+ <THDelay>0</THDelay>
+ </Tracepoint>
+ <DebugFlag>
+ <trace>0</trace>
+ <periodic>1</periodic>
+ <aLwin>1</aLwin>
+ <aCover>0</aCover>
+ <aSer1>0</aSer1>
+ <aSer2>0</aSer2>
+ <aPa>0</aPa>
+ <viewmode>1</viewmode>
+ <vrSel>0</vrSel>
+ <aSym>0</aSym>
+ <aTbox>0</aTbox>
+ <AscS1>0</AscS1>
+ <AscS2>0</AscS2>
+ <AscS3>0</AscS3>
+ <aSer3>0</aSer3>
+ <eProf>0</eProf>
+ <aLa>0</aLa>
+ <aPa1>0</aPa1>
+ <AscS4>0</AscS4>
+ <aSer4>0</aSer4>
+ <StkLoc>0</StkLoc>
+ <TrcWin>0</TrcWin>
+ <newCpu>0</newCpu>
+ <uProt>0</uProt>
+ </DebugFlag>
+ <LintExecutable></LintExecutable>
+ <LintConfigFile></LintConfigFile>
+ <bLintAuto>0</bLintAuto>
+ <bAutoGenD>0</bAutoGenD>
+ <LntExFlags>0</LntExFlags>
+ <pMisraName></pMisraName>
+ <pszMrule></pszMrule>
+ <pSingCmds></pSingCmds>
+ <pMultCmds></pMultCmds>
+ <pMisraNamep></pMisraNamep>
+ <pszMrulep></pszMrulep>
+ <pSingCmdsp></pSingCmdsp>
+ <pMultCmdsp></pMultCmdsp>
+ </TargetOption>
+ </Target>
+
+ <Group>
+ <GroupName>Application/MDK-ARM</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>1</GroupNumber>
+ <FileNumber>1</FileNumber>
+ <FileType>2</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>startup_stm32wb55xx_cm4.s</PathWithFileName>
+ <FilenameWithoutPath>startup_stm32wb55xx_cm4.s</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Application/User/Core</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>2</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/main.c</PathWithFileName>
+ <FilenameWithoutPath>main.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>3</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/stm32wbxx_hal_msp.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_msp.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>4</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/stm32wbxx_it.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_it.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Application/User/USB_Device/App</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>3</GroupNumber>
+ <FileNumber>5</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../USB_Device/App/usb_device.c</PathWithFileName>
+ <FilenameWithoutPath>usb_device.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>3</GroupNumber>
+ <FileNumber>6</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../USB_Device/App/usbd_desc.c</PathWithFileName>
+ <FilenameWithoutPath>usbd_desc.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Application/User/USB_Device/Target</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>4</GroupNumber>
+ <FileNumber>7</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../USB_Device/Target/usbd_conf.c</PathWithFileName>
+ <FilenameWithoutPath>usbd_conf.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Doc</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>5</GroupNumber>
+ <FileNumber>8</FileNumber>
+ <FileType>5</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../readme.txt</PathWithFileName>
+ <FilenameWithoutPath>readme.txt</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Drivers/BSP/P-NUCLEO-WB55.Nucleo</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>6</GroupNumber>
+ <FileNumber>9</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/BSP/P-NUCLEO-WB55.Nucleo/stm32wbxx_nucleo.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_nucleo.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Drivers/CMSIS</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>7</GroupNumber>
+ <FileNumber>10</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/system_stm32wbxx.c</PathWithFileName>
+ <FilenameWithoutPath>system_stm32wbxx.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Drivers/STM32WBxx_HAL_Driver</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>11</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>12</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cortex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_cortex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>13</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_dma.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>14</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_dma_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>15</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_exti.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_exti.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>16</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_flash.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>17</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_flash_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>18</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_gpio.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_gpio.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>19</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_hsem.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_hsem.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>20</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pcd.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_pcd.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>21</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pcd_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_pcd_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>22</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_pwr.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>23</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_pwr_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>24</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_rcc.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>25</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_rcc_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>26</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_tim.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>27</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_tim_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>28</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_usb.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_ll_usb.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Middlewares/USB_Device_Library</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>29</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c</PathWithFileName>
+ <FilenameWithoutPath>usbd_core.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>30</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c</PathWithFileName>
+ <FilenameWithoutPath>usbd_ctlreq.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>31</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c</PathWithFileName>
+ <FilenameWithoutPath>usbd_hid.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>32</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c</PathWithFileName>
+ <FilenameWithoutPath>usbd_ioreq.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>::CMSIS</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>1</RteFlg>
+ </Group>
+
+</ProjectOpt>
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/USB_Device/HID_Standalone/MDK-ARM/HID_Standalone.uvprojx b/Projects/P-NUCLEO-WB55.Nucleo/Applications/USB_Device/HID_Standalone/MDK-ARM/HID_Standalone.uvprojx
new file mode 100644
index 000000000..38ddf6df2
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/USB_Device/HID_Standalone/MDK-ARM/HID_Standalone.uvprojx
@@ -0,0 +1,607 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
+
+ <SchemaVersion>2.1</SchemaVersion>
+
+ <Header>### uVision Project, (C) Keil Software</Header>
+
+ <Targets>
+ <Target>
+ <TargetName>HID_Standalone</TargetName>
+ <ToolsetNumber>0x4</ToolsetNumber>
+ <ToolsetName>ARM-ADS</ToolsetName>
+ <pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
+ <uAC6>0</uAC6>
+ <TargetOption>
+ <TargetCommonOption>
+ <Device>STM32WB55RGVx</Device>
+ <Vendor>STMicroelectronics</Vendor>
+ <PackID>Keil.STM32WBxx_DFP.1.1.0</PackID>
+ <PackURL>http://www.keil.com/pack</PackURL>
+ <Cpu>IROM(0x08000000-0x807FFFF) IRAM(0x20000000-0x2002FFFF) IRAM_SHARED(0x20030000-0x20037FFF) CLOCK(8000000) FPU2 CPUTYPE("Cortex-M4")</Cpu>
+ <FlashUtilSpec></FlashUtilSpec>
+ <StartupFile></StartupFile>
+ <FlashDriverDll></FlashDriverDll>
+ <DeviceId></DeviceId>
+ <RegisterFile></RegisterFile>
+ <MemoryEnv></MemoryEnv>
+ <Cmp></Cmp>
+ <Asm></Asm>
+ <Linker></Linker>
+ <OHString></OHString>
+ <InfinionOptionDll></InfinionOptionDll>
+ <SLE66CMisc></SLE66CMisc>
+ <SLE66AMisc></SLE66AMisc>
+ <SLE66LinkerMisc></SLE66LinkerMisc>
+ <SFDFile>$$Device:STM32WB55RGVx$CMSIS\SVD\STM32WB0xx_v1r0.svd</SFDFile>
+ <bCustSvd>0</bCustSvd>
+ <UseEnv>0</UseEnv>
+ <BinPath></BinPath>
+ <IncludePath></IncludePath>
+ <LibPath></LibPath>
+ <RegisterFilePath></RegisterFilePath>
+ <DBRegisterFilePath></DBRegisterFilePath>
+ <TargetStatus>
+ <Error>0</Error>
+ <ExitCodeStop>0</ExitCodeStop>
+ <ButtonStop>0</ButtonStop>
+ <NotGenerated>0</NotGenerated>
+ <InvalidFlash>1</InvalidFlash>
+ </TargetStatus>
+ <OutputDirectory>HID_Standalone\Exe\</OutputDirectory>
+ <OutputName>HID_Standalone</OutputName>
+ <CreateExecutable>1</CreateExecutable>
+ <CreateLib>0</CreateLib>
+ <CreateHexFile>1</CreateHexFile>
+ <DebugInformation>1</DebugInformation>
+ <BrowseInformation>1</BrowseInformation>
+ <ListingPath></ListingPath>
+ <HexFormatSelection>1</HexFormatSelection>
+ <Merge32K>0</Merge32K>
+ <CreateBatchFile>0</CreateBatchFile>
+ <BeforeCompile>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name></UserProg1Name>
+ <UserProg2Name></UserProg2Name>
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopU1X>0</nStopU1X>
+ <nStopU2X>0</nStopU2X>
+ </BeforeCompile>
+ <BeforeMake>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name></UserProg1Name>
+ <UserProg2Name></UserProg2Name>
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopB1X>0</nStopB1X>
+ <nStopB2X>0</nStopB2X>
+ </BeforeMake>
+ <AfterMake>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name></UserProg1Name>
+ <UserProg2Name></UserProg2Name>
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopA1X>0</nStopA1X>
+ <nStopA2X>0</nStopA2X>
+ </AfterMake>
+ <SelectedForBatchBuild>0</SelectedForBatchBuild>
+ <SVCSIdString></SVCSIdString>
+ </TargetCommonOption>
+ <CommonProperty>
+ <UseCPPCompiler>0</UseCPPCompiler>
+ <RVCTCodeConst>0</RVCTCodeConst>
+ <RVCTZI>0</RVCTZI>
+ <RVCTOtherData>0</RVCTOtherData>
+ <ModuleSelection>0</ModuleSelection>
+ <IncludeInBuild>1</IncludeInBuild>
+ <AlwaysBuild>0</AlwaysBuild>
+ <GenerateAssemblyFile>0</GenerateAssemblyFile>
+ <AssembleAssemblyFile>0</AssembleAssemblyFile>
+ <PublicsOnly>0</PublicsOnly>
+ <StopOnExitCode>3</StopOnExitCode>
+ <CustomArgument></CustomArgument>
+ <IncludeLibraryModules></IncludeLibraryModules>
+ <ComprImg>0</ComprImg>
+ </CommonProperty>
+ <DllOption>
+ <SimDllName>SARMCM3.DLL</SimDllName>
+ <SimDllArguments>-REMAP -MPU</SimDllArguments>
+ <SimDlgDll>DCM.DLL</SimDlgDll>
+ <SimDlgDllArguments>-pCM4</SimDlgDllArguments>
+ <TargetDllName>SARMCM3.DLL</TargetDllName>
+ <TargetDllArguments>-MPU</TargetDllArguments>
+ <TargetDlgDll>TCM.DLL</TargetDlgDll>
+ <TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
+ </DllOption>
+ <DebugOption>
+ <OPTHX>
+ <HexSelection>1</HexSelection>
+ <HexRangeLowAddress>0</HexRangeLowAddress>
+ <HexRangeHighAddress>0</HexRangeHighAddress>
+ <HexOffset>0</HexOffset>
+ <Oh166RecLen>16</Oh166RecLen>
+ </OPTHX>
+ </DebugOption>
+ <Utilities>
+ <Flash1>
+ <UseTargetDll>1</UseTargetDll>
+ <UseExternalTool>0</UseExternalTool>
+ <RunIndependent>0</RunIndependent>
+ <UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
+ <Capability>1</Capability>
+ <DriverSelection>4107</DriverSelection>
+ </Flash1>
+ <bUseTDR>1</bUseTDR>
+ <Flash2>STLink\ST-LINKIII-KEIL_SWO.dll</Flash2>
+ <Flash3></Flash3>
+ <Flash4></Flash4>
+ <pFcarmOut></pFcarmOut>
+ <pFcarmGrp></pFcarmGrp>
+ <pFcArmRoot></pFcArmRoot>
+ <FcArmLst>0</FcArmLst>
+ </Utilities>
+ <TargetArmAds>
+ <ArmAdsMisc>
+ <GenerateListings>0</GenerateListings>
+ <asHll>1</asHll>
+ <asAsm>1</asAsm>
+ <asMacX>1</asMacX>
+ <asSyms>1</asSyms>
+ <asFals>1</asFals>
+ <asDbgD>1</asDbgD>
+ <asForm>1</asForm>
+ <ldLst>0</ldLst>
+ <ldmm>1</ldmm>
+ <ldXref>1</ldXref>
+ <BigEnd>0</BigEnd>
+ <AdsALst>1</AdsALst>
+ <AdsACrf>1</AdsACrf>
+ <AdsANop>0</AdsANop>
+ <AdsANot>0</AdsANot>
+ <AdsLLst>1</AdsLLst>
+ <AdsLmap>1</AdsLmap>
+ <AdsLcgr>1</AdsLcgr>
+ <AdsLsym>1</AdsLsym>
+ <AdsLszi>1</AdsLszi>
+ <AdsLtoi>1</AdsLtoi>
+ <AdsLsun>1</AdsLsun>
+ <AdsLven>1</AdsLven>
+ <AdsLsxf>1</AdsLsxf>
+ <RvctClst>0</RvctClst>
+ <GenPPlst>0</GenPPlst>
+ <AdsCpuType>"Cortex-M4"</AdsCpuType>
+ <RvctDeviceName></RvctDeviceName>
+ <mOS>0</mOS>
+ <uocRom>0</uocRom>
+ <uocRam>0</uocRam>
+ <hadIROM>1</hadIROM>
+ <hadIRAM>1</hadIRAM>
+ <hadXRAM>0</hadXRAM>
+ <uocXRam>0</uocXRam>
+ <RvdsVP>2</RvdsVP>
+ <RvdsMve>0</RvdsMve>
+ <hadIRAM2>0</hadIRAM2>
+ <hadIROM2>0</hadIROM2>
+ <StupSel>8</StupSel>
+ <useUlib>1</useUlib>
+ <EndSel>0</EndSel>
+ <uLtcg>0</uLtcg>
+ <nSecure>0</nSecure>
+ <RoSelD>3</RoSelD>
+ <RwSelD>3</RwSelD>
+ <CodeSel>0</CodeSel>
+ <OptFeed>0</OptFeed>
+ <NoZi1>0</NoZi1>
+ <NoZi2>0</NoZi2>
+ <NoZi3>0</NoZi3>
+ <NoZi4>0</NoZi4>
+ <NoZi5>0</NoZi5>
+ <Ro1Chk>0</Ro1Chk>
+ <Ro2Chk>0</Ro2Chk>
+ <Ro3Chk>0</Ro3Chk>
+ <Ir1Chk>1</Ir1Chk>
+ <Ir2Chk>0</Ir2Chk>
+ <Ra1Chk>0</Ra1Chk>
+ <Ra2Chk>0</Ra2Chk>
+ <Ra3Chk>0</Ra3Chk>
+ <Im1Chk>1</Im1Chk>
+ <Im2Chk>0</Im2Chk>
+ <OnChipMemories>
+ <Ocm1>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm1>
+ <Ocm2>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm2>
+ <Ocm3>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm3>
+ <Ocm4>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm4>
+ <Ocm5>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm5>
+ <Ocm6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm6>
+ <IRAM>
+ <Type>0</Type>
+ <StartAddress>0x20000000</StartAddress>
+ <Size>0x30000</Size>
+ </IRAM>
+ <IROM>
+ <Type>1</Type>
+ <StartAddress>0x8000000</StartAddress>
+ <Size>0x80000</Size>
+ </IROM>
+ <XRAM>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </XRAM>
+ <OCR_RVCT1>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT1>
+ <OCR_RVCT2>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT2>
+ <OCR_RVCT3>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT3>
+ <OCR_RVCT4>
+ <Type>1</Type>
+ <StartAddress>0x8000000</StartAddress>
+ <Size>0x80000</Size>
+ </OCR_RVCT4>
+ <OCR_RVCT5>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT5>
+ <OCR_RVCT6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT6>
+ <OCR_RVCT7>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT7>
+ <OCR_RVCT8>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT8>
+ <OCR_RVCT9>
+ <Type>0</Type>
+ <StartAddress>0x20000000</StartAddress>
+ <Size>0x30000</Size>
+ </OCR_RVCT9>
+ <OCR_RVCT10>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT10>
+ </OnChipMemories>
+ <RvctStartVector></RvctStartVector>
+ </ArmAdsMisc>
+ <Cads>
+ <interw>1</interw>
+ <Optim>7</Optim>
+ <oTime>0</oTime>
+ <SplitLS>0</SplitLS>
+ <OneElfS>1</OneElfS>
+ <Strict>0</Strict>
+ <EnumInt>0</EnumInt>
+ <PlainCh>0</PlainCh>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <wLevel>2</wLevel>
+ <uThumb>0</uThumb>
+ <uSurpInc>0</uSurpInc>
+ <uC99>1</uC99>
+ <uGnu>0</uGnu>
+ <useXO>0</useXO>
+ <v6Lang>5</v6Lang>
+ <v6LangP>3</v6LangP>
+ <vShortEn>1</vShortEn>
+ <vShortWch>1</vShortWch>
+ <v6Lto>0</v6Lto>
+ <v6WtE>0</v6WtE>
+ <v6Rtti>0</v6Rtti>
+ <VariousControls>
+ <MiscControls></MiscControls>
+ <Define>USE_HAL_DRIVER,STM32WB55xx</Define>
+ <Undefine></Undefine>
+ <IncludePath>../USB_Device/App;../USB_Device/Target;../Core/Inc;../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc;../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc/Legacy;../../../../../../Middlewares/ST/STM32_USB_Device_Library/Core/Inc;../../../../../../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc;../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include;../../../../../../Drivers/BSP/P-NUCLEO-WB55.Nucleo</IncludePath>
+ </VariousControls>
+ </Cads>
+ <Aads>
+ <interw>1</interw>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <thumb>0</thumb>
+ <SplitLS>0</SplitLS>
+ <SwStkChk>0</SwStkChk>
+ <NoWarn>0</NoWarn>
+ <uSurpInc>0</uSurpInc>
+ <useXO>0</useXO>
+ <uClangAs>0</uClangAs>
+ <VariousControls>
+ <MiscControls></MiscControls>
+ <Define></Define>
+ <Undefine></Undefine>
+ <IncludePath></IncludePath>
+ </VariousControls>
+ </Aads>
+ <LDads>
+ <umfTarg>0</umfTarg>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <noStLib>0</noStLib>
+ <RepFail>1</RepFail>
+ <useFile>0</useFile>
+ <TextAddressRange>0x08000000</TextAddressRange>
+ <DataAddressRange>0x20000000</DataAddressRange>
+ <pXoBase></pXoBase>
+ <ScatterFile>.\stm32wb55xx_flash_cm4.sct</ScatterFile>
+ <IncludeLibs></IncludeLibs>
+ <IncludeLibsPath></IncludeLibsPath>
+ <Misc>--diag_suppress L6314W</Misc>
+ <LinkerInputFile></LinkerInputFile>
+ <DisabledWarnings></DisabledWarnings>
+ </LDads>
+ </TargetArmAds>
+ </TargetOption>
+ <Groups>
+ <Group>
+ <GroupName>Application/MDK-ARM</GroupName>
+ <Files>
+ <File>
+ <FileName>startup_stm32wb55xx_cm4.s</FileName>
+ <FileType>2</FileType>
+ <FilePath>startup_stm32wb55xx_cm4.s</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Application/User/Core</GroupName>
+ <Files>
+ <File>
+ <FileName>main.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/main.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_msp.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/stm32wbxx_hal_msp.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_it.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/stm32wbxx_it.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Application/User/USB_Device/App</GroupName>
+ <Files>
+ <File>
+ <FileName>usb_device.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../USB_Device/App/usb_device.c</FilePath>
+ </File>
+ <File>
+ <FileName>usbd_desc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../USB_Device/App/usbd_desc.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Application/User/USB_Device/Target</GroupName>
+ <Files>
+ <File>
+ <FileName>usbd_conf.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../USB_Device/Target/usbd_conf.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Doc</GroupName>
+ <Files>
+ <File>
+ <FileName>readme.txt</FileName>
+ <FileType>5</FileType>
+ <FilePath>../readme.txt</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers/BSP/P-NUCLEO-WB55.Nucleo</GroupName>
+ <Files>
+ <File>
+ <FileName>stm32wbxx_nucleo.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/BSP/P-NUCLEO-WB55.Nucleo/stm32wbxx_nucleo.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers/CMSIS</GroupName>
+ <Files>
+ <File>
+ <FileName>system_stm32wbxx.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/system_stm32wbxx.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers/STM32WBxx_HAL_Driver</GroupName>
+ <Files>
+ <File>
+ <FileName>stm32wbxx_hal.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_cortex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cortex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_dma.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_dma_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_exti.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_exti.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_flash.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_flash_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_gpio.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_gpio.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_hsem.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_hsem.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_pcd.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pcd.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_pcd_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pcd_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_pwr.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_pwr_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_rcc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_rcc_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_tim.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_tim_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_ll_usb.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_usb.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Middlewares/USB_Device_Library</GroupName>
+ <Files>
+ <File>
+ <FileName>usbd_core.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c</FilePath>
+ </File>
+ <File>
+ <FileName>usbd_ctlreq.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c</FilePath>
+ </File>
+ <File>
+ <FileName>usbd_hid.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c</FilePath>
+ </File>
+ <File>
+ <FileName>usbd_ioreq.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>::CMSIS</GroupName>
+ </Group>
+ </Groups>
+ </Target>
+ </Targets>
+
+ <RTE>
+ <apis/>
+ <components>
+ <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.2.0" condition="ARMv6_7_8-M Device">
+ <package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.5.1"/>
+ <targetInfos>
+ <targetInfo name="HID_Standalone"/>
+ </targetInfos>
+ </component>
+ </components>
+ <files/>
+ </RTE>
+
+</Project>
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/USB_Device/HID_Standalone/MDK-ARM/startup_stm32wb55xx_cm4.s b/Projects/P-NUCLEO-WB55.Nucleo/Applications/USB_Device/HID_Standalone/MDK-ARM/startup_stm32wb55xx_cm4.s
new file mode 100644
index 000000000..61fc19a49
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/USB_Device/HID_Standalone/MDK-ARM/startup_stm32wb55xx_cm4.s
@@ -0,0 +1,368 @@
+;******************************************************************************
+;* File Name : startup_stm32wb55xx_cm4.s
+;* Author : MCD Application Team
+;* Description : STM32WB55xx devices vector table for MDK-ARM toolchain.
+;* This module performs:
+;* - Set the initial SP
+;* - Set the initial PC == Reset_Handler
+;* - Set the vector table entries with the exceptions ISR address
+;* - Branches to __main in the C library (which eventually
+;* calls main()).
+;* After Reset the CortexM4 processor is in Thread mode,
+;* priority is Privileged, and the Stack is set to Main.
+;* <<< Use Configuration Wizard in Context Menu >>>
+;******************************************************************************
+;* @attention
+;*
+;* Copyright (c) 2019 STMicroelectronics. All rights reserved.
+;*
+;* This software component is licensed by ST under Apache License, Version 2.0,
+;* the "License"; You may not use this file except in compliance with the
+;* License. You may obtain a copy of the License at:
+;* opensource.org/licenses/Apache-2.0
+;*
+;******************************************************************************
+
+; Amount of memory (in bytes) allocated for Stack
+; Tailor this value to your application needs
+; <h> Stack Configuration
+; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; </h>
+
+Stack_Size EQU 0x00000400
+
+ AREA STACK, NOINIT, READWRITE, ALIGN=3
+Stack_Mem SPACE Stack_Size
+__initial_sp
+
+
+; <h> Heap Configuration
+; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; </h>
+
+Heap_Size EQU 0x00000200
+
+ AREA HEAP, NOINIT, READWRITE, ALIGN=3
+__heap_base
+Heap_Mem SPACE Heap_Size
+__heap_limit
+
+ PRESERVE8
+ THUMB
+
+
+; Vector Table Mapped to Address 0 at Reset
+ AREA RESET, DATA, READONLY
+ EXPORT __Vectors
+ EXPORT __Vectors_End
+ EXPORT __Vectors_Size
+
+__Vectors DCD __initial_sp ; Top of Stack
+ 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 0 ; Reserved
+ 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_PVM_IRQHandler ; PVD and PVM detector
+ DCD TAMP_STAMP_LSECSS_IRQHandler ; RTC Tamper and TimeStamp Interrupts and LSECSS Interrupts
+ DCD RTC_WKUP_IRQHandler ; RTC Wakeup Interrupt
+ DCD FLASH_IRQHandler ; FLASH global Interrupt
+ DCD RCC_IRQHandler ; RCC Interrupt
+ DCD EXTI0_IRQHandler ; EXTI Line 0 Interrupt
+ DCD EXTI1_IRQHandler ; EXTI Line 1 Interrupt
+ DCD EXTI2_IRQHandler ; EXTI Line 2 Interrupt
+ DCD EXTI3_IRQHandler ; EXTI Line 3 Interrup
+ DCD EXTI4_IRQHandler ; EXTI Line 4 Interrupt
+ DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 Interrupt
+ DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 Interrupt
+ DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 Interrupt
+ DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 Interrupt
+ DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 Interrupt
+ DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 Interrupt
+ DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 Interrupt
+ DCD ADC1_IRQHandler ; ADC1 Interrupt
+ DCD USB_HP_IRQHandler ; USB High Priority Interrupt
+ DCD USB_LP_IRQHandler ; USB Low Priority Interrupt
+ DCD C2SEV_PWR_C2H_IRQHandler ; CPU M0+ SEV Interrupt
+ DCD COMP_IRQHandler ; COMP1 and COMP2 Interrupts
+ DCD EXTI9_5_IRQHandler ; EXTI Lines [9:5] Interrupt
+ DCD TIM1_BRK_IRQHandler ; TIM1 Break Interrupt
+ DCD TIM1_UP_TIM16_IRQHandler ; TIM1 Update and TIM16 global Interrupts
+ DCD TIM1_TRG_COM_TIM17_IRQHandler ; TIM1 Trigger and Communication and TIM17 global Interrupts
+ DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare Interrupt
+ DCD TIM2_IRQHandler ; TIM2 Global Interrupt
+ DCD PKA_IRQHandler ; PKA Interrupt
+ DCD I2C1_EV_IRQHandler ; I2C1 Event Interrupt
+ DCD I2C1_ER_IRQHandler ; I2C1 Error Interrupt
+ DCD I2C3_EV_IRQHandler ; I2C3 Event Interrupt
+ DCD I2C3_ER_IRQHandler ; I2C3 Error Interrupt
+ DCD SPI1_IRQHandler ; SPI1 Interrupt
+ DCD SPI2_IRQHandler ; SPI2 Interrupt
+ DCD USART1_IRQHandler ; USART1 Interrupt
+ DCD LPUART1_IRQHandler ; LPUART1 Interrupt
+ DCD SAI1_IRQHandler ; SAI Interrupt
+ DCD TSC_IRQHandler ; TSC Interrupt
+ DCD EXTI15_10_IRQHandler ; EXTI Lines1[15:10 ]Interrupts
+ DCD RTC_Alarm_IRQHandler ; RTC Alarms (A and B) Interrupt
+ DCD CRS_IRQHandler ; CRS interrupt
+ DCD PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler ; WKUP Interrupt from PWR
+ DCD IPCC_C1_RX_IRQHandler ; IPCC CPU1 RX occupied interrupt
+ DCD IPCC_C1_TX_IRQHandler ; IPCC CPU1 RX free interrupt
+ DCD HSEM_IRQHandler ; HSEM0 Interrupt
+ DCD LPTIM1_IRQHandler ; LPTIM1 Interrupt
+ DCD LPTIM2_IRQHandler ; LPTIM2 Interrupt
+ DCD LCD_IRQHandler ; LCD Interrupt
+ DCD QUADSPI_IRQHandler ; QUADSPI Interrupt
+ DCD AES1_IRQHandler ; AES1 Interrupt
+ DCD AES2_IRQHandler ; AES2 Interrupt
+ DCD RNG_IRQHandler ; RNG1 Interrupt
+ DCD FPU_IRQHandler ; FPU Interrupt
+ DCD DMA2_Channel1_IRQHandler ; DMA2 Channel 1 Interrupt
+ DCD DMA2_Channel2_IRQHandler ; DMA2 Channel 2 Interrupt
+ DCD DMA2_Channel3_IRQHandler ; DMA2 Channel 3 Interrupt
+ DCD DMA2_Channel4_IRQHandler ; DMA2 Channel 4 Interrupt
+ DCD DMA2_Channel5_IRQHandler ; DMA2 Channel 5 Interrupt
+ DCD DMA2_Channel6_IRQHandler ; DMA2 Channel 6 Interrupt
+ DCD DMA2_Channel7_IRQHandler ; DMA2 Channel 7 Interrupt
+ DCD DMAMUX1_OVR_IRQHandler ; DMAMUX overrun Interrupt
+
+__Vectors_End
+
+__Vectors_Size EQU __Vectors_End - __Vectors
+
+ AREA |.text|, CODE, READONLY
+
+; Reset handler
+Reset_Handler PROC
+ EXPORT Reset_Handler [WEAK]
+ IMPORT SystemInit
+ IMPORT __main
+
+ LDR R0, =SystemInit
+ BLX R0
+ LDR R0, =__main
+ BX R0
+ ENDP
+
+; Dummy Exception Handlers (infinite loops which can be modified)
+
+NMI_Handler PROC
+ EXPORT NMI_Handler [WEAK]
+ B .
+ ENDP
+HardFault_Handler\
+ PROC
+ EXPORT HardFault_Handler [WEAK]
+ B .
+ ENDP
+MemManage_Handler\
+ PROC
+ EXPORT MemManage_Handler [WEAK]
+ B .
+ ENDP
+BusFault_Handler\
+ PROC
+ EXPORT BusFault_Handler [WEAK]
+ B .
+ ENDP
+UsageFault_Handler\
+ PROC
+ EXPORT UsageFault_Handler [WEAK]
+ B .
+ ENDP
+SVC_Handler PROC
+ EXPORT SVC_Handler [WEAK]
+ B .
+ ENDP
+DebugMon_Handler\
+ PROC
+ EXPORT DebugMon_Handler [WEAK]
+ B .
+ ENDP
+PendSV_Handler PROC
+ EXPORT PendSV_Handler [WEAK]
+ B .
+ ENDP
+SysTick_Handler PROC
+ EXPORT SysTick_Handler [WEAK]
+ B .
+ ENDP
+
+Default_Handler PROC
+
+ EXPORT WWDG_IRQHandler [WEAK]
+ EXPORT PVD_PVM_IRQHandler [WEAK]
+ EXPORT TAMP_STAMP_LSECSS_IRQHandler [WEAK]
+ EXPORT RTC_WKUP_IRQHandler [WEAK]
+ EXPORT FLASH_IRQHandler [WEAK]
+ EXPORT RCC_IRQHandler [WEAK]
+ EXPORT EXTI0_IRQHandler [WEAK]
+ EXPORT EXTI1_IRQHandler [WEAK]
+ EXPORT EXTI2_IRQHandler [WEAK]
+ EXPORT EXTI3_IRQHandler [WEAK]
+ EXPORT EXTI4_IRQHandler [WEAK]
+ EXPORT DMA1_Channel1_IRQHandler [WEAK]
+ EXPORT DMA1_Channel2_IRQHandler [WEAK]
+ EXPORT DMA1_Channel3_IRQHandler [WEAK]
+ EXPORT DMA1_Channel4_IRQHandler [WEAK]
+ EXPORT DMA1_Channel5_IRQHandler [WEAK]
+ EXPORT DMA1_Channel6_IRQHandler [WEAK]
+ EXPORT DMA1_Channel7_IRQHandler [WEAK]
+ EXPORT ADC1_IRQHandler [WEAK]
+ EXPORT USB_HP_IRQHandler [WEAK]
+ EXPORT USB_LP_IRQHandler [WEAK]
+ EXPORT C2SEV_PWR_C2H_IRQHandler [WEAK]
+ EXPORT COMP_IRQHandler [WEAK]
+ EXPORT EXTI9_5_IRQHandler [WEAK]
+ EXPORT TIM1_BRK_IRQHandler [WEAK]
+ EXPORT TIM1_UP_TIM16_IRQHandler [WEAK]
+ EXPORT TIM1_TRG_COM_TIM17_IRQHandler [WEAK]
+ EXPORT TIM1_CC_IRQHandler [WEAK]
+ EXPORT TIM2_IRQHandler [WEAK]
+ EXPORT PKA_IRQHandler [WEAK]
+ EXPORT I2C1_EV_IRQHandler [WEAK]
+ EXPORT I2C1_ER_IRQHandler [WEAK]
+ EXPORT I2C3_EV_IRQHandler [WEAK]
+ EXPORT I2C3_ER_IRQHandler [WEAK]
+ EXPORT SPI1_IRQHandler [WEAK]
+ EXPORT SPI2_IRQHandler [WEAK]
+ EXPORT USART1_IRQHandler [WEAK]
+ EXPORT LPUART1_IRQHandler [WEAK]
+ EXPORT SAI1_IRQHandler [WEAK]
+ EXPORT TSC_IRQHandler [WEAK]
+ EXPORT EXTI15_10_IRQHandler [WEAK]
+ EXPORT RTC_Alarm_IRQHandler [WEAK]
+ EXPORT CRS_IRQHandler [WEAK]
+ EXPORT PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler [WEAK]
+ EXPORT IPCC_C1_RX_IRQHandler [WEAK]
+ EXPORT IPCC_C1_TX_IRQHandler [WEAK]
+ EXPORT HSEM_IRQHandler [WEAK]
+ EXPORT LPTIM1_IRQHandler [WEAK]
+ EXPORT LPTIM2_IRQHandler [WEAK]
+ EXPORT LCD_IRQHandler [WEAK]
+ EXPORT QUADSPI_IRQHandler [WEAK]
+ EXPORT AES1_IRQHandler [WEAK]
+ EXPORT AES2_IRQHandler [WEAK]
+ EXPORT RNG_IRQHandler [WEAK]
+ EXPORT FPU_IRQHandler [WEAK]
+ EXPORT DMA2_Channel1_IRQHandler [WEAK]
+ EXPORT DMA2_Channel2_IRQHandler [WEAK]
+ EXPORT DMA2_Channel3_IRQHandler [WEAK]
+ EXPORT DMA2_Channel4_IRQHandler [WEAK]
+ EXPORT DMA2_Channel5_IRQHandler [WEAK]
+ EXPORT DMA2_Channel6_IRQHandler [WEAK]
+ EXPORT DMA2_Channel7_IRQHandler [WEAK]
+ EXPORT DMAMUX1_OVR_IRQHandler [WEAK]
+
+WWDG_IRQHandler
+PVD_PVM_IRQHandler
+TAMP_STAMP_LSECSS_IRQHandler
+RTC_WKUP_IRQHandler
+FLASH_IRQHandler
+RCC_IRQHandler
+EXTI0_IRQHandler
+EXTI1_IRQHandler
+EXTI2_IRQHandler
+EXTI3_IRQHandler
+EXTI4_IRQHandler
+DMA1_Channel1_IRQHandler
+DMA1_Channel2_IRQHandler
+DMA1_Channel3_IRQHandler
+DMA1_Channel4_IRQHandler
+DMA1_Channel5_IRQHandler
+DMA1_Channel6_IRQHandler
+DMA1_Channel7_IRQHandler
+ADC1_IRQHandler
+USB_HP_IRQHandler
+USB_LP_IRQHandler
+C2SEV_PWR_C2H_IRQHandler
+COMP_IRQHandler
+EXTI9_5_IRQHandler
+TIM1_BRK_IRQHandler
+TIM1_UP_TIM16_IRQHandler
+TIM1_TRG_COM_TIM17_IRQHandler
+TIM1_CC_IRQHandler
+TIM2_IRQHandler
+PKA_IRQHandler
+I2C1_EV_IRQHandler
+I2C1_ER_IRQHandler
+I2C3_EV_IRQHandler
+I2C3_ER_IRQHandler
+SPI1_IRQHandler
+SPI2_IRQHandler
+USART1_IRQHandler
+LPUART1_IRQHandler
+SAI1_IRQHandler
+TSC_IRQHandler
+EXTI15_10_IRQHandler
+RTC_Alarm_IRQHandler
+CRS_IRQHandler
+PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler
+IPCC_C1_RX_IRQHandler
+IPCC_C1_TX_IRQHandler
+HSEM_IRQHandler
+LPTIM1_IRQHandler
+LPTIM2_IRQHandler
+LCD_IRQHandler
+QUADSPI_IRQHandler
+AES1_IRQHandler
+AES2_IRQHandler
+RNG_IRQHandler
+FPU_IRQHandler
+DMA2_Channel1_IRQHandler
+DMA2_Channel2_IRQHandler
+DMA2_Channel3_IRQHandler
+DMA2_Channel4_IRQHandler
+DMA2_Channel5_IRQHandler
+DMA2_Channel6_IRQHandler
+DMA2_Channel7_IRQHandler
+DMAMUX1_OVR_IRQHandler
+
+ B .
+
+ ENDP
+
+ ALIGN
+
+;*******************************************************************************
+; User Stack and Heap initialization
+;*******************************************************************************
+ IF :DEF:__MICROLIB
+
+ EXPORT __initial_sp
+ EXPORT __heap_base
+ EXPORT __heap_limit
+
+ ELSE
+
+ IMPORT __use_two_region_memory
+ EXPORT __user_initial_stackheap
+
+__user_initial_stackheap
+
+ LDR R0, = Heap_Mem
+ LDR R1, =(Stack_Mem + Stack_Size)
+ LDR R2, = (Heap_Mem + Heap_Size)
+ LDR R3, = Stack_Mem
+ BX LR
+
+ ALIGN
+
+ ENDIF
+
+ END
+
+;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE*****
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/USB_Device/HID_Standalone/MDK-ARM/stm32wb55xx_flash_cm4.sct b/Projects/P-NUCLEO-WB55.Nucleo/Applications/USB_Device/HID_Standalone/MDK-ARM/stm32wb55xx_flash_cm4.sct
new file mode 100644
index 000000000..63845c07b
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/USB_Device/HID_Standalone/MDK-ARM/stm32wb55xx_flash_cm4.sct
@@ -0,0 +1,21 @@
+; *************************************************************
+; *** Scatter-Loading Description File generated by uVision ***
+; *************************************************************
+
+LR_IROM1 0x08000000 0x00080000 { ; load region size_region
+ ER_IROM1 0x08000000 0x00080000 { ; load address = execution address
+ *.o (RESET, +First)
+ *(InRoot$$Sections)
+ .ANY (+RO)
+ }
+ RW_IRAM1 0x20000004 0x2FFFC { ; RW data
+ .ANY (+RW +ZI)
+ }
+ RW_RAM_SHARED 0x20030000 0x2800 { ; RW data
+ *(MAPPING_TABLE)
+ *(MB_MEM1)
+ *(MB_MEM2)
+ }
+ }
+
+
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_MeterId_Client_Router/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_MeterId_Client_Router/Core/Inc/stm32wbxx_it.h
index ab02c8535..e66cafbb9 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_MeterId_Client_Router/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_MeterId_Client_Router/Core/Inc/stm32wbxx_it.h
@@ -72,8 +72,6 @@ void FPU_IRQHandler(void);
/* USER CODE BEGIN EFP */
void RTC_WKUP_IRQHandler(void);
void EXTI4_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_MeterId_Server_Coord/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_MeterId_Server_Coord/Core/Inc/stm32wbxx_it.h
index ab02c8535..e66cafbb9 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_MeterId_Server_Coord/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_MeterId_Server_Coord/Core/Inc/stm32wbxx_it.h
@@ -72,8 +72,6 @@ void FPU_IRQHandler(void);
/* USER CODE BEGIN EFP */
void RTC_WKUP_IRQHandler(void);
void EXTI4_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OTA_Server_Coord/STM32_WPAN/App/app_zigbee.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OTA_Server_Coord/STM32_WPAN/App/app_zigbee.c
index 90532dd2a..e7aa13a6c 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OTA_Server_Coord/STM32_WPAN/App/app_zigbee.c
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OTA_Server_Coord/STM32_WPAN/App/app_zigbee.c
@@ -1074,7 +1074,7 @@ static void APP_ZIGBEE_SW1_Process(void)
APP_DBG("[OTA] M4 application firmware upgrade available.\n");
/* Update OTA server context file type */
- OTA_server_info.ctx.file_type = IMAGE_TYPE_FW_APP;
+ OTA_server_info.ctx.file_type = fileType_APP ;
OTA_server_info.ctx.base_address = FUOTA_APP_FW_BINARY_ADDRESS;
OTA_server_info.ctx.magic_keyword = FUOTA_MAGIC_KEYWORD_APP;
OTA_server_info.ctx.file_version = FILE_VERSION_FW_APP;
@@ -1110,7 +1110,7 @@ static void APP_ZIGBEE_SW2_Process(void)
APP_DBG("[OTA] M0 wireless coprocessor firmware upgrade available.\n");
/* Update OTA server context file type */
- OTA_server_info.ctx.file_type = IMAGE_TYPE_FW_COPRO_WIRELESS;
+ OTA_server_info.ctx.file_type = fileType_COPRO_WIRELESS;
OTA_server_info.ctx.base_address = FUOTA_COPRO_FW_BINARY_ADDRESS;
OTA_server_info.ctx.magic_keyword = FUOTA_MAGIC_KEYWORD_COPRO_WIRELESS;
OTA_server_info.ctx.file_version = FILE_VERSION_FW_COPRO_WIRELESS;
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Distrib/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Distrib/Core/Inc/stm32wbxx_it.h
index ab02c8535..e66cafbb9 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Distrib/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Distrib/Core/Inc/stm32wbxx_it.h
@@ -72,8 +72,6 @@ void FPU_IRQHandler(void);
/* USER CODE BEGIN EFP */
void RTC_WKUP_IRQHandler(void);
void EXTI4_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router/Core/Inc/stm32wbxx_it.h
index ab02c8535..e66cafbb9 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router/Core/Inc/stm32wbxx_it.h
@@ -72,8 +72,6 @@ void FPU_IRQHandler(void);
/* USER CODE BEGIN EFP */
void RTC_WKUP_IRQHandler(void);
void EXTI4_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/FreeRTOSConfig.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/FreeRTOSConfig.h
new file mode 100644
index 000000000..e36a3fcf9
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/FreeRTOSConfig.h
@@ -0,0 +1,171 @@
+/* USER CODE BEGIN Header */
+/*
+ * FreeRTOS Kernel V10.0.1
+ * Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * http://www.FreeRTOS.org
+ * http://aws.amazon.com/freertos
+ *
+ * 1 tab == 4 spaces!
+ */
+/* USER CODE END Header */
+
+#ifndef FREERTOS_CONFIG_H
+#define FREERTOS_CONFIG_H
+
+/*-----------------------------------------------------------
+ * Application specific definitions.
+ *
+ * These definitions should be adjusted for your particular hardware and
+ * application requirements.
+ *
+ * These parameters and more are described within the 'configuration' section of the
+ * FreeRTOS API documentation available on the FreeRTOS.org web site.
+ *
+ * See http://www.freertos.org/a00110.html
+ *----------------------------------------------------------*/
+
+/* USER CODE BEGIN Includes */
+/* Section where include file can be added */
+/* USER CODE END Includes */
+
+/* Ensure definitions are only used by the compiler, and not by the assembler. */
+#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
+ #include <stdint.h>
+ extern uint32_t SystemCoreClock;
+#endif
+#ifndef CMSIS_device_header
+#define CMSIS_device_header "stm32wbxx.h"
+#endif /* CMSIS_device_header */
+
+#define configENABLE_FPU 0
+#define configENABLE_MPU 0
+
+#define configUSE_PREEMPTION 1
+#define configSUPPORT_STATIC_ALLOCATION 1
+#define configSUPPORT_DYNAMIC_ALLOCATION 1
+#define configUSE_IDLE_HOOK 0
+#define configUSE_TICK_HOOK 0
+#define configCPU_CLOCK_HZ ( SystemCoreClock )
+#define configTICK_RATE_HZ ((TickType_t)1000)
+#define configMAX_PRIORITIES ( 56 )
+#define configMINIMAL_STACK_SIZE ((uint16_t)128)
+#define configTOTAL_HEAP_SIZE ((size_t)20000)
+#define configMAX_TASK_NAME_LEN ( 16 )
+#define configUSE_TRACE_FACILITY 1
+#define configUSE_16_BIT_TICKS 0
+#define configUSE_MUTEXES 1
+#define configQUEUE_REGISTRY_SIZE 8
+#define configUSE_RECURSIVE_MUTEXES 1
+#define configUSE_COUNTING_SEMAPHORES 1
+#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
+#define configUSE_TICKLESS_IDLE 2
+/* USER CODE BEGIN MESSAGE_BUFFER_LENGTH_TYPE */
+/* Defaults to size_t for backward compatibility, but can be changed
+ if lengths will always be less than the number of bytes in a size_t. */
+#define configMESSAGE_BUFFER_LENGTH_TYPE size_t
+/* USER CODE END MESSAGE_BUFFER_LENGTH_TYPE */
+
+/* Co-routine definitions. */
+#define configUSE_CO_ROUTINES 0
+#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
+
+/* Software timer definitions. */
+#define configUSE_TIMERS 1
+#define configTIMER_TASK_PRIORITY ( 2 )
+#define configTIMER_QUEUE_LENGTH 10
+#define configTIMER_TASK_STACK_DEPTH 256
+
+/* CMSIS-RTOS V2 flags */
+#define configUSE_OS2_THREAD_SUSPEND_RESUME 1
+#define configUSE_OS2_THREAD_ENUMERATE 1
+#define configUSE_OS2_EVENTFLAGS_FROM_ISR 1
+#define configUSE_OS2_THREAD_FLAGS 1
+#define configUSE_OS2_TIMER 1
+#define configUSE_OS2_MUTEX 1
+
+/* Set the following definitions to 1 to include the API function, or zero
+to exclude the API function. */
+#define INCLUDE_vTaskPrioritySet 1
+#define INCLUDE_uxTaskPriorityGet 1
+#define INCLUDE_vTaskDelete 1
+#define INCLUDE_vTaskCleanUpResources 0
+#define INCLUDE_vTaskSuspend 1
+#define INCLUDE_vTaskDelayUntil 1
+#define INCLUDE_vTaskDelay 1
+#define INCLUDE_xTaskGetSchedulerState 1
+#define INCLUDE_xTimerPendFunctionCall 1
+#define INCLUDE_xQueueGetMutexHolder 1
+#define INCLUDE_uxTaskGetStackHighWaterMark 1
+#define INCLUDE_xTaskGetCurrentTaskHandle 1
+#define INCLUDE_eTaskGetState 1
+
+/*
+ * The CMSIS-RTOS V2 FreeRTOS wrapper is dependent on the heap implementation used
+ * by the application thus the correct define need to be enabled below
+ */
+#define USE_FreeRTOS_HEAP_4
+
+/* Cortex-M specific definitions. */
+#ifdef __NVIC_PRIO_BITS
+ /* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */
+ #define configPRIO_BITS __NVIC_PRIO_BITS
+#else
+ #define configPRIO_BITS 4
+#endif
+
+/* The lowest interrupt priority that can be used in a call to a "set priority"
+function. */
+#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15
+
+/* The highest interrupt priority that can be used by any interrupt service
+routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT CALL
+INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER
+PRIORITY THAN THIS! (higher priorities are lower numeric values. */
+#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5
+
+/* Interrupt priorities used by the kernel port layer itself. These are generic
+to all Cortex-M ports, and do not rely on any particular library functions. */
+#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
+/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
+See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
+#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
+
+/* Normal assert() semantics without relying on the provision of an assert.h
+header file. */
+/* USER CODE BEGIN 1 */
+#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }
+/* USER CODE END 1 */
+
+/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
+standard names. */
+#define vPortSVCHandler SVC_Handler
+#define xPortPendSVHandler PendSV_Handler
+
+/* IMPORTANT: After 10.3.1 update, Systick_Handler comes from NVIC (if SYS timebase = systick), otherwise from cmsis_os2.c */
+
+#define USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION 0
+
+/* USER CODE BEGIN Defines */
+/* Section where parameter definitions can be added (for instance, to override default ones in FreeRTOS.h) */
+#define configOVERRIDE_DEFAULT_TICK_CONFIGURATION 1 /* required only for Keil but does not hurt otherwise */
+/* USER CODE END Defines */
+
+#endif /* FREERTOS_CONFIG_H */
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/app_common.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/app_common.h
new file mode 100644
index 000000000..cf8a5baa6
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/app_common.h
@@ -0,0 +1,119 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : app_common.h
+ * Description : App Common application configuration file for STM32WPAN Middleware.
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef APP_COMMON_H
+#define APP_COMMON_H
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+#include <stdint.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+#include "app_conf.h"
+
+ /* -------------------------------- *
+ * Basic definitions *
+ * -------------------------------- */
+
+#undef NULL
+#define NULL 0
+
+#undef FALSE
+#define FALSE 0
+
+#undef TRUE
+#define TRUE (!0)
+
+ /* -------------------------------- *
+ * Critical Section definition *
+ * -------------------------------- */
+#define BACKUP_PRIMASK() uint32_t primask_bit= __get_PRIMASK()
+#define DISABLE_IRQ() __disable_irq()
+#define RESTORE_PRIMASK() __set_PRIMASK(primask_bit)
+
+ /* -------------------------------- *
+ * Macro delimiters *
+ * -------------------------------- */
+
+#define M_BEGIN do {
+
+#define M_END } while(0)
+
+ /* -------------------------------- *
+ * Some useful macro definitions *
+ * -------------------------------- */
+
+#ifndef MAX
+#define MAX( x, y ) (((x)>(y))?(x):(y))
+#endif
+
+#ifndef MIN
+#define MIN( x, y ) (((x)<(y))?(x):(y))
+#endif
+
+#define MODINC( a, m ) M_BEGIN (a)++; if ((a)>=(m)) (a)=0; M_END
+
+#define MODDEC( a, m ) M_BEGIN if ((a)==0) (a)=(m); (a)--; M_END
+
+#define MODADD( a, b, m ) M_BEGIN (a)+=(b); if ((a)>=(m)) (a)-=(m); M_END
+
+#define MODSUB( a, b, m ) MODADD( a, (m)-(b), m )
+
+#define PAUSE( t ) M_BEGIN \
+ __IO int _i; \
+ for ( _i = t; _i > 0; _i -- ); \
+ M_END
+
+#define DIVF( x, y ) ((x)/(y))
+
+#define DIVC( x, y ) (((x)+(y)-1)/(y))
+
+#define DIVR( x, y ) (((x)+((y)/2))/(y))
+
+#define SHRR( x, n ) ((((x)>>((n)-1))+1)>>1)
+
+#define BITN( w, n ) (((w)[(n)/32] >> ((n)%32)) & 1)
+
+#define BITNSET( w, n, b ) M_BEGIN (w)[(n)/32] |= ((U32)(b))<<((n)%32); M_END
+
+ /* -------------------------------- *
+ * Compiler *
+ * -------------------------------- */
+#define PLACE_IN_SECTION( __x__ ) __attribute__((section (__x__)))
+
+#ifdef WIN32
+#define ALIGN(n)
+#else
+#define ALIGN(n) __attribute__((aligned(n)))
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*APP_COMMON_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/app_conf.h
new file mode 100644
index 000000000..fb256b0d1
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/app_conf.h
@@ -0,0 +1,338 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : app_conf.h
+ * Description : Application configuration file for STM32WPAN Middleware.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef APP_CONF_H
+#define APP_CONF_H
+
+#include "hw.h"
+#include "hw_conf.h"
+#include "hw_if.h"
+
+/******************************************************************************
+ * Application Config
+ ******************************************************************************/
+/******************************************************************************
+ * Transport Layer
+ ******************************************************************************/
+/**
+ * Queue length of BLE Event
+ * This parameter defines the number of asynchronous events that can be stored in the HCI layer before
+ * being reported to the application. When a command is sent to the BLE core coprocessor, the HCI layer
+ * is waiting for the event with the Num_HCI_Command_Packets set to 1. The receive queue shall be large
+ * enough to store all asynchronous events received in between.
+ * When CFG_TLBLE_MOST_EVENT_PAYLOAD_SIZE is set to 27, this allow to store three 255 bytes long asynchronous events
+ * between the HCI command and its event.
+ * This parameter depends on the value given to CFG_TLBLE_MOST_EVENT_PAYLOAD_SIZE. When the queue size is to small,
+ * the system may hang if the queue is full with asynchronous events and the HCI layer is still waiting
+ * for a CC/CS event, In that case, the notification TL_BLE_HCI_ToNot() is called to indicate
+ * to the application a HCI command did not receive its command event within 30s (Default HCI Timeout).
+ */
+#define CFG_TL_EVT_QUEUE_LENGTH 5
+/**
+ * This parameter should be set to fit most events received by the HCI layer. It defines the buffer size of each element
+ * allocated in the queue of received events and can be used to optimize the amount of RAM allocated by the Memory Manager.
+ * It should not exceed 255 which is the maximum HCI packet payload size (a greater value is a lost of memory as it will
+ * never be used)
+ * With the current wireless firmware implementation, this parameter shall be kept to 255
+ */
+#define CFG_TL_MOST_EVENT_PAYLOAD_SIZE 255 /**< Set to 255 with the memory manager and the mailbox */
+
+#define TL_EVENT_FRAME_SIZE ( TL_EVT_HDR_SIZE + CFG_TL_MOST_EVENT_PAYLOAD_SIZE )
+/******************************************************************************
+ * UART interfaces
+ ******************************************************************************/
+
+/**
+ * Select UART interfaces
+ */
+#define CFG_DEBUG_TRACE_UART hw_uart1
+#define CFG_CONSOLE_MENU
+#define CFG_CLI_UART hw_lpuart1
+/******************************************************************************
+ * USB interface
+ ******************************************************************************/
+
+/**
+ * Enable/Disable USB interface
+ */
+#define CFG_USB_INTERFACE_ENABLE 0
+
+/******************************************************************************
+ * IPCC interface
+ ******************************************************************************/
+
+/**
+ * The IPCC is dedicated to the communication between the CPU2 and the CPU1
+ * and shall not be modified by the application
+ * The two following definitions shall not be modified
+ */
+#define HAL_IPCC_TX_IRQHandler(...) HW_IPCC_Tx_Handler( )
+#define HAL_IPCC_RX_IRQHandler(...) HW_IPCC_Rx_Handler( )
+
+/******************************************************************************
+ * Low Power
+ *
+ * When CFG_FULL_LOW_POWER is set to 1, the system is configured in full
+ * low power mode. It means that all what can have an impact on the consumptions
+ * are powered down.(For instance LED, Access to Debugger, Etc.)
+ *
+ * When CFG_FULL_LOW_POWER is set to 0, the low power mode is not activated
+ *
+ ******************************************************************************/
+
+#define CFG_FULL_LOW_POWER 0
+
+#if (CFG_FULL_LOW_POWER == 1)
+#undef CFG_LPM_SUPPORTED
+#define CFG_LPM_SUPPORTED 1
+#endif /* CFG_FULL_LOW_POWER */
+/******************************************************************************
+ * Timer Server
+ ******************************************************************************/
+/**
+ * CFG_RTC_WUCKSEL_DIVIDER: This sets the RTCCLK divider to the wakeup timer.
+ * The lower is the value, the better is the power consumption and the accuracy of the timerserver
+ * The higher is the value, the finest is the granularity
+ *
+ * CFG_RTC_ASYNCH_PRESCALER: This sets the asynchronous prescaler of the RTC. It should as high as possible ( to output
+ * clock as low as possible) but the output clock should be equal or higher frequency compare to the clock feeding
+ * the wakeup timer. A lower clock speed would impact the accuracy of the timer server.
+ *
+ * CFG_RTC_SYNCH_PRESCALER: This sets the synchronous prescaler of the RTC.
+ * When the 1Hz calendar clock is required, it shall be sets according to other settings
+ * When the 1Hz calendar clock is not needed, CFG_RTC_SYNCH_PRESCALER should be set to 0x7FFF (MAX VALUE)
+ *
+ * CFG_RTCCLK_DIVIDER_CONF:
+ * Shall be set to either 0,2,4,8,16
+ * When set to either 2,4,8,16, the 1Hhz calendar is supported
+ * When set to 0, the user sets its own configuration
+ *
+ * The following settings are computed with LSI as input to the RTC
+ */
+
+#define CFG_RTCCLK_DIVIDER_CONF 0
+
+#if (CFG_RTCCLK_DIVIDER_CONF == 0)
+/**
+ * Custom configuration
+ * It does not support 1Hz calendar
+ * It divides the RTC CLK by 16
+ */
+
+#define CFG_RTCCLK_DIV (16)
+#define CFG_RTC_WUCKSEL_DIVIDER (0)
+#define CFG_RTC_ASYNCH_PRESCALER (0x0F)
+#define CFG_RTC_SYNCH_PRESCALER (0x7FFF)
+
+#else
+
+#if (CFG_RTCCLK_DIVIDER_CONF == 2)
+/**
+ * It divides the RTC CLK by 2
+ */
+#define CFG_RTC_WUCKSEL_DIVIDER (3)
+#endif
+
+#if (CFG_RTCCLK_DIVIDER_CONF == 4)
+/**
+ * It divides the RTC CLK by 4
+ */
+#define CFG_RTC_WUCKSEL_DIVIDER (2)
+#endif
+
+#if (CFG_RTCCLK_DIVIDER_CONF == 8)
+/**
+ * It divides the RTC CLK by 8
+ */
+#define CFG_RTC_WUCKSEL_DIVIDER (1)
+#endif
+
+#if (CFG_RTCCLK_DIVIDER_CONF == 16)
+/**
+ * It divides the RTC CLK by 16
+ */
+#define CFG_RTC_WUCKSEL_DIVIDER (0)
+#endif
+
+#define CFG_RTCCLK_DIV CFG_RTCCLK_DIVIDER_CONF
+#define CFG_RTC_ASYNCH_PRESCALER (CFG_RTCCLK_DIV - 1)
+#define CFG_RTC_SYNCH_PRESCALER (DIVR( LSE_VALUE, (CFG_RTC_ASYNCH_PRESCALER+1) ) - 1 )
+
+#endif
+
+/** tick timer value in us */
+#define CFG_TS_TICK_VAL DIVR( (CFG_RTCCLK_DIV * 1000000), LSE_VALUE )
+
+typedef enum
+{
+ CFG_TIM_PROC_ID_ISR,
+ /* USER CODE BEGIN CFG_TimProcID_t */
+
+ /* USER CODE END CFG_TimProcID_t */
+} CFG_TimProcID_t;
+
+/******************************************************************************
+ * Debug
+ ******************************************************************************/
+/**
+ * When set, this resets some hw resources to set the device in the same state than the power up
+ * The FW resets only register that may prevent the FW to run properly
+ *
+ * This shall be set to 0 in a final product
+ *
+ */
+#define CFG_HW_RESET_BY_FW 1
+
+/**
+ * keep debugger enabled while in any low power mode when set to 1
+ * should be set to 0 in production
+ */
+#define CFG_DEBUGGER_SUPPORTED 1
+
+#if (CFG_FULL_LOW_POWER == 1)
+#undef CFG_DEBUGGER_SUPPORTED
+#define CFG_DEBUGGER_SUPPORTED 0
+#endif /* CFG_FULL_LOW_POWER */
+
+/*****************************************************************************
+ * Traces
+ * Enable or Disable traces in application
+ * When CFG_DEBUG_TRACE is set, traces are activated
+ *
+ * Note : Refer to utilities_conf.h file in order to details
+ * the level of traces : CFG_DEBUG_TRACE_FULL or CFG_DEBUG_TRACE_LIGHT
+ *****************************************************************************/
+#define CFG_DEBUG_TRACE 1
+
+#if (CFG_FULL_LOW_POWER == 1)
+#undef CFG_DEBUG_TRACE
+#define CFG_DEBUG_TRACE 0
+#endif /* CFG_FULL_LOW_POWER */
+
+/**
+ * When CFG_DEBUG_TRACE_FULL is set to 1, the trace are output with the API name, the file name and the line number
+ * When CFG_DEBUG_TRACE_LIGHT is set to 1, only the debug message is output
+ *
+ * When both are set to 0, no trace are output
+ * When both are set to 1, CFG_DEBUG_TRACE_FULL is selected
+ */
+#define CFG_DEBUG_TRACE_LIGHT 1
+#define CFG_DEBUG_TRACE_FULL 0
+
+#if (( CFG_DEBUG_TRACE != 0 ) && ( CFG_DEBUG_TRACE_LIGHT == 0 ) && (CFG_DEBUG_TRACE_FULL == 0))
+#undef CFG_DEBUG_TRACE_FULL
+#undef CFG_DEBUG_TRACE_LIGHT
+#define CFG_DEBUG_TRACE_FULL 0
+#define CFG_DEBUG_TRACE_LIGHT 1
+#endif
+
+#if ( CFG_DEBUG_TRACE == 0 )
+#undef CFG_DEBUG_TRACE_FULL
+#undef CFG_DEBUG_TRACE_LIGHT
+#define CFG_DEBUG_TRACE_FULL 0
+#define CFG_DEBUG_TRACE_LIGHT 0
+#endif
+
+/**
+ * When not set, the traces is looping on sending the trace over UART
+ */
+#define DBG_TRACE_USE_CIRCULAR_QUEUE 1
+
+/**
+ * max buffer Size to queue data traces and max data trace allowed.
+ * Only Used if DBG_TRACE_USE_CIRCULAR_QUEUE is defined
+ */
+#define DBG_TRACE_MSG_QUEUE_SIZE 4096
+#define MAX_DBG_TRACE_MSG_SIZE 1024
+
+/******************************************************************************
+ * Configure Log level for Application
+ ******************************************************************************/
+#define APPLI_CONFIG_LOG_LEVEL LOG_LEVEL_INFO
+#define APPLI_PRINT_FILE_FUNC_LINE 0
+
+/* USER CODE BEGIN Defines */
+/******************************************************************************
+ * User interaction
+ * When CFG_LED_SUPPORTED is set, LEDS are activated if requested
+ * When CFG_BUTTON_SUPPORTED is set, the push button are activated if requested
+ ******************************************************************************/
+#if (CFG_FULL_LOW_POWER == 1)
+#define CFG_LED_SUPPORTED 0
+#define CFG_BUTTON_SUPPORTED 0
+#else
+#define CFG_LED_SUPPORTED 1
+#define CFG_BUTTON_SUPPORTED 1
+#endif /* CFG_FULL_LOW_POWER */
+/* USER CODE END Defines */
+
+/******************************************************************************
+ * FreeRTOS
+ ******************************************************************************/
+
+#define CFG_SHCI_USER_EVT_PROCESS_NAME "SHCI_USER_EVT_PROCESS"
+#define CFG_SHCI_USER_EVT_PROCESS_ATTR_BITS (0)
+#define CFG_SHCI_USER_EVT_PROCESS_CB_MEM (0)
+#define CFG_SHCI_USER_EVT_PROCESS_CB_SIZE (0)
+#define CFG_SHCI_USER_EVT_PROCESS_STACK_MEM (0)
+#define CFG_SHCI_USER_EVT_PROCESS_PRIORITY osPriorityNone
+#define CFG_SHCI_USER_EVT_PROCESS_STACK_SIZE (128 * 7)
+
+#define CFG_TASK_NOTIFY_M0_TO_M4_PROCESS_NAME "TASK_NOTIFY_M0_TO_M4_PROCESS"
+#define CFG_TASK_REQUEST_M0_TO_M4_PROCESS_NAME "TASK_REQUEST_M0_TO_M4_PROCESS"
+#define CFG_TASK_NWK_FORM_PROCESS_NAME "TASK_NWK_FORM_PROCESS"
+#define CFG_TASK_INIT_PROCESS_NAME "TASK_INIT_PROCESS"
+#define CFG_TASK_PUSH_BUTTON_PROCESS_NAME "TASK_PUSH_BUTTON_PROCESS"
+
+#define CFG_TASK_PROCESS_ATTR_BITS (0)
+#define CFG_TASK_PROCESS_CB_MEM (0)
+#define CFG_TASK_PROCESS_CB_SIZE (0)
+#define CFG_TASK_PROCESS_STACK_MEM (0)
+#define CFG_THREAD_MSG_M0_TO_M4_PROCESS_PRIORITY osPriorityLow
+#define CFG_TASK_PROCESS_STACK_SIZE (128 * 8)
+
+/* USER CODE END FreeRTOS_Defines */
+
+/******************************************************************************
+ * LOW POWER
+ ******************************************************************************/
+/**
+ * Supported requester to the MCU Low Power Manager - can be increased up to 32
+ * It list a bit mapping of all user of the Low Power Manager
+ */
+typedef enum
+{
+ CFG_LPM_APP,
+ /* USER CODE BEGIN CFG_LPM_Id_t */
+
+ /* USER CODE END CFG_LPM_Id_t */
+} CFG_LPM_Id_t;
+
+/******************************************************************************
+ * OTP manager
+ ******************************************************************************/
+#define CFG_OTP_BASE_ADDRESS OTP_AREA_BASE
+
+#define CFG_OTP_END_ADRESS OTP_AREA_END_ADDR
+
+#endif /*APP_CONF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/app_entry.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/app_entry.h
new file mode 100644
index 000000000..da5fabb6e
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/app_entry.h
@@ -0,0 +1,68 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : app_entry.h
+ * Description : App entry configuration file for STM32WPAN Middleware.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef APP_ENTRY_H
+#define APP_ENTRY_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+
+/* 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 variables --------------------------------------------------------*/
+/* USER CODE BEGIN EV */
+
+/* USER CODE END EV */
+
+/* Exported macros ------------------------------------------------------------*/
+/* USER CODE BEGIN EM */
+
+/* USER CODE END EM */
+
+/* Exported functions ---------------------------------------------*/
+ void APPE_Init( void );
+/* USER CODE BEGIN EF */
+
+/* USER CODE END EF */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*APP_ENTRY_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/hw_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/hw_conf.h
new file mode 100644
index 000000000..78bec073e
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/hw_conf.h
@@ -0,0 +1,268 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : hw_conf.h
+ * Description : Hardware configuration file for STM32WPAN Middleware.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef HW_CONF_H
+#define HW_CONF_H
+
+#include "FreeRTOSConfig.h"
+
+/******************************************************************************
+ * Semaphores
+ * THIS SHALL NO BE CHANGED AS THESE SEMAPHORES ARE USED AS WELL ON THE CM0+
+ *****************************************************************************/
+/**
+* The CPU2 may be configured to store the Thread persistent data either in internal NVM storage on CPU2 or in
+* SRAM2 buffer provided by the user application. This can be configured with the system command SHCI_C2_Config()
+* When the CPU2 is requested to store persistent data in SRAM2, it can write data in this buffer at any time when needed.
+* In order to read consistent data with the CPU1 from the SRAM2 buffer, the flow should be:
+* + CPU1 takes CFG_HW_THREAD_NVM_SRAM_SEMID semaphore
+* + CPU1 reads all persistent data from SRAM2 (most of the time, the goal is to write these data into an NVM managed by CPU1)
+* + CPU1 releases CFG_HW_THREAD_NVM_SRAM_SEMID semaphore
+* CFG_HW_THREAD_NVM_SRAM_SEMID semaphore makes sure CPU2 does not update the persistent data in SRAM2 at the same time CPU1 is reading them.
+* There is no timing constraint on how long this semaphore can be kept.
+*/
+#define CFG_HW_THREAD_NVM_SRAM_SEMID 9
+
+/**
+* The CPU2 may be configured to store the BLE persistent data either in internal NVM storage on CPU2 or in
+* SRAM2 buffer provided by the user application. This can be configured with the system command SHCI_C2_Config()
+* When the CPU2 is requested to store persistent data in SRAM2, it can write data in this buffer at any time when needed.
+* In order to read consistent data with the CPU1 from the SRAM2 buffer, the flow should be:
+* + CPU1 takes CFG_HW_BLE_NVM_SRAM_SEMID semaphore
+* + CPU1 reads all persistent data from SRAM2 (most of the time, the goal is to write these data into an NVM managed by CPU1)
+* + CPU1 releases CFG_HW_BLE_NVM_SRAM_SEMID semaphore
+* CFG_HW_BLE_NVM_SRAM_SEMID semaphore makes sure CPU2 does not update the persistent data in SRAM2 at the same time CPU1 is reading them.
+* There is no timing constraint on how long this semaphore can be kept.
+*/
+#define CFG_HW_BLE_NVM_SRAM_SEMID 8
+
+/**
+* Index of the semaphore used by CPU2 to prevent the CPU1 to either write or erase data in flash
+* The CPU1 shall not either write or erase in flash when this semaphore is taken by the CPU2
+* When the CPU1 needs to either write or erase in flash, it shall first get the semaphore and release it just
+* after writing a raw (64bits data) or erasing one sector.
+* Once the Semaphore has been released, there shall be at least 1us before it can be taken again. This is required
+* to give the opportunity to CPU2 to take it.
+* On v1.4.0 and older CPU2 wireless firmware, this semaphore is unused and CPU2 is using PES bit.
+* By default, CPU2 is using the PES bit to protect its timing. The CPU1 may request the CPU2 to use the semaphore
+* instead of the PES bit by sending the system command SHCI_C2_SetFlashActivityControl()
+*/
+#define CFG_HW_BLOCK_FLASH_REQ_BY_CPU2_SEMID 7
+
+/**
+* Index of the semaphore used by CPU1 to prevent the CPU2 to either write or erase data in flash
+* In order to protect its timing, the CPU1 may get this semaphore to prevent the CPU2 to either
+* write or erase in flash (as this will stall both CPUs)
+* The PES bit shall not be used as this may stall the CPU2 in some cases.
+*/
+#define CFG_HW_BLOCK_FLASH_REQ_BY_CPU1_SEMID 6
+
+/**
+* Index of the semaphore used to manage the CLK48 clock configuration
+* When the USB is required, this semaphore shall be taken before configuring te CLK48 for USB
+* and should be released after the application switch OFF the clock when the USB is not used anymore
+* When using the RNG, it is good enough to use CFG_HW_RNG_SEMID to control CLK48.
+* More details in AN5289
+*/
+#define CFG_HW_CLK48_CONFIG_SEMID 5
+
+/* Index of the semaphore used to manage the entry Stop Mode procedure */
+#define CFG_HW_ENTRY_STOP_MODE_SEMID 4
+
+/* Index of the semaphore used to access the RCC */
+#define CFG_HW_RCC_SEMID 3
+
+/* Index of the semaphore used to access the FLASH */
+#define CFG_HW_FLASH_SEMID 2
+
+/* Index of the semaphore used to access the PKA */
+#define CFG_HW_PKA_SEMID 1
+
+/* Index of the semaphore used to access the RNG */
+#define CFG_HW_RNG_SEMID 0
+
+/******************************************************************************
+ * HW TIMER SERVER
+ *****************************************************************************/
+/**
+ * The user may define the maximum number of virtual timers supported.
+ * It shall not exceed 255
+ */
+#define CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER 6
+
+/**
+ * The user may define the priority in the NVIC of the RTC_WKUP interrupt handler that is used to manage the
+ * wakeup timer.
+ * This setting is the preemptpriority part of the NVIC.
+ */
+#define CFG_HW_TS_NVIC_RTC_WAKEUP_IT_PREEMPTPRIO (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY + 1) /* FreeRTOS requirement */
+
+/**
+ * The user may define the priority in the NVIC of the RTC_WKUP interrupt handler that is used to manage the
+ * wakeup timer.
+ * This setting is the subpriority part of the NVIC. It does not exist on all processors. When it is not supported
+ * on the CPU, the setting is ignored
+ */
+#define CFG_HW_TS_NVIC_RTC_WAKEUP_IT_SUBPRIO 0
+
+/**
+ * Define a critical section in the Timer server
+ * The Timer server does not support the API to be nested
+ * The Application shall either:
+ * a) Ensure this will never happen
+ * b) Define the critical section
+ * The default implementations is masking all interrupts using the PRIMASK bit
+ * The TimerServer driver uses critical sections to avoid context corruption. This is achieved with the macro
+ * TIMER_ENTER_CRITICAL_SECTION and TIMER_EXIT_CRITICAL_SECTION. When CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION is set
+ * to 1, all STM32 interrupts are masked with the PRIMASK bit of the CortexM CPU. It is possible to use the BASEPRI
+ * register of the CortexM CPU to keep allowed some interrupts with high priority. In that case, the user shall
+ * re-implement TIMER_ENTER_CRITICAL_SECTION and TIMER_EXIT_CRITICAL_SECTION and shall make sure that no TimerServer
+ * API are called when the TIMER critical section is entered
+ */
+#define CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION 1
+
+/**
+ * This value shall reflect the maximum delay there could be in the application between the time the RTC interrupt
+ * is generated by the Hardware and the time when the RTC interrupt handler is called. This time is measured in
+ * number of RTCCLK ticks.
+ * A relaxed timing would be 10ms
+ * When the value is too short, the timerserver will not be able to count properly and all timeout may be random.
+ * When the value is too long, the device may wake up more often than the most optimal configuration. However, the
+ * impact on power consumption would be marginal (unless the value selected is extremely too long). It is strongly
+ * recommended to select a value large enough to make sure it is not too short to ensure reliability of the system
+ * as this will have marginal impact on low power mode
+ */
+#define CFG_HW_TS_RTC_HANDLER_MAX_DELAY ( 10 * (LSI_VALUE/1000) )
+
+ /**
+ * Interrupt ID in the NVIC of the RTC Wakeup interrupt handler
+ * It shall be type of IRQn_Type
+ */
+#define CFG_HW_TS_RTC_WAKEUP_HANDLER_ID RTC_WKUP_IRQn
+
+/******************************************************************************
+ * HW UART
+ *****************************************************************************/
+#define CFG_HW_LPUART1_ENABLED 1
+#define CFG_HW_LPUART1_DMA_TX_SUPPORTED 1
+
+#define CFG_HW_USART1_ENABLED 1
+#define CFG_HW_USART1_DMA_TX_SUPPORTED 1
+
+/**
+ * LPUART1
+ */
+#define CFG_HW_LPUART1_PREEMPTPRIORITY 0x0F
+#define CFG_HW_LPUART1_SUBPRIORITY 0
+
+/** < The application shall check the selected source clock is enable */
+#define CFG_HW_LPUART1_SOURCE_CLOCK RCC_LPUART1CLKSOURCE_SYSCLK
+
+#define CFG_HW_LPUART1_BAUDRATE 115200
+#define CFG_HW_LPUART1_WORDLENGTH UART_WORDLENGTH_8B
+#define CFG_HW_LPUART1_STOPBITS UART_STOPBITS_1
+#define CFG_HW_LPUART1_PARITY UART_PARITY_NONE
+#define CFG_HW_LPUART1_HWFLOWCTL UART_HWCONTROL_NONE
+#define CFG_HW_LPUART1_MODE UART_MODE_TX_RX
+#define CFG_HW_LPUART1_ADVFEATUREINIT UART_ADVFEATURE_NO_INIT
+#define CFG_HW_LPUART1_OVERSAMPLING UART_OVERSAMPLING_8
+
+#define CFG_HW_LPUART1_TX_PORT_CLK_ENABLE __HAL_RCC_GPIOA_CLK_ENABLE
+#define CFG_HW_LPUART1_TX_PORT GPIOA
+#define CFG_HW_LPUART1_TX_PIN GPIO_PIN_2
+#define CFG_HW_LPUART1_TX_MODE GPIO_MODE_AF_PP
+#define CFG_HW_LPUART1_TX_PULL GPIO_NOPULL
+#define CFG_HW_LPUART1_TX_SPEED GPIO_SPEED_FREQ_VERY_HIGH
+#define CFG_HW_LPUART1_TX_ALTERNATE GPIO_AF8_LPUART1
+
+#define CFG_HW_LPUART1_RX_PORT_CLK_ENABLE __HAL_RCC_GPIOA_CLK_ENABLE
+#define CFG_HW_LPUART1_RX_PORT GPIOA
+#define CFG_HW_LPUART1_RX_PIN GPIO_PIN_3
+#define CFG_HW_LPUART1_RX_MODE GPIO_MODE_AF_PP
+#define CFG_HW_LPUART1_RX_PULL GPIO_NOPULL
+#define CFG_HW_LPUART1_RX_SPEED GPIO_SPEED_FREQ_VERY_HIGH
+#define CFG_HW_LPUART1_RX_ALTERNATE GPIO_AF8_LPUART1
+
+#define CFG_HW_LPUART1_DMA_TX_PREEMPTPRIORITY 0x0F
+#define CFG_HW_LPUART1_DMA_TX_SUBPRIORITY 0
+
+#define CFG_HW_LPUART1_DMAMUX_CLK_ENABLE __HAL_RCC_DMAMUX1_CLK_ENABLE
+#define CFG_HW_LPUART1_DMA_CLK_ENABLE __HAL_RCC_DMA1_CLK_ENABLE
+#define CFG_HW_LPUART1_TX_DMA_REQ DMA_REQUEST_LPUART1_TX
+#define CFG_HW_LPUART1_TX_DMA_CHANNEL DMA1_Channel1
+#define CFG_HW_LPUART1_TX_DMA_IRQn DMA1_Channel1_IRQn
+#define CFG_HW_LPUART1_DMA_TX_IRQHandler DMA1_Channel1_IRQHandler
+
+/**
+ * UART1
+ */
+#define CFG_HW_USART1_PREEMPTPRIORITY 0x0F
+#define CFG_HW_USART1_SUBPRIORITY 0
+
+/** < The application shall check the selected source clock is enable */
+#define CFG_HW_USART1_SOURCE_CLOCK RCC_USART1CLKSOURCE_SYSCLK
+
+#define CFG_HW_USART1_BAUDRATE 115200
+#define CFG_HW_USART1_WORDLENGTH UART_WORDLENGTH_8B
+#define CFG_HW_USART1_STOPBITS UART_STOPBITS_1
+#define CFG_HW_USART1_PARITY UART_PARITY_NONE
+#define CFG_HW_USART1_HWFLOWCTL UART_HWCONTROL_NONE
+#define CFG_HW_USART1_MODE UART_MODE_TX_RX
+#define CFG_HW_USART1_ADVFEATUREINIT UART_ADVFEATURE_NO_INIT
+#define CFG_HW_USART1_OVERSAMPLING UART_OVERSAMPLING_8
+
+#define CFG_HW_USART1_TX_PORT_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE
+#define CFG_HW_USART1_TX_PORT GPIOB
+#define CFG_HW_USART1_TX_PIN GPIO_PIN_6
+#define CFG_HW_USART1_TX_MODE GPIO_MODE_AF_PP
+#define CFG_HW_USART1_TX_PULL GPIO_NOPULL
+#define CFG_HW_USART1_TX_SPEED GPIO_SPEED_FREQ_VERY_HIGH
+#define CFG_HW_USART1_TX_ALTERNATE GPIO_AF7_USART1
+
+#define CFG_HW_USART1_RX_PORT_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE
+#define CFG_HW_USART1_RX_PORT GPIOB
+#define CFG_HW_USART1_RX_PIN GPIO_PIN_7
+#define CFG_HW_USART1_RX_MODE GPIO_MODE_AF_PP
+#define CFG_HW_USART1_RX_PULL GPIO_NOPULL
+#define CFG_HW_USART1_RX_SPEED GPIO_SPEED_FREQ_VERY_HIGH
+#define CFG_HW_USART1_RX_ALTERNATE GPIO_AF7_USART1
+
+#define CFG_HW_USART1_CTS_PORT_CLK_ENABLE __HAL_RCC_GPIOA_CLK_ENABLE
+#define CFG_HW_USART1_CTS_PORT GPIOA
+#define CFG_HW_USART1_CTS_PIN GPIO_PIN_11
+#define CFG_HW_USART1_CTS_MODE GPIO_MODE_AF_PP
+#define CFG_HW_USART1_CTS_PULL GPIO_PULLDOWN
+#define CFG_HW_USART1_CTS_SPEED GPIO_SPEED_FREQ_VERY_HIGH
+#define CFG_HW_USART1_CTS_ALTERNATE GPIO_AF7_USART1
+
+#define CFG_HW_USART1_DMA_TX_PREEMPTPRIORITY 0x0F
+#define CFG_HW_USART1_DMA_TX_SUBPRIORITY 0
+
+#define CFG_HW_USART1_DMAMUX_CLK_ENABLE __HAL_RCC_DMAMUX1_CLK_ENABLE
+#define CFG_HW_USART1_DMA_CLK_ENABLE __HAL_RCC_DMA1_CLK_ENABLE
+#define CFG_HW_USART1_TX_DMA_REQ DMA_REQUEST_USART1_TX
+#define CFG_HW_USART1_TX_DMA_CHANNEL DMA1_Channel2
+#define CFG_HW_USART1_TX_DMA_IRQn DMA1_Channel2_IRQn
+#define CFG_HW_USART1_DMA_TX_IRQHandler DMA1_Channel2_IRQHandler
+
+#endif /*HW_CONF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/hw_if.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/hw_if.h
new file mode 100644
index 000000000..55312b1c3
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/hw_if.h
@@ -0,0 +1,250 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * @file hw_if.h
+ * @author MCD Application Team
+ * @brief Hardware Interface
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef HW_IF_H
+#define HW_IF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /* Includes ------------------------------------------------------------------*/
+#include "stm32wbxx.h"
+#include "stm32wbxx_ll_exti.h"
+#include "stm32wbxx_ll_system.h"
+#include "stm32wbxx_ll_rcc.h"
+#include "stm32wbxx_ll_ipcc.h"
+#include "stm32wbxx_ll_bus.h"
+#include "stm32wbxx_ll_pwr.h"
+#include "stm32wbxx_ll_cortex.h"
+#include "stm32wbxx_ll_utils.h"
+#include "stm32wbxx_ll_hsem.h"
+#include "stm32wbxx_ll_gpio.h"
+#include "stm32wbxx_ll_rtc.h"
+
+#ifdef USE_STM32WBXX_USB_DONGLE
+#include "stm32wbxx_usb_dongle.h"
+#endif
+#ifdef USE_STM32WBXX_NUCLEO
+#include "stm32wbxx_nucleo.h"
+#endif
+#ifdef USE_X_NUCLEO_EPD
+#include "x_nucleo_epd.h"
+#endif
+
+/* Private includes ----------------------------------------------------------*/
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+ /******************************************************************************
+ * HW UART
+ ******************************************************************************/
+ typedef enum
+ {
+ hw_uart1,
+ hw_uart2,
+ hw_lpuart1,
+ } hw_uart_id_t;
+
+ typedef enum
+ {
+ hw_uart_ok,
+ hw_uart_error,
+ hw_uart_busy,
+ hw_uart_to,
+ } hw_status_t;
+
+ void HW_UART_Init(hw_uart_id_t hw_uart_id);
+ void HW_UART_Receive_IT(hw_uart_id_t hw_uart_id, uint8_t *pData, uint16_t Size, void (*Callback)(void));
+ void HW_UART_Transmit_IT(hw_uart_id_t hw_uart_id, uint8_t *pData, uint16_t Size, void (*Callback)(void));
+ hw_status_t HW_UART_Transmit(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, uint32_t timeout);
+ hw_status_t HW_UART_Transmit_DMA(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, void (*Callback)(void));
+ void HW_UART_Interrupt_Handler(hw_uart_id_t hw_uart_id);
+ void HW_UART_DMA_Interrupt_Handler(hw_uart_id_t hw_uart_id);
+
+ /******************************************************************************
+ * HW TimerServer
+ ******************************************************************************/
+ /* Exported types ------------------------------------------------------------*/
+ /**
+ * This setting is used when standby mode is supported.
+ * hw_ts_InitMode_Limited should be used when the device restarts from Standby Mode. In that case, the Timer Server does
+ * not re-initialized its context. Only the Hardware register which content has been lost is reconfigured
+ * Otherwise, hw_ts_InitMode_Full should be requested (Start from Power ON) and everything is re-initialized.
+ */
+ typedef enum
+ {
+ hw_ts_InitMode_Full,
+ hw_ts_InitMode_Limited,
+ } HW_TS_InitMode_t;
+
+ /**
+ * When a Timer is created as a SingleShot timer, it is not automatically restarted when the timeout occurs. However,
+ * the timer is kept reserved in the list and could be restarted at anytime with HW_TS_Start()
+ *
+ * When a Timer is created as a Repeated timer, it is automatically restarted when the timeout occurs.
+ */
+ typedef enum
+ {
+ hw_ts_SingleShot,
+ hw_ts_Repeated
+ } HW_TS_Mode_t;
+
+ /**
+ * hw_ts_Successful is returned when a Timer has been successfully created with HW_TS_Create(). Otherwise, hw_ts_Failed
+ * is returned. When hw_ts_Failed is returned, that means there are not enough free slots in the list to create a
+ * Timer. In that case, CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER should be increased
+ */
+ typedef enum
+ {
+ hw_ts_Successful,
+ hw_ts_Failed,
+ }HW_TS_ReturnStatus_t;
+
+ typedef void (*HW_TS_pTimerCb_t)(void);
+
+ /**
+ * @brief Initialize the timer server
+ * This API shall be called by the application before any timer is requested to the timer server. It
+ * configures the RTC module to be connected to the LSI input clock.
+ *
+ * @param TimerInitMode: When the device restarts from Standby, it should request hw_ts_InitMode_Limited so that the
+ * Timer context is not re-initialized. Otherwise, hw_ts_InitMode_Full should be requested
+ * @param hrtc: RTC Handle
+ * @retval None
+ */
+ void HW_TS_Init(HW_TS_InitMode_t TimerInitMode, RTC_HandleTypeDef *hrtc);
+
+ /**
+ * @brief Interface to create a virtual timer
+ * The user shall call this API to create a timer. Once created, the timer is reserved to the module until it
+ * has been deleted. When creating a timer, the user shall specify the mode (single shot or repeated), the
+ * callback to be notified when the timer expires and a module ID to identify in the timer interrupt handler
+ * which module is concerned. In return, the user gets a timer ID to handle it.
+ *
+ * @param TimerProcessID: This is an identifier provided by the user and returned in the callback to allow
+ * identification of the requester
+ * @param pTimerId: Timer Id returned to the user to request operation (start, stop, delete)
+ * @param TimerMode: Mode of the virtual timer (Single shot or repeated)
+ * @param pTimerCallBack: Callback when the virtual timer expires
+ * @retval HW_TS_ReturnStatus_t: Return whether the creation is sucessful or not
+ */
+ HW_TS_ReturnStatus_t HW_TS_Create(uint32_t TimerProcessID, uint8_t *pTimerId, HW_TS_Mode_t TimerMode, HW_TS_pTimerCb_t pTimerCallBack);
+
+ /**
+ * @brief Stop a virtual timer
+ * This API may be used to stop a running timer. A timer which is stopped is move to the pending state.
+ * A pending timer may be restarted at any time with a different timeout value but the mode cannot be changed.
+ * Nothing is done when it is called to stop a timer which has been already stopped
+ *
+ * @param TimerID: Id of the timer to stop
+ * @retval None
+ */
+ void HW_TS_Stop(uint8_t TimerID);
+
+ /**
+ * @brief Start a virtual timer
+ * This API shall be used to start a timer. The timeout value is specified and may be different each time.
+ * When the timer is in the single shot mode, it will move to the pending state when it expires. The user may
+ * restart it at any time with a different timeout value. When the timer is in the repeated mode, it always
+ * stay in the running state. When the timer expires, it will be restarted with the same timeout value.
+ * This API shall not be called on a running timer.
+ *
+ * @param TimerID: The ID Id of the timer to start
+ * @param timeout_ticks: Number of ticks of the virtual timer (Maximum value is (0xFFFFFFFF-0xFFFF = 0xFFFF0000)
+ * @retval None
+ */
+ void HW_TS_Start(uint8_t TimerID, uint32_t timeout_ticks);
+
+ /**
+ * @brief Delete a virtual timer from the list
+ * This API should be used when a timer is not needed anymore by the user. A deleted timer is removed from
+ * the timer list managed by the timer server. It cannot be restarted again. The user has to go with the
+ * creation of a new timer if required and may get a different timer id
+ *
+ * @param TimerID: The ID of the timer to remove from the list
+ * @retval None
+ */
+ void HW_TS_Delete(uint8_t TimerID);
+
+ /**
+ * @brief Schedule the timer list on the timer interrupt handler
+ * This interrupt handler shall be called by the application in the RTC interrupt handler. This handler takes
+ * care of clearing all status flag required in the RTC and EXTI peripherals
+ *
+ * @param None
+ * @retval None
+ */
+ void HW_TS_RTC_Wakeup_Handler(void);
+
+ /**
+ * @brief Return the number of ticks to count before the interrupt
+ * This API returns the number of ticks left to be counted before an interrupt is generated by the
+ * Timer Server. This API may be used by the application for power management optimization. When the system
+ * enters low power mode, the mode selection is a tradeoff between the wakeup time where the CPU is running
+ * and the time while the CPU will be kept in low power mode before next wakeup. The deeper is the
+ * low power mode used, the longer is the wakeup time. The low power mode management considering wakeup time
+ * versus time in low power mode is implementation specific
+ * When the timer is disabled (No timer in the list), it returns 0xFFFF
+ *
+ * @param None
+ * @retval The number of ticks left to count
+ */
+ uint16_t HW_TS_RTC_ReadLeftTicksToCount(void);
+
+ /**
+ * @brief Notify the application that a registered timer has expired
+ * This API shall be implemented by the user application.
+ * This API notifies the application that a timer expires. This API is running in the RTC Wakeup interrupt
+ * context. The application may implement an Operating System to change the context priority where the timer
+ * callback may be handled. This API provides the module ID to identify which module is concerned and to allow
+ * sending the information to the correct task
+ *
+ * @param TimerProcessID: The TimerProcessId associated with the timer when it has been created
+ * @param TimerID: The TimerID of the expired timer
+ * @param pTimerCallBack: The Callback associated with the timer when it has been created
+ * @retval None
+ */
+ void HW_TS_RTC_Int_AppNot(uint32_t TimerProcessID, uint8_t TimerID, HW_TS_pTimerCb_t pTimerCallBack);
+
+ /**
+ * @brief Notify the application that the wakeupcounter has been updated
+ * This API should be implemented by the user application
+ * This API notifies the application that the counter has been updated. This is expected to be used along
+ * with the HW_TS_RTC_ReadLeftTicksToCount () API. It could be that the counter has been updated since the
+ * last call of HW_TS_RTC_ReadLeftTicksToCount () and before entering low power mode. This notification
+ * provides a way to the application to solve that race condition to reevaluate the counter value before
+ * entering low power mode
+ *
+ * @param None
+ * @retval None
+ */
+ void HW_TS_RTC_CountUpdated_AppNot(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*HW_IF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/main.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/main.h
new file mode 100644
index 000000000..e08aa2180
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/main.h
@@ -0,0 +1,76 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * @file : main.h
+ * @brief : Header for main.c file.
+ * This file contains the common defines of the application.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __MAIN_H
+#define __MAIN_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32wbxx_hal.h"
+#include "app_conf.h"
+#include "app_entry.h"
+#include "app_common.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 */
+
+/* USER CODE END EM */
+
+/* Exported functions prototypes ---------------------------------------------*/
+void Error_Handler(void);
+
+/* USER CODE BEGIN EFP */
+
+/* USER CODE END EFP */
+
+/* Private defines -----------------------------------------------------------*/
+void MX_LPUART1_UART_Init(void);
+void MX_USART1_UART_Init(void);
+/* USER CODE BEGIN Private defines */
+
+/* USER CODE END Private defines */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __MAIN_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/stm32_lpm_if.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/stm32_lpm_if.h
new file mode 100644
index 000000000..3e0b3c535
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/stm32_lpm_if.h
@@ -0,0 +1,81 @@
+/* USER CODE BEGIN Header */
+/**
+******************************************************************************
+* @file stm32_lpm_if.h
+* @brief Header for stm32_lpm_if.c module (device specific LP management)
+******************************************************************************
+* @attention
+*
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+* All rights reserved.</center></h2>
+*
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+*
+******************************************************************************
+*/
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32_LPM_IF_H
+#define __STM32_LPM_IF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+
+/**
+ * @brief Enters Low Power Off Mode
+ * @param none
+ * @retval none
+ */
+void PWR_EnterOffMode( void );
+/**
+ * @brief Exits Low Power Off Mode
+ * @param none
+ * @retval none
+ */
+void PWR_ExitOffMode( void );
+
+/**
+ * @brief Enters Low Power Stop Mode
+ * @note ARM exists the function when waking up
+ * @param none
+ * @retval none
+ */
+void PWR_EnterStopMode( void );
+/**
+ * @brief Exits Low Power Stop Mode
+ * @note Enable the pll at 32MHz
+ * @param none
+ * @retval none
+ */
+void PWR_ExitStopMode( void );
+
+/**
+ * @brief Enters Low Power Sleep Mode
+ * @note ARM exits the function when waking up
+ * @param none
+ * @retval none
+ */
+void PWR_EnterSleepMode( void );
+
+/**
+ * @brief Exits Low Power Sleep Mode
+ * @note ARM exits the function when waking up
+ * @param none
+ * @retval none
+ */
+void PWR_ExitSleepMode( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*__STM32_LPM_IF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/stm32wbxx_hal_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/stm32wbxx_hal_conf.h
new file mode 100644
index 000000000..fc4a470ae
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/stm32wbxx_hal_conf.h
@@ -0,0 +1,353 @@
+/**
+ ******************************************************************************
+ * @file stm32wbxx_hal_conf.h
+ * @author MCD Application Team
+ * @brief HAL configuration file.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32WBxx_HAL_CONF_H
+#define __STM32WBxx_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_CRYP_MODULE_ENABLED */
+/*#define HAL_COMP_MODULE_ENABLED */
+/*#define HAL_CRC_MODULE_ENABLED */
+#define HAL_HSEM_MODULE_ENABLED
+/*#define HAL_I2C_MODULE_ENABLED */
+#define HAL_IPCC_MODULE_ENABLED
+/*#define HAL_IRDA_MODULE_ENABLED */
+/*#define HAL_IWDG_MODULE_ENABLED */
+/*#define HAL_LCD_MODULE_ENABLED */
+/*#define HAL_LPTIM_MODULE_ENABLED */
+/*#define HAL_PCD_MODULE_ENABLED */
+/*#define HAL_PKA_MODULE_ENABLED */
+/*#define HAL_QSPI_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
+
+#define USE_HAL_ADC_REGISTER_CALLBACKS 0u
+#define USE_HAL_COMP_REGISTER_CALLBACKS 0u
+#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u
+#define USE_HAL_I2C_REGISTER_CALLBACKS 0u
+#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u
+#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u
+#define USE_HAL_PCD_REGISTER_CALLBACKS 0u
+#define USE_HAL_PKA_REGISTER_CALLBACKS 0u
+#define USE_HAL_QSPI_REGISTER_CALLBACKS 0u
+#define USE_HAL_RNG_REGISTER_CALLBACKS 0u
+#define USE_HAL_RTC_REGISTER_CALLBACKS 0u
+#define USE_HAL_SAI_REGISTER_CALLBACKS 0u
+#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0u
+#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u
+#define USE_HAL_SPI_REGISTER_CALLBACKS 0u
+#define USE_HAL_TIM_REGISTER_CALLBACKS 0u
+#define USE_HAL_TSC_REGISTER_CALLBACKS 0u
+#define USE_HAL_UART_REGISTER_CALLBACKS 0u
+#define USE_HAL_USART_REGISTER_CALLBACKS 0u
+#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u
+
+/* ########################## 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 32000000U /*!< Value of the External oscillator in Hz */
+#endif /* HSE_VALUE */
+
+#if !defined (HSE_STARTUP_TIMEOUT)
+ #define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */
+#endif /* HSE_STARTUP_TIMEOUT */
+
+/**
+ * @brief Internal Multiple Speed oscillator (MSI) default value.
+ * This value is the default MSI range value after Reset.
+ */
+#if !defined (MSI_VALUE)
+ #define MSI_VALUE ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/
+#endif /* MSI_VALUE */
+
+/**
+ * @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 16000000U /*!< Value of the Internal oscillator in Hz*/
+#endif /* HSI_VALUE */
+
+/**
+ * @brief Internal Low Speed oscillator (LSI1) value.
+ */
+#if !defined (LSI1_VALUE)
+ #define LSI1_VALUE ((uint32_t)32000) /*!< LSI1 Typical Value in Hz*/
+#endif /* LSI1_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
+ The real value may vary depending on the variations
+ in voltage and temperature.*/
+/**
+ * @brief Internal Low Speed oscillator (LSI2) value.
+ */
+#if !defined (LSI2_VALUE)
+ #define LSI2_VALUE ((uint32_t)32000) /*!< LSI2 Typical Value in Hz*/
+#endif /* LSI2_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
+ The real value may vary depending on the variations
+ in voltage and temperature.*/
+
+/**
+ * @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 32768U /*!< Value of the External oscillator in Hz*/
+#endif /* LSE_VALUE */
+
+/**
+ * @brief Internal Multiple Speed oscillator (HSI48) default value.
+ * This value is the default HSI48 range value after Reset.
+ */
+#if !defined (HSI48_VALUE)
+ #define HSI48_VALUE ((uint32_t)48000000) /*!< Value of the Internal oscillator in Hz*/
+#endif /* HSI48_VALUE */
+
+#if !defined (LSE_STARTUP_TIMEOUT)
+#define LSE_STARTUP_TIMEOUT 5000U /*!< 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 ((uint32_t)2097000) /*!< 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 3300U /*!< Value of VDD in mv */
+#define TICK_INT_PRIORITY 0U /*!< tick interrupt priority */
+#define USE_RTOS 0U
+#define PREFETCH_ENABLE 1U
+#define INSTRUCTION_CACHE_ENABLE 1U
+#define DATA_CACHE_ENABLE 1U
+
+/* ########################## Assert Selection ############################## */
+/**
+ * @brief Uncomment the line below to expanse the "assert_param" macro in the
+ * HAL drivers code
+ */
+/* #define USE_FULL_ASSERT 1U */
+
+/* ################## 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
+
+/* Includes ------------------------------------------------------------------*/
+/**
+ * @brief Include module's header file
+ */
+#ifdef HAL_DMA_MODULE_ENABLED
+ #include "stm32wbxx_hal_dma.h"
+#endif /* HAL_DMA_MODULE_ENABLED */
+
+#ifdef HAL_ADC_MODULE_ENABLED
+ #include "stm32wbxx_hal_adc.h"
+#endif /* HAL_ADC_MODULE_ENABLED */
+
+#ifdef HAL_COMP_MODULE_ENABLED
+ #include "stm32wbxx_hal_comp.h"
+#endif /* HAL_COMP_MODULE_ENABLED */
+
+#ifdef HAL_CORTEX_MODULE_ENABLED
+ #include "stm32wbxx_hal_cortex.h"
+#endif /* HAL_CORTEX_MODULE_ENABLED */
+
+#ifdef HAL_CRC_MODULE_ENABLED
+ #include "stm32wbxx_hal_crc.h"
+#endif /* HAL_CRC_MODULE_ENABLED */
+
+#ifdef HAL_CRYP_MODULE_ENABLED
+ #include "stm32wbxx_hal_cryp.h"
+#endif /* HAL_CRYP_MODULE_ENABLED */
+
+#ifdef HAL_EXTI_MODULE_ENABLED
+ #include "stm32wbxx_hal_exti.h"
+#endif /* HAL_EXTI_MODULE_ENABLED */
+
+#ifdef HAL_FLASH_MODULE_ENABLED
+ #include "stm32wbxx_hal_flash.h"
+#endif /* HAL_FLASH_MODULE_ENABLED */
+
+#ifdef HAL_GPIO_MODULE_ENABLED
+ #include "stm32wbxx_hal_gpio.h"
+#endif /* HAL_GPIO_MODULE_ENABLED */
+
+#ifdef HAL_HSEM_MODULE_ENABLED
+ #include "stm32wbxx_hal_hsem.h"
+#endif /* HAL_HSEM_MODULE_ENABLED */
+
+#ifdef HAL_I2C_MODULE_ENABLED
+ #include "stm32wbxx_hal_i2c.h"
+#endif /* HAL_I2C_MODULE_ENABLED */
+
+#ifdef HAL_IPCC_MODULE_ENABLED
+ #include "stm32wbxx_hal_ipcc.h"
+#endif /* HAL_IPCC_MODULE_ENABLED */
+
+#ifdef HAL_IRDA_MODULE_ENABLED
+ #include "stm32wbxx_hal_irda.h"
+#endif /* HAL_IRDA_MODULE_ENABLED */
+
+#ifdef HAL_IWDG_MODULE_ENABLED
+ #include "stm32wbxx_hal_iwdg.h"
+#endif /* HAL_IWDG_MODULE_ENABLED */
+
+#ifdef HAL_LCD_MODULE_ENABLED
+ #include "stm32wbxx_hal_lcd.h"
+#endif /* HAL_LCD_MODULE_ENABLED */
+
+#ifdef HAL_LPTIM_MODULE_ENABLED
+ #include "stm32wbxx_hal_lptim.h"
+#endif /* HAL_LPTIM_MODULE_ENABLED */
+
+#ifdef HAL_PCD_MODULE_ENABLED
+ #include "stm32wbxx_hal_pcd.h"
+#endif /* HAL_PCD_MODULE_ENABLED */
+
+#ifdef HAL_PKA_MODULE_ENABLED
+ #include "stm32wbxx_hal_pka.h"
+#endif /* HAL_PKA_MODULE_ENABLED */
+
+#ifdef HAL_PWR_MODULE_ENABLED
+ #include "stm32wbxx_hal_pwr.h"
+#endif /* HAL_PWR_MODULE_ENABLED */
+
+#ifdef HAL_QSPI_MODULE_ENABLED
+ #include "stm32wbxx_hal_qspi.h"
+#endif /* HAL_QSPI_MODULE_ENABLED */
+
+#ifdef HAL_RCC_MODULE_ENABLED
+ #include "stm32wbxx_hal_rcc.h"
+#endif /* HAL_RCC_MODULE_ENABLED */
+
+#ifdef HAL_RNG_MODULE_ENABLED
+ #include "stm32wbxx_hal_rng.h"
+#endif /* HAL_RNG_MODULE_ENABLED */
+
+#ifdef HAL_RTC_MODULE_ENABLED
+ #include "stm32wbxx_hal_rtc.h"
+#endif /* HAL_RTC_MODULE_ENABLED */
+
+#ifdef HAL_SAI_MODULE_ENABLED
+ #include "stm32wbxx_hal_sai.h"
+#endif /* HAL_SAI_MODULE_ENABLED */
+
+#ifdef HAL_SMARTCARD_MODULE_ENABLED
+ #include "stm32wbxx_hal_smartcard.h"
+#endif /* HAL_SMARTCARD_MODULE_ENABLED */
+
+#ifdef HAL_SMBUS_MODULE_ENABLED
+ #include "stm32wbxx_hal_smbus.h"
+#endif /* HAL_SMBUS_MODULE_ENABLED */
+
+#ifdef HAL_SPI_MODULE_ENABLED
+ #include "stm32wbxx_hal_spi.h"
+#endif /* HAL_SPI_MODULE_ENABLED */
+
+#ifdef HAL_TIM_MODULE_ENABLED
+ #include "stm32wbxx_hal_tim.h"
+#endif /* HAL_TIM_MODULE_ENABLED */
+
+#ifdef HAL_TSC_MODULE_ENABLED
+ #include "stm32wbxx_hal_tsc.h"
+#endif /* HAL_TSC_MODULE_ENABLED */
+
+#ifdef HAL_UART_MODULE_ENABLED
+ #include "stm32wbxx_hal_uart.h"
+#endif /* HAL_UART_MODULE_ENABLED */
+
+#ifdef HAL_USART_MODULE_ENABLED
+ #include "stm32wbxx_hal_usart.h"
+#endif /* HAL_USART_MODULE_ENABLED */
+
+#ifdef HAL_WWDG_MODULE_ENABLED
+ #include "stm32wbxx_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 /* __STM32WBxx_HAL_CONF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/stm32wbxx_it.h
new file mode 100644
index 000000000..ca5ac9516
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/stm32wbxx_it.h
@@ -0,0 +1,81 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * @file stm32wbxx_it.h
+ * @brief This file contains the headers of the interrupt handlers.
+ *******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32WBxx_IT_H
+#define __STM32WBxx_IT_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Private includes ----------------------------------------------------------*/
+/* USER CODE BEGIN Includes */
+#include "app_common.h"
+/* 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 DebugMon_Handler(void);
+void PVD_PVM_IRQHandler(void);
+void FLASH_IRQHandler(void);
+void RCC_IRQHandler(void);
+void DMA1_Channel1_IRQHandler(void);
+void DMA1_Channel2_IRQHandler(void);
+void C2SEV_PWR_C2H_IRQHandler(void);
+void USART1_IRQHandler(void);
+void LPUART1_IRQHandler(void);
+void PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler(void);
+void IPCC_C1_RX_IRQHandler(void);
+void IPCC_C1_TX_IRQHandler(void);
+void HSEM_IRQHandler(void);
+void FPU_IRQHandler(void);
+void TIM1_TRG_COM_TIM17_IRQHandler(void);
+/* USER CODE BEGIN EFP */
+void RTC_WKUP_IRQHandler(void);
+void EXTI4_IRQHandler(void);
+/* USER CODE END EFP */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STM32WBxx_IT_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/stm_logging.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/stm_logging.h
new file mode 100644
index 000000000..a48a6398f
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/stm_logging.h
@@ -0,0 +1,60 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : stm_logging.h
+ * Description : Application header file for logging
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+#ifndef STM_LOGGING_H_
+#define STM_LOGGING_H_
+
+#define LOG_LEVEL_NONE 0 /* None */
+#define LOG_LEVEL_CRIT 1U /* Critical */
+#define LOG_LEVEL_WARN 2U /* Warning */
+#define LOG_LEVEL_INFO 3U /* Info */
+#define LOG_LEVEL_DEBG 4U /* Debug */
+
+#define APP_DBG_FULL(level, region, ...) \
+ { \
+ if (APPLI_PRINT_FILE_FUNC_LINE == 1U) \
+ { \
+ printf("\r\n[%s][%s][%d] ", DbgTraceGetFileName(__FILE__),__FUNCTION__,__LINE__); \
+ } \
+ logApplication(level, region, __VA_ARGS__); \
+ }
+#define APP_DBG(...) \
+ { \
+ if (APPLI_PRINT_FILE_FUNC_LINE == 1U) \
+ { \
+ printf("\r\n[%s][%s][%d] ", DbgTraceGetFileName(__FILE__),__FUNCTION__,__LINE__); \
+ } \
+ logApplication(LOG_LEVEL_NONE, APPLI_LOG_REGION_GENERAL, __VA_ARGS__); \
+ }
+/**
+ * This enumeration represents log regions.
+ *
+ */
+typedef enum
+{
+ APPLI_LOG_REGION_GENERAL = 1U, /* General */
+ APPLI_LOG_REGION_ZIGBEE_API = 2U, /* Zigbee API */
+} appliLogRegion_t;
+
+typedef uint8_t appliLogLevel_t;
+
+void logApplication(appliLogLevel_t aLogLevel, appliLogRegion_t aLogRegion, const char *aFormat, ...);
+
+#endif /* STM_LOGGING_H_ */
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/utilities_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/utilities_conf.h
new file mode 100644
index 000000000..d0169780c
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Inc/utilities_conf.h
@@ -0,0 +1,68 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : utilities_conf.h
+ * Description : Configuration file for STM32 Utilities.
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef UTILITIES_CONF_H
+#define UTILITIES_CONF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "cmsis_compiler.h"
+#include "string.h"
+
+/******************************************************************************
+ * common
+ ******************************************************************************/
+#define UTILS_ENTER_CRITICAL_SECTION( ) uint32_t primask_bit = __get_PRIMASK( );\
+ __disable_irq( )
+
+#define UTILS_EXIT_CRITICAL_SECTION( ) __set_PRIMASK( primask_bit )
+
+#define UTILS_MEMSET8( dest, value, size ) memset( dest, value, size);
+
+/******************************************************************************
+ * tiny low power manager
+ * (any macro that does not need to be modified can be removed)
+ ******************************************************************************/
+#define UTIL_LPM_INIT_CRITICAL_SECTION( )
+#define UTIL_LPM_ENTER_CRITICAL_SECTION( ) UTILS_ENTER_CRITICAL_SECTION( )
+#define UTIL_LPM_EXIT_CRITICAL_SECTION( ) UTILS_EXIT_CRITICAL_SECTION( )
+
+/******************************************************************************
+ * sequencer
+ * (any macro that does not need to be modified can be removed)
+ ******************************************************************************/
+#define UTIL_SEQ_INIT_CRITICAL_SECTION( )
+#define UTIL_SEQ_ENTER_CRITICAL_SECTION( ) UTILS_ENTER_CRITICAL_SECTION( )
+#define UTIL_SEQ_EXIT_CRITICAL_SECTION( ) UTILS_EXIT_CRITICAL_SECTION( )
+#define UTIL_SEQ_CONF_TASK_NBR (32)
+#define UTIL_SEQ_CONF_PRIO_NBR (2)
+#define UTIL_SEQ_MEMSET8( dest, value, size ) UTILS_MEMSET8( dest, value, size )
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*UTILITIES_CONF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/app_entry.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/app_entry.c
new file mode 100644
index 000000000..390f354ef
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/app_entry.c
@@ -0,0 +1,547 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : app_entry.c
+ * Description : Entry application source file for STM32WPAN Middleware
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "app_common.h"
+#include "main.h"
+#include "app_entry.h"
+#include "app_zigbee.h"
+#include "app_conf.h"
+#include "hw_conf.h"
+#include "cmsis_os.h"
+#include "stm_logging.h"
+#include "shci_tl.h"
+#include "stm32_lpm.h"
+#include "dbg_trace.h"
+#include "shci.h"
+
+/* Private includes -----------------------------------------------------------*/
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+/* Private typedef -----------------------------------------------------------*/
+extern RTC_HandleTypeDef hrtc;
+/* USER CODE BEGIN PTD */
+
+/* USER CODE END PTD */
+
+/* Private defines -----------------------------------------------------------*/
+/* POOL_SIZE = 2(TL_PacketHeader_t) + 258 (3(TL_EVT_HDR_SIZE) + 255(Payload size)) */
+#define POOL_SIZE (CFG_TL_EVT_QUEUE_LENGTH * 4U * DIVC(( sizeof(TL_PacketHeader_t) + TL_EVENT_FRAME_SIZE ), 4U))
+
+/* USER CODE BEGIN PD */
+
+/* USER CODE END PD */
+
+/* Private macros ------------------------------------------------------------*/
+/* USER CODE BEGIN PM */
+
+/* USER CODE END PM */
+
+/* Private variables ---------------------------------------------------------*/
+PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static uint8_t EvtPool[POOL_SIZE];
+PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static TL_CmdPacket_t SystemCmdBuffer;
+PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static uint8_t SystemSpareEvtBuffer[sizeof(TL_PacketHeader_t) + TL_EVT_HDR_SIZE + 255U];
+
+/* USER CODE BEGIN PV */
+
+/* USER CODE END PV */
+
+/* Global variables ----------------------------------------------------------*/
+osMutexId_t MtxShciId;
+osSemaphoreId_t SemShciId;
+osThreadId_t ShciUserEvtProcessId;
+
+
+
+/* Const ----------------------------------------------------------*/
+const osThreadAttr_t ShciUserEvtProcess_attr = {
+ .name = CFG_SHCI_USER_EVT_PROCESS_NAME,
+ .attr_bits = CFG_SHCI_USER_EVT_PROCESS_ATTR_BITS,
+ .cb_mem = CFG_SHCI_USER_EVT_PROCESS_CB_MEM,
+ .cb_size = CFG_SHCI_USER_EVT_PROCESS_CB_SIZE,
+ .stack_mem = CFG_SHCI_USER_EVT_PROCESS_STACK_MEM,
+ .priority = CFG_SHCI_USER_EVT_PROCESS_PRIORITY,
+ .stack_size = CFG_SHCI_USER_EVT_PROCESS_STACK_SIZE
+};
+
+/* Global function prototypes -----------------------------------------------*/
+#if(CFG_DEBUG_TRACE != 0)
+size_t DbgTraceWrite(int handle, const unsigned char * buf, size_t bufSize);
+#endif
+extern void APP_ZIGBEE_LaunchPushButtonTask(void);
+/* USER CODE BEGIN GFP */
+
+/* USER CODE END GFP */
+
+/* Private functions prototypes-----------------------------------------------*/
+static void ShciUserEvtProcess(void *argument);
+static void SystemPower_Config( void );
+static void Init_Debug( void );
+static void appe_Tl_Init( void );
+static void APPE_SysStatusNot( SHCI_TL_CmdStatus_t status );
+static void APPE_SysUserEvtRx( void * pPayload );
+static void APPE_SysEvtReadyProcessing( void );
+static void APPE_SysEvtError( SCHI_SystemErrCode_t ErrorCode);
+
+#if (CFG_HW_LPUART1_ENABLED == 1)
+extern void MX_LPUART1_UART_Init(void);
+#endif
+#if (CFG_HW_USART1_ENABLED == 1)
+extern void MX_USART1_UART_Init(void);
+#endif
+
+/* USER CODE BEGIN PFP */
+static void Led_Init(void);
+static void Button_Init(void);
+
+/* Section specific to button management using UART */
+static void RxUART_Init(void);
+static void RxCpltCallback(void);
+static void UartCmdExecute(void);
+
+#define C_SIZE_CMD_STRING 256U
+#define RX_BUFFER_SIZE 8U
+
+static uint8_t aRxBuffer[RX_BUFFER_SIZE];
+static uint8_t CommandString[C_SIZE_CMD_STRING];
+static uint16_t indexReceiveChar = 0;
+EXTI_HandleTypeDef exti_handle;
+/* USER CODE END PFP */
+
+/* Functions Definition ------------------------------------------------------*/
+void APPE_Init( void )
+{
+ SystemPower_Config(); /**< Configure the system Power Mode */
+
+ HW_TS_Init(hw_ts_InitMode_Full, &hrtc); /**< Initialize the TimerServer */
+
+/* USER CODE BEGIN APPE_Init_1 */
+ Init_Debug();
+ /**
+ * The Standby mode should not be entered before the initialization is over
+ * The default state of the Low Power Manager is to allow the Standby Mode so an request is needed here
+ */
+ UTIL_LPM_SetOffMode(1 << CFG_LPM_APP, UTIL_LPM_DISABLE);
+ Led_Init();
+ Button_Init();
+ RxUART_Init();
+/* USER CODE END APPE_Init_1 */
+ appe_Tl_Init(); /* Initialize all transport layers */
+
+ /**
+ * From now, the application is waiting for the ready event ( VS_HCI_C2_Ready )
+ * received on the system channel before starting the Stack
+ * This system event is received with APPE_SysUserEvtRx()
+ */
+/* USER CODE BEGIN APPE_Init_2 */
+
+/* USER CODE END APPE_Init_2 */
+ return;
+}
+/* USER CODE BEGIN FD */
+
+/* USER CODE END FD */
+
+/*************************************************************
+ *
+ * LOCAL FUNCTIONS
+ *
+ *************************************************************/
+static void Init_Debug( void )
+{
+#if (CFG_DEBUGGER_SUPPORTED == 1)
+ /**
+ * Keep debugger enabled while in any low power mode
+ */
+ HAL_DBGMCU_EnableDBGSleepMode();
+
+ /***************** ENABLE DEBUGGER *************************************/
+ LL_EXTI_EnableIT_32_63(LL_EXTI_LINE_48);
+ LL_C2_EXTI_EnableIT_32_63(LL_EXTI_LINE_48);
+
+#else
+
+ GPIO_InitTypeDef gpio_config = {0};
+
+ gpio_config.Pull = GPIO_NOPULL;
+ gpio_config.Mode = GPIO_MODE_ANALOG;
+
+ gpio_config.Pin = GPIO_PIN_15 | GPIO_PIN_14 | GPIO_PIN_13;
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ HAL_GPIO_Init(GPIOA, &gpio_config);
+ __HAL_RCC_GPIOA_CLK_DISABLE();
+
+ gpio_config.Pin = GPIO_PIN_4 | GPIO_PIN_3;
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ HAL_GPIO_Init(GPIOB, &gpio_config);
+ __HAL_RCC_GPIOB_CLK_DISABLE();
+
+ HAL_DBGMCU_DisableDBGSleepMode();
+ HAL_DBGMCU_DisableDBGStopMode();
+ HAL_DBGMCU_DisableDBGStandbyMode();
+
+#endif /* (CFG_DEBUGGER_SUPPORTED == 1) */
+
+#if(CFG_DEBUG_TRACE != 0)
+ DbgTraceInit();
+#endif
+
+ return;
+}
+
+/**
+ * @brief Configure the system for power optimization
+ *
+ * @note This API configures the system to be ready for low power mode
+ *
+ * @param None
+ * @retval None
+ */
+static void SystemPower_Config(void)
+{
+ /**
+ * Select HSI as system clock source after Wake Up from Stop mode
+ */
+ LL_RCC_SetClkAfterWakeFromStop(LL_RCC_STOP_WAKEUPCLOCK_HSI);
+
+ /* Initialize low power manager */
+ UTIL_LPM_Init();
+ /* Initialize the CPU2 reset value before starting CPU2 with C2BOOT */
+ LL_C2_PWR_SetPowerMode(LL_PWR_MODE_SHUTDOWN);
+
+#if (CFG_USB_INTERFACE_ENABLE != 0)
+ /**
+ * Enable USB power
+ */
+ HAL_PWREx_EnableVddUSB();
+#endif
+
+ return;
+}
+
+static void appe_Tl_Init( void )
+{
+ TL_MM_Config_t tl_mm_config;
+ SHCI_TL_HciInitConf_t SHci_Tl_Init_Conf;
+ /**< Reference table initialization */
+ TL_Init();
+
+ MtxShciId = osMutexNew( NULL );
+ SemShciId = osSemaphoreNew( 1, 0, NULL ); /*< Create the semaphore and make it busy at initialization */
+ ShciUserEvtProcessId = osThreadNew(ShciUserEvtProcess, NULL, &ShciUserEvtProcess_attr);
+
+ /**< System channel initialization */
+ SHci_Tl_Init_Conf.p_cmdbuffer = (uint8_t*)&SystemCmdBuffer;
+ SHci_Tl_Init_Conf.StatusNotCallBack = APPE_SysStatusNot;
+ shci_init(APPE_SysUserEvtRx, (void*) &SHci_Tl_Init_Conf);
+
+ /**< Memory Manager channel initialization */
+ tl_mm_config.p_BleSpareEvtBuffer = 0;
+ tl_mm_config.p_SystemSpareEvtBuffer = SystemSpareEvtBuffer;
+ tl_mm_config.p_AsynchEvtPool = EvtPool;
+ tl_mm_config.AsynchEvtPoolSize = POOL_SIZE;
+ TL_MM_Init( &tl_mm_config );
+
+ TL_Enable();
+
+ return;
+}
+
+static void APPE_SysStatusNot( SHCI_TL_CmdStatus_t status )
+{
+ switch (status)
+ {
+ case SHCI_TL_CmdBusy:
+ osMutexAcquire( MtxShciId, osWaitForever );
+ break;
+
+ case SHCI_TL_CmdAvailable:
+ osMutexRelease( MtxShciId );
+ break;
+
+ default:
+ break;
+ }
+ return;
+}
+
+/**
+ * The type of the payload for a system user event is tSHCI_UserEvtRxParam
+ * When the system event is both :
+ * - a ready event (subevtcode = SHCI_SUB_EVT_CODE_READY)
+ * - reported by the FUS (sysevt_ready_rsp == FUS_FW_RUNNING)
+ * The buffer shall not be released
+ * ( eg ((tSHCI_UserEvtRxParam*)pPayload)->status shall be set to SHCI_TL_UserEventFlow_Disable )
+ * When the status is not filled, the buffer is released by default
+ */
+static void APPE_SysUserEvtRx( void * pPayload )
+{
+ TL_AsynchEvt_t *p_sys_event;
+ p_sys_event = (TL_AsynchEvt_t*)(((tSHCI_UserEvtRxParam*)pPayload)->pckt->evtserial.evt.payload);
+
+ switch(p_sys_event->subevtcode)
+ {
+ case SHCI_SUB_EVT_CODE_READY:
+ APPE_SysEvtReadyProcessing();
+ break;
+ case SHCI_SUB_EVT_ERROR_NOTIF:
+ APPE_SysEvtError((SCHI_SystemErrCode_t) (p_sys_event->payload[0]));
+ break;
+ default:
+ break;
+ }
+ return;
+}
+
+/**
+ * @brief Notify a system error coming from the M0 firmware
+ * @param ErrorCode : errorCode detected by the M0 firmware
+ *
+ * @retval None
+ */
+static void APPE_SysEvtError( SCHI_SystemErrCode_t ErrorCode)
+{
+ switch(ErrorCode)
+ {
+ case ERR_ZIGBEE_UNKNOWN_CMD:
+ APP_DBG("** ERR_ZIGBEE : UNKNOWN_CMD \n");
+ break;
+ default:
+ APP_DBG("** ERR_ZIGBEE : ErroCode=%d \n",ErrorCode);
+ break;
+ }
+ return;
+}
+
+static void APPE_SysEvtReadyProcessing( void )
+{
+ /* Traces channel initialization */
+ TL_TRACES_Init( );
+
+ APP_ZIGBEE_Init();
+ UTIL_LPM_SetOffMode(1U << CFG_LPM_APP, UTIL_LPM_ENABLE);
+ return;
+}
+
+/*************************************************************
+ *
+ * FREERTOS WRAPPER FUNCTIONS
+ *
+*************************************************************/
+static void ShciUserEvtProcess(void *argument)
+{
+ UNUSED(argument);
+ for(;;)
+ {
+ /* USER CODE BEGIN SHCI_USER_EVT_PROCESS_1 */
+
+ /* USER CODE END SHCI_USER_EVT_PROCESS_1 */
+ osThreadFlagsWait(1, osFlagsWaitAny, osWaitForever);
+ shci_user_evt_proc();
+ /* USER CODE BEGIN SHCI_USER_EVT_PROCESS_2 */
+
+ /* USER CODE END SHCI_USER_EVT_PROCESS_2 */
+ }
+}
+/* USER CODE BEGIN FD_LOCAL_FUNCTIONS */
+static void Led_Init( void )
+{
+#if (CFG_LED_SUPPORTED == 1U)
+ /**
+ * Leds Initialization
+ */
+
+ BSP_LED_Init(LED_BLUE);
+ BSP_LED_Init(LED_GREEN);
+ BSP_LED_Init(LED_RED);
+
+#endif
+
+ return;
+}
+
+static void Button_Init( void )
+{
+#if (CFG_BUTTON_SUPPORTED == 1U)
+ /**
+ * Button Initialization
+ */
+ BSP_PB_Init(BUTTON_SW1, BUTTON_MODE_EXTI);
+ BSP_PB_Init(BUTTON_SW2, BUTTON_MODE_EXTI);
+ BSP_PB_Init(BUTTON_SW3, BUTTON_MODE_EXTI);
+#endif
+
+ return;
+}
+
+/* USER CODE END FD_LOCAL_FUNCTIONS */
+
+/*************************************************************
+ *
+ * WRAP FUNCTIONS
+ *
+ *************************************************************/
+
+void shci_notify_asynch_evt(void* pdata)
+{
+ UNUSED(pdata);
+ osThreadFlagsSet(ShciUserEvtProcessId,1);
+ return;
+}
+
+void shci_cmd_resp_release(uint32_t flag)
+{
+ UNUSED(flag);
+ osSemaphoreRelease( SemShciId );
+ return;
+}
+
+void shci_cmd_resp_wait(uint32_t timeout)
+{
+ UNUSED(timeout);
+ osSemaphoreAcquire( SemShciId, osWaitForever );
+ return;
+}
+
+/* Received trace buffer from M0 */
+void TL_TRACES_EvtReceived( TL_EvtPacket_t * hcievt )
+{
+#if(CFG_DEBUG_TRACE != 0)
+ /* Call write/print function using DMA from dbg_trace */
+ /* - Cast to TL_AsynchEvt_t* to get "real" payload (without Sub Evt code 2bytes),
+ - (-2) to size to remove Sub Evt Code */
+ DbgTraceWrite(1U, (const unsigned char *) ((TL_AsynchEvt_t *)(hcievt->evtserial.evt.payload))->payload, hcievt->evtserial.evt.plen - 2U);
+#endif /* CFG_DEBUG_TRACE */
+ /* Release buffer */
+ TL_MM_EvtDone( hcievt );
+}
+/**
+ * @brief Initialisation of the trace mechanism
+ * @param None
+ * @retval None
+ */
+#if(CFG_DEBUG_TRACE != 0)
+void DbgOutputInit( void )
+{
+#ifdef CFG_DEBUG_TRACE_UART
+ MX_USART1_UART_Init();
+ return;
+#endif
+}
+
+/**
+ * @brief Management of the traces
+ * @param p_data : data
+ * @param size : size
+ * @param call-back :
+ * @retval None
+ */
+void DbgOutputTraces( uint8_t *p_data, uint16_t size, void (*cb)(void) )
+{
+ HW_UART_Transmit_DMA(CFG_DEBUG_TRACE_UART, p_data, size, cb);
+
+ return;
+}
+#endif
+
+/* USER CODE BEGIN FD_WRAP_FUNCTIONS */
+/**
+ * @brief This function manage the Push button action
+ * @param GPIO_Pin : GPIO pin which has been activated
+ * @retval None
+ */
+void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
+{
+ switch (GPIO_Pin) {
+ case BUTTON_SW1_PIN:
+ APP_ZIGBEE_LaunchPushButtonTask();
+ break;
+
+ case BUTTON_SW2_PIN:
+ break;
+
+ case BUTTON_SW3_PIN:
+ break;
+
+ default:
+ break;
+ }
+}
+
+static void RxUART_Init(void)
+{
+ HW_UART_Receive_IT(CFG_DEBUG_TRACE_UART, aRxBuffer, 1U, RxCpltCallback);
+}
+
+static void RxCpltCallback(void)
+{
+ /* Filling buffer and wait for '\r' char */
+ if (indexReceiveChar < C_SIZE_CMD_STRING)
+ {
+ if (aRxBuffer[0] == '\r')
+ {
+ APP_DBG("received %s", CommandString);
+
+ UartCmdExecute();
+
+ /* Clear receive buffer and character counter*/
+ indexReceiveChar = 0;
+ memset(CommandString, 0, C_SIZE_CMD_STRING);
+ }
+ else
+ {
+ CommandString[indexReceiveChar++] = aRxBuffer[0];
+ }
+ }
+
+ /* Once a character has been sent, put back the device in reception mode */
+ HW_UART_Receive_IT(CFG_DEBUG_TRACE_UART, aRxBuffer, 1U, RxCpltCallback);
+}
+
+static void UartCmdExecute(void)
+{
+ /* Parse received CommandString */
+ if(strcmp((char const*)CommandString, "SW1") == 0)
+ {
+ APP_DBG("SW1 OK");
+ exti_handle.Line = EXTI_LINE_4;
+ HAL_EXTI_GenerateSWI(&exti_handle);
+ }
+ else if (strcmp((char const*)CommandString, "SW2") == 0)
+ {
+ APP_DBG("SW2 OK");
+ exti_handle.Line = EXTI_LINE_0;
+ HAL_EXTI_GenerateSWI(&exti_handle);
+ }
+ else if (strcmp((char const*)CommandString, "SW3") == 0)
+ {
+ APP_DBG("SW3 OK");
+ exti_handle.Line = EXTI_LINE_1;
+ HAL_EXTI_GenerateSWI(&exti_handle);
+ }
+ else
+ {
+ APP_DBG("NOT RECOGNIZED COMMAND : %s", CommandString);
+ }
+}
+/* USER CODE END FD_WRAP_FUNCTIONS */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/freertos_port.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/freertos_port.c
new file mode 100644
index 000000000..e96637686
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/freertos_port.c
@@ -0,0 +1,322 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : freertos_port.c
+ * Description : Custom porting of FreeRTOS functionalities
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "app_common.h"
+
+#include "FreeRTOS.h"
+#include "task.h"
+#include "stm32_lpm.h"
+
+/* Private typedef -----------------------------------------------------------*/
+typedef struct
+{
+ uint64_t LpTimeDiffVal;
+ uint32_t LpTimeLeftOnEntry;
+ uint8_t LpTimerFreeRTOS_Id;
+} LpTimerContext_t;
+
+/* Private defines -----------------------------------------------------------*/
+#ifndef configSYSTICK_CLOCK_HZ
+#define configSYSTICK_CLOCK_HZ configCPU_CLOCK_HZ
+/* Ensure the SysTick is clocked at the same frequency as the core. */
+#define portNVIC_SYSTICK_CLK_BIT ( 1UL << 2UL )
+#else
+/* The way the SysTick is clocked is not modified in case it is not the same
+ as the core. */
+#define portNVIC_SYSTICK_CLK_BIT ( 0 )
+#endif
+
+#define CPU_CLOCK_KHZ ( configCPU_CLOCK_HZ / 1000 )
+
+/* Constants required to manipulate the core. Registers first... */
+#define portNVIC_SYSTICK_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000e010 ) )
+#define portNVIC_SYSTICK_LOAD_REG ( * ( ( volatile uint32_t * ) 0xe000e014 ) )
+#define portNVIC_SYSTICK_CURRENT_VALUE_REG ( * ( ( volatile uint32_t * ) 0xe000e018 ) )
+#define portNVIC_SYSTICK_INT_BIT ( 1UL << 1UL )
+#define portNVIC_SYSTICK_ENABLE_BIT ( 1UL << 0UL )
+#define portNVIC_SYSTICK_COUNT_FLAG_BIT ( 1UL << 16UL )
+
+/* Private macros ------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+/*
+ * The number of SysTick increments that make up one tick period.
+ */
+#if ( CFG_LPM_SUPPORTED != 0)
+static uint32_t ulTimerCountsForOneTick;
+
+static LpTimerContext_t LpTimerContext;
+#endif
+/* Global variables ----------------------------------------------------------*/
+/* Private function prototypes -----------------------------------------------*/
+#if ( CFG_LPM_SUPPORTED != 0)
+static void LpTimerInit( void );
+static void LpTimerCb( void );
+static void LpTimerStart( uint32_t time_to_sleep );
+static void LpEnter( void );
+static uint32_t LpGetElapsedTime( void );
+void vPortSetupTimerInterrupt( void );
+#endif
+
+/* Functions Definition ------------------------------------------------------*/
+
+/**
+ * @brief Implement the tickless feature
+ *
+ *
+ * @param: xExpectedIdleTime is given in number of FreeRTOS Ticks
+ * @retval: None
+ */
+void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime )
+{
+ /* If low power is not used, do not stop the SysTick and continue execution */
+#if ( CFG_LPM_SUPPORTED != 0)
+ /**
+ * Although this is not documented as such, when xExpectedIdleTime = 0xFFFFFFFF = (~0),
+ * it likely means the system may enter low power for ever ( from a FreeRTOS point of view ).
+ * Otherwise, for a FreeRTOS tick set to 1ms, that would mean it is requested to wakeup in 8 years from now.
+ * When the system may enter low power mode for ever, FreeRTOS is not really interested to maintain a
+ * systick count and when the system exits from low power mode, there is no need to update the count with
+ * the time spent in low power mode
+ */
+ uint32_t ulCompleteTickPeriods;
+
+ /* Stop the SysTick to avoid the interrupt to occur while in the critical section.
+ * Otherwise, this will prevent the device to enter low power mode
+ * At this time, an update of the systick will not be considered
+ *
+ */
+ portNVIC_SYSTICK_CTRL_REG &= ~portNVIC_SYSTICK_ENABLE_BIT;
+
+ /* Enter a critical section but don't use the taskENTER_CRITICAL()
+ method as that will mask interrupts that should exit sleep mode. */
+ __disable_irq();
+ __DSB();
+ __ISB();
+
+ /* If a context switch is pending or a task is waiting for the scheduler
+ to be unsuspended then abandon the low power entry. */
+ if( eTaskConfirmSleepModeStatus() == eAbortSleep )
+ {
+ /* Restart SysTick. */
+ portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT;
+
+ /* Re-enable interrupts - see comments above __disable_interrupt()
+ call above. */
+ __enable_irq();
+ }
+ else
+ {
+ if (xExpectedIdleTime != (~0))
+ {
+ /* Remove one tick to wake up before the event occurs */
+ xExpectedIdleTime--;
+ /* Start the low power timer */
+ LpTimerStart( xExpectedIdleTime );
+ }
+
+ /* Enter low power mode */
+ LpEnter( );
+
+ if (xExpectedIdleTime != (~0))
+ {
+ /**
+ * Get the number of FreeRTOS ticks that has been suppressed
+ * In the current implementation, this shall be kept in critical section
+ * so that the timer server return the correct elapsed time
+ */
+ ulCompleteTickPeriods = LpGetElapsedTime( );
+ vTaskStepTick( ulCompleteTickPeriods );
+ }
+
+ /* Restart SysTick */
+ portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;
+ portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT;
+ portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;
+
+ /* Exit with interrUpts enabled. */
+ __enable_irq();
+ }
+#endif
+}
+
+/*
+ * Setup the systick timer to generate the tick interrupts at the required
+ * frequency and initialize a low power timer
+ * The current implementation is kept as close as possible to the default tickless
+ * mode provided.
+ * The systick is still used when there is no need to go in low power mode.
+ * When the system needs to enter low power mode, the tick is suppressed and a low power timer
+ * is used over that time
+ * Note that in sleep mode, the system clock is still running and the default tickless implementation
+ * using systick could have been kept.
+ * However, as at that time, it is not yet known whereas the low power mode that will be used is stop mode or
+ * sleep mode, it is easier and simpler to go with a low power timer as soon as the tick need to be
+ * suppressed.
+ */
+#if ( CFG_LPM_SUPPORTED != 0)
+void vPortSetupTimerInterrupt( void )
+{
+ LpTimerInit( );
+
+ /* Calculate the constants required to configure the tick interrupt. */
+ ulTimerCountsForOneTick = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ );
+
+ /* Stop and clear the SysTick. */
+ portNVIC_SYSTICK_CTRL_REG = 0UL;
+ portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;
+
+ /* Configure SysTick to interrupt at the requested rate. */
+ portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;
+ portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT );
+}
+#endif
+
+/**
+ * @brief The current implementation uses the hw_timerserver to provide a low power timer
+ * This may be replaced by another low power timer.
+ *
+ * @param None
+ * @retval None
+ */
+#if ( CFG_LPM_SUPPORTED != 0)
+static void LpTimerInit( void )
+{
+ ( void ) HW_TS_Create(CFG_TIM_PROC_ID_ISR, &(LpTimerContext.LpTimerFreeRTOS_Id), hw_ts_SingleShot, LpTimerCb);
+ LpTimerContext.LpTimeDiffVal = 0;
+
+ return;
+}
+#endif
+
+/**
+ * @brief Low power timer callback
+ *
+ * @param None
+ * @retval None
+ */
+#if ( CFG_LPM_SUPPORTED != 0)
+static void LpTimerCb( void )
+{
+ /**
+ * Nothing to be done
+ */
+
+ return;
+}
+#endif
+
+/**
+ * @brief Request to start a low power timer ( running is stop mode )
+ *
+ * @param time_to_sleep : Number of FreeRTOS ticks
+ * @retval None
+ */
+#if ( CFG_LPM_SUPPORTED != 0)
+static void LpTimerStart( uint32_t time_to_sleep )
+{
+ uint64_t time;
+
+ /* Converts the number of FreeRTOS ticks into hw timer tick */
+
+ time = (time_to_sleep * 1000 * 1000 );
+ time = time / ( CFG_TS_TICK_VAL * configTICK_RATE_HZ );
+
+ HW_TS_Start(LpTimerContext.LpTimerFreeRTOS_Id, (uint32_t)time);
+
+ /**
+ * There might be other timers already running in the timer server that may elapse
+ * before this one.
+ * Store how long before the next event so that on wakeup, it will be possible to calculate
+ * how long the tick has been suppressed
+ */
+ LpTimerContext.LpTimeLeftOnEntry = HW_TS_RTC_ReadLeftTicksToCount( );
+
+ return;
+}
+#endif
+
+/**
+ * @brief Enter low power mode
+ *
+ * @param None
+ * @retval None
+ */
+#if ( CFG_LPM_SUPPORTED != 0)
+static void LpEnter( void )
+{
+#if ( CFG_LPM_SUPPORTED == 1)
+ UTIL_LPM_EnterLowPower();
+#endif
+ return;
+}
+#endif
+
+/**
+ * @brief Read how long the tick has been suppressed
+ *
+ * @param None
+ * @retval The number of tick rate (FreeRTOS tick)
+ */
+#if ( CFG_LPM_SUPPORTED != 0)
+static uint32_t LpGetElapsedTime( void )
+{
+ uint64_t val_ticks, time_us, diff_ps;
+ uint32_t LpTimeLeftOnExit;
+
+ LpTimeLeftOnExit = HW_TS_RTC_ReadLeftTicksToCount();
+ time_us = (CFG_TS_TICK_VAL) * (uint64_t)(LpTimerContext.LpTimeLeftOnEntry - LpTimeLeftOnExit);
+
+ /* Corrects the time precision lost in CFG_TS_TICK_VAL computation */
+
+ /* Compute the amount of pico seconds lost at each TS ticks */
+ diff_ps = DIVR( ((uint64_t)CFG_RTCCLK_DIV * 1000000 * 1000000), (uint64_t)LSE_VALUE );
+ diff_ps -= DIVF( (CFG_RTCCLK_DIV * 1000000), LSE_VALUE ) * 1000000;
+ /* Compute the total amount of time shift */
+ diff_ps *= (uint64_t)(LpTimerContext.LpTimeLeftOnEntry - LpTimeLeftOnExit);
+
+ /* Save the time shift for next time */
+ LpTimerContext.LpTimeDiffVal += diff_ps;
+
+ while(LpTimerContext.LpTimeDiffVal >= (uint64_t)(1000 * 1000))
+ {
+ /* Reports the time difference into returned time elapsed value */
+ time_us++;
+ LpTimerContext.LpTimeDiffVal -= (uint64_t)(1000 * 1000);
+ }
+
+ /* Convert uS time into OS ticks */
+ val_ticks = time_us * configTICK_RATE_HZ;
+ val_ticks = val_ticks / (1000 * 1000);
+
+ /**
+ * The system may have been out from another reason than the timer
+ * Stop the timer after the elapsed time is calculated other wise, HW_TS_RTC_ReadLeftTicksToCount()
+ * may return 0xFFFF ( TIMER LIST EMPTY )
+ * It does not hurt stopping a timer that exists but is not running.
+ */
+ HW_TS_Stop(LpTimerContext.LpTimerFreeRTOS_Id);
+
+ return (uint32_t)val_ticks;
+}
+#endif
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/hw_timerserver.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/hw_timerserver.c
new file mode 100644
index 000000000..c0af6a14a
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/hw_timerserver.c
@@ -0,0 +1,895 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : hw_timerserver.c
+ * Description : Hardware timerserver source file for STM32WPAN Middleware.
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "app_common.h"
+#include "hw_conf.h"
+
+/* Private typedef -----------------------------------------------------------*/
+typedef enum
+{
+ TimerID_Free,
+ TimerID_Created,
+ TimerID_Running
+}TimerIDStatus_t;
+
+typedef enum
+{
+ SSR_Read_Requested,
+ SSR_Read_Not_Requested
+}RequestReadSSR_t;
+
+typedef enum
+{
+ WakeupTimerValue_Overpassed,
+ WakeupTimerValue_LargeEnough
+}WakeupTimerLimitation_Status_t;
+
+typedef struct
+{
+ HW_TS_pTimerCb_t pTimerCallBack;
+ uint32_t CounterInit;
+ uint32_t CountLeft;
+ TimerIDStatus_t TimerIDStatus;
+ HW_TS_Mode_t TimerMode;
+ uint32_t TimerProcessID;
+ uint8_t PreviousID;
+ uint8_t NextID;
+}TimerContext_t;
+
+/* Private defines -----------------------------------------------------------*/
+#define SSR_FORBIDDEN_VALUE 0xFFFFFFFF
+#define TIMER_LIST_EMPTY 0xFFFF
+
+/* Private macros ------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+
+/**
+ * START of Section TIMERSERVER_CONTEXT
+ */
+
+PLACE_IN_SECTION("TIMERSERVER_CONTEXT") static volatile TimerContext_t aTimerContext[CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER];
+PLACE_IN_SECTION("TIMERSERVER_CONTEXT") static volatile uint8_t CurrentRunningTimerID;
+PLACE_IN_SECTION("TIMERSERVER_CONTEXT") static volatile uint8_t PreviousRunningTimerID;
+PLACE_IN_SECTION("TIMERSERVER_CONTEXT") static volatile uint32_t SSRValueOnLastSetup;
+PLACE_IN_SECTION("TIMERSERVER_CONTEXT") static volatile WakeupTimerLimitation_Status_t WakeupTimerLimitation;
+
+/**
+ * END of Section TIMERSERVER_CONTEXT
+ */
+
+static RTC_HandleTypeDef *phrtc; /**< RTC handle */
+static uint8_t WakeupTimerDivider;
+static uint8_t AsynchPrescalerUserConfig;
+static uint16_t SynchPrescalerUserConfig;
+static volatile uint16_t MaxWakeupTimerSetup;
+
+/* Global variables ----------------------------------------------------------*/
+/* Private function prototypes -----------------------------------------------*/
+static void RestartWakeupCounter(uint16_t Value);
+static uint16_t ReturnTimeElapsed(void);
+static void RescheduleTimerList(void);
+static void UnlinkTimer(uint8_t TimerID, RequestReadSSR_t RequestReadSSR);
+static void LinkTimerBefore(uint8_t TimerID, uint8_t RefTimerID);
+static void LinkTimerAfter(uint8_t TimerID, uint8_t RefTimerID);
+static uint16_t linkTimer(uint8_t TimerID);
+static uint32_t ReadRtcSsrValue(void);
+
+__weak void HW_TS_RTC_CountUpdated_AppNot(void);
+
+/* Functions Definition ------------------------------------------------------*/
+
+/**
+ * @brief Read the RTC_SSR value
+ * As described in the reference manual, the RTC_SSR shall be read twice to ensure
+ * reliability of the value
+ * @param None
+ * @retval SSR value read
+ */
+static uint32_t ReadRtcSsrValue(void)
+{
+ uint32_t first_read;
+ uint32_t second_read;
+
+ first_read = (uint32_t)(READ_BIT(RTC->SSR, RTC_SSR_SS));
+
+ second_read = (uint32_t)(READ_BIT(RTC->SSR, RTC_SSR_SS));
+
+ while(first_read != second_read)
+ {
+ first_read = second_read;
+
+ second_read = (uint32_t)(READ_BIT(RTC->SSR, RTC_SSR_SS));
+ }
+
+ return second_read;
+}
+
+/**
+ * @brief Insert a Timer in the list after the Timer ID specified
+ * @param TimerID: The ID of the Timer
+ * @param RefTimerID: The ID of the Timer to be linked after
+ * @retval None
+ */
+static void LinkTimerAfter(uint8_t TimerID, uint8_t RefTimerID)
+{
+ uint8_t next_id;
+
+ next_id = aTimerContext[RefTimerID].NextID;
+
+ if(next_id != CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER)
+ {
+ aTimerContext[next_id].PreviousID = TimerID;
+ }
+ aTimerContext[TimerID].NextID = next_id;
+ aTimerContext[TimerID].PreviousID = RefTimerID ;
+ aTimerContext[RefTimerID].NextID = TimerID;
+
+ return;
+}
+
+/**
+ * @brief Insert a Timer in the list before the ID specified
+ * @param TimerID: The ID of the Timer
+ * @param RefTimerID: The ID of the Timer to be linked before
+ * @retval None
+ */
+static void LinkTimerBefore(uint8_t TimerID, uint8_t RefTimerID)
+{
+ uint8_t previous_id;
+
+ if(RefTimerID != CurrentRunningTimerID)
+ {
+ previous_id = aTimerContext[RefTimerID].PreviousID;
+
+ aTimerContext[previous_id].NextID = TimerID;
+ aTimerContext[TimerID].NextID = RefTimerID;
+ aTimerContext[TimerID].PreviousID = previous_id ;
+ aTimerContext[RefTimerID].PreviousID = TimerID;
+ }
+ else
+ {
+ aTimerContext[TimerID].NextID = RefTimerID;
+ aTimerContext[RefTimerID].PreviousID = TimerID;
+ }
+
+ return;
+}
+
+/**
+ * @brief Insert a Timer in the list
+ * @param TimerID: The ID of the Timer
+ * @retval None
+ */
+static uint16_t linkTimer(uint8_t TimerID)
+{
+ uint32_t time_left;
+ uint16_t time_elapsed;
+ uint8_t timer_id_lookup;
+ uint8_t next_id;
+
+ if(CurrentRunningTimerID == CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER)
+ {
+ /**
+ * No timer in the list
+ */
+ PreviousRunningTimerID = CurrentRunningTimerID;
+ CurrentRunningTimerID = TimerID;
+ aTimerContext[TimerID].NextID = CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER;
+
+ SSRValueOnLastSetup = SSR_FORBIDDEN_VALUE;
+ time_elapsed = 0;
+ }
+ else
+ {
+ time_elapsed = ReturnTimeElapsed();
+
+ /**
+ * update count of the timer to be linked
+ */
+ aTimerContext[TimerID].CountLeft += time_elapsed;
+ time_left = aTimerContext[TimerID].CountLeft;
+
+ /**
+ * Search for index where the new timer shall be linked
+ */
+ if(aTimerContext[CurrentRunningTimerID].CountLeft <= time_left)
+ {
+ /**
+ * Search for the ID after the first one
+ */
+ timer_id_lookup = CurrentRunningTimerID;
+ next_id = aTimerContext[timer_id_lookup].NextID;
+ while((next_id != CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER) && (aTimerContext[next_id].CountLeft <= time_left))
+ {
+ timer_id_lookup = aTimerContext[timer_id_lookup].NextID;
+ next_id = aTimerContext[timer_id_lookup].NextID;
+ }
+
+ /**
+ * Link after the ID
+ */
+ LinkTimerAfter(TimerID, timer_id_lookup);
+ }
+ else
+ {
+ /**
+ * Link before the first ID
+ */
+ LinkTimerBefore(TimerID, CurrentRunningTimerID);
+ PreviousRunningTimerID = CurrentRunningTimerID;
+ CurrentRunningTimerID = TimerID;
+ }
+ }
+
+ return time_elapsed;
+}
+
+/**
+ * @brief Remove a Timer from the list
+ * @param TimerID: The ID of the Timer
+ * @param RequestReadSSR: Request to read the SSR register or not
+ * @retval None
+ */
+static void UnlinkTimer(uint8_t TimerID, RequestReadSSR_t RequestReadSSR)
+{
+ uint8_t previous_id;
+ uint8_t next_id;
+
+ if(TimerID == CurrentRunningTimerID)
+ {
+ PreviousRunningTimerID = CurrentRunningTimerID;
+ CurrentRunningTimerID = aTimerContext[TimerID].NextID;
+ }
+ else
+ {
+ previous_id = aTimerContext[TimerID].PreviousID;
+ next_id = aTimerContext[TimerID].NextID;
+
+ aTimerContext[previous_id].NextID = aTimerContext[TimerID].NextID;
+ if(next_id != CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER)
+ {
+ aTimerContext[next_id].PreviousID = aTimerContext[TimerID].PreviousID;
+ }
+ }
+
+ /**
+ * Timer is out of the list
+ */
+ aTimerContext[TimerID].TimerIDStatus = TimerID_Created;
+
+ if((CurrentRunningTimerID == CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER) && (RequestReadSSR == SSR_Read_Requested))
+ {
+ SSRValueOnLastSetup = SSR_FORBIDDEN_VALUE;
+ }
+
+ return;
+}
+
+/**
+ * @brief Return the number of ticks counted by the wakeuptimer since it has been started
+ * @note The API is reading the SSR register to get how many ticks have been counted
+ * since the time the timer has been started
+ * @param None
+ * @retval Time expired in Ticks
+ */
+static uint16_t ReturnTimeElapsed(void)
+{
+ uint32_t return_value;
+ uint32_t wrap_counter;
+
+ if(SSRValueOnLastSetup != SSR_FORBIDDEN_VALUE)
+ {
+ return_value = ReadRtcSsrValue(); /**< Read SSR register first */
+
+ if (SSRValueOnLastSetup >= return_value)
+ {
+ return_value = SSRValueOnLastSetup - return_value;
+ }
+ else
+ {
+ wrap_counter = SynchPrescalerUserConfig - return_value;
+ return_value = SSRValueOnLastSetup + wrap_counter;
+ }
+
+ /**
+ * At this stage, ReturnValue holds the number of ticks counted by SSR
+ * Need to translate in number of ticks counted by the Wakeuptimer
+ */
+ return_value = return_value*AsynchPrescalerUserConfig;
+ return_value = return_value >> WakeupTimerDivider;
+ }
+ else
+ {
+ return_value = 0;
+ }
+
+ return (uint16_t)return_value;
+}
+
+/**
+ * @brief Set the wakeup counter
+ * @note The API is writing the counter value so that the value is decreased by one to cope with the fact
+ * the interrupt is generated with 1 extra clock cycle (See RefManuel)
+ * It assumes all condition are met to be allowed to write the wakeup counter
+ * @param Value: Value to be written in the counter
+ * @retval None
+ */
+static void RestartWakeupCounter(uint16_t Value)
+{
+ /**
+ * The wakeuptimer has been disabled in the calling function to reduce the time to poll the WUTWF
+ * FLAG when the new value will have to be written
+ * __HAL_RTC_WAKEUPTIMER_DISABLE(phrtc);
+ */
+
+ if(Value == 0)
+ {
+ SSRValueOnLastSetup = ReadRtcSsrValue();
+
+ /**
+ * Simulate that the Timer expired
+ */
+ HAL_NVIC_SetPendingIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID);
+ }
+ else
+ {
+ if((Value > 1) ||(WakeupTimerDivider != 1))
+ {
+ Value -= 1;
+ }
+
+ while(__HAL_RTC_WAKEUPTIMER_GET_FLAG(phrtc, RTC_FLAG_WUTWF) == RESET);
+
+ /**
+ * make sure to clear the flags after checking the WUTWF.
+ * It takes 2 RTCCLK between the time the WUTE bit is disabled and the
+ * time the timer is disabled. The WUTWF bit somehow guarantee the system is stable
+ * Otherwise, when the timer is periodic with 1 Tick, it may generate an extra interrupt in between
+ * due to the autoreload feature
+ */
+ __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(phrtc, RTC_FLAG_WUTF); /**< Clear flag in RTC module */
+ __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG(); /**< Clear flag in EXTI module */
+ HAL_NVIC_ClearPendingIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Clear pending bit in NVIC */
+
+ MODIFY_REG(RTC->WUTR, RTC_WUTR_WUT, Value);
+
+ /**
+ * Update the value here after the WUTWF polling that may take some time
+ */
+ SSRValueOnLastSetup = ReadRtcSsrValue();
+
+ __HAL_RTC_WAKEUPTIMER_ENABLE(phrtc); /**< Enable the Wakeup Timer */
+
+ HW_TS_RTC_CountUpdated_AppNot();
+ }
+
+ return ;
+}
+
+/**
+ * @brief Reschedule the list of timer
+ * @note 1) Update the count left for each timer in the list
+ * 2) Setup the wakeuptimer
+ * @param None
+ * @retval None
+ */
+static void RescheduleTimerList(void)
+{
+ uint8_t localTimerID;
+ uint32_t timecountleft;
+ uint16_t wakeup_timer_value;
+ uint16_t time_elapsed;
+
+ /**
+ * The wakeuptimer is disabled now to reduce the time to poll the WUTWF
+ * FLAG when the new value will have to be written
+ */
+ if((READ_BIT(RTC->CR, RTC_CR_WUTE) == (RTC_CR_WUTE)) == SET)
+ {
+ /**
+ * Wait for the flag to be back to 0 when the wakeup timer is enabled
+ */
+ while(__HAL_RTC_WAKEUPTIMER_GET_FLAG(phrtc, RTC_FLAG_WUTWF) == SET);
+ }
+ __HAL_RTC_WAKEUPTIMER_DISABLE(phrtc); /**< Disable the Wakeup Timer */
+
+ localTimerID = CurrentRunningTimerID;
+
+ /**
+ * Calculate what will be the value to write in the wakeuptimer
+ */
+ timecountleft = aTimerContext[localTimerID].CountLeft;
+
+ /**
+ * Read how much has been counted
+ */
+ time_elapsed = ReturnTimeElapsed();
+
+ if(timecountleft < time_elapsed )
+ {
+ /**
+ * There is no tick left to count
+ */
+ wakeup_timer_value = 0;
+ WakeupTimerLimitation = WakeupTimerValue_LargeEnough;
+ }
+ else
+ {
+ if(timecountleft > (time_elapsed + MaxWakeupTimerSetup))
+ {
+ /**
+ * The number of tick left is greater than the Wakeuptimer maximum value
+ */
+ wakeup_timer_value = MaxWakeupTimerSetup;
+
+ WakeupTimerLimitation = WakeupTimerValue_Overpassed;
+ }
+ else
+ {
+ wakeup_timer_value = timecountleft - time_elapsed;
+ WakeupTimerLimitation = WakeupTimerValue_LargeEnough;
+ }
+
+ }
+
+ /**
+ * update ticks left to be counted for each timer
+ */
+ while(localTimerID != CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER)
+ {
+ if (aTimerContext[localTimerID].CountLeft < time_elapsed)
+ {
+ aTimerContext[localTimerID].CountLeft = 0;
+ }
+ else
+ {
+ aTimerContext[localTimerID].CountLeft -= time_elapsed;
+ }
+ localTimerID = aTimerContext[localTimerID].NextID;
+ }
+
+ /**
+ * Write next count
+ */
+ RestartWakeupCounter(wakeup_timer_value);
+
+ return ;
+}
+
+/* Public functions ----------------------------------------------------------*/
+
+/**
+ * For all public interface except that may need write access to the RTC, the RTC
+ * shall be unlock at the beginning and locked at the output
+ * In order to ease maintainability, the unlock is done at the top and the lock at then end
+ * in case some new implementation is coming in the future
+ */
+
+void HW_TS_RTC_Wakeup_Handler(void)
+{
+ HW_TS_pTimerCb_t ptimer_callback;
+ uint32_t timer_process_id;
+ uint8_t local_current_running_timer_id;
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ uint32_t primask_bit;
+#endif
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ primask_bit = __get_PRIMASK(); /**< backup PRIMASK bit */
+ __disable_irq(); /**< Disable all interrupts by setting PRIMASK bit on Cortex*/
+#endif
+
+/* Disable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_DISABLE( phrtc );
+
+ /**
+ * Disable the Wakeup Timer
+ * This may speed up a bit the processing to wait the timer to be disabled
+ * The timer is still counting 2 RTCCLK
+ */
+ __HAL_RTC_WAKEUPTIMER_DISABLE(phrtc);
+
+ local_current_running_timer_id = CurrentRunningTimerID;
+
+ if(aTimerContext[local_current_running_timer_id].TimerIDStatus == TimerID_Running)
+ {
+ ptimer_callback = aTimerContext[local_current_running_timer_id].pTimerCallBack;
+ timer_process_id = aTimerContext[local_current_running_timer_id].TimerProcessID;
+
+ /**
+ * It should be good to check whether the TimeElapsed is greater or not than the tick left to be counted
+ * However, due to the inaccuracy of the reading of the time elapsed, it may return there is 1 tick
+ * to be left whereas the count is over
+ * A more secure implementation has been done with a flag to state whereas the full count has been written
+ * in the wakeuptimer or not
+ */
+ if(WakeupTimerLimitation != WakeupTimerValue_Overpassed)
+ {
+ if(aTimerContext[local_current_running_timer_id].TimerMode == hw_ts_Repeated)
+ {
+ UnlinkTimer(local_current_running_timer_id, SSR_Read_Not_Requested);
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+ HW_TS_Start(local_current_running_timer_id, aTimerContext[local_current_running_timer_id].CounterInit);
+
+ /* Disable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_DISABLE( phrtc );
+ }
+ else
+ {
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+ HW_TS_Stop(local_current_running_timer_id);
+
+ /* Disable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_DISABLE( phrtc );
+ }
+
+ HW_TS_RTC_Int_AppNot(timer_process_id, local_current_running_timer_id, ptimer_callback);
+ }
+ else
+ {
+ RescheduleTimerList();
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+ }
+ }
+ else
+ {
+ /**
+ * We should never end up in this case
+ * However, if due to any bug in the timer server this is the case, the mistake may not impact the user.
+ * We could just clean the interrupt flag and get out from this unexpected interrupt
+ */
+ while(__HAL_RTC_WAKEUPTIMER_GET_FLAG(phrtc, RTC_FLAG_WUTWF) == RESET);
+
+ /**
+ * make sure to clear the flags after checking the WUTWF.
+ * It takes 2 RTCCLK between the time the WUTE bit is disabled and the
+ * time the timer is disabled. The WUTWF bit somehow guarantee the system is stable
+ * Otherwise, when the timer is periodic with 1 Tick, it may generate an extra interrupt in between
+ * due to the autoreload feature
+ */
+ __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(phrtc, RTC_FLAG_WUTF); /**< Clear flag in RTC module */
+ __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG(); /**< Clear flag in EXTI module */
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+ }
+
+ /* Enable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_ENABLE( phrtc );
+
+ return;
+}
+
+void HW_TS_Init(HW_TS_InitMode_t TimerInitMode, RTC_HandleTypeDef *hrtc)
+{
+ uint8_t loop;
+ uint32_t localmaxwakeuptimersetup;
+
+ /**
+ * Get RTC handler
+ */
+ phrtc = hrtc;
+
+ /* Disable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_DISABLE( phrtc );
+
+ SET_BIT(RTC->CR, RTC_CR_BYPSHAD);
+
+ /**
+ * Readout the user config
+ */
+ WakeupTimerDivider = (4 - ((uint32_t)(READ_BIT(RTC->CR, RTC_CR_WUCKSEL))));
+
+ AsynchPrescalerUserConfig = (uint8_t)(READ_BIT(RTC->PRER, RTC_PRER_PREDIV_A) >> (uint32_t)POSITION_VAL(RTC_PRER_PREDIV_A)) + 1;
+
+ SynchPrescalerUserConfig = (uint16_t)(READ_BIT(RTC->PRER, RTC_PRER_PREDIV_S)) + 1;
+
+ /**
+ * Margin is taken to avoid wrong calculation when the wrap around is there and some
+ * application interrupts may have delayed the reading
+ */
+ localmaxwakeuptimersetup = ((((SynchPrescalerUserConfig - 1)*AsynchPrescalerUserConfig) - CFG_HW_TS_RTC_HANDLER_MAX_DELAY) >> WakeupTimerDivider);
+
+ if(localmaxwakeuptimersetup >= 0xFFFF)
+ {
+ MaxWakeupTimerSetup = 0xFFFF;
+ }
+ else
+ {
+ MaxWakeupTimerSetup = (uint16_t)localmaxwakeuptimersetup;
+ }
+
+ /**
+ * Configure EXTI module
+ */
+ LL_EXTI_EnableRisingTrig_0_31(RTC_EXTI_LINE_WAKEUPTIMER_EVENT);
+ LL_EXTI_EnableIT_0_31(RTC_EXTI_LINE_WAKEUPTIMER_EVENT);
+
+ if(TimerInitMode == hw_ts_InitMode_Full)
+ {
+ WakeupTimerLimitation = WakeupTimerValue_LargeEnough;
+ SSRValueOnLastSetup = SSR_FORBIDDEN_VALUE;
+
+ /**
+ * Initialize the timer server
+ */
+ for(loop = 0; loop < CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER; loop++)
+ {
+ aTimerContext[loop].TimerIDStatus = TimerID_Free;
+ }
+
+ CurrentRunningTimerID = CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER; /**< Set ID to non valid value */
+
+ __HAL_RTC_WAKEUPTIMER_DISABLE(phrtc); /**< Disable the Wakeup Timer */
+ __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(phrtc, RTC_FLAG_WUTF); /**< Clear flag in RTC module */
+ __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG(); /**< Clear flag in EXTI module */
+ HAL_NVIC_ClearPendingIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Clear pending bit in NVIC */
+ __HAL_RTC_WAKEUPTIMER_ENABLE_IT(phrtc, RTC_IT_WUT); /**< Enable interrupt in RTC module */
+ }
+ else
+ {
+ if(__HAL_RTC_WAKEUPTIMER_GET_FLAG(phrtc, RTC_FLAG_WUTF) != RESET)
+ {
+ /**
+ * Simulate that the Timer expired
+ */
+ HAL_NVIC_SetPendingIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID);
+ }
+ }
+
+ /* Enable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_ENABLE( phrtc );
+
+ HAL_NVIC_SetPriority(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID, CFG_HW_TS_NVIC_RTC_WAKEUP_IT_PREEMPTPRIO, CFG_HW_TS_NVIC_RTC_WAKEUP_IT_SUBPRIO); /**< Set NVIC priority */
+ HAL_NVIC_EnableIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Enable NVIC */
+
+ return;
+}
+
+HW_TS_ReturnStatus_t HW_TS_Create(uint32_t TimerProcessID, uint8_t *pTimerId, HW_TS_Mode_t TimerMode, HW_TS_pTimerCb_t pftimeout_handler)
+{
+ HW_TS_ReturnStatus_t localreturnstatus;
+ uint8_t loop = 0;
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ uint32_t primask_bit;
+#endif
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ primask_bit = __get_PRIMASK(); /**< backup PRIMASK bit */
+ __disable_irq(); /**< Disable all interrupts by setting PRIMASK bit on Cortex*/
+#endif
+
+ while((loop < CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER) && (aTimerContext[loop].TimerIDStatus != TimerID_Free))
+ {
+ loop++;
+ }
+
+ if(loop != CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER)
+ {
+ aTimerContext[loop].TimerIDStatus = TimerID_Created;
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+
+ aTimerContext[loop].TimerProcessID = TimerProcessID;
+ aTimerContext[loop].TimerMode = TimerMode;
+ aTimerContext[loop].pTimerCallBack = pftimeout_handler;
+ *pTimerId = loop;
+
+ localreturnstatus = hw_ts_Successful;
+ }
+ else
+ {
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+
+ localreturnstatus = hw_ts_Failed;
+ }
+
+ return(localreturnstatus);
+}
+
+void HW_TS_Delete(uint8_t timer_id)
+{
+ HW_TS_Stop(timer_id);
+
+ aTimerContext[timer_id].TimerIDStatus = TimerID_Free; /**< release ID */
+
+ return;
+}
+
+void HW_TS_Stop(uint8_t timer_id)
+{
+ uint8_t localcurrentrunningtimerid;
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ uint32_t primask_bit;
+#endif
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ primask_bit = __get_PRIMASK(); /**< backup PRIMASK bit */
+ __disable_irq(); /**< Disable all interrupts by setting PRIMASK bit on Cortex*/
+#endif
+
+ HAL_NVIC_DisableIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Disable NVIC */
+
+ /* Disable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_DISABLE( phrtc );
+
+ if(aTimerContext[timer_id].TimerIDStatus == TimerID_Running)
+ {
+ UnlinkTimer(timer_id, SSR_Read_Requested);
+ localcurrentrunningtimerid = CurrentRunningTimerID;
+
+ if(localcurrentrunningtimerid == CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER)
+ {
+ /**
+ * List is empty
+ */
+
+ /**
+ * Disable the timer
+ */
+ if((READ_BIT(RTC->CR, RTC_CR_WUTE) == (RTC_CR_WUTE)) == SET)
+ {
+ /**
+ * Wait for the flag to be back to 0 when the wakeup timer is enabled
+ */
+ while(__HAL_RTC_WAKEUPTIMER_GET_FLAG(phrtc, RTC_FLAG_WUTWF) == SET);
+ }
+ __HAL_RTC_WAKEUPTIMER_DISABLE(phrtc); /**< Disable the Wakeup Timer */
+
+ while(__HAL_RTC_WAKEUPTIMER_GET_FLAG(phrtc, RTC_FLAG_WUTWF) == RESET);
+
+ /**
+ * make sure to clear the flags after checking the WUTWF.
+ * It takes 2 RTCCLK between the time the WUTE bit is disabled and the
+ * time the timer is disabled. The WUTWF bit somehow guarantee the system is stable
+ * Otherwise, when the timer is periodic with 1 Tick, it may generate an extra interrupt in between
+ * due to the autoreload feature
+ */
+ __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(phrtc, RTC_FLAG_WUTF); /**< Clear flag in RTC module */
+ __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG(); /**< Clear flag in EXTI module */
+ HAL_NVIC_ClearPendingIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Clear pending bit in NVIC */
+ }
+ else if(PreviousRunningTimerID != localcurrentrunningtimerid)
+ {
+ RescheduleTimerList();
+ }
+ }
+
+ /* Enable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_ENABLE( phrtc );
+
+ HAL_NVIC_EnableIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Enable NVIC */
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+
+ return;
+}
+
+void HW_TS_Start(uint8_t timer_id, uint32_t timeout_ticks)
+{
+ uint16_t time_elapsed;
+ uint8_t localcurrentrunningtimerid;
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ uint32_t primask_bit;
+#endif
+
+ if(aTimerContext[timer_id].TimerIDStatus == TimerID_Running)
+ {
+ HW_TS_Stop( timer_id );
+ }
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ primask_bit = __get_PRIMASK(); /**< backup PRIMASK bit */
+ __disable_irq(); /**< Disable all interrupts by setting PRIMASK bit on Cortex*/
+#endif
+
+ HAL_NVIC_DisableIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Disable NVIC */
+
+ /* Disable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_DISABLE( phrtc );
+
+ aTimerContext[timer_id].TimerIDStatus = TimerID_Running;
+
+ aTimerContext[timer_id].CountLeft = timeout_ticks;
+ aTimerContext[timer_id].CounterInit = timeout_ticks;
+
+ time_elapsed = linkTimer(timer_id);
+
+ localcurrentrunningtimerid = CurrentRunningTimerID;
+
+ if(PreviousRunningTimerID != localcurrentrunningtimerid)
+ {
+ RescheduleTimerList();
+ }
+ else
+ {
+ aTimerContext[timer_id].CountLeft -= time_elapsed;
+ }
+
+ /* Enable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_ENABLE( phrtc );
+
+ HAL_NVIC_EnableIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Enable NVIC */
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+
+ return;
+}
+
+uint16_t HW_TS_RTC_ReadLeftTicksToCount(void)
+{
+ uint32_t primask_bit;
+ uint16_t return_value, auro_reload_value, elapsed_time_value;
+
+ primask_bit = __get_PRIMASK(); /**< backup PRIMASK bit */
+ __disable_irq(); /**< Disable all interrupts by setting PRIMASK bit on Cortex*/
+
+ if((READ_BIT(RTC->CR, RTC_CR_WUTE) == (RTC_CR_WUTE)) == SET)
+ {
+ auro_reload_value = (uint32_t)(READ_BIT(RTC->WUTR, RTC_WUTR_WUT));
+
+ elapsed_time_value = ReturnTimeElapsed();
+
+ if(auro_reload_value > elapsed_time_value)
+ {
+ return_value = auro_reload_value - elapsed_time_value;
+ }
+ else
+ {
+ return_value = 0;
+ }
+ }
+ else
+ {
+ return_value = TIMER_LIST_EMPTY;
+ }
+
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+
+ return (return_value);
+}
+
+__weak void HW_TS_RTC_Int_AppNot(uint32_t TimerProcessID, uint8_t TimerID, HW_TS_pTimerCb_t pTimerCallBack)
+{
+ pTimerCallBack();
+
+ return;
+}
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/hw_uart.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/hw_uart.c
new file mode 100644
index 000000000..6ae6ff9f9
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/hw_uart.c
@@ -0,0 +1,320 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : Src/hw_uart.c
+ * Description : HW UART source file for STM32WPAN Middleware.
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "app_common.h"
+#include "hw_conf.h"
+#if (CFG_HW_LPUART1_ENABLED == 1)
+extern UART_HandleTypeDef hlpuart1;
+#endif
+#if (CFG_HW_USART1_ENABLED == 1)
+extern UART_HandleTypeDef huart1;
+#endif
+
+/* Macros --------------------------------------------------------------------*/
+#define HW_UART_RX_IT(__HANDLE__, __USART_BASE__) \
+ do{ \
+ HW_##__HANDLE__##RxCb = cb; \
+ (__HANDLE__).Instance = (__USART_BASE__); \
+ HAL_UART_Receive_IT(&(__HANDLE__), p_data, size); \
+ } while(0)
+
+#define HW_UART_TX_IT(__HANDLE__, __USART_BASE__) \
+ do{ \
+ HW_##__HANDLE__##TxCb = cb; \
+ (__HANDLE__).Instance = (__USART_BASE__); \
+ HAL_UART_Transmit_IT(&(__HANDLE__), p_data, size); \
+ } while(0)
+
+#define HW_UART_TX(__HANDLE__, __USART_BASE__) \
+ do{ \
+ (__HANDLE__).Instance = (__USART_BASE__); \
+ hal_status = HAL_UART_Transmit(&(__HANDLE__), p_data, size, timeout); \
+ } while(0)
+
+/* Variables -----------------------------------------------------------------*/
+#if (CFG_HW_USART1_ENABLED == 1)
+#if (CFG_HW_USART1_DMA_TX_SUPPORTED == 1)
+ DMA_HandleTypeDef HW_hdma_huart1_tx ={0};
+#endif
+ void (*HW_huart1RxCb)(void);
+ void (*HW_huart1TxCb)(void);
+#endif
+
+#if (CFG_HW_LPUART1_ENABLED == 1)
+#if (CFG_HW_LPUART1_DMA_TX_SUPPORTED == 1)
+ DMA_HandleTypeDef HW_hdma_hlpuart1_tx ={0};
+#endif
+ void (*HW_hlpuart1RxCb)(void);
+ void (*HW_hlpuart1TxCb)(void);
+#endif
+
+void HW_UART_Receive_IT(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, void (*cb)(void))
+{
+ switch (hw_uart_id)
+ {
+#if (CFG_HW_USART1_ENABLED == 1)
+ case hw_uart1:
+ HW_UART_RX_IT(huart1, USART1);
+ break;
+#endif
+
+#if (CFG_HW_LPUART1_ENABLED == 1)
+ case hw_lpuart1:
+ HW_UART_RX_IT(hlpuart1, LPUART1);
+ break;
+#endif
+
+ default:
+ break;
+ }
+
+ return;
+}
+
+void HW_UART_Transmit_IT(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, void (*cb)(void))
+{
+ switch (hw_uart_id)
+ {
+#if (CFG_HW_USART1_ENABLED == 1)
+ case hw_uart1:
+ HW_UART_TX_IT(huart1, USART1);
+ break;
+#endif
+
+#if (CFG_HW_LPUART1_ENABLED == 1)
+ case hw_lpuart1:
+ HW_UART_TX_IT(hlpuart1, LPUART1);
+ break;
+#endif
+
+ default:
+ break;
+ }
+
+ return;
+}
+
+hw_status_t HW_UART_Transmit(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, uint32_t timeout)
+{
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ hw_status_t hw_status = hw_uart_ok;
+
+ switch (hw_uart_id)
+ {
+#if (CFG_HW_USART1_ENABLED == 1)
+ case hw_uart1:
+ HW_UART_TX(huart1, USART1);
+ break;
+#endif
+
+#if (CFG_HW_LPUART1_ENABLED == 1)
+ case hw_lpuart1:
+ HW_UART_TX(hlpuart1, LPUART1);
+ break;
+#endif
+
+ default:
+ break;
+ }
+
+ switch (hal_status)
+ {
+ case HAL_OK:
+ hw_status = hw_uart_ok;
+ break;
+
+ case HAL_ERROR:
+ hw_status = hw_uart_error;
+ break;
+
+ case HAL_BUSY:
+ hw_status = hw_uart_busy;
+ break;
+
+ case HAL_TIMEOUT:
+ hw_status = hw_uart_to;
+ break;
+
+ default:
+ break;
+ }
+
+ return hw_status;
+}
+
+hw_status_t HW_UART_Transmit_DMA(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, void (*cb)(void))
+{
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ hw_status_t hw_status = hw_uart_ok;
+
+ switch (hw_uart_id)
+ {
+#if (CFG_HW_USART1_ENABLED == 1)
+ case hw_uart1:
+ HW_huart1TxCb = cb;
+ huart1.Instance = USART1;
+ hal_status = HAL_UART_Transmit_DMA(&huart1, p_data, size);
+ break;
+#endif
+
+#if (CFG_HW_LPUART1_ENABLED == 1)
+ case hw_lpuart1:
+ HW_hlpuart1TxCb = cb;
+ hlpuart1.Instance = LPUART1;
+ hal_status = HAL_UART_Transmit_DMA(&hlpuart1, p_data, size);
+ break;
+#endif
+
+ default:
+ break;
+ }
+
+ switch (hal_status)
+ {
+ case HAL_OK:
+ hw_status = hw_uart_ok;
+ break;
+
+ case HAL_ERROR:
+ hw_status = hw_uart_error;
+ break;
+
+ case HAL_BUSY:
+ hw_status = hw_uart_busy;
+ break;
+
+ case HAL_TIMEOUT:
+ hw_status = hw_uart_to;
+ break;
+
+ default:
+ break;
+ }
+
+ return hw_status;
+}
+
+void HW_UART_Interrupt_Handler(hw_uart_id_t hw_uart_id)
+{
+ switch (hw_uart_id)
+ {
+#if (CFG_HW_USART1_ENABLED == 1)
+ case hw_uart1:
+ HAL_UART_IRQHandler(&huart1);
+ break;
+#endif
+
+#if (CFG_HW_LPUART1_ENABLED == 1)
+ case hw_lpuart1:
+ HAL_UART_IRQHandler(&hlpuart1);
+ break;
+#endif
+
+ default:
+ break;
+ }
+
+ return;
+}
+
+void HW_UART_DMA_Interrupt_Handler(hw_uart_id_t hw_uart_id)
+{
+ switch (hw_uart_id)
+ {
+#if (CFG_HW_USART1_DMA_TX_SUPPORTED == 1)
+ case hw_uart1:
+ HAL_DMA_IRQHandler(huart1.hdmatx);
+ break;
+#endif
+
+#if (CFG_HW_LPUART1_DMA_TX_SUPPORTED == 1)
+ case hw_lpuart1:
+ HAL_DMA_IRQHandler(hlpuart1.hdmatx);
+ break;
+#endif
+
+ default:
+ break;
+ }
+
+ return;
+}
+
+void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
+{
+ switch ((uint32_t)huart->Instance)
+ {
+#if (CFG_HW_USART1_ENABLED == 1)
+ case (uint32_t)USART1:
+ if(HW_huart1RxCb)
+ {
+ HW_huart1RxCb();
+ }
+ break;
+#endif
+
+#if (CFG_HW_LPUART1_ENABLED == 1)
+ case (uint32_t)LPUART1:
+ if(HW_hlpuart1RxCb)
+ {
+ HW_hlpuart1RxCb();
+ }
+ break;
+#endif
+
+ default:
+ break;
+ }
+
+ return;
+}
+
+void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
+{
+ switch ((uint32_t)huart->Instance)
+ {
+#if (CFG_HW_USART1_ENABLED == 1)
+ case (uint32_t)USART1:
+ if(HW_huart1TxCb)
+ {
+ HW_huart1TxCb();
+ }
+ break;
+#endif
+
+#if (CFG_HW_LPUART1_ENABLED == 1)
+ case (uint32_t)LPUART1:
+ if(HW_hlpuart1TxCb)
+ {
+ HW_hlpuart1TxCb();
+ }
+ break;
+#endif
+
+ default:
+ break;
+ }
+
+ return;
+}
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/main.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/main.c
new file mode 100644
index 000000000..324eea6ea
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/main.c
@@ -0,0 +1,749 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * @file : main.c
+ * @brief : Main program body
+ *
+ @verbatim
+ ==============================================================================
+ ##### IMPORTANT NOTE #####
+ ==============================================================================
+
+ This application requests having the stm32wb5x_Zigbee_fw.bin binary
+ flashed on the Wireless Coprocessor.
+ If it is not the case, you need to use STM32CubeProgrammer to load the appropriate
+ binary.
+
+ All available binaries are located under following directory:
+ /Projects/STM32_Copro_Wireless_Binaries
+
+ Refer to UM2237 to learn how to use/install STM32CubeProgrammer.
+ Refer to /Projects/STM32_Copro_Wireless_Binaries/ReleaseNote.html for the
+ detailed procedure to change the Wireless Coprocessor binary.
+
+ @endverbatim
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+
+/* Private includes ----------------------------------------------------------*/
+/* USER CODE BEGIN Includes */
+
+#include "dbg_trace.h"
+#include "hw_conf.h"
+#include "otp.h"
+#include "cmsis_os.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 ---------------------------------------------------------*/
+IPCC_HandleTypeDef hipcc;
+
+UART_HandleTypeDef hlpuart1;
+UART_HandleTypeDef huart1;
+DMA_HandleTypeDef hdma_lpuart1_tx;
+DMA_HandleTypeDef hdma_usart1_tx;
+
+RTC_HandleTypeDef hrtc;
+
+osThreadId_t defaultTaskId;
+osThreadId_t OsTaskInitId;
+
+const osThreadAttr_t defaultTask_attributes = {
+ .name = "defaultTask",
+ .priority = (osPriority_t) osPriorityNormal,
+ .stack_size = 1024 * 4
+};
+
+/* FreeRtos stacks attributes */
+const osThreadAttr_t TaskInit_attributes = {
+ .name = CFG_TASK_INIT_PROCESS_NAME,
+ .attr_bits = CFG_TASK_PROCESS_ATTR_BITS,
+ .cb_mem = CFG_TASK_PROCESS_CB_MEM,
+ .cb_size = CFG_TASK_PROCESS_CB_SIZE,
+ .stack_mem = CFG_TASK_PROCESS_STACK_MEM,
+ .priority = osPriorityNormal, /* osPriorityLow */
+ .stack_size = CFG_TASK_PROCESS_STACK_SIZE
+};
+
+/* USER CODE BEGIN PV */
+
+/* USER CODE END PV */
+
+/* Private function prototypes -----------------------------------------------*/
+void SystemClock_Config(void);
+static void MX_GPIO_Init(void);
+static void MX_DMA_Init(void);
+static void MX_RF_Init(void);
+static void MX_RTC_Init(void);
+static void MX_IPCC_Init(void);
+/* USER CODE BEGIN PFP */
+
+void PeriphClock_Config(void);
+static void Reset_Device(void);
+static void Reset_IPCC(void);
+static void Reset_BackupDomain(void);
+static void Init_Exti(void);
+static void Config_HSE(void);
+static void StartDefaultTask(void *argument);
+static void TaskInit(void *argument);
+
+/* 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 */
+
+ /**
+ * The OPTVERR flag is wrongly set at power on
+ * It shall be cleared before using any HAL_FLASH_xxx() api
+ */
+ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);
+
+ /* USER CODE END 1 */
+
+ /* MCU Configuration--------------------------------------------------------*/
+
+ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
+ HAL_Init();
+
+ /* USER CODE BEGIN Init */
+
+ Reset_Device();
+ Config_HSE();
+
+ /* USER CODE END Init */
+
+ /* Configure the system clock */
+ SystemClock_Config();
+
+ /* IPCC initialisation */
+ MX_IPCC_Init();
+
+ /* USER CODE BEGIN SysInit */
+ PeriphClock_Config();
+ Init_Exti(); /**< Configure the system Power Mode */
+ /* USER CODE END SysInit */
+
+ /* Initialize all configured peripherals */
+ MX_GPIO_Init();
+ MX_DMA_Init();
+ MX_RF_Init();
+ MX_RTC_Init();
+ /* USER CODE BEGIN 2 */
+
+ /* USER CODE END 2 */
+ /* Init scheduler */
+ osKernelInitialize();
+
+ /* USER CODE BEGIN RTOS_MUTEX */
+ /* add mutexes, ... */
+ /* USER CODE END RTOS_MUTEX */
+
+ /* USER CODE BEGIN RTOS_SEMAPHORES */
+ /* add semaphores, ... */
+ /* USER CODE END RTOS_SEMAPHORES */
+
+ /* USER CODE BEGIN RTOS_TIMERS */
+ /* start timers, add new ones, ... */
+ /* USER CODE END RTOS_TIMERS */
+
+ /* USER CODE BEGIN RTOS_QUEUES */
+ /* add queues, ... */
+ /* USER CODE END RTOS_QUEUES */
+
+ /* Create the thread(s) */
+ /* creation of defaultTask */
+
+ OsTaskInitId = osThreadNew(TaskInit, NULL,&TaskInit_attributes);
+ defaultTaskId = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
+
+ /* Start scheduler */
+ osKernelStart();
+
+ /* We should never get here as control is now taken by the scheduler */
+
+ /* Infinite loop */
+ /* USER CODE BEGIN WHILE */
+ while (1)
+ {
+
+ /* 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};
+ RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
+
+ /** Configure LSE Drive Capability
+ */
+ HAL_PWR_EnableBkUpAccess();
+ __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
+ /** Configure the main internal regulator output voltage
+ */
+ __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
+ /** Initializes the RCC Oscillators according to the specified parameters
+ * in the RCC_OscInitTypeDef structure.
+ */
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSE
+ |RCC_OSCILLATORTYPE_LSE;
+ RCC_OscInitStruct.HSEState = RCC_HSE_ON;
+ RCC_OscInitStruct.LSEState = RCC_LSE_ON;
+ RCC_OscInitStruct.HSIState = RCC_HSI_ON;
+ RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
+ RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
+ if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers
+ */
+ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK4|RCC_CLOCKTYPE_HCLK2
+ |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
+ |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
+ RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSE;
+ RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
+ RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
+ RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
+ RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;
+ RCC_ClkInitStruct.AHBCLK4Divider = RCC_SYSCLK_DIV1;
+
+ if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /** Initializes the peripherals clocks
+ */
+ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SMPS|RCC_PERIPHCLK_RFWAKEUP
+ |RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_USART1
+ |RCC_PERIPHCLK_LPUART1;
+ PeriphClkInitStruct.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
+ PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_PCLK1;
+ PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
+ PeriphClkInitStruct.RFWakeUpClockSelection = RCC_RFWKPCLKSOURCE_LSE;
+ PeriphClkInitStruct.SmpsClockSelection = RCC_SMPSCLKSOURCE_HSE;
+ PeriphClkInitStruct.SmpsDivSelection = RCC_SMPSCLKDIV_RANGE0;
+ if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN Smps */
+
+ /* USER CODE END Smps */
+}
+
+/**
+ * @brief IPCC Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_IPCC_Init(void)
+{
+
+ /* USER CODE BEGIN IPCC_Init 0 */
+
+ /* USER CODE END IPCC_Init 0 */
+
+ /* USER CODE BEGIN IPCC_Init 1 */
+
+ /* USER CODE END IPCC_Init 1 */
+ hipcc.Instance = IPCC;
+ if (HAL_IPCC_Init(&hipcc) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN IPCC_Init 2 */
+
+ /* USER CODE END IPCC_Init 2 */
+
+}
+
+/**
+ * @brief LPUART1 Initialization Function
+ * @param None
+ * @retval None
+ */
+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 */
+
+}
+
+/**
+ * @brief USART1 Initialization Function
+ * @param None
+ * @retval None
+ */
+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_8;
+ 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 */
+
+ /* USER CODE END USART1_Init 2 */
+
+}
+
+/**
+ * @brief RF Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_RF_Init(void)
+{
+
+ /* USER CODE BEGIN RF_Init 0 */
+
+ /* USER CODE END RF_Init 0 */
+
+ /* USER CODE BEGIN RF_Init 1 */
+
+ /* USER CODE END RF_Init 1 */
+ /* USER CODE BEGIN RF_Init 2 */
+
+ /* USER CODE END RF_Init 2 */
+
+}
+
+/**
+ * @brief RTC Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_RTC_Init(void)
+{
+
+ /* USER CODE BEGIN RTC_Init 0 */
+
+ /* USER CODE END RTC_Init 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 = CFG_RTC_ASYNCH_PRESCALER;
+ hrtc.Init.SynchPrediv = CFG_RTC_SYNCH_PRESCALER;
+ hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
+ hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
+ hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
+ hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
+ if (HAL_RTC_Init(&hrtc) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN RTC_Init 2 */
+
+ /* USER CODE END RTC_Init 2 */
+
+}
+
+/**
+ * Enable DMA controller clock
+ */
+static void MX_DMA_Init(void)
+{
+
+ /* DMA controller clock enable */
+ __HAL_RCC_DMAMUX1_CLK_ENABLE();
+ __HAL_RCC_DMA1_CLK_ENABLE();
+
+ /* DMA interrupt init */
+ /* DMA1_Channel1_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
+ /* DMA1_Channel2_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(DMA1_Channel2_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(DMA1_Channel2_IRQn);
+
+}
+
+/**
+ * @brief GPIO Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_GPIO_Init(void)
+{
+
+ /* GPIO Ports Clock Enable */
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+
+}
+
+/* USER CODE BEGIN 4 */
+void PeriphClock_Config(void)
+{
+ #if (CFG_USB_INTERFACE_ENABLE != 0)
+ RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = { 0 };
+ RCC_CRSInitTypeDef RCC_CRSInitStruct = { 0 };
+
+ /**
+ * This prevents the CPU2 to disable the HSI48 oscillator when
+ * it does not use anymore the RNG IP
+ */
+ LL_HSEM_1StepLock( HSEM, 5 );
+
+ LL_RCC_HSI48_Enable();
+
+ while(!LL_RCC_HSI48_IsReady());
+
+ /* Select HSI48 as USB clock source */
+ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB;
+ PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
+ HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
+
+ /*Configure the clock recovery system (CRS)**********************************/
+
+ /* Enable CRS Clock */
+ __HAL_RCC_CRS_CLK_ENABLE();
+
+ /* Default Synchro Signal division factor (not divided) */
+ RCC_CRSInitStruct.Prescaler = RCC_CRS_SYNC_DIV1;
+
+ /* Set the SYNCSRC[1:0] bits according to CRS_Source value */
+ RCC_CRSInitStruct.Source = RCC_CRS_SYNC_SOURCE_USB;
+
+ /* HSI48 is synchronized with USB SOF at 1KHz rate */
+ RCC_CRSInitStruct.ReloadValue = RCC_CRS_RELOADVALUE_DEFAULT;
+ RCC_CRSInitStruct.ErrorLimitValue = RCC_CRS_ERRORLIMIT_DEFAULT;
+
+ RCC_CRSInitStruct.Polarity = RCC_CRS_SYNC_POLARITY_RISING;
+
+ /* Set the TRIM[5:0] to the default value*/
+ RCC_CRSInitStruct.HSI48CalibrationValue = RCC_CRS_HSI48CALIBRATION_DEFAULT;
+
+ /* Start automatic synchronization */
+ HAL_RCCEx_CRSConfig(&RCC_CRSInitStruct);
+#endif
+
+ return;
+}
+
+/*************************************************************
+ *
+ * LOCAL FUNCTIONS
+ *
+ *************************************************************/
+
+static void Config_HSE(void)
+{
+ OTP_ID0_t * p_otp;
+
+ /**
+ * Read HSE_Tuning from OTP
+ */
+ p_otp = (OTP_ID0_t *) OTP_Read(0);
+ if (p_otp)
+ {
+ LL_RCC_HSE_SetCapacitorTuning(p_otp->hse_tuning);
+ }
+
+ return;
+}
+
+
+static void Reset_Device( void )
+{
+#if ( CFG_HW_RESET_BY_FW == 1 )
+ Reset_BackupDomain();
+
+ Reset_IPCC();
+#endif
+
+ return;
+}
+
+static void Reset_IPCC( void )
+{
+ LL_AHB3_GRP1_EnableClock(LL_AHB3_GRP1_PERIPH_IPCC);
+
+ LL_C1_IPCC_ClearFlag_CHx(
+ IPCC,
+ LL_IPCC_CHANNEL_1 | LL_IPCC_CHANNEL_2 | LL_IPCC_CHANNEL_3 | LL_IPCC_CHANNEL_4
+ | LL_IPCC_CHANNEL_5 | LL_IPCC_CHANNEL_6);
+
+ LL_C2_IPCC_ClearFlag_CHx(
+ IPCC,
+ LL_IPCC_CHANNEL_1 | LL_IPCC_CHANNEL_2 | LL_IPCC_CHANNEL_3 | LL_IPCC_CHANNEL_4
+ | LL_IPCC_CHANNEL_5 | LL_IPCC_CHANNEL_6);
+
+ LL_C1_IPCC_DisableTransmitChannel(
+ IPCC,
+ LL_IPCC_CHANNEL_1 | LL_IPCC_CHANNEL_2 | LL_IPCC_CHANNEL_3 | LL_IPCC_CHANNEL_4
+ | LL_IPCC_CHANNEL_5 | LL_IPCC_CHANNEL_6);
+
+ LL_C2_IPCC_DisableTransmitChannel(
+ IPCC,
+ LL_IPCC_CHANNEL_1 | LL_IPCC_CHANNEL_2 | LL_IPCC_CHANNEL_3 | LL_IPCC_CHANNEL_4
+ | LL_IPCC_CHANNEL_5 | LL_IPCC_CHANNEL_6);
+
+ LL_C1_IPCC_DisableReceiveChannel(
+ IPCC,
+ LL_IPCC_CHANNEL_1 | LL_IPCC_CHANNEL_2 | LL_IPCC_CHANNEL_3 | LL_IPCC_CHANNEL_4
+ | LL_IPCC_CHANNEL_5 | LL_IPCC_CHANNEL_6);
+
+ LL_C2_IPCC_DisableReceiveChannel(
+ IPCC,
+ LL_IPCC_CHANNEL_1 | LL_IPCC_CHANNEL_2 | LL_IPCC_CHANNEL_3 | LL_IPCC_CHANNEL_4
+ | LL_IPCC_CHANNEL_5 | LL_IPCC_CHANNEL_6);
+
+ return;
+}
+
+static void Reset_BackupDomain( void )
+{
+ if ((LL_RCC_IsActiveFlag_PINRST() != FALSE) && (LL_RCC_IsActiveFlag_SFTRST() == FALSE))
+ {
+ HAL_PWR_EnableBkUpAccess(); /**< Enable access to the RTC registers */
+
+ /**
+ * Write twice the value to flush the APB-AHB bridge
+ * This bit shall be written in the register before writing the next one
+ */
+ HAL_PWR_EnableBkUpAccess();
+
+ __HAL_RCC_BACKUPRESET_FORCE();
+ __HAL_RCC_BACKUPRESET_RELEASE();
+ }
+
+ return;
+}
+
+static void Init_Exti( void )
+{
+ /**< Disable all wakeup interrupt on CPU1 except LPUART(25), IPCC(36), HSEM(38) */
+ LL_EXTI_DisableIT_0_31( (~0) & (~(LL_EXTI_LINE_25)) );
+ LL_EXTI_DisableIT_32_63( (~0) & (~(LL_EXTI_LINE_36 | LL_EXTI_LINE_38)) );
+
+ return;
+}
+
+/*************************************************************
+ *
+ * WRAP FUNCTIONS
+ *
+ *************************************************************/
+
+static void TaskInit(void *argument)
+{
+ /* This task will manage the CPU2 initialization and will get terminated after it is done */
+ APPE_Init();
+ osThreadTerminate(OsTaskInitId);
+ /* All job done */
+}
+
+
+static void StartDefaultTask(void *argument)
+{
+ for(;;)
+ {
+ osThreadFlagsWait(1,osFlagsWaitAll,osWaitForever);
+ /* Put your own code here */
+ }
+}
+
+void HAL_Delay(uint32_t Delay)
+{
+ uint32_t tickstart = HAL_GetTick();
+ uint32_t wait = Delay;
+
+ /* Add a freq to guarantee minimum wait */
+ if (wait < HAL_MAX_DELAY)
+ {
+ wait += HAL_GetTickFreq();
+ }
+
+ while ((HAL_GetTick() - tickstart) < wait)
+ {
+ /************************************************************************************
+ * ENTER SLEEP MODE
+ ***********************************************************************************/
+ LL_LPM_EnableSleep( ); /**< Clear SLEEPDEEP bit of Cortex System Control Register */
+
+ /**
+ * This option is used to ensure that store operations are completed
+ */
+ #if defined ( __CC_ARM)
+ __force_stores();
+ #endif
+
+ __WFI( );
+ }
+}
+
+/**
+ * @brief Period elapsed callback in non blocking mode
+ * @note This function is called when TIM17 interrupt took place, inside
+ * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
+ * a global variable "uwTick" used as application time base.
+ * @param htim : TIM handle
+ * @retval None
+ */
+void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
+{
+ /* USER CODE BEGIN Callback 0 */
+
+ /* USER CODE END Callback 0 */
+ if (htim->Instance == TIM17) {
+ HAL_IncTick();
+ }
+ /* USER CODE BEGIN Callback 1 */
+
+ /* USER CODE END Callback 1 */
+}
+
+/* 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 */
+
+ /* 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,
+ tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
+ /* USER CODE END 6 */
+}
+#endif /* USE_FULL_ASSERT */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm32_lpm_if.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm32_lpm_if.c
new file mode 100644
index 000000000..ba034f27e
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm32_lpm_if.c
@@ -0,0 +1,295 @@
+/* USER CODE BEGIN Header */
+/**
+ ***************************************************************************************
+ * File Name : stm32_lpm_if.c
+ * Description : Low layer function to enter/exit low power modes (stop, sleep).
+ ***************************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32_lpm_if.h"
+#include "stm32_lpm.h"
+#include "app_conf.h"
+/* USER CODE BEGIN include */
+
+/* USER CODE END include */
+
+/* Exported variables --------------------------------------------------------*/
+const struct UTIL_LPM_Driver_s UTIL_PowerDriver =
+{
+ PWR_EnterSleepMode,
+ PWR_ExitSleepMode,
+
+ PWR_EnterStopMode,
+ PWR_ExitStopMode,
+
+ PWR_EnterOffMode,
+ PWR_ExitOffMode,
+};
+
+/* Private function prototypes -----------------------------------------------*/
+static void Switch_On_HSI( void );
+/* USER CODE BEGIN Private_Function_Prototypes */
+
+/* USER CODE END Private_Function_Prototypes */
+/* Private typedef -----------------------------------------------------------*/
+/* USER CODE BEGIN Private_Typedef */
+
+/* USER CODE END Private_Typedef */
+/* Private define ------------------------------------------------------------*/
+/* USER CODE BEGIN Private_Define */
+
+/* USER CODE END Private_Define */
+/* Private macro -------------------------------------------------------------*/
+/* USER CODE BEGIN Private_Macro */
+
+/* USER CODE END Private_Macro */
+/* Private variables ---------------------------------------------------------*/
+/* USER CODE BEGIN Private_Variables */
+
+/* USER CODE END Private_Variables */
+
+/* Functions Definition ------------------------------------------------------*/
+/**
+ * @brief Enters Low Power Off Mode
+ * @param none
+ * @retval none
+ */
+void PWR_EnterOffMode( void )
+{
+/* USER CODE BEGIN PWR_EnterOffMode */
+
+ /**
+ * The systick should be disabled for the same reason than when the device enters stop mode because
+ * at this time, the device may enter either OffMode or StopMode.
+ */
+ HAL_SuspendTick();
+
+ /************************************************************************************
+ * ENTER OFF MODE
+ ***********************************************************************************/
+ /*
+ * There is no risk to clear all the WUF here because in the current implementation, this API is called
+ * in critical section. If an interrupt occurs while in that critical section before that point,
+ * the flag is set and will be cleared here but the system will not enter Off Mode
+ * because an interrupt is pending in the NVIC. The ISR will be executed when moving out
+ * of this critical section
+ */
+ LL_PWR_ClearFlag_WU( );
+
+ LL_PWR_SetPowerMode( LL_PWR_MODE_STANDBY );
+
+ LL_LPM_EnableDeepSleep( ); /**< Set SLEEPDEEP bit of Cortex System Control Register */
+
+ /**
+ * This option is used to ensure that store operations are completed
+ */
+#if defined ( __CC_ARM)
+ __force_stores( );
+#endif
+
+ __WFI( );
+/* USER CODE END PWR_EnterOffMode */
+}
+
+/**
+ * @brief Exits Low Power Off Mode
+ * @param none
+ * @retval none
+ */
+void PWR_ExitOffMode( void )
+{
+/* USER CODE BEGIN PWR_ExitOffMode */
+
+ HAL_ResumeTick();
+
+/* USER CODE END PWR_ExitOffMode */
+}
+
+/**
+ * @brief Enters Low Power Stop Mode
+ * @note ARM exists the function when waking up
+ * @param none
+ * @retval none
+ */
+void PWR_EnterStopMode( void )
+{
+/* USER CODE BEGIN PWR_EnterStopMode */
+ /**
+ * When HAL_DBGMCU_EnableDBGStopMode() is called to keep the debugger active in Stop Mode,
+ * the systick shall be disabled otherwise the cpu may crash when moving out from stop mode
+ *
+ * When in production, the HAL_DBGMCU_EnableDBGStopMode() is not called so that the device can reach best power consumption
+ * However, the systick should be disabled anyway to avoid the case when it is about to expire at the same time the device enters
+ * stop mode ( this will abort the Stop Mode entry ).
+ */
+ HAL_SuspendTick();
+
+ /**
+ * This function is called from CRITICAL SECTION
+ */
+ while( LL_HSEM_1StepLock( HSEM, CFG_HW_RCC_SEMID ) );
+
+ if ( ! LL_HSEM_1StepLock( HSEM, CFG_HW_ENTRY_STOP_MODE_SEMID ) )
+ {
+ if( LL_PWR_IsActiveFlag_C2DS( ) )
+ {
+ /* Release ENTRY_STOP_MODE semaphore */
+ LL_HSEM_ReleaseLock( HSEM, CFG_HW_ENTRY_STOP_MODE_SEMID, 0 );
+
+ /**
+ * The switch on HSI before entering Stop Mode is required
+ */
+ Switch_On_HSI( );
+ }
+ }
+ else
+ {
+ /**
+ * The switch on HSI before entering Stop Mode is required
+ */
+ Switch_On_HSI( );
+ }
+
+ /* Release RCC semaphore */
+ LL_HSEM_ReleaseLock( HSEM, CFG_HW_RCC_SEMID, 0 );
+
+ /************************************************************************************
+ * ENTER STOP MODE
+ ***********************************************************************************/
+ LL_PWR_SetPowerMode( LL_PWR_MODE_STOP2 );
+
+ LL_LPM_EnableDeepSleep( ); /**< Set SLEEPDEEP bit of Cortex System Control Register */
+
+ /**
+ * This option is used to ensure that store operations are completed
+ */
+#if defined ( __CC_ARM)
+ __force_stores( );
+#endif
+
+ __WFI();
+/* USER CODE END PWR_EnterStopMode */
+}
+
+/**
+ * @brief Exits Low Power Stop Mode
+ * @note Enable the pll at 32MHz
+ * @param none
+ * @retval none
+ */
+void PWR_ExitStopMode( void )
+{
+/* USER CODE BEGIN PWR_ExitStopMode */
+ /**
+ * This function is called from CRITICAL SECTION
+ */
+
+ /* Release ENTRY_STOP_MODE semaphore */
+ LL_HSEM_ReleaseLock( HSEM, CFG_HW_ENTRY_STOP_MODE_SEMID, 0 );
+
+ while( LL_HSEM_1StepLock( HSEM, CFG_HW_RCC_SEMID ) );
+
+ if(LL_RCC_GetSysClkSource( ) == LL_RCC_SYS_CLKSOURCE_STATUS_HSI)
+ {
+ LL_RCC_HSE_Enable( );
+ while(!LL_RCC_HSE_IsReady( ));
+ LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSE);
+ while (LL_RCC_GetSysClkSource( ) != LL_RCC_SYS_CLKSOURCE_STATUS_HSE);
+ }
+ else
+ {
+ /**
+ * As long as the current application is fine with HSE as system clock source,
+ * there is nothing to do here
+ */
+ }
+
+ /* Release RCC semaphore */
+ LL_HSEM_ReleaseLock( HSEM, CFG_HW_RCC_SEMID, 0 );
+
+ HAL_ResumeTick();
+
+/* USER CODE END PWR_ExitStopMode */
+}
+
+/**
+ * @brief Enters Low Power Sleep Mode
+ * @note ARM exits the function when waking up
+ * @param none
+ * @retval none
+ */
+void PWR_EnterSleepMode( void )
+{
+/* USER CODE BEGIN PWR_EnterSleepMode */
+
+ HAL_SuspendTick();
+
+ /************************************************************************************
+ * ENTER SLEEP MODE
+ ***********************************************************************************/
+ LL_LPM_EnableSleep( ); /**< Clear SLEEPDEEP bit of Cortex System Control Register */
+
+ /**
+ * This option is used to ensure that store operations are completed
+ */
+#if defined ( __CC_ARM)
+ __force_stores();
+#endif
+
+ __WFI( );
+/* USER CODE END PWR_EnterSleepMode */
+}
+
+/**
+ * @brief Exits Low Power Sleep Mode
+ * @note ARM exits the function when waking up
+ * @param none
+ * @retval none
+ */
+void PWR_ExitSleepMode( void )
+{
+/* USER CODE BEGIN PWR_ExitSleepMode */
+
+ HAL_ResumeTick();
+
+/* USER CODE END PWR_ExitSleepMode */
+}
+
+/*************************************************************
+ *
+ * LOCAL FUNCTIONS
+ *
+ *************************************************************/
+/**
+ * @brief Switch the system clock on HSI
+ * @param none
+ * @retval none
+ */
+static void Switch_On_HSI( void )
+{
+ LL_RCC_HSI_Enable( );
+ while(!LL_RCC_HSI_IsReady( ));
+ LL_RCC_SetSysClkSource( LL_RCC_SYS_CLKSOURCE_HSI );
+ LL_RCC_SetSMPSClockSource(LL_RCC_SMPS_CLKSOURCE_HSI);
+ while (LL_RCC_GetSysClkSource( ) != LL_RCC_SYS_CLKSOURCE_STATUS_HSI);
+}
+
+/* USER CODE BEGIN Private_Functions */
+
+/* USER CODE END Private_Functions */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm32wbxx_hal_msp.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm32wbxx_hal_msp.c
new file mode 100644
index 000000000..a0fe542c9
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm32wbxx_hal_msp.c
@@ -0,0 +1,391 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : stm32wbxx_hal_msp.c
+ * Description : This file provides code for the MSP Initialization
+ * and de-Initialization codes.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+/* USER CODE BEGIN Includes */
+#include "app_conf.h"
+/* USER CODE END Includes */
+extern DMA_HandleTypeDef hdma_lpuart1_tx;
+
+extern DMA_HandleTypeDef hdma_usart1_tx;
+
+/* 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_HSEM_CLK_ENABLE();
+
+ /* System interrupt init*/
+ /* PendSV_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);
+
+ /* Peripheral interrupt init */
+ /* PVD_PVM_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(PVD_PVM_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(PVD_PVM_IRQn);
+ /* FLASH_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(FLASH_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(FLASH_IRQn);
+ /* RCC_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(RCC_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(RCC_IRQn);
+ /* C2SEV_PWR_C2H_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(C2SEV_PWR_C2H_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(C2SEV_PWR_C2H_IRQn);
+ /* PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQn);
+ /* HSEM_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(HSEM_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(HSEM_IRQn);
+ /* FPU_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(FPU_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(FPU_IRQn);
+
+ /* USER CODE BEGIN MspInit 1 */
+
+ /* USER CODE END MspInit 1 */
+}
+
+/**
+* @brief IPCC MSP Initialization
+* This function configures the hardware resources used in this example
+* @param hipcc: IPCC handle pointer
+* @retval None
+*/
+void HAL_IPCC_MspInit(IPCC_HandleTypeDef* hipcc)
+{
+ if(hipcc->Instance==IPCC)
+ {
+ /* USER CODE BEGIN IPCC_MspInit 0 */
+
+ /* USER CODE END IPCC_MspInit 0 */
+ /* Peripheral clock enable */
+ __HAL_RCC_IPCC_CLK_ENABLE();
+ /* IPCC interrupt Init */
+ HAL_NVIC_SetPriority(IPCC_C1_RX_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(IPCC_C1_RX_IRQn);
+ HAL_NVIC_SetPriority(IPCC_C1_TX_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(IPCC_C1_TX_IRQn);
+ /* USER CODE BEGIN IPCC_MspInit 1 */
+
+ /* USER CODE END IPCC_MspInit 1 */
+ }
+
+}
+
+/**
+* @brief IPCC MSP De-Initialization
+* This function freeze the hardware resources used in this example
+* @param hipcc: IPCC handle pointer
+* @retval None
+*/
+void HAL_IPCC_MspDeInit(IPCC_HandleTypeDef* hipcc)
+{
+ if(hipcc->Instance==IPCC)
+ {
+ /* USER CODE BEGIN IPCC_MspDeInit 0 */
+
+ /* USER CODE END IPCC_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_IPCC_CLK_DISABLE();
+
+ /* IPCC interrupt DeInit */
+ HAL_NVIC_DisableIRQ(IPCC_C1_RX_IRQn);
+ HAL_NVIC_DisableIRQ(IPCC_C1_TX_IRQn);
+ /* USER CODE BEGIN IPCC_MspDeInit 1 */
+
+ /* USER CODE END IPCC_MspDeInit 1 */
+ }
+
+}
+
+/**
+* @brief UART MSP Initialization
+* This function configures the hardware resources used in this example
+* @param huart: UART handle pointer
+* @retval None
+*/
+void HAL_UART_MspInit(UART_HandleTypeDef* huart)
+{
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(huart->Instance==LPUART1)
+ {
+ /* USER CODE BEGIN LPUART1_MspInit 0 */
+
+ /* USER CODE END LPUART1_MspInit 0 */
+ /* Peripheral clock enable */
+ __HAL_RCC_LPUART1_CLK_ENABLE();
+
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ /**LPUART1 GPIO Configuration
+ PA2 ------> LPUART1_TX
+ PA3 ------> LPUART1_RX
+ */
+ GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
+ 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(GPIOA, &GPIO_InitStruct);
+
+ /* LPUART1 DMA Init */
+ /* LPUART1_TX Init */
+ hdma_lpuart1_tx.Instance = DMA1_Channel1;
+ hdma_lpuart1_tx.Init.Request = DMA_REQUEST_LPUART1_TX;
+ hdma_lpuart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
+ hdma_lpuart1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
+ hdma_lpuart1_tx.Init.MemInc = DMA_MINC_ENABLE;
+ hdma_lpuart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
+ hdma_lpuart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
+ hdma_lpuart1_tx.Init.Mode = DMA_NORMAL;
+ hdma_lpuart1_tx.Init.Priority = DMA_PRIORITY_LOW;
+ if (HAL_DMA_Init(&hdma_lpuart1_tx) != HAL_OK)
+ {
+ Error_Handler();
+ }
+
+ __HAL_LINKDMA(huart,hdmatx,hdma_lpuart1_tx);
+
+ /* LPUART1 interrupt Init */
+ HAL_NVIC_SetPriority(LPUART1_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(LPUART1_IRQn);
+ /* USER CODE BEGIN LPUART1_MspInit 1 */
+
+ /* USER CODE END LPUART1_MspInit 1 */
+ }
+ else if(huart->Instance==USART1)
+ {
+ /* USER CODE BEGIN USART1_MspInit 0 */
+
+ /* USER CODE END USART1_MspInit 0 */
+ /* Peripheral clock enable */
+ __HAL_RCC_USART1_CLK_ENABLE();
+
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ /**USART1 GPIO Configuration
+ PA11 ------> USART1_CTS
+ PB6 ------> USART1_TX
+ PB7 ------> USART1_RX
+ */
+ GPIO_InitStruct.Pin = GPIO_PIN_11;
+ 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(GPIOA, &GPIO_InitStruct);
+
+ GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
+ 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(GPIOB, &GPIO_InitStruct);
+
+ /* USART1 DMA Init */
+ /* USART1_TX Init */
+ hdma_usart1_tx.Instance = DMA1_Channel2;
+ hdma_usart1_tx.Init.Request = DMA_REQUEST_USART1_TX;
+ hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
+ hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
+ hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE;
+ hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
+ hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
+ hdma_usart1_tx.Init.Mode = DMA_NORMAL;
+ hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW;
+ if (HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK)
+ {
+ Error_Handler();
+ }
+
+ __HAL_LINKDMA(huart,hdmatx,hdma_usart1_tx);
+
+ /* USART1 interrupt Init */
+ HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(USART1_IRQn);
+ /* USER CODE BEGIN USART1_MspInit 1 */
+
+ /* USER CODE END USART1_MspInit 1 */
+ }
+
+}
+
+/**
+* @brief UART MSP De-Initialization
+* This function freeze the hardware resources used in this example
+* @param huart: UART handle pointer
+* @retval None
+*/
+void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
+{
+ if(huart->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
+ PA2 ------> LPUART1_TX
+ PA3 ------> LPUART1_RX
+ */
+ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3);
+
+ /* LPUART1 DMA DeInit */
+ HAL_DMA_DeInit(huart->hdmatx);
+
+ /* LPUART1 interrupt DeInit */
+ HAL_NVIC_DisableIRQ(LPUART1_IRQn);
+ /* USER CODE BEGIN LPUART1_MspDeInit 1 */
+
+ /* USER CODE END LPUART1_MspDeInit 1 */
+ }
+ else if(huart->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
+ PA11 ------> USART1_CTS
+ PB6 ------> USART1_TX
+ PB7 ------> USART1_RX
+ */
+ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11);
+
+ HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_7);
+
+ /* USART1 DMA DeInit */
+ HAL_DMA_DeInit(huart->hdmatx);
+
+ /* USART1 interrupt DeInit */
+ HAL_NVIC_DisableIRQ(USART1_IRQn);
+ /* USER CODE BEGIN USART1_MspDeInit 1 */
+
+ /* USER CODE END USART1_MspDeInit 1 */
+ }
+
+}
+
+/**
+* @brief RTC MSP Initialization
+* This function configures the hardware resources used in this example
+* @param hrtc: RTC handle pointer
+* @retval None
+*/
+void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc)
+{
+ if(hrtc->Instance==RTC)
+ {
+ /* USER CODE BEGIN RTC_MspInit 0 */
+ HAL_PWR_EnableBkUpAccess(); /**< Enable access to the RTC registers */
+
+ /**
+ * Write twice the value to flush the APB-AHB bridge
+ * This bit shall be written in the register before writing the next one
+ */
+ HAL_PWR_EnableBkUpAccess();
+
+ __HAL_RCC_RTC_CONFIG(RCC_RTCCLKSOURCE_LSE); /**< Select LSE as RTC Input */
+
+ /* USER CODE END RTC_MspInit 0 */
+ /* Peripheral clock enable */
+ __HAL_RCC_RTC_ENABLE();
+ __HAL_RCC_RTCAPB_CLK_ENABLE();
+ /* USER CODE BEGIN RTC_MspInit 1 */
+
+ MODIFY_REG(RTC->CR, RTC_CR_WUCKSEL, CFG_RTC_WUCKSEL_DIVIDER);
+ /* USER CODE END RTC_MspInit 1 */
+ }
+
+}
+
+/**
+* @brief RTC MSP De-Initialization
+* This function freeze the hardware resources used in this example
+* @param hrtc: RTC handle pointer
+* @retval None
+*/
+void HAL_RTC_MspDeInit(RTC_HandleTypeDef* hrtc)
+{
+ if(hrtc->Instance==RTC)
+ {
+ /* USER CODE BEGIN RTC_MspDeInit 0 */
+
+ /* USER CODE END RTC_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_RTC_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 */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm32wbxx_hal_timebase_tim.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm32wbxx_hal_timebase_tim.c
new file mode 100644
index 000000000..6a2ad51f8
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm32wbxx_hal_timebase_tim.c
@@ -0,0 +1,149 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * @file stm32g0xx_hal_timebase_tim.c
+ * @author MCD Application Team
+ * @brief HAL time base based on the hardware TIM.
+ *
+ * This file overrides the native HAL time base functions (defined as weak)
+ * the TIM time base:
+ * + Intializes the TIM peripheral to generate a Period elapsed Event each 1ms
+ * + HAL_IncTick is called inside HAL_TIM_PeriodElapsedCallback ie each 1ms
+ *
+ @verbatim
+ ==============================================================================
+ ##### How to use this driver #####
+ ==============================================================================
+ [..]
+ This file must be copied to the application folder and modified as follows:
+ (#) Rename it to 'stm32g0xx_hal_timebase_tim.c'
+ (#) Add this file and the TIM HAL driver files to your project and make sure
+ HAL_TIM_MODULE_ENABLED is defined in stm32l4xx_hal_conf.h
+
+ [..]
+ (@) The application needs to ensure that the time base is always set to 1 millisecond
+ to have correct HAL operation.
+
+ @endverbatim
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; COPYRIGHT(c) 2019 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions 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 its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32wbxx_hal.h"
+#include "stm32wbxx_hal_tim.h"
+
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+TIM_HandleTypeDef htim17;
+/* Private function prototypes -----------------------------------------------*/
+/* Private functions ---------------------------------------------------------*/
+
+/**
+ * @brief This function configures the TIM17 as a time base source.
+ * The time source is configured to have 1ms time base with a dedicated
+ * Tick interrupt priority.
+ * @note This function is called automatically at the beginning of program after
+ * reset by HAL_Init() or at any time when clock is configured, by HAL_RCC_ClockConfig().
+ * @param TickPriority: Tick interrupt priority.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
+{
+ RCC_ClkInitTypeDef clkconfig;
+ uint32_t uwTimclock = 0;
+ uint32_t uwPrescalerValue = 0;
+ uint32_t pFLatency;
+ /*Configure the TIM17 IRQ priority */
+ HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM17_IRQn, TickPriority ,0);
+
+ /* Enable the TIM17 global Interrupt */
+ HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM17_IRQn);
+ /* Enable TIM17 clock */
+ __HAL_RCC_TIM17_CLK_ENABLE();
+
+ /* Get clock configuration */
+ HAL_RCC_GetClockConfig(&clkconfig, &pFLatency);
+
+ /* Compute TIM17 clock */
+ uwTimclock = HAL_RCC_GetPCLK2Freq();
+ /* Compute the prescaler value to have TIM17 counter clock equal to 1MHz */
+ uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000U) - 1U);
+
+ /* Initialize TIM17 */
+ htim17.Instance = TIM17;
+
+ /* Initialize TIMx peripheral as follow:
+ + Period = [(TIM17CLK/1000) - 1]. to have a (1/1000) s time base.
+ + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock.
+ + ClockDivision = 0
+ + Counter direction = Up
+ */
+ htim17.Init.Period = (1000000U / 1000U) - 1U;
+ htim17.Init.Prescaler = uwPrescalerValue;
+ htim17.Init.ClockDivision = 0;
+ htim17.Init.CounterMode = TIM_COUNTERMODE_UP;
+ if(HAL_TIM_Base_Init(&htim17) == HAL_OK)
+ {
+ /* Start the TIM time Base generation in interrupt mode */
+ return HAL_TIM_Base_Start_IT(&htim17);
+ }
+
+ /* Return function status */
+ return HAL_ERROR;
+}
+
+/**
+ * @brief Suspend Tick increment.
+ * @note Disable the tick increment by disabling TIM17 update interrupt.
+ * @param None
+ * @retval None
+ */
+void HAL_SuspendTick(void)
+{
+ /* Disable TIM17 update Interrupt */
+ __HAL_TIM_DISABLE_IT(&htim17, TIM_IT_UPDATE);
+}
+
+/**
+ * @brief Resume Tick increment.
+ * @note Enable the tick increment by Enabling TIM17 update interrupt.
+ * @param None
+ * @retval None
+ */
+void HAL_ResumeTick(void)
+{
+ /* Enable TIM17 Update interrupt */
+ __HAL_TIM_ENABLE_IT(&htim17, TIM_IT_UPDATE);
+}
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm32wbxx_it.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm32wbxx_it.c
new file mode 100644
index 000000000..b7f474aa8
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm32wbxx_it.c
@@ -0,0 +1,396 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * @file stm32wbxx_it.c
+ * @brief Interrupt Service Routines.
+ *******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+#include "stm32wbxx_it.h"
+/* Private includes ----------------------------------------------------------*/
+/* USER CODE BEGIN Includes */
+#include "hw.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 IPCC_HandleTypeDef hipcc;
+extern DMA_HandleTypeDef hdma_lpuart1_tx;
+extern DMA_HandleTypeDef hdma_usart1_tx;
+extern UART_HandleTypeDef hlpuart1;
+extern UART_HandleTypeDef huart1;
+extern TIM_HandleTypeDef htim17;
+/* 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 */
+
+ /* 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 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 */
+}
+
+/******************************************************************************/
+/* STM32WBxx 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_stm32wbxx.s). */
+/******************************************************************************/
+
+/**
+ * @brief This function handles PVD/PVM0/PVM2 interrupts through EXTI lines 16/31/33.
+ */
+void PVD_PVM_IRQHandler(void)
+{
+ /* USER CODE BEGIN PVD_PVM_IRQn 0 */
+
+ /* USER CODE END PVD_PVM_IRQn 0 */
+ HAL_PWREx_PVD_PVM_IRQHandler();
+ /* USER CODE BEGIN PVD_PVM_IRQn 1 */
+
+ /* USER CODE END PVD_PVM_IRQn 1 */
+}
+
+/**
+ * @brief This function handles Flash global interrupt.
+ */
+void FLASH_IRQHandler(void)
+{
+ /* USER CODE BEGIN FLASH_IRQn 0 */
+
+ /* USER CODE END FLASH_IRQn 0 */
+ HAL_FLASH_IRQHandler();
+ /* USER CODE BEGIN FLASH_IRQn 1 */
+
+ /* USER CODE END FLASH_IRQn 1 */
+}
+
+/**
+ * @brief This function handles RCC global interrupt.
+ */
+void RCC_IRQHandler(void)
+{
+ /* USER CODE BEGIN RCC_IRQn 0 */
+
+ /* USER CODE END RCC_IRQn 0 */
+ /* USER CODE BEGIN RCC_IRQn 1 */
+
+ /* USER CODE END RCC_IRQn 1 */
+}
+
+/**
+ * @brief This function handles DMA1 channel1 global interrupt.
+ */
+void DMA1_Channel1_IRQHandler(void)
+{
+ /* USER CODE BEGIN DMA1_Channel1_IRQn 0 */
+
+ /* USER CODE END DMA1_Channel1_IRQn 0 */
+ HAL_DMA_IRQHandler(&hdma_lpuart1_tx);
+ /* USER CODE BEGIN DMA1_Channel1_IRQn 1 */
+
+ /* USER CODE END DMA1_Channel1_IRQn 1 */
+}
+
+/**
+ * @brief This function handles DMA1 channel2 global interrupt.
+ */
+void DMA1_Channel2_IRQHandler(void)
+{
+ /* USER CODE BEGIN DMA1_Channel2_IRQn 0 */
+
+ /* USER CODE END DMA1_Channel2_IRQn 0 */
+ HAL_DMA_IRQHandler(&hdma_usart1_tx);
+ /* USER CODE BEGIN DMA1_Channel2_IRQn 1 */
+
+ /* USER CODE END DMA1_Channel2_IRQn 1 */
+}
+
+/**
+ * @brief This function handles CPU2 SEV interrupt through EXTI line 40 and PWR CPU2 HOLD wake-up interrupt.
+ */
+void C2SEV_PWR_C2H_IRQHandler(void)
+{
+ /* USER CODE BEGIN C2SEV_PWR_C2H_IRQn 0 */
+
+ /* USER CODE END C2SEV_PWR_C2H_IRQn 0 */
+ /* USER CODE BEGIN C2SEV_PWR_C2H_IRQn 1 */
+
+ /* USER CODE END C2SEV_PWR_C2H_IRQn 1 */
+}
+
+/**
+ * @brief This function handles USART1 global interrupt.
+ */
+void USART1_IRQHandler(void)
+{
+ /* USER CODE BEGIN USART1_IRQn 0 */
+
+ /* 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 LPUART1 global interrupt.
+ */
+void LPUART1_IRQHandler(void)
+{
+ /* USER CODE BEGIN LPUART1_IRQn 0 */
+
+ /* USER CODE END LPUART1_IRQn 0 */
+ HAL_UART_IRQHandler(&hlpuart1);
+ /* USER CODE BEGIN LPUART1_IRQn 1 */
+
+ /* USER CODE END LPUART1_IRQn 1 */
+}
+
+/**
+ * @brief This function handles PWR switching on the fly, end of BLE activity, end of 802.15.4 activity, end of critical radio phase interrupt.
+ */
+void PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler(void)
+{
+ /* USER CODE BEGIN PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQn 0 */
+
+ /* USER CODE END PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQn 0 */
+ /* USER CODE BEGIN PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQn 1 */
+
+ /* USER CODE END PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQn 1 */
+}
+
+/**
+ * @brief This function handles IPCC RX occupied interrupt.
+ */
+void IPCC_C1_RX_IRQHandler(void)
+{
+ /* USER CODE BEGIN IPCC_C1_RX_IRQn 0 */
+
+ /* USER CODE END IPCC_C1_RX_IRQn 0 */
+ HAL_IPCC_RX_IRQHandler(&hipcc);
+ /* USER CODE BEGIN IPCC_C1_RX_IRQn 1 */
+
+ /* USER CODE END IPCC_C1_RX_IRQn 1 */
+}
+
+/**
+ * @brief This function handles IPCC TX free interrupt.
+ */
+void IPCC_C1_TX_IRQHandler(void)
+{
+ /* USER CODE BEGIN IPCC_C1_TX_IRQn 0 */
+
+ /* USER CODE END IPCC_C1_TX_IRQn 0 */
+ HAL_IPCC_TX_IRQHandler(&hipcc);
+ /* USER CODE BEGIN IPCC_C1_TX_IRQn 1 */
+
+ /* USER CODE END IPCC_C1_TX_IRQn 1 */
+}
+
+/**
+ * @brief This function handles HSEM 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 */
+}
+
+/**
+ * @brief This function handles FPU global interrupt.
+ */
+void FPU_IRQHandler(void)
+{
+ /* USER CODE BEGIN FPU_IRQn 0 */
+
+ /* USER CODE END FPU_IRQn 0 */
+ /* USER CODE BEGIN FPU_IRQn 1 */
+
+ /* USER CODE END FPU_IRQn 1 */
+}
+
+/**
+ * @brief This function handles TIM1 trigger and commutation interrupts and TIM17 global interrupt.
+ */
+void TIM1_TRG_COM_TIM17_IRQHandler(void)
+{
+ /* USER CODE BEGIN TIM1_TRG_COM_TIM17_IRQn 0 */
+
+ /* USER CODE END TIM1_TRG_COM_TIM17_IRQn 0 */
+ HAL_TIM_IRQHandler(&htim17);
+ /* USER CODE BEGIN TIM1_TRG_COM_TIM17_IRQn 1 */
+
+ /* USER CODE END TIM1_TRG_COM_TIM17_IRQn 1 */
+}
+
+
+/* USER CODE BEGIN 1 */
+void RTC_WKUP_IRQHandler(void)
+{
+ HW_TS_RTC_Wakeup_Handler();
+}
+
+/**
+ * @brief This function handles External External line 4 interrupt request.
+ * @param None
+ * @retval None
+ */
+void EXTI4_IRQHandler(void)
+{
+ HAL_GPIO_EXTI_IRQHandler(BUTTON_SW1_PIN);
+}
+
+/**
+ * @brief This function handles External External line 0 interrupt request.
+ * @param None
+ * @retval None
+ */
+void EXTI0_IRQHandler(void)
+{
+ HAL_GPIO_EXTI_IRQHandler(BUTTON_SW2_PIN);
+}
+
+/**
+ * @brief This function handles External External line 1 interrupt request.
+ * @param None
+ * @retval None
+ */
+void EXTI1_IRQHandler(void)
+{
+ HAL_GPIO_EXTI_IRQHandler(BUTTON_SW3_PIN);
+}
+
+/* USER CODE END 1 */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm_logging.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm_logging.c
new file mode 100644
index 000000000..efde60287
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/stm_logging.c
@@ -0,0 +1,204 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : stm_logging.c
+ * Description : This file contains all the defines and functions used
+ * for logging on Application examples.
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/**
+ * @file
+ * This file implements logging functions to be used in Application examples.
+ *
+ */
+
+#include <ctype.h>
+#include <inttypes.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+
+#include "app_conf.h"
+#include "stm_logging.h"
+
+#define LOG_PARSE_BUFFER_SIZE 256U
+
+#define LOG_TIMESTAMP_ENABLE 0
+#define LOG_REGION_ENABLE 1U
+#define LOG_RTT_COLOR_ENABLE 1U
+
+#if (LOG_RTT_COLOR_ENABLE == 1U)
+#define RTT_COLOR_CODE_DEFAULT "\x1b[0m"
+#define RTT_COLOR_CODE_RED "\x1b[0;91m"
+#define RTT_COLOR_CODE_GREEN "\x1b[0;92m"
+#define RTT_COLOR_CODE_YELLOW "\x1b[0;93m"
+#define RTT_COLOR_CODE_CYAN "\x1b[0;96m"
+
+#else /* LOG_RTT_COLOR_ENABLE == 1 */
+#define RTT_COLOR_CODE_DEFAULT ""
+#define RTT_COLOR_CODE_RED ""
+#define RTT_COLOR_CODE_GREEN ""
+#define RTT_COLOR_CODE_YELLOW ""
+#define RTT_COLOR_CODE_CYAN ""
+#endif /* LOG_RTT_COLOR_ENABLE == 1 */
+
+#if (CFG_DEBUG_TRACE != 0)
+/**
+ * Function for outputting code region string.
+ *
+ * @param[input] aLogString Pointer to log buffer.
+ * @param[in] aMaxSize Maximum size of log buffer.
+ * @param[in] otLogRegion The region ID.
+ *
+ * @returns String with a log level color value.
+ */
+static inline uint16_t logRegion(char *aLogString, uint16_t aMaxSize,
+ appliLogRegion_t aLogRegion)
+{
+ char logRegionString[30U];
+
+ switch (aLogRegion)
+ {
+ case APPLI_LOG_REGION_GENERAL:
+ strcpy(logRegionString, "[M4 APPLICATION]");
+ break;
+ case APPLI_LOG_REGION_ZIGBEE_API:
+ strcpy(logRegionString, "[M4 ZIGBEE API]");
+ break;
+ default:
+ strcpy(logRegionString, "[M4]");
+ break;
+ }
+
+ return snprintf(aLogString, aMaxSize, "%s ", logRegionString);
+}
+#endif /* CFG_DEBUG_TRACE */
+
+#if (LOG_RTT_COLOR_ENABLE == 1U)
+#if (CFG_DEBUG_TRACE != 0)
+/**
+ * Function for getting color of a given level log.
+ *
+ * @param[in] aLogLevel The log level.
+ *
+ * @returns String with a log level color value.
+ */
+static inline const char *levelToString(appliLogLevel_t aLogLevel)
+{
+ switch (aLogLevel)
+ {
+ case LOG_LEVEL_CRIT:
+ return RTT_COLOR_CODE_RED;
+
+ case LOG_LEVEL_WARN:
+ return RTT_COLOR_CODE_YELLOW;
+
+ case LOG_LEVEL_INFO:
+ return RTT_COLOR_CODE_GREEN;
+
+ case LOG_LEVEL_DEBG:
+ default:
+ return RTT_COLOR_CODE_DEFAULT;
+ }
+}
+#endif /* CFG_DEBUG_TRACE */
+
+#if (CFG_DEBUG_TRACE != 0)
+/**
+ * Function for printing log level.
+ *
+ * @param[input] aLogString Pointer to log buffer.
+ * @param[in] aMaxSize Maximum size of log buffer.
+ * @param[in] aLogLevel Log level.
+ *
+ * @returns Number of bytes successfully written to the log buffer.
+ */
+static inline uint16_t logLevel(char *aLogString, uint16_t aMaxSize,
+ appliLogLevel_t aLogLevel)
+{
+ return snprintf(aLogString, aMaxSize, "%s", levelToString(aLogLevel));
+}
+#endif /* CFG_DEBUG_TRACE */
+#endif /* LOG_RTT_COLOR_ENABLE */
+
+#if (LOG_TIMESTAMP_ENABLE == 1U)
+/**
+ * Function for printing actual timestamp.
+ *
+ * @param[input] aLogString Pointer to the log buffer.
+ * @param[in] aMaxSize Maximum size of the log buffer.
+ *
+ * @returns Number of bytes successfully written to the log buffer.
+ */
+static inline uint16_t logTimestamp(char *aLogString, uint16_t aMaxSize)
+{
+ return snprintf(aLogString, aMaxSize, "%s[%010ld]", RTT_COLOR_CODE_DEFAULT,
+ otPlatAlarmMilliGetNow());
+}
+#endif /* LOG_TIMESTAMP_ENABLE */
+
+/**
+ * Function for printing application log
+ *
+ * @param[in] aLogLevel Log level.
+ * @param[in] aLogRegion The region ID.
+ * @param[in] aFormat User string format.
+ *
+ * @returns Number of bytes successfully written to the log buffer.
+ */
+void logApplication(appliLogLevel_t aLogLevel, appliLogRegion_t aLogRegion, const char *aFormat, ...)
+{
+#if (CFG_DEBUG_TRACE != 0) /* Since the traces are disabled, there is nothing to print */
+ uint16_t length = 0;
+ char logString[LOG_PARSE_BUFFER_SIZE + 1U];
+
+#if (LOG_TIMESTAMP_ENABLE == 1U)
+ length += logTimestamp(logString, LOG_PARSE_BUFFER_SIZE);
+#endif
+
+#if (LOG_RTT_COLOR_ENABLE == 1U)
+ /* Add level information */
+ length += logLevel(&logString[length], (LOG_PARSE_BUFFER_SIZE - length),
+ aLogLevel);
+#endif
+
+#if (LOG_REGION_ENABLE == 1U)
+ /* Add Region information */
+ length += logRegion(&logString[length], (LOG_PARSE_BUFFER_SIZE - length),
+ aLogRegion);
+#endif
+
+ /* Parse user string */
+ va_list paramList;
+ va_start(paramList, aFormat);
+ length += vsnprintf(&logString[length], (LOG_PARSE_BUFFER_SIZE - length),
+ aFormat, paramList);
+ logString[length++] = '\r';
+ logString[length++] = '\n';
+ logString[length++] = 0;
+ va_end(paramList);
+
+ if (aLogLevel <= APPLI_CONFIG_LOG_LEVEL)
+ {
+ printf("%s", logString);
+ }else
+ {
+ /* Print nothing */
+ }
+#endif /* CFG_DEBUG_TRACE */
+}
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/system_stm32wbxx.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/system_stm32wbxx.c
new file mode 100644
index 000000000..cb2a3e777
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/Core/Src/system_stm32wbxx.c
@@ -0,0 +1,353 @@
+/**
+ ******************************************************************************
+ * @file system_stm32wbxx.c
+ * @author MCD Application Team
+ * @brief CMSIS Cortex Device Peripheral Access Layer System Source File
+ *
+ * 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_stm32wbxx.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 MSI (4 MHz) is used as system clock source.
+ * Then SystemInit() function is called, in "startup_stm32wbxx.s" file, to
+ * configure the system clock before to branch to main program.
+ *
+ * This file configures the system clock as follows:
+ *=============================================================================
+ *-----------------------------------------------------------------------------
+ * System Clock source | MSI
+ *-----------------------------------------------------------------------------
+ * SYSCLK(Hz) | 4000000
+ *-----------------------------------------------------------------------------
+ * HCLK(Hz) | 4000000
+ *-----------------------------------------------------------------------------
+ * AHB Prescaler | 1
+ *-----------------------------------------------------------------------------
+ * APB1 Prescaler | 1
+ *-----------------------------------------------------------------------------
+ * APB2 Prescaler | 1
+ *-----------------------------------------------------------------------------
+ * PLL_M | 1
+ *-----------------------------------------------------------------------------
+ * PLL_N | 8
+ *-----------------------------------------------------------------------------
+ * PLL_P | 7
+ *-----------------------------------------------------------------------------
+ * PLL_Q | 2
+ *-----------------------------------------------------------------------------
+ * PLL_R | 2
+ *-----------------------------------------------------------------------------
+ * PLLSAI1_P | NA
+ *-----------------------------------------------------------------------------
+ * PLLSAI1_Q | NA
+ *-----------------------------------------------------------------------------
+ * PLLSAI1_R | NA
+ *-----------------------------------------------------------------------------
+ * Require 48MHz for USB OTG FS, | Disabled
+ * SDIO and RNG clock |
+ *-----------------------------------------------------------------------------
+ *=============================================================================
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Apache License, Version 2.0,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/Apache-2.0
+ *
+ ******************************************************************************
+ */
+
+/** @addtogroup CMSIS
+ * @{
+ */
+
+/** @addtogroup stm32WBxx_system
+ * @{
+ */
+
+/** @addtogroup stm32WBxx_System_Private_Includes
+ * @{
+ */
+
+#include "stm32wbxx.h"
+
+#if !defined (HSE_VALUE)
+ #define HSE_VALUE (32000000UL) /*!< Value of the External oscillator in Hz */
+#endif /* HSE_VALUE */
+
+#if !defined (MSI_VALUE)
+ #define MSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/
+#endif /* MSI_VALUE */
+
+#if !defined (HSI_VALUE)
+ #define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/
+#endif /* HSI_VALUE */
+
+#if !defined (LSI_VALUE)
+ #define LSI_VALUE (32000UL) /*!< Value of LSI in Hz*/
+#endif /* LSI_VALUE */
+
+#if !defined (LSE_VALUE)
+ #define LSE_VALUE (32768UL) /*!< Value of LSE in Hz*/
+#endif /* LSE_VALUE */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32WBxx_System_Private_TypesDefinitions
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32WBxx_System_Private_Defines
+ * @{
+ */
+
+/*!< Uncomment the following line if you need to relocate your vector Table in
+ Internal SRAM. */
+/* #define VECT_TAB_SRAM */
+#define VECT_TAB_OFFSET 0x0U /*!< Vector Table base offset field.
+ This value must be a multiple of 0x200. */
+
+#define VECT_TAB_BASE_ADDRESS SRAM1_BASE /*!< Vector Table base offset field.
+ This value must be a multiple of 0x200. */
+/**
+ * @}
+ */
+
+/** @addtogroup STM32WBxx_System_Private_Macros
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32WBxx_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 = 4000000UL ; /*CPU1: M4 on MSI clock after startup (4MHz)*/
+
+ const uint32_t AHBPrescTable[16UL] = {1UL, 3UL, 5UL, 1UL, 1UL, 6UL, 10UL, 32UL, 2UL, 4UL, 8UL, 16UL, 64UL, 128UL, 256UL, 512UL};
+
+ const uint32_t APBPrescTable[8UL] = {0UL, 0UL, 0UL, 0UL, 1UL, 2UL, 3UL, 4UL};
+
+ const uint32_t MSIRangeTable[16UL] = {100000UL, 200000UL, 400000UL, 800000UL, 1000000UL, 2000000UL, \
+ 4000000UL, 8000000UL, 16000000UL, 24000000UL, 32000000UL, 48000000UL, 0UL, 0UL, 0UL, 0UL}; /* 0UL values are incorrect cases */
+
+ const uint32_t SmpsPrescalerTable[4UL][6UL]={{1UL,3UL,2UL,2UL,1UL,2UL}, \
+ {2UL,6UL,4UL,3UL,2UL,4UL}, \
+ {4UL,12UL,8UL,6UL,4UL,8UL}, \
+ {4UL,12UL,8UL,6UL,4UL,8UL}};
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32WBxx_System_Private_FunctionPrototypes
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32WBxx_System_Private_Functions
+ * @{
+ */
+
+/**
+ * @brief Setup the microcontroller system.
+ * @param None
+ * @retval None
+ */
+void SystemInit(void)
+{
+ /* Configure the Vector Table location add offset address ------------------*/
+#if defined(VECT_TAB_SRAM) && defined(VECT_TAB_BASE_ADDRESS)
+ /* program in SRAMx */
+ SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAMx for CPU1 */
+#else /* program in FLASH */
+ SCB->VTOR = VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
+#endif
+
+ /* FPU settings ------------------------------------------------------------*/
+ #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
+ SCB->CPACR |= ((3UL << (10UL*2UL))|(3UL << (11UL*2UL))); /* set CP10 and CP11 Full Access */
+ #endif
+
+ /* Reset the RCC clock configuration to the default reset state ------------*/
+ /* Set MSION bit */
+ RCC->CR |= RCC_CR_MSION;
+
+ /* Reset CFGR register */
+ RCC->CFGR = 0x00070000U;
+
+ /* Reset PLLSAI1ON, PLLON, HSECSSON, HSEON, HSION, and MSIPLLON bits */
+ RCC->CR &= (uint32_t)0xFAF6FEFBU;
+
+ /*!< Reset LSI1 and LSI2 bits */
+ RCC->CSR &= (uint32_t)0xFFFFFFFAU;
+
+ /*!< Reset HSI48ON bit */
+ RCC->CRRCR &= (uint32_t)0xFFFFFFFEU;
+
+ /* Reset PLLCFGR register */
+ RCC->PLLCFGR = 0x22041000U;
+
+ /* Reset PLLSAI1CFGR register */
+ RCC->PLLSAI1CFGR = 0x22041000U;
+
+ /* Reset HSEBYP bit */
+ RCC->CR &= 0xFFFBFFFFU;
+
+ /* Disable all interrupts */
+ RCC->CIER = 0x00000000;
+}
+
+/**
+ * @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 MSI, SystemCoreClock will contain the MSI_VALUE(*)
+ *
+ * - 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 PLL, SystemCoreClock will contain the HSE_VALUE(***)
+ * or HSI_VALUE(*) or MSI_VALUE(*) multiplied/divided by the PLL factors.
+ *
+ * (*) MSI_VALUE is a constant defined in stm32wbxx_hal.h file (default value
+ * 4 MHz) but the real value may vary depending on the variations
+ * in voltage and temperature.
+ *
+ * (**) HSI_VALUE is a constant defined in stm32wbxx_hal_conf.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 stm32wbxx_hal_conf.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 tmp, msirange, pllvco, pllr, pllsource , pllm;
+
+ /* Get MSI Range frequency--------------------------------------------------*/
+
+ /*MSI frequency range in Hz*/
+ msirange = MSIRangeTable[(RCC->CR & RCC_CR_MSIRANGE) >> RCC_CR_MSIRANGE_Pos];
+
+ /* Get SYSCLK source -------------------------------------------------------*/
+ switch (RCC->CFGR & RCC_CFGR_SWS)
+ {
+ case 0x00: /* MSI used as system clock source */
+ SystemCoreClock = msirange;
+ break;
+
+ case 0x04: /* HSI used as system clock source */
+ /* HSI used as system clock source */
+ SystemCoreClock = HSI_VALUE;
+ break;
+
+ case 0x08: /* HSE used as system clock source */
+ SystemCoreClock = HSE_VALUE;
+ break;
+
+ case 0x0C: /* PLL used as system clock source */
+ /* PLL_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLM) * PLLN
+ SYSCLK = PLL_VCO / PLLR
+ */
+ pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC);
+ pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1UL ;
+
+ if(pllsource == 0x02UL) /* HSI used as PLL clock source */
+ {
+ pllvco = (HSI_VALUE / pllm);
+ }
+ else if(pllsource == 0x03UL) /* HSE used as PLL clock source */
+ {
+ pllvco = (HSE_VALUE / pllm);
+ }
+ else /* MSI used as PLL clock source */
+ {
+ pllvco = (msirange / pllm);
+ }
+
+ pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos);
+ pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos) + 1UL);
+
+ SystemCoreClock = pllvco/pllr;
+ break;
+
+ default:
+ SystemCoreClock = msirange;
+ break;
+ }
+
+ /* Compute HCLK clock frequency --------------------------------------------*/
+ /* Get HCLK1 prescaler */
+ tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos)];
+ /* HCLK clock frequency */
+ SystemCoreClock = SystemCoreClock / tmp;
+
+}
+
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/Project.eww b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/Project.eww
new file mode 100644
index 000000000..698c1599d
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/Project.eww
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workspace>
+ <project>
+ <path>$WS_DIR$\Zigbee_OnOff_Client_Router_FreeRTOS.ewp</path>
+ </project>
+ <batchBuild />
+</workspace>
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/Zigbee_OnOff_Client_Router_FreeRTOS.ewd b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/Zigbee_OnOff_Client_Router_FreeRTOS.ewd
new file mode 100644
index 000000000..c8ea951d5
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/Zigbee_OnOff_Client_Router_FreeRTOS.ewd
@@ -0,0 +1,1419 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <fileVersion>3</fileVersion>
+ <configuration>
+ <name>Zigbee_OnOff_Client_Router_FreeRTOS</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>1</debug>
+ <settings>
+ <name>C-SPY</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>29</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCVariant</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>MemOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MemFile</name>
+ <state>$TOOLKIT_DIR$\CONFIG\debugger\ST\STM32WB_M4.ddf</state>
+ </option>
+ <option>
+ <name>RunToEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RunToName</name>
+ <state>main</state>
+ </option>
+ <option>
+ <name>CExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CExtraOptions</name>
+ <state>--stlink_use_server</state>
+ </option>
+ <option>
+ <name>CFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCDDFArgumentProducer</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDownloadSuppressDownload</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDownloadVerifyAll</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProductVersion</name>
+ <state>8.20.2.14834</state>
+ </option>
+ <option>
+ <name>OCDynDriverList</name>
+ <state>STLINK_ID</state>
+ </option>
+ <option>
+ <name>OCLastSavedByProductVersion</name>
+ <state>8.20.2.14834</state>
+ </option>
+ <option>
+ <name>UseFlashLoader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CLowLevel</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacFile2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CDevice</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>FlashLoadersV3</name>
+ <state>$TOOLKIT_DIR$\config\flashloader\ST\FlashSTM32WB_M4.board</state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OverrideDefFlashBoard</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesOffset1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesUse1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDeviceConfigMacroFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCDebuggerExtraOption</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCAllMTBOptions</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCMulticoreNrOfCores</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCMulticoreMaster</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCMulticorePort</name>
+ <state>53461</state>
+ </option>
+ <option>
+ <name>OCMulticoreWorkspace</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCMulticoreSlaveProject</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCMulticoreSlaveConfiguration</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDownloadExtraImage</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCAttachSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MassEraseBeforeFlashing</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ARMSIM_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCSimDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCSimEnablePSP</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspOverrideConfig</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspConfigFile</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CADI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CCadiMemory</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Fast Model</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCADILogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCADILogFileEditB</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CMSISDAP_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>4</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CMSISDAPResetList</name>
+ <version>1</version>
+ <state>10</state>
+ </option>
+ <option>
+ <name>CMSISDAPHWResetDuration</name>
+ <state>300</state>
+ </option>
+ <option>
+ <name>CMSISDAPHWResetDelay</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>CMSISDAPDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CMSISDAPInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiTargetEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPJtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPRestoreBreakpointsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPUpdateBreakpointsEdit</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>RDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchUndef</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchData</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchPrefetch</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchMMERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchNOCPERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchCHKERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSTATERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchBUSERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchINTERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSFERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchHARDERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiCPUEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiCPUNumber</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeCfgOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeConfig</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CMSISDAPProbeConfigRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPSelectedCPUBehaviour</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ICpuName</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCJetEmuParams</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCCMSISDAPUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCCMSISDAPUsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>GDBSERVER_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJTagBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IJET_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>8</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetResetList</name>
+ <version>1</version>
+ <state>10</state>
+ </option>
+ <option>
+ <name>IjetHWResetDuration</name>
+ <state>300</state>
+ </option>
+ <option>
+ <name>IjetHWResetDelay</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>IjetPowerFromProbe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetPowerRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>IjetInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTargetEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetJtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetProtocolRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetSwoPin</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetCpuClockEdit</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IjetSwoPrescalerList</name>
+ <version>1</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetRestoreBreakpointsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetUpdateBreakpointsEdit</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>RDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchUndef</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchData</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchPrefetch</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchMMERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchNOCPERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchCHKERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSTATERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchBUSERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchINTERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSFERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchHARDERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeCfgOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeConfig</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IjetProbeConfigRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiCPUEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiCPUNumber</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetSelectedCPUBehaviour</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ICpuName</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCJetEmuParams</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetPreferETB</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetTraceSettingsList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetTraceSizeList</name>
+ <version>0</version>
+ <state>4</state>
+ </option>
+ <option>
+ <name>FlashBoardPathSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCIjetUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCIjetUsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>JLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>16</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>JLinkSpeed</name>
+ <state>1000</state>
+ </option>
+ <option>
+ <name>CCJLinkDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJLinkHWResetDelay</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>JLinkInitialSpeed</name>
+ <state>1000</state>
+ </option>
+ <option>
+ <name>CCDoJlinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkCommRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>CCJLinkSpeedRadioV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCUSBDevice</name>
+ <version>1</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkResetList</name>
+ <version>6</version>
+ <state>5</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchSFERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJLinkUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCTcpIpAlt</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTcpIpSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>2000</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSourceDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkDeviceName</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>LMIFTDI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>LmiftdiSpeed</name>
+ <state>500</state>
+ </option>
+ <option>
+ <name>CCLmiftdiDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiftdiLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>PEMICRO_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>3</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJPEMicroShowSettings</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>STLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>4</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceRadio</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkResetList</name>
+ <version>3</version>
+ <state>4</state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state>32.0</state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>2000</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCSTLinkDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchSFERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCSTLinkUsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkJtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkDAPNumber</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkDebugAccessPortRadio</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>THIRDPARTY_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CThirdPartyDriverDll</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileEditB</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>TIFET_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCMSPFetResetList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetTargetVccTypeDefault</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetTargetVoltage</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>CCMSPFetVCCDefault</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCMSPFetTargetSettlingtime</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetRadioJtagSpeedType</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCMSPFetConnection</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetUsbComPort</name>
+ <state>Automatic</state>
+ </option>
+ <option>
+ <name>CCMSPFetAllowAccessToBSL</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCMSPFetRadioEraseFlash</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>XDS100_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>6</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TIPackageOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>TIPackage</name>
+ <state></state>
+ </option>
+ <option>
+ <name>BoardFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCXds100BreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100DoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100UpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCXds100CatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchSFERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CpuClockEdit</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCXds100SwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100SwoClockEdit</name>
+ <state>1000</state>
+ </option>
+ <option>
+ <name>CCXds100HWResetDelay</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100ResetList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100UsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCXds100UsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100JtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100InterfaceRadio</name>
+ <state>2</state>
+ </option>
+ <option>
+ <name>CCXds100InterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100ProbeList</name>
+ <version>0</version>
+ <state>2</state>
+ </option>
+ <option>
+ <name>CCXds100SWOPortRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100SWOPort</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <debuggerPlugins>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>
+ <loadFlag>1</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ </debuggerPlugins>
+ </configuration>
+</project>
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/Zigbee_OnOff_Client_Router_FreeRTOS.ewp b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/Zigbee_OnOff_Client_Router_FreeRTOS.ewp
new file mode 100644
index 000000000..98bfe8ec8
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/Zigbee_OnOff_Client_Router_FreeRTOS.ewp
@@ -0,0 +1,1316 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <fileVersion>3</fileVersion>
+ <configuration>
+ <name>Zigbee_OnOff_Client_Router_FreeRTOS</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>1</debug>
+ <settings>
+ <name>General</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <version>30</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>ExePath</name>
+ <state>Zigbee_OnOff_Router_FreeRTOS/Exe</state>
+ </option>
+ <option>
+ <name>ObjPath</name>
+ <state>Zigbee_OnOff_Router_FreeRTOS/Obj</state>
+ </option>
+ <option>
+ <name>ListPath</name>
+ <state>Zigbee_OnOff_Router_FreeRTOS/List</state>
+ </option>
+ <option>
+ <name>GEndianMode</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>Input description</name>
+ <state>Full formatting, with multibyte support.</state>
+ </option>
+ <option>
+ <name>Output description</name>
+ <state>Full formatting, with multibyte support.</state>
+ </option>
+ <option>
+ <name>GOutputBinary</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGCoreOrChip</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelect</name>
+ <version>0</version>
+ <state>2</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelectSlave</name>
+ <version>0</version>
+ <state>2</state>
+ </option>
+ <option>
+ <name>RTDescription</name>
+ <state>Use the full configuration of the C/C++ runtime library. Full locale interface, C locale, file descriptor support, multibytes in printf and scanf, and hex floats in strtod.</state>
+ </option>
+ <option>
+ <name>OGProductVersion</name>
+ <state>4.41A</state>
+ </option>
+ <option>
+ <name>OGLastSavedByProductVersion</name>
+ <state>8.20.2.14834</state>
+ </option>
+ <option>
+ <name>GeneralEnableMisra</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraVerbose</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGChipSelectEditMenu</name>
+ <state>STM32WB55RG ST STM32WB55RG</state>
+ </option>
+ <option>
+ <name>GenLowLevelInterface</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GEndianModeBE</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGBufferedTerminalOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenStdoutInterface</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>GeneralMisraVer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules04</name>
+ <version>0</version>
+ <state>011111111111111110111111111111011111111111111011110100111111111111111111111111111111111111111111101111111111111011111111111111111111111111111</state>
+ </option>
+ <option>
+ <name>RTConfigPath2</name>
+ <state>$TOOLKIT_DIR$\INC\c\DLib_Config_Full.h</state>
+ </option>
+ <option>
+ <name>GBECoreSlave</name>
+ <version>26</version>
+ <state>39</state>
+ </option>
+ <option>
+ <name>OGUseCmsis</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGUseCmsisDspLib</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GRuntimeLibThreads</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CoreVariant</name>
+ <version>26</version>
+ <state>39</state>
+ </option>
+ <option>
+ <name>GFPUDeviceSlave</name>
+ <state>STM32WB55RG ST STM32WB55RG</state>
+ </option>
+ <option>
+ <name>FPU2</name>
+ <version>0</version>
+ <state>4</state>
+ </option>
+ <option>
+ <name>NrRegs</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>NEON</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GFPUCoreSlave2</name>
+ <version>26</version>
+ <state>39</state>
+ </option>
+ <option>
+ <name>OGCMSISPackSelectDevice</name>
+ </option>
+ <option>
+ <name>OgLibHeap</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGLibAdditionalLocale</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGPrintfVariant</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGPrintfMultibyteSupport</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGScanfVariant</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGScanfMultibyteSupport</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GenLocaleTags</name>
+ <state></state>
+ </option>
+ <option>
+ <name>GenLocaleDisplayOnly</name>
+ <state></state>
+ </option>
+ <option>
+ <name>DSPExtension</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TrustZone</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ICCARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>34</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CCOptimizationNoSizeConstraints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDefines</name>
+ <state>USE_HAL_DRIVER</state>
+ <state>STM32WB55xx</state>
+ <state>USE_STM32WBXX_NUCLEO</state>
+ <state>ZIGBEE_WB</state>
+ </option>
+ <option>
+ <name>CCPreprocFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocComments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMnemonics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMessages</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagSuppress</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagRemark</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagWarning</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagError</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCAllowList</name>
+ <version>1</version>
+ <state>00000000</state>
+ </option>
+ <option>
+ <name>CCDebugInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IEndianMode</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IExtraOptionsCheck</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IExtraOptions</name>
+ <state>--diag_suppress Pe111</state>
+ <state>--diag_suppress Pe188</state>
+ </option>
+ <option>
+ <name>CCLangConformance</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSignedPlainChar</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRequirePrototypes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagWarnAreErr</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCompilerRuntimeInfo</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OutputFile</name>
+ <state>$FILE_BNAME$.o</state>
+ </option>
+ <option>
+ <name>CCLibConfigHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>PreInclude</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CompilerMisraOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCIncludePath2</name>
+ <state>$PROJ_DIR$/../Core/Inc</state>
+ <state>$PROJ_DIR$/../STM32_WPAN/App</state>
+ <state>$PROJ_DIR$/../../../../../../Drivers/BSP/P-NUCLEO-WB55.Nucleo</state>
+ <state>$PROJ_DIR$/../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc</state>
+ <state>$PROJ_DIR$/../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc/Legacy</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/utilities</state>
+ <state>$PROJ_DIR$/../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/zigbee/core/Inc</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/zigbee/stack</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/zigbee/stack/include</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/zigbee/stack/include/mac</state>
+ <state>$PROJ_DIR$/../../../../../../Drivers/CMSIS/Include</state>
+ <state>$PROJ_DIR$/../../../../../../Utilities/sequencer</state>
+ <state>$PROJ_DIR$/../../../../../../Utilities/lpm/tiny_lpm</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/Third_Party/FreeRTOS/Source/include</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/Third_Party/FreeRTOS/Source/portable/IAR/ARM_CM4F</state>
+ </option>
+ <option>
+ <name>CCStdIncCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCodeSection</name>
+ <state>.text</state>
+ </option>
+ <option>
+ <name>IProcessorMode2</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptLevel</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCOptStrategy</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptLevelSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules04</name>
+ <version>0</version>
+ <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+ </option>
+ <option>
+ <name>CCPosIndRopi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndRwpi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndNoDynInit</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccLang</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCDialect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccAllowVLA</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccStaticDestr</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCppInlineSemantics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccFloatSemantics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCNoLiteralPool</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCOptStrategySlave</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCGuardCalls</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCEncSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEncOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEncOutputBom</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCEncInput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccExceptions2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccRTTI2</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>AARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>10</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>AObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>ACaseSensitivity</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacroChars</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnWhat</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnOne</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>ADebug</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AltRegisterNames</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ADefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AList</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AListHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AListing</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Includes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacDefs</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacExps</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacExec</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OnlyAssed</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MultiLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLengthCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLength</name>
+ <state>80</state>
+ </option>
+ <option>
+ <name>TabSpacing</name>
+ <state>8</state>
+ </option>
+ <option>
+ <name>AXRef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDefines</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefInternal</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDual</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AOutputFile</name>
+ <state>$FILE_BNAME$.o</state>
+ </option>
+ <option>
+ <name>ALimitErrorsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ALimitErrorsEdit</name>
+ <state>100</state>
+ </option>
+ <option>
+ <name>AIgnoreStdInclude</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AUserIncludes</name>
+ <state>$PROJ_DIR$\..\Core\Inc</state>
+ </option>
+ <option>
+ <name>AExtraOptionsCheckV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AExtraOptionsV2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AsmNoLiteralPool</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>OBJCOPY</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OOCOutputFormat</name>
+ <version>3</version>
+ <state>3</state>
+ </option>
+ <option>
+ <name>OCOutputOverride</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OOCOutputFile</name>
+ <state>Zigbee_OnOff_Router_FreeRTOS.bin</state>
+ </option>
+ <option>
+ <name>OOCCommandLineProducer</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OOCObjCopyEnable</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CUSTOM</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <extensions></extensions>
+ <cmdline></cmdline>
+ <hasPrio>0</hasPrio>
+ </data>
+ </settings>
+ <settings>
+ <name>BICOMP</name>
+ <archiveVersion>0</archiveVersion>
+ <data />
+ </settings>
+ <settings>
+ <name>BUILDACTION</name>
+ <archiveVersion>1</archiveVersion>
+ <data>
+ <prebuild></prebuild>
+ <postbuild></postbuild>
+ </data>
+ </settings>
+ <settings>
+ <name>ILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>20</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>IlinkLibIOConfig</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>XLinkMisraHandler</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkInputFileSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOutputFile</name>
+ <state>Zigbee_OnOff_Router_FreeRTOS.out</state>
+ </option>
+ <option>
+ <name>IlinkDebugInfoEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkKeepSymbols</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySymbol</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySegment</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryAlign</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkConfigDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkMapFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkLogFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogInitialization</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogModule</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogSection</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogVeneer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfOverride</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkIcfFile</name>
+ <state>$PROJ_DIR$\stm32wb55xx_flash_cm4.icf</state>
+ </option>
+ <option>
+ <name>IlinkIcfFileSlave</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkSuppressDiags</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsRem</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsWarn</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsErr</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkWarningsAreErrors</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkUseExtraOptions</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkLowLevelInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAutoLibEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAdditionalLibs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkOverrideProgramEntryLabel</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabelSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabel</name>
+ <state>__iar_program_start</state>
+ </option>
+ <option>
+ <name>DoFill</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>FillerByte</name>
+ <state>0xFF</state>
+ </option>
+ <option>
+ <name>FillerStart</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>FillerEnd</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>CrcSize</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcAlign</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcPoly</name>
+ <state>0x11021</state>
+ </option>
+ <option>
+ <name>CrcCompl</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcBitOrder</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcInitialValue</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>DoCrc</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkBufferedTerminalOutput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkStdoutInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcFullSize</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIElfToolPostProcess</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogAutoLibSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogRedirSymbols</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogUnusedFragments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcReverseByteOrder</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcUseAsInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptInline</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsAllow</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsForce</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptMergeDuplSections</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOptUseVfe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptForceVfe</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackAnalysisEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackControlFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkStackCallGraphFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CrcAlgorithm</name>
+ <version>1</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcUnitSize</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkThreadsSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkLogCallGraph</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfFile_AltDefault</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkEncInput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkEncOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkEncOutputBom</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkHeapSelect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkLocaleSelect</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IARCHIVE</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>IarchiveInputs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IarchiveOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IarchiveOutput</name>
+ <state>###Unitialized###</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>BILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data />
+ </settings>
+ </configuration>
+ <group>
+ <name>Application</name>
+ <group>
+ <name>EWARM</name>
+ <file>
+ <name>$PROJ_DIR$\startup_stm32wb55xx_cm4.s</name>
+ </file>
+ </group>
+ <group>
+ <name>User</name>
+ <group>
+ <name>Core</name>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\app_entry.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\freertos_port.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\hw_timerserver.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\hw_uart.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\main.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\stm32_lpm_if.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\stm32wbxx_hal_msp.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\stm32wbxx_hal_timebase_tim.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\stm32wbxx_it.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\stm_logging.c</name>
+ </file>
+ </group>
+ <group>
+ <name>STM32_WPAN</name>
+ <group>
+ <name>App</name>
+ <file>
+ <name>$PROJ_DIR$\..\STM32_WPAN\App\app_zigbee.c</name>
+ </file>
+ </group>
+ <group>
+ <name>Target</name>
+ <file>
+ <name>$PROJ_DIR$\..\STM32_WPAN\Target\hw_ipcc.c</name>
+ </file>
+ </group>
+ </group>
+ </group>
+ </group>
+ <group>
+ <name>Doc</name>
+ <file>
+ <name>$PROJ_DIR$\..\readme.txt</name>
+ </file>
+ </group>
+ <group>
+ <name>Drivers</name>
+ <group>
+ <name>BSP</name>
+ <group>
+ <name>STM32WBxx_Nucleo</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\BSP\P-NUCLEO-WB55.Nucleo\stm32wbxx_nucleo.c</name>
+ </file>
+ </group>
+ </group>
+ <group>
+ <name>CMSIS</name>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\system_stm32wbxx.c</name>
+ </file>
+ </group>
+ <group>
+ <name>STM32WBxx_HAL_Driver</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_cortex.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_dma.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_dma_ex.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_exti.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_flash.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_flash_ex.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_gpio.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_hsem.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_ipcc.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_pwr.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_pwr_ex.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_rcc.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_rcc_ex.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_rtc.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_rtc_ex.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_tim.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_tim_ex.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_uart.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_uart_ex.c</name>
+ </file>
+ </group>
+ </group>
+ <group>
+ <name>Middlewares</name>
+ <group>
+ <name>FreeRTOS</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\croutine.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\event_groups.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\list.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\portable\IAR\ARM_CM4F\port.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\portable\IAR\ARM_CM4F\portasm.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\queue.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\tasks.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\timers.c</name>
+ </file>
+ </group>
+ <group>
+ <name>STM32_WPAN</name>
+ <group>
+ <name>interface</name>
+ <group>
+ <name>patterns</name>
+ <group>
+ <name>ble_thread</name>
+ <group>
+ <name>schi</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\interface\patterns\ble_thread\shci\shci.c</name>
+ </file>
+ </group>
+ <group>
+ <name>tl</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\interface\patterns\ble_thread\tl\hci_tl_if.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\interface\patterns\ble_thread\tl\shci_tl.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\interface\patterns\ble_thread\tl\shci_tl_if.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\interface\patterns\ble_thread\tl\tl_mbox.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\interface\patterns\ble_thread\tl\tl_zigbee_hci.c</name>
+ </file>
+ </group>
+ </group>
+ </group>
+ </group>
+ <group>
+ <name>utilities</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\utilities\dbg_trace.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\utilities\otp.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\utilities\stm_list.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\utilities\stm_queue.c</name>
+ </file>
+ </group>
+ <group>
+ <name>zigbee</name>
+ <group>
+ <name>core</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\zigbee\core\src\zigbee_core_wb.c</name>
+ </file>
+ </group>
+ <group>
+ <name>stack</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\zigbee\lib\stm32wb_zigbee_wb_lib.a</name>
+ </file>
+ </group>
+ </group>
+ </group>
+ </group>
+ <group>
+ <name>Utilities</name>
+ <group>
+ <name>lpm</name>
+ <group>
+ <name>tiny_lpm</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Utilities\lpm\tiny_lpm\stm32_lpm.c</name>
+ </file>
+ </group>
+ </group>
+ <group>
+ <name>sequencer</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Utilities\sequencer\stm32_seq.c</name>
+ </file>
+ </group>
+ </group>
+</project>
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/startup_stm32wb55xx_cm4.s b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/startup_stm32wb55xx_cm4.s
new file mode 100644
index 000000000..f3b216985
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/startup_stm32wb55xx_cm4.s
@@ -0,0 +1,517 @@
+;******************************************************************************
+;* File Name : startup_stm32wb55xx_cm4.s
+;* Author : MCD Application Team
+;* Description : M4 core vector table of the STM32WB55xx devices for the
+;* IAR (EWARM) toolchain.
+;*
+;* 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-M4 processor is in Thread mode,
+;* priority is Privileged, and the Stack is set to Main.
+;******************************************************************************
+;* @attention
+;*
+;* <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
+;* All rights reserved.</center></h2>
+;*
+;* This software component is licensed by ST under Apache License, Version 2.0,
+;* the "License"; You may not use this file except in compliance with the
+;* License. You may obtain a copy of the License at:
+;* opensource.org/licenses/Apache-2.0
+;*
+;******************************************************************************
+;
+;
+; 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
+
+ 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 0 ; Reserved
+ 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_PVM_IRQHandler ; PVD and PVM Interrupt
+ DCD TAMP_STAMP_LSECSS_IRQHandler ; RTC Tamper, TimeStamp Interrupts and LSECSS Interrupts
+ DCD RTC_WKUP_IRQHandler ; RTC Wakeup Interrupt
+ DCD FLASH_IRQHandler ; FLASH global Interrupt
+ DCD RCC_IRQHandler ; RCC Interrupt
+ DCD EXTI0_IRQHandler ; EXTI Line 0 Interrupt
+ DCD EXTI1_IRQHandler ; EXTI Line 1 Interrupt
+ DCD EXTI2_IRQHandler ; EXTI Line 2 Interrupt
+ DCD EXTI3_IRQHandler ; EXTI Line 3 Interrup
+ DCD EXTI4_IRQHandler ; EXTI Line 4 Interrupt
+ DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 Interrupt
+ DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 Interrupt
+ DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 Interrupt
+ DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 Interrupt
+ DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 Interrupt
+ DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 Interrupt
+ DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 Interrupt
+ DCD ADC1_IRQHandler ; ADC1 Interrupt
+ DCD USB_HP_IRQHandler ; USB High Priority Interrupt
+ DCD USB_LP_IRQHandler ; USB Low Priority Interrupt
+ DCD C2SEV_PWR_C2H_IRQHandler ; CPU M0+ SEV Interrupt
+ DCD COMP_IRQHandler ; COMP1 and COMP2 Interrupts
+ DCD EXTI9_5_IRQHandler ; EXTI Lines [9:5] Interrupt
+ DCD TIM1_BRK_IRQHandler ; TIM1 Break Interrupt
+ DCD TIM1_UP_TIM16_IRQHandler ; TIM1 Update and TIM16 global Interrupts
+ DCD TIM1_TRG_COM_TIM17_IRQHandler ; TIM1 Trigger and Communication and TIM17 global Interrupts
+ DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare Interrupt
+ DCD TIM2_IRQHandler ; TIM2 Global Interrupt
+ DCD PKA_IRQHandler ; PKA Interrupt
+ DCD I2C1_EV_IRQHandler ; I2C1 Event Interrupt
+ DCD I2C1_ER_IRQHandler ; I2C1 Error Interrupt
+ DCD I2C3_EV_IRQHandler ; I2C3 Event Interrupt
+ DCD I2C3_ER_IRQHandler ; I2C3 Error Interrupt
+ DCD SPI1_IRQHandler ; SPI1 Interrupt
+ DCD SPI2_IRQHandler ; SPI2 Interrupt
+ DCD USART1_IRQHandler ; USART1 Interrupt
+ DCD LPUART1_IRQHandler ; LPUART1 Interrupt
+ DCD SAI1_IRQHandler ; SAI Interrupt
+ DCD TSC_IRQHandler ; TSC Interrupt
+ DCD EXTI15_10_IRQHandler ; EXTI Lines1[15:10 ]Interrupts
+ DCD RTC_Alarm_IRQHandler ; RTC Alarms (A and B) Interrupt
+ DCD CRS_IRQHandler ; CRS interrupt
+ DCD PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler ; WKUP Interrupt from PWR
+ DCD IPCC_C1_RX_IRQHandler ; IPCC CPU1 RX occupied interrupt
+ DCD IPCC_C1_TX_IRQHandler ; IPCC CPU1 RX free interrupt
+ DCD HSEM_IRQHandler ; HSEM0 Interrupt
+ DCD LPTIM1_IRQHandler ; LPTIM1 Interrupt
+ DCD LPTIM2_IRQHandler ; LPTIM2 Interrupt
+ DCD LCD_IRQHandler ; LCD Interrupt
+ DCD QUADSPI_IRQHandler ; QUADSPI Interrupt
+ DCD AES1_IRQHandler ; AES1 Interrupt
+ DCD AES2_IRQHandler ; AES2 Interrupt
+ DCD RNG_IRQHandler ; RNG1 Interrupt
+ DCD FPU_IRQHandler ; FPU Interrupt
+ DCD DMA2_Channel1_IRQHandler ; DMA2 Channel 1 Interrupt
+ DCD DMA2_Channel2_IRQHandler ; DMA2 Channel 2 Interrupt
+ DCD DMA2_Channel3_IRQHandler ; DMA2 Channel 3 Interrupt
+ DCD DMA2_Channel4_IRQHandler ; DMA2 Channel 4 Interrupt
+ DCD DMA2_Channel5_IRQHandler ; DMA2 Channel 5 Interrupt
+ DCD DMA2_Channel6_IRQHandler ; DMA2 Channel 6 Interrupt
+ DCD DMA2_Channel7_IRQHandler ; DMA2 Channel 7 Interrupt
+ DCD DMAMUX1_OVR_IRQHandler ; DMAMUX overrun Interrupt
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; 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 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_PVM_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+PVD_PVM_IRQHandler
+ B PVD_PVM_IRQHandler
+
+ PUBWEAK TAMP_STAMP_LSECSS_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+TAMP_STAMP_LSECSS_IRQHandler
+ B TAMP_STAMP_LSECSS_IRQHandler
+
+ PUBWEAK RTC_WKUP_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+RTC_WKUP_IRQHandler
+ B RTC_WKUP_IRQHandler
+
+ PUBWEAK FLASH_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+FLASH_IRQHandler
+ B FLASH_IRQHandler
+
+ PUBWEAK RCC_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+RCC_IRQHandler
+ B RCC_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 DMA1_Channel1_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA1_Channel1_IRQHandler
+ B DMA1_Channel1_IRQHandler
+
+ PUBWEAK DMA1_Channel2_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA1_Channel2_IRQHandler
+ B DMA1_Channel2_IRQHandler
+
+ PUBWEAK DMA1_Channel3_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA1_Channel3_IRQHandler
+ B DMA1_Channel3_IRQHandler
+
+ PUBWEAK DMA1_Channel4_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA1_Channel4_IRQHandler
+ B DMA1_Channel4_IRQHandler
+
+ PUBWEAK DMA1_Channel5_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA1_Channel5_IRQHandler
+ B DMA1_Channel5_IRQHandler
+
+ PUBWEAK DMA1_Channel6_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA1_Channel6_IRQHandler
+ B DMA1_Channel6_IRQHandler
+
+ PUBWEAK DMA1_Channel7_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA1_Channel7_IRQHandler
+ B DMA1_Channel7_IRQHandler
+
+ PUBWEAK ADC1_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+ADC1_IRQHandler
+ B ADC1_IRQHandler
+
+ PUBWEAK USB_HP_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+USB_HP_IRQHandler
+ B USB_HP_IRQHandler
+
+ PUBWEAK USB_LP_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+USB_LP_IRQHandler
+ B USB_LP_IRQHandler
+
+ PUBWEAK C2SEV_PWR_C2H_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+C2SEV_PWR_C2H_IRQHandler
+ B C2SEV_PWR_C2H_IRQHandler
+
+ PUBWEAK COMP_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+COMP_IRQHandler
+ B COMP_IRQHandler
+
+ PUBWEAK EXTI9_5_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+EXTI9_5_IRQHandler
+ B EXTI9_5_IRQHandler
+
+ PUBWEAK TIM1_BRK_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+TIM1_BRK_IRQHandler
+ B TIM1_BRK_IRQHandler
+
+ PUBWEAK TIM1_UP_TIM16_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+TIM1_UP_TIM16_IRQHandler
+ B TIM1_UP_TIM16_IRQHandler
+
+ PUBWEAK TIM1_TRG_COM_TIM17_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+TIM1_TRG_COM_TIM17_IRQHandler
+ B TIM1_TRG_COM_TIM17_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 PKA_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+PKA_IRQHandler
+ B PKA_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 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 SPI1_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+SPI1_IRQHandler
+ B SPI1_IRQHandler
+
+ PUBWEAK SPI2_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+SPI2_IRQHandler
+ B SPI2_IRQHandler
+
+ PUBWEAK USART1_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+USART1_IRQHandler
+ B USART1_IRQHandler
+
+ PUBWEAK LPUART1_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+LPUART1_IRQHandler
+ B LPUART1_IRQHandler
+
+ PUBWEAK SAI1_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+SAI1_IRQHandler
+ B SAI1_IRQHandler
+
+ PUBWEAK TSC_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+TSC_IRQHandler
+ B TSC_IRQHandler
+
+ PUBWEAK EXTI15_10_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+EXTI15_10_IRQHandler
+ B EXTI15_10_IRQHandler
+
+ PUBWEAK RTC_Alarm_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+RTC_Alarm_IRQHandler
+ B RTC_Alarm_IRQHandler
+
+ PUBWEAK CRS_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+CRS_IRQHandler
+ B CRS_IRQHandler
+
+ PUBWEAK PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler
+ B PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler
+
+ PUBWEAK IPCC_C1_RX_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+IPCC_C1_RX_IRQHandler
+ B IPCC_C1_RX_IRQHandler
+
+ PUBWEAK IPCC_C1_TX_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+IPCC_C1_TX_IRQHandler
+ B IPCC_C1_TX_IRQHandler
+
+ PUBWEAK HSEM_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+HSEM_IRQHandler
+ B HSEM_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 LCD_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+LCD_IRQHandler
+ B LCD_IRQHandler
+
+ PUBWEAK QUADSPI_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+QUADSPI_IRQHandler
+ B QUADSPI_IRQHandler
+
+ PUBWEAK AES1_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+AES1_IRQHandler
+ B AES1_IRQHandler
+
+ PUBWEAK AES2_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+AES2_IRQHandler
+ B AES2_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 DMA2_Channel1_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA2_Channel1_IRQHandler
+ B DMA2_Channel1_IRQHandler
+
+ PUBWEAK DMA2_Channel2_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA2_Channel2_IRQHandler
+ B DMA2_Channel2_IRQHandler
+
+ PUBWEAK DMA2_Channel3_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA2_Channel3_IRQHandler
+ B DMA2_Channel3_IRQHandler
+
+ PUBWEAK DMA2_Channel4_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA2_Channel4_IRQHandler
+ B DMA2_Channel4_IRQHandler
+
+ PUBWEAK DMA2_Channel5_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA2_Channel5_IRQHandler
+ B DMA2_Channel5_IRQHandler
+
+ PUBWEAK DMA2_Channel6_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA2_Channel6_IRQHandler
+ B DMA2_Channel6_IRQHandler
+
+ PUBWEAK DMA2_Channel7_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA2_Channel7_IRQHandler
+ B DMA2_Channel7_IRQHandler
+
+ PUBWEAK DMAMUX1_OVR_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMAMUX1_OVR_IRQHandler
+ B DMAMUX1_OVR_IRQHandler
+
+ END
+
+;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE*****
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/stm32wb55xx_flash_cm4.icf b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/stm32wb55xx_flash_cm4.icf
new file mode 100644
index 000000000..70aec4026
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/EWARM/stm32wb55xx_flash_cm4.icf
@@ -0,0 +1,47 @@
+/*###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-*/
+/***** FLASH Part dedicated to M4 *****/
+define symbol __ICFEDIT_region_ROM_start__ = 0x08000000;
+define symbol __ICFEDIT_region_ROM_end__ = 0x0807FFFF;
+define symbol __ICFEDIT_region_RAM_start__ = 0x20000004;
+define symbol __ICFEDIT_region_RAM_end__ = 0x2002F000;
+
+ /*0x2002FFFF---------------------------------------|
+ * | Emulation Flash |
+ * 0x2002F000-------------------------------------- |
+ * | Region_RAM |
+ * 0x20000004-------------------------------------- |
+
+/*-Sizes-*/
+define symbol __ICFEDIT_size_cstack__ = 0x1000; /* 4K */
+define symbol __ICFEDIT_size_heap__ = 102400; /* was 4K */
+/**** End of ICF editor section. ###ICF###*/
+
+define symbol __ICFEDIT_region_RAM_SHARED_start__ = 0x20030000;
+define symbol __ICFEDIT_region_RAM_SHARED_end__ = 0x20031000;
+
+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 RAM_SHARED_region = mem:[from __ICFEDIT_region_RAM_SHARED_start__ to __ICFEDIT_region_RAM_SHARED_end__];
+
+define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
+define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
+
+/* MB_MEM1 and MB_MEM2 are sections reserved to mailbox communication. It is placed in the shared memory */
+initialize by copy { readwrite };
+do not initialize { section .noinit,
+ section MAPPING_TABLE,
+ section MB_MEM1 };
+
+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 RAM_SHARED_region { first section MAPPING_TABLE};
+place in RAM_SHARED_region { section MB_MEM1};
+place in RAM_SHARED_region { section MB_MEM2};
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/STM32_WPAN/App/app_zigbee.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/STM32_WPAN/App/app_zigbee.c
new file mode 100644
index 000000000..232fad86f
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/STM32_WPAN/App/app_zigbee.c
@@ -0,0 +1,752 @@
+
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : App/app_zigbee.c
+ * Description : Zigbee Application.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "app_common.h"
+#include "app_entry.h"
+#include "dbg_trace.h"
+#include "app_zigbee.h"
+#include "zigbee_interface.h"
+#include "shci.h"
+#include "stm_logging.h"
+#include "app_conf.h"
+#include "stm32wbxx_core_interface_def.h"
+#include "zigbee_types.h"
+#include "cmsis_os.h"
+
+/* Private includes -----------------------------------------------------------*/
+#include <assert.h>
+#include "zcl/zcl.h"
+#include "zcl/general/zcl.onoff.h"
+
+/* USER CODE BEGIN Includes */
+/* USER CODE END Includes */
+
+/* Private typedef -----------------------------------------------------------*/
+/* USER CODE BEGIN PTD */
+/* USER CODE END PTD */
+
+/* Private defines -----------------------------------------------------------*/
+#define APP_ZIGBEE_STARTUP_FAIL_DELAY 500U
+#define CHANNEL 13
+
+#define SW1_ENDPOINT 17
+
+/* USER CODE BEGIN PD */
+#define SW1_GROUP_ADDR 0x0001
+/* USER CODE END PD */
+
+/* Private macros ------------------------------------------------------------*/
+/* USER CODE BEGIN PM */
+/* USER CODE END PM */
+
+/* External definition -------------------------------------------------------*/
+enum ZbStatusCodeT ZbStartupWait(struct ZigBeeT *zb, struct ZbStartupT *config);
+
+/* USER CODE BEGIN ED */
+/* USER CODE END ED */
+
+/* Private function prototypes -----------------------------------------------*/
+static void APP_ZIGBEE_StackLayersInit(void);
+static void APP_ZIGBEE_ConfigEndpoints(void);
+static void APP_ZIGBEE_NwkForm(void);
+
+static void APP_ZIGBEE_TraceError(const char *pMess, uint32_t ErrCode);
+static void APP_ZIGBEE_CheckWirelessFirmwareInfo(void);
+
+static void Wait_Getting_Ack_From_M0(void);
+static void Receive_Ack_From_M0(void);
+static void Receive_Notification_From_M0(void);
+
+static void APP_ZIGBEE_ProcessNotifyM0ToM4(void * argument);
+static void APP_ZIGBEE_ProcessRequestM0ToM4(void * argument);
+static void APP_ZIGBEE_ProcessNwkForm(void * argument);
+static void APP_ZIGBEE_ProcessPushButton(void *argument);
+/* USER CODE BEGIN PFP */
+static void APP_ZIGBEE_SW1_Process(void);
+static void APP_ZIGBEE_ConfigGroupAddr(void);
+/* USER CODE END PFP */
+
+/* Private variables ---------------------------------------------------------*/
+static TL_CmdPacket_t *p_ZIGBEE_otcmdbuffer;
+static TL_EvtPacket_t *p_ZIGBEE_notif_M0_to_M4;
+static TL_EvtPacket_t *p_ZIGBEE_request_M0_to_M4;
+static __IO uint32_t CptReceiveNotifyFromM0 = 0;
+static __IO uint32_t CptReceiveRequestFromM0 = 0;
+static volatile int FlagReceiveAckFromM0 = 0;
+
+static osThreadId_t OsTaskNotifyM0ToM4Id;
+static osThreadId_t OsTaskRequestM0ToM4Id;
+static osThreadId_t OsTaskNwkFormId;
+static osThreadId_t OsTaskPushButtonId;
+static osMutexId_t MtxZigbeeId;
+
+osSemaphoreId_t TransferToM0Semaphore;
+osSemaphoreId_t StartupEndSemaphore;
+
+PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static TL_ZIGBEE_Config_t ZigbeeConfigBuffer;
+PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static TL_CmdPacket_t ZigbeeOtCmdBuffer;
+PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static uint8_t ZigbeeNotifRspEvtBuffer[sizeof(TL_PacketHeader_t) + TL_EVT_HDR_SIZE + 255U];
+PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static uint8_t ZigbeeNotifRequestBuffer[sizeof(TL_PacketHeader_t) + TL_EVT_HDR_SIZE + 255U];
+
+struct zigbee_app_info {
+ bool has_init;
+ struct ZigBeeT *zb;
+ enum ZbStartType startupControl;
+ enum ZbStatusCodeT join_status;
+ uint32_t join_delay;
+ bool init_after_join;
+
+ struct ZbZclClusterT *onOff_client_1;
+};
+static struct zigbee_app_info zigbee_app_info;
+
+/* FreeRtos stacks attributes */
+const osThreadAttr_t TaskNotifyM0ToM4_attr = {
+ .name = CFG_TASK_NOTIFY_M0_TO_M4_PROCESS_NAME,
+ .attr_bits = CFG_TASK_PROCESS_ATTR_BITS,
+ .cb_mem = CFG_TASK_PROCESS_CB_MEM,
+ .cb_size = CFG_TASK_PROCESS_CB_SIZE,
+ .stack_mem = CFG_TASK_PROCESS_STACK_MEM,
+ .priority = osPriorityNormal,
+ .stack_size = CFG_TASK_PROCESS_STACK_SIZE
+};
+const osThreadAttr_t TaskRequestM0ToM4_attr = {
+ .name = CFG_TASK_REQUEST_M0_TO_M4_PROCESS_NAME,
+ .attr_bits = CFG_TASK_PROCESS_ATTR_BITS,
+ .cb_mem = CFG_TASK_PROCESS_CB_MEM,
+ .cb_size = CFG_TASK_PROCESS_CB_SIZE,
+ .stack_mem = CFG_TASK_PROCESS_STACK_MEM,
+ .priority = osPriorityNormal,
+ .stack_size = CFG_TASK_PROCESS_STACK_SIZE
+};
+const osThreadAttr_t TaskNwkForm_attr = {
+ .name = CFG_TASK_NWK_FORM_PROCESS_NAME,
+ .attr_bits = CFG_TASK_PROCESS_ATTR_BITS,
+ .cb_mem = CFG_TASK_PROCESS_CB_MEM,
+ .cb_size = CFG_TASK_PROCESS_CB_SIZE,
+ .stack_mem = CFG_TASK_PROCESS_STACK_MEM,
+ .priority = osPriorityNormal,
+ .stack_size = CFG_TASK_PROCESS_STACK_SIZE
+};
+
+const osThreadAttr_t TaskPushButton_attributes = {
+ .name = CFG_TASK_PUSH_BUTTON_PROCESS_NAME,
+ .attr_bits = CFG_TASK_PROCESS_ATTR_BITS,
+ .cb_mem = CFG_TASK_PROCESS_CB_MEM,
+ .cb_size = CFG_TASK_PROCESS_CB_SIZE,
+ .stack_mem = CFG_TASK_PROCESS_STACK_MEM,
+ .priority = osPriorityNormal,
+ .stack_size = CFG_TASK_PROCESS_STACK_SIZE
+};
+
+
+/* USER CODE BEGIN PV */
+/* USER CODE END PV */
+/* Functions Definition ------------------------------------------------------*/
+
+/**
+ * @brief Zigbee application initialization
+ * @param None
+ * @retval None
+ */
+void APP_ZIGBEE_Init(void)
+{
+ SHCI_CmdStatus_t ZigbeeInitStatus;
+
+ APP_DBG("APP_ZIGBEE_Init");
+
+ /* Check the compatibility with the Coprocessor Wireless Firmware loaded */
+ APP_ZIGBEE_CheckWirelessFirmwareInfo();
+
+ /* Register cmdbuffer */
+ APP_ZIGBEE_RegisterCmdBuffer(&ZigbeeOtCmdBuffer);
+
+ /* Init config buffer and call TL_ZIGBEE_Init */
+ APP_ZIGBEE_TL_INIT();
+
+ /* Initialize the mutex */
+ MtxZigbeeId = osMutexNew( NULL );
+
+ /* Initialize the semaphores */
+ StartupEndSemaphore = osSemaphoreNew( 1, 0, NULL ); /*< Create the semaphore and make it busy at initialization */
+ TransferToM0Semaphore = osSemaphoreNew( 1, 0, NULL );
+
+ /* Register task */
+ /* Create the different tasks */
+
+ OsTaskNotifyM0ToM4Id = osThreadNew(APP_ZIGBEE_ProcessNotifyM0ToM4, NULL,&TaskNotifyM0ToM4_attr);
+ OsTaskRequestM0ToM4Id = osThreadNew(APP_ZIGBEE_ProcessRequestM0ToM4, NULL,&TaskRequestM0ToM4_attr);
+
+ /* Task associated with network creation process */
+ OsTaskNwkFormId = osThreadNew(APP_ZIGBEE_ProcessNwkForm, NULL,&TaskNwkForm_attr);
+
+ /* USER CODE BEGIN APP_ZIGBEE_INIT */
+ /* Task associated with push button SW1 */
+ OsTaskPushButtonId = osThreadNew(APP_ZIGBEE_ProcessPushButton, NULL, &TaskPushButton_attributes);
+ /* USER CODE END APP_ZIGBEE_INIT */
+
+ /* Start the Zigbee on the CPU2 side */
+ ZigbeeInitStatus = SHCI_C2_ZIGBEE_Init();
+ /* Prevent unused argument(s) compilation warning */
+ UNUSED(ZigbeeInitStatus);
+
+ /* Initialize Zigbee stack layers */
+ APP_ZIGBEE_StackLayersInit();
+
+} /* APP_ZIGBEE_Init */
+
+/**
+ * @brief Initialize Zigbee stack layers
+ * @param None
+ * @retval None
+ */
+static void APP_ZIGBEE_StackLayersInit(void)
+{
+ APP_DBG("APP_ZIGBEE_StackLayersInit");
+
+ zigbee_app_info.zb = ZbInit(0U, NULL, NULL);
+ assert(zigbee_app_info.zb != NULL);
+
+ /* Create the endpoint and cluster(s) */
+ APP_ZIGBEE_ConfigEndpoints();
+
+ /* USER CODE BEGIN APP_ZIGBEE_StackLayersInit */
+ BSP_LED_Off(LED_RED);
+ BSP_LED_Off(LED_GREEN);
+ BSP_LED_Off(LED_BLUE);
+ /* USER CODE END APP_ZIGBEE_StackLayersInit */
+
+ /* Configure the joining parameters */
+ zigbee_app_info.join_status = (enum ZbStatusCodeT) 0x01; /* init to error status */
+ zigbee_app_info.join_delay = HAL_GetTick(); /* now */
+ zigbee_app_info.startupControl = ZbStartTypeJoin;
+
+ /* Initialization Complete */
+ zigbee_app_info.has_init = true;
+
+ /* run the task */
+ osThreadFlagsSet(OsTaskNwkFormId,1);
+} /* APP_ZIGBEE_StackLayersInit */
+
+/**
+ * @brief Configure Zigbee application endpoints
+ * @param None
+ * @retval None
+ */
+static void APP_ZIGBEE_ConfigEndpoints(void)
+{
+ struct ZbApsmeAddEndpointReqT req;
+ struct ZbApsmeAddEndpointConfT conf;
+
+ memset(&req, 0, sizeof(req));
+
+ /* Endpoint: SW1_ENDPOINT */
+ req.profileId = ZCL_PROFILE_HOME_AUTOMATION;
+ req.deviceId = ZCL_DEVICE_ONOFF_SWITCH;
+ req.endpoint = SW1_ENDPOINT;
+ ZbZclAddEndpoint(zigbee_app_info.zb, &req, &conf);
+ assert(conf.status == ZB_STATUS_SUCCESS);
+
+ /* OnOff client */
+ zigbee_app_info.onOff_client_1 = ZbZclOnOffClientAlloc(zigbee_app_info.zb, SW1_ENDPOINT);
+ assert(zigbee_app_info.onOff_client_1 != NULL);
+ ZbZclClusterEndpointRegister(zigbee_app_info.onOff_client_1);
+ /* USER CODE BEGIN CONFIG_ENDPOINT */
+ /* USER CODE END CONFIG_ENDPOINT */
+} /* APP_ZIGBEE_ConfigEndpoints */
+
+/**
+ * @brief Handle Zigbee network forming and joining task for FreeRTOS
+ * @param None
+ * @retval None
+ */
+static void APP_ZIGBEE_ProcessNwkForm(void *argument)
+{
+ UNUSED(argument);
+ for(;;)
+ {
+ osThreadFlagsWait(1,osFlagsWaitAll,osWaitForever);
+ APP_ZIGBEE_NwkForm();
+ }
+}
+
+/**
+ * @brief Handle Zigbee network forming and joining
+ * @param None
+ * @retval None
+ */
+static void APP_ZIGBEE_NwkForm()
+{
+ if ((zigbee_app_info.join_status != ZB_STATUS_SUCCESS) && (HAL_GetTick() >= zigbee_app_info.join_delay))
+ {
+ struct ZbStartupT config;
+ enum ZbStatusCodeT status;
+
+ /* Configure Zigbee Logging */
+ ZbSetLogging(zigbee_app_info.zb, ZB_LOG_MASK_LEVEL_5, NULL);
+
+ /* Attempt to join a zigbee network */
+ ZbStartupConfigGetProDefaults(&config);
+
+ /* Set the centralized network */
+ APP_DBG("Network config : APP_STARTUP_CENTRALIZED_ROUTER");
+ config.startupControl = zigbee_app_info.startupControl;
+
+ /* Using the default HA preconfigured Link Key */
+ memcpy(config.security.preconfiguredLinkKey, sec_key_ha, ZB_SEC_KEYSIZE);
+
+ config.channelList.count = 1;
+ config.channelList.list[0].page = 0;
+ config.channelList.list[0].channelMask = 1 << CHANNEL; /*Channel in use */
+
+ /* Using ZbStartupWait (non-blocking) */
+ status = ZbStartupWait(zigbee_app_info.zb, &config);
+
+ APP_DBG("ZbStartup Callback (status = 0x%02x)", status);
+ zigbee_app_info.join_status = status;
+
+ if (status == ZB_STATUS_SUCCESS) {
+ /* USER CODE BEGIN 0 */
+ zigbee_app_info.join_delay = 0U;
+ zigbee_app_info.init_after_join = true;
+ BSP_LED_On(LED_BLUE);
+ }
+ else
+ {
+ /* USER CODE END 0 */
+ APP_DBG("Startup failed, attempting again after a short delay (%d ms)", APP_ZIGBEE_STARTUP_FAIL_DELAY);
+ zigbee_app_info.join_delay = HAL_GetTick() + APP_ZIGBEE_STARTUP_FAIL_DELAY;
+ }
+ }
+
+ /* If Network forming/joining was not successful reschedule the current task to retry the process */
+ if (zigbee_app_info.join_status != ZB_STATUS_SUCCESS)
+ {
+ osThreadFlagsSet(OsTaskNwkFormId,1);
+ }
+
+ /* USER CODE BEGIN NW_FORM */
+ else
+ {
+ zigbee_app_info.init_after_join = false;
+
+ /* Assign ourselves to the group addresses */
+ APP_ZIGBEE_ConfigGroupAddr();
+
+ /* Since we're using group addressing (broadcast), shorten the broadcast timeout */
+ uint32_t bcast_timeout = 3;
+ ZbNwkSet(zigbee_app_info.zb, ZB_NWK_NIB_ID_NetworkBroadcastDeliveryTime, &bcast_timeout, sizeof(bcast_timeout));
+ }
+ /* USER CODE END NW_FORM */
+} /* APP_ZIGBEE_NwkForm */
+
+/*************************************************************
+ * ZbStartupWait Blocking Call
+ *************************************************************/
+struct ZbStartupWaitInfo {
+ bool active;
+ enum ZbStatusCodeT status;
+};
+
+static void ZbStartupWaitCb(enum ZbStatusCodeT status, void *cb_arg)
+{
+ struct ZbStartupWaitInfo *info = cb_arg;
+
+ info->status = status;
+ info->active = false;
+ osSemaphoreRelease( StartupEndSemaphore );
+} /* ZbStartupWaitCb */
+
+enum ZbStatusCodeT ZbStartupWait(struct ZigBeeT *zb, struct ZbStartupT *config)
+{
+ struct ZbStartupWaitInfo *info;
+ enum ZbStatusCodeT status;
+
+ info = malloc(sizeof(struct ZbStartupWaitInfo));
+ if (info == NULL) {
+ return ZB_STATUS_ALLOC_FAIL;
+ }
+ memset(info, 0, sizeof(struct ZbStartupWaitInfo));
+
+ info->active = true;
+ status = ZbStartup(zb, config, ZbStartupWaitCb, info);
+ if (status != ZB_STATUS_SUCCESS) {
+ info->active = false;
+ return status;
+ }
+ osSemaphoreAcquire( StartupEndSemaphore, osWaitForever );
+ status = info->status;
+ free(info);
+ return status;
+} /* ZbStartupWait */
+
+/**
+ * @brief Trace the error or the warning reported.
+ * @param ErrId :
+ * @param ErrCode
+ * @retval None
+ */
+void APP_ZIGBEE_Error(uint32_t ErrId, uint32_t ErrCode)
+{
+ switch (ErrId) {
+ default:
+ APP_ZIGBEE_TraceError("ERROR Unknown ", 0);
+ break;
+ }
+} /* APP_ZIGBEE_Error */
+
+/*************************************************************
+ *
+ * LOCAL FUNCTIONS
+ *
+ *************************************************************/
+
+/**
+ * @brief Warn the user that an error has occurred.
+ *
+ * @param pMess : Message associated to the error.
+ * @param ErrCode: Error code associated to the module (Zigbee or other module if any)
+ * @retval None
+ */
+static void APP_ZIGBEE_TraceError(const char *pMess, uint32_t ErrCode)
+{
+ APP_DBG("**** Fatal error = %s (Err = %d)", pMess, ErrCode);
+ /* USER CODE BEGIN TRACE_ERROR */
+ while (1U == 1U) {
+ BSP_LED_Toggle(LED1);
+ HAL_Delay(500U);
+ BSP_LED_Toggle(LED2);
+ HAL_Delay(500U);
+ BSP_LED_Toggle(LED3);
+ HAL_Delay(500U);
+ }
+ /* USER CODE END TRACE_ERROR */
+
+} /* APP_ZIGBEE_TraceError */
+
+/**
+ * @brief Check if the Coprocessor Wireless Firmware loaded supports Zigbee
+ * and display associated information
+ * @param None
+ * @retval None
+ */
+static void APP_ZIGBEE_CheckWirelessFirmwareInfo(void)
+{
+ WirelessFwInfo_t wireless_info_instance;
+ WirelessFwInfo_t *p_wireless_info = &wireless_info_instance;
+
+ if (SHCI_GetWirelessFwInfo(p_wireless_info) != SHCI_Success) {
+ APP_ZIGBEE_Error((uint32_t)ERR_ZIGBEE_CHECK_WIRELESS, (uint32_t)ERR_INTERFACE_FATAL);
+ }
+ else {
+ APP_DBG("**********************************************************");
+ APP_DBG("WIRELESS COPROCESSOR FW:");
+ /* Print version */
+ APP_DBG("VERSION ID = %d.%d.%d", p_wireless_info->VersionMajor, p_wireless_info->VersionMinor, p_wireless_info->VersionSub);
+
+ switch (p_wireless_info->StackType) {
+ case INFO_STACK_TYPE_ZIGBEE_FFD:
+ APP_DBG("FW Type : FFD Zigbee stack");
+ break;
+ case INFO_STACK_TYPE_ZIGBEE_RFD:
+ APP_DBG("FW Type : RFD Zigbee stack");
+ break;
+ default:
+ /* No Zigbee device supported ! */
+ APP_ZIGBEE_Error((uint32_t)ERR_ZIGBEE_CHECK_WIRELESS, (uint32_t)ERR_INTERFACE_FATAL);
+ break;
+ }
+ APP_DBG("**********************************************************");
+ }
+} /* APP_ZIGBEE_CheckWirelessFirmwareInfo */
+
+/*************************************************************
+ *
+ * WRAP FUNCTIONS
+ *
+ *************************************************************/
+
+void APP_ZIGBEE_RegisterCmdBuffer(TL_CmdPacket_t *p_buffer)
+{
+ p_ZIGBEE_otcmdbuffer = p_buffer;
+} /* APP_ZIGBEE_RegisterCmdBuffer */
+
+Zigbee_Cmd_Request_t * ZIGBEE_Get_OTCmdPayloadBuffer(void)
+{
+ return (Zigbee_Cmd_Request_t *)p_ZIGBEE_otcmdbuffer->cmdserial.cmd.payload;
+} /* ZIGBEE_Get_OTCmdPayloadBuffer */
+
+Zigbee_Cmd_Request_t * ZIGBEE_Get_OTCmdRspPayloadBuffer(void)
+{
+ return (Zigbee_Cmd_Request_t *)((TL_EvtPacket_t *)p_ZIGBEE_otcmdbuffer)->evtserial.evt.payload;
+} /* ZIGBEE_Get_OTCmdRspPayloadBuffer */
+
+Zigbee_Cmd_Request_t * ZIGBEE_Get_NotificationPayloadBuffer(void)
+{
+ return (Zigbee_Cmd_Request_t *)(p_ZIGBEE_notif_M0_to_M4)->evtserial.evt.payload;
+} /* ZIGBEE_Get_NotificationPayloadBuffer */
+
+Zigbee_Cmd_Request_t * ZIGBEE_Get_M0RequestPayloadBuffer(void)
+{
+ return (Zigbee_Cmd_Request_t *)(p_ZIGBEE_request_M0_to_M4)->evtserial.evt.payload;
+}
+
+/**
+ * @brief This function is used to transfer the commands from the M4 to the M0.
+ *
+ * @param None
+ * @return None
+ */
+void ZIGBEE_CmdTransfer(void)
+{
+ Zigbee_Cmd_Request_t *cmd_req = (Zigbee_Cmd_Request_t *)p_ZIGBEE_otcmdbuffer->cmdserial.cmd.payload;
+
+ /* Zigbee OT command cmdcode range 0x280 .. 0x3DF = 352 */
+ p_ZIGBEE_otcmdbuffer->cmdserial.cmd.cmdcode = 0x280U;
+ /* Size = otCmdBuffer->Size (Number of OT cmd arguments : 1 arg = 32bits so multiply by 4 to get size in bytes)
+ * + ID (4 bytes) + Size (4 bytes) */
+ p_ZIGBEE_otcmdbuffer->cmdserial.cmd.plen = 8U + (cmd_req->Size * 4U);
+
+ TL_ZIGBEE_SendM4RequestToM0();
+
+ /* Wait completion of cmd */
+ Wait_Getting_Ack_From_M0();
+} /* ZIGBEE_CmdTransfer */
+
+/**
+ * @brief This function is called when the M0+ acknowledge the fact that it has received a Cmd
+ *
+ *
+ * @param Otbuffer : a pointer to TL_EvtPacket_t
+ * @return None
+ */
+void TL_ZIGBEE_CmdEvtReceived(TL_EvtPacket_t *Otbuffer)
+{
+ /* Prevent unused argument(s) compilation warning */
+ UNUSED(Otbuffer);
+
+ Receive_Ack_From_M0();
+} /* TL_ZIGBEE_CmdEvtReceived */
+
+/**
+ * @brief This function is called when notification from M0+ is received.
+ *
+ * @param Notbuffer : a pointer to TL_EvtPacket_t
+ * @return None
+ */
+void TL_ZIGBEE_NotReceived(TL_EvtPacket_t *Notbuffer)
+{
+ p_ZIGBEE_notif_M0_to_M4 = Notbuffer;
+
+ Receive_Notification_From_M0();
+} /* TL_ZIGBEE_NotReceived */
+
+/**
+ * @brief This function is called before sending any ot command to the M0
+ * core. The purpose of this function is to be able to check if
+ * there are no notifications coming from the M0 core which are
+ * pending before sending a new ot command.
+ * @param None
+ * @retval None
+ */
+void Pre_ZigbeeCmdProcessing(void)
+{
+ osMutexAcquire( MtxZigbeeId, osWaitForever );
+} /* Pre_ZigbeeCmdProcessing */
+
+
+/**
+ * @brief This function waits for getting an acknowledgment from the M0.
+ *
+ * @param None
+ * @retval None
+ */
+static void Wait_Getting_Ack_From_M0(void)
+{
+ osSemaphoreAcquire( TransferToM0Semaphore, osWaitForever );
+ osMutexRelease( MtxZigbeeId );
+} /* Wait_Getting_Ack_From_M0 */
+
+/**
+ * @brief Receive an acknowledgment from the M0+ core.
+ * Each command send by the M4 to the M0 are acknowledged.
+ * This function is called under interrupt.
+ * @param None
+ * @retval None
+ */
+static void Receive_Ack_From_M0(void)
+{
+ osSemaphoreRelease( TransferToM0Semaphore);
+} /* Receive_Ack_From_M0 */
+
+
+/**
+ * @brief Receive a notification from the M0+ through the IPCC.
+ * This function is called under interrupt.
+ * @param None
+ * @retval None
+ */
+static void Receive_Notification_From_M0(void)
+{
+ CptReceiveNotifyFromM0++;
+ osThreadFlagsSet(OsTaskNotifyM0ToM4Id,1);
+}
+
+/**
+ * @brief This function is called when a request from M0+ is received.
+ *
+ * @param Notbuffer : a pointer to TL_EvtPacket_t
+ * @return None
+ */
+void TL_ZIGBEE_M0RequestReceived(TL_EvtPacket_t *Reqbuffer)
+{
+ p_ZIGBEE_request_M0_to_M4 = Reqbuffer;
+
+ CptReceiveRequestFromM0++;
+ osThreadFlagsSet(OsTaskRequestM0ToM4Id,1);
+}
+
+/**
+ * @brief Perform initialization of TL for Zigbee.
+ * @param None
+ * @retval None
+ */
+void APP_ZIGBEE_TL_INIT(void)
+{
+ ZigbeeConfigBuffer.p_ZigbeeOtCmdRspBuffer = (uint8_t *)&ZigbeeOtCmdBuffer;
+ ZigbeeConfigBuffer.p_ZigbeeNotAckBuffer = (uint8_t *)ZigbeeNotifRspEvtBuffer;
+ ZigbeeConfigBuffer.p_ZigbeeNotifRequestBuffer = (uint8_t *)ZigbeeNotifRequestBuffer;
+ TL_ZIGBEE_Init(&ZigbeeConfigBuffer);
+}
+
+/**
+ * @brief Process the messages coming from the M0.
+ * @param None
+ * @retval None
+ */
+static void APP_ZIGBEE_ProcessNotifyM0ToM4(void * argument)
+{
+ UNUSED(argument);
+ for(;;)
+ {
+ osThreadFlagsWait(1,osFlagsWaitAll,osWaitForever);
+ if (CptReceiveNotifyFromM0 != 0) {
+ /* If CptReceiveNotifyFromM0 is > 1. it means that we did not serve all the events from the radio */
+ if (CptReceiveNotifyFromM0 > 1U) {
+ APP_ZIGBEE_Error(ERR_REC_MULTI_MSG_FROM_M0, 0);
+ }
+ else {
+ Zigbee_CallBackProcessing();
+ }
+ /* Reset counter */
+ CptReceiveNotifyFromM0 = 0;
+ }
+ }
+}
+
+/**
+ * @brief Process the requests coming from the M0.
+ * @param
+ * @return
+ */
+static void APP_ZIGBEE_ProcessRequestM0ToM4(void * argument)
+{
+ UNUSED(argument);
+ for(;;)
+ {
+ osThreadFlagsWait(1,osFlagsWaitAll,osWaitForever);
+ if (CptReceiveRequestFromM0 != 0) {
+ Zigbee_M0RequestProcessing();
+ CptReceiveRequestFromM0 = 0;
+ }
+ }
+}
+/* USER CODE BEGIN FD_LOCAL_FUNCTIONS */
+
+void APP_ZIGBEE_LaunchPushButtonTask(void)
+{
+ osThreadFlagsSet(OsTaskPushButtonId,1);
+}
+
+static void APP_ZIGBEE_ProcessPushButton(void *argument)
+{
+ for(;;)
+ {
+ APP_ZIGBEE_SW1_Process();
+ osThreadFlagsWait(1,osFlagsWaitAll,osWaitForever);
+ }
+}
+
+/**
+ * @brief Set group addressing mode
+ * @param None
+ * @retval None
+ */
+static void APP_ZIGBEE_ConfigGroupAddr(void)
+{
+ struct ZbApsmeAddGroupReqT req;
+ struct ZbApsmeAddGroupConfT conf;
+
+ memset(&req, 0, sizeof(req));
+ req.endpt = SW1_ENDPOINT;
+ req.groupAddr = SW1_GROUP_ADDR;
+ ZbApsmeAddGroupReq(zigbee_app_info.zb, &req, &conf);
+
+} /* APP_ZIGBEE_ConfigGroupAddr */
+
+/**
+ * @brief Function used to send a Zigbee request
+ * @param None
+ * @retval None
+ */
+static void APP_ZIGBEE_SW1_Process(void)
+{
+ struct ZbApsAddrT dst;
+ uint64_t epid = 0U;
+
+ if(zigbee_app_info.zb == NULL){
+ return;
+ }
+
+ /* Check if the router joined the network */
+ if (ZbNwkGet(zigbee_app_info.zb, ZB_NWK_NIB_ID_ExtendedPanId, &epid, sizeof(epid)) != ZB_STATUS_SUCCESS) {
+ return;
+ }
+ if (epid == 0U) {
+ return;
+ }
+
+ memset(&dst, 0, sizeof(dst));
+ dst.mode = ZB_APSDE_ADDRMODE_GROUP;
+ dst.endpoint = SW1_ENDPOINT;
+ dst.nwkAddr = SW1_GROUP_ADDR;
+
+ APP_DBG("SW1 PUSHED (SENDING TOGGLE TO GROUP 0x0001)");
+ if (ZbZclOnOffClientToggleReq(zigbee_app_info.onOff_client_1, &dst, NULL, NULL) != ZCL_STATUS_SUCCESS) {
+ APP_DBG("Error, ZbZclOnOffClientToggleReq failed (SW1_ENDPOINT)");
+ }
+}
+
+/* USER CODE END FD_LOCAL_FUNCTIONS */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/STM32_WPAN/App/app_zigbee.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/STM32_WPAN/App/app_zigbee.h
new file mode 100644
index 000000000..ac5481224
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/STM32_WPAN/App/app_zigbee.h
@@ -0,0 +1,91 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : app_zigbee.h
+ * Description : Header for Zigbee Application.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef APP_ZIGBEE_H
+#define APP_ZIGBEE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+/* Private includes ----------------------------------------------------------*/
+#include "tl.h"
+#include "tl_zigbee_hci.h"
+
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+/* Exported types ------------------------------------------------------------*/
+
+/* Application errors */
+/*------------------------------------*/
+
+/*
+ * List of all errors tracked by the Zigbee application
+ * running on M4. Some of these errors may be fatal
+ * or just warnings
+ */
+typedef enum
+{
+ ERR_REC_MULTI_MSG_FROM_M0,
+ ERR_ZIGBE_CMD_TO_M0,
+/* USER CODE BEGIN ERROR_APPLI_ENUM */
+
+/* USER CODE END ERROR_APPLI_ENUM */
+ ERR_ZIGBEE_CHECK_WIRELESS
+} ErrAppliIdEnum_t;
+/* USER CODE BEGIN ET */
+
+/* USER CODE END ET */
+
+/* Exported constants --------------------------------------------------------*/
+/* USER CODE BEGIN EC */
+
+/* USER CODE END EC */
+
+/* External variables --------------------------------------------------------*/
+/* USER CODE BEGIN EV */
+
+/* USER CODE END EV */
+
+/* Exported macros ------------------------------------------------------------*/
+/* USER CODE BEGIN EM */
+
+/* USER CODE END EM */
+
+/* Exported functions ------------------------------------------------------- */
+void APP_ZIGBEE_Init(void);
+void APP_ZIGBEE_Error(uint32_t ErrId, uint32_t ErrCode);
+void APP_ZIGBEE_RegisterCmdBuffer(TL_CmdPacket_t *p_buffer);
+void APP_ZIGBEE_LaunchPushButtonTask(void);
+void APP_ZIGBEE_TL_INIT(void);
+void Pre_ZigbeeCmdProcessing(void);
+/* USER CODE BEGIN EF */
+
+/* USER CODE END EF */
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* APP_ZIGBEE_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/STM32_WPAN/App/tl_dbg_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/STM32_WPAN/App/tl_dbg_conf.h
new file mode 100644
index 000000000..7bfe8fac6
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/STM32_WPAN/App/tl_dbg_conf.h
@@ -0,0 +1,136 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : App/tl_dbg_conf.h
+ * Description : Debug configuration file for stm32wpan transport layer interface.
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __TL_DBG_CONF_H
+#define __TL_DBG_CONF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* USER CODE BEGIN Tl_Conf */
+
+/* Includes ------------------------------------------------------------------*/
+#include "app_conf.h" /* required as some configuration used in dbg_trace.h are set there */
+#include "dbg_trace.h"
+#include "hw_if.h"
+
+/**
+ * Enable or Disable traces
+ * The raw data output is the hci binary packet format as specified by the BT specification *
+ */
+#define TL_SHCI_CMD_DBG_EN 0 /* Reports System commands sent to CPU2 and the command response */
+#define TL_SHCI_CMD_DBG_RAW_EN 0 /* Reports raw data System commands sent to CPU2 and the command response */
+#define TL_SHCI_EVT_DBG_EN 0 /* Reports System Asynchronous Events received from CPU2 */
+#define TL_SHCI_EVT_DBG_RAW_EN 0 /* Reports raw data System Asynchronous Events received from CPU2 */
+
+#define TL_HCI_CMD_DBG_EN 0 /* Reports BLE command sent to CPU2 and the command response */
+#define TL_HCI_CMD_DBG_RAW_EN 0 /* Reports raw data BLE command sent to CPU2 and the command response */
+#define TL_HCI_EVT_DBG_EN 0 /* Reports BLE Asynchronous Events received from CPU2 */
+#define TL_HCI_EVT_DBG_RAW_EN 0 /* Reports raw data BLE Asynchronous Events received from CPU2 */
+
+#define TL_MM_DBG_EN 0 /* Reports the informations of the buffer released to CPU2 */
+
+/**
+ * Macro definition
+ */
+
+/**
+ * System Transport Layer
+ */
+#if (TL_SHCI_CMD_DBG_EN != 0)
+#define TL_SHCI_CMD_DBG_MSG PRINT_MESG_DBG
+#define TL_SHCI_CMD_DBG_BUF PRINT_LOG_BUFF_DBG
+#else
+#define TL_SHCI_CMD_DBG_MSG(...)
+#define TL_SHCI_CMD_DBG_BUF(...)
+#endif
+
+#if (TL_SHCI_CMD_DBG_RAW_EN != 0)
+#define TL_SHCI_CMD_DBG_RAW(_PDATA_, _SIZE_) HW_UART_Transmit(hw_uart1, (uint8_t*)_PDATA_, _SIZE_, (~0))
+#else
+#define TL_SHCI_CMD_DBG_RAW(...)
+#endif
+
+#if (TL_SHCI_EVT_DBG_EN != 0)
+#define TL_SHCI_EVT_DBG_MSG PRINT_MESG_DBG
+#define TL_SHCI_EVT_DBG_BUF PRINT_LOG_BUFF_DBG
+#else
+#define TL_SHCI_EVT_DBG_MSG(...)
+#define TL_SHCI_EVT_DBG_BUF(...)
+#endif
+
+#if (TL_SHCI_EVT_DBG_RAW_EN != 0)
+#define TL_SHCI_EVT_DBG_RAW(_PDATA_, _SIZE_) HW_UART_Transmit(hw_uart1, (uint8_t*)_PDATA_, _SIZE_, (~0))
+#else
+#define TL_SHCI_EVT_DBG_RAW(...)
+#endif
+
+/**
+ * BLE Transport Layer
+ */
+#if (TL_HCI_CMD_DBG_EN != 0)
+#define TL_HCI_CMD_DBG_MSG PRINT_MESG_DBG
+#define TL_HCI_CMD_DBG_BUF PRINT_LOG_BUFF_DBG
+#else
+#define TL_HCI_CMD_DBG_MSG(...)
+#define TL_HCI_CMD_DBG_BUF(...)
+#endif
+
+#if (TL_HCI_CMD_DBG_RAW_EN != 0)
+#define TL_HCI_CMD_DBG_RAW(_PDATA_, _SIZE_) HW_UART_Transmit(hw_uart1, (uint8_t*)_PDATA_, _SIZE_, (~0))
+#else
+#define TL_HCI_CMD_DBG_RAW(...)
+#endif
+
+#if (TL_HCI_EVT_DBG_EN != 0)
+#define TL_HCI_EVT_DBG_MSG PRINT_MESG_DBG
+#define TL_HCI_EVT_DBG_BUF PRINT_LOG_BUFF_DBG
+#else
+#define TL_HCI_EVT_DBG_MSG(...)
+#define TL_HCI_EVT_DBG_BUF(...)
+#endif
+
+#if (TL_HCI_EVT_DBG_RAW_EN != 0)
+#define TL_HCI_EVT_DBG_RAW(_PDATA_, _SIZE_) HW_UART_Transmit(hw_uart1, (uint8_t*)_PDATA_, _SIZE_, (~0))
+#else
+#define TL_HCI_EVT_DBG_RAW(...)
+#endif
+
+/**
+ * Memory Manager - Released buffer tracing
+ */
+#if (TL_MM_DBG_EN != 0)
+#define TL_MM_DBG_MSG PRINT_MESG_DBG
+#else
+#define TL_MM_DBG_MSG(...)
+#endif
+
+/* USER CODE END Tl_Conf */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*__TL_DBG_CONF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/STM32_WPAN/Target/hw_ipcc.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/STM32_WPAN/Target/hw_ipcc.c
new file mode 100644
index 000000000..afa62b179
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/STM32_WPAN/Target/hw_ipcc.c
@@ -0,0 +1,675 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : Target/hw_ipcc.c
+ * Description : Hardware IPCC source file for STM32WPAN Middleware.
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "app_common.h"
+#include "mbox_def.h"
+
+/* Global variables ---------------------------------------------------------*/
+/* Private defines -----------------------------------------------------------*/
+#define HW_IPCC_TX_PENDING( channel ) ( !(LL_C1_IPCC_IsActiveFlag_CHx( IPCC, channel )) ) && (((~(IPCC->C1MR)) & (channel << 16U)))
+#define HW_IPCC_RX_PENDING( channel ) (LL_C2_IPCC_IsActiveFlag_CHx( IPCC, channel )) && (((~(IPCC->C1MR)) & (channel << 0U)))
+
+/* Private macros ------------------------------------------------------------*/
+/* Private typedef -----------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+static void (*FreeBufCb)( void );
+
+/* Private function prototypes -----------------------------------------------*/
+static void HW_IPCC_BLE_EvtHandler( void );
+static void HW_IPCC_BLE_AclDataEvtHandler( void );
+static void HW_IPCC_MM_FreeBufHandler( void );
+static void HW_IPCC_SYS_CmdEvtHandler( void );
+static void HW_IPCC_SYS_EvtHandler( void );
+static void HW_IPCC_TRACES_EvtHandler( void );
+
+#ifdef THREAD_WB
+static void HW_IPCC_OT_CmdEvtHandler( void );
+static void HW_IPCC_THREAD_NotEvtHandler( void );
+static void HW_IPCC_THREAD_CliNotEvtHandler( void );
+#endif
+
+#ifdef LLD_TESTS_WB
+static void HW_IPCC_LLDTESTS_ReceiveCliRspHandler( void );
+static void HW_IPCC_LLDTESTS_ReceiveM0CmdHandler( void );
+#endif
+#ifdef LLD_BLE_WB
+/*static void HW_IPCC_LLD_BLE_ReceiveCliRspHandler( void );*/
+static void HW_IPCC_LLD_BLE_ReceiveRspHandler( void );
+static void HW_IPCC_LLD_BLE_ReceiveM0CmdHandler( void );
+#endif
+
+#ifdef MAC_802_15_4_WB
+static void HW_IPCC_MAC_802_15_4_CmdEvtHandler( void );
+static void HW_IPCC_MAC_802_15_4_NotEvtHandler( void );
+#endif
+
+#ifdef ZIGBEE_WB
+static void HW_IPCC_ZIGBEE_CmdEvtHandler( void );
+static void HW_IPCC_ZIGBEE_StackNotifEvtHandler( void );
+static void HW_IPCC_ZIGBEE_StackM0RequestHandler( void );
+#endif
+
+/* Public function definition -----------------------------------------------*/
+
+/******************************************************************************
+ * INTERRUPT HANDLER
+ ******************************************************************************/
+void HW_IPCC_Rx_Handler( void )
+{
+ if (HW_IPCC_RX_PENDING( HW_IPCC_SYSTEM_EVENT_CHANNEL ))
+ {
+ HW_IPCC_SYS_EvtHandler();
+ }
+#ifdef MAC_802_15_4_WB
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL ))
+ {
+ HW_IPCC_MAC_802_15_4_NotEvtHandler();
+ }
+#endif /* MAC_802_15_4_WB */
+#ifdef THREAD_WB
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL ))
+ {
+ HW_IPCC_THREAD_NotEvtHandler();
+ }
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL ))
+ {
+ HW_IPCC_THREAD_CliNotEvtHandler();
+ }
+#endif /* THREAD_WB */
+#ifdef LLD_TESTS_WB
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL ))
+ {
+ HW_IPCC_LLDTESTS_ReceiveCliRspHandler();
+ }
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_LLDTESTS_M0_CMD_CHANNEL ))
+ {
+ HW_IPCC_LLDTESTS_ReceiveM0CmdHandler();
+ }
+#endif /* LLD_TESTS_WB */
+#ifdef LLD_BLE_WB
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_LLD_BLE_RSP_CHANNEL ))
+ {
+ HW_IPCC_LLD_BLE_ReceiveRspHandler();
+ }
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_LLD_BLE_M0_CMD_CHANNEL ))
+ {
+ HW_IPCC_LLD_BLE_ReceiveM0CmdHandler();
+ }
+#endif /* LLD_TESTS_WB */
+#ifdef ZIGBEE_WB
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL ))
+ {
+ HW_IPCC_ZIGBEE_StackNotifEvtHandler();
+ }
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL ))
+ {
+ HW_IPCC_ZIGBEE_StackM0RequestHandler();
+ }
+#endif /* ZIGBEE_WB */
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_BLE_EVENT_CHANNEL ))
+ {
+ HW_IPCC_BLE_EvtHandler();
+ }
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_TRACES_CHANNEL ))
+ {
+ HW_IPCC_TRACES_EvtHandler();
+ }
+
+ return;
+}
+
+void HW_IPCC_Tx_Handler( void )
+{
+ if (HW_IPCC_TX_PENDING( HW_IPCC_SYSTEM_CMD_RSP_CHANNEL ))
+ {
+ HW_IPCC_SYS_CmdEvtHandler();
+ }
+#ifdef MAC_802_15_4_WB
+ else if (HW_IPCC_TX_PENDING( HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL ))
+ {
+ HW_IPCC_MAC_802_15_4_CmdEvtHandler();
+ }
+#endif /* MAC_802_15_4_WB */
+#ifdef THREAD_WB
+ else if (HW_IPCC_TX_PENDING( HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL ))
+ {
+ HW_IPCC_OT_CmdEvtHandler();
+ }
+#endif /* THREAD_WB */
+#ifdef LLD_TESTS_WB
+// No TX handler for LLD tests
+#endif /* LLD_TESTS_WB */
+#ifdef ZIGBEE_WB
+ if (HW_IPCC_TX_PENDING( HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL ))
+ {
+ HW_IPCC_ZIGBEE_CmdEvtHandler();
+ }
+#endif /* ZIGBEE_WB */
+ else if (HW_IPCC_TX_PENDING( HW_IPCC_SYSTEM_CMD_RSP_CHANNEL ))
+ {
+ HW_IPCC_SYS_CmdEvtHandler();
+ }
+ else if (HW_IPCC_TX_PENDING( HW_IPCC_MM_RELEASE_BUFFER_CHANNEL ))
+ {
+ HW_IPCC_MM_FreeBufHandler();
+ }
+ else if (HW_IPCC_TX_PENDING( HW_IPCC_HCI_ACL_DATA_CHANNEL ))
+ {
+ HW_IPCC_BLE_AclDataEvtHandler();
+ }
+
+ return;
+}
+/******************************************************************************
+ * GENERAL
+ ******************************************************************************/
+void HW_IPCC_Enable( void )
+{
+ /**
+ * Such as IPCC IP available to the CPU2, it is required to keep the IPCC clock running
+ when FUS is running on CPU2 and CPU1 enters deep sleep mode
+ */
+ LL_C2_AHB3_GRP1_EnableClock(LL_C2_AHB3_GRP1_PERIPH_IPCC);
+
+ /**
+ * When the device is out of standby, it is required to use the EXTI mechanism to wakeup CPU2
+ */
+ LL_C2_EXTI_EnableEvent_32_63( LL_EXTI_LINE_41 );
+ LL_EXTI_EnableRisingTrig_32_63( LL_EXTI_LINE_41 );
+
+ /**
+ * In case the SBSFU is implemented, it may have already set the C2BOOT bit to startup the CPU2.
+ * In that case, to keep the mechanism transparent to the user application, it shall call the system command
+ * SHCI_C2_Reinit( ) before jumping to the application.
+ * When the CPU2 receives that command, it waits for its event input to be set to restart the CPU2 firmware.
+ * This is required because once C2BOOT has been set once, a clear/set on C2BOOT has no effect.
+ * When SHCI_C2_Reinit( ) is not called, generating an event to the CPU2 does not have any effect
+ * So, by default, the application shall both set the event flag and set the C2BOOT bit.
+ */
+ __SEV( ); /* Set the internal event flag and send an event to the CPU2 */
+ __WFE( ); /* Clear the internal event flag */
+ LL_PWR_EnableBootC2( );
+
+ return;
+}
+
+void HW_IPCC_Init( void )
+{
+ LL_AHB3_GRP1_EnableClock( LL_AHB3_GRP1_PERIPH_IPCC );
+
+ LL_C1_IPCC_EnableIT_RXO( IPCC );
+ LL_C1_IPCC_EnableIT_TXF( IPCC );
+
+ HAL_NVIC_EnableIRQ(IPCC_C1_RX_IRQn);
+ HAL_NVIC_EnableIRQ(IPCC_C1_TX_IRQn);
+
+ return;
+}
+
+/******************************************************************************
+ * BLE
+ ******************************************************************************/
+void HW_IPCC_BLE_Init( void )
+{
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_BLE_EVENT_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_BLE_SendCmd( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_BLE_CMD_CHANNEL );
+
+ return;
+}
+
+static void HW_IPCC_BLE_EvtHandler( void )
+{
+ HW_IPCC_BLE_RxEvtNot();
+
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_BLE_EVENT_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_BLE_SendAclData( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL );
+ LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL );
+
+ return;
+}
+
+static void HW_IPCC_BLE_AclDataEvtHandler( void )
+{
+ LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL );
+
+ HW_IPCC_BLE_AclDataAckNot();
+
+ return;
+}
+
+__weak void HW_IPCC_BLE_AclDataAckNot( void ){};
+__weak void HW_IPCC_BLE_RxEvtNot( void ){};
+
+/******************************************************************************
+ * SYSTEM
+ ******************************************************************************/
+void HW_IPCC_SYS_Init( void )
+{
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_SYS_SendCmd( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
+ LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
+
+ return;
+}
+
+static void HW_IPCC_SYS_CmdEvtHandler( void )
+{
+ LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
+
+ HW_IPCC_SYS_CmdEvtNot();
+
+ return;
+}
+
+static void HW_IPCC_SYS_EvtHandler( void )
+{
+ HW_IPCC_SYS_EvtNot();
+
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL );
+
+ return;
+}
+
+__weak void HW_IPCC_SYS_CmdEvtNot( void ){};
+__weak void HW_IPCC_SYS_EvtNot( void ){};
+
+/******************************************************************************
+ * MAC 802.15.4
+ ******************************************************************************/
+#ifdef MAC_802_15_4_WB
+void HW_IPCC_MAC_802_15_4_Init( void )
+{
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_MAC_802_15_4_SendCmd( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL );
+ LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_MAC_802_15_4_SendAck( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
+
+ return;
+}
+
+static void HW_IPCC_MAC_802_15_4_CmdEvtHandler( void )
+{
+ LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL );
+
+ HW_IPCC_MAC_802_15_4_CmdEvtNot();
+
+ return;
+}
+
+static void HW_IPCC_MAC_802_15_4_NotEvtHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
+
+ HW_IPCC_MAC_802_15_4_EvtNot();
+
+ return;
+}
+__weak void HW_IPCC_MAC_802_15_4_CmdEvtNot( void ){};
+__weak void HW_IPCC_MAC_802_15_4_EvtNot( void ){};
+#endif
+
+/******************************************************************************
+ * THREAD
+ ******************************************************************************/
+#ifdef THREAD_WB
+void HW_IPCC_THREAD_Init( void )
+{
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_OT_SendCmd( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
+ LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_CLI_SendCmd( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_THREAD_CLI_CMD_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_THREAD_SendAck( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_THREAD_CliSendAck( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
+
+ return;
+}
+
+static void HW_IPCC_OT_CmdEvtHandler( void )
+{
+ LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
+
+ HW_IPCC_OT_CmdEvtNot();
+
+ return;
+}
+
+static void HW_IPCC_THREAD_NotEvtHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
+
+ HW_IPCC_THREAD_EvtNot();
+
+ return;
+}
+
+static void HW_IPCC_THREAD_CliNotEvtHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
+
+ HW_IPCC_THREAD_CliEvtNot();
+
+ return;
+}
+
+__weak void HW_IPCC_OT_CmdEvtNot( void ){};
+__weak void HW_IPCC_CLI_CmdEvtNot( void ){};
+__weak void HW_IPCC_THREAD_EvtNot( void ){};
+
+#endif /* THREAD_WB */
+
+/******************************************************************************
+ * LLD TESTS
+ ******************************************************************************/
+#ifdef LLD_TESTS_WB
+void HW_IPCC_LLDTESTS_Init( void )
+{
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL );
+ return;
+}
+
+void HW_IPCC_LLDTESTS_SendCliCmd( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_LLDTESTS_CLI_CMD_CHANNEL );
+ return;
+}
+
+static void HW_IPCC_LLDTESTS_ReceiveCliRspHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL );
+ HW_IPCC_LLDTESTS_ReceiveCliRsp();
+ return;
+}
+
+void HW_IPCC_LLDTESTS_SendCliRspAck( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL );
+ return;
+}
+
+static void HW_IPCC_LLDTESTS_ReceiveM0CmdHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL );
+ HW_IPCC_LLDTESTS_ReceiveM0Cmd();
+ return;
+}
+
+void HW_IPCC_LLDTESTS_SendM0CmdAck( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL );
+ return;
+}
+__weak void HW_IPCC_LLDTESTS_ReceiveCliRsp( void ){};
+__weak void HW_IPCC_LLDTESTS_ReceiveM0Cmd( void ){};
+#endif /* LLD_TESTS_WB */
+
+/******************************************************************************
+ * LLD BLE
+ ******************************************************************************/
+#ifdef LLD_BLE_WB
+void HW_IPCC_LLD_BLE_Init( void )
+{
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
+ return;
+}
+
+void HW_IPCC_LLD_BLE_SendCliCmd( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_LLD_BLE_CLI_CMD_CHANNEL );
+ return;
+}
+
+/*static void HW_IPCC_LLD_BLE_ReceiveCliRspHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_CLI_RSP_CHANNEL );
+ HW_IPCC_LLD_BLE_ReceiveCliRsp();
+ return;
+}*/
+
+void HW_IPCC_LLD_BLE_SendCliRspAck( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLD_BLE_CLI_RSP_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_CLI_RSP_CHANNEL );
+ return;
+}
+
+static void HW_IPCC_LLD_BLE_ReceiveM0CmdHandler( void )
+{
+ //LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
+ HW_IPCC_LLD_BLE_ReceiveM0Cmd();
+ return;
+}
+
+void HW_IPCC_LLD_BLE_SendM0CmdAck( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
+ //LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
+ return;
+}
+__weak void HW_IPCC_LLD_BLE_ReceiveCliRsp( void ){};
+__weak void HW_IPCC_LLD_BLE_ReceiveM0Cmd( void ){};
+
+/* Transparent Mode */
+void HW_IPCC_LLD_BLE_SendCmd( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_LLD_BLE_CMD_CHANNEL );
+ return;
+}
+
+static void HW_IPCC_LLD_BLE_ReceiveRspHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL );
+ HW_IPCC_LLD_BLE_ReceiveRsp();
+ return;
+}
+
+void HW_IPCC_LLD_BLE_SendRspAck( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL );
+ return;
+}
+
+#endif /* LLD_BLE_WB */
+
+/******************************************************************************
+ * ZIGBEE
+ ******************************************************************************/
+#ifdef ZIGBEE_WB
+void HW_IPCC_ZIGBEE_Init( void )
+{
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_ZIGBEE_SendM4RequestToM0( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL );
+ LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_ZIGBEE_SendM4AckToM0Notify( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL );
+
+ return;
+}
+
+static void HW_IPCC_ZIGBEE_CmdEvtHandler( void )
+{
+ LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL );
+
+ HW_IPCC_ZIGBEE_RecvAppliAckFromM0();
+
+ return;
+}
+
+static void HW_IPCC_ZIGBEE_StackNotifEvtHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL );
+
+ HW_IPCC_ZIGBEE_RecvM0NotifyToM4();
+
+ return;
+}
+
+static void HW_IPCC_ZIGBEE_StackM0RequestHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL );
+
+ HW_IPCC_ZIGBEE_RecvM0RequestToM4();
+
+ return;
+}
+
+void HW_IPCC_ZIGBEE_SendM4AckToM0Request( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL );
+
+ return;
+}
+
+__weak void HW_IPCC_ZIGBEE_RecvAppliAckFromM0( void ){};
+__weak void HW_IPCC_ZIGBEE_RecvM0NotifyToM4( void ){};
+__weak void HW_IPCC_ZIGBEE_RecvM0RequestToM4( void ){};
+#endif /* ZIGBEE_WB */
+
+/******************************************************************************
+ * MEMORY MANAGER
+ ******************************************************************************/
+void HW_IPCC_MM_SendFreeBuf( void (*cb)( void ) )
+{
+ if ( LL_C1_IPCC_IsActiveFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL ) )
+ {
+ FreeBufCb = cb;
+ LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
+ }
+ else
+ {
+ cb();
+
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
+ }
+
+ return;
+}
+
+static void HW_IPCC_MM_FreeBufHandler( void )
+{
+ LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
+
+ FreeBufCb();
+
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
+
+ return;
+}
+
+/******************************************************************************
+ * TRACES
+ ******************************************************************************/
+void HW_IPCC_TRACES_Init( void )
+{
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_TRACES_CHANNEL );
+
+ return;
+}
+
+static void HW_IPCC_TRACES_EvtHandler( void )
+{
+ HW_IPCC_TRACES_EvtNot();
+
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_TRACES_CHANNEL );
+
+ return;
+}
+
+__weak void HW_IPCC_TRACES_EvtNot( void ){};
+
+/******************* (C) COPYRIGHT 2019 STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/readme.txt b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/readme.txt
new file mode 100644
index 000000000..74aa3931a
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/readme.txt
@@ -0,0 +1,126 @@
+/**
+ @page Zigbee_OnOff_Client_Router_FreeRTOS application
+
+ @verbatim
+ ******************************************************************************
+ * @file Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS/readme.txt
+ * @author MCD Application Team
+ * @brief Description of the Zigbee OnOff Cluster application as a client
+ * using a centralized network.
+ ******************************************************************************
+ *
+ * Copyright (c) 2020 STMicroelectronics. All rights reserved.
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ @endverbatim
+
+@par Application Description
+
+How to use OnOff cluster as a client on a centralized Zigbee network.
+
+The purpose of this application is to show how to create a Zigbee centralized network, and
+how to communicate from one node to another one using the OnOff cluster. Once the Zigbee mesh
+network is created, the user can send requests from the client to the server through the push button
+in order to make the LED toggling.
+
+For this application it is requested to have:
+
+- 1 STM32WB55xx board loaded with:
+ - wireless coprocessor : stm32wb5x_Zigbee_FFD_fw.bin
+ - application : Zigbee_OnOff_Server_Coord_FreeRTOS
+
+- 1 or more STM32WB55xx board loaded with:
+ - wireless coprocessor : stm32wb5x_Zigbee_FFD_fw.bin
+ - application : Zigbee_OnOff_Client_Router_FreeRTOS
+
+
+ Device 1 Device 2
+ (Router) (Coordinator)
+
+ --------- ---------
+ | | ZbZclOnOffClientToggleReq | |
+ PushB=>|Client | -----------------------------------> |Server | =>LED
+ | | | |
+ | | | |
+ -------- ---------
+
+To setup the application :
+
+ a) Open the project, build it and load your generated application on your STM32WB devices.
+
+ To run the application :
+
+ a) Start the first board. It must be the coordinator of the Zigbee network so in this demo application it is
+ the device running Zigbee_OnOff_Server_Coord_FreeRTOS application (Device2 in the above diagram).
+ Wait for the Blue LED (LED1) ON.
+ Start the second board. This board is configured as Zigbee router and will attached to the network created
+ by the coordinator. Do the same for the other boards if applicable.
+
+ b) At this stage, the Zigbee network is automatically created and BLUE LED (LED1) is ON on all devices.
+ it is now possible to send OnOff Cluster commands from the client to the server in multicast mode
+ by pressing on the SW1 push button.
+ You must see the RED LED (LED3) toggling on the server side.
+
+
+ Note: when LED1, LED2 and LED3 are toggling it is indicating an error has occurred on application.
+
+@par Keywords
+
+Zigbee
+
+@par Hardware and Software environment
+
+ - This example runs on STM32WB55xx devices.
+
+ - This example has been tested with an STMicroelectronics STM32WB55RG_Nucleo
+ board and can be easily tailored to any other supported device
+ and development board.
+
+ - On STM32WB55RG_Nucleo, the jumpers must be configured as described
+ in this section. Starting from the top left position up to the bottom
+ right position, the jumpers on the Board must be set as follows:
+
+ CN11: GND [OFF]
+ JP4: VDDRF [ON]
+ JP6: VC0 [ON]
+ JP2: +3V3 [ON]
+ JP1: USB_STL [ON] All others [OFF]
+ CN12: GND [OFF]
+ CN7: <All> [OFF]
+ JP3: VDD_MCU [ON]
+ JP5: GND [OFF] All others [ON]
+ CN10: <All> [OFF]
+
+
+@par How to use it ?
+
+=> Loading of the stm32wb5x_Zigbee_FFD_fw.bin binary
+
+ This application requests having the stm32wb5x_Zigbee_FFD_fw.bin binary flashed on the Wireless Coprocessor.
+ If it is not the case, you need to use STM32CubeProgrammer to load the appropriate binary.
+ All available binaries are located under /Projects/STM32_Copro_Wireless_Binaries directory.
+ Refer to UM2237 to learn how to use/install STM32CubeProgrammer.
+ Refer to /Projects/STM32_Copro_Wireless_Binaries/ReleaseNote.html for the detailed procedure to change the
+ Wireless Coprocessor binary.
+
+=> Getting traces
+ To get the traces you need to connect your Board to the Hyperterminal (through the STLink Virtual COM Port).
+ The UART must be configured as follows:
+
+ - BaudRate = 115200 baud
+ - Word Length = 8 Bits
+ - Stop Bit = 1 bit
+ - Parity = none
+ - Flow control = none
+
+=> Running the application
+
+ Refer to the Application description at the beginning of this readme.txt
+
+ * <h3><center>&copy; COPYRIGHT STMicroelectronics</center></h3>
+
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_SED/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_SED/Core/Inc/stm32wbxx_it.h
index ab02c8535..e66cafbb9 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_SED/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_SED/Core/Inc/stm32wbxx_it.h
@@ -72,8 +72,6 @@ void FPU_IRQHandler(void);
/* USER CODE BEGIN EFP */
void RTC_WKUP_IRQHandler(void);
void EXTI4_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord/Core/Inc/stm32wbxx_it.h
index ab02c8535..e66cafbb9 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord/Core/Inc/stm32wbxx_it.h
@@ -72,8 +72,6 @@ void FPU_IRQHandler(void);
/* USER CODE BEGIN EFP */
void RTC_WKUP_IRQHandler(void);
void EXTI4_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/FreeRTOSConfig.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/FreeRTOSConfig.h
new file mode 100644
index 000000000..e36a3fcf9
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/FreeRTOSConfig.h
@@ -0,0 +1,171 @@
+/* USER CODE BEGIN Header */
+/*
+ * FreeRTOS Kernel V10.0.1
+ * Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * http://www.FreeRTOS.org
+ * http://aws.amazon.com/freertos
+ *
+ * 1 tab == 4 spaces!
+ */
+/* USER CODE END Header */
+
+#ifndef FREERTOS_CONFIG_H
+#define FREERTOS_CONFIG_H
+
+/*-----------------------------------------------------------
+ * Application specific definitions.
+ *
+ * These definitions should be adjusted for your particular hardware and
+ * application requirements.
+ *
+ * These parameters and more are described within the 'configuration' section of the
+ * FreeRTOS API documentation available on the FreeRTOS.org web site.
+ *
+ * See http://www.freertos.org/a00110.html
+ *----------------------------------------------------------*/
+
+/* USER CODE BEGIN Includes */
+/* Section where include file can be added */
+/* USER CODE END Includes */
+
+/* Ensure definitions are only used by the compiler, and not by the assembler. */
+#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
+ #include <stdint.h>
+ extern uint32_t SystemCoreClock;
+#endif
+#ifndef CMSIS_device_header
+#define CMSIS_device_header "stm32wbxx.h"
+#endif /* CMSIS_device_header */
+
+#define configENABLE_FPU 0
+#define configENABLE_MPU 0
+
+#define configUSE_PREEMPTION 1
+#define configSUPPORT_STATIC_ALLOCATION 1
+#define configSUPPORT_DYNAMIC_ALLOCATION 1
+#define configUSE_IDLE_HOOK 0
+#define configUSE_TICK_HOOK 0
+#define configCPU_CLOCK_HZ ( SystemCoreClock )
+#define configTICK_RATE_HZ ((TickType_t)1000)
+#define configMAX_PRIORITIES ( 56 )
+#define configMINIMAL_STACK_SIZE ((uint16_t)128)
+#define configTOTAL_HEAP_SIZE ((size_t)20000)
+#define configMAX_TASK_NAME_LEN ( 16 )
+#define configUSE_TRACE_FACILITY 1
+#define configUSE_16_BIT_TICKS 0
+#define configUSE_MUTEXES 1
+#define configQUEUE_REGISTRY_SIZE 8
+#define configUSE_RECURSIVE_MUTEXES 1
+#define configUSE_COUNTING_SEMAPHORES 1
+#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
+#define configUSE_TICKLESS_IDLE 2
+/* USER CODE BEGIN MESSAGE_BUFFER_LENGTH_TYPE */
+/* Defaults to size_t for backward compatibility, but can be changed
+ if lengths will always be less than the number of bytes in a size_t. */
+#define configMESSAGE_BUFFER_LENGTH_TYPE size_t
+/* USER CODE END MESSAGE_BUFFER_LENGTH_TYPE */
+
+/* Co-routine definitions. */
+#define configUSE_CO_ROUTINES 0
+#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
+
+/* Software timer definitions. */
+#define configUSE_TIMERS 1
+#define configTIMER_TASK_PRIORITY ( 2 )
+#define configTIMER_QUEUE_LENGTH 10
+#define configTIMER_TASK_STACK_DEPTH 256
+
+/* CMSIS-RTOS V2 flags */
+#define configUSE_OS2_THREAD_SUSPEND_RESUME 1
+#define configUSE_OS2_THREAD_ENUMERATE 1
+#define configUSE_OS2_EVENTFLAGS_FROM_ISR 1
+#define configUSE_OS2_THREAD_FLAGS 1
+#define configUSE_OS2_TIMER 1
+#define configUSE_OS2_MUTEX 1
+
+/* Set the following definitions to 1 to include the API function, or zero
+to exclude the API function. */
+#define INCLUDE_vTaskPrioritySet 1
+#define INCLUDE_uxTaskPriorityGet 1
+#define INCLUDE_vTaskDelete 1
+#define INCLUDE_vTaskCleanUpResources 0
+#define INCLUDE_vTaskSuspend 1
+#define INCLUDE_vTaskDelayUntil 1
+#define INCLUDE_vTaskDelay 1
+#define INCLUDE_xTaskGetSchedulerState 1
+#define INCLUDE_xTimerPendFunctionCall 1
+#define INCLUDE_xQueueGetMutexHolder 1
+#define INCLUDE_uxTaskGetStackHighWaterMark 1
+#define INCLUDE_xTaskGetCurrentTaskHandle 1
+#define INCLUDE_eTaskGetState 1
+
+/*
+ * The CMSIS-RTOS V2 FreeRTOS wrapper is dependent on the heap implementation used
+ * by the application thus the correct define need to be enabled below
+ */
+#define USE_FreeRTOS_HEAP_4
+
+/* Cortex-M specific definitions. */
+#ifdef __NVIC_PRIO_BITS
+ /* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */
+ #define configPRIO_BITS __NVIC_PRIO_BITS
+#else
+ #define configPRIO_BITS 4
+#endif
+
+/* The lowest interrupt priority that can be used in a call to a "set priority"
+function. */
+#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15
+
+/* The highest interrupt priority that can be used by any interrupt service
+routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT CALL
+INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER
+PRIORITY THAN THIS! (higher priorities are lower numeric values. */
+#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5
+
+/* Interrupt priorities used by the kernel port layer itself. These are generic
+to all Cortex-M ports, and do not rely on any particular library functions. */
+#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
+/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
+See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
+#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
+
+/* Normal assert() semantics without relying on the provision of an assert.h
+header file. */
+/* USER CODE BEGIN 1 */
+#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }
+/* USER CODE END 1 */
+
+/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
+standard names. */
+#define vPortSVCHandler SVC_Handler
+#define xPortPendSVHandler PendSV_Handler
+
+/* IMPORTANT: After 10.3.1 update, Systick_Handler comes from NVIC (if SYS timebase = systick), otherwise from cmsis_os2.c */
+
+#define USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION 0
+
+/* USER CODE BEGIN Defines */
+/* Section where parameter definitions can be added (for instance, to override default ones in FreeRTOS.h) */
+#define configOVERRIDE_DEFAULT_TICK_CONFIGURATION 1 /* required only for Keil but does not hurt otherwise */
+/* USER CODE END Defines */
+
+#endif /* FREERTOS_CONFIG_H */
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/app_common.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/app_common.h
new file mode 100644
index 000000000..cf8a5baa6
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/app_common.h
@@ -0,0 +1,119 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : app_common.h
+ * Description : App Common application configuration file for STM32WPAN Middleware.
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef APP_COMMON_H
+#define APP_COMMON_H
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+#include <stdint.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+#include "app_conf.h"
+
+ /* -------------------------------- *
+ * Basic definitions *
+ * -------------------------------- */
+
+#undef NULL
+#define NULL 0
+
+#undef FALSE
+#define FALSE 0
+
+#undef TRUE
+#define TRUE (!0)
+
+ /* -------------------------------- *
+ * Critical Section definition *
+ * -------------------------------- */
+#define BACKUP_PRIMASK() uint32_t primask_bit= __get_PRIMASK()
+#define DISABLE_IRQ() __disable_irq()
+#define RESTORE_PRIMASK() __set_PRIMASK(primask_bit)
+
+ /* -------------------------------- *
+ * Macro delimiters *
+ * -------------------------------- */
+
+#define M_BEGIN do {
+
+#define M_END } while(0)
+
+ /* -------------------------------- *
+ * Some useful macro definitions *
+ * -------------------------------- */
+
+#ifndef MAX
+#define MAX( x, y ) (((x)>(y))?(x):(y))
+#endif
+
+#ifndef MIN
+#define MIN( x, y ) (((x)<(y))?(x):(y))
+#endif
+
+#define MODINC( a, m ) M_BEGIN (a)++; if ((a)>=(m)) (a)=0; M_END
+
+#define MODDEC( a, m ) M_BEGIN if ((a)==0) (a)=(m); (a)--; M_END
+
+#define MODADD( a, b, m ) M_BEGIN (a)+=(b); if ((a)>=(m)) (a)-=(m); M_END
+
+#define MODSUB( a, b, m ) MODADD( a, (m)-(b), m )
+
+#define PAUSE( t ) M_BEGIN \
+ __IO int _i; \
+ for ( _i = t; _i > 0; _i -- ); \
+ M_END
+
+#define DIVF( x, y ) ((x)/(y))
+
+#define DIVC( x, y ) (((x)+(y)-1)/(y))
+
+#define DIVR( x, y ) (((x)+((y)/2))/(y))
+
+#define SHRR( x, n ) ((((x)>>((n)-1))+1)>>1)
+
+#define BITN( w, n ) (((w)[(n)/32] >> ((n)%32)) & 1)
+
+#define BITNSET( w, n, b ) M_BEGIN (w)[(n)/32] |= ((U32)(b))<<((n)%32); M_END
+
+ /* -------------------------------- *
+ * Compiler *
+ * -------------------------------- */
+#define PLACE_IN_SECTION( __x__ ) __attribute__((section (__x__)))
+
+#ifdef WIN32
+#define ALIGN(n)
+#else
+#define ALIGN(n) __attribute__((aligned(n)))
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*APP_COMMON_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/app_conf.h
new file mode 100644
index 000000000..62283850f
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/app_conf.h
@@ -0,0 +1,336 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : app_conf.h
+ * Description : Application configuration file for STM32WPAN Middleware.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef APP_CONF_H
+#define APP_CONF_H
+
+#include "hw.h"
+#include "hw_conf.h"
+#include "hw_if.h"
+
+/******************************************************************************
+ * Application Config
+ ******************************************************************************/
+/******************************************************************************
+ * Transport Layer
+ ******************************************************************************/
+/**
+ * Queue length of BLE Event
+ * This parameter defines the number of asynchronous events that can be stored in the HCI layer before
+ * being reported to the application. When a command is sent to the BLE core coprocessor, the HCI layer
+ * is waiting for the event with the Num_HCI_Command_Packets set to 1. The receive queue shall be large
+ * enough to store all asynchronous events received in between.
+ * When CFG_TLBLE_MOST_EVENT_PAYLOAD_SIZE is set to 27, this allow to store three 255 bytes long asynchronous events
+ * between the HCI command and its event.
+ * This parameter depends on the value given to CFG_TLBLE_MOST_EVENT_PAYLOAD_SIZE. When the queue size is to small,
+ * the system may hang if the queue is full with asynchronous events and the HCI layer is still waiting
+ * for a CC/CS event, In that case, the notification TL_BLE_HCI_ToNot() is called to indicate
+ * to the application a HCI command did not receive its command event within 30s (Default HCI Timeout).
+ */
+#define CFG_TL_EVT_QUEUE_LENGTH 5
+/**
+ * This parameter should be set to fit most events received by the HCI layer. It defines the buffer size of each element
+ * allocated in the queue of received events and can be used to optimize the amount of RAM allocated by the Memory Manager.
+ * It should not exceed 255 which is the maximum HCI packet payload size (a greater value is a lost of memory as it will
+ * never be used)
+ * With the current wireless firmware implementation, this parameter shall be kept to 255
+ */
+#define CFG_TL_MOST_EVENT_PAYLOAD_SIZE 255 /**< Set to 255 with the memory manager and the mailbox */
+
+#define TL_EVENT_FRAME_SIZE ( TL_EVT_HDR_SIZE + CFG_TL_MOST_EVENT_PAYLOAD_SIZE )
+/******************************************************************************
+ * UART interfaces
+ ******************************************************************************/
+
+/**
+ * Select UART interfaces
+ */
+#define CFG_DEBUG_TRACE_UART hw_uart1
+#define CFG_CONSOLE_MENU
+#define CFG_CLI_UART hw_lpuart1
+/******************************************************************************
+ * USB interface
+ ******************************************************************************/
+
+/**
+ * Enable/Disable USB interface
+ */
+#define CFG_USB_INTERFACE_ENABLE 0
+
+/******************************************************************************
+ * IPCC interface
+ ******************************************************************************/
+
+/**
+ * The IPCC is dedicated to the communication between the CPU2 and the CPU1
+ * and shall not be modified by the application
+ * The two following definitions shall not be modified
+ */
+#define HAL_IPCC_TX_IRQHandler(...) HW_IPCC_Tx_Handler( )
+#define HAL_IPCC_RX_IRQHandler(...) HW_IPCC_Rx_Handler( )
+
+/******************************************************************************
+ * Low Power
+ *
+ * When CFG_FULL_LOW_POWER is set to 1, the system is configured in full
+ * low power mode. It means that all what can have an impact on the consumptions
+ * are powered down.(For instance LED, Access to Debugger, Etc.)
+ *
+ * When CFG_FULL_LOW_POWER is set to 0, the low power mode is not activated
+ *
+ ******************************************************************************/
+
+#define CFG_FULL_LOW_POWER 0
+
+#if (CFG_FULL_LOW_POWER == 1)
+#undef CFG_LPM_SUPPORTED
+#define CFG_LPM_SUPPORTED 1
+#endif /* CFG_FULL_LOW_POWER */
+/******************************************************************************
+ * Timer Server
+ ******************************************************************************/
+/**
+ * CFG_RTC_WUCKSEL_DIVIDER: This sets the RTCCLK divider to the wakeup timer.
+ * The lower is the value, the better is the power consumption and the accuracy of the timerserver
+ * The higher is the value, the finest is the granularity
+ *
+ * CFG_RTC_ASYNCH_PRESCALER: This sets the asynchronous prescaler of the RTC. It should as high as possible ( to output
+ * clock as low as possible) but the output clock should be equal or higher frequency compare to the clock feeding
+ * the wakeup timer. A lower clock speed would impact the accuracy of the timer server.
+ *
+ * CFG_RTC_SYNCH_PRESCALER: This sets the synchronous prescaler of the RTC.
+ * When the 1Hz calendar clock is required, it shall be sets according to other settings
+ * When the 1Hz calendar clock is not needed, CFG_RTC_SYNCH_PRESCALER should be set to 0x7FFF (MAX VALUE)
+ *
+ * CFG_RTCCLK_DIVIDER_CONF:
+ * Shall be set to either 0,2,4,8,16
+ * When set to either 2,4,8,16, the 1Hhz calendar is supported
+ * When set to 0, the user sets its own configuration
+ *
+ * The following settings are computed with LSI as input to the RTC
+ */
+
+#define CFG_RTCCLK_DIVIDER_CONF 0
+
+#if (CFG_RTCCLK_DIVIDER_CONF == 0)
+/**
+ * Custom configuration
+ * It does not support 1Hz calendar
+ * It divides the RTC CLK by 16
+ */
+
+#define CFG_RTCCLK_DIV (16)
+#define CFG_RTC_WUCKSEL_DIVIDER (0)
+#define CFG_RTC_ASYNCH_PRESCALER (0x0F)
+#define CFG_RTC_SYNCH_PRESCALER (0x7FFF)
+
+#else
+
+#if (CFG_RTCCLK_DIVIDER_CONF == 2)
+/**
+ * It divides the RTC CLK by 2
+ */
+#define CFG_RTC_WUCKSEL_DIVIDER (3)
+#endif
+
+#if (CFG_RTCCLK_DIVIDER_CONF == 4)
+/**
+ * It divides the RTC CLK by 4
+ */
+#define CFG_RTC_WUCKSEL_DIVIDER (2)
+#endif
+
+#if (CFG_RTCCLK_DIVIDER_CONF == 8)
+/**
+ * It divides the RTC CLK by 8
+ */
+#define CFG_RTC_WUCKSEL_DIVIDER (1)
+#endif
+
+#if (CFG_RTCCLK_DIVIDER_CONF == 16)
+/**
+ * It divides the RTC CLK by 16
+ */
+#define CFG_RTC_WUCKSEL_DIVIDER (0)
+#endif
+
+#define CFG_RTCCLK_DIV CFG_RTCCLK_DIVIDER_CONF
+#define CFG_RTC_ASYNCH_PRESCALER (CFG_RTCCLK_DIV - 1)
+#define CFG_RTC_SYNCH_PRESCALER (DIVR( LSE_VALUE, (CFG_RTC_ASYNCH_PRESCALER+1) ) - 1 )
+
+#endif
+
+/** tick timer value in us */
+#define CFG_TS_TICK_VAL DIVR( (CFG_RTCCLK_DIV * 1000000), LSE_VALUE )
+
+typedef enum
+{
+ CFG_TIM_PROC_ID_ISR,
+ /* USER CODE BEGIN CFG_TimProcID_t */
+
+ /* USER CODE END CFG_TimProcID_t */
+} CFG_TimProcID_t;
+
+/******************************************************************************
+ * Debug
+ ******************************************************************************/
+/**
+ * When set, this resets some hw resources to set the device in the same state than the power up
+ * The FW resets only register that may prevent the FW to run properly
+ *
+ * This shall be set to 0 in a final product
+ *
+ */
+#define CFG_HW_RESET_BY_FW 1
+
+/**
+ * keep debugger enabled while in any low power mode when set to 1
+ * should be set to 0 in production
+ */
+#define CFG_DEBUGGER_SUPPORTED 1
+
+#if (CFG_FULL_LOW_POWER == 1)
+#undef CFG_DEBUGGER_SUPPORTED
+#define CFG_DEBUGGER_SUPPORTED 0
+#endif /* CFG_FULL_LOW_POWER */
+
+/*****************************************************************************
+ * Traces
+ * Enable or Disable traces in application
+ * When CFG_DEBUG_TRACE is set, traces are activated
+ *
+ * Note : Refer to utilities_conf.h file in order to details
+ * the level of traces : CFG_DEBUG_TRACE_FULL or CFG_DEBUG_TRACE_LIGHT
+ *****************************************************************************/
+#define CFG_DEBUG_TRACE 1
+
+#if (CFG_FULL_LOW_POWER == 1)
+#undef CFG_DEBUG_TRACE
+#define CFG_DEBUG_TRACE 0
+#endif /* CFG_FULL_LOW_POWER */
+
+/**
+ * When CFG_DEBUG_TRACE_FULL is set to 1, the trace are output with the API name, the file name and the line number
+ * When CFG_DEBUG_TRACE_LIGHT is set to 1, only the debug message is output
+ *
+ * When both are set to 0, no trace are output
+ * When both are set to 1, CFG_DEBUG_TRACE_FULL is selected
+ */
+#define CFG_DEBUG_TRACE_LIGHT 1
+#define CFG_DEBUG_TRACE_FULL 0
+
+#if (( CFG_DEBUG_TRACE != 0 ) && ( CFG_DEBUG_TRACE_LIGHT == 0 ) && (CFG_DEBUG_TRACE_FULL == 0))
+#undef CFG_DEBUG_TRACE_FULL
+#undef CFG_DEBUG_TRACE_LIGHT
+#define CFG_DEBUG_TRACE_FULL 0
+#define CFG_DEBUG_TRACE_LIGHT 1
+#endif
+
+#if ( CFG_DEBUG_TRACE == 0 )
+#undef CFG_DEBUG_TRACE_FULL
+#undef CFG_DEBUG_TRACE_LIGHT
+#define CFG_DEBUG_TRACE_FULL 0
+#define CFG_DEBUG_TRACE_LIGHT 0
+#endif
+
+/**
+ * When not set, the traces is looping on sending the trace over UART
+ */
+#define DBG_TRACE_USE_CIRCULAR_QUEUE 1
+
+/**
+ * max buffer Size to queue data traces and max data trace allowed.
+ * Only Used if DBG_TRACE_USE_CIRCULAR_QUEUE is defined
+ */
+#define DBG_TRACE_MSG_QUEUE_SIZE 4096
+#define MAX_DBG_TRACE_MSG_SIZE 1024
+
+/******************************************************************************
+ * Configure Log level for Application
+ ******************************************************************************/
+#define APPLI_CONFIG_LOG_LEVEL LOG_LEVEL_INFO
+#define APPLI_PRINT_FILE_FUNC_LINE 0
+
+/* USER CODE BEGIN Defines */
+/******************************************************************************
+ * User interaction
+ * When CFG_LED_SUPPORTED is set, LEDS are activated if requested
+ * When CFG_BUTTON_SUPPORTED is set, the push button are activated if requested
+ ******************************************************************************/
+#if (CFG_FULL_LOW_POWER == 1)
+#define CFG_LED_SUPPORTED 0
+#define CFG_BUTTON_SUPPORTED 0
+#else
+#define CFG_LED_SUPPORTED 1
+#define CFG_BUTTON_SUPPORTED 1
+#endif /* CFG_FULL_LOW_POWER */
+/* USER CODE END Defines */
+
+/******************************************************************************
+ * FreeRTOS
+ ******************************************************************************/
+
+#define CFG_SHCI_USER_EVT_PROCESS_NAME "SHCI_USER_EVT_PROCESS"
+#define CFG_SHCI_USER_EVT_PROCESS_ATTR_BITS (0)
+#define CFG_SHCI_USER_EVT_PROCESS_CB_MEM (0)
+#define CFG_SHCI_USER_EVT_PROCESS_CB_SIZE (0)
+#define CFG_SHCI_USER_EVT_PROCESS_STACK_MEM (0)
+#define CFG_SHCI_USER_EVT_PROCESS_PRIORITY osPriorityNone
+#define CFG_SHCI_USER_EVT_PROCESS_STACK_SIZE (128 * 7)
+
+#define CFG_TASK_NOTIFY_M0_TO_M4_PROCESS_NAME "TASK_NOTIFY_M0_TO_M4_PROCESS"
+#define CFG_TASK_REQUEST_M0_TO_M4_PROCESS_NAME "TASK_REQUEST_M0_TO_M4_PROCESS"
+#define CFG_TASK_NWK_FORM_PROCESS_NAME "TASK_NWK_FORM_PROCESS"
+#define CFG_TASK_INIT_PROCESS_NAME "TASK_INIT_PROCESS"
+#define CFG_TASK_PROCESS_ATTR_BITS (0)
+#define CFG_TASK_PROCESS_CB_MEM (0)
+#define CFG_TASK_PROCESS_CB_SIZE (0)
+#define CFG_TASK_PROCESS_STACK_MEM (0)
+#define CFG_THREAD_MSG_M0_TO_M4_PROCESS_PRIORITY osPriorityLow
+#define CFG_TASK_PROCESS_STACK_SIZE (128 * 8)
+
+/* USER CODE END FreeRTOS_Defines */
+
+/******************************************************************************
+ * LOW POWER
+ ******************************************************************************/
+/**
+ * Supported requester to the MCU Low Power Manager - can be increased up to 32
+ * It list a bit mapping of all user of the Low Power Manager
+ */
+typedef enum
+{
+ CFG_LPM_APP,
+ /* USER CODE BEGIN CFG_LPM_Id_t */
+
+ /* USER CODE END CFG_LPM_Id_t */
+} CFG_LPM_Id_t;
+
+/******************************************************************************
+ * OTP manager
+ ******************************************************************************/
+#define CFG_OTP_BASE_ADDRESS OTP_AREA_BASE
+
+#define CFG_OTP_END_ADRESS OTP_AREA_END_ADDR
+
+#endif /*APP_CONF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/app_entry.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/app_entry.h
new file mode 100644
index 000000000..da5fabb6e
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/app_entry.h
@@ -0,0 +1,68 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : app_entry.h
+ * Description : App entry configuration file for STM32WPAN Middleware.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef APP_ENTRY_H
+#define APP_ENTRY_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+
+/* 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 variables --------------------------------------------------------*/
+/* USER CODE BEGIN EV */
+
+/* USER CODE END EV */
+
+/* Exported macros ------------------------------------------------------------*/
+/* USER CODE BEGIN EM */
+
+/* USER CODE END EM */
+
+/* Exported functions ---------------------------------------------*/
+ void APPE_Init( void );
+/* USER CODE BEGIN EF */
+
+/* USER CODE END EF */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*APP_ENTRY_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/hw_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/hw_conf.h
new file mode 100644
index 000000000..78bec073e
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/hw_conf.h
@@ -0,0 +1,268 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : hw_conf.h
+ * Description : Hardware configuration file for STM32WPAN Middleware.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef HW_CONF_H
+#define HW_CONF_H
+
+#include "FreeRTOSConfig.h"
+
+/******************************************************************************
+ * Semaphores
+ * THIS SHALL NO BE CHANGED AS THESE SEMAPHORES ARE USED AS WELL ON THE CM0+
+ *****************************************************************************/
+/**
+* The CPU2 may be configured to store the Thread persistent data either in internal NVM storage on CPU2 or in
+* SRAM2 buffer provided by the user application. This can be configured with the system command SHCI_C2_Config()
+* When the CPU2 is requested to store persistent data in SRAM2, it can write data in this buffer at any time when needed.
+* In order to read consistent data with the CPU1 from the SRAM2 buffer, the flow should be:
+* + CPU1 takes CFG_HW_THREAD_NVM_SRAM_SEMID semaphore
+* + CPU1 reads all persistent data from SRAM2 (most of the time, the goal is to write these data into an NVM managed by CPU1)
+* + CPU1 releases CFG_HW_THREAD_NVM_SRAM_SEMID semaphore
+* CFG_HW_THREAD_NVM_SRAM_SEMID semaphore makes sure CPU2 does not update the persistent data in SRAM2 at the same time CPU1 is reading them.
+* There is no timing constraint on how long this semaphore can be kept.
+*/
+#define CFG_HW_THREAD_NVM_SRAM_SEMID 9
+
+/**
+* The CPU2 may be configured to store the BLE persistent data either in internal NVM storage on CPU2 or in
+* SRAM2 buffer provided by the user application. This can be configured with the system command SHCI_C2_Config()
+* When the CPU2 is requested to store persistent data in SRAM2, it can write data in this buffer at any time when needed.
+* In order to read consistent data with the CPU1 from the SRAM2 buffer, the flow should be:
+* + CPU1 takes CFG_HW_BLE_NVM_SRAM_SEMID semaphore
+* + CPU1 reads all persistent data from SRAM2 (most of the time, the goal is to write these data into an NVM managed by CPU1)
+* + CPU1 releases CFG_HW_BLE_NVM_SRAM_SEMID semaphore
+* CFG_HW_BLE_NVM_SRAM_SEMID semaphore makes sure CPU2 does not update the persistent data in SRAM2 at the same time CPU1 is reading them.
+* There is no timing constraint on how long this semaphore can be kept.
+*/
+#define CFG_HW_BLE_NVM_SRAM_SEMID 8
+
+/**
+* Index of the semaphore used by CPU2 to prevent the CPU1 to either write or erase data in flash
+* The CPU1 shall not either write or erase in flash when this semaphore is taken by the CPU2
+* When the CPU1 needs to either write or erase in flash, it shall first get the semaphore and release it just
+* after writing a raw (64bits data) or erasing one sector.
+* Once the Semaphore has been released, there shall be at least 1us before it can be taken again. This is required
+* to give the opportunity to CPU2 to take it.
+* On v1.4.0 and older CPU2 wireless firmware, this semaphore is unused and CPU2 is using PES bit.
+* By default, CPU2 is using the PES bit to protect its timing. The CPU1 may request the CPU2 to use the semaphore
+* instead of the PES bit by sending the system command SHCI_C2_SetFlashActivityControl()
+*/
+#define CFG_HW_BLOCK_FLASH_REQ_BY_CPU2_SEMID 7
+
+/**
+* Index of the semaphore used by CPU1 to prevent the CPU2 to either write or erase data in flash
+* In order to protect its timing, the CPU1 may get this semaphore to prevent the CPU2 to either
+* write or erase in flash (as this will stall both CPUs)
+* The PES bit shall not be used as this may stall the CPU2 in some cases.
+*/
+#define CFG_HW_BLOCK_FLASH_REQ_BY_CPU1_SEMID 6
+
+/**
+* Index of the semaphore used to manage the CLK48 clock configuration
+* When the USB is required, this semaphore shall be taken before configuring te CLK48 for USB
+* and should be released after the application switch OFF the clock when the USB is not used anymore
+* When using the RNG, it is good enough to use CFG_HW_RNG_SEMID to control CLK48.
+* More details in AN5289
+*/
+#define CFG_HW_CLK48_CONFIG_SEMID 5
+
+/* Index of the semaphore used to manage the entry Stop Mode procedure */
+#define CFG_HW_ENTRY_STOP_MODE_SEMID 4
+
+/* Index of the semaphore used to access the RCC */
+#define CFG_HW_RCC_SEMID 3
+
+/* Index of the semaphore used to access the FLASH */
+#define CFG_HW_FLASH_SEMID 2
+
+/* Index of the semaphore used to access the PKA */
+#define CFG_HW_PKA_SEMID 1
+
+/* Index of the semaphore used to access the RNG */
+#define CFG_HW_RNG_SEMID 0
+
+/******************************************************************************
+ * HW TIMER SERVER
+ *****************************************************************************/
+/**
+ * The user may define the maximum number of virtual timers supported.
+ * It shall not exceed 255
+ */
+#define CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER 6
+
+/**
+ * The user may define the priority in the NVIC of the RTC_WKUP interrupt handler that is used to manage the
+ * wakeup timer.
+ * This setting is the preemptpriority part of the NVIC.
+ */
+#define CFG_HW_TS_NVIC_RTC_WAKEUP_IT_PREEMPTPRIO (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY + 1) /* FreeRTOS requirement */
+
+/**
+ * The user may define the priority in the NVIC of the RTC_WKUP interrupt handler that is used to manage the
+ * wakeup timer.
+ * This setting is the subpriority part of the NVIC. It does not exist on all processors. When it is not supported
+ * on the CPU, the setting is ignored
+ */
+#define CFG_HW_TS_NVIC_RTC_WAKEUP_IT_SUBPRIO 0
+
+/**
+ * Define a critical section in the Timer server
+ * The Timer server does not support the API to be nested
+ * The Application shall either:
+ * a) Ensure this will never happen
+ * b) Define the critical section
+ * The default implementations is masking all interrupts using the PRIMASK bit
+ * The TimerServer driver uses critical sections to avoid context corruption. This is achieved with the macro
+ * TIMER_ENTER_CRITICAL_SECTION and TIMER_EXIT_CRITICAL_SECTION. When CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION is set
+ * to 1, all STM32 interrupts are masked with the PRIMASK bit of the CortexM CPU. It is possible to use the BASEPRI
+ * register of the CortexM CPU to keep allowed some interrupts with high priority. In that case, the user shall
+ * re-implement TIMER_ENTER_CRITICAL_SECTION and TIMER_EXIT_CRITICAL_SECTION and shall make sure that no TimerServer
+ * API are called when the TIMER critical section is entered
+ */
+#define CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION 1
+
+/**
+ * This value shall reflect the maximum delay there could be in the application between the time the RTC interrupt
+ * is generated by the Hardware and the time when the RTC interrupt handler is called. This time is measured in
+ * number of RTCCLK ticks.
+ * A relaxed timing would be 10ms
+ * When the value is too short, the timerserver will not be able to count properly and all timeout may be random.
+ * When the value is too long, the device may wake up more often than the most optimal configuration. However, the
+ * impact on power consumption would be marginal (unless the value selected is extremely too long). It is strongly
+ * recommended to select a value large enough to make sure it is not too short to ensure reliability of the system
+ * as this will have marginal impact on low power mode
+ */
+#define CFG_HW_TS_RTC_HANDLER_MAX_DELAY ( 10 * (LSI_VALUE/1000) )
+
+ /**
+ * Interrupt ID in the NVIC of the RTC Wakeup interrupt handler
+ * It shall be type of IRQn_Type
+ */
+#define CFG_HW_TS_RTC_WAKEUP_HANDLER_ID RTC_WKUP_IRQn
+
+/******************************************************************************
+ * HW UART
+ *****************************************************************************/
+#define CFG_HW_LPUART1_ENABLED 1
+#define CFG_HW_LPUART1_DMA_TX_SUPPORTED 1
+
+#define CFG_HW_USART1_ENABLED 1
+#define CFG_HW_USART1_DMA_TX_SUPPORTED 1
+
+/**
+ * LPUART1
+ */
+#define CFG_HW_LPUART1_PREEMPTPRIORITY 0x0F
+#define CFG_HW_LPUART1_SUBPRIORITY 0
+
+/** < The application shall check the selected source clock is enable */
+#define CFG_HW_LPUART1_SOURCE_CLOCK RCC_LPUART1CLKSOURCE_SYSCLK
+
+#define CFG_HW_LPUART1_BAUDRATE 115200
+#define CFG_HW_LPUART1_WORDLENGTH UART_WORDLENGTH_8B
+#define CFG_HW_LPUART1_STOPBITS UART_STOPBITS_1
+#define CFG_HW_LPUART1_PARITY UART_PARITY_NONE
+#define CFG_HW_LPUART1_HWFLOWCTL UART_HWCONTROL_NONE
+#define CFG_HW_LPUART1_MODE UART_MODE_TX_RX
+#define CFG_HW_LPUART1_ADVFEATUREINIT UART_ADVFEATURE_NO_INIT
+#define CFG_HW_LPUART1_OVERSAMPLING UART_OVERSAMPLING_8
+
+#define CFG_HW_LPUART1_TX_PORT_CLK_ENABLE __HAL_RCC_GPIOA_CLK_ENABLE
+#define CFG_HW_LPUART1_TX_PORT GPIOA
+#define CFG_HW_LPUART1_TX_PIN GPIO_PIN_2
+#define CFG_HW_LPUART1_TX_MODE GPIO_MODE_AF_PP
+#define CFG_HW_LPUART1_TX_PULL GPIO_NOPULL
+#define CFG_HW_LPUART1_TX_SPEED GPIO_SPEED_FREQ_VERY_HIGH
+#define CFG_HW_LPUART1_TX_ALTERNATE GPIO_AF8_LPUART1
+
+#define CFG_HW_LPUART1_RX_PORT_CLK_ENABLE __HAL_RCC_GPIOA_CLK_ENABLE
+#define CFG_HW_LPUART1_RX_PORT GPIOA
+#define CFG_HW_LPUART1_RX_PIN GPIO_PIN_3
+#define CFG_HW_LPUART1_RX_MODE GPIO_MODE_AF_PP
+#define CFG_HW_LPUART1_RX_PULL GPIO_NOPULL
+#define CFG_HW_LPUART1_RX_SPEED GPIO_SPEED_FREQ_VERY_HIGH
+#define CFG_HW_LPUART1_RX_ALTERNATE GPIO_AF8_LPUART1
+
+#define CFG_HW_LPUART1_DMA_TX_PREEMPTPRIORITY 0x0F
+#define CFG_HW_LPUART1_DMA_TX_SUBPRIORITY 0
+
+#define CFG_HW_LPUART1_DMAMUX_CLK_ENABLE __HAL_RCC_DMAMUX1_CLK_ENABLE
+#define CFG_HW_LPUART1_DMA_CLK_ENABLE __HAL_RCC_DMA1_CLK_ENABLE
+#define CFG_HW_LPUART1_TX_DMA_REQ DMA_REQUEST_LPUART1_TX
+#define CFG_HW_LPUART1_TX_DMA_CHANNEL DMA1_Channel1
+#define CFG_HW_LPUART1_TX_DMA_IRQn DMA1_Channel1_IRQn
+#define CFG_HW_LPUART1_DMA_TX_IRQHandler DMA1_Channel1_IRQHandler
+
+/**
+ * UART1
+ */
+#define CFG_HW_USART1_PREEMPTPRIORITY 0x0F
+#define CFG_HW_USART1_SUBPRIORITY 0
+
+/** < The application shall check the selected source clock is enable */
+#define CFG_HW_USART1_SOURCE_CLOCK RCC_USART1CLKSOURCE_SYSCLK
+
+#define CFG_HW_USART1_BAUDRATE 115200
+#define CFG_HW_USART1_WORDLENGTH UART_WORDLENGTH_8B
+#define CFG_HW_USART1_STOPBITS UART_STOPBITS_1
+#define CFG_HW_USART1_PARITY UART_PARITY_NONE
+#define CFG_HW_USART1_HWFLOWCTL UART_HWCONTROL_NONE
+#define CFG_HW_USART1_MODE UART_MODE_TX_RX
+#define CFG_HW_USART1_ADVFEATUREINIT UART_ADVFEATURE_NO_INIT
+#define CFG_HW_USART1_OVERSAMPLING UART_OVERSAMPLING_8
+
+#define CFG_HW_USART1_TX_PORT_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE
+#define CFG_HW_USART1_TX_PORT GPIOB
+#define CFG_HW_USART1_TX_PIN GPIO_PIN_6
+#define CFG_HW_USART1_TX_MODE GPIO_MODE_AF_PP
+#define CFG_HW_USART1_TX_PULL GPIO_NOPULL
+#define CFG_HW_USART1_TX_SPEED GPIO_SPEED_FREQ_VERY_HIGH
+#define CFG_HW_USART1_TX_ALTERNATE GPIO_AF7_USART1
+
+#define CFG_HW_USART1_RX_PORT_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE
+#define CFG_HW_USART1_RX_PORT GPIOB
+#define CFG_HW_USART1_RX_PIN GPIO_PIN_7
+#define CFG_HW_USART1_RX_MODE GPIO_MODE_AF_PP
+#define CFG_HW_USART1_RX_PULL GPIO_NOPULL
+#define CFG_HW_USART1_RX_SPEED GPIO_SPEED_FREQ_VERY_HIGH
+#define CFG_HW_USART1_RX_ALTERNATE GPIO_AF7_USART1
+
+#define CFG_HW_USART1_CTS_PORT_CLK_ENABLE __HAL_RCC_GPIOA_CLK_ENABLE
+#define CFG_HW_USART1_CTS_PORT GPIOA
+#define CFG_HW_USART1_CTS_PIN GPIO_PIN_11
+#define CFG_HW_USART1_CTS_MODE GPIO_MODE_AF_PP
+#define CFG_HW_USART1_CTS_PULL GPIO_PULLDOWN
+#define CFG_HW_USART1_CTS_SPEED GPIO_SPEED_FREQ_VERY_HIGH
+#define CFG_HW_USART1_CTS_ALTERNATE GPIO_AF7_USART1
+
+#define CFG_HW_USART1_DMA_TX_PREEMPTPRIORITY 0x0F
+#define CFG_HW_USART1_DMA_TX_SUBPRIORITY 0
+
+#define CFG_HW_USART1_DMAMUX_CLK_ENABLE __HAL_RCC_DMAMUX1_CLK_ENABLE
+#define CFG_HW_USART1_DMA_CLK_ENABLE __HAL_RCC_DMA1_CLK_ENABLE
+#define CFG_HW_USART1_TX_DMA_REQ DMA_REQUEST_USART1_TX
+#define CFG_HW_USART1_TX_DMA_CHANNEL DMA1_Channel2
+#define CFG_HW_USART1_TX_DMA_IRQn DMA1_Channel2_IRQn
+#define CFG_HW_USART1_DMA_TX_IRQHandler DMA1_Channel2_IRQHandler
+
+#endif /*HW_CONF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/hw_if.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/hw_if.h
new file mode 100644
index 000000000..55312b1c3
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/hw_if.h
@@ -0,0 +1,250 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * @file hw_if.h
+ * @author MCD Application Team
+ * @brief Hardware Interface
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef HW_IF_H
+#define HW_IF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /* Includes ------------------------------------------------------------------*/
+#include "stm32wbxx.h"
+#include "stm32wbxx_ll_exti.h"
+#include "stm32wbxx_ll_system.h"
+#include "stm32wbxx_ll_rcc.h"
+#include "stm32wbxx_ll_ipcc.h"
+#include "stm32wbxx_ll_bus.h"
+#include "stm32wbxx_ll_pwr.h"
+#include "stm32wbxx_ll_cortex.h"
+#include "stm32wbxx_ll_utils.h"
+#include "stm32wbxx_ll_hsem.h"
+#include "stm32wbxx_ll_gpio.h"
+#include "stm32wbxx_ll_rtc.h"
+
+#ifdef USE_STM32WBXX_USB_DONGLE
+#include "stm32wbxx_usb_dongle.h"
+#endif
+#ifdef USE_STM32WBXX_NUCLEO
+#include "stm32wbxx_nucleo.h"
+#endif
+#ifdef USE_X_NUCLEO_EPD
+#include "x_nucleo_epd.h"
+#endif
+
+/* Private includes ----------------------------------------------------------*/
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+ /******************************************************************************
+ * HW UART
+ ******************************************************************************/
+ typedef enum
+ {
+ hw_uart1,
+ hw_uart2,
+ hw_lpuart1,
+ } hw_uart_id_t;
+
+ typedef enum
+ {
+ hw_uart_ok,
+ hw_uart_error,
+ hw_uart_busy,
+ hw_uart_to,
+ } hw_status_t;
+
+ void HW_UART_Init(hw_uart_id_t hw_uart_id);
+ void HW_UART_Receive_IT(hw_uart_id_t hw_uart_id, uint8_t *pData, uint16_t Size, void (*Callback)(void));
+ void HW_UART_Transmit_IT(hw_uart_id_t hw_uart_id, uint8_t *pData, uint16_t Size, void (*Callback)(void));
+ hw_status_t HW_UART_Transmit(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, uint32_t timeout);
+ hw_status_t HW_UART_Transmit_DMA(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, void (*Callback)(void));
+ void HW_UART_Interrupt_Handler(hw_uart_id_t hw_uart_id);
+ void HW_UART_DMA_Interrupt_Handler(hw_uart_id_t hw_uart_id);
+
+ /******************************************************************************
+ * HW TimerServer
+ ******************************************************************************/
+ /* Exported types ------------------------------------------------------------*/
+ /**
+ * This setting is used when standby mode is supported.
+ * hw_ts_InitMode_Limited should be used when the device restarts from Standby Mode. In that case, the Timer Server does
+ * not re-initialized its context. Only the Hardware register which content has been lost is reconfigured
+ * Otherwise, hw_ts_InitMode_Full should be requested (Start from Power ON) and everything is re-initialized.
+ */
+ typedef enum
+ {
+ hw_ts_InitMode_Full,
+ hw_ts_InitMode_Limited,
+ } HW_TS_InitMode_t;
+
+ /**
+ * When a Timer is created as a SingleShot timer, it is not automatically restarted when the timeout occurs. However,
+ * the timer is kept reserved in the list and could be restarted at anytime with HW_TS_Start()
+ *
+ * When a Timer is created as a Repeated timer, it is automatically restarted when the timeout occurs.
+ */
+ typedef enum
+ {
+ hw_ts_SingleShot,
+ hw_ts_Repeated
+ } HW_TS_Mode_t;
+
+ /**
+ * hw_ts_Successful is returned when a Timer has been successfully created with HW_TS_Create(). Otherwise, hw_ts_Failed
+ * is returned. When hw_ts_Failed is returned, that means there are not enough free slots in the list to create a
+ * Timer. In that case, CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER should be increased
+ */
+ typedef enum
+ {
+ hw_ts_Successful,
+ hw_ts_Failed,
+ }HW_TS_ReturnStatus_t;
+
+ typedef void (*HW_TS_pTimerCb_t)(void);
+
+ /**
+ * @brief Initialize the timer server
+ * This API shall be called by the application before any timer is requested to the timer server. It
+ * configures the RTC module to be connected to the LSI input clock.
+ *
+ * @param TimerInitMode: When the device restarts from Standby, it should request hw_ts_InitMode_Limited so that the
+ * Timer context is not re-initialized. Otherwise, hw_ts_InitMode_Full should be requested
+ * @param hrtc: RTC Handle
+ * @retval None
+ */
+ void HW_TS_Init(HW_TS_InitMode_t TimerInitMode, RTC_HandleTypeDef *hrtc);
+
+ /**
+ * @brief Interface to create a virtual timer
+ * The user shall call this API to create a timer. Once created, the timer is reserved to the module until it
+ * has been deleted. When creating a timer, the user shall specify the mode (single shot or repeated), the
+ * callback to be notified when the timer expires and a module ID to identify in the timer interrupt handler
+ * which module is concerned. In return, the user gets a timer ID to handle it.
+ *
+ * @param TimerProcessID: This is an identifier provided by the user and returned in the callback to allow
+ * identification of the requester
+ * @param pTimerId: Timer Id returned to the user to request operation (start, stop, delete)
+ * @param TimerMode: Mode of the virtual timer (Single shot or repeated)
+ * @param pTimerCallBack: Callback when the virtual timer expires
+ * @retval HW_TS_ReturnStatus_t: Return whether the creation is sucessful or not
+ */
+ HW_TS_ReturnStatus_t HW_TS_Create(uint32_t TimerProcessID, uint8_t *pTimerId, HW_TS_Mode_t TimerMode, HW_TS_pTimerCb_t pTimerCallBack);
+
+ /**
+ * @brief Stop a virtual timer
+ * This API may be used to stop a running timer. A timer which is stopped is move to the pending state.
+ * A pending timer may be restarted at any time with a different timeout value but the mode cannot be changed.
+ * Nothing is done when it is called to stop a timer which has been already stopped
+ *
+ * @param TimerID: Id of the timer to stop
+ * @retval None
+ */
+ void HW_TS_Stop(uint8_t TimerID);
+
+ /**
+ * @brief Start a virtual timer
+ * This API shall be used to start a timer. The timeout value is specified and may be different each time.
+ * When the timer is in the single shot mode, it will move to the pending state when it expires. The user may
+ * restart it at any time with a different timeout value. When the timer is in the repeated mode, it always
+ * stay in the running state. When the timer expires, it will be restarted with the same timeout value.
+ * This API shall not be called on a running timer.
+ *
+ * @param TimerID: The ID Id of the timer to start
+ * @param timeout_ticks: Number of ticks of the virtual timer (Maximum value is (0xFFFFFFFF-0xFFFF = 0xFFFF0000)
+ * @retval None
+ */
+ void HW_TS_Start(uint8_t TimerID, uint32_t timeout_ticks);
+
+ /**
+ * @brief Delete a virtual timer from the list
+ * This API should be used when a timer is not needed anymore by the user. A deleted timer is removed from
+ * the timer list managed by the timer server. It cannot be restarted again. The user has to go with the
+ * creation of a new timer if required and may get a different timer id
+ *
+ * @param TimerID: The ID of the timer to remove from the list
+ * @retval None
+ */
+ void HW_TS_Delete(uint8_t TimerID);
+
+ /**
+ * @brief Schedule the timer list on the timer interrupt handler
+ * This interrupt handler shall be called by the application in the RTC interrupt handler. This handler takes
+ * care of clearing all status flag required in the RTC and EXTI peripherals
+ *
+ * @param None
+ * @retval None
+ */
+ void HW_TS_RTC_Wakeup_Handler(void);
+
+ /**
+ * @brief Return the number of ticks to count before the interrupt
+ * This API returns the number of ticks left to be counted before an interrupt is generated by the
+ * Timer Server. This API may be used by the application for power management optimization. When the system
+ * enters low power mode, the mode selection is a tradeoff between the wakeup time where the CPU is running
+ * and the time while the CPU will be kept in low power mode before next wakeup. The deeper is the
+ * low power mode used, the longer is the wakeup time. The low power mode management considering wakeup time
+ * versus time in low power mode is implementation specific
+ * When the timer is disabled (No timer in the list), it returns 0xFFFF
+ *
+ * @param None
+ * @retval The number of ticks left to count
+ */
+ uint16_t HW_TS_RTC_ReadLeftTicksToCount(void);
+
+ /**
+ * @brief Notify the application that a registered timer has expired
+ * This API shall be implemented by the user application.
+ * This API notifies the application that a timer expires. This API is running in the RTC Wakeup interrupt
+ * context. The application may implement an Operating System to change the context priority where the timer
+ * callback may be handled. This API provides the module ID to identify which module is concerned and to allow
+ * sending the information to the correct task
+ *
+ * @param TimerProcessID: The TimerProcessId associated with the timer when it has been created
+ * @param TimerID: The TimerID of the expired timer
+ * @param pTimerCallBack: The Callback associated with the timer when it has been created
+ * @retval None
+ */
+ void HW_TS_RTC_Int_AppNot(uint32_t TimerProcessID, uint8_t TimerID, HW_TS_pTimerCb_t pTimerCallBack);
+
+ /**
+ * @brief Notify the application that the wakeupcounter has been updated
+ * This API should be implemented by the user application
+ * This API notifies the application that the counter has been updated. This is expected to be used along
+ * with the HW_TS_RTC_ReadLeftTicksToCount () API. It could be that the counter has been updated since the
+ * last call of HW_TS_RTC_ReadLeftTicksToCount () and before entering low power mode. This notification
+ * provides a way to the application to solve that race condition to reevaluate the counter value before
+ * entering low power mode
+ *
+ * @param None
+ * @retval None
+ */
+ void HW_TS_RTC_CountUpdated_AppNot(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*HW_IF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/main.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/main.h
new file mode 100644
index 000000000..e08aa2180
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/main.h
@@ -0,0 +1,76 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * @file : main.h
+ * @brief : Header for main.c file.
+ * This file contains the common defines of the application.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __MAIN_H
+#define __MAIN_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32wbxx_hal.h"
+#include "app_conf.h"
+#include "app_entry.h"
+#include "app_common.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 */
+
+/* USER CODE END EM */
+
+/* Exported functions prototypes ---------------------------------------------*/
+void Error_Handler(void);
+
+/* USER CODE BEGIN EFP */
+
+/* USER CODE END EFP */
+
+/* Private defines -----------------------------------------------------------*/
+void MX_LPUART1_UART_Init(void);
+void MX_USART1_UART_Init(void);
+/* USER CODE BEGIN Private defines */
+
+/* USER CODE END Private defines */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __MAIN_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/stm32_lpm_if.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/stm32_lpm_if.h
new file mode 100644
index 000000000..3e0b3c535
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/stm32_lpm_if.h
@@ -0,0 +1,81 @@
+/* USER CODE BEGIN Header */
+/**
+******************************************************************************
+* @file stm32_lpm_if.h
+* @brief Header for stm32_lpm_if.c module (device specific LP management)
+******************************************************************************
+* @attention
+*
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+* All rights reserved.</center></h2>
+*
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+*
+******************************************************************************
+*/
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32_LPM_IF_H
+#define __STM32_LPM_IF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+
+/**
+ * @brief Enters Low Power Off Mode
+ * @param none
+ * @retval none
+ */
+void PWR_EnterOffMode( void );
+/**
+ * @brief Exits Low Power Off Mode
+ * @param none
+ * @retval none
+ */
+void PWR_ExitOffMode( void );
+
+/**
+ * @brief Enters Low Power Stop Mode
+ * @note ARM exists the function when waking up
+ * @param none
+ * @retval none
+ */
+void PWR_EnterStopMode( void );
+/**
+ * @brief Exits Low Power Stop Mode
+ * @note Enable the pll at 32MHz
+ * @param none
+ * @retval none
+ */
+void PWR_ExitStopMode( void );
+
+/**
+ * @brief Enters Low Power Sleep Mode
+ * @note ARM exits the function when waking up
+ * @param none
+ * @retval none
+ */
+void PWR_EnterSleepMode( void );
+
+/**
+ * @brief Exits Low Power Sleep Mode
+ * @note ARM exits the function when waking up
+ * @param none
+ * @retval none
+ */
+void PWR_ExitSleepMode( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*__STM32_LPM_IF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/stm32wbxx_hal_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/stm32wbxx_hal_conf.h
new file mode 100644
index 000000000..fc4a470ae
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/stm32wbxx_hal_conf.h
@@ -0,0 +1,353 @@
+/**
+ ******************************************************************************
+ * @file stm32wbxx_hal_conf.h
+ * @author MCD Application Team
+ * @brief HAL configuration file.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32WBxx_HAL_CONF_H
+#define __STM32WBxx_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_CRYP_MODULE_ENABLED */
+/*#define HAL_COMP_MODULE_ENABLED */
+/*#define HAL_CRC_MODULE_ENABLED */
+#define HAL_HSEM_MODULE_ENABLED
+/*#define HAL_I2C_MODULE_ENABLED */
+#define HAL_IPCC_MODULE_ENABLED
+/*#define HAL_IRDA_MODULE_ENABLED */
+/*#define HAL_IWDG_MODULE_ENABLED */
+/*#define HAL_LCD_MODULE_ENABLED */
+/*#define HAL_LPTIM_MODULE_ENABLED */
+/*#define HAL_PCD_MODULE_ENABLED */
+/*#define HAL_PKA_MODULE_ENABLED */
+/*#define HAL_QSPI_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
+
+#define USE_HAL_ADC_REGISTER_CALLBACKS 0u
+#define USE_HAL_COMP_REGISTER_CALLBACKS 0u
+#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u
+#define USE_HAL_I2C_REGISTER_CALLBACKS 0u
+#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u
+#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u
+#define USE_HAL_PCD_REGISTER_CALLBACKS 0u
+#define USE_HAL_PKA_REGISTER_CALLBACKS 0u
+#define USE_HAL_QSPI_REGISTER_CALLBACKS 0u
+#define USE_HAL_RNG_REGISTER_CALLBACKS 0u
+#define USE_HAL_RTC_REGISTER_CALLBACKS 0u
+#define USE_HAL_SAI_REGISTER_CALLBACKS 0u
+#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0u
+#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u
+#define USE_HAL_SPI_REGISTER_CALLBACKS 0u
+#define USE_HAL_TIM_REGISTER_CALLBACKS 0u
+#define USE_HAL_TSC_REGISTER_CALLBACKS 0u
+#define USE_HAL_UART_REGISTER_CALLBACKS 0u
+#define USE_HAL_USART_REGISTER_CALLBACKS 0u
+#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u
+
+/* ########################## 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 32000000U /*!< Value of the External oscillator in Hz */
+#endif /* HSE_VALUE */
+
+#if !defined (HSE_STARTUP_TIMEOUT)
+ #define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */
+#endif /* HSE_STARTUP_TIMEOUT */
+
+/**
+ * @brief Internal Multiple Speed oscillator (MSI) default value.
+ * This value is the default MSI range value after Reset.
+ */
+#if !defined (MSI_VALUE)
+ #define MSI_VALUE ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/
+#endif /* MSI_VALUE */
+
+/**
+ * @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 16000000U /*!< Value of the Internal oscillator in Hz*/
+#endif /* HSI_VALUE */
+
+/**
+ * @brief Internal Low Speed oscillator (LSI1) value.
+ */
+#if !defined (LSI1_VALUE)
+ #define LSI1_VALUE ((uint32_t)32000) /*!< LSI1 Typical Value in Hz*/
+#endif /* LSI1_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
+ The real value may vary depending on the variations
+ in voltage and temperature.*/
+/**
+ * @brief Internal Low Speed oscillator (LSI2) value.
+ */
+#if !defined (LSI2_VALUE)
+ #define LSI2_VALUE ((uint32_t)32000) /*!< LSI2 Typical Value in Hz*/
+#endif /* LSI2_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
+ The real value may vary depending on the variations
+ in voltage and temperature.*/
+
+/**
+ * @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 32768U /*!< Value of the External oscillator in Hz*/
+#endif /* LSE_VALUE */
+
+/**
+ * @brief Internal Multiple Speed oscillator (HSI48) default value.
+ * This value is the default HSI48 range value after Reset.
+ */
+#if !defined (HSI48_VALUE)
+ #define HSI48_VALUE ((uint32_t)48000000) /*!< Value of the Internal oscillator in Hz*/
+#endif /* HSI48_VALUE */
+
+#if !defined (LSE_STARTUP_TIMEOUT)
+#define LSE_STARTUP_TIMEOUT 5000U /*!< 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 ((uint32_t)2097000) /*!< 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 3300U /*!< Value of VDD in mv */
+#define TICK_INT_PRIORITY 0U /*!< tick interrupt priority */
+#define USE_RTOS 0U
+#define PREFETCH_ENABLE 1U
+#define INSTRUCTION_CACHE_ENABLE 1U
+#define DATA_CACHE_ENABLE 1U
+
+/* ########################## Assert Selection ############################## */
+/**
+ * @brief Uncomment the line below to expanse the "assert_param" macro in the
+ * HAL drivers code
+ */
+/* #define USE_FULL_ASSERT 1U */
+
+/* ################## 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
+
+/* Includes ------------------------------------------------------------------*/
+/**
+ * @brief Include module's header file
+ */
+#ifdef HAL_DMA_MODULE_ENABLED
+ #include "stm32wbxx_hal_dma.h"
+#endif /* HAL_DMA_MODULE_ENABLED */
+
+#ifdef HAL_ADC_MODULE_ENABLED
+ #include "stm32wbxx_hal_adc.h"
+#endif /* HAL_ADC_MODULE_ENABLED */
+
+#ifdef HAL_COMP_MODULE_ENABLED
+ #include "stm32wbxx_hal_comp.h"
+#endif /* HAL_COMP_MODULE_ENABLED */
+
+#ifdef HAL_CORTEX_MODULE_ENABLED
+ #include "stm32wbxx_hal_cortex.h"
+#endif /* HAL_CORTEX_MODULE_ENABLED */
+
+#ifdef HAL_CRC_MODULE_ENABLED
+ #include "stm32wbxx_hal_crc.h"
+#endif /* HAL_CRC_MODULE_ENABLED */
+
+#ifdef HAL_CRYP_MODULE_ENABLED
+ #include "stm32wbxx_hal_cryp.h"
+#endif /* HAL_CRYP_MODULE_ENABLED */
+
+#ifdef HAL_EXTI_MODULE_ENABLED
+ #include "stm32wbxx_hal_exti.h"
+#endif /* HAL_EXTI_MODULE_ENABLED */
+
+#ifdef HAL_FLASH_MODULE_ENABLED
+ #include "stm32wbxx_hal_flash.h"
+#endif /* HAL_FLASH_MODULE_ENABLED */
+
+#ifdef HAL_GPIO_MODULE_ENABLED
+ #include "stm32wbxx_hal_gpio.h"
+#endif /* HAL_GPIO_MODULE_ENABLED */
+
+#ifdef HAL_HSEM_MODULE_ENABLED
+ #include "stm32wbxx_hal_hsem.h"
+#endif /* HAL_HSEM_MODULE_ENABLED */
+
+#ifdef HAL_I2C_MODULE_ENABLED
+ #include "stm32wbxx_hal_i2c.h"
+#endif /* HAL_I2C_MODULE_ENABLED */
+
+#ifdef HAL_IPCC_MODULE_ENABLED
+ #include "stm32wbxx_hal_ipcc.h"
+#endif /* HAL_IPCC_MODULE_ENABLED */
+
+#ifdef HAL_IRDA_MODULE_ENABLED
+ #include "stm32wbxx_hal_irda.h"
+#endif /* HAL_IRDA_MODULE_ENABLED */
+
+#ifdef HAL_IWDG_MODULE_ENABLED
+ #include "stm32wbxx_hal_iwdg.h"
+#endif /* HAL_IWDG_MODULE_ENABLED */
+
+#ifdef HAL_LCD_MODULE_ENABLED
+ #include "stm32wbxx_hal_lcd.h"
+#endif /* HAL_LCD_MODULE_ENABLED */
+
+#ifdef HAL_LPTIM_MODULE_ENABLED
+ #include "stm32wbxx_hal_lptim.h"
+#endif /* HAL_LPTIM_MODULE_ENABLED */
+
+#ifdef HAL_PCD_MODULE_ENABLED
+ #include "stm32wbxx_hal_pcd.h"
+#endif /* HAL_PCD_MODULE_ENABLED */
+
+#ifdef HAL_PKA_MODULE_ENABLED
+ #include "stm32wbxx_hal_pka.h"
+#endif /* HAL_PKA_MODULE_ENABLED */
+
+#ifdef HAL_PWR_MODULE_ENABLED
+ #include "stm32wbxx_hal_pwr.h"
+#endif /* HAL_PWR_MODULE_ENABLED */
+
+#ifdef HAL_QSPI_MODULE_ENABLED
+ #include "stm32wbxx_hal_qspi.h"
+#endif /* HAL_QSPI_MODULE_ENABLED */
+
+#ifdef HAL_RCC_MODULE_ENABLED
+ #include "stm32wbxx_hal_rcc.h"
+#endif /* HAL_RCC_MODULE_ENABLED */
+
+#ifdef HAL_RNG_MODULE_ENABLED
+ #include "stm32wbxx_hal_rng.h"
+#endif /* HAL_RNG_MODULE_ENABLED */
+
+#ifdef HAL_RTC_MODULE_ENABLED
+ #include "stm32wbxx_hal_rtc.h"
+#endif /* HAL_RTC_MODULE_ENABLED */
+
+#ifdef HAL_SAI_MODULE_ENABLED
+ #include "stm32wbxx_hal_sai.h"
+#endif /* HAL_SAI_MODULE_ENABLED */
+
+#ifdef HAL_SMARTCARD_MODULE_ENABLED
+ #include "stm32wbxx_hal_smartcard.h"
+#endif /* HAL_SMARTCARD_MODULE_ENABLED */
+
+#ifdef HAL_SMBUS_MODULE_ENABLED
+ #include "stm32wbxx_hal_smbus.h"
+#endif /* HAL_SMBUS_MODULE_ENABLED */
+
+#ifdef HAL_SPI_MODULE_ENABLED
+ #include "stm32wbxx_hal_spi.h"
+#endif /* HAL_SPI_MODULE_ENABLED */
+
+#ifdef HAL_TIM_MODULE_ENABLED
+ #include "stm32wbxx_hal_tim.h"
+#endif /* HAL_TIM_MODULE_ENABLED */
+
+#ifdef HAL_TSC_MODULE_ENABLED
+ #include "stm32wbxx_hal_tsc.h"
+#endif /* HAL_TSC_MODULE_ENABLED */
+
+#ifdef HAL_UART_MODULE_ENABLED
+ #include "stm32wbxx_hal_uart.h"
+#endif /* HAL_UART_MODULE_ENABLED */
+
+#ifdef HAL_USART_MODULE_ENABLED
+ #include "stm32wbxx_hal_usart.h"
+#endif /* HAL_USART_MODULE_ENABLED */
+
+#ifdef HAL_WWDG_MODULE_ENABLED
+ #include "stm32wbxx_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 /* __STM32WBxx_HAL_CONF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/stm32wbxx_it.h
new file mode 100644
index 000000000..1a61c0444
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/stm32wbxx_it.h
@@ -0,0 +1,80 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * @file stm32wbxx_it.h
+ * @brief This file contains the headers of the interrupt handlers.
+ *******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32WBxx_IT_H
+#define __STM32WBxx_IT_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Private includes ----------------------------------------------------------*/
+/* USER CODE BEGIN Includes */
+#include "app_common.h"
+/* 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 DebugMon_Handler(void);
+void PVD_PVM_IRQHandler(void);
+void FLASH_IRQHandler(void);
+void RCC_IRQHandler(void);
+void DMA1_Channel1_IRQHandler(void);
+void DMA1_Channel2_IRQHandler(void);
+void C2SEV_PWR_C2H_IRQHandler(void);
+void USART1_IRQHandler(void);
+void LPUART1_IRQHandler(void);
+void PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler(void);
+void IPCC_C1_RX_IRQHandler(void);
+void IPCC_C1_TX_IRQHandler(void);
+void HSEM_IRQHandler(void);
+void FPU_IRQHandler(void);
+/* USER CODE BEGIN EFP */
+void RTC_WKUP_IRQHandler(void);
+void EXTI4_IRQHandler(void);
+/* USER CODE END EFP */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STM32WBxx_IT_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/stm_logging.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/stm_logging.h
new file mode 100644
index 000000000..a48a6398f
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/stm_logging.h
@@ -0,0 +1,60 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : stm_logging.h
+ * Description : Application header file for logging
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+#ifndef STM_LOGGING_H_
+#define STM_LOGGING_H_
+
+#define LOG_LEVEL_NONE 0 /* None */
+#define LOG_LEVEL_CRIT 1U /* Critical */
+#define LOG_LEVEL_WARN 2U /* Warning */
+#define LOG_LEVEL_INFO 3U /* Info */
+#define LOG_LEVEL_DEBG 4U /* Debug */
+
+#define APP_DBG_FULL(level, region, ...) \
+ { \
+ if (APPLI_PRINT_FILE_FUNC_LINE == 1U) \
+ { \
+ printf("\r\n[%s][%s][%d] ", DbgTraceGetFileName(__FILE__),__FUNCTION__,__LINE__); \
+ } \
+ logApplication(level, region, __VA_ARGS__); \
+ }
+#define APP_DBG(...) \
+ { \
+ if (APPLI_PRINT_FILE_FUNC_LINE == 1U) \
+ { \
+ printf("\r\n[%s][%s][%d] ", DbgTraceGetFileName(__FILE__),__FUNCTION__,__LINE__); \
+ } \
+ logApplication(LOG_LEVEL_NONE, APPLI_LOG_REGION_GENERAL, __VA_ARGS__); \
+ }
+/**
+ * This enumeration represents log regions.
+ *
+ */
+typedef enum
+{
+ APPLI_LOG_REGION_GENERAL = 1U, /* General */
+ APPLI_LOG_REGION_ZIGBEE_API = 2U, /* Zigbee API */
+} appliLogRegion_t;
+
+typedef uint8_t appliLogLevel_t;
+
+void logApplication(appliLogLevel_t aLogLevel, appliLogRegion_t aLogRegion, const char *aFormat, ...);
+
+#endif /* STM_LOGGING_H_ */
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/utilities_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/utilities_conf.h
new file mode 100644
index 000000000..d0169780c
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Inc/utilities_conf.h
@@ -0,0 +1,68 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : utilities_conf.h
+ * Description : Configuration file for STM32 Utilities.
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef UTILITIES_CONF_H
+#define UTILITIES_CONF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "cmsis_compiler.h"
+#include "string.h"
+
+/******************************************************************************
+ * common
+ ******************************************************************************/
+#define UTILS_ENTER_CRITICAL_SECTION( ) uint32_t primask_bit = __get_PRIMASK( );\
+ __disable_irq( )
+
+#define UTILS_EXIT_CRITICAL_SECTION( ) __set_PRIMASK( primask_bit )
+
+#define UTILS_MEMSET8( dest, value, size ) memset( dest, value, size);
+
+/******************************************************************************
+ * tiny low power manager
+ * (any macro that does not need to be modified can be removed)
+ ******************************************************************************/
+#define UTIL_LPM_INIT_CRITICAL_SECTION( )
+#define UTIL_LPM_ENTER_CRITICAL_SECTION( ) UTILS_ENTER_CRITICAL_SECTION( )
+#define UTIL_LPM_EXIT_CRITICAL_SECTION( ) UTILS_EXIT_CRITICAL_SECTION( )
+
+/******************************************************************************
+ * sequencer
+ * (any macro that does not need to be modified can be removed)
+ ******************************************************************************/
+#define UTIL_SEQ_INIT_CRITICAL_SECTION( )
+#define UTIL_SEQ_ENTER_CRITICAL_SECTION( ) UTILS_ENTER_CRITICAL_SECTION( )
+#define UTIL_SEQ_EXIT_CRITICAL_SECTION( ) UTILS_EXIT_CRITICAL_SECTION( )
+#define UTIL_SEQ_CONF_TASK_NBR (32)
+#define UTIL_SEQ_CONF_PRIO_NBR (2)
+#define UTIL_SEQ_MEMSET8( dest, value, size ) UTILS_MEMSET8( dest, value, size )
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*UTILITIES_CONF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/app_entry.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/app_entry.c
new file mode 100644
index 000000000..be55ad5a2
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/app_entry.c
@@ -0,0 +1,543 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : app_entry.c
+ * Description : Entry application source file for STM32WPAN Middleware
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "app_common.h"
+#include "main.h"
+#include "app_entry.h"
+#include "app_zigbee.h"
+#include "app_conf.h"
+#include "hw_conf.h"
+#include "cmsis_os.h"
+#include "stm_logging.h"
+#include "shci_tl.h"
+#include "stm32_lpm.h"
+#include "dbg_trace.h"
+#include "shci.h"
+
+/* Private includes -----------------------------------------------------------*/
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+/* Private typedef -----------------------------------------------------------*/
+extern RTC_HandleTypeDef hrtc;
+/* USER CODE BEGIN PTD */
+
+/* USER CODE END PTD */
+
+/* Private defines -----------------------------------------------------------*/
+/* POOL_SIZE = 2(TL_PacketHeader_t) + 258 (3(TL_EVT_HDR_SIZE) + 255(Payload size)) */
+#define POOL_SIZE (CFG_TL_EVT_QUEUE_LENGTH * 4U * DIVC(( sizeof(TL_PacketHeader_t) + TL_EVENT_FRAME_SIZE ), 4U))
+
+/* USER CODE BEGIN PD */
+
+/* USER CODE END PD */
+
+/* Private macros ------------------------------------------------------------*/
+/* USER CODE BEGIN PM */
+
+/* USER CODE END PM */
+
+/* Private variables ---------------------------------------------------------*/
+PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static uint8_t EvtPool[POOL_SIZE];
+PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static TL_CmdPacket_t SystemCmdBuffer;
+PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static uint8_t SystemSpareEvtBuffer[sizeof(TL_PacketHeader_t) + TL_EVT_HDR_SIZE + 255U];
+
+/* USER CODE BEGIN PV */
+
+/* USER CODE END PV */
+
+/* Global variables ----------------------------------------------------------*/
+osMutexId_t MtxShciId;
+osSemaphoreId_t SemShciId;
+osThreadId_t ShciUserEvtProcessId;
+
+const osThreadAttr_t ShciUserEvtProcess_attr = {
+ .name = CFG_SHCI_USER_EVT_PROCESS_NAME,
+ .attr_bits = CFG_SHCI_USER_EVT_PROCESS_ATTR_BITS,
+ .cb_mem = CFG_SHCI_USER_EVT_PROCESS_CB_MEM,
+ .cb_size = CFG_SHCI_USER_EVT_PROCESS_CB_SIZE,
+ .stack_mem = CFG_SHCI_USER_EVT_PROCESS_STACK_MEM,
+ .priority = CFG_SHCI_USER_EVT_PROCESS_PRIORITY,
+ .stack_size = CFG_SHCI_USER_EVT_PROCESS_STACK_SIZE
+};
+
+/* Global function prototypes -----------------------------------------------*/
+#if(CFG_DEBUG_TRACE != 0)
+size_t DbgTraceWrite(int handle, const unsigned char * buf, size_t bufSize);
+#endif
+
+/* USER CODE BEGIN GFP */
+
+/* USER CODE END GFP */
+
+/* Private functions prototypes-----------------------------------------------*/
+static void ShciUserEvtProcess(void *argument);
+static void SystemPower_Config( void );
+static void Init_Debug( void );
+static void appe_Tl_Init( void );
+static void APPE_SysStatusNot( SHCI_TL_CmdStatus_t status );
+static void APPE_SysUserEvtRx( void * pPayload );
+static void APPE_SysEvtReadyProcessing( void );
+static void APPE_SysEvtError( SCHI_SystemErrCode_t ErrorCode);
+
+#if (CFG_HW_LPUART1_ENABLED == 1)
+extern void MX_LPUART1_UART_Init(void);
+#endif
+#if (CFG_HW_USART1_ENABLED == 1)
+extern void MX_USART1_UART_Init(void);
+#endif
+
+/* USER CODE BEGIN PFP */
+static void Led_Init(void);
+static void Button_Init(void);
+
+/* Section specific to button management using UART */
+static void RxUART_Init(void);
+static void RxCpltCallback(void);
+static void UartCmdExecute(void);
+
+#define C_SIZE_CMD_STRING 256U
+#define RX_BUFFER_SIZE 8U
+
+static uint8_t aRxBuffer[RX_BUFFER_SIZE];
+static uint8_t CommandString[C_SIZE_CMD_STRING];
+static uint16_t indexReceiveChar = 0;
+EXTI_HandleTypeDef exti_handle;
+/* USER CODE END PFP */
+
+/* Functions Definition ------------------------------------------------------*/
+void APPE_Init( void )
+{
+ SystemPower_Config(); /**< Configure the system Power Mode */
+
+ HW_TS_Init(hw_ts_InitMode_Full, &hrtc); /**< Initialize the TimerServer */
+
+/* USER CODE BEGIN APPE_Init_1 */
+ Init_Debug();
+ /**
+ * The Standby mode should not be entered before the initialization is over
+ * The default state of the Low Power Manager is to allow the Standby Mode so an request is needed here
+ */
+ UTIL_LPM_SetOffMode(1 << CFG_LPM_APP, UTIL_LPM_DISABLE);
+ Led_Init();
+ Button_Init();
+ RxUART_Init();
+/* USER CODE END APPE_Init_1 */
+ appe_Tl_Init(); /* Initialize all transport layers */
+
+ /**
+ * From now, the application is waiting for the ready event ( VS_HCI_C2_Ready )
+ * received on the system channel before starting the Stack
+ * This system event is received with APPE_SysUserEvtRx()
+ */
+/* USER CODE BEGIN APPE_Init_2 */
+
+/* USER CODE END APPE_Init_2 */
+ return;
+}
+/* USER CODE BEGIN FD */
+
+/* USER CODE END FD */
+
+/*************************************************************
+ *
+ * LOCAL FUNCTIONS
+ *
+ *************************************************************/
+static void Init_Debug( void )
+{
+#if (CFG_DEBUGGER_SUPPORTED == 1)
+ /**
+ * Keep debugger enabled while in any low power mode
+ */
+ HAL_DBGMCU_EnableDBGSleepMode();
+
+ /***************** ENABLE DEBUGGER *************************************/
+ LL_EXTI_EnableIT_32_63(LL_EXTI_LINE_48);
+ LL_C2_EXTI_EnableIT_32_63(LL_EXTI_LINE_48);
+
+#else
+
+ GPIO_InitTypeDef gpio_config = {0};
+
+ gpio_config.Pull = GPIO_NOPULL;
+ gpio_config.Mode = GPIO_MODE_ANALOG;
+
+ gpio_config.Pin = GPIO_PIN_15 | GPIO_PIN_14 | GPIO_PIN_13;
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ HAL_GPIO_Init(GPIOA, &gpio_config);
+ __HAL_RCC_GPIOA_CLK_DISABLE();
+
+ gpio_config.Pin = GPIO_PIN_4 | GPIO_PIN_3;
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ HAL_GPIO_Init(GPIOB, &gpio_config);
+ __HAL_RCC_GPIOB_CLK_DISABLE();
+
+ HAL_DBGMCU_DisableDBGSleepMode();
+ HAL_DBGMCU_DisableDBGStopMode();
+ HAL_DBGMCU_DisableDBGStandbyMode();
+
+#endif /* (CFG_DEBUGGER_SUPPORTED == 1) */
+
+#if(CFG_DEBUG_TRACE != 0)
+ DbgTraceInit();
+#endif
+
+ return;
+}
+
+/**
+ * @brief Configure the system for power optimization
+ *
+ * @note This API configures the system to be ready for low power mode
+ *
+ * @param None
+ * @retval None
+ */
+static void SystemPower_Config(void)
+{
+ /**
+ * Select HSI as system clock source after Wake Up from Stop mode
+ */
+ LL_RCC_SetClkAfterWakeFromStop(LL_RCC_STOP_WAKEUPCLOCK_HSI);
+
+ /* Initialize low power manager */
+ UTIL_LPM_Init();
+ /* Initialize the CPU2 reset value before starting CPU2 with C2BOOT */
+ LL_C2_PWR_SetPowerMode(LL_PWR_MODE_SHUTDOWN);
+
+#if (CFG_USB_INTERFACE_ENABLE != 0)
+ /**
+ * Enable USB power
+ */
+ HAL_PWREx_EnableVddUSB();
+#endif
+
+ return;
+}
+
+static void appe_Tl_Init( void )
+{
+ TL_MM_Config_t tl_mm_config;
+ SHCI_TL_HciInitConf_t SHci_Tl_Init_Conf;
+ /**< Reference table initialization */
+ TL_Init();
+
+ MtxShciId = osMutexNew( NULL );
+ SemShciId = osSemaphoreNew( 1, 0, NULL ); /*< Create the semaphore and make it busy at initialization */
+ ShciUserEvtProcessId = osThreadNew(ShciUserEvtProcess, NULL, &ShciUserEvtProcess_attr);
+
+ /**< System channel initialization */
+ SHci_Tl_Init_Conf.p_cmdbuffer = (uint8_t*)&SystemCmdBuffer;
+ SHci_Tl_Init_Conf.StatusNotCallBack = APPE_SysStatusNot;
+ shci_init(APPE_SysUserEvtRx, (void*) &SHci_Tl_Init_Conf);
+
+ /**< Memory Manager channel initialization */
+ tl_mm_config.p_BleSpareEvtBuffer = 0;
+ tl_mm_config.p_SystemSpareEvtBuffer = SystemSpareEvtBuffer;
+ tl_mm_config.p_AsynchEvtPool = EvtPool;
+ tl_mm_config.AsynchEvtPoolSize = POOL_SIZE;
+ TL_MM_Init( &tl_mm_config );
+
+ TL_Enable();
+
+ return;
+}
+
+static void APPE_SysStatusNot( SHCI_TL_CmdStatus_t status )
+{
+ switch (status)
+ {
+ case SHCI_TL_CmdBusy:
+ osMutexAcquire( MtxShciId, osWaitForever );
+ break;
+
+ case SHCI_TL_CmdAvailable:
+ osMutexRelease( MtxShciId );
+ break;
+
+ default:
+ break;
+ }
+ return;
+}
+
+/**
+ * The type of the payload for a system user event is tSHCI_UserEvtRxParam
+ * When the system event is both :
+ * - a ready event (subevtcode = SHCI_SUB_EVT_CODE_READY)
+ * - reported by the FUS (sysevt_ready_rsp == FUS_FW_RUNNING)
+ * The buffer shall not be released
+ * ( eg ((tSHCI_UserEvtRxParam*)pPayload)->status shall be set to SHCI_TL_UserEventFlow_Disable )
+ * When the status is not filled, the buffer is released by default
+ */
+static void APPE_SysUserEvtRx( void * pPayload )
+{
+ TL_AsynchEvt_t *p_sys_event;
+ p_sys_event = (TL_AsynchEvt_t*)(((tSHCI_UserEvtRxParam*)pPayload)->pckt->evtserial.evt.payload);
+
+ switch(p_sys_event->subevtcode)
+ {
+ case SHCI_SUB_EVT_CODE_READY:
+ APPE_SysEvtReadyProcessing();
+ break;
+ case SHCI_SUB_EVT_ERROR_NOTIF:
+ APPE_SysEvtError((SCHI_SystemErrCode_t) (p_sys_event->payload[0]));
+ break;
+ default:
+ break;
+ }
+ return;
+}
+
+/**
+ * @brief Notify a system error coming from the M0 firmware
+ * @param ErrorCode : errorCode detected by the M0 firmware
+ *
+ * @retval None
+ */
+static void APPE_SysEvtError( SCHI_SystemErrCode_t ErrorCode)
+{
+ switch(ErrorCode)
+ {
+ case ERR_ZIGBEE_UNKNOWN_CMD:
+ APP_DBG("** ERR_ZIGBEE : UNKNOWN_CMD \n");
+ break;
+ default:
+ APP_DBG("** ERR_ZIGBEE : ErroCode=%d \n",ErrorCode);
+ break;
+ }
+ return;
+}
+
+static void APPE_SysEvtReadyProcessing( void )
+{
+ /* Traces channel initialization */
+ TL_TRACES_Init( );
+
+ APP_ZIGBEE_Init();
+ UTIL_LPM_SetOffMode(1U << CFG_LPM_APP, UTIL_LPM_ENABLE);
+ return;
+}
+
+/*************************************************************
+ *
+ * FREERTOS WRAPPER FUNCTIONS
+ *
+*************************************************************/
+static void ShciUserEvtProcess(void *argument)
+{
+ UNUSED(argument);
+ for(;;)
+ {
+ /* USER CODE BEGIN SHCI_USER_EVT_PROCESS_1 */
+
+ /* USER CODE END SHCI_USER_EVT_PROCESS_1 */
+ osThreadFlagsWait(1, osFlagsWaitAny, osWaitForever);
+ shci_user_evt_proc();
+ /* USER CODE BEGIN SHCI_USER_EVT_PROCESS_2 */
+
+ /* USER CODE END SHCI_USER_EVT_PROCESS_2 */
+ }
+}
+/* USER CODE BEGIN FD_LOCAL_FUNCTIONS */
+static void Led_Init( void )
+{
+#if (CFG_LED_SUPPORTED == 1U)
+ /**
+ * Leds Initialization
+ */
+
+ BSP_LED_Init(LED_BLUE);
+ BSP_LED_Init(LED_GREEN);
+ BSP_LED_Init(LED_RED);
+
+#endif
+
+ return;
+}
+
+static void Button_Init( void )
+{
+#if (CFG_BUTTON_SUPPORTED == 1U)
+ /**
+ * Button Initialization
+ */
+ BSP_PB_Init(BUTTON_SW1, BUTTON_MODE_EXTI);
+ BSP_PB_Init(BUTTON_SW2, BUTTON_MODE_EXTI);
+ BSP_PB_Init(BUTTON_SW3, BUTTON_MODE_EXTI);
+#endif
+
+ return;
+}
+
+/* USER CODE END FD_LOCAL_FUNCTIONS */
+
+/*************************************************************
+ *
+ * WRAP FUNCTIONS
+ *
+ *************************************************************/
+
+void shci_notify_asynch_evt(void* pdata)
+{
+ UNUSED(pdata);
+ osThreadFlagsSet(ShciUserEvtProcessId,1);
+ return;
+}
+
+void shci_cmd_resp_release(uint32_t flag)
+{
+ UNUSED(flag);
+ osSemaphoreRelease( SemShciId );
+ return;
+}
+
+void shci_cmd_resp_wait(uint32_t timeout)
+{
+ UNUSED(timeout);
+ osSemaphoreAcquire( SemShciId, osWaitForever );
+ return;
+}
+
+/* Received trace buffer from M0 */
+void TL_TRACES_EvtReceived( TL_EvtPacket_t * hcievt )
+{
+#if(CFG_DEBUG_TRACE != 0)
+ /* Call write/print function using DMA from dbg_trace */
+ /* - Cast to TL_AsynchEvt_t* to get "real" payload (without Sub Evt code 2bytes),
+ - (-2) to size to remove Sub Evt Code */
+ DbgTraceWrite(1U, (const unsigned char *) ((TL_AsynchEvt_t *)(hcievt->evtserial.evt.payload))->payload, hcievt->evtserial.evt.plen - 2U);
+#endif /* CFG_DEBUG_TRACE */
+ /* Release buffer */
+ TL_MM_EvtDone( hcievt );
+}
+/**
+ * @brief Initialisation of the trace mechanism
+ * @param None
+ * @retval None
+ */
+#if(CFG_DEBUG_TRACE != 0)
+void DbgOutputInit( void )
+{
+#ifdef CFG_DEBUG_TRACE_UART
+ MX_USART1_UART_Init();
+ return;
+#endif
+}
+
+/**
+ * @brief Management of the traces
+ * @param p_data : data
+ * @param size : size
+ * @param call-back :
+ * @retval None
+ */
+void DbgOutputTraces( uint8_t *p_data, uint16_t size, void (*cb)(void) )
+{
+ HW_UART_Transmit_DMA(CFG_DEBUG_TRACE_UART, p_data, size, cb);
+
+ return;
+}
+#endif
+
+/* USER CODE BEGIN FD_WRAP_FUNCTIONS */
+/**
+ * @brief This function manage the Push button action
+ * @param GPIO_Pin : GPIO pin which has been activated
+ * @retval None
+ */
+void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
+{
+ switch (GPIO_Pin) {
+ case BUTTON_SW1_PIN:
+ break;
+
+ case BUTTON_SW2_PIN:
+ break;
+
+ case BUTTON_SW3_PIN:
+ break;
+
+ default:
+ break;
+ }
+}
+
+static void RxUART_Init(void)
+{
+ HW_UART_Receive_IT(CFG_DEBUG_TRACE_UART, aRxBuffer, 1U, RxCpltCallback);
+}
+
+static void RxCpltCallback(void)
+{
+ /* Filling buffer and wait for '\r' char */
+ if (indexReceiveChar < C_SIZE_CMD_STRING)
+ {
+ if (aRxBuffer[0] == '\r')
+ {
+ APP_DBG("received %s", CommandString);
+
+ UartCmdExecute();
+
+ /* Clear receive buffer and character counter*/
+ indexReceiveChar = 0;
+ memset(CommandString, 0, C_SIZE_CMD_STRING);
+ }
+ else
+ {
+ CommandString[indexReceiveChar++] = aRxBuffer[0];
+ }
+ }
+
+ /* Once a character has been sent, put back the device in reception mode */
+ HW_UART_Receive_IT(CFG_DEBUG_TRACE_UART, aRxBuffer, 1U, RxCpltCallback);
+}
+
+static void UartCmdExecute(void)
+{
+ /* Parse received CommandString */
+ if(strcmp((char const*)CommandString, "SW1") == 0)
+ {
+ APP_DBG("SW1 OK");
+ exti_handle.Line = EXTI_LINE_4;
+ HAL_EXTI_GenerateSWI(&exti_handle);
+ }
+ else if (strcmp((char const*)CommandString, "SW2") == 0)
+ {
+ APP_DBG("SW2 OK");
+ exti_handle.Line = EXTI_LINE_0;
+ HAL_EXTI_GenerateSWI(&exti_handle);
+ }
+ else if (strcmp((char const*)CommandString, "SW3") == 0)
+ {
+ APP_DBG("SW3 OK");
+ exti_handle.Line = EXTI_LINE_1;
+ HAL_EXTI_GenerateSWI(&exti_handle);
+ }
+ else
+ {
+ APP_DBG("NOT RECOGNIZED COMMAND : %s", CommandString);
+ }
+}
+/* USER CODE END FD_WRAP_FUNCTIONS */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/freertos_port.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/freertos_port.c
new file mode 100644
index 000000000..e96637686
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/freertos_port.c
@@ -0,0 +1,322 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : freertos_port.c
+ * Description : Custom porting of FreeRTOS functionalities
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "app_common.h"
+
+#include "FreeRTOS.h"
+#include "task.h"
+#include "stm32_lpm.h"
+
+/* Private typedef -----------------------------------------------------------*/
+typedef struct
+{
+ uint64_t LpTimeDiffVal;
+ uint32_t LpTimeLeftOnEntry;
+ uint8_t LpTimerFreeRTOS_Id;
+} LpTimerContext_t;
+
+/* Private defines -----------------------------------------------------------*/
+#ifndef configSYSTICK_CLOCK_HZ
+#define configSYSTICK_CLOCK_HZ configCPU_CLOCK_HZ
+/* Ensure the SysTick is clocked at the same frequency as the core. */
+#define portNVIC_SYSTICK_CLK_BIT ( 1UL << 2UL )
+#else
+/* The way the SysTick is clocked is not modified in case it is not the same
+ as the core. */
+#define portNVIC_SYSTICK_CLK_BIT ( 0 )
+#endif
+
+#define CPU_CLOCK_KHZ ( configCPU_CLOCK_HZ / 1000 )
+
+/* Constants required to manipulate the core. Registers first... */
+#define portNVIC_SYSTICK_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000e010 ) )
+#define portNVIC_SYSTICK_LOAD_REG ( * ( ( volatile uint32_t * ) 0xe000e014 ) )
+#define portNVIC_SYSTICK_CURRENT_VALUE_REG ( * ( ( volatile uint32_t * ) 0xe000e018 ) )
+#define portNVIC_SYSTICK_INT_BIT ( 1UL << 1UL )
+#define portNVIC_SYSTICK_ENABLE_BIT ( 1UL << 0UL )
+#define portNVIC_SYSTICK_COUNT_FLAG_BIT ( 1UL << 16UL )
+
+/* Private macros ------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+/*
+ * The number of SysTick increments that make up one tick period.
+ */
+#if ( CFG_LPM_SUPPORTED != 0)
+static uint32_t ulTimerCountsForOneTick;
+
+static LpTimerContext_t LpTimerContext;
+#endif
+/* Global variables ----------------------------------------------------------*/
+/* Private function prototypes -----------------------------------------------*/
+#if ( CFG_LPM_SUPPORTED != 0)
+static void LpTimerInit( void );
+static void LpTimerCb( void );
+static void LpTimerStart( uint32_t time_to_sleep );
+static void LpEnter( void );
+static uint32_t LpGetElapsedTime( void );
+void vPortSetupTimerInterrupt( void );
+#endif
+
+/* Functions Definition ------------------------------------------------------*/
+
+/**
+ * @brief Implement the tickless feature
+ *
+ *
+ * @param: xExpectedIdleTime is given in number of FreeRTOS Ticks
+ * @retval: None
+ */
+void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime )
+{
+ /* If low power is not used, do not stop the SysTick and continue execution */
+#if ( CFG_LPM_SUPPORTED != 0)
+ /**
+ * Although this is not documented as such, when xExpectedIdleTime = 0xFFFFFFFF = (~0),
+ * it likely means the system may enter low power for ever ( from a FreeRTOS point of view ).
+ * Otherwise, for a FreeRTOS tick set to 1ms, that would mean it is requested to wakeup in 8 years from now.
+ * When the system may enter low power mode for ever, FreeRTOS is not really interested to maintain a
+ * systick count and when the system exits from low power mode, there is no need to update the count with
+ * the time spent in low power mode
+ */
+ uint32_t ulCompleteTickPeriods;
+
+ /* Stop the SysTick to avoid the interrupt to occur while in the critical section.
+ * Otherwise, this will prevent the device to enter low power mode
+ * At this time, an update of the systick will not be considered
+ *
+ */
+ portNVIC_SYSTICK_CTRL_REG &= ~portNVIC_SYSTICK_ENABLE_BIT;
+
+ /* Enter a critical section but don't use the taskENTER_CRITICAL()
+ method as that will mask interrupts that should exit sleep mode. */
+ __disable_irq();
+ __DSB();
+ __ISB();
+
+ /* If a context switch is pending or a task is waiting for the scheduler
+ to be unsuspended then abandon the low power entry. */
+ if( eTaskConfirmSleepModeStatus() == eAbortSleep )
+ {
+ /* Restart SysTick. */
+ portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT;
+
+ /* Re-enable interrupts - see comments above __disable_interrupt()
+ call above. */
+ __enable_irq();
+ }
+ else
+ {
+ if (xExpectedIdleTime != (~0))
+ {
+ /* Remove one tick to wake up before the event occurs */
+ xExpectedIdleTime--;
+ /* Start the low power timer */
+ LpTimerStart( xExpectedIdleTime );
+ }
+
+ /* Enter low power mode */
+ LpEnter( );
+
+ if (xExpectedIdleTime != (~0))
+ {
+ /**
+ * Get the number of FreeRTOS ticks that has been suppressed
+ * In the current implementation, this shall be kept in critical section
+ * so that the timer server return the correct elapsed time
+ */
+ ulCompleteTickPeriods = LpGetElapsedTime( );
+ vTaskStepTick( ulCompleteTickPeriods );
+ }
+
+ /* Restart SysTick */
+ portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;
+ portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT;
+ portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;
+
+ /* Exit with interrUpts enabled. */
+ __enable_irq();
+ }
+#endif
+}
+
+/*
+ * Setup the systick timer to generate the tick interrupts at the required
+ * frequency and initialize a low power timer
+ * The current implementation is kept as close as possible to the default tickless
+ * mode provided.
+ * The systick is still used when there is no need to go in low power mode.
+ * When the system needs to enter low power mode, the tick is suppressed and a low power timer
+ * is used over that time
+ * Note that in sleep mode, the system clock is still running and the default tickless implementation
+ * using systick could have been kept.
+ * However, as at that time, it is not yet known whereas the low power mode that will be used is stop mode or
+ * sleep mode, it is easier and simpler to go with a low power timer as soon as the tick need to be
+ * suppressed.
+ */
+#if ( CFG_LPM_SUPPORTED != 0)
+void vPortSetupTimerInterrupt( void )
+{
+ LpTimerInit( );
+
+ /* Calculate the constants required to configure the tick interrupt. */
+ ulTimerCountsForOneTick = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ );
+
+ /* Stop and clear the SysTick. */
+ portNVIC_SYSTICK_CTRL_REG = 0UL;
+ portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;
+
+ /* Configure SysTick to interrupt at the requested rate. */
+ portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;
+ portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT );
+}
+#endif
+
+/**
+ * @brief The current implementation uses the hw_timerserver to provide a low power timer
+ * This may be replaced by another low power timer.
+ *
+ * @param None
+ * @retval None
+ */
+#if ( CFG_LPM_SUPPORTED != 0)
+static void LpTimerInit( void )
+{
+ ( void ) HW_TS_Create(CFG_TIM_PROC_ID_ISR, &(LpTimerContext.LpTimerFreeRTOS_Id), hw_ts_SingleShot, LpTimerCb);
+ LpTimerContext.LpTimeDiffVal = 0;
+
+ return;
+}
+#endif
+
+/**
+ * @brief Low power timer callback
+ *
+ * @param None
+ * @retval None
+ */
+#if ( CFG_LPM_SUPPORTED != 0)
+static void LpTimerCb( void )
+{
+ /**
+ * Nothing to be done
+ */
+
+ return;
+}
+#endif
+
+/**
+ * @brief Request to start a low power timer ( running is stop mode )
+ *
+ * @param time_to_sleep : Number of FreeRTOS ticks
+ * @retval None
+ */
+#if ( CFG_LPM_SUPPORTED != 0)
+static void LpTimerStart( uint32_t time_to_sleep )
+{
+ uint64_t time;
+
+ /* Converts the number of FreeRTOS ticks into hw timer tick */
+
+ time = (time_to_sleep * 1000 * 1000 );
+ time = time / ( CFG_TS_TICK_VAL * configTICK_RATE_HZ );
+
+ HW_TS_Start(LpTimerContext.LpTimerFreeRTOS_Id, (uint32_t)time);
+
+ /**
+ * There might be other timers already running in the timer server that may elapse
+ * before this one.
+ * Store how long before the next event so that on wakeup, it will be possible to calculate
+ * how long the tick has been suppressed
+ */
+ LpTimerContext.LpTimeLeftOnEntry = HW_TS_RTC_ReadLeftTicksToCount( );
+
+ return;
+}
+#endif
+
+/**
+ * @brief Enter low power mode
+ *
+ * @param None
+ * @retval None
+ */
+#if ( CFG_LPM_SUPPORTED != 0)
+static void LpEnter( void )
+{
+#if ( CFG_LPM_SUPPORTED == 1)
+ UTIL_LPM_EnterLowPower();
+#endif
+ return;
+}
+#endif
+
+/**
+ * @brief Read how long the tick has been suppressed
+ *
+ * @param None
+ * @retval The number of tick rate (FreeRTOS tick)
+ */
+#if ( CFG_LPM_SUPPORTED != 0)
+static uint32_t LpGetElapsedTime( void )
+{
+ uint64_t val_ticks, time_us, diff_ps;
+ uint32_t LpTimeLeftOnExit;
+
+ LpTimeLeftOnExit = HW_TS_RTC_ReadLeftTicksToCount();
+ time_us = (CFG_TS_TICK_VAL) * (uint64_t)(LpTimerContext.LpTimeLeftOnEntry - LpTimeLeftOnExit);
+
+ /* Corrects the time precision lost in CFG_TS_TICK_VAL computation */
+
+ /* Compute the amount of pico seconds lost at each TS ticks */
+ diff_ps = DIVR( ((uint64_t)CFG_RTCCLK_DIV * 1000000 * 1000000), (uint64_t)LSE_VALUE );
+ diff_ps -= DIVF( (CFG_RTCCLK_DIV * 1000000), LSE_VALUE ) * 1000000;
+ /* Compute the total amount of time shift */
+ diff_ps *= (uint64_t)(LpTimerContext.LpTimeLeftOnEntry - LpTimeLeftOnExit);
+
+ /* Save the time shift for next time */
+ LpTimerContext.LpTimeDiffVal += diff_ps;
+
+ while(LpTimerContext.LpTimeDiffVal >= (uint64_t)(1000 * 1000))
+ {
+ /* Reports the time difference into returned time elapsed value */
+ time_us++;
+ LpTimerContext.LpTimeDiffVal -= (uint64_t)(1000 * 1000);
+ }
+
+ /* Convert uS time into OS ticks */
+ val_ticks = time_us * configTICK_RATE_HZ;
+ val_ticks = val_ticks / (1000 * 1000);
+
+ /**
+ * The system may have been out from another reason than the timer
+ * Stop the timer after the elapsed time is calculated other wise, HW_TS_RTC_ReadLeftTicksToCount()
+ * may return 0xFFFF ( TIMER LIST EMPTY )
+ * It does not hurt stopping a timer that exists but is not running.
+ */
+ HW_TS_Stop(LpTimerContext.LpTimerFreeRTOS_Id);
+
+ return (uint32_t)val_ticks;
+}
+#endif
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/hw_timerserver.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/hw_timerserver.c
new file mode 100644
index 000000000..c0af6a14a
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/hw_timerserver.c
@@ -0,0 +1,895 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : hw_timerserver.c
+ * Description : Hardware timerserver source file for STM32WPAN Middleware.
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "app_common.h"
+#include "hw_conf.h"
+
+/* Private typedef -----------------------------------------------------------*/
+typedef enum
+{
+ TimerID_Free,
+ TimerID_Created,
+ TimerID_Running
+}TimerIDStatus_t;
+
+typedef enum
+{
+ SSR_Read_Requested,
+ SSR_Read_Not_Requested
+}RequestReadSSR_t;
+
+typedef enum
+{
+ WakeupTimerValue_Overpassed,
+ WakeupTimerValue_LargeEnough
+}WakeupTimerLimitation_Status_t;
+
+typedef struct
+{
+ HW_TS_pTimerCb_t pTimerCallBack;
+ uint32_t CounterInit;
+ uint32_t CountLeft;
+ TimerIDStatus_t TimerIDStatus;
+ HW_TS_Mode_t TimerMode;
+ uint32_t TimerProcessID;
+ uint8_t PreviousID;
+ uint8_t NextID;
+}TimerContext_t;
+
+/* Private defines -----------------------------------------------------------*/
+#define SSR_FORBIDDEN_VALUE 0xFFFFFFFF
+#define TIMER_LIST_EMPTY 0xFFFF
+
+/* Private macros ------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+
+/**
+ * START of Section TIMERSERVER_CONTEXT
+ */
+
+PLACE_IN_SECTION("TIMERSERVER_CONTEXT") static volatile TimerContext_t aTimerContext[CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER];
+PLACE_IN_SECTION("TIMERSERVER_CONTEXT") static volatile uint8_t CurrentRunningTimerID;
+PLACE_IN_SECTION("TIMERSERVER_CONTEXT") static volatile uint8_t PreviousRunningTimerID;
+PLACE_IN_SECTION("TIMERSERVER_CONTEXT") static volatile uint32_t SSRValueOnLastSetup;
+PLACE_IN_SECTION("TIMERSERVER_CONTEXT") static volatile WakeupTimerLimitation_Status_t WakeupTimerLimitation;
+
+/**
+ * END of Section TIMERSERVER_CONTEXT
+ */
+
+static RTC_HandleTypeDef *phrtc; /**< RTC handle */
+static uint8_t WakeupTimerDivider;
+static uint8_t AsynchPrescalerUserConfig;
+static uint16_t SynchPrescalerUserConfig;
+static volatile uint16_t MaxWakeupTimerSetup;
+
+/* Global variables ----------------------------------------------------------*/
+/* Private function prototypes -----------------------------------------------*/
+static void RestartWakeupCounter(uint16_t Value);
+static uint16_t ReturnTimeElapsed(void);
+static void RescheduleTimerList(void);
+static void UnlinkTimer(uint8_t TimerID, RequestReadSSR_t RequestReadSSR);
+static void LinkTimerBefore(uint8_t TimerID, uint8_t RefTimerID);
+static void LinkTimerAfter(uint8_t TimerID, uint8_t RefTimerID);
+static uint16_t linkTimer(uint8_t TimerID);
+static uint32_t ReadRtcSsrValue(void);
+
+__weak void HW_TS_RTC_CountUpdated_AppNot(void);
+
+/* Functions Definition ------------------------------------------------------*/
+
+/**
+ * @brief Read the RTC_SSR value
+ * As described in the reference manual, the RTC_SSR shall be read twice to ensure
+ * reliability of the value
+ * @param None
+ * @retval SSR value read
+ */
+static uint32_t ReadRtcSsrValue(void)
+{
+ uint32_t first_read;
+ uint32_t second_read;
+
+ first_read = (uint32_t)(READ_BIT(RTC->SSR, RTC_SSR_SS));
+
+ second_read = (uint32_t)(READ_BIT(RTC->SSR, RTC_SSR_SS));
+
+ while(first_read != second_read)
+ {
+ first_read = second_read;
+
+ second_read = (uint32_t)(READ_BIT(RTC->SSR, RTC_SSR_SS));
+ }
+
+ return second_read;
+}
+
+/**
+ * @brief Insert a Timer in the list after the Timer ID specified
+ * @param TimerID: The ID of the Timer
+ * @param RefTimerID: The ID of the Timer to be linked after
+ * @retval None
+ */
+static void LinkTimerAfter(uint8_t TimerID, uint8_t RefTimerID)
+{
+ uint8_t next_id;
+
+ next_id = aTimerContext[RefTimerID].NextID;
+
+ if(next_id != CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER)
+ {
+ aTimerContext[next_id].PreviousID = TimerID;
+ }
+ aTimerContext[TimerID].NextID = next_id;
+ aTimerContext[TimerID].PreviousID = RefTimerID ;
+ aTimerContext[RefTimerID].NextID = TimerID;
+
+ return;
+}
+
+/**
+ * @brief Insert a Timer in the list before the ID specified
+ * @param TimerID: The ID of the Timer
+ * @param RefTimerID: The ID of the Timer to be linked before
+ * @retval None
+ */
+static void LinkTimerBefore(uint8_t TimerID, uint8_t RefTimerID)
+{
+ uint8_t previous_id;
+
+ if(RefTimerID != CurrentRunningTimerID)
+ {
+ previous_id = aTimerContext[RefTimerID].PreviousID;
+
+ aTimerContext[previous_id].NextID = TimerID;
+ aTimerContext[TimerID].NextID = RefTimerID;
+ aTimerContext[TimerID].PreviousID = previous_id ;
+ aTimerContext[RefTimerID].PreviousID = TimerID;
+ }
+ else
+ {
+ aTimerContext[TimerID].NextID = RefTimerID;
+ aTimerContext[RefTimerID].PreviousID = TimerID;
+ }
+
+ return;
+}
+
+/**
+ * @brief Insert a Timer in the list
+ * @param TimerID: The ID of the Timer
+ * @retval None
+ */
+static uint16_t linkTimer(uint8_t TimerID)
+{
+ uint32_t time_left;
+ uint16_t time_elapsed;
+ uint8_t timer_id_lookup;
+ uint8_t next_id;
+
+ if(CurrentRunningTimerID == CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER)
+ {
+ /**
+ * No timer in the list
+ */
+ PreviousRunningTimerID = CurrentRunningTimerID;
+ CurrentRunningTimerID = TimerID;
+ aTimerContext[TimerID].NextID = CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER;
+
+ SSRValueOnLastSetup = SSR_FORBIDDEN_VALUE;
+ time_elapsed = 0;
+ }
+ else
+ {
+ time_elapsed = ReturnTimeElapsed();
+
+ /**
+ * update count of the timer to be linked
+ */
+ aTimerContext[TimerID].CountLeft += time_elapsed;
+ time_left = aTimerContext[TimerID].CountLeft;
+
+ /**
+ * Search for index where the new timer shall be linked
+ */
+ if(aTimerContext[CurrentRunningTimerID].CountLeft <= time_left)
+ {
+ /**
+ * Search for the ID after the first one
+ */
+ timer_id_lookup = CurrentRunningTimerID;
+ next_id = aTimerContext[timer_id_lookup].NextID;
+ while((next_id != CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER) && (aTimerContext[next_id].CountLeft <= time_left))
+ {
+ timer_id_lookup = aTimerContext[timer_id_lookup].NextID;
+ next_id = aTimerContext[timer_id_lookup].NextID;
+ }
+
+ /**
+ * Link after the ID
+ */
+ LinkTimerAfter(TimerID, timer_id_lookup);
+ }
+ else
+ {
+ /**
+ * Link before the first ID
+ */
+ LinkTimerBefore(TimerID, CurrentRunningTimerID);
+ PreviousRunningTimerID = CurrentRunningTimerID;
+ CurrentRunningTimerID = TimerID;
+ }
+ }
+
+ return time_elapsed;
+}
+
+/**
+ * @brief Remove a Timer from the list
+ * @param TimerID: The ID of the Timer
+ * @param RequestReadSSR: Request to read the SSR register or not
+ * @retval None
+ */
+static void UnlinkTimer(uint8_t TimerID, RequestReadSSR_t RequestReadSSR)
+{
+ uint8_t previous_id;
+ uint8_t next_id;
+
+ if(TimerID == CurrentRunningTimerID)
+ {
+ PreviousRunningTimerID = CurrentRunningTimerID;
+ CurrentRunningTimerID = aTimerContext[TimerID].NextID;
+ }
+ else
+ {
+ previous_id = aTimerContext[TimerID].PreviousID;
+ next_id = aTimerContext[TimerID].NextID;
+
+ aTimerContext[previous_id].NextID = aTimerContext[TimerID].NextID;
+ if(next_id != CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER)
+ {
+ aTimerContext[next_id].PreviousID = aTimerContext[TimerID].PreviousID;
+ }
+ }
+
+ /**
+ * Timer is out of the list
+ */
+ aTimerContext[TimerID].TimerIDStatus = TimerID_Created;
+
+ if((CurrentRunningTimerID == CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER) && (RequestReadSSR == SSR_Read_Requested))
+ {
+ SSRValueOnLastSetup = SSR_FORBIDDEN_VALUE;
+ }
+
+ return;
+}
+
+/**
+ * @brief Return the number of ticks counted by the wakeuptimer since it has been started
+ * @note The API is reading the SSR register to get how many ticks have been counted
+ * since the time the timer has been started
+ * @param None
+ * @retval Time expired in Ticks
+ */
+static uint16_t ReturnTimeElapsed(void)
+{
+ uint32_t return_value;
+ uint32_t wrap_counter;
+
+ if(SSRValueOnLastSetup != SSR_FORBIDDEN_VALUE)
+ {
+ return_value = ReadRtcSsrValue(); /**< Read SSR register first */
+
+ if (SSRValueOnLastSetup >= return_value)
+ {
+ return_value = SSRValueOnLastSetup - return_value;
+ }
+ else
+ {
+ wrap_counter = SynchPrescalerUserConfig - return_value;
+ return_value = SSRValueOnLastSetup + wrap_counter;
+ }
+
+ /**
+ * At this stage, ReturnValue holds the number of ticks counted by SSR
+ * Need to translate in number of ticks counted by the Wakeuptimer
+ */
+ return_value = return_value*AsynchPrescalerUserConfig;
+ return_value = return_value >> WakeupTimerDivider;
+ }
+ else
+ {
+ return_value = 0;
+ }
+
+ return (uint16_t)return_value;
+}
+
+/**
+ * @brief Set the wakeup counter
+ * @note The API is writing the counter value so that the value is decreased by one to cope with the fact
+ * the interrupt is generated with 1 extra clock cycle (See RefManuel)
+ * It assumes all condition are met to be allowed to write the wakeup counter
+ * @param Value: Value to be written in the counter
+ * @retval None
+ */
+static void RestartWakeupCounter(uint16_t Value)
+{
+ /**
+ * The wakeuptimer has been disabled in the calling function to reduce the time to poll the WUTWF
+ * FLAG when the new value will have to be written
+ * __HAL_RTC_WAKEUPTIMER_DISABLE(phrtc);
+ */
+
+ if(Value == 0)
+ {
+ SSRValueOnLastSetup = ReadRtcSsrValue();
+
+ /**
+ * Simulate that the Timer expired
+ */
+ HAL_NVIC_SetPendingIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID);
+ }
+ else
+ {
+ if((Value > 1) ||(WakeupTimerDivider != 1))
+ {
+ Value -= 1;
+ }
+
+ while(__HAL_RTC_WAKEUPTIMER_GET_FLAG(phrtc, RTC_FLAG_WUTWF) == RESET);
+
+ /**
+ * make sure to clear the flags after checking the WUTWF.
+ * It takes 2 RTCCLK between the time the WUTE bit is disabled and the
+ * time the timer is disabled. The WUTWF bit somehow guarantee the system is stable
+ * Otherwise, when the timer is periodic with 1 Tick, it may generate an extra interrupt in between
+ * due to the autoreload feature
+ */
+ __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(phrtc, RTC_FLAG_WUTF); /**< Clear flag in RTC module */
+ __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG(); /**< Clear flag in EXTI module */
+ HAL_NVIC_ClearPendingIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Clear pending bit in NVIC */
+
+ MODIFY_REG(RTC->WUTR, RTC_WUTR_WUT, Value);
+
+ /**
+ * Update the value here after the WUTWF polling that may take some time
+ */
+ SSRValueOnLastSetup = ReadRtcSsrValue();
+
+ __HAL_RTC_WAKEUPTIMER_ENABLE(phrtc); /**< Enable the Wakeup Timer */
+
+ HW_TS_RTC_CountUpdated_AppNot();
+ }
+
+ return ;
+}
+
+/**
+ * @brief Reschedule the list of timer
+ * @note 1) Update the count left for each timer in the list
+ * 2) Setup the wakeuptimer
+ * @param None
+ * @retval None
+ */
+static void RescheduleTimerList(void)
+{
+ uint8_t localTimerID;
+ uint32_t timecountleft;
+ uint16_t wakeup_timer_value;
+ uint16_t time_elapsed;
+
+ /**
+ * The wakeuptimer is disabled now to reduce the time to poll the WUTWF
+ * FLAG when the new value will have to be written
+ */
+ if((READ_BIT(RTC->CR, RTC_CR_WUTE) == (RTC_CR_WUTE)) == SET)
+ {
+ /**
+ * Wait for the flag to be back to 0 when the wakeup timer is enabled
+ */
+ while(__HAL_RTC_WAKEUPTIMER_GET_FLAG(phrtc, RTC_FLAG_WUTWF) == SET);
+ }
+ __HAL_RTC_WAKEUPTIMER_DISABLE(phrtc); /**< Disable the Wakeup Timer */
+
+ localTimerID = CurrentRunningTimerID;
+
+ /**
+ * Calculate what will be the value to write in the wakeuptimer
+ */
+ timecountleft = aTimerContext[localTimerID].CountLeft;
+
+ /**
+ * Read how much has been counted
+ */
+ time_elapsed = ReturnTimeElapsed();
+
+ if(timecountleft < time_elapsed )
+ {
+ /**
+ * There is no tick left to count
+ */
+ wakeup_timer_value = 0;
+ WakeupTimerLimitation = WakeupTimerValue_LargeEnough;
+ }
+ else
+ {
+ if(timecountleft > (time_elapsed + MaxWakeupTimerSetup))
+ {
+ /**
+ * The number of tick left is greater than the Wakeuptimer maximum value
+ */
+ wakeup_timer_value = MaxWakeupTimerSetup;
+
+ WakeupTimerLimitation = WakeupTimerValue_Overpassed;
+ }
+ else
+ {
+ wakeup_timer_value = timecountleft - time_elapsed;
+ WakeupTimerLimitation = WakeupTimerValue_LargeEnough;
+ }
+
+ }
+
+ /**
+ * update ticks left to be counted for each timer
+ */
+ while(localTimerID != CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER)
+ {
+ if (aTimerContext[localTimerID].CountLeft < time_elapsed)
+ {
+ aTimerContext[localTimerID].CountLeft = 0;
+ }
+ else
+ {
+ aTimerContext[localTimerID].CountLeft -= time_elapsed;
+ }
+ localTimerID = aTimerContext[localTimerID].NextID;
+ }
+
+ /**
+ * Write next count
+ */
+ RestartWakeupCounter(wakeup_timer_value);
+
+ return ;
+}
+
+/* Public functions ----------------------------------------------------------*/
+
+/**
+ * For all public interface except that may need write access to the RTC, the RTC
+ * shall be unlock at the beginning and locked at the output
+ * In order to ease maintainability, the unlock is done at the top and the lock at then end
+ * in case some new implementation is coming in the future
+ */
+
+void HW_TS_RTC_Wakeup_Handler(void)
+{
+ HW_TS_pTimerCb_t ptimer_callback;
+ uint32_t timer_process_id;
+ uint8_t local_current_running_timer_id;
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ uint32_t primask_bit;
+#endif
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ primask_bit = __get_PRIMASK(); /**< backup PRIMASK bit */
+ __disable_irq(); /**< Disable all interrupts by setting PRIMASK bit on Cortex*/
+#endif
+
+/* Disable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_DISABLE( phrtc );
+
+ /**
+ * Disable the Wakeup Timer
+ * This may speed up a bit the processing to wait the timer to be disabled
+ * The timer is still counting 2 RTCCLK
+ */
+ __HAL_RTC_WAKEUPTIMER_DISABLE(phrtc);
+
+ local_current_running_timer_id = CurrentRunningTimerID;
+
+ if(aTimerContext[local_current_running_timer_id].TimerIDStatus == TimerID_Running)
+ {
+ ptimer_callback = aTimerContext[local_current_running_timer_id].pTimerCallBack;
+ timer_process_id = aTimerContext[local_current_running_timer_id].TimerProcessID;
+
+ /**
+ * It should be good to check whether the TimeElapsed is greater or not than the tick left to be counted
+ * However, due to the inaccuracy of the reading of the time elapsed, it may return there is 1 tick
+ * to be left whereas the count is over
+ * A more secure implementation has been done with a flag to state whereas the full count has been written
+ * in the wakeuptimer or not
+ */
+ if(WakeupTimerLimitation != WakeupTimerValue_Overpassed)
+ {
+ if(aTimerContext[local_current_running_timer_id].TimerMode == hw_ts_Repeated)
+ {
+ UnlinkTimer(local_current_running_timer_id, SSR_Read_Not_Requested);
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+ HW_TS_Start(local_current_running_timer_id, aTimerContext[local_current_running_timer_id].CounterInit);
+
+ /* Disable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_DISABLE( phrtc );
+ }
+ else
+ {
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+ HW_TS_Stop(local_current_running_timer_id);
+
+ /* Disable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_DISABLE( phrtc );
+ }
+
+ HW_TS_RTC_Int_AppNot(timer_process_id, local_current_running_timer_id, ptimer_callback);
+ }
+ else
+ {
+ RescheduleTimerList();
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+ }
+ }
+ else
+ {
+ /**
+ * We should never end up in this case
+ * However, if due to any bug in the timer server this is the case, the mistake may not impact the user.
+ * We could just clean the interrupt flag and get out from this unexpected interrupt
+ */
+ while(__HAL_RTC_WAKEUPTIMER_GET_FLAG(phrtc, RTC_FLAG_WUTWF) == RESET);
+
+ /**
+ * make sure to clear the flags after checking the WUTWF.
+ * It takes 2 RTCCLK between the time the WUTE bit is disabled and the
+ * time the timer is disabled. The WUTWF bit somehow guarantee the system is stable
+ * Otherwise, when the timer is periodic with 1 Tick, it may generate an extra interrupt in between
+ * due to the autoreload feature
+ */
+ __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(phrtc, RTC_FLAG_WUTF); /**< Clear flag in RTC module */
+ __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG(); /**< Clear flag in EXTI module */
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+ }
+
+ /* Enable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_ENABLE( phrtc );
+
+ return;
+}
+
+void HW_TS_Init(HW_TS_InitMode_t TimerInitMode, RTC_HandleTypeDef *hrtc)
+{
+ uint8_t loop;
+ uint32_t localmaxwakeuptimersetup;
+
+ /**
+ * Get RTC handler
+ */
+ phrtc = hrtc;
+
+ /* Disable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_DISABLE( phrtc );
+
+ SET_BIT(RTC->CR, RTC_CR_BYPSHAD);
+
+ /**
+ * Readout the user config
+ */
+ WakeupTimerDivider = (4 - ((uint32_t)(READ_BIT(RTC->CR, RTC_CR_WUCKSEL))));
+
+ AsynchPrescalerUserConfig = (uint8_t)(READ_BIT(RTC->PRER, RTC_PRER_PREDIV_A) >> (uint32_t)POSITION_VAL(RTC_PRER_PREDIV_A)) + 1;
+
+ SynchPrescalerUserConfig = (uint16_t)(READ_BIT(RTC->PRER, RTC_PRER_PREDIV_S)) + 1;
+
+ /**
+ * Margin is taken to avoid wrong calculation when the wrap around is there and some
+ * application interrupts may have delayed the reading
+ */
+ localmaxwakeuptimersetup = ((((SynchPrescalerUserConfig - 1)*AsynchPrescalerUserConfig) - CFG_HW_TS_RTC_HANDLER_MAX_DELAY) >> WakeupTimerDivider);
+
+ if(localmaxwakeuptimersetup >= 0xFFFF)
+ {
+ MaxWakeupTimerSetup = 0xFFFF;
+ }
+ else
+ {
+ MaxWakeupTimerSetup = (uint16_t)localmaxwakeuptimersetup;
+ }
+
+ /**
+ * Configure EXTI module
+ */
+ LL_EXTI_EnableRisingTrig_0_31(RTC_EXTI_LINE_WAKEUPTIMER_EVENT);
+ LL_EXTI_EnableIT_0_31(RTC_EXTI_LINE_WAKEUPTIMER_EVENT);
+
+ if(TimerInitMode == hw_ts_InitMode_Full)
+ {
+ WakeupTimerLimitation = WakeupTimerValue_LargeEnough;
+ SSRValueOnLastSetup = SSR_FORBIDDEN_VALUE;
+
+ /**
+ * Initialize the timer server
+ */
+ for(loop = 0; loop < CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER; loop++)
+ {
+ aTimerContext[loop].TimerIDStatus = TimerID_Free;
+ }
+
+ CurrentRunningTimerID = CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER; /**< Set ID to non valid value */
+
+ __HAL_RTC_WAKEUPTIMER_DISABLE(phrtc); /**< Disable the Wakeup Timer */
+ __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(phrtc, RTC_FLAG_WUTF); /**< Clear flag in RTC module */
+ __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG(); /**< Clear flag in EXTI module */
+ HAL_NVIC_ClearPendingIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Clear pending bit in NVIC */
+ __HAL_RTC_WAKEUPTIMER_ENABLE_IT(phrtc, RTC_IT_WUT); /**< Enable interrupt in RTC module */
+ }
+ else
+ {
+ if(__HAL_RTC_WAKEUPTIMER_GET_FLAG(phrtc, RTC_FLAG_WUTF) != RESET)
+ {
+ /**
+ * Simulate that the Timer expired
+ */
+ HAL_NVIC_SetPendingIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID);
+ }
+ }
+
+ /* Enable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_ENABLE( phrtc );
+
+ HAL_NVIC_SetPriority(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID, CFG_HW_TS_NVIC_RTC_WAKEUP_IT_PREEMPTPRIO, CFG_HW_TS_NVIC_RTC_WAKEUP_IT_SUBPRIO); /**< Set NVIC priority */
+ HAL_NVIC_EnableIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Enable NVIC */
+
+ return;
+}
+
+HW_TS_ReturnStatus_t HW_TS_Create(uint32_t TimerProcessID, uint8_t *pTimerId, HW_TS_Mode_t TimerMode, HW_TS_pTimerCb_t pftimeout_handler)
+{
+ HW_TS_ReturnStatus_t localreturnstatus;
+ uint8_t loop = 0;
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ uint32_t primask_bit;
+#endif
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ primask_bit = __get_PRIMASK(); /**< backup PRIMASK bit */
+ __disable_irq(); /**< Disable all interrupts by setting PRIMASK bit on Cortex*/
+#endif
+
+ while((loop < CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER) && (aTimerContext[loop].TimerIDStatus != TimerID_Free))
+ {
+ loop++;
+ }
+
+ if(loop != CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER)
+ {
+ aTimerContext[loop].TimerIDStatus = TimerID_Created;
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+
+ aTimerContext[loop].TimerProcessID = TimerProcessID;
+ aTimerContext[loop].TimerMode = TimerMode;
+ aTimerContext[loop].pTimerCallBack = pftimeout_handler;
+ *pTimerId = loop;
+
+ localreturnstatus = hw_ts_Successful;
+ }
+ else
+ {
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+
+ localreturnstatus = hw_ts_Failed;
+ }
+
+ return(localreturnstatus);
+}
+
+void HW_TS_Delete(uint8_t timer_id)
+{
+ HW_TS_Stop(timer_id);
+
+ aTimerContext[timer_id].TimerIDStatus = TimerID_Free; /**< release ID */
+
+ return;
+}
+
+void HW_TS_Stop(uint8_t timer_id)
+{
+ uint8_t localcurrentrunningtimerid;
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ uint32_t primask_bit;
+#endif
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ primask_bit = __get_PRIMASK(); /**< backup PRIMASK bit */
+ __disable_irq(); /**< Disable all interrupts by setting PRIMASK bit on Cortex*/
+#endif
+
+ HAL_NVIC_DisableIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Disable NVIC */
+
+ /* Disable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_DISABLE( phrtc );
+
+ if(aTimerContext[timer_id].TimerIDStatus == TimerID_Running)
+ {
+ UnlinkTimer(timer_id, SSR_Read_Requested);
+ localcurrentrunningtimerid = CurrentRunningTimerID;
+
+ if(localcurrentrunningtimerid == CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER)
+ {
+ /**
+ * List is empty
+ */
+
+ /**
+ * Disable the timer
+ */
+ if((READ_BIT(RTC->CR, RTC_CR_WUTE) == (RTC_CR_WUTE)) == SET)
+ {
+ /**
+ * Wait for the flag to be back to 0 when the wakeup timer is enabled
+ */
+ while(__HAL_RTC_WAKEUPTIMER_GET_FLAG(phrtc, RTC_FLAG_WUTWF) == SET);
+ }
+ __HAL_RTC_WAKEUPTIMER_DISABLE(phrtc); /**< Disable the Wakeup Timer */
+
+ while(__HAL_RTC_WAKEUPTIMER_GET_FLAG(phrtc, RTC_FLAG_WUTWF) == RESET);
+
+ /**
+ * make sure to clear the flags after checking the WUTWF.
+ * It takes 2 RTCCLK between the time the WUTE bit is disabled and the
+ * time the timer is disabled. The WUTWF bit somehow guarantee the system is stable
+ * Otherwise, when the timer is periodic with 1 Tick, it may generate an extra interrupt in between
+ * due to the autoreload feature
+ */
+ __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(phrtc, RTC_FLAG_WUTF); /**< Clear flag in RTC module */
+ __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG(); /**< Clear flag in EXTI module */
+ HAL_NVIC_ClearPendingIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Clear pending bit in NVIC */
+ }
+ else if(PreviousRunningTimerID != localcurrentrunningtimerid)
+ {
+ RescheduleTimerList();
+ }
+ }
+
+ /* Enable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_ENABLE( phrtc );
+
+ HAL_NVIC_EnableIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Enable NVIC */
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+
+ return;
+}
+
+void HW_TS_Start(uint8_t timer_id, uint32_t timeout_ticks)
+{
+ uint16_t time_elapsed;
+ uint8_t localcurrentrunningtimerid;
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ uint32_t primask_bit;
+#endif
+
+ if(aTimerContext[timer_id].TimerIDStatus == TimerID_Running)
+ {
+ HW_TS_Stop( timer_id );
+ }
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ primask_bit = __get_PRIMASK(); /**< backup PRIMASK bit */
+ __disable_irq(); /**< Disable all interrupts by setting PRIMASK bit on Cortex*/
+#endif
+
+ HAL_NVIC_DisableIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Disable NVIC */
+
+ /* Disable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_DISABLE( phrtc );
+
+ aTimerContext[timer_id].TimerIDStatus = TimerID_Running;
+
+ aTimerContext[timer_id].CountLeft = timeout_ticks;
+ aTimerContext[timer_id].CounterInit = timeout_ticks;
+
+ time_elapsed = linkTimer(timer_id);
+
+ localcurrentrunningtimerid = CurrentRunningTimerID;
+
+ if(PreviousRunningTimerID != localcurrentrunningtimerid)
+ {
+ RescheduleTimerList();
+ }
+ else
+ {
+ aTimerContext[timer_id].CountLeft -= time_elapsed;
+ }
+
+ /* Enable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_ENABLE( phrtc );
+
+ HAL_NVIC_EnableIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Enable NVIC */
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+
+ return;
+}
+
+uint16_t HW_TS_RTC_ReadLeftTicksToCount(void)
+{
+ uint32_t primask_bit;
+ uint16_t return_value, auro_reload_value, elapsed_time_value;
+
+ primask_bit = __get_PRIMASK(); /**< backup PRIMASK bit */
+ __disable_irq(); /**< Disable all interrupts by setting PRIMASK bit on Cortex*/
+
+ if((READ_BIT(RTC->CR, RTC_CR_WUTE) == (RTC_CR_WUTE)) == SET)
+ {
+ auro_reload_value = (uint32_t)(READ_BIT(RTC->WUTR, RTC_WUTR_WUT));
+
+ elapsed_time_value = ReturnTimeElapsed();
+
+ if(auro_reload_value > elapsed_time_value)
+ {
+ return_value = auro_reload_value - elapsed_time_value;
+ }
+ else
+ {
+ return_value = 0;
+ }
+ }
+ else
+ {
+ return_value = TIMER_LIST_EMPTY;
+ }
+
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+
+ return (return_value);
+}
+
+__weak void HW_TS_RTC_Int_AppNot(uint32_t TimerProcessID, uint8_t TimerID, HW_TS_pTimerCb_t pTimerCallBack)
+{
+ pTimerCallBack();
+
+ return;
+}
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/hw_uart.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/hw_uart.c
new file mode 100644
index 000000000..6ae6ff9f9
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/hw_uart.c
@@ -0,0 +1,320 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : Src/hw_uart.c
+ * Description : HW UART source file for STM32WPAN Middleware.
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "app_common.h"
+#include "hw_conf.h"
+#if (CFG_HW_LPUART1_ENABLED == 1)
+extern UART_HandleTypeDef hlpuart1;
+#endif
+#if (CFG_HW_USART1_ENABLED == 1)
+extern UART_HandleTypeDef huart1;
+#endif
+
+/* Macros --------------------------------------------------------------------*/
+#define HW_UART_RX_IT(__HANDLE__, __USART_BASE__) \
+ do{ \
+ HW_##__HANDLE__##RxCb = cb; \
+ (__HANDLE__).Instance = (__USART_BASE__); \
+ HAL_UART_Receive_IT(&(__HANDLE__), p_data, size); \
+ } while(0)
+
+#define HW_UART_TX_IT(__HANDLE__, __USART_BASE__) \
+ do{ \
+ HW_##__HANDLE__##TxCb = cb; \
+ (__HANDLE__).Instance = (__USART_BASE__); \
+ HAL_UART_Transmit_IT(&(__HANDLE__), p_data, size); \
+ } while(0)
+
+#define HW_UART_TX(__HANDLE__, __USART_BASE__) \
+ do{ \
+ (__HANDLE__).Instance = (__USART_BASE__); \
+ hal_status = HAL_UART_Transmit(&(__HANDLE__), p_data, size, timeout); \
+ } while(0)
+
+/* Variables -----------------------------------------------------------------*/
+#if (CFG_HW_USART1_ENABLED == 1)
+#if (CFG_HW_USART1_DMA_TX_SUPPORTED == 1)
+ DMA_HandleTypeDef HW_hdma_huart1_tx ={0};
+#endif
+ void (*HW_huart1RxCb)(void);
+ void (*HW_huart1TxCb)(void);
+#endif
+
+#if (CFG_HW_LPUART1_ENABLED == 1)
+#if (CFG_HW_LPUART1_DMA_TX_SUPPORTED == 1)
+ DMA_HandleTypeDef HW_hdma_hlpuart1_tx ={0};
+#endif
+ void (*HW_hlpuart1RxCb)(void);
+ void (*HW_hlpuart1TxCb)(void);
+#endif
+
+void HW_UART_Receive_IT(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, void (*cb)(void))
+{
+ switch (hw_uart_id)
+ {
+#if (CFG_HW_USART1_ENABLED == 1)
+ case hw_uart1:
+ HW_UART_RX_IT(huart1, USART1);
+ break;
+#endif
+
+#if (CFG_HW_LPUART1_ENABLED == 1)
+ case hw_lpuart1:
+ HW_UART_RX_IT(hlpuart1, LPUART1);
+ break;
+#endif
+
+ default:
+ break;
+ }
+
+ return;
+}
+
+void HW_UART_Transmit_IT(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, void (*cb)(void))
+{
+ switch (hw_uart_id)
+ {
+#if (CFG_HW_USART1_ENABLED == 1)
+ case hw_uart1:
+ HW_UART_TX_IT(huart1, USART1);
+ break;
+#endif
+
+#if (CFG_HW_LPUART1_ENABLED == 1)
+ case hw_lpuart1:
+ HW_UART_TX_IT(hlpuart1, LPUART1);
+ break;
+#endif
+
+ default:
+ break;
+ }
+
+ return;
+}
+
+hw_status_t HW_UART_Transmit(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, uint32_t timeout)
+{
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ hw_status_t hw_status = hw_uart_ok;
+
+ switch (hw_uart_id)
+ {
+#if (CFG_HW_USART1_ENABLED == 1)
+ case hw_uart1:
+ HW_UART_TX(huart1, USART1);
+ break;
+#endif
+
+#if (CFG_HW_LPUART1_ENABLED == 1)
+ case hw_lpuart1:
+ HW_UART_TX(hlpuart1, LPUART1);
+ break;
+#endif
+
+ default:
+ break;
+ }
+
+ switch (hal_status)
+ {
+ case HAL_OK:
+ hw_status = hw_uart_ok;
+ break;
+
+ case HAL_ERROR:
+ hw_status = hw_uart_error;
+ break;
+
+ case HAL_BUSY:
+ hw_status = hw_uart_busy;
+ break;
+
+ case HAL_TIMEOUT:
+ hw_status = hw_uart_to;
+ break;
+
+ default:
+ break;
+ }
+
+ return hw_status;
+}
+
+hw_status_t HW_UART_Transmit_DMA(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, void (*cb)(void))
+{
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ hw_status_t hw_status = hw_uart_ok;
+
+ switch (hw_uart_id)
+ {
+#if (CFG_HW_USART1_ENABLED == 1)
+ case hw_uart1:
+ HW_huart1TxCb = cb;
+ huart1.Instance = USART1;
+ hal_status = HAL_UART_Transmit_DMA(&huart1, p_data, size);
+ break;
+#endif
+
+#if (CFG_HW_LPUART1_ENABLED == 1)
+ case hw_lpuart1:
+ HW_hlpuart1TxCb = cb;
+ hlpuart1.Instance = LPUART1;
+ hal_status = HAL_UART_Transmit_DMA(&hlpuart1, p_data, size);
+ break;
+#endif
+
+ default:
+ break;
+ }
+
+ switch (hal_status)
+ {
+ case HAL_OK:
+ hw_status = hw_uart_ok;
+ break;
+
+ case HAL_ERROR:
+ hw_status = hw_uart_error;
+ break;
+
+ case HAL_BUSY:
+ hw_status = hw_uart_busy;
+ break;
+
+ case HAL_TIMEOUT:
+ hw_status = hw_uart_to;
+ break;
+
+ default:
+ break;
+ }
+
+ return hw_status;
+}
+
+void HW_UART_Interrupt_Handler(hw_uart_id_t hw_uart_id)
+{
+ switch (hw_uart_id)
+ {
+#if (CFG_HW_USART1_ENABLED == 1)
+ case hw_uart1:
+ HAL_UART_IRQHandler(&huart1);
+ break;
+#endif
+
+#if (CFG_HW_LPUART1_ENABLED == 1)
+ case hw_lpuart1:
+ HAL_UART_IRQHandler(&hlpuart1);
+ break;
+#endif
+
+ default:
+ break;
+ }
+
+ return;
+}
+
+void HW_UART_DMA_Interrupt_Handler(hw_uart_id_t hw_uart_id)
+{
+ switch (hw_uart_id)
+ {
+#if (CFG_HW_USART1_DMA_TX_SUPPORTED == 1)
+ case hw_uart1:
+ HAL_DMA_IRQHandler(huart1.hdmatx);
+ break;
+#endif
+
+#if (CFG_HW_LPUART1_DMA_TX_SUPPORTED == 1)
+ case hw_lpuart1:
+ HAL_DMA_IRQHandler(hlpuart1.hdmatx);
+ break;
+#endif
+
+ default:
+ break;
+ }
+
+ return;
+}
+
+void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
+{
+ switch ((uint32_t)huart->Instance)
+ {
+#if (CFG_HW_USART1_ENABLED == 1)
+ case (uint32_t)USART1:
+ if(HW_huart1RxCb)
+ {
+ HW_huart1RxCb();
+ }
+ break;
+#endif
+
+#if (CFG_HW_LPUART1_ENABLED == 1)
+ case (uint32_t)LPUART1:
+ if(HW_hlpuart1RxCb)
+ {
+ HW_hlpuart1RxCb();
+ }
+ break;
+#endif
+
+ default:
+ break;
+ }
+
+ return;
+}
+
+void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
+{
+ switch ((uint32_t)huart->Instance)
+ {
+#if (CFG_HW_USART1_ENABLED == 1)
+ case (uint32_t)USART1:
+ if(HW_huart1TxCb)
+ {
+ HW_huart1TxCb();
+ }
+ break;
+#endif
+
+#if (CFG_HW_LPUART1_ENABLED == 1)
+ case (uint32_t)LPUART1:
+ if(HW_hlpuart1TxCb)
+ {
+ HW_hlpuart1TxCb();
+ }
+ break;
+#endif
+
+ default:
+ break;
+ }
+
+ return;
+}
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/main.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/main.c
new file mode 100644
index 000000000..a402eab1b
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/main.c
@@ -0,0 +1,750 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * @file : main.c
+ * @brief : Main program body
+ *
+ @verbatim
+ ==============================================================================
+ ##### IMPORTANT NOTE #####
+ ==============================================================================
+
+ This application requests having the stm32wb5x_Zigbee_fw.bin binary
+ flashed on the Wireless Coprocessor.
+ If it is not the case, you need to use STM32CubeProgrammer to load the appropriate
+ binary.
+
+ All available binaries are located under following directory:
+ /Projects/STM32_Copro_Wireless_Binaries
+
+ Refer to UM2237 to learn how to use/install STM32CubeProgrammer.
+ Refer to /Projects/STM32_Copro_Wireless_Binaries/ReleaseNote.html for the
+ detailed procedure to change the Wireless Coprocessor binary.
+
+ @endverbatim
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+
+/* Private includes ----------------------------------------------------------*/
+/* USER CODE BEGIN Includes */
+
+#include "dbg_trace.h"
+#include "hw_conf.h"
+#include "otp.h"
+#include "cmsis_os.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 ---------------------------------------------------------*/
+IPCC_HandleTypeDef hipcc;
+
+UART_HandleTypeDef hlpuart1;
+UART_HandleTypeDef huart1;
+DMA_HandleTypeDef hdma_lpuart1_tx;
+DMA_HandleTypeDef hdma_usart1_tx;
+
+RTC_HandleTypeDef hrtc;
+
+osThreadId_t defaultTaskId;
+osThreadId_t OsTaskInitId;
+
+const osThreadAttr_t defaultTask_attributes = {
+ .name = "defaultTask",
+ .priority = (osPriority_t) osPriorityNormal,
+ .stack_size = 1024 * 4
+};
+
+/* FreeRtos stacks attributes */
+const osThreadAttr_t TaskInit_attributes = {
+ .name = CFG_TASK_INIT_PROCESS_NAME,
+ .attr_bits = CFG_TASK_PROCESS_ATTR_BITS,
+ .cb_mem = CFG_TASK_PROCESS_CB_MEM,
+ .cb_size = CFG_TASK_PROCESS_CB_SIZE,
+ .stack_mem = CFG_TASK_PROCESS_STACK_MEM,
+ .priority = osPriorityNormal, /* osPriorityLow */
+ .stack_size = CFG_TASK_PROCESS_STACK_SIZE
+};
+
+/* USER CODE BEGIN PV */
+
+/* USER CODE END PV */
+
+/* Private function prototypes -----------------------------------------------*/
+void SystemClock_Config(void);
+static void MX_GPIO_Init(void);
+static void MX_DMA_Init(void);
+static void MX_RF_Init(void);
+static void MX_RTC_Init(void);
+static void MX_IPCC_Init(void);
+/* USER CODE BEGIN PFP */
+
+void PeriphClock_Config(void);
+static void Reset_Device(void);
+static void Reset_IPCC(void);
+static void Reset_BackupDomain(void);
+static void Init_Exti(void);
+static void Config_HSE(void);
+static void StartDefaultTask(void *argument);
+static void TaskInit(void *argument);
+
+/* 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 */
+
+ /**
+ * The OPTVERR flag is wrongly set at power on
+ * It shall be cleared before using any HAL_FLASH_xxx() api
+ */
+ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);
+
+ /* USER CODE END 1 */
+
+ /* MCU Configuration--------------------------------------------------------*/
+
+ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
+ HAL_Init();
+
+ /* USER CODE BEGIN Init */
+
+ Reset_Device();
+ Config_HSE();
+
+ /* USER CODE END Init */
+
+ /* Configure the system clock */
+ SystemClock_Config();
+
+ /* IPCC initialisation */
+ MX_IPCC_Init();
+
+ /* USER CODE BEGIN SysInit */
+ PeriphClock_Config();
+ Init_Exti(); /**< Configure the system Power Mode */
+ /* USER CODE END SysInit */
+
+ /* Initialize all configured peripherals */
+ MX_GPIO_Init();
+ MX_DMA_Init();
+ MX_RF_Init();
+ MX_RTC_Init();
+ /* USER CODE BEGIN 2 */
+
+ /* USER CODE END 2 */
+ /* Init scheduler */
+ osKernelInitialize();
+
+ /* USER CODE BEGIN RTOS_MUTEX */
+ /* add mutexes, ... */
+ /* USER CODE END RTOS_MUTEX */
+
+ /* USER CODE BEGIN RTOS_SEMAPHORES */
+ /* add semaphores, ... */
+ /* USER CODE END RTOS_SEMAPHORES */
+
+ /* USER CODE BEGIN RTOS_TIMERS */
+ /* start timers, add new ones, ... */
+ /* USER CODE END RTOS_TIMERS */
+
+ /* USER CODE BEGIN RTOS_QUEUES */
+ /* add queues, ... */
+ /* USER CODE END RTOS_QUEUES */
+
+ /* Create the thread(s) */
+ /* creation of defaultTask */
+
+ OsTaskInitId = osThreadNew(TaskInit, NULL,&TaskInit_attributes);
+ defaultTaskId = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
+
+ /* Start scheduler */
+ osKernelStart();
+
+ /* We should never get here as control is now taken by the scheduler */
+
+ /* Infinite loop */
+ /* USER CODE BEGIN WHILE */
+ while (1)
+ {
+
+ /* 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};
+ RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
+
+ /** Configure LSE Drive Capability
+ */
+ HAL_PWR_EnableBkUpAccess();
+ __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
+ /** Configure the main internal regulator output voltage
+ */
+ __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
+ /** Initializes the RCC Oscillators according to the specified parameters
+ * in the RCC_OscInitTypeDef structure.
+ */
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSE
+ |RCC_OSCILLATORTYPE_LSE;
+ RCC_OscInitStruct.HSEState = RCC_HSE_ON;
+ RCC_OscInitStruct.LSEState = RCC_LSE_ON;
+ RCC_OscInitStruct.HSIState = RCC_HSI_ON;
+ RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
+ RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
+ if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers
+ */
+ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK4|RCC_CLOCKTYPE_HCLK2
+ |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
+ |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
+ RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSE;
+ RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
+ RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
+ RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
+ RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;
+ RCC_ClkInitStruct.AHBCLK4Divider = RCC_SYSCLK_DIV1;
+
+ if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /** Initializes the peripherals clocks
+ */
+ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SMPS|RCC_PERIPHCLK_RFWAKEUP
+ |RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_USART1
+ |RCC_PERIPHCLK_LPUART1;
+ PeriphClkInitStruct.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
+ PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_PCLK1;
+ PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
+ PeriphClkInitStruct.RFWakeUpClockSelection = RCC_RFWKPCLKSOURCE_LSE;
+ PeriphClkInitStruct.SmpsClockSelection = RCC_SMPSCLKSOURCE_HSE;
+ PeriphClkInitStruct.SmpsDivSelection = RCC_SMPSCLKDIV_RANGE0;
+ if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN Smps */
+
+ /* USER CODE END Smps */
+}
+
+/**
+ * @brief IPCC Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_IPCC_Init(void)
+{
+
+ /* USER CODE BEGIN IPCC_Init 0 */
+
+ /* USER CODE END IPCC_Init 0 */
+
+ /* USER CODE BEGIN IPCC_Init 1 */
+
+ /* USER CODE END IPCC_Init 1 */
+ hipcc.Instance = IPCC;
+ if (HAL_IPCC_Init(&hipcc) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN IPCC_Init 2 */
+
+ /* USER CODE END IPCC_Init 2 */
+
+}
+
+/**
+ * @brief LPUART1 Initialization Function
+ * @param None
+ * @retval None
+ */
+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 */
+
+}
+
+/**
+ * @brief USART1 Initialization Function
+ * @param None
+ * @retval None
+ */
+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_8;
+ 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 */
+
+ /* USER CODE END USART1_Init 2 */
+
+}
+
+/**
+ * @brief RF Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_RF_Init(void)
+{
+
+ /* USER CODE BEGIN RF_Init 0 */
+
+ /* USER CODE END RF_Init 0 */
+
+ /* USER CODE BEGIN RF_Init 1 */
+
+ /* USER CODE END RF_Init 1 */
+ /* USER CODE BEGIN RF_Init 2 */
+
+ /* USER CODE END RF_Init 2 */
+
+}
+
+/**
+ * @brief RTC Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_RTC_Init(void)
+{
+
+ /* USER CODE BEGIN RTC_Init 0 */
+
+ /* USER CODE END RTC_Init 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 = CFG_RTC_ASYNCH_PRESCALER;
+ hrtc.Init.SynchPrediv = CFG_RTC_SYNCH_PRESCALER;
+ hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
+ hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
+ hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
+ hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
+ if (HAL_RTC_Init(&hrtc) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN RTC_Init 2 */
+
+ /* USER CODE END RTC_Init 2 */
+
+}
+
+/**
+ * Enable DMA controller clock
+ */
+static void MX_DMA_Init(void)
+{
+
+ /* DMA controller clock enable */
+ __HAL_RCC_DMAMUX1_CLK_ENABLE();
+ __HAL_RCC_DMA1_CLK_ENABLE();
+
+ /* DMA interrupt init */
+ /* DMA1_Channel1_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
+ /* DMA1_Channel2_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(DMA1_Channel2_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(DMA1_Channel2_IRQn);
+
+}
+
+/**
+ * @brief GPIO Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_GPIO_Init(void)
+{
+
+ /* GPIO Ports Clock Enable */
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+
+}
+
+/* USER CODE BEGIN 4 */
+void PeriphClock_Config(void)
+{
+ #if (CFG_USB_INTERFACE_ENABLE != 0)
+ RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = { 0 };
+ RCC_CRSInitTypeDef RCC_CRSInitStruct = { 0 };
+
+ /**
+ * This prevents the CPU2 to disable the HSI48 oscillator when
+ * it does not use anymore the RNG IP
+ */
+ LL_HSEM_1StepLock( HSEM, 5 );
+
+ LL_RCC_HSI48_Enable();
+
+ while(!LL_RCC_HSI48_IsReady());
+
+ /* Select HSI48 as USB clock source */
+ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB;
+ PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
+ HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
+
+ /*Configure the clock recovery system (CRS)**********************************/
+
+ /* Enable CRS Clock */
+ __HAL_RCC_CRS_CLK_ENABLE();
+
+ /* Default Synchro Signal division factor (not divided) */
+ RCC_CRSInitStruct.Prescaler = RCC_CRS_SYNC_DIV1;
+
+ /* Set the SYNCSRC[1:0] bits according to CRS_Source value */
+ RCC_CRSInitStruct.Source = RCC_CRS_SYNC_SOURCE_USB;
+
+ /* HSI48 is synchronized with USB SOF at 1KHz rate */
+ RCC_CRSInitStruct.ReloadValue = RCC_CRS_RELOADVALUE_DEFAULT;
+ RCC_CRSInitStruct.ErrorLimitValue = RCC_CRS_ERRORLIMIT_DEFAULT;
+
+ RCC_CRSInitStruct.Polarity = RCC_CRS_SYNC_POLARITY_RISING;
+
+ /* Set the TRIM[5:0] to the default value*/
+ RCC_CRSInitStruct.HSI48CalibrationValue = RCC_CRS_HSI48CALIBRATION_DEFAULT;
+
+ /* Start automatic synchronization */
+ HAL_RCCEx_CRSConfig(&RCC_CRSInitStruct);
+#endif
+
+ return;
+}
+
+/*************************************************************
+ *
+ * LOCAL FUNCTIONS
+ *
+ *************************************************************/
+
+static void Config_HSE(void)
+{
+ OTP_ID0_t * p_otp;
+
+ /**
+ * Read HSE_Tuning from OTP
+ */
+ p_otp = (OTP_ID0_t *) OTP_Read(0);
+ if (p_otp)
+ {
+ LL_RCC_HSE_SetCapacitorTuning(p_otp->hse_tuning);
+ }
+
+ return;
+}
+
+
+static void Reset_Device( void )
+{
+#if ( CFG_HW_RESET_BY_FW == 1 )
+ Reset_BackupDomain();
+
+ Reset_IPCC();
+#endif
+
+ return;
+}
+
+static void Reset_IPCC( void )
+{
+ LL_AHB3_GRP1_EnableClock(LL_AHB3_GRP1_PERIPH_IPCC);
+
+ LL_C1_IPCC_ClearFlag_CHx(
+ IPCC,
+ LL_IPCC_CHANNEL_1 | LL_IPCC_CHANNEL_2 | LL_IPCC_CHANNEL_3 | LL_IPCC_CHANNEL_4
+ | LL_IPCC_CHANNEL_5 | LL_IPCC_CHANNEL_6);
+
+ LL_C2_IPCC_ClearFlag_CHx(
+ IPCC,
+ LL_IPCC_CHANNEL_1 | LL_IPCC_CHANNEL_2 | LL_IPCC_CHANNEL_3 | LL_IPCC_CHANNEL_4
+ | LL_IPCC_CHANNEL_5 | LL_IPCC_CHANNEL_6);
+
+ LL_C1_IPCC_DisableTransmitChannel(
+ IPCC,
+ LL_IPCC_CHANNEL_1 | LL_IPCC_CHANNEL_2 | LL_IPCC_CHANNEL_3 | LL_IPCC_CHANNEL_4
+ | LL_IPCC_CHANNEL_5 | LL_IPCC_CHANNEL_6);
+
+ LL_C2_IPCC_DisableTransmitChannel(
+ IPCC,
+ LL_IPCC_CHANNEL_1 | LL_IPCC_CHANNEL_2 | LL_IPCC_CHANNEL_3 | LL_IPCC_CHANNEL_4
+ | LL_IPCC_CHANNEL_5 | LL_IPCC_CHANNEL_6);
+
+ LL_C1_IPCC_DisableReceiveChannel(
+ IPCC,
+ LL_IPCC_CHANNEL_1 | LL_IPCC_CHANNEL_2 | LL_IPCC_CHANNEL_3 | LL_IPCC_CHANNEL_4
+ | LL_IPCC_CHANNEL_5 | LL_IPCC_CHANNEL_6);
+
+ LL_C2_IPCC_DisableReceiveChannel(
+ IPCC,
+ LL_IPCC_CHANNEL_1 | LL_IPCC_CHANNEL_2 | LL_IPCC_CHANNEL_3 | LL_IPCC_CHANNEL_4
+ | LL_IPCC_CHANNEL_5 | LL_IPCC_CHANNEL_6);
+
+ return;
+}
+
+static void Reset_BackupDomain( void )
+{
+ if ((LL_RCC_IsActiveFlag_PINRST() != FALSE) && (LL_RCC_IsActiveFlag_SFTRST() == FALSE))
+ {
+ HAL_PWR_EnableBkUpAccess(); /**< Enable access to the RTC registers */
+
+ /**
+ * Write twice the value to flush the APB-AHB bridge
+ * This bit shall be written in the register before writing the next one
+ */
+ HAL_PWR_EnableBkUpAccess();
+
+ __HAL_RCC_BACKUPRESET_FORCE();
+ __HAL_RCC_BACKUPRESET_RELEASE();
+ }
+
+ return;
+}
+
+static void Init_Exti( void )
+{
+ /**< Disable all wakeup interrupt on CPU1 except LPUART(25), IPCC(36), HSEM(38) */
+ LL_EXTI_DisableIT_0_31( (~0) & (~(LL_EXTI_LINE_25)) );
+ LL_EXTI_DisableIT_32_63( (~0) & (~(LL_EXTI_LINE_36 | LL_EXTI_LINE_38)) );
+
+ return;
+}
+
+/*************************************************************
+ *
+ * WRAP FUNCTIONS
+ *
+ *************************************************************/
+
+
+static void TaskInit(void *argument)
+{
+ /* This task will manage the CPU2 initialization and will get terminated after it is done */
+ APPE_Init();
+ osThreadTerminate(OsTaskInitId);
+ /* All job done */
+}
+
+
+static void StartDefaultTask(void *argument)
+{
+ for(;;)
+ {
+ osThreadFlagsWait(1,osFlagsWaitAll,osWaitForever);
+ /* Put your own code here */
+ }
+}
+
+void HAL_Delay(uint32_t Delay)
+{
+ uint32_t tickstart = HAL_GetTick();
+ uint32_t wait = Delay;
+
+ /* Add a freq to guarantee minimum wait */
+ if (wait < HAL_MAX_DELAY)
+ {
+ wait += HAL_GetTickFreq();
+ }
+
+ while ((HAL_GetTick() - tickstart) < wait)
+ {
+ /************************************************************************************
+ * ENTER SLEEP MODE
+ ***********************************************************************************/
+ LL_LPM_EnableSleep( ); /**< Clear SLEEPDEEP bit of Cortex System Control Register */
+
+ /**
+ * This option is used to ensure that store operations are completed
+ */
+ #if defined ( __CC_ARM)
+ __force_stores();
+ #endif
+
+ __WFI( );
+ }
+}
+
+/**
+ * @brief Period elapsed callback in non blocking mode
+ * @note This function is called when TIM17 interrupt took place, inside
+ * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
+ * a global variable "uwTick" used as application time base.
+ * @param htim : TIM handle
+ * @retval None
+ */
+void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
+{
+ /* USER CODE BEGIN Callback 0 */
+
+ /* USER CODE END Callback 0 */
+ if (htim->Instance == TIM17) {
+ HAL_IncTick();
+ }
+ /* USER CODE BEGIN Callback 1 */
+
+ /* USER CODE END Callback 1 */
+}
+
+/* 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 */
+
+ /* 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,
+ tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
+ /* USER CODE END 6 */
+}
+#endif /* USE_FULL_ASSERT */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm32_lpm_if.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm32_lpm_if.c
new file mode 100644
index 000000000..ba034f27e
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm32_lpm_if.c
@@ -0,0 +1,295 @@
+/* USER CODE BEGIN Header */
+/**
+ ***************************************************************************************
+ * File Name : stm32_lpm_if.c
+ * Description : Low layer function to enter/exit low power modes (stop, sleep).
+ ***************************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32_lpm_if.h"
+#include "stm32_lpm.h"
+#include "app_conf.h"
+/* USER CODE BEGIN include */
+
+/* USER CODE END include */
+
+/* Exported variables --------------------------------------------------------*/
+const struct UTIL_LPM_Driver_s UTIL_PowerDriver =
+{
+ PWR_EnterSleepMode,
+ PWR_ExitSleepMode,
+
+ PWR_EnterStopMode,
+ PWR_ExitStopMode,
+
+ PWR_EnterOffMode,
+ PWR_ExitOffMode,
+};
+
+/* Private function prototypes -----------------------------------------------*/
+static void Switch_On_HSI( void );
+/* USER CODE BEGIN Private_Function_Prototypes */
+
+/* USER CODE END Private_Function_Prototypes */
+/* Private typedef -----------------------------------------------------------*/
+/* USER CODE BEGIN Private_Typedef */
+
+/* USER CODE END Private_Typedef */
+/* Private define ------------------------------------------------------------*/
+/* USER CODE BEGIN Private_Define */
+
+/* USER CODE END Private_Define */
+/* Private macro -------------------------------------------------------------*/
+/* USER CODE BEGIN Private_Macro */
+
+/* USER CODE END Private_Macro */
+/* Private variables ---------------------------------------------------------*/
+/* USER CODE BEGIN Private_Variables */
+
+/* USER CODE END Private_Variables */
+
+/* Functions Definition ------------------------------------------------------*/
+/**
+ * @brief Enters Low Power Off Mode
+ * @param none
+ * @retval none
+ */
+void PWR_EnterOffMode( void )
+{
+/* USER CODE BEGIN PWR_EnterOffMode */
+
+ /**
+ * The systick should be disabled for the same reason than when the device enters stop mode because
+ * at this time, the device may enter either OffMode or StopMode.
+ */
+ HAL_SuspendTick();
+
+ /************************************************************************************
+ * ENTER OFF MODE
+ ***********************************************************************************/
+ /*
+ * There is no risk to clear all the WUF here because in the current implementation, this API is called
+ * in critical section. If an interrupt occurs while in that critical section before that point,
+ * the flag is set and will be cleared here but the system will not enter Off Mode
+ * because an interrupt is pending in the NVIC. The ISR will be executed when moving out
+ * of this critical section
+ */
+ LL_PWR_ClearFlag_WU( );
+
+ LL_PWR_SetPowerMode( LL_PWR_MODE_STANDBY );
+
+ LL_LPM_EnableDeepSleep( ); /**< Set SLEEPDEEP bit of Cortex System Control Register */
+
+ /**
+ * This option is used to ensure that store operations are completed
+ */
+#if defined ( __CC_ARM)
+ __force_stores( );
+#endif
+
+ __WFI( );
+/* USER CODE END PWR_EnterOffMode */
+}
+
+/**
+ * @brief Exits Low Power Off Mode
+ * @param none
+ * @retval none
+ */
+void PWR_ExitOffMode( void )
+{
+/* USER CODE BEGIN PWR_ExitOffMode */
+
+ HAL_ResumeTick();
+
+/* USER CODE END PWR_ExitOffMode */
+}
+
+/**
+ * @brief Enters Low Power Stop Mode
+ * @note ARM exists the function when waking up
+ * @param none
+ * @retval none
+ */
+void PWR_EnterStopMode( void )
+{
+/* USER CODE BEGIN PWR_EnterStopMode */
+ /**
+ * When HAL_DBGMCU_EnableDBGStopMode() is called to keep the debugger active in Stop Mode,
+ * the systick shall be disabled otherwise the cpu may crash when moving out from stop mode
+ *
+ * When in production, the HAL_DBGMCU_EnableDBGStopMode() is not called so that the device can reach best power consumption
+ * However, the systick should be disabled anyway to avoid the case when it is about to expire at the same time the device enters
+ * stop mode ( this will abort the Stop Mode entry ).
+ */
+ HAL_SuspendTick();
+
+ /**
+ * This function is called from CRITICAL SECTION
+ */
+ while( LL_HSEM_1StepLock( HSEM, CFG_HW_RCC_SEMID ) );
+
+ if ( ! LL_HSEM_1StepLock( HSEM, CFG_HW_ENTRY_STOP_MODE_SEMID ) )
+ {
+ if( LL_PWR_IsActiveFlag_C2DS( ) )
+ {
+ /* Release ENTRY_STOP_MODE semaphore */
+ LL_HSEM_ReleaseLock( HSEM, CFG_HW_ENTRY_STOP_MODE_SEMID, 0 );
+
+ /**
+ * The switch on HSI before entering Stop Mode is required
+ */
+ Switch_On_HSI( );
+ }
+ }
+ else
+ {
+ /**
+ * The switch on HSI before entering Stop Mode is required
+ */
+ Switch_On_HSI( );
+ }
+
+ /* Release RCC semaphore */
+ LL_HSEM_ReleaseLock( HSEM, CFG_HW_RCC_SEMID, 0 );
+
+ /************************************************************************************
+ * ENTER STOP MODE
+ ***********************************************************************************/
+ LL_PWR_SetPowerMode( LL_PWR_MODE_STOP2 );
+
+ LL_LPM_EnableDeepSleep( ); /**< Set SLEEPDEEP bit of Cortex System Control Register */
+
+ /**
+ * This option is used to ensure that store operations are completed
+ */
+#if defined ( __CC_ARM)
+ __force_stores( );
+#endif
+
+ __WFI();
+/* USER CODE END PWR_EnterStopMode */
+}
+
+/**
+ * @brief Exits Low Power Stop Mode
+ * @note Enable the pll at 32MHz
+ * @param none
+ * @retval none
+ */
+void PWR_ExitStopMode( void )
+{
+/* USER CODE BEGIN PWR_ExitStopMode */
+ /**
+ * This function is called from CRITICAL SECTION
+ */
+
+ /* Release ENTRY_STOP_MODE semaphore */
+ LL_HSEM_ReleaseLock( HSEM, CFG_HW_ENTRY_STOP_MODE_SEMID, 0 );
+
+ while( LL_HSEM_1StepLock( HSEM, CFG_HW_RCC_SEMID ) );
+
+ if(LL_RCC_GetSysClkSource( ) == LL_RCC_SYS_CLKSOURCE_STATUS_HSI)
+ {
+ LL_RCC_HSE_Enable( );
+ while(!LL_RCC_HSE_IsReady( ));
+ LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSE);
+ while (LL_RCC_GetSysClkSource( ) != LL_RCC_SYS_CLKSOURCE_STATUS_HSE);
+ }
+ else
+ {
+ /**
+ * As long as the current application is fine with HSE as system clock source,
+ * there is nothing to do here
+ */
+ }
+
+ /* Release RCC semaphore */
+ LL_HSEM_ReleaseLock( HSEM, CFG_HW_RCC_SEMID, 0 );
+
+ HAL_ResumeTick();
+
+/* USER CODE END PWR_ExitStopMode */
+}
+
+/**
+ * @brief Enters Low Power Sleep Mode
+ * @note ARM exits the function when waking up
+ * @param none
+ * @retval none
+ */
+void PWR_EnterSleepMode( void )
+{
+/* USER CODE BEGIN PWR_EnterSleepMode */
+
+ HAL_SuspendTick();
+
+ /************************************************************************************
+ * ENTER SLEEP MODE
+ ***********************************************************************************/
+ LL_LPM_EnableSleep( ); /**< Clear SLEEPDEEP bit of Cortex System Control Register */
+
+ /**
+ * This option is used to ensure that store operations are completed
+ */
+#if defined ( __CC_ARM)
+ __force_stores();
+#endif
+
+ __WFI( );
+/* USER CODE END PWR_EnterSleepMode */
+}
+
+/**
+ * @brief Exits Low Power Sleep Mode
+ * @note ARM exits the function when waking up
+ * @param none
+ * @retval none
+ */
+void PWR_ExitSleepMode( void )
+{
+/* USER CODE BEGIN PWR_ExitSleepMode */
+
+ HAL_ResumeTick();
+
+/* USER CODE END PWR_ExitSleepMode */
+}
+
+/*************************************************************
+ *
+ * LOCAL FUNCTIONS
+ *
+ *************************************************************/
+/**
+ * @brief Switch the system clock on HSI
+ * @param none
+ * @retval none
+ */
+static void Switch_On_HSI( void )
+{
+ LL_RCC_HSI_Enable( );
+ while(!LL_RCC_HSI_IsReady( ));
+ LL_RCC_SetSysClkSource( LL_RCC_SYS_CLKSOURCE_HSI );
+ LL_RCC_SetSMPSClockSource(LL_RCC_SMPS_CLKSOURCE_HSI);
+ while (LL_RCC_GetSysClkSource( ) != LL_RCC_SYS_CLKSOURCE_STATUS_HSI);
+}
+
+/* USER CODE BEGIN Private_Functions */
+
+/* USER CODE END Private_Functions */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm32wbxx_hal_msp.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm32wbxx_hal_msp.c
new file mode 100644
index 000000000..a0fe542c9
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm32wbxx_hal_msp.c
@@ -0,0 +1,391 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : stm32wbxx_hal_msp.c
+ * Description : This file provides code for the MSP Initialization
+ * and de-Initialization codes.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+/* USER CODE BEGIN Includes */
+#include "app_conf.h"
+/* USER CODE END Includes */
+extern DMA_HandleTypeDef hdma_lpuart1_tx;
+
+extern DMA_HandleTypeDef hdma_usart1_tx;
+
+/* 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_HSEM_CLK_ENABLE();
+
+ /* System interrupt init*/
+ /* PendSV_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);
+
+ /* Peripheral interrupt init */
+ /* PVD_PVM_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(PVD_PVM_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(PVD_PVM_IRQn);
+ /* FLASH_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(FLASH_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(FLASH_IRQn);
+ /* RCC_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(RCC_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(RCC_IRQn);
+ /* C2SEV_PWR_C2H_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(C2SEV_PWR_C2H_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(C2SEV_PWR_C2H_IRQn);
+ /* PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQn);
+ /* HSEM_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(HSEM_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(HSEM_IRQn);
+ /* FPU_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(FPU_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(FPU_IRQn);
+
+ /* USER CODE BEGIN MspInit 1 */
+
+ /* USER CODE END MspInit 1 */
+}
+
+/**
+* @brief IPCC MSP Initialization
+* This function configures the hardware resources used in this example
+* @param hipcc: IPCC handle pointer
+* @retval None
+*/
+void HAL_IPCC_MspInit(IPCC_HandleTypeDef* hipcc)
+{
+ if(hipcc->Instance==IPCC)
+ {
+ /* USER CODE BEGIN IPCC_MspInit 0 */
+
+ /* USER CODE END IPCC_MspInit 0 */
+ /* Peripheral clock enable */
+ __HAL_RCC_IPCC_CLK_ENABLE();
+ /* IPCC interrupt Init */
+ HAL_NVIC_SetPriority(IPCC_C1_RX_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(IPCC_C1_RX_IRQn);
+ HAL_NVIC_SetPriority(IPCC_C1_TX_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(IPCC_C1_TX_IRQn);
+ /* USER CODE BEGIN IPCC_MspInit 1 */
+
+ /* USER CODE END IPCC_MspInit 1 */
+ }
+
+}
+
+/**
+* @brief IPCC MSP De-Initialization
+* This function freeze the hardware resources used in this example
+* @param hipcc: IPCC handle pointer
+* @retval None
+*/
+void HAL_IPCC_MspDeInit(IPCC_HandleTypeDef* hipcc)
+{
+ if(hipcc->Instance==IPCC)
+ {
+ /* USER CODE BEGIN IPCC_MspDeInit 0 */
+
+ /* USER CODE END IPCC_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_IPCC_CLK_DISABLE();
+
+ /* IPCC interrupt DeInit */
+ HAL_NVIC_DisableIRQ(IPCC_C1_RX_IRQn);
+ HAL_NVIC_DisableIRQ(IPCC_C1_TX_IRQn);
+ /* USER CODE BEGIN IPCC_MspDeInit 1 */
+
+ /* USER CODE END IPCC_MspDeInit 1 */
+ }
+
+}
+
+/**
+* @brief UART MSP Initialization
+* This function configures the hardware resources used in this example
+* @param huart: UART handle pointer
+* @retval None
+*/
+void HAL_UART_MspInit(UART_HandleTypeDef* huart)
+{
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(huart->Instance==LPUART1)
+ {
+ /* USER CODE BEGIN LPUART1_MspInit 0 */
+
+ /* USER CODE END LPUART1_MspInit 0 */
+ /* Peripheral clock enable */
+ __HAL_RCC_LPUART1_CLK_ENABLE();
+
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ /**LPUART1 GPIO Configuration
+ PA2 ------> LPUART1_TX
+ PA3 ------> LPUART1_RX
+ */
+ GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
+ 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(GPIOA, &GPIO_InitStruct);
+
+ /* LPUART1 DMA Init */
+ /* LPUART1_TX Init */
+ hdma_lpuart1_tx.Instance = DMA1_Channel1;
+ hdma_lpuart1_tx.Init.Request = DMA_REQUEST_LPUART1_TX;
+ hdma_lpuart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
+ hdma_lpuart1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
+ hdma_lpuart1_tx.Init.MemInc = DMA_MINC_ENABLE;
+ hdma_lpuart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
+ hdma_lpuart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
+ hdma_lpuart1_tx.Init.Mode = DMA_NORMAL;
+ hdma_lpuart1_tx.Init.Priority = DMA_PRIORITY_LOW;
+ if (HAL_DMA_Init(&hdma_lpuart1_tx) != HAL_OK)
+ {
+ Error_Handler();
+ }
+
+ __HAL_LINKDMA(huart,hdmatx,hdma_lpuart1_tx);
+
+ /* LPUART1 interrupt Init */
+ HAL_NVIC_SetPriority(LPUART1_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(LPUART1_IRQn);
+ /* USER CODE BEGIN LPUART1_MspInit 1 */
+
+ /* USER CODE END LPUART1_MspInit 1 */
+ }
+ else if(huart->Instance==USART1)
+ {
+ /* USER CODE BEGIN USART1_MspInit 0 */
+
+ /* USER CODE END USART1_MspInit 0 */
+ /* Peripheral clock enable */
+ __HAL_RCC_USART1_CLK_ENABLE();
+
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ /**USART1 GPIO Configuration
+ PA11 ------> USART1_CTS
+ PB6 ------> USART1_TX
+ PB7 ------> USART1_RX
+ */
+ GPIO_InitStruct.Pin = GPIO_PIN_11;
+ 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(GPIOA, &GPIO_InitStruct);
+
+ GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
+ 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(GPIOB, &GPIO_InitStruct);
+
+ /* USART1 DMA Init */
+ /* USART1_TX Init */
+ hdma_usart1_tx.Instance = DMA1_Channel2;
+ hdma_usart1_tx.Init.Request = DMA_REQUEST_USART1_TX;
+ hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
+ hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
+ hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE;
+ hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
+ hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
+ hdma_usart1_tx.Init.Mode = DMA_NORMAL;
+ hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW;
+ if (HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK)
+ {
+ Error_Handler();
+ }
+
+ __HAL_LINKDMA(huart,hdmatx,hdma_usart1_tx);
+
+ /* USART1 interrupt Init */
+ HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(USART1_IRQn);
+ /* USER CODE BEGIN USART1_MspInit 1 */
+
+ /* USER CODE END USART1_MspInit 1 */
+ }
+
+}
+
+/**
+* @brief UART MSP De-Initialization
+* This function freeze the hardware resources used in this example
+* @param huart: UART handle pointer
+* @retval None
+*/
+void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
+{
+ if(huart->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
+ PA2 ------> LPUART1_TX
+ PA3 ------> LPUART1_RX
+ */
+ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3);
+
+ /* LPUART1 DMA DeInit */
+ HAL_DMA_DeInit(huart->hdmatx);
+
+ /* LPUART1 interrupt DeInit */
+ HAL_NVIC_DisableIRQ(LPUART1_IRQn);
+ /* USER CODE BEGIN LPUART1_MspDeInit 1 */
+
+ /* USER CODE END LPUART1_MspDeInit 1 */
+ }
+ else if(huart->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
+ PA11 ------> USART1_CTS
+ PB6 ------> USART1_TX
+ PB7 ------> USART1_RX
+ */
+ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11);
+
+ HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_7);
+
+ /* USART1 DMA DeInit */
+ HAL_DMA_DeInit(huart->hdmatx);
+
+ /* USART1 interrupt DeInit */
+ HAL_NVIC_DisableIRQ(USART1_IRQn);
+ /* USER CODE BEGIN USART1_MspDeInit 1 */
+
+ /* USER CODE END USART1_MspDeInit 1 */
+ }
+
+}
+
+/**
+* @brief RTC MSP Initialization
+* This function configures the hardware resources used in this example
+* @param hrtc: RTC handle pointer
+* @retval None
+*/
+void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc)
+{
+ if(hrtc->Instance==RTC)
+ {
+ /* USER CODE BEGIN RTC_MspInit 0 */
+ HAL_PWR_EnableBkUpAccess(); /**< Enable access to the RTC registers */
+
+ /**
+ * Write twice the value to flush the APB-AHB bridge
+ * This bit shall be written in the register before writing the next one
+ */
+ HAL_PWR_EnableBkUpAccess();
+
+ __HAL_RCC_RTC_CONFIG(RCC_RTCCLKSOURCE_LSE); /**< Select LSE as RTC Input */
+
+ /* USER CODE END RTC_MspInit 0 */
+ /* Peripheral clock enable */
+ __HAL_RCC_RTC_ENABLE();
+ __HAL_RCC_RTCAPB_CLK_ENABLE();
+ /* USER CODE BEGIN RTC_MspInit 1 */
+
+ MODIFY_REG(RTC->CR, RTC_CR_WUCKSEL, CFG_RTC_WUCKSEL_DIVIDER);
+ /* USER CODE END RTC_MspInit 1 */
+ }
+
+}
+
+/**
+* @brief RTC MSP De-Initialization
+* This function freeze the hardware resources used in this example
+* @param hrtc: RTC handle pointer
+* @retval None
+*/
+void HAL_RTC_MspDeInit(RTC_HandleTypeDef* hrtc)
+{
+ if(hrtc->Instance==RTC)
+ {
+ /* USER CODE BEGIN RTC_MspDeInit 0 */
+
+ /* USER CODE END RTC_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_RTC_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 */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm32wbxx_hal_timebase_tim.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm32wbxx_hal_timebase_tim.c
new file mode 100644
index 000000000..6a2ad51f8
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm32wbxx_hal_timebase_tim.c
@@ -0,0 +1,149 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * @file stm32g0xx_hal_timebase_tim.c
+ * @author MCD Application Team
+ * @brief HAL time base based on the hardware TIM.
+ *
+ * This file overrides the native HAL time base functions (defined as weak)
+ * the TIM time base:
+ * + Intializes the TIM peripheral to generate a Period elapsed Event each 1ms
+ * + HAL_IncTick is called inside HAL_TIM_PeriodElapsedCallback ie each 1ms
+ *
+ @verbatim
+ ==============================================================================
+ ##### How to use this driver #####
+ ==============================================================================
+ [..]
+ This file must be copied to the application folder and modified as follows:
+ (#) Rename it to 'stm32g0xx_hal_timebase_tim.c'
+ (#) Add this file and the TIM HAL driver files to your project and make sure
+ HAL_TIM_MODULE_ENABLED is defined in stm32l4xx_hal_conf.h
+
+ [..]
+ (@) The application needs to ensure that the time base is always set to 1 millisecond
+ to have correct HAL operation.
+
+ @endverbatim
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; COPYRIGHT(c) 2019 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions 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 its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32wbxx_hal.h"
+#include "stm32wbxx_hal_tim.h"
+
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+TIM_HandleTypeDef htim17;
+/* Private function prototypes -----------------------------------------------*/
+/* Private functions ---------------------------------------------------------*/
+
+/**
+ * @brief This function configures the TIM17 as a time base source.
+ * The time source is configured to have 1ms time base with a dedicated
+ * Tick interrupt priority.
+ * @note This function is called automatically at the beginning of program after
+ * reset by HAL_Init() or at any time when clock is configured, by HAL_RCC_ClockConfig().
+ * @param TickPriority: Tick interrupt priority.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
+{
+ RCC_ClkInitTypeDef clkconfig;
+ uint32_t uwTimclock = 0;
+ uint32_t uwPrescalerValue = 0;
+ uint32_t pFLatency;
+ /*Configure the TIM17 IRQ priority */
+ HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM17_IRQn, TickPriority ,0);
+
+ /* Enable the TIM17 global Interrupt */
+ HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM17_IRQn);
+ /* Enable TIM17 clock */
+ __HAL_RCC_TIM17_CLK_ENABLE();
+
+ /* Get clock configuration */
+ HAL_RCC_GetClockConfig(&clkconfig, &pFLatency);
+
+ /* Compute TIM17 clock */
+ uwTimclock = HAL_RCC_GetPCLK2Freq();
+ /* Compute the prescaler value to have TIM17 counter clock equal to 1MHz */
+ uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000U) - 1U);
+
+ /* Initialize TIM17 */
+ htim17.Instance = TIM17;
+
+ /* Initialize TIMx peripheral as follow:
+ + Period = [(TIM17CLK/1000) - 1]. to have a (1/1000) s time base.
+ + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock.
+ + ClockDivision = 0
+ + Counter direction = Up
+ */
+ htim17.Init.Period = (1000000U / 1000U) - 1U;
+ htim17.Init.Prescaler = uwPrescalerValue;
+ htim17.Init.ClockDivision = 0;
+ htim17.Init.CounterMode = TIM_COUNTERMODE_UP;
+ if(HAL_TIM_Base_Init(&htim17) == HAL_OK)
+ {
+ /* Start the TIM time Base generation in interrupt mode */
+ return HAL_TIM_Base_Start_IT(&htim17);
+ }
+
+ /* Return function status */
+ return HAL_ERROR;
+}
+
+/**
+ * @brief Suspend Tick increment.
+ * @note Disable the tick increment by disabling TIM17 update interrupt.
+ * @param None
+ * @retval None
+ */
+void HAL_SuspendTick(void)
+{
+ /* Disable TIM17 update Interrupt */
+ __HAL_TIM_DISABLE_IT(&htim17, TIM_IT_UPDATE);
+}
+
+/**
+ * @brief Resume Tick increment.
+ * @note Enable the tick increment by Enabling TIM17 update interrupt.
+ * @param None
+ * @retval None
+ */
+void HAL_ResumeTick(void)
+{
+ /* Enable TIM17 Update interrupt */
+ __HAL_TIM_ENABLE_IT(&htim17, TIM_IT_UPDATE);
+}
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm32wbxx_it.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm32wbxx_it.c
new file mode 100644
index 000000000..b7f474aa8
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm32wbxx_it.c
@@ -0,0 +1,396 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * @file stm32wbxx_it.c
+ * @brief Interrupt Service Routines.
+ *******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+#include "stm32wbxx_it.h"
+/* Private includes ----------------------------------------------------------*/
+/* USER CODE BEGIN Includes */
+#include "hw.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 IPCC_HandleTypeDef hipcc;
+extern DMA_HandleTypeDef hdma_lpuart1_tx;
+extern DMA_HandleTypeDef hdma_usart1_tx;
+extern UART_HandleTypeDef hlpuart1;
+extern UART_HandleTypeDef huart1;
+extern TIM_HandleTypeDef htim17;
+/* 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 */
+
+ /* 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 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 */
+}
+
+/******************************************************************************/
+/* STM32WBxx 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_stm32wbxx.s). */
+/******************************************************************************/
+
+/**
+ * @brief This function handles PVD/PVM0/PVM2 interrupts through EXTI lines 16/31/33.
+ */
+void PVD_PVM_IRQHandler(void)
+{
+ /* USER CODE BEGIN PVD_PVM_IRQn 0 */
+
+ /* USER CODE END PVD_PVM_IRQn 0 */
+ HAL_PWREx_PVD_PVM_IRQHandler();
+ /* USER CODE BEGIN PVD_PVM_IRQn 1 */
+
+ /* USER CODE END PVD_PVM_IRQn 1 */
+}
+
+/**
+ * @brief This function handles Flash global interrupt.
+ */
+void FLASH_IRQHandler(void)
+{
+ /* USER CODE BEGIN FLASH_IRQn 0 */
+
+ /* USER CODE END FLASH_IRQn 0 */
+ HAL_FLASH_IRQHandler();
+ /* USER CODE BEGIN FLASH_IRQn 1 */
+
+ /* USER CODE END FLASH_IRQn 1 */
+}
+
+/**
+ * @brief This function handles RCC global interrupt.
+ */
+void RCC_IRQHandler(void)
+{
+ /* USER CODE BEGIN RCC_IRQn 0 */
+
+ /* USER CODE END RCC_IRQn 0 */
+ /* USER CODE BEGIN RCC_IRQn 1 */
+
+ /* USER CODE END RCC_IRQn 1 */
+}
+
+/**
+ * @brief This function handles DMA1 channel1 global interrupt.
+ */
+void DMA1_Channel1_IRQHandler(void)
+{
+ /* USER CODE BEGIN DMA1_Channel1_IRQn 0 */
+
+ /* USER CODE END DMA1_Channel1_IRQn 0 */
+ HAL_DMA_IRQHandler(&hdma_lpuart1_tx);
+ /* USER CODE BEGIN DMA1_Channel1_IRQn 1 */
+
+ /* USER CODE END DMA1_Channel1_IRQn 1 */
+}
+
+/**
+ * @brief This function handles DMA1 channel2 global interrupt.
+ */
+void DMA1_Channel2_IRQHandler(void)
+{
+ /* USER CODE BEGIN DMA1_Channel2_IRQn 0 */
+
+ /* USER CODE END DMA1_Channel2_IRQn 0 */
+ HAL_DMA_IRQHandler(&hdma_usart1_tx);
+ /* USER CODE BEGIN DMA1_Channel2_IRQn 1 */
+
+ /* USER CODE END DMA1_Channel2_IRQn 1 */
+}
+
+/**
+ * @brief This function handles CPU2 SEV interrupt through EXTI line 40 and PWR CPU2 HOLD wake-up interrupt.
+ */
+void C2SEV_PWR_C2H_IRQHandler(void)
+{
+ /* USER CODE BEGIN C2SEV_PWR_C2H_IRQn 0 */
+
+ /* USER CODE END C2SEV_PWR_C2H_IRQn 0 */
+ /* USER CODE BEGIN C2SEV_PWR_C2H_IRQn 1 */
+
+ /* USER CODE END C2SEV_PWR_C2H_IRQn 1 */
+}
+
+/**
+ * @brief This function handles USART1 global interrupt.
+ */
+void USART1_IRQHandler(void)
+{
+ /* USER CODE BEGIN USART1_IRQn 0 */
+
+ /* 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 LPUART1 global interrupt.
+ */
+void LPUART1_IRQHandler(void)
+{
+ /* USER CODE BEGIN LPUART1_IRQn 0 */
+
+ /* USER CODE END LPUART1_IRQn 0 */
+ HAL_UART_IRQHandler(&hlpuart1);
+ /* USER CODE BEGIN LPUART1_IRQn 1 */
+
+ /* USER CODE END LPUART1_IRQn 1 */
+}
+
+/**
+ * @brief This function handles PWR switching on the fly, end of BLE activity, end of 802.15.4 activity, end of critical radio phase interrupt.
+ */
+void PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler(void)
+{
+ /* USER CODE BEGIN PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQn 0 */
+
+ /* USER CODE END PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQn 0 */
+ /* USER CODE BEGIN PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQn 1 */
+
+ /* USER CODE END PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQn 1 */
+}
+
+/**
+ * @brief This function handles IPCC RX occupied interrupt.
+ */
+void IPCC_C1_RX_IRQHandler(void)
+{
+ /* USER CODE BEGIN IPCC_C1_RX_IRQn 0 */
+
+ /* USER CODE END IPCC_C1_RX_IRQn 0 */
+ HAL_IPCC_RX_IRQHandler(&hipcc);
+ /* USER CODE BEGIN IPCC_C1_RX_IRQn 1 */
+
+ /* USER CODE END IPCC_C1_RX_IRQn 1 */
+}
+
+/**
+ * @brief This function handles IPCC TX free interrupt.
+ */
+void IPCC_C1_TX_IRQHandler(void)
+{
+ /* USER CODE BEGIN IPCC_C1_TX_IRQn 0 */
+
+ /* USER CODE END IPCC_C1_TX_IRQn 0 */
+ HAL_IPCC_TX_IRQHandler(&hipcc);
+ /* USER CODE BEGIN IPCC_C1_TX_IRQn 1 */
+
+ /* USER CODE END IPCC_C1_TX_IRQn 1 */
+}
+
+/**
+ * @brief This function handles HSEM 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 */
+}
+
+/**
+ * @brief This function handles FPU global interrupt.
+ */
+void FPU_IRQHandler(void)
+{
+ /* USER CODE BEGIN FPU_IRQn 0 */
+
+ /* USER CODE END FPU_IRQn 0 */
+ /* USER CODE BEGIN FPU_IRQn 1 */
+
+ /* USER CODE END FPU_IRQn 1 */
+}
+
+/**
+ * @brief This function handles TIM1 trigger and commutation interrupts and TIM17 global interrupt.
+ */
+void TIM1_TRG_COM_TIM17_IRQHandler(void)
+{
+ /* USER CODE BEGIN TIM1_TRG_COM_TIM17_IRQn 0 */
+
+ /* USER CODE END TIM1_TRG_COM_TIM17_IRQn 0 */
+ HAL_TIM_IRQHandler(&htim17);
+ /* USER CODE BEGIN TIM1_TRG_COM_TIM17_IRQn 1 */
+
+ /* USER CODE END TIM1_TRG_COM_TIM17_IRQn 1 */
+}
+
+
+/* USER CODE BEGIN 1 */
+void RTC_WKUP_IRQHandler(void)
+{
+ HW_TS_RTC_Wakeup_Handler();
+}
+
+/**
+ * @brief This function handles External External line 4 interrupt request.
+ * @param None
+ * @retval None
+ */
+void EXTI4_IRQHandler(void)
+{
+ HAL_GPIO_EXTI_IRQHandler(BUTTON_SW1_PIN);
+}
+
+/**
+ * @brief This function handles External External line 0 interrupt request.
+ * @param None
+ * @retval None
+ */
+void EXTI0_IRQHandler(void)
+{
+ HAL_GPIO_EXTI_IRQHandler(BUTTON_SW2_PIN);
+}
+
+/**
+ * @brief This function handles External External line 1 interrupt request.
+ * @param None
+ * @retval None
+ */
+void EXTI1_IRQHandler(void)
+{
+ HAL_GPIO_EXTI_IRQHandler(BUTTON_SW3_PIN);
+}
+
+/* USER CODE END 1 */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm_logging.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm_logging.c
new file mode 100644
index 000000000..efde60287
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/stm_logging.c
@@ -0,0 +1,204 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : stm_logging.c
+ * Description : This file contains all the defines and functions used
+ * for logging on Application examples.
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/**
+ * @file
+ * This file implements logging functions to be used in Application examples.
+ *
+ */
+
+#include <ctype.h>
+#include <inttypes.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+
+#include "app_conf.h"
+#include "stm_logging.h"
+
+#define LOG_PARSE_BUFFER_SIZE 256U
+
+#define LOG_TIMESTAMP_ENABLE 0
+#define LOG_REGION_ENABLE 1U
+#define LOG_RTT_COLOR_ENABLE 1U
+
+#if (LOG_RTT_COLOR_ENABLE == 1U)
+#define RTT_COLOR_CODE_DEFAULT "\x1b[0m"
+#define RTT_COLOR_CODE_RED "\x1b[0;91m"
+#define RTT_COLOR_CODE_GREEN "\x1b[0;92m"
+#define RTT_COLOR_CODE_YELLOW "\x1b[0;93m"
+#define RTT_COLOR_CODE_CYAN "\x1b[0;96m"
+
+#else /* LOG_RTT_COLOR_ENABLE == 1 */
+#define RTT_COLOR_CODE_DEFAULT ""
+#define RTT_COLOR_CODE_RED ""
+#define RTT_COLOR_CODE_GREEN ""
+#define RTT_COLOR_CODE_YELLOW ""
+#define RTT_COLOR_CODE_CYAN ""
+#endif /* LOG_RTT_COLOR_ENABLE == 1 */
+
+#if (CFG_DEBUG_TRACE != 0)
+/**
+ * Function for outputting code region string.
+ *
+ * @param[input] aLogString Pointer to log buffer.
+ * @param[in] aMaxSize Maximum size of log buffer.
+ * @param[in] otLogRegion The region ID.
+ *
+ * @returns String with a log level color value.
+ */
+static inline uint16_t logRegion(char *aLogString, uint16_t aMaxSize,
+ appliLogRegion_t aLogRegion)
+{
+ char logRegionString[30U];
+
+ switch (aLogRegion)
+ {
+ case APPLI_LOG_REGION_GENERAL:
+ strcpy(logRegionString, "[M4 APPLICATION]");
+ break;
+ case APPLI_LOG_REGION_ZIGBEE_API:
+ strcpy(logRegionString, "[M4 ZIGBEE API]");
+ break;
+ default:
+ strcpy(logRegionString, "[M4]");
+ break;
+ }
+
+ return snprintf(aLogString, aMaxSize, "%s ", logRegionString);
+}
+#endif /* CFG_DEBUG_TRACE */
+
+#if (LOG_RTT_COLOR_ENABLE == 1U)
+#if (CFG_DEBUG_TRACE != 0)
+/**
+ * Function for getting color of a given level log.
+ *
+ * @param[in] aLogLevel The log level.
+ *
+ * @returns String with a log level color value.
+ */
+static inline const char *levelToString(appliLogLevel_t aLogLevel)
+{
+ switch (aLogLevel)
+ {
+ case LOG_LEVEL_CRIT:
+ return RTT_COLOR_CODE_RED;
+
+ case LOG_LEVEL_WARN:
+ return RTT_COLOR_CODE_YELLOW;
+
+ case LOG_LEVEL_INFO:
+ return RTT_COLOR_CODE_GREEN;
+
+ case LOG_LEVEL_DEBG:
+ default:
+ return RTT_COLOR_CODE_DEFAULT;
+ }
+}
+#endif /* CFG_DEBUG_TRACE */
+
+#if (CFG_DEBUG_TRACE != 0)
+/**
+ * Function for printing log level.
+ *
+ * @param[input] aLogString Pointer to log buffer.
+ * @param[in] aMaxSize Maximum size of log buffer.
+ * @param[in] aLogLevel Log level.
+ *
+ * @returns Number of bytes successfully written to the log buffer.
+ */
+static inline uint16_t logLevel(char *aLogString, uint16_t aMaxSize,
+ appliLogLevel_t aLogLevel)
+{
+ return snprintf(aLogString, aMaxSize, "%s", levelToString(aLogLevel));
+}
+#endif /* CFG_DEBUG_TRACE */
+#endif /* LOG_RTT_COLOR_ENABLE */
+
+#if (LOG_TIMESTAMP_ENABLE == 1U)
+/**
+ * Function for printing actual timestamp.
+ *
+ * @param[input] aLogString Pointer to the log buffer.
+ * @param[in] aMaxSize Maximum size of the log buffer.
+ *
+ * @returns Number of bytes successfully written to the log buffer.
+ */
+static inline uint16_t logTimestamp(char *aLogString, uint16_t aMaxSize)
+{
+ return snprintf(aLogString, aMaxSize, "%s[%010ld]", RTT_COLOR_CODE_DEFAULT,
+ otPlatAlarmMilliGetNow());
+}
+#endif /* LOG_TIMESTAMP_ENABLE */
+
+/**
+ * Function for printing application log
+ *
+ * @param[in] aLogLevel Log level.
+ * @param[in] aLogRegion The region ID.
+ * @param[in] aFormat User string format.
+ *
+ * @returns Number of bytes successfully written to the log buffer.
+ */
+void logApplication(appliLogLevel_t aLogLevel, appliLogRegion_t aLogRegion, const char *aFormat, ...)
+{
+#if (CFG_DEBUG_TRACE != 0) /* Since the traces are disabled, there is nothing to print */
+ uint16_t length = 0;
+ char logString[LOG_PARSE_BUFFER_SIZE + 1U];
+
+#if (LOG_TIMESTAMP_ENABLE == 1U)
+ length += logTimestamp(logString, LOG_PARSE_BUFFER_SIZE);
+#endif
+
+#if (LOG_RTT_COLOR_ENABLE == 1U)
+ /* Add level information */
+ length += logLevel(&logString[length], (LOG_PARSE_BUFFER_SIZE - length),
+ aLogLevel);
+#endif
+
+#if (LOG_REGION_ENABLE == 1U)
+ /* Add Region information */
+ length += logRegion(&logString[length], (LOG_PARSE_BUFFER_SIZE - length),
+ aLogRegion);
+#endif
+
+ /* Parse user string */
+ va_list paramList;
+ va_start(paramList, aFormat);
+ length += vsnprintf(&logString[length], (LOG_PARSE_BUFFER_SIZE - length),
+ aFormat, paramList);
+ logString[length++] = '\r';
+ logString[length++] = '\n';
+ logString[length++] = 0;
+ va_end(paramList);
+
+ if (aLogLevel <= APPLI_CONFIG_LOG_LEVEL)
+ {
+ printf("%s", logString);
+ }else
+ {
+ /* Print nothing */
+ }
+#endif /* CFG_DEBUG_TRACE */
+}
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/system_stm32wbxx.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/system_stm32wbxx.c
new file mode 100644
index 000000000..cb2a3e777
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/Core/Src/system_stm32wbxx.c
@@ -0,0 +1,353 @@
+/**
+ ******************************************************************************
+ * @file system_stm32wbxx.c
+ * @author MCD Application Team
+ * @brief CMSIS Cortex Device Peripheral Access Layer System Source File
+ *
+ * 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_stm32wbxx.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 MSI (4 MHz) is used as system clock source.
+ * Then SystemInit() function is called, in "startup_stm32wbxx.s" file, to
+ * configure the system clock before to branch to main program.
+ *
+ * This file configures the system clock as follows:
+ *=============================================================================
+ *-----------------------------------------------------------------------------
+ * System Clock source | MSI
+ *-----------------------------------------------------------------------------
+ * SYSCLK(Hz) | 4000000
+ *-----------------------------------------------------------------------------
+ * HCLK(Hz) | 4000000
+ *-----------------------------------------------------------------------------
+ * AHB Prescaler | 1
+ *-----------------------------------------------------------------------------
+ * APB1 Prescaler | 1
+ *-----------------------------------------------------------------------------
+ * APB2 Prescaler | 1
+ *-----------------------------------------------------------------------------
+ * PLL_M | 1
+ *-----------------------------------------------------------------------------
+ * PLL_N | 8
+ *-----------------------------------------------------------------------------
+ * PLL_P | 7
+ *-----------------------------------------------------------------------------
+ * PLL_Q | 2
+ *-----------------------------------------------------------------------------
+ * PLL_R | 2
+ *-----------------------------------------------------------------------------
+ * PLLSAI1_P | NA
+ *-----------------------------------------------------------------------------
+ * PLLSAI1_Q | NA
+ *-----------------------------------------------------------------------------
+ * PLLSAI1_R | NA
+ *-----------------------------------------------------------------------------
+ * Require 48MHz for USB OTG FS, | Disabled
+ * SDIO and RNG clock |
+ *-----------------------------------------------------------------------------
+ *=============================================================================
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Apache License, Version 2.0,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/Apache-2.0
+ *
+ ******************************************************************************
+ */
+
+/** @addtogroup CMSIS
+ * @{
+ */
+
+/** @addtogroup stm32WBxx_system
+ * @{
+ */
+
+/** @addtogroup stm32WBxx_System_Private_Includes
+ * @{
+ */
+
+#include "stm32wbxx.h"
+
+#if !defined (HSE_VALUE)
+ #define HSE_VALUE (32000000UL) /*!< Value of the External oscillator in Hz */
+#endif /* HSE_VALUE */
+
+#if !defined (MSI_VALUE)
+ #define MSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/
+#endif /* MSI_VALUE */
+
+#if !defined (HSI_VALUE)
+ #define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/
+#endif /* HSI_VALUE */
+
+#if !defined (LSI_VALUE)
+ #define LSI_VALUE (32000UL) /*!< Value of LSI in Hz*/
+#endif /* LSI_VALUE */
+
+#if !defined (LSE_VALUE)
+ #define LSE_VALUE (32768UL) /*!< Value of LSE in Hz*/
+#endif /* LSE_VALUE */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32WBxx_System_Private_TypesDefinitions
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32WBxx_System_Private_Defines
+ * @{
+ */
+
+/*!< Uncomment the following line if you need to relocate your vector Table in
+ Internal SRAM. */
+/* #define VECT_TAB_SRAM */
+#define VECT_TAB_OFFSET 0x0U /*!< Vector Table base offset field.
+ This value must be a multiple of 0x200. */
+
+#define VECT_TAB_BASE_ADDRESS SRAM1_BASE /*!< Vector Table base offset field.
+ This value must be a multiple of 0x200. */
+/**
+ * @}
+ */
+
+/** @addtogroup STM32WBxx_System_Private_Macros
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32WBxx_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 = 4000000UL ; /*CPU1: M4 on MSI clock after startup (4MHz)*/
+
+ const uint32_t AHBPrescTable[16UL] = {1UL, 3UL, 5UL, 1UL, 1UL, 6UL, 10UL, 32UL, 2UL, 4UL, 8UL, 16UL, 64UL, 128UL, 256UL, 512UL};
+
+ const uint32_t APBPrescTable[8UL] = {0UL, 0UL, 0UL, 0UL, 1UL, 2UL, 3UL, 4UL};
+
+ const uint32_t MSIRangeTable[16UL] = {100000UL, 200000UL, 400000UL, 800000UL, 1000000UL, 2000000UL, \
+ 4000000UL, 8000000UL, 16000000UL, 24000000UL, 32000000UL, 48000000UL, 0UL, 0UL, 0UL, 0UL}; /* 0UL values are incorrect cases */
+
+ const uint32_t SmpsPrescalerTable[4UL][6UL]={{1UL,3UL,2UL,2UL,1UL,2UL}, \
+ {2UL,6UL,4UL,3UL,2UL,4UL}, \
+ {4UL,12UL,8UL,6UL,4UL,8UL}, \
+ {4UL,12UL,8UL,6UL,4UL,8UL}};
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32WBxx_System_Private_FunctionPrototypes
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32WBxx_System_Private_Functions
+ * @{
+ */
+
+/**
+ * @brief Setup the microcontroller system.
+ * @param None
+ * @retval None
+ */
+void SystemInit(void)
+{
+ /* Configure the Vector Table location add offset address ------------------*/
+#if defined(VECT_TAB_SRAM) && defined(VECT_TAB_BASE_ADDRESS)
+ /* program in SRAMx */
+ SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAMx for CPU1 */
+#else /* program in FLASH */
+ SCB->VTOR = VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
+#endif
+
+ /* FPU settings ------------------------------------------------------------*/
+ #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
+ SCB->CPACR |= ((3UL << (10UL*2UL))|(3UL << (11UL*2UL))); /* set CP10 and CP11 Full Access */
+ #endif
+
+ /* Reset the RCC clock configuration to the default reset state ------------*/
+ /* Set MSION bit */
+ RCC->CR |= RCC_CR_MSION;
+
+ /* Reset CFGR register */
+ RCC->CFGR = 0x00070000U;
+
+ /* Reset PLLSAI1ON, PLLON, HSECSSON, HSEON, HSION, and MSIPLLON bits */
+ RCC->CR &= (uint32_t)0xFAF6FEFBU;
+
+ /*!< Reset LSI1 and LSI2 bits */
+ RCC->CSR &= (uint32_t)0xFFFFFFFAU;
+
+ /*!< Reset HSI48ON bit */
+ RCC->CRRCR &= (uint32_t)0xFFFFFFFEU;
+
+ /* Reset PLLCFGR register */
+ RCC->PLLCFGR = 0x22041000U;
+
+ /* Reset PLLSAI1CFGR register */
+ RCC->PLLSAI1CFGR = 0x22041000U;
+
+ /* Reset HSEBYP bit */
+ RCC->CR &= 0xFFFBFFFFU;
+
+ /* Disable all interrupts */
+ RCC->CIER = 0x00000000;
+}
+
+/**
+ * @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 MSI, SystemCoreClock will contain the MSI_VALUE(*)
+ *
+ * - 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 PLL, SystemCoreClock will contain the HSE_VALUE(***)
+ * or HSI_VALUE(*) or MSI_VALUE(*) multiplied/divided by the PLL factors.
+ *
+ * (*) MSI_VALUE is a constant defined in stm32wbxx_hal.h file (default value
+ * 4 MHz) but the real value may vary depending on the variations
+ * in voltage and temperature.
+ *
+ * (**) HSI_VALUE is a constant defined in stm32wbxx_hal_conf.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 stm32wbxx_hal_conf.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 tmp, msirange, pllvco, pllr, pllsource , pllm;
+
+ /* Get MSI Range frequency--------------------------------------------------*/
+
+ /*MSI frequency range in Hz*/
+ msirange = MSIRangeTable[(RCC->CR & RCC_CR_MSIRANGE) >> RCC_CR_MSIRANGE_Pos];
+
+ /* Get SYSCLK source -------------------------------------------------------*/
+ switch (RCC->CFGR & RCC_CFGR_SWS)
+ {
+ case 0x00: /* MSI used as system clock source */
+ SystemCoreClock = msirange;
+ break;
+
+ case 0x04: /* HSI used as system clock source */
+ /* HSI used as system clock source */
+ SystemCoreClock = HSI_VALUE;
+ break;
+
+ case 0x08: /* HSE used as system clock source */
+ SystemCoreClock = HSE_VALUE;
+ break;
+
+ case 0x0C: /* PLL used as system clock source */
+ /* PLL_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLM) * PLLN
+ SYSCLK = PLL_VCO / PLLR
+ */
+ pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC);
+ pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1UL ;
+
+ if(pllsource == 0x02UL) /* HSI used as PLL clock source */
+ {
+ pllvco = (HSI_VALUE / pllm);
+ }
+ else if(pllsource == 0x03UL) /* HSE used as PLL clock source */
+ {
+ pllvco = (HSE_VALUE / pllm);
+ }
+ else /* MSI used as PLL clock source */
+ {
+ pllvco = (msirange / pllm);
+ }
+
+ pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos);
+ pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos) + 1UL);
+
+ SystemCoreClock = pllvco/pllr;
+ break;
+
+ default:
+ SystemCoreClock = msirange;
+ break;
+ }
+
+ /* Compute HCLK clock frequency --------------------------------------------*/
+ /* Get HCLK1 prescaler */
+ tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos)];
+ /* HCLK clock frequency */
+ SystemCoreClock = SystemCoreClock / tmp;
+
+}
+
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/Project.eww b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/Project.eww
new file mode 100644
index 000000000..af6a863d2
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/Project.eww
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workspace>
+ <project>
+ <path>$WS_DIR$\Zigbee_OnOff_Server_Coord_FreeRTOS.ewp</path>
+ </project>
+ <batchBuild />
+</workspace>
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/Zigbee_OnOff_Server_Coord_FreeRTOS.ewd b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/Zigbee_OnOff_Server_Coord_FreeRTOS.ewd
new file mode 100644
index 000000000..c53b6a72e
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/Zigbee_OnOff_Server_Coord_FreeRTOS.ewd
@@ -0,0 +1,1419 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <fileVersion>3</fileVersion>
+ <configuration>
+ <name>Zigbee_OnOff_Server_Coord_FreeRTOS</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>1</debug>
+ <settings>
+ <name>C-SPY</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>29</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCVariant</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>MemOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MemFile</name>
+ <state>$TOOLKIT_DIR$\CONFIG\debugger\ST\STM32WB_M4.ddf</state>
+ </option>
+ <option>
+ <name>RunToEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RunToName</name>
+ <state>main</state>
+ </option>
+ <option>
+ <name>CExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CExtraOptions</name>
+ <state>--stlink_use_server</state>
+ </option>
+ <option>
+ <name>CFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCDDFArgumentProducer</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDownloadSuppressDownload</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDownloadVerifyAll</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProductVersion</name>
+ <state>8.20.2.14834</state>
+ </option>
+ <option>
+ <name>OCDynDriverList</name>
+ <state>STLINK_ID</state>
+ </option>
+ <option>
+ <name>OCLastSavedByProductVersion</name>
+ <state>8.20.2.14834</state>
+ </option>
+ <option>
+ <name>UseFlashLoader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CLowLevel</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacFile2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CDevice</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>FlashLoadersV3</name>
+ <state>$TOOLKIT_DIR$\config\flashloader\ST\FlashSTM32WB_M4.board</state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OverrideDefFlashBoard</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesOffset1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesUse1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDeviceConfigMacroFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCDebuggerExtraOption</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCAllMTBOptions</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCMulticoreNrOfCores</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCMulticoreMaster</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCMulticorePort</name>
+ <state>53461</state>
+ </option>
+ <option>
+ <name>OCMulticoreWorkspace</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCMulticoreSlaveProject</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCMulticoreSlaveConfiguration</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDownloadExtraImage</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCAttachSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MassEraseBeforeFlashing</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ARMSIM_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCSimDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCSimEnablePSP</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspOverrideConfig</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspConfigFile</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CADI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CCadiMemory</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Fast Model</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCADILogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCADILogFileEditB</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CMSISDAP_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>4</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CMSISDAPResetList</name>
+ <version>1</version>
+ <state>10</state>
+ </option>
+ <option>
+ <name>CMSISDAPHWResetDuration</name>
+ <state>300</state>
+ </option>
+ <option>
+ <name>CMSISDAPHWResetDelay</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>CMSISDAPDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CMSISDAPInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiTargetEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPJtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPRestoreBreakpointsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPUpdateBreakpointsEdit</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>RDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchUndef</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchData</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchPrefetch</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchMMERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchNOCPERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchCHKERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSTATERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchBUSERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchINTERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSFERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchHARDERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiCPUEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiCPUNumber</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeCfgOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeConfig</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CMSISDAPProbeConfigRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPSelectedCPUBehaviour</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ICpuName</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCJetEmuParams</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCCMSISDAPUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCCMSISDAPUsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>GDBSERVER_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJTagBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IJET_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>8</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetResetList</name>
+ <version>1</version>
+ <state>10</state>
+ </option>
+ <option>
+ <name>IjetHWResetDuration</name>
+ <state>300</state>
+ </option>
+ <option>
+ <name>IjetHWResetDelay</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>IjetPowerFromProbe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetPowerRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>IjetInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTargetEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetJtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetProtocolRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetSwoPin</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetCpuClockEdit</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IjetSwoPrescalerList</name>
+ <version>1</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetRestoreBreakpointsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetUpdateBreakpointsEdit</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>RDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchUndef</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchData</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchPrefetch</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchMMERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchNOCPERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchCHKERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSTATERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchBUSERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchINTERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSFERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchHARDERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeCfgOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeConfig</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IjetProbeConfigRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiCPUEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiCPUNumber</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetSelectedCPUBehaviour</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ICpuName</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCJetEmuParams</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetPreferETB</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetTraceSettingsList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetTraceSizeList</name>
+ <version>0</version>
+ <state>4</state>
+ </option>
+ <option>
+ <name>FlashBoardPathSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCIjetUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCIjetUsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>JLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>16</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>JLinkSpeed</name>
+ <state>1000</state>
+ </option>
+ <option>
+ <name>CCJLinkDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJLinkHWResetDelay</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>JLinkInitialSpeed</name>
+ <state>1000</state>
+ </option>
+ <option>
+ <name>CCDoJlinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkCommRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>CCJLinkSpeedRadioV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCUSBDevice</name>
+ <version>1</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkResetList</name>
+ <version>6</version>
+ <state>5</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchSFERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJLinkUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCTcpIpAlt</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTcpIpSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>2000</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSourceDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkDeviceName</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>LMIFTDI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>LmiftdiSpeed</name>
+ <state>500</state>
+ </option>
+ <option>
+ <name>CCLmiftdiDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiftdiLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>PEMICRO_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>3</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJPEMicroShowSettings</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>STLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>4</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceRadio</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkResetList</name>
+ <version>3</version>
+ <state>4</state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state>32.0</state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>2000</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCSTLinkDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchSFERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCSTLinkUsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkJtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkDAPNumber</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkDebugAccessPortRadio</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>THIRDPARTY_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CThirdPartyDriverDll</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileEditB</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>TIFET_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCMSPFetResetList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetTargetVccTypeDefault</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetTargetVoltage</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>CCMSPFetVCCDefault</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCMSPFetTargetSettlingtime</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetRadioJtagSpeedType</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCMSPFetConnection</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetUsbComPort</name>
+ <state>Automatic</state>
+ </option>
+ <option>
+ <name>CCMSPFetAllowAccessToBSL</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCMSPFetRadioEraseFlash</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>XDS100_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>6</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TIPackageOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>TIPackage</name>
+ <state></state>
+ </option>
+ <option>
+ <name>BoardFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCXds100BreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100DoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100UpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCXds100CatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchSFERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CpuClockEdit</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCXds100SwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100SwoClockEdit</name>
+ <state>1000</state>
+ </option>
+ <option>
+ <name>CCXds100HWResetDelay</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100ResetList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100UsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCXds100UsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100JtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100InterfaceRadio</name>
+ <state>2</state>
+ </option>
+ <option>
+ <name>CCXds100InterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100ProbeList</name>
+ <version>0</version>
+ <state>2</state>
+ </option>
+ <option>
+ <name>CCXds100SWOPortRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100SWOPort</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <debuggerPlugins>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>
+ <loadFlag>1</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ </debuggerPlugins>
+ </configuration>
+</project>
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/Zigbee_OnOff_Server_Coord_FreeRTOS.ewp b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/Zigbee_OnOff_Server_Coord_FreeRTOS.ewp
new file mode 100644
index 000000000..d58d6590f
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/Zigbee_OnOff_Server_Coord_FreeRTOS.ewp
@@ -0,0 +1,1316 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <fileVersion>3</fileVersion>
+ <configuration>
+ <name>Zigbee_OnOff_Server_Coord_FreeRTOS</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>1</debug>
+ <settings>
+ <name>General</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <version>30</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>ExePath</name>
+ <state>Zigbee_OnOff_Coord_FreeRTOS/Exe</state>
+ </option>
+ <option>
+ <name>ObjPath</name>
+ <state>Zigbee_OnOff_Coord_FreeRTOS/Obj</state>
+ </option>
+ <option>
+ <name>ListPath</name>
+ <state>Zigbee_OnOff_Coord_FreeRTOS/List</state>
+ </option>
+ <option>
+ <name>GEndianMode</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>Input description</name>
+ <state>Full formatting, with multibyte support.</state>
+ </option>
+ <option>
+ <name>Output description</name>
+ <state>Full formatting, with multibyte support.</state>
+ </option>
+ <option>
+ <name>GOutputBinary</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGCoreOrChip</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelect</name>
+ <version>0</version>
+ <state>2</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelectSlave</name>
+ <version>0</version>
+ <state>2</state>
+ </option>
+ <option>
+ <name>RTDescription</name>
+ <state>Use the full configuration of the C/C++ runtime library. Full locale interface, C locale, file descriptor support, multibytes in printf and scanf, and hex floats in strtod.</state>
+ </option>
+ <option>
+ <name>OGProductVersion</name>
+ <state>4.41A</state>
+ </option>
+ <option>
+ <name>OGLastSavedByProductVersion</name>
+ <state>8.20.2.14834</state>
+ </option>
+ <option>
+ <name>GeneralEnableMisra</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraVerbose</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGChipSelectEditMenu</name>
+ <state>STM32WB55RG ST STM32WB55RG</state>
+ </option>
+ <option>
+ <name>GenLowLevelInterface</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GEndianModeBE</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGBufferedTerminalOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenStdoutInterface</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>GeneralMisraVer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules04</name>
+ <version>0</version>
+ <state>011111111111111110111111111111011111111111111011110100111111111111111111111111111111111111111111101111111111111011111111111111111111111111111</state>
+ </option>
+ <option>
+ <name>RTConfigPath2</name>
+ <state>$TOOLKIT_DIR$\INC\c\DLib_Config_Full.h</state>
+ </option>
+ <option>
+ <name>GBECoreSlave</name>
+ <version>26</version>
+ <state>39</state>
+ </option>
+ <option>
+ <name>OGUseCmsis</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGUseCmsisDspLib</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GRuntimeLibThreads</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CoreVariant</name>
+ <version>26</version>
+ <state>39</state>
+ </option>
+ <option>
+ <name>GFPUDeviceSlave</name>
+ <state>STM32WB55RG ST STM32WB55RG</state>
+ </option>
+ <option>
+ <name>FPU2</name>
+ <version>0</version>
+ <state>4</state>
+ </option>
+ <option>
+ <name>NrRegs</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>NEON</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GFPUCoreSlave2</name>
+ <version>26</version>
+ <state>39</state>
+ </option>
+ <option>
+ <name>OGCMSISPackSelectDevice</name>
+ </option>
+ <option>
+ <name>OgLibHeap</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGLibAdditionalLocale</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGPrintfVariant</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGPrintfMultibyteSupport</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGScanfVariant</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGScanfMultibyteSupport</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GenLocaleTags</name>
+ <state></state>
+ </option>
+ <option>
+ <name>GenLocaleDisplayOnly</name>
+ <state></state>
+ </option>
+ <option>
+ <name>DSPExtension</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TrustZone</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ICCARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>34</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CCOptimizationNoSizeConstraints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDefines</name>
+ <state>USE_HAL_DRIVER</state>
+ <state>STM32WB55xx</state>
+ <state>USE_STM32WBXX_NUCLEO</state>
+ <state>ZIGBEE_WB</state>
+ </option>
+ <option>
+ <name>CCPreprocFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocComments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMnemonics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMessages</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagSuppress</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagRemark</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagWarning</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagError</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCAllowList</name>
+ <version>1</version>
+ <state>00000000</state>
+ </option>
+ <option>
+ <name>CCDebugInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IEndianMode</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IExtraOptionsCheck</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IExtraOptions</name>
+ <state>--diag_suppress Pe111</state>
+ <state>--diag_suppress Pe188</state>
+ </option>
+ <option>
+ <name>CCLangConformance</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSignedPlainChar</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRequirePrototypes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagWarnAreErr</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCompilerRuntimeInfo</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OutputFile</name>
+ <state>$FILE_BNAME$.o</state>
+ </option>
+ <option>
+ <name>CCLibConfigHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>PreInclude</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CompilerMisraOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCIncludePath2</name>
+ <state>$PROJ_DIR$/../Core/Inc</state>
+ <state>$PROJ_DIR$/../STM32_WPAN/App</state>
+ <state>$PROJ_DIR$/../../../../../../Drivers/BSP/P-NUCLEO-WB55.Nucleo</state>
+ <state>$PROJ_DIR$/../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc</state>
+ <state>$PROJ_DIR$/../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc/Legacy</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/utilities</state>
+ <state>$PROJ_DIR$/../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/zigbee/core/Inc</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/zigbee/stack</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/zigbee/stack/include</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/zigbee/stack/include/mac</state>
+ <state>$PROJ_DIR$/../../../../../../Drivers/CMSIS/Include</state>
+ <state>$PROJ_DIR$/../../../../../../Utilities/sequencer</state>
+ <state>$PROJ_DIR$/../../../../../../Utilities/lpm/tiny_lpm</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/Third_Party/FreeRTOS/Source/include</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/Third_Party/FreeRTOS/Source/portable/IAR/ARM_CM4F</state>
+ </option>
+ <option>
+ <name>CCStdIncCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCodeSection</name>
+ <state>.text</state>
+ </option>
+ <option>
+ <name>IProcessorMode2</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptLevel</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCOptStrategy</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptLevelSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules04</name>
+ <version>0</version>
+ <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+ </option>
+ <option>
+ <name>CCPosIndRopi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndRwpi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndNoDynInit</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccLang</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCDialect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccAllowVLA</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccStaticDestr</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCppInlineSemantics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccFloatSemantics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCNoLiteralPool</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCOptStrategySlave</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCGuardCalls</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCEncSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEncOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEncOutputBom</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCEncInput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccExceptions2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccRTTI2</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>AARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>10</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>AObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>ACaseSensitivity</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacroChars</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnWhat</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnOne</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>ADebug</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AltRegisterNames</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ADefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AList</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AListHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AListing</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Includes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacDefs</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacExps</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacExec</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OnlyAssed</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MultiLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLengthCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLength</name>
+ <state>80</state>
+ </option>
+ <option>
+ <name>TabSpacing</name>
+ <state>8</state>
+ </option>
+ <option>
+ <name>AXRef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDefines</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefInternal</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDual</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AOutputFile</name>
+ <state>$FILE_BNAME$.o</state>
+ </option>
+ <option>
+ <name>ALimitErrorsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ALimitErrorsEdit</name>
+ <state>100</state>
+ </option>
+ <option>
+ <name>AIgnoreStdInclude</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AUserIncludes</name>
+ <state>$PROJ_DIR$\..\Core\Inc</state>
+ </option>
+ <option>
+ <name>AExtraOptionsCheckV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AExtraOptionsV2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AsmNoLiteralPool</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>OBJCOPY</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OOCOutputFormat</name>
+ <version>3</version>
+ <state>3</state>
+ </option>
+ <option>
+ <name>OCOutputOverride</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OOCOutputFile</name>
+ <state>Zigbee_OnOff_Coord_FreeRTOS.bin</state>
+ </option>
+ <option>
+ <name>OOCCommandLineProducer</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OOCObjCopyEnable</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CUSTOM</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <extensions></extensions>
+ <cmdline></cmdline>
+ <hasPrio>0</hasPrio>
+ </data>
+ </settings>
+ <settings>
+ <name>BICOMP</name>
+ <archiveVersion>0</archiveVersion>
+ <data />
+ </settings>
+ <settings>
+ <name>BUILDACTION</name>
+ <archiveVersion>1</archiveVersion>
+ <data>
+ <prebuild></prebuild>
+ <postbuild></postbuild>
+ </data>
+ </settings>
+ <settings>
+ <name>ILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>20</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>IlinkLibIOConfig</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>XLinkMisraHandler</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkInputFileSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOutputFile</name>
+ <state>Zigbee_OnOff_Coord_FreeRTOS.out</state>
+ </option>
+ <option>
+ <name>IlinkDebugInfoEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkKeepSymbols</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySymbol</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySegment</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryAlign</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkConfigDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkMapFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkLogFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogInitialization</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogModule</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogSection</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogVeneer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfOverride</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkIcfFile</name>
+ <state>$PROJ_DIR$\stm32wb55xx_flash_cm4.icf</state>
+ </option>
+ <option>
+ <name>IlinkIcfFileSlave</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkSuppressDiags</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsRem</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsWarn</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsErr</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkWarningsAreErrors</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkUseExtraOptions</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkLowLevelInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAutoLibEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAdditionalLibs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkOverrideProgramEntryLabel</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabelSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabel</name>
+ <state>__iar_program_start</state>
+ </option>
+ <option>
+ <name>DoFill</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>FillerByte</name>
+ <state>0xFF</state>
+ </option>
+ <option>
+ <name>FillerStart</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>FillerEnd</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>CrcSize</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcAlign</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcPoly</name>
+ <state>0x11021</state>
+ </option>
+ <option>
+ <name>CrcCompl</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcBitOrder</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcInitialValue</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>DoCrc</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkBufferedTerminalOutput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkStdoutInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcFullSize</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIElfToolPostProcess</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogAutoLibSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogRedirSymbols</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogUnusedFragments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcReverseByteOrder</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcUseAsInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptInline</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsAllow</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsForce</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptMergeDuplSections</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOptUseVfe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptForceVfe</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackAnalysisEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackControlFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkStackCallGraphFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CrcAlgorithm</name>
+ <version>1</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcUnitSize</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkThreadsSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkLogCallGraph</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfFile_AltDefault</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkEncInput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkEncOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkEncOutputBom</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkHeapSelect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkLocaleSelect</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IARCHIVE</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>IarchiveInputs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IarchiveOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IarchiveOutput</name>
+ <state>###Unitialized###</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>BILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data />
+ </settings>
+ </configuration>
+ <group>
+ <name>Application</name>
+ <group>
+ <name>EWARM</name>
+ <file>
+ <name>$PROJ_DIR$\startup_stm32wb55xx_cm4.s</name>
+ </file>
+ </group>
+ <group>
+ <name>User</name>
+ <group>
+ <name>Core</name>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\app_entry.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\freertos_port.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\hw_timerserver.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\hw_uart.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\main.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\stm32_lpm_if.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\stm32wbxx_hal_msp.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\stm32wbxx_hal_timebase_tim.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\stm32wbxx_it.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\stm_logging.c</name>
+ </file>
+ </group>
+ <group>
+ <name>STM32_WPAN</name>
+ <group>
+ <name>App</name>
+ <file>
+ <name>$PROJ_DIR$\..\STM32_WPAN\App\app_zigbee.c</name>
+ </file>
+ </group>
+ <group>
+ <name>Target</name>
+ <file>
+ <name>$PROJ_DIR$\..\STM32_WPAN\Target\hw_ipcc.c</name>
+ </file>
+ </group>
+ </group>
+ </group>
+ </group>
+ <group>
+ <name>Doc</name>
+ <file>
+ <name>$PROJ_DIR$\..\readme.txt</name>
+ </file>
+ </group>
+ <group>
+ <name>Drivers</name>
+ <group>
+ <name>BSP</name>
+ <group>
+ <name>STM32WBxx_Nucleo</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\BSP\P-NUCLEO-WB55.Nucleo\stm32wbxx_nucleo.c</name>
+ </file>
+ </group>
+ </group>
+ <group>
+ <name>CMSIS</name>
+ <file>
+ <name>$PROJ_DIR$\..\Core\Src\system_stm32wbxx.c</name>
+ </file>
+ </group>
+ <group>
+ <name>STM32WBxx_HAL_Driver</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_cortex.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_dma.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_dma_ex.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_exti.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_flash.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_flash_ex.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_gpio.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_hsem.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_ipcc.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_pwr.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_pwr_ex.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_rcc.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_rcc_ex.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_rtc.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_rtc_ex.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_tim.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_tim_ex.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_uart.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32WBxx_HAL_Driver\Src\stm32wbxx_hal_uart_ex.c</name>
+ </file>
+ </group>
+ </group>
+ <group>
+ <name>Middlewares</name>
+ <group>
+ <name>FreeRTOS</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\croutine.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\event_groups.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\list.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\portable\IAR\ARM_CM4F\port.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\portable\IAR\ARM_CM4F\portasm.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\queue.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\tasks.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FreeRTOS\Source\timers.c</name>
+ </file>
+ </group>
+ <group>
+ <name>STM32_WPAN</name>
+ <group>
+ <name>interface</name>
+ <group>
+ <name>patterns</name>
+ <group>
+ <name>ble_thread</name>
+ <group>
+ <name>schi</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\interface\patterns\ble_thread\shci\shci.c</name>
+ </file>
+ </group>
+ <group>
+ <name>tl</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\interface\patterns\ble_thread\tl\hci_tl_if.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\interface\patterns\ble_thread\tl\shci_tl.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\interface\patterns\ble_thread\tl\shci_tl_if.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\interface\patterns\ble_thread\tl\tl_mbox.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\interface\patterns\ble_thread\tl\tl_zigbee_hci.c</name>
+ </file>
+ </group>
+ </group>
+ </group>
+ </group>
+ <group>
+ <name>utilities</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\utilities\dbg_trace.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\utilities\otp.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\utilities\stm_list.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\utilities\stm_queue.c</name>
+ </file>
+ </group>
+ <group>
+ <name>zigbee</name>
+ <group>
+ <name>core</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\zigbee\core\src\zigbee_core_wb.c</name>
+ </file>
+ </group>
+ <group>
+ <name>stack</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\zigbee\lib\stm32wb_zigbee_wb_lib.a</name>
+ </file>
+ </group>
+ </group>
+ </group>
+ </group>
+ <group>
+ <name>Utilities</name>
+ <group>
+ <name>lpm</name>
+ <group>
+ <name>tiny_lpm</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Utilities\lpm\tiny_lpm\stm32_lpm.c</name>
+ </file>
+ </group>
+ </group>
+ <group>
+ <name>sequencer</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Utilities\sequencer\stm32_seq.c</name>
+ </file>
+ </group>
+ </group>
+</project>
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/startup_stm32wb55xx_cm4.s b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/startup_stm32wb55xx_cm4.s
new file mode 100644
index 000000000..f3b216985
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/startup_stm32wb55xx_cm4.s
@@ -0,0 +1,517 @@
+;******************************************************************************
+;* File Name : startup_stm32wb55xx_cm4.s
+;* Author : MCD Application Team
+;* Description : M4 core vector table of the STM32WB55xx devices for the
+;* IAR (EWARM) toolchain.
+;*
+;* 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-M4 processor is in Thread mode,
+;* priority is Privileged, and the Stack is set to Main.
+;******************************************************************************
+;* @attention
+;*
+;* <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
+;* All rights reserved.</center></h2>
+;*
+;* This software component is licensed by ST under Apache License, Version 2.0,
+;* the "License"; You may not use this file except in compliance with the
+;* License. You may obtain a copy of the License at:
+;* opensource.org/licenses/Apache-2.0
+;*
+;******************************************************************************
+;
+;
+; 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
+
+ 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 0 ; Reserved
+ 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_PVM_IRQHandler ; PVD and PVM Interrupt
+ DCD TAMP_STAMP_LSECSS_IRQHandler ; RTC Tamper, TimeStamp Interrupts and LSECSS Interrupts
+ DCD RTC_WKUP_IRQHandler ; RTC Wakeup Interrupt
+ DCD FLASH_IRQHandler ; FLASH global Interrupt
+ DCD RCC_IRQHandler ; RCC Interrupt
+ DCD EXTI0_IRQHandler ; EXTI Line 0 Interrupt
+ DCD EXTI1_IRQHandler ; EXTI Line 1 Interrupt
+ DCD EXTI2_IRQHandler ; EXTI Line 2 Interrupt
+ DCD EXTI3_IRQHandler ; EXTI Line 3 Interrup
+ DCD EXTI4_IRQHandler ; EXTI Line 4 Interrupt
+ DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 Interrupt
+ DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 Interrupt
+ DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 Interrupt
+ DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 Interrupt
+ DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 Interrupt
+ DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 Interrupt
+ DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 Interrupt
+ DCD ADC1_IRQHandler ; ADC1 Interrupt
+ DCD USB_HP_IRQHandler ; USB High Priority Interrupt
+ DCD USB_LP_IRQHandler ; USB Low Priority Interrupt
+ DCD C2SEV_PWR_C2H_IRQHandler ; CPU M0+ SEV Interrupt
+ DCD COMP_IRQHandler ; COMP1 and COMP2 Interrupts
+ DCD EXTI9_5_IRQHandler ; EXTI Lines [9:5] Interrupt
+ DCD TIM1_BRK_IRQHandler ; TIM1 Break Interrupt
+ DCD TIM1_UP_TIM16_IRQHandler ; TIM1 Update and TIM16 global Interrupts
+ DCD TIM1_TRG_COM_TIM17_IRQHandler ; TIM1 Trigger and Communication and TIM17 global Interrupts
+ DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare Interrupt
+ DCD TIM2_IRQHandler ; TIM2 Global Interrupt
+ DCD PKA_IRQHandler ; PKA Interrupt
+ DCD I2C1_EV_IRQHandler ; I2C1 Event Interrupt
+ DCD I2C1_ER_IRQHandler ; I2C1 Error Interrupt
+ DCD I2C3_EV_IRQHandler ; I2C3 Event Interrupt
+ DCD I2C3_ER_IRQHandler ; I2C3 Error Interrupt
+ DCD SPI1_IRQHandler ; SPI1 Interrupt
+ DCD SPI2_IRQHandler ; SPI2 Interrupt
+ DCD USART1_IRQHandler ; USART1 Interrupt
+ DCD LPUART1_IRQHandler ; LPUART1 Interrupt
+ DCD SAI1_IRQHandler ; SAI Interrupt
+ DCD TSC_IRQHandler ; TSC Interrupt
+ DCD EXTI15_10_IRQHandler ; EXTI Lines1[15:10 ]Interrupts
+ DCD RTC_Alarm_IRQHandler ; RTC Alarms (A and B) Interrupt
+ DCD CRS_IRQHandler ; CRS interrupt
+ DCD PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler ; WKUP Interrupt from PWR
+ DCD IPCC_C1_RX_IRQHandler ; IPCC CPU1 RX occupied interrupt
+ DCD IPCC_C1_TX_IRQHandler ; IPCC CPU1 RX free interrupt
+ DCD HSEM_IRQHandler ; HSEM0 Interrupt
+ DCD LPTIM1_IRQHandler ; LPTIM1 Interrupt
+ DCD LPTIM2_IRQHandler ; LPTIM2 Interrupt
+ DCD LCD_IRQHandler ; LCD Interrupt
+ DCD QUADSPI_IRQHandler ; QUADSPI Interrupt
+ DCD AES1_IRQHandler ; AES1 Interrupt
+ DCD AES2_IRQHandler ; AES2 Interrupt
+ DCD RNG_IRQHandler ; RNG1 Interrupt
+ DCD FPU_IRQHandler ; FPU Interrupt
+ DCD DMA2_Channel1_IRQHandler ; DMA2 Channel 1 Interrupt
+ DCD DMA2_Channel2_IRQHandler ; DMA2 Channel 2 Interrupt
+ DCD DMA2_Channel3_IRQHandler ; DMA2 Channel 3 Interrupt
+ DCD DMA2_Channel4_IRQHandler ; DMA2 Channel 4 Interrupt
+ DCD DMA2_Channel5_IRQHandler ; DMA2 Channel 5 Interrupt
+ DCD DMA2_Channel6_IRQHandler ; DMA2 Channel 6 Interrupt
+ DCD DMA2_Channel7_IRQHandler ; DMA2 Channel 7 Interrupt
+ DCD DMAMUX1_OVR_IRQHandler ; DMAMUX overrun Interrupt
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; 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 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_PVM_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+PVD_PVM_IRQHandler
+ B PVD_PVM_IRQHandler
+
+ PUBWEAK TAMP_STAMP_LSECSS_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+TAMP_STAMP_LSECSS_IRQHandler
+ B TAMP_STAMP_LSECSS_IRQHandler
+
+ PUBWEAK RTC_WKUP_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+RTC_WKUP_IRQHandler
+ B RTC_WKUP_IRQHandler
+
+ PUBWEAK FLASH_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+FLASH_IRQHandler
+ B FLASH_IRQHandler
+
+ PUBWEAK RCC_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+RCC_IRQHandler
+ B RCC_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 DMA1_Channel1_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA1_Channel1_IRQHandler
+ B DMA1_Channel1_IRQHandler
+
+ PUBWEAK DMA1_Channel2_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA1_Channel2_IRQHandler
+ B DMA1_Channel2_IRQHandler
+
+ PUBWEAK DMA1_Channel3_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA1_Channel3_IRQHandler
+ B DMA1_Channel3_IRQHandler
+
+ PUBWEAK DMA1_Channel4_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA1_Channel4_IRQHandler
+ B DMA1_Channel4_IRQHandler
+
+ PUBWEAK DMA1_Channel5_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA1_Channel5_IRQHandler
+ B DMA1_Channel5_IRQHandler
+
+ PUBWEAK DMA1_Channel6_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA1_Channel6_IRQHandler
+ B DMA1_Channel6_IRQHandler
+
+ PUBWEAK DMA1_Channel7_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA1_Channel7_IRQHandler
+ B DMA1_Channel7_IRQHandler
+
+ PUBWEAK ADC1_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+ADC1_IRQHandler
+ B ADC1_IRQHandler
+
+ PUBWEAK USB_HP_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+USB_HP_IRQHandler
+ B USB_HP_IRQHandler
+
+ PUBWEAK USB_LP_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+USB_LP_IRQHandler
+ B USB_LP_IRQHandler
+
+ PUBWEAK C2SEV_PWR_C2H_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+C2SEV_PWR_C2H_IRQHandler
+ B C2SEV_PWR_C2H_IRQHandler
+
+ PUBWEAK COMP_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+COMP_IRQHandler
+ B COMP_IRQHandler
+
+ PUBWEAK EXTI9_5_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+EXTI9_5_IRQHandler
+ B EXTI9_5_IRQHandler
+
+ PUBWEAK TIM1_BRK_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+TIM1_BRK_IRQHandler
+ B TIM1_BRK_IRQHandler
+
+ PUBWEAK TIM1_UP_TIM16_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+TIM1_UP_TIM16_IRQHandler
+ B TIM1_UP_TIM16_IRQHandler
+
+ PUBWEAK TIM1_TRG_COM_TIM17_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+TIM1_TRG_COM_TIM17_IRQHandler
+ B TIM1_TRG_COM_TIM17_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 PKA_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+PKA_IRQHandler
+ B PKA_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 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 SPI1_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+SPI1_IRQHandler
+ B SPI1_IRQHandler
+
+ PUBWEAK SPI2_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+SPI2_IRQHandler
+ B SPI2_IRQHandler
+
+ PUBWEAK USART1_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+USART1_IRQHandler
+ B USART1_IRQHandler
+
+ PUBWEAK LPUART1_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+LPUART1_IRQHandler
+ B LPUART1_IRQHandler
+
+ PUBWEAK SAI1_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+SAI1_IRQHandler
+ B SAI1_IRQHandler
+
+ PUBWEAK TSC_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+TSC_IRQHandler
+ B TSC_IRQHandler
+
+ PUBWEAK EXTI15_10_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+EXTI15_10_IRQHandler
+ B EXTI15_10_IRQHandler
+
+ PUBWEAK RTC_Alarm_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+RTC_Alarm_IRQHandler
+ B RTC_Alarm_IRQHandler
+
+ PUBWEAK CRS_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+CRS_IRQHandler
+ B CRS_IRQHandler
+
+ PUBWEAK PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler
+ B PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler
+
+ PUBWEAK IPCC_C1_RX_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+IPCC_C1_RX_IRQHandler
+ B IPCC_C1_RX_IRQHandler
+
+ PUBWEAK IPCC_C1_TX_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+IPCC_C1_TX_IRQHandler
+ B IPCC_C1_TX_IRQHandler
+
+ PUBWEAK HSEM_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+HSEM_IRQHandler
+ B HSEM_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 LCD_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+LCD_IRQHandler
+ B LCD_IRQHandler
+
+ PUBWEAK QUADSPI_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+QUADSPI_IRQHandler
+ B QUADSPI_IRQHandler
+
+ PUBWEAK AES1_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+AES1_IRQHandler
+ B AES1_IRQHandler
+
+ PUBWEAK AES2_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+AES2_IRQHandler
+ B AES2_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 DMA2_Channel1_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA2_Channel1_IRQHandler
+ B DMA2_Channel1_IRQHandler
+
+ PUBWEAK DMA2_Channel2_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA2_Channel2_IRQHandler
+ B DMA2_Channel2_IRQHandler
+
+ PUBWEAK DMA2_Channel3_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA2_Channel3_IRQHandler
+ B DMA2_Channel3_IRQHandler
+
+ PUBWEAK DMA2_Channel4_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA2_Channel4_IRQHandler
+ B DMA2_Channel4_IRQHandler
+
+ PUBWEAK DMA2_Channel5_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA2_Channel5_IRQHandler
+ B DMA2_Channel5_IRQHandler
+
+ PUBWEAK DMA2_Channel6_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA2_Channel6_IRQHandler
+ B DMA2_Channel6_IRQHandler
+
+ PUBWEAK DMA2_Channel7_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMA2_Channel7_IRQHandler
+ B DMA2_Channel7_IRQHandler
+
+ PUBWEAK DMAMUX1_OVR_IRQHandler
+ SECTION .text:CODE:NOROOT:REORDER(1)
+DMAMUX1_OVR_IRQHandler
+ B DMAMUX1_OVR_IRQHandler
+
+ END
+
+;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE*****
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/stm32wb55xx_flash_cm4.icf b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/stm32wb55xx_flash_cm4.icf
new file mode 100644
index 000000000..70aec4026
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/EWARM/stm32wb55xx_flash_cm4.icf
@@ -0,0 +1,47 @@
+/*###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-*/
+/***** FLASH Part dedicated to M4 *****/
+define symbol __ICFEDIT_region_ROM_start__ = 0x08000000;
+define symbol __ICFEDIT_region_ROM_end__ = 0x0807FFFF;
+define symbol __ICFEDIT_region_RAM_start__ = 0x20000004;
+define symbol __ICFEDIT_region_RAM_end__ = 0x2002F000;
+
+ /*0x2002FFFF---------------------------------------|
+ * | Emulation Flash |
+ * 0x2002F000-------------------------------------- |
+ * | Region_RAM |
+ * 0x20000004-------------------------------------- |
+
+/*-Sizes-*/
+define symbol __ICFEDIT_size_cstack__ = 0x1000; /* 4K */
+define symbol __ICFEDIT_size_heap__ = 102400; /* was 4K */
+/**** End of ICF editor section. ###ICF###*/
+
+define symbol __ICFEDIT_region_RAM_SHARED_start__ = 0x20030000;
+define symbol __ICFEDIT_region_RAM_SHARED_end__ = 0x20031000;
+
+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 RAM_SHARED_region = mem:[from __ICFEDIT_region_RAM_SHARED_start__ to __ICFEDIT_region_RAM_SHARED_end__];
+
+define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
+define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
+
+/* MB_MEM1 and MB_MEM2 are sections reserved to mailbox communication. It is placed in the shared memory */
+initialize by copy { readwrite };
+do not initialize { section .noinit,
+ section MAPPING_TABLE,
+ section MB_MEM1 };
+
+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 RAM_SHARED_region { first section MAPPING_TABLE};
+place in RAM_SHARED_region { section MB_MEM1};
+place in RAM_SHARED_region { section MB_MEM2};
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/STM32_WPAN/App/app_zigbee.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/STM32_WPAN/App/app_zigbee.c
new file mode 100644
index 000000000..9c0db09c2
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/STM32_WPAN/App/app_zigbee.c
@@ -0,0 +1,757 @@
+
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : App/app_zigbee.c
+ * Description : Zigbee Application.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "app_common.h"
+#include "app_entry.h"
+#include "dbg_trace.h"
+#include "app_zigbee.h"
+#include "zigbee_interface.h"
+#include "shci.h"
+#include "stm_logging.h"
+#include "app_conf.h"
+#include "stm32wbxx_core_interface_def.h"
+#include "zigbee_types.h"
+#include "cmsis_os.h"
+
+/* Private includes -----------------------------------------------------------*/
+#include <assert.h>
+#include "zcl/zcl.h"
+#include "zcl/general/zcl.onoff.h"
+
+/* USER CODE BEGIN Includes */
+/* USER CODE END Includes */
+
+/* Private typedef -----------------------------------------------------------*/
+/* USER CODE BEGIN PTD */
+/* USER CODE END PTD */
+
+/* Private defines -----------------------------------------------------------*/
+#define APP_ZIGBEE_STARTUP_FAIL_DELAY 500U
+#define CHANNEL 13
+
+#define SW1_ENDPOINT 17
+
+/* USER CODE BEGIN PD */
+#define SW1_GROUP_ADDR 0x0001
+/* USER CODE END PD */
+
+/* Private macros ------------------------------------------------------------*/
+/* USER CODE BEGIN PM */
+/* USER CODE END PM */
+
+/* External definition -------------------------------------------------------*/
+enum ZbStatusCodeT ZbStartupWait(struct ZigBeeT *zb, struct ZbStartupT *config);
+
+/* USER CODE BEGIN ED */
+/* USER CODE END ED */
+
+/* Private function prototypes -----------------------------------------------*/
+static void APP_ZIGBEE_StackLayersInit(void);
+static void APP_ZIGBEE_ConfigEndpoints(void);
+static void APP_ZIGBEE_NwkForm(void);
+
+static void APP_ZIGBEE_TraceError(const char *pMess, uint32_t ErrCode);
+static void APP_ZIGBEE_CheckWirelessFirmwareInfo(void);
+
+static void Wait_Getting_Ack_From_M0(void);
+static void Receive_Ack_From_M0(void);
+static void Receive_Notification_From_M0(void);
+
+static void APP_ZIGBEE_ProcessNotifyM0ToM4(void * argument);
+static void APP_ZIGBEE_ProcessRequestM0ToM4(void * argument);
+static void APP_ZIGBEE_ProcessNwkForm(void * argument);
+/* USER CODE BEGIN PFP */
+static void APP_ZIGBEE_ConfigGroupAddr(void);
+/* USER CODE END PFP */
+
+/* Private variables ---------------------------------------------------------*/
+static TL_CmdPacket_t *p_ZIGBEE_otcmdbuffer;
+static TL_EvtPacket_t *p_ZIGBEE_notif_M0_to_M4;
+static TL_EvtPacket_t *p_ZIGBEE_request_M0_to_M4;
+static __IO uint32_t CptReceiveNotifyFromM0 = 0;
+static __IO uint32_t CptReceiveRequestFromM0 = 0;
+static volatile int FlagReceiveAckFromM0 = 0;
+
+static osThreadId_t OsTaskNotifyM0ToM4Id;
+static osThreadId_t OsTaskRequestM0ToM4Id;
+static osThreadId_t OsTaskNwkFormId;
+static osMutexId_t MtxZigbeeId;
+
+osSemaphoreId_t TransferToM0Semaphore;
+osSemaphoreId_t StartupEndSemaphore;
+
+PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static TL_ZIGBEE_Config_t ZigbeeConfigBuffer;
+PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static TL_CmdPacket_t ZigbeeOtCmdBuffer;
+PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static uint8_t ZigbeeNotifRspEvtBuffer[sizeof(TL_PacketHeader_t) + TL_EVT_HDR_SIZE + 255U];
+PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static uint8_t ZigbeeNotifRequestBuffer[sizeof(TL_PacketHeader_t) + TL_EVT_HDR_SIZE + 255U];
+
+struct zigbee_app_info {
+ bool has_init;
+ struct ZigBeeT *zb;
+ enum ZbStartType startupControl;
+ enum ZbStatusCodeT join_status;
+ uint32_t join_delay;
+ bool init_after_join;
+
+ struct ZbZclClusterT *onOff_server_1;
+};
+static struct zigbee_app_info zigbee_app_info;
+
+/* FreeRtos stacks attributes */
+const osThreadAttr_t TaskNotifyM0ToM4_attr = {
+ .name = CFG_TASK_NOTIFY_M0_TO_M4_PROCESS_NAME,
+ .attr_bits = CFG_TASK_PROCESS_ATTR_BITS,
+ .cb_mem = CFG_TASK_PROCESS_CB_MEM,
+ .cb_size = CFG_TASK_PROCESS_CB_SIZE,
+ .stack_mem = CFG_TASK_PROCESS_STACK_MEM,
+ .priority = osPriorityNormal,
+ .stack_size = CFG_TASK_PROCESS_STACK_SIZE
+};
+const osThreadAttr_t TaskRequestM0ToM4_attr = {
+ .name = CFG_TASK_REQUEST_M0_TO_M4_PROCESS_NAME,
+ .attr_bits = CFG_TASK_PROCESS_ATTR_BITS,
+ .cb_mem = CFG_TASK_PROCESS_CB_MEM,
+ .cb_size = CFG_TASK_PROCESS_CB_SIZE,
+ .stack_mem = CFG_TASK_PROCESS_STACK_MEM,
+ .priority = osPriorityNormal,
+ .stack_size = CFG_TASK_PROCESS_STACK_SIZE
+};
+const osThreadAttr_t TaskNwkForm_attr = {
+ .name = CFG_TASK_NWK_FORM_PROCESS_NAME,
+ .attr_bits = CFG_TASK_PROCESS_ATTR_BITS,
+ .cb_mem = CFG_TASK_PROCESS_CB_MEM,
+ .cb_size = CFG_TASK_PROCESS_CB_SIZE,
+ .stack_mem = CFG_TASK_PROCESS_STACK_MEM,
+ .priority = osPriorityNormal,
+ .stack_size = CFG_TASK_PROCESS_STACK_SIZE
+};
+
+/* OnOff server 1 custom callbacks */
+static enum ZclStatusCodeT onOff_server_1_off(struct ZbZclClusterT *cluster, struct ZbZclAddrInfoT *srcInfo, void *arg);
+static enum ZclStatusCodeT onOff_server_1_on(struct ZbZclClusterT *cluster, struct ZbZclAddrInfoT *srcInfo, void *arg);
+static enum ZclStatusCodeT onOff_server_1_toggle(struct ZbZclClusterT *cluster, struct ZbZclAddrInfoT *srcInfo, void *arg);
+
+static struct ZbZclOnOffServerCallbacksT OnOffServerCallbacks_1 = {
+ .off = onOff_server_1_off,
+ .on = onOff_server_1_on,
+ .toggle = onOff_server_1_toggle,
+};
+
+/* USER CODE BEGIN PV */
+/* USER CODE END PV */
+/* Functions Definition ------------------------------------------------------*/
+
+/* OnOff server off 1 command callback */
+static enum ZclStatusCodeT onOff_server_1_off(struct ZbZclClusterT *cluster, struct ZbZclAddrInfoT *srcInfo, void *arg){
+ /* USER CODE BEGIN 0 OnOff server 1 off 1 */
+ uint8_t endpoint;
+
+ endpoint = ZbZclClusterGetEndpoint(cluster);
+ if (endpoint == SW1_ENDPOINT) {
+ APP_DBG("LED_RED OFF");
+ BSP_LED_Off(LED_RED);
+ (void)ZbZclAttrIntegerWrite(cluster, ZCL_ONOFF_ATTR_ONOFF, 0);
+ }
+ else {
+ /* Unknown endpoint */
+ return ZCL_STATUS_FAILURE;
+ }
+ return ZCL_STATUS_SUCCESS;
+ /* USER CODE END 0 OnOff server 1 off 1 */
+}
+
+/* OnOff server on 1 command callback */
+static enum ZclStatusCodeT onOff_server_1_on(struct ZbZclClusterT *cluster, struct ZbZclAddrInfoT *srcInfo, void *arg){
+ /* USER CODE BEGIN 1 OnOff server 1 on 1 */
+ uint8_t endpoint;
+
+ endpoint = ZbZclClusterGetEndpoint(cluster);
+ if (endpoint == SW1_ENDPOINT) {
+ APP_DBG("LED_RED ON");
+ BSP_LED_On(LED_RED);
+ (void)ZbZclAttrIntegerWrite(cluster, ZCL_ONOFF_ATTR_ONOFF, 1);
+ }
+ else {
+ /* Unknown endpoint */
+ return ZCL_STATUS_FAILURE;
+ }
+ return ZCL_STATUS_SUCCESS;
+ /* USER CODE END 1 OnOff server 1 on 1 */
+}
+
+/* OnOff server toggle 1 command callback */
+static enum ZclStatusCodeT onOff_server_1_toggle(struct ZbZclClusterT *cluster, struct ZbZclAddrInfoT *srcInfo, void *arg){
+ /* USER CODE BEGIN 2 OnOff server 1 toggle 1 */
+ uint8_t attrVal;
+
+ if (ZbZclAttrRead(cluster, ZCL_ONOFF_ATTR_ONOFF, NULL,
+ &attrVal, sizeof(attrVal), false) != ZCL_STATUS_SUCCESS) {
+ return ZCL_STATUS_FAILURE;
+ }
+ if (attrVal != 0) {
+ return onOff_server_1_off(cluster, srcInfo, arg);
+ }
+ else {
+ return onOff_server_1_on(cluster, srcInfo, arg);
+ }
+ /* USER CODE END 2 OnOff server 1 toggle 1 */
+}
+
+/**
+ * @brief Zigbee application initialization
+ * @param None
+ * @retval None
+ */
+void APP_ZIGBEE_Init(void)
+{
+ SHCI_CmdStatus_t ZigbeeInitStatus;
+
+ APP_DBG("APP_ZIGBEE_Init");
+
+ /* Check the compatibility with the Coprocessor Wireless Firmware loaded */
+ APP_ZIGBEE_CheckWirelessFirmwareInfo();
+
+ /* Register cmdbuffer */
+ APP_ZIGBEE_RegisterCmdBuffer(&ZigbeeOtCmdBuffer);
+
+ /* Init config buffer and call TL_ZIGBEE_Init */
+ APP_ZIGBEE_TL_INIT();
+
+ /* Initialize the mutex */
+ MtxZigbeeId = osMutexNew( NULL );
+
+ /* Initialize the semaphores */
+ StartupEndSemaphore = osSemaphoreNew( 1, 0, NULL ); /*< Create the semaphore and make it busy at initialization */
+ TransferToM0Semaphore = osSemaphoreNew( 1, 0, NULL );
+
+ /* Register task */
+ /* Create the different tasks */
+
+ OsTaskNotifyM0ToM4Id = osThreadNew(APP_ZIGBEE_ProcessNotifyM0ToM4, NULL,&TaskNotifyM0ToM4_attr);
+ OsTaskRequestM0ToM4Id = osThreadNew(APP_ZIGBEE_ProcessRequestM0ToM4, NULL,&TaskRequestM0ToM4_attr);
+
+ /* Task associated with network creation process */
+ OsTaskNwkFormId = osThreadNew(APP_ZIGBEE_ProcessNwkForm, NULL,&TaskNwkForm_attr);
+
+ /* USER CODE BEGIN APP_ZIGBEE_INIT */
+ /* USER CODE END APP_ZIGBEE_INIT */
+
+ /* Start the Zigbee on the CPU2 side */
+ ZigbeeInitStatus = SHCI_C2_ZIGBEE_Init();
+ /* Prevent unused argument(s) compilation warning */
+ UNUSED(ZigbeeInitStatus);
+
+ /* Initialize Zigbee stack layers */
+ APP_ZIGBEE_StackLayersInit();
+
+} /* APP_ZIGBEE_Init */
+
+/**
+ * @brief Initialize Zigbee stack layers
+ * @param None
+ * @retval None
+ */
+static void APP_ZIGBEE_StackLayersInit(void)
+{
+ APP_DBG("APP_ZIGBEE_StackLayersInit");
+
+ zigbee_app_info.zb = ZbInit(0U, NULL, NULL);
+ assert(zigbee_app_info.zb != NULL);
+
+ /* Create the endpoint and cluster(s) */
+ APP_ZIGBEE_ConfigEndpoints();
+
+ /* USER CODE BEGIN APP_ZIGBEE_StackLayersInit */
+ BSP_LED_Off(LED_RED);
+ BSP_LED_Off(LED_GREEN);
+ BSP_LED_Off(LED_BLUE);
+ /* USER CODE END APP_ZIGBEE_StackLayersInit */
+
+ /* Configure the joining parameters */
+ zigbee_app_info.join_status = (enum ZbStatusCodeT) 0x01; /* init to error status */
+ zigbee_app_info.join_delay = HAL_GetTick(); /* now */
+ zigbee_app_info.startupControl = ZbStartTypeForm;
+
+ /* Initialization Complete */
+ zigbee_app_info.has_init = true;
+
+ /* run the task */
+ osThreadFlagsSet(OsTaskNwkFormId,1);
+} /* APP_ZIGBEE_StackLayersInit */
+
+/**
+ * @brief Configure Zigbee application endpoints
+ * @param None
+ * @retval None
+ */
+static void APP_ZIGBEE_ConfigEndpoints(void)
+{
+ struct ZbApsmeAddEndpointReqT req;
+ struct ZbApsmeAddEndpointConfT conf;
+
+ memset(&req, 0, sizeof(req));
+
+ /* Endpoint: SW1_ENDPOINT */
+ req.profileId = ZCL_PROFILE_HOME_AUTOMATION;
+ req.deviceId = ZCL_DEVICE_ONOFF_SWITCH;
+ req.endpoint = SW1_ENDPOINT;
+ ZbZclAddEndpoint(zigbee_app_info.zb, &req, &conf);
+ assert(conf.status == ZB_STATUS_SUCCESS);
+
+ /* OnOff server */
+ zigbee_app_info.onOff_server_1 = ZbZclOnOffServerAlloc(zigbee_app_info.zb, SW1_ENDPOINT, &OnOffServerCallbacks_1, NULL);
+ assert(zigbee_app_info.onOff_server_1 != NULL);
+ ZbZclClusterEndpointRegister(zigbee_app_info.onOff_server_1);
+ /* USER CODE BEGIN CONFIG_ENDPOINT */
+ /* USER CODE END CONFIG_ENDPOINT */
+} /* APP_ZIGBEE_ConfigEndpoints */
+
+/**
+ * @brief Handle Zigbee network forming and joining task for FreeRTOS
+ * @param None
+ * @retval None
+ */
+static void APP_ZIGBEE_ProcessNwkForm(void *argument)
+{
+ UNUSED(argument);
+ for(;;)
+ {
+ osThreadFlagsWait(1,osFlagsWaitAll,osWaitForever);
+ APP_ZIGBEE_NwkForm();
+ }
+}
+
+/**
+ * @brief Handle Zigbee network forming and joining
+ * @param None
+ * @retval None
+ */
+static void APP_ZIGBEE_NwkForm()
+{
+ if ((zigbee_app_info.join_status != ZB_STATUS_SUCCESS) && (HAL_GetTick() >= zigbee_app_info.join_delay))
+ {
+ struct ZbStartupT config;
+ enum ZbStatusCodeT status;
+
+ /* Configure Zigbee Logging */
+ ZbSetLogging(zigbee_app_info.zb, ZB_LOG_MASK_LEVEL_5, NULL);
+
+ /* Attempt to join a zigbee network */
+ ZbStartupConfigGetProDefaults(&config);
+
+ /* Set the centralized network */
+ APP_DBG("Network config : APP_STARTUP_CENTRALIZED_COORDINATOR");
+ config.startupControl = zigbee_app_info.startupControl;
+
+ /* Using the default HA preconfigured Link Key */
+ memcpy(config.security.preconfiguredLinkKey, sec_key_ha, ZB_SEC_KEYSIZE);
+
+ config.channelList.count = 1;
+ config.channelList.list[0].page = 0;
+ config.channelList.list[0].channelMask = 1 << CHANNEL; /*Channel in use */
+
+ /* Using ZbStartupWait (non-blocking) */
+ status = ZbStartupWait(zigbee_app_info.zb, &config);
+
+ APP_DBG("ZbStartup Callback (status = 0x%02x)", status);
+ zigbee_app_info.join_status = status;
+
+ if (status == ZB_STATUS_SUCCESS) {
+ /* USER CODE BEGIN 0 */
+ zigbee_app_info.join_delay = 0U;
+ zigbee_app_info.init_after_join = true;
+ BSP_LED_On(LED_BLUE);
+ }
+ else
+ {
+ /* USER CODE END 0 */
+ APP_DBG("Startup failed, attempting again after a short delay (%d ms)", APP_ZIGBEE_STARTUP_FAIL_DELAY);
+ zigbee_app_info.join_delay = HAL_GetTick() + APP_ZIGBEE_STARTUP_FAIL_DELAY;
+ }
+ }
+
+ /* If Network forming/joining was not successful reschedule the current task to retry the process */
+ if (zigbee_app_info.join_status != ZB_STATUS_SUCCESS)
+ {
+ osThreadFlagsSet(OsTaskNwkFormId,1);
+ }
+
+ /* USER CODE BEGIN NW_FORM */
+ else
+ {
+ zigbee_app_info.init_after_join = false;
+
+ /* Assign ourselves to the group addresses */
+ APP_ZIGBEE_ConfigGroupAddr();
+
+ /* Since we're using group addressing (broadcast), shorten the broadcast timeout */
+ uint32_t bcast_timeout = 3;
+ ZbNwkSet(zigbee_app_info.zb, ZB_NWK_NIB_ID_NetworkBroadcastDeliveryTime, &bcast_timeout, sizeof(bcast_timeout));
+ }
+ /* USER CODE END NW_FORM */
+} /* APP_ZIGBEE_NwkForm */
+
+/*************************************************************
+ * ZbStartupWait Blocking Call
+ *************************************************************/
+struct ZbStartupWaitInfo {
+ bool active;
+ enum ZbStatusCodeT status;
+};
+
+static void ZbStartupWaitCb(enum ZbStatusCodeT status, void *cb_arg)
+{
+ struct ZbStartupWaitInfo *info = cb_arg;
+
+ info->status = status;
+ info->active = false;
+ osSemaphoreRelease( StartupEndSemaphore );
+} /* ZbStartupWaitCb */
+
+enum ZbStatusCodeT ZbStartupWait(struct ZigBeeT *zb, struct ZbStartupT *config)
+{
+ struct ZbStartupWaitInfo *info;
+ enum ZbStatusCodeT status;
+
+ info = malloc(sizeof(struct ZbStartupWaitInfo));
+ if (info == NULL) {
+ return ZB_STATUS_ALLOC_FAIL;
+ }
+ memset(info, 0, sizeof(struct ZbStartupWaitInfo));
+
+ info->active = true;
+ status = ZbStartup(zb, config, ZbStartupWaitCb, info);
+ if (status != ZB_STATUS_SUCCESS) {
+ info->active = false;
+ return status;
+ }
+
+ osSemaphoreAcquire( StartupEndSemaphore, osWaitForever );
+ status = info->status;
+ free(info);
+ return status;
+} /* ZbStartupWait */
+
+/**
+ * @brief Trace the error or the warning reported.
+ * @param ErrId :
+ * @param ErrCode
+ * @retval None
+ */
+void APP_ZIGBEE_Error(uint32_t ErrId, uint32_t ErrCode)
+{
+ switch (ErrId) {
+ default:
+ APP_ZIGBEE_TraceError("ERROR Unknown ", 0);
+ break;
+ }
+} /* APP_ZIGBEE_Error */
+
+/*************************************************************
+ *
+ * LOCAL FUNCTIONS
+ *
+ *************************************************************/
+
+/**
+ * @brief Warn the user that an error has occurred.
+ *
+ * @param pMess : Message associated to the error.
+ * @param ErrCode: Error code associated to the module (Zigbee or other module if any)
+ * @retval None
+ */
+static void APP_ZIGBEE_TraceError(const char *pMess, uint32_t ErrCode)
+{
+ APP_DBG("**** Fatal error = %s (Err = %d)", pMess, ErrCode);
+ /* USER CODE BEGIN TRACE_ERROR */
+ while (1U == 1U) {
+ BSP_LED_Toggle(LED1);
+ HAL_Delay(500U);
+ BSP_LED_Toggle(LED2);
+ HAL_Delay(500U);
+ BSP_LED_Toggle(LED3);
+ HAL_Delay(500U);
+ }
+ /* USER CODE END TRACE_ERROR */
+
+} /* APP_ZIGBEE_TraceError */
+
+/**
+ * @brief Check if the Coprocessor Wireless Firmware loaded supports Zigbee
+ * and display associated information
+ * @param None
+ * @retval None
+ */
+static void APP_ZIGBEE_CheckWirelessFirmwareInfo(void)
+{
+ WirelessFwInfo_t wireless_info_instance;
+ WirelessFwInfo_t *p_wireless_info = &wireless_info_instance;
+
+ if (SHCI_GetWirelessFwInfo(p_wireless_info) != SHCI_Success) {
+ APP_ZIGBEE_Error((uint32_t)ERR_ZIGBEE_CHECK_WIRELESS, (uint32_t)ERR_INTERFACE_FATAL);
+ }
+ else {
+ APP_DBG("**********************************************************");
+ APP_DBG("WIRELESS COPROCESSOR FW:");
+ /* Print version */
+ APP_DBG("VERSION ID = %d.%d.%d", p_wireless_info->VersionMajor, p_wireless_info->VersionMinor, p_wireless_info->VersionSub);
+
+ switch (p_wireless_info->StackType) {
+ case INFO_STACK_TYPE_ZIGBEE_FFD:
+ APP_DBG("FW Type : FFD Zigbee stack");
+ break;
+ case INFO_STACK_TYPE_ZIGBEE_RFD:
+ APP_DBG("FW Type : RFD Zigbee stack");
+ break;
+ default:
+ /* No Zigbee device supported ! */
+ APP_ZIGBEE_Error((uint32_t)ERR_ZIGBEE_CHECK_WIRELESS, (uint32_t)ERR_INTERFACE_FATAL);
+ break;
+ }
+ APP_DBG("**********************************************************");
+ }
+} /* APP_ZIGBEE_CheckWirelessFirmwareInfo */
+
+/*************************************************************
+ *
+ * WRAP FUNCTIONS
+ *
+ *************************************************************/
+
+void APP_ZIGBEE_RegisterCmdBuffer(TL_CmdPacket_t *p_buffer)
+{
+ p_ZIGBEE_otcmdbuffer = p_buffer;
+} /* APP_ZIGBEE_RegisterCmdBuffer */
+
+Zigbee_Cmd_Request_t * ZIGBEE_Get_OTCmdPayloadBuffer(void)
+{
+ return (Zigbee_Cmd_Request_t *)p_ZIGBEE_otcmdbuffer->cmdserial.cmd.payload;
+} /* ZIGBEE_Get_OTCmdPayloadBuffer */
+
+Zigbee_Cmd_Request_t * ZIGBEE_Get_OTCmdRspPayloadBuffer(void)
+{
+ return (Zigbee_Cmd_Request_t *)((TL_EvtPacket_t *)p_ZIGBEE_otcmdbuffer)->evtserial.evt.payload;
+} /* ZIGBEE_Get_OTCmdRspPayloadBuffer */
+
+Zigbee_Cmd_Request_t * ZIGBEE_Get_NotificationPayloadBuffer(void)
+{
+ return (Zigbee_Cmd_Request_t *)(p_ZIGBEE_notif_M0_to_M4)->evtserial.evt.payload;
+} /* ZIGBEE_Get_NotificationPayloadBuffer */
+
+Zigbee_Cmd_Request_t * ZIGBEE_Get_M0RequestPayloadBuffer(void)
+{
+ return (Zigbee_Cmd_Request_t *)(p_ZIGBEE_request_M0_to_M4)->evtserial.evt.payload;
+}
+
+/**
+ * @brief This function is used to transfer the commands from the M4 to the M0.
+ *
+ * @param None
+ * @return None
+ */
+void ZIGBEE_CmdTransfer(void)
+{
+ Zigbee_Cmd_Request_t *cmd_req = (Zigbee_Cmd_Request_t *)p_ZIGBEE_otcmdbuffer->cmdserial.cmd.payload;
+
+ /* Zigbee OT command cmdcode range 0x280 .. 0x3DF = 352 */
+ p_ZIGBEE_otcmdbuffer->cmdserial.cmd.cmdcode = 0x280U;
+ /* Size = otCmdBuffer->Size (Number of OT cmd arguments : 1 arg = 32bits so multiply by 4 to get size in bytes)
+ * + ID (4 bytes) + Size (4 bytes) */
+ p_ZIGBEE_otcmdbuffer->cmdserial.cmd.plen = 8U + (cmd_req->Size * 4U);
+
+ TL_ZIGBEE_SendM4RequestToM0();
+
+ /* Wait completion of cmd */
+ Wait_Getting_Ack_From_M0();
+} /* ZIGBEE_CmdTransfer */
+
+/**
+ * @brief This function is called when the M0+ acknowledge the fact that it has received a Cmd
+ *
+ *
+ * @param Otbuffer : a pointer to TL_EvtPacket_t
+ * @return None
+ */
+void TL_ZIGBEE_CmdEvtReceived(TL_EvtPacket_t *Otbuffer)
+{
+ /* Prevent unused argument(s) compilation warning */
+ UNUSED(Otbuffer);
+
+ Receive_Ack_From_M0();
+} /* TL_ZIGBEE_CmdEvtReceived */
+
+/**
+ * @brief This function is called when notification from M0+ is received.
+ *
+ * @param Notbuffer : a pointer to TL_EvtPacket_t
+ * @return None
+ */
+void TL_ZIGBEE_NotReceived(TL_EvtPacket_t *Notbuffer)
+{
+ p_ZIGBEE_notif_M0_to_M4 = Notbuffer;
+
+ Receive_Notification_From_M0();
+} /* TL_ZIGBEE_NotReceived */
+
+/**
+ * @brief This function is called before sending any ot command to the M0
+ * core. The purpose of this function is to be able to check if
+ * there are no notifications coming from the M0 core which are
+ * pending before sending a new ot command.
+ * @param None
+ * @retval None
+ */
+void Pre_ZigbeeCmdProcessing(void)
+{
+ osMutexAcquire( MtxZigbeeId, osWaitForever );
+} /* Pre_ZigbeeCmdProcessing */
+
+
+/**
+ * @brief This function waits for getting an acknowledgment from the M0.
+ *
+ * @param None
+ * @retval None
+ */
+static void Wait_Getting_Ack_From_M0(void)
+{
+ osSemaphoreAcquire( TransferToM0Semaphore, osWaitForever );
+ osMutexRelease( MtxZigbeeId );
+} /* Wait_Getting_Ack_From_M0 */
+
+/**
+ * @brief Receive an acknowledgment from the M0+ core.
+ * Each command send by the M4 to the M0 are acknowledged.
+ * This function is called under interrupt.
+ * @param None
+ * @retval None
+ */
+static void Receive_Ack_From_M0(void)
+{
+ osSemaphoreRelease( TransferToM0Semaphore);
+} /* Receive_Ack_From_M0 */
+
+
+/**
+ * @brief Receive a notification from the M0+ through the IPCC.
+ * This function is called under interrupt.
+ * @param None
+ * @retval None
+ */
+static void Receive_Notification_From_M0(void)
+{
+ CptReceiveNotifyFromM0++;
+ osThreadFlagsSet(OsTaskNotifyM0ToM4Id,1);
+}
+
+/**
+ * @brief This function is called when a request from M0+ is received.
+ *
+ * @param Notbuffer : a pointer to TL_EvtPacket_t
+ * @return None
+ */
+void TL_ZIGBEE_M0RequestReceived(TL_EvtPacket_t *Reqbuffer)
+{
+ p_ZIGBEE_request_M0_to_M4 = Reqbuffer;
+
+ CptReceiveRequestFromM0++;
+ osThreadFlagsSet(OsTaskRequestM0ToM4Id,1);
+}
+
+/**
+ * @brief Perform initialization of TL for Zigbee.
+ * @param None
+ * @retval None
+ */
+void APP_ZIGBEE_TL_INIT(void)
+{
+ ZigbeeConfigBuffer.p_ZigbeeOtCmdRspBuffer = (uint8_t *)&ZigbeeOtCmdBuffer;
+ ZigbeeConfigBuffer.p_ZigbeeNotAckBuffer = (uint8_t *)ZigbeeNotifRspEvtBuffer;
+ ZigbeeConfigBuffer.p_ZigbeeNotifRequestBuffer = (uint8_t *)ZigbeeNotifRequestBuffer;
+ TL_ZIGBEE_Init(&ZigbeeConfigBuffer);
+}
+
+/**
+ * @brief Process the messages coming from the M0.
+ * @param None
+ * @retval None
+ */
+static void APP_ZIGBEE_ProcessNotifyM0ToM4(void * argument)
+{
+ UNUSED(argument);
+ for(;;)
+ {
+ osThreadFlagsWait(1,osFlagsWaitAll,osWaitForever);
+ if (CptReceiveNotifyFromM0 != 0) {
+ /* If CptReceiveNotifyFromM0 is > 1. it means that we did not serve all the events from the radio */
+ if (CptReceiveNotifyFromM0 > 1U) {
+ APP_ZIGBEE_Error(ERR_REC_MULTI_MSG_FROM_M0, 0);
+ }
+ else {
+ Zigbee_CallBackProcessing();
+ }
+ /* Reset counter */
+ CptReceiveNotifyFromM0 = 0;
+ }
+ }
+}
+
+/**
+ * @brief Process the requests coming from the M0.
+ * @param
+ * @return
+ */
+static void APP_ZIGBEE_ProcessRequestM0ToM4(void * argument)
+{
+ UNUSED(argument);
+ for(;;)
+ {
+ osThreadFlagsWait(1,osFlagsWaitAll,osWaitForever);
+ if (CptReceiveRequestFromM0 != 0) {
+ Zigbee_M0RequestProcessing();
+ CptReceiveRequestFromM0 = 0;
+ }
+ }
+}
+/* USER CODE BEGIN FD_LOCAL_FUNCTIONS */
+
+/**
+ * @brief Set group addressing mode
+ * @param None
+ * @retval None
+ */
+static void APP_ZIGBEE_ConfigGroupAddr(void)
+{
+ struct ZbApsmeAddGroupReqT req;
+ struct ZbApsmeAddGroupConfT conf;
+
+ memset(&req, 0, sizeof(req));
+ req.endpt = SW1_ENDPOINT;
+ req.groupAddr = SW1_GROUP_ADDR;
+ ZbApsmeAddGroupReq(zigbee_app_info.zb, &req, &conf);
+
+} /* APP_ZIGBEE_ConfigGroupAddr */
+
+/* USER CODE END FD_LOCAL_FUNCTIONS */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/STM32_WPAN/App/app_zigbee.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/STM32_WPAN/App/app_zigbee.h
new file mode 100644
index 000000000..09a1aa9c1
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/STM32_WPAN/App/app_zigbee.h
@@ -0,0 +1,90 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : app_zigbee.h
+ * Description : Header for Zigbee Application.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef APP_ZIGBEE_H
+#define APP_ZIGBEE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+/* Private includes ----------------------------------------------------------*/
+#include "tl.h"
+#include "tl_zigbee_hci.h"
+
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+/* Exported types ------------------------------------------------------------*/
+
+/* Application errors */
+/*------------------------------------*/
+
+/*
+ * List of all errors tracked by the Zigbee application
+ * running on M4. Some of these errors may be fatal
+ * or just warnings
+ */
+typedef enum
+{
+ ERR_REC_MULTI_MSG_FROM_M0,
+ ERR_ZIGBE_CMD_TO_M0,
+/* USER CODE BEGIN ERROR_APPLI_ENUM */
+
+/* USER CODE END ERROR_APPLI_ENUM */
+ ERR_ZIGBEE_CHECK_WIRELESS
+} ErrAppliIdEnum_t;
+/* USER CODE BEGIN ET */
+
+/* USER CODE END ET */
+
+/* Exported constants --------------------------------------------------------*/
+/* USER CODE BEGIN EC */
+
+/* USER CODE END EC */
+
+/* External variables --------------------------------------------------------*/
+/* USER CODE BEGIN EV */
+
+/* USER CODE END EV */
+
+/* Exported macros ------------------------------------------------------------*/
+/* USER CODE BEGIN EM */
+
+/* USER CODE END EM */
+
+/* Exported functions ------------------------------------------------------- */
+void APP_ZIGBEE_Init(void);
+void APP_ZIGBEE_Error(uint32_t ErrId, uint32_t ErrCode);
+void APP_ZIGBEE_RegisterCmdBuffer(TL_CmdPacket_t *p_buffer);
+void APP_ZIGBEE_TL_INIT(void);
+void Pre_ZigbeeCmdProcessing(void);
+/* USER CODE BEGIN EF */
+
+/* USER CODE END EF */
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* APP_ZIGBEE_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/STM32_WPAN/App/tl_dbg_conf.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/STM32_WPAN/App/tl_dbg_conf.h
new file mode 100644
index 000000000..7bfe8fac6
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/STM32_WPAN/App/tl_dbg_conf.h
@@ -0,0 +1,136 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : App/tl_dbg_conf.h
+ * Description : Debug configuration file for stm32wpan transport layer interface.
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __TL_DBG_CONF_H
+#define __TL_DBG_CONF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* USER CODE BEGIN Tl_Conf */
+
+/* Includes ------------------------------------------------------------------*/
+#include "app_conf.h" /* required as some configuration used in dbg_trace.h are set there */
+#include "dbg_trace.h"
+#include "hw_if.h"
+
+/**
+ * Enable or Disable traces
+ * The raw data output is the hci binary packet format as specified by the BT specification *
+ */
+#define TL_SHCI_CMD_DBG_EN 0 /* Reports System commands sent to CPU2 and the command response */
+#define TL_SHCI_CMD_DBG_RAW_EN 0 /* Reports raw data System commands sent to CPU2 and the command response */
+#define TL_SHCI_EVT_DBG_EN 0 /* Reports System Asynchronous Events received from CPU2 */
+#define TL_SHCI_EVT_DBG_RAW_EN 0 /* Reports raw data System Asynchronous Events received from CPU2 */
+
+#define TL_HCI_CMD_DBG_EN 0 /* Reports BLE command sent to CPU2 and the command response */
+#define TL_HCI_CMD_DBG_RAW_EN 0 /* Reports raw data BLE command sent to CPU2 and the command response */
+#define TL_HCI_EVT_DBG_EN 0 /* Reports BLE Asynchronous Events received from CPU2 */
+#define TL_HCI_EVT_DBG_RAW_EN 0 /* Reports raw data BLE Asynchronous Events received from CPU2 */
+
+#define TL_MM_DBG_EN 0 /* Reports the informations of the buffer released to CPU2 */
+
+/**
+ * Macro definition
+ */
+
+/**
+ * System Transport Layer
+ */
+#if (TL_SHCI_CMD_DBG_EN != 0)
+#define TL_SHCI_CMD_DBG_MSG PRINT_MESG_DBG
+#define TL_SHCI_CMD_DBG_BUF PRINT_LOG_BUFF_DBG
+#else
+#define TL_SHCI_CMD_DBG_MSG(...)
+#define TL_SHCI_CMD_DBG_BUF(...)
+#endif
+
+#if (TL_SHCI_CMD_DBG_RAW_EN != 0)
+#define TL_SHCI_CMD_DBG_RAW(_PDATA_, _SIZE_) HW_UART_Transmit(hw_uart1, (uint8_t*)_PDATA_, _SIZE_, (~0))
+#else
+#define TL_SHCI_CMD_DBG_RAW(...)
+#endif
+
+#if (TL_SHCI_EVT_DBG_EN != 0)
+#define TL_SHCI_EVT_DBG_MSG PRINT_MESG_DBG
+#define TL_SHCI_EVT_DBG_BUF PRINT_LOG_BUFF_DBG
+#else
+#define TL_SHCI_EVT_DBG_MSG(...)
+#define TL_SHCI_EVT_DBG_BUF(...)
+#endif
+
+#if (TL_SHCI_EVT_DBG_RAW_EN != 0)
+#define TL_SHCI_EVT_DBG_RAW(_PDATA_, _SIZE_) HW_UART_Transmit(hw_uart1, (uint8_t*)_PDATA_, _SIZE_, (~0))
+#else
+#define TL_SHCI_EVT_DBG_RAW(...)
+#endif
+
+/**
+ * BLE Transport Layer
+ */
+#if (TL_HCI_CMD_DBG_EN != 0)
+#define TL_HCI_CMD_DBG_MSG PRINT_MESG_DBG
+#define TL_HCI_CMD_DBG_BUF PRINT_LOG_BUFF_DBG
+#else
+#define TL_HCI_CMD_DBG_MSG(...)
+#define TL_HCI_CMD_DBG_BUF(...)
+#endif
+
+#if (TL_HCI_CMD_DBG_RAW_EN != 0)
+#define TL_HCI_CMD_DBG_RAW(_PDATA_, _SIZE_) HW_UART_Transmit(hw_uart1, (uint8_t*)_PDATA_, _SIZE_, (~0))
+#else
+#define TL_HCI_CMD_DBG_RAW(...)
+#endif
+
+#if (TL_HCI_EVT_DBG_EN != 0)
+#define TL_HCI_EVT_DBG_MSG PRINT_MESG_DBG
+#define TL_HCI_EVT_DBG_BUF PRINT_LOG_BUFF_DBG
+#else
+#define TL_HCI_EVT_DBG_MSG(...)
+#define TL_HCI_EVT_DBG_BUF(...)
+#endif
+
+#if (TL_HCI_EVT_DBG_RAW_EN != 0)
+#define TL_HCI_EVT_DBG_RAW(_PDATA_, _SIZE_) HW_UART_Transmit(hw_uart1, (uint8_t*)_PDATA_, _SIZE_, (~0))
+#else
+#define TL_HCI_EVT_DBG_RAW(...)
+#endif
+
+/**
+ * Memory Manager - Released buffer tracing
+ */
+#if (TL_MM_DBG_EN != 0)
+#define TL_MM_DBG_MSG PRINT_MESG_DBG
+#else
+#define TL_MM_DBG_MSG(...)
+#endif
+
+/* USER CODE END Tl_Conf */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*__TL_DBG_CONF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/STM32_WPAN/Target/hw_ipcc.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/STM32_WPAN/Target/hw_ipcc.c
new file mode 100644
index 000000000..afa62b179
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/STM32_WPAN/Target/hw_ipcc.c
@@ -0,0 +1,675 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : Target/hw_ipcc.c
+ * Description : Hardware IPCC source file for STM32WPAN Middleware.
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+#include "app_common.h"
+#include "mbox_def.h"
+
+/* Global variables ---------------------------------------------------------*/
+/* Private defines -----------------------------------------------------------*/
+#define HW_IPCC_TX_PENDING( channel ) ( !(LL_C1_IPCC_IsActiveFlag_CHx( IPCC, channel )) ) && (((~(IPCC->C1MR)) & (channel << 16U)))
+#define HW_IPCC_RX_PENDING( channel ) (LL_C2_IPCC_IsActiveFlag_CHx( IPCC, channel )) && (((~(IPCC->C1MR)) & (channel << 0U)))
+
+/* Private macros ------------------------------------------------------------*/
+/* Private typedef -----------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+static void (*FreeBufCb)( void );
+
+/* Private function prototypes -----------------------------------------------*/
+static void HW_IPCC_BLE_EvtHandler( void );
+static void HW_IPCC_BLE_AclDataEvtHandler( void );
+static void HW_IPCC_MM_FreeBufHandler( void );
+static void HW_IPCC_SYS_CmdEvtHandler( void );
+static void HW_IPCC_SYS_EvtHandler( void );
+static void HW_IPCC_TRACES_EvtHandler( void );
+
+#ifdef THREAD_WB
+static void HW_IPCC_OT_CmdEvtHandler( void );
+static void HW_IPCC_THREAD_NotEvtHandler( void );
+static void HW_IPCC_THREAD_CliNotEvtHandler( void );
+#endif
+
+#ifdef LLD_TESTS_WB
+static void HW_IPCC_LLDTESTS_ReceiveCliRspHandler( void );
+static void HW_IPCC_LLDTESTS_ReceiveM0CmdHandler( void );
+#endif
+#ifdef LLD_BLE_WB
+/*static void HW_IPCC_LLD_BLE_ReceiveCliRspHandler( void );*/
+static void HW_IPCC_LLD_BLE_ReceiveRspHandler( void );
+static void HW_IPCC_LLD_BLE_ReceiveM0CmdHandler( void );
+#endif
+
+#ifdef MAC_802_15_4_WB
+static void HW_IPCC_MAC_802_15_4_CmdEvtHandler( void );
+static void HW_IPCC_MAC_802_15_4_NotEvtHandler( void );
+#endif
+
+#ifdef ZIGBEE_WB
+static void HW_IPCC_ZIGBEE_CmdEvtHandler( void );
+static void HW_IPCC_ZIGBEE_StackNotifEvtHandler( void );
+static void HW_IPCC_ZIGBEE_StackM0RequestHandler( void );
+#endif
+
+/* Public function definition -----------------------------------------------*/
+
+/******************************************************************************
+ * INTERRUPT HANDLER
+ ******************************************************************************/
+void HW_IPCC_Rx_Handler( void )
+{
+ if (HW_IPCC_RX_PENDING( HW_IPCC_SYSTEM_EVENT_CHANNEL ))
+ {
+ HW_IPCC_SYS_EvtHandler();
+ }
+#ifdef MAC_802_15_4_WB
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL ))
+ {
+ HW_IPCC_MAC_802_15_4_NotEvtHandler();
+ }
+#endif /* MAC_802_15_4_WB */
+#ifdef THREAD_WB
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL ))
+ {
+ HW_IPCC_THREAD_NotEvtHandler();
+ }
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL ))
+ {
+ HW_IPCC_THREAD_CliNotEvtHandler();
+ }
+#endif /* THREAD_WB */
+#ifdef LLD_TESTS_WB
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL ))
+ {
+ HW_IPCC_LLDTESTS_ReceiveCliRspHandler();
+ }
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_LLDTESTS_M0_CMD_CHANNEL ))
+ {
+ HW_IPCC_LLDTESTS_ReceiveM0CmdHandler();
+ }
+#endif /* LLD_TESTS_WB */
+#ifdef LLD_BLE_WB
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_LLD_BLE_RSP_CHANNEL ))
+ {
+ HW_IPCC_LLD_BLE_ReceiveRspHandler();
+ }
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_LLD_BLE_M0_CMD_CHANNEL ))
+ {
+ HW_IPCC_LLD_BLE_ReceiveM0CmdHandler();
+ }
+#endif /* LLD_TESTS_WB */
+#ifdef ZIGBEE_WB
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL ))
+ {
+ HW_IPCC_ZIGBEE_StackNotifEvtHandler();
+ }
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL ))
+ {
+ HW_IPCC_ZIGBEE_StackM0RequestHandler();
+ }
+#endif /* ZIGBEE_WB */
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_BLE_EVENT_CHANNEL ))
+ {
+ HW_IPCC_BLE_EvtHandler();
+ }
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_TRACES_CHANNEL ))
+ {
+ HW_IPCC_TRACES_EvtHandler();
+ }
+
+ return;
+}
+
+void HW_IPCC_Tx_Handler( void )
+{
+ if (HW_IPCC_TX_PENDING( HW_IPCC_SYSTEM_CMD_RSP_CHANNEL ))
+ {
+ HW_IPCC_SYS_CmdEvtHandler();
+ }
+#ifdef MAC_802_15_4_WB
+ else if (HW_IPCC_TX_PENDING( HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL ))
+ {
+ HW_IPCC_MAC_802_15_4_CmdEvtHandler();
+ }
+#endif /* MAC_802_15_4_WB */
+#ifdef THREAD_WB
+ else if (HW_IPCC_TX_PENDING( HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL ))
+ {
+ HW_IPCC_OT_CmdEvtHandler();
+ }
+#endif /* THREAD_WB */
+#ifdef LLD_TESTS_WB
+// No TX handler for LLD tests
+#endif /* LLD_TESTS_WB */
+#ifdef ZIGBEE_WB
+ if (HW_IPCC_TX_PENDING( HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL ))
+ {
+ HW_IPCC_ZIGBEE_CmdEvtHandler();
+ }
+#endif /* ZIGBEE_WB */
+ else if (HW_IPCC_TX_PENDING( HW_IPCC_SYSTEM_CMD_RSP_CHANNEL ))
+ {
+ HW_IPCC_SYS_CmdEvtHandler();
+ }
+ else if (HW_IPCC_TX_PENDING( HW_IPCC_MM_RELEASE_BUFFER_CHANNEL ))
+ {
+ HW_IPCC_MM_FreeBufHandler();
+ }
+ else if (HW_IPCC_TX_PENDING( HW_IPCC_HCI_ACL_DATA_CHANNEL ))
+ {
+ HW_IPCC_BLE_AclDataEvtHandler();
+ }
+
+ return;
+}
+/******************************************************************************
+ * GENERAL
+ ******************************************************************************/
+void HW_IPCC_Enable( void )
+{
+ /**
+ * Such as IPCC IP available to the CPU2, it is required to keep the IPCC clock running
+ when FUS is running on CPU2 and CPU1 enters deep sleep mode
+ */
+ LL_C2_AHB3_GRP1_EnableClock(LL_C2_AHB3_GRP1_PERIPH_IPCC);
+
+ /**
+ * When the device is out of standby, it is required to use the EXTI mechanism to wakeup CPU2
+ */
+ LL_C2_EXTI_EnableEvent_32_63( LL_EXTI_LINE_41 );
+ LL_EXTI_EnableRisingTrig_32_63( LL_EXTI_LINE_41 );
+
+ /**
+ * In case the SBSFU is implemented, it may have already set the C2BOOT bit to startup the CPU2.
+ * In that case, to keep the mechanism transparent to the user application, it shall call the system command
+ * SHCI_C2_Reinit( ) before jumping to the application.
+ * When the CPU2 receives that command, it waits for its event input to be set to restart the CPU2 firmware.
+ * This is required because once C2BOOT has been set once, a clear/set on C2BOOT has no effect.
+ * When SHCI_C2_Reinit( ) is not called, generating an event to the CPU2 does not have any effect
+ * So, by default, the application shall both set the event flag and set the C2BOOT bit.
+ */
+ __SEV( ); /* Set the internal event flag and send an event to the CPU2 */
+ __WFE( ); /* Clear the internal event flag */
+ LL_PWR_EnableBootC2( );
+
+ return;
+}
+
+void HW_IPCC_Init( void )
+{
+ LL_AHB3_GRP1_EnableClock( LL_AHB3_GRP1_PERIPH_IPCC );
+
+ LL_C1_IPCC_EnableIT_RXO( IPCC );
+ LL_C1_IPCC_EnableIT_TXF( IPCC );
+
+ HAL_NVIC_EnableIRQ(IPCC_C1_RX_IRQn);
+ HAL_NVIC_EnableIRQ(IPCC_C1_TX_IRQn);
+
+ return;
+}
+
+/******************************************************************************
+ * BLE
+ ******************************************************************************/
+void HW_IPCC_BLE_Init( void )
+{
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_BLE_EVENT_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_BLE_SendCmd( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_BLE_CMD_CHANNEL );
+
+ return;
+}
+
+static void HW_IPCC_BLE_EvtHandler( void )
+{
+ HW_IPCC_BLE_RxEvtNot();
+
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_BLE_EVENT_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_BLE_SendAclData( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL );
+ LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL );
+
+ return;
+}
+
+static void HW_IPCC_BLE_AclDataEvtHandler( void )
+{
+ LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL );
+
+ HW_IPCC_BLE_AclDataAckNot();
+
+ return;
+}
+
+__weak void HW_IPCC_BLE_AclDataAckNot( void ){};
+__weak void HW_IPCC_BLE_RxEvtNot( void ){};
+
+/******************************************************************************
+ * SYSTEM
+ ******************************************************************************/
+void HW_IPCC_SYS_Init( void )
+{
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_SYS_SendCmd( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
+ LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
+
+ return;
+}
+
+static void HW_IPCC_SYS_CmdEvtHandler( void )
+{
+ LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
+
+ HW_IPCC_SYS_CmdEvtNot();
+
+ return;
+}
+
+static void HW_IPCC_SYS_EvtHandler( void )
+{
+ HW_IPCC_SYS_EvtNot();
+
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL );
+
+ return;
+}
+
+__weak void HW_IPCC_SYS_CmdEvtNot( void ){};
+__weak void HW_IPCC_SYS_EvtNot( void ){};
+
+/******************************************************************************
+ * MAC 802.15.4
+ ******************************************************************************/
+#ifdef MAC_802_15_4_WB
+void HW_IPCC_MAC_802_15_4_Init( void )
+{
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_MAC_802_15_4_SendCmd( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL );
+ LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_MAC_802_15_4_SendAck( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
+
+ return;
+}
+
+static void HW_IPCC_MAC_802_15_4_CmdEvtHandler( void )
+{
+ LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL );
+
+ HW_IPCC_MAC_802_15_4_CmdEvtNot();
+
+ return;
+}
+
+static void HW_IPCC_MAC_802_15_4_NotEvtHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
+
+ HW_IPCC_MAC_802_15_4_EvtNot();
+
+ return;
+}
+__weak void HW_IPCC_MAC_802_15_4_CmdEvtNot( void ){};
+__weak void HW_IPCC_MAC_802_15_4_EvtNot( void ){};
+#endif
+
+/******************************************************************************
+ * THREAD
+ ******************************************************************************/
+#ifdef THREAD_WB
+void HW_IPCC_THREAD_Init( void )
+{
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_OT_SendCmd( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
+ LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_CLI_SendCmd( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_THREAD_CLI_CMD_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_THREAD_SendAck( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_THREAD_CliSendAck( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
+
+ return;
+}
+
+static void HW_IPCC_OT_CmdEvtHandler( void )
+{
+ LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
+
+ HW_IPCC_OT_CmdEvtNot();
+
+ return;
+}
+
+static void HW_IPCC_THREAD_NotEvtHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
+
+ HW_IPCC_THREAD_EvtNot();
+
+ return;
+}
+
+static void HW_IPCC_THREAD_CliNotEvtHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
+
+ HW_IPCC_THREAD_CliEvtNot();
+
+ return;
+}
+
+__weak void HW_IPCC_OT_CmdEvtNot( void ){};
+__weak void HW_IPCC_CLI_CmdEvtNot( void ){};
+__weak void HW_IPCC_THREAD_EvtNot( void ){};
+
+#endif /* THREAD_WB */
+
+/******************************************************************************
+ * LLD TESTS
+ ******************************************************************************/
+#ifdef LLD_TESTS_WB
+void HW_IPCC_LLDTESTS_Init( void )
+{
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL );
+ return;
+}
+
+void HW_IPCC_LLDTESTS_SendCliCmd( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_LLDTESTS_CLI_CMD_CHANNEL );
+ return;
+}
+
+static void HW_IPCC_LLDTESTS_ReceiveCliRspHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL );
+ HW_IPCC_LLDTESTS_ReceiveCliRsp();
+ return;
+}
+
+void HW_IPCC_LLDTESTS_SendCliRspAck( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL );
+ return;
+}
+
+static void HW_IPCC_LLDTESTS_ReceiveM0CmdHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL );
+ HW_IPCC_LLDTESTS_ReceiveM0Cmd();
+ return;
+}
+
+void HW_IPCC_LLDTESTS_SendM0CmdAck( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL );
+ return;
+}
+__weak void HW_IPCC_LLDTESTS_ReceiveCliRsp( void ){};
+__weak void HW_IPCC_LLDTESTS_ReceiveM0Cmd( void ){};
+#endif /* LLD_TESTS_WB */
+
+/******************************************************************************
+ * LLD BLE
+ ******************************************************************************/
+#ifdef LLD_BLE_WB
+void HW_IPCC_LLD_BLE_Init( void )
+{
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
+ return;
+}
+
+void HW_IPCC_LLD_BLE_SendCliCmd( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_LLD_BLE_CLI_CMD_CHANNEL );
+ return;
+}
+
+/*static void HW_IPCC_LLD_BLE_ReceiveCliRspHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_CLI_RSP_CHANNEL );
+ HW_IPCC_LLD_BLE_ReceiveCliRsp();
+ return;
+}*/
+
+void HW_IPCC_LLD_BLE_SendCliRspAck( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLD_BLE_CLI_RSP_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_CLI_RSP_CHANNEL );
+ return;
+}
+
+static void HW_IPCC_LLD_BLE_ReceiveM0CmdHandler( void )
+{
+ //LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
+ HW_IPCC_LLD_BLE_ReceiveM0Cmd();
+ return;
+}
+
+void HW_IPCC_LLD_BLE_SendM0CmdAck( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
+ //LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
+ return;
+}
+__weak void HW_IPCC_LLD_BLE_ReceiveCliRsp( void ){};
+__weak void HW_IPCC_LLD_BLE_ReceiveM0Cmd( void ){};
+
+/* Transparent Mode */
+void HW_IPCC_LLD_BLE_SendCmd( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_LLD_BLE_CMD_CHANNEL );
+ return;
+}
+
+static void HW_IPCC_LLD_BLE_ReceiveRspHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL );
+ HW_IPCC_LLD_BLE_ReceiveRsp();
+ return;
+}
+
+void HW_IPCC_LLD_BLE_SendRspAck( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL );
+ return;
+}
+
+#endif /* LLD_BLE_WB */
+
+/******************************************************************************
+ * ZIGBEE
+ ******************************************************************************/
+#ifdef ZIGBEE_WB
+void HW_IPCC_ZIGBEE_Init( void )
+{
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_ZIGBEE_SendM4RequestToM0( void )
+{
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL );
+ LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL );
+
+ return;
+}
+
+void HW_IPCC_ZIGBEE_SendM4AckToM0Notify( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL );
+
+ return;
+}
+
+static void HW_IPCC_ZIGBEE_CmdEvtHandler( void )
+{
+ LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL );
+
+ HW_IPCC_ZIGBEE_RecvAppliAckFromM0();
+
+ return;
+}
+
+static void HW_IPCC_ZIGBEE_StackNotifEvtHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL );
+
+ HW_IPCC_ZIGBEE_RecvM0NotifyToM4();
+
+ return;
+}
+
+static void HW_IPCC_ZIGBEE_StackM0RequestHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL );
+
+ HW_IPCC_ZIGBEE_RecvM0RequestToM4();
+
+ return;
+}
+
+void HW_IPCC_ZIGBEE_SendM4AckToM0Request( void )
+{
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL );
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL );
+
+ return;
+}
+
+__weak void HW_IPCC_ZIGBEE_RecvAppliAckFromM0( void ){};
+__weak void HW_IPCC_ZIGBEE_RecvM0NotifyToM4( void ){};
+__weak void HW_IPCC_ZIGBEE_RecvM0RequestToM4( void ){};
+#endif /* ZIGBEE_WB */
+
+/******************************************************************************
+ * MEMORY MANAGER
+ ******************************************************************************/
+void HW_IPCC_MM_SendFreeBuf( void (*cb)( void ) )
+{
+ if ( LL_C1_IPCC_IsActiveFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL ) )
+ {
+ FreeBufCb = cb;
+ LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
+ }
+ else
+ {
+ cb();
+
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
+ }
+
+ return;
+}
+
+static void HW_IPCC_MM_FreeBufHandler( void )
+{
+ LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
+
+ FreeBufCb();
+
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
+
+ return;
+}
+
+/******************************************************************************
+ * TRACES
+ ******************************************************************************/
+void HW_IPCC_TRACES_Init( void )
+{
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_TRACES_CHANNEL );
+
+ return;
+}
+
+static void HW_IPCC_TRACES_EvtHandler( void )
+{
+ HW_IPCC_TRACES_EvtNot();
+
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_TRACES_CHANNEL );
+
+ return;
+}
+
+__weak void HW_IPCC_TRACES_EvtNot( void ){};
+
+/******************* (C) COPYRIGHT 2019 STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/readme.txt b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/readme.txt
new file mode 100644
index 000000000..9d97facca
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/readme.txt
@@ -0,0 +1,126 @@
+/**
+ @page Zigbee_OnOff_Server_Coord_FreeRTOS application
+
+ @verbatim
+ ******************************************************************************
+ * @file Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS/readme.txt
+ * @author MCD Application Team
+ * @brief Description of the Zigbee OnOff Cluster application as a client
+ * using a centralized network.
+ ******************************************************************************
+ *
+ * Copyright (c) 2020 STMicroelectronics. All rights reserved.
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ @endverbatim
+
+@par Application Description
+
+How to use OnOff cluster as a server on a centralized Zigbee network.
+
+The purpose of this application is to show how to create a Zigbee centralized network, and
+how to communicate from one node to another one using the OnOff cluster. Once the Zigbee mesh
+network is created, the user can send requests from the client to the server through the push button
+in order to make the LED toggling.
+
+For this application it is requested to have:
+
+- 1 STM32WB55xx board loaded with:
+ - wireless coprocessor : stm32wb5x_Zigbee_FFD_fw.bin
+ - application : Zigbee_OnOff_Server_Coord_FreeRTOS
+
+- 1 or more STM32WB55xx board loaded with:
+ - wireless coprocessor : stm32wb5x_Zigbee_FFD_fw.bin
+ - application : Zigbee_OnOff_Client_Router_FreeRTOS
+
+
+ Device 1 Device 2
+ (Router) (Coordinator)
+
+ --------- ---------
+ | | ZbZclOnOffClientToggleReq | |
+ PushB=>|Client | -----------------------------------> |Server | =>LED
+ | | | |
+ | | | |
+ -------- ---------
+
+To setup the application :
+
+ a) Open the project, build it and load your generated application on your STM32WB devices.
+
+ To run the application :
+
+ a) Start the first board. It must be the coordinator of the Zigbee network so in this demo application it is
+ the device running Zigbee_OnOff_Server_Coord_FreeRTOS application (Device2 in the above diagram).
+ Wait for the Blue LED (LED1) ON.
+ Start the second board. This board is configured as Zigbee router and will attached to the network created
+ by the coordinator. Do the same for the other boards if applicable.
+
+ b) At this stage, the Zigbee network is automatically created and BLUE LED (LED1) is ON on all devices.
+ it is now possible to send OnOff Cluster commands from the client to the server in multicast mode
+ by pressing on the SW1 push button.
+ You must see the RED LED (LED3) toggling on the server side.
+
+
+ Note: when LED1, LED2 and LED3 are toggling it is indicating an error has occurred on application.
+
+@par Keywords
+
+Zigbee
+
+@par Hardware and Software environment
+
+ - This example runs on STM32WB55xx devices.
+
+ - This example has been tested with an STMicroelectronics STM32WB55RG_Nucleo
+ board and can be easily tailored to any other supported device
+ and development board.
+
+ - On STM32WB55RG_Nucleo, the jumpers must be configured as described
+ in this section. Starting from the top left position up to the bottom
+ right position, the jumpers on the Board must be set as follows:
+
+ CN11: GND [OFF]
+ JP4: VDDRF [ON]
+ JP6: VC0 [ON]
+ JP2: +3V3 [ON]
+ JP1: USB_STL [ON] All others [OFF]
+ CN12: GND [OFF]
+ CN7: <All> [OFF]
+ JP3: VDD_MCU [ON]
+ JP5: GND [OFF] All others [ON]
+ CN10: <All> [OFF]
+
+
+@par How to use it ?
+
+=> Loading of the stm32wb5x_Zigbee_FFD_fw.bin binary
+
+ This application requests having the stm32wb5x_Zigbee_FFD_fw.bin binary flashed on the Wireless Coprocessor.
+ If it is not the case, you need to use STM32CubeProgrammer to load the appropriate binary.
+ All available binaries are located under /Projects/STM32_Copro_Wireless_Binaries directory.
+ Refer to UM2237 to learn how to use/install STM32CubeProgrammer.
+ Refer to /Projects/STM32_Copro_Wireless_Binaries/ReleaseNote.html for the detailed procedure to change the
+ Wireless Coprocessor binary.
+
+=> Getting traces
+ To get the traces you need to connect your Board to the Hyperterminal (through the STLink Virtual COM Port).
+ The UART must be configured as follows:
+
+ - BaudRate = 115200 baud
+ - Word Length = 8 Bits
+ - Stop Bit = 1 bit
+ - Parity = none
+ - Flow control = none
+
+=> Running the application
+
+ Refer to the Application description at the beginning of this readme.txt
+
+ * <h3><center>&copy; COPYRIGHT STMicroelectronics</center></h3>
+
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Distrib/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Distrib/Core/Inc/stm32wbxx_it.h
index ab02c8535..e66cafbb9 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Distrib/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Distrib/Core/Inc/stm32wbxx_it.h
@@ -72,8 +72,6 @@ void FPU_IRQHandler(void);
/* USER CODE BEGIN EFP */
void RTC_WKUP_IRQHandler(void);
void EXTI4_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Examples/COMP/COMP_CompareGpioVsVrefInt_Window_IT/readme.txt b/Projects/P-NUCLEO-WB55.Nucleo/Examples/COMP/COMP_CompareGpioVsVrefInt_Window_IT/readme.txt
index 216bb1887..e1cc1412e 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Examples/COMP/COMP_CompareGpioVsVrefInt_Window_IT/readme.txt
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Examples/COMP/COMP_CompareGpioVsVrefInt_Window_IT/readme.txt
@@ -32,7 +32,7 @@ The SystemClock_Config() function is used to configure the system clock for STM3
LEDs on P-NUCLEO-WB55 can be used to monitor the voltage level compared to comparators thresholds:
- LED1 blinks slowly (period 1 s) if input voltage is under the lower threshold.
-- LED2 blinks slowly (period 1 s) if input voltage is under the higher threshold.
+- LED2 blinks slowly (period 1 s) if input voltage is above the higher threshold.
- If the input voltage is within the thresholds, the MCU is set in STOP mode, LEDs are turned off.
NB: The MCU wakes up from STOP mode when the input voltage is out of the thresholds window.
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/.cproject b/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/.cproject
new file mode 100644
index 000000000..414fb95b0
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/.cproject
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+ <storageModule moduleId="org.eclipse.cdt.core.settings">
+ <cconfiguration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.62213495">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.62213495" moduleId="org.eclipse.cdt.core.settings" name="Debug">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.62213495" name="Debug" parent="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug">
+ <folderInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.62213495." name="/" resourcePath="">
+ <toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.debug.884506176" name="MCU ARM GCC" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.debug">
+ <option id="com.st.stm32cube.ide.mcu.option.internal.toolchain.type.867718975" name="Internal Toolchain Type" superClass="com.st.stm32cube.ide.mcu.option.internal.toolchain.type" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.base.gnu-tools-for-stm32" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.option.internal.toolchain.version.1470492923" name="Internal Toolchain Version" superClass="com.st.stm32cube.ide.mcu.option.internal.toolchain.version" useByScannerDiscovery="false" value="7-2018-q2-update" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu.1495501438" name="Mcu" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu" useByScannerDiscovery="true" value="STM32WB55RGVx" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.1023655424" name="CpuId" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid" useByScannerDiscovery="false" value="0" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.1064968967" name="CpuCoreId" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid" useByScannerDiscovery="false" value="0" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.1374123051" name="Floating-point unit" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.value.fpv4-sp-d16" valueType="enumerated"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.1031627485" name="Floating-point ABI" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.value.hard" valueType="enumerated"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.630160897" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="genericBoard" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.1515724671" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.3 || Debug || true || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.base.gnu-tools-for-stm32 || STM32WB55RGVx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../../../../../../../Drivers/BSP/P-NUCLEO-WB55.Nucleo | ../../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include | ../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc/Legacy | ../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc | ../../Inc | ../../../../../../../Drivers/CMSIS/Include || || || USE_HAL_DRIVER | STM32WB55xx || || || || || ${workspace_loc:/${ProjName}/STM32WB55RGVX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || " valueType="string"/>
+ <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.878051312" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
+ <builder buildPath="${workspace_loc:/CRYP_AESModes}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.314296005" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1293063810" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.494557910" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.value.g3" valueType="enumerated"/>
+ <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.642227680" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
+ </tool>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1606738805" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.1380595208" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.value.g3" valueType="enumerated"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.1736981651" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false"/>
+ <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.1850198848" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols" useByScannerDiscovery="false" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="USE_HAL_DRIVER"/>
+ <listOptionValue builtIn="false" value="DEBUG"/>
+ <listOptionValue builtIn="false" value="STM32WB55xx"/>
+ </option>
+ <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.631951794" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths" useByScannerDiscovery="false" valueType="includePath">
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/BSP/P-NUCLEO-WB55.Nucleo"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc/Legacy"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc"/>
+ <listOptionValue builtIn="false" value="../../Inc"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/CMSIS/Include"/>
+ </option>
+ <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.943781417" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
+ </tool>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.1554149555" name="MCU G++ Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.238354163" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.value.g3" valueType="enumerated"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.699606442" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level" useByScannerDiscovery="false"/>
+ </tool>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.1498520167" name="MCU GCC Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script.2005916317" name="Linker Script (-T)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script" value="${workspace_loc:/${ProjName}/STM32WB55RGVX_FLASH.ld}" valueType="string"/>
+ <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.otherflags.1963972851" name="Other flags" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.otherflags" useByScannerDiscovery="false" valueType="stringList">
+ <listOptionValue builtIn="false" value="-specs=rdimon.specs -lc -lrdimon"/>
+ </option>
+ <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input.1822232732" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.143249681" name="MCU G++ Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.option.script.236615178" name="Linker Script (-T)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.option.script" value="${workspace_loc:/${ProjName}/STM32WB55RGVX_FLASH.ld}" valueType="string"/>
+ </tool>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver.546448616" name="MCU GCC Archiver" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size.885994925" name="MCU Size" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile.1667231629" name="MCU Output Converter list file" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex.947169704" name="MCU Output Converter Hex" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary.586437062" name="MCU Output Converter Binary" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog.1947987921" name="MCU Output Converter Verilog" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec.812432035" name="MCU Output Converter Motorola S-rec" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.478477584" name="MCU Output Converter Motorola S-rec with symbols" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec"/>
+ </toolChain>
+ </folderInfo>
+ <sourceEntries>
+ <entry excluding="Application/User/syscalls.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
+ </sourceEntries>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ <cconfiguration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1650050365">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1650050365" moduleId="org.eclipse.cdt.core.settings" name="Release">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1650050365" name="Release" parent="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release">
+ <folderInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1650050365." name="/" resourcePath="">
+ <toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.release.568533578" name="MCU ARM GCC" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.release">
+ <option id="com.st.stm32cube.ide.mcu.option.internal.toolchain.type.1873378777" name="Internal Toolchain Type" superClass="com.st.stm32cube.ide.mcu.option.internal.toolchain.type" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.base.gnu-tools-for-stm32" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.option.internal.toolchain.version.45904910" name="Internal Toolchain Version" superClass="com.st.stm32cube.ide.mcu.option.internal.toolchain.version" useByScannerDiscovery="false" value="7-2018-q2-update" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu.1640610767" name="Mcu" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu" useByScannerDiscovery="true" value="STM32WB55RGVx" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.743752871" name="CpuId" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid" useByScannerDiscovery="false" value="0" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.2090527505" name="CpuCoreId" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid" useByScannerDiscovery="false" value="0" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.2048972972" name="Floating-point unit" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.value.fpv4-sp-d16" valueType="enumerated"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.1249649939" name="Floating-point ABI" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.value.hard" valueType="enumerated"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.1172669378" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="genericBoard" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.603536252" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.3 || Release || false || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.base.gnu-tools-for-stm32 || STM32WB55RGVx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../../../../../../../Drivers/BSP/P-NUCLEO-WB55.Nucleo | ../../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include | ../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc/Legacy | ../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc | ../../Inc | ../../../../../../../Drivers/CMSIS/Include || || || USE_HAL_DRIVER | STM32WB55xx || || || || || ${workspace_loc:/${ProjName}/STM32WB55RGVX_FLASH.ld} || true || NonSecure || Most || secure_nsclib.o || " valueType="string"/>
+ <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.761684929" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
+ <builder buildPath="${workspace_loc:/CRYP_AESModes}/Release" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.319206879" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.965100703" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.1828402508" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.value.g0" valueType="enumerated"/>
+ <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.586778524" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
+ </tool>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1795426390" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.149763108" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.value.g0" valueType="enumerated"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.272114254" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.os" valueType="enumerated"/>
+ <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.1217149855" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols" useByScannerDiscovery="false" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="USE_HAL_DRIVER"/>
+ <listOptionValue builtIn="false" value="STM32WB55xx"/>
+ </option>
+ <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.1725193105" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths" useByScannerDiscovery="false" valueType="includePath">
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/BSP/P-NUCLEO-WB55.Nucleo"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc/Legacy"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc"/>
+ <listOptionValue builtIn="false" value="../../Inc"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/CMSIS/Include"/>
+ </option>
+ <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1525007173" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
+ </tool>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.403298571" name="MCU G++ Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.1737296563" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.value.g0" valueType="enumerated"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.473537069" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.value.os" valueType="enumerated"/>
+ </tool>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.779573074" name="MCU GCC Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script.280674297" name="Linker Script (-T)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script" value="${workspace_loc:/${ProjName}/STM32WB55RGVX_FLASH.ld}" valueType="string"/>
+ <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.otherflags.866787387" name="Other flags" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.otherflags" useByScannerDiscovery="false" valueType="stringList">
+ <listOptionValue builtIn="false" value="-specs=rdimon.specs -lc -lrdimon"/>
+ </option>
+ <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input.423722668" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.1057303263" name="MCU G++ Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.option.script.460260966" name="Linker Script (-T)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.option.script" value="${workspace_loc:/${ProjName}/STM32WB55RGVX_FLASH.ld}" valueType="string"/>
+ </tool>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver.824280183" name="MCU GCC Archiver" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size.1493415117" name="MCU Size" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile.709705472" name="MCU Output Converter list file" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex.457106280" name="MCU Output Converter Hex" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary.1223716836" name="MCU Output Converter Binary" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog.1726731786" name="MCU Output Converter Verilog" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec.1394716778" name="MCU Output Converter Motorola S-rec" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.1346577209" name="MCU Output Converter Motorola S-rec with symbols" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec"/>
+ </toolChain>
+ </folderInfo>
+ <sourceEntries>
+ <entry excluding="Application/User/syscalls.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
+ </sourceEntries>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <project id="CRYP_AESModes.null.40420336" name="CRYP_AESModes"/>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+ <storageModule moduleId="scannerConfiguration">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+ <scannerConfigBuildInfo instanceId="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.62213495;com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.62213495.;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1606738805;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.943781417">
+ <autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>
+ </scannerConfigBuildInfo>
+ <scannerConfigBuildInfo instanceId="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1650050365;com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1650050365.;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1795426390;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1525007173">
+ <autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>
+ </scannerConfigBuildInfo>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
+ <storageModule moduleId="refreshScope"/>
+</cproject>
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/.project b/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/.project
new file mode 100644
index 000000000..0a39935c2
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/.project
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>CRYP_AESModes</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <triggers>clean,full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+ <triggers>full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>com.st.stm32cube.ide.mcu.MCUProjectNature</nature>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>com.st.stm32cube.ide.mcu.MCUCubeIdeServicesRevAProjectNature</nature>
+ <nature>com.st.stm32cube.ide.mcu.MCUNonUnderRootProjectNature</nature>
+ <nature>com.st.stm32cube.ide.mcu.MCUCubeProjectNature</nature>
+ <nature>com.st.stm32cube.ide.mcu.MCUEndUserDisabledTrustZoneProjectNature</nature>
+ <nature>com.st.stm32cube.ide.mcu.MCUSingleCpuProjectNature</nature>
+ <nature>com.st.stm32cube.ide.mcu.MCURootProjectNature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+ </natures>
+ <linkedResources>
+ <link>
+ <name>CRYP_AESModes.ioc</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-1-PROJECT_LOC%7D/CRYP_AESModes.ioc</locationURI>
+ </link>
+ <link>
+ <name>Doc/Expected_Results.txt</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-1-PROJECT_LOC%7D/Expected_Results.txt</locationURI>
+ </link>
+ <link>
+ <name>Doc/readme.txt</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-1-PROJECT_LOC%7D/readme.txt</locationURI>
+ </link>
+ <link>
+ <name>Application/User/main.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-1-PROJECT_LOC%7D/Src/main.c</locationURI>
+ </link>
+ <link>
+ <name>Application/User/stm32wbxx_hal_msp.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-1-PROJECT_LOC%7D/Src/stm32wbxx_hal_msp.c</locationURI>
+ </link>
+ <link>
+ <name>Application/User/stm32wbxx_it.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-1-PROJECT_LOC%7D/Src/stm32wbxx_it.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/CMSIS/system_stm32wbxx.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-1-PROJECT_LOC%7D/Src/system_stm32wbxx.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_cortex.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cortex.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_cryp.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cryp.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_cryp_ex.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cryp_ex.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_dma.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_dma_ex.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma_ex.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_exti.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_exti.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_flash.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_flash_ex.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash_ex.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_gpio.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_gpio.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_hsem.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_hsem.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_pwr.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_pwr_ex.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr_ex.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_rcc.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_rcc_ex.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc_ex.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_tim.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_tim_ex.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim_ex.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_uart.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_uart_ex.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart_ex.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/BSP/P-NUCLEO-WB55.Nucleo/stm32wbxx_nucleo.c</name>
+ <type>1</type>
+ <locationURI>$%7BPARENT-6-PROJECT_LOC%7D/Drivers/BSP/P-NUCLEO-WB55.Nucleo/stm32wbxx_nucleo.c</locationURI>
+ </link>
+ </linkedResources>
+</projectDescription>
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/Application/Startup/startup_stm32wb55rgvx.s b/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/Application/Startup/startup_stm32wb55rgvx.s
new file mode 100644
index 000000000..2f6d91285
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/Application/Startup/startup_stm32wb55rgvx.s
@@ -0,0 +1,445 @@
+/**
+ ******************************************************************************
+ * @file startup_stm32wb55xx_cm4.s
+ * @author MCD Application Team
+ * @brief STM32WB55xx devices vector table GCC toolchain.
+ * This module performs:
+ * - Set the initial SP
+ * - Set the initial PC == Reset_Handler,
+ * - 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-M4 processor is in Thread mode,
+ * priority is Privileged, and the Stack is set to Main.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Apache License, Version 2.0,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/Apache-2.0
+ *
+ ******************************************************************************
+ */
+
+ .syntax unified
+ .cpu cortex-m4
+ .fpu softvfp
+ .thumb
+
+.global g_pfnVectors
+.global Default_Handler
+
+/* start address for the initialization values of the .data section.
+defined in linker script */
+.word _sidata
+/* start address for the .data section. defined in linker script */
+.word _sdata
+/* end address for the .data section. defined in linker script */
+.word _edata
+/* start address for the .bss section. defined in linker script */
+.word _sbss
+/* end address for the .bss section. defined in linker script */
+.word _ebss
+/* start address for the .MB_MEM2 section. defined in linker script */
+.word _sMB_MEM2
+/* end address for the .MB_MEM2 section. defined in linker script */
+.word _eMB_MEM2
+
+/* INIT_BSS macro is used to fill the specified region [start : end] with zeros */
+.macro INIT_BSS start, end
+ ldr r0, =\start
+ ldr r1, =\end
+ movs r3, #0
+ bl LoopFillZerobss
+.endm
+
+/* INIT_DATA macro is used to copy data in the region [start : end] starting from 'src' */
+.macro INIT_DATA start, end, src
+ ldr r0, =\start
+ ldr r1, =\end
+ ldr r2, =\src
+ movs r3, #0
+ bl LoopCopyDataInit
+.endm
+
+.section .text.data_initializers
+CopyDataInit:
+ ldr r4, [r2, r3]
+ str r4, [r0, r3]
+ adds r3, r3, #4
+
+LoopCopyDataInit:
+ adds r4, r0, r3
+ cmp r4, r1
+ bcc CopyDataInit
+ bx lr
+
+FillZerobss:
+ str r3, [r0]
+ adds r0, r0, #4
+
+LoopFillZerobss:
+ cmp r0, r1
+ bcc FillZerobss
+ bx lr
+
+ .section .text.Reset_Handler
+ .weak Reset_Handler
+ .type Reset_Handler, %function
+Reset_Handler:
+ ldr r0, =_estack
+ mov sp, r0 /* set stack pointer */
+/* Call the clock system intitialization function.*/
+ bl SystemInit
+
+/* Copy the data segment initializers from flash to SRAM */
+ INIT_DATA _sdata, _edata, _sidata
+
+/* Zero fill the bss segments. */
+ INIT_BSS _sbss, _ebss
+ INIT_BSS _sMB_MEM2, _eMB_MEM2
+
+/* Call static constructors */
+ bl __libc_init_array
+/* Call the application s entry point.*/
+ bl main
+
+LoopForever:
+ b LoopForever
+
+.size Reset_Handler, .-Reset_Handler
+
+/**
+ * @brief This is the code that gets called when the processor receives an
+ * unexpected interrupt. This simply enters an infinite loop, preserving
+ * the system state for examination by a debugger.
+ *
+ * @param None
+ * @retval None
+*/
+ .section .text.Default_Handler,"ax",%progbits
+Default_Handler:
+Infinite_Loop:
+ b Infinite_Loop
+ .size Default_Handler, .-Default_Handler
+/******************************************************************************
+*
+* The minimal vector table for a Cortex-M4. Note that the proper constructs
+* must be placed on this to ensure that it ends up at physical address
+* 0x0000.0000.
+*
+******************************************************************************/
+ .section .isr_vector,"a",%progbits
+ .type g_pfnVectors, %object
+ .size g_pfnVectors, .-g_pfnVectors
+
+
+g_pfnVectors:
+ .word _estack
+ .word Reset_Handler
+ .word NMI_Handler
+ .word HardFault_Handler
+ .word MemManage_Handler
+ .word BusFault_Handler
+ .word UsageFault_Handler
+ .word 0
+ .word 0
+ .word 0
+ .word 0
+ .word SVC_Handler
+ .word DebugMon_Handler
+ .word 0
+ .word PendSV_Handler
+ .word SysTick_Handler
+ .word WWDG_IRQHandler
+ .word PVD_PVM_IRQHandler
+ .word TAMP_STAMP_LSECSS_IRQHandler
+ .word RTC_WKUP_IRQHandler
+ .word FLASH_IRQHandler
+ .word RCC_IRQHandler
+ .word EXTI0_IRQHandler
+ .word EXTI1_IRQHandler
+ .word EXTI2_IRQHandler
+ .word EXTI3_IRQHandler
+ .word EXTI4_IRQHandler
+ .word DMA1_Channel1_IRQHandler
+ .word DMA1_Channel2_IRQHandler
+ .word DMA1_Channel3_IRQHandler
+ .word DMA1_Channel4_IRQHandler
+ .word DMA1_Channel5_IRQHandler
+ .word DMA1_Channel6_IRQHandler
+ .word DMA1_Channel7_IRQHandler
+ .word ADC1_IRQHandler
+ .word USB_HP_IRQHandler
+ .word USB_LP_IRQHandler
+ .word C2SEV_PWR_C2H_IRQHandler
+ .word COMP_IRQHandler
+ .word EXTI9_5_IRQHandler
+ .word TIM1_BRK_IRQHandler
+ .word TIM1_UP_TIM16_IRQHandler
+ .word TIM1_TRG_COM_TIM17_IRQHandler
+ .word TIM1_CC_IRQHandler
+ .word TIM2_IRQHandler
+ .word PKA_IRQHandler
+ .word I2C1_EV_IRQHandler
+ .word I2C1_ER_IRQHandler
+ .word I2C3_EV_IRQHandler
+ .word I2C3_ER_IRQHandler
+ .word SPI1_IRQHandler
+ .word SPI2_IRQHandler
+ .word USART1_IRQHandler
+ .word LPUART1_IRQHandler
+ .word SAI1_IRQHandler
+ .word TSC_IRQHandler
+ .word EXTI15_10_IRQHandler
+ .word RTC_Alarm_IRQHandler
+ .word CRS_IRQHandler
+ .word PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler
+ .word IPCC_C1_RX_IRQHandler
+ .word IPCC_C1_TX_IRQHandler
+ .word HSEM_IRQHandler
+ .word LPTIM1_IRQHandler
+ .word LPTIM2_IRQHandler
+ .word LCD_IRQHandler
+ .word QUADSPI_IRQHandler
+ .word AES1_IRQHandler
+ .word AES2_IRQHandler
+ .word RNG_IRQHandler
+ .word FPU_IRQHandler
+ .word DMA2_Channel1_IRQHandler
+ .word DMA2_Channel2_IRQHandler
+ .word DMA2_Channel3_IRQHandler
+ .word DMA2_Channel4_IRQHandler
+ .word DMA2_Channel5_IRQHandler
+ .word DMA2_Channel6_IRQHandler
+ .word DMA2_Channel7_IRQHandler
+ .word DMAMUX1_OVR_IRQHandler
+
+/*******************************************************************************
+*
+* Provide weak aliases for each Exception handler to the Default_Handler.
+* As they are weak aliases, any function with the same name will override
+* this definition.
+*
+*******************************************************************************/
+ .weak NMI_Handler
+ .thumb_set NMI_Handler,Default_Handler
+
+ .weak HardFault_Handler
+ .thumb_set HardFault_Handler,Default_Handler
+
+ .weak MemManage_Handler
+ .thumb_set MemManage_Handler,Default_Handler
+
+ .weak BusFault_Handler
+ .thumb_set BusFault_Handler,Default_Handler
+
+ .weak UsageFault_Handler
+ .thumb_set UsageFault_Handler,Default_Handler
+
+ .weak SVC_Handler
+ .thumb_set SVC_Handler,Default_Handler
+
+ .weak DebugMon_Handler
+ .thumb_set DebugMon_Handler,Default_Handler
+
+ .weak PendSV_Handler
+ .thumb_set PendSV_Handler,Default_Handler
+
+ .weak SysTick_Handler
+ .thumb_set SysTick_Handler,Default_Handler
+
+ .weak WWDG_IRQHandler
+ .thumb_set WWDG_IRQHandler,Default_Handler
+
+ .weak PVD_PVM_IRQHandler
+ .thumb_set PVD_PVM_IRQHandler,Default_Handler
+
+ .weak TAMP_STAMP_LSECSS_IRQHandler
+ .thumb_set TAMP_STAMP_LSECSS_IRQHandler,Default_Handler
+
+ .weak RTC_WKUP_IRQHandler
+ .thumb_set RTC_WKUP_IRQHandler,Default_Handler
+
+ .weak FLASH_IRQHandler
+ .thumb_set FLASH_IRQHandler,Default_Handler
+
+ .weak RCC_IRQHandler
+ .thumb_set RCC_IRQHandler,Default_Handler
+
+ .weak EXTI0_IRQHandler
+ .thumb_set EXTI0_IRQHandler,Default_Handler
+
+ .weak EXTI1_IRQHandler
+ .thumb_set EXTI1_IRQHandler,Default_Handler
+
+ .weak EXTI2_IRQHandler
+ .thumb_set EXTI2_IRQHandler,Default_Handler
+
+ .weak EXTI3_IRQHandler
+ .thumb_set EXTI3_IRQHandler,Default_Handler
+
+ .weak EXTI4_IRQHandler
+ .thumb_set EXTI4_IRQHandler,Default_Handler
+
+ .weak DMA1_Channel1_IRQHandler
+ .thumb_set DMA1_Channel1_IRQHandler,Default_Handler
+
+ .weak DMA1_Channel2_IRQHandler
+ .thumb_set DMA1_Channel2_IRQHandler,Default_Handler
+
+ .weak DMA1_Channel3_IRQHandler
+ .thumb_set DMA1_Channel3_IRQHandler,Default_Handler
+
+ .weak DMA1_Channel4_IRQHandler
+ .thumb_set DMA1_Channel4_IRQHandler,Default_Handler
+
+ .weak DMA1_Channel5_IRQHandler
+ .thumb_set DMA1_Channel5_IRQHandler,Default_Handler
+
+ .weak DMA1_Channel6_IRQHandler
+ .thumb_set DMA1_Channel6_IRQHandler,Default_Handler
+
+ .weak DMA1_Channel7_IRQHandler
+ .thumb_set DMA1_Channel7_IRQHandler,Default_Handler
+
+ .weak ADC1_IRQHandler
+ .thumb_set ADC1_IRQHandler,Default_Handler
+
+ .weak USB_HP_IRQHandler
+ .thumb_set USB_HP_IRQHandler,Default_Handler
+
+ .weak USB_LP_IRQHandler
+ .thumb_set USB_LP_IRQHandler,Default_Handler
+
+ .weak C2SEV_PWR_C2H_IRQHandler
+ .thumb_set C2SEV_PWR_C2H_IRQHandler,Default_Handler
+
+ .weak COMP_IRQHandler
+ .thumb_set COMP_IRQHandler,Default_Handler
+
+ .weak EXTI9_5_IRQHandler
+ .thumb_set EXTI9_5_IRQHandler,Default_Handler
+
+ .weak TIM1_BRK_IRQHandler
+ .thumb_set TIM1_BRK_IRQHandler,Default_Handler
+
+ .weak TIM1_UP_TIM16_IRQHandler
+ .thumb_set TIM1_UP_TIM16_IRQHandler,Default_Handler
+
+ .weak TIM1_TRG_COM_TIM17_IRQHandler
+ .thumb_set TIM1_TRG_COM_TIM17_IRQHandler,Default_Handler
+
+ .weak TIM1_CC_IRQHandler
+ .thumb_set TIM1_CC_IRQHandler,Default_Handler
+
+ .weak TIM2_IRQHandler
+ .thumb_set TIM2_IRQHandler,Default_Handler
+
+ .weak PKA_IRQHandler
+ .thumb_set PKA_IRQHandler,Default_Handler
+
+ .weak I2C1_EV_IRQHandler
+ .thumb_set I2C1_EV_IRQHandler,Default_Handler
+
+ .weak I2C1_ER_IRQHandler
+ .thumb_set I2C1_ER_IRQHandler,Default_Handler
+
+ .weak I2C3_EV_IRQHandler
+ .thumb_set I2C3_EV_IRQHandler,Default_Handler
+
+ .weak I2C3_ER_IRQHandler
+ .thumb_set I2C3_ER_IRQHandler,Default_Handler
+
+ .weak SPI1_IRQHandler
+ .thumb_set SPI1_IRQHandler,Default_Handler
+
+ .weak SPI2_IRQHandler
+ .thumb_set SPI2_IRQHandler,Default_Handler
+
+ .weak USART1_IRQHandler
+ .thumb_set USART1_IRQHandler,Default_Handler
+
+ .weak LPUART1_IRQHandler
+ .thumb_set LPUART1_IRQHandler,Default_Handler
+
+ .weak SAI1_IRQHandler
+ .thumb_set SAI1_IRQHandler,Default_Handler
+
+ .weak TSC_IRQHandler
+ .thumb_set TSC_IRQHandler,Default_Handler
+
+ .weak EXTI15_10_IRQHandler
+ .thumb_set EXTI15_10_IRQHandler,Default_Handler
+
+ .weak RTC_Alarm_IRQHandler
+ .thumb_set RTC_Alarm_IRQHandler,Default_Handler
+
+ .weak CRS_IRQHandler
+ .thumb_set CRS_IRQHandler,Default_Handler
+
+ .weak PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler
+ .thumb_set PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler,Default_Handler
+
+ .weak IPCC_C1_RX_IRQHandler
+ .thumb_set IPCC_C1_RX_IRQHandler,Default_Handler
+
+ .weak IPCC_C1_TX_IRQHandler
+ .thumb_set IPCC_C1_TX_IRQHandler,Default_Handler
+
+ .weak HSEM_IRQHandler
+ .thumb_set HSEM_IRQHandler,Default_Handler
+
+ .weak LPTIM1_IRQHandler
+ .thumb_set LPTIM1_IRQHandler,Default_Handler
+
+ .weak LPTIM2_IRQHandler
+ .thumb_set LPTIM2_IRQHandler,Default_Handler
+
+ .weak LCD_IRQHandler
+ .thumb_set LCD_IRQHandler,Default_Handler
+
+ .weak QUADSPI_IRQHandler
+ .thumb_set QUADSPI_IRQHandler,Default_Handler
+
+ .weak AES1_IRQHandler
+ .thumb_set AES1_IRQHandler,Default_Handler
+
+ .weak AES2_IRQHandler
+ .thumb_set AES2_IRQHandler,Default_Handler
+
+ .weak RNG_IRQHandler
+ .thumb_set RNG_IRQHandler,Default_Handler
+
+ .weak FPU_IRQHandler
+ .thumb_set FPU_IRQHandler,Default_Handler
+
+ .weak DMA2_Channel1_IRQHandler
+ .thumb_set DMA2_Channel1_IRQHandler,Default_Handler
+
+ .weak DMA2_Channel2_IRQHandler
+ .thumb_set DMA2_Channel2_IRQHandler,Default_Handler
+
+ .weak DMA2_Channel3_IRQHandler
+ .thumb_set DMA2_Channel3_IRQHandler,Default_Handler
+
+ .weak DMA2_Channel4_IRQHandler
+ .thumb_set DMA2_Channel4_IRQHandler,Default_Handler
+
+ .weak DMA2_Channel5_IRQHandler
+ .thumb_set DMA2_Channel5_IRQHandler,Default_Handler
+
+ .weak DMA2_Channel6_IRQHandler
+ .thumb_set DMA2_Channel6_IRQHandler,Default_Handler
+
+ .weak DMA2_Channel7_IRQHandler
+ .thumb_set DMA2_Channel7_IRQHandler,Default_Handler
+
+ .weak DMAMUX1_OVR_IRQHandler
+ .thumb_set DMAMUX1_OVR_IRQHandler,Default_Handler
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/Application/User/syscalls.c b/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/Application/User/syscalls.c
new file mode 100644
index 000000000..4ec95844d
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/Application/User/syscalls.c
@@ -0,0 +1,159 @@
+/**
+ ******************************************************************************
+ * @file syscalls.c
+ * @author Auto-generated by STM32CubeIDE
+ * @brief STM32CubeIDE Minimal System calls file
+ *
+ * For more information about which c-functions
+ * need which of these lowlevel functions
+ * please consult the Newlib libc-manual
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/* Includes */
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <stdio.h>
+#include <signal.h>
+#include <time.h>
+#include <sys/time.h>
+#include <sys/times.h>
+
+
+/* Variables */
+//#undef errno
+extern int errno;
+extern int __io_putchar(int ch) __attribute__((weak));
+extern int __io_getchar(void) __attribute__((weak));
+
+register char * stack_ptr asm("sp");
+
+char *__env[1] = { 0 };
+char **environ = __env;
+
+
+/* Functions */
+void initialise_monitor_handles()
+{
+}
+
+int _getpid(void)
+{
+ return 1;
+}
+
+int _kill(int pid, int sig)
+{
+ errno = EINVAL;
+ return -1;
+}
+
+void _exit (int status)
+{
+ _kill(status, -1);
+ while (1) {} /* Make sure we hang here */
+}
+
+__attribute__((weak)) int _read(int file, char *ptr, int len)
+{
+ int DataIdx;
+
+ for (DataIdx = 0; DataIdx < len; DataIdx++)
+ {
+ *ptr++ = __io_getchar();
+ }
+
+return len;
+}
+
+__attribute__((weak)) int _write(int file, char *ptr, int len)
+{
+ int DataIdx;
+
+ for (DataIdx = 0; DataIdx < len; DataIdx++)
+ {
+ __io_putchar(*ptr++);
+ }
+ return len;
+}
+
+int _close(int file)
+{
+ return -1;
+}
+
+
+int _fstat(int file, struct stat *st)
+{
+ st->st_mode = S_IFCHR;
+ return 0;
+}
+
+int _isatty(int file)
+{
+ return 1;
+}
+
+int _lseek(int file, int ptr, int dir)
+{
+ return 0;
+}
+
+int _open(char *path, int flags, ...)
+{
+ /* Pretend like we always fail */
+ return -1;
+}
+
+int _wait(int *status)
+{
+ errno = ECHILD;
+ return -1;
+}
+
+int _unlink(char *name)
+{
+ errno = ENOENT;
+ return -1;
+}
+
+int _times(struct tms *buf)
+{
+ return -1;
+}
+
+int _stat(char *file, struct stat *st)
+{
+ st->st_mode = S_IFCHR;
+ return 0;
+}
+
+int _link(char *old, char *new)
+{
+ errno = EMLINK;
+ return -1;
+}
+
+int _fork(void)
+{
+ errno = EAGAIN;
+ return -1;
+}
+
+int _execve(char *name, char **argv, char **env)
+{
+ errno = ENOMEM;
+ return -1;
+}
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/Application/User/sysmem.c b/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/Application/User/sysmem.c
new file mode 100644
index 000000000..4665417ed
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/Application/User/sysmem.c
@@ -0,0 +1,58 @@
+/**
+ ******************************************************************************
+ * @file sysmem.c
+ * @author Auto-generated by STM32CubeIDE
+ * @brief STM32CubeIDE Minimal System Memory calls file
+ *
+ * For more information about which c-functions
+ * need which of these lowlevel functions
+ * please consult the Newlib libc-manual
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/* Includes */
+#include <errno.h>
+#include <stdio.h>
+
+/* Variables */
+extern int errno;
+register char * stack_ptr asm("sp");
+
+/* Functions */
+
+/**
+ _sbrk
+ Increase program data space. Malloc and related functions depend on this
+**/
+caddr_t _sbrk(int incr)
+{
+ extern char end asm("end");
+ static char *heap_end;
+ char *prev_heap_end;
+
+ if (heap_end == 0)
+ heap_end = &end;
+
+ prev_heap_end = heap_end;
+ if (heap_end + incr > stack_ptr)
+ {
+ errno = ENOMEM;
+ return (caddr_t) -1;
+ }
+
+ heap_end += incr;
+
+ return (caddr_t) prev_heap_end;
+}
+
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/STM32WB55RGVX_FLASH.ld b/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/STM32WB55RGVX_FLASH.ld
new file mode 100644
index 000000000..e849ec075
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/STM32WB55RGVX_FLASH.ld
@@ -0,0 +1,187 @@
+/**
+*****************************************************************************
+**
+** File : stm32wb55xx_flash_cm4.ld
+**
+** Abstract : STM32CubeIDE Minimal System calls file
+**
+** For more information about which c-functions
+** need which of these lowlevel functions
+** please consult the Newlib libc-manual
+**
+** Environment : STM32CubeIDE for MCU
+**
+** Distribution: The file is distributed as is, without any warranty
+** of any kind.
+**
+*****************************************************************************
+**
+** <h2><center>&copy; COPYRIGHT(c) 2019 STMicroelectronics</center></h2>
+**
+** Redistribution and use in source and binary forms, with or without modification,
+** are permitted provided that the following conditions are met:
+** 1. Redistributions 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 its contributors
+** may be used to endorse or promote products derived from this software
+** without specific prior written permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
+**
+*****************************************************************************
+*/
+
+/* Entry Point */
+ENTRY(Reset_Handler)
+
+/* Highest address of the user mode stack */
+_estack = 0x20030000; /* end of RAM */
+/* Generate a link error if heap and stack don't fit into RAM */
+_Min_Heap_Size = 0x200 ; /* required amount of heap */
+_Min_Stack_Size = 0x400 ; /* required amount of stack */
+
+/* Specify the memory areas */
+MEMORY
+{
+FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K
+RAM1 (xrw) : ORIGIN = 0x20000004, LENGTH = 0x2FFFC
+RAM_SHARED (xrw) : ORIGIN = 0x20030000, LENGTH = 10K
+}
+
+/* Define output sections */
+SECTIONS
+{
+ /* The startup code goes first into FLASH */
+ .isr_vector :
+ {
+ . = ALIGN(4);
+ KEEP(*(.isr_vector)) /* Startup code */
+ . = ALIGN(4);
+ } >FLASH
+
+ /* The program code and other data goes into FLASH */
+ .text :
+ {
+ . = ALIGN(4);
+ *(.text) /* .text sections (code) */
+ *(.text*) /* .text* sections (code) */
+ *(.glue_7) /* glue arm to thumb code */
+ *(.glue_7t) /* glue thumb to arm code */
+ *(.eh_frame)
+
+ KEEP (*(.init))
+ KEEP (*(.fini))
+
+ . = ALIGN(4);
+ _etext = .; /* define a global symbols at end of code */
+ } >FLASH
+
+ /* Constant data goes into FLASH */
+ .rodata :
+ {
+ . = ALIGN(4);
+ *(.rodata) /* .rodata sections (constants, strings, etc.) */
+ *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
+ . = ALIGN(4);
+ } >FLASH
+
+ .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
+ .ARM : {
+ __exidx_start = .;
+ *(.ARM.exidx*)
+ __exidx_end = .;
+ } >FLASH
+
+ .preinit_array :
+ {
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP (*(.preinit_array*))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+ } >FLASH
+ .init_array :
+ {
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP (*(SORT(.init_array.*)))
+ KEEP (*(.init_array*))
+ PROVIDE_HIDDEN (__init_array_end = .);
+ } >FLASH
+ .fini_array :
+ {
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP (*(SORT(.fini_array.*)))
+ KEEP (*(.fini_array*))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+ } >FLASH
+
+ /* used by the startup to initialize data */
+ _sidata = LOADADDR(.data);
+
+ /* Initialized data sections goes into RAM, load LMA copy after code */
+ .data :
+ {
+ . = ALIGN(4);
+ _sdata = .; /* create a global symbol at data start */
+ *(.data) /* .data sections */
+ *(.data*) /* .data* sections */
+
+ . = ALIGN(4);
+ _edata = .; /* define a global symbol at data end */
+ } >RAM1 AT> FLASH
+
+
+ /* Uninitialized data section */
+ . = ALIGN(4);
+ .bss :
+ {
+ /* This is used by the startup in order to initialize the .bss secion */
+ _sbss = .; /* define a global symbol at bss start */
+ __bss_start__ = _sbss;
+ *(.bss)
+ *(.bss*)
+ *(COMMON)
+
+ . = ALIGN(4);
+ _ebss = .; /* define a global symbol at bss end */
+ __bss_end__ = _ebss;
+ } >RAM1
+
+ /* User_heap_stack section, used to check that there is enough RAM left */
+ ._user_heap_stack :
+ {
+ . = ALIGN(8);
+ PROVIDE ( end = . );
+ PROVIDE ( _end = . );
+ . = . + _Min_Heap_Size;
+ . = . + _Min_Stack_Size;
+ . = ALIGN(8);
+ } >RAM1
+
+
+
+ /* Remove information from the standard libraries */
+ /DISCARD/ :
+ {
+ libc.a ( * )
+ libm.a ( * )
+ libgcc.a ( * )
+ }
+
+ .ARM.attributes 0 : { *(.ARM.attributes) }
+ MAPPING_TABLE (NOLOAD) : { *(MAPPING_TABLE) } >RAM_SHARED
+ MB_MEM1 (NOLOAD) : { *(MB_MEM1) } >RAM_SHARED
+ MB_MEM2 (NOLOAD) : { _sMB_MEM2 = . ; *(MB_MEM2) ; _eMB_MEM2 = . ; } >RAM_SHARED
+}
+
+
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/Src/main.c b/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/Src/main.c
index d86017e48..4d1c496cb 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/Src/main.c
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Examples/CRYP/CRYP_AESModes/Src/main.c
@@ -876,7 +876,7 @@ static void Display_PlainData_ECB(uint32_t datalength)
if (count == 16)
{
count = 0;
- printf(" Block %u \n\r", BufferCounter / 16);
+ printf(" Block %lu \n\r", BufferCounter / 16);
}
}
}
@@ -907,7 +907,7 @@ static void Display_PlainData_CBC(uint32_t datalength)
if (count == 16)
{
count = 0;
- printf(" Block %u \n\r", BufferCounter / 16);
+ printf(" Block %lu \n\r", BufferCounter / 16);
}
}
}
@@ -938,7 +938,7 @@ static void Display_PlainData_CTR(uint32_t datalength)
if (count == 16)
{
count = 0;
- printf(" Block %u \n\r", BufferCounter / 16);
+ printf(" Block %lu \n\r", BufferCounter / 16);
}
}
}
@@ -968,7 +968,7 @@ static void Display_CypherData(uint32_t datalength)
if (count == 16)
{
count = 0;
- printf(" Block %u \n\r", BufferCounter / 16);
+ printf(" Block %lu \n\r", BufferCounter / 16);
}
}
}
@@ -1012,7 +1012,7 @@ static void Display_EncryptedData(uint8_t mode, uint16_t keysize, uint32_t datal
if (count == 16)
{
count = 0;
- printf(" Block %d \n\r", BufferCounter / 16);
+ printf(" Block %ld \n\r", BufferCounter / 16);
}
}
}
@@ -1056,7 +1056,7 @@ static void Display_DecryptedData(uint8_t mode, uint16_t keysize, uint32_t datal
if (count == 16)
{
count = 0;
- printf(" Block %d \n\r", BufferCounter / 16);
+ printf(" Block %ld \n\r", BufferCounter / 16);
}
}
}
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Release_Notes.html b/Projects/P-NUCLEO-WB55.Nucleo/Release_Notes.html
index d2c2ddc53..b65e00fc5 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Release_Notes.html
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Release_Notes.html
@@ -50,11 +50,41 @@
<div class="col-sm-12 col-lg-8">
<h1 id="update-history">Update History</h1>
<div class="collapse">
-<input type="checkbox" id="collapse-section11" checked aria-hidden="true"> <label for="collapse-section11" aria-hidden="true">V1.11.0 / 12-February-2021</label>
+<input type="checkbox" id="collapse-section12" checked aria-hidden="true"> <label for="collapse-section12" aria-hidden="true">V1.11.1 / 02-April-2021</label>
<div>
<h2 id="main-changes">Main Changes</h2>
<h3 id="maintenance">Maintenance</h3>
<ul>
+<li>Update BLE applications:
+<ul>
+<li>Default CFG_BLE_MAX_CONN_EVENT_LENGTH value updated for all BLE examples</li>
+<li>BLE_Ota use improved flash driver</li>
+<li>BLE_DataThroughput displayed float values correction with CubeIDE project</li>
+<li>BLE_p2pServer and BLE_p2pServer_ota code duplication removed</li>
+</ul></li>
+<li>Zigbee:
+<ul>
+<li>Support of FreeRTOS example applications:
+<ul>
+<li>Zigbee_OnOff_Client_Router_FreeRTOS</li>
+<li>Zigbee_OnOff_Server_Coord_FreeRTOS</li>
+</ul></li>
+</ul></li>
+<li>BLE_Mac:
+<ul>
+<li>ID 103245: Correct MAC stop procedure</li>
+</ul></li>
+</ul>
+<p><br />
+</p>
+</div>
+</div>
+<div class="collapse">
+<input type="checkbox" id="collapse-section11" aria-hidden="true"> <label for="collapse-section11" aria-hidden="true">V1.11.0 / 12-February-2021</label>
+<div>
+<h2 id="main-changes-1">Main Changes</h2>
+<h3 id="maintenance-1">Maintenance</h3>
+<ul>
<li>Ensure the option ā€œrequired prototypeā€ is enabled in all IAR projects.</li>
<li>Following deprecation of Adafruit shield, the following projects are removed:
<ul>
@@ -71,8 +101,8 @@
<div class="collapse">
<input type="checkbox" id="collapse-section10" aria-hidden="true"> <label for="collapse-section10" aria-hidden="true">V1.10.0 / 30-October-2020</label>
<div>
-<h2 id="main-changes-1">Main Changes</h2>
-<h3 id="maintenance-1">Maintenance</h3>
+<h2 id="main-changes-2">Main Changes</h2>
+<h3 id="maintenance-2">Maintenance</h3>
<ul>
<li>Ensure compatibility with STM32CubeMX 6.1.0</li>
</ul>
@@ -81,7 +111,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section9" aria-hidden="true"> <label for="collapse-section9" aria-hidden="true">V1.9.0 / 24-September-2020</label>
<div>
-<h2 id="main-changes-2">Main Changes</h2>
+<h2 id="main-changes-3">Main Changes</h2>
<h3 id="introduce-blethread-and-blezigbee-dynamic-concurrent-mode-the-support-of-lld-ble-and-phy_802.15.4-cli-application">Introduce BLE/Thread and BLE/Zigbee dynamic concurrent mode, the support of LLD BLE and PHY_802.15.4 CLI application</h3>
<ul>
<li>Update Thread, BLE, BLE Mesh, LLD BLE, MAC 802.15.4and zigbee application.</li>
@@ -101,7 +131,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section8" aria-hidden="true"> <label for="collapse-section8" aria-hidden="true">V1.8.0 / 19-June-2020</label>
<div>
-<h2 id="main-changes-3">Main Changes</h2>
+<h2 id="main-changes-4">Main Changes</h2>
<h3 id="replace-sw4stm32-by-stm32cubeide-projects-files-for-all-examples-and-application">Replace SW4STM32 by STM32CubeIDE projects files for all examples and application</h3>
<ul>
<li>Add new application ā€œBLE_customā€ to demonstrate how to create a BLE_Custom application using STM32CubeMX 6.0.0</li>
@@ -112,7 +142,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section7" aria-hidden="true"> <label for="collapse-section7" aria-hidden="true">V1.6.0 / 26-March-2020</label>
<div>
-<h2 id="main-changes-4">Main Changes</h2>
+<h2 id="main-changes-5">Main Changes</h2>
<h3 id="ble">BLE</h3>
<ul>
<li><strong>Add BLE Mesh split of BLE_MeshLightingDemo project in</strong>:
@@ -161,7 +191,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section6" aria-hidden="true"> <label for="collapse-section6" aria-hidden="true">V1.5.0 / 14-February-2020</label>
<div>
-<h2 id="main-changes-5">Main Changes</h2>
+<h2 id="main-changes-6">Main Changes</h2>
<h3 id="add-blezigbee-static-concurrent-mode-support-and-additionnal-zigbee-applications">Add BLE/Zigbee static concurrent mode support and additionnal zigbee applications</h3>
<ul>
<li><strong>Add BLE/Zigbee static concurrent mode support</strong>
@@ -196,8 +226,8 @@
<div class="collapse">
<input type="checkbox" id="collapse-section5" aria-hidden="true"> <label for="collapse-section5" aria-hidden="true">V1.4.0 / 06-December-2019</label>
<div>
-<h2 id="main-changes-6">Main Changes</h2>
-<h3 id="maintenance-2">Maintenance</h3>
+<h2 id="main-changes-7">Main Changes</h2>
+<h3 id="maintenance-3">Maintenance</h3>
<ul>
<li>Add SW4STM32 and MDK-ARM IDE files for:
<ul>
@@ -210,7 +240,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section4" aria-hidden="true"> <label for="collapse-section4" aria-hidden="true">V1.3.0 / 11-September-2019</label>
<div>
-<h2 id="main-changes-7">Main Changes</h2>
+<h2 id="main-changes-8">Main Changes</h2>
<h3 id="introduction-of-zigbee-support">Introduction of ZIGBEE support</h3>
<ul>
<li>Ensure compatibility with <strong>STM32CubeMX V5.4</strong>.</li>
@@ -240,7 +270,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section3" aria-hidden="true"> <label for="collapse-section3" aria-hidden="true">V1.2.0 / 26-June-2019</label>
<div>
-<h2 id="main-changes-8">Main Changes</h2>
+<h2 id="main-changes-9">Main Changes</h2>
<h3 id="addition-of-new-application">Addition of new application</h3>
<p><strong>Add CKS (Customer Key Storage) application</strong></p>
<ul>
@@ -255,7 +285,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section2" aria-hidden="true"> <label for="collapse-section2" aria-hidden="true">V1.1.0 / 05-April-2019</label>
<div>
-<h2 id="main-changes-9">Main Changes</h2>
+<h2 id="main-changes-10">Main Changes</h2>
<h3 id="remove-binaries-addition-of-new-examples">Remove binaries, Addition of new examples</h3>
<p>Change directory name to reflect board RPN: <a href="https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/stm32-nucleo-expansion-boards/p-nucleo-wb55.html">P-NUCLEO-WB55</a></p>
<p>Add QSPI examples:</p>
@@ -278,7 +308,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section1" aria-hidden="true"> <label for="collapse-section1" aria-hidden="true">V1.0.0 / 06-February-2019</label>
<div>
-<h2 id="main-changes-10">Main Changes</h2>
+<h2 id="main-changes-11">Main Changes</h2>
<h3 id="first-release">First release</h3>
<p>First official release.</p>
</div>
diff --git a/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_HeartRate/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_HeartRate/Core/Inc/app_conf.h
index b4c642073..247c0a77e 100644
--- a/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_HeartRate/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_HeartRate/Core/Inc/app_conf.h
@@ -222,7 +222,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_MeshLightingLPN/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_MeshLightingLPN/Core/Inc/app_conf.h
index 92f5c2166..c880c7b5c 100644
--- a/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_MeshLightingLPN/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_MeshLightingLPN/Core/Inc/app_conf.h
@@ -247,7 +247,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_MeshLightingPRFNode/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_MeshLightingPRFNode/Core/Inc/app_conf.h
index cb50d0eb6..c14e3a43e 100644
--- a/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_MeshLightingPRFNode/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_MeshLightingPRFNode/Core/Inc/app_conf.h
@@ -241,7 +241,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_TransparentModeVCP/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_TransparentModeVCP/Core/Inc/app_conf.h
index 99eb13ae1..7921352ac 100644
--- a/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_TransparentModeVCP/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_TransparentModeVCP/Core/Inc/app_conf.h
@@ -162,7 +162,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pClient/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pClient/Core/Inc/app_conf.h
index 1b6578ea2..990017b0d 100644
--- a/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pClient/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pClient/Core/Inc/app_conf.h
@@ -228,7 +228,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pRouteur/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pRouteur/Core/Inc/app_conf.h
index f086cd9c5..b9fc66919 100644
--- a/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pRouteur/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pRouteur/Core/Inc/app_conf.h
@@ -239,7 +239,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pServer/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pServer/Core/Inc/app_conf.h
index 2f0ab225f..3692a6438 100644
--- a/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pServer/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pServer/Core/Inc/app_conf.h
@@ -266,7 +266,7 @@
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFF)
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
diff --git a/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/app_conf.h b/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/app_conf.h
index fa1e0650a..fb23c2a91 100644
--- a/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/app_conf.h
+++ b/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/app_conf.h
@@ -73,7 +73,7 @@
/**
* Enable/Disable USB interface
*/
-#define CFG_USB_INTERFACE_ENABLE 0
+#define CFG_USB_INTERFACE_ENABLE 1
/******************************************************************************
* IPCC interface
@@ -104,7 +104,6 @@
#undef CFG_LPM_SUPPORTED
#define CFG_LPM_SUPPORTED 1
#endif /* CFG_FULL_LOW_POWER */
-
/******************************************************************************
* Timer Server
******************************************************************************/
@@ -113,7 +112,7 @@
* The lower is the value, the better is the power consumption and the accuracy of the timerserver
* The higher is the value, the finest is the granularity
*
- * CFG_RTC_ASYNCH_PRESCALER: This sets the asynchronous prescaler of the RTC. It should as high as possible ( to ouput
+ * CFG_RTC_ASYNCH_PRESCALER: This sets the asynchronous prescaler of the RTC. It should as high as possible ( to output
* clock as low as possible) but the output clock should be equal or higher frequency compare to the clock feeding
* the wakeup timer. A lower clock speed would impact the accuracy of the timer server.
*
@@ -128,6 +127,7 @@
*
* The following settings are computed with LSI as input to the RTC
*/
+
#define CFG_RTCCLK_DIVIDER_CONF 0
#if (CFG_RTCCLK_DIVIDER_CONF == 0)
@@ -136,9 +136,10 @@
* It does not support 1Hz calendar
* It divides the RTC CLK by 16
*/
+
#define CFG_RTCCLK_DIV (16)
#define CFG_RTC_WUCKSEL_DIVIDER (0)
-#define CFG_RTC_ASYNCH_PRESCALER (CFG_RTCCLK_DIV - 1)
+#define CFG_RTC_ASYNCH_PRESCALER (0x0F)
#define CFG_RTC_SYNCH_PRESCALER (0x7FFF)
#else
@@ -347,7 +348,7 @@ typedef enum
******************************************************************************/
/**
* Supported requester to the MCU Low Power Manager - can be increased up to 32
- * It lits a bit mapping of all user of the Low Power Manager
+ * It list a bit mapping of all user of the Low Power Manager
*/
typedef enum
{
diff --git a/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/hw_conf.h b/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/hw_conf.h
index bdba0d24e..6cefe665f 100644
--- a/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/hw_conf.h
+++ b/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/hw_conf.h
@@ -27,6 +27,32 @@
* THIS SHALL NO BE CHANGED AS THESE SEMAPHORES ARE USED AS WELL ON THE CM0+
*****************************************************************************/
/**
+* The CPU2 may be configured to store the Thread persistent data either in internal NVM storage on CPU2 or in
+* SRAM2 buffer provided by the user application. This can be configured with the system command SHCI_C2_Config()
+* When the CPU2 is requested to store persistent data in SRAM2, it can write data in this buffer at any time when needed.
+* In order to read consistent data with the CPU1 from the SRAM2 buffer, the flow should be:
+* + CPU1 takes CFG_HW_THREAD_NVM_SRAM_SEMID semaphore
+* + CPU1 reads all persistent data from SRAM2 (most of the time, the goal is to write these data into an NVM managed by CPU1)
+* + CPU1 releases CFG_HW_THREAD_NVM_SRAM_SEMID semaphore
+* CFG_HW_THREAD_NVM_SRAM_SEMID semaphore makes sure CPU2 does not update the persistent data in SRAM2 at the same time CPU1 is reading them.
+* There is no timing constraint on how long this semaphore can be kept.
+*/
+#define CFG_HW_THREAD_NVM_SRAM_SEMID 9
+
+/**
+* The CPU2 may be configured to store the BLE persistent data either in internal NVM storage on CPU2 or in
+* SRAM2 buffer provided by the user application. This can be configured with the system command SHCI_C2_Config()
+* When the CPU2 is requested to store persistent data in SRAM2, it can write data in this buffer at any time when needed.
+* In order to read consistent data with the CPU1 from the SRAM2 buffer, the flow should be:
+* + CPU1 takes CFG_HW_BLE_NVM_SRAM_SEMID semaphore
+* + CPU1 reads all persistent data from SRAM2 (most of the time, the goal is to write these data into an NVM managed by CPU1)
+* + CPU1 releases CFG_HW_BLE_NVM_SRAM_SEMID semaphore
+* CFG_HW_BLE_NVM_SRAM_SEMID semaphore makes sure CPU2 does not update the persistent data in SRAM2 at the same time CPU1 is reading them.
+* There is no timing constraint on how long this semaphore can be kept.
+*/
+#define CFG_HW_BLE_NVM_SRAM_SEMID 8
+
+/**
* Index of the semaphore used by CPU2 to prevent the CPU1 to either write or erase data in flash
* The CPU1 shall not either write or erase in flash when this semaphore is taken by the CPU2
* When the CPU1 needs to either write or erase in flash, it shall first get the semaphore and release it just
diff --git a/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/hw_if.h b/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/hw_if.h
index 271a222a9..81e303b99 100644
--- a/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/hw_if.h
+++ b/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/hw_if.h
@@ -147,7 +147,7 @@ extern "C" {
* @param pTimerId: Timer Id returned to the user to request operation (start, stop, delete)
* @param TimerMode: Mode of the virtual timer (Single shot or repeated)
* @param pTimerCallBack: Callback when the virtual timer expires
- * @retval HW_TS_ReturnStatus_t: Return whether the creation is sucessfull or not
+ * @retval HW_TS_ReturnStatus_t: Return whether the creation is sucessful or not
*/
HW_TS_ReturnStatus_t HW_TS_Create(uint32_t TimerProcessID, uint8_t *pTimerId, HW_TS_Mode_t TimerMode, HW_TS_pTimerCb_t pTimerCallBack);
diff --git a/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/stm32wbxx_it.h b/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/stm32wbxx_it.h
index a181172a0..b169e75d8 100644
--- a/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/stm32wbxx_it.h
+++ b/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Inc/stm32wbxx_it.h
@@ -74,9 +74,6 @@ void FPU_IRQHandler(void);
/* USER CODE BEGIN EFP */
void RTC_WKUP_IRQHandler(void);
void EXTI4_IRQHandler(void);
-void IPCC_C1_TX_IRQHandler(void);
-void IPCC_C1_RX_IRQHandler(void);
-
#if (CFG_USB_INTERFACE_ENABLE != 0)
void USB_LP_IRQHandler(void);
void USB_HP_IRQHandler(void);
diff --git a/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Src/hw_timerserver.c b/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Src/hw_timerserver.c
index e0e4fcb5d..c0af6a14a 100644
--- a/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Src/hw_timerserver.c
+++ b/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Src/hw_timerserver.c
@@ -1,3 +1,4 @@
+/* USER CODE BEGIN Header */
/**
******************************************************************************
* File Name : hw_timerserver.c
@@ -6,7 +7,7 @@
******************************************************************************
* @attention
*
- * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under Ultimate Liberty license
@@ -16,6 +17,7 @@
*
******************************************************************************
*/
+/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "app_common.h"
diff --git a/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Src/hw_uart.c b/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Src/hw_uart.c
index ce910235c..6ae6ff9f9 100644
--- a/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Src/hw_uart.c
+++ b/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Src/hw_uart.c
@@ -1,3 +1,4 @@
+/* USER CODE BEGIN Header */
/**
******************************************************************************
* File Name : Src/hw_uart.c
@@ -6,7 +7,7 @@
******************************************************************************
* @attention
*
- * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under Ultimate Liberty license
@@ -16,6 +17,7 @@
*
******************************************************************************
*/
+/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "app_common.h"
diff --git a/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Src/stm_logging.c b/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Src/stm_logging.c
index 40997ccd7..0416f0c7a 100644
--- a/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Src/stm_logging.c
+++ b/Projects/P-NUCLEO-WB55.USBDongle/Applications/Thread/Thread_Cli_Cmd/Core/Src/stm_logging.c
@@ -61,7 +61,7 @@
/**
* Function for outputting code region string.
*
- * @param[inout] aLogString Pointer to log buffer.
+ * @param[input] aLogString Pointer to log buffer.
* @param[in] aMaxSize Maximum size of log buffer.
* @param[in] otLogRegion The region ID.
*
@@ -131,7 +131,7 @@ static inline const char *levelToString(appliLogLevel_t aLogLevel)
/**
* Function for printing log level.
*
- * @param[inout] aLogString Pointer to log buffer.
+ * @param[input] aLogString Pointer to log buffer.
* @param[in] aMaxSize Maximum size of log buffer.
* @param[in] aLogLevel Log level.
*
@@ -149,7 +149,7 @@ static inline uint16_t logLevel(char *aLogString, uint16_t aMaxSize,
/**
* Function for printing actual timestamp.
*
- * @param[inout] aLogString Pointer to the log buffer.
+ * @param[input] aLogString Pointer to the log buffer.
* @param[in] aMaxSize Maximum size of the log buffer.
*
* @returns Number of bytes successfully written to the log buffer.
diff --git a/Projects/P-NUCLEO-WB55.USBDongle/Release_Notes.html b/Projects/P-NUCLEO-WB55.USBDongle/Release_Notes.html
index 681dd448b..f18c55422 100644
--- a/Projects/P-NUCLEO-WB55.USBDongle/Release_Notes.html
+++ b/Projects/P-NUCLEO-WB55.USBDongle/Release_Notes.html
@@ -47,11 +47,30 @@
<div class="col-sm-12 col-lg-8">
<h1 id="update-history">Update History</h1>
<div class="collapse">
-<input type="checkbox" id="collapse-section11" checked aria-hidden="true"> <label for="collapse-section11" aria-hidden="true">V1.11.0 / 12-February-2021</label>
+<input type="checkbox" id="collapse-section12" checked aria-hidden="true"> <label for="collapse-section12" aria-hidden="true">V1.11.1 / 02-April-2021</label>
<div>
<h2 id="main-changes">Main Changes</h2>
<h3 id="maintenance">Maintenance</h3>
<ul>
+<li>Update BLE applications:
+<ul>
+<li>Default CFG_BLE_MAX_CONN_EVENT_LENGTH value updated for all BLE examples</li>
+</ul></li>
+<li>Thread:
+<ul>
+<li>ID103982: Enable USB Interface by default for Thread_Cli_Cmd project</li>
+</ul></li>
+</ul>
+<p><br />
+</p>
+</div>
+</div>
+<div class="collapse">
+<input type="checkbox" id="collapse-section11" aria-hidden="true"> <label for="collapse-section11" aria-hidden="true">V1.11.0 / 12-February-2021</label>
+<div>
+<h2 id="main-changes-1">Main Changes</h2>
+<h3 id="maintenance-1">Maintenance</h3>
+<ul>
<li>Ensure the option ā€œrequired prototypeā€ is enabled in all IAR projects.</li>
<li>Ensure compatibility with STM32CubeMX 6.2.0</li>
</ul>
@@ -60,8 +79,8 @@
<div class="collapse">
<input type="checkbox" id="collapse-section10" aria-hidden="true"> <label for="collapse-section10" aria-hidden="true">V1.10.0 / 30-October-2020</label>
<div>
-<h2 id="main-changes-1">Main Changes</h2>
-<h3 id="maintenance-1">Maintenance</h3>
+<h2 id="main-changes-2">Main Changes</h2>
+<h3 id="maintenance-2">Maintenance</h3>
<ul>
<li>Ensure compatibility with STM32CubeMX 6.1.0</li>
</ul>
@@ -70,14 +89,14 @@
<div class="collapse">
<input type="checkbox" id="collapse-section9" aria-hidden="true"> <label for="collapse-section9" aria-hidden="true">V1.9.0 / 24-September-2020</label>
<div>
-<h2 id="main-changes-2">Main Changes</h2>
+<h2 id="main-changes-3">Main Changes</h2>
<h3 id="update-ble-and-thread-example">Update BLE and Thread example</h3>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section8" aria-hidden="true"> <label for="collapse-section8" aria-hidden="true">V1.8.0 / 19-June-2020</label>
<div>
-<h2 id="main-changes-3">Main Changes</h2>
+<h2 id="main-changes-4">Main Changes</h2>
<h3 id="replace-sw4stm32-by-stm32cubeide-projects-files-for-all-examples-and-application">Replace SW4STM32 by STM32CubeIDE projects files for all examples and application</h3>
<ul>
<li>Compatibility with STM32CubeMX 6.0.0</li>
@@ -87,7 +106,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section7" aria-hidden="true"> <label for="collapse-section7" aria-hidden="true">V1.6.0 / 27-March-2020</label>
<div>
-<h2 id="main-changes-4">Main Changes</h2>
+<h2 id="main-changes-5">Main Changes</h2>
<h3 id="add-ble-mesh-split-of-ble_meshlightingdemo-project-in">Add BLE Mesh split of BLE_MeshLightingDemo project in:</h3>
<ul>
<li>BLE_MeshLightingLPN (Low Power Node),</li>
@@ -98,8 +117,8 @@
<div class="collapse">
<input type="checkbox" id="collapse-section6" aria-hidden="true"> <label for="collapse-section6" aria-hidden="true">V1.5.0 / 14-February-2020</label>
<div>
-<h2 id="main-changes-5">Main Changes</h2>
-<h3 id="maintenance-2">Maintenance</h3>
+<h2 id="main-changes-6">Main Changes</h2>
+<h3 id="maintenance-3">Maintenance</h3>
<ul>
<li><strong>Zigbee</strong>:
<ul>
@@ -116,8 +135,8 @@
<div class="collapse">
<input type="checkbox" id="collapse-section5" aria-hidden="true"> <label for="collapse-section5" aria-hidden="true">V1.4.0 / 06-December-2019</label>
<div>
-<h2 id="main-changes-6">Main Changes</h2>
-<h3 id="maintenance-3">Maintenance</h3>
+<h2 id="main-changes-7">Main Changes</h2>
+<h3 id="maintenance-4">Maintenance</h3>
<ul>
<li><strong>Zigbee</strong>:
<ul>
@@ -133,8 +152,8 @@
<div class="collapse">
<input type="checkbox" id="collapse-section4" aria-hidden="true"> <label for="collapse-section4" aria-hidden="true">V1.3.0 / 11-September-2019</label>
<div>
-<h2 id="main-changes-7">Main Changes</h2>
-<h3 id="maintenance-4">Maintenance</h3>
+<h2 id="main-changes-8">Main Changes</h2>
+<h3 id="maintenance-5">Maintenance</h3>
<ul>
<li>Ensure compatibility with STM32CubeMX V5.4.</li>
<li>Correct Ticket 65791 - .bin generated by SW4STM32 is too big</li>
@@ -144,15 +163,15 @@
<div class="collapse">
<input type="checkbox" id="collapse-section3" aria-hidden="true"> <label for="collapse-section3" aria-hidden="true">V1.2.0 / 26-June-2019</label>
<div>
-<h2 id="main-changes-8">Main Changes</h2>
-<h3 id="maintenance-5">Maintenance</h3>
+<h2 id="main-changes-9">Main Changes</h2>
+<h3 id="maintenance-6">Maintenance</h3>
<p>Adapt applications to new utility directory tree.</p>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section2" aria-hidden="true"> <label for="collapse-section2" aria-hidden="true">V1.1.0 / 05-April-2019</label>
<div>
-<h2 id="main-changes-9">Main Changes</h2>
+<h2 id="main-changes-10">Main Changes</h2>
<h3 id="remove-binaries-addition-of-new-examples">Remove binaries, Addition of new examples</h3>
<p>Change directory name to reflect board RPN: <a href="https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/stm32-nucleo-expansion-boards/p-nucleo-wb55.html">P-NUCLEO-WB55</a></p>
<p>Add USB Device applications:</p>
@@ -165,7 +184,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section1" aria-hidden="true"> <label for="collapse-section1" aria-hidden="true">V1.0.0 / 06-February-2019</label>
<div>
-<h2 id="main-changes-10">Main Changes</h2>
+<h2 id="main-changes-11">Main Changes</h2>
<h3 id="first-release">First release</h3>
<p>First official release.</p>
</div>
diff --git a/Projects/STM32CubeProjectsList.html b/Projects/STM32CubeProjectsList.html
index 8e12bc607..7011424d1 100644
--- a/Projects/STM32CubeProjectsList.html
+++ b/Projects/STM32CubeProjectsList.html
@@ -2569,7 +2569,7 @@ the STM32WBxx UART HAL and LL API, the LL API being used for performance improve
<td>6</td>
</tr>
<tr align=center>
- <td style="background-repeat: no-repeat;background-position: right center;background-color: #39A9DC;color: #FFF;" rowspan=106><p id="Applications">Applications</p></td>
+ <td style="background-repeat: no-repeat;background-position: right center;background-color: #39A9DC;color: #FFF;" rowspan=108><p id="Applications">Applications</p></td>
<td align=left rowspan=26><p id="BLE">BLE</p></td>
<td align=left><p id="BLE_Beacon">BLE_Beacon</p></td>
<td align=left>
@@ -3261,7 +3261,7 @@ Use of the USB device application based on the Human Interface (HID).
<td>-</td>
</tr>
<tr align=center>
- <td align=left rowspan=37><p id="Zigbee">Zigbee</p></td>
+ <td align=left rowspan=39><p id="Zigbee">Zigbee</p></td>
<td align=left><p id="Zigbee_APS_Coord">Zigbee_APS_Coord</p></td>
<td align=left>
How to use the APS layer in an application with a centralized Zigbee network.
@@ -3472,6 +3472,16 @@ How to use OnOff cluster as a client on a centralized Zigbee network.
<td>-</td>
</tr>
<tr align=center>
+ <td align=left><p id="Zigbee_OnOff_Client_Router_FreeRTOS">Zigbee_OnOff_Client_Router_FreeRTOS</p></td>
+ <td align=left>
+How to use OnOff cluster as a client on a centralized Zigbee network.
+</td>
+ <td>-</td>
+ <td>-</td>
+ <td><font size="5" color=green>X</font></td>
+ <td>-</td>
+ </tr>
+ <tr align=center>
<td align=left><p id="Zigbee_OnOff_Client_Router_Ota">Zigbee_OnOff_Client_Router_Ota</p></td>
<td align=left>
How to use OnOff cluster as a client on a centralized Zigbee network.
@@ -3504,7 +3514,7 @@ How to use OnOff cluster with persistent data on a centralized Zigbee network.
<tr align=center>
<td align=left><p id="Zigbee_OnOff_Router_NVM">Zigbee_OnOff_Router_NVM</p></td>
<td align=left>
-How to use OnOff cluster and the persistent data on a centralized Zigbee network.
+How to use OnOff cluster with persistent data on a centralized Zigbee network.
</td>
<td>-</td>
<td>-</td>
@@ -3522,6 +3532,16 @@ How to use OnOff cluster as a server on a centralized Zigbee network.
<td>-</td>
</tr>
<tr align=center>
+ <td align=left><p id="Zigbee_OnOff_Server_Coord_FreeRTOS">Zigbee_OnOff_Server_Coord_FreeRTOS</p></td>
+ <td align=left>
+How to use OnOff cluster as a server on a centralized Zigbee network.
+</td>
+ <td>-</td>
+ <td>-</td>
+ <td><font size="5" color=green>X</font></td>
+ <td>-</td>
+ </tr>
+ <tr align=center>
<td align=left><p id="Zigbee_OnOff_Server_Distrib">Zigbee_OnOff_Server_Distrib</p></td>
<td align=left>
How to use OnOff cluster as a server on a distributed Zigbee network.
@@ -3642,17 +3662,17 @@ user can send requests to the different boards through the push buttons in order
<td>-</td>
</tr>
<tr style="background-repeat: no-repeat;background-position: right center;background-color: #39A9DC;color: #FFF;" align=center>
- <td colspan="3"><b>Total number of applications: 132</b></td>
+ <td colspan="3"><b>Total number of applications: 134</b></td>
<td>1</td>
<td>18</td>
- <td>103</td>
+ <td>105</td>
<td>10</td>
</tr>
<tr style="background-repeat: no-repeat;background-position: right center;background-color: #39A9DC;color: #FFF;" align=center>
- <td colspan="4"><b>Total number of projects: 423</b></td>
+ <td colspan="4"><b>Total number of projects: 425</b></td>
<td>11</td>
<td>19</td>
- <td>309</td>
+ <td>311</td>
<td>84</td>
</tr>
</table>
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/Release_Notes.html b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/Release_Notes.html
index 5587b0737..c48725ab9 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/Release_Notes.html
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/Release_Notes.html
@@ -33,6 +33,8 @@
<p>This software component is licensed by ST under Ultimate Liberty license SLA0044, the ā€œLicenseā€;</p>
<p>You may not use this file except in compliance with the License.</p>
<p>You may obtain a copy of the License at: <a href="http://www.st.com/SLA0044">SLA0044</a></p>
+<h1 id="known-limitations">Known Limitations</h1>
+<p><strong>If Anti-Rollback needs to be activated</strong>, please make sure to activate it only after installing the latest FUS version (&gt;= V1.2.0) and after successfully installing a wireless stack (without deleting it). <strong>Otherwise, further wireless stack installation will be blocked.</strong></p>
<h1 id="purpose">Purpose</h1>
<p>This release covers the delivery of STM32WB Coprocessor binaries.</p>
<p>Here is the list of references to user documents:</p>
@@ -42,6 +44,17 @@
</ul>
<p>Here is the list of the supported binaries:</p>
<ul>
+<li>stm32wb1x_BLE_HCI_AdvScan_fw.bin
+<ul>
+<li>HCI Layer only mode 5.0 certified : Link Layer, HCI</li>
+<li>BT SIG Certification listing : <a href="https://launchstudio.bluetooth.com/ListingDetails/70712">Declaration ID D042213</a></li>
+<li>To be used for advertising and scanning through HCI interface</li>
+</ul></li>
+<li>stm32wb1x_BLE_LLD_fw.bin
+<ul>
+<li>BLE LLD (Low Level Driver) Radio Transparent firmware</li>
+<li>To be used for direct access on BLE LLD features and API</li>
+</ul></li>
<li>stm32wb1x_BLE_Stack_full_fw.bin
<ul>
<li>Full BLE Stack 5.0 certified : Link Layer, HCI, L2CAP, ATT, SM, GAP and GATT database</li>
@@ -53,7 +66,8 @@
<li>GATT server, client</li>
<li>Data length extension</li>
<li>2Mbit PHY / PHY update</li>
-<li>Privacy / White list</li>
+<li>Privacy</li>
+<li>White list</li>
<li>Legacy Pairing, LE secure connections</li>
<li>HCI interface (full, like stm32wb5x_BLE_HCILayer_fw.bin)</li>
<li>Direct Test Mode</li>
@@ -71,10 +85,15 @@
<li>GAP peripheral only (LL slave up to 2 links)</li>
<li>GATT server</li>
<li>Data length extension</li>
+<li>Privacy</li>
+<li>White list</li>
<li>Legacy Pairing, LE secure connections</li>
<li>HCI interface (reduced)</li>
<li>Direct Test Mode</li>
</ul></li>
+<li>BLE ā€œSlave Onlyā€ stack implies that with this stack configuration, STM32WB is not able to scan and request a BLE connection.</li>
+<li>It will just advertise, and accept incoming connection request from other master devices.</li>
+<li>While with the ā€œfull featureā€ BLE stack, STM32WB1xx is able to support both master and slave roles on different links.</li>
</ul></li>
</ul></li>
<li>stm32wb1x_BLE_HCILayer_fw.bin
@@ -82,22 +101,17 @@
<li>HCI Layer only mode 5.0 certified : Link Layer, HCI with Direct Test Mode</li>
<li>BT SIG Certification listing : <a href="https://launchstudio.bluetooth.com/ListingDetails/70712">Declaration ID D042213</a></li>
</ul></li>
-<li>stm32wb1x_BLE_LLD_fw.bin
-<ul>
-<li>BLE LLD (Low Level Driver) Radio Transparent firmware</li>
-<li>To be used for direct access on BLE LLD features and API</li>
-</ul></li>
</ul>
<p><mark>How to flash the Wireless Coprocessor Binary via SWD/JTAG by ST-LINK (STM32CubeProgrammer GUI)</mark></p>
<ul>
<li><p><em>Inside the below procedure, the references to binaries name and install address are provided in the section <strong>Main Changes</strong> of this file.</em></p></li>
<li><p>STEP 1: Use STM32CubeProgrammer GUI</p>
<ul>
-<li><p>Version 2.5.0 or higher.</p></li>
+<li><p>Version 2.7.0 or higher.</p></li>
<li><p>It gives access to Firmware Upgrade Service (FUS) (<a href="http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00513965.pdf">AN5185</a> : ST firmware upgrade services for STM32WB Series.) through Bootloader.</p></li>
<li><p>It is currently available as Graphical User Interface (GUI) mode (or Command Line Interface (CLI) mode).</p></li>
</ul></li>
-<li><p>STEP 2: Access to ā€œErasing &amp; Programmingā€ in STM32CubeProgrammer GUI</p>
+<li><p>STEP 2: Access to SWD Interface (system flash)</p>
<ul>
<li>For NUCLEO-WB15 :
<ul>
@@ -106,14 +120,11 @@
<li>open STM32CubeProgrammer GUI and select ā€œST-LINKā€</li>
<li>in ST-LINK configuration: (Port: SWD) then select ā€œConnectā€</li>
</ul></li>
-<li><p>STEP 3: Flash erase</p>
+<li><p>STEP 3: select ā€œStart FUSā€ in Firmware Upgrade Services</p></li>
+<li><p>STEP 4: Download new wireless stack (after ā€œFW Deleteā€ if requested)</p>
<ul>
-<li>in Erase flash memory: select ā€œFull chip eraseā€</li>
-</ul></li>
-<li><p>STEP 4 : Download new wireless stack :</p>
-<ul>
-<li>in Erasing &amp; Programming/Download: (File Path: [Wireless_Coprocessor_Binary], Start Adress: [Install@])</li>
-<li>then select ā€œStart programmingā€ with ā€œVerify downloadā€ and ā€œRun after programmingā€</li>
+<li>in Firmware Upgrade Service: (File Path: [Wireless_Coprocessor_Binary], Start Adress: [Install@])</li>
+<li>then select ā€œFirmware Upgradeā€ (with ā€œVerify downloadā€ and ā€œStart stack after upgradeā€) Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary. (<strong>optional</strong>: activate ā€œAnti-Rollbackā€ on downloaded binary) If you need to perform FUS related manipulations, you always need to START the FUS in case the FUS is not running.</li>
</ul></li>
</ul>
<p><mark>How to compute available flash size </mark></p>
@@ -128,11 +139,73 @@
<div class="col-sm-12 col-lg-8">
<h1 id="update-history">Update History</h1>
<div class="collapse">
-<input type="checkbox" id="collapse-section1" checked aria-hidden="true"> <label for="collapse-section1" aria-hidden="false">V1.11.0 / 12-February-2021</label>
+<input type="checkbox" id="collapse-section2" checked aria-hidden="true"> <label for="collapse-section2" aria-hidden="true">V1.11.1 / 23-March-2021</label>
<div>
<h2 id="main-changes">Main Changes</h2>
<p><strong>Associated changes in Wireless Coprocessor Binary</strong>:</p>
<ul>
+<li>BLE :
+<ul>
+<li>ID 102917 : Apply ā€œVCO patchā€ for all packages [STM32WB15/STM32WB10] to solve ā€œRX path issueā€ at low temperatures on Slow corners</li>
+<li>ID 102000 : [STM32WB55/STM32WB15]: Default CFG_BLE_MAX_CONN_EVENT_LENGTH value updated for all BLE examples</li>
+<li>ID 99680 : 2nd link secure fail if master database is clear during 1st link connection</li>
+<li>ID 101346 : ACI_GAP_BOND_LOST_Event timeout does not work if ALLOW rebond not sent</li>
+<li>ID 101921 : PTS issue ticket done CASE0070853: destination channel ID value above 1000 should be allowed and test passed</li>
+<li>ID 94289 ,ID 102395 ,ID 100425 : BLE_Ota application improvments (SBSFU ready, Flash driver use, SEM7 flash activity control)</li>
+</ul></li>
+<li>install address updated</li>
+</ul>
+<p><strong>Wireless Coprocessor Binary Table</strong>: Provides Install address for the targeted binary to be used in flash procedure via SWD/JTAG.</p>
+<table>
+<thead>
+<tr class="header">
+<th>Wireless Coprocessor Binary</th>
+<th>stm32wb1x(320K)</th>
+<th>Version</th>
+<th>Date</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td>stm32wb1x_BLE_HCILayer_fw.bin</td>
+<td>0x08032800</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/22/2021</td>
+</tr>
+<tr class="even">
+<td>stm32wb1x_BLE_HCI_AdvScan_fw.bin</td>
+<td>0x0803C000</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/22/2021</td>
+</tr>
+<tr class="odd">
+<td>stm32wb1x_BLE_LLD_fw.bin</td>
+<td>0x0803E800</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/22/2021</td>
+</tr>
+<tr class="even">
+<td>stm32wb1x_BLE_Stack_full_fw.bin</td>
+<td>0x0801C000</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/22/2021</td>
+</tr>
+<tr class="odd">
+<td>stm32wb1x_BLE_Stack_light_fw.bin</td>
+<td>0x08028000</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/22/2021</td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+<div class="collapse">
+<input type="checkbox" id="collapse-section1" aria-hidden="true"> <label for="collapse-section1" aria-hidden="false">V1.11.0 / 12-February-2021</label>
+<div>
+<h2 id="main-changes-1">Main Changes</h2>
+<p><strong>Associated changes in Wireless Coprocessor Binary</strong>:</p>
+<ul>
<li>Initial version of the binaries.</li>
</ul>
<p><strong>Wireless Coprocessor Binary Table</strong>: Provides Install address for the targeted binary to be used in flash procedure via SWD/JTAG.</p>
@@ -153,7 +226,7 @@
<td>12/02/2021</td>
</tr>
<tr class="even">
-<td>stm32wb5x_BLE_HCI_AdvScan_fw.bin</td>
+<td>stm32wb1x_BLE_HCI_AdvScan_fw.bin</td>
<td>0x0803B800</td>
<td><strong>v1.11.0</strong></td>
<td>12/02/2021</td>
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_HCILayer_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_HCILayer_fw.bin
index d9b589b01..9369cb1f3 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_HCILayer_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_HCILayer_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_HCI_AdvScan_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_HCI_AdvScan_fw.bin
index ee6041cf0..ffb5251f2 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_HCI_AdvScan_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_HCI_AdvScan_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_LLD_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_LLD_fw.bin
index 499ce20d0..b0f2b9588 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_LLD_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_LLD_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_Stack_full_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_Stack_full_fw.bin
index 35b797cc2..408f0dca6 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_Stack_full_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_Stack_full_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_Stack_light_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_Stack_light_fw.bin
index 1dda98f95..d06c5156e 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_Stack_light_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/stm32wb1x_BLE_Stack_light_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html
index 5ced0cbf4..72b2e5ad4 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html
@@ -33,6 +33,8 @@
<p>This software component is licensed by ST under Ultimate Liberty license SLA0044, the ā€œLicenseā€;</p>
<p>You may not use this file except in compliance with the License.</p>
<p>You may obtain a copy of the License at: <a href="http://www.st.com/SLA0044">SLA0044</a></p>
+<h1 id="known-limitations">Known Limitations</h1>
+<p><strong>If Anti-Rollback needs to be activated</strong>, please make sure to activate it only after installing the latest FUS version (&gt;= V1.2.0) and after successfully installing a wireless stack (without deleting it). <strong>Otherwise, further wireless stack installation will be blocked.</strong></p>
<h1 id="purpose">Purpose</h1>
<p>This release covers the delivery of STM32WB Coprocessor binaries.</p>
<p>Here is the list of references to user documents:</p>
@@ -64,9 +66,10 @@
<li>GATT server, client</li>
<li>Data length extension</li>
<li>2Mbit PHY / PHY update</li>
-<li>Privacy / White list</li>
+<li>Privacy</li>
+<li>White list</li>
<li>Legacy Pairing, LE secure connections</li>
-<li>HCI interface (full, like stm32wb5x_BLE_HCILayer_fw.bin)</li>
+<li>HCI interface (full, like stm32wb3x_BLE_HCILayer_fw.bin)</li>
<li>Direct Test Mode</li>
</ul></li>
</ul></li>
@@ -82,10 +85,15 @@
<li>GAP peripheral only (LL slave up to 2 links)</li>
<li>GATT server</li>
<li>Data length extension</li>
+<li>Privacy</li>
+<li>White list</li>
<li>Legacy Pairing, LE secure connections</li>
<li>HCI interface (reduced)</li>
<li>Direct Test Mode</li>
</ul></li>
+<li>BLE ā€œSlave Onlyā€ stack implies that with this stack configuration, STM32WB is not able to scan and request a BLE connection.</li>
+<li>It will just advertise, and accept incoming connection request from other master devices (e.g.Ā Smartphone).</li>
+<li>While with the ā€œfull featureā€ BLE stack, STM32WB3xx is able to support both master and slave roles on different links.</li>
</ul></li>
</ul></li>
<li>stm32wb3x_BLE_HCILayer_fw.bin
@@ -133,9 +141,13 @@
</ul></li>
<li>stm32wb3x_FUS_fw_1_0_2.bin
<ul>
+<li>Deprecated (empty file).</li>
+</ul></li>
+<li>stm32wb3x_FUS_fw_for_fus_0_5_3.bin
+<ul>
<li>Firmware Upgrade Services (FUS)</li>
<li>This binary is the utility to flash the Wireless Coprocessor Binaries.</li>
-<li>FUS version v1.0.2</li>
+<li>Latest version of the FUS to upgrade board containing only FUS v0.5.3</li>
</ul></li>
<li>stm32wb3x_FUS_fw.bin
<ul>
@@ -144,240 +156,373 @@
<li>Latest version of the FUS</li>
</ul></li>
</ul>
-<p><mark>How to flash the Wireless Coprocessor Binary via USB (Command Line Interface)</mark></p>
+<p><mark>How to flash the Wireless Coprocessor Binary via SWD/JTAG by ST-LINK (STM32CubeProgrammer GUI)</mark></p>
<ul>
<li><p><em>Inside the below procedure, the references to binaries name and install address are provided in the section <strong>Main Changes</strong> of this file.</em></p></li>
-<li><p>STEP 1: Use STM32CubeProgrammer</p>
+<li><p>STEP 1: Use STM32CubeProgrammer GUI</p>
<ul>
-<li><p>Version 2.0 or higher.</p></li>
+<li><p>Version 2.7.0 or higher.</p></li>
<li><p>It gives access to Firmware Upgrade Service (FUS) (<a href="http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00513965.pdf">AN5185</a> : ST firmware upgrade services for STM32WB Series.) through Bootloader.</p></li>
-<li><p>It is currently available as Command Line Interface (CLI) mode.</p></li>
+<li><p>It is currently available as Graphical User Interface (GUI) mode (or Command Line Interface (CLI) mode).</p></li>
</ul></li>
-<li><p>STEP 2: Access to Bootloader USB Interface (system flash)</p>
+<li><p>STEP 2: Access to SWD Interface (system flash)</p>
<ul>
-<li>Boot mode selected by Boot0 pin set to VDD
+<li>For NUCLEO-WB35CE :
<ul>
-<li>For P-NUCLEO-WB55.Nucleo :
+<li>Power ON via ST-LINK and Jumper JP1(USB_STL)</li>
+</ul></li>
+<li>open STM32CubeProgrammer GUI and select ā€œST-LINKā€</li>
+<li>in ST-LINK configuration: (Port: SWD) then select ā€œConnectā€</li>
+</ul></li>
+<li><p>STEP 3: select ā€œStart FUSā€ in Firmware Upgrade Services</p></li>
+<li><p>STEP 4: Read and upgrade FUS Version</p>
<ul>
-<li>Jumper between CN7.5(VDD) and CN7.7(Boot0)</li>
-<li>Power ON via USB_USER and Jumper JP1(USB_MCU)</li>
+<li>it can been obtained selecting ā€œRead FUS infosā€
+<ul>
+<li><em>00050300</em>: FUSv0.5.3 =&gt; <strong>Must be updated using STEP 5.</strong></li>
+<li><em>010X0Y00</em>: FUSv1.<strong>x</strong>.y =&gt; <strong>Must be updated using STEP 6 (when x &lt; 2).</strong></li>
+<li><em>01020000</em>: FUSv1.2.0 =&gt; <strong>Up to date, you can download the new wireless stack using STEP 7.</strong></li>
+</ul></li>
</ul></li>
-<li>For P-NUCLEO-WB55.USBDongle :
+<li><p>STEP 5: Download latest FUS for only FUSv0.5.3 upgrade</p>
<ul>
-<li>Move switch SW2 to Boot0</li>
-<li>Connect P-NUCLEO-WB55.USBDongle</li>
+<li>in Firmware Upgrade Services: (File Path: [stm32wb3x_FUS_fw_for_fus_0_5_3.bin], Start Adress: [Install@])</li>
+<li>then select ā€œFirmware Upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
</ul></li>
+<li><p>STEP 6: Download latest FUS</p>
+<ul>
+<li>in Firmware Upgrade Service: (File Path: [FUS_Binary], Start Adress: [Install@])</li>
+<li>then select ā€œFirmware Upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
</ul></li>
+<li><p>STEP 7: Download new wireless stack (after ā€œFW Deleteā€ if requested)</p>
+<ul>
+<li>in Firmware Upgrade Service: (File Path: [Wireless_Coprocessor_Binary], Start Adress: [Install@])</li>
+<li>then select ā€œFirmware Upgradeā€ (with ā€œVerify downloadā€ and ā€œStart stack after upgradeā€) Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary. (<strong>optional</strong>: activate ā€œAnti-Rollbackā€ on downloaded binary) If you need to perform FUS related manipulations, you always need to START the FUS in case the FUS is not running.</li>
</ul></li>
-<li><p>STEP 3 : Delete current wireless stack</p>
+<li><p>STEP 8: Revert to default configuration: in Option Bytes menu for User Configuration set: nSWboot0=1 (checked) nboot1=1 nboot0=1</p></li>
+</ul>
+<p><mark>How to flash the Wireless Coprocessor Binary via USB (STM32CubeProgrammer GUI)</mark></p>
+<ul>
+<li><p><em>Inside the below procedure, the references to binaries name and install address are provided in the section <strong>Main Changes</strong> of this file.</em></p></li>
+<li><p>STEP 1: Use STM32CubeProgrammer GUI</p>
<ul>
-<li><em>STM32_Programmer_CLI.exe -c port=usb1 -fwdelete</em></li>
+<li><p>Version 2.7.0 or higher.</p></li>
+<li><p>It gives access to Firmware Upgrade Service (FUS) (<a href="http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00513965.pdf">AN5185</a> : ST firmware upgrade services for STM32WB Series.) through Bootloader.</p></li>
+<li><p>It is currently available as Graphical User Interface (GUI) mode (or Command Line Interface (CLI) mode).</p></li>
</ul></li>
-<li>STEP 4 : Read and upgrade FUS Version
+<li><p>STEP 2: Access to Bootloader USB Interface (system flash)</p>
<ul>
-<li><em>STM32_Programmer_CLI.exe -c port=usb1 -r32 0x20030030 1</em>
+<li>Boot mode selected by Boot0 pin set to VDD
+<ul>
+<li>For NUCLEO-WB35CE :
<ul>
-<li><em>0x20030030 : 00050300</em> : FUSv0.5.3 =&gt; <strong>Must be updated using STEP 5.</strong></li>
-<li><em>0x20030030 : 01000100 or 01000200</em> : FUSv1.0.x =&gt; <strong>Must be updated using STEP 6.</strong></li>
-<li><em>0x20030030 : 01010200</em> : FUSv1.1.2 =&gt; <strong>Up to date, you can download the new wireless stack using STEP 7.</strong></li>
+<li>Jumper between CN7.5(VDD) and CN7.7(Boot0)</li>
+<li>Power ON via USB_USER and Jumper JP1(USB_MCU)<br />
+</li>
+</ul></li>
</ul></li>
+<li><p><strong>Warning</strong>: required Option Byte configuration: [nSWboot0=1]</p></li>
+<li><p>Open STM32CubeProgrammer GUI and select ā€œUSBā€ with (Port: USB1) in USB configuration then select ā€œConnectā€</p></li>
</ul></li>
-<li><p>STEP 5 : Download FUS 1.0.2 (stm32wb3x_FUS_fw_1_0_2.bin):</p>
+<li><p>STEP 3: step bypassed via USB</p></li>
+<li><p>STEP 4: Read and upgrade FUS Version</p>
<ul>
-<li><em>STM32_Programmer_CLI.exe -c port=usb1 -fwupgrade stm32wb3x_FUS_fw_1_0_2.bin [Install@] firstinstall=0</em></li>
-</ul>
-<p>Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</p></li>
-<li><p>STEP 6 : Download latest FUS :</p>
+<li>it can been obtained selecting ā€œRead FUS infosā€
<ul>
-<li><em>STM32_Programmer_CLI.exe -c port=usb1 -fwupgrade [FUS_Binary] [Install@] firstinstall=0</em></li>
-</ul>
-<p>Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</p></li>
-<li><p>STEP 7 : Download new wireless stack :</p>
+<li><em>00050300</em>: FUSv0.5.3 =&gt; <strong>Must be updated using STEP 5.</strong></li>
+<li><em>010X0Y00</em>: FUSv1.<strong>x</strong>.y =&gt; <strong>Must be updated using STEP 6 (when x &lt; 2).</strong></li>
+<li><em>01020000</em>: FUSv1.2.0 =&gt; <strong>Up to date, you can download the new wireless stack using STEP 7.</strong></li>
+</ul></li>
+</ul></li>
+<li><p>STEP 5: Download latest FUS for only FUSv0.5.3 upgrade</p>
<ul>
-<li><em>STM32_Programmer_CLI.exe -c port=usb1 -fwupgrade [Wireless_Coprocessor_Binary] [Install@] firstinstall=1</em></li>
-</ul>
-<p>Please check <strong>Wireless Coprocessor Binary Table</strong> for Install@ parameter depending of the binary.</p></li>
-<li><p>STEP 8 : Revert STEP 2 procedure to put back device in normal mode.</p></li>
+<li>in Firmware Upgrade Service: (File Path: [stm32wb3x_FUS_fw_for_fus_0_5_3.bin], Start Adress: [Install@])</li>
+<li>then select ā€œFirmware Upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
+</ul></li>
+<li><p>STEP 6: Download latest FUS</p>
+<ul>
+<li>in Firmware Upgrade Service: (File Path: [FUS_Binary], Start Adress: [Install@])</li>
+<li>then select ā€œFirmware Upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
+</ul></li>
+<li><p>STEP 7: Download new wireless stack (after ā€œFW Deleteā€ if requested)</p>
+<ul>
+<li>in Firmware Upgrade Service: (File Path: [Wireless_Coprocessor_Binary], Start Adress: [Install@])</li>
+<li>then select ā€œFirmware Upgradeā€ (with ā€œVerify downloadā€ and ā€œStart stack after upgradeā€) Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
+</ul></li>
+<li><p>STEP 8: Revert STEP 2 procedure to put back device in normal mode.</p></li>
</ul>
<p><mark>How to flash the Wireless Coprocessor Binary via SWD/JTAG by ST-LINK (Command Line Interface)</mark></p>
<ul>
<li><p><em>Inside the below procedure, the references to binaries name and install address are provided in the section <strong>Main Changes</strong> of this file.</em></p></li>
<li><p>STEP 1: Use STM32CubeProgrammer</p>
<ul>
-<li><p>Version 2.4.0 or higher.</p></li>
+<li><p>Version 2.7.0 or higher.</p></li>
<li><p>It gives access to Firmware Upgrade Service (FUS) (<a href="http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00513965.pdf">AN5185</a> : ST firmware upgrade services for STM32WB Series.) through Bootloader.</p></li>
<li><p>It is currently available as Command Line Interface (CLI) mode.</p></li>
</ul></li>
<li><p>STEP 2: Access to SWD Interface (system flash)</p>
<ul>
-<li>For P-NUCLEO-WB55.Nucleo :
+<li>For NUCLEO-WB35CE :
<ul>
<li>Power ON via ST-LINK and Jumper JP1(USB_STL)</li>
</ul></li>
-<li>For P-NUCLEO-WB55.USBDongle :
-<ul>
-<li>remain switch SW2 to Boot1</li>
-<li>Connect P-NUCLEO-WB55.USBDongle</li>
</ul></li>
-</ul></li>
-<li><p>STEP 3: Delete current wireless stack</p>
+<li><p>STEP 3: apply ā€œStart FUSā€</p>
<ul>
-<li><em>STM32_Programmer_CLI.exe -c port=swd -fwdelete</em></li>
+<li><em>STM32_Programmer_CLI.exe -c port=swd -startfus</em></li>
</ul></li>
-<li><p>STEP 4 : Read and upgrade FUS Version (if unknown FUS version)</p>
+<li><p>STEP 4: Read and upgrade FUS Version</p>
<ul>
-<li>it can been obtained with Transparent Mode application from STM32CubeMonitor-RF interface or using other flashing method via USB described in RN.
+<li><em>STM32_Programmer_CLI.exe -c port=swd mode=UR -r32 0x20010010 1</em>
<ul>
-<li><em>0x20030030 : 00050300</em> : FUSv0.5.3 =&gt; <strong>Must be updated using STEP 5.</strong></li>
-<li><em>0x20030030 : 01000100 or 01000200</em> : FUSv1.0.x =&gt; <strong>Must be updated using STEP 6.</strong></li>
-<li><em>0x20030030 : 01010200</em> : FUSv1.1.2 =&gt; <strong>Up to date, you can download the new wireless stack using STEP 7.</strong></li>
+<li><em><span class="citation" data-cites="0x20010010">@0x20010010</span>: 00050300</em>: FUSv0.5.3 =&gt; <strong>Must be updated using STEP 5.</strong></li>
+<li><em><span class="citation" data-cites="0x20010010">@0x20010010</span>: 010X0Y00</em>: FUSv1.<strong>x</strong>.y =&gt; <strong>Must be updated using STEP 6 (when x &lt; 2).</strong></li>
+<li><em><span class="citation" data-cites="0x20010010">@0x20010010</span>: 01020X00</em>: FUSv1.2.0 =&gt; <strong>Up to date, you can download the new wireless stack using STEP 7.</strong></li>
</ul></li>
</ul></li>
-<li><p>STEP 5 : Download FUS v1.0.2:</p>
+<li><p>STEP 5: Download latest FUS for only FUSv0.5.3 upgrade</p>
<ul>
-<li><em>STM32_Programmer_CLI.exe -c port=swd mode=UR -fwupgrade stm32wb3x_FUS_fw_1_0_2.bin [Install@] firstinstall=0</em></li>
+<li><em>STM32_Programmer_CLI.exe -c port=swd mode=UR -fwupgrade stm32wb3x_FUS_fw_for_fus_0_5_3.bin [Install@] firstinstall=0</em></li>
</ul>
<p>Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</p></li>
-<li><p>STEP 6 :Download latest FUS :</p>
+<li><p>STEP 6: Download latest FUS</p>
<ul>
<li><em>STM32_Programmer_CLI.exe -c port=swd mode=UR -fwupgrade [FUS_Binary] [Install@] firstinstall=0</em></li>
</ul>
<p>Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</p></li>
-<li><p>STEP 7 : Download new wireless stack :</p>
+<li><p>STEP 7: Download new wireless stack</p>
<ul>
-<li><em>STM32_Programmer_CLI.exe -c port=swd mode=UR -fwupgrade [Wireless_Coprocessor_Binary] [Install@] firstinstall=1</em></li>
+<li><em>STM32_Programmer_CLI.exe -c port=swd mode=UR -fwupgrade [Wireless_Coprocessor_Binary] [Install@] firstinstall=0</em></li>
</ul>
-<p>Please check <strong>Wireless Coprocessor Binary Table</strong> for Install@ parameter depending of the binary.</p></li>
-<li><p>STEP 8 : Revert to default OB configuration :</p>
+<p>Please check <strong>Wireless Coprocessor Binary Table</strong> for Install@ parameter depending of the binary. (<strong>optional</strong>: activate ā€œAnti-Rollbackā€ on downloaded binary: <em>STM32_Programmer_CLI.exe -c port=swd -antirollback</em>) If you need to perform FUS related manipulations, you always need to START the FUS in case the FUS is not running.</p></li>
+<li><p>STEP 8: Revert to default OB configuration</p>
<ul>
<li>*STM32_Programmer_CLI.exe -c port=swd mode=UR -ob nSWboot0=1 nboot1=1 nboot0=1</li>
</ul></li>
</ul>
-<p><mark>How to flash the Wireless Coprocessor Binary via USB (STM32CubeProgrammer GUI)</mark></p>
+<p><mark>How to flash the Wireless Coprocessor Binary via USB (Command Line Interface)</mark></p>
<ul>
<li><p><em>Inside the below procedure, the references to binaries name and install address are provided in the section <strong>Main Changes</strong> of this file.</em></p></li>
-<li><p>STEP 1: Use STM32CubeProgrammer GUI</p>
+<li><p>STEP 1: Use STM32CubeProgrammer</p>
<ul>
-<li><p>Version 2.4.0 or higher.</p></li>
+<li><p>Version 2.7 or higher.</p></li>
<li><p>It gives access to Firmware Upgrade Service (FUS) (<a href="http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00513965.pdf">AN5185</a> : ST firmware upgrade services for STM32WB Series.) through Bootloader.</p></li>
-<li><p>It is currently available as Graphical User Interface (GUI) mode (or Command Line Interface (CLI) mode).</p></li>
+<li><p>It is currently available as Command Line Interface (CLI) mode.</p></li>
</ul></li>
<li><p>STEP 2: Access to Bootloader USB Interface (system flash)</p>
<ul>
<li>Boot mode selected by Boot0 pin set to VDD
<ul>
-<li>For P-NUCLEO-WB55.Nucleo :
+<li>For NUCLEO-WB35CE :
<ul>
<li>Jumper between CN7.5(VDD) and CN7.7(Boot0)</li>
<li>Power ON via USB_USER and Jumper JP1(USB_MCU)</li>
</ul></li>
-<li>For P-NUCLEO-WB55.USBDongle :
-<ul>
-<li>Move switch SW2 to Boot0</li>
-<li>Connect P-NUCLEO-WB55.USBDongle</li>
-</ul></li>
</ul></li>
-<li>open STM32CubeProgrammer GUI and select ā€œUSBā€</li>
-<li>in USB configuration: (Port: USB1) then select ā€œConnectā€</li>
+<li><strong>Warning</strong>: required Option Byte configuration: [nSWboot0=1]</li>
</ul></li>
-<li><p>STEP 3 : Delete current wireless stack</p>
+<li><p>STEP 3: step bypassed via USB</p></li>
+<li><p>STEP 4: Read and upgrade FUS Version</p>
<ul>
-<li>in Firmware Upgrade Services: select ā€œDelete Firmwareā€</li>
-</ul></li>
-<li><p>STEP 4 : Read and upgrade FUS Version</p>
-<ul>
-<li>in Firmware Upgrade Services: select ā€œRead FUS stateā€
+<li><em>STM32_Programmer_CLI.exe -c port=usb1 -r32 0x20030030 1</em>
<ul>
-<li><em>0x20030030 : 00050300</em> : FUSv0.5.3 =&gt; <strong>Must be updated using STEP 5.</strong></li>
-<li><em>0x20030030 : 01000100 or 01000200</em> : FUSv1.0.x =&gt; <strong>Must be updated using STEP 6.</strong></li>
-<li><em>0x20030030 : 01010200</em> : FUSv1.1.2 =&gt; <strong>Up to date, you can download the new wireless stack using STEP 7.</strong></li>
+<li><em><span class="citation" data-cites="0x20030030">@0x20030030</span>: 00050300</em>: FUSv0.5.3 =&gt; <strong>Must be updated using STEP 5.</strong></li>
+<li><em><span class="citation" data-cites="0x20030030">@0x20030030</span>: 010X0Y00</em>: FUSv1.<strong>x</strong>.y =&gt; <strong>Must be updated using STEP 6 (when x &lt; 2).</strong></li>
+<li><em><span class="citation" data-cites="0x20030030">@0x20030030</span>: 01020X00</em>: FUSv1.2.0 =&gt; <strong>Up to date, you can download the new wireless stack using STEP 7.</strong></li>
</ul></li>
</ul></li>
-<li><p>STEP 5 : Download FUS v1.0.2 :</p>
+<li><p>STEP 5: Download latest FUS for only FUSv0.5.3 upgrade</p>
<ul>
-<li>in Firmware Upgrade Service: (File Path: [stm32wb3x_FUS_fw_1_0_2.bin], Start Adress: [Install@])</li>
-<li>then select ā€œFirmware Upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
-</ul></li>
-<li><p>STEP 6 :Download latest FUS :</p>
+<li><em>STM32_Programmer_CLI.exe -c port=usb1 -fwupgrade stm32wb3x_FUS_fw_for_fus_0_5_3.bin [Install@] firstinstall=0</em></li>
+</ul>
+<p>Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</p></li>
+<li><p>STEP 6: Download latest FUS</p>
<ul>
-<li>in Firmware Upgrade Service: (File Path: [FUS_Binary], Start Adress: [Install@])</li>
-<li>then select ā€œFirmware Upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
+<li><em>STM32_Programmer_CLI.exe -c port=usb1 -fwupgrade [FUS_Binary] [Install@] firstinstall=0</em> Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
</ul></li>
-<li><p>STEP 7 : Download new wireless stack :</p>
+<li><p>STEP 7: Download new wireless stack</p>
<ul>
-<li>in Firmware Upgrade Service: (File Path: [Wireless_Coprocessor_Binary], Start Adress: [Install@])</li>
-<li>then select ā€œFirmware Upgradeā€ with ā€œVerify downloadā€ and ā€œStart stack after upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
+<li><em>STM32_Programmer_CLI.exe -c port=usb1 -fwupgrade [Wireless_Coprocessor_Binary] [Install@] firstinstall=0</em> Please check <strong>Wireless Coprocessor Binary Table</strong> for Install@ parameter depending of the binary.</li>
</ul></li>
-<li><p>STEP 8 : Revert STEP 2 procedure to put back device in normal mode.</p></li>
+<li><p>STEP 8: Revert STEP 2 procedure to put back device in normal mode.</p></li>
</ul>
-<p><mark>How to flash the Wireless Coprocessor Binary via SWD/JTAG by ST-LINK (STM32CubeProgrammer GUI)</mark></p>
-<ul>
-<li><p><em>Inside the below procedure, the references to binaries name and install address are provided in the section <strong>Main Changes</strong> of this file.</em></p></li>
-<li><p>STEP 1: Use STM32CubeProgrammer GUI</p>
-<ul>
-<li><p>Version 2.4.0 or higher.</p></li>
-<li><p>It gives access to Firmware Upgrade Service (FUS) (<a href="http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00513965.pdf">AN5185</a> : ST firmware upgrade services for STM32WB Series.) through Bootloader.</p></li>
-<li><p>It is currently available as Graphical User Interface (GUI) mode (or Command Line Interface (CLI) mode).</p></li>
-</ul></li>
-<li><p>STEP 2: Access to SWD Interface (system flash)</p>
+<p><mark>How to compute available flash size </mark></p>
<ul>
-<li>For P-NUCLEO-WB55.Nucleo :
+<li><p>The default linker file is provided in [\Drivers\CMSIS\Device\ST32WBxx\Source\Templates].</p>
+<p>The maximum flash memory that can be used by the application is up to the Secure Flash Start Address (SFSA) that can be read from the option byte.</p>
+<p>The <strong>ICFEDIT_region_ROM_end</strong> in the linker can be modified with a value up to : (0x08000000 + (SFSA &lt;&lt; 12)) - 1.</p></li>
+<li><p><strong>Example</strong>: When the SFSA option byte is set to 0xA0, the maximum value to be used for __ICFEDIT_region_ROM_end is 0x0809FFFF ā€“ which is 640KB of flash</p></li>
+<li><p><strong>Note</strong>: The SFSA option byte can only be set by the CPU2. The user cannot modify that value.</p></li>
+</ul>
+</div>
+<div class="col-sm-12 col-lg-8">
+<h1 id="update-history">Update History</h1>
+<div class="collapse">
+<input type="checkbox" id="collapse-section6" checked aria-hidden="true"> <label for="collapse-section6" aria-hidden="true">V1.11.1 / 23-March-2021</label>
+<div>
+<h2 id="main-changes">Main Changes</h2>
+<p><strong>Associated changes in Wireless Coprocessor Binary</strong>:</p>
<ul>
-<li>Power ON via ST-LINK and Jumper JP1(USB_STL)</li>
-</ul></li>
-<li>For P-NUCLEO-WB55.USBDongle :
+<li><p>Install address for STM32WB3x(256K) provided</p></li>
+<li>BLE :
<ul>
-<li>remain switch SW2 to Boot1</li>
-<li>Connect P-NUCLEO-WB55.USBDongle</li>
-</ul></li>
-<li>open STM32CubeProgrammer GUI and select ā€œST-LINKā€</li>
-<li>in ST-LINK configuration: (Port: SWD) then select ā€œConnectā€</li>
+<li>ID 102917 : [STM32WB15/STM32WB10] Apply ā€œVCO patchā€ for all packages to solve ā€œRX path issueā€</li>
+<li>ID 99680 : 2nd link secure fail if master database is clear during 1st link connection</li>
+<li>ID 101346 : ACI_GAP_BOND_LOST_Event timeout does not work if ALLOW rebond not sent</li>
+<li>ID 101921 : PTS issue ticket done CASE0070853: destination channel ID value above 1000 should be allowed and test passed</li>
+<li>ID 94289 ,ID 102395 ,ID 100425 : BLE_Ota application improvments (SBSFU ready, Flash driver use, SEM7 flash activity control)</li>
</ul></li>
-<li><p>STEP 3: Delete current wireless stack</p>
+<li>Thread:
<ul>
-<li>in Firmware Upgrade Services: select ā€œDelete Firmwareā€</li>
+<li>ID 102357 : High power consumption after exactly 3 minutes in Thread_SED_Coap_Multicast example</li>
</ul></li>
-<li><p>STEP 4 : Read and upgrade FUS Version (if unknown FUS version)</p>
-<ul>
-<li>it can been obtained with Transparent Mode application from STM32CubeMonitor-RF interface or using other flashing method via USB described in RN.
-<ul>
-<li><em>0x20030030 : 00050300</em> : FUSv0.5.3 =&gt; <strong>Must be updated using STEP 5.</strong></li>
-<li><em>0x20030030 : 01000100 or 01000200</em> : FUSv1.0.x =&gt; <strong>Must be updated using STEP 6.</strong></li>
-<li><em>0x20030030 : 01010200</em> : FUSv1.1.2 =&gt; <strong>Up to date, you can download the new wireless stack using STEP 7.</strong></li>
-</ul></li>
-</ul></li>
-<li><p>STEP 5 : Download FUS v1.0.2 :</p>
+<li>Zigbee:
<ul>
-<li>in Firmware Upgrade Services: (File Path: [stm32wb3x_FUS_fw_1_0_2.bin], Start Adress: [Install@])</li>
-<li>then select ā€œFirmware Upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
+<li>ID 100612 : Zigbee stack not going back in low power mode after SF timer wrap-around</li>
</ul></li>
-<li><p>STEP 6 :Download latest FUS :</p>
+<li>MAC 802.15.4:
<ul>
-<li>in Firmware Upgrade Service: (File Path: [FUS_Binary], Start Adress: [Install@])</li>
-<li>then select ā€œFirmware Upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
+<li>ID 95824 : stm32wb3x_Mac_802_15_4_fw.bin will change RCC_CFGR value even if user wants to use PLL for CM4 64MHz</li>
</ul></li>
-<li><p>STEP 7 : Download new wireless stack :</p>
+<li>FUS binaries upgrade to v1.2.0:
<ul>
-<li>in Firmware Upgrade Service: (File Path: [Wireless_Coprocessor_Binary], Start Adress: [Install@])</li>
-<li>then select ā€œFirmware Upgradeā€ with ā€œVerify downloadā€ and ā€œStart stack after upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
+<li>New stm32wb3x_FUS_fw_for_fus_0_5_3.bin: FUS V1.2.0 image to be installed exclusively on stm32WB3x containing FUS V0.5.3</li>
+<li>updated stm32wb3x_FUS_fw.bin: FUS V1.2.0 image to be installed on stm32WB3x containing all FUS versions higher than V0.5.3</li>
+<li>stm32wb5x_FUS_fw_1_0_2.bin: Deprecated (empty file).</li>
</ul></li>
-<li><p>STEP 8 : Revert to default configuration: in Option Bytes menu for User Configuration set: nSWboot0=1 (checked) nboot1=1 nboot0=1</p></li>
-</ul>
-<p><mark>How to compute available flash size </mark></p>
-<ul>
-<li><p>The default linker file is provided in [\Drivers\CMSIS\Device\ST32WBxx\Source\Templates].</p>
-<p>The maximum flash memory that can be used by the application is up to the Secure Flash Start Address (SFSA) that can be read from the option byte.</p>
-<p>The <strong>ICFEDIT_region_ROM_end</strong> in the linker can be modified with a value up to : (0x08000000 + (SFSA &lt;&lt; 12)) - 1.</p></li>
-<li><p><strong>Example</strong>: When the SFSA option byte is set to 0xA0, the maximum value to be used for __ICFEDIT_region_ROM_end is 0x0809FFFF ā€“ which is 640KB of flash</p></li>
-<li><p><strong>Note</strong>: The SFSA option byte can only be set by the CPU2. The user cannot modify that value.</p></li>
</ul>
+<p><strong>Firmware Upgrade Services Binary Table</strong>: Provides Install address for the targeted binary to be used in flash procedure ā€œSTEP 5/6ā€ via USB or via SWD/JTAG.</p>
+<table>
+<thead>
+<tr class="header">
+<th>Wireless Coprocessor Binary</th>
+<th>STM32WB3x(512K)</th>
+<th>STM32WB3x(256K)</th>
+<th>Version</th>
+<th>Date</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td>stm32wb3x_FUS_fw_for_fus_0_5_3.bin</td>
+<td>0x080<strong>7A</strong>000</td>
+<td>0x080<strong>3A</strong>000</td>
+<td><strong>v1.2.0</strong></td>
+<td>04/06/2021</td>
+</tr>
+<tr class="even">
+<td>stm32wb3x_FUS_fw.bin</td>
+<td>0x080<strong>7A</strong>000</td>
+<td>0x080<strong>3A</strong>000</td>
+<td><strong>v1.2.0</strong></td>
+<td>04/06/2021</td>
+</tr>
+</tbody>
+</table>
+<p><strong>Wireless Coprocessor Binary Table</strong>: Provides Install address for the targeted binary to be used in flash procedure ā€œSTEP 7ā€ via USB or via SWD/JTAG.</p>
+<table>
+<thead>
+<tr class="header">
+<th>Wireless Coprocessor Binary</th>
+<th>STM32WB3x(512K)</th>
+<th>STM32WB3x(256K)</th>
+<th>Version</th>
+<th>Date</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td>stm32wb3x_BLE_HCILayer_fw.bin</td>
+<td>0x0806C000</td>
+<td>0x0802C000</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/22/2021</td>
+</tr>
+<tr class="even">
+<td>stm32wb3x_BLE_HCI_AdvScan_fw.bin</td>
+<td>0x08076000</td>
+<td>0x08036000</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/22/2021</td>
+</tr>
+<tr class="odd">
+<td>stm32wb3x_BLE_LLD_fw.bin</td>
+<td>0x08078000</td>
+<td>0x08038000</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/22/2021</td>
+</tr>
+<tr class="even">
+<td>stm32wb3x_BLE_Mac_802_15_4_fw.bin</td>
+<td>0x08041000</td>
+<td>0x00</td>
+<td>v1.11.0</td>
+<td>02/05/2021</td>
+</tr>
+<tr class="odd">
+<td>stm32wb3x_BLE_Stack_full_fw.bin</td>
+<td>0x08056000</td>
+<td>0x08016000</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/22/2021</td>
+</tr>
+<tr class="even">
+<td>stm32wb3x_BLE_Stack_light_fw.bin</td>
+<td>0x08062000</td>
+<td>0x08022000</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/22/2021</td>
+</tr>
+<tr class="odd">
+<td>stm32wb3x_Mac_802_15_4_fw.bin</td>
+<td>0x0806F000</td>
+<td>0x0802F000</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/23/2021</td>
+</tr>
+<tr class="even">
+<td>stm32wb3x_Phy_802_15_4_fw.bin</td>
+<td>0x0806A000</td>
+<td>0x0802A000</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/23/2021</td>
+</tr>
+<tr class="odd">
+<td>stm32wb3x_Thread_FTD_fw.bin</td>
+<td>0x08024000</td>
+<td>0x00</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/23/2021</td>
+</tr>
+<tr class="even">
+<td>stm32wb3x_Thread_MTD_fw.bin</td>
+<td>0x08037000</td>
+<td>0x00</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/23/2021</td>
+</tr>
+<tr class="odd">
+<td>stm32wb3x_Zigbee_FFD_fw.bin</td>
+<td>0x08033000</td>
+<td>0x00</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/23/2021</td>
+</tr>
+<tr class="even">
+<td>stm32wb3x_Zigbee_RFD_fw.bin</td>
+<td>0x08041000</td>
+<td>0x00</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/23/2021</td>
+</tr>
+</tbody>
+</table>
+</div>
</div>
-<div class="col-sm-12 col-lg-8">
-<h1 id="update-history">Update History</h1>
<div class="collapse">
-<input type="checkbox" id="collapse-section5" checked aria-hidden="true"> <label for="collapse-section5" aria-hidden="true">V1.11.0 / 5-February-2021</label>
+<input type="checkbox" id="collapse-section5" aria-hidden="true"> <label for="collapse-section5" aria-hidden="true">V1.11.0 / 5-February-2021</label>
<div>
-<h2 id="main-changes">Main Changes</h2>
+<h2 id="main-changes-1">Main Changes</h2>
<p><strong>Associated changes in Wireless Coprocessor Binary</strong>:</p>
<ul>
<li>Support of new binary:
@@ -534,7 +679,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section4" aria-hidden="true"> <label for="collapse-section4" aria-hidden="true">V1.10.0 / 26-October-2020</label>
<div>
-<h2 id="main-changes-1">Main Changes</h2>
+<h2 id="main-changes-2">Main Changes</h2>
<p><strong>Associated changes in Wireless Coprocessor Binary</strong>:</p>
<ul>
<li>BLE:
@@ -632,7 +777,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section4" aria-hidden="true"> <label for="collapse-section4" aria-hidden="true">V1.9.0 / 21-September-2020</label>
<div>
-<h2 id="main-changes-2">Main Changes</h2>
+<h2 id="main-changes-3">Main Changes</h2>
<p><strong>Associated changes in Wireless Coprocessor Binary</strong>:</p>
<ul>
<li>Introducing following new binary:</li>
@@ -746,7 +891,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section3" aria-hidden="true"> <label for="collapse-section3" aria-hidden="true">V1.8.0 / 22-June-2020</label>
<div>
-<h2 id="main-changes-3">Main Changes</h2>
+<h2 id="main-changes-4">Main Changes</h2>
<p><strong>Associated changes in Wireless Coprocessor Binary</strong>:</p>
<ul>
<li>BLE:
@@ -854,7 +999,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section2" aria-hidden="true"> <label for="collapse-section2" aria-hidden="true">V1.6.0 / 27-March-2020</label>
<div>
-<h2 id="main-changes-4">Main Changes</h2>
+<h2 id="main-changes-5">Main Changes</h2>
<p><strong>Associated changes in Wireless Coprocessor Binary</strong>:</p>
<ul>
<li>MAC:
@@ -943,7 +1088,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section1" aria-hidden="true"> <label for="collapse-section1" aria-hidden="true">V1.5.0 / 14-February-2020</label>
<div>
-<h2 id="main-changes-5">Main Changes</h2>
+<h2 id="main-changes-6">Main Changes</h2>
<p><strong>Associated changes in Wireless Coprocessor Binary</strong>:</p>
<ul>
<li>Initial version of Wireless Coprocessor Binary compatible with STM32WB3x.</li>
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_HCILayer_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_HCILayer_fw.bin
index d48db497f..6c26f237e 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_HCILayer_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_HCILayer_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_HCI_AdvScan_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_HCI_AdvScan_fw.bin
index 8211b0b1a..1e6cc47ba 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_HCI_AdvScan_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_HCI_AdvScan_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_Stack_full_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_Stack_full_fw.bin
index a4ec39df1..509bf8cd7 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_Stack_full_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_Stack_full_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_Stack_light_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_Stack_light_fw.bin
index 06c59a278..c9525bc78 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_Stack_light_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_BLE_Stack_light_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_FUS_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_FUS_fw.bin
index f79878fb6..5c5cb465e 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_FUS_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_FUS_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_FUS_fw_1_0_2.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_FUS_fw_1_0_2.bin
index f75d7aff7..e69de29bb 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_FUS_fw_1_0_2.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_FUS_fw_1_0_2.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_FUS_fw_for_fus_0_5_3.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_FUS_fw_for_fus_0_5_3.bin
new file mode 100644
index 000000000..86a14ad21
--- /dev/null
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_FUS_fw_for_fus_0_5_3.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Mac_802_15_4_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Mac_802_15_4_fw.bin
index 5fb978ee2..0f1a7e6bf 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Mac_802_15_4_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Mac_802_15_4_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Phy_802_15_4_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Phy_802_15_4_fw.bin
index 88482e7fb..df6fc41d5 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Phy_802_15_4_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Phy_802_15_4_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Thread_FTD_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Thread_FTD_fw.bin
index d3e9a00bd..9fbaa0402 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Thread_FTD_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Thread_FTD_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Thread_MTD_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Thread_MTD_fw.bin
index 5c5d798f4..d68415a01 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Thread_MTD_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Thread_MTD_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Zigbee_FFD_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Zigbee_FFD_fw.bin
index 3f700d13c..ca28980f0 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Zigbee_FFD_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Zigbee_FFD_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Zigbee_RFD_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Zigbee_RFD_fw.bin
index 15a43fa42..4c2dd0dd5 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Zigbee_RFD_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/stm32wb3x_Zigbee_RFD_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html
index c2800fe22..a73dac3b1 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html
@@ -33,6 +33,8 @@
<p>This software component is licensed by ST under Ultimate Liberty license SLA0044, the ā€œLicenseā€;</p>
<p>You may not use this file except in compliance with the License.</p>
<p>You may obtain a copy of the License at: <a href="http://www.st.com/SLA0044">SLA0044</a></p>
+<h1 id="known-limitations">Known Limitations</h1>
+<p><strong>If Anti-Rollback needs to be activated</strong>, please make sure to activate it only after installing the latest FUS version (&gt;= V1.2.0) and after successfully installing a wireless stack (without deleting it). <strong>Otherwise, further wireless stack installation will be blocked.</strong></p>
<h1 id="purpose">Purpose</h1>
<p>This release covers the delivery of STM32WB Coprocessor binaries.</p>
<p>Here is the list of references to user documents:</p>
@@ -48,7 +50,7 @@
<li>BT SIG Certification listing : <a href="https://launchstudio.bluetooth.com/ListingDetails/70712">Declaration ID D042213</a></li>
<li>To be used for advertising and scanning through HCI interface</li>
</ul></li>
-<li>stm32wb3x_BLE_LLD_fw.bin
+<li>stm32wb5x_BLE_LLD_fw.bin
<ul>
<li>BLE LLD (Low Level Driver) Radio Transparent firmware</li>
<li>To be used for direct access on BLE LLD features and API</li>
@@ -64,7 +66,8 @@
<li>GATT server, client</li>
<li>Data length extension</li>
<li>2Mbit PHY / PHY update</li>
-<li>Privacy / White list</li>
+<li>Privacy</li>
+<li>White list</li>
<li>Legacy Pairing, LE secure connections</li>
<li>HCI interface (full, like stm32wb5x_BLE_HCILayer_fw.bin)</li>
<li>Direct Test Mode</li>
@@ -82,13 +85,15 @@
<li>GAP peripheral only (LL slave up to 2 links)</li>
<li>GATT server</li>
<li>Data length extension</li>
+<li>Privacy</li>
+<li>White list</li>
<li>Legacy Pairing, LE secure connections</li>
<li>HCI interface (reduced)</li>
<li>Direct Test Mode</li>
</ul></li>
<li>BLE ā€œSlave Onlyā€ stack implies that with this stack configuration, STM32WB is not able to scan and request a BLE connection.</li>
<li>It will just advertise, and accept incoming connection request from other master devices (e.g.Ā Smartphone).</li>
-<li>While with the ā€œfull featureā€ BLE stack, STM32WB55xx is able to support both master and slave roles on different links (with the limitation of max 8 links in parallel, from which max 2 slave links).</li>
+<li>While with the ā€œfull featureā€ BLE stack, STM32WB5xx is able to support both master and slave roles on different links (with the limitation of max 8 links in parallel, from which max 2 slave links).</li>
</ul></li>
</ul></li>
<li>stm32wb5x_BLE_HCILayer_fw.bin
@@ -139,7 +144,7 @@
<li>Zigbee Compliant Platform certified</li>
<li>To be used for End Device Zigbee role</li>
</ul></li>
-<li>stm32wb3x_BLE_Mac_802_15_4_fw.bin
+<li>stm32wb5x_BLE_Mac_802_15_4_fw.bin
<ul>
<li>Static Concurrent Mode BLE MAC 802.15.4.</li>
<li>Supports Full BLE Stack 5.0 certified and MAC 802.15.4 API based on latest official <a href="http://grouper.ieee.org/groups/802/15/pub/Download.html">IEEE Std 802.15.4-2011</a></li>
@@ -168,9 +173,13 @@
</ul></li>
<li>stm32wb5x_FUS_fw_1_0_2.bin
<ul>
+<li>Deprecated (empty file).</li>
+</ul></li>
+<li>stm32wb5x_FUS_fw_for_fus_0_5_3.bin
+<ul>
<li>Firmware Upgrade Services (FUS)</li>
<li>This binary is the utility to flash the Wireless Coprocessor Binaries.</li>
-<li>FUS version v1.0.2</li>
+<li>Latest version of the FUS to upgrade board containing only FUS v0.5.3</li>
</ul></li>
<li>stm32wb5x_FUS_fw.bin
<ul>
@@ -179,14 +188,64 @@
<li>Latest version of the FUS</li>
</ul></li>
</ul>
-<p><mark>How to flash the Wireless Coprocessor Binary via USB (Command Line Interface)</mark></p>
+<p><mark>How to flash the Wireless Coprocessor Binary via SWD/JTAG by ST-LINK (STM32CubeProgrammer GUI)</mark></p>
<ul>
<li><p><em>Inside the below procedure, the references to binaries name and install address are provided in the section <strong>Main Changes</strong> of this file.</em></p></li>
-<li><p>STEP 1: Use STM32CubeProgrammer</p>
+<li><p>STEP 1: Use STM32CubeProgrammer GUI</p>
<ul>
-<li><p>Version 2.0 or higher.</p></li>
+<li><p>Version 2.7.0 or higher.</p></li>
<li><p>It gives access to Firmware Upgrade Service (FUS) (<a href="http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00513965.pdf">AN5185</a> : ST firmware upgrade services for STM32WB Series.) through Bootloader.</p></li>
-<li><p>It is currently available as Command Line Interface (CLI) mode.</p></li>
+<li><p>It is currently available as Graphical User Interface (GUI) mode (or Command Line Interface (CLI) mode).</p></li>
+</ul></li>
+<li><p>STEP 2: Access to SWD Interface (system flash)</p>
+<ul>
+<li>For P-NUCLEO-WB55.Nucleo :
+<ul>
+<li>Power ON via ST-LINK and Jumper JP1(USB_STL)</li>
+</ul></li>
+<li>For P-NUCLEO-WB55.USBDongle :
+<ul>
+<li>remain switch SW2 to Boot1</li>
+<li>Connect P-NUCLEO-WB55.USBDongle</li>
+</ul></li>
+<li>open STM32CubeProgrammer GUI and select ā€œST-LINKā€</li>
+<li>in ST-LINK configuration: (Port: SWD) then select ā€œConnectā€</li>
+</ul></li>
+<li><p>STEP 3: select ā€œStart FUSā€ in Firmware Upgrade Services</p></li>
+<li><p>STEP 4: Read and upgrade FUS Version</p>
+<ul>
+<li>it can been obtained selecting ā€œRead FUS infosā€
+<ul>
+<li><em>00050300</em>: FUSv0.5.3 =&gt; <strong>Must be updated using STEP 5.</strong></li>
+<li><em>010X0Y00</em>: FUSv1.<strong>x</strong>.y =&gt; <strong>Must be updated using STEP 6 (when x &lt; 2).</strong></li>
+<li><em>01020000</em>: FUSv1.2.0 =&gt; <strong>Up to date, you can download the new wireless stack using STEP 7.</strong></li>
+</ul></li>
+</ul></li>
+<li><p>STEP 5: Download latest FUS for only FUSv0.5.3 upgrade</p>
+<ul>
+<li>in Firmware Upgrade Services: (File Path: [stm32wb5x_FUS_fw_for_fus_0_5_3.bin], Start Adress: [Install@])</li>
+<li>then select ā€œFirmware Upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
+</ul></li>
+<li><p>STEP 6: Download latest FUS</p>
+<ul>
+<li>in Firmware Upgrade Service: (File Path: [FUS_Binary], Start Adress: [Install@])</li>
+<li>then select ā€œFirmware Upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
+</ul></li>
+<li><p>STEP 7: Download new wireless stack (after ā€œFW Deleteā€ if requested)</p>
+<ul>
+<li>in Firmware Upgrade Service: (File Path: [Wireless_Coprocessor_Binary], Start Adress: [Install@])</li>
+<li>then select ā€œFirmware Upgradeā€ (with ā€œVerify downloadā€ and ā€œStart stack after upgradeā€) Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary. (<strong>optional</strong>: activate ā€œAnti-Rollbackā€ on downloaded binary) If you need to perform FUS related manipulations, you always need to START the FUS in case the FUS is not running.</li>
+</ul></li>
+<li><p>STEP 8: Revert to default configuration: in Option Bytes menu for User Configuration set: nSWboot0=1 (checked) nboot1=1 nboot0=1</p></li>
+</ul>
+<p><mark>How to flash the Wireless Coprocessor Binary via USB (STM32CubeProgrammer GUI)</mark></p>
+<ul>
+<li><p><em>Inside the below procedure, the references to binaries name and install address are provided in the section <strong>Main Changes</strong> of this file.</em></p></li>
+<li><p>STEP 1: Use STM32CubeProgrammer GUI</p>
+<ul>
+<li><p>Version 2.7.0 or higher.</p></li>
+<li><p>It gives access to Firmware Upgrade Service (FUS) (<a href="http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00513965.pdf">AN5185</a> : ST firmware upgrade services for STM32WB Series.) through Bootloader.</p></li>
+<li><p>It is currently available as Graphical User Interface (GUI) mode (or Command Line Interface (CLI) mode).</p></li>
</ul></li>
<li><p>STEP 2: Access to Bootloader USB Interface (system flash)</p>
<ul>
@@ -203,43 +262,42 @@
<li>Connect P-NUCLEO-WB55.USBDongle</li>
</ul></li>
</ul></li>
+<li><p><strong>Warning</strong>: required Option Byte configuration: [nSWboot0=1]</p></li>
+<li><p>Open STM32CubeProgrammer GUI and select ā€œUSBā€ with (Port: USB1) in USB configuration then select ā€œConnectā€</p></li>
</ul></li>
-<li><p>STEP 3 : Delete current wireless stack</p>
-<ul>
-<li><em>STM32_Programmer_CLI.exe -c port=usb1 -fwdelete</em></li>
-</ul></li>
-<li>STEP 4 : Read and upgrade FUS Version
+<li><p>STEP 3: step bypassed via USB</p></li>
+<li><p>STEP 4: Read and upgrade FUS Version</p>
<ul>
-<li><em>STM32_Programmer_CLI.exe -c port=usb1 -r32 0x20030030 1</em>
+<li>it can been obtained selecting ā€œRead FUS infosā€
<ul>
-<li><em>0x20030030 : 00050300</em> : FUSv0.5.3 =&gt; <strong>Must be updated using STEP 5.</strong></li>
-<li><em>0x20030030 : 01000100 or 01000200</em> : FUSv1.0.x =&gt; <strong>Must be updated using STEP 6.</strong></li>
-<li><em>0x20030030 : 01010200</em> : FUSv1.1.2 =&gt; <strong>Up to date, you can download the new wireless stack using STEP 7.</strong></li>
+<li><em>00050300</em>: FUSv0.5.3 =&gt; <strong>Must be updated using STEP 5.</strong></li>
+<li><em>010X0Y00</em>: FUSv1.<strong>x</strong>.y =&gt; <strong>Must be updated using STEP 6 (when x &lt; 2).</strong></li>
+<li><em>01020000</em>: FUSv1.2.0 =&gt; <strong>Up to date, you can download the new wireless stack using STEP 7.</strong></li>
</ul></li>
</ul></li>
-<li><p>STEP 5 : Download FUS 1.0.2 (stm32wb5x_FUS_fw_1_0_2.bin):</p>
+<li><p>STEP 5: Download latest FUS for only FUSv0.5.3 upgrade</p>
<ul>
-<li><em>STM32_Programmer_CLI.exe -c port=usb1 -fwupgrade stm32wb5x_FUS_fw_1_0_2.bin [Install@] firstinstall=0</em></li>
-</ul>
-<p>Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</p></li>
-<li><p>STEP 6 : Download latest FUS :</p>
+<li>in Firmware Upgrade Service: (File Path: [stm32wb5x_FUS_fw_for_fus_0_5_3.bin], Start Adress: [Install@])</li>
+<li>then select ā€œFirmware Upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
+</ul></li>
+<li><p>STEP 6: Download latest FUS</p>
<ul>
-<li><em>STM32_Programmer_CLI.exe -c port=usb1 -fwupgrade [FUS_Binary] [Install@] firstinstall=0</em></li>
-</ul>
-<p>Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</p></li>
-<li><p>STEP 7 : Download new wireless stack :</p>
+<li>in Firmware Upgrade Service: (File Path: [FUS_Binary], Start Adress: [Install@])</li>
+<li>then select ā€œFirmware Upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
+</ul></li>
+<li><p>STEP 7: Download new wireless stack (after ā€œFW Deleteā€ if requested)</p>
<ul>
-<li><em>STM32_Programmer_CLI.exe -c port=usb1 -fwupgrade [Wireless_Coprocessor_Binary] [Install@] firstinstall=1</em></li>
-</ul>
-<p>Please check <strong>Wireless Coprocessor Binary Table</strong> for Install@ parameter depending of the binary.</p></li>
-<li><p>STEP 8 : Revert STEP 2 procedure to put back device in normal mode.</p></li>
+<li>in Firmware Upgrade Service: (File Path: [Wireless_Coprocessor_Binary], Start Adress: [Install@])</li>
+<li>then select ā€œFirmware Upgradeā€ (with ā€œVerify downloadā€ and ā€œStart stack after upgradeā€) Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
+</ul></li>
+<li><p>STEP 8: Revert STEP 2 procedure to put back device in normal mode.</p></li>
</ul>
<p><mark>How to flash the Wireless Coprocessor Binary via SWD/JTAG by ST-LINK (Command Line Interface)</mark></p>
<ul>
<li><p><em>Inside the below procedure, the references to binaries name and install address are provided in the section <strong>Main Changes</strong> of this file.</em></p></li>
<li><p>STEP 1: Use STM32CubeProgrammer</p>
<ul>
-<li><p>Version 2.4.0 or higher.</p></li>
+<li><p>Version 2.7.0 or higher.</p></li>
<li><p>It gives access to Firmware Upgrade Service (FUS) (<a href="http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00513965.pdf">AN5185</a> : ST firmware upgrade services for STM32WB Series.) through Bootloader.</p></li>
<li><p>It is currently available as Command Line Interface (CLI) mode.</p></li>
</ul></li>
@@ -255,47 +313,47 @@
<li>Connect P-NUCLEO-WB55.USBDongle</li>
</ul></li>
</ul></li>
-<li><p>STEP 3: Delete current wireless stack</p>
+<li><p>STEP 3: apply ā€œStart FUSā€</p>
<ul>
-<li><em>STM32_Programmer_CLI.exe -c port=swd -fwdelete</em></li>
+<li><em>STM32_Programmer_CLI.exe -c port=swd -startfus</em></li>
</ul></li>
-<li><p>STEP 4 : Read and upgrade FUS Version (if unknown FUS version)</p>
+<li><p>STEP 4: Read and upgrade FUS Version</p>
<ul>
-<li>it can been obtained with Transparent Mode application from STM32CubeMonitor-RF interface or using other flashing method via USB described in RN.
+<li><em>STM32_Programmer_CLI.exe -c port=swd mode=UR -r32 0x20010010 1</em>
<ul>
-<li><em>0x20030030 : 00050300</em> : FUSv0.5.3 =&gt; <strong>Must be updated using STEP 5.</strong></li>
-<li><em>0x20030030 : 01000100 or 01000200</em> : FUSv1.0.x =&gt; <strong>Must be updated using STEP 6.</strong></li>
-<li><em>0x20030030 : 01010200</em> : FUSv1.1.2 =&gt; <strong>Up to date, you can download the new wireless stack using STEP 7.</strong></li>
+<li><em><span class="citation" data-cites="0x20010010">@0x20010010</span>: 00050300</em>: FUSv0.5.3 =&gt; <strong>Must be updated using STEP 5.</strong></li>
+<li><em><span class="citation" data-cites="0x20010010">@0x20010010</span>: 010X0Y00</em>: FUSv1.<strong>x</strong>.y =&gt; <strong>Must be updated using STEP 6 (when x &lt; 2).</strong></li>
+<li><em><span class="citation" data-cites="0x20010010">@0x20010010</span>: 01020X00</em>: FUSv1.2.0 =&gt; <strong>Up to date, you can download the new wireless stack using STEP 7.</strong></li>
</ul></li>
</ul></li>
-<li><p>STEP 5 : Download FUS v1.0.2:</p>
+<li><p>STEP 5: Download latest FUS for only FUSv0.5.3 upgrade</p>
<ul>
-<li><em>STM32_Programmer_CLI.exe -c port=swd mode=UR -fwupgrade stm32wb5x_FUS_fw_1_0_2.bin [Install@] firstinstall=0</em></li>
+<li><em>STM32_Programmer_CLI.exe -c port=swd mode=UR -fwupgrade stm32wb5x_FUS_fw_for_fus_0_5_3.bin [Install@] firstinstall=0</em></li>
</ul>
<p>Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</p></li>
-<li><p>STEP 6 :Download latest FUS:</p>
+<li><p>STEP 6: Download latest FUS</p>
<ul>
<li><em>STM32_Programmer_CLI.exe -c port=swd mode=UR -fwupgrade [FUS_Binary] [Install@] firstinstall=0</em></li>
</ul>
<p>Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</p></li>
-<li><p>STEP 7 : Download new wireless stack :</p>
+<li><p>STEP 7: Download new wireless stack</p>
<ul>
-<li><em>STM32_Programmer_CLI.exe -c port=swd mode=UR -fwupgrade [Wireless_Coprocessor_Binary] [Install@] firstinstall=1</em></li>
+<li><em>STM32_Programmer_CLI.exe -c port=swd mode=UR -fwupgrade [Wireless_Coprocessor_Binary] [Install@] firstinstall=0</em></li>
</ul>
-<p>Please check <strong>Wireless Coprocessor Binary Table</strong> for Install@ parameter depending of the binary.</p></li>
-<li><p>STEP 8 : Revert to default OB configuration :</p>
+<p>Please check <strong>Wireless Coprocessor Binary Table</strong> for Install@ parameter depending of the binary. (<strong>optional</strong>: activate ā€œAnti-Rollbackā€ on downloaded binary: <em>STM32_Programmer_CLI.exe -c port=swd -antirollback</em>) If you need to perform FUS related manipulations, you always need to START the FUS in case the FUS is not running.</p></li>
+<li><p>STEP 8: Revert to default OB configuration</p>
<ul>
<li>*STM32_Programmer_CLI.exe -c port=swd mode=UR -ob nSWboot0=1 nboot1=1 nboot0=1</li>
</ul></li>
</ul>
-<p><mark>How to flash the Wireless Coprocessor Binary via USB (STM32CubeProgrammer GUI)</mark></p>
+<p><mark>How to flash the Wireless Coprocessor Binary via USB (Command Line Interface)</mark></p>
<ul>
<li><p><em>Inside the below procedure, the references to binaries name and install address are provided in the section <strong>Main Changes</strong> of this file.</em></p></li>
-<li><p>STEP 1: Use STM32CubeProgrammer GUI</p>
+<li><p>STEP 1: Use STM32CubeProgrammer</p>
<ul>
-<li><p>Version 2.4.0 or higher.</p></li>
+<li><p>Version 2.7 or higher.</p></li>
<li><p>It gives access to Firmware Upgrade Service (FUS) (<a href="http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00513965.pdf">AN5185</a> : ST firmware upgrade services for STM32WB Series.) through Bootloader.</p></li>
-<li><p>It is currently available as Graphical User Interface (GUI) mode (or Command Line Interface (CLI) mode).</p></li>
+<li><p>It is currently available as Command Line Interface (CLI) mode.</p></li>
</ul></li>
<li><p>STEP 2: Access to Bootloader USB Interface (system flash)</p>
<ul>
@@ -312,107 +370,312 @@
<li>Connect P-NUCLEO-WB55.USBDongle</li>
</ul></li>
</ul></li>
-<li>open STM32CubeProgrammer GUI and select ā€œUSBā€</li>
-<li>in USB configuration: (Port: USB1) then select ā€œConnectā€</li>
+<li><strong>Warning</strong>: required Option Byte configuration: [nSWboot0=1]</li>
</ul></li>
-<li><p>STEP 3 : Delete current wireless stack</p>
+<li><p>STEP 3: step bypassed via USB</p></li>
+<li><p>STEP 4: Read and upgrade FUS Version</p>
<ul>
-<li>in Firmware Upgrade Services: select ā€œDelete Firmwareā€</li>
-</ul></li>
-<li><p>STEP 4 : Read and upgrade FUS Version</p>
-<ul>
-<li>in Firmware Upgrade Services: select ā€œRead FUS stateā€
+<li><em>STM32_Programmer_CLI.exe -c port=usb1 -r32 0x20030030 1</em>
<ul>
-<li><em>0x20030030 : 00050300</em> : FUSv0.5.3 =&gt; <strong>Must be updated using STEP 5.</strong></li>
-<li><em>0x20030030 : 01000100 or 01000200</em> : FUSv1.0.x =&gt; <strong>Must be updated using STEP 6.</strong></li>
-<li><em>0x20030030 : 01010200</em> : FUSv1.1.2 =&gt; <strong>Up to date, you can download the new wireless stack using STEP 7.</strong></li>
+<li><em><span class="citation" data-cites="0x20030030">@0x20030030</span>: 00050300</em>: FUSv0.5.3 =&gt; <strong>Must be updated using STEP 5.</strong></li>
+<li><em><span class="citation" data-cites="0x20030030">@0x20030030</span>: 010X0Y00</em>: FUSv1.<strong>x</strong>.y =&gt; <strong>Must be updated using STEP 6 (when x &lt; 2).</strong></li>
+<li><em><span class="citation" data-cites="0x20030030">@0x20030030</span>: 01020X00</em>: FUSv1.2.0 =&gt; <strong>Up to date, you can download the new wireless stack using STEP 7.</strong></li>
</ul></li>
</ul></li>
-<li><p>STEP 5 : Download FUS v1.0.2 :</p>
+<li><p>STEP 5: Download latest FUS for only FUSv0.5.3 upgrade</p>
<ul>
-<li>in Firmware Upgrade Service: (File Path: [stm32wb5x_FUS_fw_1_0_2.bin], Start Adress: [Install@])</li>
-<li>then select ā€œFirmware Upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
-</ul></li>
-<li><p>STEP 6 :Download latest FUS :</p>
+<li><em>STM32_Programmer_CLI.exe -c port=usb1 -fwupgrade stm32wb5x_FUS_fw_for_fus_0_5_3.bin [Install@] firstinstall=0</em></li>
+</ul>
+<p>Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</p></li>
+<li><p>STEP 6: Download latest FUS</p>
<ul>
-<li>in Firmware Upgrade Service: (File Path: [FUS_Binary], Start Adress: [Install@])</li>
-<li>then select ā€œFirmware Upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
+<li><em>STM32_Programmer_CLI.exe -c port=usb1 -fwupgrade [FUS_Binary] [Install@] firstinstall=0</em> Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
</ul></li>
-<li><p>STEP 7 : Download new wireless stack :</p>
+<li><p>STEP 7: Download new wireless stack</p>
<ul>
-<li>in Firmware Upgrade Service: (File Path: [Wireless_Coprocessor_Binary], Start Adress: [Install@])</li>
-<li>then select ā€œFirmware Upgradeā€ with ā€œVerify downloadā€ and ā€œStart stack after upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
+<li><em>STM32_Programmer_CLI.exe -c port=usb1 -fwupgrade [Wireless_Coprocessor_Binary] [Install@] firstinstall=0</em> Please check <strong>Wireless Coprocessor Binary Table</strong> for Install@ parameter depending of the binary.</li>
</ul></li>
-<li><p>STEP 8 : Revert STEP 2 procedure to put back device in normal mode.</p></li>
+<li><p>STEP 8: Revert STEP 2 procedure to put back device in normal mode.</p></li>
</ul>
-<p><mark>How to flash the Wireless Coprocessor Binary via SWD/JTAG by ST-LINK (STM32CubeProgrammer GUI)</mark></p>
-<ul>
-<li><p><em>Inside the below procedure, the references to binaries name and install address are provided in the section <strong>Main Changes</strong> of this file.</em></p></li>
-<li><p>STEP 1: Use STM32CubeProgrammer GUI</p>
-<ul>
-<li><p>Version 2.4.0 or higher.</p></li>
-<li><p>It gives access to Firmware Upgrade Service (FUS) (<a href="http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00513965.pdf">AN5185</a> : ST firmware upgrade services for STM32WB Series.) through Bootloader.</p></li>
-<li><p>It is currently available as Graphical User Interface (GUI) mode (or Command Line Interface (CLI) mode).</p></li>
-</ul></li>
-<li><p>STEP 2: Access to SWD Interface (system flash)</p>
-<ul>
-<li>For P-NUCLEO-WB55.Nucleo :
+<p><mark>How to compute available flash size </mark></p>
<ul>
-<li>Power ON via ST-LINK and Jumper JP1(USB_STL)</li>
-</ul></li>
-<li>For P-NUCLEO-WB55.USBDongle :
+<li><p>The default linker file is provided in [\Drivers\CMSIS\Device\ST32WBxx\Source\Templates].</p>
+<p>The maximum flash memory that can be used by the application is up to the Secure Flash Start Address (SFSA) that can be read from the option byte.</p>
+<p>The <strong>ICFEDIT_region_ROM_end</strong> in the linker can be modified with a value up to : (0x08000000 + (SFSA &lt;&lt; 12)) - 1.</p></li>
+<li><p><strong>Example</strong>: When the SFSA option byte is set to 0xA0, the maximum value to be used for __ICFEDIT_region_ROM_end is 0x0809FFFF ā€“ which is 640KB of flash</p></li>
+<li><p><strong>Note</strong>: The SFSA option byte can only be set by the CPU2. The user cannot modify that value.</p></li>
+</ul>
+</div>
+<div class="col-sm-12 col-lg-8">
+<h1 id="update-history">Update History</h1>
+<div class="collapse">
+<input type="checkbox" id="collapse-section15" checked aria-hidden="true"> <label for="collapse-section15" aria-hidden="false">V1.11.1 / 23-March-2021</label>
+<div>
+<h2 id="main-changes">Main Changes</h2>
<ul>
-<li>remain switch SW2 to Boot1</li>
-<li>Connect P-NUCLEO-WB55.USBDongle</li>
-</ul></li>
-<li>open STM32CubeProgrammer GUI and select ā€œST-LINKā€</li>
-<li>in ST-LINK configuration: (Port: SWD) then select ā€œConnectā€</li>
-</ul></li>
-<li><p>STEP 3: Delete current wireless stack</p>
+<li>BLE:
<ul>
-<li>in Firmware Upgrade Services: select ā€œDelete Firmwareā€</li>
+<li>ID 102000 : [STM32WB55/STM32WB15]: Default CFG_BLE_MAX_CONN_EVENT_LENGTH value updated for all BLE examples</li>
+<li>ID 99680 : 2nd link secure fail if master database is clear during 1st link connection</li>
+<li>ID 101346 : ACI_GAP_BOND_LOST_Event timeout does not work if ALLOW rebond not sent</li>
+<li>ID 101921 : PTS issue ticket done CASE0070853: destination channel ID value above 1000 should be allowed and test passed</li>
+<li>ID 94289 ,ID 102395 ,ID 100425 : BLE_Ota application improvments (SBSFU ready, Flash driver use, SEM7 flash activity control)</li>
</ul></li>
-<li><p>STEP 4 : Read and upgrade FUS Version (if unknown FUS version)</p>
+<li>Thread:
<ul>
-<li>it can been obtained with Transparent Mode application from STM32CubeMonitor-RF interface or using other flashing method via USB described in RN.
-<ul>
-<li><em>0x20030030 : 00050300</em> : FUSv0.5.3 =&gt; <strong>Must be updated using STEP 5.</strong></li>
-<li><em>0x20030030 : 01000100 or 01000200</em> : FUSv1.0.x =&gt; <strong>Must be updated using STEP 6.</strong></li>
-<li><em>0x20030030 : 01010200</em> : FUSv1.1.2 =&gt; <strong>Up to date, you can download the new wireless stack using STEP 7.</strong></li>
-</ul></li>
+<li>ID 102357 : High power consumption after exactly 3 minutes in Thread_SED_Coap_Multicast example</li>
</ul></li>
-<li><p>STEP 5 : Download FUS v1.0.2 :</p>
+<li>Zigbee:
<ul>
-<li>in Firmware Upgrade Services: (File Path: [stm32wb5x_FUS_fw_1_0_2.bin], Start Adress: [Install@])</li>
-<li>then select ā€œFirmware Upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
+<li>ID 100612 : Zigbee stack not going back in low power mode after SF timer wrap-around</li>
</ul></li>
-<li><p>STEP 6 :Download latest FUS :</p>
+<li>MAC 802.15.4:
<ul>
-<li>in Firmware Upgrade Service: (File Path: [FUS_Binary], Start Adress: [Install@])</li>
-<li>then select ā€œFirmware Upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
+<li>ID 95824 : stm32wb5x_Mac_802_15_4_fw.bin will change RCC_CFGR value even if user wants to use PLL for CM4 64MHz</li>
</ul></li>
-<li><p>STEP 7 : Download new wireless stack :</p>
+<li>FUS binaries upgrade to v1.2.0:
<ul>
-<li>in Firmware Upgrade Service: (File Path: [Wireless_Coprocessor_Binary], Start Adress: [Install@])</li>
-<li>then select ā€œFirmware Upgradeā€ with ā€œVerify downloadā€ and ā€œStart stack after upgradeā€ Please check <strong>Firmware Upgrade Services Binary Table</strong> for Install@ parameter depending of the binary.</li>
+<li>New stm32wb5x_FUS_fw_for_fus_0_5_3.bin: FUS V1.2.0 image to be installed exclusively on STM32WB5x containing FUS V0.5.3</li>
+<li>updated stm32wb5x_FUS_fw.bin: FUS V1.2.0 image to be installed on STM32WB5x containing all FUS versions higher than V0.5.3</li>
+<li>stm32wb5x_FUS_fw_1_0_2.bin: Deprecated (empty file).</li>
</ul></li>
-<li><p>STEP 8 : Revert to default configuration: in Option Bytes menu for User Configuration set: nSWboot0=1 (checked) nboot1=1 nboot0=1</p></li>
-</ul>
-<p><mark>How to compute available flash size </mark></p>
-<ul>
-<li><p>The default linker file is provided in [\Drivers\CMSIS\Device\ST32WBxx\Source\Templates].</p>
-<p>The maximum flash memory that can be used by the application is up to the Secure Flash Start Address (SFSA) that can be read from the option byte.</p>
-<p>The <strong>ICFEDIT_region_ROM_end</strong> in the linker can be modified with a value up to : (0x08000000 + (SFSA &lt;&lt; 12)) - 1.</p></li>
-<li><p><strong>Example</strong>: When the SFSA option byte is set to 0xA0, the maximum value to be used for __ICFEDIT_region_ROM_end is 0x0809FFFF ā€“ which is 640KB of flash</p></li>
-<li><p><strong>Note</strong>: The SFSA option byte can only be set by the CPU2. The user cannot modify that value.</p></li>
</ul>
+<p><strong>Firmware Upgrade Services Binary Table</strong>: Provides Install address for the targeted binary to be used in flash procedure ā€œSTEP 5/6ā€ via USB or via SWD/JTAG.</p>
+<table>
+<colgroup>
+<col style="width: 37%" />
+<col style="width: 13%" />
+<col style="width: 13%" />
+<col style="width: 13%" />
+<col style="width: 13%" />
+<col style="width: 6%" />
+<col style="width: 3%" />
+</colgroup>
+<thead>
+<tr class="header">
+<th>Wireless Coprocessor Binary</th>
+<th>STM32WB5xxG(1M)</th>
+<th>STM32WB5xxY(640k)</th>
+<th>STM32WB5xxE(512K)</th>
+<th>STM32WB5xxC(256K)</th>
+<th>Version</th>
+<th>Date</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td>stm32wb5x_FUS_fw_for_fus_0_5_3.bin</td>
+<td>0x080<strong>EC</strong>000</td>
+<td>0x080<strong>9A</strong>000</td>
+<td>0x080<strong>7A</strong>000</td>
+<td>0x080<strong>3A</strong>000</td>
+<td><strong>v1.2.0</strong></td>
+<td>04/06/2021</td>
+</tr>
+<tr class="even">
+<td>stm32wb5x_FUS_fw.bin</td>
+<td>0x080<strong>EC</strong>000</td>
+<td>0x080<strong>9A</strong>000</td>
+<td>0x080<strong>7A</strong>000</td>
+<td>0x080<strong>3A</strong>000</td>
+<td><strong>v1.2.0</strong></td>
+<td>04/06/2021</td>
+</tr>
+</tbody>
+</table>
+<p><strong>Wireless Coprocessor Binary Table</strong>: Provides Install address for the targeted binary to be used in flash procedure ā€œSTEP 7ā€ via USB or via SWD/JTAG.</p>
+<table>
+<colgroup>
+<col style="width: 34%" />
+<col style="width: 14%" />
+<col style="width: 14%" />
+<col style="width: 14%" />
+<col style="width: 14%" />
+<col style="width: 3%" />
+<col style="width: 3%" />
+</colgroup>
+<thead>
+<tr class="header">
+<th>Wireless Coprocessor Binary</th>
+<th>STM32WB5xxG(1M)</th>
+<th>STM32WB5xxY(640k)</th>
+<th>STM32WB5xxE(512K)</th>
+<th>STM32WB5xxC(256K)</th>
+<th>Version</th>
+<th>Date</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td>stm32wb5x_BLE_HCILayer_fw.bin</td>
+<td>0x080E0000</td>
+<td>0x0808C000</td>
+<td>0x0806C000</td>
+<td>0x802C000</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/22/2021</td>
+</tr>
+<tr class="even">
+<td>stm32wb5x_BLE_HCI_AdvScan_fw.bin</td>
+<td>0x080EA000</td>
+<td>0x08096000</td>
+<td>0x08076000</td>
+<td>0x8036000</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/22/2021</td>
+</tr>
+<tr class="odd">
+<td>stm32wb5x_BLE_LLD_fw.bin</td>
+<td>0x080EC000</td>
+<td>0x08098000</td>
+<td>0x08078000</td>
+<td>0x08038000</td>
+<td><strong>v1.11.0</strong></td>
+<td>02/05/2021</td>
+</tr>
+<tr class="even">
+<td>stm32wb5x_BLE_Mac_802_15_4_fw.bin</td>
+<td>0x080B5000</td>
+<td>0x08061000</td>
+<td>0x08041000</td>
+<td>0x08001000</td>
+<td>v1.11.0</td>
+<td>02/05/2021</td>
+</tr>
+<tr class="odd">
+<td>stm32wb5x_BLE_Stack_full_fw.bin</td>
+<td>0x080CA000</td>
+<td>0x08076000</td>
+<td>0x08056000</td>
+<td>0x8016000</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/22/2021</td>
+</tr>
+<tr class="even">
+<td>stm32wb5x_BLE_Stack_light_fw.bin</td>
+<td>0x080D6000</td>
+<td>0x08082000</td>
+<td>0x08062000</td>
+<td>0x8022000</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/22/2021</td>
+</tr>
+<tr class="odd">
+<td>stm32wb5x_BLE_Thread_dynamic_fw.bin</td>
+<td>0x08070000</td>
+<td>0x0801C000</td>
+<td>0x00</td>
+<td>0x00</td>
+<td>v1.11.0</td>
+<td>02/05/2021</td>
+</tr>
+<tr class="even">
+<td>stm32wb5x_BLE_Thread_static_fw.bin</td>
+<td>0x08072000</td>
+<td>0x0801E000</td>
+<td>0x00</td>
+<td>0x00</td>
+<td>v1.11.0</td>
+<td>02/05/2021</td>
+</tr>
+<tr class="odd">
+<td>stm32wb5x_BLE_Zigbee_FFD_dynamic_fw.bin</td>
+<td>0x08077000</td>
+<td>0x08023000</td>
+<td>0x08003000</td>
+<td>0x00</td>
+<td>v1.11.0</td>
+<td>02/05/2021</td>
+</tr>
+<tr class="even">
+<td>stm32wb5x_BLE_Zigbee_FFD_static_fw.bin</td>
+<td>0x08079000</td>
+<td>0x08025000</td>
+<td>0x08005000</td>
+<td>0x00</td>
+<td>v1.11.0</td>
+<td>02/05/2021</td>
+</tr>
+<tr class="odd">
+<td>stm32wb5x_BLE_Zigbee_RFD_dynamic_fw.bin</td>
+<td>0x08086000</td>
+<td>0x08032000</td>
+<td>0x08012000</td>
+<td>0x00</td>
+<td>v1.11.0</td>
+<td>02/05/2021</td>
+</tr>
+<tr class="even">
+<td>stm32wb5x_BLE_Zigbee_RFD_static_fw.bin</td>
+<td>0x08087000</td>
+<td>0x08033000</td>
+<td>0x08013000</td>
+<td>0x00</td>
+<td>v1.11.0</td>
+<td>02/05/2021</td>
+</tr>
+<tr class="odd">
+<td>stm32wb5x_Mac_802_15_4_fw.bin</td>
+<td>0x080E3000</td>
+<td>0x0808F000</td>
+<td>0x0806F000</td>
+<td>0x0802F000</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/23/2021</td>
+</tr>
+<tr class="even">
+<td>stm32wb5x_Phy_802_15_4_fw.bin</td>
+<td>0x080DE000</td>
+<td>0x0808A000</td>
+<td>0x0806A000</td>
+<td>0x0802A000</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/23/2021</td>
+</tr>
+<tr class="odd">
+<td>stm32wb5x_Thread_FTD_fw.bin</td>
+<td>0x08098000</td>
+<td>0x08044000</td>
+<td>0x08024000</td>
+<td>0x00</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/23/2021</td>
+</tr>
+<tr class="even">
+<td>stm32wb5x_Thread_MTD_fw.bin</td>
+<td>0x080AB000</td>
+<td>0x08057000</td>
+<td>0x08037000</td>
+<td>0x00</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/23/2021</td>
+</tr>
+<tr class="odd">
+<td>stm32wb5x_Zigbee_FFD_fw.bin</td>
+<td>0x080A7000</td>
+<td>0x08053000</td>
+<td>0x08033000</td>
+<td>0x00</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/23/2021</td>
+</tr>
+<tr class="even">
+<td>stm32wb5x_Zigbee_RFD_fw.bin</td>
+<td>0x080B5000</td>
+<td>0x08061000</td>
+<td>0x08041000</td>
+<td>0x08001000</td>
+<td><strong>v1.11.1</strong></td>
+<td>03/23/2021</td>
+</tr>
+</tbody>
+</table>
+</div>
</div>
-<div class="col-sm-12 col-lg-8">
-<h1 id="update-history">Update History</h1>
<div class="collapse">
-<input type="checkbox" id="collapse-section14" checked aria-hidden="true"> <label for="collapse-section14" aria-hidden="false">V1.11.0 / 5-February-2021</label>
+<input type="checkbox" id="collapse-section14" aria-hidden="true"> <label for="collapse-section14" aria-hidden="false">V1.11.0 / 5-February-2021</label>
<div>
-<h2 id="main-changes">Main Changes</h2>
+<h2 id="main-changes-1">Main Changes</h2>
<p><strong>Associated changes in Wireless Coprocessor Binary</strong>:</p>
<ul>
<li>Support of new binary:
@@ -693,7 +956,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section13" aria-hidden="true"> <label for="collapse-section13" aria-hidden="false">V1.10.0 / 26-October-2020</label>
<div>
-<h2 id="main-changes-1">Main Changes</h2>
+<h2 id="main-changes-2">Main Changes</h2>
<p><strong>Associated changes in Wireless Coprocessor Binary</strong>:</p>
<ul>
<li>BLE:
@@ -936,7 +1199,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section12" aria-hidden="true"> <label for="collapse-section12" aria-hidden="false">V1.9.0 / 21-September-2020</label>
<div>
-<h2 id="main-changes-2">Main Changes</h2>
+<h2 id="main-changes-3">Main Changes</h2>
<p><strong>Associated changes in Wireless Coprocessor Binary</strong>:</p>
<ul>
<li>Introducing following new binaries:
@@ -1225,7 +1488,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section9" aria-hidden="true"> <label for="collapse-section9" aria-hidden="false">V1.8.0 / 19-June-2020</label>
<div>
-<h2 id="main-changes-3">Main Changes</h2>
+<h2 id="main-changes-4">Main Changes</h2>
<p><strong>Associated changes in Wireless Coprocessor Binary</strong>:</p>
<ul>
<li>BLE:
@@ -1421,7 +1684,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section8" aria-hidden="true"> <label for="collapse-section8" aria-hidden="false">V1.6.0 / 27-March-2020</label>
<div>
-<h2 id="main-changes-4">Main Changes</h2>
+<h2 id="main-changes-5">Main Changes</h2>
<p><strong>Associated changes in Wireless Coprocessor Binary</strong>:</p>
<ul>
<li>MAC:
@@ -1617,7 +1880,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section7" aria-hidden="true"> <label for="collapse-section7" aria-hidden="false">V1.5.0 / 14-February-2020</label>
<div>
-<h2 id="main-changes-5">Main Changes</h2>
+<h2 id="main-changes-6">Main Changes</h2>
<p><strong>Associated changes in Wireless Coprocessor Binary</strong>:</p>
<ul>
<li>FUS:
@@ -1809,7 +2072,7 @@ then #define CFG_BLE_NUM_LINK in app_conf.h shall be updated accordingly.</li>
<div class="collapse">
<input type="checkbox" id="collapse-section6" aria-hidden="true"> <label for="collapse-section6" aria-hidden="false">V1.4.0 / 22-November-2019</label>
<div>
-<h2 id="main-changes-6">Main Changes</h2>
+<h2 id="main-changes-7">Main Changes</h2>
<p><strong>Associated changes in Wireless Coprocessor Binary</strong>:</p>
<ul>
<li>ZIGBEE :
@@ -1954,7 +2217,7 @@ then #define CFG_BLE_NUM_LINK in app_conf.h shall be updated accordingly.</li>
<div class="collapse">
<input type="checkbox" id="collapse-section5" aria-hidden="true"> <label for="collapse-section5" aria-hidden="true">V1.3.0 / 09-September-2019</label>
<div>
-<h2 id="main-changes-7">Main Changes</h2>
+<h2 id="main-changes-8">Main Changes</h2>
<p><strong>Associated changes in Wireless Coprocessor Binary</strong>:</p>
<ul>
<li>ZIGBEE :
@@ -2094,7 +2357,7 @@ then #define CFG_BLE_NUM_LINK in app_conf.h shall be updated accordingly.</li>
<div class="collapse">
<input type="checkbox" id="collapse-section4" aria-hidden="true"> <label for="collapse-section4" aria-hidden="true">V1.2.0 / 3rd-July-2019</label>
<div>
-<h2 id="main-changes-8">Main Changes</h2>
+<h2 id="main-changes-9">Main Changes</h2>
<p><strong>Associated changes in Wireless Coprocessor Binary</strong>:</p>
<ul>
<li>BLE Link layer : fix issues with pairing</li>
@@ -2207,7 +2470,7 @@ then #define CFG_BLE_NUM_LINK in app_conf.h shall be updated accordingly.</li>
<div class="collapse">
<input type="checkbox" id="collapse-section3" aria-hidden="true"> <label for="collapse-section3" aria-hidden="true">V1.1.1 / 10-May-2019</label>
<div>
-<h2 id="main-changes-9">Main Changes</h2>
+<h2 id="main-changes-10">Main Changes</h2>
<p><strong>Associated changes in Firmware Upgrade Services (FUS)</strong>:</p>
<ul>
<li>Add support for STM32WB5xE(512K) and STM32WB5xC(256K) devices.</li>
@@ -2313,7 +2576,7 @@ then #define CFG_BLE_NUM_LINK in app_conf.h shall be updated accordingly.</li>
<div class="collapse">
<input type="checkbox" id="collapse-section2" aria-hidden="true"> <label for="collapse-section2" aria-hidden="true">V1.1.0 / 05-April-2019</label>
<div>
-<h2 id="main-changes-10">Main Changes</h2>
+<h2 id="main-changes-11">Main Changes</h2>
<p><strong>Introduction of the Firmware Upgrade Services (FUS)</strong>:</p>
<ul>
<li>This feature is embedded inside stm32wb5x_FUS_fw.bin.</li>
@@ -2422,7 +2685,7 @@ then #define CFG_BLE_NUM_LINK in app_conf.h shall be updated accordingly.</li>
<div class="collapse">
<input type="checkbox" id="collapse-section1" aria-hidden="true"> <label for="collapse-section1" aria-hidden="true">V1.0.0 / 06-February-2019</label>
<div>
-<h2 id="main-changes-11">Main Changes</h2>
+<h2 id="main-changes-12">Main Changes</h2>
<h3 id="first-release">First release</h3>
<p>First official release.</p>
<p><strong>Binary Install Address and version</strong> : Provides Install address for the targeted binary to be used in ā€œSTEP 6ā€ of flash procedure.</p>
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_HCILayer_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_HCILayer_fw.bin
index d48db497f..6c26f237e 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_HCILayer_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_HCILayer_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_HCI_AdvScan_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_HCI_AdvScan_fw.bin
index 8211b0b1a..1e6cc47ba 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_HCI_AdvScan_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_HCI_AdvScan_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_Stack_full_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_Stack_full_fw.bin
index a4ec39df1..509bf8cd7 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_Stack_full_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_Stack_full_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_Stack_light_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_Stack_light_fw.bin
index 06c59a278..c9525bc78 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_Stack_light_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_Stack_light_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw.bin
index f79878fb6..5c5cb465e 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw_1_0_2.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw_1_0_2.bin
index f75d7aff7..e69de29bb 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw_1_0_2.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw_1_0_2.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw_for_fus_0_5_3.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw_for_fus_0_5_3.bin
new file mode 100644
index 000000000..86a14ad21
--- /dev/null
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw_for_fus_0_5_3.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Mac_802_15_4_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Mac_802_15_4_fw.bin
index 5fb978ee2..0f1a7e6bf 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Mac_802_15_4_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Mac_802_15_4_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Phy_802_15_4_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Phy_802_15_4_fw.bin
index 88482e7fb..df6fc41d5 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Phy_802_15_4_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Phy_802_15_4_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Thread_FTD_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Thread_FTD_fw.bin
index d3e9a00bd..9fbaa0402 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Thread_FTD_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Thread_FTD_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Thread_MTD_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Thread_MTD_fw.bin
index 5c5d798f4..d68415a01 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Thread_MTD_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Thread_MTD_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Zigbee_FFD_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Zigbee_FFD_fw.bin
index 3f700d13c..ca28980f0 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Zigbee_FFD_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Zigbee_FFD_fw.bin
Binary files differ
diff --git a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Zigbee_RFD_fw.bin b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Zigbee_RFD_fw.bin
index 15a43fa42..4c2dd0dd5 100644
--- a/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Zigbee_RFD_fw.bin
+++ b/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_Zigbee_RFD_fw.bin
Binary files differ
diff --git a/Release_Notes.html b/Release_Notes.html
index b06b141fc..d5a39f323 100644
--- a/Release_Notes.html
+++ b/Release_Notes.html
@@ -87,9 +87,604 @@
<div class="col-sm-12 col-lg-8">
<h1 id="update-history">Update History</h1>
<div class="collapse">
-<input type="checkbox" id="collapse-section13" checked aria-hidden="true"> <label for="collapse-section13" aria-hidden="true">V1.11.0 / 12-February-2021</label>
+<input type="checkbox" id="collapse-section14" checked aria-hidden="true"> <label for="collapse-section14" aria-hidden="true">V1.11.1 / 02-April-2021</label>
<div>
<h2 id="main-changes">Main Changes</h2>
+<h3 id="patch-release-for-fus-security-update-and-wireless-protocols-corrections">Patch Release for FUS security update and Wireless protocols corrections</h3>
+<ul>
+<li>FUS:
+<ul>
+<li>Add functional security enhancements</li>
+</ul></li>
+<li>BLE:
+<ul>
+<li>STM32WB15/WB10 VCO settings update to enhance RX path</li>
+<li>Data throughput enhancement on all projects</li>
+<li>Ability to reconnect in secure mode on a 2nd link if master database is clear during 1st link connection</li>
+<li>Resolution of ACI_GAP_BOND_LOST_Event timeout in case Allow_rebond is not sent</li>
+<li>PTS issue ticket done CASE0070853: destination channel ID value above 1000 should be allowed and test passed</li>
+<li>BLE_Ota application improved toĀ be SBSFU ready and support Flash driver use / SEM7 flash activity control</li>
+</ul></li>
+<li>Thread:
+<ul>
+<li>Power consumption enhancement when running above 3mn inĀ Thread_SED_Coap_Multicast example Ā Ā </li>
+</ul></li>
+<li>Zigbee:
+<ul>
+<li>Allow Zigbee stack to go in low power mode after SF timer wrap-around</li>
+<li>Add support of 2 new Zigbee FreeRTOS example applications (IAR only):
+<ul>
+<li>/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS</li>
+<li>/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS Ā </li>
+</ul></li>
+</ul></li>
+<li>MAC 802.15.4:
+<ul>
+<li>Allow the user to set the PLL <span class="citation" data-cites="64MHz">@64MHz</span> for CM4</li>
+</ul></li>
+</ul>
+<p><br />
+</p>
+<h2 id="contents">Contents</h2>
+<h3 id="projects">Projects</h3>
+<p>The STM32CubeWB Firmware package comes with a rich set of examples running on STMicroelectronics boards, organized by board and provided with preconfigured projects for the main supported toolchains.</p>
+<p>The exhaustive list of projects and their short description is provided in this table (<a href="Projects/STM32CubeProjectsList.html">STM32CubeProjectsList.html</a>).</p>
+<ul>
+<li><strong>P-NUCLEO-WB55.Nucleo</strong> (<a href="Projects/P-NUCLEO-WB55.Nucleo/Release_Notes.html">release notes</a>)</li>
+<li><strong>P-NUCLEO-WB55.USBDongle</strong> (<a href="Projects/P-NUCLEO-WB55.USBDongle/Release_Notes.html">release notes</a>)</li>
+<li>STM32WB5MM-DK (<a href="Projects/STM32WB5MM-DK/Release_Notes.html">release notes</a>)</li>
+<li><strong>NUCLEO-WB15CC</strong> (<a href="Projects/NUCLEO-WB15CC/Release_Notes.html">release notes</a>)</li>
+</ul>
+<p><br />
+</p>
+<h3 id="components">Components</h3>
+<table>
+<caption>STM32WBx Firmware Upgrade Services Binary</caption>
+<thead>
+<tr class="header">
+<th style="text-align: left;">Name</th>
+<th style="text-align: left;">Version</th>
+<th>License</th>
+<th>Release note</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td style="text-align: left;">stm32wb5x_FUS_fw.bin</td>
+<td style="text-align: left;"><strong>V1.2.0</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb5x_FUS_fw_for_fus_0_5_3.bin</td>
+<td style="text-align: left;"><strong>V1.2.0</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb5x_FUS_fw_1_0_2.bin</td>
+<td style="text-align: left;">Obsolete</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb3x_FUS_fw.bin</td>
+<td style="text-align: left;"><strong>V1.2.0</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb3x_FUS_fw_1_0_2.bin</td>
+<td style="text-align: left;">Obsolete</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html">release note</a></td>
+</tr>
+</tbody>
+</table>
+<table>
+<caption>STM32WBxx Coprocessor Wireless Binaries</caption>
+<thead>
+<tr class="header">
+<th style="text-align: left;">Name</th>
+<th style="text-align: left;">Version</th>
+<th>License</th>
+<th>Release note</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td style="text-align: left;">stm32wb5x_BLE_HCILayer_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb5x_BLE_HCI_AdvScan_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb5x_BLE_LLD_fw.bin</td>
+<td style="text-align: left;">V1.11.0</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb5x_BLE_Mac_802_15_4_fw.bin</td>
+<td style="text-align: left;">V1.11.0</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb5x_BLE_Stack_full_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb5x_BLE_Stack_light_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb5x_BLE_Thread_dynamic_fw.bin</td>
+<td style="text-align: left;">V1.11.0</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb5x_BLE_Thread_static_fw.bin</td>
+<td style="text-align: left;">V1.11.0</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb5x_BLE_Zigbee_FFD_dynamic_fw.bin</td>
+<td style="text-align: left;">V1.11.0</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb5x_BLE_Zigbee_FFD_static_fw.bin</td>
+<td style="text-align: left;">V1.11.0</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb5x_BLE_Zigbee_RFD_dynamic_fw.bin</td>
+<td style="text-align: left;">V1.11.0</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb5x_BLE_Zigbee_RFD_static_fw.bin</td>
+<td style="text-align: left;">V1.11.0</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb5x_Mac_802_15_4_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb5x_Phy_802_15_4_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb5x_Thread_FTD_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb5x_Thread_MTD_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb5x_Zigbee_FFD_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb5x_Zigbee_RFD_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb3x_BLE_HCILayer_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb3x_BLE_HCI_AdvScan_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb3x_BLE_LLD_fw.bin</td>
+<td style="text-align: left;">V1.11.0</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb3x_BLE_Mac_802_15_4_fw.bin</td>
+<td style="text-align: left;">V1.11.0</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb3x_BLE_Stack_full_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb3x_BLE_Stack_light_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb3x_Mac_802_15_4_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb3x_Phy_802_15_4_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb3x_Thread_FTD_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb3x_Thread_MTD_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb3x_Zigbee_FFD_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb3x_Zigbee_RFD_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb1x_BLE_HCILayer_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb1x_BLE_Stack_full_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb1x_BLE_Stack_light_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb1x_BLE_HCILayer_fw.bin</td>
+<td style="text-align: left;">V1.11.0</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb1x_BLE_HCI_AdvScan_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb1x_BLE_LLD_fw.bin</td>
+<td style="text-align: left;"><strong>V1.11.1</strong></td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">stm32wb1x_BLE_Stack_full_fw.bin</td>
+<td style="text-align: left;">V1.11.0</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/Release_Notes.html">release note</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">stm32wb1x_BLE_Stack_light_fw.bin</td>
+<td style="text-align: left;">V1.11.0</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044 (binary release)</a></td>
+<td><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/Release_Notes.html">release note</a></td>
+</tr>
+</tbody>
+</table>
+<table>
+<caption>Drivers</caption>
+<thead>
+<tr class="header">
+<th style="text-align: left;">Name</th>
+<th>Version</th>
+<th>License</th>
+<th>Release note</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td style="text-align: left;">Cortex-M CMSIS</td>
+<td>V5.6.0</td>
+<td><a href="Drivers/CMSIS/LICENSE.txt">Apache License 2.0</a></td>
+<td><a href="Drivers/CMSIS/README.md">release notes</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">STM32WB CMSIS</td>
+<td>V1.8.0</td>
+<td><a href="Drivers/CMSIS/LICENSE.txt">Apache License 2.0</a></td>
+<td><a href="Drivers/CMSIS/Device/ST/STM32WBxx/Release_Notes.html">release notes</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">STM32WBxx_HAL_Driver</td>
+<td>V1.8.0</td>
+<td><a href="https://opensource.org/licenses/BSD-3-Clause">BSD 3-Clause</a></td>
+<td><a href="Drivers/STM32WBxx_HAL_Driver/Release_Notes.html">release notes</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">P-NUCLEO-WB55.USBDongle</td>
+<td>V1.0.2</td>
+<td><a href="https://opensource.org/licenses/BSD-3-Clause">BSD 3-Clause</a></td>
+<td><a href="Drivers/BSP/P-NUCLEO-WB55.USBDongle/Release_Notes.html">release notes</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">P-NUCLEO-WB55.Nucleo</td>
+<td>V1.0.2</td>
+<td><a href="https://opensource.org/licenses/BSD-3-Clause">BSD 3-Clause</a></td>
+<td><a href="Drivers/BSP/P-NUCLEO-WB55.Nucleo/Release_Notes.html">release notes</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">STM32WB5MM-DK</td>
+<td>V1.0.0</td>
+<td><a href="https://opensource.org/licenses/BSD-3-Clause">BSD 3-Clause</a></td>
+<td><a href="Drivers/BSP/STM32WB5MM-DK/Release_Notes.html">release notes</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">NUCLEO-WB15CC</td>
+<td>V1.0.0</td>
+<td><a href="https://opensource.org/licenses/BSD-3-Clause">BSD 3-Clause</a></td>
+<td><a href="Drivers/BSP/NUCLEO-WB15CC/Release_Notes.html">release notes</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">BSP Common</td>
+<td>V7.0.0</td>
+<td><a href="https://opensource.org/licenses/BSD-3-Clause">BSD 3-Clause</a></td>
+<td><a href="Drivers/BSP/Components/Common/Release_Notes.html">release notes</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">BSP stts22h</td>
+<td>V1.1.1</td>
+<td><a href="https://opensource.org/licenses/BSD-3-Clause">BSD 3-Clause</a></td>
+<td><a href="Drivers/BSP/Components/hts221/Release_Notes.html">release notes</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">BSP ism330dhcx</td>
+<td>V1.0.2</td>
+<td><a href="https://opensource.org/licenses/BSD-3-Clause">BSD 3-Clause</a></td>
+<td><a href="Drivers/BSP/Components/ism330dlc/Release_Notes.html">release notes</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">BSP ssd1315</td>
+<td>V2.0.0</td>
+<td><a href="https://opensource.org/licenses/BSD-3-Clause">BSD 3-Clause</a></td>
+<td><a href="Drivers/BSP/Components/ssd1315/Release_Notes.html">release notes</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">BSP s25fl128s</td>
+<td>V1.0.0</td>
+<td><a href="https://opensource.org/licenses/BSD-3-Clause">BSD 3-Clause</a></td>
+<td><a href="Drivers/BSP/Components/s25fl128s/Release_Notes.html">release notes</a></td>
+</tr>
+</tbody>
+</table>
+<table>
+<caption>Middleware</caption>
+<thead>
+<tr class="header">
+<th style="text-align: left;">Name</th>
+<th style="text-align: left;">Version</th>
+<th>License</th>
+<th>Release note</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td style="text-align: left;">STM32 USB Device Library</td>
+<td style="text-align: left;">V2.7.1</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044</a></td>
+<td><a href="Middlewares/ST/STM32_USB_Device_Library/Release_Notes.html">release notes</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">STM32 WPAN</td>
+<td style="text-align: left;">V1.11.0</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044</a></td>
+<td><a href="Middlewares/ST/STM32_WPAN/Release_Notes.html">release notes</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">FatFS</td>
+<td style="text-align: left;">R0.12c</td>
+<td><a href="Middlewares/Third_Party/FatFs/doc/en/appnote.html#license">FatFs License</a></td>
+<td><a href="Middlewares/Third_Party/FatFs/doc/updates.txt">release notes</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;"></td>
+<td style="text-align: left;">ST modified 20191011</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044</a></td>
+<td><a href="Middlewares/Third_Party/FatFs/src/st_readme.txt">release notes ST</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">FreeRTOS</td>
+<td style="text-align: left;">V10.2.1</td>
+<td><a href="Middlewares/Third_Party/FreeRTOS/License/license.txt">MIT</a></td>
+<td><a href="Middlewares/Third_Party/FreeRTOS/Source/readme.txt">release notes</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;"></td>
+<td style="text-align: left;">ST modified 20200831</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044</a></td>
+<td><a href="Middlewares/Third_Party/FreeRTOS/Source/st_readme.txt">release notes ST</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">STM32_TouchSensing_Library</td>
+<td style="text-align: left;">V2.2.5</td>
+<td><a href="http://www.st.com/SLA0044">SLA0044</a></td>
+<td><a href="Middlewares/ST/STM32_TouchSensing_Library/Release_Notes.html">release notes</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">PDM</td>
+<td style="text-align: left;">v3.3.0</td>
+<td><a href="http://www.st.com/SLA0047">SLA0047</a></td>
+<td><a href="Middlewares/ST/STM32_Audio/Addons/PDM/Release_Notes.html">release notes</a></td>
+</tr>
+</tbody>
+</table>
+<table>
+<caption>Utilities</caption>
+<thead>
+<tr class="header">
+<th style="text-align: left;">Name</th>
+<th style="text-align: left;">Version</th>
+<th>License</th>
+<th>Release note</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td style="text-align: left;">CPU</td>
+<td style="text-align: left;">V1.1.0</td>
+<td><a href="https://opensource.org/licenses/BSD-3-Clause">BSD 3-Clause</a></td>
+<td><a href="Utilities/CPU/Release_Notes.html">release notes</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">Fonts</td>
+<td style="text-align: left;">V2.0.2</td>
+<td><a href="https://opensource.org/licenses/BSD-3-Clause">BSD 3-Clause</a></td>
+<td><a href="Utilities/Fonts/Release_Notes.html">release notes</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">Log</td>
+<td style="text-align: left;">V1.0.0</td>
+<td><a href="https://opensource.org/licenses/BSD-3-Clause">BSD 3-Clause</a></td>
+<td><a href="Utilities/Log/Release_Notes.html">release notes</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">conf</td>
+<td style="text-align: left;">V1.4.1</td>
+<td><a href="https://opensource.org/licenses/BSD-3-Clause">BSD 3-Clause</a></td>
+<td><a href="Utilities/conf/Release_Notes.html">release notes</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">lpm</td>
+<td style="text-align: left;">V1.3.1</td>
+<td><a href="https://opensource.org/licenses/BSD-3-Clause">BSD 3-Clause</a></td>
+<td><a href="Utilities/lpm/tiny_lpm/Release_Notes.html">release notes</a></td>
+</tr>
+<tr class="even">
+<td style="text-align: left;">sequencer</td>
+<td style="text-align: left;">V1.5.1</td>
+<td><a href="https://opensource.org/licenses/BSD-3-Clause">BSD 3-Clause</a></td>
+<td><a href="Utilities/sequencer/Release_Notes.html">release notes</a></td>
+</tr>
+<tr class="odd">
+<td style="text-align: left;">LCD</td>
+<td style="text-align: left;">V2.0.0</td>
+<td><a href="https://opensource.org/licenses/BSD-3-Clause">BSD 3-Clause</a></td>
+<td><a href="Utilities/Log/Release_Notes.html">release notes</a></td>
+</tr>
+</tbody>
+</table>
+<h2 id="known-limitations">Known Limitations</h2>
+<ul>
+<li>FUS upgrade:
+<ul>
+<li><strong>If Anti-Rollback needs to be activated, please make sure to activate it only after installing the latest FUS version (&gt;= V1.2.0)</strong> <strong>and after successfully installing a wireless stack (without deleting it).</strong> <strong>Otherwise, further wireless stack installation will be blocked.</strong></li>
+</ul></li>
+<li><p>stm32wb5x_BLE_Zigbee_FFD_static_fw.binĀ and stm32wb5x_BLE_Zigbee_RFD_static_fw.bin:</p>
+<ul>
+<li>When using the static concurrent mode BLE/Zigbee binaries, due to a memory leak inside Zigbee shutdown procedure,Ā the number of transitionsĀ fromĀ Zigbee to BLE is limited. ThisĀ number depends on the available memory for the application. For instance, the BLE_Zigbee_Static application, available inside this package, faces this limitation after 10 transition average.</li>
+<li>The workaround is to rely on the dynamic concurrent mode provided by stm32wb5x_BLE_Zigbee_FFD_dynamic_fw.binĀ which is not facing this limitation.</li>
+<li>This limitation will be corrected inside a future release and is referenced under ID95417.</li>
+</ul></li>
+<li><p>Application Zigbee_Commissioning_Server_Router:</p>
+<ul>
+<li>For STM32CubeIDE project, some elements inside the traces are not correctly displayed (uint64_t formatting only). Not observable on IAR and MDK-ARM project.</li>
+</ul></li>
+<li>The stm32wb5x_BLE_Zigbee_RFD_dynamic_fw coprocessor wireless binary must be flashed only using the USB interface (as defined in the release note located in the STM32WB_Copro_Wireless_Binaries folder). It is not possible to flash this binary via ST-LINK.</li>
+<li><p>BLE_DataThroughput known throughput limitation at 2M PHY with Cube IDE project in debug configuration</p></li>
+</ul>
+<h2 id="development-toolchains-and-compilers">Development Toolchains and Compilers</h2>
+<ul>
+<li>IAR Embedded Workbench for ARM (EWARM) toolchain V8.20.2 + ST-Link</li>
+<li>RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.25 + ST-Link</li>
+<li>STM32CubeIDE toolchain V1.4.0 + ST-Link</li>
+</ul>
+<h2 id="supported-devices-and-boards">Supported Devices and boards</h2>
+<ul>
+<li>STM32WB55xx, STM32WB50xx, STM32WB35xx, STM32WB30xx, STM32WB15xx and STM32WB10xx devices.</li>
+<li>P-NUCLEO-WB55 kit composed of P-NUCLEO-WB55.Nucleo and P-NUCLEO-WB55.USBDongle.</li>
+<li>STM32WB5MM-DK board</li>
+<li>NUCLEO-WB15CC board</li>
+</ul>
+<h2 id="dependencies">Dependencies</h2>
+<p>This software release is compatible with:</p>
+<ul>
+<li>STM32WB_Copro_Wireless_Binaries available under Projects/STM32WB_Copro_Wireless_Binaries</li>
+</ul>
+<p>Several applications (BLE (Bluetooth low energy), Thread or Mac 802-15-4) are available under:</p>
+<ul>
+<li>Projects/P-NUCLEO-WB55.Nucleo/Applications</li>
+<li>Projects/P-NUCLEO-WB55.USBDongle/Applications</li>
+<li>Projects/NUCLEO-WB15CC/Applications</li>
+</ul>
+<p>All of them are provided in source code and some of them are also available in binary format directly for ready to use usage:</p>
+<ul>
+<li>Projects/P-NUCLEO-WB55.Nucleo/Applications/xxx/Binary/<projectName>.hex</li>
+<li>Projects/P-NUCLEO-WB55.USBDongle/Applications/xxx/Binary/<projectName>.hex</li>
+<li>Projects/NUCLEO-WB15CC/Applications/xxx/Binary/<projectName>.hex</li>
+</ul>
+<p>Each of them require a different coprocessor binary in order to behave correctly. This is documented inside each readme.txt of those applications.</p>
+<p>For a detailed explanation on how to use and how to flash them, you can refer to:</p>
+<ul>
+<li><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/Release_Notes.html">release note for STM32WB5x</a></li>
+<li><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB3x/Release_Notes.html">release note for STM32WB3x</a></li>
+<li><a href="Projects/STM32WB_Copro_Wireless_Binaries/STM32WB1x/Release_Notes.html">release note for STM32WB1x</a></li>
+</ul>
+</div>
+</div>
+<div class="collapse">
+<input type="checkbox" id="collapse-section13" aria-hidden="true"> <label for="collapse-section13" aria-hidden="true">V1.11.0 / 12-February-2021</label>
+<div>
+<h2 id="main-changes-1">Main Changes</h2>
<h3 id="add-new-devices-stm32wb15xx-stm32wb10xx-and-new-boards-stm32wb5mm-dk-and-nucleo-wb15cc">Add new devices STM32WB15xx, STM32WB10xx and new boards STM32WB5MM-DK and NUCLEO-WB15CC</h3>
<ul>
<li>Introduce HAL, LL and STM32WPAN support for stm32wb15xx and stm32wb10xx</li>
@@ -146,8 +741,8 @@
<li>Minor fixes in DRLC, Voice over Zigbee &amp; RSSI location Clusters</li>
</ul></li>
</ul>
-<h2 id="contents">Contents</h2>
-<h3 id="projects">Projects</h3>
+<h2 id="contents-1">Contents</h2>
+<h3 id="projects-1">Projects</h3>
<p>The STM32CubeWB Firmware package comes with a rich set of examples running on STMicroelectronics boards, organized by board and provided with preconfigured projects for the main supported toolchains.</p>
<p>The exhaustive list of projects and their short description is provided in this table (<a href="Projects/STM32CubeProjectsList.html">STM32CubeProjectsList.html</a>).</p>
<ul>
@@ -156,7 +751,7 @@
<li><strong>STM32WB5MM-DK</strong> (<a href="Projects/STM32WB5MM-DK/Release_Notes.html">release notes</a>)</li>
<li><strong>NUCLEO-WB15CC</strong> (<a href="Projects/NUCLEO-WB15CC/Release_Notes.html">release notes</a>)</li>
</ul>
-<h3 id="components">Components</h3>
+<h3 id="components-1">Components</h3>
<table>
<caption>STM32WBx Firmware Upgrade Services Binary</caption>
<thead>
@@ -636,7 +1231,7 @@
</tr>
</tbody>
</table>
-<h2 id="known-limitations">Known Limitations</h2>
+<h2 id="known-limitations-1">Known Limitations</h2>
<ul>
<li><p>stm32wb5x_BLE_Zigbee_FFD_static_fw.binĀ and stm32wb5x_BLE_Zigbee_RFD_static_fw.bin:</p>
<ul>
@@ -650,20 +1245,20 @@
</ul></li>
<li><p>The stm32wb5x_BLE_Zigbee_RFD_dynamic_fw coprocessor wireless binary must be flashed only using the USB interface (as defined in the release note located in the STM32WB_Copro_Wireless_Binaries folder). It is not possible to flash this binary via ST-LINK.</p></li>
</ul>
-<h2 id="development-toolchains-and-compilers">Development Toolchains and Compilers</h2>
+<h2 id="development-toolchains-and-compilers-1">Development Toolchains and Compilers</h2>
<ul>
<li>IAR Embedded Workbench for ARM (EWARM) toolchain V8.20.2 + ST-Link</li>
<li>RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.25 + ST-Link</li>
<li>STM32CubeIDE toolchain V1.4.0 + ST-Link</li>
</ul>
-<h2 id="supported-devices-and-boards">Supported Devices and boards</h2>
+<h2 id="supported-devices-and-boards-1">Supported Devices and boards</h2>
<ul>
<li>STM32WB55xx, STM32WB50xx, STM32WB35xx, STM32WB30xx, STM32WB15xx and STM32WB10xx devices.</li>
<li>P-NUCLEO-WB55 kit composed of P-NUCLEO-WB55.Nucleo and P-NUCLEO-WB55.USBDongle.</li>
<li>STM32WB5MM-DK board</li>
<li>NUCLEO-WB15CC board</li>
</ul>
-<h2 id="dependencies">Dependencies</h2>
+<h2 id="dependencies-1">Dependencies</h2>
<p>This software release is compatible with:</p>
<ul>
<li>STM32WB_Copro_Wireless_Binaries available under Projects/STM32WB_Copro_Wireless_Binaries</li>
@@ -692,7 +1287,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section12" aria-hidden="true"> <label for="collapse-section12" aria-hidden="true">V1.10.0 / 30-October-2020</label>
<div>
-<h2 id="main-changes-1">Main Changes</h2>
+<h2 id="main-changes-2">Main Changes</h2>
<h3 id="introduce-zigbee-applications-compatible-with-stm32cubemx-6.1.0">Introduce Zigbee applications compatible with STM32CubeMX 6.1.0</h3>
<ul>
<li><p>BLE-Mesh library version 1.13.001:</p>
@@ -715,15 +1310,15 @@
</ul></li>
</ul></li>
</ul>
-<h2 id="contents-1">Contents</h2>
-<h3 id="projects-1">Projects</h3>
+<h2 id="contents-2">Contents</h2>
+<h3 id="projects-2">Projects</h3>
<p>The STM32CubeWB Firmware package comes with a rich set of examples running on STMicroelectronics boards, organized by board and provided with preconfigured projects for the main supported toolchains.</p>
<p>The exhaustive list of projects and their short description is provided in this table (<a href="Projects/STM32CubeProjectsList.html">STM32CubeProjectsList.html</a>).</p>
<ul>
<li><strong>P-NUCLEO-WB55.Nucleo</strong> (<a href="Projects/P-NUCLEO-WB55.Nucleo/Release_Notes.html">release notes</a>)</li>
<li><strong>P-NUCLEO-WB55.USBDongle</strong> (<a href="Projects/P-NUCLEO-WB55.USBDongle/Release_Notes.html">release notes</a>)</li>
</ul>
-<h3 id="components-1">Components</h3>
+<h3 id="components-2">Components</h3>
<table>
<caption>STM32WB5x Firmware Upgrade Services Binary</caption>
<thead>
@@ -1029,7 +1624,7 @@
</tr>
</tbody>
</table>
-<h2 id="known-limitations-1">Known Limitations</h2>
+<h2 id="known-limitations-2">Known Limitations</h2>
<ul>
<li><p>stm32wb5x_BLE_Zigbee_FFD_static_fw.binĀ and stm32wb5x_BLE_Zigbee_RFD_static_fw.bin:</p>
<ul>
@@ -1043,18 +1638,18 @@
</ul></li>
<li><p>The stm32wb5x_BLE_Zigbee_RFD_dynamic_fw coprocessor wireless binary must be flashed only using the USB interface (as defined in the release note located in the STM32WB_Copro_Wireless_Binaries folder). It is not possible to flash this binary via ST-LINK.</p></li>
</ul>
-<h2 id="development-toolchains-and-compilers-1">Development Toolchains and Compilers</h2>
+<h2 id="development-toolchains-and-compilers-2">Development Toolchains and Compilers</h2>
<ul>
<li>IAR Embedded Workbench for ARM (EWARM) toolchain V8.20.2 + ST-Link</li>
<li>RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.25 + ST-Link</li>
<li>STM32CubeIDE toolchain V1.4.0 + ST-Link</li>
</ul>
-<h2 id="supported-devices-and-boards-1">Supported Devices and boards</h2>
+<h2 id="supported-devices-and-boards-2">Supported Devices and boards</h2>
<ul>
<li>STM32WB55xx, STM32WB50xx, STM32WB35xx and STM32WB30xx devices.</li>
<li>P-NUCLEO-WB55 kit composed of P-NUCLEO-WB55.Nucleo and P-NUCLEO-WB55.USBDongle</li>
</ul>
-<h2 id="dependencies-1">Dependencies</h2>
+<h2 id="dependencies-2">Dependencies</h2>
<p>This software release is compatible with:</p>
<ul>
<li>STM32WB_Copro_Wireless_Binaries available under Projects/STM32WB_Copro_Wireless_Binaries</li>
@@ -1076,7 +1671,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section11" aria-hidden="true"> <label for="collapse-section11" aria-hidden="true">V1.9.0 / 25-September-2020</label>
<div>
-<h2 id="main-changes-2">Main Changes</h2>
+<h2 id="main-changes-3">Main Changes</h2>
<h3 id="introduce-blethread-and-blezigbee-dynamic-concurrent-mode-the-support-of-lld-ble-and-phy_802.15.4-cli-application">Introduce BLE/Thread and BLE/Zigbee dynamic concurrent mode, the support of LLD BLE and PHY_802.15.4 CLI application</h3>
<ul>
<li><strong>Dynamic Concurrent mode support between BLE and Zigbee</strong>
@@ -1142,15 +1737,15 @@
</ul></li>
</ul></li>
</ul>
-<h2 id="contents-2">Contents</h2>
-<h3 id="projects-2">Projects</h3>
+<h2 id="contents-3">Contents</h2>
+<h3 id="projects-3">Projects</h3>
<p>The STM32CubeWB Firmware package comes with a rich set of examples running on STMicroelectronics boards, organized by board and provided with preconfigured projects for the main supported toolchains.</p>
<p>The exhaustive list of projects and their short description is provided in this table (<a href="Projects/STM32CubeProjectsList.html">STM32CubeProjectsList.html</a>).</p>
<ul>
<li><strong>P-NUCLEO-WB55.Nucleo</strong> (<a href="Projects/P-NUCLEO-WB55.Nucleo/Release_Notes.html">release notes</a>)</li>
<li><strong>P-NUCLEO-WB55.USBDongle</strong> (<a href="Projects/P-NUCLEO-WB55.USBDongle/Release_Notes.html">release notes</a>)</li>
</ul>
-<h3 id="components-2">Components</h3>
+<h3 id="components-3">Components</h3>
<table>
<caption>STM32WB5x Firmware Upgrade Services Binary</caption>
<thead>
@@ -1456,25 +2051,25 @@
</tr>
</tbody>
</table>
-<h2 id="known-limitations-2">Known Limitations</h2>
+<h2 id="known-limitations-3">Known Limitations</h2>
<ul>
<li>With the ability to change the Coprocessor Wireless Binaries Over The Air (OTA), it is possible to switch from one binary to another. Only, the following case is not possible due to available memory size:
<ul>
<li>Moving from stm32wb5x_BLE_Stack_fw.bin to stm32wb5x_BLE_Thread_fw.bin</li>
</ul></li>
</ul>
-<h2 id="development-toolchains-and-compilers-2">Development Toolchains and Compilers</h2>
+<h2 id="development-toolchains-and-compilers-3">Development Toolchains and Compilers</h2>
<ul>
<li>IAR Embedded Workbench for ARM (EWARM) toolchain V8.20.2 + ST-Link</li>
<li>RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.25 + ST-Link</li>
<li>STM32CubeIDE toolchain V1.4.0 + ST-Link</li>
</ul>
-<h2 id="supported-devices-and-boards-2">Supported Devices and boards</h2>
+<h2 id="supported-devices-and-boards-3">Supported Devices and boards</h2>
<ul>
<li>STM32WB55xx, STM32WB50xx, STM32WB35xx and STM32WB30xx devices.</li>
<li>P-NUCLEO-WB55 kit composed of P-NUCLEO-WB55.Nucleo and P-NUCLEO-WB55.USBDongle</li>
</ul>
-<h2 id="dependencies-2">Dependencies</h2>
+<h2 id="dependencies-3">Dependencies</h2>
<p>This software release is compatible with:</p>
<ul>
<li>STM32WB_Copro_Wireless_Binaries available under Projects/STM32WB_Copro_Wireless_Binaries</li>
@@ -1496,7 +2091,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section10" aria-hidden="true"> <label for="collapse-section10" aria-hidden="true">V1.8.0 / 23-June-2020</label>
<div>
-<h2 id="main-changes-3">Main Changes</h2>
+<h2 id="main-changes-4">Main Changes</h2>
<h3 id="add-zigbee-low-power-mode-support-and-firmware-and-wireless-stack-upgrade-over-the-air">Add Zigbee low power mode support and firmware and wireless stack upgrade over the air</h3>
<ul>
<li><strong>Zigbee</strong>
@@ -1560,15 +2155,15 @@
<li>Replace SW4STM32 by STM32CubeIDE projects files for all examples and application</li>
</ul></li>
</ul>
-<h2 id="contents-3">Contents</h2>
-<h3 id="projects-3">Projects</h3>
+<h2 id="contents-4">Contents</h2>
+<h3 id="projects-4">Projects</h3>
<p>The STM32CubeWB Firmware package comes with a rich set of examples running on STMicroelectronics boards, organized by board and provided with preconfigured projects for the main supported toolchains.</p>
<p>The exhaustive list of projects and their short description is provided in this table (<a href="Projects/STM32CubeProjectsList.html">STM32CubeProjectsList.html</a>).</p>
<ul>
<li><strong>P-NUCLEO-WB55.Nucleo</strong> (<a href="Projects/P-NUCLEO-WB55.Nucleo/Release_Notes.html">release notes</a>)</li>
<li><strong>P-NUCLEO-WB55.USBDongle</strong> (<a href="Projects/P-NUCLEO-WB55.USBDongle/Release_Notes.html">release notes</a>)</li>
</ul>
-<h3 id="components-3">Components</h3>
+<h3 id="components-4">Components</h3>
<table>
<caption>STM32WB5x Firmware Upgrade Services Binary</caption>
<thead>
@@ -1838,25 +2433,25 @@
</tr>
</tbody>
</table>
-<h2 id="known-limitations-3">Known Limitations</h2>
+<h2 id="known-limitations-4">Known Limitations</h2>
<ul>
<li>With the ability to change the Coprocessor Wireless Binaries Over The Air (OTA), it is possible to switch from one binary to another. Only, the following case is not possible due to available memory size:
<ul>
<li>Moving from stm32wb5x_BLE_Stack_fw.bin to stm32wb5x_BLE_Thread_fw.bin</li>
</ul></li>
</ul>
-<h2 id="development-toolchains-and-compilers-3">Development Toolchains and Compilers</h2>
+<h2 id="development-toolchains-and-compilers-4">Development Toolchains and Compilers</h2>
<ul>
<li>IAR Embedded Workbench for ARM (EWARM) toolchain V8.20.2 + ST-Link</li>
<li>RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.25 + ST-Link</li>
<li>STM32CubeIDE toolchain V1.4.0 + ST-Link</li>
</ul>
-<h2 id="supported-devices-and-boards-3">Supported Devices and boards</h2>
+<h2 id="supported-devices-and-boards-4">Supported Devices and boards</h2>
<ul>
<li>STM32WB55xx, STM32WB50xx, STM32WB35xx and STM32WB30xx devices.</li>
<li>P-NUCLEO-WB55 kit composed of P-NUCLEO-WB55.Nucleo and P-NUCLEO-WB55.USBDongle</li>
</ul>
-<h2 id="dependencies-3">Dependencies</h2>
+<h2 id="dependencies-4">Dependencies</h2>
<p>This software release is compatible with:</p>
<ul>
<li>STM32WB_Copro_Wireless_Binaries available under Projects/STM32WB_Copro_Wireless_Binaries</li>
@@ -1878,10 +2473,10 @@
<div class="collapse">
<input type="checkbox" id="collapse-section9" aria-hidden="true"> <label for="collapse-section9" aria-hidden="true">V1.7.0 / 11-May-2020</label>
<div>
-<h2 id="main-changes-4">Main Changes</h2>
+<h2 id="main-changes-5">Main Changes</h2>
<h3 id="correct-install-address-for-stm32wb5x_thread_ftd_fw.bin">Correct install address for stm32wb5x_Thread_FTD_fw.bin</h3>
-<h2 id="contents-4">Contents</h2>
-<h3 id="projects-4">Projects</h3>
+<h2 id="contents-5">Contents</h2>
+<h3 id="projects-5">Projects</h3>
<p>The STM32CubeWB Firmware package comes with a rich set of examples running on STMicroelectronics boards, organized by board and provided with preconfigured projects for the main supported toolchains.</p>
<p>The exhaustive list of projects and their short description is provided in this table (<a href="Projects/STM32CubeProjectsList.html">STM32CubeProjectsList.html</a>).</p>
<ul>
@@ -1889,7 +2484,7 @@
<li><strong>P-NUCLEO-WB55.USBDongle</strong> (<a href="Projects/P-NUCLEO-WB55.USBDongle/Release_Notes.html">release notes</a>)</li>
<li><strong>NUCLEO-WB35CE</strong> (<a href="Projects/NUCLEO-WB35CE/Release_Notes.html">release notes</a>) (<a href="Projects/NUCLEO-WB35CE/Applications/BLE/BLE_p2pClient/readme.txt">default application</a>)</li>
</ul>
-<h3 id="components-4">Components</h3>
+<h3 id="components-5">Components</h3>
<table>
<caption>STM32WB5x Firmware Upgrade Services Binary</caption>
<thead>
@@ -2214,26 +2809,26 @@
</tr>
</tbody>
</table>
-<h2 id="known-limitations-4">Known Limitations</h2>
+<h2 id="known-limitations-5">Known Limitations</h2>
<ul>
<li>With the ability to change the Coprocessor Wireless Binaries Over The Air (OTA), it is possible to switch from one binary to another. Only, the following case is not possible due to available memory size:
<ul>
<li>Moving from stm32wb5x_BLE_Stack_fw.bin to stm32wb5x_BLE_Thread_fw.bin</li>
</ul></li>
</ul>
-<h2 id="development-toolchains-and-compilers-4">Development Toolchains and Compilers</h2>
+<h2 id="development-toolchains-and-compilers-5">Development Toolchains and Compilers</h2>
<ul>
<li>IAR Embedded Workbench for ARM (EWARM) toolchain V8.20.2 + ST-Link</li>
<li>RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.25 + ST-Link</li>
<li>STM32CubeIDE toolchain V1.2.0 + ST-Link</li>
</ul>
-<h2 id="supported-devices-and-boards-4">Supported Devices and boards</h2>
+<h2 id="supported-devices-and-boards-5">Supported Devices and boards</h2>
<ul>
<li>STM32WB55xx, STM32WB50xx, STM32WB35xx and STM32WB30xx devices.</li>
<li>P-NUCLEO-WB55 kit composed of P-NUCLEO-WB55.Nucleo and P-NUCLEO-WB55.USBDongle</li>
<li>NUCLEO-WB35CE board.</li>
</ul>
-<h2 id="dependencies-4">Dependencies</h2>
+<h2 id="dependencies-5">Dependencies</h2>
<p>This software release is compatible with:</p>
<ul>
<li>STM32WB_Copro_Wireless_Binaries available under Projects/STM32WB_Copro_Wireless_Binaries</li>
@@ -2256,7 +2851,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section8" aria-hidden="true"> <label for="collapse-section8" aria-hidden="true">V1.6.0 / 3-April-2020</label>
<div>
-<h2 id="main-changes-5">Main Changes</h2>
+<h2 id="main-changes-6">Main Changes</h2>
<h3 id="add-the-support-of-several-additional-zigbee-clusters">Add the support of several additional Zigbee clusters</h3>
<ul>
<li><strong>Zigbee</strong>
@@ -2357,8 +2952,8 @@
</ul></li>
</ul></li>
</ul>
-<h2 id="contents-5">Contents</h2>
-<h3 id="projects-5">Projects</h3>
+<h2 id="contents-6">Contents</h2>
+<h3 id="projects-6">Projects</h3>
<p>The STM32CubeWB Firmware package comes with a rich set of examples running on STMicroelectronics boards, organized by board and provided with preconfigured projects for the main supported toolchains.</p>
<p>The exhaustive list of projects and their short description is provided in this table (<a href="Projects/STM32CubeProjectsList.html">STM32CubeProjectsList.html</a>).</p>
<ul>
@@ -2366,7 +2961,7 @@
<li><strong>P-NUCLEO-WB55.USBDongle</strong> (<a href="Projects/P-NUCLEO-WB55.USBDongle/Release_Notes.html">release notes</a>)</li>
<li><strong>NUCLEO-WB35CE</strong> (<a href="Projects/NUCLEO-WB35CE/Release_Notes.html">release notes</a>) (<a href="Projects/NUCLEO-WB35CE/Applications/BLE/BLE_p2pClient/readme.txt">default application</a>)</li>
</ul>
-<h3 id="components-5">Components</h3>
+<h3 id="components-6">Components</h3>
<table>
<caption>STM32WB5x Firmware Upgrade Services Binary</caption>
<thead>
@@ -2691,27 +3286,27 @@
</tr>
</tbody>
</table>
-<h2 id="known-limitations-5">Known Limitations</h2>
+<h2 id="known-limitations-6">Known Limitations</h2>
<ul>
<li>With the ability to change the Coprocessor Wireless Binaries Over The Air (OTA), it is possible to switch from one binary to another. Only, the following case is not possible due to available memory size:
<ul>
<li>Moving from stm32wb5x_BLE_Stack_fw.bin to stm32wb5x_BLE_Thread_fw.bin</li>
</ul></li>
</ul>
-<h2 id="development-toolchains-and-compilers-5">Development Toolchains and Compilers</h2>
+<h2 id="development-toolchains-and-compilers-6">Development Toolchains and Compilers</h2>
<ul>
<li>IAR Embedded Workbench for ARM (EWARM) toolchain V8.20.2 + ST-Link</li>
<li>RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.25 + ST-Link</li>
<li>System Workbench for STM32 (SW4STM32) toolchain V2.7 + ST-Link</li>
<li>STM32CubeIDE toolchain V1.2.0 + ST-Link</li>
</ul>
-<h2 id="supported-devices-and-boards-5">Supported Devices and boards</h2>
+<h2 id="supported-devices-and-boards-6">Supported Devices and boards</h2>
<ul>
<li>STM32WB55xx, STM32WB50xx, STM32WB35xx and STM32WB30xx devices.</li>
<li>P-NUCLEO-WB55 kit composed of P-NUCLEO-WB55.Nucleo and P-NUCLEO-WB55.USBDongle</li>
<li>NUCLEO-WB35CE board.</li>
</ul>
-<h2 id="dependencies-5">Dependencies</h2>
+<h2 id="dependencies-6">Dependencies</h2>
<p>This software release is compatible with:</p>
<ul>
<li>STM32WB_Copro_Wireless_Binaries available under Projects/STM32WB_Copro_Wireless_Binaries</li>
@@ -2734,7 +3329,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section7" aria-hidden="true"> <label for="collapse-section7" aria-hidden="true">V1.5.0 / 14-February-2020</label>
<div>
-<h2 id="main-changes-6">Main Changes</h2>
+<h2 id="main-changes-7">Main Changes</h2>
<h3 id="introduction-of-stm32wb5mxx-stm32wb35xx-stm32wb30xx-product-and-blezigbee-static-concurrent-mode">Introduction of STM32WB5Mxx, STM32WB35xx, STM32WB30xx product and BLE/Zigbee static concurrent mode</h3>
<ul>
<li><strong>STM32WB35xx</strong>:
@@ -2847,8 +3442,8 @@
<li>Introduce the support od STM32WB5Mxx inside the cmsis device, the HAL and the LL library.</li>
</ul></li>
</ul>
-<h2 id="contents-6">Contents</h2>
-<h3 id="projects-6">Projects</h3>
+<h2 id="contents-7">Contents</h2>
+<h3 id="projects-7">Projects</h3>
<p>The STM32CubeWB Firmware package comes with a rich set of examples running on STMicroelectronics boards, organized by board and provided with preconfigured projects for the main supported toolchains.</p>
<p>The exhaustive list of projects and their short description is provided in this table (<a href="Projects/STM32CubeProjectsList.html">STM32CubeProjectsList.html</a>).</p>
<ul>
@@ -2856,7 +3451,7 @@
<li><strong>P-NUCLEO-WB55.USBDongle</strong> (<a href="Projects/P-NUCLEO-WB55.USBDongle/Release_Notes.html">release notes</a>)</li>
<li><strong>NUCLEO-WB35CE</strong> (<a href="Projects/NUCLEO-WB35CE/Release_Notes.html">release notes</a>) (<a href="Projects/NUCLEO-WB35CE/Applications/BLE/BLE_p2pClient/readme.txt">default application</a>)</li>
</ul>
-<h3 id="components-6">Components</h3>
+<h3 id="components-7">Components</h3>
<table>
<caption>STM32WB5x Firmware Upgrade Services Binary</caption>
<thead>
@@ -3169,7 +3764,7 @@
</tr>
</tbody>
</table>
-<h2 id="known-limitations-6">Known Limitations</h2>
+<h2 id="known-limitations-7">Known Limitations</h2>
<ul>
<li>With the ability to change the Coprocessor Wireless Binaries Over The Air (OTA), it is possible to switch from one binary to another. Only, the following case is not possible due to available memory size:
<ul>
@@ -3177,20 +3772,20 @@
</ul></li>
<li>The example RCC/RCC_ClockConfig encounter a hard fault after few keypressed. This will be corrected inside the next release.</li>
</ul>
-<h2 id="development-toolchains-and-compilers-6">Development Toolchains and Compilers</h2>
+<h2 id="development-toolchains-and-compilers-7">Development Toolchains and Compilers</h2>
<ul>
<li>IAR Embedded Workbench for ARM (EWARM) toolchain V8.20.2 + ST-Link</li>
<li>RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.25 + ST-Link</li>
<li>System Workbench for STM32 (SW4STM32) toolchain V2.7 + ST-Link</li>
<li>STM32CubeIDE toolchain V1.2.0 + ST-Link</li>
</ul>
-<h2 id="supported-devices-and-boards-6">Supported Devices and boards</h2>
+<h2 id="supported-devices-and-boards-7">Supported Devices and boards</h2>
<ul>
<li>STM32WB55xx, STM32WB50xx, STM32WB35xx and STM32WB30xx devices.</li>
<li>P-NUCLEO-WB55 kit composed of P-NUCLEO-WB55.Nucleo and P-NUCLEO-WB55.USBDongle</li>
<li>NUCLEO-WB35CE board.</li>
</ul>
-<h2 id="dependencies-6">Dependencies</h2>
+<h2 id="dependencies-7">Dependencies</h2>
<p>This software release is compatible with:</p>
<ul>
<li>STM32WB_Copro_Wireless_Binaries available under Projects/STM32WB_Copro_Wireless_Binaries</li>
@@ -3213,7 +3808,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section6" aria-hidden="true"> <label for="collapse-section6" aria-hidden="true">V1.4.0 / 06-December-2019</label>
<div>
-<h2 id="main-changes-7">Main Changes</h2>
+<h2 id="main-changes-8">Main Changes</h2>
<h3 id="maintenance-release">Maintenance Release</h3>
<ul>
<li><strong>BLE</strong>:
@@ -3238,15 +3833,15 @@
</ul></li>
<li>Maintenance release for HAL and LL drivers.</li>
</ul>
-<h2 id="contents-7">Contents</h2>
-<h3 id="projects-7">Projects</h3>
+<h2 id="contents-8">Contents</h2>
+<h3 id="projects-8">Projects</h3>
<p>The STM32CubeWB Firmware package comes with a rich set of examples running on STMicroelectronics boards, organized by board and provided with preconfigured projects for the main supported toolchains.</p>
<p>The exhaustive list of projects and their short description is provided in this table (<a href="Projects/STM32CubeProjectsList.html">STM32CubeProjectsList.html</a>).</p>
<ul>
<li><strong>P-NUCLEO-WB55.Nucleo</strong> (<a href="Projects/P-NUCLEO-WB55.Nucleo/Release_Notes.html">release notes</a>) (<a href="Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer/readme.txt">default application</a>)</li>
<li><strong>P-NUCLEO-WB55.USBDongle</strong> (<a href="Projects/P-NUCLEO-WB55.USBDongle/Release_Notes.html">release notes</a>) (<a href="Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pClient/readme.txt">default application</a>)</li>
</ul>
-<h3 id="components-7">Components</h3>
+<h3 id="components-8">Components</h3>
<table>
<caption>Firmware Upgrade Services Binary</caption>
<thead>
@@ -3492,7 +4087,7 @@
</tr>
</tbody>
</table>
-<h2 id="known-limitations-7">Known Limitations</h2>
+<h2 id="known-limitations-8">Known Limitations</h2>
<ul>
<li>With the ability to change the Coprocessor Wireless Binaries Over The Air (OTA), it is possible to switch from one binary to another. Only, the following case is not possible due to available memory size:
<ul>
@@ -3500,18 +4095,18 @@
</ul></li>
<li>BLE_MeshLightingDemo application is not functionnal under Linux platform.</li>
</ul>
-<h2 id="development-toolchains-and-compilers-7">Development Toolchains and Compilers</h2>
+<h2 id="development-toolchains-and-compilers-8">Development Toolchains and Compilers</h2>
<ul>
<li>IAR Embedded Workbench for ARM (EWARM) toolchain V8.20.2 + ST-Link</li>
<li>RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.25 + ST-Link</li>
<li>System Workbench for STM32 (SW4STM32) toolchain V2.7 + ST-Link</li>
</ul>
-<h2 id="supported-devices-and-boards-7">Supported Devices and boards</h2>
+<h2 id="supported-devices-and-boards-8">Supported Devices and boards</h2>
<ul>
<li>STM32WB55xx and STM32WB50xx devices</li>
<li>P-NUCLEO-WB55 kit composed of P-NUCLEO-WB55.Nucleo and P-NUCLEO-WB55.USBDongle</li>
</ul>
-<h2 id="dependencies-7">Dependencies</h2>
+<h2 id="dependencies-8">Dependencies</h2>
<p>This software release is compatible with:</p>
<ul>
<li>STM32WB_Copro_Wireless_Binaries available under Projects/STM32WB_Copro_Wireless_Binaries</li>
@@ -3533,7 +4128,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section5" aria-hidden="true"> <label for="collapse-section5" aria-hidden="true">V1.3.0 / 11-September-2019</label>
<div>
-<h2 id="main-changes-8">Main Changes</h2>
+<h2 id="main-changes-9">Main Changes</h2>
<h3 id="introduction-of-zigbee-support">Introduction of ZIGBEE support</h3>
<p>STM32WB ecosystem keeps growing, now with the introduction of ZigBee protocol supportĀ as <strong>certified compliant platform</strong>, running on <strong>certified 802.15.4 2015 LLD MAC and PHY</strong>.</p>
<p>The wireless stack is based on <strong>ZigBee pro 2017, R22 release version</strong> in order to propose a ZigBee 3.0 solution. First ON/OFF cluster is coming in this STM32CubeWB Firmware Package delivery release.</p>
@@ -3562,15 +4157,15 @@
<li>Integration of BLE Mesh library v1.10.004</li>
<li>Maintenance release for CMSIS, HAL and LL drivers.</li>
</ul>
-<h2 id="contents-8">Contents</h2>
-<h3 id="projects-8">Projects</h3>
+<h2 id="contents-9">Contents</h2>
+<h3 id="projects-9">Projects</h3>
<p>The STM32CubeWB Firmware package comes with a rich set of examples running on STMicroelectronics boards, organized by board and provided with preconfigured projects for the main supported toolchains.</p>
<p>The exhaustive list of projects and their short description is provided in this table (<a href="Projects/STM32CubeProjectsList.html">STM32CubeProjectsList.html</a>).</p>
<ul>
<li><strong>P-NUCLEO-WB55.Nucleo</strong> (<a href="Projects/P-NUCLEO-WB55.Nucleo/Release_Notes.html">release notes</a>) (<a href="Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer/readme.txt">default application</a>)</li>
<li><strong>P-NUCLEO-WB55.USBDongle</strong> (<a href="Projects/P-NUCLEO-WB55.USBDongle/Release_Notes.html">release notes</a>) (<a href="Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pClient/readme.txt">default application</a>)</li>
</ul>
-<h3 id="components-8">Components</h3>
+<h3 id="components-9">Components</h3>
<table>
<caption>Firmware Upgrade Services Binary</caption>
<thead>
@@ -3810,7 +4405,7 @@
</tr>
</tbody>
</table>
-<h2 id="known-limitations-8">Known Limitations</h2>
+<h2 id="known-limitations-9">Known Limitations</h2>
<ul>
<li>With the ability to change the Coprocessor Wireless Binaries Over The Air (OTA), it is possible to switch from one binary to another. Only, the following case is not possible due to available memory size:
<ul>
@@ -3819,18 +4414,18 @@
<li>Mac 802-15-4 applications are provided with EWARM IDE. MDK-ARM and SW4STM32 IDE are planned for a future release.</li>
<li>BLE_MeshLightingDemo application is not functionnal under Linux platform.</li>
</ul>
-<h2 id="development-toolchains-and-compilers-8">Development Toolchains and Compilers</h2>
+<h2 id="development-toolchains-and-compilers-9">Development Toolchains and Compilers</h2>
<ul>
<li>IAR Embedded Workbench for ARM (EWARM) toolchain V8.20.2 + ST-Link</li>
<li>RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.25 + ST-Link</li>
<li>System Workbench for STM32 (SW4STM32) toolchain V2.7 + ST-Link</li>
</ul>
-<h2 id="supported-devices-and-boards-8">Supported Devices and boards</h2>
+<h2 id="supported-devices-and-boards-9">Supported Devices and boards</h2>
<ul>
<li>STM32WB55xx and STM32WB50xx devices</li>
<li>P-NUCLEO-WB55 kit composed of P-NUCLEO-WB55.Nucleo and P-NUCLEO-WB55.USBDongle</li>
</ul>
-<h2 id="dependencies-8">Dependencies</h2>
+<h2 id="dependencies-9">Dependencies</h2>
<p>This software release is compatible with:</p>
<ul>
<li>STM32WB_Copro_Wireless_Binaries available under Projects/STM32WB_Copro_Wireless_Binaries</li>
@@ -3852,7 +4447,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section4" aria-hidden="true"> <label for="collapse-section4" aria-hidden="true">V1.2.0 / 3rd-July-2019</label>
<div>
-<h2 id="main-changes-9">Main Changes</h2>
+<h2 id="main-changes-10">Main Changes</h2>
<h3 id="stm32wb50xx-introduction-and-new-features-addition">STM32WB50xx introduction and new features addition</h3>
<p>This release introduces the following feature:</p>
<ul>
@@ -3879,15 +4474,15 @@
<li>Mesh Library V1.10.000</li>
</ul></li>
</ul>
-<h2 id="contents-9">Contents</h2>
-<h3 id="projects-9">Projects</h3>
+<h2 id="contents-10">Contents</h2>
+<h3 id="projects-10">Projects</h3>
<p>The STM32CubeWB Firmware package comes with a rich set of examples running on STMicroelectronics boards, organized by board and provided with preconfigured projects for the main supported toolchains.</p>
<p>The exhaustive list of projects and their short description is provided in this table (<a href="Projects/STM32CubeProjectsList.html">STM32CubeProjectsList.html</a>).</p>
<ul>
<li><strong>P-NUCLEO-WB55.Nucleo</strong> (<a href="Projects/P-NUCLEO-WB55.Nucleo/Release_Notes.html">release notes</a>) (<a href="Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer/readme.txt">default application</a>)</li>
<li><strong>P-NUCLEO-WB55.USBDongle</strong> (<a href="Projects/P-NUCLEO-WB55.USBDongle/Release_Notes.html">release notes</a>) (<a href="Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pClient/readme.txt">default application</a>)</li>
</ul>
-<h3 id="components-9">Components</h3>
+<h3 id="components-10">Components</h3>
<table>
<caption>Firmware Upgrade Services Binary</caption>
<thead>
@@ -4127,7 +4722,7 @@
</tr>
</tbody>
</table>
-<h2 id="known-limitations-9">Known Limitations</h2>
+<h2 id="known-limitations-10">Known Limitations</h2>
<ul>
<li>With the ability to change the Coprocessor Wireless Binaries Over The Air (OTA), it is possible to switch from one binary to another. Only, the following case is not possible due to available memory size:
<ul>
@@ -4137,18 +4732,18 @@
<li>BLE_MeshLightingDemo application is not functionnal under Linux platform.</li>
<li>Zigbee supports only OnOff cluster.</li>
</ul>
-<h2 id="development-toolchains-and-compilers-9">Development Toolchains and Compilers</h2>
+<h2 id="development-toolchains-and-compilers-10">Development Toolchains and Compilers</h2>
<ul>
<li>IAR Embedded Workbench for ARM (EWARM) toolchain V8.20.2 + ST-Link</li>
<li>RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.25 + ST-Link</li>
<li>System Workbench for STM32 (SW4STM32) toolchain V2.7 + ST-Link</li>
</ul>
-<h2 id="supported-devices-and-boards-9">Supported Devices and boards</h2>
+<h2 id="supported-devices-and-boards-10">Supported Devices and boards</h2>
<ul>
<li>STM32WB55xx and STM32WB50xx devices</li>
<li>P-NUCLEO-WB55 kit composed of P-NUCLEO-WB55.Nucleo and P-NUCLEO-WB55.USBDongle</li>
</ul>
-<h2 id="dependencies-9">Dependencies</h2>
+<h2 id="dependencies-10">Dependencies</h2>
<p>This software release is compatible with:</p>
<ul>
<li>STM32WB_Copro_Wireless_Binaries available under Projects/STM32WB_Copro_Wireless_Binaries</li>
@@ -4170,7 +4765,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section3" aria-hidden="true"> <label for="collapse-section3" aria-hidden="true">V1.1.1 / 17-May-2019</label>
<div>
-<h2 id="main-changes-10">Main Changes</h2>
+<h2 id="main-changes-11">Main Changes</h2>
<h3 id="patch-release-for-fus-v1.0.2wireless-coprocessor-binary-bug-fix-and-ble-mesh-library-improvements">Patch release for FUS V1.0.2,Wireless Coprocessor Binary bug fix and BLE Mesh Library improvements</h3>
<p>This release introduces the following feature:</p>
<ul>
@@ -4196,8 +4791,8 @@
</ul></li>
</ul></li>
</ul>
-<h2 id="contents-10">Contents</h2>
-<h3 id="projects-10">Projects</h3>
+<h2 id="contents-11">Contents</h2>
+<h3 id="projects-11">Projects</h3>
<p>The STM32CubeWB Firmware package comes with a rich set of examples running on STMicroelectronics boards, organized by board and provided with preconfigured projects for the main supported toolchains.</p>
<p>The exhaustive list of projects and their short description is provided in this table (<a href="Projects/STM32CubeProjectsList.html">STM32CubeProjectsList.html</a>).</p>
<ul>
@@ -4205,7 +4800,7 @@
<li><strong>P-NUCLEO-WB55.USBDongle</strong> (<a href="Projects/P-NUCLEO-WB55.USBDongle/Release_Notes.html">release notes</a>) (<a href="Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pClient/readme.txt">default application</a>)</li>
</ul>
<p><em>Please note that the path of the example projects have been change to P-NUCLEO-WB55.Nucleo and P-NUCLEO-WB55.USBDongle.</em></p>
-<h3 id="components-10">Components</h3>
+<h3 id="components-11">Components</h3>
<table>
<caption>Firmware Upgrade Services Binary</caption>
<thead>
@@ -4427,7 +5022,7 @@
</tr>
</tbody>
</table>
-<h2 id="known-limitations-10">Known Limitations</h2>
+<h2 id="known-limitations-11">Known Limitations</h2>
<ul>
<li>With the ability to change the Coprocessor Wireless Binaries Over The Air (OTA), it is possible to switch from one binary to another. Only, the following case is not possible due to available memory size:
<ul>
@@ -4445,18 +5040,18 @@
<li>SW4STM32 project is compiled without optimisation. (With optimised size compilation, the virtual com port required for the application is not functionnal)</li>
</ul></li>
</ul>
-<h2 id="development-toolchains-and-compilers-10">Development Toolchains and Compilers</h2>
+<h2 id="development-toolchains-and-compilers-11">Development Toolchains and Compilers</h2>
<ul>
<li>IAR Embedded Workbench for ARM (EWARM) toolchain V8.20.2 + ST-Link</li>
<li>RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.25 + ST-Link</li>
<li>System Workbench for STM32 (SW4STM32) toolchain V2.7 + ST-Link</li>
</ul>
-<h2 id="supported-devices-and-boards-10">Supported Devices and boards</h2>
+<h2 id="supported-devices-and-boards-11">Supported Devices and boards</h2>
<ul>
<li>STM32WB55xx devices</li>
<li>P-NUCLEO-WB55 kit composed of P-NUCLEO-WB55.Nucleo and P-NUCLEO-WB55.USBDongle</li>
</ul>
-<h2 id="dependencies-10">Dependencies</h2>
+<h2 id="dependencies-11">Dependencies</h2>
<p>This software release is compatible with:</p>
<ul>
<li>STM32WB_Copro_Wireless_Binaries available under Projects/STM32WB_Copro_Wireless_Binaries</li>
@@ -4478,7 +5073,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section2" aria-hidden="true"> <label for="collapse-section2" aria-hidden="true">V1.1.0 / 05-April-2019</label>
<div>
-<h2 id="main-changes-11">Main Changes</h2>
+<h2 id="main-changes-12">Main Changes</h2>
<h3 id="new-features-introduction-and-maintenance-release">New features introduction and maintenance release</h3>
<p>This release introduces the following feature:</p>
<ul>
@@ -4540,8 +5135,8 @@
<li>Projects\P-NUCLEO-WB55.USBDongle\Applications\BLE</li>
<li>Projects\P-NUCLEO-WB55.USBDongle\Applications\Thread</li>
</ul>
-<h2 id="contents-11">Contents</h2>
-<h3 id="projects-11">Projects</h3>
+<h2 id="contents-12">Contents</h2>
+<h3 id="projects-12">Projects</h3>
<p>The STM32CubeWB Firmware package comes with a rich set of examples running on STMicroelectronics boards, organized by board and provided with preconfigured projects for the main supported toolchains.</p>
<p>The exhaustive list of projects and their short description is provided in this table (<a href="Projects/STM32CubeProjectsList.html">STM32CubeProjectsList.html</a>).</p>
<ul>
@@ -4549,7 +5144,7 @@
<li><strong>P-NUCLEO-WB55.USBDongle</strong> (<a href="Projects/P-NUCLEO-WB55.USBDongle/Release_Notes.html">release notes</a>) (<a href="Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pClient/readme.txt">default application</a>)</li>
</ul>
<p><em>Please note that the path of the example projects have been change to P-NUCLEO-WB55.Nucleo and P-NUCLEO-WB55.USBDongle.</em></p>
-<h3 id="components-11">Components</h3>
+<h3 id="components-12">Components</h3>
<table>
<caption>Firmware Upgrade Services Binary</caption>
<thead>
@@ -4771,7 +5366,7 @@
</tr>
</tbody>
</table>
-<h2 id="known-limitations-11">Known Limitations</h2>
+<h2 id="known-limitations-12">Known Limitations</h2>
<ul>
<li>With the ability to change the Coprocessor Wireless Binaries Over The Air (OTA), it is possible to switch from one binary to another. Only, the following case is not possible due to available memory size:
<ul>
@@ -4789,18 +5384,18 @@
<li>SW4STM32 project is compiled without optimisation. (With optimised size compilation, the virtual com port required for the application is not functionnal)</li>
</ul></li>
</ul>
-<h2 id="development-toolchains-and-compilers-11">Development Toolchains and Compilers</h2>
+<h2 id="development-toolchains-and-compilers-12">Development Toolchains and Compilers</h2>
<ul>
<li>IAR Embedded Workbench for ARM (EWARM) toolchain V8.20.2 + ST-Link</li>
<li>RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.25 + ST-Link</li>
<li>System Workbench for STM32 (SW4STM32) toolchain V2.7 + ST-Link</li>
</ul>
-<h2 id="supported-devices-and-boards-11">Supported Devices and boards</h2>
+<h2 id="supported-devices-and-boards-12">Supported Devices and boards</h2>
<ul>
<li>STM32WB55xx devices</li>
<li>P-NUCLEO-WB55 kit composed of P-NUCLEO-WB55.Nucleo and P-NUCLEO-WB55.USBDongle</li>
</ul>
-<h2 id="dependencies-11">Dependencies</h2>
+<h2 id="dependencies-12">Dependencies</h2>
<p>This software release is compatible with:</p>
<ul>
<li>STM32WB_Copro_Wireless_Binaries available under Projects/STM32WB_Copro_Wireless_Binaries</li>
@@ -4822,7 +5417,7 @@
<div class="collapse">
<input type="checkbox" id="collapse-section1" aria-hidden="true"> <label for="collapse-section1" aria-hidden="true">V1.0.0 / 06-February-2019</label>
<div>
-<h2 id="main-changes-12">Main Changes</h2>
+<h2 id="main-changes-13">Main Changes</h2>
<h3 id="first-release">First release</h3>
<p>First release of STM32CubeWB (STM32Cube for STM32WB Series) supporting STM32WB55xx devices.</p>
<p>In the STM32CubeWB MCU Package, most of the examples and applications projects are generated with the STM32CubeMX tool to initialize the system, peripherals and middleware stacks.</p>
@@ -4838,15 +5433,15 @@
<li>Projects\P-NUCLEO-WB55.USBDongle\Applications\BLE</li>
<li>Projects\P-NUCLEO-WB55.USBDongle\Applications\Thread</li>
</ul>
-<h2 id="contents-12">Contents</h2>
-<h3 id="projects-12">Projects</h3>
+<h2 id="contents-13">Contents</h2>
+<h3 id="projects-13">Projects</h3>
<p>The STM32CubeWB Firmware package comes with a rich set of examples running on STMicroelectronics boards, organized by board and provided with preconfigured projects for the main supported toolchains.</p>
<p>The exhaustive list of projects and their short description is provided in this table (<a href="Projects/STM32CubeProjectsList.html">STM32CubeProjectsList.html</a>).</p>
<ul>
<li><strong>P-NUCLEO-WB55.Nucleo</strong> (<a href="Projects/P-NUCLEO-WB55.Nucleo/Release_Notes.html">release notes</a>) (<a href="Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer/readme.txt">default application</a>)</li>
<li><strong>P-NUCLEO-WB55.USBDongle</strong> (<a href="Projects/P-NUCLEO-WB55.USBDongle/Release_Notes.html">release notes</a>) (<a href="Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_p2pClient/readme.txt">default application</a>)</li>
</ul>
-<h3 id="components-12">Components</h3>
+<h3 id="components-13">Components</h3>
<table>
<caption>Coprocessor Wireless Binaries</caption>
<thead>
@@ -5037,7 +5632,7 @@
</tr>
</tbody>
</table>
-<h2 id="known-limitations-12">Known Limitations</h2>
+<h2 id="known-limitations-13">Known Limitations</h2>
<ul>
<li>BLE\BLE_p2pClient is provided with EWARM and MDK-ARM IDE. A connection issue with BLE_p2pServer is encounter with SW4STM32.</li>
<li>BLE\BLE_p2pRouter is provided with EWARM and MDK-ARM IDE. A connection issue with BLE_p2pServer is encounter with SW4STM32.</li>
@@ -5067,18 +5662,18 @@
</ul></li>
</ul></li>
</ul>
-<h2 id="development-toolchains-and-compilers-12">Development Toolchains and Compilers</h2>
+<h2 id="development-toolchains-and-compilers-13">Development Toolchains and Compilers</h2>
<ul>
<li>IAR Embedded Workbench for ARM (EWARM) toolchain V8.20.2 + ST-Link</li>
<li>RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.25 + ST-Link</li>
<li>System Workbench for STM32 (SW4STM32) toolchain V2.7 + ST-Link</li>
</ul>
-<h2 id="supported-devices-and-boards-12">Supported Devices and boards</h2>
+<h2 id="supported-devices-and-boards-13">Supported Devices and boards</h2>
<ul>
<li>STM32WB55xx devices</li>
<li>P-NUCLEO-WB55 kit composed of P-NUCLEO-WB55.Nucleo and P-NUCLEO-WB55.USBDongle</li>
</ul>
-<h2 id="dependencies-12">Dependencies</h2>
+<h2 id="dependencies-13">Dependencies</h2>
<p>This software release is compatible with:</p>
<ul>
<li>STM32WB_Copro_Wireless_Binaries available under Projects/STM32WB_Copro_Wireless_Binaries</li>
diff --git a/_htmresc/ReleaseNotes.html b/_htmresc/ReleaseNotes.html
index bb7d4f602..04f4ddbe7 100644
--- a/_htmresc/ReleaseNotes.html
+++ b/_htmresc/ReleaseNotes.html
@@ -1,12 +1,22 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"><head></head>
<body>
-<font color="blue"><b><u>STM32CubeWB Firmware Package V1.10.0 / 30-October-2020</u></b></font><br>
+<font color="blue"><b><u>STM32CubeWB Firmware Package V1.11.0 / 12-February-2021</u></b></font><br>
<br>
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main
-Changes</span></u></b></p><span style="font-weight: bold;"></span><span style="display: inline ! important; float: none; background-color: rgb(250, 250, 250); color: rgb(17, 17, 17); font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; line-height: 1.4; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"></span><h3 id="introduce-zigbee-applications-compatible-with-stm32cubemx-6.1.0" style="color: rgb(17, 17, 17); font-style: normal; font-variant: normal; letter-spacing: normal; line-height: 1.2; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; font-weight: bold;">Introduce Zigbee applications compatible with STM32CubeMX 6.1.0</h3><span style="display: inline ! important; float: none; background-color: rgb(250, 250, 250); color: rgb(17, 17, 17); font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; line-height: 1.4; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
-</span><ul style="color: rgb(17, 17, 17); font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; line-height: 1.4; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><li style="line-height: 1.4;"><p style="line-height: 1.4;">BLE-Mesh library version 1.13.001:</p>
-<ul style="line-height: 1.4;"><li style="line-height: 1.4;">Updated number of element to 8 and number of Model per element to 7</li></ul></li><li style="line-height: 1.4;"><p style="line-height: 1.4;">ZIGBEE :</p>
-<ul style="line-height: 1.4;"><li style="line-height: 1.4;">Zigbee interface clarification by adding comments inside the ZCL header files</li><li style="line-height: 1.4;">Minor Poll control, IAS and Window covering cluster improvements</li><li style="line-height: 1.4;"><p style="line-height: 1.4;">Provide the following examples compatible to STM32CubeMX format:</p>
-<ul style="line-height: 1.4;"><li style="line-height: 1.4;">Zigbee_MeterId_Client_Router</li><li style="line-height: 1.4;">Zigbee_MeterId_Server_Coord</li><li style="line-height: 1.4;">Zigbee_OnOff_Client_Distrib</li><li style="line-height: 1.4;">Zigbee_OnOff_Client_Router</li><li style="line-height: 1.4;">Zigbee_OnOff_Client_SED</li><li style="line-height: 1.4;">Zigbee_OnOff_Server_Coord</li><li style="line-height: 1.4;">Zigbee_OnOff_Server_Distrib</li></ul></li></ul></li></ul><ol></ol>
+Changes</span></u></b></p><span style="font-weight: bold;"></span><span style="display: inline ! important; float: none; background-color: rgb(250, 250, 250); color: rgb(17, 17, 17); font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; line-height: 1.4; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"></span><h3 id="add-new-devices-stm32wb15xx-stm32wb10xx-and-new-boards-stm32wb5mm-dk-and-nucleo-wb15cc" style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.2; font-weight: 500; color: rgb(17, 17, 17); font-style: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">Add new devices STM32WB15xx, STM32WB10xx and new boards STM32WB5MM-DK and NUCLEO-WB15CC</h3><ul style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4; font-size: 14px; color: rgb(17, 17, 17); font-style: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Introduce hal, ll and STM32WPAN support for stm32wb15xx and stm32wb10xx</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Introduce STM32WB5MM-DK and NUCLEO-WB15CC BSP support</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">BLE-Mesh library version 1.13.002:<ul style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;"><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Updated
+max number of element to 5 and max number of Model per element to 11
+(support lighting control system with occupancy sensing). &nbsp;</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Bug fix: Client API, Light LC model and sensor status, modify Light LC FSM default Lightness values</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Sensor &amp; Light LC Server Models updated</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Client Models updated</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Config Model APIs callbacks added over application layer</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Save &amp; Restore APIs for Models parameters in Flash updated</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Publication enabled for multiple elements</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Remove double disconnection to accelerate provisioning with IOS ST BLE Mesh App version 1.08.001</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Bug correction during unprovisioning with ST BLE Mesh App of non GATT connected Nodes. &nbsp; &nbsp; &nbsp;&nbsp;</li></ul></li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">BLE:<ul style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;"><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">HID:
+added: Battery Service and Device Information Service, connection and
+disconnection events -&nbsp;ID 97936:&nbsp; L2CAP update to support IP
+over BLE (M.6874), SHCI_C2_BLE_init() updated parameters to be provided
+to CPU2 with new BLE stack Options flags</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">ID 95186:&nbsp; SHCI_C2_FUS_GetState fixed to identify when wireless stack&nbsp;running (with correct error code)</li></ul></li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">THREAD:<ul style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;"><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Update OpenThread stack to<span>&nbsp;</span><strong style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4; font-size: 1em; font-weight: 700;">SHA-1: 3dbd91aa2b70c7d5cc71b2c465ce3583a13dea79</strong><span>&nbsp;</span>(thread-reference-20191113)</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">ID 91270: CoapSecure support added</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">ID 96955: Fix for entering standby mode while Thread stop procedure is called. New system command SHCI_C2_802_15_4_DeInit added</li></ul></li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Zigbee:<ul style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;"><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Clarification of PICS information inside the Clusters API interface include files&nbsp;</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">New directory structure used to store Clusters API interfaces include files</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Range input parameter checks added when managing Clusters</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">ZCL
+Commissioning Cluster improvement&nbsp;to allow joining commissioning
+network and sending unicast frames (as well as Inter-PAN)</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Support
+of a Custom Cluster (Refer to the appropriate applications to see how
+to use it : Zigbee_custom_ls_Server_Coord, and
+Zigbee_custom_ls_Client_Router)</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Support
+of new APIs to control &nbsp;TouchLink features (Refer to
+&nbsp;zcl.touchlink.h file for more details). Adding of TouchLink
+utility commands</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Minor fixes in DRLC, Voice over Zigbee &amp; RSSI location Clusters</li></ul></li></ul><ol></ol>
</body></html> \ No newline at end of file
diff --git a/_htmresc/ReleaseNotes_Patch.html b/_htmresc/ReleaseNotes_Patch.html
index f2374db4c..cb29873c5 100644
--- a/_htmresc/ReleaseNotes_Patch.html
+++ b/_htmresc/ReleaseNotes_Patch.html
@@ -1,10 +1,6 @@
-<!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"><head></head>
-<body>
-<font color="blue"><b><u>STM32CubeWB Firmware
-Package V1.10.1 / 21-January-2021</u></b></font><br>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head></head>
+<body><font color="blue"><b><u>STM32CubeWB Firmware Package V1.11.1</u></b></font><font color="blue"><b><u> / 02-April-2021</u></b></font><br>
<br>
-<b><u>Main Changes</u></b><br>
-<ul style="color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;">
-<li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;"><span style="color: black; font-family: Verdana,sans-serif; font-size: 10pt;"></span><strong style="background-color: transparent; color: rgb(17, 17, 17); font-size: 14px; font-style: normal; font-variant: normal; font-weight: 700; letter-spacing: normal; line-height: 19.6px; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Firmware
-Upgrade Services (FUS) V1.1.2</strong><span style="color: black; font-family: Verdana,sans-serif; font-size: 10pt;">:</span></li><ul><li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;"><span style="color: black; font-family: Verdana,sans-serif; font-size: 10pt;">Add protection from PKA attack:</span></li></ul><ul><ul><li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;"><span style="color: black; font-family: Verdana,sans-serif; font-size: 10pt;">Allow larger image upgrade with lower flash size</span></li></ul></ul><ul><ul><li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;"><span style="color: black; font-family: Verdana,sans-serif; font-size: 10pt;">Add protection from main attack</span></li></ul></ul><ul><ul><li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;"><span style="color: black; font-family: Verdana,sans-serif; font-size: 10pt;">Add backup user keys after FUS upgrade</span><span style="color: black; font-family: Verdana,sans-serif; font-size: 10pt;"></span></li></ul></ul></ul></body></html> \ No newline at end of file
+<b><u>Main Changes</u></b><span style="font-family: Verdana;"><br></span><h3 id="patch-release-for-fus-security-update-and-wireless-protocols-corrections" style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.2; font-weight: 500; color: rgb(17, 17, 17); font-style: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">Patch Release for FUS security update and Wireless protocols corrections</h3><ul style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4; font-size: 14px; color: rgb(17, 17, 17); font-style: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">FUS:<ul style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;"><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Add functional security enhancements</li></ul></li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">BLE:<ul style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;"><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">STM32WB15/WB10 VCO settings update to enhance RX path</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Data throughput enhancement on all projects</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Ability to reconnect in secure mode on a 2nd link if master database is clear during 1st link connection</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Resolution of ACI_GAP_BOND_LOST_Event timeout in case Allow_rebond is not sent</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">PTS issue ticket done CASE0070853: CID value should be ok above 1000</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">BLE_Ota application improved to&nbsp;be SBSFU ready and support Flash driver use / SEM7 flash activity control</li></ul></li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Thread:<ul style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;"><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Power consumption enhancement when running above 3mn in&nbsp;Thread_SED_Coap_Multicast example &nbsp;&nbsp;</li></ul></li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Zigbee:<ul style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;"><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Allow Zigbee stack to go in low power mode after SF timer wrap-around</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Add support of 2 new Zigbee FreeRTOS example applications (IAR only):<ul style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;"><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Client_Router_FreeRTOS</li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">/P-NUCLEO-WB55.Nucleo/Applications/Zigbee/Zigbee_OnOff_Server_Coord_FreeRTOS &nbsp;</li></ul></li></ul></li><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">MAC 802.15.4:<ul style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;"><li style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4;">Allow the user to set the PLL<span>&nbsp;</span><span class="citation" data-cites="64MHz" style="font-family: -apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Ubuntu,&quot;Helvetica Neue&quot;,Helvetica,sans-serif; line-height: 1.4; font-size: 1em;">@64MHz</span><span>&nbsp;</span>for CM4</li></ul></li></ul><p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 67.65pt; text-indent: -18pt; line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;; color: black;"><o:p></o:p></span></p>
+</body></html> \ No newline at end of file
diff --git a/package.xml b/package.xml
index 26283f4bd..3a0cd0618 100644
--- a/package.xml
+++ b/package.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<Package DBVersion="2.0">
- <PackDescription Release="FW.WB.1.11.0">
- <Note Release="ReleaseNotes.html"/>
+ <PackDescription Release="FW.WB.1.11.0" Patch="FW.WB.1.11.1">
+ <Note Release="ReleaseNotes.html" Patch="ReleaseNotes_Patch.html"/>
</PackDescription>
</Package> \ No newline at end of file