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 /*****************************************************************************/ |