Nordic Semiconductor nRF5 AirFuel SDK  version 2.2.0
ptu_beacons.c File Reference
#include "ptu_beacons.h"
#include "ptu_sensors.h"
#include "ptu_conn_man.h"
#include "ptu_distant_list_handler.h"
#include "ptu_power_ctl.h"
#include "ptu_test_mux.h"

Go to the source code of this file.

Functions

API implementation
void ptu_beacons_start (void)
 Start PTU Beacons.
 
void ptu_beacons_init (void)
 Initialize beacons handling.
 

Static functions and variables

enum  ptu_beacon_status_t { PTU_BEACON_STATUS_OFF, PTU_BEACON_STATUS_SHORT, PTU_BEACON_STATUS_LONG, PTU_BEACON_STATUS_EXTENDED }
 Beacon status. More...
 
static ptu_beacon_ctl_t m_beacon_ctl
 
static bool long_beacon_extension = false
 
 APP_TIMER_DEF (m_beacon_timer_id)
 
 APP_TIMER_DEF (m_extended_beacon_load_var_timer_id)
 
static void m_extended_beacon_load_var_handler (void *p_context)
 Handler for extended beacon load variation timer.
 
static void m_beacon_timer_handler (void *context)
 Function for controlling beacon behaviour. More...
 

Enumeration Type Documentation

Beacon status.

Enumerator
PTU_BEACON_STATUS_OFF 

Beacon off.

PTU_BEACON_STATUS_SHORT 

Short beacon on.

PTU_BEACON_STATUS_LONG 

Long beacon on.

PTU_BEACON_STATUS_EXTENDED 

Extended beacon on.

Definition at line 29 of file ptu_beacons.c.

Function Documentation

APP_TIMER_DEF ( m_beacon_timer_id  )

Beacon timer

APP_TIMER_DEF ( m_extended_beacon_load_var_timer_id  )

Extended beacon timer

static void m_beacon_timer_handler ( void *  context)
static

Function for controlling beacon behaviour.

Parameters
[in]contextInterrupt context.

Definition at line 76 of file ptu_beacons.c.

