diff -r 505cf41488a4 -r 9cdd7669dc0b master/master.h --- a/master/master.h Thu Jan 10 12:34:58 2013 +0100 +++ b/master/master.h Thu Jan 10 17:36:41 2013 +0100 @@ -114,6 +114,13 @@ } \ } while (0) + +/** Size of the external datagram ring. + * + * The external datagram ring is used for slave FSMs. + */ +#define EC_EXT_RING_SIZE 32 + /*****************************************************************************/ /** EtherCAT master phase. @@ -260,11 +267,20 @@ struct semaphore ext_queue_sem; /**< Semaphore protecting the \a ext_datagram_queue. */ - struct list_head external_datagram_queue; /**< External Datagram queue. */ + ec_datagram_t ext_datagram_ring[EC_EXT_RING_SIZE]; /**< External datagram + ring. */ + unsigned int ext_ring_idx_rt; /**< Index in external datagram ring for RT + side. */ + unsigned int ext_ring_idx_fsm; /**< Index in external datagram ring for + FSM side. */ unsigned int send_interval; /**< Interval between two calls to ecrt_master_send(). */ size_t max_queue_size; /**< Maximum size of datagram queue */ + ec_slave_t *fsm_slave; /**< Slave that is queried next for FSM exec. */ + struct list_head fsm_exec_list; /**< Slave FSM execution list. */ + unsigned int fsm_exec_count; /**< Number of entries in execution list. */ + unsigned int debug_level; /**< Master debug level. */ ec_stats_t stats; /**< Cyclic statistics. */ @@ -324,8 +340,6 @@ void ec_master_receive_datagrams(ec_master_t *, const uint8_t *, size_t); void ec_master_queue_datagram(ec_master_t *, ec_datagram_t *); void ec_master_queue_datagram_ext(ec_master_t *, ec_datagram_t *); -void ec_master_queue_external_datagram(ec_master_t *, ec_datagram_t *); -void ec_master_inject_external_datagrams(ec_master_t *); // misc. void ec_master_set_send_interval(ec_master_t *, unsigned int);