master/fsm_slave.c
changeset 823 24096a495dd8
parent 822 21c86d97c587
equal deleted inserted replaced
822:21c86d97c587 823:24096a495dd8
   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