77 {
78  uint32_t err_code;
79 
80  // Ensure beacon is only switched on/off in power save state
81  if(PTU_SM_CURRENT_STATE() == PTU_SM_STATE_POWER_SAVE)
82  {
83  switch(m_beacon_ctl.status)
84  {
85  const ptu_sensor_data_t * sensor_data;
86 
87  case PTU_BEACON_STATUS_OFF: // Start of beacon period
88 
90  APP_ERROR_CHECK(err_code);
91 
92  err_code = ptu_tmux_poweramp_enable_set(true);
93  APP_ERROR_CHECK(err_code);
94 
95  err_code = ptu_sensors_read();
96  APP_ERROR_CHECK(err_code);
97 
98  err_code = ptu_sensors_data_get(&sensor_data);
99  APP_ERROR_CHECK(err_code);
100 
101  err_code = TIMER_START(m_beacon_timer_id, PTU_BEACON_DURATION_SHORT_MS, NULL);
102  APP_ERROR_CHECK(err_code);
103 
105  break;
106 
107  case PTU_BEACON_STATUS_SHORT: // Short beacon end
108  m_beacon_ctl.period++;
109 
110  err_code = ptu_sensors_data_get(&sensor_data);
111  APP_ERROR_CHECK(err_code);
112 
113  if((m_beacon_ctl.period < PTU_BEACON_CYCLES_LONG) && !sensor_data->load_var_detected)
114  {
115  err_code = ptu_tmux_poweramp_enable_set(false); // Switch coil off
116  APP_ERROR_CHECK(err_code);
117  err_code = TIMER_START(m_beacon_timer_id, (PTU_BEACON_CYCLE_PERIOD_MS - PTU_BEACON_DURATION_SHORT_MS), NULL);
118  APP_ERROR_CHECK(err_code);
120  }
121  else // Start long beacon
122  {
125  APP_ERROR_CHECK(err_code);
126  err_code = TIMER_START(m_beacon_timer_id, PTU_BEACON_DURATION_LONG_MS, NULL);
127  APP_ERROR_CHECK(err_code);
128  err_code = TIMER_START( m_extended_beacon_load_var_timer_id, PTU_POWER_SAVE_LONG_BEACON_PTX_READ_INTERVAL_MS, NULL);
129  APP_ERROR_CHECK(err_code);
131  m_beacon_ctl.period = 0;
132  }
133  break;
134 
135  case PTU_BEACON_STATUS_LONG: // Long beacon end
136  err_code = ptu_sensors_data_get(&sensor_data);
137  APP_ERROR_CHECK(err_code);
138 
139  err_code = app_timer_stop(m_extended_beacon_load_var_timer_id);
140  APP_ERROR_CHECK(err_code);
141 
143 
145  {
146  // Start extended beacon
147  long_beacon_extension = false;
148  err_code = TIMER_START(m_beacon_timer_id,(PTU_BEACON_DURATION_EXTENDED_MS - PTU_BEACON_DURATION_LONG_MS), NULL);
149  APP_ERROR_CHECK(err_code);
151  }
152 
153  else
154  {
156  err_code = ptu_tmux_poweramp_enable_set(false);
157  APP_ERROR_CHECK(err_code);
158  err_code = TIMER_START(m_beacon_timer_id,
160  NULL);
161  APP_ERROR_CHECK(err_code);
163  }
164  break;
165 
166  case PTU_BEACON_STATUS_EXTENDED: // Extended Long Beacon end
168  err_code = ptu_tmux_poweramp_enable_set(false);
169  APP_ERROR_CHECK(err_code);
171  m_beacon_timer_handler(NULL); // As we have executed extended beacon, we know that the cycle time has passed anyway, so execute beacon state function
172  break;
173 
174  default:
175  APP_ERROR_HANDLER(NRF_ERROR_INVALID_STATE);
176  break;
177  }
178  }
179 }
#define PTU_BEACON_DURATION_SHORT_MS
Definition: ptu_config.h:184
uint32_t ptu_sensors_read(void)
Read sensors. This function should typically be called regularly by a timer and can generate events b...
Definition: ptu_sensors.c:303
#define PTU_BEACON_CYCLE_PERIOD_MS
Definition: ptu_config.h:182
#define PTU_POWERAMP_INPUT_BEACON_LONG
Definition: ptu_hw_config.h:60
#define PTU_BEACON_DURATION_LONG_MS
Definition: ptu_config.h:234
static void m_beacon_timer_handler(void *context)
Function for controlling beacon behaviour.
Definition: ptu_beacons.c:76
#define PTU_POWERAMP_INPUT_BEACON_SHORT
Definition: ptu_hw_config.h:59
#define PTU_BEACON_CYCLES_LONG
Definition: ptu_config.h:183
uint32_t ptu_tmux_poweramp_enable_set(bool enable)
Test wrapper for ptu_hal_poweramp_enable_set().
Definition: ptu_test_mux.c:69
uint32_t ptu_power_ctrl_set_poweramp_input(uint16_t level)
Perform power control adjustments.
static bool long_beacon_extension
Definition: ptu_beacons.c:48
void ptu_dlh_notify_beacon_active(void)
Notify distant list handler that the beacon is now active.
static ptu_beacon_ctl_t m_beacon_ctl
Definition: ptu_beacons.c:45
#define TIMER_START(timer_id, ms, p_ctx)
Definition: wpt.h:32
uint32_t ptu_sensors_data_get(const ptu_sensor_data_t **sensors_data)
Get the latest data read from the PTU sensors.
Definition: ptu_sensors.c:404
void ptu_dlh_notify_beacon_disabled(void)
Notify distant list handler that the beacon is now disabled.
void ptu_sensors_clear_long_beacon_extension_load_variation_buffer(void)
Empty buffer containing load variation sample data for Long Beacon Extension.
Definition: ptu_sensors.c:412
#define PTU_BEACON_DURATION_EXTENDED_MS
Definition: ptu_config.h:235
#define PTU_SM_CURRENT_STATE()
Definition: ptu.h:36
#define PTU_POWER_SAVE_LONG_BEACON_PTX_READ_INTERVAL_MS
Definition: ptu_config.h:236
Definition of PTU sensor data.
Definition: ptu_hw_config.h:99

Variable Documentation

ptu_beacon_ctl_t m_beacon_ctl
static

Beacon control structure

Definition at line 45 of file ptu_beacons.c.

bool long_beacon_extension = false
static

Should long beacon be extended?

Definition at line 48 of file ptu_beacons.c.