master/fsm_pdo_config.c
changeset 801 6b1e2b0ed8bc
parent 800 e0b8cbc8a88d
child 814 a51f857b1b2d
equal deleted inserted replaced
800:e0b8cbc8a88d 801:6b1e2b0ed8bc
   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