Nordic Semiconductor nRF5 AirFuel SDK  version 2.2.0
PRU BLE Service API (server)

Data Structures

struct  ble_wpts_evt_t
 WPT Service event. More...
 
struct  ble_wpts_init_t
 WPT Service init structure. More...
 
struct  ble_wpts_s
 WPT Service status structure. More...
 

Typedefs

typedef struct ble_wpts_s ble_wpts_t
 WPT Service status structure.
 
typedef void(* ble_wpts_evt_handler_t) (ble_wpts_t *p_wpts, ble_wpts_evt_t *p_evt)
 WPT Service event handler type. More...
 

Enumerations

enum  ble_wpts_evt_type_t {
  BLE_WPTS_EVT_ALERT_ENABLED, BLE_WPTS_EVT_ALERT_DISABLED, BLE_WPTS_EVT_ALERT_INDICATION_CONFIRMED, BLE_WPTS_EVT_PRU_CONTROL_COMMAND,
  BLE_WPTS_EVT_PTU_STATIC_PARAMETER, BLE_WPTS_EVT_PRU_DYNAMIC_READ
}
 

Functions

uint32_t ble_wpts_init (ble_wpts_t *p_wpts, const ble_wpts_init_t *p_wpts_init)
 Initialize the WPT Service. More...
 
void ble_wpts_on_ble_evt (ble_wpts_t *p_wpts, ble_evt_t *p_ble_evt)
 WPT Service BLE stack event handler. More...
 
uint32_t ble_wpts_alert_send (ble_wpts_t *p_wpts, pru_alert_t *p_alert)
 Sends PRU alert if notification has been enabled. More...
 
uint32_t ble_wpts_pru_static_set (ble_wpts_t *p_wpts, pru_static_t *p_pru_static)
 Sets value of the PRU Static Parameter characteristic. More...
 
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. More...
 

API implementation

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. More...
 
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. More...
 
static uint32_t pru_control_char_add (ble_wpts_t *p_wpt, const ble_wpts_init_t *p_wpts_init)
 Add PRU Control characteristic. More...
 
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. More...
 
static uint32_t pru_alert_char_add (ble_wpts_t *p_wpt, const ble_wpts_init_t *p_wpts_init)
 Add PRU Alert characteristic. More...
 
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. More...
 
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. More...
 

Detailed Description

Typedef Documentation

typedef void(* ble_wpts_evt_handler_t) (ble_wpts_t *p_wpts, ble_wpts_evt_t *p_evt)

WPT Service event handler type.

Parameters
[in]p_wptsWPT Service structure.
[in]p_evtWPT Service event.

Definition at line 60 of file ble_wpts.h.

Enumeration Type Documentation

< WPT Service event type.

Enumerator
BLE_WPTS_EVT_ALERT_ENABLED 

PRU Alert value notification/indication enabled.

BLE_WPTS_EVT_ALERT_DISABLED 

PRU Alert value notification/indication disabled.

BLE_WPTS_EVT_ALERT_INDICATION_CONFIRMED 

PRU Alert confirmed received from PTU.

BLE_WPTS_EVT_PRU_CONTROL_COMMAND 

PRU Control command received

BLE_WPTS_EVT_PTU_STATIC_PARAMETER 

PTU Static parameters set

BLE_WPTS_EVT_PRU_DYNAMIC_READ 

PTU has read PRU dynamic characteristic.

Definition at line 30 of file ble_wpts.h.

Function Documentation

uint32_t ble_wpts_init ( ble_wpts_t p_wpts,
const ble_wpts_init_t p_wpts_init 
)

Initialize the WPT Service.

Parameters
[out]p_wptsWPT Service structure. This structure will have to be supplied by the application. It will be initialized by this function, and will later be used to identify this particular service instance.
[in]p_wpts_initInformation needed to initialize the service.
Returns
NRF_SUCCESS on successful initialization of service, otherwise an error code.

Definition at line 642 of file ble_wpts.c.

