master/slave_config.c
changeset 927 ffb7d1876ce0
parent 926 6bb33c6ec770
child 929 64de138e6a54
equal deleted inserted replaced
926:6bb33c6ec770 927:ffb7d1876ce0
   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;