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_p2pServer_ota/STM32_WPAN/App/app_ble.c')
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer_ota/STM32_WPAN/App/app_ble.c126
1 files changed, 70 insertions, 56 deletions
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 27a3dcc39..350f2a76a 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
@@ -232,7 +232,7 @@ P2PS_APP_ConnHandle_Not_evt_t handleNotification;
#define SIZE_TAB_CONN_INT 2
float tab_conn_interval[SIZE_TAB_CONN_INT] = {50, 1000} ; /* ms */
uint8_t index_con_int, mutex;
-#endif
+#endif
/**
* Advertising Data
@@ -370,6 +370,7 @@ static void Adv_Cancel_Req( void );
static void Switch_OFF_GPIO( void );
#if(L2CAP_REQUEST_NEW_CONN_PARAM != 0)
static void BLE_SVC_L2CAP_Conn_Update(uint16_t Connection_Handle);
+static void Connection_Interval_Update_Req( void );
#endif
/* USER CODE BEGIN PFP */
@@ -444,15 +445,19 @@ void APP_BLE_Init( void )
* From here, all initialization are BLE application specific
*/
UTIL_SEQ_RegTask( 1<<CFG_TASK_ADV_CANCEL_ID, UTIL_SEQ_RFU, Adv_Cancel);
+#if (L2CAP_REQUEST_NEW_CONN_PARAM != 0 )
+ UTIL_SEQ_RegTask( 1<<CFG_TASK_CONN_UPDATE_REG_ID, UTIL_SEQ_RFU, Connection_Interval_Update_Req);
+#endif
+
/**
* Initialization of ADV - Ad Manufacturer Element - Support OTA Bit Mask
*/
-#if(BLE_CFG_OTA_REBOOT_CHAR != 0)
- manuf_data[sizeof(manuf_data)-8] = CFG_FEATURE_OTA_REBOOT;
+#if(BLE_CFG_OTA_REBOOT_CHAR != 0)
+ manuf_data[sizeof(manuf_data)-8] = CFG_FEATURE_OTA_REBOOT;
#endif
#if(RADIO_ACTIVITY_EVENT != 0)
aci_hal_set_radio_activity_mask(0x0006);
-#endif
+#endif
#if (L2CAP_REQUEST_NEW_CONN_PARAM != 0 )
index_con_int = 0;
@@ -477,6 +482,7 @@ void APP_BLE_Init( void )
*/
BleApplicationContext.BleApplicationContext_legacy.advtServUUID[0] = NULL;
BleApplicationContext.BleApplicationContext_legacy.advtServUUIDlen = 0;
+
/* Initialize intervals for reconnexion without intervals update */
AdvIntervalMin = CFG_FAST_CONN_ADV_INTERVAL_MIN;
AdvIntervalMax = CFG_FAST_CONN_ADV_INTERVAL_MAX;
@@ -522,11 +528,10 @@ SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt )
Adv_Request(APP_BLE_FAST_ADV);
/*
* SPECIFIC to P2P Server APP
-*/
+*/
handleNotification.P2P_Evt_Opcode = PEER_DISCON_HANDLE_EVT;
handleNotification.ConnectionHandle = BleApplicationContext.BleApplicationContext_legacy.connectionHandle;
P2PS_APP_Notification(&handleNotification);
-
/* USER CODE BEGIN EVT_DISCONN_COMPLETE */
/* USER CODE END EVT_DISCONN_COMPLETE */
@@ -542,7 +547,7 @@ SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt )
/* USER CODE END EVT_LE_META_EVENT */
switch (meta_evt->subevent)
{
- case EVT_LE_CONN_UPDATE_COMPLETE:
+ case EVT_LE_CONN_UPDATE_COMPLETE:
APP_DBG_MSG("\r\n\r** CONNECTION UPDATE EVENT WITH CLIENT \n");
/* USER CODE BEGIN EVT_LE_CONN_UPDATE_COMPLETE */
@@ -560,10 +565,12 @@ SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt )
{
APP_DBG_MSG("EVT_UPDATE_PHY_COMPLETE, status nok \n");
}
+
ret = hci_le_read_phy(BleApplicationContext.BleApplicationContext_legacy.connectionHandle,&TX_PHY,&RX_PHY);
if (ret == BLE_STATUS_SUCCESS)
{
APP_DBG_MSG("Read_PHY success \n");
+
if ((TX_PHY == TX_2M) && (RX_PHY == RX_2M))
{
APP_DBG_MSG("PHY Param TX= %d, RX= %d \n", TX_PHY, RX_PHY);
@@ -582,33 +589,31 @@ SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt )
/* USER CODE END EVT_LE_PHY_UPDATE_COMPLETE */
break;
case EVT_LE_CONN_COMPLETE:
- {
+ {
hci_le_connection_complete_event_rp0 *connection_complete_event;
/**
* The connection is done, there is no need anymore to schedule the LP ADV
*/
connection_complete_event = (hci_le_connection_complete_event_rp0 *) meta_evt->data;
-
+
HW_TS_Stop(BleApplicationContext.Advertising_mgr_timer_Id);
- APP_DBG_MSG("EVT_LE_CONN_COMPLETE for connection handle 0x%x\n",
- connection_complete_event->Connection_Handle);
- if (BleApplicationContext.Device_Connection_Status == APP_BLE_LP_CONNECTING)
- {
- /* Connection as client */
- BleApplicationContext.Device_Connection_Status = APP_BLE_CONNECTED_CLIENT;
- }
- else
- {
- /* Connection as server */
- BleApplicationContext.Device_Connection_Status = APP_BLE_CONNECTED_SERVER;
- }
- BleApplicationContext.BleApplicationContext_legacy.connectionHandle =
- connection_complete_event->Connection_Handle;
- /*
+ APP_DBG_MSG("EVT_LE_CONN_COMPLETE for connection handle 0x%x\n", connection_complete_event->Connection_Handle);
+ if (BleApplicationContext.Device_Connection_Status == APP_BLE_LP_CONNECTING)
+ {
+ /* Connection as client */
+ BleApplicationContext.Device_Connection_Status = APP_BLE_CONNECTED_CLIENT;
+ }
+ else
+ {
+ /* Connection as server */
+ BleApplicationContext.Device_Connection_Status = APP_BLE_CONNECTED_SERVER;
+ }
+ BleApplicationContext.BleApplicationContext_legacy.connectionHandle = connection_complete_event->Connection_Handle;
+/*
* SPECIFIC to P2P Server APP
-*/
+*/
handleNotification.P2P_Evt_Opcode = PEER_CONN_HANDLE_EVT;
handleNotification.ConnectionHandle = BleApplicationContext.BleApplicationContext_legacy.connectionHandle;
P2PS_APP_Notification(&handleNotification);
@@ -621,7 +626,7 @@ SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt )
P2PS_APP_Notification(&handleNotification);
/**/
/* USER CODE END HCI_EVT_LE_CONN_COMPLETE */
- }
+ }
break; /* HCI_EVT_LE_CONN_COMPLETE */
default:
@@ -715,23 +720,23 @@ SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt )
/* USER CODE BEGIN EVT_BLUE_GAP_PROCEDURE_COMPLETE */
/* USER CODE END EVT_BLUE_GAP_PROCEDURE_COMPLETE */
- break; /* EVT_BLUE_GAP_PROCEDURE_COMPLETE */
+ break; /* EVT_BLUE_GAP_PROCEDURE_COMPLETE */
#if(RADIO_ACTIVITY_EVENT != 0)
- case 0x0004:
+ case ACI_HAL_END_OF_RADIO_ACTIVITY_VSEVT_CODE:
/* USER CODE BEGIN RADIO_ACTIVITY_EVENT*/
BSP_LED_On(LED_GREEN);
HW_TS_Start(BleApplicationContext.SwitchOffGPIO_timer_Id, (uint32_t)LED_ON_TIMEOUT);
/* USER CODE END RADIO_ACTIVITY_EVENT*/
- break; /* RADIO_ACTIVITY_EVENT */
+ break; /* RADIO_ACTIVITY_EVENT */
#endif
}
break; /* EVT_VENDOR */
- default:
- /* USER CODE BEGIN ECODE_DEFAULT*/
+ default:
+ /* USER CODE BEGIN ECODE_DEFAULT*/
- /* USER CODE END ECODE_DEFAULT*/
- break;
+ /* USER CODE END ECODE_DEFAULT*/
+ break;
}
return (SVCCTL_UserEvtFlowEnable);
@@ -751,13 +756,10 @@ void APP_BLE_Key_Button1_Action(void)
void APP_BLE_Key_Button2_Action(void)
{
#if (L2CAP_REQUEST_NEW_CONN_PARAM != 0 )
- if (BleApplicationContext.Device_Connection_Status != APP_BLE_FAST_ADV && BleApplicationContext.Device_Connection_Status != APP_BLE_IDLE)
- {
- BLE_SVC_L2CAP_Conn_Update(BleApplicationContext.BleApplicationContext_legacy.connectionHandle);
-
- }
+ UTIL_SEQ_SetTask( 1<<CFG_TASK_CONN_UPDATE_REG_ID, CFG_SCH_PRIO_0);
+#endif
+
return;
-#endif
}
void APP_BLE_Key_Button3_Action(void)
@@ -781,7 +783,7 @@ static void Ble_Tl_Init( void )
return;
}
- static void Ble_Hci_Gap_Gatt_Init(void){
+static void Ble_Hci_Gap_Gatt_Init(void){
uint8_t role;
uint8_t index;
@@ -812,7 +814,7 @@ static void Ble_Tl_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];
-
+
/**
* Static random Address
* The two upper bits shall be set to 1
@@ -858,7 +860,7 @@ static void Ble_Tl_Init( void )
if (role > 0)
{
- const char *name = "STM32WB";
+ const char *name = "P2PSRV1";
aci_gap_init(role, 0,
APPBLE_GAP_DEVICE_NAME_LENGTH,
&gap_service_handle, &gap_dev_name_char_handle, &gap_appearance_char_handle);
@@ -893,11 +895,11 @@ static void Ble_Tl_Init( void )
*/
BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.mitm_mode = CFG_MITM_PROTECTION;
BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.OOB_Data_Present = 0;
- BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.encryptionKeySizeMin = 8;
- BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.encryptionKeySizeMax = 16;
- BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.Use_Fixed_Pin = 1;
- BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.Fixed_Pin = 111111;
- BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.bonding_mode = 1;
+ BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.encryptionKeySizeMin = CFG_ENCRYPTION_KEY_SIZE_MIN;
+ BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.encryptionKeySizeMax = CFG_ENCRYPTION_KEY_SIZE_MAX;
+ BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.Use_Fixed_Pin = CFG_USED_FIXED_PIN;
+ BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.Fixed_Pin = CFG_FIXED_PIN;
+ BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.bonding_mode = CFG_BONDING_MODE;
for (index = 0; index < 16; index++)
{
BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.OOB_Data[index] = (uint8_t) index;
@@ -905,14 +907,14 @@ static void Ble_Tl_Init( void )
aci_gap_set_authentication_requirement(BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.bonding_mode,
BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.mitm_mode,
- 1,
- 0,
+ CFG_SC_SUPPORT,
+ CFG_KEYPRESS_NOTIFICATION_SUPPORT,
BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.encryptionKeySizeMin,
BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.encryptionKeySizeMax,
BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.Use_Fixed_Pin,
BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.Fixed_Pin,
-0
- );
+ PUBLIC_ADDR
+ );
/**
* Initialize whitelist
@@ -927,7 +929,7 @@ static void Adv_Request(APP_BLE_ConnStatus_t New_Status)
{
tBleStatus ret = BLE_STATUS_INVALID_PARAMS;
uint16_t Min_Inter, Max_Inter;
-
+
if (New_Status == APP_BLE_FAST_ADV)
{
Min_Inter = AdvIntervalMin;
@@ -946,6 +948,7 @@ static void Adv_Request(APP_BLE_ConnStatus_t New_Status)
HW_TS_Stop(BleApplicationContext.Advertising_mgr_timer_Id);
APP_DBG_MSG("First index in %d state \n", BleApplicationContext.Device_Connection_Status);
+
if ((New_Status == APP_BLE_LP_ADV)
&& ((BleApplicationContext.Device_Connection_Status == APP_BLE_FAST_ADV)
|| (BleApplicationContext.Device_Connection_Status == APP_BLE_LP_ADV)))
@@ -955,7 +958,7 @@ static void Adv_Request(APP_BLE_ConnStatus_t New_Status)
if (ret == BLE_STATUS_SUCCESS)
{
APP_DBG_MSG("Successfully Stopped Advertising \n");
- }
+ }
else
{
APP_DBG_MSG("Stop Advertising Failed , result: %d \n", ret);
@@ -976,10 +979,10 @@ static void Adv_Request(APP_BLE_ConnStatus_t New_Status)
BleApplicationContext.BleApplicationContext_legacy.advtServUUID,
0,
0);
+
/* Update Advertising data */
ret = aci_gap_update_adv_data(sizeof(manuf_data), (uint8_t*) manuf_data);
-
- if (ret == BLE_STATUS_SUCCESS)
+ if (ret == BLE_STATUS_SUCCESS)
{
if (New_Status == APP_BLE_FAST_ADV)
{
@@ -990,7 +993,7 @@ static void Adv_Request(APP_BLE_ConnStatus_t New_Status)
else
{
APP_DBG_MSG("Successfully Start Low Power Advertising \n");
- }
+ }
}
else
{
@@ -1141,6 +1144,17 @@ void BLE_SVC_L2CAP_Conn_Update(uint16_t Connection_Handle)
}
#endif
+#if (L2CAP_REQUEST_NEW_CONN_PARAM != 0 )
+static void Connection_Interval_Update_Req( void )
+{
+ if (BleApplicationContext.Device_Connection_Status != APP_BLE_FAST_ADV && BleApplicationContext.Device_Connection_Status != APP_BLE_IDLE)
+ {
+ BLE_SVC_L2CAP_Conn_Update(BleApplicationContext.BleApplicationContext_legacy.connectionHandle);
+ }
+ return;
+}
+#endif
+
/* USER CODE BEGIN FD_SPECIFIC_FUNCTIONS */
/* USER CODE END FD_SPECIFIC_FUNCTIONS */