equal
deleted
inserted
replaced
1421 fsm->change_state = ec_fsm_change_start; |
1421 fsm->change_state = ec_fsm_change_start; |
1422 fsm->change_state(fsm); // execute immediately |
1422 fsm->change_state(fsm); // execute immediately |
1423 return; |
1423 return; |
1424 } |
1424 } |
1425 fsm->slave_state = ec_fsm_slaveconf_sdoconf; |
1425 fsm->slave_state = ec_fsm_slaveconf_sdoconf; |
1426 fsm->sdodata = list_entry(slave->sdo_confs.next, ec_sdo_data_t, list); |
1426 fsm->coe_sdodata = list_entry(slave->sdo_confs.next, ec_sdo_data_t, list); |
1427 fsm->coe_state = ec_fsm_coe_down_start; |
1427 fsm->coe_state = ec_fsm_coe_down_start; |
1428 fsm->coe_state(fsm); // execute immediately |
1428 fsm->coe_state(fsm); // execute immediately |
1429 return; |
1429 return; |
1430 } |
1430 } |
1431 |
1431 |
1471 fsm->change_state(fsm); // execute immediately |
1471 fsm->change_state(fsm); // execute immediately |
1472 return; |
1472 return; |
1473 } |
1473 } |
1474 |
1474 |
1475 fsm->slave_state = ec_fsm_slaveconf_sdoconf; |
1475 fsm->slave_state = ec_fsm_slaveconf_sdoconf; |
1476 fsm->sdodata = list_entry(slave->sdo_confs.next, ec_sdo_data_t, list); |
1476 fsm->coe_sdodata = list_entry(slave->sdo_confs.next, ec_sdo_data_t, list); |
1477 fsm->coe_state = ec_fsm_coe_down_start; |
1477 fsm->coe_state = ec_fsm_coe_down_start; |
1478 fsm->coe_state(fsm); // execute immediately |
1478 fsm->coe_state(fsm); // execute immediately |
1479 } |
1479 } |
1480 |
1480 |
1481 /*****************************************************************************/ |
1481 /*****************************************************************************/ |
1495 } |
1495 } |
1496 |
1496 |
1497 if (fsm->coe_state != ec_fsm_end) return; |
1497 if (fsm->coe_state != ec_fsm_end) return; |
1498 |
1498 |
1499 // Another SDO to configure? |
1499 // Another SDO to configure? |
1500 if (fsm->sdodata->list.next != &fsm->slave->sdo_confs) { |
1500 if (fsm->coe_sdodata->list.next != &fsm->slave->sdo_confs) { |
1501 fsm->sdodata = list_entry(fsm->sdodata->list.next, |
1501 fsm->coe_sdodata = list_entry(fsm->coe_sdodata->list.next, |
1502 ec_sdo_data_t, list); |
1502 ec_sdo_data_t, list); |
1503 fsm->coe_state = ec_fsm_coe_down_start; |
1503 fsm->coe_state = ec_fsm_coe_down_start; |
1504 fsm->coe_state(fsm); // execute immediately |
1504 fsm->coe_state(fsm); // execute immediately |
1505 return; |
1505 return; |
1506 } |
1506 } |
1507 |
1507 |
2070 |
2070 |
2071 void ec_fsm_coe_down_start(ec_fsm_t *fsm /**< finite state machine */) |
2071 void ec_fsm_coe_down_start(ec_fsm_t *fsm /**< finite state machine */) |
2072 { |
2072 { |
2073 ec_datagram_t *datagram = &fsm->datagram; |
2073 ec_datagram_t *datagram = &fsm->datagram; |
2074 ec_slave_t *slave = fsm->slave; |
2074 ec_slave_t *slave = fsm->slave; |
2075 ec_sdo_data_t *sdodata = fsm->sdodata; |
2075 ec_sdo_data_t *sdodata = fsm->coe_sdodata; |
2076 uint8_t *data; |
2076 uint8_t *data; |
2077 |
2077 |
2078 EC_INFO("Downloading SDO 0x%04X:%i to slave %i.\n", |
2078 EC_INFO("Downloading SDO 0x%04X:%i to slave %i.\n", |
2079 sdodata->index, sdodata->subindex, slave->ring_position); |
2079 sdodata->index, sdodata->subindex, slave->ring_position); |
2080 |
2080 |
2175 { |
2175 { |
2176 ec_datagram_t *datagram = &fsm->datagram; |
2176 ec_datagram_t *datagram = &fsm->datagram; |
2177 ec_slave_t *slave = fsm->slave; |
2177 ec_slave_t *slave = fsm->slave; |
2178 uint8_t *data, mbox_prot; |
2178 uint8_t *data, mbox_prot; |
2179 size_t rec_size; |
2179 size_t rec_size; |
2180 ec_sdo_data_t *sdodata = fsm->sdodata; |
2180 ec_sdo_data_t *sdodata = fsm->coe_sdodata; |
2181 |
2181 |
2182 if (datagram->state != EC_DATAGRAM_RECEIVED |
2182 if (datagram->state != EC_DATAGRAM_RECEIVED |
2183 || datagram->working_counter != 1) { |
2183 || datagram->working_counter != 1) { |
2184 fsm->coe_state = ec_fsm_error; |
2184 fsm->coe_state = ec_fsm_error; |
2185 EC_ERR("Reception of CoE download response failed.\n"); |
2185 EC_ERR("Reception of CoE download response failed.\n"); |