51 } |
51 } |
52 } |
52 } |
53 |
53 |
54 /*****************************************************************************/ |
54 /*****************************************************************************/ |
55 |
55 |
56 void ec_master_clear(ec_master_t *master) |
56 void ec_master_clear_config(ec_master_t *master) |
57 { |
57 { |
58 ec_domain_t *d, *next_d; |
58 ec_domain_t *d, *next_d; |
59 ec_slave_config_t *c, *next_c; |
59 ec_slave_config_t *c, *next_c; |
60 |
|
61 if (master->process_data) { |
|
62 munmap(master->process_data, master->process_data_size); |
|
63 } |
|
64 |
60 |
65 d = master->first_domain; |
61 d = master->first_domain; |
66 while (d) { |
62 while (d) { |
67 next_d = d->next; |
63 next_d = d->next; |
68 ec_domain_clear(d); |
64 ec_domain_clear(d); |
69 d = next_d; |
65 d = next_d; |
70 } |
66 } |
|
67 master->first_domain = NULL; |
71 |
68 |
72 c = master->first_config; |
69 c = master->first_config; |
73 while (c) { |
70 while (c) { |
74 next_c = c->next; |
71 next_c = c->next; |
75 ec_slave_config_clear(c); |
72 ec_slave_config_clear(c); |
76 c = next_c; |
73 c = next_c; |
77 } |
74 } |
|
75 master->first_config = NULL; |
|
76 } |
|
77 |
|
78 /*****************************************************************************/ |
|
79 |
|
80 void ec_master_clear(ec_master_t *master) |
|
81 { |
|
82 if (master->process_data) { |
|
83 munmap(master->process_data, master->process_data_size); |
|
84 } |
|
85 |
|
86 ec_master_clear_config(master); |
78 |
87 |
79 if (master->fd != -1) { |
88 if (master->fd != -1) { |
80 close(master->fd); |
89 close(master->fd); |
81 } |
90 } |
82 } |
91 } |
454 { |
463 { |
455 if (ioctl(master->fd, EC_IOCTL_DEACTIVATE, NULL) == -1) { |
464 if (ioctl(master->fd, EC_IOCTL_DEACTIVATE, NULL) == -1) { |
456 fprintf(stderr, "Failed to deactivate master: %s\n", strerror(errno)); |
465 fprintf(stderr, "Failed to deactivate master: %s\n", strerror(errno)); |
457 return; |
466 return; |
458 } |
467 } |
459 } |
468 |
460 |
469 ec_master_clear_config(master); |
|
470 } |
461 |
471 |
462 /*****************************************************************************/ |
472 /*****************************************************************************/ |
463 |
473 |
464 int ecrt_master_set_send_interval(ec_master_t *master,size_t send_interval_us) |
474 int ecrt_master_set_send_interval(ec_master_t *master,size_t send_interval_us) |
465 { |
475 { |