diff -r 2ecaa53c6291 -r 25cc4a3b9e0a master/fsm_change.h --- a/master/fsm_change.h Fri Oct 27 10:41:02 2006 +0000 +++ b/master/fsm_change.h Fri Oct 27 11:15:07 2006 +0000 @@ -48,6 +48,18 @@ /*****************************************************************************/ +/** + Mode of the change state machine. +*/ + +typedef enum { + EC_FSM_CHANGE_MODE_FULL, /**< full state change */ + EC_FSM_CHANGE_MODE_ACK_ONLY /**< only state acknowledgement */ +} +ec_fsm_change_mode_t; + +/*****************************************************************************/ + typedef struct ec_fsm_change ec_fsm_change_t; /**< \see ec_fsm_change */ /** @@ -60,7 +72,9 @@ ec_datagram_t *datagram; /**< datagram used in the state machine */ void (*state)(ec_fsm_change_t *); /**< slave state change state function */ + ec_fsm_change_mode_t mode; /**< full state change, or ack only. */ ec_slave_state_t requested_state; /**< input: state */ + ec_slave_state_t old_state; /**< prior slave state */ unsigned long jiffies_start; /**< change timer */ uint8_t take_time; /**< take sending timestamp */ }; @@ -70,7 +84,8 @@ void ec_fsm_change_init(ec_fsm_change_t *, ec_datagram_t *); void ec_fsm_change_clear(ec_fsm_change_t *); -void ec_fsm_change(ec_fsm_change_t *, ec_slave_t *, ec_slave_state_t); +void ec_fsm_change_start(ec_fsm_change_t *, ec_slave_t *, ec_slave_state_t); +void ec_fsm_change_ack(ec_fsm_change_t *, ec_slave_t *); int ec_fsm_change_exec(ec_fsm_change_t *); int ec_fsm_change_success(ec_fsm_change_t *);