225 if (ret < 0) { |
225 if (ret < 0) { |
226 ec_datagram_clear(&master->sync_datagram); |
226 ec_datagram_clear(&master->sync_datagram); |
227 EC_ERR("Failed to allocate synchronisation datagram.\n"); |
227 EC_ERR("Failed to allocate synchronisation datagram.\n"); |
228 goto out_clear_ref_sync; |
228 goto out_clear_ref_sync; |
229 } |
229 } |
|
230 |
|
231 // init sync monitor datagram |
|
232 ec_datagram_init(&master->sync_mon_datagram); |
|
233 snprintf(master->sync_mon_datagram.name, EC_DATAGRAM_NAME_SIZE, "syncmon"); |
|
234 ret = ec_datagram_brd(&master->sync_mon_datagram, 0x092c, 4); |
|
235 if (ret < 0) { |
|
236 ec_datagram_clear(&master->sync_mon_datagram); |
|
237 EC_ERR("Failed to allocate sync monitoring datagram.\n"); |
|
238 goto out_clear_sync; |
|
239 } |
|
240 |
230 ec_master_find_dc_ref_clock(master); |
241 ec_master_find_dc_ref_clock(master); |
231 |
242 |
232 // init character device |
243 // init character device |
233 ret = ec_cdev_init(&master->cdev, master, device_number); |
244 ret = ec_cdev_init(&master->cdev, master, device_number); |
234 if (ret) |
245 if (ret) |
235 goto out_clear_sync; |
246 goto out_clear_sync_mon; |
236 |
247 |
237 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) |
248 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) |
238 master->class_device = device_create(class, NULL, |
249 master->class_device = device_create(class, NULL, |
239 MKDEV(MAJOR(device_number), master->index), NULL, |
250 MKDEV(MAJOR(device_number), master->index), NULL, |
240 "EtherCAT%u", master->index); |
251 "EtherCAT%u", master->index); |
297 #endif |
310 #endif |
298 ec_master_clear_domains(master); |
311 ec_master_clear_domains(master); |
299 ec_master_clear_slave_configs(master); |
312 ec_master_clear_slave_configs(master); |
300 ec_master_clear_slaves(master); |
313 ec_master_clear_slaves(master); |
301 |
314 |
|
315 ec_datagram_clear(&master->sync_mon_datagram); |
302 ec_datagram_clear(&master->sync_datagram); |
316 ec_datagram_clear(&master->sync_datagram); |
303 ec_datagram_clear(&master->ref_sync_datagram); |
317 ec_datagram_clear(&master->ref_sync_datagram); |
304 ec_fsm_master_clear(&master->fsm); |
318 ec_fsm_master_clear(&master->fsm); |
305 ec_datagram_clear(&master->fsm_datagram); |
319 ec_datagram_clear(&master->fsm_datagram); |
306 ec_device_clear(&master->backup_device); |
320 ec_device_clear(&master->backup_device); |
1922 ec_master_queue_datagram(master, &master->sync_datagram); |
1936 ec_master_queue_datagram(master, &master->sync_datagram); |
1923 } |
1937 } |
1924 |
1938 |
1925 /*****************************************************************************/ |
1939 /*****************************************************************************/ |
1926 |
1940 |
|
1941 void ecrt_master_sync_monitor_queue(ec_master_t *master) |
|
1942 { |
|
1943 ec_datagram_zero(&master->sync_mon_datagram); |
|
1944 ec_master_queue_datagram(master, &master->sync_mon_datagram); |
|
1945 } |
|
1946 |
|
1947 /*****************************************************************************/ |
|
1948 |
|
1949 uint32_t ecrt_master_sync_monitor_process(ec_master_t *master) |
|
1950 { |
|
1951 if (master->sync_mon_datagram.state == EC_DATAGRAM_RECEIVED) { |
|
1952 return EC_READ_U32(master->sync_mon_datagram.data) & 0x7fffffff; |
|
1953 } else { |
|
1954 return 0xffffffff; |
|
1955 } |
|
1956 } |
|
1957 |
|
1958 /*****************************************************************************/ |
|
1959 |
1927 /** \cond */ |
1960 /** \cond */ |
1928 |
1961 |
1929 EXPORT_SYMBOL(ecrt_master_create_domain); |
1962 EXPORT_SYMBOL(ecrt_master_create_domain); |
1930 EXPORT_SYMBOL(ecrt_master_activate); |
1963 EXPORT_SYMBOL(ecrt_master_activate); |
1931 EXPORT_SYMBOL(ecrt_master_deactivate); |
1964 EXPORT_SYMBOL(ecrt_master_deactivate); |
1936 EXPORT_SYMBOL(ecrt_master_slave_config); |
1969 EXPORT_SYMBOL(ecrt_master_slave_config); |
1937 EXPORT_SYMBOL(ecrt_master_state); |
1970 EXPORT_SYMBOL(ecrt_master_state); |
1938 EXPORT_SYMBOL(ecrt_master_application_time); |
1971 EXPORT_SYMBOL(ecrt_master_application_time); |
1939 EXPORT_SYMBOL(ecrt_master_sync_reference_clock); |
1972 EXPORT_SYMBOL(ecrt_master_sync_reference_clock); |
1940 EXPORT_SYMBOL(ecrt_master_sync_slave_clocks); |
1973 EXPORT_SYMBOL(ecrt_master_sync_slave_clocks); |
|
1974 EXPORT_SYMBOL(ecrt_master_sync_monitor_queue); |
|
1975 EXPORT_SYMBOL(ecrt_master_sync_monitor_process); |
1941 |
1976 |
1942 /** \endcond */ |
1977 /** \endcond */ |
1943 |
1978 |
1944 /*****************************************************************************/ |
1979 /*****************************************************************************/ |