master/master.c
changeset 524 5ffcb9b9f17d
parent 518 b6a1426ba724
child 525 8b20781bd1e0
equal deleted inserted replaced
523:584a4f60b067 524:5ffcb9b9f17d
   392 {
   392 {
   393     ec_slave_t *slave;
   393     ec_slave_t *slave;
   394     ec_datagram_t *datagram = &master->fsm.datagram;
   394     ec_datagram_t *datagram = &master->fsm.datagram;
   395 
   395 
   396     ec_master_eoe_stop(master); // stop EoE timer
   396     ec_master_eoe_stop(master); // stop EoE timer
   397     master->eoe_checked = 0; // prevent from starting again by FSM
   397     master->eoe_checked = 1; // prevent from starting again by FSM
   398 
   398 
   399     master->mode = EC_MASTER_MODE_OPERATION;
   399     master->mode = EC_MASTER_MODE_OPERATION;
   400     while (!cancel_delayed_work(&master->idle_work)) {
   400     while (!cancel_delayed_work(&master->idle_work)) {
   401         flush_workqueue(master->workqueue);
   401         flush_workqueue(master->workqueue);
   402     }
   402     }
   430         else {
   430         else {
   431             ec_slave_request_state(slave, EC_SLAVE_STATE_PREOP);
   431             ec_slave_request_state(slave, EC_SLAVE_STATE_PREOP);
   432         }
   432         }
   433     }
   433     }
   434 
   434 
   435     master->eoe_checked = 1; // allow starting EoE again
   435     master->eoe_checked = 0; // allow starting EoE again
   436 
   436 
   437     return 0;
   437     return 0;
   438 
   438 
   439  out_idle:
   439  out_idle:
   440     master->mode = EC_MASTER_MODE_IDLE;
   440     master->mode = EC_MASTER_MODE_IDLE;
   453     ec_slave_t *slave;
   453     ec_slave_t *slave;
   454     ec_fsm_t *fsm = &master->fsm;
   454     ec_fsm_t *fsm = &master->fsm;
   455     ec_datagram_t *datagram = &master->fsm.datagram;
   455     ec_datagram_t *datagram = &master->fsm.datagram;
   456 
   456 
   457     ec_master_eoe_stop(master); // stop EoE timer
   457     ec_master_eoe_stop(master); // stop EoE timer
   458     master->eoe_checked = 0; // prevent from starting again by FSM
   458     master->eoe_checked = 1; // prevent from starting again by FSM
   459 
   459 
   460     // wait for FSM datagram
   460     // wait for FSM datagram
   461     if (datagram->state == EC_DATAGRAM_SENT) {
   461     if (datagram->state == EC_DATAGRAM_SENT) {
   462         // active waiting
   462         // active waiting
   463         while (get_cycles() - datagram->cycles_sent
   463         while (get_cycles() - datagram->cycles_sent