643 {
644  uint32_t err_code;
645  ble_uuid_t ble_uuid;
646 
647  // Initialize service structure
648  p_wpt->evt_handler = p_wpts_init->evt_handler;
649  p_wpt->conn_handle = BLE_CONN_HANDLE_INVALID;
650 
651  err_code = ble_wpts_uuid_init();
652  if (err_code != NRF_SUCCESS)
653  {
654  return err_code;
655  }
656 
657  BLE_UUID_BLE_ASSIGN(ble_uuid, BLE_WPTS_UUID16);
658 
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)
661  {
662  return err_code;
663  }
664 
665  // Add PRU Control characteristic
666  err_code = pru_control_char_add(p_wpt, p_wpts_init);
667  if (err_code != NRF_SUCCESS)
668  {
669  return err_code;
670  }
671 
672  // Add PTU Static Parameter characteristic
673  err_code = ptu_static_char_add(p_wpt, p_wpts_init);
674  if (err_code != NRF_SUCCESS)
675  {
676  return err_code;
677  }
678 
679  // Add PRU Alert characteristic
680  err_code = pru_alert_char_add(p_wpt, p_wpts_init);
681  if (err_code != NRF_SUCCESS)
682  {
683  return err_code;
684  }
685 
686  // Add PRU Static Parameter characteristic
687  err_code = pru_static_char_add(p_wpt, p_wpts_init);
688  if (err_code != NRF_SUCCESS)
689  {
690  return err_code;
691  }
692 
693  // Add PRU Dynamic Parameter characteristic
694  err_code = pru_dynamic_char_add(p_wpt, p_wpts_init);
695  if (err_code != NRF_SUCCESS)
696  {
697  return err_code;
698  }
699 
700  return NRF_SUCCESS;
701 }
ble_wpts_evt_handler_t evt_handler
Definition: ble_wpts.h:65
static uint32_t pru_control_char_add(ble_wpts_t *p_wpt, const ble_wpts_init_t *p_wpts_init)
Add PRU Control characteristic.
Definition: ble_wpts.c:386
#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.
Definition: ble_wpts.c:489
uint32_t ble_wpts_uuid_init(void)
Prepare softdevice for using the WPTS 128 bit UUIDs.
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.
Definition: ble_wpts.c:598
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.
Definition: ble_wpts.c:437
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.
Definition: ble_wpts.c:545
void ble_wpts_on_ble_evt ( ble_wpts_t p_wpts,
ble_evt_t *  p_ble_evt 
)

WPT Service BLE stack event handler.

Handles all events from the BLE stack of interest to the WPT Service.

Parameters
[in]p_wptsWPT Service structure.
[in]p_ble_evtEvent received from the BLE stack.

Definition at line 196 of file ble_wpts.c.

197 {
198  switch (p_ble_evt->header.evt_id)
199  {
200  case BLE_GAP_EVT_CONNECTED:
201  on_connect(p_wpt, p_ble_evt);
202  break;
203 
204  case BLE_GAP_EVT_DISCONNECTED:
205  on_disconnect(p_wpt, p_ble_evt);
206  break;
207 
208  case BLE_GATTS_EVT_WRITE:
209  on_write(p_wpt, p_ble_evt);
210  break;
211 
212  default:
213  break;
214  }
215 }
static void on_connect(ble_wpts_t *p_wpt, ble_evt_t *p_ble_evt)
Connect event handler.
Definition: ble_wpts.c:45
static void on_disconnect(ble_wpts_t *p_wpt, ble_evt_t *p_ble_evt)
Disconnect event handler.
Definition: ble_wpts.c:55
static void on_write(ble_wpts_t *p_wpt, ble_evt_t *p_ble_evt)
Write event handler.
Definition: ble_wpts.c:171
uint32_t ble_wpts_alert_send ( ble_wpts_t p_wpts,
pru_alert_t p_alert 
)

Sends PRU alert if notification has been enabled.

The application calls this function to send a PRU alert. If notification has been enabled, the alert data is encoded and sent to the client.

Parameters
[in]p_wptsWPT Service structure.
[in]p_alertPRU alert value.
Returns
NRF_SUCCESS on success, otherwise an error code.

Definition at line 703 of file ble_wpts.c.

