331 int ec_slave_config_attach( |
331 int ec_slave_config_attach( |
332 ec_slave_config_t *sc /**< Slave configuration. */ |
332 ec_slave_config_t *sc /**< Slave configuration. */ |
333 ) |
333 ) |
334 { |
334 { |
335 ec_slave_t *slave; |
335 ec_slave_t *slave; |
336 unsigned int alias_found = 0, relative_position = 0; |
|
337 |
336 |
338 if (sc->slave) |
337 if (sc->slave) |
339 return 0; // already attached |
338 return 0; // already attached |
340 |
339 |
341 list_for_each_entry(slave, &sc->master->slaves, list) { |
340 if (!(slave = ec_master_find_slave( |
342 if (!alias_found) { |
341 sc->master, sc->alias, sc->position))) { |
343 if (sc->alias && slave->sii.alias != sc->alias) |
342 EC_WARN("Failed to find slave for configuration %u:%u.\n", |
344 continue; |
343 sc->alias, sc->position); |
345 alias_found = 1; |
344 return -1; |
346 relative_position = 0; |
345 } |
347 } |
346 |
348 if (relative_position == sc->position) |
|
349 goto found; |
|
350 relative_position++; |
|
351 } |
|
352 |
|
353 EC_WARN("Failed to find slave for configuration %u:%u.\n", |
|
354 sc->alias, sc->position); |
|
355 return -1; |
|
356 |
|
357 found: |
|
358 if (slave->config) { |
347 if (slave->config) { |
359 EC_ERR("Failed to attach slave configuration %u:%u. Slave %u" |
348 EC_ERR("Failed to attach slave configuration %u:%u. Slave %u" |
360 " already has a configuration!\n", sc->alias, |
349 " already has a configuration!\n", sc->alias, |
361 sc->position, slave->ring_position); |
350 sc->position, slave->ring_position); |
362 return -2; |
351 return -2; |