/**@brief Function for handling events from the BSP module. * * @param[in] event Event generated when button is pressed. */ static void bsp_event_handler(bsp_event_t event) { ret_code_t err_code; switch (event) { case BSP_EVENT_SLEEP: sleep_mode_enter(); break; // BSP_EVENT_SLEEP case BSP_EVENT_DISCONNECT: err_code = sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); if (err_code != NRF_ERROR_INVALID_STATE) { APP_ERROR_CHECK(err_code); } break; // BSP_EVENT_DISCONNECT case BSP_EVENT_WHITELIST_OFF: if (m_conn_handle == BLE_CONN_HANDLE_INVALID) { err_code = ble_advertising_restart_without_whitelist(&m_advertising); if (err_code != NRF_ERROR_INVALID_STATE) { APP_ERROR_CHECK(err_code); } } break; // BSP_EVENT_KEY_0 default: break; } }
/**@brief Function for handling events from the BSP module. * * @param[in] event Event generated by button press. */ void bsp_event_handler(bsp_event_t event) { uint32_t err_code; switch (event) { case BSP_EVENT_SLEEP: sleep_mode_enter(); break; case BSP_EVENT_DISCONNECT: err_code = sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); if (err_code != NRF_ERROR_INVALID_STATE) { APP_ERROR_CHECK(err_code); } break; case BSP_EVENT_WHITELIST_OFF: whitelist_disable(); break; default: break; } }
/**@brief Function for handling advertising events. * * @details This function will be called for advertising events which are passed to the application. * * @param[in] ble_adv_evt Advertising event. */ static void on_adv_evt(ble_adv_evt_t ble_adv_evt) { uint32_t err_code; switch (ble_adv_evt) { case BLE_ADV_EVT_DIRECTED: NRF_LOG_INFO("Directed advertising\r\n"); err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING_DIRECTED); APP_ERROR_CHECK(err_code); break; // BLE_ADV_EVT_DIRECTED case BLE_ADV_EVT_FAST: NRF_LOG_INFO("Fast advertising\r\n"); err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING); APP_ERROR_CHECK(err_code); break; // BLE_ADV_EVT_FAST case BLE_ADV_EVT_SLOW: NRF_LOG_INFO("Slow advertising\r\n"); err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING_SLOW); APP_ERROR_CHECK(err_code); break; // BLE_ADV_EVT_SLOW case BLE_ADV_EVT_IDLE: sleep_mode_enter(); break; // BLE_ADV_EVT_IDLE default: break; } }
/**@brief Function for handling events from the BSP module. * * @param[in] event Event generated by button press. */ static void bsp_event_handler(bsp_event_t event) { uint32_t err_code; switch (event) { case BSP_EVENT_SLEEP: sleep_mode_enter(); break; case BSP_EVENT_DISCONNECT: err_code = sd_ble_gap_disconnect(m_ancs_c.conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); if (err_code != NRF_ERROR_INVALID_STATE) { APP_ERROR_CHECK(err_code); } break; case BSP_EVENT_WHITELIST_OFF: err_code = ble_advertising_restart_without_whitelist(); if (err_code != NRF_ERROR_INVALID_STATE) { APP_ERROR_CHECK(err_code); } break; case BSP_EVENT_KEY_1: err_code = ble_ancs_c_request_attrs(&m_ancs_c, &m_notification_latest); APP_ERROR_CHECK(err_code); break; default: break; } }
/**@brief Function for handling advertising events. * * @details This function will be called for advertising events which are passed to the application. * * @param[in] ble_adv_evt Advertising event. */ static void on_adv_evt(ble_adv_evt_t ble_adv_evt) { uint32_t err_code; switch (ble_adv_evt) { case BLE_ADV_EVT_DIRECTED: err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING_DIRECTED); APP_ERROR_CHECK(err_code); break;//BLE_ADV_EVT_DIRECTED case BLE_ADV_EVT_FAST: err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING); APP_ERROR_CHECK(err_code); break;//BLE_ADV_EVT_FAST case BLE_ADV_EVT_SLOW: err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING_SLOW); APP_ERROR_CHECK(err_code); break;//BLE_ADV_EVT_SLOW case BLE_ADV_EVT_IDLE: sleep_mode_enter(); break;//BLE_ADV_EVT_IDLE default: break; } }
/**@brief Function for handling events from the BSP module. * * @param[in] event Event generated when button is pressed. */ static void bsp_event_handler(bsp_event_t event) { uint32_t err_code; switch (event) { case BSP_EVENT_SLEEP: sleep_mode_enter(); break; case BSP_EVENT_DISCONNECT: err_code = sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); if (err_code != NRF_ERROR_INVALID_STATE) { APP_ERROR_CHECK(err_code); } break; case BSP_EVENT_KEY_0: if (m_is_ias_present) { if (!m_is_high_alert_signalled) { err_code = ble_ias_c_send_alert_level(&m_ias_c, BLE_CHAR_ALERT_LEVEL_HIGH_ALERT); } else { err_code = ble_ias_c_send_alert_level(&m_ias_c, BLE_CHAR_ALERT_LEVEL_NO_ALERT); } if (err_code == NRF_SUCCESS) { m_is_high_alert_signalled = !m_is_high_alert_signalled; } else if ( (err_code != BLE_ERROR_NO_TX_PACKETS) && (err_code != BLE_ERROR_GATTS_SYS_ATTR_MISSING) && (err_code != NRF_ERROR_NOT_FOUND) ) { APP_ERROR_HANDLER(err_code); } } break; case BSP_EVENT_KEY_1: //STOP_ALERTING_BUTTON_ID err_code = bsp_indication_set(BSP_INDICATE_ALERT_OFF); APP_ERROR_CHECK(err_code); break; default: break; } }
/**@brief Function for handling advertising events. * * @details This function will be called for advertising events which are passed to the application. * * @param[in] ble_adv_evt Advertising event. */ static void on_adv_evt(ble_adv_evt_t ble_adv_evt) { uint32_t err_code; switch (ble_adv_evt) { case BLE_ADV_EVT_DIRECTED: err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING_DIRECTED); APP_ERROR_CHECK(err_code); break; case BLE_ADV_EVT_FAST: err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING); APP_ERROR_CHECK(err_code); break; case BLE_ADV_EVT_SLOW: err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING_SLOW); APP_ERROR_CHECK(err_code); break; case BLE_ADV_EVT_FAST_WHITELIST: err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING_WHITELIST); APP_ERROR_CHECK(err_code); break; case BLE_ADV_EVT_SLOW_WHITELIST: err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING_WHITELIST); APP_ERROR_CHECK(err_code); err_code = ble_advertising_restart_without_whitelist(); APP_ERROR_CHECK(err_code); break; case BLE_ADV_EVT_IDLE: sleep_mode_enter(); break; case BLE_ADV_EVT_WHITELIST_REQUEST: { ble_gap_whitelist_t whitelist; ble_gap_addr_t * p_whitelist_addr[BLE_GAP_WHITELIST_ADDR_MAX_COUNT]; ble_gap_irk_t * p_whitelist_irk[BLE_GAP_WHITELIST_IRK_MAX_COUNT]; whitelist.addr_count = BLE_GAP_WHITELIST_ADDR_MAX_COUNT; whitelist.irk_count = BLE_GAP_WHITELIST_IRK_MAX_COUNT; whitelist.pp_addrs = p_whitelist_addr; whitelist.pp_irks = p_whitelist_irk; err_code = dm_whitelist_create(&m_app_handle, &whitelist); APP_ERROR_CHECK(err_code); err_code = ble_advertising_whitelist_reply(&whitelist); APP_ERROR_CHECK(err_code); break; } default: break; } }
/**@brief Function for handling events from the BSP module. * * @param[in] event Event generated by button press. */ static void bsp_event_handler(bsp_event_t event) { uint32_t err_code; switch (event) { case BSP_EVENT_SLEEP: sleep_mode_enter(); break;//BSP_EVENT_SLEEP case BSP_EVENT_DISCONNECT: err_code = sd_ble_gap_disconnect(m_ans_c.conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); if (err_code != NRF_ERROR_INVALID_STATE) { APP_ERROR_CHECK(err_code); } break;//BSP_EVENT_DISCONNECT case BSP_EVENT_WHITELIST_OFF: err_code = ble_advertising_restart_without_whitelist(); if (err_code != NRF_ERROR_INVALID_STATE) { APP_ERROR_CHECK(err_code); } break;//BSP_EVENT_WHITELIST_OFF case BSP_EVENT_KEY_0: if (m_ans_c.conn_handle != BLE_CONN_HANDLE_INVALID) { new_alert_state_toggle(); } break;//BSP_EVENT_KEY_0 case BSP_EVENT_KEY_1: if (m_ans_c.conn_handle != BLE_CONN_HANDLE_INVALID) { unread_alert_state_toggle(); } break;//BSP_EVENT_KEY_1 case BSP_EVENT_KEY_2: if (m_ans_c.conn_handle != BLE_CONN_HANDLE_INVALID) { all_alert_notify_request(); } break;//BSP_EVENT_KEY_2 default: // No implementation needed. break; } }
/**@brief Function for handling the Application's BLE Stack events. * * @param[in] p_ble_evt Bluetooth stack event. */ static void on_ble_evt(ble_evt_t * p_ble_evt) { uint32_t err_code = NRF_SUCCESS; switch (p_ble_evt->header.evt_id) { case BLE_GAP_EVT_CONNECTED: err_code = bsp_indication_set(BSP_INDICATE_CONNECTED); APP_ERROR_CHECK(err_code); m_advertising_mode = BLE_NO_ADV; m_conn_handle = p_ble_evt->evt.gap_evt.conn_handle; break; case BLE_GAP_EVT_DISCONNECTED: err_code = bsp_indication_set(BSP_INDICATE_IDLE); APP_ERROR_CHECK(err_code); m_conn_handle = BLE_CONN_HANDLE_INVALID; advertising_start(); break; case BLE_GAP_EVT_TIMEOUT: if (p_ble_evt->evt.gap_evt.params.timeout.src == BLE_GAP_TIMEOUT_SRC_ADVERTISING) { if (m_advertising_mode == BLE_SLEEP) { sleep_mode_enter(); } else { advertising_start(); } } break; case BLE_GATTC_EVT_TIMEOUT: case BLE_GATTS_EVT_TIMEOUT: // Disconnect on GATT Server and Client timeout events. err_code = sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); APP_ERROR_CHECK(err_code); break; default: // No implementation needed. break; } }
/**@brief Function for handling advertising events. * * @details This function will be called for advertising events which are passed to the application. * * @param[in] ble_adv_evt Advertising event. */ static void on_adv_evt(ble_adv_evt_t ble_adv_evt) { uint32_t err_code; switch (ble_adv_evt) { case BLE_ADV_EVT_FAST: NRF_LOG_INFO("BLE_ADV_EVT_FAST\r\n"); err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING); APP_ERROR_CHECK(err_code); break; case BLE_ADV_EVT_IDLE: sleep_mode_enter(); break; case BLE_ADV_EVT_WHITELIST_REQUEST: { NRF_LOG_DEBUG("BLE_ADV_EVT_WHITELIST_REQUEST\r\n"); ble_gap_addr_t whitelist_addrs[BLE_GAP_WHITELIST_ADDR_MAX_COUNT]; ble_gap_irk_t whitelist_irks[BLE_GAP_WHITELIST_ADDR_MAX_COUNT]; uint32_t addr_cnt = BLE_GAP_WHITELIST_ADDR_MAX_COUNT; uint32_t irk_cnt = BLE_GAP_WHITELIST_ADDR_MAX_COUNT; err_code = pm_whitelist_get(whitelist_addrs, &addr_cnt, whitelist_irks, &irk_cnt); APP_ERROR_CHECK(err_code); NRF_LOG_DEBUG("pm_whitelist_get returns %d addr in whitelist and %d irk whitelist\r\n", addr_cnt, irk_cnt); // Apply the whitelist. err_code = ble_advertising_whitelist_reply(whitelist_addrs, addr_cnt, whitelist_irks, irk_cnt); APP_ERROR_CHECK(err_code); err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING_WHITELIST); APP_ERROR_CHECK(err_code); } break; default: break; } }
/**@brief Function for handling advertising events. * * @details This function will be called for advertising events which are passed to the application. * * @param[in] ble_adv_evt Advertising event. */ static void on_adv_evt(ble_adv_evt_t ble_adv_evt) { uint32_t err_code; switch (ble_adv_evt) { case BLE_ADV_EVT_FAST: NRF_LOG_INFO("Fast advertising\r\n"); err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING); APP_ERROR_CHECK(err_code); break; case BLE_ADV_EVT_IDLE: sleep_mode_enter(); break; default: break; } }
/**@brief Function for handling events from the BSP module. * * @param[in] event Event generated by button press. */ void bsp_event_handler(bsp_event_t event) { uint32_t err_code; switch (event) { case BSP_EVENT_SLEEP: sleep_mode_enter(); break; case BSP_EVENT_DISCONNECT: err_code = sd_ble_gap_disconnect(m_cts.conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); if (err_code != NRF_ERROR_INVALID_STATE) { APP_ERROR_CHECK(err_code); } break; case BSP_EVENT_WHITELIST_OFF: err_code = ble_advertising_restart_without_whitelist(); if (err_code != NRF_ERROR_INVALID_STATE) { APP_ERROR_CHECK(err_code); } break; case BSP_EVENT_KEY_0: if (m_cts.conn_handle != BLE_CONN_HANDLE_INVALID) { err_code = ble_cts_c_current_time_read(&m_cts); if (err_code == NRF_ERROR_NOT_FOUND) { NRF_LOG("Current Time Service is not discovered.\r\n"); } } break; default: // No implementation needed. break; } }
/**@brief Function for handling events from the BSP module. * * @param[in] event Event generated by button press. */ static void bsp_event_handler(bsp_event_t event) { uint32_t err_code; switch (event) { case BSP_EVENT_SLEEP: sleep_mode_enter(); break; case BSP_EVENT_DISCONNECT: err_code = sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); if (err_code != NRF_ERROR_INVALID_STATE) { APP_ERROR_CHECK(err_code); } break; case BSP_EVENT_WHITELIST_OFF: err_code = ble_advertising_restart_without_whitelist(); if (err_code != NRF_ERROR_INVALID_STATE) { APP_ERROR_CHECK(err_code); } break; case BSP_EVENT_KEY_0: if (m_conn_handle != BLE_CONN_HANDLE_INVALID) { blood_pressure_measurement_send(); } break; default: break; } }
/**@brief Function for handling the Application's BLE Stack events. * * @details This function will be called for advertising events which are passed to the application. * * @param[in] ble_adv_evt Advertising event. */ static void on_adv_evt(ess_adv_evt_t ess_adv_evt) { switch (ess_adv_evt) { case ESS_ADV_EVT_MODE_1: NRF_LOG_PRINTF("%s - ESS_ADV_EVT_MODE_1\r\n", __func__); break; case ESS_ADV_EVT_MODE_2: NRF_LOG_PRINTF("%s - ESS_ADV_EVT_MODE_2\r\n", __func__); break; case ESS_ADV_EVT_MODE_3: NRF_LOG_PRINTF("%s - ESS_ADV_EVT_MODE_3\r\n", __func__); m_adv_state = W_ADV_STATE_IDLE; break; case ESS_ADV_EVT_IDLE: NRF_LOG_PRINTF("%s - ESS_ADV_EVT_IDLE\r\n", __func__); NRF_LOG("[APP]: Going to sleep.\r\n\r\n\r\n"); sleep_mode_enter(); break; case ESS_ADV_EVT_WHITELIST_REQUEST: { NRF_LOG_PRINTF("%s - ESS_ADV_EVT_WHITELIST_REQUEST\r\n", __func__); ret_code_t err_code; // Storage for the whitelist. ble_gap_irk_t * irks[8]; ble_gap_addr_t * addrs[8]; ble_gap_whitelist_t whitelist = {.pp_irks = irks, .pp_addrs = addrs}; // Construct a list of peer IDs. pm_peer_id_t peer_ids[8]; pm_peer_id_t peer_id = pm_next_peer_id_get(PM_PEER_ID_INVALID); uint32_t n_peer_ids = 0; while((peer_id != PM_PEER_ID_INVALID) && (n_peer_ids < 8)) { peer_ids[n_peer_ids++] = peer_id; peer_id = pm_next_peer_id_get(peer_id); } // Create the whitelist. err_code = pm_whitelist_create(peer_ids, n_peer_ids, &whitelist); APP_ERROR_CHECK(err_code); // Apply the whitelist. err_code = ess_advertising_whitelist_reply(&whitelist); APP_ERROR_CHECK(err_code); break; } case ESS_ADV_EVT_PEER_ADDR_REQUEST: { NRF_LOG_PRINTF("%s - ESS_ADV_EVT_PEER_ADDR_REQUEST\r\n", __func__); // ble_gap_addr_t peer_address; // // Only Give peer address if we have a handle to the bonded peer. // if(m_bonded_peer_handle.appl_id != DM_INVALID_ID) // { // err_code = dm_peer_addr_get(&m_bonded_peer_handle, &peer_address); // if (err_code != (NRF_ERROR_NOT_FOUND | DEVICE_MANAGER_ERR_BASE)) // { // APP_ERROR_CHECK(err_code); // err_code = ble_advertising_peer_addr_reply(&peer_address); // APP_ERROR_CHECK(err_code); // } // } break; } default: break; } }