Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static void on_ble_evt(ble_evt_t * p_ble_evt)
- {
- uint32_t err_code;
- err_code = NRF_SUCCESS;
- APP_ERROR_CHECK(err_code);
- switch (p_ble_evt->header.evt_id)
- {
- case BLE_GAP_EVT_CONNECTED:
- reconnect();
- APP_ERROR_CHECK(err_code);
- m_conn_handle = p_ble_evt->evt.gap_evt.conn_handle;
- sd_ble_gap_rssi_start(p_ble_evt->evt.gap_evt.conn_handle, 1, 3);
- break; // BLE_GAP_EVT_CONNECTED
- case BLE_GAP_EVT_DISCONNECTED:
- disconnect();
- m_conn_handle = BLE_CONN_HANDLE_INVALID;
- // /*check if the last connected peer had not used MITM, if so, delete its bond information*/
- // if (m_peer_to_be_deleted != PM_PEER_ID_INVALID)
- // {
- // ret_code_t ret_val = pm_peer_delete(m_peer_to_be_deleted);
- // APP_ERROR_CHECK(ret_val);
- // printf("Collector's bond deleted\r\n");
- // m_peer_to_be_deleted = PM_PEER_ID_INVALID;
- // }
- break; // BLE_GAP_EVT_DISCONNECTED
- case BLE_GAP_EVT_SEC_PARAMS_REQUEST:
- printf("BLE_GAP_EVT_SEC_PARAMS_REQUEST\r\n");
- break; // BLE_GAP_EVT_SEC_PARAMS_REQUEST
- case BLE_GATTS_EVT_SYS_ATTR_MISSING:
- // No system attributes have been stored.
- // err_code = sd_ble_gatts_sys_attr_set(m_conn_handle, NULL, 0, 0);
- // APP_ERROR_CHECK(err_code);
- break; // BLE_GATTS_EVT_SYS_ATTR_MISSING
- case BLE_GATTC_EVT_TIMEOUT:
- disconnect();
- // Disconnect on GATT Client timeout event.
- err_code = sd_ble_gap_disconnect(p_ble_evt->evt.gattc_evt.conn_handle,
- BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
- APP_ERROR_CHECK(err_code);
- break; // BLE_GATTC_EVT_TIMEOUT
- case BLE_GATTS_EVT_TIMEOUT:
- disconnect();
- // Disconnect on GATT Server timeout event.
- err_code = sd_ble_gap_disconnect(p_ble_evt->evt.gatts_evt.conn_handle,
- BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
- APP_ERROR_CHECK(err_code);
- break; // BLE_GATTS_EVT_TIMEOUT
- case BLE_EVT_USER_MEM_REQUEST:
- err_code = sd_ble_user_mem_reply(p_ble_evt->evt.gattc_evt.conn_handle, NULL);
- APP_ERROR_CHECK(err_code);
- break; // BLE_EVT_USER_MEM_REQUEST
- case BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST:
- {
- ble_gatts_evt_rw_authorize_request_t req;
- ble_gatts_rw_authorize_reply_params_t auth_reply;
- req = p_ble_evt->evt.gatts_evt.params.authorize_request;
- if (req.type != BLE_GATTS_AUTHORIZE_TYPE_INVALID)
- {
- if ((req.request.write.op == BLE_GATTS_OP_PREP_WRITE_REQ) ||
- (req.request.write.op == BLE_GATTS_OP_EXEC_WRITE_REQ_NOW) ||
- (req.request.write.op == BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL))
- {
- if (req.type == BLE_GATTS_AUTHORIZE_TYPE_WRITE)
- {
- auth_reply.type = BLE_GATTS_AUTHORIZE_TYPE_WRITE;
- }
- else
- {
- auth_reply.type = BLE_GATTS_AUTHORIZE_TYPE_READ;
- }
- auth_reply.params.write.gatt_status = APP_FEATURE_NOT_SUPPORTED;
- err_code = sd_ble_gatts_rw_authorize_reply(p_ble_evt->evt.gatts_evt.conn_handle,
- &auth_reply);
- APP_ERROR_CHECK(err_code);
- }
- }
- } break; // BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST
- #if (NRF_SD_BLE_API_VERSION == 3)
- case BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST:
- err_code = sd_ble_gatts_exchange_mtu_reply(p_ble_evt->evt.gatts_evt.conn_handle,
- NRF_BLE_MAX_MTU_SIZE);
- APP_ERROR_CHECK(err_code);
- break; // BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST
- #endif
- default:
- // No implementation needed.
- break;
- }
- }
- static void pm_evt_handler(pm_evt_t const * p_evt)
- {
- ret_code_t err_code;
- switch (p_evt->evt_id)
- {
- case PM_EVT_BONDED_PEER_CONNECTED:
- {
- printf("Connected to a previously bonded device.\r\n");
- // Start Security Request timer.
- // err_code = app_timer_start(m_sec_req_timer_id, SECURITY_REQUEST_DELAY, NULL);
- // APP_ERROR_CHECK(err_code);
- } break;
- case PM_EVT_CONN_SEC_SUCCEEDED:
- {
- printf("Link secured. Role: %d. conn_handle: %d, Procedure: %d\r\n",
- ble_conn_state_role(p_evt->conn_handle),
- p_evt->conn_handle,
- p_evt->params.conn_sec_succeeded.procedure);
- m_peer_id = p_evt->peer_id;
- } break;
- case PM_EVT_CONN_SEC_FAILED:
- {
- printf("Failed to secure connection. Disconnecting.\r\n");
- m_conn_handle = BLE_CONN_HANDLE_INVALID;
- err_code = sd_ble_gap_disconnect(m_conn_handle,
- BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
- APP_ERROR_CHECK(err_code);
- } break;
- case PM_EVT_CONN_SEC_CONFIG_REQ:
- {
- // Reject pairing request from an already bonded peer.
- pm_conn_sec_config_t conn_sec_config = {.allow_repairing = false};
- pm_conn_sec_config_reply(p_evt->conn_handle, &conn_sec_config);
- } break;
- case PM_EVT_STORAGE_FULL:
- {
- // Run garbage collection on the flash.
- err_code = fds_gc();
- if (err_code == FDS_ERR_BUSY || err_code == FDS_ERR_NO_SPACE_IN_QUEUES)
- {
- // Retry.
- }
- else
- {
- APP_ERROR_CHECK(err_code);
- }
- } break;
- case PM_EVT_PEERS_DELETE_SUCCEEDED:
- {
- ble_advertising_start(BLE_ADV_MODE_FAST);
- } break;
- case PM_EVT_LOCAL_DB_CACHE_APPLY_FAILED:
- {
- // The local database has likely changed, send service changed indications.
- pm_local_database_has_changed();
- } break;
- case PM_EVT_PEER_DATA_UPDATE_FAILED:
- {
- // Assert.
- APP_ERROR_CHECK(p_evt->params.peer_data_update_failed.error);
- } break;
- case PM_EVT_PEER_DELETE_FAILED:
- {
- // Assert.
- APP_ERROR_CHECK(p_evt->params.peer_delete_failed.error);
- } break;
- case PM_EVT_PEERS_DELETE_FAILED:
- {
- // Assert.
- APP_ERROR_CHECK(p_evt->params.peers_delete_failed_evt.error);
- } break;
- case PM_EVT_ERROR_UNEXPECTED:
- {
- // Assert.
- APP_ERROR_CHECK(p_evt->params.error_unexpected.error);
- } break;
- case PM_EVT_CONN_SEC_START:
- case PM_EVT_PEER_DATA_UPDATE_SUCCEEDED:
- case PM_EVT_LOCAL_DB_CACHE_APPLIED:
- case PM_EVT_SERVICE_CHANGED_IND_SENT:
- case PM_EVT_SERVICE_CHANGED_IND_CONFIRMED:
- default:
- break;
- }
- }
- static void peer_manager_init(bool erase_bonds)
- {
- ble_gap_sec_params_t sec_param;
- ret_code_t err_code;
- err_code = pm_init();
- APP_ERROR_CHECK(err_code);
- if (erase_bonds)
- {
- pm_peers_delete();
- }
- memset(&sec_param, 0, sizeof(ble_gap_sec_params_t));
- // Security parameters to be used for all security procedures.
- sec_param.bond = true;
- sec_param.mitm = false;
- sec_param.lesc = 0;
- sec_param.keypress = 0;
- sec_param.io_caps = BLE_GAP_IO_CAPS_NONE; //BLE_GAP_IO_CAPS_DISPLAY_ONLY;
- sec_param.oob = false;
- sec_param.min_key_size = 7;
- sec_param.max_key_size = 16;
- sec_param.kdist_own.enc = 1;
- sec_param.kdist_own.id = 1;
- sec_param.kdist_peer.enc = 1;
- sec_param.kdist_peer.id = 1;
- err_code = pm_sec_params_set(&sec_param);
- APP_ERROR_CHECK(err_code);
- err_code = pm_register(pm_evt_handler);
- APP_ERROR_CHECK(err_code);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement