nRF51 SDK
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages

Blood Pressure Service Sample Application main file. More...

Macros

#define SEND_MEAS_BUTTON_PIN_NO   NRF6310_BUTTON_0
 
#define BONDMNGR_DELETE_BUTTON_PIN_NO   NRF6310_BUTTON_1
 
#define DEVICE_NAME   "Nordic_BPS"
 
#define MANUFACTURER_NAME   "NordicSemiconductor"
 
#define MODEL_NUM   "NS-BPS-EXAMPLE"
 
#define MANUFACTURER_ID   0x1122334455
 
#define ORG_UNIQUE_ID   0x667788
 
#define APP_ADV_INTERVAL   40
 
#define APP_ADV_TIMEOUT_IN_SECONDS   180
 
#define APP_TIMER_PRESCALER   0
 
#define APP_TIMER_MAX_TIMERS   3
 
#define APP_TIMER_OP_QUEUE_SIZE   4
 
#define NUM_SIM_MEAS_VALUES   4
 
#define SIM_MEAS_1_SYSTOLIC   117
 
#define SIM_MEAS_1_DIASTOLIC   76
 
#define SIM_MEAS_1_MEAN_AP   103
 
#define SIM_MEAS_1_PULSE_RATE   60
 
#define SIM_MEAS_2_SYSTOLIC   121
 
#define SIM_MEAS_2_DIASTOLIC   81
 
#define SIM_MEAS_2_MEAN_AP   106
 
#define SIM_MEAS_2_PULSE_RATE   72
 
#define SIM_MEAS_3_SYSTOLIC   138
 
#define SIM_MEAS_3_DIASTOLIC   88
 
#define SIM_MEAS_3_MEAN_AP   120
 
#define SIM_MEAS_3_PULSE_RATE   105
 
#define SIM_MEAS_4_SYSTOLIC   145
 
#define SIM_MEAS_4_DIASTOLIC   100
 
#define SIM_MEAS_4_MEAN_AP   131
 
#define SIM_MEAS_4_PULSE_RATE   125
 
#define BATTERY_LEVEL_MEAS_INTERVAL   APP_TIMER_TICKS(2000, APP_TIMER_PRESCALER)
 
#define MIN_BATTERY_LEVEL   81
 
#define MAX_BATTERY_LEVEL   100
 
#define BATTERY_LEVEL_INCREMENT   1
 
#define MIN_CONN_INTERVAL   MSEC_TO_UNITS(500, UNIT_1_25_MS)
 
#define MAX_CONN_INTERVAL   MSEC_TO_UNITS(1000, UNIT_1_25_MS)
 
#define SLAVE_LATENCY   0
 
#define CONN_SUP_TIMEOUT   MSEC_TO_UNITS(4000, UNIT_10_MS)
 
#define FIRST_CONN_PARAMS_UPDATE_DELAY   APP_TIMER_TICKS(5000, APP_TIMER_PRESCALER)
 
#define NEXT_CONN_PARAMS_UPDATE_DELAY   APP_TIMER_TICKS(5000, APP_TIMER_PRESCALER)
 
#define MAX_CONN_PARAMS_UPDATE_COUNT   3
 
#define APP_GPIOTE_MAX_USERS   1
 
#define BUTTON_DETECTION_DELAY   APP_TIMER_TICKS(50, APP_TIMER_PRESCALER)
 
#define SEC_PARAM_TIMEOUT   30
 
#define SEC_PARAM_BOND   1
 
#define SEC_PARAM_MITM   0
 
#define SEC_PARAM_IO_CAPABILITIES   BLE_GAP_IO_CAPS_NONE
 
#define SEC_PARAM_OOB   0
 
#define SEC_PARAM_MIN_KEY_SIZE   7
 
#define SEC_PARAM_MAX_KEY_SIZE   16
 
#define FLASH_PAGE_SYS_ATTR   (BLE_FLASH_PAGE_END - 3)
 
#define FLASH_PAGE_BOND   (BLE_FLASH_PAGE_END - 1)
 
#define DEAD_BEEF   0xDEADBEEF
 

Typedefs

typedef struct bps_meas_sim_value_s bps_meas_sim_value_t
 

Functions

void app_error_handler (uint32_t error_code, uint32_t line_num, const uint8_t *p_file_name)
 Function for error handling, which is called when an error has occurred. More...
 
void assert_nrf_callback (uint16_t line_num, const uint8_t *p_file_name)
 Callback function for asserts in the SoftDevice. More...
 
static void battery_level_update (void)
 Function for performing battery measurement, and update Battery Level characteristic in Battery Service.
 
