master/master.c
changeset 548 f5d41a52a8aa
parent 540 a729667dea1e
child 549 67be4381c820
equal deleted inserted replaced
547:dda827b8e578 548:f5d41a52a8aa
  1450 */
  1450 */
  1451 
  1451 
  1452 void ec_master_sync_io(ec_master_t *master /**< EtherCAT master */)
  1452 void ec_master_sync_io(ec_master_t *master /**< EtherCAT master */)
  1453 {
  1453 {
  1454     ec_datagram_t *datagram;
  1454     ec_datagram_t *datagram;
  1455     unsigned int datagrams_waiting;
  1455     unsigned int datagrams_sent;
  1456 
  1456 
  1457     // send datagrams
  1457     // send all datagrams
  1458     ecrt_master_send(master);
  1458     ecrt_master_send(master);
  1459 
  1459 
  1460     while (1) { // active waiting
  1460     while (1) { // active waiting
  1461         ecrt_master_receive(master); // receive and dequeue datagrams
  1461         ecrt_master_receive(master); // receive and dequeue datagrams
  1462 
  1462 
  1463         // count number of datagrams still waiting for response
  1463         // count number of datagrams still waiting for response
  1464         datagrams_waiting = 0;
  1464         datagrams_sent = 0;
  1465         list_for_each_entry(datagram, &master->datagram_queue, queue) {
  1465         list_for_each_entry(datagram, &master->datagram_queue, queue) {
  1466             datagrams_waiting++;
  1466             // there may be another process that queued commands
  1467         }
  1467             // in the meantime.
  1468 
  1468             if (datagram->state == EC_DATAGRAM_QUEUED) continue;
  1469         // if there are no more datagrams waiting, abort loop.
  1469             datagrams_sent++;
  1470         if (!datagrams_waiting) break;
  1470         }
       
  1471 
       
  1472         // abort loop if there are no more datagrams marked as sent.
       
  1473         if (!datagrams_sent) break;
  1471     }
  1474     }
  1472 }
  1475 }
  1473 
  1476 
  1474 /*****************************************************************************/
  1477 /*****************************************************************************/
  1475 
  1478