master/fsm_slave_config.c
changeset 1412 8f7bbbd3b7ac
parent 1407 e3974f72d31e
child 1419 8fc38c37d86e
equal deleted inserted replaced
1411:3ebef749275c 1412:8f7bbbd3b7ac
  1060         ec_fsm_slave_config_t *fsm /**< slave state machine */
  1060         ec_fsm_slave_config_t *fsm /**< slave state machine */
  1061         )
  1061         )
  1062 {
  1062 {
  1063     ec_datagram_t *datagram = fsm->datagram;
  1063     ec_datagram_t *datagram = fsm->datagram;
  1064     ec_slave_t *slave = fsm->slave;
  1064     ec_slave_t *slave = fsm->slave;
       
  1065     ec_slave_config_t *config = slave->config;
  1065     u64 start_time;
  1066     u64 start_time;
       
  1067 
       
  1068     if (!config) { // config removed in the meantime
       
  1069         ec_fsm_slave_config_reconfigure(fsm);
       
  1070         return;
       
  1071     }
  1066 
  1072 
  1067     if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--)
  1073     if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--)
  1068         return;
  1074         return;
  1069 
  1075 
  1070     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  1076     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  1083         ec_datagram_print_wc_error(datagram);
  1089         ec_datagram_print_wc_error(datagram);
  1084         return;
  1090         return;
  1085     }
  1091     }
  1086 
  1092 
  1087     // set DC start time
  1093     // set DC start time
  1088     start_time = slave->master->app_time + 10000000ULL; // now + 100 ms
  1094     start_time = slave->master->app_time +
       
  1095         config->dc_sync_shift_times[0] + 100000000ULL; // now + shift + x ns
  1089     if (slave->master->debug_level)
  1096     if (slave->master->debug_level)
  1090         EC_DBG("Slave %u: Setting DC cyclic operation start time to %llu.\n",
  1097         EC_DBG("Slave %u: Setting DC cyclic operation start time to %llu.\n",
  1091                 slave->ring_position, start_time);
  1098                 slave->ring_position, start_time);
  1092 
  1099 
  1093     ec_datagram_fpwr(datagram, slave->station_address, 0x0990, 8);
  1100     ec_datagram_fpwr(datagram, slave->station_address, 0x0990, 8);