172 if (sc->slave) |
172 if (sc->slave) |
173 return 0; // already attached |
173 return 0; // already attached |
174 |
174 |
175 if (!(slave = ec_master_find_slave( |
175 if (!(slave = ec_master_find_slave( |
176 sc->master, sc->alias, sc->position))) { |
176 sc->master, sc->alias, sc->position))) { |
177 EC_WARN("Failed to find slave for configuration %u:%u.\n", |
177 if (sc->master->debug_level) |
178 sc->alias, sc->position); |
178 EC_DBG("Failed to find slave for configuration %u:%u.\n", |
|
179 sc->alias, sc->position); |
179 return -1; |
180 return -1; |
180 } |
181 } |
181 |
182 |
182 if (slave->config) { |
183 if (slave->config) { |
183 EC_ERR("Failed to attach slave configuration %u:%u. Slave %u" |
184 if (sc->master->debug_level) |
184 " already has a configuration!\n", sc->alias, |
185 EC_DBG("Failed to attach slave configuration %u:%u. Slave %u" |
185 sc->position, slave->ring_position); |
186 " already has a configuration!\n", sc->alias, |
186 return -2; |
187 sc->position, slave->ring_position); |
187 } |
188 return -2; |
188 if (slave->sii.vendor_id != sc->vendor_id |
189 } |
189 || slave->sii.product_code != sc->product_code) { |
190 if (slave->sii.vendor_id != sc->vendor_id |
190 EC_ERR("Slave %u has an invalid type (0x%08X/0x%08X) for" |
191 || slave->sii.product_code != sc->product_code) { |
191 " configuration %u:%u (0x%08X/0x%08X).\n", |
192 if (sc->master->debug_level) |
192 slave->ring_position, slave->sii.vendor_id, |
193 EC_DBG("Slave %u has an invalid type (0x%08X/0x%08X) for" |
193 slave->sii.product_code, sc->alias, sc->position, |
194 " configuration %u:%u (0x%08X/0x%08X).\n", |
194 sc->vendor_id, sc->product_code); |
195 slave->ring_position, slave->sii.vendor_id, |
195 return -3; |
196 slave->sii.product_code, sc->alias, sc->position, |
|
197 sc->vendor_id, sc->product_code); |
|
198 return -3; |
196 } |
199 } |
197 |
200 |
198 // attach slave |
201 // attach slave |
199 slave->config = sc; |
202 slave->config = sc; |
200 sc->slave = slave; |
203 sc->slave = slave; |
|
204 ec_slave_request_state(slave, EC_SLAVE_STATE_OP); |
201 |
205 |
202 if (sc->master->debug_level) |
206 if (sc->master->debug_level) |
203 EC_DBG("Attached slave %u to config %u:%u.\n", |
207 EC_DBG("Attached slave %u to config %u:%u.\n", |
204 slave->ring_position, sc->alias, sc->position); |
208 slave->ring_position, sc->alias, sc->position); |
205 |
|
206 ec_slave_request_state(slave, EC_SLAVE_STATE_OP); |
|
207 |
209 |
208 return 0; |
210 return 0; |
209 } |
211 } |
210 |
212 |
211 /*****************************************************************************/ |
213 /*****************************************************************************/ |
257 if (sc->master->debug_level) |
259 if (sc->master->debug_level) |
258 EC_DBG("Loading default configuration for Pdo 0x%04X in" |
260 EC_DBG("Loading default configuration for Pdo 0x%04X in" |
259 " config %u:%u.\n", pdo->index, sc->alias, sc->position); |
261 " config %u:%u.\n", pdo->index, sc->alias, sc->position); |
260 |
262 |
261 if (!sc->slave) { |
263 if (!sc->slave) { |
262 EC_WARN("Failed to load default Pdo configuration for %u:%u:" |
264 if (sc->master->debug_level) |
263 " Slave not found.\n", sc->alias, sc->position); |
265 EC_DBG("Failed to load default Pdo configuration for %u:%u:" |
|
266 " Slave not found.\n", sc->alias, sc->position); |
264 return; |
267 return; |
265 } |
268 } |
266 |
269 |
267 if (!(sync = ec_slave_get_pdo_sync(sc->slave, pdo->dir))) { |
270 if (!(sync = ec_slave_get_pdo_sync(sc->slave, pdo->dir))) { |
268 EC_WARN("Slave %u does not provide a default Pdo" |
271 if (sc->master->debug_level) |
269 " configuration!\n", sc->slave->ring_position); |
272 EC_DBG("Slave %u does not provide a default Pdo" |
|
273 " configuration!\n", sc->slave->ring_position); |
270 return; |
274 return; |
271 } |
275 } |
272 |
276 |
273 list_for_each_entry(default_pdo, &sync->pdos.list, list) { |
277 list_for_each_entry(default_pdo, &sync->pdos.list, list) { |
274 if (default_pdo->index != pdo->index) |
278 if (default_pdo->index != pdo->index) |