diff -r 4c16fe64b403 -r 2be8918682fa master/fsm_coe_map.c --- a/master/fsm_coe_map.c Tue Jun 24 10:55:40 2008 +0000 +++ b/master/fsm_coe_map.c Thu Jun 26 13:16:15 2008 +0000 @@ -55,7 +55,7 @@ void ec_fsm_coe_map_state_end(ec_fsm_coe_map_t *); void ec_fsm_coe_map_state_error(ec_fsm_coe_map_t *); -void ec_fsm_coe_map_action_next_dir(ec_fsm_coe_map_t *); +void ec_fsm_coe_map_action_next_sync(ec_fsm_coe_map_t *); void ec_fsm_coe_map_action_next_pdo(ec_fsm_coe_map_t *); void ec_fsm_coe_map_action_next_pdo_entry(ec_fsm_coe_map_t *); @@ -134,50 +134,46 @@ * state functions *****************************************************************************/ -/** - * Start reading Pdo assignment. - */ - +/** Start reading Pdo assignment. + */ void ec_fsm_coe_map_state_start( ec_fsm_coe_map_t *fsm /**< finite state machine */ ) { - // read Pdo assignment for first direction - fsm->dir = (ec_direction_t) -1; // next is EC_DIR_OUTPUT - ec_fsm_coe_map_action_next_dir(fsm); -} - -/*****************************************************************************/ - -/** - * Read Pdo assignment of next direction manager. - */ - -void ec_fsm_coe_map_action_next_dir( - ec_fsm_coe_map_t *fsm /**< finite state machine */ + // read Pdo assignment for first sync manager + fsm->sync_index = 0xff; // next is 0 + ec_fsm_coe_map_action_next_sync(fsm); +} + +/*****************************************************************************/ + +/** Read Pdo assignment of next sync manager. + */ +void ec_fsm_coe_map_action_next_sync( + ec_fsm_coe_map_t *fsm /**< Finite state machine */ ) { ec_slave_t *slave = fsm->slave; - fsm->dir++; + fsm->sync_index++; if (slave->master->debug_level) - EC_DBG("Processing dir %u of slave %u.\n", - fsm->dir, slave->ring_position); - - for (; fsm->dir <= EC_DIR_INPUT; fsm->dir++) { - - if (!(fsm->sync = ec_slave_get_pdo_sync(slave, fsm->dir))) { + EC_DBG("Processing SM%u of slave %u.\n", + fsm->sync_index, slave->ring_position); + + for (; fsm->sync_index < EC_MAX_SYNCS; fsm->sync_index++) { + if (!(fsm->sync = ec_slave_get_sync(slave, fsm->sync_index))) { if (slave->master->debug_level) - EC_DBG("No sync manager for direction %u!\n", fsm->dir); + EC_DBG("Slave %u does not provide a configuration for " + "SM%u!\n", fsm->slave->ring_position, fsm->sync_index); continue; } - fsm->sync_sdo_index = 0x1C10 + fsm->sync->index; + fsm->sync_sdo_index = 0x1C10 + fsm->sync_index; if (slave->master->debug_level) - EC_DBG("Reading Pdo assignment of sync manager %u of slave %u.\n", - fsm->sync->index, slave->ring_position); + EC_DBG("Reading Pdo assignment of SM%u of slave %u.\n", + fsm->sync_index, slave->ring_position); ec_pdo_list_clear_pdos(&fsm->pdos); @@ -226,7 +222,7 @@ fsm->sync_subindices = EC_READ_U8(fsm->request.data); if (fsm->slave->master->debug_level) - EC_DBG(" %u Pdos assigned.\n", fsm->sync_subindices); + EC_DBG("%u Pdos assigned.\n", fsm->sync_subindices); // read first Pdo fsm->sync_subindex = 1; @@ -263,8 +259,8 @@ fsm->sync->assign_source = EC_ASSIGN_COE; ec_pdo_list_clear_pdos(&fsm->pdos); - // next direction - ec_fsm_coe_map_action_next_dir(fsm); + // next sync manager + ec_fsm_coe_map_action_next_sync(fsm); } /*****************************************************************************/ @@ -304,10 +300,10 @@ ec_pdo_init(fsm->pdo); fsm->pdo->index = EC_READ_U16(fsm->request.data); - fsm->pdo->dir = ec_sync_direction(fsm->sync); + fsm->pdo->sync_index = fsm->sync_index; if (fsm->slave->master->debug_level) - EC_DBG(" Pdo 0x%04X.\n", fsm->pdo->index); + EC_DBG("Pdo 0x%04X.\n", fsm->pdo->index); list_add_tail(&fsm->pdo->list, &fsm->pdos.list); @@ -348,7 +344,7 @@ fsm->pdo_subindices = EC_READ_U8(fsm->request.data); if (fsm->slave->master->debug_level) - EC_DBG(" %u Pdo entries mapped.\n", fsm->pdo_subindices); + EC_DBG("%u Pdo entries mapped.\n", fsm->pdo_subindices); // read first Pdo entry fsm->pdo_subindex = 1; @@ -432,7 +428,7 @@ } if (fsm->slave->master->debug_level) { - EC_DBG(" Pdo entry 0x%04X:%02X, %u bit, \"%s\".\n", + EC_DBG("Pdo entry 0x%04X:%02X, %u bit, \"%s\".\n", pdo_entry->index, pdo_entry->subindex, pdo_entry->bit_length, pdo_entry->name ? pdo_entry->name : "???");