diff -r 9dc136e3801c -r 677967864795 master/slave.c --- 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 #include +#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);