49 |
49 |
50 #include "fsm_slave.h" |
50 #include "fsm_slave.h" |
51 |
51 |
52 /*****************************************************************************/ |
52 /*****************************************************************************/ |
53 |
53 |
|
54 /** |
|
55 * EEPROM write request. |
|
56 */ |
|
57 |
|
58 typedef struct |
|
59 { |
|
60 struct list_head list; |
|
61 ec_slave_t *slave; |
|
62 off_t offset; |
|
63 size_t size; |
|
64 const uint16_t *words; |
|
65 ec_request_state_t state; |
|
66 } |
|
67 ec_eeprom_write_request_t; |
|
68 |
|
69 /*****************************************************************************/ |
|
70 |
54 typedef struct ec_fsm_master ec_fsm_master_t; /**< \see ec_fsm_master */ |
71 typedef struct ec_fsm_master ec_fsm_master_t; /**< \see ec_fsm_master */ |
55 |
72 |
56 /** |
73 /** |
57 Finite state machine of an EtherCAT master. |
74 Finite state machine of an EtherCAT master. |
58 */ |
75 */ |
62 ec_master_t *master; /**< master the FSM runs on */ |
79 ec_master_t *master; /**< master the FSM runs on */ |
63 ec_datagram_t *datagram; /**< datagram used in the state machine */ |
80 ec_datagram_t *datagram; /**< datagram used in the state machine */ |
64 unsigned int retries; /**< retries on datagram timeout. */ |
81 unsigned int retries; /**< retries on datagram timeout. */ |
65 |
82 |
66 void (*state)(ec_fsm_master_t *); /**< master state function */ |
83 void (*state)(ec_fsm_master_t *); /**< master state function */ |
|
84 int idle; /**< state machine is in idle phase */ |
|
85 unsigned long scan_jiffies; /**< beginning of slave scanning */ |
67 unsigned int slaves_responding; /**< number of responding slaves */ |
86 unsigned int slaves_responding; /**< number of responding slaves */ |
68 unsigned int topology_change_pending; /**< bus topology changed */ |
87 unsigned int topology_change_pending; /**< bus topology changed */ |
69 ec_slave_state_t slave_states; /**< states of responding slaves */ |
88 ec_slave_state_t slave_states; /**< states of responding slaves */ |
70 unsigned int validate; /**< non-zero, if validation to do */ |
89 unsigned int validate; /**< non-zero, if validation to do */ |
|
90 unsigned int tainted; /**< non-zero, if the current bus topology does |
|
91 not meet the initial conditions */ |
|
92 unsigned int config_error; /**< error during slave configuration */ |
71 ec_slave_t *slave; /**< current slave */ |
93 ec_slave_t *slave; /**< current slave */ |
|
94 ec_eeprom_write_request_t *eeprom_request; /**< EEPROM write request */ |
|
95 off_t eeprom_index; /**< index to EEPROM write request data */ |
72 ec_sdo_request_t *sdo_request; /**< SDO request to process */ |
96 ec_sdo_request_t *sdo_request; /**< SDO request to process */ |
73 uint16_t sii_offset; |
|
74 |
97 |
75 ec_fsm_slave_t fsm_slave; /**< slave state machine */ |
98 ec_fsm_slave_t fsm_slave; /**< slave state machine */ |
76 ec_fsm_sii_t fsm_sii; /**< SII state machine */ |
99 ec_fsm_sii_t fsm_sii; /**< SII state machine */ |
77 ec_fsm_change_t fsm_change; /**< State change state machine */ |
100 ec_fsm_change_t fsm_change; /**< State change state machine */ |
78 ec_fsm_coe_t fsm_coe; /**< CoE state machine */ |
101 ec_fsm_coe_t fsm_coe; /**< CoE state machine */ |
82 |
105 |
83 void ec_fsm_master_init(ec_fsm_master_t *, ec_master_t *, ec_datagram_t *); |
106 void ec_fsm_master_init(ec_fsm_master_t *, ec_master_t *, ec_datagram_t *); |
84 void ec_fsm_master_clear(ec_fsm_master_t *); |
107 void ec_fsm_master_clear(ec_fsm_master_t *); |
85 |
108 |
86 int ec_fsm_master_exec(ec_fsm_master_t *); |
109 int ec_fsm_master_exec(ec_fsm_master_t *); |
87 int ec_fsm_master_running(ec_fsm_master_t *); |
110 int ec_fsm_master_running(const ec_fsm_master_t *); |
88 int ec_fsm_master_success(ec_fsm_master_t *); |
111 int ec_fsm_master_idle(const ec_fsm_master_t *); |
89 |
112 |
90 /*****************************************************************************/ |
113 /*****************************************************************************/ |
91 |
114 |
92 #endif |
115 #endif |