master/fsm_change.h
changeset 454 25cc4a3b9e0a
parent 435 779a18d12e6c
child 505 bc443ca0077f
equal deleted inserted replaced
453:2ecaa53c6291 454:25cc4a3b9e0a
    46 #include "datagram.h"
    46 #include "datagram.h"
    47 #include "slave.h"
    47 #include "slave.h"
    48 
    48 
    49 /*****************************************************************************/
    49 /*****************************************************************************/
    50 
    50 
       
    51 /**
       
    52    Mode of the change state machine.
       
    53 */
       
    54 
       
    55 typedef enum {
       
    56     EC_FSM_CHANGE_MODE_FULL, /**< full state change */
       
    57     EC_FSM_CHANGE_MODE_ACK_ONLY /**< only state acknowledgement */
       
    58 }
       
    59 ec_fsm_change_mode_t;
       
    60 
       
    61 /*****************************************************************************/
       
    62 
    51 typedef struct ec_fsm_change ec_fsm_change_t; /**< \see ec_fsm_change */
    63 typedef struct ec_fsm_change ec_fsm_change_t; /**< \see ec_fsm_change */
    52 
    64 
    53 /**
    65 /**
    54    EtherCAT state change FSM.
    66    EtherCAT state change FSM.
    55 */
    67 */
    58 {
    70 {
    59     ec_slave_t *slave; /**< slave the FSM runs on */
    71     ec_slave_t *slave; /**< slave the FSM runs on */
    60     ec_datagram_t *datagram; /**< datagram used in the state machine */
    72     ec_datagram_t *datagram; /**< datagram used in the state machine */
    61 
    73 
    62     void (*state)(ec_fsm_change_t *); /**< slave state change state function */
    74     void (*state)(ec_fsm_change_t *); /**< slave state change state function */
       
    75     ec_fsm_change_mode_t mode; /**< full state change, or ack only. */
    63     ec_slave_state_t requested_state; /**< input: state */
    76     ec_slave_state_t requested_state; /**< input: state */
       
    77     ec_slave_state_t old_state; /**< prior slave state */
    64     unsigned long jiffies_start; /**< change timer */
    78     unsigned long jiffies_start; /**< change timer */
    65     uint8_t take_time; /**< take sending timestamp */
    79     uint8_t take_time; /**< take sending timestamp */
    66 };
    80 };
    67 
    81 
    68 /*****************************************************************************/
    82 /*****************************************************************************/
    69 
    83 
    70 void ec_fsm_change_init(ec_fsm_change_t *, ec_datagram_t *);
    84 void ec_fsm_change_init(ec_fsm_change_t *, ec_datagram_t *);
    71 void ec_fsm_change_clear(ec_fsm_change_t *);
    85 void ec_fsm_change_clear(ec_fsm_change_t *);
    72 
    86 
    73 void ec_fsm_change(ec_fsm_change_t *, ec_slave_t *, ec_slave_state_t);
    87 void ec_fsm_change_start(ec_fsm_change_t *, ec_slave_t *, ec_slave_state_t);
       
    88 void ec_fsm_change_ack(ec_fsm_change_t *, ec_slave_t *);
    74 
    89 
    75 int ec_fsm_change_exec(ec_fsm_change_t *);
    90 int ec_fsm_change_exec(ec_fsm_change_t *);
    76 int ec_fsm_change_success(ec_fsm_change_t *);
    91 int ec_fsm_change_success(ec_fsm_change_t *);
    77 
    92 
    78 /*****************************************************************************/
    93 /*****************************************************************************/