Nordic Semiconductor nRF5 AirFuel SDK  version 2.2.0
ptu_sm.c File Reference
#include "ptu_sm.h"

Go to the source code of this file.

Functions

Static funcitons and variables.
static ptu_sm_state_t m_get_next_state (ptu_sm_signal_type_t signal, ptu_sm_state_vars_t *p_state)
 Find the next state given the current state and the state machine event. More...
 
API implementation.
ptu_sm_state_t ptu_sm_execute (ptu_sm_signal_type_t signal, ptu_sm_state_vars_t *p_state)
 State machine input signal handler. More...
 

Function Documentation

static ptu_sm_state_t m_get_next_state ( ptu_sm_signal_type_t  signal,
ptu_sm_state_vars_t p_state 
)
static

Find the next state given the current state and the state machine event.

Parameters
signalState machine signal.
p_stateCurrent state variables.
Returns
The resulting state.

Definition at line 29 of file ptu_sm.c.

30 {
31  ptu_sm_state_t next_state = p_state->current_state;
32 
33  switch(p_state->current_state)
34  {
35  case PTU_SM_STATE_CONFIGURATION:
36  if( signal == PTU_SM_SIGNAL_CONFIGURATION_COMPLETE) next_state = PTU_SM_STATE_POWER_SAVE;
37  else if(signal == PTU_SM_SIGNAL_LOCAL_FAULT) next_state = PTU_SM_STATE_LOCAL_FAULT;
38  break;
39 
40  case PTU_SM_STATE_POWER_SAVE:
41  if( signal == PTU_SM_SIGNAL_LOCAL_FAULT) next_state = PTU_SM_STATE_LOCAL_FAULT;
42  else if(signal == PTU_SM_SIGNAL_SYSTEM_ERROR) next_state = PTU_SM_STATE_LATCH_FAULT;
43  else if(signal == PTU_SM_SIGNAL_ROGUE_OBJECT_DETECTED) next_state = PTU_SM_STATE_LATCH_FAULT;
44  else if(signal == PTU_SM_SIGNAL_PRU_ADV_RCVD) next_state = PTU_SM_STATE_LOW_POWER;
45  break;
46 
47  case PTU_SM_STATE_LOW_POWER:
48  if( signal == PTU_SM_SIGNAL_LOCAL_FAULT) next_state = PTU_SM_STATE_LOCAL_FAULT;
49  else if(signal == PTU_SM_SIGNAL_SYSTEM_ERROR) next_state = PTU_SM_STATE_LATCH_FAULT;
50  else if(signal == PTU_SM_SIGNAL_ROGUE_OBJECT_DETECTED) next_state = PTU_SM_STATE_LATCH_FAULT;
51  else if(signal == PTU_SM_SIGNAL_REGISTRATION_TIMEOUT ||
52  signal == PTU_SM_SIGNAL_ALL_DEVICES_DISCONNECTED) next_state = PTU_SM_STATE_POWER_SAVE;
53  else if(signal == PTU_SM_SIGNAL_CHARGE_START) next_state = PTU_SM_STATE_POWER_TRANSFER;
54  break;
55 
56  case PTU_SM_STATE_POWER_TRANSFER:
57  if( signal == PTU_SM_SIGNAL_LOCAL_FAULT) next_state = PTU_SM_STATE_LOCAL_FAULT;
58  else if(signal == PTU_SM_SIGNAL_SYSTEM_ERROR) next_state = PTU_SM_STATE_LATCH_FAULT;
59  else if(signal == PTU_SM_SIGNAL_ROGUE_OBJECT_DETECTED) next_state = PTU_SM_STATE_LATCH_FAULT;
60  else if(signal == PTU_SM_SIGNAL_ALL_DEVICES_DISCONNECTED ||
61  signal == PTU_SM_SIGNAL_PRU_ALL_CHARGE_COMPLETE) next_state = PTU_SM_STATE_POWER_SAVE;
62  break;
63 
64  case PTU_SM_STATE_LATCH_FAULT:
65  if( signal == PTU_SM_SIGNAL_LOCAL_FAULT) next_state = PTU_SM_STATE_LOCAL_FAULT;
66  else if(signal == PTU_SM_SIGNAL_LATCHING_FAULT_CLEARED_BY_USER)
67  next_state = PTU_SM_STATE_CONFIGURATION;
68  break;
69 
70  case PTU_SM_STATE_LOCAL_FAULT:
71  if( signal == PTU_SM_SIGNAL_LOCAL_FAULT_CLEARED)
72  {
73  if(p_state->prev_state == PTU_SM_STATE_LATCH_FAULT)
74  next_state = PTU_SM_STATE_LATCH_FAULT;
75  else
76  next_state = PTU_SM_STATE_CONFIGURATION;
77  }
78  break;
79 
80  default:
81  break;
82  }
83 
84  return next_state;
85 }
ptu_sm_state_t prev_state
Definition: ptu_sm.h:69
ptu_sm_state_t current_state
Definition: ptu_sm.h:70
ptu_sm_state_t
PTU states.
Definition: ptu_sm.h:35