20 #include "nordic_common.h"
35 {.type = BLE_GATTS_AUTHORIZE_TYPE_READ, \
36 .params.read.gatt_status = BLE_GATT_STATUS_SUCCESS, \
37 .params.read.update = 0};
47 p_wpt->
conn_handle = p_ble_evt->evt.gap_evt.conn_handle;
57 UNUSED_PARAMETER(p_ble_evt);
101 uint8_t * p = p_evt_write->
data;
144 if (p_evt_write->len >= 2)
151 if (ble_srv_is_notification_enabled(p_evt_write->data))
173 ble_gatts_evt_write_t * p_evt_write = &p_ble_evt->evt.gatts_evt.params.write;
198 switch (p_ble_evt->header.evt_id)
200 case BLE_GAP_EVT_CONNECTED:
204 case BLE_GAP_EVT_DISCONNECTED:
208 case BLE_GATTS_EVT_WRITE:
227 uint8_t * p_encoded_buffer)
285 uint8_t * p_encoded_buffer)
388 ble_gatts_char_md_t char_md;
389 ble_gatts_attr_t attr_char_value;
391 ble_gatts_attr_md_t attr_md;
393 memset(&char_md, 0,
sizeof(char_md));
395 char_md.char_props.write = 1;
396 char_md.char_props.read = 1;
397 char_md.char_props.write_wo_resp = 1;
398 char_md.p_char_user_desc = NULL;
399 char_md.p_char_pf = NULL;
400 char_md.p_user_desc_md = NULL;
401 char_md.p_cccd_md = NULL;
402 char_md.p_sccd_md = NULL;
406 memset(&attr_md, 0,
sizeof(attr_md));
408 attr_md.write_perm = p_wpts_init->
wpts_attr_md.write_perm;
409 attr_md.read_perm = p_wpts_init->
wpts_attr_md.read_perm;
410 attr_md.vloc = BLE_GATTS_VLOC_STACK;
415 memset(&attr_char_value, 0,
sizeof(attr_char_value));
417 attr_char_value.p_uuid = &ble_uuid;
418 attr_char_value.p_attr_md = &attr_md;
419 attr_char_value.init_len = 0;
420 attr_char_value.init_offs = 0;
422 attr_char_value.p_value = NULL;
439 ble_gatts_char_md_t char_md;
440 ble_gatts_attr_t attr_char_value;
442 ble_gatts_attr_md_t attr_md;
444 memset(&char_md, 0,
sizeof(char_md));
446 char_md.char_props.write = 1;
447 char_md.char_props.read = 1;
448 char_md.char_props.write_wo_resp = 1;
449 char_md.p_char_user_desc = NULL;
450 char_md.p_char_pf = NULL;
451 char_md.p_user_desc_md = NULL;
452 char_md.p_cccd_md = NULL;
453 char_md.p_sccd_md = NULL;
457 memset(&attr_md, 0,
sizeof(attr_md));
459 attr_md.write_perm = p_wpts_init->
wpts_attr_md.write_perm;
460 attr_md.read_perm = p_wpts_init->
wpts_attr_md.read_perm;
462 attr_md.vloc = BLE_GATTS_VLOC_STACK;
467 memset(&attr_char_value, 0,
sizeof(attr_char_value));
469 attr_char_value.p_uuid = &ble_uuid;
470 attr_char_value.p_attr_md = &attr_md;
471 attr_char_value.init_len = 0;
472 attr_char_value.init_offs = 0;
474 attr_char_value.p_value = NULL;
491 ble_gatts_char_md_t char_md;
492 ble_gatts_attr_md_t cccd_md;
493 ble_gatts_attr_t attr_char_value;
495 ble_gatts_attr_md_t attr_md;
496 uint8_t init_value = 0;
498 memset(&char_md, 0,
sizeof(char_md));
499 char_md.char_props.notify = 1;
500 char_md.char_props.read = 1;
501 char_md.p_char_user_desc = NULL;
502 char_md.p_char_pf = NULL;
503 char_md.p_user_desc_md = NULL;
504 char_md.p_cccd_md = &cccd_md;
505 char_md.p_sccd_md = NULL;
507 memset(&cccd_md, 0,
sizeof(cccd_md));
508 BLE_GAP_CONN_SEC_MODE_SET_OPEN(&cccd_md.read_perm);
509 BLE_GAP_CONN_SEC_MODE_SET_OPEN(&cccd_md.write_perm);
510 cccd_md.vloc = BLE_GATTS_VLOC_STACK;
514 memset(&attr_md, 0,
sizeof(attr_md));
516 BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&attr_md.write_perm);
517 attr_md.read_perm = p_wpts_init->
wpts_attr_md.read_perm;
518 attr_md.vloc = BLE_GATTS_VLOC_STACK;
523 memset(&attr_char_value, 0,
sizeof(attr_char_value));
525 attr_char_value.p_uuid = &ble_uuid;
526 attr_char_value.p_attr_md = &attr_md;
527 attr_char_value.init_len = 1;
528 attr_char_value.init_offs = 0;
530 attr_char_value.p_value = &init_value;
547 ble_gatts_char_md_t char_md;
548 ble_gatts_attr_t attr_char_value;
550 ble_gatts_attr_md_t attr_md;
553 memset(&char_md, 0,
sizeof(char_md));
555 char_md.char_props.read = 1;
556 char_md.p_char_user_desc = NULL;
557 char_md.p_char_pf = NULL;
558 char_md.p_user_desc_md = NULL;
559 char_md.p_cccd_md = NULL;
560 char_md.p_sccd_md = NULL;
564 memset(&attr_md, 0,
sizeof(attr_md));
566 attr_md.read_perm = p_wpts_init->
wpts_attr_md.read_perm;
567 BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&attr_md.write_perm);
568 attr_md.vloc = BLE_GATTS_VLOC_STACK;
573 memset(&attr_char_value, 0,
sizeof(attr_char_value));
575 attr_char_value.p_uuid = &ble_uuid;
576 attr_char_value.p_attr_md = &attr_md;
581 attr_char_value.init_offs = 0;
583 attr_char_value.p_value = encoded_initial_val;
600 ble_gatts_char_md_t char_md;
601 ble_gatts_attr_t attr_char_value;
603 ble_gatts_attr_md_t attr_md;
606 memset(&char_md, 0,
sizeof(char_md));
608 char_md.char_props.read = 1;
609 char_md.p_char_user_desc = NULL;
610 char_md.p_char_pf = NULL;
611 char_md.p_user_desc_md = NULL;
612 char_md.p_cccd_md = NULL;
613 char_md.p_sccd_md = NULL;
617 memset(&attr_md, 0,
sizeof(attr_md));
619 attr_md.read_perm = p_wpts_init->
wpts_attr_md.read_perm;
620 BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&attr_md.write_perm);
621 attr_md.vloc = BLE_GATTS_VLOC_STACK;
626 memset(&attr_char_value, 0,
sizeof(attr_char_value));
627 memset(encoded_initial_val, 0,
sizeof(encoded_initial_val));
629 attr_char_value.p_uuid = &ble_uuid;
630 attr_char_value.p_attr_md = &attr_md;
631 attr_char_value.init_len =
sizeof(encoded_initial_val);
632 attr_char_value.init_offs = 0;
634 attr_char_value.p_value = encoded_initial_val;
652 if (err_code != NRF_SUCCESS)
659 err_code = sd_ble_gatts_service_add(BLE_GATTS_SRVC_TYPE_PRIMARY, &ble_uuid, &p_wpt->
service_handle);
660 if (err_code != NRF_SUCCESS)
667 if (err_code != NRF_SUCCESS)
674 if (err_code != NRF_SUCCESS)
681 if (err_code != NRF_SUCCESS)
688 if (err_code != NRF_SUCCESS)
695 if (err_code != NRF_SUCCESS)
711 ble_gatts_hvx_params_t hvx_params;
714 memset(&hvx_params, 0,
sizeof(hvx_params));
716 hvx_params.p_data = alert;
720 hvx_params.type = BLE_GATT_HVX_NOTIFICATION;
721 hvx_params.offset = 0;
722 hvx_params.p_len = &hvx_len;
759 err_code = sd_ble_gatts_hvx(p_wpt->
conn_handle, &hvx_params);
763 err_code = NRF_ERROR_INVALID_STATE;
772 ble_gatts_value_t val;
776 val.p_value = encoded_val;
793 ble_gatts_value_t val;
797 val.p_value = encoded_val;
uint8_t info_ccp_connected_mode
ctl_time_set_t
Time set field in control packet.
#define BLE_WPTS_PRU_DYNAMIC_OPTION_TEMPERATURE_BITMSK
uint8_t info_adj_power_capability
#define BLE_WPTS_PRU_DYNAMIC_ALERT_ADJ_POWER_RESP_BITPOS
ble_gatts_char_handles_t pru_dynamic_handles
#define BLE_WPTS_PRU_INFO_ADJUST_POWER_BITPOS
#define BLE_WPTS_PRU_CONTROL_LEN
Characteristic value lengths.
#define BLE_WPTS_PRU_DYNAMIC_TEMPERATURE_POS
static void on_pru_control_write(ble_wpts_t *p_wpts, ble_gatts_evt_write_t *p_evt_write)
Handle write events to the PRU Control characteristic.
#define BLE_WPTS_PRU_DYNAMIC_OPTIONAL_FIELDS_POS
PRU dynamic characteristic byte positions.
#define BLE_WPTS_PTU_STATIC_PTU_MAX_LOAD_RES_POS
#define BLE_WPTS_PTU_STATIC_OPTION_MAX_RESISTANCE_BITPOS
ble_wpts_evt_handler_t evt_handler
#define BLE_WPTS_PRU_ALERT_OVER_CURRENT_BITMSK
static uint32_t pru_control_char_add(ble_wpts_t *p_wpt, const ble_wpts_init_t *p_wpts_init)
Add PRU Control characteristic.
#define BLE_WPTS_PRU_STATIC_OPTION_DELTA_R1_BITPOS
PRU Static characteristic Option field.
#define BLE_WPTS_PRU_INFO_CHARGE_COMPLETE_CONN_MODE_BITMSK
#define BLE_WPTS_PRU_INFO_PTU_TEST_MODE_BITPOS
uint8_t wired_charge_detect
uint32_t ble_wpts_pru_static_set(ble_wpts_t *p_wpt, pru_static_t *p_pru_static)
Sets value of the PRU Static Parameter characteristic.
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VOUT_BITMSK
#define BLE_WPTS_PRU_ALERT_MODE_NO_MODE_TRANSITION_VAL
PRU Alert Mode transition.
#define BLE_WPTS_UUID16
WPT Service UUIDs.
static uint32_t pru_alert_char_add(ble_wpts_t *p_wpt, const ble_wpts_init_t *p_wpts_init)
Add PRU Alert characteristic.
#define BLE_WPTS_PTU_STATIC_PTU_MAX_SRC_IMPED_POS
#define BLE_WPTS_PTU_STATIC_HW_REV_POS
uint8_t adjust_power_response
#define BLE_WPTS_PRU_INFO_CHARGE_COMPLETE_CONN_MODE_BITPOS
#define BLE_WPTS_PTU_STATIC_MAX_LOAD_RESISTANCE_BITMSK
#define BLE_WPTS_PRU_DYNAMIC_LEN
static void on_connect(ble_wpts_t *p_wpt, ble_evt_t *p_ble_evt)
Connect event handler.
#define BLE_WPTS_PTU_STATIC_NUM_DEVICES_BITMSK
uint32_t ble_wpts_uuid_init(void)
Prepare softdevice for using the WPTS 128 bit UUIDs.
#define BLE_WPTS_ENABLE_PRU_ADJ_POWER_BITPOS
#define BLE_WPTS_PRU_INFO_BLE_BITMSK
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VRECT_MIN_DYN_BITPOS
#define BLE_WPTS_PTU_STATIC_MAX_SOURCE_IMPEDANCE_BITPOS
PTU Static characteristic PTU Max Source Impedance bitfield.
#define BLE_WPTS_PRU_ALERT_WIRED_CHARGER_DETECT_BITPOS
#define BLE_WPTS_PRU_DYNAMIC_VRECT_HIGH_DYN_POS
uint8_t enable_pru_output
#define BLE_WPTS_PRU_DYNAMIC_OPTION_IOUT_BITPOS
#define BLE_WPTS_OPTION_VALID_VAL
#define BLE_WPTS_PRU_DYNAMIC_IRECT_POS
#define BLE_WPTS_PRU_ALERT_POS
PRU alert characteristic byte positions.
uint8_t ptu_max_source_impedance
ctl_perm_t
Permissions fields in control packet.
#define BLE_WPTS_PRU_DYNAMIC_PTU_TESTER_COMMAND_POS
PRU Alert Parameter structure.
#define BLE_WPTS_PRU_ALERT_CHARGE_COMPLETE_BITMSK
#define BLE_WPTS_PRU_ALERT_MIN_LEN
#define BLE_WPTS_PTU_STATIC_OPTIONAL_FIELDS_POS
PTU Static Parameter characteristic byte positions.
#define BLE_WPTS_PRU_CONTROL_PERMISSION_POS
uint32_t ble_wpts_init(ble_wpts_t *p_wpt, const ble_wpts_init_t *p_wpts_init)
Initialize the WPT Service.
#define BLE_WPTS_PTU_STATIC_PTU_CLASS_POS
#define BLE_WPTS_PTU_STATIC_OPTION_MAX_IMPEDANCE_BITPOS
PTU Static characteristic Option bitfield definitions.
const ble_gatts_rw_authorize_reply_params_t m_auth_reply
#define BLE_WPTS_PRU_ALERT_MODE_TRANSITION_BITPOS
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VRECT_SET_DYN_BITPOS
#define BLE_WPTS_PRU_STATIC_VRECT_MIN_STATIC_POS
#define BLE_WPTS_PTU_STATIC_OPTION_MAX_RESISTANCE_BITMSK
#define BLE_WPTS_PRU_DYNAMIC_VRECT_SET_DYN_POS
#define BLE_WPTS_PRU_ALERT_MAX_LEN
#define BLE_WPTS_PTU_STATIC_FW_REV_POS
uint32_t ble_wpts_pru_dynamic_set(ble_wpts_t *p_wpts, pru_dynamic_t *p_pru_dynamic)
Transfer latest read sensor data to characteristic attributes.
#define BLE_WPTS_PTU_STATIC_MAX_SOURCE_IMPEDANCE_BITMSK
uint8_t devices_supported_bitval
ptu_tester_command_t tester_command
#define BLE_WPTS_PRU_DYNAMIC_ALERT_CHARGE_PORT_BITPOS
PRU dynamic characteristic Alert bitfield. Remaining bitifields is the same as PRU Alert characterist...
#define BLE_WPTS_BITFIELD_WRITE(bitfield, msk, pos, val)
Write bitfield.
#define BLE_WPTS_PRU_STATIC_HW_REV_POS
#define BLE_WPTS_PRU_STATIC_OPTION_DELTA_R1_BITMSK
#define BLE_WPTS_PTU_STATIC_NUM_DEVICES_BITPOS
PTU Static characteristic PTU MAx Number of Devices Supported field.
#define BLE_WPTS_PRU_STATIC_VRECT_SET_POS
uint8_t info_sep_btle_radio
#define BLE_WPTS_PRU_ALERT_MODE_TRANSITION_BITMSK
uint8_t option_fields_r1_valid
static void on_ptu_static_parameter_write(ble_wpts_t *p_wpts, ble_gatts_evt_write_t *p_evt_write)
Handle write events to the PTU Static Parameter characteristic.
uint16_t vrect_high_static
#define BLE_WPTS_PRU_STATIC_FW_REV_POS
#define BLE_WPTS_PRU_ALERT_OVER_VOLTAGE_BITPOS
PRU Alert characteristic value bitfield.
ble_wpts_evt_type_t evt_type
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VOUT_BITPOS
PRU Dynamic Parameter characteristic Option field.
ble_gatts_char_handles_t pru_control_handles
#define BLE_WPTS_PRU_DYNAMIC_ALERT_CHARGE_PORT_BITMSK
#define BLE_WPTS_PRU_DYNAMIC_PRU_ALERT_POS
uint8_t ptu_max_load_resistance
uint32_t ble_wpts_alert_send(ble_wpts_t *p_wpt, pru_alert_t *p_alert)
Sends PRU alert if notification has been enabled.
#define BLE_WPTS_PTU_STATIC_OPTION_MAX_IMPEDANCE_BITMSK
#define BLE_WPTS_PRU_DYNAMIC_VOUT_POS
static void on_disconnect(ble_wpts_t *p_wpt, ble_evt_t *p_ble_evt)
Disconnect event handler.
#define BLE_WPTS_ENABLE_PRU_CHARGE_INDICATOR_BITMSK
#define BLE_WPTS_ENABLE_PRU_ADJ_POWER_BITMSK
#define BLE_WPTS_PTU_STATIC_LEN
uint8_t option_valid_max_imp
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VRECT_HIGH_DYN_BITPOS
static uint32_t pru_dynamic_char_add(ble_wpts_t *p_wpt, const ble_wpts_init_t *p_wpts_init)
Add PRU Dynamic Parameter characteristic.
#define BLE_WPTS_PRU_ALERT_OVER_VOLTAGE_BITMSK
#define BLE_WPTS_PRU_STATIC_LEN
PRU Static Parameter structure.
#define BLE_WPTS_PRU_ALERT_SELF_PROTECTION_BITPOS
#define BLE_WPTS_PRU_STATIC_PROTOCOL_REV_POS
static void pru_static_encode(ble_wpts_t *p_wpt, const pru_static_t *p_pru_static, uint8_t *p_encoded_buffer)
Encode PRU Static Parameter structure.
uint8_t pru_over_temperature
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VRECT_SET_DYN_BITMSK
static void on_write(ble_wpts_t *p_wpt, ble_evt_t *p_ble_evt)
Write event handler.
#define BLE_WPTS_PRU_CONTROL_TIME_SET_POS
void ble_wpts_uuid_get(ble_wpts_uuid128_t uuid128, ble_uuid_t *ble_uuid)
Get ble_uuid representation of 128 bit UUID.
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VRECT_MIN_DYN_BITMSK
#define BLE_WPTS_PRU_STATIC_VRECT_HIGH_STATIC_POS
#define BLE_WPTS_PRU_DYNAMIC_OPTION_IOUT_BITMSK
#define BLE_WPTS_PRU_INFO_POWER_CONTROL_PREF_BITMSK
#define BLE_WPTS_PRU_ALERT_OVER_TEMPERATURE_BITMSK
#define BLE_WPTS_PRU_DYNAMIC_IOUT_POS
#define BLE_WPTS_PRU_ALERT_OVER_CURRENT_BITPOS
#define BLE_WPTS_PTU_STATIC_MAX_LOAD_RESISTANCE_BITPOS
PTU Static characteristic PTU Max Load Resistance bitfield.
union ble_wpts_evt_t::@0 data
#define BLE_WPTS_PRU_STATIC_PRU_INFORMATION_POS
ble_gatts_char_handles_t pru_alert_handles
WPT Service init structure.
#define BLE_WPTS_ENABLE_PRU_OUTPUT_BITMSK
#define BLE_WPTS_PRU_STATIC_PRECT_MAX_POS
uint8_t option_valid_max_res
uint8_t info_nfc_receiver
uint16_t vrect_min_static
#define BLE_WPTS_PRU_INFO_POWER_CONTROL_PREF_BITPOS
pru_control_t pru_control
#define BLE_WPTS_PRU_DYNAMIC_OPTION_TEMPERATURE_BITPOS
ctl_adj_power_t
Power adjust settings in control packet.
#define BLE_WPTS_PRU_DYNAMIC_ALERT_ADJ_POWER_RESP_BITMSK
#define BLE_WPTS_PRU_CONTROL_ENABLES_POS
PRU Control characteristic fields byte positions.
uint8_t enable_pru_charge_indicator
#define BLE_WPTS_ENABLE_PRU_OUTPUT_BITPOS
PRU Control characteristic Enables bit field definitions.
#define BLE_WPTS_PRU_INFO_ADJUST_POWER_BITMSK
static void on_pru_alert_cccd_write(ble_wpts_t *p_wpts, ble_gatts_evt_write_t *p_evt_write)
Handle write events to the PRU Alert CCCD.
void ble_wpts_on_ble_evt(ble_wpts_t *p_wpt, ble_evt_t *p_ble_evt)
WPT Service BLE stack event handler.
#define BLE_WPTS_PRU_ALERT_SELF_PROTECTION_BITMSK
#define BLE_WPTS_PRU_DYNAMIC_VRECT_MIN_DYN_POS
#define BLE_WPTS_PTU_STATIC_PROTOCOL_REV_POS
uint8_t info_ptu_test_mode
uint8_t pru_self_protection
#define BLE_WPTS_PRU_ALERT_WIRED_CHARGER_DETECT_BITMSK
static uint32_t ptu_static_char_add(ble_wpts_t *p_wpt, const ble_wpts_init_t *p_wpts_init)
Add PTU Static Parameter characteristic.
#define BLE_WPTS_ENABLE_PRU_CHARGE_INDICATOR_BITPOS
static uint32_t pru_static_char_add(ble_wpts_t *p_wpt, const ble_wpts_init_t *p_wpts_init)
Add PRU Static Parameter characteristic.
ble_wpts_evt_handler_t evt_handler
ble_gatts_char_handles_t ptu_static_handles
#define BLE_WPTS_PRU_INFO_NFC_BITMSK
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VRECT_HIGH_DYN_BITMSK
static void pru_dynamic_encode(ble_wpts_t *p_wpt, const pru_dynamic_t *p_pru_dynamic, uint8_t *p_encoded_buffer)
Encode PRU Dynamic Parameter structure.
#define BLE_WPTS_PRU_INFO_NFC_BITPOS
PRU Static characteristic PRU Information field.
#define BLE_WPTS_PRU_ALERT_OVER_TEMPERATURE_BITPOS
#define BLE_WPTS_BITFIELD_READ(bitfield, msk, pos)
Read bitfield.
ble_srv_security_mode_t wpts_attr_md
WPT Service status structure.
#define BLE_WPTS_PRU_INFO_PTU_TEST_MODE_BITMSK
ctl_adj_power_t adj_power
#define BLE_WPTS_PRU_STATIC_DELTA_R1_POS
#define BLE_WPTS_PTU_STATIC_PTU_POWER_POS
PRU Dynamic Parameter structure.
#define BLE_WPTS_PRU_DYNAMIC_VRECT_POS
#define BLE_WPTS_PRU_INFO_BLE_BITPOS
ble_gatts_char_handles_t pru_static_handles
#define BLE_WPTS_PRU_ALERT_CHARGE_COMPLETE_BITPOS
#define BLE_WPTS_PTU_STATIC_NUM_DEVICES_SUPPORTED_POS
#define BLE_WPTS_PRU_STATIC_PRU_CATEGORY_POS