56 ec_slave_config_t *sc, /**< Slave configuration. */ |
56 ec_slave_config_t *sc, /**< Slave configuration. */ |
57 ec_master_t *master, /**< EtherCAT master. */ |
57 ec_master_t *master, /**< EtherCAT master. */ |
58 uint16_t alias, /**< Slave alias. */ |
58 uint16_t alias, /**< Slave alias. */ |
59 uint16_t position, /**< Slave position. */ |
59 uint16_t position, /**< Slave position. */ |
60 uint32_t vendor_id, /**< Expected vendor ID. */ |
60 uint32_t vendor_id, /**< Expected vendor ID. */ |
61 uint32_t product_code, /**< Expected product code. */ |
61 uint32_t product_code /**< Expected product code. */ |
62 uint32_t revision_number /**< Expected revision number. */ |
|
63 ) |
62 ) |
64 { |
63 { |
65 ec_direction_t dir; |
64 ec_direction_t dir; |
66 |
65 |
67 sc->master = master; |
66 sc->master = master; |
68 sc->alias = alias; |
67 sc->alias = alias; |
69 sc->position = position; |
68 sc->position = position; |
70 sc->vendor_id = vendor_id; |
69 sc->vendor_id = vendor_id; |
71 sc->product_code = product_code; |
70 sc->product_code = product_code; |
72 sc->revision_number = revision_number; |
|
73 sc->slave = NULL; |
71 sc->slave = NULL; |
74 |
72 |
75 for (dir = EC_DIR_OUTPUT; dir <= EC_DIR_INPUT; dir++) |
73 for (dir = EC_DIR_OUTPUT; dir <= EC_DIR_INPUT; dir++) |
76 ec_pdo_list_init(&sc->pdos[dir]); |
74 ec_pdo_list_init(&sc->pdos[dir]); |
77 |
75 |
186 " already has a configuration!\n", sc->alias, |
184 " already has a configuration!\n", sc->alias, |
187 sc->position, slave->ring_position); |
185 sc->position, slave->ring_position); |
188 return -2; |
186 return -2; |
189 } |
187 } |
190 if (slave->sii.vendor_id != sc->vendor_id |
188 if (slave->sii.vendor_id != sc->vendor_id |
191 || slave->sii.product_code != sc->product_code |
189 || slave->sii.product_code != sc->product_code) { |
192 || slave->sii.revision_number != sc->revision_number) { |
190 EC_ERR("Slave %u has an invalid type (0x%08X/0x%08X) for" |
193 EC_ERR("Slave %u has an invalid type (0x%08X/0x%08X/0x%08X) for" |
191 " configuration %u:%u (0x%08X/0x%08X).\n", |
194 " configuration %u:%u (0x%08X/0x%08X/0x%08X).\n", |
192 slave->ring_position, slave->sii.vendor_id, |
195 slave->ring_position, |
193 slave->sii.product_code, sc->alias, sc->position, |
196 slave->sii.vendor_id, slave->sii.product_code, |
194 sc->vendor_id, sc->product_code); |
197 slave->sii.revision_number, sc->alias, sc->position, |
|
198 sc->vendor_id, sc->product_code, sc->revision_number); |
|
199 return -3; |
195 return -3; |
200 } |
196 } |
201 |
197 |
202 // attach slave |
198 // attach slave |
203 slave->config = sc; |
199 slave->config = sc; |