master/slave.c
changeset 77 677967864795
parent 74 9bf603942791
child 84 b4ae98855cea
--- a/master/slave.c	Thu Feb 23 14:51:45 2006 +0000
+++ b/master/slave.c	Fri Feb 24 10:19:26 2006 +0000
@@ -11,6 +11,7 @@
 #include <linux/module.h>
 #include <linux/delay.h>
 
+#include "../include/EtherCAT_si.h"
 #include "globals.h"
 #include "slave.h"
 #include "frame.h"
@@ -75,11 +76,11 @@
         return -1;
     }
 
-    slave->base_type = frame.data[0];
-    slave->base_revision = frame.data[1];
-    slave->base_build = frame.data[2] | (frame.data[3] << 8);
-    slave->base_fmmu_count = frame.data[4];
-    slave->base_sync_count = frame.data[5];
+    slave->base_type =       EC_READ_U8 (frame.data);
+    slave->base_revision =   EC_READ_U8 (frame.data + 1);
+    slave->base_build =      EC_READ_U16(frame.data + 2);
+    slave->base_fmmu_count = EC_READ_U8 (frame.data + 4);
+    slave->base_sync_count = EC_READ_U8 (frame.data + 5);
 
     if (slave->base_fmmu_count > EC_MAX_FMMUS)
         slave->base_fmmu_count = EC_MAX_FMMUS;
@@ -135,12 +136,10 @@
 
     // Initiate read operation
 
-    data[0] = 0x00;
-    data[1] = 0x01;
-    data[2] = offset & 0xFF;
-    data[3] = (offset & 0xFF00) >> 8;
-    data[4] = 0x00;
-    data[5] = 0x00;
+    EC_WRITE_U8 (data,     0x00);
+    EC_WRITE_U8 (data + 1, 0x01);
+    EC_WRITE_U16(data + 2, offset);
+    EC_WRITE_U16(data + 4, 0x0000);
 
     ec_frame_init_npwr(&frame, slave->master, slave->station_address, 0x502, 6,
                        data);
@@ -173,7 +172,7 @@
             return -1;
         }
 
-        if (likely((frame.data[1] & 0x81) == 0)) {
+        if (likely((EC_READ_U8(frame.data + 1) & 0x81) == 0)) {
             memcpy(target, frame.data + 6, 4);
             break;
         }
@@ -208,8 +207,7 @@
     unsigned char data[2];
     unsigned int tries_left;
 
-    data[0] = state | EC_ACK;
-    data[1] = 0x00;
+    EC_WRITE_U16(data, state | EC_ACK);
 
     ec_frame_init_npwr(&frame, slave->master, slave->station_address, 0x0120,
                        2, data);
@@ -247,14 +245,14 @@
             return;
         }
 
-        if (unlikely(frame.data[0] != state)) {
+        if (unlikely(EC_READ_U8(frame.data) != state)) {
             printk(KERN_ERR "EtherCAT: Could not acknowledge state %02X on"
                    " slave %i (code %02X)!\n", state, slave->ring_position,
-                   frame.data[0]);
+                   EC_READ_U8(frame.data));
             return;
         }
 
-        if (likely(frame.data[0] == state)) {
+        if (likely(EC_READ_U8(frame.data) == state)) {
             printk(KERN_INFO "EtherCAT: Acknowleged state %02X on slave %i.\n",
                    state, slave->ring_position);
             return;
@@ -289,8 +287,7 @@
     unsigned char data[2];
     unsigned int tries_left;
 
-    data[0] = state;
-    data[1] = 0x00;
+    EC_WRITE_U16(data, state);
 
     ec_frame_init_npwr(&frame, slave->master, slave->station_address, 0x0120,
                        2, data);
@@ -327,15 +324,15 @@
             return -1;
         }
 
-        if (unlikely(frame.data[0] & 0x10)) { // State change error
+        if (unlikely(EC_READ_U8(frame.data) & 0x10)) { // State change error
             printk(KERN_ERR "EtherCAT: Could not set state %02X - Slave %i"
                    " refused state change (code %02X)!\n", state,
-                   slave->ring_position, frame.data[0]);
-            ec_slave_state_ack(slave, frame.data[0] & 0x0F);
+                   slave->ring_position, EC_READ_U8(frame.data));
+            ec_slave_state_ack(slave, EC_READ_U8(frame.data) & 0x0F);
             return -1;
         }
 
-        if (likely(frame.data[0] == (state & 0x0F))) {
+        if (likely(EC_READ_U8(frame.data) == (state & 0x0F))) {
             // State change successful
             break;
         }
@@ -442,7 +439,6 @@
 {
     ec_frame_t frame;
     uint8_t data[4];
-    uint16_t crc[2];
 
     ec_frame_init_nprd(&frame, slave->master, slave->station_address, 0x0300,
                        4);
@@ -460,17 +456,16 @@
         return -1;
     }
 
-    crc[0] = frame.data[0] | (frame.data[1] << 8);
-    crc[1] = frame.data[2] | (frame.data[3] << 8);
-
     // No CRC faults.
-    if (!crc[0] && !crc[1]) return 0;
+    if (!EC_READ_U16(frame.data) && !EC_READ_U16(frame.data + 2)) return 0;
 
     printk(KERN_INFO "EtherCAT: CRC faults on slave %i. A: %i, B: %i\n",
-           slave->ring_position, crc[0], crc[1]);
+           slave->ring_position, EC_READ_U16(frame.data),
+           EC_READ_U16(frame.data + 2));
 
     // Reset CRC counters
-    memset(data, 0x00, 4);
+    EC_WRITE_U16(data,     0x0000);
+    EC_WRITE_U16(data + 2, 0x0000);
     ec_frame_init_npwr(&frame, slave->master, slave->station_address, 0x0300,
                        4, data);