704 {
705  uint32_t err_code;
706 
707  // Send value if connected and notifying
708  if (p_wpt->conn_handle != BLE_CONN_HANDLE_INVALID)
709  {
710  uint16_t hvx_len;
711  ble_gatts_hvx_params_t hvx_params;
712  uint8_t alert[BLE_WPTS_PRU_ALERT_MAX_LEN];
713 
714  memset(&hvx_params, 0, sizeof(hvx_params));
715  memset(alert, 0, BLE_WPTS_PRU_ALERT_MAX_LEN);
716  hvx_params.p_data = alert;
717  hvx_len = BLE_WPTS_PRU_ALERT_MIN_LEN;
718 
719  hvx_params.handle = p_wpt->pru_alert_handles.value_handle;
720  hvx_params.type = BLE_GATT_HVX_NOTIFICATION; // As Mode Transition is not supported, we only send Alerts as notifications.
721  hvx_params.offset = 0;
722  hvx_params.p_len = &hvx_len;
723 
724  BLE_WPTS_BITFIELD_WRITE(hvx_params.p_data[BLE_WPTS_PRU_ALERT_POS], \
727  p_alert->alerts.pru_over_voltage );
728 
729  BLE_WPTS_BITFIELD_WRITE(hvx_params.p_data[BLE_WPTS_PRU_ALERT_POS], \
732  p_alert->alerts.pru_over_current);
733 
734  BLE_WPTS_BITFIELD_WRITE(hvx_params.p_data[BLE_WPTS_PRU_ALERT_POS], \
737  p_alert->alerts.pru_over_temperature);
738 
739  BLE_WPTS_BITFIELD_WRITE(hvx_params.p_data[BLE_WPTS_PRU_ALERT_POS], \
742  p_alert->alerts.pru_self_protection);
743 
744  BLE_WPTS_BITFIELD_WRITE(hvx_params.p_data[BLE_WPTS_PRU_ALERT_POS], \
747  p_alert->alerts.charge_complete);
748 
749  BLE_WPTS_BITFIELD_WRITE(hvx_params.p_data[BLE_WPTS_PRU_ALERT_POS], \
752  p_alert->alerts.wired_charge_detect);
753 
758 
759  err_code = sd_ble_gatts_hvx(p_wpt->conn_handle, &hvx_params);
760  }
761  else
762  {
763  err_code = NRF_ERROR_INVALID_STATE;
764  }
765 
766  return err_code;
767 }
#define BLE_WPTS_PRU_ALERT_OVER_CURRENT_BITMSK
uint8_t wired_charge_detect
Definition: wpt.h:139
#define BLE_WPTS_PRU_ALERT_MODE_NO_MODE_TRANSITION_VAL
PRU Alert Mode transition.
#define BLE_WPTS_PRU_ALERT_WIRED_CHARGER_DETECT_BITPOS
#define BLE_WPTS_PRU_ALERT_POS
PRU alert characteristic byte positions.
#define BLE_WPTS_PRU_ALERT_CHARGE_COMPLETE_BITMSK
#define BLE_WPTS_PRU_ALERT_MIN_LEN
#define BLE_WPTS_PRU_ALERT_MODE_TRANSITION_BITPOS
#define BLE_WPTS_PRU_ALERT_MAX_LEN
#define BLE_WPTS_BITFIELD_WRITE(bitfield, msk, pos, val)
Write bitfield.
#define BLE_WPTS_PRU_ALERT_MODE_TRANSITION_BITMSK
#define BLE_WPTS_PRU_ALERT_OVER_VOLTAGE_BITPOS
PRU Alert characteristic value bitfield.
uint8_t pru_over_voltage
Definition: wpt.h:134
#define BLE_WPTS_PRU_ALERT_OVER_VOLTAGE_BITMSK
#define BLE_WPTS_PRU_ALERT_SELF_PROTECTION_BITPOS
uint8_t pru_over_current
Definition: wpt.h:135
uint8_t pru_over_temperature
Definition: wpt.h:136
#define BLE_WPTS_PRU_ALERT_OVER_TEMPERATURE_BITMSK
#define BLE_WPTS_PRU_ALERT_OVER_CURRENT_BITPOS
#define BLE_WPTS_PRU_ALERT_SELF_PROTECTION_BITMSK
uint8_t pru_self_protection
Definition: wpt.h:137
#define BLE_WPTS_PRU_ALERT_WIRED_CHARGER_DETECT_BITMSK
#define BLE_WPTS_PRU_ALERT_OVER_TEMPERATURE_BITPOS
pru_alert_bits_t alerts
Definition: wpt.h:147
uint8_t charge_complete
Definition: wpt.h:138
#define BLE_WPTS_PRU_ALERT_CHARGE_COMPLETE_BITPOS
uint32_t ble_wpts_pru_static_set ( ble_wpts_t p_wpts,
pru_static_t p_pru_static 
)

Sets value of the PRU Static Parameter characteristic.

Parameters
[in]p_wptsWPT Service structure.
[in]p_pru_staticPRU Static Parameter characteristic structure.
Returns
NRF_SUCCESS on success, otherwise an error code.

Definition at line 769 of file ble_wpts.c.

770 {
771  uint8_t encoded_val[BLE_WPTS_PRU_STATIC_LEN];
772  ble_gatts_value_t val;
773 
774  val.len = BLE_WPTS_PRU_STATIC_LEN;
775  val.offset = 0;
776  val.p_value = encoded_val;
777 
778  // encode characteristic value
779  pru_static_encode(p_wpt, p_pru_static, encoded_val);
780 
781  // set value
782  return sd_ble_gatts_value_set(p_wpt->conn_handle,
783  p_wpt->pru_static_handles.value_handle,
784  &val);
785 }
#define BLE_WPTS_PRU_STATIC_LEN
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.
Definition: ble_wpts.c:226
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.

Parameters
[in]p_wptsWPT Service structure.
[in]p_pru_dynamicPRU dynamic data.
Returns
NRF_SUCCESS on success, otherwise an error code.

Sets value of the PRU Dynamic Parameter characteristic.

Definition at line 790 of file ble_wpts.c.

791 {
792  uint8_t encoded_val[BLE_WPTS_PRU_DYNAMIC_LEN];
793  ble_gatts_value_t val;
794 
795  val.len = BLE_WPTS_PRU_DYNAMIC_LEN;
796  val.offset = 0;
797  val.p_value = encoded_val;
798 
799  // encode characteristic value
800  pru_dynamic_encode(p_wpts, p_pru_dynamic, encoded_val);
801 
802  // set value
803  return sd_ble_gatts_value_set(p_wpts->conn_handle,
804  p_wpts->pru_dynamic_handles.value_handle,
805  &val);
806 }
ble_gatts_char_handles_t pru_dynamic_handles
Definition: ble_wpts.h:79
#define BLE_WPTS_PRU_DYNAMIC_LEN
uint16_t conn_handle
Definition: ble_wpts.h:80
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.
Definition: ble_wpts.c:284
static void pru_static_encode ( ble_wpts_t p_wpt,
const pru_static_t p_pru_static,
uint8_t *  p_encoded_buffer 
)
static

