equal
deleted
inserted
replaced
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); |