diff --git a/master/ethernet.c b/master/ethernet.c index bd755eb5..b11ed09a 100644 --- a/master/ethernet.c +++ b/master/ethernet.c @@ -70,7 +70,11 @@ /****************************************************************************/ +// prototypes for private methods void ec_eoe_flush(ec_eoe_t *); +int ec_eoe_send(ec_eoe_t *); + +/****************************************************************************/ // state functions void ec_eoe_state_rx_start(ec_eoe_t *); diff --git a/master/fsm_coe.c b/master/fsm_coe.c index 9b015de1..69765cd0 100644 --- a/master/fsm_coe.c +++ b/master/fsm_coe.c @@ -59,6 +59,19 @@ /****************************************************************************/ +// prototypes for private methods +void ec_canopen_abort_msg(const ec_slave_t *, uint32_t); +int ec_fsm_coe_check_emergency(const ec_fsm_coe_t *, const uint8_t *, size_t); +int ec_fsm_coe_prepare_dict(ec_fsm_coe_t *, ec_datagram_t *); +int ec_fsm_coe_dict_prepare_desc(ec_fsm_coe_t *, ec_datagram_t *); +int ec_fsm_coe_dict_prepare_entry(ec_fsm_coe_t *, ec_datagram_t *); +int ec_fsm_coe_prepare_down_start(ec_fsm_coe_t *, ec_datagram_t *); +void ec_fsm_coe_down_prepare_segment_request(ec_fsm_coe_t *, ec_datagram_t *); +int ec_fsm_coe_prepare_up(ec_fsm_coe_t *, ec_datagram_t *); +void ec_fsm_coe_up_prepare_segment_request(ec_fsm_coe_t *, ec_datagram_t *); + +/****************************************************************************/ + void ec_fsm_coe_dict_start(ec_fsm_coe_t *, ec_datagram_t *); void ec_fsm_coe_dict_request(ec_fsm_coe_t *, ec_datagram_t *); void ec_fsm_coe_dict_check(ec_fsm_coe_t *, ec_datagram_t *); @@ -267,7 +280,7 @@ int ec_fsm_coe_success( * \return The data were an emergency request. */ int ec_fsm_coe_check_emergency( - ec_fsm_coe_t *fsm, /**< Finite state machine */ + const ec_fsm_coe_t *fsm, /**< Finite state machine */ const uint8_t *data, /**< CoE mailbox data. */ size_t size /**< CoE mailbox data size. */ ) diff --git a/master/fsm_eoe.c b/master/fsm_eoe.c index c061728d..b3ef6898 100644 --- a/master/fsm_eoe.c +++ b/master/fsm_eoe.c @@ -33,6 +33,27 @@ /****************************************************************************/ +/** Maximum time to wait for a set IP parameter response. + */ +#define EC_EOE_RESPONSE_TIMEOUT 3000 // [ms] + +/****************************************************************************/ + +// prototypes for private functions +void memcpy_swap32(void *, const void *); + +int ec_fsm_eoe_prepare_set(ec_fsm_eoe_t *, ec_datagram_t *); + +void ec_fsm_eoe_set_ip_start(ec_fsm_eoe_t *, ec_datagram_t *); +void ec_fsm_eoe_set_ip_request(ec_fsm_eoe_t *, ec_datagram_t *); +void ec_fsm_eoe_set_ip_check(ec_fsm_eoe_t *, ec_datagram_t *); +void ec_fsm_eoe_set_ip_response(ec_fsm_eoe_t *, ec_datagram_t *); + +void ec_fsm_eoe_end(ec_fsm_eoe_t *, ec_datagram_t *); +void ec_fsm_eoe_error(ec_fsm_eoe_t *, ec_datagram_t *); + +/****************************************************************************/ + /** Host-architecture-independent 32-bit swap function. * * The internal storage of struct in_addr is always big-endian. @@ -51,22 +72,6 @@ void memcpy_swap32(void *dst, const void *src) /****************************************************************************/ -/** Maximum time to wait for a set IP parameter response. - */ -#define EC_EOE_RESPONSE_TIMEOUT 3000 // [ms] - -/****************************************************************************/ - -void ec_fsm_eoe_set_ip_start(ec_fsm_eoe_t *, ec_datagram_t *); -void ec_fsm_eoe_set_ip_request(ec_fsm_eoe_t *, ec_datagram_t *); -void ec_fsm_eoe_set_ip_check(ec_fsm_eoe_t *, ec_datagram_t *); -void ec_fsm_eoe_set_ip_response(ec_fsm_eoe_t *, ec_datagram_t *); - -void ec_fsm_eoe_end(ec_fsm_eoe_t *, ec_datagram_t *); -void ec_fsm_eoe_error(ec_fsm_eoe_t *, ec_datagram_t *); - -/****************************************************************************/ - /** Constructor. */ void ec_fsm_eoe_init( diff --git a/master/fsm_master.c b/master/fsm_master.c index 3cbe802a..2290608b 100644 --- a/master/fsm_master.c +++ b/master/fsm_master.c @@ -44,6 +44,18 @@ /****************************************************************************/ +// prototypes for private methods +void ec_fsm_master_restart(ec_fsm_master_t *); +int ec_fsm_master_action_process_sii(ec_fsm_master_t *); +int ec_fsm_master_action_process_int_request(ec_fsm_master_t *); +void ec_fsm_master_action_idle(ec_fsm_master_t *); +void ec_fsm_master_action_next_slave_state(ec_fsm_master_t *); +void ec_fsm_master_action_configure(ec_fsm_master_t *); +u64 ec_fsm_master_dc_offset32(ec_fsm_master_t *, u64, u64, unsigned long); +u64 ec_fsm_master_dc_offset64(ec_fsm_master_t *, u64, u64, unsigned long); + +/****************************************************************************/ + void ec_fsm_master_state_start(ec_fsm_master_t *); void ec_fsm_master_state_broadcast(ec_fsm_master_t *); void ec_fsm_master_state_read_state(ec_fsm_master_t *); diff --git a/master/fsm_pdo.c b/master/fsm_pdo.c index a5a4b7ad..0d5f87e1 100644 --- a/master/fsm_pdo.c +++ b/master/fsm_pdo.c @@ -34,6 +34,14 @@ /****************************************************************************/ +// prototypes for private methods +void ec_fsm_pdo_print(const ec_fsm_pdo_t *); +int ec_fsm_pdo_running(const ec_fsm_pdo_t *); +ec_pdo_t *ec_fsm_pdo_conf_action_next_pdo(const ec_fsm_pdo_t *, + const struct list_head *); + +/****************************************************************************/ + void ec_fsm_pdo_read_state_start(ec_fsm_pdo_t *, ec_datagram_t *); void ec_fsm_pdo_read_state_pdo_count(ec_fsm_pdo_t *, ec_datagram_t *); void ec_fsm_pdo_read_state_pdo(ec_fsm_pdo_t *, ec_datagram_t *); @@ -94,7 +102,7 @@ void ec_fsm_pdo_clear( /** Print the current and desired PDO assignment. */ void ec_fsm_pdo_print( - ec_fsm_pdo_t *fsm /**< PDO configuration state machine. */ + const ec_fsm_pdo_t *fsm /**< PDO configuration state machine. */ ) { printk(KERN_CONT "Currently assigned PDOs: "); diff --git a/master/fsm_pdo_entry.c b/master/fsm_pdo_entry.c index 3de74ce4..3c7be428 100644 --- a/master/fsm_pdo_entry.c +++ b/master/fsm_pdo_entry.c @@ -34,6 +34,14 @@ /****************************************************************************/ +// prototypes for private methods +void ec_fsm_pdo_entry_print(const ec_fsm_pdo_entry_t *); +int ec_fsm_pdo_entry_running(const ec_fsm_pdo_entry_t *); +ec_pdo_entry_t *ec_fsm_pdo_entry_conf_next_entry(const ec_fsm_pdo_entry_t *, + const struct list_head *); + +/****************************************************************************/ + void ec_fsm_pdo_entry_read_state_start(ec_fsm_pdo_entry_t *, ec_datagram_t *); void ec_fsm_pdo_entry_read_state_count(ec_fsm_pdo_entry_t *, ec_datagram_t *); void ec_fsm_pdo_entry_read_state_entry(ec_fsm_pdo_entry_t *, ec_datagram_t *); @@ -82,7 +90,7 @@ void ec_fsm_pdo_entry_clear( /** Print the current and desired PDO mapping. */ void ec_fsm_pdo_entry_print( - ec_fsm_pdo_entry_t *fsm /**< PDO mapping state machine. */ + const ec_fsm_pdo_entry_t *fsm /**< PDO mapping state machine. */ ) { printk(KERN_CONT "Currently mapped PDO entries: "); diff --git a/master/fsm_slave_config.c b/master/fsm_slave_config.c index f0f0d250..25887ad6 100644 --- a/master/fsm_slave_config.c +++ b/master/fsm_slave_config.c @@ -52,6 +52,11 @@ /****************************************************************************/ +// prototypes for private methods +int ec_fsm_slave_config_running(const ec_fsm_slave_config_t *); + +/****************************************************************************/ + void ec_fsm_slave_config_state_start(ec_fsm_slave_config_t *); void ec_fsm_slave_config_state_init(ec_fsm_slave_config_t *); void ec_fsm_slave_config_state_clear_fmmus(ec_fsm_slave_config_t *); diff --git a/master/fsm_slave_scan.c b/master/fsm_slave_scan.c index a4bc3db1..e4b56358 100644 --- a/master/fsm_slave_scan.c +++ b/master/fsm_slave_scan.c @@ -35,6 +35,19 @@ /****************************************************************************/ +// prototypes for private methods +int ec_fsm_slave_scan_running(const ec_fsm_slave_scan_t *); +void ec_fsm_slave_scan_enter_sii_size(ec_fsm_slave_scan_t *); +void ec_fsm_slave_scan_enter_assign_sii(ec_fsm_slave_scan_t *); +void ec_fsm_slave_scan_enter_datalink(ec_fsm_slave_scan_t *); +#ifdef EC_REGALIAS +void ec_fsm_slave_scan_enter_regalias(ec_fsm_slave_scan_t *); +#endif +void ec_fsm_slave_scan_enter_preop(ec_fsm_slave_scan_t *); +void ec_fsm_slave_scan_enter_pdos(ec_fsm_slave_scan_t *); + +/****************************************************************************/ + void ec_fsm_slave_scan_state_start(ec_fsm_slave_scan_t *); void ec_fsm_slave_scan_state_address(ec_fsm_slave_scan_t *); void ec_fsm_slave_scan_state_state(ec_fsm_slave_scan_t *); @@ -57,13 +70,6 @@ void ec_fsm_slave_scan_state_pdos(ec_fsm_slave_scan_t *); void ec_fsm_slave_scan_state_end(ec_fsm_slave_scan_t *); void ec_fsm_slave_scan_state_error(ec_fsm_slave_scan_t *); -void ec_fsm_slave_scan_enter_datalink(ec_fsm_slave_scan_t *); -#ifdef EC_REGALIAS -void ec_fsm_slave_scan_enter_regalias(ec_fsm_slave_scan_t *); -#endif -void ec_fsm_slave_scan_enter_preop(ec_fsm_slave_scan_t *); -void ec_fsm_slave_scan_enter_pdos(ec_fsm_slave_scan_t *); - /****************************************************************************/ /** Constructor. @@ -115,7 +121,9 @@ void ec_fsm_slave_scan_start( \return false, if state machine has terminated */ -int ec_fsm_slave_scan_running(const ec_fsm_slave_scan_t *fsm /**< slave state machine */) +int ec_fsm_slave_scan_running( + const ec_fsm_slave_scan_t *fsm /**< slave state machine */ + ) { return fsm->state != ec_fsm_slave_scan_state_end && fsm->state != ec_fsm_slave_scan_state_error; diff --git a/master/fsm_soe.c b/master/fsm_soe.c index 161e3e3d..b24f03a9 100644 --- a/master/fsm_soe.c +++ b/master/fsm_soe.c @@ -56,6 +56,14 @@ enum { /****************************************************************************/ +// prototypes for private methods +void ec_print_soe_error(const ec_slave_t *, uint16_t); +void ec_fsm_soe_print_error(ec_fsm_soe_t *); +int ec_fsm_soe_prepare_read(ec_fsm_soe_t *, ec_datagram_t *); +void ec_fsm_soe_write_next_fragment(ec_fsm_soe_t *, ec_datagram_t *); + +/****************************************************************************/ + void ec_fsm_soe_read_start(ec_fsm_soe_t *, ec_datagram_t *); void ec_fsm_soe_read_request(ec_fsm_soe_t *, ec_datagram_t *); void ec_fsm_soe_read_check(ec_fsm_soe_t *, ec_datagram_t *); diff --git a/master/master.c b/master/master.c index 0a5f316a..c66bd12a 100644 --- a/master/master.c +++ b/master/master.c @@ -97,8 +97,18 @@ const unsigned int rate_intervals[] = { /****************************************************************************/ +void ec_master_clear_config(ec_master_t *); void ec_master_clear_slave_configs(ec_master_t *); void ec_master_clear_domains(ec_master_t *); +int ec_master_thread_start(ec_master_t *, int (*)(void *), const char *); +void ec_master_thread_stop(ec_master_t *); +void ec_master_inject_external_datagrams(ec_master_t *); +ec_datagram_t *ec_master_get_external_datagram(ec_master_t *); +void ec_master_exec_slave_fsms(ec_master_t *); +void ec_master_send_datagrams(ec_master_t *, ec_device_index_t); +int ec_master_calc_topology_rec(ec_master_t *, ec_slave_t *, unsigned int *); +void ec_master_calc_topology(ec_master_t *); +void ec_master_calc_transmission_delays(ec_master_t *); static int ec_master_idle_thread(void *); static int ec_master_operation_thread(void *); #ifdef EC_EOE diff --git a/master/slave.c b/master/slave.c index 83ebf084..04cf2151 100644 --- a/master/slave.c +++ b/master/slave.c @@ -42,7 +42,13 @@ extern const ec_code_msg_t al_status_messages[]; /****************************************************************************/ -char *ec_slave_sii_string(ec_slave_t *, unsigned int); +// prototypes for private methods +char *ec_slave_sii_string(const ec_slave_t *, unsigned int); +void ec_slave_find_names_for_pdo(ec_slave_t *, ec_pdo_t *); +unsigned int ec_slave_get_previous_port(const ec_slave_t *, unsigned int); +unsigned int ec_slave_get_next_port(const ec_slave_t *, unsigned int); +uint32_t ec_slave_calc_rtt_sum(const ec_slave_t *); +ec_slave_t *ec_slave_find_next_dc_slave(ec_slave_t *); /****************************************************************************/ @@ -570,7 +576,7 @@ int ec_slave_fetch_sii_pdos( */ char *ec_slave_sii_string( - ec_slave_t *slave, /**< EtherCAT slave */ + const ec_slave_t *slave, /**< EtherCAT slave */ unsigned int index /**< string index */ ) { @@ -805,7 +811,7 @@ void ec_slave_attach_pdo_names( * \return Port index. */ unsigned int ec_slave_get_previous_port( - ec_slave_t *slave, /**< EtherCAT slave. */ + const ec_slave_t *slave, /**< EtherCAT slave. */ unsigned int port_index /**< Port index. */ ) { @@ -835,7 +841,7 @@ unsigned int ec_slave_get_previous_port( * \return Port index. */ unsigned int ec_slave_get_next_port( - ec_slave_t *slave, /**< EtherCAT slave. */ + const ec_slave_t *slave, /**< EtherCAT slave. */ unsigned int port_index /**< Port index. */ ) { @@ -865,7 +871,7 @@ unsigned int ec_slave_get_next_port( * \return Round-trip-time in ns. */ uint32_t ec_slave_calc_rtt_sum( - ec_slave_t *slave /**< EtherCAT slave. */ + const ec_slave_t *slave /**< EtherCAT slave. */ ) { uint32_t rtt_sum = 0, rtt;