Encode PRU Static Parameter structure.

Parameters
[in]p_wptPRU Service structure.
[in]p_pru_staticStatic parameter structure to be encoded.
[out]p_encoded_bufferBuffer where the encoded data will be written.
Returns
Size of encoded data.

Definition at line 226 of file ble_wpts.c.

228 {
229  memset(p_encoded_buffer,0,BLE_WPTS_PRU_STATIC_LEN);
230  p_encoded_buffer[BLE_WPTS_PRU_STATIC_PROTOCOL_REV_POS] = p_pru_static->protocol_rev;
231  p_encoded_buffer[BLE_WPTS_PRU_STATIC_PRU_CATEGORY_POS] = p_pru_static->pru_category;
232  p_encoded_buffer[BLE_WPTS_PRU_STATIC_HW_REV_POS] = p_pru_static->hw_revision;
233  p_encoded_buffer[BLE_WPTS_PRU_STATIC_FW_REV_POS] = p_pru_static->fw_revision;
234  p_encoded_buffer[BLE_WPTS_PRU_STATIC_PRECT_MAX_POS] = p_pru_static->prect_max;
235  (void)uint16_encode(p_pru_static->vrect_min_static, &p_encoded_buffer[BLE_WPTS_PRU_STATIC_VRECT_MIN_STATIC_POS]);
236  (void)uint16_encode(p_pru_static->vrect_high_static, &p_encoded_buffer[BLE_WPTS_PRU_STATIC_VRECT_HIGH_STATIC_POS]);
237  (void)uint16_encode(p_pru_static->vrect_set, &p_encoded_buffer[BLE_WPTS_PRU_STATIC_VRECT_SET_POS]);
238  (void)uint16_encode(p_pru_static->delta_r1, &p_encoded_buffer[BLE_WPTS_PRU_STATIC_DELTA_R1_POS]);
239 
243  p_pru_static->option_fields_r1_valid);
244 
248  p_pru_static->info_nfc_receiver);
249 
253  p_pru_static->info_sep_btle_radio);
254 
258  p_pru_static->info_pc_alg_pref);
259 
263  p_pru_static->info_adj_power_capability);
264 
268  p_pru_static->info_ccp_connected_mode);
269 
273  p_pru_static->info_ptu_test_mode);
274 }
uint8_t info_ccp_connected_mode
Definition: wpt.h:105
uint8_t info_adj_power_capability
Definition: wpt.h:104
#define BLE_WPTS_PRU_INFO_ADJUST_POWER_BITPOS
#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 pru_category
Definition: wpt.h:92
#define BLE_WPTS_PRU_INFO_CHARGE_COMPLETE_CONN_MODE_BITPOS
#define BLE_WPTS_PRU_INFO_BLE_BITMSK
uint8_t protocol_rev
Definition: wpt.h:91
uint8_t info_pc_alg_pref
Definition: wpt.h:103
#define BLE_WPTS_PTU_STATIC_OPTIONAL_FIELDS_POS
PTU Static Parameter characteristic byte positions.
uint8_t fw_revision
Definition: wpt.h:94
#define BLE_WPTS_PRU_STATIC_VRECT_MIN_STATIC_POS
#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_PRU_STATIC_VRECT_SET_POS
uint8_t info_sep_btle_radio
Definition: wpt.h:102
uint8_t option_fields_r1_valid
Definition: wpt.h:100
uint16_t vrect_high_static
Definition: wpt.h:97
#define BLE_WPTS_PRU_STATIC_FW_REV_POS
uint8_t hw_revision
Definition: wpt.h:93
#define BLE_WPTS_PRU_STATIC_LEN
#define BLE_WPTS_PRU_STATIC_PROTOCOL_REV_POS
#define BLE_WPTS_PRU_STATIC_VRECT_HIGH_STATIC_POS
uint16_t delta_r1
Definition: wpt.h:99
#define BLE_WPTS_PRU_INFO_POWER_CONTROL_PREF_BITMSK
#define BLE_WPTS_PRU_STATIC_PRU_INFORMATION_POS
#define BLE_WPTS_PRU_STATIC_PRECT_MAX_POS
uint8_t info_nfc_receiver
Definition: wpt.h:101
uint16_t vrect_min_static
Definition: wpt.h:96
#define BLE_WPTS_PRU_INFO_POWER_CONTROL_PREF_BITPOS
uint16_t vrect_set
Definition: wpt.h:98
#define BLE_WPTS_PRU_INFO_ADJUST_POWER_BITMSK
uint8_t info_ptu_test_mode
Definition: wpt.h:106
#define BLE_WPTS_PRU_INFO_NFC_BITMSK
#define BLE_WPTS_PRU_INFO_NFC_BITPOS
PRU Static characteristic PRU Information field.
#define BLE_WPTS_PRU_INFO_PTU_TEST_MODE_BITMSK
#define BLE_WPTS_PRU_STATIC_DELTA_R1_POS
#define BLE_WPTS_PRU_INFO_BLE_BITPOS
uint8_t prect_max
Definition: wpt.h:95
#define BLE_WPTS_PRU_STATIC_PRU_CATEGORY_POS
static void pru_dynamic_encode ( ble_wpts_t p_wpt,
const pru_dynamic_t p_pru_dynamic,
uint8_t *  p_encoded_buffer 
)
static

