master/slave_config.c
changeset 1010 6672b86e7b10
parent 1009 6012e1414bec
child 1022 8e49b519e6ba
equal deleted inserted replaced
1009:6012e1414bec 1010:6672b86e7b10
    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;