diff options
Diffstat (limited to 'Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_RfWithFlash/Core/Src/app_entry.c')
-rw-r--r-- | Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_RfWithFlash/Core/Src/app_entry.c | 415 |
1 files changed, 234 insertions, 181 deletions
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_RfWithFlash/Core/Src/app_entry.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_RfWithFlash/Core/Src/app_entry.c index 5a0b5f1bb..40bc20263 100644 --- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_RfWithFlash/Core/Src/app_entry.c +++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_RfWithFlash/Core/Src/app_entry.c @@ -1,22 +1,21 @@ /* USER CODE BEGIN Header */ /** - ****************************************************************************** - * @file app_entry.c - * @author MCD Application Team - * @brief Entry point of the Application - ****************************************************************************** - * @attention - * - * <h2><center>© Copyright (c) 2019 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 - * - ****************************************************************************** - */ + ****************************************************************************** +* @file app_entry.c +* @author MCD Application Team +* @brief Entry point of the Application + ****************************************************************************** + * @attention + * + * Copyright (c) 2019-2021 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ @@ -72,6 +71,9 @@ 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 * pPayload ); +static void APPE_SysEvtError( void * pPayload); + #if (CFG_HW_LPUART1_ENABLED == 1) extern void MX_LPUART1_UART_Init(void); #endif @@ -88,72 +90,72 @@ static void Button_Init( void ); 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 */ + + /* USER CODE BEGIN APPE_Init_1 */ APPD_Init(); /** - * 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 - */ + * 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(); -/* USER CODE END APPE_Init_1 */ + /* 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; + * 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 - * - *************************************************************/ +* +* LOCAL FUNCTIONS +* +*************************************************************/ /** - * @brief Configure the system for power optimization - * - * @note This API configures the system to be ready for low power mode - * - * @param None - * @retval None - */ +* @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 - */ + * 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 - */ + * Enable USB power + */ HAL_PWREx_EnableVddUSB(); #endif - + return; } @@ -163,22 +165,22 @@ static void appe_Tl_Init( void ) SHCI_TL_HciInitConf_t SHci_Tl_Init_Conf; /**< Reference table initialization */ TL_Init(); - + /**< System channel initialization */ UTIL_SEQ_RegTask( 1<< CFG_TASK_SYSTEM_HCI_ASYNCH_EVT_ID, UTIL_SEQ_RFU, shci_user_evt_proc ); 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 = BleSpareEvtBuffer; 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; } @@ -189,107 +191,159 @@ static void APPE_SysStatusNot( SHCI_TL_CmdStatus_t status ) } /** - * 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 - */ +* 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; - SHCI_C2_CONFIG_Cmd_Param_t config_param = {0}; WirelessFwInfo_t WirelessInfo; - + p_sys_event = (TL_AsynchEvt_t*)(((tSHCI_UserEvtRxParam*)pPayload)->pckt->evtserial.evt.payload); - + /* Read the firmware version of both the wireless firmware and the FUS */ SHCI_GetWirelessFwInfo( &WirelessInfo ); APP_DBG_MSG("Wireless Firmware version %d.%d.%d\n", WirelessInfo.VersionMajor, WirelessInfo.VersionMinor, WirelessInfo.VersionSub); APP_DBG_MSG("Wireless Firmware build %d\n", WirelessInfo.VersionReleaseType); - APP_DBG_MSG("FUS version %d.%d.%d\n\n", WirelessInfo.FusVersionMinor, WirelessInfo.FusVersionMinor, WirelessInfo.FusVersionSub); - + APP_DBG_MSG("FUS version %d.%d.%d\n\n", WirelessInfo.FusVersionMajor, WirelessInfo.FusVersionMinor, WirelessInfo.FusVersionSub); + switch(p_sys_event->subevtcode) { - case SHCI_SUB_EVT_CODE_READY: - if(((SHCI_C2_Ready_Evt_t*)p_sys_event->payload)->sysevt_ready_rsp == WIRELESS_FW_RUNNING) - { - /** - * The wireless firmware is running on the CPU2 - */ - APP_DBG_MSG("SHCI_SUB_EVT_CODE_READY - WIRELESS_FW_RUNNING \n"); - - /* Traces channel initialization */ - APPD_EnableCPU2( ); - - /* Enable all events Notification */ - config_param.PayloadCmdSize = SHCI_C2_CONFIG_PAYLOAD_CMD_SIZE; - config_param.EvtMask1 = SHCI_C2_CONFIG_EVTMASK1_BIT0_ERROR_NOTIF_ENABLE - + SHCI_C2_CONFIG_EVTMASK1_BIT1_BLE_NVM_RAM_UPDATE_ENABLE - + SHCI_C2_CONFIG_EVTMASK1_BIT2_THREAD_NVM_RAM_UPDATE_ENABLE - + SHCI_C2_CONFIG_EVTMASK1_BIT3_NVM_START_WRITE_ENABLE - + SHCI_C2_CONFIG_EVTMASK1_BIT4_NVM_END_WRITE_ENABLE - + SHCI_C2_CONFIG_EVTMASK1_BIT5_NVM_START_ERASE_ENABLE - + SHCI_C2_CONFIG_EVTMASK1_BIT6_NVM_END_ERASE_ENABLE; - (void)SHCI_C2_Config(&config_param); - - APP_BLE_Init( ); - UTIL_LPM_SetOffMode(1U << CFG_LPM_APP, UTIL_LPM_ENABLE); - - } - else - { - /** - * The FUS firmware is running on the CPU2 - * In the scope of this application, there should be no case when we get here - */ - APP_DBG_MSG("SHCI_SUB_EVT_CODE_READY - FUS_FW_RUNNING \n"); - - /* The packet shall not be released as this is not supported by the FUS */ - ((tSHCI_UserEvtRxParam*)pPayload)->status = SHCI_TL_UserEventFlow_Disable; - } - break; - - case SHCI_SUB_EVT_ERROR_NOTIF: - APP_DBG_MSG("SHCI_SUB_EVT_ERROR_NOTIF WITH REASON %x \n", ((SHCI_C2_ErrorNotif_Evt_t*)p_sys_event->payload)->errorCode ); - break; - - case SHCI_SUB_EVT_BLE_NVM_RAM_UPDATE: - APP_DBG_MSG("SHCI_SUB_EVT_BLE_NVM_RAM_UPDATE : StartAddress = %lx , Size = %ld\n", - ((SHCI_C2_BleNvmRamUpdate_Evt_t*)p_sys_event->payload)->StartAddress, - ((SHCI_C2_BleNvmRamUpdate_Evt_t*)p_sys_event->payload)->Size); - break; - - case SHCI_SUB_EVT_THREAD_NVM_RAM_UPDATE: - APP_DBG_MSG("SHCI_SUB_EVT_THREAD_NVM_RAM_UPDATE : StartAddress = %lx , Size = %ld\n", - ((SHCI_C2_ThreadNvmRamUpdate_Evt_t*)p_sys_event->payload)->StartAddress, - ((SHCI_C2_ThreadNvmRamUpdate_Evt_t*)p_sys_event->payload)->Size); - break; - - case SHCI_SUB_EVT_NVM_START_WRITE: - APP_DBG_MSG("SHCI_SUB_EVT_NVM_START_WRITE : NumberOfWords = %ld\n", - ((SHCI_C2_NvmStartWrite_Evt_t*)p_sys_event->payload)->NumberOfWords); - break; - - case SHCI_SUB_EVT_NVM_END_WRITE: - APP_DBG_MSG("SHCI_SUB_EVT_NVM_END_WRITE\n"); - break; - - case SHCI_SUB_EVT_NVM_START_ERASE: - APP_DBG_MSG("SHCI_SUB_EVT_NVM_START_WRITE : NumberOfSectors = %ld\n", - ((SHCI_C2_NvmStartErase_Evt_t*)p_sys_event->payload)->NumberOfSectors); - break; - - case SHCI_SUB_EVT_NVM_END_ERASE: - APP_DBG_MSG("SHCI_SUB_EVT_NVM_END_ERASE\n"); - break; - - default: - break; + case SHCI_SUB_EVT_CODE_READY: + APPE_SysEvtReadyProcessing(pPayload); + break; + + case SHCI_SUB_EVT_ERROR_NOTIF: + APPE_SysEvtError(pPayload); + break; + + case SHCI_SUB_EVT_BLE_NVM_RAM_UPDATE: + APP_DBG_MSG("-- BLE NVM RAM HAS BEEN UPDATED BY CMO+ \n"); + APP_DBG_MSG("SHCI_SUB_EVT_BLE_NVM_RAM_UPDATE : StartAddress = %lx , Size = %ld\n", + ((SHCI_C2_BleNvmRamUpdate_Evt_t*)p_sys_event->payload)->StartAddress, + ((SHCI_C2_BleNvmRamUpdate_Evt_t*)p_sys_event->payload)->Size); + break; + + case SHCI_SUB_EVT_NVM_START_WRITE: + APP_DBG_MSG("SHCI_SUB_EVT_NVM_START_WRITE : NumberOfWords = %ld\n", + ((SHCI_C2_NvmStartWrite_Evt_t*)p_sys_event->payload)->NumberOfWords); + break; + + case SHCI_SUB_EVT_NVM_END_WRITE: + APP_DBG_MSG("SHCI_SUB_EVT_NVM_END_WRITE\n"); + break; + + case SHCI_SUB_EVT_NVM_START_ERASE: + APP_DBG_MSG("SHCI_SUB_EVT_NVM_START_ERASE : NumberOfSectors = %ld\n", + ((SHCI_C2_NvmStartErase_Evt_t*)p_sys_event->payload)->NumberOfSectors); + break; + + case SHCI_SUB_EVT_NVM_END_ERASE: + APP_DBG_MSG("SHCI_SUB_EVT_NVM_END_ERASE\n"); + break; + + default: + break; } + + return; +} +/** +* @brief Notify when ready system event from the M0 firmware +*/ +static void APPE_SysEvtReadyProcessing( void * pPayload ) +{ + TL_AsynchEvt_t *p_sys_event; + SHCI_C2_Ready_Evt_t *p_sys_ready_event; + + SHCI_C2_CONFIG_Cmd_Param_t config_param = {0}; + uint32_t RevisionID=0; + + p_sys_event = (TL_AsynchEvt_t*)(((tSHCI_UserEvtRxParam*)pPayload)->pckt->evtserial.evt.payload); + p_sys_ready_event = (SHCI_C2_Ready_Evt_t*) p_sys_event->payload; + + if(p_sys_ready_event->sysevt_ready_rsp == WIRELESS_FW_RUNNING) + { + /** + * The wireless firmware is running on the CPU2 + */ + APP_DBG_MSG("SHCI_SUB_EVT_CODE_READY - WIRELESS_FW_RUNNING \n"); + + /* Traces channel initialization */ + APPD_EnableCPU2( ); + + /* Enable all events Notification */ + config_param.PayloadCmdSize = SHCI_C2_CONFIG_PAYLOAD_CMD_SIZE; + config_param.EvtMask1 = SHCI_C2_CONFIG_EVTMASK1_BIT0_ERROR_NOTIF_ENABLE + + SHCI_C2_CONFIG_EVTMASK1_BIT1_BLE_NVM_RAM_UPDATE_ENABLE + + SHCI_C2_CONFIG_EVTMASK1_BIT2_THREAD_NVM_RAM_UPDATE_ENABLE + + SHCI_C2_CONFIG_EVTMASK1_BIT3_NVM_START_WRITE_ENABLE + + SHCI_C2_CONFIG_EVTMASK1_BIT4_NVM_END_WRITE_ENABLE + + SHCI_C2_CONFIG_EVTMASK1_BIT5_NVM_START_ERASE_ENABLE + + SHCI_C2_CONFIG_EVTMASK1_BIT6_NVM_END_ERASE_ENABLE; + + + /* Read revision identifier */ + /** + * @brief Return the device revision identifier + * @note This field indicates the revision of the device. + * @rmtoll DBGMCU_IDCODE REV_ID LL_DBGMCU_GetRevisionID + * @retval Values between Min_Data=0x00 and Max_Data=0xFFFF + */ + RevisionID = LL_DBGMCU_GetRevisionID(); + + APP_DBG_MSG("DBGMCU_GetRevisionID= %lx \n\n", RevisionID); + + config_param.RevisionID = RevisionID; + (void)SHCI_C2_Config(&config_param); + + APP_BLE_Init( ); + UTIL_LPM_SetOffMode(1U << CFG_LPM_APP, UTIL_LPM_ENABLE); + + } + else if (p_sys_ready_event->sysevt_ready_rsp == FUS_FW_RUNNING) + { + /** + * The FUS firmware is running on the CPU2 + * In the scope of this application, there should be no case when we get here + */ + APP_DBG_MSG("SHCI_SUB_EVT_CODE_READY - FUS_FW_RUNNING \n"); + + /* The packet shall not be released as this is not supported by the FUS */ + ((tSHCI_UserEvtRxParam*)pPayload)->status = SHCI_TL_UserEventFlow_Disable; + + } else { + + APP_DBG_MSG("SHCI_SUB_EVT_CODE_READY – UNEXPECTED CASE \n"); + } + return; +} + +/** +* @brief Notify a system error coming from the M0 firmware +*/ +static void APPE_SysEvtError( void * pPayload) +{ + TL_AsynchEvt_t *p_sys_event; + SCHI_SystemErrCode_t *p_sys_error_code; + + p_sys_event = (TL_AsynchEvt_t*)(((tSHCI_UserEvtRxParam*)pPayload)->pckt->evtserial.evt.payload); + p_sys_error_code = (SCHI_SystemErrCode_t*) p_sys_event->payload; + + APP_DBG_MSG("SHCI_SUB_EVT_ERROR_NOTIF WITH REASON %x \n",(*p_sys_error_code)); + + if ((*p_sys_error_code) == ERR_BLE_INIT) { + /* Error during BLE stack initialization */ + APP_DBG_MSG("SHCI_SUB_EVT_ERROR_NOTIF WITH REASON – ERR_BLE_INIT \n"); + } else { + APP_DBG_MSG("SHCI_SUB_EVT_ERROR_NOTIF WITH REASON – BLE ERROR \n"); + } return; } @@ -298,16 +352,16 @@ static void Led_Init( void ) { #if (CFG_LED_SUPPORTED == 1) /** - * Leds Initialization - */ - + * Leds Initialization + */ + BSP_LED_Init(LED_BLUE); BSP_LED_Init(LED_GREEN); BSP_LED_Init(LED_RED); - + BSP_LED_On(LED_GREEN); #endif - + return; } @@ -315,23 +369,23 @@ static void Button_Init( void ) { #if (CFG_BUTTON_SUPPORTED == 1) /** - * Button Initialization - */ - + * 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 - * - *************************************************************/ +* +* WRAP FUNCTIONS +* +*************************************************************/ void UTIL_SEQ_Idle( void ) { @@ -342,12 +396,12 @@ void UTIL_SEQ_Idle( void ) } /** - * @brief This function is called by the scheduler each time an event - * is pending. - * - * @param evt_waited_bm : Event pending. - * @retval None - */ +* @brief This function is called by the scheduler each time an event +* is pending. +* +* @param evt_waited_bm : Event pending. +* @retval None +*/ void UTIL_SEQ_EvtIdle( UTIL_SEQ_bm_t task_id_bm, UTIL_SEQ_bm_t evt_waited_bm ) { UTIL_SEQ_Run( UTIL_SEQ_DEFAULT ); @@ -376,23 +430,22 @@ void HAL_GPIO_EXTI_Callback( uint16_t GPIO_Pin ) { switch (GPIO_Pin) { - case BUTTON_SW1_PIN: - APP_BLE_Key_Button1_Action(); - break; - - case BUTTON_SW2_PIN: - APP_BLE_Key_Button2_Action(); - break; - - case BUTTON_SW3_PIN: - APP_BLE_Key_Button3_Action(); - break; - - default: - break; - + case BUTTON_SW1_PIN: + APP_BLE_Key_Button1_Action(); + break; + + case BUTTON_SW2_PIN: + APP_BLE_Key_Button2_Action(); + break; + + case BUTTON_SW3_PIN: + APP_BLE_Key_Button3_Action(); + break; + + default: + break; + } return; } /* USER CODE END FD_WRAP_FUNCTIONS */ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |