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/STM32WB5MM-DK/Applications/BLE/BLE_HeartRate/STM32_WPAN/App/app_ble.c')
-rw-r--r--Projects/STM32WB5MM-DK/Applications/BLE/BLE_HeartRate/STM32_WPAN/App/app_ble.c162
1 files changed, 107 insertions, 55 deletions
diff --git a/Projects/STM32WB5MM-DK/Applications/BLE/BLE_HeartRate/STM32_WPAN/App/app_ble.c b/Projects/STM32WB5MM-DK/Applications/BLE/BLE_HeartRate/STM32_WPAN/App/app_ble.c
index eda16b71a..6f4eca2f1 100644
--- a/Projects/STM32WB5MM-DK/Applications/BLE/BLE_HeartRate/STM32_WPAN/App/app_ble.c
+++ b/Projects/STM32WB5MM-DK/Applications/BLE/BLE_HeartRate/STM32_WPAN/App/app_ble.c
@@ -1,19 +1,18 @@
/* USER CODE BEGIN Header */
/**
- ******************************************************************************
- * File Name : App/app_ble.c
- * Description : Application file for BLE Middleware.
- *
- *****************************************************************************
+ ******************************************************************************
+ * @file app_ble.c
+ * @author MCD Application Team
+ * @brief BLE Application
+ ******************************************************************************
* @attention
*
- * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
- * All rights reserved.</center></h2>
+ * Copyright (c) 2021 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
+ * 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.
*
******************************************************************************
*/
@@ -252,6 +251,12 @@ static void Adv_Update( void );
/* USER CODE END PFP */
+/* External variables --------------------------------------------------------*/
+
+/* USER CODE BEGIN EV */
+
+/* USER CODE END EV */
+
/* Functions Definition ------------------------------------------------------*/
void APP_BLE_Init( void )
{
@@ -268,26 +273,27 @@ void APP_BLE_Init( void )
{
{{0,0,0}}, /**< Header unused */
{0, /** pBleBufferAddress not used */
- 0, /** BleBufferSize not used */
- CFG_BLE_NUM_GATT_ATTRIBUTES,
- CFG_BLE_NUM_GATT_SERVICES,
- CFG_BLE_ATT_VALUE_ARRAY_SIZE,
- CFG_BLE_NUM_LINK,
- CFG_BLE_DATA_LENGTH_EXTENSION,
- CFG_BLE_PREPARE_WRITE_LIST_SIZE,
- CFG_BLE_MBLOCK_COUNT,
- CFG_BLE_MAX_ATT_MTU,
- CFG_BLE_SLAVE_SCA,
- CFG_BLE_MASTER_SCA,
- CFG_BLE_LSE_SOURCE,
- CFG_BLE_MAX_CONN_EVENT_LENGTH,
- CFG_BLE_HSE_STARTUP_TIME,
- CFG_BLE_VITERBI_MODE,
- CFG_BLE_OPTIONS,
- 0,
- CFG_BLE_MAX_COC_INITIATOR_NBR,
- CFG_BLE_MIN_TX_POWER,
- CFG_BLE_MAX_TX_POWER}
+ 0, /** BleBufferSize not used */
+ CFG_BLE_NUM_GATT_ATTRIBUTES,
+ CFG_BLE_NUM_GATT_SERVICES,
+ CFG_BLE_ATT_VALUE_ARRAY_SIZE,
+ CFG_BLE_NUM_LINK,
+ CFG_BLE_DATA_LENGTH_EXTENSION,
+ CFG_BLE_PREPARE_WRITE_LIST_SIZE,
+ CFG_BLE_MBLOCK_COUNT,
+ CFG_BLE_MAX_ATT_MTU,
+ CFG_BLE_SLAVE_SCA,
+ CFG_BLE_MASTER_SCA,
+ CFG_BLE_LSE_SOURCE,
+ CFG_BLE_MAX_CONN_EVENT_LENGTH,
+ CFG_BLE_HSE_STARTUP_TIME,
+ CFG_BLE_VITERBI_MODE,
+ CFG_BLE_OPTIONS,
+ 0,
+ CFG_BLE_MAX_COC_INITIATOR_NBR,
+ CFG_BLE_MIN_TX_POWER,
+ CFG_BLE_MAX_TX_POWER,
+ CFG_BLE_RX_MODEL_CONFIG}
};
/**
@@ -377,7 +383,7 @@ void APP_BLE_Init( void )
/* USER CODE BEGIN APP_BLE_Init_2 */
LED_Off();
- /* Displays the board informations: MAC Address, Stack version, FUS version*/
+ /* Displays the board information: MAC Address, Stack version, FUS version*/
if (SHCI_GetWirelessFwInfo(p_wireless_info) != SHCI_Success)
{
// Error
@@ -708,7 +714,6 @@ static void Ble_Hci_Gap_Gatt_Init(void){
uint8_t role;
uint16_t gap_service_handle, gap_dev_name_char_handle, gap_appearance_char_handle;
const uint8_t *bd_addr;
- uint32_t srd_bd_addr[2];
uint16_t appearance[1] = { BLE_CFG_GAP_APPEARANCE };
/**
@@ -726,6 +731,7 @@ static void Ble_Hci_Gap_Gatt_Init(void){
CONFIG_DATA_PUBADDR_LEN,
(uint8_t*) bd_addr);
+#if (CFG_BLE_ADDRESS_TYPE == PUBLIC_ADDR)
/* BLE MAC in ADV Packet */
manuf_data[ sizeof(manuf_data)-6] = bd_addr[5];
manuf_data[ sizeof(manuf_data)-5] = bd_addr[4];
@@ -733,6 +739,7 @@ static void Ble_Hci_Gap_Gatt_Init(void){
manuf_data[ sizeof(manuf_data)-3] = bd_addr[2];
manuf_data[ sizeof(manuf_data)-2] = bd_addr[1];
manuf_data[ sizeof(manuf_data)-1] = bd_addr[0];
+#endif
/**
* Write Identity root key used to derive LTK and CSRK
@@ -741,21 +748,12 @@ static void Ble_Hci_Gap_Gatt_Init(void){
CONFIG_DATA_IR_LEN,
(uint8_t*) BLE_CFG_IR_VALUE);
- /**
+ /**
* Write Encryption root key used to derive LTK and CSRK
*/
aci_hal_write_config_data(CONFIG_DATA_ER_OFFSET,
- CONFIG_DATA_ER_LEN,
- (uint8_t*) BLE_CFG_ER_VALUE);
-
- /**
- * Write random bd_address
- */
- /* random_bd_address = R_bd_address;
- aci_hal_write_config_data(CONFIG_DATA_RANDOM_ADDRESS_WR,
- CONFIG_DATA_RANDOM_ADDRESS_LEN,
- (uint8_t*) random_bd_address);
- */
+ CONFIG_DATA_ER_LEN,
+ (uint8_t*) BLE_CFG_ER_VALUE);
/**
* Static random Address
@@ -763,19 +761,65 @@ static void Ble_Hci_Gap_Gatt_Init(void){
* The lowest 32bits is read from the UDN to differentiate between devices
* The RNG may be used to provide a random number on each power on
*/
- srd_bd_addr[1] = 0x0000ED6E;
- srd_bd_addr[0] = LL_FLASH_GetUDN( );
+#if defined(CFG_STATIC_RANDOM_ADDRESS)
+ srd_bd_addr[0] = CFG_STATIC_RANDOM_ADDRESS & 0xFFFFFFFF;
+ srd_bd_addr[1] = (uint32_t)((uint64_t)CFG_STATIC_RANDOM_ADDRESS >> 32);
+ srd_bd_addr[1] |= 0xC000; /* The two upper bits shall be set to 1 */
+#elif (CFG_BLE_ADDRESS_TYPE == RANDOM_ADDR)
+ /* Get RNG semaphore */
+ while( LL_HSEM_1StepLock( HSEM, CFG_HW_RNG_SEMID ) );
+
+ /* Enable RNG */
+ __HAL_RNG_ENABLE(&hrng);
+
+ /* Enable HSI48 oscillator */
+ LL_RCC_HSI48_Enable();
+ /* Wait until HSI48 is ready */
+ while( ! LL_RCC_HSI48_IsReady( ) );
+
+ if (HAL_RNG_GenerateRandomNumber(&hrng, &srd_bd_addr[1]) != HAL_OK)
+ {
+ /* Random number generation error */
+ Error_Handler();
+ }
+ if (HAL_RNG_GenerateRandomNumber(&hrng, &srd_bd_addr[0]) != HAL_OK)
+ {
+ /* Random number generation error */
+ Error_Handler();
+ }
+ srd_bd_addr[1] |= 0xC000; /* The two upper bits shall be set to 1 */
+
+ /* Disable HSI48 oscillator */
+ LL_RCC_HSI48_Disable();
+
+ /* Disable RNG */
+ __HAL_RNG_DISABLE(&hrng);
+
+ /* Release RNG semaphore */
+ LL_HSEM_ReleaseLock( HSEM, CFG_HW_RNG_SEMID, 0 );
+#endif
+
+#if (CFG_BLE_ADDRESS_TYPE == STATIC_RANDOM_ADDR)
+ /* BLE MAC in ADV Packet */
+ manuf_data[ sizeof(manuf_data)-6] = srd_bd_addr[1] >> 8 ;
+ manuf_data[ sizeof(manuf_data)-5] = srd_bd_addr[1];
+ manuf_data[ sizeof(manuf_data)-4] = srd_bd_addr[0] >> 24;
+ manuf_data[ sizeof(manuf_data)-3] = srd_bd_addr[0] >> 16;
+ manuf_data[ sizeof(manuf_data)-2] = srd_bd_addr[0] >> 8;
+ manuf_data[ sizeof(manuf_data)-1] = srd_bd_addr[0];
+
aci_hal_write_config_data( CONFIG_DATA_RANDOM_ADDRESS_OFFSET, CONFIG_DATA_RANDOM_ADDRESS_LEN, (uint8_t*)srd_bd_addr );
+#endif
/**
* Write Identity root key used to derive LTK and CSRK
*/
- aci_hal_write_config_data( CONFIG_DATA_IR_OFFSET, CONFIG_DATA_IR_LEN, (uint8_t*)BLE_CFG_IR_VALUE );
+ aci_hal_write_config_data( CONFIG_DATA_IR_OFFSET, CONFIG_DATA_IR_LEN, (uint8_t*)BLE_CFG_IR_VALUE );
- /**
+ /**
* Write Encryption root key used to derive LTK and CSRK
*/
- aci_hal_write_config_data( CONFIG_DATA_ER_OFFSET, CONFIG_DATA_ER_LEN, (uint8_t*)BLE_CFG_ER_VALUE );
+ aci_hal_write_config_data( CONFIG_DATA_ER_OFFSET, CONFIG_DATA_ER_LEN, (uint8_t*)BLE_CFG_ER_VALUE );
/**
* Set TX Power to 0dBm.
@@ -803,9 +847,16 @@ static void Ble_Hci_Gap_Gatt_Init(void){
if (role > 0)
{
const char *name = "HRSTM";
- aci_gap_init(role, 0,
+ aci_gap_init(role,
+#if ((CFG_BLE_ADDRESS_TYPE == RESOLVABLE_PRIVATE_ADDR) || (CFG_BLE_ADDRESS_TYPE == NON_RESOLVABLE_PRIVATE_ADDR))
+ 2,
+#else
+ 0,
+#endif
APPBLE_GAP_DEVICE_NAME_LENGTH,
- &gap_service_handle, &gap_dev_name_char_handle, &gap_appearance_char_handle);
+ &gap_service_handle,
+ &gap_dev_name_char_handle,
+ &gap_appearance_char_handle);
if (aci_gatt_update_char_value(gap_service_handle, gap_dev_name_char_handle, 0, strlen(name), (uint8_t *) name))
{
@@ -850,7 +901,7 @@ static void Ble_Hci_Gap_Gatt_Init(void){
BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.encryptionKeySizeMax,
BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.Use_Fixed_Pin,
BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.Fixed_Pin,
- PUBLIC_ADDR
+ CFG_BLE_ADDRESS_TYPE
);
/**
@@ -908,7 +959,7 @@ static void Adv_Request(APP_BLE_ConnStatus_t New_Status)
ADV_IND,
Min_Inter,
Max_Inter,
- PUBLIC_ADDR,
+ CFG_BLE_ADDRESS_TYPE,
NO_WHITE_LIST_USE, /* use white list */
sizeof(local_name),
(uint8_t*) &local_name,
@@ -1077,6 +1128,8 @@ static void BLE_UserEvtRx( void * pPayload )
{
pParam->status = HCI_TL_UserEventFlow_Disable;
}
+
+ return;
}
static void BLE_StatusNot( HCI_TL_CmdStatus_t status )
@@ -1119,4 +1172,3 @@ void SVCCTL_ResumeUserEventFlow( void )
/* USER CODE BEGIN FD_WRAP_FUNCTIONS */
/* USER CODE END FD_WRAP_FUNCTIONS */
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/