static void battery_level_meas_timeout_handler (void *p_context)
 Function for handling the Battery measurement timer timeout. More...
 
static void bps_sim_measurement (ble_bps_meas_t *p_meas)
 Function for populating simulated blood pressure measurements.
 
static void leds_init (void)
 Function for the LEDs initialization. More...
 
static void timers_init (void)
 Function for the Timer initialization. More...
 
static void gap_params_init (void)
 Function for the GAP initialization. More...
 
static void advertising_init (void)
 Function for initializing the Advertising functionality. More...
 
static void blood_pressure_measurement_send (void)
 Function for simulating and sending one Blood Pressure Measurement.
 
static void on_bps_evt (ble_bps_t *p_bps, ble_bps_evt_t *p_evt)
 Function for handling the Blood Pressure Service events. More...
 
static void services_init (void)
 Function for initializing services that will be used by the application. More...
 
static void sensor_sim_init (void)
 Function for initializing the sensor simulators.
 
static void sec_params_init (void)
 Function for initializing security parameters.
 
static void application_timers_start (void)
 Function for starting application timers.
 
static void advertising_start (void)
 Function for starting advertising.
 
static void on_conn_params_evt (ble_conn_params_evt_t *p_evt)
 Function for handling the Connection Parameter events. More...
 
static void conn_params_error_handler (uint32_t nrf_error)
 Function for handling a Connection Parameters error. More...
 
static void conn_params_init (void)
 Function for initializing the Connection Parameters module.
 
static void on_ble_evt (ble_evt_t *p_ble_evt)
 Function for handling the Application's BLE Stack events. More...
 
static void ble_evt_dispatch (ble_evt_t *p_ble_evt)
 Function for dispatching a BLE stack event to all modules with a BLE stack event handler. More...
 
static void ble_stack_init (void)
 Function for initializing the BLE stack. More...
 
static void button_event_handler (uint8_t pin_no)
 Function for handling button events. More...
 
static void gpiote_init (void)
 Function for initializing the GPIOTE handler module.
 
static void buttons_init (void)
 Function for initializing the button handler module.
 
static void bond_manager_error_handler (uint32_t nrf_error)
 Function for handling a Bond Manager error. More...
 
static void bond_evt_handler (ble_bondmngr_evt_t *p_evt)
 Function for handling the Bond Manager events. More...
 
static void bond_manager_init (void)
 Function for the Bond Manager initialization.
 
static void radio_notification_init (void)
 Function for initializing the Radio Notification events.
 
static void power_manage (void)
 Function for the Power manager.
 
int main (void)
 Function for application main entry.
 

Variables

static uint16_t m_conn_handle = BLE_CONN_HANDLE_INVALID
 
static ble_gap_sec_params_t m_sec_params
 
static ble_gap_adv_params_t m_adv_params
 
static ble_bas_t m_bas
 
static ble_bps_t m_bps
 
static bps_meas_sim_value_t m_bps_meas_sim_val [NUM_SIM_MEAS_VALUES]
 
static bool m_bps_meas_ind_conf_pending = false
 
static ble_sensorsim_cfg_t m_battery_sim_cfg
 
static ble_sensorsim_state_t m_battery_sim_state
 
static app_timer_id_t m_battery_timer_id
 

Detailed Description

This file contains the source code for a sample application using the Blood Pressure service It also includes the sample code for Battery and Device Information services. This application uses the srvlib_conn_params module.

Macro Definition Documentation

#define SEND_MEAS_BUTTON_PIN_NO   NRF6310_BUTTON_0

Button used for sending a measurement.

#define BONDMNGR_DELETE_BUTTON_PIN_NO   NRF6310_BUTTON_1

Button used for deleting all bonded masters during startup.

#define DEVICE_NAME   "Nordic_BPS"

Name of device. Will be included in the advertising data.

#define MANUFACTURER_NAME   "NordicSemiconductor"

Manufacturer. Will be passed to Device Information Service.

#define MODEL_NUM   "NS-BPS-EXAMPLE"

Model number. Will be passed to Device Information Service.

#define MANUFACTURER_ID   0x1122334455

Manufacturer ID, part of System ID. Will be passed to Device Information Service.

#define ORG_UNIQUE_ID   0x667788

Organizational Unique ID, part of System ID. Will be passed to Device Information Service.

#define APP_ADV_INTERVAL   40

The advertising interval (in units of 0.625 ms. This value corresponds to 25 ms).

#define APP_ADV_TIMEOUT_IN_SECONDS   180

The advertising timeout in units of seconds.

#define APP_TIMER_PRESCALER   0

Value of the RTC1 PRESCALER register.

#define APP_TIMER_MAX_TIMERS   3

