165 |
165 |
166 for (dir = EC_DIR_OUTPUT; dir <= EC_DIR_INPUT; dir++) { |
166 for (dir = EC_DIR_OUTPUT; dir <= EC_DIR_INPUT; dir++) { |
167 map = &fsm->slave->config->mapping[dir]; |
167 map = &fsm->slave->config->mapping[dir]; |
168 |
168 |
169 list_for_each_entry(pdo, &map->pdos, list) { |
169 list_for_each_entry(pdo, &map->pdos, list) { |
170 if (fsm->pdo) { |
170 if (fsm->pdo) { // there was a Pdo configured in the last run |
171 if (pdo == fsm->pdo) |
171 if (pdo == fsm->pdo) // this is the last Pdo |
172 fsm->pdo = NULL; |
172 fsm->pdo = NULL; // take the next one |
173 } else { |
173 } else { |
174 if ((mapped_pdo = ec_slave_find_pdo(fsm->slave, pdo->index))) |
174 if ((mapped_pdo = ec_slave_find_pdo(fsm->slave, pdo->index))) |
175 if (ec_pdo_equal_entries(pdo, mapped_pdo)) |
175 if (ec_pdo_equal_entries(pdo, mapped_pdo)) |
176 continue; // Pdo configured correctly |
176 continue; // Pdo configured correctly |
177 |
177 |
178 fsm->pdo = pdo; |
178 fsm->pdo = pdo; |
179 goto configure; |
179 break; |
180 } |
180 } |
181 } |
181 } |
182 } |
182 } |
183 |
183 |
184 if (fsm->slave->master->debug_level) |
184 if (!fsm->pdo) { |
185 EC_DBG("Pdo configuration finished for slave %u.\n", |
185 if (fsm->slave->master->debug_level) |
186 fsm->slave->ring_position); |
186 EC_DBG("Pdo configuration finished for slave %u.\n", |
187 fsm->state = ec_fsm_pdo_config_state_end; |
187 fsm->slave->ring_position); |
188 return; |
188 fsm->state = ec_fsm_pdo_config_state_end; |
189 |
189 return; |
190 configure: |
190 } |
|
191 |
191 if (fsm->slave->master->debug_level) { |
192 if (fsm->slave->master->debug_level) { |
192 EC_DBG("Changing configuration of Pdo 0x%04X of slave %u.\n", |
193 EC_DBG("Changing configuration of Pdo 0x%04X of slave %u.\n", |
193 fsm->pdo->index, fsm->slave->ring_position); |
194 fsm->pdo->index, fsm->slave->ring_position); |
194 } |
195 } |
195 |
196 |