17 #include "nordic_common.h"
18 #include "nrf_assert.h"
27 #ifdef PRU_PSTORAGE_ENABLE
60 ble_gap_adv_params_t adv_params;
63 APP_ERROR_CHECK(err_code);
65 memset(&adv_params, 0,
sizeof(adv_params));
68 adv_params.type = BLE_GAP_ADV_TYPE_ADV_IND;
69 adv_params.p_peer_addr = NULL;
70 adv_params.fp = BLE_GAP_ADV_FP_ANY;
72 adv_params.timeout = BLE_GAP_ADV_TIMEOUT_LIMITED_MAX;
74 err_code = sd_ble_gap_adv_start(&adv_params);
77 if(err_code != NRF_ERROR_INVALID_STATE && err_code != NRF_ERROR_BUSY)
79 APP_ERROR_CHECK(err_code);
83 #ifdef PRU_PSTORAGE_ENABLE
104 ble_gap_conn_params_t gap_conn_params;
105 ble_gap_conn_sec_mode_t sec_mode;
107 BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&sec_mode);
109 APP_ERROR_CHECK(err_code);
111 err_code = sd_ble_gap_appearance_set(BLE_APPEARANCE_UNKNOWN);
112 APP_ERROR_CHECK(err_code);
115 APP_ERROR_CHECK(err_code);
117 memset(&gap_conn_params, 0,
sizeof(gap_conn_params));
124 err_code = sd_ble_gap_ppcp_set(&gap_conn_params);
125 APP_ERROR_CHECK(err_code);
154 APP_ERROR_CHECK(err_code);
156 (void) sd_ble_gap_adv_stop();
187 case PRU_SM_STATE_COUNT:
190 case PRU_SM_STATE_NULL:
193 (void) sd_ble_gap_adv_stop();
196 err_code = sd_ble_gap_disconnect(m_wpts.
conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
198 if(err_code != NRF_ERROR_INVALID_STATE && err_code != BLE_ERROR_INVALID_CONN_HANDLE && err_code != BLE_ERROR_NOT_ENABLED)
199 APP_ERROR_CHECK(err_code);
202 APP_ERROR_CHECK(err_code);
205 case PRU_SM_STATE_BOOT:
207 APP_ERROR_CHECK(err_code);
212 case PRU_SM_STATE_PRU_ON:
214 APP_ERROR_CHECK(err_code);
217 case PRU_SM_STATE_SYSTEM_ERROR:
219 APP_ERROR_CHECK(err_code);
250 APP_ERROR_CHECK(err_code);
259 #ifdef DEBUG_OUT_ENABLE
261 #endif //DEBUG_OUT_ENABLE
273 uint32_t err_code = NRF_SUCCESS;
275 switch (p_ble_evt->header.evt_id)
277 case BLE_GAP_EVT_TIMEOUT:
278 if (p_ble_evt->evt.gap_evt.params.timeout.src == BLE_GAP_TIMEOUT_SRC_ADVERTISING)
282 case BLE_GATTS_EVT_SYS_ATTR_MISSING:
283 err_code = sd_ble_gatts_sys_attr_set(
m_conn_handle, NULL, 0, 0);
284 APP_ERROR_CHECK(err_code);
287 case BLE_GAP_EVT_CONNECTED:
292 case BLE_GAP_EVT_DISCONNECTED:
298 case BLE_GAP_EVT_SEC_PARAMS_REQUEST:
300 ble_gap_sec_params_t sec_params;
302 memset(&sec_params, 0,
sizeof(ble_gap_sec_params_t));
304 sec_params.io_caps = BLE_GAP_IO_CAPS_NONE;
310 err_code = sd_ble_gap_sec_params_reply(p_ble_evt->evt.gap_evt.conn_handle, BLE_GAP_SEC_STATUS_SUCCESS, &sec_params, NULL);
314 case BLE_GAP_EVT_AUTH_STATUS:
315 ASSERT(p_ble_evt->evt.gap_evt.params.auth_status.auth_status == BLE_GAP_SEC_STATUS_SUCCESS);
322 APP_ERROR_CHECK(err_code);
333 memset(&wpts_init, 0,
sizeof(wpts_init));
361 APP_ERROR_CHECK(err_code);
388 pru_dynamic.
vrect = p_pru_sensor_data ->
vrect;
389 pru_dynamic.
irect = p_pru_sensor_data ->
irect;
390 pru_dynamic.
vout = p_pru_sensor_data ->
vout;
391 pru_dynamic.
iout = p_pru_sensor_data ->
iout;
421 bool new_alert_occured =
false;
423 UNUSED_PARAMETER(p_context);
427 APP_ERROR_CHECK(err_code);
429 APP_ERROR_CHECK(err_code);
430 if(new_alert_occured)
434 if((err_code != BLE_ERROR_INVALID_CONN_HANDLE) && (err_code != NRF_ERROR_INVALID_STATE) && (err_code != BLE_ERROR_GATTS_SYS_ATTR_MISSING))
436 APP_ERROR_CHECK(err_code);
447 err_code = app_timer_start(m_pru_sensors_timer_single_shot_id, APP_TIMER_MIN_TIMEOUT_TICKS, NULL);
448 APP_ERROR_CHECK(err_code);
456 err_code = app_timer_start(m_p_pru_sensors_timer_id, APP_TIMER_TICKS(period_ms,
APP_TIMER_PRESCALER), NULL);
457 APP_ERROR_CHECK(err_code);
467 APP_ERROR_CHECK(err_code);
468 err_code = app_timer_create(&m_pru_sensors_timer_single_shot_id, APP_TIMER_MODE_SINGLE_SHOT,
m_sensors_timer_handler);
470 APP_ERROR_CHECK(err_code);
499 APP_ERROR_CHECK(err_code);
504 APP_ERROR_CHECK(err_code);
527 return sensor_data->
vrect == 0;
530 #endif // DFU_SUPPORT
State machine state variables.
#define PRU_POWER_CONTROL_ALG_PREFERENCE
uint8_t info_ccp_connected_mode
void pru_on_ble_evt(ble_evt_t *p_ble_evt)
Handle BLE event.
uint8_t info_adj_power_capability
APP_TIMER_DEF(m_pru_sensors_timer_single_shot_id)
static bool m_adv_allowed
ble_wpts_evt_handler_t evt_handler
#define PRU_CONN_SUP_TIMEOUT
#define BLE_WPTS_PRU_INFO_PTU_TEST_MODE_DISABLED_VAL
uint8_t wired_charge_detect
static uint32_t m_ble_wpts_pru_dynamic_set(ble_wpts_t *p_wpts, const pru_sensor_data_t *p_pru_sensor_data)
Set PRU dynamic data.
bool dfu_check(void)
Needs to be implemented by application. Check if it is OK to jump to the DFU application.
uint8_t adjust_power_response
#define PRU_SEPARATE_BTLE_RADIO_SUPORTED
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VRECT_MIN_DYN_BITPOS
#define PRU_SEC_MIN_KEYSIZE
void pru_sensors_gen_evts(void)
Generate PRU state machine events from sensor data.
void pru_init(app_sm_evt_handler_t sm_handler)
Initialize PRU. This function must be called before any other PRU function can be called...
static void m_sys_evt_dispatch(uint32_t event)
Dispatches a System stack event to flash storage module.
uint8_t enable_pru_output
#define BLE_WPTS_PRU_DYNAMIC_OPTION_IOUT_BITPOS
#define PRU_SENSORS_TIMER_PERIOD_MS
void pru_sensors_read_all(void)
Read PRU sensors.
PRU Alert Parameter structure.
static uint32_t m_vrect_high_duration_ms
uint32_t ble_wpts_init(ble_wpts_t *p_wpts, const ble_wpts_init_t *p_wpts_init)
Initialize the WPT Service.
void pru_sensors_init(pru_sm_handler_t pru_sm_handler)
Initialize sensors and read default values.
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VRECT_SET_DYN_BITPOS
static void m_gap_params_init(void)
GAP initialization.
#define PRU_DELTA_R1_VALID
#define PRU_TX_POWER_LEVEL
static void m_timers_init(void)
Instanicate timers used in this file.
#define PRU_CHARGE_COMPLETE_ADV_WAIT_TIME_MS
uint32_t ble_wpts_pru_dynamic_set(ble_wpts_t *p_wpts, pru_dynamic_t *p_pru_dynamic)
Sets value of the PRU Dynamic Parameter characteristic.
const pru_sensor_data_t * pru_sensors_data_get(void)
Get the latest data from the PRU sensors.
Definition of PRU reporting data.
ptu_tester_command_t tester_command
#define PRU_CCP_ADJUST_POWER_CAPABILITY
static void m_sensors_timer_handler(void *p_context)
Sensors measurement timer timeout handler.
#define PRU_SEC_MAX_KEYSIZE
void wpts_test_evt_handle_cb(ble_wpts_t *p_wpts, ble_wpts_evt_t *p_evt)
Override weak wpts_test_evt_handle_cb()
static void m_on_sm_event(pru_sm_signal_type_t evt)
Forward events to the PRU state machine. Also handles the resulting request event.
uint8_t info_sep_btle_radio
uint8_t option_fields_r1_valid
pru_sm_state_t prev_state
uint16_t vrect_high_static
void pru_pstorage_sys_evt_handler(uint32_t event)
Handles system callbacks.
pru_sm_state_t current_state
uint32_t pru_tmux_vout_enable_set(bool enable)
Test wrapper for pru_hal_vout_enable_set().
#define PRU_ADV_DEVICE_NAME
ble_wpts_evt_type_t evt_type
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VOUT_BITPOS
PRU Dynamic Parameter characteristic Option field.
static void m_ble_wpts_init(void)
Initialize the WPT Service.
void(* app_sm_evt_handler_t)(pru_sm_signal_type_t signal, const pru_sm_state_vars_t *p_state_vars)
uint32_t ble_wpts_alert_send(ble_wpts_t *p_wpts, pru_alert_t *p_alert)
Sends PRU alert if notification has been enabled.
uint32_t pru_advdata_set(ble_wpts_t *p_wpts)
Advertising functionality initialization.
static bool m_advertising
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VRECT_HIGH_DYN_BITPOS
static void m_sensors_timer_trigger()
Start timer for reading sensors one time.
void terminate(void)
Needs to be implemented by application. Perform all requried actions before jump to DFU application c...
#define PRU_NFC_RECEIVER_SUPPORTED
static void on_ble_evt(ble_evt_t *p_ble_evt)
BLE stack GAP event handler.
uint8_t pru_over_temperature
#define PRU_CCP_CONNECT_MODE_SUPPORTED
#define PRU_SLAVE_LATENCY
#define APP_TIMER_PRESCALER
static void m_wpts_evt_handler(ble_wpts_t *p_wpts, ble_wpts_evt_t *p_evt)
WPT Service event handler.
#define PRU_MAX_CONN_INTERVAL
union ble_wpts_evt_t::@0 data
WPT Service init structure.
pru_sm_signal_type_t
PRU state machine signal type.
uint8_t info_nfc_receiver
uint16_t vrect_min_static
uint8_t wired_charge_detect
static void m_advertising_start(void)
Start advertising.
pru_control_t pru_control
#define BLE_WPTS_PRU_DYNAMIC_OPTION_TEMPERATURE_BITPOS
void ble_wpts_on_ble_evt(ble_wpts_t *p_wpts, ble_evt_t *p_ble_evt)
WPT Service BLE stack event handler.
pru_sm_state_t pru_sm_execute(pru_sm_signal_type_t sig, pru_sm_state_vars_t *p_state)
Execute state machine.
static pru_sm_state_vars_t m_state_variables
uint8_t info_ptu_test_mode
void pru_start(void)
Enable the PRU profile. When enabled sensor reading and signal generation will be enabled...
uint8_t pru_self_protection
uint32_t tmux_init(void)
Initialize the PTU's test multiplexer.
ble_srv_security_mode_t wpts_attr_md
WPT Service status structure.
static void m_sensors_timer_start(uint16_t period_ms)
Start timer for reading sensors periodically.
uint32_t pru_sensor_alerts_get(bool *new_alert_occured, pru_alert_t *p_pru_alert)
Extract alerts from the latest data read from PRU sensors.
static void m_handle_event(pru_sm_signal_type_t evt)
Handle PRU SM events that require profile handling.
#define PRU_PROTOCOL_REVISION
ctl_adj_power_t adj_power
uint32_t pru_tmux_adj_power_set(ctl_adj_power_t adj_setting)
Test wrapper for pru_hal_adj_power_set().
#define PRU_MIN_CONN_INTERVAL
static app_sm_evt_handler_t m_app_sm_evt_handler
static uint16_t m_conn_handle
PRU Dynamic Parameter structure.