Maximum number of simultaneously created timers.

#define APP_TIMER_OP_QUEUE_SIZE   4

Size of timer operation queues.

#define NUM_SIM_MEAS_VALUES   4

Number of simulated measurements to cycle through.

#define SIM_MEAS_1_SYSTOLIC   117

Simulated measurement value for systolic pressure.

#define SIM_MEAS_1_DIASTOLIC   76

Simulated measurement value for diastolic pressure.

#define SIM_MEAS_1_MEAN_AP   103

Simulated measurement value for mean arterial pressure.

#define SIM_MEAS_1_PULSE_RATE   60

Simulated measurement value for pulse rate.

#define SIM_MEAS_2_SYSTOLIC   121

Simulated measurement value for systolic pressure.

#define SIM_MEAS_2_DIASTOLIC   81

Simulated measurement value for diastolic pressure.

#define SIM_MEAS_2_MEAN_AP   106

Simulated measurement value for mean arterial pressure.

#define SIM_MEAS_2_PULSE_RATE   72

Simulated measurement value for pulse rate.

#define SIM_MEAS_3_SYSTOLIC   138

Simulated measurement value for systolic pressure.

#define SIM_MEAS_3_DIASTOLIC   88

Simulated measurement value for diastolic pressure.

#define SIM_MEAS_3_MEAN_AP   120

Simulated measurement value for mean arterial pressure.

#define SIM_MEAS_3_PULSE_RATE   105

Simulated measurement value for pulse rate.

#define SIM_MEAS_4_SYSTOLIC   145

Simulated measurement value for systolic pressure.

#define SIM_MEAS_4_DIASTOLIC   100

Simulated measurement value for diastolic pressure.

#define SIM_MEAS_4_MEAN_AP   131

Simulated measurement value for mean arterial pressure.

#define SIM_MEAS_4_PULSE_RATE   125

Simulated measurement value for pulse rate.

#define BATTERY_LEVEL_MEAS_INTERVAL   APP_TIMER_TICKS(2000, APP_TIMER_PRESCALER)

Battery level measurement interval (ticks).

#define MIN_BATTERY_LEVEL   81

Minimum battery level as returned by the simulated measurement function.

#define MAX_BATTERY_LEVEL   100

Maximum battery level as returned by the simulated measurement function.

#define BATTERY_LEVEL_INCREMENT   1

Value by which the battery level is incremented/decremented for each call to the simulated measurement function.

#define MIN_CONN_INTERVAL   MSEC_TO_UNITS(500, UNIT_1_25_MS)

Minimum acceptable connection interval (0.5 seconds).

#define MAX_CONN_INTERVAL   MSEC_TO_UNITS(1000, UNIT_1_25_MS)

Maximum acceptable connection interval (1 second).

#define SLAVE_LATENCY   0

Slave latency.

#define CONN_SUP_TIMEOUT   MSEC_TO_UNITS(4000, UNIT_10_MS)

Connection supervisory timeout (4 seconds).

#define FIRST_CONN_PARAMS_UPDATE_DELAY   APP_TIMER_TICKS(5000, APP_TIMER_PRESCALER)

Time from initiating event (connect or start of indication) to first time sd_ble_gap_conn_param_update is called (5 seconds).

#define NEXT_CONN_PARAMS_UPDATE_DELAY   APP_TIMER_TICKS(5000, APP_TIMER_PRESCALER)

Time between each call to sd_ble_gap_conn_param_update after the first (30 seconds).

#define MAX_CONN_PARAMS_UPDATE_COUNT   3

Number of attempts before giving up the connection parameter negotiation.

#define APP_GPIOTE_MAX_USERS   1

Maximum number of users of the GPIOTE handler.

#define BUTTON_DETECTION_DELAY   APP_TIMER_TICKS(50, APP_TIMER_PRESCALER)

Delay from a GPIOTE event until a button is reported as pushed (in number of timer ticks).

#define SEC_PARAM_TIMEOUT   30

Timeout for Pairing Request or Security Request (in seconds).

#define SEC_PARAM_BOND   1

Perform bonding.

#define SEC_PARAM_MITM   0

Man In The Middle protection not required.

#define SEC_PARAM_IO_CAPABILITIES   BLE_GAP_IO_CAPS_NONE

No I/O capabilities.

#define SEC_PARAM_OOB   0

Out Of Band data not available.

#define SEC_PARAM_MIN_KEY_SIZE   7

Minimum encryption key size.

#define SEC_PARAM_MAX_KEY_SIZE   16

Maximum encryption key size.

#define FLASH_PAGE_SYS_ATTR   (BLE_FLASH_PAGE_END - 3)

