Nordic Semiconductor nRF5 AirFuel SDK  version 2.2.0
ptu_sm.c
Go to the documentation of this file.
1 /* Copyright (c) Nordic Semiconductor. All Rights Reserved.
2  *
3  * The information contained herein is property of Nordic Semiconductor ASA.
4  * Terms and conditions of usage are described in detail in NORDIC
5  * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
6  *
7  * Licensees are granted free, non-transferable use of the information. NO
8  * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
9  * the file.
10  *
11  */
12 
15 #include "ptu_sm.h"
16 
17 /******************************************************************************/
20 /******************************************************************************/
21 
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 }
86 
89 /******************************************************************************/
92 /******************************************************************************/
93 
95 {
96  static ptu_sm_state_t current_state = PTU_SM_STATE_CONFIGURATION;
97 
98  if(signal != PTU_SM_SIGNAL_NULL && p_state != 0) // used for debugging
99  {
100  p_state->next_state = m_get_next_state(signal, p_state);
101  p_state->prev_state = p_state->current_state;
102  p_state->current_state = p_state->next_state;
103  current_state = p_state->current_state;
104  }
105 
106  return current_state;
107 }
108 
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.
Definition: ptu_sm.c:29
State machine state variables.
Definition: ptu_sm.h:67
ptu_sm_signal_type_t
PTU signal type.
Definition: ptu_sm.h:48
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
ptu_sm_state_t next_state
Definition: ptu_sm.h:71
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.
Definition: ptu_sm.c:94