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:
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.c415
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>&copy; 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****/