Flash page used for bond manager system attribute information.

#define FLASH_PAGE_BOND   (BLE_FLASH_PAGE_END - 1)

Flash page used for bond manager bonding information.

#define DEAD_BEEF   0xDEADBEEF

Value used as error code on stack dump, can be used to identify stack location on stack unwind.

Function Documentation

void app_error_handler ( uint32_t  error_code,
uint32_t  line_num,
const uint8_t *  p_file_name 
)
Warning
This handler is an example only and does not fit a final product. You need to analyze how your product is supposed to react in case of error.
Parameters
[in]error_codeError code supplied to the handler.
[in]line_numLine number where the handler is called.
[in]p_file_namePointer to the file name.
void assert_nrf_callback ( uint16_t  line_num,
const uint8_t *  p_file_name 
)

This function will be called in case of an assert in the SoftDevice.

Warning
This handler is an example only and does not fit a final product. You need to analyze how your product is supposed to react in case of Assert.
On assert from the SoftDevice, the system can only recover on reset.
Parameters
[in]line_numLine number of the failing ASSERT call.
[in]file_nameFile name of the failing ASSERT call.
static void battery_level_meas_timeout_handler ( void *  p_context)
static

This function will be called each time the battery level measurement timer expires.

Parameters
[in]p_contextPointer used for passing some arbitrary information (context) from the app_start_timer() call to the timeout handler.
static void leds_init ( void  )
static

Initializes all LEDs used by this application.

static void timers_init ( void  )
static

Initializes the timer module. This creates and starts application timers.

static void gap_params_init ( void  )
static

This function shall be used to setup all the necessary GAP (Generic Access Profile) parameters of the device. It also sets the permissions and appearance.

static void advertising_init ( void  )
static

Encodes the required advertising data and passes it to the stack. Also builds a structure to be passed to the stack when starting advertising.

static void on_bps_evt ( ble_bps_t p_bps,
ble_bps_evt_t p_evt 
)
static

This function will be called for all Blood Pressure Service events which are passed to the application.

Parameters
[in]p_bpsBlood Pressure Service structure.
[in]p_evtEvent received from the Blood Pressure Service.
static void services_init ( void  )
static

Initialize the Blood Pressure, Battery and Device Information services.

static void on_conn_params_evt ( ble_conn_params_evt_t p_evt)
static

This function will be called for all events in the Connection Parameters Module which are passed to the application.

Note
All this function does is to disconnect. This could have been done by simply setting the disconnect_on_fail configuration parameter, but instead we use the event handler mechanism to demonstrate its use.
Parameters
[in]p_evtEvent received from the Connection Parameters Module.
static void conn_params_error_handler ( uint32_t  nrf_error)
static
Parameters
[in]nrf_errorError code containing information about what went wrong.
static void on_ble_evt ( ble_evt_t p_ble_evt)
static
Parameters
[in]p_ble_evtBluetooth stack event.
static void ble_evt_dispatch ( ble_evt_t p_ble_evt)
static

This function is called from the BLE Stack event interrupt handler after a BLE stack event has been received.

Parameters
[in]p_ble_evtBluetooth stack event.
static void ble_stack_init ( void  )
static

Initializes the SoftDevice and the BLE event interrupt.

static void button_event_handler ( uint8_t  pin_no)
static
Parameters
[in]pin_noThe pin number of the button pressed.
static void bond_manager_error_handler ( uint32_t  nrf_error)
static
Parameters
[in]nrf_errorError code containing information about what went wrong.
static void bond_evt_handler ( ble_bondmngr_evt_t p_evt)
static
Parameters
[in]p_evtData associated to the bond manager event.

Variable Documentation

uint16_t m_conn_handle = BLE_CONN_HANDLE_INVALID
static

Handle of the current connection.

ble_gap_sec_params_t m_sec_params
static

Security requirements for this application.

ble_gap_adv_params_t m_adv_params
static

Parameters to be passed to the stack when starting advertising.

ble_bas_t m_bas
static

Structure used to identify the battery service.

ble_bps_t m_bps
static

Structure used to identify the blood pressure service.

bps_meas_sim_value_t m_bps_meas_sim_val[NUM_SIM_MEAS_VALUES]
static

Blood Pressure simulated measurements.

bool m_bps_meas_ind_conf_pending = false
static

Flag to keep track of when an indication confirmation is pending.

ble_sensorsim_cfg_t m_battery_sim_cfg
static

Battery Level sensor simulator configuration.

ble_sensorsim_state_t m_battery_sim_state
static

Battery Level sensor simulator state.

app_timer_id_t m_battery_timer_id
static

Battery timer.