equal
deleted
inserted
replaced
238 master->debug_level = 0; |
238 master->debug_level = 0; |
239 |
239 |
240 master->stats.timeouts = 0; |
240 master->stats.timeouts = 0; |
241 master->stats.delayed = 0; |
241 master->stats.delayed = 0; |
242 master->stats.corrupted = 0; |
242 master->stats.corrupted = 0; |
|
243 master->stats.skipped = 0; |
243 master->stats.unmatched = 0; |
244 master->stats.unmatched = 0; |
244 master->stats.t_last = 0; |
245 master->stats.t_last = 0; |
245 |
246 |
246 master->mode = EC_MASTER_MODE_ORPHANED; |
247 master->mode = EC_MASTER_MODE_ORPHANED; |
247 |
248 |
285 ec_datagram_t *queued_datagram; |
286 ec_datagram_t *queued_datagram; |
286 |
287 |
287 // check, if the datagram is already queued |
288 // check, if the datagram is already queued |
288 list_for_each_entry(queued_datagram, &master->datagram_queue, queue) { |
289 list_for_each_entry(queued_datagram, &master->datagram_queue, queue) { |
289 if (queued_datagram == datagram) { |
290 if (queued_datagram == datagram) { |
|
291 master->stats.skipped++; |
|
292 ec_master_output_stats(master); |
290 datagram->state = EC_DATAGRAM_QUEUED; |
293 datagram->state = EC_DATAGRAM_QUEUED; |
291 if (unlikely(master->debug_level)) |
|
292 EC_WARN("datagram already queued.\n"); |
|
293 return; |
294 return; |
294 } |
295 } |
295 } |
296 } |
296 |
297 |
297 list_add_tail(&datagram->queue, &master->datagram_queue); |
298 list_add_tail(&datagram->queue, &master->datagram_queue); |
535 master->stats.delayed = 0; |
536 master->stats.delayed = 0; |
536 } |
537 } |
537 if (master->stats.corrupted) { |
538 if (master->stats.corrupted) { |
538 EC_WARN("%i frame(s) CORRUPTED!\n", master->stats.corrupted); |
539 EC_WARN("%i frame(s) CORRUPTED!\n", master->stats.corrupted); |
539 master->stats.corrupted = 0; |
540 master->stats.corrupted = 0; |
|
541 } |
|
542 if (master->stats.skipped) { |
|
543 EC_WARN("%i datagram(s) SKIPPED!\n", master->stats.skipped); |
|
544 master->stats.skipped = 0; |
540 } |
545 } |
541 if (master->stats.unmatched) { |
546 if (master->stats.unmatched) { |
542 EC_WARN("%i datagram(s) UNMATCHED!\n", master->stats.unmatched); |
547 EC_WARN("%i datagram(s) UNMATCHED!\n", master->stats.unmatched); |
543 master->stats.unmatched = 0; |
548 master->stats.unmatched = 0; |
544 } |
549 } |
1232 cycles_t t_received, t_timeout; |
1237 cycles_t t_received, t_timeout; |
1233 |
1238 |
1234 ec_device_call_isr(master->device); |
1239 ec_device_call_isr(master->device); |
1235 |
1240 |
1236 t_received = get_cycles(); |
1241 t_received = get_cycles(); |
1237 t_timeout = (cycles_t) EC_IO_TIMEOUT * (cpu_khz / 1000); |
1242 t_timeout = EC_IO_TIMEOUT * cpu_khz / 1000; |
1238 |
1243 |
1239 // dequeue all received datagrams |
1244 // dequeue all received datagrams |
1240 list_for_each_entry_safe(datagram, next, &master->datagram_queue, queue) |
1245 list_for_each_entry_safe(datagram, next, &master->datagram_queue, queue) |
1241 if (datagram->state == EC_DATAGRAM_RECEIVED) |
1246 if (datagram->state == EC_DATAGRAM_RECEIVED) |
1242 list_del_init(&datagram->queue); |
1247 list_del_init(&datagram->queue); |