master/datagram.c
changeset 2095 53b5128e1313
parent 2080 42fbd117c3e3
child 2589 2b9c78543663
--- a/master/datagram.c	Mon Aug 01 17:02:45 2011 +0200
+++ b/master/datagram.c	Mon Aug 01 17:54:56 2011 +0200
@@ -594,3 +594,53 @@
 }
 
 /*****************************************************************************/
+
+/** Output datagram information.
+ */
+void ec_datagram_output_info(
+        const ec_datagram_t *datagram /**< EtherCAT datagram. */
+        )
+{
+    printk("state=%s ", ec_datagram_type_string(datagram));
+
+    switch (datagram->type) {
+        case EC_DATAGRAM_APRD:
+        case EC_DATAGRAM_APWR:
+        case EC_DATAGRAM_APRW:
+        case EC_DATAGRAM_ARMW:
+            printk("pos=%i mem=0x%04x",
+                    EC_READ_S16(datagram->address) * (-1),
+                    EC_READ_U16(datagram->address + 2)
+                    );
+            break;
+
+        case EC_DATAGRAM_FPRD:
+        case EC_DATAGRAM_FPWR:
+        case EC_DATAGRAM_FPRW:
+        case EC_DATAGRAM_FRMW:
+            printk("node=%u mem=0x%04x",
+                    EC_READ_U16(datagram->address),
+                    EC_READ_U16(datagram->address + 2));
+            break;
+
+        case EC_DATAGRAM_BRD:
+        case EC_DATAGRAM_BWR:
+        case EC_DATAGRAM_BRW:
+            printk("mem=0x%04x", EC_READ_U16(datagram->address + 2));
+            break;
+
+        case EC_DATAGRAM_LRD:
+        case EC_DATAGRAM_LWR:
+        case EC_DATAGRAM_LRW:
+            printk("log=0x%08x", EC_READ_U32(datagram->address));
+            break;
+
+        default:
+            printk("??");
+            break;
+    }
+
+    printk(" size=%zu", datagram->data_size);
+}
+
+/*****************************************************************************/