17 |
17 |
18 /** |
18 /** |
19 EtherCAT-Slave-Konstruktor. |
19 EtherCAT-Slave-Konstruktor. |
20 |
20 |
21 Initialisiert einen EtherCAT-Slave. |
21 Initialisiert einen EtherCAT-Slave. |
|
22 |
|
23 ACHTUNG! Dieser Konstruktor wird quasi nie aufgerufen. Bitte immer das |
|
24 Makro ECAT_INIT_SLAVE() in ec_slave.h anpassen! |
22 |
25 |
23 @param slave Zeiger auf den zu initialisierenden Slave |
26 @param slave Zeiger auf den zu initialisierenden Slave |
24 */ |
27 */ |
25 |
28 |
26 void EtherCAT_slave_init(EtherCAT_slave_t *slave) |
29 void EtherCAT_slave_init(EtherCAT_slave_t *slave) |
33 slave->vendor_id = 0; |
36 slave->vendor_id = 0; |
34 slave->product_code = 0; |
37 slave->product_code = 0; |
35 slave->revision_number = 0; |
38 slave->revision_number = 0; |
36 slave->serial_number = 0; |
39 slave->serial_number = 0; |
37 slave->desc = NULL; |
40 slave->desc = NULL; |
38 slave->logical_address0 = 0; |
41 slave->logical_address = 0; |
39 slave->current_state = ECAT_STATE_UNKNOWN; |
42 slave->current_state = ECAT_STATE_UNKNOWN; |
40 slave->requested_state = ECAT_STATE_UNKNOWN; |
43 slave->requested_state = ECAT_STATE_UNKNOWN; |
|
44 slave->process_data = NULL; |
|
45 slave->domain = 0; |
41 slave->error_reported = 0; |
46 slave->error_reported = 0; |
42 } |
47 } |
43 |
48 |
44 /*****************************************************************************/ |
49 /*****************************************************************************/ |
45 |
50 |
95 slave->error_reported = 1; |
100 slave->error_reported = 1; |
96 } |
101 } |
97 return 0; |
102 return 0; |
98 } |
103 } |
99 |
104 |
100 if (unlikely(channel >= slave->desc->channels)) { |
105 if (unlikely(channel >= slave->desc->channel_count)) { |
101 if (likely(slave->error_reported)) { |
106 if (likely(slave->error_reported)) { |
102 printk(KERN_WARNING "EtherCAT: Reading failed on slave %4X (addr %0X)" |
107 printk(KERN_WARNING "EtherCAT: Reading failed on slave %4X (addr %0X)" |
103 " - Type (%s %s) has no channel %i.\n", |
108 " - Type (%s %s) has no channel %i.\n", |
104 slave->station_address, (unsigned int) slave, |
109 slave->station_address, (unsigned int) slave, |
105 slave->desc->vendor_name, slave->desc->product_name, |
110 slave->desc->vendor_name, slave->desc->product_name, |
106 channel); |
111 channel); |
|
112 slave->error_reported = 1; |
|
113 } |
|
114 return 0; |
|
115 } |
|
116 |
|
117 if (unlikely(!slave->process_data)) { |
|
118 if (likely(slave->error_reported)) { |
|
119 printk(KERN_WARNING "EtherCAT: Reading failed on slave %4X (addr %0X)" |
|
120 " - Slave does not belong to any process data object!\n", |
|
121 slave->station_address, (unsigned int) slave); |
107 slave->error_reported = 1; |
122 slave->error_reported = 1; |
108 } |
123 } |
109 return 0; |
124 return 0; |
110 } |
125 } |
111 |
126 |
154 slave->error_reported = 1; |
169 slave->error_reported = 1; |
155 } |
170 } |
156 return; |
171 return; |
157 } |
172 } |
158 |
173 |
159 if (unlikely(channel >= slave->desc->channels)) { |
174 if (unlikely(channel >= slave->desc->channel_count)) { |
160 if (likely(slave->error_reported)) { |
175 if (likely(slave->error_reported)) { |
161 printk(KERN_WARNING "EtherCAT: Writing failed on slave %4X (addr %0X)" |
176 printk(KERN_WARNING "EtherCAT: Writing failed on slave %4X (addr %0X)" |
162 " - Type (%s %s) has no channel %i.\n", |
177 " - Type (%s %s) has no channel %i.\n", |
163 slave->station_address, (unsigned int) slave, |
178 slave->station_address, (unsigned int) slave, |
164 slave->desc->vendor_name, slave->desc->product_name, |
179 slave->desc->vendor_name, slave->desc->product_name, |
166 slave->error_reported = 1; |
181 slave->error_reported = 1; |
167 } |
182 } |
168 return; |
183 return; |
169 } |
184 } |
170 |
185 |
|
186 if (unlikely(!slave->process_data)) { |
|
187 if (likely(slave->error_reported)) { |
|
188 printk(KERN_WARNING "EtherCAT: Writing failed on slave %4X (addr %0X)" |
|
189 " - Slave does not belong to any process data object!\n", |
|
190 slave->station_address, (unsigned int) slave); |
|
191 slave->error_reported = 1; |
|
192 } |
|
193 return; |
|
194 } |
|
195 |
171 if (unlikely(slave->error_reported)) |
196 if (unlikely(slave->error_reported)) |
172 slave->error_reported = 0; |
197 slave->error_reported = 0; |
173 |
198 |
174 slave->desc->write(slave->process_data, channel, value); |
199 slave->desc->write(slave->process_data, channel, value); |
175 } |
200 } |