master/fsm_slave_scan.c
changeset 2600 1a969896d52e
parent 2589 2b9c78543663
equal deleted inserted replaced
2598:19ff84bbbcb3 2600:1a969896d52e
   491         ec_fsm_slave_scan_t *fsm /**< slave state machine */
   491         ec_fsm_slave_scan_t *fsm /**< slave state machine */
   492         )
   492         )
   493 {
   493 {
   494     ec_datagram_t *datagram = fsm->datagram;
   494     ec_datagram_t *datagram = fsm->datagram;
   495     ec_slave_t *slave = fsm->slave;
   495     ec_slave_t *slave = fsm->slave;
   496     uint16_t dl_status;
       
   497     unsigned int i;
       
   498 
   496 
   499     if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--)
   497     if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--)
   500         return;
   498         return;
   501 
   499 
   502     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   500     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   512         EC_SLAVE_ERR(slave, "Failed to read DL status: ");
   510         EC_SLAVE_ERR(slave, "Failed to read DL status: ");
   513         ec_datagram_print_wc_error(datagram);
   511         ec_datagram_print_wc_error(datagram);
   514         return;
   512         return;
   515     }
   513     }
   516 
   514 
   517     dl_status = EC_READ_U16(datagram->data);
   515     ec_slave_set_dl_status(slave, EC_READ_U16(datagram->data));
   518     for (i = 0; i < EC_MAX_PORTS; i++) {
       
   519         slave->ports[i].link.link_up =
       
   520             dl_status & (1 << (4 + i)) ? 1 : 0;
       
   521         slave->ports[i].link.loop_closed =
       
   522             dl_status & (1 << (8 + i * 2)) ? 1 : 0;
       
   523         slave->ports[i].link.signal_detected =
       
   524             dl_status & (1 << (9 + i * 2)) ? 1 : 0;
       
   525     }
       
   526 
   516 
   527 #ifdef EC_SII_ASSIGN
   517 #ifdef EC_SII_ASSIGN
   528     ec_fsm_slave_scan_enter_assign_sii(fsm);
   518     ec_fsm_slave_scan_enter_assign_sii(fsm);
   529 #else
   519 #else
   530     ec_fsm_slave_scan_enter_sii_size(fsm);
   520     ec_fsm_slave_scan_enter_sii_size(fsm);