void ble_conn_state_on_ble_evt(ble_evt_t * p_ble_evt) { bool is_central = false; switch (p_ble_evt->header.evt_id) { case BLE_GAP_EVT_CONNECTED: record_purge_disconnected(); if ( !record_activate(p_ble_evt->evt.gap_evt.conn_handle) ) { // No more records available. Should not happen. APP_ERROR_HANDLER(NRF_ERROR_NO_MEM); } else { #if defined(S110) bool is_central = false; #elif defined(S120) bool is_central = true; #elif defined(S130) || defined(S132) || defined(S332) bool is_central = (p_ble_evt->evt.gap_evt.params.connected.role == BLE_GAP_ROLE_CENTRAL); #else /* BLE SoftDevice missing. */ #endif sdk_mapped_flags_update_by_key(m_bcs.valid_conn_handles, &m_bcs.flags.central_flags, p_ble_evt->evt.gap_evt.conn_handle, is_central); } break; case BLE_GAP_EVT_DISCONNECTED: record_set_disconnected(p_ble_evt->evt.gap_evt.conn_handle); break; case BLE_GAP_EVT_CONN_SEC_UPDATE: sdk_mapped_flags_update_by_key( m_bcs.valid_conn_handles, &m_bcs.flags.encrypted_flags, p_ble_evt->evt.gap_evt.conn_handle, (p_ble_evt->evt.gap_evt.params.conn_sec_update.conn_sec.sec_mode.lv > 1)); sdk_mapped_flags_update_by_key( m_bcs.valid_conn_handles, &m_bcs.flags.mitm_protected_flags, p_ble_evt->evt.gap_evt.conn_handle, (p_ble_evt->evt.gap_evt.params.conn_sec_update.conn_sec.sec_mode.lv > 2)); break; } }
/**@brief Function for marking a connection as disconnected. See @ref BLE_CONN_STATUS_DISCONNECTED. * * @param p_record The record of the connection to set as disconnected. */ static void record_set_disconnected(uint16_t conn_handle) { sdk_mapped_flags_update_by_key(m_bcs.valid_conn_handles, &m_bcs.flags.connected_flags, conn_handle, 0); }
void ble_conn_state_user_flag_set(uint16_t conn_handle, ble_conn_state_user_flag_id_t flag_id, bool value) { if (user_flag_is_acquired(flag_id)) { sdk_mapped_flags_update_by_key(m_bcs.valid_conn_handles, &m_bcs.flags.user_flags[flag_id], conn_handle, value); } }
/**@brief Function for activating a connection record. * * @param p_record The record to activate. * @param conn_handle The connection handle to copy into the record. * @param role The role of the connection. * * @return whether the record was activated successfully. */ static bool record_activate(uint16_t conn_handle) { uint16_t available_index = sdk_mapped_flags_first_key_index_get(~m_bcs.flags.valid_flags); if (available_index != SDK_MAPPED_FLAGS_INVALID_INDEX) { m_bcs.valid_conn_handles[available_index] = conn_handle; sdk_mapped_flags_update_by_key(m_bcs.valid_conn_handles, &m_bcs.flags.connected_flags, conn_handle, 1); sdk_mapped_flags_update_by_key(m_bcs.valid_conn_handles, &m_bcs.flags.valid_flags, conn_handle, 1); return true; } return false; }