master/fsm.c
changeset 405 61d5d6457fa6
parent 403 7bb931deccd9
child 407 b73c9f7be5a1
equal deleted inserted replaced
404:7f7f429e13c7 405:61d5d6457fa6
  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");