51 |
51 |
52 /** Finite state machine of an EtherCAT slave. |
52 /** Finite state machine of an EtherCAT slave. |
53 */ |
53 */ |
54 struct ec_fsm_slave { |
54 struct ec_fsm_slave { |
55 ec_slave_t *slave; /**< slave the FSM runs on */ |
55 ec_slave_t *slave; /**< slave the FSM runs on */ |
56 ec_datagram_t *datagram; /**< datagram used in the state machine */ |
56 struct list_head list; /**< Used for execution list. */ |
57 |
57 |
58 void (*state)(ec_fsm_slave_t *); /**< master state function */ |
58 void (*state)(ec_fsm_slave_t *, ec_datagram_t *); /**< State function. */ |
|
59 ec_datagram_t *datagram; /**< Previous state datagram. */ |
59 ec_sdo_request_t *sdo_request; /**< SDO request to process. */ |
60 ec_sdo_request_t *sdo_request; /**< SDO request to process. */ |
60 ec_reg_request_t *reg_request; /**< Register request to process. */ |
61 ec_reg_request_t *reg_request; /**< Register request to process. */ |
61 ec_foe_request_t *foe_request; /**< FoE request to process. */ |
62 ec_foe_request_t *foe_request; /**< FoE request to process. */ |
62 off_t foe_index; /**< index to FoE write request data */ |
63 off_t foe_index; /**< Index to FoE write request data. */ |
63 ec_soe_request_t *soe_request; /**< SoE request to process. */ |
64 ec_soe_request_t *soe_request; /**< SoE request to process. */ |
64 |
65 |
65 ec_fsm_coe_t fsm_coe; /**< CoE state machine */ |
66 ec_fsm_coe_t fsm_coe; /**< CoE state machine. */ |
66 ec_fsm_foe_t fsm_foe; /**< FoE state machine */ |
67 ec_fsm_foe_t fsm_foe; /**< FoE state machine. */ |
67 ec_fsm_soe_t fsm_soe; /**< SoE state machine */ |
68 ec_fsm_soe_t fsm_soe; /**< SoE state machine. */ |
68 }; |
69 }; |
69 |
70 |
70 /*****************************************************************************/ |
71 /*****************************************************************************/ |
71 |
72 |
72 void ec_fsm_slave_init(ec_fsm_slave_t *, ec_slave_t *, ec_datagram_t *); |
73 void ec_fsm_slave_init(ec_fsm_slave_t *, ec_slave_t *); |
73 void ec_fsm_slave_clear(ec_fsm_slave_t *); |
74 void ec_fsm_slave_clear(ec_fsm_slave_t *); |
74 |
75 |
75 void ec_fsm_slave_exec(ec_fsm_slave_t *); |
76 int ec_fsm_slave_exec(ec_fsm_slave_t *, ec_datagram_t *); |
76 void ec_fsm_slave_ready(ec_fsm_slave_t *); |
77 void ec_fsm_slave_set_ready(ec_fsm_slave_t *); |
|
78 int ec_fsm_slave_is_ready(const ec_fsm_slave_t *); |
77 |
79 |
78 /*****************************************************************************/ |
80 /*****************************************************************************/ |
79 |
81 |
80 |
82 |
81 #endif // __EC_FSM_SLAVE_H__ |
83 #endif // __EC_FSM_SLAVE_H__ |