Encode PRU Dynamic Parameter structure.

Parameters
[in]p_wptPRU Service structure.
[in]p_pru_dynamicDynamic parameter structure to be encoded.
[out]p_encoded_bufferBuffer where the encoded data will be written.
Returns
Size of encoded data.

Definition at line 284 of file ble_wpts.c.

286 {
287 
288  memset(p_encoded_buffer,0,BLE_WPTS_PRU_DYNAMIC_LEN);
289  p_encoded_buffer[BLE_WPTS_PRU_DYNAMIC_OPTIONAL_FIELDS_POS] = p_pru_dynamic->optional_fields;
290  (void)uint16_encode(p_pru_dynamic->vrect, &p_encoded_buffer[BLE_WPTS_PRU_DYNAMIC_VRECT_POS]);
291  (void)uint16_encode(p_pru_dynamic->irect, &p_encoded_buffer[BLE_WPTS_PRU_DYNAMIC_IRECT_POS]);
292 
293  if(BLE_WPTS_BITFIELD_READ(p_pru_dynamic->optional_fields, \
296  {
297  (void)uint16_encode(p_pru_dynamic->vout, &p_encoded_buffer[BLE_WPTS_PRU_DYNAMIC_VOUT_POS]);
298  }
299 
300  if(BLE_WPTS_BITFIELD_READ(p_pru_dynamic->optional_fields, \
303  {
304  (void)uint16_encode(p_pru_dynamic->iout, &p_encoded_buffer[BLE_WPTS_PRU_DYNAMIC_IOUT_POS]);
305  }
306 
307  if(BLE_WPTS_BITFIELD_READ(p_pru_dynamic->optional_fields, \
310  {
311  p_encoded_buffer[BLE_WPTS_PRU_DYNAMIC_TEMPERATURE_POS] = (uint8_t)(p_pru_dynamic->temperature + 40);
312  }
313 
314  if(BLE_WPTS_BITFIELD_READ(p_pru_dynamic->optional_fields, \
317  {
318  (void)uint16_encode(p_pru_dynamic->vrect_min_dyn, &p_encoded_buffer[BLE_WPTS_PRU_DYNAMIC_VRECT_MIN_DYN_POS]);
319  }
320 
321  if(BLE_WPTS_BITFIELD_READ(p_pru_dynamic->optional_fields, \
324  {
325  (void)uint16_encode(p_pru_dynamic->vrect_set_dyn, &p_encoded_buffer[BLE_WPTS_PRU_DYNAMIC_VRECT_SET_DYN_POS]);
326  }
327 
328  if(BLE_WPTS_BITFIELD_READ(p_pru_dynamic->optional_fields, \
331  {
332  (void)uint16_encode(p_pru_dynamic->vrect_high_dyn, &p_encoded_buffer[BLE_WPTS_PRU_DYNAMIC_VRECT_HIGH_DYN_POS]);
333  }
334 
335 
339  p_pru_dynamic->alerts.pru_over_voltage);
340 
344  p_pru_dynamic->alerts.pru_over_current);
345 
349  p_pru_dynamic->alerts.pru_over_temperature);
350 
354  p_pru_dynamic->alerts.pru_self_protection);
355 
359  p_pru_dynamic->alerts.charge_complete);
360 
364  p_pru_dynamic->alerts.wired_charge_detect);
365 
369  p_pru_dynamic->adjust_power_response);
370 
374  p_pru_dynamic->pru_charge_port);
375 
376  p_encoded_buffer[BLE_WPTS_PRU_DYNAMIC_PTU_TESTER_COMMAND_POS] = (uint8_t)(p_pru_dynamic->tester_command);
377 }
uint16_t irect
Definition: wpt.h:168
#define BLE_WPTS_PRU_DYNAMIC_OPTION_TEMPERATURE_BITMSK
#define BLE_WPTS_PRU_DYNAMIC_ALERT_ADJ_POWER_RESP_BITPOS
#define BLE_WPTS_PRU_DYNAMIC_TEMPERATURE_POS
pru_alert_bits_t alerts
Definition: wpt.h:175
#define BLE_WPTS_PRU_DYNAMIC_OPTIONAL_FIELDS_POS
PRU dynamic characteristic byte positions.
#define BLE_WPTS_PRU_ALERT_OVER_CURRENT_BITMSK
uint8_t wired_charge_detect
Definition: wpt.h:139
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VOUT_BITMSK
uint16_t vout
Definition: wpt.h:169
uint8_t adjust_power_response
Definition: wpt.h:177
#define BLE_WPTS_PRU_DYNAMIC_LEN
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VRECT_MIN_DYN_BITPOS
#define BLE_WPTS_PRU_ALERT_WIRED_CHARGER_DETECT_BITPOS
uint16_t vrect
Definition: wpt.h:167
#define BLE_WPTS_PRU_DYNAMIC_VRECT_HIGH_DYN_POS
uint16_t vrect_set_dyn
Definition: wpt.h:173
#define BLE_WPTS_PRU_DYNAMIC_OPTION_IOUT_BITPOS
#define BLE_WPTS_OPTION_VALID_VAL
#define BLE_WPTS_PRU_DYNAMIC_IRECT_POS
int16_t temperature
Definition: wpt.h:171
uint16_t iout
Definition: wpt.h:170
#define BLE_WPTS_PRU_DYNAMIC_PTU_TESTER_COMMAND_POS
#define BLE_WPTS_PRU_ALERT_CHARGE_COMPLETE_BITMSK
uint16_t vrect_high_dyn
Definition: wpt.h:174
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VRECT_SET_DYN_BITPOS
#define BLE_WPTS_PRU_DYNAMIC_VRECT_SET_DYN_POS
ptu_tester_command_t tester_command
Definition: wpt.h:180
#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.
uint16_t vrect_min_dyn
Definition: wpt.h:172
#define BLE_WPTS_PRU_ALERT_OVER_VOLTAGE_BITPOS
PRU Alert characteristic value bitfield.
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VOUT_BITPOS
PRU Dynamic Parameter characteristic Option field.
#define BLE_WPTS_PRU_DYNAMIC_ALERT_CHARGE_PORT_BITMSK
#define BLE_WPTS_PRU_DYNAMIC_PRU_ALERT_POS
uint8_t pru_charge_port
Definition: wpt.h:176
#define BLE_WPTS_PRU_DYNAMIC_VOUT_POS
uint8_t pru_over_voltage
Definition: wpt.h:134
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VRECT_HIGH_DYN_BITPOS
#define BLE_WPTS_PRU_ALERT_OVER_VOLTAGE_BITMSK
#define BLE_WPTS_PRU_ALERT_SELF_PROTECTION_BITPOS
uint8_t pru_over_current
Definition: wpt.h:135
uint8_t pru_over_temperature
Definition: wpt.h:136
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VRECT_SET_DYN_BITMSK
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VRECT_MIN_DYN_BITMSK
#define BLE_WPTS_PRU_DYNAMIC_OPTION_IOUT_BITMSK
#define BLE_WPTS_PRU_ALERT_OVER_TEMPERATURE_BITMSK
#define BLE_WPTS_PRU_DYNAMIC_IOUT_POS
#define BLE_WPTS_PRU_ALERT_OVER_CURRENT_BITPOS
uint8_t optional_fields
Definition: wpt.h:166
#define BLE_WPTS_PRU_DYNAMIC_OPTION_TEMPERATURE_BITPOS
#define BLE_WPTS_PRU_DYNAMIC_ALERT_ADJ_POWER_RESP_BITMSK
#define BLE_WPTS_PRU_ALERT_SELF_PROTECTION_BITMSK
#define BLE_WPTS_PRU_DYNAMIC_VRECT_MIN_DYN_POS
uint8_t pru_self_protection
Definition: wpt.h:137
#define BLE_WPTS_PRU_ALERT_WIRED_CHARGER_DETECT_BITMSK
#define BLE_WPTS_PRU_DYNAMIC_OPTION_VRECT_HIGH_DYN_BITMSK
#define BLE_WPTS_PRU_ALERT_OVER_TEMPERATURE_BITPOS
#define BLE_WPTS_BITFIELD_READ(bitfield, msk, pos)
Read bitfield.
uint8_t charge_complete
Definition: wpt.h:138
#define BLE_WPTS_PRU_DYNAMIC_VRECT_POS
#define BLE_WPTS_PRU_ALERT_CHARGE_COMPLETE_BITPOS
static uint32_t pru_control_char_add ( ble_wpts_t p_wpt,
const ble_wpts_init_t p_wpts_init 
)
static

Add PRU Control characteristic.

Parameters
[in]p_wptPRU Service structure.
[in]p_wpts_initInformation needed to initialize the service.
Returns
NRF_SUCCESS on success, otherwise an error code.

Definition at line 386 of file ble_wpts.c.

387 {
388  ble_gatts_char_md_t char_md;
389  ble_gatts_attr_t attr_char_value;
390  ble_uuid_t ble_uuid;
391  ble_gatts_attr_md_t attr_md;
392 
393  memset(&char_md, 0, sizeof(char_md));
394 
395  char_md.char_props.write = 1;
396  char_md.char_props.read = 1;
397  char_md.char_props.write_wo_resp = 1; // Required for "GATT write without response" procedure
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;
403 
405 
406  memset(&attr_md, 0, sizeof(attr_md));
407 
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;
411  attr_md.rd_auth = 0;
412  attr_md.wr_auth = 0;
413  attr_md.vlen = 0;
414 
415  memset(&attr_char_value, 0, sizeof(attr_char_value));
416 
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;
421  attr_char_value.max_len = BLE_WPTS_PRU_CONTROL_LEN;
422  attr_char_value.p_value = NULL;
423 
424  return sd_ble_gatts_characteristic_add(p_wpt->service_handle,
425  &char_md,
426  &attr_char_value,
427  &p_wpt->pru_control_handles);
428 }
#define BLE_WPTS_PRU_CONTROL_LEN
Characteristic value lengths.
uint16_t service_handle
Definition: ble_wpts.h:74
ble_gatts_char_handles_t pru_control_handles
Definition: ble_wpts.h:75
void ble_wpts_uuid_get(ble_wpts_uuid128_t uuid128, ble_uuid_t *ble_uuid)
Get ble_uuid representation of 128 bit UUID.
ble_srv_security_mode_t wpts_attr_md
Definition: ble_wpts.h:67
static uint32_t ptu_static_char_add ( ble_wpts_t p_wpt,
const ble_wpts_init_t p_wpts_init 
)
static

Add PTU Static Parameter characteristic.

Parameters
[in]p_wptPRU Service structure.
[in]p_wpts_initInformation needed to initialize the service.
Returns
NRF_SUCCESS on success, otherwise an error code.

Definition at line 437 of file ble_wpts.c.

438 {
439  ble_gatts_char_md_t char_md;
440  ble_gatts_attr_t attr_char_value;
441  ble_uuid_t ble_uuid;
442  ble_gatts_attr_md_t attr_md;
443 
444  memset(&char_md, 0, sizeof(char_md));
445 
446  char_md.char_props.write = 1;
447  char_md.char_props.read = 1;
448  char_md.char_props.write_wo_resp = 1; // Required for "GATT write without response" procedure
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;
454 
456 
457  memset(&attr_md, 0, sizeof(attr_md));
458 
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;
461 
462  attr_md.vloc = BLE_GATTS_VLOC_STACK;
463  attr_md.rd_auth = 0;
464  attr_md.wr_auth = 0;
465  attr_md.vlen = 1;
466 
467  memset(&attr_char_value, 0, sizeof(attr_char_value));
468 
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;
473  attr_char_value.max_len = BLE_WPTS_PTU_STATIC_LEN;
474  attr_char_value.p_value = NULL;
475 
476  return sd_ble_gatts_characteristic_add(p_wpt->service_handle,
477  &char_md,
478  &attr_char_value,
479  &p_wpt->ptu_static_handles);
480 }
uint16_t service_handle
Definition: ble_wpts.h:74
#define BLE_WPTS_PTU_STATIC_LEN
void ble_wpts_uuid_get(ble_wpts_uuid128_t uuid128, ble_uuid_t *ble_uuid)
Get ble_uuid representation of 128 bit UUID.
ble_gatts_char_handles_t ptu_static_handles
Definition: ble_wpts.h:76
ble_srv_security_mode_t wpts_attr_md
Definition: ble_wpts.h:67
static uint32_t pru_alert_char_add ( ble_wpts_t p_wpt,
const ble_wpts_init_t p_wpts_init 
)
static

Add PRU Alert characteristic.

Parameters
[in]p_wptPRU Service structure.
[in]p_wpts_initInformation needed to initialize the service.
Returns
NRF_SUCCESS on success, otherwise an error code.

Definition at line 489 of file ble_wpts.c.

490 {
491  ble_gatts_char_md_t char_md;
492  ble_gatts_attr_md_t cccd_md;
493  ble_gatts_attr_t attr_char_value;
494  ble_uuid_t ble_uuid;
495  ble_gatts_attr_md_t attr_md;
496  uint8_t init_value = 0;
497 
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;
506 
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;
511 
513 
514  memset(&attr_md, 0, sizeof(attr_md));
515 
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;
519  attr_md.rd_auth = 0;
520  attr_md.wr_auth = 0;
521  attr_md.vlen = 0;
522 
523  memset(&attr_char_value, 0, sizeof(attr_char_value));
524 
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;
529  attr_char_value.max_len = BLE_WPTS_PRU_ALERT_MAX_LEN;
530  attr_char_value.p_value = &init_value;
531 
532  return sd_ble_gatts_characteristic_add(p_wpt->service_handle,
533  &char_md,
534  &attr_char_value,
535  &p_wpt->pru_alert_handles);
536 }
uint16_t service_handle
Definition: ble_wpts.h:74
#define BLE_WPTS_PRU_ALERT_MAX_LEN
void ble_wpts_uuid_get(ble_wpts_uuid128_t uuid128, ble_uuid_t *ble_uuid)
Get ble_uuid representation of 128 bit UUID.
ble_gatts_char_handles_t pru_alert_handles
Definition: ble_wpts.h:77
ble_srv_security_mode_t wpts_attr_md
Definition: ble_wpts.h:67
static uint32_t pru_static_char_add ( ble_wpts_t p_wpt,
const ble_wpts_init_t p_wpts_init 
)
static

Add PRU Static Parameter characteristic.

Parameters
[in]p_wptPRU Service structure.
[in]p_wpts_initInformation needed to initialize the service.
Returns
NRF_SUCCESS on success, otherwise an error code.

Definition at line 545 of file ble_wpts.c.

546 {
547  ble_gatts_char_md_t char_md;
548  ble_gatts_attr_t attr_char_value;
549  ble_uuid_t ble_uuid;
550  ble_gatts_attr_md_t attr_md;
551  uint8_t encoded_initial_val[BLE_WPTS_PRU_STATIC_LEN];
552 
553  memset(&char_md, 0, sizeof(char_md));
554 
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;
561 
563 
564  memset(&attr_md, 0, sizeof(attr_md));
565 
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;
569  attr_md.rd_auth = 0;
570  attr_md.wr_auth = 0;
571  attr_md.vlen = 1;
572 
573  memset(&attr_char_value, 0, sizeof(attr_char_value));
574 
575  attr_char_value.p_uuid = &ble_uuid;
576  attr_char_value.p_attr_md = &attr_md;
577  attr_char_value.init_len = BLE_WPTS_PRU_STATIC_LEN;
578 
579  pru_static_encode(p_wpt, &p_wpts_init->pru_static, encoded_initial_val);
580 
581  attr_char_value.init_offs = 0;
582  attr_char_value.max_len = BLE_WPTS_PRU_STATIC_LEN;
583  attr_char_value.p_value = encoded_initial_val;
584 
585  return sd_ble_gatts_characteristic_add(p_wpt->service_handle,
586  &char_md,
587  &attr_char_value,
588  &p_wpt->pru_static_handles);
589 }
uint16_t service_handle
Definition: ble_wpts.h:74
pru_static_t pru_static
Definition: ble_wpts.h:66
#define BLE_WPTS_PRU_STATIC_LEN
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.
Definition: ble_wpts.c:226
void ble_wpts_uuid_get(ble_wpts_uuid128_t uuid128, ble_uuid_t *ble_uuid)
Get ble_uuid representation of 128 bit UUID.
ble_srv_security_mode_t wpts_attr_md
Definition: ble_wpts.h:67
ble_gatts_char_handles_t pru_static_handles
Definition: ble_wpts.h:78
static uint32_t pru_dynamic_char_add ( ble_wpts_t p_wpt,
const ble_wpts_init_t p_wpts_init 
)
static

Add PRU Dynamic Parameter characteristic.

Parameters
[in]p_wptPRU Service structure.
[in]p_wpts_initInformation needed to initialize the service.
Returns
NRF_SUCCESS on success, otherwise an error code.

Definition at line 598 of file ble_wpts.c.

599 {
600  ble_gatts_char_md_t char_md;
601  ble_gatts_attr_t attr_char_value;
602  ble_uuid_t ble_uuid;
603  ble_gatts_attr_md_t attr_md;
604  uint8_t encoded_initial_val[BLE_WPTS_PRU_DYNAMIC_LEN];
605 
606  memset(&char_md, 0, sizeof(char_md));
607 
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;
614 
616 
617  memset(&attr_md, 0, sizeof(attr_md));
618 
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;
622  attr_md.rd_auth = 0;
623  attr_md.wr_auth = 0;
624  attr_md.vlen = 1;
625 
626  memset(&attr_char_value, 0, sizeof(attr_char_value));
627  memset(encoded_initial_val, 0, sizeof(encoded_initial_val));
628 
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;
633  attr_char_value.max_len = BLE_WPTS_PRU_DYNAMIC_LEN;
634  attr_char_value.p_value = encoded_initial_val;
635 
636  return sd_ble_gatts_characteristic_add(p_wpt->service_handle, \
637  &char_md, \
638  &attr_char_value, \
639  &p_wpt->pru_dynamic_handles);
640 }
ble_gatts_char_handles_t pru_dynamic_handles
Definition: ble_wpts.h:79
#define BLE_WPTS_PRU_DYNAMIC_LEN
uint16_t service_handle
Definition: ble_wpts.h:74
void ble_wpts_uuid_get(ble_wpts_uuid128_t uuid128, ble_uuid_t *ble_uuid)
Get ble_uuid representation of 128 bit UUID.
ble_srv_security_mode_t wpts_attr_md
Definition: ble_wpts.h:67