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_BloodPressure/STM32_WPAN/App/app_ble.c')
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_BloodPressure/STM32_WPAN/App/app_ble.c131
1 files changed, 119 insertions, 12 deletions
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_BloodPressure/STM32_WPAN/App/app_ble.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_BloodPressure/STM32_WPAN/App/app_ble.c
index 08a877a01..348803b5d 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_BloodPressure/STM32_WPAN/App/app_ble.c
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_BloodPressure/STM32_WPAN/App/app_ble.c
@@ -206,7 +206,23 @@ static const uint8_t BLE_CFG_ER_VALUE[16] = CFG_BLE_ERK;
PLACE_IN_SECTION("BLE_APP_CONTEXT") static BleApplicationContext_t BleApplicationContext;
PLACE_IN_SECTION("BLE_APP_CONTEXT") static uint16_t AdvIntervalMin, AdvIntervalMax;
-static const char local_name[] = {AD_TYPE_COMPLETE_LOCAL_NAME ,'B','P','S','T','M'};
+static const char local_name[] = { AD_TYPE_COMPLETE_LOCAL_NAME ,'B','P','S','T','M'};
+uint8_t manuf_data[14] = {
+ sizeof(manuf_data)-1, AD_TYPE_MANUFACTURER_SPECIFIC_DATA,
+ 0x01/*SKD version */,
+ 0x00 /* Generic*/,
+ 0x00 /* GROUP A Feature */,
+ 0x00 /* GROUP A Feature */,
+ 0x00 /* GROUP B Feature */,
+ 0x00 /* GROUP B Feature */,
+ 0x00, /* BLE MAC start -MSB */
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00, /* BLE MAC stop */
+
+};
/* USER CODE BEGIN PV */
@@ -227,6 +243,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 )
{
@@ -306,6 +328,10 @@ void APP_BLE_Init( void )
*/
BLSAPP_Init();
+/* USER CODE BEGIN APP_BLE_Init_3 */
+
+/* USER CODE END APP_BLE_Init_3 */
+
/**
* Create timer to handle the connection state machine
*/
@@ -322,6 +348,9 @@ void APP_BLE_Init( void )
AdvIntervalMin = CFG_FAST_CONN_ADV_INTERVAL_MIN;
AdvIntervalMax = CFG_FAST_CONN_ADV_INTERVAL_MAX;
+ /**
+ * Start to Advertise to be connected by a Client
+ */
Adv_Request(APP_BLE_FAST_ADV);
/* USER CODE BEGIN APP_BLE_Init_2 */
@@ -474,17 +503,23 @@ SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt )
case ACI_GAP_LIMITED_DISCOVERABLE_VSEVT_CODE:
APP_DBG_MSG("\r\n\r** ACI_GAP_LIMITED_DISCOVERABLE_VSEVT_CODE \n");
break; /* ACI_GAP_LIMITED_DISCOVERABLE_VSEVT_CODE */
+
case ACI_GAP_PASS_KEY_REQ_VSEVT_CODE:
APP_DBG_MSG("\r\n\r** ACI_GAP_PASS_KEY_REQ_VSEVT_CODE \n");
+
aci_gap_pass_key_resp(BleApplicationContext.BleApplicationContext_legacy.connectionHandle,123456);
+
APP_DBG_MSG("\r\n\r** aci_gap_pass_key_resp \n");
break; /* ACI_GAP_PASS_KEY_REQ_VSEVT_CODE */
+
case ACI_GAP_AUTHORIZATION_REQ_VSEVT_CODE:
APP_DBG_MSG("\r\n\r** ACI_GAP_AUTHORIZATION_REQ_VSEVT_CODE \n");
break; /* ACI_GAP_AUTHORIZATION_REQ_VSEVT_CODE */
+
case ACI_GAP_SLAVE_SECURITY_INITIATED_VSEVT_CODE:
APP_DBG_MSG("\r\n\r** ACI_GAP_SLAVE_SECURITY_INITIATED_VSEVT_CODE \n");
break; /* ACI_GAP_SLAVE_SECURITY_INITIATED_VSEVT_CODE */
+
case ACI_GAP_BOND_LOST_VSEVT_CODE:
APP_DBG_MSG("\r\n\r** ACI_GAP_BOND_LOST_VSEVT_CODE \n");
aci_gap_allow_rebond(BleApplicationContext.BleApplicationContext_legacy.connectionHandle);
@@ -494,20 +529,24 @@ SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt )
case ACI_GAP_ADDR_NOT_RESOLVED_VSEVT_CODE:
APP_DBG_MSG("\r\n\r** ACI_GAP_ADDR_NOT_RESOLVED_VSEVT_CODE \n");
break; /* ACI_GAP_ADDR_NOT_RESOLVED_VSEVT_CODE */
+
case (ACI_GAP_KEYPRESS_NOTIFICATION_VSEVT_CODE):
APP_DBG_MSG("\r\n\r** ACI_GAP_KEYPRESS_NOTIFICATION_VSEVT_CODE\n");
break; /* ACI_GAP_KEYPRESS_NOTIFICATION_VSEVT_CODE */
+
case (ACI_GAP_NUMERIC_COMPARISON_VALUE_VSEVT_CODE):
APP_DBG_MSG("numeric_value = %ld\n",
((aci_gap_numeric_comparison_value_event_rp0 *)(blecore_evt->data))->Numeric_Value);
APP_DBG_MSG("Hex_value = %lx\n",
((aci_gap_numeric_comparison_value_event_rp0 *)(blecore_evt->data))->Numeric_Value);
- aci_gap_numeric_comparison_value_confirm_yesno(BleApplicationContext.BleApplicationContext_legacy.connectionHandle, 1); /* CONFIRM_YES = 1 */
+ aci_gap_numeric_comparison_value_confirm_yesno(BleApplicationContext.BleApplicationContext_legacy.connectionHandle, YES); /* CONFIRM_YES = 1 */
APP_DBG_MSG("\r\n\r** aci_gap_numeric_comparison_value_confirm_yesno-->YES \n");
break;
+
case (ACI_GAP_PAIRING_COMPLETE_VSEVT_CODE):
{
pairing_complete = (aci_gap_pairing_complete_event_rp0*)blecore_evt->data;
+
APP_DBG_MSG("BLE_CTRL_App_Notification: ACI_GAP_PAIRING_COMPLETE_VSEVT_CODE, pairing_complete->Status = %d\n",pairing_complete->Status);
if (pairing_complete->Status == 0)
{
@@ -519,6 +558,7 @@ SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt )
}
}
break;
+
/* USER CODE END ecode */
case ACI_GAP_PROC_COMPLETE_VSEVT_CODE:
APP_DBG_MSG("\r\n\r** ACI_GAP_PROC_COMPLETE_VSEVT_CODE \n");
@@ -555,15 +595,18 @@ APP_BLE_ConnStatus_t APP_BLE_Get_Server_Connection_Status(void)
/* USER CODE BEGIN FD*/
void APP_BLE_Key_Button1_Action(void)
{
+
}
void APP_BLE_Key_Button2_Action(void)
{
+
}
void APP_BLE_Key_Button3_Action(void)
{
}
+
/* USER CODE END FD*/
/*************************************************************
*
@@ -586,7 +629,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 };
/**
@@ -604,25 +646,81 @@ 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];
+ manuf_data[ sizeof(manuf_data)-4] = bd_addr[3];
+ 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
+
/**
* Static random Address
* The two upper bits shall be set to 1
* 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.
@@ -650,9 +748,16 @@ static void Ble_Hci_Gap_Gatt_Init(void){
if (role > 0)
{
const char *name = "BPSTM";
- 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))
{
@@ -692,7 +797,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
);
/**
@@ -750,7 +855,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,
@@ -759,6 +864,8 @@ static void Adv_Request(APP_BLE_ConnStatus_t New_Status)
0,
0);
+ /* Update Advertising data */
+ ret = aci_gap_update_adv_data(sizeof(manuf_data), (uint8_t*) manuf_data);
if (ret == BLE_STATUS_SUCCESS)
{
if (New_Status == APP_BLE_FAST_ADV)