318 slave->base_type = EC_READ_U8 (datagram->data); |
318 slave->base_type = EC_READ_U8 (datagram->data); |
319 slave->base_revision = EC_READ_U8 (datagram->data + 1); |
319 slave->base_revision = EC_READ_U8 (datagram->data + 1); |
320 slave->base_build = EC_READ_U16(datagram->data + 2); |
320 slave->base_build = EC_READ_U16(datagram->data + 2); |
321 slave->base_fmmu_count = EC_READ_U8 (datagram->data + 4); |
321 slave->base_fmmu_count = EC_READ_U8 (datagram->data + 4); |
322 |
322 |
323 if (slave->base_fmmu_count > EC_MAX_FMMUS) |
323 if (slave->base_fmmu_count > EC_MAX_FMMUS) { |
|
324 EC_WARN("Slave %u has more FMMUs (%u) than the master can" |
|
325 " handle (%u).\n", slave->ring_position, |
|
326 slave->base_fmmu_count, EC_MAX_FMMUS); |
324 slave->base_fmmu_count = EC_MAX_FMMUS; |
327 slave->base_fmmu_count = EC_MAX_FMMUS; |
|
328 } |
325 |
329 |
326 // read data link status |
330 // read data link status |
327 ec_datagram_fprd(datagram, slave->station_address, 0x0110, 2); |
331 ec_datagram_fprd(datagram, slave->station_address, 0x0110, 2); |
328 fsm->retries = EC_FSM_RETRIES; |
332 fsm->retries = EC_FSM_RETRIES; |
329 fsm->state = ec_fsm_slave_scan_state_datalink; |
333 fsm->state = ec_fsm_slave_scan_state_datalink; |
1088 ec_datagram_t *datagram = fsm->datagram; |
1092 ec_datagram_t *datagram = fsm->datagram; |
1089 unsigned int i; |
1093 unsigned int i; |
1090 const ec_fmmu_config_t *fmmu; |
1094 const ec_fmmu_config_t *fmmu; |
1091 const ec_sync_t *sync; |
1095 const ec_sync_t *sync; |
1092 |
1096 |
|
1097 if (slave->base_fmmu_count < slave->config->used_fmmus) { |
|
1098 slave->error_flag = 1; |
|
1099 fsm->state = ec_fsm_slave_state_error; |
|
1100 EC_ERR("Slave %u has less FMMUs (%u) than requested (%u).\n", |
|
1101 slave->ring_position, slave->base_fmmu_count, |
|
1102 slave->config->used_fmmus); |
|
1103 return; |
|
1104 } |
|
1105 |
1093 if (!slave->base_fmmu_count) { // skip FMMU configuration |
1106 if (!slave->base_fmmu_count) { // skip FMMU configuration |
1094 ec_fsm_slave_conf_enter_safeop(fsm); |
1107 ec_fsm_slave_conf_enter_safeop(fsm); |
1095 return; |
1108 return; |
1096 } |
1109 } |
1097 |
1110 |