From 105ff0bdd0a1b9afa0b28acbad37a4062188d32e Mon Sep 17 00:00:00 2001
From: Florian Pose <fp@igh-essen.com>
Date: Mon, 27 Mar 2006 12:04:55 +0000
Subject: [PATCH] CRC-Counter nach ESC-Datasheet implementiert.

---
 master/slave.c | 27 ++++++++++++++++++++++-----
 todo.txt       |  2 +-
 2 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/master/slave.c b/master/slave.c
index 9d1d9d4d..f0013b21 100644
--- a/master/slave.c
+++ b/master/slave.c
@@ -871,14 +871,31 @@ int ec_slave_check_crc(ec_slave_t *slave /**< EtherCAT-Slave */)
     }
 
     // No CRC faults.
-    if (!EC_READ_U16(command.data) && !EC_READ_U16(command.data + 2)) return 0;
+    if (!EC_READ_U32(command.data)) return 0;
 
-    EC_WARN("CRC faults on slave %i. A: %i, B: %i\n", slave->ring_position,
-            EC_READ_U16(command.data), EC_READ_U16(command.data + 2));
+    if (EC_READ_U8(command.data))
+        EC_WARN("%3i RX-error%s on slave %i, channel A.\n",
+                EC_READ_U8(command.data),
+                EC_READ_U8(command.data) == 1 ? "" : "s",
+                slave->ring_position);
+    if (EC_READ_U8(command.data + 1))
+        EC_WARN("%3i invalid frame%s on slave %i, channel A.\n",
+                EC_READ_U8(command.data + 1),
+                EC_READ_U8(command.data + 1) == 1 ? "" : "s",
+                slave->ring_position);
+    if (EC_READ_U8(command.data + 2))
+        EC_WARN("%3i RX-error%s on slave %i, channel B.\n",
+                EC_READ_U8(command.data + 2),
+                EC_READ_U8(command.data + 2) == 1 ? "" : "s",
+                slave->ring_position);
+    if (EC_READ_U8(command.data + 3))
+        EC_WARN("%3i invalid frame%s on slave %i, channel B.\n",
+                EC_READ_U8(command.data + 3),
+                EC_READ_U8(command.data + 3) == 1 ? "" : "s",
+                slave->ring_position);
 
     // Reset CRC counters
-    EC_WRITE_U16(data,     0x0000);
-    EC_WRITE_U16(data + 2, 0x0000);
+    EC_WRITE_U32(data, 0x00000000);
     ec_command_init_npwr(&command, slave->station_address, 0x0300, 4, data);
     if (unlikely(ec_master_simple_io(slave->master, &command))) {
         EC_WARN("Resetting CRC fault counters failed on slave %i!\n",
diff --git a/todo.txt b/todo.txt
index 6b70f9b5..bf7515b9 100644
--- a/todo.txt
+++ b/todo.txt
@@ -5,12 +5,12 @@ $Id$
 
 - Anzahl Frames, die die Karte Puffern kann
 - Mehrere Frames versenden
+- Typeninformation aus Master entfernen / XML-Dateien aus User-Space lesen
 - Kommandos mit dynamischem Speicher
 - Konfiguration Inkrementalgeberklemme
 - SSI-Klemme
 - SysFS-Interface implementieren
 - SDO Dictionary der Slaves auslesen und im SysFS darstellen
-- Typeninformation aus Master entfernen / XML-Dateien aus User-Space lesen
 - DLL-Link-States auslesen und Topologie berechnen
 - Ethernet over EtherCAT (EoE)
 - eepro100-Kartentreiber
-- 
GitLab