diff options
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.c | 126 |
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 */ |