master/master.c
changeset 1848 1fe21e740efd
parent 1831 1875b9fea0ba
child 1856 10175d5f35ea
equal deleted inserted replaced
1847:54be2994d832 1848:1fe21e740efd
   168     master->debug_level = debug_level;
   168     master->debug_level = debug_level;
   169     master->stats.timeouts = 0;
   169     master->stats.timeouts = 0;
   170     master->stats.corrupted = 0;
   170     master->stats.corrupted = 0;
   171     master->stats.unmatched = 0;
   171     master->stats.unmatched = 0;
   172     master->stats.output_jiffies = 0;
   172     master->stats.output_jiffies = 0;
   173     master->frames_timed_out = 0;
       
   174 
   173 
   175     master->thread = NULL;
   174     master->thread = NULL;
   176 
   175 
   177 #ifdef EC_EOE
   176 #ifdef EC_EOE
   178     master->eoe_thread = NULL;
   177     master->eoe_thread = NULL;
  2095 /*****************************************************************************/
  2094 /*****************************************************************************/
  2096 
  2095 
  2097 void ecrt_master_receive(ec_master_t *master)
  2096 void ecrt_master_receive(ec_master_t *master)
  2098 {
  2097 {
  2099     ec_datagram_t *datagram, *next;
  2098     ec_datagram_t *datagram, *next;
  2100     unsigned int frames_timed_out = 0;
       
  2101 
  2099 
  2102     // receive datagrams
  2100     // receive datagrams
  2103     ec_device_poll(&master->main_device);
  2101     ec_device_poll(&master->main_device);
  2104 
  2102 
  2105     // dequeue all datagrams that timed out
  2103     // dequeue all datagrams that timed out
  2111                 > timeout_cycles) {
  2109                 > timeout_cycles) {
  2112 #else
  2110 #else
  2113         if (master->main_device.jiffies_poll - datagram->jiffies_sent
  2111         if (master->main_device.jiffies_poll - datagram->jiffies_sent
  2114                 > timeout_jiffies) {
  2112                 > timeout_jiffies) {
  2115 #endif
  2113 #endif
  2116             frames_timed_out = 1;
       
  2117             list_del_init(&datagram->queue);
  2114             list_del_init(&datagram->queue);
  2118             datagram->state = EC_DATAGRAM_TIMED_OUT;
  2115             datagram->state = EC_DATAGRAM_TIMED_OUT;
  2119             master->stats.timeouts++;
  2116             master->stats.timeouts++;
  2120             ec_master_output_stats(master);
  2117             ec_master_output_stats(master);
  2121 
  2118 
  2131                 EC_DBG("TIMED OUT datagram %p, index %02X waited %u us.\n",
  2128                 EC_DBG("TIMED OUT datagram %p, index %02X waited %u us.\n",
  2132                         datagram, datagram->index, time_us);
  2129                         datagram, datagram->index, time_us);
  2133             }
  2130             }
  2134         }
  2131         }
  2135     }
  2132     }
  2136 
       
  2137     master->frames_timed_out = frames_timed_out;
       
  2138 }
  2133 }
  2139 
  2134 
  2140 /*****************************************************************************/
  2135 /*****************************************************************************/
  2141 
  2136 
  2142 void ecrt_master_send_ext(ec_master_t *master)
  2137 void ecrt_master_send_ext(ec_master_t *master)