]> git.feebdaed.xyz Git - 0xmirror/SOEM.git/commitdiff
Run clang-format on sources
authorHans-Erik Floryd <hans-erik.floryd@rt-labs.com>
Thu, 26 Jun 2025 14:41:02 +0000 (16:41 +0200)
committerHans-Erik Floryd <hans-erik.floryd@rt-labs.com>
Wed, 9 Jul 2025 15:20:48 +0000 (17:20 +0200)
Change-Id: Ide59897b87104bfb71e953b7f8dace00e441e245

90 files changed:
include/soem/ec_base.h
include/soem/ec_coe.h
include/soem/ec_config.h
include/soem/ec_dc.h
include/soem/ec_eoe.h
include/soem/ec_foe.h
include/soem/ec_main.h
include/soem/ec_print.h
include/soem/ec_soe.h
include/soem/ec_type.h
osal/erika/osal.c
osal/erika/osal_defs.h
osal/intime/osal.c
osal/intime/osal_defs.h
osal/linux/osal.c
osal/linux/osal_defs.h
osal/macosx/osal.c
osal/macosx/osal_defs.h
osal/osal.h
osal/rtems/osal.c
osal/rtems/osal_defs.h
osal/rtk/osal.c
osal/rtk/osal_defs.h
osal/vxworks/osal.c
osal/vxworks/osal_defs.h
osal/win32/osal.c
osal/win32/osal_defs.h
osal/win32/osal_win32.h
oshw/erika/nicdrv.c
oshw/erika/nicdrv.h
oshw/erika/oshw.c
oshw/erika/oshw.h
oshw/intime/nicdrv.c
oshw/intime/nicdrv.h
oshw/intime/oshw.c
oshw/intime/oshw.h
oshw/linux/nicdrv.c
oshw/linux/nicdrv.h
oshw/linux/oshw.c
oshw/linux/oshw.h
oshw/macosx/nicdrv.c
oshw/macosx/nicdrv.h
oshw/macosx/oshw.c
oshw/macosx/oshw.h
oshw/rtems/nicdrv.c
oshw/rtems/nicdrv.h
oshw/rtems/oshw.c
oshw/rtems/oshw.h
oshw/rtk/fec/fec_ecat.c
oshw/rtk/fec/fec_ecat.h
oshw/rtk/lw_mac/lw_emac.c
oshw/rtk/nicdrv.c
oshw/rtk/nicdrv.h
oshw/rtk/oshw.c
oshw/rtk/oshw.h
oshw/vxworks/nicdrv.c
oshw/vxworks/nicdrv.h
oshw/vxworks/oshw.c
oshw/vxworks/oshw.h
oshw/win32/nicdrv.c
oshw/win32/nicdrv.h
oshw/win32/oshw.c
oshw/win32/oshw.h
samples/eepromtool/eepromtool.c
samples/simple_ng/simple_ng.c
samples/simple_test/simple_test.c
samples/slaveinfo/slaveinfo.c
src/ec_base.c
src/ec_coe.c
src/ec_config.c
src/ec_dc.c
src/ec_eoe.c
src/ec_foe.c
src/ec_main.c
src/ec_print.c
src/ec_soe.c
test/intime/ec_master/ec_master.c
test/linux/aliastool.c
test/linux/coetest/coetest.c
test/linux/ebox/ebox.c
test/linux/eoe_test/eoe_test.c
test/linux/firm_update/firm_update.c
test/linux/red_test/red_test.c
test/rtk/main.c
test/win32/ebox/ebox.c
test/win32/eepromtool/eepromtool.c
test/win32/firm_update/firm_update.c
test/win32/red_test/red_test.c
test/win32/simple_test/simple_test.c
test/win32/slaveinfo/slaveinfo.c

index 835b48c260f8bbffe87a268ae5f24ed708107eb2..3eafa121e88fb1f5fa0c6ed6f63302d3094d0b51 100644 (file)
 #define _ec_base_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 int ecx_setupdatagram(ecx_portt *port, void *frame, uint8 com, uint8 idx, uint16 ADP, uint16 ADO, uint16 length, void *data);
 uint16 ecx_adddatagram(ecx_portt *port, void *frame, uint8 com, uint8 idx, boolean more, uint16 ADP, uint16 ADO, uint16 length, void *data);
-int ecx_BWR(ecx_portt *port, uint16 ADP,uint16 ADO,uint16 length,void *data,int timeout);
-int ecx_BRD(ecx_portt *port, uint16 ADP,uint16 ADO,uint16 length,void *data,int timeout);
+int ecx_BWR(ecx_portt *port, uint16 ADP, uint16 ADO, uint16 length, void *data, int timeout);
+int ecx_BRD(ecx_portt *port, uint16 ADP, uint16 ADO, uint16 length, void *data, int timeout);
 int ecx_APRD(ecx_portt *port, uint16 ADP, uint16 ADO, uint16 length, void *data, int timeout);
 int ecx_ARMW(ecx_portt *port, uint16 ADP, uint16 ADO, uint16 length, void *data, int timeout);
 int ecx_FRMW(ecx_portt *port, uint16 ADP, uint16 ADO, uint16 length, void *data, int timeout);
index 1bef0a8183ffba3dfa494c2f6214c96d1fed9b60..1aa7f9be53faacce67c639513a9c402d59275867 100644 (file)
 #define _ec_coe_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 /** max entries in Object Description list */
-#define EC_MAXODLIST   1024
+#define EC_MAXODLIST 1024
 
 /** max entries in Object Entry list */
-#define EC_MAXOELIST   256
+#define EC_MAXOELIST 256
 
 /* Storage for object description list */
 typedef struct
 {
    /** slave number */
-   uint16  Slave;
+   uint16 Slave;
    /** number of entries in list */
-   uint16  Entries;
+   uint16 Entries;
    /** array of indexes */
-   uint16  Index[EC_MAXODLIST];
+   uint16 Index[EC_MAXODLIST];
    /** array of datatypes, see EtherCAT specification */
-   uint16  DataType[EC_MAXODLIST];
+   uint16 DataType[EC_MAXODLIST];
    /** array of object codes, see EtherCAT specification */
-   uint8   ObjectCode[EC_MAXODLIST];
+   uint8 ObjectCode[EC_MAXODLIST];
    /** number of subindexes for each index */
-   uint8   MaxSub[EC_MAXODLIST];
+   uint8 MaxSub[EC_MAXODLIST];
    /** textual description of each index */
-   char    Name[EC_MAXODLIST][EC_MAXNAME+1];
+   char Name[EC_MAXODLIST][EC_MAXNAME + 1];
 } ec_ODlistt;
 
 /* storage for object list entry information */
@@ -48,7 +47,7 @@ typedef struct
    /** number of entries in list */
    uint16 Entries;
    /** array of value infos, see EtherCAT specification */
-   uint8  ValueInfo[EC_MAXOELIST];
+   uint8 ValueInfo[EC_MAXOELIST];
    /** array of value infos, see EtherCAT specification */
    uint16 DataType[EC_MAXOELIST];
    /** array of bit lengths, see EtherCAT specification */
@@ -56,7 +55,7 @@ typedef struct
    /** array of object access bits, see EtherCAT specification */
    uint16 ObjAccess[EC_MAXOELIST];
    /** textual description of each index */
-   char   Name[EC_MAXOELIST][EC_MAXNAME+1];
+   char Name[EC_MAXOELIST][EC_MAXNAME + 1];
 } ec_OElistt;
 
 void ecx_SDOerror(ecx_contextt *context, uint16 Slave, uint16 Index, uint8 SubIdx, int32 AbortCode);
@@ -64,8 +63,8 @@ int ecx_SDOread(ecx_contextt *context, uint16 slave, uint16 index, uint8 subinde
                 boolean CA, int *psize, void *p, int timeout);
 int ecx_SDOwrite(ecx_contextt *context, uint16 Slave, uint16 Index, uint8 SubIndex,
                  boolean CA, int psize, const void *p, int Timeout);
-int ecx_RxPDO(ecx_contextt *context, uint16 Slave, uint16 RxPDOnumber , int psize, const void *p);
-int ecx_TxPDO(ecx_contextt *context, uint16 slave, uint16 TxPDOnumber , int *psize, void *p, int timeout);
+int ecx_RxPDO(ecx_contextt *context, uint16 Slave, uint16 RxPDOnumber, int psize, const void *p);
+int ecx_TxPDO(ecx_contextt *context, uint16 slave, uint16 TxPDOnumber, int *psize, void *p, int timeout);
 int ecx_readPDOmap(ecx_contextt *context, uint16 Slave, uint32 *Osize, uint32 *Isize);
 int ecx_readPDOmapCA(ecx_contextt *context, uint16 Slave, int Thread_n, uint32 *Osize, uint32 *Isize);
 int ecx_readODlist(ecx_contextt *context, uint16 Slave, ec_ODlistt *pODlist);
index 354d1c6417894bf4580b52bf115ea0b37a02451a..c639feee2651ade78060ecd9bccf9666ab163241 100644 (file)
 #define _ec_config_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
-#define EC_NODEOFFSET      0x1000
-#define EC_TEMPNODE        0xffff
+#define EC_NODEOFFSET 0x1000
+#define EC_TEMPNODE   0xffff
 
 int ecx_config_init(ecx_contextt *context, uint8 usetable);
 int ecx_config_map_group(ecx_contextt *context, void *pIOmap, uint8 group);
index 5df148fc21fb51bc1c85847110a50543dab3c54c..d0472dd3d11553ad5768b69c98cbcc00e107f8f8 100644 (file)
@@ -13,8 +13,7 @@
 #define _EC_ECATDC_H
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 boolean ecx_configdc(ecx_contextt *context);
index c10d707e5a599a529ff9d7803085547d13c21e67..4497b83429978968d34a0da8fb5db26b5d727dcb 100644 (file)
 #define _ec_eoe_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 #include "soem/soem.h"
 
 /* use maximum size for EOE mailbox data - mbxheader and 2x frameinfo */
-#define EC_MAXEOEDATA (EC_MAXMBX - (sizeof(ec_mbxheadert) +\
-                                    sizeof(uint16_t) +\
+#define EC_MAXEOEDATA (EC_MAXMBX - (sizeof(ec_mbxheadert) + \
+                                    sizeof(uint16_t) +      \
                                     sizeof(uint16_t)))
 
 /** DNS length according to ETG 1000.6 */
-#define EOE_DNS_NAME_LENGTH  32
+#define EOE_DNS_NAME_LENGTH     32
 /** Ethernet address length not including VLAN */
-#define EOE_ETHADDR_LENGTH    6
+#define EOE_ETHADDR_LENGTH      6
 /** IPv4 address length */
-#define EOE_IP4_LENGTH        sizeof(uint32_t)
+#define EOE_IP4_LENGTH          sizeof(uint32_t)
 
-#define EOE_MAKEU32(a,b,c,d) (((uint32_t)((a) & 0xff) << 24) | \
-                            ((uint32_t)((b) & 0xff) << 16) | \
-                            ((uint32_t)((c) & 0xff) << 8)  | \
-                            (uint32_t)((d) & 0xff))
+#define EOE_MAKEU32(a, b, c, d) (((uint32_t)((a) & 0xff) << 24) | \
+                                 ((uint32_t)((b) & 0xff) << 16) | \
+                                 ((uint32_t)((c) & 0xff) << 8) |  \
+                                 (uint32_t)((d) & 0xff))
 
 #if !defined(EC_BIG_ENDIAN) && defined(EC_LITTLE_ENDIAN)
 
 #define EOE_HTONS(x) ((((x) & 0x00ffUL) << 8) | (((x) & 0xff00UL) >> 8))
 #define EOE_NTOHS(x) EOE_HTONS(x)
 #define EOE_HTONL(x) ((((x) & 0x000000ffUL) << 24) | \
-                     (((x) & 0x0000ff00UL) <<  8) | \
-                     (((x) & 0x00ff0000UL) >>  8) | \
-                     (((x) & 0xff000000UL) >> 24))
+                      (((x) & 0x0000ff00UL) << 8) |  \
+                      (((x) & 0x00ff0000UL) >> 8) |  \
+                      (((x) & 0xff000000UL) >> 24))
 #define EOE_NTOHL(x) EOE_HTONL(x)
 #else
 #define EOE_HTONS(x) (x)
@@ -53,50 +52,50 @@ extern "C"
 #endif /* !defined(EC_BIG_ENDIAN) && defined(EC_LITTLE_ENDIAN) */
 
 /** Get one byte from the 4-byte address */
-#define eoe_ip4_addr1(ipaddr) (((const uint8_t*)(&(ipaddr)->addr))[0])
-#define eoe_ip4_addr2(ipaddr) (((const uint8_t*)(&(ipaddr)->addr))[1])
-#define eoe_ip4_addr3(ipaddr) (((const uint8_t*)(&(ipaddr)->addr))[2])
-#define eoe_ip4_addr4(ipaddr) (((const uint8_t*)(&(ipaddr)->addr))[3])
+#define eoe_ip4_addr1(ipaddr) (((const uint8_t *)(&(ipaddr)->addr))[0])
+#define eoe_ip4_addr2(ipaddr) (((const uint8_t *)(&(ipaddr)->addr))[1])
+#define eoe_ip4_addr3(ipaddr) (((const uint8_t *)(&(ipaddr)->addr))[2])
+#define eoe_ip4_addr4(ipaddr) (((const uint8_t *)(&(ipaddr)->addr))[3])
 
 /** Set an IP address given by the four byte-parts */
-#define EOE_IP4_ADDR_TO_U32(ipaddr,a,b,c,d)  \
-   (ipaddr)->addr = EOE_HTONL(EOE_MAKEU32(a,b,c,d))
+#define EOE_IP4_ADDR_TO_U32(ipaddr, a, b, c, d) \
+   (ipaddr)->addr = EOE_HTONL(EOE_MAKEU32(a, b, c, d))
 
 /** Header frame info 1 */
-#define EOE_HDR_FRAME_TYPE_OFFSET      0
-#define EOE_HDR_FRAME_TYPE             (0xF << 0)
-#define EOE_HDR_FRAME_TYPE_SET(x)      (((x) & 0xF) << 0)
-#define EOE_HDR_FRAME_TYPE_GET(x)      (((x) >> 0) & 0xF)
-#define EOE_HDR_FRAME_PORT_OFFSET      4
-#define EOE_HDR_FRAME_PORT             (0xF << 4)
-#define EOE_HDR_FRAME_PORT_SET(x)      ((uint16)(((x) & 0xF) << 4))
-#define EOE_HDR_FRAME_PORT_GET(x)      (((x) >> 4) & 0xF)
-#define EOE_HDR_LAST_FRAGMENT_OFFSET   8
-#define EOE_HDR_LAST_FRAGMENT          (0x1 << 8)
-#define EOE_HDR_LAST_FRAGMENT_SET(x)   (((x) & 0x1) << 8)
-#define EOE_HDR_LAST_FRAGMENT_GET(x)   (((x) >> 8) & 0x1)
-#define EOE_HDR_TIME_APPEND_OFFSET     9
-#define EOE_HDR_TIME_APPEND            (0x1 << 9)
-#define EOE_HDR_TIME_APPEND_SET(x)     (((x) & 0x1) << 9)
-#define EOE_HDR_TIME_APPEND_GET(x)     (((x) >> 9) & 0x1)
-#define EOE_HDR_TIME_REQUEST_OFFSET    10
-#define EOE_HDR_TIME_REQUEST           (0x1 << 10)
-#define EOE_HDR_TIME_REQUEST_SET(x)    (((x) & 0x1) << 10)
-#define EOE_HDR_TIME_REQUEST_GET(x)    (((x) >> 10) & 0x1)
+#define EOE_HDR_FRAME_TYPE_OFFSET         0
+#define EOE_HDR_FRAME_TYPE                (0xF << 0)
+#define EOE_HDR_FRAME_TYPE_SET(x)         (((x) & 0xF) << 0)
+#define EOE_HDR_FRAME_TYPE_GET(x)         (((x) >> 0) & 0xF)
+#define EOE_HDR_FRAME_PORT_OFFSET         4
+#define EOE_HDR_FRAME_PORT                (0xF << 4)
+#define EOE_HDR_FRAME_PORT_SET(x)         ((uint16)(((x) & 0xF) << 4))
+#define EOE_HDR_FRAME_PORT_GET(x)         (((x) >> 4) & 0xF)
+#define EOE_HDR_LAST_FRAGMENT_OFFSET      8
+#define EOE_HDR_LAST_FRAGMENT             (0x1 << 8)
+#define EOE_HDR_LAST_FRAGMENT_SET(x)      (((x) & 0x1) << 8)
+#define EOE_HDR_LAST_FRAGMENT_GET(x)      (((x) >> 8) & 0x1)
+#define EOE_HDR_TIME_APPEND_OFFSET        9
+#define EOE_HDR_TIME_APPEND               (0x1 << 9)
+#define EOE_HDR_TIME_APPEND_SET(x)        (((x) & 0x1) << 9)
+#define EOE_HDR_TIME_APPEND_GET(x)        (((x) >> 9) & 0x1)
+#define EOE_HDR_TIME_REQUEST_OFFSET       10
+#define EOE_HDR_TIME_REQUEST              (0x1 << 10)
+#define EOE_HDR_TIME_REQUEST_SET(x)       (((x) & 0x1) << 10)
+#define EOE_HDR_TIME_REQUEST_GET(x)       (((x) >> 10) & 0x1)
 
 /** Header frame info 2 */
-#define EOE_HDR_FRAG_NO_OFFSET         0
-#define EOE_HDR_FRAG_NO                (0x3F << 0)
-#define EOE_HDR_FRAG_NO_SET(x)         ((uint16)(((x) & 0x3F) << 0))
-#define EOE_HDR_FRAG_NO_GET(x)         (((x) >> 0) & 0x3F)
-#define EOE_HDR_FRAME_OFFSET_OFFSET    6
-#define EOE_HDR_FRAME_OFFSET           (0x3F << 6)
-#define EOE_HDR_FRAME_OFFSET_SET(x)    ((uint16)(((x) & 0x3F) << 6))
-#define EOE_HDR_FRAME_OFFSET_GET(x)    (((x) >> 6) & 0x3F)
-#define EOE_HDR_FRAME_NO_OFFSET        12
-#define EOE_HDR_FRAME_NO               (0xF << 12)
-#define EOE_HDR_FRAME_NO_SET(x)        ((uint16)(((x) & 0xF) << 12))
-#define EOE_HDR_FRAME_NO_GET(x)        (((x) >> 12) & 0xF)
+#define EOE_HDR_FRAG_NO_OFFSET            0
+#define EOE_HDR_FRAG_NO                   (0x3F << 0)
+#define EOE_HDR_FRAG_NO_SET(x)            ((uint16)(((x) & 0x3F) << 0))
+#define EOE_HDR_FRAG_NO_GET(x)            (((x) >> 0) & 0x3F)
+#define EOE_HDR_FRAME_OFFSET_OFFSET       6
+#define EOE_HDR_FRAME_OFFSET              (0x3F << 6)
+#define EOE_HDR_FRAME_OFFSET_SET(x)       ((uint16)(((x) & 0x3F) << 6))
+#define EOE_HDR_FRAME_OFFSET_GET(x)       (((x) >> 6) & 0x3F)
+#define EOE_HDR_FRAME_NO_OFFSET           12
+#define EOE_HDR_FRAME_NO                  (0xF << 12)
+#define EOE_HDR_FRAME_NO_SET(x)           ((uint16)(((x) & 0xF) << 12))
+#define EOE_HDR_FRAME_NO_GET(x)           (((x) >> 12) & 0xF)
 
 /** EOE param */
 #define EOE_PARAM_OFFSET                  4
@@ -108,30 +107,30 @@ extern "C"
 #define EOE_PARAM_DNS_NAME_INCLUDE        (0x1 << 5)
 
 /** EoE frame types */
-#define EOE_FRAG_DATA                  0
-#define EOE_INIT_RESP_TIMESTAMP        1
-#define EOE_INIT_REQ                   2 /* Spec SET IP REQ */
-#define EOE_INIT_RESP                  3 /* Spec SET IP RESP */
-#define EOE_SET_ADDR_FILTER_REQ        4
-#define EOE_SET_ADDR_FILTER_RESP       5
-#define EOE_GET_IP_PARAM_REQ           6
-#define EOE_GET_IP_PARAM_RESP          7
-#define EOE_GET_ADDR_FILTER_REQ        8
-#define EOE_GET_ADDR_FILTER_RESP       9
+#define EOE_FRAG_DATA                     0
+#define EOE_INIT_RESP_TIMESTAMP           1
+#define EOE_INIT_REQ                      2 /* Spec SET IP REQ */
+#define EOE_INIT_RESP                     3 /* Spec SET IP RESP */
+#define EOE_SET_ADDR_FILTER_REQ           4
+#define EOE_SET_ADDR_FILTER_RESP          5
+#define EOE_GET_IP_PARAM_REQ              6
+#define EOE_GET_IP_PARAM_RESP             7
+#define EOE_GET_ADDR_FILTER_REQ           8
+#define EOE_GET_ADDR_FILTER_RESP          9
 
 /** EoE parameter result codes */
-#define EOE_RESULT_SUCCESS                   0x0000
-#define EOE_RESULT_UNSPECIFIED_ERROR         0x0001
-#define EOE_RESULT_UNSUPPORTED_FRAME_TYPE    0x0002
-#define EOE_RESULT_NO_IP_SUPPORT             0x0201
-#define EOE_RESULT_NO_DHCP_SUPPORT           0x0202
-#define EOE_RESULT_NO_FILTER_SUPPORT         0x0401
-
+#define EOE_RESULT_SUCCESS                0x0000
+#define EOE_RESULT_UNSPECIFIED_ERROR      0x0001
+#define EOE_RESULT_UNSUPPORTED_FRAME_TYPE 0x0002
+#define EOE_RESULT_NO_IP_SUPPORT          0x0201
+#define EOE_RESULT_NO_DHCP_SUPPORT        0x0202
+#define EOE_RESULT_NO_FILTER_SUPPORT      0x0401
 
 /** EOE ip4 address in network order */
-typedef struct eoe_ip4_addr {
+typedef struct eoe_ip4_addr
+{
    uint32_t addr;
-}eoe_ip4_addr_t;
+} eoe_ip4_addr_t;
 
 /** EOE ethernet address */
 PACKED_BEGIN
@@ -159,8 +158,8 @@ typedef struct eoe_param
 } eoe_param_t;
 
 /** EOE structure.
-* Used to interpret EoE mailbox packets.
-*/
+ * Used to interpret EoE mailbox packets.
+ */
 PACKED_BEGIN
 typedef struct PACKED
 {
@@ -176,36 +175,36 @@ typedef struct PACKED
 PACKED_END
 
 int ecx_EOEdefinehook(ecx_contextt *context, void *hook);
-int ecx_EOEsetIp(ecx_contextt *context, 
-   uint16 slave, 
-   uint8 port, 
-   eoe_param_t * ipparam, 
-   int timeout);
-int ecx_EOEgetIp(ecx_contextt *context, 
-   uint16 slave, 
-   uint8 port, 
-   eoe_param_t * ipparam, 
-   int timeout);
-int ecx_EOEsend(ecx_contextt *context, 
-   uint16 slave, 
-   uint8 port, 
-   int psize, 
-   void *p, 
-   int timeout);
-int ecx_EOErecv(ecx_contextt *context, 
-   uint16 slave, 
-   uint8 port, 
-   int * psize, 
-   void *p, 
-   int timeout);
+int ecx_EOEsetIp(ecx_contextt *context,
+                 uint16 slave,
+                 uint8 port,
+                 eoe_param_t *ipparam,
+                 int timeout);
+int ecx_EOEgetIp(ecx_contextt *context,
+                 uint16 slave,
+                 uint8 port,
+                 eoe_param_t *ipparam,
+                 int timeout);
+int ecx_EOEsend(ecx_contextt *context,
+                uint16 slave,
+                uint8 port,
+                int psize,
+                void *p,
+                int timeout);
+int ecx_EOErecv(ecx_contextt *context,
+                uint16 slave,
+                uint8 port,
+                int *psize,
+                void *p,
+                int timeout);
 int ecx_EOEreadfragment(
-   ec_mbxbuft * MbxIn,
-   uint8 * rxfragmentno,
-   uint16 * rxframesize,
-   uint16 * rxframeoffset,
-   uint16 * rxframeno,
-   int * psize,
-   void *p);
+    ec_mbxbuft *MbxIn,
+    uint8 *rxfragmentno,
+    uint16 *rxframesize,
+    uint16 *rxframeoffset,
+    uint16 *rxframeno,
+    int *psize,
+    void *p);
 
 #ifdef __cplusplus
 }
index e2170d3971a49ed2450d4d7fbc2f2c7fd5d04f7e..6348b08af8e3b8aebbfdd7a6ed6486591c95d937 100644 (file)
@@ -13,8 +13,7 @@
 #define _ec_foe_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 int ecx_FOEdefinehook(ecx_contextt *context, void *hook);
index b5f6c3157b2413c5a38ca201a9ffdb608bf58dbe..af3a92cd905443562d4e641de8c91e05962f4f4d 100644 (file)
 #ifndef _ec_main_
 #define _ec_main_
 
-
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 /** max. entries in EtherCAT error list */
-#define EC_MAXELIST       64
+#define EC_MAXELIST           64
 /** max. length of readable name in slavelist and Object Description List */
-#define EC_MAXNAME        40
+#define EC_MAXNAME            40
 /** max. number of slaves in array */
-#define EC_MAXSLAVE       200
+#define EC_MAXSLAVE           200
 /** max. number of groups */
-#define EC_MAXGROUP       2
+#define EC_MAXGROUP           2
 /** max. number of IO segments per group */
-#define EC_MAXIOSEGMENTS  64
+#define EC_MAXIOSEGMENTS      64
 /** max. mailbox size */
-#define EC_MAXMBX         1486
+#define EC_MAXMBX             1486
 /** max. eeprom PDO entries */
-#define EC_MAXEEPDO       0x200
+#define EC_MAXEEPDO           0x200
 /** max. SM used */
-#define EC_MAXSM          8
+#define EC_MAXSM              8
 /** max. FMMU used */
-#define EC_MAXFMMU        4
+#define EC_MAXFMMU            4
 /** max. Adapter */
-#define EC_MAXLEN_ADAPTERNAME    128
+#define EC_MAXLEN_ADAPTERNAME 128
 /** define maximum number of concurrent threads in mapping */
 #define EC_MAX_MAPT           1
 
 typedef struct ec_adapter ec_adaptert;
 struct ec_adapter
 {
-   char   name[EC_MAXLEN_ADAPTERNAME];
-   char   desc[EC_MAXLEN_ADAPTERNAME];
+   char name[EC_MAXLEN_ADAPTERNAME];
+   char desc[EC_MAXLEN_ADAPTERNAME];
    ec_adaptert *next;
 };
 
@@ -53,65 +51,65 @@ struct ec_adapter
 PACKED_BEGIN
 typedef struct PACKED ec_fmmu
 {
-   uint32  LogStart;
-   uint16  LogLength;
-   uint8   LogStartbit;
-   uint8   LogEndbit;
-   uint16  PhysStart;
-   uint8   PhysStartBit;
-   uint8   FMMUtype;
-   uint8   FMMUactive;
-   uint8   unused1;
-   uint16  unused2;
-}  ec_fmmut;
+   uint32 LogStart;
+   uint16 LogLength;
+   uint8 LogStartbit;
+   uint8 LogEndbit;
+   uint16 PhysStart;
+   uint8 PhysStartBit;
+   uint8 FMMUtype;
+   uint8 FMMUactive;
+   uint8 unused1;
+   uint16 unused2;
+} ec_fmmut;
 PACKED_END
 
 /** record for sync manager */
 PACKED_BEGIN
 typedef struct PACKED ec_sm
 {
-   uint16  StartAddr;
-   uint16  SMlength;
-   uint32  SMflags;
+   uint16 StartAddr;
+   uint16 SMlength;
+   uint32 SMflags;
 } ec_smt;
 PACKED_END
 
 PACKED_BEGIN
 typedef struct PACKED ec_state_status
 {
-   uint16  State;
-   uint16  Unused;
-   uint16  ALstatuscode;
+   uint16 State;
+   uint16 Unused;
+   uint16 ALstatuscode;
 } ec_state_status;
 PACKED_END
 
 /** mailbox buffer array */
 typedef uint8 ec_mbxbuft[EC_MAXMBX + 1];
 
-#define EC_MBXPOOLSIZE  32
-#define EC_MBXINENABLE  (uint8 *)1
+#define EC_MBXPOOLSIZE 32
+#define EC_MBXINENABLE (uint8 *)1
 
 typedef struct
 {
-   int         listhead, listtail, listcount;
-   int         mbxemptylist[EC_MBXPOOLSIZE];
+   int listhead, listtail, listcount;
+   int mbxemptylist[EC_MBXPOOLSIZE];
    osal_mutext *mbxmutex;
-   ec_mbxbuft  mbx[EC_MBXPOOLSIZE];
+   ec_mbxbuft mbx[EC_MBXPOOLSIZE];
 } ec_mbxpoolt;
 
-#define EC_MBXQUEUESTATE_NONE       0
-#define EC_MBXQUEUESTATE_REQ        1
-#define EC_MBXQUEUESTATE_FAIL       2
-#define EC_MBXQUEUESTATE_DONE       3
+#define EC_MBXQUEUESTATE_NONE 0
+#define EC_MBXQUEUESTATE_REQ  1
+#define EC_MBXQUEUESTATE_FAIL 2
+#define EC_MBXQUEUESTATE_DONE 3
 
 typedef struct
 {
-   int         listhead, listtail, listcount;
-   ec_mbxbuft  *mbx[EC_MBXPOOLSIZE];
-   int         mbxstate[EC_MBXPOOLSIZE];
-   int         mbxremove[EC_MBXPOOLSIZE];
-   int         mbxticket[EC_MBXPOOLSIZE];
-   uint16      mbxslave[EC_MBXPOOLSIZE];
+   int listhead, listtail, listcount;
+   ec_mbxbuft *mbx[EC_MBXPOOLSIZE];
+   int mbxstate[EC_MBXPOOLSIZE];
+   int mbxremove[EC_MBXPOOLSIZE];
+   int mbxticket[EC_MBXPOOLSIZE];
+   uint16 mbxslave[EC_MBXPOOLSIZE];
    osal_mutext *mbxmutex;
 } ec_mbxqueuet;
 
@@ -133,280 +131,280 @@ typedef struct
 
 typedef struct ecx_context ecx_contextt;
 
-#define ECT_MBXH_NONE         0
-#define ECT_MBXH_CYCLIC       1
-#define ECT_MBXH_LOST         2
+#define ECT_MBXH_NONE   0
+#define ECT_MBXH_CYCLIC 1
+#define ECT_MBXH_LOST   2
 
 /** for list of ethercat slaves detected */
 typedef struct ec_slave
 {
    /** state of slave */
-   uint16           state;
+   uint16 state;
    /** AL status code */
-   uint16           ALstatuscode;
+   uint16 ALstatuscode;
    /** Configured address */
-   uint16           configadr;
+   uint16 configadr;
    /** Alias address */
-   uint16           aliasadr;
+   uint16 aliasadr;
    /** Manufacturer from EEprom */
-   uint32           eep_man;
+   uint32 eep_man;
    /** ID from EEprom */
-   uint32           eep_id;
+   uint32 eep_id;
    /** revision from EEprom */
-   uint32           eep_rev;
+   uint32 eep_rev;
    /** serial number from EEprom */
-   uint32           eep_ser;
+   uint32 eep_ser;
    /** Interface type */
-   uint16           Itype;
+   uint16 Itype;
    /** Device type */
-   uint16           Dtype;
+   uint16 Dtype;
    /** output bits */
-   uint16           Obits;
+   uint16 Obits;
    /** output bytes, if Obits < 8 then Obytes = 0 */
-   uint32           Obytes;
+   uint32 Obytes;
    /** output pointer in IOmap buffer */
-   uint8            *outputs;
+   uint8 *outputs;
    /** output offset in IOmap buffer */
-   uint32           Ooffset;
+   uint32 Ooffset;
    /** startbit in first output byte */
-   uint8            Ostartbit;
+   uint8 Ostartbit;
    /** input bits */
-   uint16           Ibits;
+   uint16 Ibits;
    /** input bytes, if Ibits < 8 then Ibytes = 0 */
-   uint32           Ibytes;
+   uint32 Ibytes;
    /** input pointer in IOmap buffer */
-   uint8            *inputs;
+   uint8 *inputs;
    /** input offset in IOmap buffer */
-   uint32           Ioffset;
+   uint32 Ioffset;
    /** startbit in first input byte */
-   uint8            Istartbit;
+   uint8 Istartbit;
    /** SM structure */
-   ec_smt           SM[EC_MAXSM];
+   ec_smt SM[EC_MAXSM];
    /** SM type 0=unused 1=MbxWr 2=MbxRd 3=Outputs 4=Inputs */
-   uint8            SMtype[EC_MAXSM];
+   uint8 SMtype[EC_MAXSM];
    /** FMMU structure */
-   ec_fmmut         FMMU[EC_MAXFMMU];
+   ec_fmmut FMMU[EC_MAXFMMU];
    /** FMMU0 function 0=unused 1=outputs 2=inputs 3=SM status*/
-   uint8            FMMU0func;
+   uint8 FMMU0func;
    /** FMMU1 function */
-   uint8            FMMU1func;
+   uint8 FMMU1func;
    /** FMMU2 function */
-   uint8            FMMU2func;
+   uint8 FMMU2func;
    /** FMMU3 function */
-   uint8            FMMU3func;
+   uint8 FMMU3func;
    /** length of write mailbox in bytes, if no mailbox then 0 */
-   uint16           mbx_l;
+   uint16 mbx_l;
    /** mailbox write offset */
-   uint16           mbx_wo;
+   uint16 mbx_wo;
    /** length of read mailbox in bytes */
-   uint16           mbx_rl;
+   uint16 mbx_rl;
    /** mailbox read offset */
-   uint16           mbx_ro;
+   uint16 mbx_ro;
    /** mailbox supported protocols */
-   uint16           mbx_proto;
+   uint16 mbx_proto;
    /** Counter value of mailbox link layer protocol 1..7 */
-   uint8            mbx_cnt;
+   uint8 mbx_cnt;
    /** has DC capability */
-   boolean          hasdc;
+   boolean hasdc;
    /** Physical type; Ebus, EtherNet combinations */
-   uint8            ptype;
+   uint8 ptype;
    /** topology: 1 to 3 links */
-   uint8            topology;
+   uint8 topology;
    /** active ports bitmap : ....3210 , set if respective port is active **/
-   uint8            activeports;
+   uint8 activeports;
    /** consumed ports bitmap : ....3210, used for internal delay measurement **/
-   uint8            consumedports;
+   uint8 consumedports;
    /** slave number for parent, 0=master */
-   uint16           parent;
+   uint16 parent;
    /** port number on parent this slave is connected to **/
-   uint8            parentport;
+   uint8 parentport;
    /** port number on this slave the parent is connected to **/
-   uint8            entryport;
+   uint8 entryport;
    /** DC receivetimes on port A */
-   int32            DCrtA;
+   int32 DCrtA;
    /** DC receivetimes on port B */
-   int32            DCrtB;
+   int32 DCrtB;
    /** DC receivetimes on port C */
-   int32            DCrtC;
+   int32 DCrtC;
    /** DC receivetimes on port D */
-   int32            DCrtD;
+   int32 DCrtD;
    /** propagation delay */
-   int32            pdelay;
+   int32 pdelay;
    /** next DC slave */
-   uint16           DCnext;
+   uint16 DCnext;
    /** previous DC slave */
-   uint16           DCprevious;
+   uint16 DCprevious;
    /** DC cycle time in ns */
-   int32            DCcycle;
+   int32 DCcycle;
    /** DC shift from clock modulus boundary */
-   int32            DCshift;
+   int32 DCshift;
    /** DC sync activation, 0=off, 1=on */
    uint8 DCactive;
    /** link to SII config */
-   uint16           SIIindex;
+   uint16 SIIindex;
    /** 1 = 8 bytes per read, 0 = 4 bytes per read */
-   uint8            eep_8byte;
+   uint8 eep_8byte;
    /** 0 = eeprom to master , 1 = eeprom to PDI */
-   uint8            eep_pdi;
+   uint8 eep_pdi;
    /** CoE details */
-   uint8            CoEdetails;
+   uint8 CoEdetails;
    /** FoE details */
-   uint8            FoEdetails;
+   uint8 FoEdetails;
    /** EoE details */
-   uint8            EoEdetails;
+   uint8 EoEdetails;
    /** SoE details */
-   uint8            SoEdetails;
+   uint8 SoEdetails;
    /** E-bus current */
-   int16            Ebuscurrent;
+   int16 Ebuscurrent;
    /** if >0 block use of LRW in processdata */
-   uint8            blockLRW;
+   uint8 blockLRW;
    /** group */
-   uint8            group;
+   uint8 group;
    /** first unused FMMU */
-   uint8            FMMUunused;
+   uint8 FMMUunused;
    /** Boolean for tracking whether the slave is (not) responding, not used/set by the SOEM library */
-   boolean          islost;
+   boolean islost;
    /** registered configuration function PO->SO */
    int (*PO2SOconfig)(ecx_contextt *context, uint16 slave);
    /** mailbox handler state, 0 = no handler, 1 = cyclic task mbx handler, 2 = slave lost */
-   int              mbxhandlerstate;
+   int mbxhandlerstate;
    /** mailbox handler robust mailbox protocol state */
-   int              mbxrmpstate;
+   int mbxrmpstate;
    /** mailbox handler RMP extended mbx in state */
-   uint16           mbxinstateex;
+   uint16 mbxinstateex;
    /** pointer to CoE mailbox in buffer */
-   uint8            *coembxin;
+   uint8 *coembxin;
    /** CoE mailbox in flag, true = mailbox full */
-   boolean          coembxinfull;
+   boolean coembxinfull;
    /** CoE mailbox in overrun counter */
-   int              coembxoverrun;
+   int coembxoverrun;
    /** pointer to SoE mailbox in buffer */
-   uint8            *soembxin;
+   uint8 *soembxin;
    /** SoE mailbox in flag, true = mailbox full */
-   boolean          soembxinfull;
+   boolean soembxinfull;
    /** SoE mailbox in overrun counter */
-   int              soembxoverrun;
+   int soembxoverrun;
    /** pointer to FoE mailbox in buffer */
-   uint8            *foembxin;
+   uint8 *foembxin;
    /** FoE mailbox in flag, true = mailbox full */
-   boolean          foembxinfull;
+   boolean foembxinfull;
    /** FoE mailbox in overrun counter */
-   int              foembxoverrun;
+   int foembxoverrun;
    /** pointer to EoE mailbox in buffer */
-   uint8            *eoembxin;
+   uint8 *eoembxin;
    /** EoE mailbox in flag, true = mailbox full */
-   boolean          eoembxinfull;
+   boolean eoembxinfull;
    /** EoE mailbox in overrun counter */
-   int              eoembxoverrun;
+   int eoembxoverrun;
    /** pointer to VoE mailbox in buffer */
-   uint8            *voembxin;
+   uint8 *voembxin;
    /** VoE mailbox in flag, true = mailbox full */
-   boolean          voembxinfull;
+   boolean voembxinfull;
    /** VoE mailbox in overrun counter */
-   int              voembxoverrun;
+   int voembxoverrun;
    /** pointer to AoE mailbox in buffer */
-   uint8            *aoembxin;
+   uint8 *aoembxin;
    /** AoE mailbox in flag, true = mailbox full */
-   boolean          aoembxinfull;
+   boolean aoembxinfull;
    /** AoE mailbox in overrun counter */
-   int              aoembxoverrun;
+   int aoembxoverrun;
    /** pointer to out mailbox status register buffer */
-   uint8            *mbxstatus;
+   uint8 *mbxstatus;
    /** readable name */
-   char             name[EC_MAXNAME + 1];
+   char name[EC_MAXNAME + 1];
 } ec_slavet;
 
 /** for list of ethercat slave groups */
 typedef struct ec_group
 {
    /** logical start address for this group */
-   uint32           logstartaddr;
+   uint32 logstartaddr;
    /** output bytes, if Obits < 8 then Obytes = 0 */
-   uint32           Obytes;
+   uint32 Obytes;
    /** output pointer in IOmap buffer */
-   uint8            *outputs;
+   uint8 *outputs;
    /** input bytes, if Ibits < 8 then Ibytes = 0 */
-   uint32           Ibytes;
+   uint32 Ibytes;
    /** input pointer in IOmap buffer */
-   uint8            *inputs;
+   uint8 *inputs;
    /** has DC capabillity */
-   boolean          hasdc;
+   boolean hasdc;
    /** next DC slave */
-   uint16           DCnext;
+   uint16 DCnext;
    /** E-bus current */
-   int16            Ebuscurrent;
+   int16 Ebuscurrent;
    /** if >0 block use of LRW in processdata */
-   uint8            blockLRW;
+   uint8 blockLRW;
    /** IO segments used */
-   uint16           nsegments;
+   uint16 nsegments;
    /** 1st input segment */
-   uint16           Isegment;
+   uint16 Isegment;
    /** Offset in input segment */
-   uint16           Ioffset;
+   uint16 Ioffset;
    /** Expected workcounter outputs */
-   uint16           outputsWKC;
+   uint16 outputsWKC;
    /** Expected workcounter inputs */
-   uint16           inputsWKC;
+   uint16 inputsWKC;
    /** check slave states */
-   boolean          docheckstate;
+   boolean docheckstate;
    /** IO segmentation list. Datagrams must not break SM in two. */
-   uint32           IOsegment[EC_MAXIOSEGMENTS];
+   uint32 IOsegment[EC_MAXIOSEGMENTS];
    /** pointer to out mailbox status register buffer */
-   uint8            *mbxstatus;
+   uint8 *mbxstatus;
    /** mailbox status register buffer length */
-   int32            mbxstatuslength;
+   int32 mbxstatuslength;
    /** mailbox status lookup table */
-   uint16           mbxstatuslookup[EC_MAXSLAVE];
+   uint16 mbxstatuslookup[EC_MAXSLAVE];
    /** mailbox last handled in mxbhandler */
-   uint16           lastmbxpos;
+   uint16 lastmbxpos;
    /** mailbox  transmit queue struct */
-   ec_mbxqueuet     mbxtxqueue;
+   ec_mbxqueuet mbxtxqueue;
 } ec_groupt;
 
 /** SII FMMU structure */
 typedef struct ec_eepromFMMU
 {
-   uint16  Startpos;
-   uint8   nFMMU;
-   uint8   FMMU0;
-   uint8   FMMU1;
-   uint8   FMMU2;
-   uint8   FMMU3;
+   uint16 Startpos;
+   uint8 nFMMU;
+   uint8 FMMU0;
+   uint8 FMMU1;
+   uint8 FMMU2;
+   uint8 FMMU3;
 } ec_eepromFMMUt;
 
 /** SII SM structure */
 typedef struct ec_eepromSM
 {
-   uint16  Startpos;
-   uint8   nSM;
-   uint16  PhStart;
-   uint16  Plength;
-   uint8   Creg;
-   uint8   Sreg;       /* don't care */
-   uint8   Activate;
-   uint8   PDIctrl;      /* don't care */
+   uint16 Startpos;
+   uint8 nSM;
+   uint16 PhStart;
+   uint16 Plength;
+   uint8 Creg;
+   uint8 Sreg; /* don't care */
+   uint8 Activate;
+   uint8 PDIctrl; /* don't care */
 } ec_eepromSMt;
 
 /** record to store rxPDO and txPDO table from eeprom */
 typedef struct ec_eepromPDO
 {
-   uint16  Startpos;
-   uint16  Length;
-   uint16  nPDO;
-   uint16  Index[EC_MAXEEPDO];
-   uint16  SyncM[EC_MAXEEPDO];
-   uint16  BitSize[EC_MAXEEPDO];
-   uint16  SMbitsize[EC_MAXSM];
+   uint16 Startpos;
+   uint16 Length;
+   uint16 nPDO;
+   uint16 Index[EC_MAXEEPDO];
+   uint16 SyncM[EC_MAXEEPDO];
+   uint16 BitSize[EC_MAXEEPDO];
+   uint16 SMbitsize[EC_MAXSM];
 } ec_eepromPDOt;
 
 /** standard ethercat mailbox header */
 PACKED_BEGIN
 typedef struct PACKED ec_mbxheader
 {
-   uint16  length;
-   uint16  address;
-   uint8   priority;
-   uint8   mbxtype;
+   uint16 length;
+   uint16 address;
+   uint8 priority;
+   uint8 mbxtype;
 } ec_mbxheadert;
 PACKED_END
 
@@ -414,29 +412,29 @@ PACKED_END
 PACKED_BEGIN
 typedef struct PACKED ec_alstatus
 {
-   uint16  alstatus;
-   uint16  unused;
-   uint16  alstatuscode;
+   uint16 alstatus;
+   uint16 unused;
+   uint16 alstatuscode;
 } ec_alstatust;
 PACKED_END
 
 /** stack structure to store segmented LRD/LWR/LRW constructs */
 typedef struct ec_idxstack
 {
-   uint8   pushed;
-   uint8   pulled;
-   uint8   idx[EC_MAXBUF];
-   void    *data[EC_MAXBUF];
-   uint16  length[EC_MAXBUF];
-   uint16  dcoffset[EC_MAXBUF];
-   uint8   type[EC_MAXBUF];
+   uint8 pushed;
+   uint8 pulled;
+   uint8 idx[EC_MAXBUF];
+   void *data[EC_MAXBUF];
+   uint16 length[EC_MAXBUF];
+   uint16 dcoffset[EC_MAXBUF];
+   uint8 type[EC_MAXBUF];
 } ec_idxstackT;
 
 /** ringbuf for error storage */
 typedef struct ec_ering
 {
-   int16     head;
-   int16     tail;
+   int16 head;
+   int16 tail;
    ec_errort Error[EC_MAXELIST + 1];
 } ec_eringt;
 
@@ -444,9 +442,9 @@ typedef struct ec_ering
 PACKED_BEGIN
 typedef struct PACKED ec_SMcommtype
 {
-   uint8   n;
-   uint8   nu1;
-   uint8   SMtype[EC_MAXSM];
+   uint8 n;
+   uint8 nu1;
+   uint8 SMtype[EC_MAXSM];
 } ec_SMcommtypet;
 PACKED_END
 
@@ -454,9 +452,9 @@ PACKED_END
 PACKED_BEGIN
 typedef struct PACKED ec_PDOassign
 {
-   uint8   n;
-   uint8   nu1;
-   uint16  index[256];
+   uint8 n;
+   uint8 nu1;
+   uint16 index[256];
 } ec_PDOassignt;
 PACKED_END
 
@@ -464,9 +462,9 @@ PACKED_END
 PACKED_BEGIN
 typedef struct PACKED ec_PDOdesc
 {
-   uint8   n;
-   uint8   nu1;
-   uint32  PDO[256];
+   uint8 n;
+   uint8 nu1;
+   uint32 PDO[256];
 } ec_PDOdesct;
 PACKED_END
 
@@ -474,77 +472,77 @@ PACKED_END
 struct ecx_context
 {
    /** port reference, may include red_port */
-   ecx_portt      *port;
+   ecx_portt *port;
    /** slavelist reference */
-   ec_slavet      *slavelist;
+   ec_slavet *slavelist;
    /** number of slaves found in configuration */
-   int            *slavecount;
+   int *slavecount;
    /** maximum number of slaves allowed in slavelist */
-   int            maxslave;
+   int maxslave;
    /** grouplist reference */
-   ec_groupt      *grouplist;
+   ec_groupt *grouplist;
    /** maximum number of groups allowed in grouplist */
-   int            maxgroup;
+   int maxgroup;
    /** internal, reference to eeprom cache buffer */
-   uint8          *esibuf;
+   uint8 *esibuf;
    /** internal, reference to eeprom cache map */
-   uint32         *esimap;
+   uint32 *esimap;
    /** internal, current slave for eeprom cache */
-   uint16         esislave;
+   uint16 esislave;
    /** internal, reference to error list */
-   ec_eringt      *elist;
+   ec_eringt *elist;
    /** internal, reference to processdata stack buffer info */
-   ec_idxstackT   *idxstack;
+   ec_idxstackT *idxstack;
    /** reference to ecaterror state */
-   boolean        *ecaterror;
+   boolean *ecaterror;
    /** reference to last DC time from slaves */
-   int64          *DCtime;
+   int64 *DCtime;
    /** internal, SM buffer */
    ec_SMcommtypet *SMcommtype;
    /** internal, PDO assign list */
-   ec_PDOassignt  *PDOassign;
+   ec_PDOassignt *PDOassign;
    /** internal, PDO description list */
-   ec_PDOdesct    *PDOdesc;
+   ec_PDOdesct *PDOdesc;
    /** internal, SM list from eeprom */
-   ec_eepromSMt   *eepSM;
+   ec_eepromSMt *eepSM;
    /** internal, FMMU list from eeprom */
    ec_eepromFMMUt *eepFMMU;
    /** internal, mailbox pool */
-   ec_mbxpoolt    *mbxpool;
+   ec_mbxpoolt *mbxpool;
    /** registered FoE hook */
-   int            (*FOEhook)(uint16 slave, int packetnumber, int datasize);
+   int (*FOEhook)(uint16 slave, int packetnumber, int datasize);
    /** registered EoE hook */
-   int            (*EOEhook)(ecx_contextt * context, uint16 slave, void * eoembx);
+   int (*EOEhook)(ecx_contextt *context, uint16 slave, void *eoembx);
    /** flag to control legacy automatic state change or manual state change */
-   int            manualstatechange;
+   int manualstatechange;
    /** opaque pointer to application userdata, never used by SOEM. */
-   void           *userdata;
+   void *userdata;
 };
 
-ec_adaptert * ec_find_adapters(void);
-void ec_free_adapters(ec_adaptert * adapter);
+ec_adaptert *ec_find_adapters(void);
+void ec_free_adapters(ec_adaptert *adapter);
 uint8 ec_nextmbxcnt(uint8 cnt);
 void ec_clearmbx(ec_mbxbuft *Mbx);
 void ecx_pusherror(ecx_contextt *context, const ec_errort *Ec);
 boolean ecx_poperror(ecx_contextt *context, ec_errort *Ec);
 boolean ecx_iserror(ecx_contextt *context);
 void ecx_packeterror(ecx_contextt *context, uint16 Slave, uint16 Index, uint8 SubIdx, uint16 ErrorCode);
-int ecx_init(ecx_contextt *context, const char * ifname);
+int ecx_init(ecx_contextt *context, const char *ifname);
 int ecx_init_redundant(ecx_contextt *context, ecx_redportt *redport, const char *ifname, char *if2name);
 void ecx_close(ecx_contextt *context);
 uint8 ecx_siigetbyte(ecx_contextt *context, uint16 slave, uint16 address);
 int16 ecx_siifind(ecx_contextt *context, uint16 slave, uint16 cat);
 void ecx_siistring(ecx_contextt *context, char *str, uint16 slave, uint16 Sn);
-uint16 ecx_siiFMMU(ecx_contextt *context, uint16 slave, ec_eepromFMMUtFMMU);
-uint16 ecx_siiSM(ecx_contextt *context, uint16 slave, ec_eepromSMtSM);
-uint16 ecx_siiSMnext(ecx_contextt *context, uint16 slave, ec_eepromSMtSM, uint16 n);
-uint32 ecx_siiPDO(ecx_contextt *context, uint16 slave, ec_eepromPDOtPDO, uint8 t);
+uint16 ecx_siiFMMU(ecx_contextt *context, uint16 slave, ec_eepromFMMUt *FMMU);
+uint16 ecx_siiSM(ecx_contextt *context, uint16 slave, ec_eepromSMt *SM);
+uint16 ecx_siiSMnext(ecx_contextt *context, uint16 slave, ec_eepromSMt *SM, uint16 n);
+uint32 ecx_siiPDO(ecx_contextt *context, uint16 slave, ec_eepromPDOt *PDO, uint8 t);
 int ecx_readstate(ecx_contextt *context);
 int ecx_writestate(ecx_contextt *context, uint16 slave);
 uint16 ecx_statecheck(ecx_contextt *context, uint16 slave, uint16 reqstate, int timeout);
 int ecx_mbxhandler(ecx_contextt *context, uint8 group, int limit);
 int ecx_mbxempty(ecx_contextt *context, uint16 slave, int timeout);
-int ecx_mbxsend(ecx_contextt *context, uint16 slave,ec_mbxbuft *mbx, int timeout);
+int ecx_mbxsend(ecx_contextt *context, uint16 slave, ec_mbxbuft *mbx, int timeout);
 int ecx_mbxreceive(ecx_contextt *context, uint16 slave, ec_mbxbuft **mbx, int timeout);
 void ecx_esidump(ecx_contextt *context, uint16 slave, uint8 *esibuf);
 uint32 ecx_readeeprom(ecx_contextt *context, uint16 slave, uint16 eeproma, int timeout);
index 669052327e6fc129857a2dfeb72b08a05a139640..920f3dac7d321cfbfe3dbf360ac7ed338cff1e99 100644 (file)
 #define _ec_print_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
-const char* ec_sdoerror2string( uint32 sdoerrorcode);
-char* ec_ALstatuscode2string( uint16 ALstatuscode);
-char* ec_soeerror2string( uint16 errorcode);
-char* ec_mbxerror2string( uint16 errorcode);
-charecx_err2string(const ec_errort Ec);
-charecx_elist2string(ecx_contextt *context);
+const char *ec_sdoerror2string(uint32 sdoerrorcode);
+char *ec_ALstatuscode2string(uint16 ALstatuscode);
+char *ec_soeerror2string(uint16 errorcode);
+char *ec_mbxerror2string(uint16 errorcode);
+char *ecx_err2string(const ec_errort Ec);
+char *ecx_elist2string(ecx_contextt *context);
 
 #ifdef __cplusplus
 }
index 4a99bccd3a8654c2b318f51a24feac0d4e431a1a..080885916cbc6d1de9f503a3168da03f5f05cff3 100644 (file)
 #define _ec_soe_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
-#define EC_SOE_DATASTATE_B   0x01
-#define EC_SOE_NAME_B        0x02
-#define EC_SOE_ATTRIBUTE_B   0x04
-#define EC_SOE_UNIT_B        0x08
-#define EC_SOE_MIN_B         0x10
-#define EC_SOE_MAX_B         0x20
-#define EC_SOE_VALUE_B       0x40
-#define EC_SOE_DEFAULT_B     0x80
+#define EC_SOE_DATASTATE_B 0x01
+#define EC_SOE_NAME_B      0x02
+#define EC_SOE_ATTRIBUTE_B 0x04
+#define EC_SOE_UNIT_B      0x08
+#define EC_SOE_MIN_B       0x10
+#define EC_SOE_MAX_B       0x20
+#define EC_SOE_VALUE_B     0x40
+#define EC_SOE_DEFAULT_B   0x80
 
-#define EC_SOE_MAXNAME       60
-#define EC_SOE_MAXMAPPING    64
+#define EC_SOE_MAXNAME     60
+#define EC_SOE_MAXMAPPING  64
 
-#define EC_IDN_MDTCONFIG     24
-#define EC_IDN_ATCONFIG      16
+#define EC_IDN_MDTCONFIG   24
+#define EC_IDN_ATCONFIG    16
 
 /** SoE name structure */
 PACKED_BEGIN
 typedef struct PACKED
 {
    /** current length in bytes of list */
-   uint16     currentlength;
+   uint16 currentlength;
    /** maximum length in bytes of list */
-   uint16     maxlength;
-   char       name[EC_SOE_MAXNAME];
+   uint16 maxlength;
+   char name[EC_SOE_MAXNAME];
 } ec_SoEnamet;
 PACKED_END
 
@@ -49,15 +48,15 @@ PACKED_BEGIN
 typedef struct PACKED
 {
    /** current length in bytes of list */
-   uint16     currentlength;
+   uint16 currentlength;
    /** maximum length in bytes of list */
-   uint16     maxlength;
+   uint16 maxlength;
    union
    {
-      uint8   byte[8];
-      uint16  word[4];
-      uint32  dword[2];
-      uint64  lword[1];
+      uint8 byte[8];
+      uint16 word[4];
+      uint32 dword[2];
+      uint64 lword[1];
    };
 } ec_SoElistt;
 PACKED_END
@@ -67,50 +66,50 @@ PACKED_BEGIN
 typedef struct PACKED
 {
    /** current length in bytes of list */
-   uint16     currentlength;
+   uint16 currentlength;
    /** maximum length in bytes of list */
-   uint16     maxlength;
-   uint16     idn[EC_SOE_MAXMAPPING];
+   uint16 maxlength;
+   uint16 idn[EC_SOE_MAXMAPPING];
 } ec_SoEmappingt;
 PACKED_END
 
-#define EC_SOE_LENGTH_1         0x00
-#define EC_SOE_LENGTH_2         0x01
-#define EC_SOE_LENGTH_4         0x02
-#define EC_SOE_LENGTH_8         0x03
-#define EC_SOE_TYPE_BINARY      0x00
-#define EC_SOE_TYPE_UINT        0x01
-#define EC_SOE_TYPE_INT         0x02
-#define EC_SOE_TYPE_HEX         0x03
-#define EC_SOE_TYPE_STRING      0x04
-#define EC_SOE_TYPE_IDN         0x05
-#define EC_SOE_TYPE_FLOAT       0x06
-#define EC_SOE_TYPE_PARAMETER   0x07
+#define EC_SOE_LENGTH_1       0x00
+#define EC_SOE_LENGTH_2       0x01
+#define EC_SOE_LENGTH_4       0x02
+#define EC_SOE_LENGTH_8       0x03
+#define EC_SOE_TYPE_BINARY    0x00
+#define EC_SOE_TYPE_UINT      0x01
+#define EC_SOE_TYPE_INT       0x02
+#define EC_SOE_TYPE_HEX       0x03
+#define EC_SOE_TYPE_STRING    0x04
+#define EC_SOE_TYPE_IDN       0x05
+#define EC_SOE_TYPE_FLOAT     0x06
+#define EC_SOE_TYPE_PARAMETER 0x07
 
 /** SoE attribute structure */
 PACKED_BEGIN
 typedef struct PACKED
 {
    /** evaluation factor for display purposes */
-   uint32     evafactor   :16;
+   uint32 evafactor : 16;
    /** length of IDN element(s) */
-   uint32     length      :2;
+   uint32 length : 2;
    /** IDN is list */
-   uint32     list        :1;
+   uint32 list : 1;
    /** IDN is command */
-   uint32     command     :1;
+   uint32 command : 1;
    /** datatype */
-   uint32     datatype    :3;
-   uint32     reserved1   :1;
+   uint32 datatype : 3;
+   uint32 reserved1 : 1;
    /** decimals to display if float datatype */
-   uint32     decimals    :4;
+   uint32 decimals : 4;
    /** write protected in pre-op */
-   uint32     wppreop     :1;
+   uint32 wppreop : 1;
    /** write protected in safe-op */
-   uint32     wpsafeop    :1;
+   uint32 wpsafeop : 1;
    /** write protected in op */
-   uint32     wpop        :1;
-   uint32     reserved2   :1;
+   uint32 wpop : 1;
+   uint32 reserved2 : 1;
 } ec_SoEattributet;
 PACKED_END
 
index 31efc266dfde40db3bf83abcc529ec0f301329bf..1c4eafa493f93f127631029681d15099e8b96a1f 100644 (file)
 #define _EC_TYPE_H
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 #include "osal.h"
 
 /** Define little endian target by default if no endian is set */
 #if !defined(EC_LITTLE_ENDIAN) && !defined(EC_BIG_ENDIAN)
-#   define EC_LITTLE_ENDIAN
+#define EC_LITTLE_ENDIAN
 #endif
 
 /** return value no frame returned */
@@ -42,40 +41,40 @@ extern "C"
 /** return value request timeout */
 #define EC_TIMEOUT            -5
 /** maximum EtherCAT frame length in bytes */
-#define EC_MAXECATFRAME    1518
+#define EC_MAXECATFRAME       1518
 /** maximum EtherCAT LRW frame length in bytes */
 /* MTU - Ethernet header - length - datagram header - WCK - FCS */
-#define EC_MAXLRWDATA      (EC_MAXECATFRAME - 14 - 2 - 10 - 2 - 4)
+#define EC_MAXLRWDATA         (EC_MAXECATFRAME - 14 - 2 - 10 - 2 - 4)
 /** size of DC datagram used in first LRW frame */
-#define EC_FIRSTDCDATAGRAM 20
+#define EC_FIRSTDCDATAGRAM    20
 /** standard frame buffer size in bytes */
-#define EC_BUFSIZE         EC_MAXECATFRAME
+#define EC_BUFSIZE            EC_MAXECATFRAME
 /** datagram type EtherCAT */
-#define EC_ECATTYPE        0x1000
+#define EC_ECATTYPE           0x1000
 /** number of frame buffers per channel (tx, rx1 rx2) */
-#define EC_MAXBUF          16
+#define EC_MAXBUF             16
 /** timeout value in us for tx frame to return to rx */
-#define EC_TIMEOUTRET      2000
+#define EC_TIMEOUTRET         2000
 /** timeout value in us for safe data transfer, max. triple retry */
-#define EC_TIMEOUTRET3     (EC_TIMEOUTRET * 3)
+#define EC_TIMEOUTRET3        (EC_TIMEOUTRET * 3)
 /** timeout value in us for return "safe" variant (f.e. wireless) */
-#define EC_TIMEOUTSAFE     20000
+#define EC_TIMEOUTSAFE        20000
 /** timeout value in us for EEPROM access */
-#define EC_TIMEOUTEEP      20000
+#define EC_TIMEOUTEEP         20000
 /** timeout value in us for tx mailbox cycle */
-#define EC_TIMEOUTTXM      20000
+#define EC_TIMEOUTTXM         20000
 /** timeout value in us for rx mailbox cycle */
-#define EC_TIMEOUTRXM      700000
+#define EC_TIMEOUTRXM         700000
 /** timeout value in us for check statechange */
-#define EC_TIMEOUTSTATE    2000000
+#define EC_TIMEOUTSTATE       2000000
 /** size of EEPROM bitmap cache */
-#define EC_MAXEEPBITMAP    128
+#define EC_MAXEEPBITMAP       128
 /** size of EEPROM cache buffer */
-#define EC_MAXEEPBUF       EC_MAXEEPBITMAP << 5
+#define EC_MAXEEPBUF          EC_MAXEEPBITMAP << 5
 /** default number of retries if wkc <= 0 */
-#define EC_DEFAULTRETRIES  3
+#define EC_DEFAULTRETRIES     3
 /** default group size in 2^x */
-#define EC_LOGGROUPOFFSET 16
+#define EC_LOGGROUPOFFSET     16
 
 /** definition for frame buffers */
 typedef uint8 ec_bufT[EC_BUFSIZE];
@@ -85,54 +84,54 @@ PACKED_BEGIN
 typedef struct PACKED
 {
    /** destination MAC */
-   uint16  da0,da1,da2;
+   uint16 da0, da1, da2;
    /** source MAC */
-   uint16  sa0,sa1,sa2;
+   uint16 sa0, sa1, sa2;
    /** ethernet type */
-   uint16  etype;
+   uint16 etype;
 } ec_etherheadert;
 PACKED_END
 
 /** ethernet header size */
-#define ETH_HEADERSIZE      sizeof(ec_etherheadert)
+#define ETH_HEADERSIZE sizeof(ec_etherheadert)
 
 /** EtherCAT datagram header definition */
 PACKED_BEGIN
 typedef struct PACKED
 {
    /** length of EtherCAT datagram */
-   uint16  elength;
+   uint16 elength;
    /** EtherCAT command, see ec_cmdtype */
-   uint8   command;
+   uint8 command;
    /** index, used in SOEM for Tx to Rx recombination */
-   uint8   index;
+   uint8 index;
    /** ADP */
-   uint16  ADP;
+   uint16 ADP;
    /** ADO */
-   uint16  ADO;
+   uint16 ADO;
    /** length of data portion in datagram */
-   uint16  dlength;
+   uint16 dlength;
    /** interrupt, currently unused */
-   uint16  irpt;
+   uint16 irpt;
 } ec_comt;
 PACKED_END
 
 /** EtherCAT header size */
-#define EC_HEADERSIZE       sizeof(ec_comt)
+#define EC_HEADERSIZE      sizeof(ec_comt)
 /** size of ec_comt.elength item in EtherCAT header */
-#define EC_ELENGTHSIZE      sizeof(uint16)
+#define EC_ELENGTHSIZE     sizeof(uint16)
 /** offset position of command in EtherCAT header */
-#define EC_CMDOFFSET        EC_ELENGTHSIZE
+#define EC_CMDOFFSET       EC_ELENGTHSIZE
 /** size of workcounter item in EtherCAT datagram */
-#define EC_WKCSIZE          sizeof(uint16)
+#define EC_WKCSIZE         sizeof(uint16)
 /** definition of datagram follows bit in ec_comt.dlength */
-#define EC_DATAGRAMFOLLOWS  (1 << 15)
+#define EC_DATAGRAMFOLLOWS (1 << 15)
 
 /** Possible error codes returned. */
 typedef enum
 {
    /** No error */
-   EC_ERR_OK         = 0,
+   EC_ERR_OK = 0,
    /** Library already initialized. */
    EC_ERR_ALREADY_INITIALIZED,
    /** Library not initialized. */
@@ -149,74 +148,74 @@ typedef enum
 typedef enum
 {
    /** No valid state. */
-   EC_STATE_NONE           = 0x00,
+   EC_STATE_NONE = 0x00,
    /** Init state*/
-   EC_STATE_INIT           = 0x01,
+   EC_STATE_INIT = 0x01,
    /** Pre-operational. */
-   EC_STATE_PRE_OP         = 0x02,
+   EC_STATE_PRE_OP = 0x02,
    /** Boot state*/
-   EC_STATE_BOOT           = 0x03,
+   EC_STATE_BOOT = 0x03,
    /** Safe-operational. */
-   EC_STATE_SAFE_OP        = 0x04,
+   EC_STATE_SAFE_OP = 0x04,
    /** Operational */
-   EC_STATE_OPERATIONAL    = 0x08,
+   EC_STATE_OPERATIONAL = 0x08,
    /** Error or ACK error */
-   EC_STATE_ACK            = 0x10,
-   EC_STATE_ERROR          = 0x10
+   EC_STATE_ACK = 0x10,
+   EC_STATE_ERROR = 0x10
 } ec_state;
 
 /** Possible buffer states */
 typedef enum
 {
    /** Empty */
-   EC_BUF_EMPTY        = 0x00,
+   EC_BUF_EMPTY = 0x00,
    /** Allocated, but not filled */
-   EC_BUF_ALLOC        = 0x01,
+   EC_BUF_ALLOC = 0x01,
    /** Transmitted */
-   EC_BUF_TX           = 0x02,
+   EC_BUF_TX = 0x02,
    /** Received, but not consumed */
-   EC_BUF_RCVD         = 0x03,
+   EC_BUF_RCVD = 0x03,
    /** Cycle completed */
-   EC_BUF_COMPLETE     = 0x04
+   EC_BUF_COMPLETE = 0x04
 } ec_bufstate;
 
 /** Ethercat data types */
 typedef enum
 {
-   ECT_BOOLEAN         = 0x0001,
-   ECT_INTEGER8        = 0x0002,
-   ECT_INTEGER16       = 0x0003,
-   ECT_INTEGER32       = 0x0004,
-   ECT_UNSIGNED8       = 0x0005,
-   ECT_UNSIGNED16      = 0x0006,
-   ECT_UNSIGNED32      = 0x0007,
-   ECT_REAL32          = 0x0008,
-   ECT_VISIBLE_STRING  = 0x0009,
-   ECT_OCTET_STRING    = 0x000A,
-   ECT_UNICODE_STRING  = 0x000B,
-   ECT_TIME_OF_DAY     = 0x000C,
+   ECT_BOOLEAN = 0x0001,
+   ECT_INTEGER8 = 0x0002,
+   ECT_INTEGER16 = 0x0003,
+   ECT_INTEGER32 = 0x0004,
+   ECT_UNSIGNED8 = 0x0005,
+   ECT_UNSIGNED16 = 0x0006,
+   ECT_UNSIGNED32 = 0x0007,
+   ECT_REAL32 = 0x0008,
+   ECT_VISIBLE_STRING = 0x0009,
+   ECT_OCTET_STRING = 0x000A,
+   ECT_UNICODE_STRING = 0x000B,
+   ECT_TIME_OF_DAY = 0x000C,
    ECT_TIME_DIFFERENCE = 0x000D,
-   ECT_DOMAIN          = 0x000F,
-   ECT_INTEGER24       = 0x0010,
-   ECT_REAL64          = 0x0011,
-   ECT_INTEGER64       = 0x0015,
-   ECT_UNSIGNED24      = 0x0016,
-   ECT_UNSIGNED64      = 0x001B,
-   ECT_BIT1            = 0x0030,
-   ECT_BIT2            = 0x0031,
-   ECT_BIT3            = 0x0032,
-   ECT_BIT4            = 0x0033,
-   ECT_BIT5            = 0x0034,
-   ECT_BIT6            = 0x0035,
-   ECT_BIT7            = 0x0036,
-   ECT_BIT8            = 0x0037
+   ECT_DOMAIN = 0x000F,
+   ECT_INTEGER24 = 0x0010,
+   ECT_REAL64 = 0x0011,
+   ECT_INTEGER64 = 0x0015,
+   ECT_UNSIGNED24 = 0x0016,
+   ECT_UNSIGNED64 = 0x001B,
+   ECT_BIT1 = 0x0030,
+   ECT_BIT2 = 0x0031,
+   ECT_BIT3 = 0x0032,
+   ECT_BIT4 = 0x0033,
+   ECT_BIT5 = 0x0034,
+   ECT_BIT6 = 0x0035,
+   ECT_BIT7 = 0x0036,
+   ECT_BIT8 = 0x0037
 } ec_datatype;
 
 /** Ethercat command types */
 typedef enum
 {
    /** No operation */
-   EC_CMD_NOP          = 0x00,
+   EC_CMD_NOP = 0x00,
    /** Auto Increment Read */
    EC_CMD_APRD,
    /** Auto Increment Write */
@@ -252,63 +251,63 @@ typedef enum
 typedef enum
 {
    /** No operation */
-   EC_ECMD_NOP         = 0x0000,
+   EC_ECMD_NOP = 0x0000,
    /** Read */
-   EC_ECMD_READ        = 0x0100,
+   EC_ECMD_READ = 0x0100,
    /** Write */
-   EC_ECMD_WRITE       = 0x0201,
+   EC_ECMD_WRITE = 0x0201,
    /** Reload */
-   EC_ECMD_RELOAD      = 0x0300
+   EC_ECMD_RELOAD = 0x0300
 } ec_ecmdtype;
 
 /** EEprom state machine read size */
-#define EC_ESTAT_R64    0x0040
+#define EC_ESTAT_R64   0x0040
 /** EEprom state machine busy flag */
-#define EC_ESTAT_BUSY   0x8000
+#define EC_ESTAT_BUSY  0x8000
 /** EEprom state machine error flag mask */
-#define EC_ESTAT_EMASK  0x7800
+#define EC_ESTAT_EMASK 0x7800
 /** EEprom state machine error acknowledge */
-#define EC_ESTAT_NACK   0x2000
+#define EC_ESTAT_NACK  0x2000
 
 /* Ethercat SSI (Slave Information Interface) */
 
 /** Start address SII sections in Eeprom */
-#define ECT_SII_START   0x0040
+#define ECT_SII_START  0x0040
 
 enum
 {
    /** SII category strings */
-   ECT_SII_STRING      = 10,
+   ECT_SII_STRING = 10,
    /** SII category general */
-   ECT_SII_GENERAL     = 30,
+   ECT_SII_GENERAL = 30,
    /** SII category FMMU */
-   ECT_SII_FMMU        = 40,
+   ECT_SII_FMMU = 40,
    /** SII category SM */
-   ECT_SII_SM          = 41,
+   ECT_SII_SM = 41,
    /** SII category PDO */
-   ECT_SII_PDO         = 50
+   ECT_SII_PDO = 50
 };
 
 /** Item offsets in SII general section */
 enum
 {
-   ECT_SII_MANUF       = 0x0008,
-   ECT_SII_ID          = 0x000a,
-   ECT_SII_REV         = 0x000c,
-   ECT_SII_SER         = 0x000e,
-   ECT_SII_BOOTRXMBX   = 0x0014,
-   ECT_SII_BOOTTXMBX   = 0x0016,
-   ECT_SII_MBXSIZE     = 0x0019,
-   ECT_SII_TXMBXADR    = 0x001a,
-   ECT_SII_RXMBXADR    = 0x0018,
-   ECT_SII_MBXPROTO    = 0x001c
+   ECT_SII_MANUF = 0x0008,
+   ECT_SII_ID = 0x000a,
+   ECT_SII_REV = 0x000c,
+   ECT_SII_SER = 0x000e,
+   ECT_SII_BOOTRXMBX = 0x0014,
+   ECT_SII_BOOTTXMBX = 0x0016,
+   ECT_SII_MBXSIZE = 0x0019,
+   ECT_SII_TXMBXADR = 0x001a,
+   ECT_SII_RXMBXADR = 0x0018,
+   ECT_SII_MBXPROTO = 0x001c
 };
 
 /** Mailbox types definitions */
 enum
 {
    /** Error mailbox type */
-   ECT_MBXT_ERR        = 0x00,
+   ECT_MBXT_ERR = 0x00,
    /** ADS over EtherCAT mailbox type */
    ECT_MBXT_AOE,
    /** Ethernet over EtherCAT mailbox type */
@@ -320,13 +319,13 @@ enum
    /** Servo over EtherCAT mailbox type */
    ECT_MBXT_SOE,
    /** Vendor over EtherCAT mailbox type */
-   ECT_MBXT_VOE        = 0x0f
+   ECT_MBXT_VOE = 0x0f
 };
 
 /** CoE mailbox types */
 enum
 {
-   ECT_COES_EMERGENCY  = 0x01,
+   ECT_COES_EMERGENCY = 0x01,
    ECT_COES_SDOREQ,
    ECT_COES_SDORES,
    ECT_COES_TXPDO,
@@ -339,31 +338,31 @@ enum
 /** CoE SDO commands */
 enum
 {
-   ECT_SDO_DOWN_INIT    = 0x21,
-   ECT_SDO_DOWN_EXP     = 0x23,
+   ECT_SDO_DOWN_INIT = 0x21,
+   ECT_SDO_DOWN_EXP = 0x23,
    ECT_SDO_DOWN_INIT_CA = 0x31,
-   ECT_SDO_UP_REQ       = 0x40,
-   ECT_SDO_UP_REQ_CA    = 0x50,
-   ECT_SDO_SEG_UP_REQ   = 0x60,
-   ECT_SDO_ABORT        = 0x80
+   ECT_SDO_UP_REQ = 0x40,
+   ECT_SDO_UP_REQ_CA = 0x50,
+   ECT_SDO_SEG_UP_REQ = 0x60,
+   ECT_SDO_ABORT = 0x80
 };
 
 /** CoE Object Description commands */
 enum
 {
-   ECT_GET_ODLIST_REQ  = 0x01,
-   ECT_GET_ODLIST_RES  = 0x02,
-   ECT_GET_OD_REQ      = 0x03,
-   ECT_GET_OD_RES      = 0x04,
-   ECT_GET_OE_REQ      = 0x05,
-   ECT_GET_OE_RES      = 0x06,
-   ECT_SDOINFO_ERROR   = 0x07
+   ECT_GET_ODLIST_REQ = 0x01,
+   ECT_GET_ODLIST_RES = 0x02,
+   ECT_GET_OD_REQ = 0x03,
+   ECT_GET_OD_RES = 0x04,
+   ECT_GET_OE_REQ = 0x05,
+   ECT_GET_OE_RES = 0x06,
+   ECT_SDOINFO_ERROR = 0x07
 };
 
 /** FoE opcodes */
 enum
 {
-   ECT_FOE_READ        = 0x01,
+   ECT_FOE_READ = 0x01,
    ECT_FOE_WRITE,
    ECT_FOE_DATA,
    ECT_FOE_ACK,
@@ -374,7 +373,7 @@ enum
 /** SoE opcodes */
 enum
 {
-   ECT_SOE_READREQ     = 0x01,
+   ECT_SOE_READREQ = 0x01,
    ECT_SOE_READRES,
    ECT_SOE_WRITEREQ,
    ECT_SOE_WRITERES,
@@ -385,88 +384,88 @@ enum
 /** Ethercat registers */
 enum
 {
-   ECT_REG_TYPE        = 0x0000,
-   ECT_REG_PORTDES     = 0x0007,
-   ECT_REG_ESCSUP      = 0x0008,
-   ECT_REG_STADR       = 0x0010,
-   ECT_REG_ALIAS       = 0x0012,
-   ECT_REG_DLCTL       = 0x0100,
-   ECT_REG_DLPORT      = 0x0101,
-   ECT_REG_DLALIAS     = 0x0103,
-   ECT_REG_DLSTAT      = 0x0110,
-   ECT_REG_ALCTL       = 0x0120,
-   ECT_REG_ALSTAT      = 0x0130,
-   ECT_REG_ALSTATCODE  = 0x0134,
-   ECT_REG_PDICTL      = 0x0140,
-   ECT_REG_IRQMASK     = 0x0200,
-   ECT_REG_RXERR       = 0x0300,
-   ECT_REG_FRXERR      = 0x0308,
-   ECT_REG_EPUECNT     = 0x030C,
-   ECT_REG_PECNT       = 0x030D,
-   ECT_REG_PECODE      = 0x030E,
-   ECT_REG_LLCNT       = 0x0310,
-   ECT_REG_WDCNT       = 0x0442,
-   ECT_REG_EEPCFG      = 0x0500,
-   ECT_REG_EEPCTL      = 0x0502,
-   ECT_REG_EEPSTAT     = 0x0502,
-   ECT_REG_EEPADR      = 0x0504,
-   ECT_REG_EEPDAT      = 0x0508,
-   ECT_REG_FMMU0       = 0x0600,
-   ECT_REG_FMMU1       = ECT_REG_FMMU0 + 0x10,
-   ECT_REG_FMMU2       = ECT_REG_FMMU1 + 0x10,
-   ECT_REG_FMMU3       = ECT_REG_FMMU2 + 0x10,
-   ECT_REG_SM0         = 0x0800,
-   ECT_REG_SM1         = ECT_REG_SM0 + 0x08,
-   ECT_REG_SM2         = ECT_REG_SM1 + 0x08,
-   ECT_REG_SM3         = ECT_REG_SM2 + 0x08,
-   ECT_REG_SM0STAT     = ECT_REG_SM0 + 0x05,
-   ECT_REG_SM1STAT     = ECT_REG_SM1 + 0x05,
-   ECT_REG_SM1ACT      = ECT_REG_SM1 + 0x06,
-   ECT_REG_SM1CONTR    = ECT_REG_SM1 + 0x07,
-   ECT_REG_DCTIME0     = 0x0900,
-   ECT_REG_DCTIME1     = 0x0904,
-   ECT_REG_DCTIME2     = 0x0908,
-   ECT_REG_DCTIME3     = 0x090C,
-   ECT_REG_DCSYSTIME   = 0x0910,
-   ECT_REG_DCSOF       = 0x0918,
+   ECT_REG_TYPE = 0x0000,
+   ECT_REG_PORTDES = 0x0007,
+   ECT_REG_ESCSUP = 0x0008,
+   ECT_REG_STADR = 0x0010,
+   ECT_REG_ALIAS = 0x0012,
+   ECT_REG_DLCTL = 0x0100,
+   ECT_REG_DLPORT = 0x0101,
+   ECT_REG_DLALIAS = 0x0103,
+   ECT_REG_DLSTAT = 0x0110,
+   ECT_REG_ALCTL = 0x0120,
+   ECT_REG_ALSTAT = 0x0130,
+   ECT_REG_ALSTATCODE = 0x0134,
+   ECT_REG_PDICTL = 0x0140,
+   ECT_REG_IRQMASK = 0x0200,
+   ECT_REG_RXERR = 0x0300,
+   ECT_REG_FRXERR = 0x0308,
+   ECT_REG_EPUECNT = 0x030C,
+   ECT_REG_PECNT = 0x030D,
+   ECT_REG_PECODE = 0x030E,
+   ECT_REG_LLCNT = 0x0310,
+   ECT_REG_WDCNT = 0x0442,
+   ECT_REG_EEPCFG = 0x0500,
+   ECT_REG_EEPCTL = 0x0502,
+   ECT_REG_EEPSTAT = 0x0502,
+   ECT_REG_EEPADR = 0x0504,
+   ECT_REG_EEPDAT = 0x0508,
+   ECT_REG_FMMU0 = 0x0600,
+   ECT_REG_FMMU1 = ECT_REG_FMMU0 + 0x10,
+   ECT_REG_FMMU2 = ECT_REG_FMMU1 + 0x10,
+   ECT_REG_FMMU3 = ECT_REG_FMMU2 + 0x10,
+   ECT_REG_SM0 = 0x0800,
+   ECT_REG_SM1 = ECT_REG_SM0 + 0x08,
+   ECT_REG_SM2 = ECT_REG_SM1 + 0x08,
+   ECT_REG_SM3 = ECT_REG_SM2 + 0x08,
+   ECT_REG_SM0STAT = ECT_REG_SM0 + 0x05,
+   ECT_REG_SM1STAT = ECT_REG_SM1 + 0x05,
+   ECT_REG_SM1ACT = ECT_REG_SM1 + 0x06,
+   ECT_REG_SM1CONTR = ECT_REG_SM1 + 0x07,
+   ECT_REG_DCTIME0 = 0x0900,
+   ECT_REG_DCTIME1 = 0x0904,
+   ECT_REG_DCTIME2 = 0x0908,
+   ECT_REG_DCTIME3 = 0x090C,
+   ECT_REG_DCSYSTIME = 0x0910,
+   ECT_REG_DCSOF = 0x0918,
    ECT_REG_DCSYSOFFSET = 0x0920,
-   ECT_REG_DCSYSDELAY  = 0x0928,
-   ECT_REG_DCSYSDIFF   = 0x092C,
-   ECT_REG_DCSPEEDCNT  = 0x0930,
-   ECT_REG_DCTIMEFILT  = 0x0934,
-   ECT_REG_DCCUC       = 0x0980,
-   ECT_REG_DCSYNCACT   = 0x0981,
-   ECT_REG_DCSTART0    = 0x0990,
-   ECT_REG_DCCYCLE0    = 0x09A0,
-   ECT_REG_DCCYCLE1    = 0x09A4
+   ECT_REG_DCSYSDELAY = 0x0928,
+   ECT_REG_DCSYSDIFF = 0x092C,
+   ECT_REG_DCSPEEDCNT = 0x0930,
+   ECT_REG_DCTIMEFILT = 0x0934,
+   ECT_REG_DCCUC = 0x0980,
+   ECT_REG_DCSYNCACT = 0x0981,
+   ECT_REG_DCSTART0 = 0x0990,
+   ECT_REG_DCCYCLE0 = 0x09A0,
+   ECT_REG_DCCYCLE1 = 0x09A4
 };
 
 /** standard SDO Sync Manager Communication Type */
-#define ECT_SDO_SMCOMMTYPE      0x1c00
+#define ECT_SDO_SMCOMMTYPE  0x1c00
 /** standard SDO PDO assignment */
-#define ECT_SDO_PDOASSIGN       0x1c10
+#define ECT_SDO_PDOASSIGN   0x1c10
 /** standard SDO RxPDO assignment */
-#define ECT_SDO_RXPDOASSIGN     0x1c12
+#define ECT_SDO_RXPDOASSIGN 0x1c12
 /** standard SDO TxPDO assignment */
-#define ECT_SDO_TXPDOASSIGN     0x1c13
+#define ECT_SDO_TXPDOASSIGN 0x1c13
 
 /** Ethercat packet type */
-#define ETH_P_ECAT              0x88A4
+#define ETH_P_ECAT          0x88A4
 
 /** Error types */
 typedef enum
 {
-   EC_ERR_TYPE_SDO_ERROR            = 0,
-   EC_ERR_TYPE_EMERGENCY            = 1,
-   EC_ERR_TYPE_PACKET_ERROR         = 3,
-   EC_ERR_TYPE_SDOINFO_ERROR        = 4,
-   EC_ERR_TYPE_FOE_ERROR            = 5,
-   EC_ERR_TYPE_FOE_BUF2SMALL        = 6,
-   EC_ERR_TYPE_FOE_PACKETNUMBER     = 7,
-   EC_ERR_TYPE_SOE_ERROR            = 8,
-   EC_ERR_TYPE_MBX_ERROR            = 9,
-   EC_ERR_TYPE_FOE_FILE_NOTFOUND    = 10,
-   EC_ERR_TYPE_EOE_INVALID_RX_DATA  = 11
+   EC_ERR_TYPE_SDO_ERROR = 0,
+   EC_ERR_TYPE_EMERGENCY = 1,
+   EC_ERR_TYPE_PACKET_ERROR = 3,
+   EC_ERR_TYPE_SDOINFO_ERROR = 4,
+   EC_ERR_TYPE_FOE_ERROR = 5,
+   EC_ERR_TYPE_FOE_BUF2SMALL = 6,
+   EC_ERR_TYPE_FOE_PACKETNUMBER = 7,
+   EC_ERR_TYPE_SOE_ERROR = 8,
+   EC_ERR_TYPE_MBX_ERROR = 9,
+   EC_ERR_TYPE_FOE_FILE_NOTFOUND = 10,
+   EC_ERR_TYPE_EOE_INVALID_RX_DATA = 11
 } ec_err_type;
 
 /** Struct to retrieve errors. */
@@ -475,27 +474,27 @@ typedef struct
    /** Time at which the error was generated. */
    ec_timet Time;
    /** Signal bit, error set but not read */
-   boolean     Signal;
+   boolean Signal;
    /** Slave number that generated the error */
-   uint16      Slave;
+   uint16 Slave;
    /** CoE SDO index that generated the error */
-   uint16      Index;
+   uint16 Index;
    /** CoE SDO subindex that generated the error */
-   uint8       SubIdx;
+   uint8 SubIdx;
    /** Type of error */
    ec_err_type Etype;
    union
    {
       /** General abortcode */
-      int32   AbortCode;
+      int32 AbortCode;
       /** Specific error for Emergency mailbox */
       struct
       {
-         uint16  ErrorCode;
-         uint8   ErrorReg;
-         uint8   b1;
-         uint16  w1;
-         uint16  w2;
+         uint16 ErrorCode;
+         uint8 ErrorReg;
+         uint8 b1;
+         uint16 w1;
+         uint16 w2;
       };
    };
 } ec_errort;
@@ -506,60 +505,60 @@ typedef struct
 #define MBX_HDR_SET_CNT(cnt) ((uint8)((cnt) << 4))
 
 /** Macro to make a word from 2 bytes */
-#define MK_WORD(msb, lsb)   ((((uint16)(msb))<<8) | (lsb))
+#define MK_WORD(msb, lsb)    ((((uint16)(msb)) << 8) | (lsb))
 /** Macro to get hi byte of a word */
-#define HI_BYTE(w)          ((w) >> 8)
+#define HI_BYTE(w)           ((w) >> 8)
 /** Macro to get low byte of a word */
-#define LO_BYTE(w)          ((w) & 0x00ff)
+#define LO_BYTE(w)           ((w) & 0x00ff)
 /** Macro to swap hi and low byte of a word */
-#define SWAP(w)             ((((w)& 0xff00) >> 8) | (((w) & 0x00ff) << 8))
+#define SWAP(w)              ((((w) & 0xff00) >> 8) | (((w) & 0x00ff) << 8))
 /** Macro to get hi word of a dword */
-#define LO_WORD(l)          ((l) & 0xffff)
+#define LO_WORD(l)           ((l) & 0xffff)
 /** Macro to get hi word of a dword */
-#define HI_WORD(l)          ((l) >> 16)
+#define HI_WORD(l)           ((l) >> 16)
 
 #define get_unaligned(ptr) \
-  ({ __typeof__(*(ptr)) __tmp; memcpy(&__tmp, (ptr), sizeof(*(ptr))); __tmp; })
+   ({ __typeof__(*(ptr)) __tmp; memcpy(&__tmp, (ptr), sizeof(*(ptr))); __tmp; })
 
-#define put_unaligned32(val, ptr)        \
-  (memcpy((ptr), &(val), 4))
+#define put_unaligned32(val, ptr) \
+   (memcpy((ptr), &(val), 4))
 
-#define put_unaligned64(val, ptr)        \
-  (memcpy((ptr), &(val), 8))
+#define put_unaligned64(val, ptr) \
+   (memcpy((ptr), &(val), 8))
 
 #if !defined(EC_BIG_ENDIAN) && defined(EC_LITTLE_ENDIAN)
 
-  #define htoes(A) (A)
-  #define htoel(A) (A)
-  #define htoell(A) (A)
-  #define etohs(A) (A)
-  #define etohl(A) (A)
-  #define etohll(A) (A)
+#define htoes(A)  (A)
+#define htoel(A)  (A)
+#define htoell(A) (A)
+#define etohs(A)  (A)
+#define etohl(A)  (A)
+#define etohll(A) (A)
 
 #elif !defined(EC_LITTLE_ENDIAN) && defined(EC_BIG_ENDIAN)
 
-  #define htoes(A) ((((uint16)(A) & 0xff00) >> 8) | \
-                    (((uint16)(A) & 0x00ff) << 8))
-  #define htoel(A) ((((uint32)(A) & 0xff000000) >> 24) | \
-                    (((uint32)(A) & 0x00ff0000) >> 8)  | \
-                    (((uint32)(A) & 0x0000ff00) << 8)  | \
-                    (((uint32)(A) & 0x000000ff) << 24))
-  #define htoell(A) ((((uint64)(A) & (uint64)0xff00000000000000ULL) >> 56) | \
-                     (((uint64)(A) & (uint64)0x00ff000000000000ULL) >> 40) | \
-                     (((uint64)(A) & (uint64)0x0000ff0000000000ULL) >> 24) | \
-                     (((uint64)(A) & (uint64)0x000000ff00000000ULL) >> 8)  | \
-                     (((uint64)(A) & (uint64)0x00000000ff000000ULL) << 8)  | \
-                     (((uint64)(A) & (uint64)0x0000000000ff0000ULL) << 24) | \
-                     (((uint64)(A) & (uint64)0x000000000000ff00ULL) << 40) | \
-                     (((uint64)(A) & (uint64)0x00000000000000ffULL) << 56))
-
-  #define etohs  htoes
-  #define etohl  htoel
-  #define etohll htoell
+#define htoes(A) ((((uint16)(A) & 0xff00) >> 8) | \
+                  (((uint16)(A) & 0x00ff) << 8))
+#define htoel(A) ((((uint32)(A) & 0xff000000) >> 24) | \
+                  (((uint32)(A) & 0x00ff0000) >> 8) |  \
+                  (((uint32)(A) & 0x0000ff00) << 8) |  \
+                  (((uint32)(A) & 0x000000ff) << 24))
+#define htoell(A) ((((uint64)(A) & (uint64)0xff00000000000000ULL) >> 56) | \
+                   (((uint64)(A) & (uint64)0x00ff000000000000ULL) >> 40) | \
+                   (((uint64)(A) & (uint64)0x0000ff0000000000ULL) >> 24) | \
+                   (((uint64)(A) & (uint64)0x000000ff00000000ULL) >> 8) |  \
+                   (((uint64)(A) & (uint64)0x00000000ff000000ULL) << 8) |  \
+                   (((uint64)(A) & (uint64)0x0000000000ff0000ULL) << 24) | \
+                   (((uint64)(A) & (uint64)0x000000000000ff00ULL) << 40) | \
+                   (((uint64)(A) & (uint64)0x00000000000000ffULL) << 56))
+
+#define etohs  htoes
+#define etohl  htoel
+#define etohll htoell
 
 #else
 
-  #error "Must define one of EC_BIG_ENDIAN or EC_LITTLE_ENDIAN"
+#error "Must define one of EC_BIG_ENDIAN or EC_LITTLE_ENDIAN"
 
 #endif
 
index a43f8b36fa5ff417d58b2f371aa34737a202a1e0..8ffe0db7e1e1e161654855afa656de4b91cd9aa2 100644 (file)
 
 #include "ee_x86_64_tsc.h"
 
-#define USECS_PER_SEC     1000000
-#define NSECS_PER_SEC     1000000000
+#define USECS_PER_SEC 1000000
+#define NSECS_PER_SEC 1000000000
 
 uint64_t osEE_x86_64_tsc_read(void);
 
 void ee_usleep(uint32 usec);
 
-inline int osal_usleep (uint32 usec)
+inline int osal_usleep(uint32 usec)
 {
-       ee_usleep(usec);
-       return 0;
+   ee_usleep(usec);
+   return 0;
 }
 
 int osal_gettimeofday(struct timeval *tv, struct timezone *tz)
 {
-       uint64_t time = osEE_x86_64_tsc_read();
-       tv->tv_sec = time/NSECS_PER_SEC;
-       tv->tv_sec += 946684800UL;  /* EtherCAT uses 2000-01-01 as epoch start */
-       tv->tv_usec = (time%NSECS_PER_SEC)/1000;
-       return 0;
+   uint64_t time = osEE_x86_64_tsc_read();
+   tv->tv_sec = time / NSECS_PER_SEC;
+   tv->tv_sec += 946684800UL; /* EtherCAT uses 2000-01-01 as epoch start */
+   tv->tv_usec = (time % NSECS_PER_SEC) / 1000;
+   return 0;
 }
 
 ec_timet osal_current_time(void)
 {
-       struct timeval current_time;
-       ec_timet ret;
+   struct timeval current_time;
+   ec_timet ret;
 
-       osal_gettimeofday(&current_time, 0);
-       ret.sec = current_time.tv_sec;
-       ret.usec = current_time.tv_usec;
-       return ret;
+   osal_gettimeofday(&current_time, 0);
+   ret.sec = current_time.tv_sec;
+   ret.usec = current_time.tv_usec;
+   return ret;
 }
 
 void osal_time_diff(ec_timet *start, ec_timet *end, ec_timet *diff)
 {
-       if (end->usec < start->usec) {
-               diff->sec = end->sec - start->sec - 1;
-               diff->usec = end->usec + USECS_PER_SEC - start->usec;
-       } else {
-               diff->sec = end->sec - start->sec;
-               diff->usec = end->usec - start->usec;
-       }
+   if (end->usec < start->usec)
+   {
+      diff->sec = end->sec - start->sec - 1;
+      diff->usec = end->usec + USECS_PER_SEC - start->usec;
+   }
+   else
+   {
+      diff->sec = end->sec - start->sec;
+      diff->usec = end->usec - start->usec;
+   }
 }
 
 void osal_timer_start(osal_timert *self, uint32 timeout_usec)
 {
-       struct timeval start_time;
-       struct timeval timeout;
-       struct timeval stop_time;
+   struct timeval start_time;
+   struct timeval timeout;
+   struct timeval stop_time;
 
-       osal_gettimeofday(&start_time, 0);
-       timeout.tv_sec = timeout_usec / USECS_PER_SEC;
-       timeout.tv_usec = timeout_usec % USECS_PER_SEC;
-       timeradd(&start_time, &timeout, &stop_time);
+   osal_gettimeofday(&start_time, 0);
+   timeout.tv_sec = timeout_usec / USECS_PER_SEC;
+   timeout.tv_usec = timeout_usec % USECS_PER_SEC;
+   timeradd(&start_time, &timeout, &stop_time);
 
-       self->stop_time.sec = stop_time.tv_sec;
-       self->stop_time.usec = stop_time.tv_usec;
+   self->stop_time.sec = stop_time.tv_sec;
+   self->stop_time.usec = stop_time.tv_usec;
 }
 
-boolean osal_timer_is_expired (osal_timert *self)
+boolean osal_timer_is_expired(osal_timert *self)
 {
-       struct timeval current_time;
-       struct timeval stop_time;
-       int is_not_yet_expired;
-
-       osal_gettimeofday (&current_time, 0);
-       stop_time.tv_sec = self->stop_time.sec;
-       stop_time.tv_usec = self->stop_time.usec;
-       is_not_yet_expired = timercmp (&current_time, &stop_time, <);
-/*     OSEE_PRINT("current: %d:%d -- expire: %d:%d -- result: %d\n", */
-/*                     current_time.tv_sec, */
-/*                     current_time.tv_usec, */
-/*                     stop_time.tv_sec, */
-/*                     stop_time.tv_usec, */
-/*                     is_not_yet_expired); */
-
-       return is_not_yet_expired == FALSE;
+   struct timeval current_time;
+   struct timeval stop_time;
+   int is_not_yet_expired;
+
+   osal_gettimeofday(&current_time, 0);
+   stop_time.tv_sec = self->stop_time.sec;
+   stop_time.tv_usec = self->stop_time.usec;
+   is_not_yet_expired = timercmp(&current_time, &stop_time, <);
+   /*  OSEE_PRINT("current: %d:%d -- expire: %d:%d -- result: %d\n", */
+   /*                  current_time.tv_sec, */
+   /*                  current_time.tv_usec, */
+   /*                  stop_time.tv_sec, */
+   /*                  stop_time.tv_usec, */
+   /*                  is_not_yet_expired); */
+
+   return is_not_yet_expired == FALSE;
 }
 
 void *osal_malloc(size_t size)
 {
-       return malloc(size);
+   return malloc(size);
 }
 
 void osal_free(void *ptr)
 {
-       free(ptr);
+   free(ptr);
 }
-
index 2a3fbac47afd23e9039e2b52201807f84c792e03..f7a0b0fa5acafc5dd072d753efb8df0daf7946a7 100644 (file)
@@ -8,8 +8,7 @@
 #define _osal_defs_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 #include <sys/time.h>
@@ -22,12 +21,15 @@ extern "C"
 #ifdef EC_DEBUG
 #define EC_PRINT OSEE_PRINT
 #else
-#define EC_PRINT(...) do {} while (0)
+#define EC_PRINT(...) \
+   do                 \
+   {                  \
+   } while (0)
 #endif
 
 #ifndef PACKED
 #define PACKED_BEGIN
-#define PACKED  __attribute__((__packed__))
+#define PACKED __attribute__((__packed__))
 #define PACKED_END
 #endif
 
index 1869371b017f004ec8622664398cb2d6299ba10c..bb73b92a262ea8f60bfa6da096d3cb53335df3cd 100644 (file)
 static int64_t sysfrequency;
 static double qpc2usec;
 
-#define USECS_PER_SEC     1000000
+#define USECS_PER_SEC 1000000
 
-int osal_gettimeofday (struct timeval *tv, struct timezone *tz)
+int osal_gettimeofday(struct timeval *tv, struct timezone *tz)
 {
-   return gettimeofday (tv, tz);
+   return gettimeofday(tv, tz);
 }
 
-ec_timet osal_current_time (void)
+ec_timet osal_current_time(void)
 {
    struct timeval current_time;
    ec_timet return_value;
 
-   osal_gettimeofday (&current_time, 0);
+   osal_gettimeofday(&current_time, 0);
    return_value.sec = current_time.tv_sec;
    return_value.usec = current_time.tv_usec;
    return return_value;
 }
 
-void osal_timer_start (osal_timert * self, uint32 timeout_usec)
+void osal_timer_start(osal_timert *self, uint32 timeout_usec)
 {
    struct timeval start_time;
    struct timeval timeout;
    struct timeval stop_time;
 
-   osal_gettimeofday (&start_time, 0);
+   osal_gettimeofday(&start_time, 0);
    timeout.tv_sec = timeout_usec / USECS_PER_SEC;
    timeout.tv_usec = timeout_usec % USECS_PER_SEC;
-   timeradd (&start_time, &timeout, &stop_time);
+   timeradd(&start_time, &timeout, &stop_time);
 
    self->stop_time.sec = stop_time.tv_sec;
    self->stop_time.usec = stop_time.tv_usec;
 }
 
-boolean osal_timer_is_expired (osal_timert * self)
+boolean osal_timer_is_expired(osal_timert *self)
 {
    struct timeval current_time;
    struct timeval stop_time;
    int is_not_yet_expired;
 
-   osal_gettimeofday (&current_time, 0);
+   osal_gettimeofday(&current_time, 0);
    stop_time.tv_sec = self->stop_time.sec;
    stop_time.tv_usec = self->stop_time.usec;
-   is_not_yet_expired = timercmp (&current_time, &stop_time, <);
+   is_not_yet_expired = timercmp(&current_time, &stop_time, <);
 
    return is_not_yet_expired == FALSE;
 }
 
 int osal_usleep(uint32 usec)
 {
-   RtSleepEx (usec / 1000);
+   RtSleepEx(usec / 1000);
    return 1;
 }
 
 /* Mutex is not needed when running single threaded */
 
-void osal_mtx_lock(osal_mutex_t * mtx)
+void osal_mtx_lock(osal_mutex_t *mtx)
 {
-        /* RtWaitForSingleObject((HANDLE)mtx, INFINITE); */
+   /* RtWaitForSingleObject((HANDLE)mtx, INFINITE); */
 }
 
-void osal_mtx_unlock(osal_mutex_t * mtx)
+void osal_mtx_unlock(osal_mutex_t *mtx)
 {
-        /* RtReleaseMutex((HANDLE)mtx); */
+   /* RtReleaseMutex((HANDLE)mtx); */
 }
 
-int osal_mtx_lock_timeout(osal_mutex_t * mtx, uint32_t time_ms)
+int osal_mtx_lock_timeout(osal_mutex_t *mtx, uint32_t time_ms)
 {
-        /* return RtWaitForSingleObject((HANDLE)mtx, time_ms); */
-        return 0;
+   /* return RtWaitForSingleObject((HANDLE)mtx, time_ms); */
+   return 0;
 }
 
-osal_mutex_t * osal_mtx_create(void)
+osal_mutex_t *osal_mtx_create(void)
 {
-        /* return (void*)RtCreateMutex(NULL, FALSE, NULL); */
-        return (void *)0;
+   /* return (void*)RtCreateMutex(NULL, FALSE, NULL); */
+   return (void *)0;
 }
index bf8ea25c50baee9afce62cc32dc6dcdbb689ff3f..c13c4166bebc7af863c16194923a8014f88da46f 100644 (file)
@@ -8,34 +8,36 @@
 #define _osal_defs_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 // define if debug printf is needed
-//#define EC_DEBUG
+// #define EC_DEBUG
 
 #ifdef EC_DEBUG
 #define EC_PRINT printf
 #else
-#define EC_PRINT(...) do {} while (0)
+#define EC_PRINT(...) \
+   do                 \
+   {                  \
+   } while (0)
 #endif
 
 #ifndef PACKED
-    #ifdef _MSC_VER
-    #define PACKED_BEGIN __pragma(pack(push, 1))
-    #define PACKED
-    #define PACKED_END __pragma(pack(pop))
-    #elif defined(__GNUC__)
-    #define PACKED_BEGIN
-    #define PACKED  __attribute__((__packed__))
-    #define PACKED_END
-    #endif
+#ifdef _MSC_VER
+#define PACKED_BEGIN __pragma(pack(push, 1))
+#define PACKED
+#define PACKED_END __pragma(pack(pop))
+#elif defined(__GNUC__)
+#define PACKED_BEGIN
+#define PACKED __attribute__((__packed__))
+#define PACKED_END
+#endif
 #endif
 
-#define OSAL_THREAD_HANDLE   RTHANDLE
-#define OSAL_THREAD_FUNC     void
-#define OSAL_THREAD_FUNC_RT  void
+#define OSAL_THREAD_HANDLE  RTHANDLE
+#define OSAL_THREAD_FUNC    void
+#define OSAL_THREAD_FUNC_RT void
 
 #ifdef __cplusplus
 }
index 2af6d4740c7c898b4d2759debd34c7ae49181416..0cad7a42c41c517fe2b81b11cb1b84df023243ef 100644 (file)
@@ -11,9 +11,9 @@
 #include <string.h>
 #include <osal.h>
 
-#define USECS_PER_SEC     1000000
+#define USECS_PER_SEC 1000000
 
-int osal_usleep (uint32 usec)
+int osal_usleep(uint32 usec)
 {
    struct timespec ts;
    ts.tv_sec = usec / USECS_PER_SEC;
@@ -36,11 +36,13 @@ ec_timet osal_current_time(void)
 
 void osal_time_diff(ec_timet *start, ec_timet *end, ec_timet *diff)
 {
-   if (end->usec < start->usec) {
+   if (end->usec < start->usec)
+   {
       diff->sec = end->sec - start->sec - 1;
       diff->usec = end->usec + 1000000 - start->usec;
    }
-   else {
+   else
+   {
       diff->sec = end->sec - start->sec;
       diff->usec = end->usec - start->usec;
    }
@@ -61,7 +63,7 @@ static void osal_getrelativetime(struct timeval *tv)
    tv->tv_usec = ts.tv_nsec / 1000;
 }
 
-void osal_timer_start(osal_timert * self, uint32 timeout_usec)
+void osal_timer_start(osal_timert *self, uint32 timeout_usec)
 {
    struct timeval start_time;
    struct timeval timeout;
@@ -76,7 +78,7 @@ void osal_timer_start(osal_timert * self, uint32 timeout_usec)
    self->stop_time.usec = stop_time.tv_usec;
 }
 
-boolean osal_timer_is_expired (osal_timert * self)
+boolean osal_timer_is_expired(osal_timert *self)
 {
    struct timeval current_time;
    struct timeval stop_time;
@@ -102,15 +104,15 @@ void osal_free(void *ptr)
 
 int osal_thread_create(void *thandle, int stacksize, void *func, void *param)
 {
-   int                  ret;
-   pthread_attr_t       attr;
-   pthread_t            *threadp;
+   int ret;
+   pthread_attr_t attr;
+   pthread_t *threadp;
 
    threadp = thandle;
    pthread_attr_init(&attr);
    pthread_attr_setstacksize(&attr, stacksize);
    ret = pthread_create(threadp, &attr, func, param);
-   if(ret < 0)
+   if (ret < 0)
    {
       return 0;
    }
@@ -119,24 +121,24 @@ int osal_thread_create(void *thandle, int stacksize, void *func, void *param)
 
 int osal_thread_create_rt(void *thandle, int stacksize, void *func, void *param)
 {
-   int                  ret;
-   pthread_attr_t       attr;
-   struct sched_param   schparam;
-   pthread_t            *threadp;
+   int ret;
+   pthread_attr_t attr;
+   struct sched_param schparam;
+   pthread_t *threadp;
 
    threadp = thandle;
    pthread_attr_init(&attr);
    pthread_attr_setstacksize(&attr, stacksize);
    ret = pthread_create(threadp, &attr, func, param);
    pthread_attr_destroy(&attr);
-   if(ret < 0)
+   if (ret < 0)
    {
       return 0;
    }
    memset(&schparam, 0, sizeof(schparam));
    schparam.sched_priority = 40;
    ret = pthread_setschedparam(*threadp, SCHED_FIFO, &schparam);
-   if(ret < 0)
+   if (ret < 0)
    {
       return 0;
    }
@@ -148,8 +150,8 @@ void *osal_mutex_create(void)
 {
    pthread_mutexattr_t mutexattr;
    osal_mutext *mutex;
-   mutex = (osal_mutext *)osal_malloc (sizeof(osal_mutext));
-   if(mutex)
+   mutex = (osal_mutext *)osal_malloc(sizeof(osal_mutext));
+   if (mutex)
    {
       pthread_mutexattr_init(&mutexattr);
       pthread_mutexattr_setprotocol(&mutexattr, PTHREAD_PRIO_INHERIT);
@@ -166,10 +168,10 @@ void osal_mutex_destroy(void *mutex)
 
 void osal_mutex_lock(void *mutex)
 {
-   pthread_mutex_lock((osal_mutext *) mutex);
+   pthread_mutex_lock((osal_mutext *)mutex);
 }
 
 void osal_mutex_unlock(void *mutex)
 {
-   pthread_mutex_unlock((osal_mutext *) mutex);
+   pthread_mutex_unlock((osal_mutext *)mutex);
 }
index f4c5ea5cc52787abd34f0314077b6253ef019850..798c8348761be91a9bb814cc95784b733d3c39d9 100644 (file)
@@ -8,31 +8,33 @@
 #define _osal_defs_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 // define if debug printf is needed
-//#define EC_DEBUG
+// #define EC_DEBUG
 
 #ifdef EC_DEBUG
 #define EC_PRINT printf
 #else
-#define EC_PRINT(...) do {} while (0)
+#define EC_PRINT(...) \
+   do                 \
+   {                  \
+   } while (0)
 #endif
 
 #ifndef PACKED
 #define PACKED_BEGIN
-#define PACKED  __attribute__((__packed__))
+#define PACKED __attribute__((__packed__))
 #define PACKED_END
 #endif
 
 #include <pthread.h>
-#define OSAL_THREAD_HANDLE pthread_t *
-#define OSAL_THREAD_FUNC void
+#define OSAL_THREAD_HANDLE  pthread_t *
+#define OSAL_THREAD_FUNC    void
 #define OSAL_THREAD_FUNC_RT void
 
-#define osal_mutext pthread_mutex_t
+#define osal_mutext         pthread_mutex_t
 
 #ifdef __cplusplus
 }
index 0e80b5f585a83a1f41b383f49022123d7eb4bedd..775e50266801cff51b79158ccea68b6cabc26e46 100644 (file)
@@ -11,9 +11,9 @@
 #include <string.h>
 #include <osal.h>
 
-#define USECS_PER_SEC     1000000
+#define USECS_PER_SEC 1000000
 
-int osal_usleep (uint32 usec)
+int osal_usleep(uint32 usec)
 {
    struct timespec ts;
    ts.tv_sec = usec / USECS_PER_SEC;
@@ -26,7 +26,7 @@ int osal_gettimeofday(struct timeval *tv, struct timezone *tz)
 {
    struct timespec ts;
    int return_value;
-   (void)tz;       /* Not used */
+   (void)tz; /* Not used */
 
    /* Use clock_gettime to prevent possible live-lock.
     * Gettimeofday uses CLOCK_REALTIME that can get NTP timeadjust.
@@ -51,17 +51,19 @@ ec_timet osal_current_time(void)
 
 void osal_time_diff(ec_timet *start, ec_timet *end, ec_timet *diff)
 {
-   if (end->usec < start->usec) {
+   if (end->usec < start->usec)
+   {
       diff->sec = end->sec - start->sec - 1;
       diff->usec = end->usec + 1000000 - start->usec;
    }
-   else {
+   else
+   {
       diff->sec = end->sec - start->sec;
       diff->usec = end->usec - start->usec;
    }
 }
 
-void osal_timer_start(osal_timert * self, uint32 timeout_usec)
+void osal_timer_start(osal_timert *self, uint32 timeout_usec)
 {
    struct timeval start_time;
    struct timeval timeout;
@@ -76,7 +78,7 @@ void osal_timer_start(osal_timert * self, uint32 timeout_usec)
    self->stop_time.usec = stop_time.tv_usec;
 }
 
-boolean osal_timer_is_expired (osal_timert * self)
+boolean osal_timer_is_expired(osal_timert *self)
 {
    struct timeval current_time;
    struct timeval stop_time;
@@ -102,15 +104,15 @@ void osal_free(void *ptr)
 
 int osal_thread_create(void *thandle, int stacksize, void *func, void *param)
 {
-   int                  ret;
-   pthread_attr_t       attr;
-   pthread_t            *threadp;
+   int ret;
+   pthread_attr_t attr;
+   pthread_t *threadp;
 
    threadp = thandle;
    pthread_attr_init(&attr);
    pthread_attr_setstacksize(&attr, stacksize);
    ret = pthread_create(threadp, &attr, func, param);
-   if(ret < 0)
+   if (ret < 0)
    {
       return 0;
    }
@@ -119,24 +121,24 @@ int osal_thread_create(void *thandle, int stacksize, void *func, void *param)
 
 int osal_thread_create_rt(void *thandle, int stacksize, void *func, void *param)
 {
-   int                  ret;
-   pthread_attr_t       attr;
-   struct sched_param   schparam;
-   pthread_t            *threadp;
+   int ret;
+   pthread_attr_t attr;
+   struct sched_param schparam;
+   pthread_t *threadp;
 
    threadp = thandle;
    pthread_attr_init(&attr);
    pthread_attr_setstacksize(&attr, stacksize);
    ret = pthread_create(threadp, &attr, func, param);
    pthread_attr_destroy(&attr);
-   if(ret < 0)
+   if (ret < 0)
    {
       return 0;
    }
    memset(&schparam, 0, sizeof(schparam));
    schparam.sched_priority = 40;
    ret = pthread_setschedparam(*threadp, SCHED_FIFO, &schparam);
-   if(ret < 0)
+   if (ret < 0)
    {
       return 0;
    }
index b097742136d2a8ed698998d98b2519fe97b2c77f..207d44b7bda72104d85556198b7503fa2669480a 100644 (file)
@@ -8,28 +8,30 @@
 #define _osal_defs_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 // define if debug printf is needed
-//#define EC_DEBUG
+// #define EC_DEBUG
 
 #ifdef EC_DEBUG
 #define EC_PRINT printf
 #else
-#define EC_PRINT(...) do {} while (0)
+#define EC_PRINT(...) \
+   do                 \
+   {                  \
+   } while (0)
 #endif
 
 #ifndef PACKED
 #define PACKED_BEGIN
-#define PACKED  __attribute__((__packed__))
+#define PACKED __attribute__((__packed__))
 #define PACKED_END
 #endif
 
 #include <pthread.h>
-#define OSAL_THREAD_HANDLE pthread_t *
-#define OSAL_THREAD_FUNC void
+#define OSAL_THREAD_HANDLE  pthread_t *
+#define OSAL_THREAD_FUNC    void
 #define OSAL_THREAD_FUNC_RT void
 
 #ifdef __cplusplus
index 0d13ee174edf89a86dda463aaec3fb7386b52209..b95a2f7b570ebc6fb95d774d9dd9d5f7fed27fcf 100644 (file)
@@ -8,8 +8,7 @@
 #define _osal_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 #include "osal_defs.h"
@@ -18,36 +17,36 @@ extern "C"
 
 /* General types */
 #ifndef TRUE
-#define TRUE                1
+#define TRUE 1
 #endif
 #ifndef FALSE
-#define FALSE               0
+#define FALSE 0
 #endif
-typedef uint8_t             boolean;
-typedef int8_t              int8;
-typedef int16_t             int16;
-typedef int32_t             int32;
-typedef uint8_t             uint8;
-typedef uint16_t            uint16;
-typedef uint32_t            uint32;
-typedef int64_t             int64;
-typedef uint64_t            uint64;
-typedef float               float32;
-typedef double              float64;
+typedef uint8_t boolean;
+typedef int8_t int8;
+typedef int16_t int16;
+typedef int32_t int32;
+typedef uint8_t uint8;
+typedef uint16_t uint16;
+typedef uint32_t uint32;
+typedef int64_t int64;
+typedef uint64_t uint64;
+typedef float float32;
+typedef double float64;
 
 typedef struct
 {
-    uint32 sec;     /*< Seconds elapsed since the Epoch (Jan 1, 1970) */
-    uint32 usec;    /*< Microseconds elapsed since last second boundary */
+   uint32 sec;  /*< Seconds elapsed since the Epoch (Jan 1, 1970) */
+   uint32 usec; /*< Microseconds elapsed since last second boundary */
 } ec_timet;
 
 typedef struct osal_timer
 {
-    ec_timet stop_time;
+   ec_timet stop_time;
 } osal_timert;
 
-void osal_timer_start(osal_timert * self, uint32 timeout_us);
-boolean osal_timer_is_expired(osal_timert * self);
+void osal_timer_start(osal_timert *self, uint32 timeout_us);
+boolean osal_timer_is_expired(osal_timert *self);
 int osal_usleep(uint32 usec);
 ec_timet osal_current_time(void);
 void osal_time_diff(ec_timet *start, ec_timet *end, ec_timet *diff);
index 0e80b5f585a83a1f41b383f49022123d7eb4bedd..775e50266801cff51b79158ccea68b6cabc26e46 100644 (file)
@@ -11,9 +11,9 @@
 #include <string.h>
 #include <osal.h>
 
-#define USECS_PER_SEC     1000000
+#define USECS_PER_SEC 1000000
 
-int osal_usleep (uint32 usec)
+int osal_usleep(uint32 usec)
 {
    struct timespec ts;
    ts.tv_sec = usec / USECS_PER_SEC;
@@ -26,7 +26,7 @@ int osal_gettimeofday(struct timeval *tv, struct timezone *tz)
 {
    struct timespec ts;
    int return_value;
-   (void)tz;       /* Not used */
+   (void)tz; /* Not used */
 
    /* Use clock_gettime to prevent possible live-lock.
     * Gettimeofday uses CLOCK_REALTIME that can get NTP timeadjust.
@@ -51,17 +51,19 @@ ec_timet osal_current_time(void)
 
 void osal_time_diff(ec_timet *start, ec_timet *end, ec_timet *diff)
 {
-   if (end->usec < start->usec) {
+   if (end->usec < start->usec)
+   {
       diff->sec = end->sec - start->sec - 1;
       diff->usec = end->usec + 1000000 - start->usec;
    }
-   else {
+   else
+   {
       diff->sec = end->sec - start->sec;
       diff->usec = end->usec - start->usec;
    }
 }
 
-void osal_timer_start(osal_timert * self, uint32 timeout_usec)
+void osal_timer_start(osal_timert *self, uint32 timeout_usec)
 {
    struct timeval start_time;
    struct timeval timeout;
@@ -76,7 +78,7 @@ void osal_timer_start(osal_timert * self, uint32 timeout_usec)
    self->stop_time.usec = stop_time.tv_usec;
 }
 
-boolean osal_timer_is_expired (osal_timert * self)
+boolean osal_timer_is_expired(osal_timert *self)
 {
    struct timeval current_time;
    struct timeval stop_time;
@@ -102,15 +104,15 @@ void osal_free(void *ptr)
 
 int osal_thread_create(void *thandle, int stacksize, void *func, void *param)
 {
-   int                  ret;
-   pthread_attr_t       attr;
-   pthread_t            *threadp;
+   int ret;
+   pthread_attr_t attr;
+   pthread_t *threadp;
 
    threadp = thandle;
    pthread_attr_init(&attr);
    pthread_attr_setstacksize(&attr, stacksize);
    ret = pthread_create(threadp, &attr, func, param);
-   if(ret < 0)
+   if (ret < 0)
    {
       return 0;
    }
@@ -119,24 +121,24 @@ int osal_thread_create(void *thandle, int stacksize, void *func, void *param)
 
 int osal_thread_create_rt(void *thandle, int stacksize, void *func, void *param)
 {
-   int                  ret;
-   pthread_attr_t       attr;
-   struct sched_param   schparam;
-   pthread_t            *threadp;
+   int ret;
+   pthread_attr_t attr;
+   struct sched_param schparam;
+   pthread_t *threadp;
 
    threadp = thandle;
    pthread_attr_init(&attr);
    pthread_attr_setstacksize(&attr, stacksize);
    ret = pthread_create(threadp, &attr, func, param);
    pthread_attr_destroy(&attr);
-   if(ret < 0)
+   if (ret < 0)
    {
       return 0;
    }
    memset(&schparam, 0, sizeof(schparam));
    schparam.sched_priority = 40;
    ret = pthread_setschedparam(*threadp, SCHED_FIFO, &schparam);
-   if(ret < 0)
+   if (ret < 0)
    {
       return 0;
    }
index b097742136d2a8ed698998d98b2519fe97b2c77f..207d44b7bda72104d85556198b7503fa2669480a 100644 (file)
@@ -8,28 +8,30 @@
 #define _osal_defs_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 // define if debug printf is needed
-//#define EC_DEBUG
+// #define EC_DEBUG
 
 #ifdef EC_DEBUG
 #define EC_PRINT printf
 #else
-#define EC_PRINT(...) do {} while (0)
+#define EC_PRINT(...) \
+   do                 \
+   {                  \
+   } while (0)
 #endif
 
 #ifndef PACKED
 #define PACKED_BEGIN
-#define PACKED  __attribute__((__packed__))
+#define PACKED __attribute__((__packed__))
 #define PACKED_END
 #endif
 
 #include <pthread.h>
-#define OSAL_THREAD_HANDLE pthread_t *
-#define OSAL_THREAD_FUNC void
+#define OSAL_THREAD_HANDLE  pthread_t *
+#define OSAL_THREAD_FUNC    void
 #define OSAL_THREAD_FUNC_RT void
 
 #ifdef __cplusplus
index c883743fad1607d372bcbe7130785de67d0602f6..bd833b24781ddebd31a92c4b6c63ec0592f73321 100644 (file)
 #include <sys/time.h>
 #include <config.h>
 
-#define USECS_PER_SEC   1000000
-#define USECS_PER_TICK  (USECS_PER_SEC / CFG_TICKS_PER_SECOND)
+#define USECS_PER_SEC  1000000
+#define USECS_PER_TICK (USECS_PER_SEC / CFG_TICKS_PER_SECOND)
 
 int gettimeofday(struct timeval *tp, void *tzp)
 {
    tick_t tick = tick_get();
    tick_t ticks_left;
 
-   ASSERT (tp != NULL);
+   ASSERT(tp != NULL);
 
    tp->tv_sec = tick / CFG_TICKS_PER_SECOND;
 
    ticks_left = tick % CFG_TICKS_PER_SECOND;
    tp->tv_usec = ticks_left * USECS_PER_TICK;
-   ASSERT (tp->tv_usec < USECS_PER_SEC);
+   ASSERT(tp->tv_usec < USECS_PER_SEC);
 
    return 0;
 }
 
-int osal_usleep (uint32 usec)
+int osal_usleep(uint32 usec)
 {
    tick_t ticks = (usec / USECS_PER_TICK) + 1;
-   task_delay (ticks);
+   task_delay(ticks);
    return 0;
 }
 
@@ -41,12 +41,12 @@ int osal_gettimeofday(struct timeval *tv, struct timezone *tz)
    return gettimeofday(tv, tz);
 }
 
-ec_timet osal_current_time (void)
+ec_timet osal_current_time(void)
 {
    struct timeval current_time;
    ec_timet return_value;
 
-   gettimeofday (&current_time, 0);
+   gettimeofday(&current_time, 0);
    return_value.sec = current_time.tv_sec;
    return_value.usec = current_time.tv_usec;
    return return_value;
@@ -54,41 +54,43 @@ ec_timet osal_current_time (void)
 
 void osal_time_diff(ec_timet *start, ec_timet *end, ec_timet *diff)
 {
-   if (end->usec < start->usec) {
+   if (end->usec < start->usec)
+   {
       diff->sec = end->sec - start->sec - 1;
       diff->usec = end->usec + 1000000 - start->usec;
    }
-   else {
+   else
+   {
       diff->sec = end->sec - start->sec;
       diff->usec = end->usec - start->usec;
    }
 }
 
-void osal_timer_start (osal_timert * self, uint32 timeout_usec)
+void osal_timer_start(osal_timert *self, uint32 timeout_usec)
 {
    struct timeval start_time;
    struct timeval timeout;
    struct timeval stop_time;
 
-   gettimeofday (&start_time, 0);
+   gettimeofday(&start_time, 0);
    timeout.tv_sec = timeout_usec / USECS_PER_SEC;
    timeout.tv_usec = timeout_usec % USECS_PER_SEC;
-   timeradd (&start_time, &timeout, &stop_time);
+   timeradd(&start_time, &timeout, &stop_time);
 
    self->stop_time.sec = stop_time.tv_sec;
    self->stop_time.usec = stop_time.tv_usec;
 }
 
-boolean osal_timer_is_expired (osal_timert * self)
+boolean osal_timer_is_expired(osal_timert *self)
 {
    struct timeval current_time;
    struct timeval stop_time;
    int is_not_yet_expired;
 
-   gettimeofday (&current_time, 0);
+   gettimeofday(&current_time, 0);
    stop_time.tv_sec = self->stop_time.sec;
    stop_time.tv_usec = self->stop_time.usec;
-   is_not_yet_expired = timercmp (&current_time, &stop_time, <);
+   is_not_yet_expired = timercmp(&current_time, &stop_time, <);
 
    return is_not_yet_expired == false;
 }
@@ -105,8 +107,8 @@ void osal_free(void *ptr)
 
 int osal_thread_create(void *thandle, int stacksize, void *func, void *param)
 {
-   thandle = task_spawn ("worker", func, 6,stacksize, param);
-   if(!thandle)
+   thandle = task_spawn("worker", func, 6, stacksize, param);
+   if (!thandle)
    {
       return 0;
    }
@@ -115,8 +117,8 @@ int osal_thread_create(void *thandle, int stacksize, void *func, void *param)
 
 int osal_thread_create_rt(void *thandle, int stacksize, void *func, void *param)
 {
-   thandle = task_spawn ("worker_rt", func, 15 ,stacksize, param);
-   if(!thandle)
+   thandle = task_spawn("worker_rt", func, 15, stacksize, param);
+   if (!thandle)
    {
       return 0;
    }
@@ -130,15 +132,15 @@ void *osal_mutex_create(void)
 
 void osal_mutex_destroy(void *mutex)
 {
-   mtx_destroy (mutex);
+   mtx_destroy(mutex);
 }
 
 void osal_mutex_lock(void *mutex)
 {
-   mtx_lock (mutex);
+   mtx_lock(mutex);
 }
 
 void osal_mutex_unlock(void *mutex)
 {
-   mtx_unlock (mutex);
+   mtx_unlock(mutex);
 }
index 1f302c8b0ac3b0c535d252ce134e675612ae3a8b..a03115a3d4c8ec74fd3fa02cecab2fa1e9a1c3a8 100644 (file)
@@ -8,30 +8,32 @@
 #define _osal_defs_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 // define if debug printf is needed
-//#define EC_DEBUG
+// #define EC_DEBUG
 
 #ifdef EC_DEBUG
 #define EC_PRINT printf
 #else
-#define EC_PRINT(...) do {} while (0)
+#define EC_PRINT(...) \
+   do                 \
+   {                  \
+   } while (0)
 #endif
 
 #ifndef PACKED
 #define PACKED_BEGIN
-#define PACKED  __attribute__((__packed__))
+#define PACKED __attribute__((__packed__))
 #define PACKED_END
 #endif
 
-#define OSAL_THREAD_HANDLE task_t *
-#define OSAL_THREAD_FUNC void
+#define OSAL_THREAD_HANDLE  task_t *
+#define OSAL_THREAD_FUNC    void
 #define OSAL_THREAD_FUNC_RT void
 
-#define osal_mutext mtx_t *
+#define osal_mutext         mtx_t *
 
 #ifdef __cplusplus
 }
index b21706dcfee1308e60e7c4447c95d94950d4420c..2c615dbc410b357c878f29ad7e8f65acdddd3231 100644 (file)
 #include <vxWorks.h>
 #include <taskLib.h>
 
-
-#define  timercmp(a, b, CMP)                                \
-  (((a)->tv_sec == (b)->tv_sec) ?                           \
-   ((a)->tv_usec CMP (b)->tv_usec) :                        \
-   ((a)->tv_sec CMP (b)->tv_sec))
-#define  timeradd(a, b, result)                             \
-  do {                                                      \
-    (result)->tv_sec = (a)->tv_sec + (b)->tv_sec;           \
-    (result)->tv_usec = (a)->tv_usec + (b)->tv_usec;        \
-    if ((result)->tv_usec >= 1000000)                       \
-    {                                                       \
-       ++(result)->tv_sec;                                  \
-       (result)->tv_usec -= 1000000;                        \
-    }                                                       \
-  } while (0)
-#define  timersub(a, b, result)                             \
-  do {                                                      \
-    (result)->tv_sec = (a)->tv_sec - (b)->tv_sec;           \
-    (result)->tv_usec = (a)->tv_usec - (b)->tv_usec;        \
-    if ((result)->tv_usec < 0) {                            \
-      --(result)->tv_sec;                                   \
-      (result)->tv_usec += 1000000;                         \
-    }                                                       \
-  } while (0)
-
-#define USECS_PER_SEC     1000000
+#define timercmp(a, b, CMP) \
+   (((a)->tv_sec == (b)->tv_sec) ? ((a)->tv_usec CMP(b)->tv_usec) : ((a)->tv_sec CMP(b)->tv_sec))
+#define timeradd(a, b, result)                         \
+   do                                                  \
+   {                                                   \
+      (result)->tv_sec = (a)->tv_sec + (b)->tv_sec;    \
+      (result)->tv_usec = (a)->tv_usec + (b)->tv_usec; \
+      if ((result)->tv_usec >= 1000000)                \
+      {                                                \
+         ++(result)->tv_sec;                           \
+         (result)->tv_usec -= 1000000;                 \
+      }                                                \
+   } while (0)
+#define timersub(a, b, result)                         \
+   do                                                  \
+   {                                                   \
+      (result)->tv_sec = (a)->tv_sec - (b)->tv_sec;    \
+      (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \
+      if ((result)->tv_usec < 0)                       \
+      {                                                \
+         --(result)->tv_sec;                           \
+         (result)->tv_usec += 1000000;                 \
+      }                                                \
+   } while (0)
+
+#define USECS_PER_SEC       1000000
 
 /* OBS! config worker threads must have higher prio that task running ec_configuration */
-#define ECAT_TASK_PRIO_HIGH      20     /* Priority for high performance network task */
-#define ECAT_TASK_PRIO_LOW       80     /* Priority for high performance network task */
-#define ECAT_STACK_SIZE          10000  /* Stack size for high performance task */
-static int ecatTaskOptions       = VX_SUPERVISOR_MODE | VX_UNBREAKABLE;
-static int ecatTaskIndex         = 0;
+#define ECAT_TASK_PRIO_HIGH 20    /* Priority for high performance network task */
+#define ECAT_TASK_PRIO_LOW  80    /* Priority for high performance network task */
+#define ECAT_STACK_SIZE     10000 /* Stack size for high performance task */
+static int ecatTaskOptions = VX_SUPERVISOR_MODE | VX_UNBREAKABLE;
+static int ecatTaskIndex = 0;
 
 #ifndef use_task_delay
 #define use_task_delay 1
 #endif
 
-int osal_usleep (uint32 usec)
+int osal_usleep(uint32 usec)
 {
 #if (use_task_delay == 1)
-    /* Task delay 0 only yields */
+   /* Task delay 0 only yields */
    taskDelay(usec / 1000);
    return 0;
 #else
-    /* The suspension may be longer than requested due to the rounding up of 
-     * the request to the timer's resolution or to other scheduling activities
-     * (e.g., a higher priority task intervenes). 
-     */
+   /* The suspension may be longer than requested due to the rounding up of
+    * the request to the timer's resolution or to other scheduling activities
+    * (e.g., a higher priority task intervenes).
+    */
    struct timespec ts;
    ts.tv_sec = usec / USECS_PER_SEC;
    ts.tv_nsec = (usec % USECS_PER_SEC) * 1000;
    return nanosleep(&ts, NULL);
 #endif
-
 }
 
 int osal_gettimeofday(struct timeval *tv, struct timezone *tz)
 {
    struct timespec ts;
    int return_value;
-   (void)tz;       /* Not used */
+   (void)tz; /* Not used */
 
    /* Use clock_gettime CLOCK_MONOTONIC to a avoid NTP time adjustments */
    return_value = clock_gettime(CLOCK_MONOTONIC, &ts);
@@ -97,17 +96,19 @@ ec_timet osal_current_time(void)
 
 void osal_time_diff(ec_timet *start, ec_timet *end, ec_timet *diff)
 {
-   if (end->usec < start->usec) {
+   if (end->usec < start->usec)
+   {
       diff->sec = end->sec - start->sec - 1;
       diff->usec = end->usec + 1000000 - start->usec;
    }
-   else {
+   else
+   {
       diff->sec = end->sec - start->sec;
       diff->usec = end->usec - start->usec;
    }
 }
 
-void osal_timer_start(osal_timert * self, uint32 timeout_usec)
+void osal_timer_start(osal_timert *self, uint32 timeout_usec)
 {
    struct timeval start_time;
    struct timeval timeout;
@@ -122,7 +123,7 @@ void osal_timer_start(osal_timert * self, uint32 timeout_usec)
    self->stop_time.usec = stop_time.tv_usec;
 }
 
-boolean osal_timer_is_expired (osal_timert * self)
+boolean osal_timer_is_expired(osal_timert *self)
 {
    struct timeval current_time;
    struct timeval stop_time;
@@ -149,40 +150,39 @@ void osal_free(void *ptr)
 int osal_thread_create(void *thandle, int stacksize, void *func, void *param)
 {
    char task_name[20];
-   TASK_ID * tid = (TASK_ID *)thandle;
-   FUNCPTR  func_ptr = func;
+   TASK_ID *tid = (TASK_ID *)thandle;
+   FUNCPTR func_ptr = func;
    _Vx_usr_arg_t arg1 = (_Vx_usr_arg_t)param;
 
-   snprintf(task_name,sizeof(task_name),"worker_%d",ecatTaskIndex++);
+   snprintf(task_name, sizeof(task_name), "worker_%d", ecatTaskIndex++);
 
-   *tid = taskSpawn (task_name, ECAT_TASK_PRIO_LOW,
-                      ecatTaskOptions, ECAT_STACK_SIZE,
-                      func_ptr, arg1, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-   if(*tid == TASK_ID_ERROR) 
+   *tid = taskSpawn(task_name, ECAT_TASK_PRIO_LOW,
+                    ecatTaskOptions, ECAT_STACK_SIZE,
+                    func_ptr, arg1, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+   if (*tid == TASK_ID_ERROR)
    {
       return 0;
    }
-   
+
    return 1;
 }
 
 int osal_thread_create_rt(void *thandle, int stacksize, void *func, void *param)
 {
    char task_name[20];
-   TASK_ID * tid = (TASK_ID *)thandle; 
-   FUNCPTR  func_ptr = func;
+   TASK_ID *tid = (TASK_ID *)thandle;
+   FUNCPTR func_ptr = func;
    _Vx_usr_arg_t arg1 = (_Vx_usr_arg_t)param;
 
-   snprintf(task_name,sizeof(task_name),"worker_rt_%d",ecatTaskIndex++);
+   snprintf(task_name, sizeof(task_name), "worker_rt_%d", ecatTaskIndex++);
 
-   *tid = taskSpawn (task_name, ECAT_TASK_PRIO_HIGH,
-                      ecatTaskOptions, ECAT_STACK_SIZE,
-                      func_ptr, arg1, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+   *tid = taskSpawn(task_name, ECAT_TASK_PRIO_HIGH,
+                    ecatTaskOptions, ECAT_STACK_SIZE,
+                    func_ptr, arg1, 0, 0, 0, 0, 0, 0, 0, 0, 0);
 
-   if(*tid == TASK_ID_ERROR) 
+   if (*tid == TASK_ID_ERROR)
    {
       return 0;
    }
    return 1;
 }
-
index 8af43a2e702717fbb2b24e9457287f2815fdc3a5..46d6e98ccfdebcd1867e614de4a86c8f6b5054db 100644 (file)
@@ -8,22 +8,25 @@
 #define _osal_defs_
 
 // define if debug printf is needed
-//#define EC_DEBUG
+// #define EC_DEBUG
 
 #ifdef EC_DEBUG
 #define EC_PRINT printf
 #else
-#define EC_PRINT(...) do {} while (0)
+#define EC_PRINT(...) \
+   do                 \
+   {                  \
+   } while (0)
 #endif
 
 #ifndef PACKED
 #define PACKED_BEGIN
-#define PACKED  __attribute__((__packed__))
+#define PACKED __attribute__((__packed__))
 #define PACKED_END
 #endif
 
-#define OSAL_THREAD_HANDLE TASK_ID
-#define OSAL_THREAD_FUNC void
+#define OSAL_THREAD_HANDLE  TASK_ID
+#define OSAL_THREAD_FUNC    void
 #define OSAL_THREAD_FUNC_RT void
 
 #endif
index 35e4aafbe7cfc16fbbdd4f2df9ac5a816371bbae..a0c01ee7ecd14ceae3e785beb81d3283d55f0318 100644 (file)
 static int64_t sysfrequency;
 static double qpc2usec;
 
-#define USECS_PER_SEC     1000000
+#define USECS_PER_SEC 1000000
 
 static int osal_getrelativetime(struct timeval *tv, struct timezone *tz)
 {
    int64_t wintime, usecs;
    (void)tz;
-   if(!sysfrequency)
+   if (!sysfrequency)
    {
       timeBeginPeriod(1);
       QueryPerformanceFrequency((LARGE_INTEGER *)&sysfrequency);
@@ -43,7 +43,7 @@ int osal_gettimeofday(struct timeval *tv, struct timezone *tz)
     * following factors are required for the conversion from days to 100 ns steps:
     *
     * 86.400 seconds per day; 1.000.000 microseconds per second; 10 * 100 ns per microsecond
-   */
+    */
    int64 offset = -134774LL * 86400LL * 1000000LL * 10LL;
 
    GetSystemTimeAsFileTime(&system_time);
@@ -58,12 +58,12 @@ int osal_gettimeofday(struct timeval *tv, struct timezone *tz)
    return 1;
 }
 
-ec_timet osal_current_time (void)
+ec_timet osal_current_time(void)
 {
    struct timeval current_time;
    ec_timet return_value;
 
-   osal_gettimeofday (&current_time, 0);
+   osal_gettimeofday(&current_time, 0);
    return_value.sec = current_time.tv_sec;
    return_value.usec = current_time.tv_usec;
    return return_value;
@@ -71,41 +71,43 @@ ec_timet osal_current_time (void)
 
 void osal_time_diff(ec_timet *start, ec_timet *end, ec_timet *diff)
 {
-   if (end->usec < start->usec) {
+   if (end->usec < start->usec)
+   {
       diff->sec = end->sec - start->sec - 1;
       diff->usec = end->usec + 1000000 - start->usec;
    }
-   else {
+   else
+   {
       diff->sec = end->sec - start->sec;
       diff->usec = end->usec - start->usec;
    }
 }
 
-void osal_timer_start (osal_timert *self, uint32 timeout_usec)
+void osal_timer_start(osal_timert *self, uint32 timeout_usec)
 {
    struct timeval start_time;
    struct timeval timeout;
    struct timeval stop_time;
 
-   osal_getrelativetime (&start_time, 0);
+   osal_getrelativetime(&start_time, 0);
    timeout.tv_sec = timeout_usec / USECS_PER_SEC;
    timeout.tv_usec = timeout_usec % USECS_PER_SEC;
-   timeradd (&start_time, &timeout, &stop_time);
+   timeradd(&start_time, &timeout, &stop_time);
 
    self->stop_time.sec = stop_time.tv_sec;
    self->stop_time.usec = stop_time.tv_usec;
 }
 
-boolean osal_timer_is_expired (osal_timert *self)
+boolean osal_timer_is_expired(osal_timert *self)
 {
    struct timeval current_time;
    struct timeval stop_time;
    int is_not_yet_expired;
 
-   osal_getrelativetime (&current_time, 0);
+   osal_getrelativetime(&current_time, 0);
    stop_time.tv_sec = self->stop_time.sec;
    stop_time.tv_usec = self->stop_time.usec;
-   is_not_yet_expired = timercmp (&current_time, &stop_time, <);
+   is_not_yet_expired = timercmp(&current_time, &stop_time, <);
 
    return is_not_yet_expired == FALSE;
 }
@@ -114,11 +116,12 @@ int osal_usleep(uint32 usec)
 {
    osal_timert qtime;
    osal_timer_start(&qtime, usec);
-   if(usec >= 1000)
+   if (usec >= 1000)
    {
       SleepEx(usec / 1000, FALSE);
    }
-   while(!osal_timer_is_expired(&qtime));
+   while (!osal_timer_is_expired(&qtime))
+      ;
    return 1;
 }
 
@@ -134,8 +137,8 @@ void osal_free(void *ptr)
 
 int osal_thread_create(void *thandle, int stacksize, void *func, void *param)
 {
-   *(OSAL_THREAD_HANDLE*)thandle = CreateThread(NULL, stacksize, func, param, 0, NULL);
-   if(!thandle)
+   *(OSAL_THREAD_HANDLE *)thandle = CreateThread(NULL, stacksize, func, param, 0, NULL);
+   if (!thandle)
    {
       return 0;
    }
@@ -155,20 +158,20 @@ int osal_thread_create_rt(void *thandle, int stacksize, void *func, void *param)
 
 void *osal_mutex_create(void)
 {
-   return CreateMutex (NULL, FALSE, NULL);
+   return CreateMutex(NULL, FALSE, NULL);
 }
 
 void osal_mutex_destroy(void *mutex)
 {
-   CloseHandle (mutex);
+   CloseHandle(mutex);
 }
 
 void osal_mutex_lock(void *mutex)
 {
-   WaitForSingleObject (mutex, INFINITE);
+   WaitForSingleObject(mutex, INFINITE);
 }
 
 void osal_mutex_unlock(void *mutex)
 {
-   ReleaseMutex (mutex);
+   ReleaseMutex(mutex);
 }
index dec039a8456f3bef3887b65e1793a9d1f6b7e9c4..f33e9a08bc7b0761cbfa82d92ac5d4e9426e6778 100644 (file)
@@ -8,38 +8,40 @@
 #define _osal_defs_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 #define WIN32_LEAN_AND_MEAN // Exclude some conflicting definitions in windows header
 #include <windows.h>
 // define if debug printf is needed
-//#define EC_DEBUG
+// #define EC_DEBUG
 
 #ifdef EC_DEBUG
 #define EC_PRINT printf
 #else
-#define EC_PRINT(...) do {} while (0)
+#define EC_PRINT(...) \
+   do                 \
+   {                  \
+   } while (0)
 #endif
 
 #ifndef PACKED
 #define PACKED
 #ifdef __GNUC__
 #define PACKED_BEGIN _Pragma("pack(push,1)")
-#define PACKED_END _Pragma("pack(pop)")
+#define PACKED_END   _Pragma("pack(pop)")
 #else
 #define PACKED_BEGIN __pragma(pack(push, 1))
-#define PACKED_END __pragma(pack(pop))
+#define PACKED_END   __pragma(pack(pop))
 #endif
 
 #endif
 
-#define OSAL_THREAD_HANDLE HANDLE
-#define OSAL_THREAD_FUNC void
+#define OSAL_THREAD_HANDLE  HANDLE
+#define OSAL_THREAD_FUNC    void
 #define OSAL_THREAD_FUNC_RT void
 
-#define osal_mutext CRITICAL_SECTION
+#define osal_mutext         CRITICAL_SECTION
 
 #ifdef __cplusplus
 }
index 3fdf59f410e964323ec1d29737ba021a31fa4aa3..4e665e5521bc5e02679b27850da9788fd15cb6cd 100644 (file)
@@ -9,29 +9,32 @@
 
 /* Convenience macros for operations on timevals.
    NOTE: `timercmp' does not work for >= or <=.  */
-# define timerisset(tvp)        ((tvp)->tv_sec || (tvp)->tv_usec)
-# define timeradd(a, b, result)                                               \
-  do {                                                                        \
-    (result)->tv_sec = (a)->tv_sec + (b)->tv_sec;                             \
-    (result)->tv_usec = (a)->tv_usec + (b)->tv_usec;                          \
-    if ((result)->tv_usec >= 1000000)                                         \
-      {                                                                       \
-        ++(result)->tv_sec;                                                   \
-        (result)->tv_usec -= 1000000;                                         \
-      }                                                                       \
-  } while (0)
-# define timersub(a, b, result)                                               \
-  do {                                                                        \
-    (result)->tv_sec = (a)->tv_sec - (b)->tv_sec;                             \
-    (result)->tv_usec = (a)->tv_usec - (b)->tv_usec;                          \
-    if ((result)->tv_usec < 0) {                                              \
-      --(result)->tv_sec;                                                     \
-      (result)->tv_usec += 1000000;                                           \
-    }                                                                         \
-  } while (0)
+#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
+#define timeradd(a, b, result)                         \
+   do                                                  \
+   {                                                   \
+      (result)->tv_sec = (a)->tv_sec + (b)->tv_sec;    \
+      (result)->tv_usec = (a)->tv_usec + (b)->tv_usec; \
+      if ((result)->tv_usec >= 1000000)                \
+      {                                                \
+         ++(result)->tv_sec;                           \
+         (result)->tv_usec -= 1000000;                 \
+      }                                                \
+   } while (0)
+#define timersub(a, b, result)                         \
+   do                                                  \
+   {                                                   \
+      (result)->tv_sec = (a)->tv_sec - (b)->tv_sec;    \
+      (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \
+      if ((result)->tv_usec < 0)                       \
+      {                                                \
+         --(result)->tv_sec;                           \
+         (result)->tv_usec += 1000000;                 \
+      }                                                \
+   } while (0)
 
 struct timezone;
 // currently the tz parameter is ignored in the win32 implmentation.
-int osal_gettimeofday (struct timeval *tv, struct timezone *tz);
+int osal_gettimeofday(struct timeval *tv, struct timezone *tz);
 
 #endif
index d356ea6d3cc6a62cc1732daa56c482fceaf6b57a..5e97c3abe3ae8aeaacc29d8f73373c1bc70eaf2c 100644 (file)
 /** Redundancy modes */
 enum
 {
-       /** No redundancy, single NIC mode */
-       ECT_RED_NONE,
-       /** Double redundant NIC connection */
-       ECT_RED_DOUBLE
+   /** No redundancy, single NIC mode */
+   ECT_RED_NONE,
+   /** Double redundant NIC connection */
+   ECT_RED_DOUBLE
 };
 
-
 /** Primary source MAC address used for EtherCAT.
  * This address is not the MAC address used from the NIC.
  * EtherCAT does not care about MAC addressing, but it is used here to
  * differentiate the route the packet traverses through the EtherCAT
  * segment. This is needed to find out the packet flow in redundant
  * configurations. */
-const uint16 priMAC[3] = { 0x0201, 0x0101, 0x0101 };
+const uint16 priMAC[3] = {0x0201, 0x0101, 0x0101};
 /** Secondary source MAC address used for EtherCAT. */
-const uint16 secMAC[3] = { 0x0604, 0x0404, 0x0404 };
+const uint16 secMAC[3] = {0x0604, 0x0404, 0x0404};
 
 /** second MAC word is used for identification */
 #define RX_PRIM priMAC[1]
 /** second MAC word is used for identification */
-#define RX_SEC secMAC[1]
+#define RX_SEC  secMAC[1]
 
 void ee_port_lock(void);
 void ee_port_unlock(void);
 
 static inline void ecx_clear_rxbufstat(int *rxbufstat)
 {
-       int i;
-       for(i = 0; i < EC_MAXBUF; i++)
-               rxbufstat[i] = EC_BUF_EMPTY;
+   int i;
+   for (i = 0; i < EC_MAXBUF; i++)
+      rxbufstat[i] = EC_BUF_EMPTY;
 }
 
 /** Basic setup to connect NIC to socket.
@@ -90,48 +89,50 @@ static inline void ecx_clear_rxbufstat(int *rxbufstat)
  */
 int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
 {
-       int d;
-       struct eth_device *dev;
-       OSEE_PRINT("ecx_setupnic() searching %s...\n", ifname);
-
-       for (d = 0;; ++d) {
-               dev = eth_get_device(d);
-
-               if (dev == NULL)
-                       break; // ERROR: device not found
-
-               if (!strncmp(dev->name, ifname, MAX_DEVICE_NAME)){
-                       // Device found
-                       int i;
-
-                       eth_setup_device(d, 1, 100);
-                       port->dev_id            = d;
-
-                       port->sockhandle        = -1;
-                       port->lastidx           = 0;
-                       port->redstate          = ECT_RED_NONE;
-                       port->stack.sock        = &(port->sockhandle);
-                       port->stack.txbuf       = &(port->txbuf);
-                       port->stack.txbuflength = &(port->txbuflength);
-                       port->stack.tempbuf     = &(port->tempinbuf);
-                       port->stack.rxbuf       = &(port->rxbuf);
-                       port->stack.rxbufstat   = &(port->rxbufstat);
-                       port->stack.rxsa        = &(port->rxsa);
-                       ecx_clear_rxbufstat(&(port->rxbufstat[0]));
-
-                       /* setup ethernet headers in tx buffers so we don't have to repeat it */
-                       for (i = 0; i < EC_MAXBUF; i++)
-                       {
-                               ec_setupheader(&(port->txbuf[i]));
-                               port->rxbufstat[i] = EC_BUF_EMPTY;
-                       }
-                       ec_setupheader(&(port->txbuf2));
-
-                       break; // device found
-               }
-       }
-
-       return (dev != NULL);
+   int d;
+   struct eth_device *dev;
+   OSEE_PRINT("ecx_setupnic() searching %s...\n", ifname);
+
+   for (d = 0;; ++d)
+   {
+      dev = eth_get_device(d);
+
+      if (dev == NULL)
+         break; // ERROR: device not found
+
+      if (!strncmp(dev->name, ifname, MAX_DEVICE_NAME))
+      {
+         // Device found
+         int i;
+
+         eth_setup_device(d, 1, 100);
+         port->dev_id = d;
+
+         port->sockhandle = -1;
+         port->lastidx = 0;
+         port->redstate = ECT_RED_NONE;
+         port->stack.sock = &(port->sockhandle);
+         port->stack.txbuf = &(port->txbuf);
+         port->stack.txbuflength = &(port->txbuflength);
+         port->stack.tempbuf = &(port->tempinbuf);
+         port->stack.rxbuf = &(port->rxbuf);
+         port->stack.rxbufstat = &(port->rxbufstat);
+         port->stack.rxsa = &(port->rxsa);
+         ecx_clear_rxbufstat(&(port->rxbufstat[0]));
+
+         /* setup ethernet headers in tx buffers so we don't have to repeat it */
+         for (i = 0; i < EC_MAXBUF; i++)
+         {
+            ec_setupheader(&(port->txbuf[i]));
+            port->rxbufstat[i] = EC_BUF_EMPTY;
+         }
+         ec_setupheader(&(port->txbuf2));
+
+         break; // device found
+      }
+   }
+
+   return (dev != NULL);
 }
 
 /** Close sockets used
@@ -140,8 +141,8 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
  */
 inline int ecx_closenic(ecx_portt *port)
 {
-       // Nothing to do
-       return 0;
+   // Nothing to do
+   return 0;
 }
 
 /** Fill buffer with ethernet header structure.
@@ -151,15 +152,15 @@ inline int ecx_closenic(ecx_portt *port)
  */
 void ec_setupheader(void *p)
 {
-       ec_etherheadert *bp;
-       bp = p;
-       bp->da0 = oshw_htons(0xffff);
-       bp->da1 = oshw_htons(0xffff);
-       bp->da2 = oshw_htons(0xffff);
-       bp->sa0 = oshw_htons(priMAC[0]);
-       bp->sa1 = oshw_htons(priMAC[1]);
-       bp->sa2 = oshw_htons(priMAC[2]);
-       bp->etype = oshw_htons(ETH_P_ECAT);
+   ec_etherheadert *bp;
+   bp = p;
+   bp->da0 = oshw_htons(0xffff);
+   bp->da1 = oshw_htons(0xffff);
+   bp->da2 = oshw_htons(0xffff);
+   bp->sa0 = oshw_htons(priMAC[0]);
+   bp->sa1 = oshw_htons(priMAC[1]);
+   bp->sa2 = oshw_htons(priMAC[2]);
+   bp->etype = oshw_htons(ETH_P_ECAT);
 }
 
 /** Get new frame identifier index and allocate corresponding rx buffer.
@@ -168,31 +169,32 @@ void ec_setupheader(void *p)
  */
 uint8 ecx_getindex(ecx_portt *port)
 {
-       uint8 idx;
-       uint8 cnt = 0;
-
-       ee_port_lock();
-
-       idx = port->lastidx + 1;
-       /* index can't be larger than buffer array */
-       if (idx >= EC_MAXBUF)
-               idx = 0;
-
-       /* try to find unused index */
-       while ((port->rxbufstat[idx] != EC_BUF_EMPTY) && (cnt < EC_MAXBUF)) {
-               idx++;
-               cnt++;
-               if (idx >= EC_MAXBUF)
-                       idx = 0;
-       }
-       port->rxbufstat[idx] = EC_BUF_ALLOC;
-       if (port->redstate != ECT_RED_NONE)
-               port->redport->rxbufstat[idx] = EC_BUF_ALLOC;
-       port->lastidx = idx;
-
-       ee_port_unlock();
-
-       return idx;
+   uint8 idx;
+   uint8 cnt = 0;
+
+   ee_port_lock();
+
+   idx = port->lastidx + 1;
+   /* index can't be larger than buffer array */
+   if (idx >= EC_MAXBUF)
+      idx = 0;
+
+   /* try to find unused index */
+   while ((port->rxbufstat[idx] != EC_BUF_EMPTY) && (cnt < EC_MAXBUF))
+   {
+      idx++;
+      cnt++;
+      if (idx >= EC_MAXBUF)
+         idx = 0;
+   }
+   port->rxbufstat[idx] = EC_BUF_ALLOC;
+   if (port->redstate != ECT_RED_NONE)
+      port->redport->rxbufstat[idx] = EC_BUF_ALLOC;
+   port->lastidx = idx;
+
+   ee_port_unlock();
+
+   return idx;
 }
 
 /** Set rx buffer status.
@@ -202,9 +204,9 @@ uint8 ecx_getindex(ecx_portt *port)
  */
 void ecx_setbufstat(ecx_portt *port, uint8 idx, int bufstat)
 {
-       port->rxbufstat[idx] = bufstat;
-       if (port->redstate != ECT_RED_NONE)
-               port->redport->rxbufstat[idx] = bufstat;
+   port->rxbufstat[idx] = bufstat;
+   if (port->redstate != ECT_RED_NONE)
+      port->redport->rxbufstat[idx] = bufstat;
 }
 
 /** Transmit buffer over socket (non blocking).
@@ -215,19 +217,19 @@ void ecx_setbufstat(ecx_portt *port, uint8 idx, int bufstat)
  */
 int ecx_outframe(ecx_portt *port, uint8 idx, int stacknumber)
 {
-       int lp;
-       ec_stackT *stack;
+   int lp;
+   ec_stackT *stack;
 
-       if (!stacknumber)
-               stack = &(port->stack);
-       else
-               stack = &(port->redport->stack);
-       lp = (*stack->txbuflength)[idx];
-       (*stack->rxbufstat)[idx] = EC_BUF_TX;
+   if (!stacknumber)
+      stack = &(port->stack);
+   else
+      stack = &(port->redport->stack);
+   lp = (*stack->txbuflength)[idx];
+   (*stack->rxbufstat)[idx] = EC_BUF_TX;
 
-       eth_send_packet(port->dev_id, (*stack->txbuf)[idx], lp, 1);
+   eth_send_packet(port->dev_id, (*stack->txbuf)[idx], lp, 1);
 
-       return 1;
+   return 1;
 }
 
 /** Transmit buffer over socket (non blocking).
@@ -237,31 +239,32 @@ int ecx_outframe(ecx_portt *port, uint8 idx, int stacknumber)
  */
 int ecx_outframe_red(ecx_portt *port, uint8 idx)
 {
-       ec_comt *datagramP;
-       ec_etherheadert *ehp;
-       int rval;
-
-       ehp = (ec_etherheadert *)&(port->txbuf[idx]);
-       /* rewrite MAC source address 1 to primary */
-       ehp->sa1 = oshw_htons(priMAC[1]);
-       /* transmit over primary socket*/
-       rval = ecx_outframe(port, idx, 0);
-       if (port->redstate != ECT_RED_NONE) {
-               ee_port_lock();
-               ehp = (ec_etherheadert *)&(port->txbuf2);
-               /* use dummy frame for secondary socket transmit (BRD) */
-               datagramP = (ec_comt*)&(port->txbuf2[ETH_HEADERSIZE]);
-               /* write index to frame */
-               datagramP->index = idx;
-               /* rewrite MAC source address 1 to secondary */
-               ehp->sa1 = oshw_htons(secMAC[1]);
-               /* transmit over secondary socket */
-               port->redport->rxbufstat[idx] = EC_BUF_TX;
-               eth_send_packet(port->dev_id, &(port->txbuf2), port->txbuflength2, 1);
-               ee_port_unlock();
-       }
-
-       return rval;
+   ec_comt *datagramP;
+   ec_etherheadert *ehp;
+   int rval;
+
+   ehp = (ec_etherheadert *)&(port->txbuf[idx]);
+   /* rewrite MAC source address 1 to primary */
+   ehp->sa1 = oshw_htons(priMAC[1]);
+   /* transmit over primary socket*/
+   rval = ecx_outframe(port, idx, 0);
+   if (port->redstate != ECT_RED_NONE)
+   {
+      ee_port_lock();
+      ehp = (ec_etherheadert *)&(port->txbuf2);
+      /* use dummy frame for secondary socket transmit (BRD) */
+      datagramP = (ec_comt *)&(port->txbuf2[ETH_HEADERSIZE]);
+      /* write index to frame */
+      datagramP->index = idx;
+      /* rewrite MAC source address 1 to secondary */
+      ehp->sa1 = oshw_htons(secMAC[1]);
+      /* transmit over secondary socket */
+      port->redport->rxbufstat[idx] = EC_BUF_TX;
+      eth_send_packet(port->dev_id, &(port->txbuf2), port->txbuflength2, 1);
+      ee_port_unlock();
+   }
+
+   return rval;
 }
 
 /** Non blocking read of socket. Put frame in temporary buffer.
@@ -271,18 +274,18 @@ int ecx_outframe_red(ecx_portt *port, uint8 idx)
  */
 static int ecx_recvpkt(ecx_portt *port, int stacknumber)
 {
-       int lp, bytesrx;
-       ec_stackT *stack;
-
-       if (!stacknumber)
-               stack = &(port->stack);
-       else
-               stack = &(port->redport->stack);
-       lp = sizeof(port->tempinbuf);
-       bytesrx = eth_receive_packet(port->dev_id, (*stack->tempbuf), lp, 1, 0);
-       port->tempinbufs = bytesrx;
-
-       return (bytesrx > 0);
+   int lp, bytesrx;
+   ec_stackT *stack;
+
+   if (!stacknumber)
+      stack = &(port->stack);
+   else
+      stack = &(port->redport->stack);
+   lp = sizeof(port->tempinbuf);
+   bytesrx = eth_receive_packet(port->dev_id, (*stack->tempbuf), lp, 1, 0);
+   port->tempinbufs = bytesrx;
+
+   return (bytesrx > 0);
 }
 
 /** Non blocking receive frame function. Uses RX buffer and index to combine
@@ -303,79 +306,92 @@ static int ecx_recvpkt(ecx_portt *port, int stacknumber)
  */
 int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
 {
-       uint16  l;
-       int     rval;
-       uint8     idxf;
-       ec_etherheadert *ehp;
-       ec_comt *ecp;
-       ec_stackT *stack;
-       ec_bufT *rxbuf;
-
-       if (!stacknumber)
-               stack = &(port->stack);
-       else
-               stack = &(port->redport->stack);
-       rval = EC_NOFRAME;
-       rxbuf = &(*stack->rxbuf)[idx];
-       /* check if requested index is already in buffer ? */
-       if ((idx < EC_MAXBUF) && ((*stack->rxbufstat)[idx] == EC_BUF_RCVD)) {
-               l = (*rxbuf)[0] + ((uint16)((*rxbuf)[1] & 0x0f) << 8);
-               /* return WKC */
-               rval = ((*rxbuf)[l] + ((uint16)(*rxbuf)[l + 1] << 8));
-               /* mark as completed */
-               (*stack->rxbufstat)[idx] = EC_BUF_COMPLETE;
-       } else {
-               ee_port_lock();
-               /* non blocking call to retrieve frame from socket */
-
-
-               while (1) {
-                       if (ecx_recvpkt(port, stacknumber)) {
-                               rval = EC_OTHERFRAME;
-                               ehp =(ec_etherheadert*)(stack->tempbuf);
-                               /* check if it is an EtherCAT frame */
-                               if (ehp->etype == oshw_htons(ETH_P_ECAT)) {
-                                       ecp =(ec_comt*)(&(*stack->tempbuf)[ETH_HEADERSIZE]);
-                                       l = etohs(ecp->elength) & 0x0fff;
-                                       idxf = ecp->index;
-                                       /* found index equals requested index ? */
-                                       if (idxf == idx) {
-                                                       /* yes, put it in the buffer array (strip ethernet header) */
-                                                       memcpy(rxbuf, &(*stack->tempbuf)[ETH_HEADERSIZE], (*stack->txbuflength)[idx] - ETH_HEADERSIZE);
-                                                       /* return WKC */
-                                                       rval = ((*rxbuf)[l] + ((uint16)((*rxbuf)[l + 1]) << 8));
-                                                       /* mark as completed */
-                                                       (*stack->rxbufstat)[idx] = EC_BUF_COMPLETE;
-                                                       /* store MAC source word 1 for redundant routing info */
-                                                       (*stack->rxsa)[idx] = oshw_ntohs(ehp->sa1);
-                                               break;
-                                       } else if (idxf < EC_MAXBUF && (*stack->rxbufstat)[idxf] == EC_BUF_TX) {
-                                               rxbuf = &(*stack->rxbuf)[idxf];
-                                               /* put it in the buffer array (strip ethernet header) */
-                                               memcpy(rxbuf, &(*stack->tempbuf)[ETH_HEADERSIZE], (*stack->txbuflength)[idxf] - ETH_HEADERSIZE);
-                                               /* mark as received */
-                                               (*stack->rxbufstat)[idxf] = EC_BUF_RCVD;
-                                               (*stack->rxsa)[idxf] = oshw_ntohs(ehp->sa1);
-                                               break;
-                                               } else {
-                                               OSEE_PRINT("ecx_inframe(): WARNING: strange things happened\n");
-                                               /* strange things happened */
-                                               }
-                               } else {
-                                       OSEE_PRINT("ecx_inframe(): WARNING it is NOT an EtherCAT frame!\n");
-                               }
-                       } else {
-                               // WARNING: no messages received.
-                               break;
-                       }
-               }
-
-               ee_port_unlock();
-
-       }
-
-       /* WKC if matching frame found */
-       return rval;
+   uint16 l;
+   int rval;
+   uint8 idxf;
+   ec_etherheadert *ehp;
+   ec_comt *ecp;
+   ec_stackT *stack;
+   ec_bufT *rxbuf;
+
+   if (!stacknumber)
+      stack = &(port->stack);
+   else
+      stack = &(port->redport->stack);
+   rval = EC_NOFRAME;
+   rxbuf = &(*stack->rxbuf)[idx];
+   /* check if requested index is already in buffer ? */
+   if ((idx < EC_MAXBUF) && ((*stack->rxbufstat)[idx] == EC_BUF_RCVD))
+   {
+      l = (*rxbuf)[0] + ((uint16)((*rxbuf)[1] & 0x0f) << 8);
+      /* return WKC */
+      rval = ((*rxbuf)[l] + ((uint16)(*rxbuf)[l + 1] << 8));
+      /* mark as completed */
+      (*stack->rxbufstat)[idx] = EC_BUF_COMPLETE;
+   }
+   else
+   {
+      ee_port_lock();
+      /* non blocking call to retrieve frame from socket */
+
+      while (1)
+      {
+         if (ecx_recvpkt(port, stacknumber))
+         {
+            rval = EC_OTHERFRAME;
+            ehp = (ec_etherheadert *)(stack->tempbuf);
+            /* check if it is an EtherCAT frame */
+            if (ehp->etype == oshw_htons(ETH_P_ECAT))
+            {
+               ecp = (ec_comt *)(&(*stack->tempbuf)[ETH_HEADERSIZE]);
+               l = etohs(ecp->elength) & 0x0fff;
+               idxf = ecp->index;
+               /* found index equals requested index ? */
+               if (idxf == idx)
+               {
+                  /* yes, put it in the buffer array (strip ethernet header) */
+                  memcpy(rxbuf, &(*stack->tempbuf)[ETH_HEADERSIZE], (*stack->txbuflength)[idx] - ETH_HEADERSIZE);
+                  /* return WKC */
+                  rval = ((*rxbuf)[l] + ((uint16)((*rxbuf)[l + 1]) << 8));
+                  /* mark as completed */
+                  (*stack->rxbufstat)[idx] = EC_BUF_COMPLETE;
+                  /* store MAC source word 1 for redundant routing info */
+                  (*stack->rxsa)[idx] = oshw_ntohs(ehp->sa1);
+                  break;
+               }
+               else if (idxf < EC_MAXBUF && (*stack->rxbufstat)[idxf] == EC_BUF_TX)
+               {
+                  rxbuf = &(*stack->rxbuf)[idxf];
+                  /* put it in the buffer array (strip ethernet header) */
+                  memcpy(rxbuf, &(*stack->tempbuf)[ETH_HEADERSIZE], (*stack->txbuflength)[idxf] - ETH_HEADERSIZE);
+                  /* mark as received */
+                  (*stack->rxbufstat)[idxf] = EC_BUF_RCVD;
+                  (*stack->rxsa)[idxf] = oshw_ntohs(ehp->sa1);
+                  break;
+               }
+               else
+               {
+                  OSEE_PRINT("ecx_inframe(): WARNING: strange things happened\n");
+                  /* strange things happened */
+               }
+            }
+            else
+            {
+               OSEE_PRINT("ecx_inframe(): WARNING it is NOT an EtherCAT frame!\n");
+            }
+         }
+         else
+         {
+            // WARNING: no messages received.
+            break;
+         }
+      }
+
+      ee_port_unlock();
+   }
+
+   /* WKC if matching frame found */
+   return rval;
 }
 
 /** Blocking redundant receive frame function. If redundant mode is not active then
@@ -392,70 +408,78 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
  */
 static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
 {
-       osal_timert timer2;
-       int wkc  = EC_NOFRAME;
-       int wkc2 = EC_NOFRAME;
-       int primrx, secrx;
-
-       /* if not in redundant mode then always assume secondary is OK */
-       if (port->redstate == ECT_RED_NONE)
-               wkc2 = 0;
-       do {
-               /* only read frame if not already in */
-               if (wkc <= EC_NOFRAME)
-                       wkc  = ecx_inframe(port, idx, 0);
-               /* only try secondary if in redundant mode */
-               if (port->redstate != ECT_RED_NONE) {
-                       /* only read frame if not already in */
-                       if (wkc2 <= EC_NOFRAME)
-                               wkc2 = ecx_inframe(port, idx, 1);
-               }
-               /* wait for both frames to arrive or timeout */
-       } while (((wkc <= EC_NOFRAME) || (wkc2 <= EC_NOFRAME)) && !osal_timer_is_expired(timer));
-       /* only do redundant functions when in redundant mode */
-       if (port->redstate != ECT_RED_NONE) {
-               /* primrx if the received MAC source on primary socket */
-               primrx = 0;
-               if (wkc > EC_NOFRAME) primrx = port->rxsa[idx];
-               /* secrx if the received MAC source on psecondary socket */
-               secrx = 0;
-               if (wkc2 > EC_NOFRAME) secrx = port->redport->rxsa[idx];
-
-               /* primary socket got secondary frame and secondary socket got primary frame */
-               /* normal situation in redundant mode */
-               if ( ((primrx == RX_SEC) && (secrx == RX_PRIM)) ) {
-                       /* copy secondary buffer to primary */
-                       memcpy(&(port->rxbuf[idx]), &(port->redport->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
-                       wkc = wkc2;
-               }
-               /* primary socket got nothing or primary frame, and secondary socket got secondary frame */
-               /* we need to resend TX packet */
-               if ( ((primrx == 0) && (secrx == RX_SEC)) ||
-                               ((primrx == RX_PRIM) && (secrx == RX_SEC)) ) {
-                       /* If both primary and secondary have partial connection retransmit the primary received
-                        * frame over the secondary socket. The result from the secondary received frame is a combined
-                        * frame that traversed all slaves in standard order. */
-                       if ( (primrx == RX_PRIM) && (secrx == RX_SEC) ) {
-                               /* copy primary rx to tx buffer */
-                               memcpy(&(port->txbuf[idx][ETH_HEADERSIZE]), &(port->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
-                       }
-                       osal_timer_start (&timer2, EC_TIMEOUTRET);
-                       /* resend secondary tx */
-                       ecx_outframe(port, idx, 1);
-                       do {
-                               /* retrieve frame */
-                               wkc2 = ecx_inframe(port, idx, 1);
-                       } while ((wkc2 <= EC_NOFRAME) && !osal_timer_is_expired(&timer2));
-                       if (wkc2 > EC_NOFRAME) {
-                               /* copy secondary result to primary rx buffer */
-                               memcpy(&(port->rxbuf[idx]), &(port->redport->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
-                               wkc = wkc2;
-                       }
-               }
-       }
-
-       /* return WKC or EC_NOFRAME */
-       return wkc;
+   osal_timert timer2;
+   int wkc = EC_NOFRAME;
+   int wkc2 = EC_NOFRAME;
+   int primrx, secrx;
+
+   /* if not in redundant mode then always assume secondary is OK */
+   if (port->redstate == ECT_RED_NONE)
+      wkc2 = 0;
+   do
+   {
+      /* only read frame if not already in */
+      if (wkc <= EC_NOFRAME)
+         wkc = ecx_inframe(port, idx, 0);
+      /* only try secondary if in redundant mode */
+      if (port->redstate != ECT_RED_NONE)
+      {
+         /* only read frame if not already in */
+         if (wkc2 <= EC_NOFRAME)
+            wkc2 = ecx_inframe(port, idx, 1);
+      }
+      /* wait for both frames to arrive or timeout */
+   } while (((wkc <= EC_NOFRAME) || (wkc2 <= EC_NOFRAME)) && !osal_timer_is_expired(timer));
+   /* only do redundant functions when in redundant mode */
+   if (port->redstate != ECT_RED_NONE)
+   {
+      /* primrx if the received MAC source on primary socket */
+      primrx = 0;
+      if (wkc > EC_NOFRAME) primrx = port->rxsa[idx];
+      /* secrx if the received MAC source on psecondary socket */
+      secrx = 0;
+      if (wkc2 > EC_NOFRAME) secrx = port->redport->rxsa[idx];
+
+      /* primary socket got secondary frame and secondary socket got primary frame */
+      /* normal situation in redundant mode */
+      if (((primrx == RX_SEC) && (secrx == RX_PRIM)))
+      {
+         /* copy secondary buffer to primary */
+         memcpy(&(port->rxbuf[idx]), &(port->redport->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
+         wkc = wkc2;
+      }
+      /* primary socket got nothing or primary frame, and secondary socket got secondary frame */
+      /* we need to resend TX packet */
+      if (((primrx == 0) && (secrx == RX_SEC)) ||
+          ((primrx == RX_PRIM) && (secrx == RX_SEC)))
+      {
+         /* If both primary and secondary have partial connection retransmit the primary received
+          * frame over the secondary socket. The result from the secondary received frame is a combined
+          * frame that traversed all slaves in standard order. */
+         if ((primrx == RX_PRIM) && (secrx == RX_SEC))
+         {
+            /* copy primary rx to tx buffer */
+            memcpy(&(port->txbuf[idx][ETH_HEADERSIZE]), &(port->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
+         }
+         osal_timer_start(&timer2, EC_TIMEOUTRET);
+         /* resend secondary tx */
+         ecx_outframe(port, idx, 1);
+         do
+         {
+            /* retrieve frame */
+            wkc2 = ecx_inframe(port, idx, 1);
+         } while ((wkc2 <= EC_NOFRAME) && !osal_timer_is_expired(&timer2));
+         if (wkc2 > EC_NOFRAME)
+         {
+            /* copy secondary result to primary rx buffer */
+            memcpy(&(port->rxbuf[idx]), &(port->redport->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
+            wkc = wkc2;
+         }
+      }
+   }
+
+   /* return WKC or EC_NOFRAME */
+   return wkc;
 }
 
 /** Blocking receive frame function. Calls ec_waitinframe_red().
@@ -467,13 +491,13 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
  */
 int ecx_waitinframe(ecx_portt *port, uint8 idx, int timeout)
 {
-       int wkc;
-       osal_timert timer;
+   int wkc;
+   osal_timert timer;
 
-       osal_timer_start (&timer, timeout);
-       wkc = ecx_waitinframe_red(port, idx, &timer);
+   osal_timer_start(&timer, timeout);
+   wkc = ecx_waitinframe_red(port, idx, &timer);
 
-       return wkc;
+   return wkc;
 }
 
 /** Blocking send and receive frame function. Used for non processdata frames.
@@ -490,25 +514,28 @@ int ecx_waitinframe(ecx_portt *port, uint8 idx, int timeout)
  */
 int ecx_srconfirm(ecx_portt *port, uint8 idx, int timeout)
 {
-       int wkc = EC_NOFRAME;
-       osal_timert timer1, timer2;
-
-       osal_timer_start (&timer1, timeout);
-       do  {
-               /* tx frame on primary and if in redundant mode a dummy on secondary */
-               ecx_outframe_red(port, idx);
-               if (timeout < EC_TIMEOUTRET) {
-                       osal_timer_start (&timer2, timeout);
-               } else {
-                       /* normally use partial timeout for rx */
-                       osal_timer_start (&timer2, EC_TIMEOUTRET);
-               }
-               /* get frame from primary or if in redundant mode possibly
-                  from secondary */
-               wkc = ecx_waitinframe_red(port, idx, &timer2);
-               /* wait for answer with WKC>=0 or otherwise retry until timeout */
-       } while ((wkc <= EC_NOFRAME) && !osal_timer_is_expired (&timer1));
-
-
-       return wkc;
+   int wkc = EC_NOFRAME;
+   osal_timert timer1, timer2;
+
+   osal_timer_start(&timer1, timeout);
+   do
+   {
+      /* tx frame on primary and if in redundant mode a dummy on secondary */
+      ecx_outframe_red(port, idx);
+      if (timeout < EC_TIMEOUTRET)
+      {
+         osal_timer_start(&timer2, timeout);
+      }
+      else
+      {
+         /* normally use partial timeout for rx */
+         osal_timer_start(&timer2, EC_TIMEOUTRET);
+      }
+      /* get frame from primary or if in redundant mode possibly
+         from secondary */
+      wkc = ecx_waitinframe_red(port, idx, &timer2);
+      /* wait for answer with WKC>=0 or otherwise retry until timeout */
+   } while ((wkc <= EC_NOFRAME) && !osal_timer_is_expired(&timer1));
+
+   return wkc;
 }
index 22042a8902f656e4fe8e17e0b1ecece4805824e4..09520297753332c50e1aea0b6d081a5af78c94f1 100644 (file)
 #define _nicdrvh_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 typedef struct
 {
-       /** socket connection used */
-       int         *sock;
-       /** tx buffer */
-       ec_bufT     (*txbuf)[EC_MAXBUF];
-       /** tx buffer lengths */
-       int         (*txbuflength)[EC_MAXBUF];
-       /** temporary receive buffer */
-       ec_bufT     *tempbuf;
-       /** rx buffers */
-       ec_bufT     (*rxbuf)[EC_MAXBUF];
-       /** rx buffer status fields */
-       int         (*rxbufstat)[EC_MAXBUF];
-       /** received MAC source address (middle word) */
-       int         (*rxsa)[EC_MAXBUF];
+   /** socket connection used */
+   int *sock;
+   /** tx buffer */
+   ec_bufT (*txbuf)[EC_MAXBUF];
+   /** tx buffer lengths */
+   int (*txbuflength)[EC_MAXBUF];
+   /** temporary receive buffer */
+   ec_bufT *tempbuf;
+   /** rx buffers */
+   ec_bufT (*rxbuf)[EC_MAXBUF];
+   /** rx buffer status fields */
+   int (*rxbufstat)[EC_MAXBUF];
+   /** received MAC source address (middle word) */
+   int (*rxsa)[EC_MAXBUF];
 } ec_stackT;
 
 /** pointer structure to buffers for redundant port */
 typedef struct
 {
-       ec_stackT   stack;
-       int         sockhandle;
-       /** rx buffers */
-       ec_bufT rxbuf[EC_MAXBUF];
-       /** rx buffer status */
-       int rxbufstat[EC_MAXBUF];
-       /** rx MAC source address */
-       int rxsa[EC_MAXBUF];
-       /** temporary rx buffer */
-       ec_bufT tempinbuf;
+   ec_stackT stack;
+   int sockhandle;
+   /** rx buffers */
+   ec_bufT rxbuf[EC_MAXBUF];
+   /** rx buffer status */
+   int rxbufstat[EC_MAXBUF];
+   /** rx MAC source address */
+   int rxsa[EC_MAXBUF];
+   /** temporary rx buffer */
+   ec_bufT tempinbuf;
 } ecx_redportt;
 
 /** pointer structure to buffers, vars and mutexes for port instantiation */
 typedef struct
 {
-       ec_stackT   stack;
-       int         sockhandle;
-       /** rx buffers */
-       ec_bufT rxbuf[EC_MAXBUF];
-       /** rx buffer status */
-       int rxbufstat[EC_MAXBUF];
-       /** rx MAC source address */
-       int rxsa[EC_MAXBUF];
-       /** temporary rx buffer */
-       ec_bufT tempinbuf;
-       /** temporary rx buffer status */
-       int tempinbufs;
-       /** transmit buffers */
-       ec_bufT txbuf[EC_MAXBUF];
-       /** transmit buffer lengths */
-       int txbuflength[EC_MAXBUF];
-       /** temporary tx buffer */
-       ec_bufT txbuf2;
-       /** temporary tx buffer length */
-       int txbuflength2;
-       /** last used frame index */
-       uint8 lastidx;
-       /** current redundancy state */
-       int redstate;
-       /** pointer to redundancy port and buffers */
-       ecx_redportt *redport;
+   ec_stackT stack;
+   int sockhandle;
+   /** rx buffers */
+   ec_bufT rxbuf[EC_MAXBUF];
+   /** rx buffer status */
+   int rxbufstat[EC_MAXBUF];
+   /** rx MAC source address */
+   int rxsa[EC_MAXBUF];
+   /** temporary rx buffer */
+   ec_bufT tempinbuf;
+   /** temporary rx buffer status */
+   int tempinbufs;
+   /** transmit buffers */
+   ec_bufT txbuf[EC_MAXBUF];
+   /** transmit buffer lengths */
+   int txbuflength[EC_MAXBUF];
+   /** temporary tx buffer */
+   ec_bufT txbuf2;
+   /** temporary tx buffer length */
+   int txbuflength2;
+   /** last used frame index */
+   uint8 lastidx;
+   /** current redundancy state */
+   int redstate;
+   /** pointer to redundancy port and buffers */
+   ecx_redportt *redport;
 
-       /** Device id in the device pool */
-       int dev_id;
+   /** Device id in the device pool */
+   int dev_id;
 
-       // TODO: add mutex support
+   // TODO: add mutex support
 } ecx_portt;
 
 extern const uint16 priMAC[3];
@@ -97,7 +96,7 @@ uint8 ecx_getindex(ecx_portt *port);
 int ecx_outframe(ecx_portt *port, uint8 idx, int sock);
 int ecx_outframe_red(ecx_portt *port, uint8 idx);
 int ecx_waitinframe(ecx_portt *port, uint8 idx, int timeout);
-int ecx_srconfirm(ecx_portt *port, uint8 idx,int timeout);
+int ecx_srconfirm(ecx_portt *port, uint8 idx, int timeout);
 
 int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber);
 
index 49c11520f12cdd7725cf2a623e3a0b6860293dcc..848b58d9c59f20c4259666771c22cb634ab83b99 100644 (file)
@@ -21,7 +21,7 @@
 #define __ntohs(x) be16toh(x)
 #endif
 
-ec_adaptert    adapters [DEVS_MAX_NB];
+ec_adaptert adapters[DEVS_MAX_NB];
 
 /**
  * Host to Network byte order (i.e. to big endian).
@@ -31,8 +31,8 @@ ec_adaptert   adapters [DEVS_MAX_NB];
  */
 inline uint16 oshw_htons(uint16 host)
 {
-       // __htons() is provided by the bare-metal x86 compiler
-       return __htons(host);
+   // __htons() is provided by the bare-metal x86 compiler
+   return __htons(host);
 }
 
 /**
@@ -43,29 +43,32 @@ inline uint16 oshw_htons(uint16 host)
  */
 inline uint16 oshw_ntohs(uint16 network)
 {
-       // __ntohs() is provided by the bare-metal x86 compiler
-       return __ntohs(network);
+   // __ntohs() is provided by the bare-metal x86 compiler
+   return __ntohs(network);
 }
 
 /** Create list over available network adapters.
  * @return First element in linked list of adapters
  */
-ec_adaptertoshw_find_adapters(void)
+ec_adaptert *oshw_find_adapters(void)
 {
-       ec_adaptert *ret = NULL;
-       if (eth_discover_devices() >= 0) {
-               for (int i = 0;; ++i) {
-                       struct eth_device *dev = eth_get_device(i);
-                       if (dev == NULL) {
-                               adapters[i-1].next = NULL;
-                               break;
-                       }
-                       strncpy(adapters[i].name, dev->name, MAX_DEVICE_NAME);
-                       adapters[i].next = &adapters[i+1];
-               }
-               ret = &(adapters[0]);
-       }
-       return ret;
+   ec_adaptert *ret = NULL;
+   if (eth_discover_devices() >= 0)
+   {
+      for (int i = 0;; ++i)
+      {
+         struct eth_device *dev = eth_get_device(i);
+         if (dev == NULL)
+         {
+            adapters[i - 1].next = NULL;
+            break;
+         }
+         strncpy(adapters[i].name, dev->name, MAX_DEVICE_NAME);
+         adapters[i].next = &adapters[i + 1];
+      }
+      ret = &(adapters[0]);
+   }
+   return ret;
 }
 
 /** Free memory allocated memory used by adapter collection.
@@ -77,4 +80,3 @@ void oshw_free_adapters(ec_adaptert *adapter)
 }
 
 extern int ec_slavecount;
-
index a1ed5d53dbcf506807c86c91734c6b686cd6a87c..350ef51176535872e868677fa3a69c46ff2b34d1 100644 (file)
@@ -21,8 +21,8 @@ extern "C" {
 
 uint16 oshw_htons(uint16 hostshort);
 uint16 oshw_ntohs(uint16 networkshort);
-ec_adaptertoshw_find_adapters(void);
-void oshw_free_adapters(ec_adaptert * adapter);
+ec_adaptert *oshw_find_adapters(void);
+void oshw_free_adapters(ec_adaptert *adapter);
 
 #ifdef __cplusplus
 }
index a2e5a9d7dccf4960885068516662f48b44c654f0..26b37a6a3edaf4277cceaf35c750ebfa6a0f7e7e 100644 (file)
@@ -50,29 +50,28 @@ enum
    ECT_RED_DOUBLE
 };
 
-
 /** Primary source MAC address used for EtherCAT.
  * This address is not the MAC address used from the NIC.
  * EtherCAT does not care about MAC addressing, but it is used here to
  * differentiate the route the packet traverses through the EtherCAT
  * segment. This is needed to find out the packet flow in redundant
  * configurations. */
-const uint16 priMAC[3] = { 0x0101, 0x0101, 0x0101 };
+const uint16 priMAC[3] = {0x0101, 0x0101, 0x0101};
 /** Secondary source MAC address used for EtherCAT. */
-const uint16 secMAC[3] = { 0x0404, 0x0404, 0x0404 };
+const uint16 secMAC[3] = {0x0404, 0x0404, 0x0404};
 
 /** second MAC word is used for identification */
-#define RX_PRIM priMAC[1]
+#define RX_PRIM          priMAC[1]
 /** second MAC word is used for identification */
-#define RX_SEC secMAC[1]
+#define RX_SEC           secMAC[1]
 
-#define ECAT_PRINT_INFO    printf
-#define ECAT_PRINT_WARN    printf
-#define ECAT_PRINT_ERROR   printf
+#define ECAT_PRINT_INFO  printf
+#define ECAT_PRINT_WARN  printf
+#define ECAT_PRINT_ERROR printf
 
 /* HPE port settings */
 const unsigned long interrupt_mode = NO_INTERRUPT;
-const unsigned long phy_settings   = SPEED_100 | DUPLEX_FULL;
+const unsigned long phy_settings = SPEED_100 | DUPLEX_FULL;
 
 /** Basic setup to connect NIC to socket.
  * @param[in] ifname      = Name of NIC device, f.e. "eth0"
@@ -88,19 +87,26 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
    int i;
    int dontWaitForLink = 0;
    int result = 1;
-   HPE_CONFIG_OPTIONS conf = { 0, 0, NULL};
+   HPE_CONFIG_OPTIONS conf = {0, 0, NULL};
 
    status = hpeOpen(ifname, phy_settings, interrupt_mode, &(port->handle));
    if (status != E_OK)
    {
       ECAT_PRINT_ERROR("hpeOpen failed with status %04x ", status);
-      if(status == E_EXIST) ECAT_PRINT_ERROR("E_EXIST\n");
-      else if(status == E_STATE) ECAT_PRINT_ERROR("E_STATE\n");
-      else if(status == E_PARAM) ECAT_PRINT_ERROR("E_PARAM\n");
-      else if(status == E_INVALID_ADDR) ECAT_PRINT_ERROR("E_INVALID_ADDR\n");
-      else if(status == E_IO) ECAT_PRINT_ERROR("E_IO\n");
-      else if(status == E_TIME) ECAT_PRINT_ERROR("E_TIME\n");
-      else ECAT_PRINT_ERROR("UNKNOWN\n");
+      if (status == E_EXIST)
+         ECAT_PRINT_ERROR("E_EXIST\n");
+      else if (status == E_STATE)
+         ECAT_PRINT_ERROR("E_STATE\n");
+      else if (status == E_PARAM)
+         ECAT_PRINT_ERROR("E_PARAM\n");
+      else if (status == E_INVALID_ADDR)
+         ECAT_PRINT_ERROR("E_INVALID_ADDR\n");
+      else if (status == E_IO)
+         ECAT_PRINT_ERROR("E_IO\n");
+      else if (status == E_TIME)
+         ECAT_PRINT_ERROR("E_TIME\n");
+      else
+         ECAT_PRINT_ERROR("UNKNOWN\n");
       result = 0;
       goto end;
    }
@@ -119,28 +125,29 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
    time(&now);
    do
    {
-          status = hpeGetMediaStatus(port->handle, &mstat);
-       if (status != E_OK)
-       {
-           ECAT_PRINT_ERROR("hpeGetMediaStatus failed with status %04x\n", status);
-           result = 0;
-           goto end;
-       }
-       if (mstat.media_speed == SPEED_NONE)
-       {
-           RtSleepEx(1000);
-           time(&t);
-       }
-   } while (mstat.media_speed == SPEED_NONE && t < (now+10));
-
-   if (((mstat.media_speed & phy_settings) == 0) || ((mstat.media_duplex & phy_settings) == 0)) {
+      status = hpeGetMediaStatus(port->handle, &mstat);
+      if (status != E_OK)
+      {
+         ECAT_PRINT_ERROR("hpeGetMediaStatus failed with status %04x\n", status);
+         result = 0;
+         goto end;
+      }
+      if (mstat.media_speed == SPEED_NONE)
+      {
+         RtSleepEx(1000);
+         time(&t);
+      }
+   } while (mstat.media_speed == SPEED_NONE && t < (now + 10));
+
+   if (((mstat.media_speed & phy_settings) == 0) || ((mstat.media_duplex & phy_settings) == 0))
+   {
       ECAT_PRINT_ERROR("Media not connected as requested: speed=%u, duplex=%u\n",
-              mstat.media_speed, mstat.media_duplex);
+                       mstat.media_speed, mstat.media_duplex);
       result = 0;
       goto end;
    }
 
-   status= hpeGetMacAddress(port->handle, mac);
+   status = hpeGetMacAddress(port->handle, mac);
    if (status != E_OK)
    {
       ECAT_PRINT_ERROR("hpeGetMacAddress failed with status %04x\n", status);
@@ -149,7 +156,7 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
    }
 
    /* allocate 2 receive buffers and attach them */
-   status  = hpeAllocateReceiveBufferSet(port->handle, &(port->rx_buffers), EC_MAXBUF, EC_BUFSIZE);
+   status = hpeAllocateReceiveBufferSet(port->handle, &(port->rx_buffers), EC_MAXBUF, EC_BUFSIZE);
    if (status != E_OK)
    {
       ECAT_PRINT_ERROR("hpeAllocateReceiveBufferSet failed with status %04x\n", status);
@@ -178,16 +185,16 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
    {
       port->redstate = ECT_RED_NONE;
       /* Init regions */
-      port->getindex_region = CreateRtRegion (PRIORITY_QUEUING);
-      port->rx_region = CreateRtRegion (PRIORITY_QUEUING);
-      port->tx_region = CreateRtRegion (PRIORITY_QUEUING);
+      port->getindex_region = CreateRtRegion(PRIORITY_QUEUING);
+      port->rx_region = CreateRtRegion(PRIORITY_QUEUING);
+      port->tx_region = CreateRtRegion(PRIORITY_QUEUING);
       port->lastidx = 0;
-      port->stack.txbuf       = &(port->txbuf);
+      port->stack.txbuf = &(port->txbuf);
       port->stack.txbuflength = &(port->txbuflength);
-      port->stack.tempbuf     = &(port->tempinbuf);
-      port->stack.rxbuf       = &(port->rxbuf);
-      port->stack.rxbufstat   = &(port->rxbufstat);
-      port->stack.rxsa        = &(port->rxsa);
+      port->stack.tempbuf = &(port->tempinbuf);
+      port->stack.rxbuf = &(port->rxbuf);
+      port->stack.rxbufstat = &(port->rxbufstat);
+      port->stack.rxsa = &(port->rxsa);
    }
 
    /* setup ethernet headers in tx buffers so we don't have to repeat it */
@@ -223,7 +230,7 @@ int ecx_closenic(ecx_portt *port)
       for (i = 0; i < EC_MAXBUF; i++)
       {
          FreeRtMemory(port->tx_buffers[i]);
-                port->tx_buffers[i] = NULL;
+         port->tx_buffers[i] = NULL;
       }
    }
    if (port->rx_buffers)
@@ -231,7 +238,7 @@ int ecx_closenic(ecx_portt *port)
       hpeFreeReceiveBufferSet(port->handle, &(port->rx_buffers));
    }
 
-   status= hpeClose(port->handle);
+   status = hpeClose(port->handle);
    if (status != E_OK)
    {
       ECAT_PRINT_ERROR("hpeClose failed with status %04x\n", status);
@@ -285,7 +292,7 @@ uint8 ecx_getindex(ecx_portt *port)
       }
    }
    port->rxbufstat[idx] = EC_BUF_ALLOC;
-   if ( port->redstate != ECT_RED_NONE)
+   if (port->redstate != ECT_RED_NONE)
    {
       port->redport->rxbufstat[idx] = EC_BUF_ALLOC;
    }
@@ -338,23 +345,23 @@ int ecx_outframe(ecx_portt *port, uint8 idx, int stacknumber)
    // wait for transmit to complete
    do
    {
-     result = hpeGetTransmitterState(port->handle, &txstate) == E_OK && txstate == HPE_TXBUSY;
+      result = hpeGetTransmitterState(port->handle, &txstate) == E_OK && txstate == HPE_TXBUSY;
    } while (result && retries-- > 0);
 
    if (result)
    {
-     result = -1;
-     goto end;
+      result = -1;
+      goto end;
    }
 
-   log_RT_event('S',(WORD)2);
+   log_RT_event('S', (WORD)2);
    status = hpeAttachTransmitBufferSet(port->handle, port->tx_buffers[idx]);
    if (status != E_OK)
    {
       result = -2;
       goto end;
    }
-   log_RT_event('S',(WORD)3);
+   log_RT_event('S', (WORD)3);
 
    (*stack->rxbufstat)[idx] = EC_BUF_TX;
    status = hpeStartTransmitter(port->handle);
@@ -365,7 +372,7 @@ int ecx_outframe(ecx_portt *port, uint8 idx, int stacknumber)
       goto end;
    }
 
-   log_RT_event('S',(WORD)4);
+   log_RT_event('S', (WORD)4);
    result = lp;
 
 end:
@@ -393,15 +400,15 @@ int ecx_outframe_red(ecx_portt *port, uint8 idx)
    {
       ehp = (ec_etherheadert *)&(port->txbuf2);
       /* use dummy frame for secondary socket transmit (BRD) */
-      datagramP = (ec_comt*)&(port->txbuf2)[ETH_HEADERSIZE];
+      datagramP = (ec_comt *)&(port->txbuf2)[ETH_HEADERSIZE];
       /* write index to frame */
       datagramP->index = idx;
       /* rewrite MAC source address 1 to secondary */
       ehp->sa1 = oshw_htons(secMAC[1]);
       /* transmit over secondary socket */
-      //send(sockhandle2, &ec_txbuf2, ec_txbuflength2 , 0);
-      // OBS! redundant not ACTIVE for BFIN, just added to compile
-      //ASSERT (0);
+      // send(sockhandle2, &ec_txbuf2, ec_txbuflength2 , 0);
+      //  OBS! redundant not ACTIVE for BFIN, just added to compile
+      // ASSERT (0);
       hpeAttachTransmitBufferSet(port->redport->handle, port->tx_buffers[idx]);
       port->redport->rxbufstat[idx] = EC_BUF_TX;
       status = hpeStartTransmitter(port->redport->handle);
@@ -434,17 +441,17 @@ static int ecx_recvpkt(ecx_portt *port, int stacknumber)
       stack = &(port->redport->stack);
    }
 
-   log_RT_event('R',(WORD)2);
+   log_RT_event('R', (WORD)2);
 
    status = hpeGetReceiveBuffer(port->handle, &rxbuffer);
    if (status == E_OK)
    {
-       memcpy(stack->tempbuf,rxbuffer->ptr, rxbuffer->used);
-       bytesrx = rxbuffer->used;
-       port->tempinbufs = bytesrx;
-       // TODO case no interrupt
+      memcpy(stack->tempbuf, rxbuffer->ptr, rxbuffer->used);
+      bytesrx = rxbuffer->used;
+      port->tempinbufs = bytesrx;
+      // TODO case no interrupt
    }
-   log_RT_event('R',(WORD)3);
+   log_RT_event('R', (WORD)3);
 
    return (bytesrx > 0);
 }
@@ -466,9 +473,9 @@ static int ecx_recvpkt(ecx_portt *port, int stacknumber)
  */
 int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
 {
-   uint16  l;
-   int     rval;
-   uint8   idxf;
+   uint16 l;
+   int rval;
+   uint8 idxf;
    ec_etherheadert *ehp;
    ec_comt *ecp;
    ec_stackT *stack;
@@ -486,7 +493,7 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
    rval = EC_NOFRAME;
    rxbuf = &(*stack->rxbuf)[idx];
    /* check if requested index is already in buffer ? */
-   if ((idx < EC_MAXBUF) && ( (*stack->rxbufstat)[idx] == EC_BUF_RCVD))
+   if ((idx < EC_MAXBUF) && ((*stack->rxbufstat)[idx] == EC_BUF_RCVD))
    {
       l = (*rxbuf)[0] + ((uint16)((*rxbuf)[1] & 0x0f) << 8);
       /* return WKC */
@@ -501,11 +508,11 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
       if (ecx_recvpkt(port, stacknumber))
       {
          rval = EC_OTHERFRAME;
-         ehp = (ec_etherheadert*)(stack->tempbuf);
+         ehp = (ec_etherheadert *)(stack->tempbuf);
          /* check if it is an EtherCAT frame */
          if (ehp->etype == oshw_htons(ETH_P_ECAT))
          {
-            ecp =(ec_comt*)(&(*stack->tempbuf)[ETH_HEADERSIZE]);
+            ecp = (ec_comt *)(&(*stack->tempbuf)[ETH_HEADERSIZE]);
             l = etohs(ecp->elength) & 0x0fff;
             idxf = ecp->index;
             /* found index equals requested index ? */
@@ -556,7 +563,7 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
 static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
 {
    osal_timert timer2;
-   int wkc  = EC_NOFRAME;
+   int wkc = EC_NOFRAME;
    int wkc2 = EC_NOFRAME;
    int primrx, secrx;
 
@@ -569,7 +576,7 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
    {
       /* only read frame if not already in */
       if (wkc <= EC_NOFRAME)
-         wkc  = ecx_inframe(port, idx, 0);
+         wkc = ecx_inframe(port, idx, 0);
       /* only try secondary if in redundant mode */
       if (port->redstate != ECT_RED_NONE)
       {
@@ -579,7 +586,7 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
             wkc2 = ecx_inframe(port, idx, 1);
          }
       }
-   /* wait for both frames to arrive or timeout */
+      /* wait for both frames to arrive or timeout */
    } while (((wkc <= EC_NOFRAME) || (wkc2 <= EC_NOFRAME)) && !osal_timer_is_expired(timer));
    /* only do redundant functions when in redundant mode */
    if (port->redstate != ECT_RED_NONE)
@@ -593,7 +600,7 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
 
       /* primary socket got secondary frame and secondary socket got primary frame */
       /* normal situation in redundant mode */
-      if ( ((primrx == RX_SEC) && (secrx == RX_PRIM)) )
+      if (((primrx == RX_SEC) && (secrx == RX_PRIM)))
       {
          /* copy secondary buffer to primary */
          memcpy(&(port->rxbuf[idx]), &(port->redport->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
@@ -601,20 +608,20 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
       }
       /* primary socket got nothing or primary frame, and secondary socket got secondary frame */
       /* we need to resend TX packet */
-      if ( ((primrx == 0) && (secrx == RX_SEC)) ||
-           ((primrx == RX_PRIM) && (secrx == RX_SEC)) )
+      if (((primrx == 0) && (secrx == RX_SEC)) ||
+          ((primrx == RX_PRIM) && (secrx == RX_SEC)))
       {
          /* If both primary and secondary have partial connection retransmit the primary received
           * frame over the secondary socket. The result from the secondary received frame is a combined
           * frame that traversed all slaves in standard order. */
-         if ( (primrx == RX_PRIM) && (secrx == RX_SEC) )
+         if ((primrx == RX_PRIM) && (secrx == RX_SEC))
          {
             /* copy primary rx to tx buffer */
             memcpy(&(port->txbuf[idx][ETH_HEADERSIZE]), &(port->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
          }
-         osal_timer_start (&timer2, EC_TIMEOUTRET);
+         osal_timer_start(&timer2, EC_TIMEOUTRET);
          /* resend secondary tx */
-         ecx_outframe(port,idx,1);
+         ecx_outframe(port, idx, 1);
          do
          {
             /* retrieve frame */
@@ -650,13 +657,13 @@ int ecx_waitinframe(ecx_portt *port, uint8 idx, int timeout)
       /* Allow us to consume MAX buffer number of frames */
       do
       {
-         wkc  = ecx_inframe(port, idx, 0);
+         wkc = ecx_inframe(port, idx, 0);
          loop_cnt++;
       } while (wkc <= EC_NOFRAME && (loop_cnt <= EC_MAXBUF));
    }
    else
    {
-      osal_timer_start (&timer, timeout);
+      osal_timer_start(&timer, timeout);
       wkc = ecx_waitinframe_red(port, idx, &timer);
    }
 
@@ -679,7 +686,7 @@ int ecx_srconfirm(ecx_portt *port, uint8 idx, int timeout)
    int wkc = EC_NOFRAME;
    osal_timert timer1;
 
-   osal_timer_start (&timer1, timeout);
+   osal_timer_start(&timer1, timeout);
    /* tx frame on primary and if in redundant mode a dummy on secondary */
    ecx_outframe_red(port, idx);
    wkc = ecx_waitinframe_red(port, idx, &timer1);
index 22130eabb42c47974167a87d74bb684897954bdf..f8b52a5f10b3fe7de7060e59769c1c0e72f24337 100644 (file)
 typedef struct
 {
    /** socket connection used */
-   int         *sock;
+   int *sock;
    /** tx buffer */
-   ec_bufT     (*txbuf)[EC_MAXBUF];
+   ec_bufT (*txbuf)[EC_MAXBUF];
    /** tx buffer lengths */
-   int         (*txbuflength)[EC_MAXBUF];
+   int (*txbuflength)[EC_MAXBUF];
    /** temporary receive buffer */
-   ec_bufT     *tempbuf;
+   ec_bufT *tempbuf;
    /** rx buffers */
-   ec_bufT     (*rxbuf)[EC_MAXBUF];
+   ec_bufT (*rxbuf)[EC_MAXBUF];
    /** rx buffer status fields */
-   int         (*rxbufstat)[EC_MAXBUF];
+   int (*rxbufstat)[EC_MAXBUF];
    /** received MAC source address (middle word) */
-   int         (*rxsa)[EC_MAXBUF];
+   int (*rxsa)[EC_MAXBUF];
 } ec_stackT;
 
 typedef struct
 {
-   ec_stackT   stack;
+   ec_stackT stack;
    /** rx buffers */
    ec_bufT rxbuf[EC_MAXBUF];
    /** rx buffer status */
@@ -48,43 +48,43 @@ typedef struct
    /** temporary rx buffer */
    ec_bufT tempinbuf;
    /* Intime */
-   HPEHANDLE      handle;
+   HPEHANDLE handle;
    HPERXBUFFERSET *rx_buffers;
    HPETXBUFFERSET *tx_buffers[EC_MAXBUF];
 } ecx_redportt;
 
 typedef struct
 {
-   ec_stackT      stack;
+   ec_stackT stack;
    /** rx buffers */
-   ec_bufT        rxbuf[EC_MAXBUF];
+   ec_bufT rxbuf[EC_MAXBUF];
    /** rx buffer status */
-   int            rxbufstat[EC_MAXBUF];
+   int rxbufstat[EC_MAXBUF];
    /** rx MAC source address */
-   int            rxsa[EC_MAXBUF];
+   int rxsa[EC_MAXBUF];
    /** temporary rx buffer */
-   ec_bufT        tempinbuf;
+   ec_bufT tempinbuf;
    /** temporary rx buffer status */
-   int            tempinbufs;
+   int tempinbufs;
    /** transmit buffers */
-   ec_bufT        txbuf[EC_MAXBUF];
+   ec_bufT txbuf[EC_MAXBUF];
    /** transmit buffer lengths */
-   int            txbuflength[EC_MAXBUF];
+   int txbuflength[EC_MAXBUF];
    /** temporary tx buffer */
-   ec_bufT        txbuf2;
+   ec_bufT txbuf2;
    /** temporary tx buffer length */
-   int            txbuflength2;
+   int txbuflength2;
    /** last used frame index */
-   uint8          lastidx;
+   uint8 lastidx;
    /** current redundancy state */
-   int            redstate;
+   int redstate;
    /** pointer to redundancy port and buffers */
-   ecx_redportt   *redport;
-   RTHANDLE       getindex_region;
-   RTHANDLE       tx_region;
-   RTHANDLE       rx_region;
+   ecx_redportt *redport;
+   RTHANDLE getindex_region;
+   RTHANDLE tx_region;
+   RTHANDLE rx_region;
    /* Intime */
-   HPEHANDLE      handle;
+   HPEHANDLE handle;
    HPERXBUFFERSET *rx_buffers;
    HPETXBUFFERSET *tx_buffers[EC_MAXBUF];
 } ecx_portt;
@@ -92,10 +92,10 @@ typedef struct
 extern const uint16 priMAC[3];
 extern const uint16 secMAC[3];
 
-//extern ecx_portt     ecx_port;
-//extern ecx_redportt  ecx_redport;
+// extern ecx_portt     ecx_port;
+// extern ecx_redportt  ecx_redport;
 
-int ec_setupnic(const char * ifname, int secondary);
+int ec_setupnic(const char *ifname, int secondary);
 int ec_closenic(void);
 void ec_setupheader(void *p);
 void ec_setbufstat(uint8 idx, int bufstat);
@@ -103,15 +103,15 @@ uint8 ec_getindex(void);
 int ec_outframe(uint8 idx, int sock);
 int ec_outframe_red(uint8 idx);
 int ec_waitinframe(uint8 idx, int timeout);
-int ec_srconfirm(uint8 idx,int timeout);
+int ec_srconfirm(uint8 idx, int timeout);
 
-int ecx_setupnic(ecx_portt *port, const char * ifname, int secondary);
+int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary);
 int ecx_closenic(ecx_portt *port);
 void ecx_setbufstat(ecx_portt *port, uint8 idx, int bufstat);
 uint8 ecx_getindex(ecx_portt *port);
 int ecx_outframe(ecx_portt *port, uint8 idx, int sock);
 int ecx_outframe_red(ecx_portt *port, uint8 idx);
 int ecx_waitinframe(ecx_portt *port, uint8 idx, int timeout);
-int ecx_srconfirm(ecx_portt *port, uint8 idx,int timeout);
+int ecx_srconfirm(ecx_portt *port, uint8 idx, int timeout);
 
 #endif
index e571c8a75e438d5205874a8656306132be710f3b..0a119107e1d259c2636694cd76a4ee2373e7d9ba 100644 (file)
@@ -13,9 +13,9 @@
  * Note that Ethercat uses little endian byte order, except for the Ethernet
  * header which is big endian as usual.
  */
-uint16 oshw_htons (uint16 host)
+uint16 oshw_htons(uint16 host)
 {
-   uint16 network = htons (host);
+   uint16 network = htons(host);
    return network;
 }
 
@@ -25,16 +25,16 @@ uint16 oshw_htons (uint16 host)
  * Note that Ethercat uses little endian byte order, except for the Ethernet
  * header which is big endian as usual.
  */
-uint16 oshw_ntohs (uint16 network)
+uint16 oshw_ntohs(uint16 network)
 {
-   uint16 host = ntohs (network);
+   uint16 host = ntohs(network);
    return host;
 }
 
 /* Create list over available network adapters.
  * @return First element in linked list of adapters
  */
-ec_adaptert * oshw_find_adapters (void)
+ec_adaptert *oshw_find_adapters(void)
 {
    return NULL;
 }
@@ -43,7 +43,6 @@ ec_adaptert * oshw_find_adapters (void)
  * @param[in] adapter = First element in linked list of adapters
  * EC_NOFRAME.
  */
-void oshw_free_adapters (ec_adaptert * adapter)
+void oshw_free_adapters(ec_adaptert *adapter)
 {
-
 }
index b1548a7da41a547576c802e782493af099d1bd9a..3a24486b26de95d2b1ebea37a82ac1bd8f86b273 100644 (file)
 extern "C" {
 #endif
 
-uint16 oshw_htons (uint16 hostshort);
-uint16 oshw_ntohs (uint16 networkshort);
-ec_adaptert * oshw_find_adapters (void);
-void oshw_free_adapters (ec_adaptert * adapter);
+uint16 oshw_htons(uint16 hostshort);
+uint16 oshw_ntohs(uint16 networkshort);
+ec_adaptert *oshw_find_adapters(void);
+void oshw_free_adapters(ec_adaptert *adapter);
 
 #ifdef __cplusplus
 }
index 277df1a6c2f04e54a033609f6bacc538cac4ea32..61af474f52828aadc83a31c0e8fcdb7146fe74fa 100644 (file)
@@ -59,26 +59,25 @@ enum
    ECT_RED_DOUBLE
 };
 
-
 /** Primary source MAC address used for EtherCAT.
  * This address is not the MAC address used from the NIC.
  * EtherCAT does not care about MAC addressing, but it is used here to
  * differentiate the route the packet traverses through the EtherCAT
  * segment. This is needed to find out the packet flow in redundant
  * configurations. */
-const uint16 priMAC[3] = { 0x0101, 0x0101, 0x0101 };
+const uint16 priMAC[3] = {0x0101, 0x0101, 0x0101};
 /** Secondary source MAC address used for EtherCAT. */
-const uint16 secMAC[3] = { 0x0404, 0x0404, 0x0404 };
+const uint16 secMAC[3] = {0x0404, 0x0404, 0x0404};
 
 /** second MAC word is used for identification */
 #define RX_PRIM priMAC[1]
 /** second MAC word is used for identification */
-#define RX_SEC secMAC[1]
+#define RX_SEC  secMAC[1]
 
 static void ecx_clear_rxbufstat(int *rxbufstat)
 {
    int i;
-   for(i = 0; i < EC_MAXBUF; i++)
+   for (i = 0; i < EC_MAXBUF; i++)
    {
       rxbufstat[i] = EC_BUF_EMPTY;
    }
@@ -94,7 +93,7 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
 {
    int i;
    int r, rval, ifindex;
- //  struct timeval timeout;
  //  struct timeval timeout;
    struct ifreq ifr;
    struct sockaddr_ll sll;
    int *psock;
@@ -109,14 +108,14 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
          /* when using secondary socket it is automatically a redundant setup */
          psock = &(port->redport->sockhandle);
          *psock = -1;
-         port->redstate                   = ECT_RED_DOUBLE;
-         port->redport->stack.sock        = &(port->redport->sockhandle);
-         port->redport->stack.txbuf       = &(port->txbuf);
+         port->redstate = ECT_RED_DOUBLE;
+         port->redport->stack.sock = &(port->redport->sockhandle);
+         port->redport->stack.txbuf = &(port->txbuf);
          port->redport->stack.txbuflength = &(port->txbuflength);
-         port->redport->stack.tempbuf     = &(port->redport->tempinbuf);
-         port->redport->stack.rxbuf       = &(port->redport->rxbuf);
-         port->redport->stack.rxbufstat   = &(port->redport->rxbufstat);
-         port->redport->stack.rxsa        = &(port->redport->rxsa);
+         port->redport->stack.tempbuf = &(port->redport->tempinbuf);
+         port->redport->stack.rxbuf = &(port->redport->rxbuf);
+         port->redport->stack.rxbufstat = &(port->redport->rxbufstat);
+         port->redport->stack.rxsa = &(port->redport->rxsa);
          ecx_clear_rxbufstat(&(port->redport->rxbufstat[0]));
       }
       else
@@ -128,35 +127,35 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
    else
    {
       pthread_mutexattr_init(&mutexattr);
-      pthread_mutexattr_setprotocol(&mutexattr  , PTHREAD_PRIO_INHERIT);
+      pthread_mutexattr_setprotocol(&mutexattr, PTHREAD_PRIO_INHERIT);
       pthread_mutex_init(&(port->getindex_mutex), &mutexattr);
-      pthread_mutex_init(&(port->tx_mutex)      , &mutexattr);
-      pthread_mutex_init(&(port->rx_mutex)      , &mutexattr);
-      port->sockhandle        = -1;
-      port->lastidx           = 0;
-      port->redstate          = ECT_RED_NONE;
-      port->stack.sock        = &(port->sockhandle);
-      port->stack.txbuf       = &(port->txbuf);
+      pthread_mutex_init(&(port->tx_mutex), &mutexattr);
+      pthread_mutex_init(&(port->rx_mutex), &mutexattr);
+      port->sockhandle = -1;
+      port->lastidx = 0;
+      port->redstate = ECT_RED_NONE;
+      port->stack.sock = &(port->sockhandle);
+      port->stack.txbuf = &(port->txbuf);
       port->stack.txbuflength = &(port->txbuflength);
-      port->stack.tempbuf     = &(port->tempinbuf);
-      port->stack.rxbuf       = &(port->rxbuf);
-      port->stack.rxbufstat   = &(port->rxbufstat);
-      port->stack.rxsa        = &(port->rxsa);
+      port->stack.tempbuf = &(port->tempinbuf);
+      port->stack.rxbuf = &(port->rxbuf);
+      port->stack.rxbufstat = &(port->rxbufstat);
+      port->stack.rxsa = &(port->rxsa);
       ecx_clear_rxbufstat(&(port->rxbufstat[0]));
       psock = &(port->sockhandle);
    }
    /* we use RAW packet socket, with packet type ETH_P_ECAT */
    *psock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ECAT));
-   if(*psock < 0)
+   if (*psock < 0)
       return 0;
 
    r = 0;
-/*
-   timeout.tv_sec =  0;
-   timeout.tv_usec = 1;
-   r |= setsockopt(*psock, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));
-   r |= setsockopt(*psock, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout));
-*/
+   /*
+      timeout.tv_sec =  0;
+      timeout.tv_usec = 1;
+      r |= setsockopt(*psock, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));
+      r |= setsockopt(*psock, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout));
+   */
    i = 1;
    r |= setsockopt(*psock, SOL_SOCKET, SO_DONTROUTE, &i, sizeof(i));
    /* connect socket to NIC by name */
@@ -228,7 +227,7 @@ uint8 ecx_getindex(ecx_portt *port)
    uint8 idx;
    uint8 cnt;
 
-   pthread_mutex_lock( &(port->getindex_mutex) );
+   pthread_mutex_lock(&(port->getindex_mutex));
 
    idx = port->lastidx + 1;
    /* index can't be larger than buffer array */
@@ -252,7 +251,7 @@ uint8 ecx_getindex(ecx_portt *port)
       port->redport->rxbufstat[idx] = EC_BUF_ALLOC;
    port->lastidx = idx;
 
-   pthread_mutex_unlock( &(port->getindex_mutex) );
+   pthread_mutex_unlock(&(port->getindex_mutex));
 
    return idx;
 }
@@ -317,21 +316,21 @@ int ecx_outframe_red(ecx_portt *port, uint8 idx)
    rval = ecx_outframe(port, idx, 0);
    if (port->redstate != ECT_RED_NONE)
    {
-      pthread_mutex_lock( &(port->tx_mutex) );
+      pthread_mutex_lock(&(port->tx_mutex));
       ehp = (ec_etherheadert *)&(port->txbuf2);
       /* use dummy frame for secondary socket transmit (BRD) */
-      datagramP = (ec_comt*)&(port->txbuf2[ETH_HEADERSIZE]);
+      datagramP = (ec_comt *)&(port->txbuf2[ETH_HEADERSIZE]);
       /* write index to frame */
       datagramP->index = idx;
       /* rewrite MAC source address 1 to secondary */
       ehp->sa1 = htons(secMAC[1]);
       /* transmit over secondary socket */
       port->redport->rxbufstat[idx] = EC_BUF_TX;
-      if (send(port->redport->sockhandle, &(port->txbuf2), port->txbuflength2 , 0) == -1)
+      if (send(port->redport->sockhandle, &(port->txbuf2), port->txbuflength2, 0) == -1)
       {
          port->redport->rxbufstat[idx] = EC_BUF_EMPTY;
       }
-      pthread_mutex_unlock( &(port->tx_mutex) );
+      pthread_mutex_unlock(&(port->tx_mutex));
    }
 
    return rval;
@@ -380,9 +379,9 @@ static int ecx_recvpkt(ecx_portt *port, int stacknumber)
  */
 int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
 {
-   uint16  l;
-   int     rval;
-   uint8   idxf;
+   uint16 l;
+   int rval;
+   uint8 idxf;
    ec_etherheadert *ehp;
    ec_comt *ecp;
    ec_stackT *stack;
@@ -424,12 +423,12 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
       else if (ecx_recvpkt(port, stacknumber))
       {
          rval = EC_OTHERFRAME;
-         ehp =(ec_etherheadert*)(stack->tempbuf);
+         ehp = (ec_etherheadert *)(stack->tempbuf);
          /* check if it is an EtherCAT frame */
          if (ehp->etype == htons(ETH_P_ECAT))
          {
             stack->rxcnt++;
-            ecp =(ec_comt*)(&(*stack->tempbuf)[ETH_HEADERSIZE]);
+            ecp = (ec_comt *)(&(*stack->tempbuf)[ETH_HEADERSIZE]);
             l = etohs(ecp->elength) & 0x0fff;
             idxf = ecp->index;
             /* found index equals requested index ? */
@@ -463,8 +462,7 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
             }
          }
       }
-      pthread_mutex_unlock( &(port->rx_mutex) );
-
+      pthread_mutex_unlock(&(port->rx_mutex));
    }
 
    /* WKC if matching frame found */
@@ -486,7 +484,7 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
 static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
 {
    osal_timert timer2;
-   int wkc  = EC_NOFRAME;
+   int wkc = EC_NOFRAME;
    int wkc2 = EC_NOFRAME;
    int primrx, secrx;
 
@@ -497,14 +495,14 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
    struct pollfd fds[2];
    struct pollfd *fdsp;
    int poll_err = 0;
-   struct timespec timeout_spec = { 0, 0 };
+   struct timespec timeout_spec = {0, 0};
    timeout_spec.tv_nsec = 50 * 1000;
    ec_stackT *stack;
    stack = &(port->stack);
    fds[0].fd = *stack->sock;
    fds[0].events = POLLIN;
    int pollcnt = 1;
-   if(port->redstate != ECT_RED_NONE)
+   if (port->redstate != ECT_RED_NONE)
    {
       pollcnt = 2;
       stack = &(port->redport->stack);
@@ -515,11 +513,11 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
    do
    {
       poll_err = ppoll(fdsp, pollcnt, &timeout_spec, NULL);
-      if(poll_err >= 0)
+      if (poll_err >= 0)
       {
          /* only read frame if not already in */
          if (wkc <= EC_NOFRAME)
-            wkc  = ecx_inframe(port, idx, 0);
+            wkc = ecx_inframe(port, idx, 0);
          /* only try secondary if in redundant mode */
          if (port->redstate != ECT_RED_NONE)
          {
@@ -528,7 +526,7 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
                wkc2 = ecx_inframe(port, idx, 1);
          }
       }
-   /* wait for both frames to arrive or timeout */
+      /* wait for both frames to arrive or timeout */
    } while (((wkc <= EC_NOFRAME) || (wkc2 <= EC_NOFRAME)) && !osal_timer_is_expired(timer));
    /* only do redundant functions when in redundant mode */
    if (port->redstate != ECT_RED_NONE)
@@ -542,7 +540,7 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
 
       /* primary socket got secondary frame and secondary socket got primary frame */
       /* normal situation in redundant mode */
-      if ( ((primrx == RX_SEC) && (secrx == RX_PRIM)) )
+      if (((primrx == RX_SEC) && (secrx == RX_PRIM)))
       {
          /* copy secondary buffer to primary */
          memcpy(&(port->rxbuf[idx]), &(port->redport->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
@@ -550,18 +548,18 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
       }
       /* primary socket got nothing or primary frame, and secondary socket got secondary frame */
       /* we need to resend TX packet */
-      if ( ((primrx == 0) && (secrx == RX_SEC)) ||
-           ((primrx == RX_PRIM) && (secrx == RX_SEC)) )
+      if (((primrx == 0) && (secrx == RX_SEC)) ||
+          ((primrx == RX_PRIM) && (secrx == RX_SEC)))
       {
          /* If both primary and secondary have partial connection retransmit the primary received
           * frame over the secondary socket. The result from the secondary received frame is a combined
           * frame that traversed all slaves in standard order. */
-         if ( (primrx == RX_PRIM) && (secrx == RX_SEC) )
+         if ((primrx == RX_PRIM) && (secrx == RX_SEC))
          {
             /* copy primary rx to tx buffer */
             memcpy(&(port->txbuf[idx][ETH_HEADERSIZE]), &(port->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
          }
-         osal_timer_start (&timer2, EC_TIMEOUTRET);
+         osal_timer_start(&timer2, EC_TIMEOUTRET);
          /* resend secondary tx */
          ecx_outframe(port, idx, 1);
          do
@@ -594,7 +592,7 @@ int ecx_waitinframe(ecx_portt *port, uint8 idx, int timeout)
    int wkc;
    osal_timert timer;
 
-   osal_timer_start (&timer, timeout);
+   osal_timer_start(&timer, timeout);
    wkc = ecx_waitinframe_red(port, idx, &timer);
 
    return wkc;
@@ -617,24 +615,24 @@ int ecx_srconfirm(ecx_portt *port, uint8 idx, int timeout)
    int wkc = EC_NOFRAME;
    osal_timert timer1, timer2;
 
-   osal_timer_start (&timer1, timeout);
+   osal_timer_start(&timer1, timeout);
    do
    {
       /* tx frame on primary and if in redundant mode a dummy on secondary */
       ecx_outframe_red(port, idx);
       if (timeout < EC_TIMEOUTRET)
       {
-         osal_timer_start (&timer2, timeout);
+         osal_timer_start(&timer2, timeout);
       }
       else
       {
          /* normally use partial timeout for rx */
-         osal_timer_start (&timer2, EC_TIMEOUTRET);
+         osal_timer_start(&timer2, EC_TIMEOUTRET);
       }
       /* get frame from primary or if in redundant mode possibly from secondary */
       wkc = ecx_waitinframe_red(port, idx, &timer2);
-   /* wait for answer with WKC>=0 or otherwise retry until timeout */
-   } while ((wkc <= EC_NOFRAME) && !osal_timer_is_expired (&timer1));
+      /* wait for answer with WKC>=0 or otherwise retry until timeout */
+   } while ((wkc <= EC_NOFRAME) && !osal_timer_is_expired(&timer1));
 
    return wkc;
 }
index b99dbfaa2fc35f5cca4e2f59f95b58997bcaf853..54c15b724938ec5943e1d8ed4e66e7c7376d48a9 100644 (file)
@@ -13,8 +13,7 @@
 #define _nicdrvh_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 #include <pthread.h>
@@ -23,27 +22,27 @@ extern "C"
 typedef struct
 {
    /** socket connection used */
-   int         *sock;
+   int *sock;
    /** tx buffer */
-   ec_bufT     (*txbuf)[EC_MAXBUF];
+   ec_bufT (*txbuf)[EC_MAXBUF];
    /** tx buffer lengths */
-   int         (*txbuflength)[EC_MAXBUF];
+   int (*txbuflength)[EC_MAXBUF];
    /** temporary receive buffer */
-   ec_bufT     *tempbuf;
+   ec_bufT *tempbuf;
    /** rx buffers */
-   ec_bufT     (*rxbuf)[EC_MAXBUF];
+   ec_bufT (*rxbuf)[EC_MAXBUF];
    /** rx buffer status fields */
-   int         (*rxbufstat)[EC_MAXBUF];
+   int (*rxbufstat)[EC_MAXBUF];
    /** received MAC source address (middle word) */
-   int         (*rxsa)[EC_MAXBUF];
-   uint64      rxcnt;
+   int (*rxsa)[EC_MAXBUF];
+   uint64 rxcnt;
 } ec_stackT;
 
 /** pointer structure to buffers for redundant port */
 typedef struct
 {
-   ec_stackT   stack;
-   int         sockhandle;
+   ec_stackT stack;
+   int sockhandle;
    /** rx buffers */
    ec_bufT rxbuf[EC_MAXBUF];
    /** rx buffer status */
@@ -57,8 +56,8 @@ typedef struct
 /** pointer structure to buffers, vars and mutexes for port instantiation */
 typedef struct
 {
-   ec_stackT   stack;
-   int         sockhandle;
+   ec_stackT stack;
+   int sockhandle;
    /** rx buffers */
    ec_bufT rxbuf[EC_MAXBUF];
    /** rx buffer status */
@@ -92,14 +91,14 @@ extern const uint16 priMAC[3];
 extern const uint16 secMAC[3];
 
 void ec_setupheader(void *p);
-int ecx_setupnic(ecx_portt *port, const char * ifname, int secondary);
+int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary);
 int ecx_closenic(ecx_portt *port);
 void ecx_setbufstat(ecx_portt *port, uint8 idx, int bufstat);
 uint8 ecx_getindex(ecx_portt *port);
 int ecx_outframe(ecx_portt *port, uint8 idx, int sock);
 int ecx_outframe_red(ecx_portt *port, uint8 idx);
 int ecx_waitinframe(ecx_portt *port, uint8 idx, int timeout);
-int ecx_srconfirm(ecx_portt *port, uint8 idx,int timeout);
+int ecx_srconfirm(ecx_portt *port, uint8 idx, int timeout);
 
 #ifdef __cplusplus
 }
index 9fa452f0c449c38d81b6f6a10d0be19580b226e8..24e7cacf186c2d3816415c806b8351d948126bac 100644 (file)
@@ -20,7 +20,7 @@
  */
 uint16 oshw_htons(uint16 host)
 {
-   uint16 network = htons (host);
+   uint16 network = htons(host);
    return network;
 }
 
@@ -32,28 +32,27 @@ uint16 oshw_htons(uint16 host)
  */
 uint16 oshw_ntohs(uint16 network)
 {
-   uint16 host = ntohs (network);
+   uint16 host = ntohs(network);
    return host;
 }
 
 /** Create list over available network adapters.
  * @return First element in linked list of adapters
  */
-ec_adaptert * oshw_find_adapters(void)
+ec_adaptert *oshw_find_adapters(void)
 {
    int i;
    struct if_nameindex *ids;
-   ec_adaptert * adapter;
-   ec_adaptert * prev_adapter = NULL;
-   ec_adaptert * ret_adapter = NULL;
-
+   ec_adaptert *adapter;
+   ec_adaptert *prev_adapter = NULL;
+   ec_adaptert *ret_adapter = NULL;
 
    /* Iterate all devices and create a local copy holding the name and
     * description.
     */
 
-   ids = if_nameindex ();
-   for(i = 0; ids[i].if_index != 0; i++)
+   ids = if_nameindex();
+   for (i = 0; ids[i].if_index != 0; i++)
    {
       adapter = (ec_adaptert *)malloc(sizeof(ec_adaptert));
       /* If we got more than one adapter save link list pointer to previous
@@ -74,10 +73,10 @@ ec_adaptert * oshw_find_adapters(void)
 
       if (ids[i].if_name)
       {
-          strncpy(adapter->name, ids[i].if_name, EC_MAXLEN_ADAPTERNAME);
-          adapter->name[EC_MAXLEN_ADAPTERNAME-1] = '\0';
-          strncpy(adapter->desc, ids[i].if_name, EC_MAXLEN_ADAPTERNAME);
-          adapter->desc[EC_MAXLEN_ADAPTERNAME-1] = '\0';
+         strncpy(adapter->name, ids[i].if_name, EC_MAXLEN_ADAPTERNAME);
+         adapter->name[EC_MAXLEN_ADAPTERNAME - 1] = '\0';
+         strncpy(adapter->desc, ids[i].if_name, EC_MAXLEN_ADAPTERNAME);
+         adapter->desc[EC_MAXLEN_ADAPTERNAME - 1] = '\0';
       }
       else
       {
@@ -88,7 +87,7 @@ ec_adaptert * oshw_find_adapters(void)
       prev_adapter = adapter;
    }
 
-   if_freenameindex (ids);
+   if_freenameindex(ids);
 
    return ret_adapter;
 }
@@ -97,21 +96,21 @@ ec_adaptert * oshw_find_adapters(void)
  * @param[in] adapter = First element in linked list of adapters
  * EC_NOFRAME.
  */
-void oshw_free_adapters(ec_adaptert * adapter)
+void oshw_free_adapters(ec_adaptert *adapter)
 {
-   ec_adaptert * next_adapter;
+   ec_adaptert *next_adapter;
    /* Iterate the linked list and free all elements holding
     * adapter information
     */
-   if(adapter)
+   if (adapter)
    {
       next_adapter = adapter->next;
-      free (adapter);
+      free(adapter);
       while (next_adapter)
       {
          adapter = next_adapter;
          next_adapter = adapter->next;
-         free (adapter);
+         free(adapter);
       }
    }
 }
index e998004cdb065654d92db334a1a96e515cd35e86..350ef51176535872e868677fa3a69c46ff2b34d1 100644 (file)
@@ -21,8 +21,8 @@ extern "C" {
 
 uint16 oshw_htons(uint16 hostshort);
 uint16 oshw_ntohs(uint16 networkshort);
-ec_adaptert * oshw_find_adapters(void);
-void oshw_free_adapters(ec_adaptert * adapter);
+ec_adaptert *oshw_find_adapters(void);
+void oshw_free_adapters(ec_adaptert *adapter);
 
 #ifdef __cplusplus
 }
index 0219ea97b40d4a371f174359fe7d5cf65a7f817b..d3d279beb5ce5d053dcc405225417188d0f52d52 100644 (file)
@@ -31,7 +31,6 @@
  * This layer is fully transparent for the higher layers.
  */
 
-
 #include <assert.h>
 #include <sys/types.h>
 #include <stdio.h>
 /** Redundancy modes */
 enum
 {
-    /** No redundancy, single NIC mode */
-    ECT_RED_NONE,
-    /** Double redundant NIC connection */
-    ECT_RED_DOUBLE
+   /** No redundancy, single NIC mode */
+   ECT_RED_NONE,
+   /** Double redundant NIC connection */
+   ECT_RED_DOUBLE
 };
 
 /** Primary source MAC address used for EtherCAT.
@@ -56,21 +55,21 @@ enum
  * differentiate the route the packet traverses through the EtherCAT
  * segment. This is needed to fund out the packet flow in redundant
  * configurations. */
-const uint16 priMAC[3] = { 0x0101, 0x0101, 0x0101 };
+const uint16 priMAC[3] = {0x0101, 0x0101, 0x0101};
 /** Secondary source MAC address used for EtherCAT. */
-const uint16 secMAC[3] = { 0x0404, 0x0404, 0x0404 };
+const uint16 secMAC[3] = {0x0404, 0x0404, 0x0404};
 
 /** second MAC word is used for identification */
 #define RX_PRIM priMAC[1]
 /** second MAC word is used for identification */
-#define RX_SEC secMAC[1]
+#define RX_SEC  secMAC[1]
 
 static char errbuf[PCAP_ERRBUF_SIZE];
 
 static void ecx_clear_rxbufstat(int *rxbufstat)
 {
    int i;
-   for(i = 0; i < EC_MAXBUF; i++)
+   for (i = 0; i < EC_MAXBUF; i++)
    {
       rxbufstat[i] = EC_BUF_EMPTY;
    }
@@ -96,14 +95,14 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
          /* when using secondary socket it is automatically a redundant setup */
          psock = &(port->redport->sockhandle);
          *psock = NULL;
-         port->redstate                   = ECT_RED_DOUBLE;
-         port->redport->stack.sock        = &(port->redport->sockhandle);
-         port->redport->stack.txbuf       = &(port->txbuf);
+         port->redstate = ECT_RED_DOUBLE;
+         port->redport->stack.sock = &(port->redport->sockhandle);
+         port->redport->stack.txbuf = &(port->txbuf);
          port->redport->stack.txbuflength = &(port->txbuflength);
-         port->redport->stack.tempbuf     = &(port->redport->tempinbuf);
-         port->redport->stack.rxbuf       = &(port->redport->rxbuf);
-         port->redport->stack.rxbufstat   = &(port->redport->rxbufstat);
-         port->redport->stack.rxsa        = &(port->redport->rxsa);
+         port->redport->stack.tempbuf = &(port->redport->tempinbuf);
+         port->redport->stack.rxbuf = &(port->redport->rxbuf);
+         port->redport->stack.rxbufstat = &(port->redport->rxbufstat);
+         port->redport->stack.rxsa = &(port->redport->rxsa);
          ecx_clear_rxbufstat(&(port->redport->rxbufstat[0]));
       }
       else
@@ -117,16 +116,16 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
       pthread_mutex_init(&(port->getindex_mutex), NULL);
       pthread_mutex_init(&(port->tx_mutex), NULL);
       pthread_mutex_init(&(port->rx_mutex), NULL);
-      port->sockhandle        = NULL;
-      port->lastidx           = 0;
-      port->redstate          = ECT_RED_NONE;
-      port->stack.sock        = &(port->sockhandle);
-      port->stack.txbuf       = &(port->txbuf);
+      port->sockhandle = NULL;
+      port->lastidx = 0;
+      port->redstate = ECT_RED_NONE;
+      port->stack.sock = &(port->sockhandle);
+      port->stack.txbuf = &(port->txbuf);
       port->stack.txbuflength = &(port->txbuflength);
-      port->stack.tempbuf     = &(port->tempinbuf);
-      port->stack.rxbuf       = &(port->rxbuf);
-      port->stack.rxbufstat   = &(port->rxbufstat);
-      port->stack.rxsa        = &(port->rxsa);
+      port->stack.tempbuf = &(port->tempinbuf);
+      port->stack.rxbuf = &(port->rxbuf);
+      port->stack.rxbufstat = &(port->rxbufstat);
+      port->stack.rxsa = &(port->rxsa);
       ecx_clear_rxbufstat(&(port->rxbufstat[0]));
       psock = &(port->sockhandle);
    }
@@ -143,7 +142,7 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
    rval = pcap_setnonblock(*psock, 1, errbuf);
    if (rval != 0)
    {
-       return 0;
+      return 0;
    }
 
    for (i = 0; i < EC_MAXBUF; i++)
@@ -295,10 +294,10 @@ int ecx_outframe_red(ecx_portt *port, uint8 idx)
    rval = ecx_outframe(port, idx, 0);
    if (port->redstate != ECT_RED_NONE)
    {
-      pthread_mutex_lock( &(port->tx_mutex) );
+      pthread_mutex_lock(&(port->tx_mutex));
       ehp = (ec_etherheadert *)&(port->txbuf2);
       /* use dummy frame for secondary socket transmit (BRD) */
-      datagramP = (ec_comt*)&(port->txbuf2[ETH_HEADERSIZE]);
+      datagramP = (ec_comt *)&(port->txbuf2[ETH_HEADERSIZE]);
       /* write index to frame */
       datagramP->index = idx;
       /* rewrite MAC source address 1 to secondary */
@@ -309,7 +308,7 @@ int ecx_outframe_red(ecx_portt *port, uint8 idx)
       {
          port->redport->rxbufstat[idx] = EC_BUF_EMPTY;
       }
-      pthread_mutex_unlock( &(port->tx_mutex) );
+      pthread_mutex_unlock(&(port->tx_mutex));
    }
 
    return rval;
@@ -324,8 +323,8 @@ static int ecx_recvpkt(ecx_portt *port, int stacknumber)
 {
    int lp, bytesrx;
    ec_stackT *stack;
-   struct pcap_pkthdr * header;
-   unsigned char const * pkt_data;
+   struct pcap_pkthdr *header;
+   unsigned char const *pkt_data;
    int res;
 
    if (!stacknumber)
@@ -339,7 +338,7 @@ static int ecx_recvpkt(ecx_portt *port, int stacknumber)
    lp = sizeof(port->tempinbuf);
 
    res = pcap_next_ex(*stack->sock, &header, &pkt_data);
-   if (res <=)
+   if (res <= 0)
    {
       port->tempinbufs = 0;
       return 0;
@@ -373,9 +372,9 @@ static int ecx_recvpkt(ecx_portt *port, int stacknumber)
  */
 int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
 {
-   uint16  l;
-   int     rval;
-   uint8   idxf;
+   uint16 l;
+   int rval;
+   uint8 idxf;
    ec_etherheadert *ehp;
    ec_comt *ecp;
    ec_stackT *stack;
@@ -407,11 +406,11 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
       if (ecx_recvpkt(port, stacknumber))
       {
          rval = EC_OTHERFRAME;
-         ehp =(ec_etherheadert*)(stack->tempbuf);
+         ehp = (ec_etherheadert *)(stack->tempbuf);
          /* check if it is an EtherCAT frame */
          if (ehp->etype == htons(ETH_P_ECAT))
          {
-            ecp =(ec_comt*)(&(*stack->tempbuf)[ETH_HEADERSIZE]);
+            ecp = (ec_comt *)(&(*stack->tempbuf)[ETH_HEADERSIZE]);
             l = etohs(ecp->elength) & 0x0fff;
             idxf = ecp->index;
             /* found index equals requested index ? */
@@ -445,8 +444,7 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
             }
          }
       }
-      pthread_mutex_unlock( &(port->rx_mutex) );
-
+      pthread_mutex_unlock(&(port->rx_mutex));
    }
 
    /* WKC if matching frame found */
@@ -468,7 +466,7 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
 static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
 {
    osal_timert timer2;
-   int wkc  = EC_NOFRAME;
+   int wkc = EC_NOFRAME;
    int wkc2 = EC_NOFRAME;
    int primrx, secrx;
 
@@ -479,7 +477,7 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
    {
       /* only read frame if not already in */
       if (wkc <= EC_NOFRAME)
-         wkc  = ecx_inframe(port, idx, 0);
+         wkc = ecx_inframe(port, idx, 0);
       /* only try secondary if in redundant mode */
       if (port->redstate != ECT_RED_NONE)
       {
@@ -487,7 +485,7 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
          if (wkc2 <= EC_NOFRAME)
             wkc2 = ecx_inframe(port, idx, 1);
       }
-   /* wait for both frames to arrive or timeout */
+      /* wait for both frames to arrive or timeout */
    } while (((wkc <= EC_NOFRAME) || (wkc2 <= EC_NOFRAME)) && !osal_timer_is_expired(timer));
    /* only do redundant functions when in redundant mode */
    if (port->redstate != ECT_RED_NONE)
@@ -501,7 +499,7 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
 
       /* primary socket got secondary frame and secondary socket got primary frame */
       /* normal situation in redundant mode */
-      if ( ((primrx == RX_SEC) && (secrx == RX_PRIM)) )
+      if (((primrx == RX_SEC) && (secrx == RX_PRIM)))
       {
          /* copy secondary buffer to primary */
          memcpy(&(port->rxbuf[idx]), &(port->redport->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
@@ -509,18 +507,18 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
       }
       /* primary socket got nothing or primary frame, and secondary socket got secondary frame */
       /* we need to resend TX packet */
-      if ( ((primrx == 0) && (secrx == RX_SEC)) ||
-           ((primrx == RX_PRIM) && (secrx == RX_SEC)) )
+      if (((primrx == 0) && (secrx == RX_SEC)) ||
+          ((primrx == RX_PRIM) && (secrx == RX_SEC)))
       {
          /* If both primary and secondary have partial connection retransmit the primary received
           * frame over the secondary socket. The result from the secondary received frame is a combined
           * frame that traversed all slaves in standard order. */
-         if ( (primrx == RX_PRIM) && (secrx == RX_SEC) )
+         if ((primrx == RX_PRIM) && (secrx == RX_SEC))
          {
             /* copy primary rx to tx buffer */
             memcpy(&(port->txbuf[idx][ETH_HEADERSIZE]), &(port->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
          }
-         osal_timer_start (&timer2, EC_TIMEOUTRET);
+         osal_timer_start(&timer2, EC_TIMEOUTRET);
          /* resend secondary tx */
          ecx_outframe(port, idx, 1);
          do
@@ -553,7 +551,7 @@ int ecx_waitinframe(ecx_portt *port, uint8 idx, int timeout)
    int wkc;
    osal_timert timer;
 
-   osal_timer_start (&timer, timeout);
+   osal_timer_start(&timer, timeout);
    wkc = ecx_waitinframe_red(port, idx, &timer);
 
    return wkc;
@@ -576,24 +574,24 @@ int ecx_srconfirm(ecx_portt *port, uint8 idx, int timeout)
    int wkc = EC_NOFRAME;
    osal_timert timer1, timer2;
 
-   osal_timer_start (&timer1, timeout);
+   osal_timer_start(&timer1, timeout);
    do
    {
       /* tx frame on primary and if in redundant mode a dummy on secondary */
       ecx_outframe_red(port, idx);
       if (timeout < EC_TIMEOUTRET)
       {
-         osal_timer_start (&timer2, timeout);
+         osal_timer_start(&timer2, timeout);
       }
       else
       {
          /* normally use partial timeout for rx */
-         osal_timer_start (&timer2, EC_TIMEOUTRET);
+         osal_timer_start(&timer2, EC_TIMEOUTRET);
       }
       /* get frame from primary or if in redundant mode possibly from secondary */
       wkc = ecx_waitinframe_red(port, idx, &timer2);
-   /* wait for answer with WKC>=0 or otherwise retry until timeout */
-   } while ((wkc <= EC_NOFRAME) && !osal_timer_is_expired (&timer1));
+      /* wait for answer with WKC>=0 or otherwise retry until timeout */
+   } while ((wkc <= EC_NOFRAME) && !osal_timer_is_expired(&timer1));
 
    return wkc;
 }
index aa920d3dcc424042eb59609211dbcd25483c79ac..9234469e4b9cc9f9069e9c7e9282a0189ec0663c 100644 (file)
@@ -13,8 +13,7 @@
 #define _nicdrvh_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 #include <pcap/pcap.h>
@@ -23,26 +22,26 @@ extern "C"
 typedef struct
 {
    /** socket connection used */
-   pcap_t      **sock;
+   pcap_t **sock;
    /** tx buffer */
-   ec_bufT     (*txbuf)[EC_MAXBUF];
+   ec_bufT (*txbuf)[EC_MAXBUF];
    /** tx buffer lengths */
-   int         (*txbuflength)[EC_MAXBUF];
+   int (*txbuflength)[EC_MAXBUF];
    /** temporary receive buffer */
-   ec_bufT     *tempbuf;
+   ec_bufT *tempbuf;
    /** rx buffers */
-   ec_bufT     (*rxbuf)[EC_MAXBUF];
+   ec_bufT (*rxbuf)[EC_MAXBUF];
    /** rx buffer status fields */
-   int         (*rxbufstat)[EC_MAXBUF];
+   int (*rxbufstat)[EC_MAXBUF];
    /** received MAC source address (middle word) */
-   int         (*rxsa)[EC_MAXBUF];
+   int (*rxsa)[EC_MAXBUF];
 } ec_stackT;
 
 /** pointer structure to buffers for redundant port */
 typedef struct
 {
-   ec_stackT   stack;
-   pcap_t      *sockhandle;
+   ec_stackT stack;
+   pcap_t *sockhandle;
    /** rx buffers */
    ec_bufT rxbuf[EC_MAXBUF];
    /** rx buffer status */
@@ -56,8 +55,8 @@ typedef struct
 /** pointer structure to buffers, vars and mutexes for port instantiation */
 typedef struct
 {
-   ec_stackT   stack;
-   pcap_t      *sockhandle;
+   ec_stackT stack;
+   pcap_t *sockhandle;
    /** rx buffers */
    ec_bufT rxbuf[EC_MAXBUF];
    /** rx buffer status */
@@ -91,14 +90,14 @@ extern const uint16 priMAC[3];
 extern const uint16 secMAC[3];
 
 void ec_setupheader(void *p);
-int ecx_setupnic(ecx_portt *port, const char * ifname, int secondary);
+int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary);
 int ecx_closenic(ecx_portt *port);
 void ecx_setbufstat(ecx_portt *port, uint8 idx, int bufstat);
 uint8 ecx_getindex(ecx_portt *port);
 int ecx_outframe(ecx_portt *port, uint8 idx, int sock);
 int ecx_outframe_red(ecx_portt *port, uint8 idx);
 int ecx_waitinframe(ecx_portt *port, uint8 idx, int timeout);
-int ecx_srconfirm(ecx_portt *port, uint8 idx,int timeout);
+int ecx_srconfirm(ecx_portt *port, uint8 idx, int timeout);
 
 #ifdef __cplusplus
 }
index d1bf6c2f6e12288bad687251b31eac6330d5d5a6..95697e654982ce2b002d3d482d0f66ac0fb4041f 100644 (file)
@@ -21,7 +21,7 @@
  */
 uint16 oshw_htons(uint16 host)
 {
-   uint16 network = htons (host);
+   uint16 network = htons(host);
    return network;
 }
 
@@ -33,28 +33,27 @@ uint16 oshw_htons(uint16 host)
  */
 uint16 oshw_ntohs(uint16 network)
 {
-   uint16 host = ntohs (network);
+   uint16 host = ntohs(network);
    return host;
 }
 
 /** Create list over available network adapters.
  * @return First element in linked list of adapters
  */
-ec_adaptert * oshw_find_adapters(void)
+ec_adaptert *oshw_find_adapters(void)
 {
    int i;
    struct if_nameindex *ids;
-   ec_adaptert * adapter;
-   ec_adaptert * prev_adapter;
-   ec_adaptert * ret_adapter = NULL;
-
+   ec_adaptert *adapter;
+   ec_adaptert *prev_adapter;
+   ec_adaptert *ret_adapter = NULL;
 
    /* Iterate all devices and create a local copy holding the name and
     * description.
     */
 
-   ids = if_nameindex ();
-   for(i = 0; ids[i].if_index != 0; i++)
+   ids = if_nameindex();
+   for (i = 0; ids[i].if_index != 0; i++)
    {
       adapter = (ec_adaptert *)malloc(sizeof(ec_adaptert));
       /* If we got more than one adapter save link list pointer to previous
@@ -75,10 +74,10 @@ ec_adaptert * oshw_find_adapters(void)
 
       if (ids[i].if_name)
       {
-          strncpy(adapter->name, ids[i].if_name, EC_MAXLEN_ADAPTERNAME);
-          adapter->name[EC_MAXLEN_ADAPTERNAME-1] = '\0';
-          strncpy(adapter->desc, ids[i].if_name, EC_MAXLEN_ADAPTERNAME);
-          adapter->desc[EC_MAXLEN_ADAPTERNAME-1] = '\0';
+         strncpy(adapter->name, ids[i].if_name, EC_MAXLEN_ADAPTERNAME);
+         adapter->name[EC_MAXLEN_ADAPTERNAME - 1] = '\0';
+         strncpy(adapter->desc, ids[i].if_name, EC_MAXLEN_ADAPTERNAME);
+         adapter->desc[EC_MAXLEN_ADAPTERNAME - 1] = '\0';
       }
       else
       {
@@ -89,7 +88,7 @@ ec_adaptert * oshw_find_adapters(void)
       prev_adapter = adapter;
    }
 
-   if_freenameindex (ids);
+   if_freenameindex(ids);
 
    return ret_adapter;
 }
@@ -98,21 +97,21 @@ ec_adaptert * oshw_find_adapters(void)
  * @param[in] adapter = First element in linked list of adapters
  * EC_NOFRAME.
  */
-void oshw_free_adapters(ec_adaptert * adapter)
+void oshw_free_adapters(ec_adaptert *adapter)
 {
-   ec_adaptert * next_adapter;
+   ec_adaptert *next_adapter;
    /* Iterate the linked list and free all elements holding
     * adapter information
     */
-   if(adapter)
+   if (adapter)
    {
       next_adapter = adapter->next;
-      free (adapter);
+      free(adapter);
       while (next_adapter)
       {
          adapter = next_adapter;
          next_adapter = adapter->next;
-         free (adapter);
+         free(adapter);
       }
    }
 }
index e998004cdb065654d92db334a1a96e515cd35e86..350ef51176535872e868677fa3a69c46ff2b34d1 100644 (file)
@@ -21,8 +21,8 @@ extern "C" {
 
 uint16 oshw_htons(uint16 hostshort);
 uint16 oshw_ntohs(uint16 networkshort);
-ec_adaptert * oshw_find_adapters(void);
-void oshw_free_adapters(ec_adaptert * adapter);
+ec_adaptert *oshw_find_adapters(void);
+void oshw_free_adapters(ec_adaptert *adapter);
 
 #ifdef __cplusplus
 }
index dcaff17f239714177439fb000b5ef0f159c91d2d..08e68697134e8ee684a165067efe553dcfed4f70 100644 (file)
@@ -58,26 +58,25 @@ enum
    ECT_RED_DOUBLE
 };
 
-
 /** Primary source MAC address used for EtherCAT.
  * This address is not the MAC address used from the NIC.
  * EtherCAT does not care about MAC addressing, but it is used here to
  * differentiate the route the packet traverses through the EtherCAT
  * segment. This is needed to find out the packet flow in redundant
  * configurations. */
-const uint16 priMAC[3] = { 0x0201, 0x0101, 0x0101 };
+const uint16 priMAC[3] = {0x0201, 0x0101, 0x0101};
 /** Secondary source MAC address used for EtherCAT. */
-const uint16 secMAC[3] = { 0x0604, 0x0404, 0x0404 };
+const uint16 secMAC[3] = {0x0604, 0x0404, 0x0404};
 
 /** second MAC word is used for identification */
 #define RX_PRIM priMAC[1]
 /** second MAC word is used for identification */
-#define RX_SEC secMAC[1]
+#define RX_SEC  secMAC[1]
 
 static void ecx_clear_rxbufstat(int *rxbufstat)
 {
    int i;
-   for(i = 0; i < EC_MAXBUF; i++)
+   for (i = 0; i < EC_MAXBUF; i++)
    {
       rxbufstat[i] = EC_BUF_EMPTY;
    }
@@ -110,14 +109,14 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
          /* when using secondary socket it is automatically a redundant setup */
          bpf = &(port->redport->sockhandle);
          *bpf = -1;
-         port->redstate                   = ECT_RED_DOUBLE;
-         port->redport->stack.sock        = &(port->redport->sockhandle);
-         port->redport->stack.txbuf       = &(port->txbuf);
+         port->redstate = ECT_RED_DOUBLE;
+         port->redport->stack.sock = &(port->redport->sockhandle);
+         port->redport->stack.txbuf = &(port->txbuf);
          port->redport->stack.txbuflength = &(port->txbuflength);
-         port->redport->stack.tempbuf     = &(port->redport->tempinbuf);
-         port->redport->stack.rxbuf       = &(port->redport->rxbuf);
-         port->redport->stack.rxbufstat   = &(port->redport->rxbufstat);
-         port->redport->stack.rxsa        = &(port->redport->rxsa);
+         port->redport->stack.tempbuf = &(port->redport->tempinbuf);
+         port->redport->stack.rxbuf = &(port->redport->rxbuf);
+         port->redport->stack.rxbufstat = &(port->redport->rxbufstat);
+         port->redport->stack.rxsa = &(port->redport->rxsa);
          ecx_clear_rxbufstat(&(port->redport->rxbufstat[0]));
       }
       else
@@ -129,89 +128,97 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
    else
    {
       pthread_mutex_init(&(port->getindex_mutex), NULL);
-      pthread_mutex_init(&(port->tx_mutex)      , NULL);
-      pthread_mutex_init(&(port->rx_mutex)      , NULL);
-      port->sockhandle        = -1;
-      port->lastidx           = 0;
-      port->redstate          = ECT_RED_NONE;
-      port->stack.sock        = &(port->sockhandle);
-      port->stack.txbuf       = &(port->txbuf);
+      pthread_mutex_init(&(port->tx_mutex), NULL);
+      pthread_mutex_init(&(port->rx_mutex), NULL);
+      port->sockhandle = -1;
+      port->lastidx = 0;
+      port->redstate = ECT_RED_NONE;
+      port->stack.sock = &(port->sockhandle);
+      port->stack.txbuf = &(port->txbuf);
       port->stack.txbuflength = &(port->txbuflength);
-      port->stack.tempbuf     = &(port->tempinbuf);
-      port->stack.rxbuf       = &(port->rxbuf);
-      port->stack.rxbufstat   = &(port->rxbufstat);
-      port->stack.rxsa        = &(port->rxsa);
+      port->stack.tempbuf = &(port->tempinbuf);
+      port->stack.rxbuf = &(port->rxbuf);
+      port->stack.rxbufstat = &(port->rxbufstat);
+      port->stack.rxsa = &(port->rxsa);
       ecx_clear_rxbufstat(&(port->rxbufstat[0]));
       bpf = &(port->sockhandle);
    }
 
    /* Open a bpf file descriptor */
    *bpf = -1;
-   for(i = 0; *bpf == -1 && i < maxbpffile; ++i)
+   for (i = 0; *bpf == -1 && i < maxbpffile; ++i)
    {
-     sprintf(fname, "/dev/bpf%i", i);
-     *bpf = open(fname, O_RDWR);
+      sprintf(fname, "/dev/bpf%i", i);
+      *bpf = open(fname, O_RDWR);
    }
 
-   if(*bpf == -1)
+   if (*bpf == -1)
    {
-     /* Failed to open bpf */
-     perror("Could not open bpf\n");
-     return 0;
+      /* Failed to open bpf */
+      perror("Could not open bpf\n");
+      return 0;
    }
 
    /* Need to hand the same buffer size as bpf expects,
       force bpf to use our buffer size! */
    uint buffer_len = sizeof(ec_bufT);
-   if (ioctl(*bpf, BIOCSBLEN, &buffer_len) == -1) {
-     perror("BIOCGBLEN");
+   if (ioctl(*bpf, BIOCSBLEN, &buffer_len) == -1)
+   {
+      perror("BIOCGBLEN");
    }
-   
-   if (buffer_len < 1518) {
-     printf("buffer_len %d < 1518\n", buffer_len);
-     return 0;
+
+   if (buffer_len < 1518)
+   {
+      printf("buffer_len %d < 1518\n", buffer_len);
+      return 0;
    }
 
    /* connect bpf to NIC by name */
    strcpy(ifr.ifr_name, ifname);
-   if(ioctl(*bpf, BIOCSETIF, &ifr) == -1) {
-     perror("BIOCSETIF");
-     return 0;
+   if (ioctl(*bpf, BIOCSETIF, &ifr) == -1)
+   {
+      perror("BIOCSETIF");
+      return 0;
    }
 
    /* Set required bpf options */
 
    /* Activate immediate mode */
-   if (ioctl(*bpf, BIOCIMMEDIATE, &true_val) == -1) {
-     perror("BIOCIMMEDIATE");
-     return 0;
+   if (ioctl(*bpf, BIOCIMMEDIATE, &true_val) == -1)
+   {
+      perror("BIOCIMMEDIATE");
+      return 0;
    }
 
    /* Set interface in promiscuous mode */
-   if (ioctl(*bpf, BIOCPROMISC, &true_val) == -1) {
-     perror("BIOCPROMISC");
-     return 0;
+   if (ioctl(*bpf, BIOCPROMISC, &true_val) == -1)
+   {
+      perror("BIOCPROMISC");
+      return 0;
    }
-   
+
    /* Allow to have custom source address */
-   if (ioctl(*bpf, BIOCSHDRCMPLT, &true_val) == -1) {
-     perror("BIOCSHDRCMPLT");
-     return 0;
+   if (ioctl(*bpf, BIOCSHDRCMPLT, &true_val) == -1)
+   {
+      perror("BIOCSHDRCMPLT");
+      return 0;
    }
 
    /* Listen only to incomming messages */
    uint direction = BPF_D_IN;
-   if (ioctl(*bpf, BIOCSDIRECTION, &direction) == -1) {
-     perror("BIOCSDIRECTION");
-     return 0;
+   if (ioctl(*bpf, BIOCSDIRECTION, &direction) == -1)
+   {
+      perror("BIOCSDIRECTION");
+      return 0;
    }
 
    /* Set read timeout */
-   timeout.tv_sec =  0;
+   timeout.tv_sec = 0;
    timeout.tv_usec = 11000;
-   if (ioctl(*bpf, BIOCSRTIMEOUT, &timeout) == -1) {
-     perror("BIOCSRTIMEOUT");
-     return 0;
+   if (ioctl(*bpf, BIOCSRTIMEOUT, &timeout) == -1)
+   {
+      perror("BIOCSRTIMEOUT");
+      return 0;
    }
 
    /* setup ethernet headers in tx buffers so we don't have to repeat it */
@@ -266,7 +273,7 @@ uint8 ecx_getindex(ecx_portt *port)
    uint8 idx;
    uint8 cnt;
 
-   pthread_mutex_lock( &(port->getindex_mutex) );
+   pthread_mutex_lock(&(port->getindex_mutex));
 
    idx = port->lastidx + 1;
    /* index can't be larger than buffer array */
@@ -290,7 +297,7 @@ uint8 ecx_getindex(ecx_portt *port)
       port->redport->rxbufstat[idx] = EC_BUF_ALLOC;
    port->lastidx = idx;
 
-   pthread_mutex_unlock( &(port->getindex_mutex) );
+   pthread_mutex_unlock(&(port->getindex_mutex));
 
    return idx;
 }
@@ -327,9 +334,9 @@ int ecx_outframe(ecx_portt *port, uint8 idx, int stacknumber)
       stack = &(port->redport->stack);
    }
    lp = (*stack->txbuflength)[idx];
-   //rval = send(*stack->sock, (*stack->txbuf)[idx], lp, 0);
+   // rval = send(*stack->sock, (*stack->txbuf)[idx], lp, 0);
    (*stack->rxbufstat)[idx] = EC_BUF_TX;
-   rval = write (*stack->sock,(*stack->txbuf)[idx], lp);
+   rval = write(*stack->sock, (*stack->txbuf)[idx], lp);
    if (rval == -1)
    {
       (*stack->rxbufstat)[idx] = EC_BUF_EMPTY;
@@ -356,22 +363,22 @@ int ecx_outframe_red(ecx_portt *port, uint8 idx)
    rval = ecx_outframe(port, idx, 0);
    if (port->redstate != ECT_RED_NONE)
    {
-      pthread_mutex_lock( &(port->tx_mutex) );
+      pthread_mutex_lock(&(port->tx_mutex));
       ehp = (ec_etherheadert *)&(port->txbuf2);
       /* use dummy frame for secondary socket transmit (BRD) */
-      datagramP = (ec_comt*)&(port->txbuf2[ETH_HEADERSIZE]);
+      datagramP = (ec_comt *)&(port->txbuf2[ETH_HEADERSIZE]);
       /* write index to frame */
       datagramP->index = idx;
       /* rewrite MAC source address 1 to secondary */
       ehp->sa1 = htons(secMAC[1]);
       /* transmit over secondary socket */
-      //send(port->redport->sockhandle, &(port->txbuf2), port->txbuflength2 , 0);
+      // send(port->redport->sockhandle, &(port->txbuf2), port->txbuflength2 , 0);
       port->redport->rxbufstat[idx] = EC_BUF_TX;
       if (write(port->redport->sockhandle, &(port->txbuf2), port->txbuflength2) == -1)
       {
          (*stack->rxbufstat)[idx] = EC_BUF_EMPTY;
       }
-      pthread_mutex_unlock( &(port->tx_mutex) );
+      pthread_mutex_unlock(&(port->tx_mutex));
    }
 
    return rval;
@@ -396,7 +403,7 @@ static int ecx_recvpkt(ecx_portt *port, int stacknumber)
       stack = &(port->redport->stack);
    }
    lp = sizeof(port->tempinbuf);
-   //bytesrx = recv(*stack->sock, (*stack->tempbuf), lp, 0);
+   // bytesrx = recv(*stack->sock, (*stack->tempbuf), lp, 0);
    bytesrx = read(*stack->sock, (*stack->tempbuf), lp);
    port->tempinbufs = bytesrx;
 
@@ -421,9 +428,9 @@ static int ecx_recvpkt(ecx_portt *port, int stacknumber)
  */
 int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
 {
-   uint16  l;
-   int     rval;
-   uint8   idxf;
+   uint16 l;
+   int rval;
+   uint8 idxf;
    ec_etherheadert *ehp;
    ec_comt *ecp;
    ec_stackT *stack;
@@ -457,12 +464,12 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
          /* The data read from /dev/bpf includes an extra header, skip it. */
          struct bpf_hdr *bpfh = (struct bpf_hdr *)(stack->tempbuf);
          rval = EC_OTHERFRAME;
-         ehp =(ec_etherheadert*)(*stack->tempbuf + bpfh->bh_hdrlen);
+         ehp = (ec_etherheadert *)(*stack->tempbuf + bpfh->bh_hdrlen);
          /* check if it is an EtherCAT frame */
          if (ehp->etype == htons(ETH_P_ECAT))
          {
             /* The EtherCAT header follows the ethernet frame header. */
-            ecp =(ec_comt*)(&ehp[1]);
+            ecp = (ec_comt *)(&ehp[1]);
             l = etohs(ecp->elength) & 0x0fff;
             idxf = ecp->index;
             /* found index equals requested index ? */
@@ -496,8 +503,7 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
             }
          }
       }
-      pthread_mutex_unlock( &(port->rx_mutex) );
-
+      pthread_mutex_unlock(&(port->rx_mutex));
    }
 
    /* WKC if matching frame found */
@@ -519,7 +525,7 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
 static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
 {
    osal_timert timer2;
-   int wkc  = EC_NOFRAME;
+   int wkc = EC_NOFRAME;
    int wkc2 = EC_NOFRAME;
    int primrx, secrx;
 
@@ -530,7 +536,7 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
    {
       /* only read frame if not already in */
       if (wkc <= EC_NOFRAME)
-         wkc  = ecx_inframe(port, idx, 0);
+         wkc = ecx_inframe(port, idx, 0);
       /* only try secondary if in redundant mode */
       if (port->redstate != ECT_RED_NONE)
       {
@@ -538,7 +544,7 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
          if (wkc2 <= EC_NOFRAME)
             wkc2 = ecx_inframe(port, idx, 1);
       }
-   /* wait for both frames to arrive or timeout */
+      /* wait for both frames to arrive or timeout */
    } while (((wkc <= EC_NOFRAME) || (wkc2 <= EC_NOFRAME)) && !osal_timer_is_expired(timer));
    /* only do redundant functions when in redundant mode */
    if (port->redstate != ECT_RED_NONE)
@@ -552,7 +558,7 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
 
       /* primary socket got secondary frame and secondary socket got primary frame */
       /* normal situation in redundant mode */
-      if ( ((primrx == RX_SEC) && (secrx == RX_PRIM)) )
+      if (((primrx == RX_SEC) && (secrx == RX_PRIM)))
       {
          /* copy secondary buffer to primary */
          memcpy(&(port->rxbuf[idx]), &(port->redport->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
@@ -560,18 +566,18 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
       }
       /* primary socket got nothing or primary frame, and secondary socket got secondary frame */
       /* we need to resend TX packet */
-      if ( ((primrx == 0) && (secrx == RX_SEC)) ||
-           ((primrx == RX_PRIM) && (secrx == RX_SEC)) )
+      if (((primrx == 0) && (secrx == RX_SEC)) ||
+          ((primrx == RX_PRIM) && (secrx == RX_SEC)))
       {
          /* If both primary and secondary have partial connection retransmit the primary received
           * frame over the secondary socket. The result from the secondary received frame is a combined
           * frame that traversed all slaves in standard order. */
-         if ( (primrx == RX_PRIM) && (secrx == RX_SEC) )
+         if ((primrx == RX_PRIM) && (secrx == RX_SEC))
          {
             /* copy primary rx to tx buffer */
             memcpy(&(port->txbuf[idx][ETH_HEADERSIZE]), &(port->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
          }
-         osal_timer_start (&timer2, EC_TIMEOUTRET);
+         osal_timer_start(&timer2, EC_TIMEOUTRET);
          /* resend secondary tx */
          ecx_outframe(port, idx, 1);
          do
@@ -604,7 +610,7 @@ int ecx_waitinframe(ecx_portt *port, uint8 idx, int timeout)
    int wkc;
    osal_timert timer;
 
-   osal_timer_start (&timer, timeout);
+   osal_timer_start(&timer, timeout);
    wkc = ecx_waitinframe_red(port, idx, &timer);
 
    return wkc;
@@ -627,24 +633,24 @@ int ecx_srconfirm(ecx_portt *port, uint8 idx, int timeout)
    int wkc = EC_NOFRAME;
    osal_timert timer1, timer2;
 
-   osal_timer_start (&timer1, timeout);
+   osal_timer_start(&timer1, timeout);
    do
    {
       /* tx frame on primary and if in redundant mode a dummy on secondary */
       ecx_outframe_red(port, idx);
       if (timeout < EC_TIMEOUTRET)
       {
-         osal_timer_start (&timer2, timeout);
+         osal_timer_start(&timer2, timeout);
       }
       else
       {
          /* normally use partial timeout for rx */
-         osal_timer_start (&timer2, EC_TIMEOUTRET);
+         osal_timer_start(&timer2, EC_TIMEOUTRET);
       }
       /* get frame from primary or if in redundant mode possibly from secondary */
       wkc = ecx_waitinframe_red(port, idx, &timer2);
-   /* wait for answer with WKC>=0 or otherwise retry until timeout */
-   } while ((wkc <= EC_NOFRAME) && !osal_timer_is_expired (&timer1));
+      /* wait for answer with WKC>=0 or otherwise retry until timeout */
+   } while ((wkc <= EC_NOFRAME) && !osal_timer_is_expired(&timer1));
 
    return wkc;
 }
index 6a5190a0ac22026dadb35d74a68de2b29a4e3b11..17984a6556e0d26ab3e6c7b52e87ad2162037224 100644 (file)
@@ -13,8 +13,7 @@
 #define _nicdrvh_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 #include <pthread.h>
@@ -23,26 +22,26 @@ extern "C"
 typedef struct
 {
    /** socket connection used */
-   int         *sock;
+   int *sock;
    /** tx buffer */
-   ec_bufT     (*txbuf)[EC_MAXBUF];
+   ec_bufT (*txbuf)[EC_MAXBUF];
    /** tx buffer lengths */
-   int         (*txbuflength)[EC_MAXBUF];
+   int (*txbuflength)[EC_MAXBUF];
    /** temporary receive buffer */
-   ec_bufT     *tempbuf;
+   ec_bufT *tempbuf;
    /** rx buffers */
-   ec_bufT     (*rxbuf)[EC_MAXBUF];
+   ec_bufT (*rxbuf)[EC_MAXBUF];
    /** rx buffer status fields */
-   int         (*rxbufstat)[EC_MAXBUF];
+   int (*rxbufstat)[EC_MAXBUF];
    /** received MAC source address (middle word) */
-   int         (*rxsa)[EC_MAXBUF];
+   int (*rxsa)[EC_MAXBUF];
 } ec_stackT;
 
 /** pointer structure to buffers for redundant port */
 typedef struct
 {
-   ec_stackT   stack;
-   int         sockhandle;
+   ec_stackT stack;
+   int sockhandle;
    /** rx buffers */
    ec_bufT rxbuf[EC_MAXBUF];
    /** rx buffer status */
@@ -56,8 +55,8 @@ typedef struct
 /** pointer structure to buffers, vars and mutexes for port instantiation */
 typedef struct
 {
-   ec_stackT   stack;
-   int         sockhandle;
+   ec_stackT stack;
+   int sockhandle;
    /** rx buffers */
    ec_bufT rxbuf[EC_MAXBUF];
    /** rx buffer status */
@@ -91,14 +90,14 @@ extern const uint16 priMAC[3];
 extern const uint16 secMAC[3];
 
 void ec_setupheader(void *p);
-int ecx_setupnic(ecx_portt *port, const char * ifname, int secondary);
+int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary);
 int ecx_closenic(ecx_portt *port);
 void ecx_setbufstat(ecx_portt *port, uint8 idx, int bufstat);
 uint8 ecx_getindex(ecx_portt *port);
 int ecx_outframe(ecx_portt *port, uint8 idx, int sock);
 int ecx_outframe_red(ecx_portt *port, uint8 idx);
 int ecx_waitinframe(ecx_portt *port, uint8 idx, int timeout);
-int ecx_srconfirm(ecx_portt *port, uint8 idx,int timeout);
+int ecx_srconfirm(ecx_portt *port, uint8 idx, int timeout);
 
 #ifdef __cplusplus
 }
index eb53896218577adb9f564db9384e5605a0fb305b..c864e3550fc798db298fac43f1c1252c7c943e7f 100644 (file)
@@ -21,7 +21,7 @@
  */
 uint16 oshw_htons(uint16 host)
 {
-   uint16 network = htons (host);
+   uint16 network = htons(host);
    return network;
 }
 
@@ -33,28 +33,27 @@ uint16 oshw_htons(uint16 host)
  */
 uint16 oshw_ntohs(uint16 network)
 {
-   uint16 host = ntohs (network);
+   uint16 host = ntohs(network);
    return host;
 }
 
 /** Create list over available network adapters.
  * @return First element in linked list of adapters
  */
-ec_adaptert * oshw_find_adapters(void)
+ec_adaptert *oshw_find_adapters(void)
 {
    int i;
    struct if_nameindex *ids;
-   ec_adaptert * adapter;
-   ec_adaptert * prev_adapter;
-   ec_adaptert * ret_adapter = NULL;
-
+   ec_adaptert *adapter;
+   ec_adaptert *prev_adapter;
+   ec_adaptert *ret_adapter = NULL;
 
    /* Iterate all devices and create a local copy holding the name and
     * description.
     */
 
-   ids = if_nameindex ();
-   for(i = 0; ids[i].if_index != 0; i++)
+   ids = if_nameindex();
+   for (i = 0; ids[i].if_index != 0; i++)
    {
       adapter = (ec_adaptert *)malloc(sizeof(ec_adaptert));
       /* If we got more than one adapter save link list pointer to previous
@@ -75,10 +74,10 @@ ec_adaptert * oshw_find_adapters(void)
 
       if (ids[i].if_name)
       {
-          strncpy(adapter->name, ids[i].if_name, EC_MAXLEN_ADAPTERNAME);
-          adapter->name[EC_MAXLEN_ADAPTERNAME-1] = '\0';
-          strncpy(adapter->desc, ids[i].if_name, EC_MAXLEN_ADAPTERNAME);
-          adapter->desc[EC_MAXLEN_ADAPTERNAME-1] = '\0';
+         strncpy(adapter->name, ids[i].if_name, EC_MAXLEN_ADAPTERNAME);
+         adapter->name[EC_MAXLEN_ADAPTERNAME - 1] = '\0';
+         strncpy(adapter->desc, ids[i].if_name, EC_MAXLEN_ADAPTERNAME);
+         adapter->desc[EC_MAXLEN_ADAPTERNAME - 1] = '\0';
       }
       else
       {
@@ -89,7 +88,7 @@ ec_adaptert * oshw_find_adapters(void)
       prev_adapter = adapter;
    }
 
-   if_freenameindex (ids);
+   if_freenameindex(ids);
 
    return ret_adapter;
 }
@@ -98,21 +97,21 @@ ec_adaptert * oshw_find_adapters(void)
  * @param[in] adapter = First element in linked list of adapters
  * EC_NOFRAME.
  */
-void oshw_free_adapters(ec_adaptert * adapter)
+void oshw_free_adapters(ec_adaptert *adapter)
 {
-   ec_adaptert * next_adapter;
+   ec_adaptert *next_adapter;
    /* Iterate the linked list and free all elements holding
     * adapter information
     */
-   if(adapter)
+   if (adapter)
    {
       next_adapter = adapter->next;
-      free (adapter);
+      free(adapter);
       while (next_adapter)
       {
          adapter = next_adapter;
          next_adapter = adapter->next;
-         free (adapter);
+         free(adapter);
       }
    }
 }
index e998004cdb065654d92db334a1a96e515cd35e86..350ef51176535872e868677fa3a69c46ff2b34d1 100644 (file)
@@ -21,8 +21,8 @@ extern "C" {
 
 uint16 oshw_htons(uint16 hostshort);
 uint16 oshw_ntohs(uint16 networkshort);
-ec_adaptert * oshw_find_adapters(void);
-void oshw_free_adapters(ec_adaptert * adapter);
+ec_adaptert *oshw_find_adapters(void);
+void oshw_free_adapters(ec_adaptert *adapter);
 
 #ifdef __cplusplus
 }
index 2ec5f36b9e5d03b5c8725ac47136b8bcda737cfb..68b8ffa2e528fb914458c29678daa97e97ccc8b6 100644 (file)
@@ -10,7 +10,7 @@
  * See LICENSE file in the project root for full license information.
  ********************************************************************/
 
-#if defined (sabresd) || defined (twrk60f)
+#if defined(sabresd) || defined(twrk60f)
 
 #include "fec_ecat.h"
 #include "oshw.h"
 #include <bsp.h>
 #include <config.h>
 
-#undef RTK_DEBUG                /* Print debugging info? */
-#undef RTK_DEBUG_DATA           /* Print packets? */
+#undef RTK_DEBUG      /* Print debugging info? */
+#undef RTK_DEBUG_DATA /* Print packets? */
 
 #ifdef RTK_DEBUG
-#define DPRINT(...) rprintp ("FEC: "__VA_ARGS__)
+#define DPRINT(...) rprintp("FEC: "__VA_ARGS__)
 #else
 #define DPRINT(...)
-#endif  /* DEBUG */
+#endif /* DEBUG */
 
 #ifdef RTK_DEBUG_DATA
-#define DUMP_PACKET(p, l) fec_ecat_dump_packet (p, l)
+#define DUMP_PACKET(p, l) fec_ecat_dump_packet(p, l)
 #else
 #define DUMP_PACKET(p, l)
-#endif  /* RTK_DEBUG_DATA */
+#endif /* RTK_DEBUG_DATA */
 
-#define ETHERNET_FCS_SIZE_IN_BYTES     4 /* Frame Check Sequence (32-bit CRC) */
+#define ETHERNET_FCS_SIZE_IN_BYTES 4 /* Frame Check Sequence (32-bit CRC) */
 
-#define DELAY(ms) task_delay (tick_from_ms (ms) + 1)
+#define DELAY(ms)                  task_delay(tick_from_ms(ms) + 1)
 
-#define ETH_PHY_ADDRESS 0x1 /* Default jumper setting on TWR-K60F */
+#define ETH_PHY_ADDRESS            0x1 /* Default jumper setting on TWR-K60F */
 
-#define NUM_BUFFERS 2
-#define FEC_ALLIGNED __attribute__((section(".dma"),aligned(16)))
+#define NUM_BUFFERS                2
+#define FEC_ALLIGNED               __attribute__((section(".dma"), aligned(16)))
 
 /*
  * "The device's system clock is connected to the module clock,
  *
  * - Kinetis K60 manual ch. 3.9.1.1 "Ethernet Clocking Options"
  */
-#define FEC_MIN_MODULE_CLOCK_Hz (25 * 1000 * 1000)
+#define FEC_MIN_MODULE_CLOCK_Hz    (25 * 1000 * 1000)
 
 /* Note that the core clock and the system clock has the same clock frequency */
-#define FEC_MODULE_CLOCK_Hz CFG_IPG_CLOCK
+#define FEC_MODULE_CLOCK_Hz        CFG_IPG_CLOCK
 
-
-#if defined (sabresd)
-extern phy_t * ar8031_init (const phy_cfg_t * cfg);
+#if defined(sabresd)
+extern phy_t *ar8031_init(const phy_cfg_t *cfg);
 
 #define PHY_INIT      ar8031_init
 #define PHY_INTERFACE FEC_PHY_RGMII
 #endif
 
-#if defined (twrk60f)
+#if defined(twrk60f)
 #define PHY_INIT      mii_init
 #define PHY_INTERFACE FEC_PHY_RMII
 #endif
 
-
 //----------------------------------------------------------------------------//
 
 typedef struct fec_mac_t
@@ -85,66 +83,66 @@ typedef struct fec_mac_t
 /* Message Information Block (MIB) Counters */
 typedef struct fec_mib
 {
-   uint32_t rmon_t_drop;      /* MBAR_ETH + 0x200 */
-   uint32_t rmon_t_packets;   /* MBAR_ETH + 0x204 */
-   uint32_t rmon_t_bc_pkt;    /* MBAR_ETH + 0x208 */
-   uint32_t rmon_t_mc_pkt;    /* MBAR_ETH + 0x20C */
-   uint32_t rmon_t_crc_align; /* MBAR_ETH + 0x210 */
-   uint32_t rmon_t_undersize; /* MBAR_ETH + 0x214 */
-   uint32_t rmon_t_oversize;  /* MBAR_ETH + 0x218 */
-   uint32_t rmon_t_frag;      /* MBAR_ETH + 0x21C */
-   uint32_t rmon_t_jab;    /* MBAR_ETH + 0x220 */
-   uint32_t rmon_t_col;    /* MBAR_ETH + 0x224 */
-   uint32_t rmon_t_p64;    /* MBAR_ETH + 0x228 */
-   uint32_t rmon_t_p65to127;  /* MBAR_ETH + 0x22C */
-   uint32_t rmon_t_p128to255; /* MBAR_ETH + 0x230 */
-   uint32_t rmon_t_p256to511; /* MBAR_ETH + 0x234 */
-   uint32_t rmon_t_p512to1023;   /* MBAR_ETH + 0x238 */
-   uint32_t rmon_t_p1024to2047;  /* MBAR_ETH + 0x23C */
-   uint32_t rmon_t_p_gte2048; /* MBAR_ETH + 0x240 */
-   uint32_t rmon_t_octets;    /* MBAR_ETH + 0x244 */
-   uint32_t ieee_t_drop;      /* MBAR_ETH + 0x248 */
-   uint32_t ieee_t_frame_ok;  /* MBAR_ETH + 0x24C */
-   uint32_t ieee_t_1col;      /* MBAR_ETH + 0x250 */
-   uint32_t ieee_t_mcol;      /* MBAR_ETH + 0x254 */
-   uint32_t ieee_t_def;    /* MBAR_ETH + 0x258 */
-   uint32_t ieee_t_lcol;      /* MBAR_ETH + 0x25C */
-   uint32_t ieee_t_excol;     /* MBAR_ETH + 0x260 */
-   uint32_t ieee_t_macerr;    /* MBAR_ETH + 0x264 */
-   uint32_t ieee_t_cserr;     /* MBAR_ETH + 0x268 */
-   uint32_t ieee_t_sqe;    /* MBAR_ETH + 0x26C */
-   uint32_t t_fdxfc;    /* MBAR_ETH + 0x270 */
-   uint32_t ieee_t_octets_ok; /* MBAR_ETH + 0x274 */
-   uint32_t res13[2];      /* MBAR_ETH + 0x278-27C */
-   uint32_t rmon_r_drop;      /* MBAR_ETH + 0x280 */
-   uint32_t rmon_r_packets;   /* MBAR_ETH + 0x284 */
-   uint32_t rmon_r_bc_pkt;    /* MBAR_ETH + 0x288 */
-   uint32_t rmon_r_mc_pkt;    /* MBAR_ETH + 0x28C */
-   uint32_t rmon_r_crc_align; /* MBAR_ETH + 0x290 */
-   uint32_t rmon_r_undersize; /* MBAR_ETH + 0x294 */
-   uint32_t rmon_r_oversize;  /* MBAR_ETH + 0x298 */
-   uint32_t rmon_r_frag;      /* MBAR_ETH + 0x29C */
-   uint32_t rmon_r_jab;    /* MBAR_ETH + 0x2A0 */
-   uint32_t rmon_r_resvd_0;   /* MBAR_ETH + 0x2A4 */
-   uint32_t rmon_r_p64;    /* MBAR_ETH + 0x2A8 */
-   uint32_t rmon_r_p65to127;  /* MBAR_ETH + 0x2AC */
-   uint32_t rmon_r_p128to255; /* MBAR_ETH + 0x2B0 */
-   uint32_t rmon_r_p256to511; /* MBAR_ETH + 0x2B4 */
-   uint32_t rmon_r_p512to1023;   /* MBAR_ETH + 0x2B8 */
-   uint32_t rmon_r_p1024to2047;  /* MBAR_ETH + 0x2BC */
-   uint32_t rmon_r_p_gte2048; /* MBAR_ETH + 0x2C0 */
-   uint32_t rmon_r_octets;    /* MBAR_ETH + 0x2C4 */
-   uint32_t ieee_r_drop;      /* MBAR_ETH + 0x2C8 */
-   uint32_t ieee_r_frame_ok;  /* MBAR_ETH + 0x2CC */
-   uint32_t ieee_r_crc;    /* MBAR_ETH + 0x2D0 */
-   uint32_t ieee_r_align;     /* MBAR_ETH + 0x2D4 */
-   uint32_t r_macerr;      /* MBAR_ETH + 0x2D8 */
-   uint32_t r_fdxfc;    /* MBAR_ETH + 0x2DC */
-   uint32_t ieee_r_octets_ok; /* MBAR_ETH + 0x2E0 */
-   uint32_t res14[7];      /* MBAR_ETH + 0x2E4-2FC */
+   uint32_t rmon_t_drop;        /* MBAR_ETH + 0x200 */
+   uint32_t rmon_t_packets;     /* MBAR_ETH + 0x204 */
+   uint32_t rmon_t_bc_pkt;      /* MBAR_ETH + 0x208 */
+   uint32_t rmon_t_mc_pkt;      /* MBAR_ETH + 0x20C */
+   uint32_t rmon_t_crc_align;   /* MBAR_ETH + 0x210 */
+   uint32_t rmon_t_undersize;   /* MBAR_ETH + 0x214 */
+   uint32_t rmon_t_oversize;    /* MBAR_ETH + 0x218 */
+   uint32_t rmon_t_frag;        /* MBAR_ETH + 0x21C */
+   uint32_t rmon_t_jab;         /* MBAR_ETH + 0x220 */
+   uint32_t rmon_t_col;         /* MBAR_ETH + 0x224 */
+   uint32_t rmon_t_p64;         /* MBAR_ETH + 0x228 */
+   uint32_t rmon_t_p65to127;    /* MBAR_ETH + 0x22C */
+   uint32_t rmon_t_p128to255;   /* MBAR_ETH + 0x230 */
+   uint32_t rmon_t_p256to511;   /* MBAR_ETH + 0x234 */
+   uint32_t rmon_t_p512to1023;  /* MBAR_ETH + 0x238 */
+   uint32_t rmon_t_p1024to2047; /* MBAR_ETH + 0x23C */
+   uint32_t rmon_t_p_gte2048;   /* MBAR_ETH + 0x240 */
+   uint32_t rmon_t_octets;      /* MBAR_ETH + 0x244 */
+   uint32_t ieee_t_drop;        /* MBAR_ETH + 0x248 */
+   uint32_t ieee_t_frame_ok;    /* MBAR_ETH + 0x24C */
+   uint32_t ieee_t_1col;        /* MBAR_ETH + 0x250 */
+   uint32_t ieee_t_mcol;        /* MBAR_ETH + 0x254 */
+   uint32_t ieee_t_def;         /* MBAR_ETH + 0x258 */
+   uint32_t ieee_t_lcol;        /* MBAR_ETH + 0x25C */
+   uint32_t ieee_t_excol;       /* MBAR_ETH + 0x260 */
+   uint32_t ieee_t_macerr;      /* MBAR_ETH + 0x264 */
+   uint32_t ieee_t_cserr;       /* MBAR_ETH + 0x268 */
+   uint32_t ieee_t_sqe;         /* MBAR_ETH + 0x26C */
+   uint32_t t_fdxfc;            /* MBAR_ETH + 0x270 */
+   uint32_t ieee_t_octets_ok;   /* MBAR_ETH + 0x274 */
+   uint32_t res13[2];           /* MBAR_ETH + 0x278-27C */
+   uint32_t rmon_r_drop;        /* MBAR_ETH + 0x280 */
+   uint32_t rmon_r_packets;     /* MBAR_ETH + 0x284 */
+   uint32_t rmon_r_bc_pkt;      /* MBAR_ETH + 0x288 */
+   uint32_t rmon_r_mc_pkt;      /* MBAR_ETH + 0x28C */
+   uint32_t rmon_r_crc_align;   /* MBAR_ETH + 0x290 */
+   uint32_t rmon_r_undersize;   /* MBAR_ETH + 0x294 */
+   uint32_t rmon_r_oversize;    /* MBAR_ETH + 0x298 */
+   uint32_t rmon_r_frag;        /* MBAR_ETH + 0x29C */
+   uint32_t rmon_r_jab;         /* MBAR_ETH + 0x2A0 */
+   uint32_t rmon_r_resvd_0;     /* MBAR_ETH + 0x2A4 */
+   uint32_t rmon_r_p64;         /* MBAR_ETH + 0x2A8 */
+   uint32_t rmon_r_p65to127;    /* MBAR_ETH + 0x2AC */
+   uint32_t rmon_r_p128to255;   /* MBAR_ETH + 0x2B0 */
+   uint32_t rmon_r_p256to511;   /* MBAR_ETH + 0x2B4 */
+   uint32_t rmon_r_p512to1023;  /* MBAR_ETH + 0x2B8 */
+   uint32_t rmon_r_p1024to2047; /* MBAR_ETH + 0x2BC */
+   uint32_t rmon_r_p_gte2048;   /* MBAR_ETH + 0x2C0 */
+   uint32_t rmon_r_octets;      /* MBAR_ETH + 0x2C4 */
+   uint32_t ieee_r_drop;        /* MBAR_ETH + 0x2C8 */
+   uint32_t ieee_r_frame_ok;    /* MBAR_ETH + 0x2CC */
+   uint32_t ieee_r_crc;         /* MBAR_ETH + 0x2D0 */
+   uint32_t ieee_r_align;       /* MBAR_ETH + 0x2D4 */
+   uint32_t r_macerr;           /* MBAR_ETH + 0x2D8 */
+   uint32_t r_fdxfc;            /* MBAR_ETH + 0x2DC */
+   uint32_t ieee_r_octets_ok;   /* MBAR_ETH + 0x2E0 */
+   uint32_t res14[7];           /* MBAR_ETH + 0x2E4-2FC */
 } fec_mib_t;
 
-COMPILETIME_ASSERT (sizeof (fec_mib_t) == 0x100);
+COMPILETIME_ASSERT(sizeof(fec_mib_t) == 0x100);
 
 /* Register read/write struct */
 typedef struct reg_fec
@@ -167,7 +165,7 @@ typedef struct reg_fec
    uint32_t resv6[15];
    uint32_t tcr;
    uint32_t resv7[7];
-   fec_mac_t pa;              /* Physical address. PALR/PAUR */
+   fec_mac_t pa; /* Physical address. PALR/PAUR */
    uint32_t opd;
    uint32_t resv8[10];
    uint32_t iaur;
@@ -193,160 +191,160 @@ typedef struct reg_fec
    uint32_t tx_almost_full;   /* Not present on all controllers */
    uint32_t resv12[21];
    const fec_mib_t mib;
-   uint32_t fec_miigsk_cfgr;  /* Not present on all controllers */
+   uint32_t fec_miigsk_cfgr; /* Not present on all controllers */
    uint32_t resv13;
-   uint32_t fec_miigsk_enr;   /* Not present on all controllers */
+   uint32_t fec_miigsk_enr; /* Not present on all controllers */
    uint32_t resv15[0x7d];
-   fec_mac_t smac[4];         /* Not present on all controllers */
+   fec_mac_t smac[4]; /* Not present on all controllers */
 } reg_fec_t;
 
-COMPILETIME_ASSERT (offsetof (reg_fec_t, emrbr) == 0x188);
-COMPILETIME_ASSERT (offsetof (reg_fec_t, tx_almost_full) == 0x1A8);
-COMPILETIME_ASSERT (offsetof (reg_fec_t, fec_miigsk_cfgr) == 0x300);
-COMPILETIME_ASSERT (offsetof (reg_fec_t, smac) == 0x500);
-COMPILETIME_ASSERT (offsetof (reg_fec_t, smac[3]) == 0x518);
+COMPILETIME_ASSERT(offsetof(reg_fec_t, emrbr) == 0x188);
+COMPILETIME_ASSERT(offsetof(reg_fec_t, tx_almost_full) == 0x1A8);
+COMPILETIME_ASSERT(offsetof(reg_fec_t, fec_miigsk_cfgr) == 0x300);
+COMPILETIME_ASSERT(offsetof(reg_fec_t, smac) == 0x500);
+COMPILETIME_ASSERT(offsetof(reg_fec_t, smac[3]) == 0x518);
 
 //----------------------------------------------------------------------------//
 
 /* Bit definitions and macros for FEC_EIR */
-#define FEC_EIR_CLEAR_ALL     (0xFFF80000)
-#define FEC_EIR_HBERR         (0x80000000)
-#define FEC_EIR_BABR          (0x40000000)
-#define FEC_EIR_BABT          (0x20000000)
-#define FEC_EIR_GRA           (0x10000000)
-#define FEC_EIR_TXF           (0x08000000)
-#define FEC_EIR_TXB           (0x04000000)
-#define FEC_EIR_RXF           (0x02000000)
-#define FEC_EIR_RXB           (0x01000000)
-#define FEC_EIR_MII           (0x00800000)
-#define FEC_EIR_EBERR         (0x00400000)
-#define FEC_EIR_LC            (0x00200000)
-#define FEC_EIR_RL            (0x00100000)
-#define FEC_EIR_UN            (0x00080000)
+#define FEC_EIR_CLEAR_ALL        (0xFFF80000)
+#define FEC_EIR_HBERR            (0x80000000)
+#define FEC_EIR_BABR             (0x40000000)
+#define FEC_EIR_BABT             (0x20000000)
+#define FEC_EIR_GRA              (0x10000000)
+#define FEC_EIR_TXF              (0x08000000)
+#define FEC_EIR_TXB              (0x04000000)
+#define FEC_EIR_RXF              (0x02000000)
+#define FEC_EIR_RXB              (0x01000000)
+#define FEC_EIR_MII              (0x00800000)
+#define FEC_EIR_EBERR            (0x00400000)
+#define FEC_EIR_LC               (0x00200000)
+#define FEC_EIR_RL               (0x00100000)
+#define FEC_EIR_UN               (0x00080000)
 
 /* Bit definitions and macros for FEC_RDAR */
-#define FEC_RDAR_R_DES_ACTIVE (0x01000000)
+#define FEC_RDAR_R_DES_ACTIVE    (0x01000000)
 
 /* Bit definitions and macros for FEC_TDAR */
-#define FEC_TDAR_X_DES_ACTIVE (0x01000000)
+#define FEC_TDAR_X_DES_ACTIVE    (0x01000000)
 
 /* Bit definitions and macros for FEC_ECR */
-#define FEC_ECR_DBSWP         (0x00000100)
-#define FEC_ECR_SPEED         (0x00000020)
-#define FEC_ECR_ETHER_EN      (0x00000002)
-#define FEC_ECR_RESET         (0x00000001)
+#define FEC_ECR_DBSWP            (0x00000100)
+#define FEC_ECR_SPEED            (0x00000020)
+#define FEC_ECR_ETHER_EN         (0x00000002)
+#define FEC_ECR_RESET            (0x00000001)
 
 /* Bit definitions and macros for FEC_MMFR */
-#define FEC_MMFR_DATA(x)      (((x)&0xFFFF))
-#define FEC_MMFR_ST(x)        (((x)&0x03)<<30)
-#define FEC_MMFR_ST_01        (0x40000000)
-#define FEC_MMFR_OP_RD        (0x20000000)
-#define FEC_MMFR_OP_WR        (0x10000000)
-#define FEC_MMFR_PA(x)        (((x)&0x1F)<<23)
-#define FEC_MMFR_RA(x)        (((x)&0x1F)<<18)
-#define FEC_MMFR_TA(x)        (((x)&0x03)<<16)
-#define FEC_MMFR_TA_10        (0x00020000)
+#define FEC_MMFR_DATA(x)         (((x) & 0xFFFF))
+#define FEC_MMFR_ST(x)           (((x) & 0x03) << 30)
+#define FEC_MMFR_ST_01           (0x40000000)
+#define FEC_MMFR_OP_RD           (0x20000000)
+#define FEC_MMFR_OP_WR           (0x10000000)
+#define FEC_MMFR_PA(x)           (((x) & 0x1F) << 23)
+#define FEC_MMFR_RA(x)           (((x) & 0x1F) << 18)
+#define FEC_MMFR_TA(x)           (((x) & 0x03) << 16)
+#define FEC_MMFR_TA_10           (0x00020000)
 
 /* Bit definitions and macros for FEC_MSCR */
-#define FEC_MSCR_DIS_PREAMBLE (0x00000080)
-#define FEC_MSCR_MII_SPEED(x) (((x)&0x3F)<<1)
+#define FEC_MSCR_DIS_PREAMBLE    (0x00000080)
+#define FEC_MSCR_MII_SPEED(x)    (((x) & 0x3F) << 1)
 
 /* Bit definitions and macros for FEC_MIBC */
-#define FEC_MIBC_MIB_DISABLE      (0x80000000)
-#define FEC_MIBC_MIB_IDLE      (0x40000000)
+#define FEC_MIBC_MIB_DISABLE     (0x80000000)
+#define FEC_MIBC_MIB_IDLE        (0x40000000)
 
 /* Bit definitions and macros for FEC_RCR */
-#define FEC_RCR_GRS           (0x80000000)
-#define FEC_RCR_NO_LGTH_CHECK (0x40000000)
-#define FEC_RCR_MAX_FL(x)     (((x)&0x7FF)<<16)
-#define FEC_RCR_CNTL_FRM_ENA  (0x00008000)
-#define FEC_RCR_CRC_FWD       (0x00004000)
-#define FEC_RCR_PAUSE_FWD     (0x00002000)
-#define FEC_RCR_PAD_EN        (0x00001000)
-#define FEC_RCR_RMII_ECHO     (0x00000800)
-#define FEC_RCR_RMII_LOOP     (0x00000400)
-#define FEC_RCR_RMII_10T      (0x00000200)
-#define FEC_RCR_RMII_MODE     (0x00000100)
-#define FEC_RCR_SGMII_ENA     (0x00000080)
-#define FEC_RCR_RGMII_EN      (0x00000040)
-#define FEC_RCR_FCE           (0x00000020)
-#define FEC_RCR_BC_REJ        (0x00000010)
-#define FEC_RCR_PROM          (0x00000008)
-#define FEC_RCR_MII_MODE      (0x00000004)
-#define FEC_RCR_DRT           (0x00000002)
-#define FEC_RCR_LOOP          (0x00000001)
+#define FEC_RCR_GRS              (0x80000000)
+#define FEC_RCR_NO_LGTH_CHECK    (0x40000000)
+#define FEC_RCR_MAX_FL(x)        (((x) & 0x7FF) << 16)
+#define FEC_RCR_CNTL_FRM_ENA     (0x00008000)
+#define FEC_RCR_CRC_FWD          (0x00004000)
+#define FEC_RCR_PAUSE_FWD        (0x00002000)
+#define FEC_RCR_PAD_EN           (0x00001000)
+#define FEC_RCR_RMII_ECHO        (0x00000800)
+#define FEC_RCR_RMII_LOOP        (0x00000400)
+#define FEC_RCR_RMII_10T         (0x00000200)
+#define FEC_RCR_RMII_MODE        (0x00000100)
+#define FEC_RCR_SGMII_ENA        (0x00000080)
+#define FEC_RCR_RGMII_EN         (0x00000040)
+#define FEC_RCR_FCE              (0x00000020)
+#define FEC_RCR_BC_REJ           (0x00000010)
+#define FEC_RCR_PROM             (0x00000008)
+#define FEC_RCR_MII_MODE         (0x00000004)
+#define FEC_RCR_DRT              (0x00000002)
+#define FEC_RCR_LOOP             (0x00000001)
 
 /* Bit definitions and macros for FEC_TCR */
-#define FEC_TCR_RFC_PAUSE     (0x00000010)
-#define FEC_TCR_TFC_PAUSE     (0x00000008)
-#define FEC_TCR_FDEN          (0x00000004)
-#define FEC_TCR_HBC           (0x00000002)
-#define FEC_TCR_GTS           (0x00000001)
+#define FEC_TCR_RFC_PAUSE        (0x00000010)
+#define FEC_TCR_TFC_PAUSE        (0x00000008)
+#define FEC_TCR_FDEN             (0x00000004)
+#define FEC_TCR_HBC              (0x00000002)
+#define FEC_TCR_GTS              (0x00000001)
 
 /* Bit definitions and macros for FEC_PAUR */
-#define FEC_PAUR_PADDR2(x)    (((x)&0xFFFF)<<16)
-#define FEC_PAUR_TYPE(x)      ((x)&0xFFFF)
+#define FEC_PAUR_PADDR2(x)       (((x) & 0xFFFF) << 16)
+#define FEC_PAUR_TYPE(x)         ((x) & 0xFFFF)
 
 /* Bit definitions and macros for FEC_OPD */
-#define FEC_OPD_PAUSE_DUR(x)  (((x)&0x0000FFFF)<<0)
-#define FEC_OPD_OPCODE(x)     (((x)&0x0000FFFF)<<16)
+#define FEC_OPD_PAUSE_DUR(x)     (((x) & 0x0000FFFF) << 0)
+#define FEC_OPD_OPCODE(x)        (((x) & 0x0000FFFF) << 16)
 
 /* Bit definitions and macros for FEC_TFWR */
-#define FEC_TFWR_STR_FWD      BIT (8) /* Present on ENET but not on FEC */
-#define FEC_TFWR_X_WMRK(x)    ((x)&0x03)
-#define FEC_TFWR_X_WMRK_64    (0x01)
-#define FEC_TFWR_X_WMRK_128   (0x02)
-#define FEC_TFWR_X_WMRK_192   (0x03)
+#define FEC_TFWR_STR_FWD         BIT(8) /* Present on ENET but not on FEC */
+#define FEC_TFWR_X_WMRK(x)       ((x) & 0x03)
+#define FEC_TFWR_X_WMRK_64       (0x01)
+#define FEC_TFWR_X_WMRK_128      (0x02)
+#define FEC_TFWR_X_WMRK_192      (0x03)
 
 /* Bit definitions and macros for FEC_FRBR */
-#define FEC_FRBR_R_BOUND(x)   (((x)&0xFF)<<2)
+#define FEC_FRBR_R_BOUND(x)      (((x) & 0xFF) << 2)
 
 /* Bit definitions and macros for FEC_FRSR */
-#define FEC_FRSR_R_FSTART(x)  (((x)&0xFF)<<2)
+#define FEC_FRSR_R_FSTART(x)     (((x) & 0xFF) << 2)
 
 /* Bit definitions and macros for FEC_ERDSR */
-#define FEC_ERDSR_R_DES_START(x)    (((x)&0x3FFFFFFF)<<2)
+#define FEC_ERDSR_R_DES_START(x) (((x) & 0x3FFFFFFF) << 2)
 
 /* Bit definitions and macros for FEC_ETDSR */
-#define FEC_ETDSR_X_DES_START(x)    (((x)&0x3FFFFFFF)<<2)
+#define FEC_ETDSR_X_DES_START(x) (((x) & 0x3FFFFFFF) << 2)
 
 /* Bit definitions and macros for FEC_EMRBR */
-#define FEC_EMRBR_R_BUF_SIZE(x)     (((x)&0x7F)<<4)
+#define FEC_EMRBR_R_BUF_SIZE(x)  (((x) & 0x7F) << 4)
 
 //----------------------------------------------------------------------------//
 
 /* the defines of MII operation */
-#define FEC_MII_ST      0x40000000
-#define FEC_MII_OP_OFF  28
-#define FEC_MII_OP_MASK 0x03
-#define FEC_MII_OP_RD   0x02
-#define FEC_MII_OP_WR   0x01
-#define FEC_MII_PA_OFF  23
-#define FEC_MII_PA_MASK 0xFF
-#define FEC_MII_RA_OFF  18
-#define FEC_MII_RA_MASK 0xFF
-#define FEC_MII_TA      0x00020000
-#define FEC_MII_DATA_OFF 0
-#define FEC_MII_DATA_MASK 0x0000FFFF
-
-#define FEC_MII_FRAME   (FEC_MII_ST | FEC_MII_TA)
-#define FEC_MII_OP(x)   (((x) & FEC_MII_OP_MASK) << FEC_MII_OP_OFF)
-#define FEC_MII_PA(pa)  (((pa) & FEC_MII_PA_MASK) << FEC_MII_PA_OFF)
-#define FEC_MII_RA(ra)  (((ra) & FEC_MII_RA_MASK) << FEC_MII_RA_OFF)
-#define FEC_MII_SET_DATA(v) (((v) & FEC_MII_DATA_MASK) << FEC_MII_DATA_OFF)
-#define FEC_MII_GET_DATA(v) (((v) >> FEC_MII_DATA_OFF) & FEC_MII_DATA_MASK)
-#define FEC_MII_READ(pa, ra) ((FEC_MII_FRAME | FEC_MII_OP(FEC_MII_OP_RD)) |\
-      FEC_MII_PA(pa) | FEC_MII_RA(ra))
-#define FEC_MII_WRITE(pa, ra, v) (FEC_MII_FRAME | FEC_MII_OP(FEC_MII_OP_WR)|\
-      FEC_MII_PA(pa) | FEC_MII_RA(ra) | FEC_MII_SET_DATA(v))
-
-#define FEC_MII_TIMEOUT                10 // 1 * 10 ms
-#define FEC_MII_TICK        1 // 1 ms
+#define FEC_MII_ST               0x40000000
+#define FEC_MII_OP_OFF           28
+#define FEC_MII_OP_MASK          0x03
+#define FEC_MII_OP_RD            0x02
+#define FEC_MII_OP_WR            0x01
+#define FEC_MII_PA_OFF           23
+#define FEC_MII_PA_MASK          0xFF
+#define FEC_MII_RA_OFF           18
+#define FEC_MII_RA_MASK          0xFF
+#define FEC_MII_TA               0x00020000
+#define FEC_MII_DATA_OFF         0
+#define FEC_MII_DATA_MASK        0x0000FFFF
+
+#define FEC_MII_FRAME            (FEC_MII_ST | FEC_MII_TA)
+#define FEC_MII_OP(x)            (((x) & FEC_MII_OP_MASK) << FEC_MII_OP_OFF)
+#define FEC_MII_PA(pa)           (((pa) & FEC_MII_PA_MASK) << FEC_MII_PA_OFF)
+#define FEC_MII_RA(ra)           (((ra) & FEC_MII_RA_MASK) << FEC_MII_RA_OFF)
+#define FEC_MII_SET_DATA(v)      (((v) & FEC_MII_DATA_MASK) << FEC_MII_DATA_OFF)
+#define FEC_MII_GET_DATA(v)      (((v) >> FEC_MII_DATA_OFF) & FEC_MII_DATA_MASK)
+#define FEC_MII_READ(pa, ra)     ((FEC_MII_FRAME | FEC_MII_OP(FEC_MII_OP_RD)) | \
+                              FEC_MII_PA(pa) | FEC_MII_RA(ra))
+#define FEC_MII_WRITE(pa, ra, v) (FEC_MII_FRAME | FEC_MII_OP(FEC_MII_OP_WR) | \
+                                  FEC_MII_PA(pa) | FEC_MII_RA(ra) | FEC_MII_SET_DATA(v))
+
+#define FEC_MII_TIMEOUT 10 // 1 * 10 ms
+#define FEC_MII_TICK     // 1 ms
 
 //----------------------------------------------------------------------------//
 
 /* Ethernet Transmit and Receive Buffers */
-#define PKT_MAXBUF_SIZE                1518
+#define PKT_MAXBUF_SIZE 1518
 
 //----------------------------------------------------------------------------//
 
@@ -369,18 +367,18 @@ typedef struct fec_cfg
 {
    uint32_t base;
    uint32_t clock;
-   fec_buffer_bd_t * tx_bd_base;
-   fec_buffer_bd_t * rx_bd_base;
+   fec_buffer_bd_t *tx_bd_base;
+   fec_buffer_bd_t *rx_bd_base;
    fec_phy_inteface_t phy_interface;
 } fec_cfg_t;
 
 typedef struct fec
 {
    uint32_t clock;
-   fec_buffer_bd_t * tx_bd_base;
-   fec_buffer_bd_t * rx_bd_base;
+   fec_buffer_bd_t *tx_bd_base;
+   fec_buffer_bd_t *rx_bd_base;
    volatile reg_fec_t *base;
-   phy_t * phy;
+   phy_t *phy;
    fec_phy_inteface_t phy_interface;
 } fec_t;
 
@@ -397,7 +395,7 @@ static fec_t *fec;
 //----------------------------------------------------------------------------//
 
 #ifdef RTK_DEBUG
-const char * fec_ecat_link_duplex_name (uint8_t link_state)
+const char *fec_ecat_link_duplex_name(uint8_t link_state)
 {
    if (link_state & PHY_LINK_OK)
    {
@@ -416,7 +414,7 @@ const char * fec_ecat_link_duplex_name (uint8_t link_state)
    }
 }
 
-const char * fec_ecat_link_speed_name (uint8_t link_state)
+const char *fec_ecat_link_speed_name(uint8_t link_state)
 {
    if (link_state & PHY_LINK_OK)
    {
@@ -446,46 +444,46 @@ const char * fec_ecat_link_speed_name (uint8_t link_state)
 
 #ifdef RTK_DEBUG_DATA
 #include <ctype.h>
-static void fec_ecat_dump_packet (const uint8_t * payload, size_t len)
+static void fec_ecat_dump_packet(const uint8_t *payload, size_t len)
 {
    size_t i, j, n;
    char s[80];
 
-   ASSERT (payload != NULL);
+   ASSERT(payload != NULL);
 
    for (i = 0; i < len; i += 16)
    {
       n = 0;
       for (j = 0; j < 16 && (i + j) < len; j++)
       {
-         ASSERT (n <= sizeof(s));
-         n += rsnprintf (s + n, sizeof(s) - n, "%02x ", payload[i + j]);
+         ASSERT(n <= sizeof(s));
+         n += rsnprintf(s + n, sizeof(s) - n, "%02x ", payload[i + j]);
       }
       for (; j < 16; j++)
       {
-         ASSERT (n <= sizeof(s));
-         n += rsnprintf (s + n, sizeof(s) - n, "   ");
+         ASSERT(n <= sizeof(s));
+         n += rsnprintf(s + n, sizeof(s) - n, "   ");
       }
-      ASSERT (n <= sizeof(s));
-      n += rsnprintf (s + n, sizeof(s) - n, "|");
+      ASSERT(n <= sizeof(s));
+      n += rsnprintf(s + n, sizeof(s) - n, "|");
       for (j = 0; j < 16 && (i + j) < len; j++)
       {
          uint8_t c = payload[i + j];
-         c = (isprint (c)) ? c : '.';
-         ASSERT (n <= sizeof(s));
-         n += rsnprintf (s + n, sizeof(s) - n, "%c", c);
+         c = (isprint(c)) ? c : '.';
+         ASSERT(n <= sizeof(s));
+         n += rsnprintf(s + n, sizeof(s) - n, "%c", c);
       }
-      ASSERT (n <= sizeof(s));
-      n += rsnprintf (s + n, sizeof(s) - n, "|\n");
-      ASSERT (n <= sizeof(s));
-      DPRINT ("%s", s);
+      ASSERT(n <= sizeof(s));
+      n += rsnprintf(s + n, sizeof(s) - n, "|\n");
+      ASSERT(n <= sizeof(s));
+      DPRINT("%s", s);
    }
 }
-#endif  /* DEBUG_DATA */
+#endif /* DEBUG_DATA */
 
-static uint16_t fec_ecat_read_phy (void * arg, uint8_t address, uint8_t reg)
+static uint16_t fec_ecat_read_phy(void *arg, uint8_t address, uint8_t reg)
 {
-   fec->base->eir = FEC_EIR_MII; // Clear interrupt.
+   fec->base->eir = FEC_EIR_MII;                 // Clear interrupt.
    fec->base->mmfr = FEC_MII_READ(address, reg); // Write read command.
    while (!(fec->base->eir & FEC_EIR_MII))
    {
@@ -496,10 +494,10 @@ static uint16_t fec_ecat_read_phy (void * arg, uint8_t address, uint8_t reg)
    return data; // Return read data.
 }
 
-static void fec_ecat_write_phy (void * arg, uint8_t address, uint8_t reg,
-      uint16_t value)
+static void fec_ecat_write_phy(void *arg, uint8_t address, uint8_t reg,
+                               uint16_t value)
 {
-   fec->base->eir = FEC_EIR_MII; // Clear interrupt.
+   fec->base->eir = FEC_EIR_MII;                         // Clear interrupt.
    fec->base->mmfr = FEC_MII_WRITE(address, reg, value); // Write data.
    while (!(fec->base->eir & FEC_EIR_MII))
    {
@@ -508,7 +506,7 @@ static void fec_ecat_write_phy (void * arg, uint8_t address, uint8_t reg,
    fec->base->eir = FEC_EIR_MII; // Clear interrupt.
 }
 
-static void fec_ecat_init_hw (const fec_mac_address_t * mac_address)
+static void fec_ecat_init_hw(const fec_mac_address_t *mac_address)
 {
    uint32_t mii_speed;
 
@@ -526,7 +524,7 @@ static void fec_ecat_init_hw (const fec_mac_address_t * mac_address)
    // Receive control register
    fec->base->rcr = FEC_RCR_MAX_FL(PKT_MAXBUF_SIZE);
 
-   switch(fec->phy_interface)
+   switch (fec->phy_interface)
    {
    case FEC_PHY_MII:
       fec->base->rcr |= FEC_RCR_MII_MODE;
@@ -542,7 +540,7 @@ static void fec_ecat_init_hw (const fec_mac_address_t * mac_address)
    // Reset phy
    if (fec->phy->ops->reset)
    {
-      fec->phy->ops->reset (fec->phy);
+      fec->phy->ops->reset(fec->phy);
    }
 
    /* Don't receive any unicast frames except those whose destination address
@@ -558,28 +556,28 @@ static void fec_ecat_init_hw (const fec_mac_address_t * mac_address)
    /* Set our physical address. */
    fec->base->pa.lower = (mac_address->octet[0] << 24) +
                          (mac_address->octet[1] << 16) +
-                         (mac_address->octet[2] << 8)  +
+                         (mac_address->octet[2] << 8) +
                          (mac_address->octet[3] << 0);
    fec->base->pa.upper = (mac_address->octet[4] << 24) +
                          (mac_address->octet[5] << 16) +
                          0x8808;
 
    /* Start link autonegotiation */
-   fec->phy->ops->start (fec->phy);
+   fec->phy->ops->start(fec->phy);
 }
 
-int oshw_mac_send (const void *payload, size_t tot_len)
+int oshw_mac_send(const void *payload, size_t tot_len)
 {
-   fec_buffer_bd_t * bd;
+   fec_buffer_bd_t *bd;
 
    /* Frames larger than the maximum Ethernet frame size are not allowed. */
-   ASSERT (tot_len <= PKT_MAXBUF_SIZE);
-   ASSERT (tot_len <= TX_BUFFER_SIZE);
+   ASSERT(tot_len <= PKT_MAXBUF_SIZE);
+   ASSERT(tot_len <= TX_BUFFER_SIZE);
 
    /* Bus errors should never occur, unless the MPU is enabled and forbids
     * the Ethernet MAC DMA from accessing the descriptors or buffers.
     */
-   ASSERT ((fec->base->eir & FEC_EIR_EBERR) == false);
+   ASSERT((fec->base->eir & FEC_EIR_EBERR) == false);
 
    /* Allocate a transmit buffer. We wait here until the MAC has released at
     * least one buffer. This could take a couple of microseconds.
@@ -587,19 +585,19 @@ int oshw_mac_send (const void *payload, size_t tot_len)
    bd = NULL;
    while (bd == NULL)
    {
-      bd = fec_buffer_get_tx ();
+      bd = fec_buffer_get_tx();
    }
 
-   DPRINT ("out (%u):\n", tot_len);
-   DUMP_PACKET (payload, tot_len);
+   DPRINT("out (%u):\n", tot_len);
+   DUMP_PACKET(payload, tot_len);
 
    /* Copy frame to allocated buffer */
-   memcpy (bd->data, payload, tot_len);
+   memcpy(bd->data, payload, tot_len);
    bd->length = tot_len;
 
-   fec_buffer_produce_tx (bd);
+   fec_buffer_produce_tx(bd);
 
-#if defined (twrk60f)
+#if defined(twrk60f)
    /* Wait for previous transmissions to complete.
     *
     * This is a workaround for Freescale Kinetis errata e6358.
@@ -617,18 +615,18 @@ int oshw_mac_send (const void *payload, size_t tot_len)
    return tot_len;
 }
 
-int oshw_mac_recv (void * buffer, size_t buffer_length)
+int oshw_mac_recv(void *buffer, size_t buffer_length)
 {
-   fec_buffer_bd_t * bd;
+   fec_buffer_bd_t *bd;
    int return_value;
    size_t frame_length_without_fcs;
 
    /* Bus errors should never occur, unless the MPU is enabled and forbids
     * the Ethernet MAC DMA from accessing the descriptors or buffers.
     */
-   ASSERT ((fec->base->eir & FEC_EIR_EBERR) == false);
+   ASSERT((fec->base->eir & FEC_EIR_EBERR) == false);
 
-   bd = fec_buffer_get_rx ();
+   bd = fec_buffer_get_rx();
    if (bd == NULL)
    {
       /* No frame received. Not an error. */
@@ -640,44 +638,45 @@ int oshw_mac_recv (void * buffer, size_t buffer_length)
    frame_length_without_fcs = bd->length - ETHERNET_FCS_SIZE_IN_BYTES;
 
    /* A frame was received. Handle it and then return its buffer to hardware */
-   if ((bd->status & BD_RX_L)== 0){
+   if ((bd->status & BD_RX_L) == 0)
+   {
       /* Buffer is not last buffer in frame. This really should never
        * happen as our buffers are large enough to contain any
        * Ethernet frame. Nevertheless, is has been observed to happen.
        * Drop the packet and hope for the best.
        */
-      DPRINT ("recv(): End of frame not found. Status: 0x%x\n", bd->status);
+      DPRINT("recv(): End of frame not found. Status: 0x%x\n", bd->status);
       return_value = -1;
    }
    else if (bd->status & (BD_RX_LG | BD_RX_NO | BD_RX_CR | BD_RX_OV))
    {
-      DPRINT ("recv(): Frame is damaged. Status: 0x%x\n", bd->status);
+      DPRINT("recv(): Frame is damaged. Status: 0x%x\n", bd->status);
       return_value = -1;
    }
    else if (buffer_length >= frame_length_without_fcs)
    {
       /* No errors detected, so frame should be valid. */
-      ASSERT (frame_length_without_fcs > 0);
+      ASSERT(frame_length_without_fcs > 0);
 
-      memcpy (buffer, bd->data, frame_length_without_fcs);
-      DPRINT ("in (%u):\n", frame_length_without_fcs);
-      DUMP_PACKET (buffer, frame_length_without_fcs);
+      memcpy(buffer, bd->data, frame_length_without_fcs);
+      DPRINT("in (%u):\n", frame_length_without_fcs);
+      DUMP_PACKET(buffer, frame_length_without_fcs);
       return_value = frame_length_without_fcs;
    }
    else
    {
-      DPRINT ("received_frame: User buffer is too small.\n");
+      DPRINT("received_frame: User buffer is too small.\n");
       return_value = -1;
    }
 
    /* Tell the HW that there are new free RX buffers. */
-   fec_buffer_produce_rx (bd);
+   fec_buffer_produce_rx(bd);
    fec->base->rdar = 1;
 
    return return_value;
 }
 
-static void fec_ecat_hotplug (void)
+static void fec_ecat_hotplug(void)
 {
    uint8_t link_state = 0;
 
@@ -686,7 +685,7 @@ static void fec_ecat_hotplug (void)
 
    /* Set duplex mode according to link state */
 
-   link_state = fec->phy->ops->get_link_state (fec->phy);
+   link_state = fec->phy->ops->get_link_state(fec->phy);
 
    /* Set duplex */
    if (link_state & PHY_LINK_FULL_DUPLEX)
@@ -723,7 +722,7 @@ static void fec_ecat_hotplug (void)
    fec->base->tfwr = FEC_TFWR_STR_FWD;
 
    // Reset buffers.
-   fec_buffer_reset ();
+   fec_buffer_reset();
 
    // FEC_ERDSR - Receive buffer descriptor ring start register
    fec->base->erdsr = (uint32_t)fec->rx_bd_base;
@@ -749,72 +748,72 @@ static void fec_ecat_hotplug (void)
    // FEC_RDAR  - Receive Descriptor ring - Receive descriptor active register
    fec->base->rdar = 1;
 
-   DPRINT ("Link up. Speed: %s. Mode: %s.\n", fec_ecat_link_speed_name (link_state),
-         fec_ecat_link_duplex_name (link_state));
+   DPRINT("Link up. Speed: %s. Mode: %s.\n", fec_ecat_link_speed_name(link_state),
+          fec_ecat_link_duplex_name(link_state));
 }
 
-static dev_state_t fec_ecat_probe (void)
+static dev_state_t fec_ecat_probe(void)
 {
    uint8_t link_state;
 
-   link_state = fec->phy->ops->get_link_state (fec->phy);
+   link_state = fec->phy->ops->get_link_state(fec->phy);
 
    return (link_state & PHY_LINK_OK) ? StateAttached : StateDetached;
 }
 
-COMPILETIME_ASSERT (FEC_MODULE_CLOCK_Hz >= FEC_MIN_MODULE_CLOCK_Hz);
+COMPILETIME_ASSERT(FEC_MODULE_CLOCK_Hz >= FEC_MIN_MODULE_CLOCK_Hz);
 
-int oshw_mac_init (const uint8_t * mac_address)
+int oshw_mac_init(const uint8_t *mac_address)
 {
    dev_state_t state;
    static const fec_cfg_t eth_cfg =
-   {
-      .base          = ENET_BASE,
-      .clock         = FEC_MODULE_CLOCK_Hz,
-      .tx_bd_base    = fec_tx_bd,
-      .rx_bd_base    = fec_rx_bd,
-      .phy_interface = PHY_INTERFACE,
-   };
+       {
+           .base = ENET_BASE,
+           .clock = FEC_MODULE_CLOCK_Hz,
+           .tx_bd_base = fec_tx_bd,
+           .rx_bd_base = fec_rx_bd,
+           .phy_interface = PHY_INTERFACE,
+       };
    static phy_cfg_t phy_cfg =
-   {
-      .address       = ETH_PHY_ADDRESS,
-      .read          = NULL, /* Set by MAC driver */
-      .write         = NULL, /* Set by MAC driver */
-      .loopback_mode = false,
-   };
+       {
+           .address = ETH_PHY_ADDRESS,
+           .read = NULL,  /* Set by MAC driver */
+           .write = NULL, /* Set by MAC driver */
+           .loopback_mode = false,
+       };
 
    /* Initialise buffers and buffer descriptors.*/
-   fec_buffer_init_tx (fec_tx_bd, fec_tx_data, NUM_BUFFERS);
-   fec_buffer_init_rx (fec_rx_bd, fec_rx_data, NUM_BUFFERS);
+   fec_buffer_init_tx(fec_tx_bd, fec_tx_data, NUM_BUFFERS);
+   fec_buffer_init_rx(fec_rx_bd, fec_rx_data, NUM_BUFFERS);
 
-   fec = malloc (sizeof (fec_t));
-   UASSERT (fec != NULL, EMEM);
+   fec = malloc(sizeof(fec_t));
+   UASSERT(fec != NULL, EMEM);
 
-#if defined (sabresd)
-   gpio_set (GPIO_RGMII_nRST, 0);
-   task_delay (500);
-   gpio_set (GPIO_RGMII_nRST, 1);
+#if defined(sabresd)
+   gpio_set(GPIO_RGMII_nRST, 0);
+   task_delay(500);
+   gpio_set(GPIO_RGMII_nRST, 1);
 #endif
 
    /* Initialise driver state */
-   fec->rx_bd_base        = eth_cfg.rx_bd_base;
-   fec->tx_bd_base        = eth_cfg.tx_bd_base;
-   fec->clock             = eth_cfg.clock;
-   fec->base              = (reg_fec_t *)eth_cfg.base;
-   fec->phy_interface     = eth_cfg.phy_interface;
-   fec->phy               = PHY_INIT (&phy_cfg);
-   fec->phy->arg          = fec;
-   fec->phy->read         = fec_ecat_read_phy;
-   fec->phy->write        = fec_ecat_write_phy;
+   fec->rx_bd_base = eth_cfg.rx_bd_base;
+   fec->tx_bd_base = eth_cfg.tx_bd_base;
+   fec->clock = eth_cfg.clock;
+   fec->base = (reg_fec_t *)eth_cfg.base;
+   fec->phy_interface = eth_cfg.phy_interface;
+   fec->phy = PHY_INIT(&phy_cfg);
+   fec->phy->arg = fec;
+   fec->phy->read = fec_ecat_read_phy;
+   fec->phy->write = fec_ecat_write_phy;
 
    /* Initialize hardware */
-   fec_ecat_init_hw ((fec_mac_address_t *)mac_address);
+   fec_ecat_init_hw((fec_mac_address_t *)mac_address);
    state = StateDetached;
    while (state == StateDetached)
    {
-      state = fec_ecat_probe ();
+      state = fec_ecat_probe();
    }
-   fec_ecat_hotplug ();
+   fec_ecat_hotplug();
 
    return 0;
 }
index d297539d5bd1750b23790b844570fb38c2d0748c..1db4cf2bd727bb6a2ff75532d1191292baed2605 100644 (file)
@@ -22,8 +22,7 @@
 #include <types.h>
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 typedef struct fec_mac_address
index 9da8181d8c454a1d52068c5a23d4757d0ca49ce7..4dc88a947c331ab0ec7dbea46f974c7557363d1e 100644 (file)
@@ -10,7 +10,7 @@
  * See LICENSE file in the project root for full license information.
  ********************************************************************/
 
-#if defined (stamp537)
+#if defined(stamp537)
 
 #include <bsp.h>
 #include <kern/kern.h>
    "Reconciliation Sublayer (RS) and Media Independent Interface (MII)",
    section 2.4.1 to 3.
    http://standards.ieee.org/getieee802/download/802.3-2005_section2.pdf */
-#define MII_BMCR    0x00        /* Basic Mode Control Register */
-#define MII_BMSR    0x01        /* Basic Mode Status Register */
-#define MII_PHYIDR1 0x02        /* PHY Identifier Register 1 */
-#define MII_PHYIDR2 0x03        /* PHY Identifier Register 2 */
-#define MII_LPAR    0x05        /* Auto-Negotiation Link Partner Ability Register */
+#define MII_BMCR          0x00 /* Basic Mode Control Register */
+#define MII_BMSR          0x01 /* Basic Mode Status Register */
+#define MII_PHYIDR1       0x02 /* PHY Identifier Register 1 */
+#define MII_PHYIDR2       0x03 /* PHY Identifier Register 2 */
+#define MII_LPAR          0x05 /* Auto-Negotiation Link Partner Ability Register */
 
 /* MII basic mode control register */
-#define MII_BMCR_RST                BIT (15)
-#define MII_BMCR_ANEG_EN            BIT (12)
-#define MII_BMCR_ANEG_RST           BIT (9)
+#define MII_BMCR_RST      BIT(15)
+#define MII_BMCR_ANEG_EN  BIT(12)
+#define MII_BMCR_ANEG_RST BIT(9)
 
 /* MII basic mode status register */
-#define MII_BMSR_ANEGACK            BIT (5)
-#define MII_BMSR_LINK               BIT (2)
+#define MII_BMSR_ANEGACK  BIT(5)
+#define MII_BMSR_LINK     BIT(2)
 
 /* MII auto-negotiation advertisement register */
-#define MII_ANAR_100_FD             BIT (8)  /* Can do 100BASE-TX full duplex */
-#define MII_ANAR_10_FD              BIT (6)  /* Can do 10BASE-T full duplex */
+#define MII_ANAR_100_FD   BIT(8) /* Can do 100BASE-TX full duplex */
+#define MII_ANAR_10_FD    BIT(6) /* Can do 10BASE-T full duplex */
 
 /* Management Data Clock (MDC) frequency.
  * 2.5Mz corresponds to the minimum period for MDC as defined by the standard.
  * This is independent of whether the PHY is in 10Mbit/s or 100Mbit/s mode.
  * See Std. IEEE 802.3 (Ethernet) Clause 22.2.2.11 ("management data clock"). */
-#define PHY_MDC_Hz            2500000
-#define PHY_RETRIES           3000
+#define PHY_MDC_Hz        2500000
+#define PHY_RETRIES       3000
 /* TODO: This might need changing for different boards. Fix? */
-#define PHY_ADDR              0
+#define PHY_ADDR          0
 
-#define ETH_RX_BUF_SIZE       2
-#define ETH_TX_BUF_SIZE       1
-#define ETH_FRAME_SIZE        0x614
+#define ETH_RX_BUF_SIZE   2
+#define ETH_TX_BUF_SIZE   1
+#define ETH_FRAME_SIZE    0x614
 
 /* Ethernet MAC register structure */
 typedef struct bfin_emac_regs
 {
    /* Control-Status Register Group */
-   uint32_t opmode;           /* operating mode */
-   uint32_t addrlo;           /* address low */
-   uint32_t addrhi;           /* address high */
-   uint32_t hashlo;           /* multicast hash table low */
-   uint32_t hashhi;           /* multicast hash table high */
-   uint32_t staadd;           /* station management address */
-   uint32_t stadat;           /* station management data */
-   uint32_t flc;              /* flow control */
-   uint32_t vlan1;            /* VLAN1 tag */
-   uint32_t vlan2;            /* VLAN2 tag */
+   uint32_t opmode; /* operating mode */
+   uint32_t addrlo; /* address low */
+   uint32_t addrhi; /* address high */
+   uint32_t hashlo; /* multicast hash table low */
+   uint32_t hashhi; /* multicast hash table high */
+   uint32_t staadd; /* station management address */
+   uint32_t stadat; /* station management data */
+   uint32_t flc;    /* flow control */
+   uint32_t vlan1;  /* VLAN1 tag */
+   uint32_t vlan2;  /* VLAN2 tag */
    uint32_t _reserved1;
-   uint32_t wkup_ctl;         /* wakeup frame control and status */
-   uint32_t wkup_ffmsk[4];    /* wakeup frame n byte mask (n == 0,..,3) */
-   uint32_t wkup_ffcmd;       /* wakeup frame filter commands */
-   uint32_t wkup_ffoff;       /* wakeup frame filter offsets */
-   uint32_t wkup_ffcrc0;      /* wakeup frame filter CRC0/1 */
-   uint32_t wkup_ffcrc1;      /* wakeup frame filter CRC2/3 */
+   uint32_t wkup_ctl;      /* wakeup frame control and status */
+   uint32_t wkup_ffmsk[4]; /* wakeup frame n byte mask (n == 0,..,3) */
+   uint32_t wkup_ffcmd;    /* wakeup frame filter commands */
+   uint32_t wkup_ffoff;    /* wakeup frame filter offsets */
+   uint32_t wkup_ffcrc0;   /* wakeup frame filter CRC0/1 */
+   uint32_t wkup_ffcrc1;   /* wakeup frame filter CRC2/3 */
    uint32_t _reserved2[4];
    /* System Interface Register Group */
-   uint32_t sysctl;           /* system control */
-   uint32_t systat;           /* system status */
+   uint32_t sysctl; /* system control */
+   uint32_t systat; /* system status */
    /* Ethernet Frame Status Register Group */
-   uint32_t rx_stat;          /* RX Current Frame Status */
-   uint32_t rx_stky;          /* RX Sticky Frame Status */
-   uint32_t rx_irqe;          /* RX Frame Status Interrupt Enable */
-   uint32_t tx_stat;          /* TX Current Frame Status Register */
-   uint32_t tx_stky;          /* TT Sticky Frame Status */
-   uint32_t tx_irqe;          /* TX Frame Status Interrupt Enable */
+   uint32_t rx_stat; /* RX Current Frame Status */
+   uint32_t rx_stky; /* RX Sticky Frame Status */
+   uint32_t rx_irqe; /* RX Frame Status Interrupt Enable */
+   uint32_t tx_stat; /* TX Current Frame Status Register */
+   uint32_t tx_stky; /* TT Sticky Frame Status */
+   uint32_t tx_irqe; /* TX Frame Status Interrupt Enable */
    /* MAC Management Counter Register Group */
-   uint32_t mmc_ctl;          /* Management Counters Control */
-   uint32_t mmc_rirqs;        /* MMC RX Interrupt Status */
-   uint32_t mmc_rirqe;        /* MMC RX Interrupt Enable */
-   uint32_t mmc_tirqs;        /* MMC TX Interrupt Status */
-   uint32_t mmc_tirqe;        /* MMC TX Interrupt Enable */
+   uint32_t mmc_ctl;   /* Management Counters Control */
+   uint32_t mmc_rirqs; /* MMC RX Interrupt Status */
+   uint32_t mmc_rirqe; /* MMC RX Interrupt Enable */
+   uint32_t mmc_tirqs; /* MMC TX Interrupt Status */
+   uint32_t mmc_tirqe; /* MMC TX Interrupt Enable */
    uint32_t _reserved3[27];
-   uint32_t mmc_rxc_ok;       /* FramesReceivedOK */
-   uint32_t mmc_rxc_fcs;      /* FrameCheckSequenceErrors */
-   uint32_t mmc_rxc_align;    /* AlignmentErrors */
-   uint32_t mmc_rxc_octet;    /* OctetsReceivedOK */
-   uint32_t mmc_rxc_dmaovf;   /* FramesLostDueToIntMACRcvError */
-   uint32_t mmc_rxc_unicst;   /* UnicastFramesReceivedOK */
-   uint32_t mmc_rxc_multi;    /* MulticastFramesReceivedOK */
-   uint32_t mmc_rxc_broad;    /* BroadcastFramesReceivedOK */
-   uint32_t mmc_rxc_lnerri;   /* InRangeLengthErrors */
-   uint32_t mmc_rxc_lnerro;   /* OutOfRangeLengthField */
-   uint32_t mmc_rxc_long;     /* FrameTooLongErrors */
-   uint32_t mmc_rxc_macctl;   /* MACControlFramesReceived */
-   uint32_t mmc_rxc_opcode;   /* UnsupportedOpcodesReceived */
-   uint32_t mmc_rxc_pause;    /* PAUSEMACCtrlFramesReceived */
-   uint32_t mmc_rxc_allfrm;   /* FramesReceivedAll */
-   uint32_t mmc_rxc_alloct;   /* OctetsReceivedAll */
-   uint32_t mmc_rxc_typed;    /* TypedFramesReceived */
-   uint32_t mmc_rxc_short;    /* FramesLenLt64Received */
-   uint32_t mmc_rxc_eq64;     /* FramesLenEq64Received */
-   uint32_t mmc_rxc_lt128;    /* FramesLen65_127Received */
-   uint32_t mmc_rxc_lt256;    /* FramesLen128_255Received */
-   uint32_t mmc_rxc_lt512;    /* FramesLen256_511Received */
-   uint32_t mmc_rxc_lt1024;   /* FramesLen512_1023Received */
-   uint32_t mmc_rxc_ge1024;   /* FramesLen1024_MaxReceived */
+   uint32_t mmc_rxc_ok;     /* FramesReceivedOK */
+   uint32_t mmc_rxc_fcs;    /* FrameCheckSequenceErrors */
+   uint32_t mmc_rxc_align;  /* AlignmentErrors */
+   uint32_t mmc_rxc_octet;  /* OctetsReceivedOK */
+   uint32_t mmc_rxc_dmaovf; /* FramesLostDueToIntMACRcvError */
+   uint32_t mmc_rxc_unicst; /* UnicastFramesReceivedOK */
+   uint32_t mmc_rxc_multi;  /* MulticastFramesReceivedOK */
+   uint32_t mmc_rxc_broad;  /* BroadcastFramesReceivedOK */
+   uint32_t mmc_rxc_lnerri; /* InRangeLengthErrors */
+   uint32_t mmc_rxc_lnerro; /* OutOfRangeLengthField */
+   uint32_t mmc_rxc_long;   /* FrameTooLongErrors */
+   uint32_t mmc_rxc_macctl; /* MACControlFramesReceived */
+   uint32_t mmc_rxc_opcode; /* UnsupportedOpcodesReceived */
+   uint32_t mmc_rxc_pause;  /* PAUSEMACCtrlFramesReceived */
+   uint32_t mmc_rxc_allfrm; /* FramesReceivedAll */
+   uint32_t mmc_rxc_alloct; /* OctetsReceivedAll */
+   uint32_t mmc_rxc_typed;  /* TypedFramesReceived */
+   uint32_t mmc_rxc_short;  /* FramesLenLt64Received */
+   uint32_t mmc_rxc_eq64;   /* FramesLenEq64Received */
+   uint32_t mmc_rxc_lt128;  /* FramesLen65_127Received */
+   uint32_t mmc_rxc_lt256;  /* FramesLen128_255Received */
+   uint32_t mmc_rxc_lt512;  /* FramesLen256_511Received */
+   uint32_t mmc_rxc_lt1024; /* FramesLen512_1023Received */
+   uint32_t mmc_rxc_ge1024; /* FramesLen1024_MaxReceived */
    /* TODO: add all registers */
 } bfin_emac_regs_t;
 
-COMPILETIME_ASSERT (offsetof (bfin_emac_regs_t, opmode) == 0x0);
-COMPILETIME_ASSERT (offsetof (bfin_emac_regs_t, staadd) == 0x14);
-COMPILETIME_ASSERT (offsetof (bfin_emac_regs_t, wkup_ctl) == 0x2c);
-COMPILETIME_ASSERT (offsetof (bfin_emac_regs_t, wkup_ffcrc1) == 0x4c);
-COMPILETIME_ASSERT (offsetof (bfin_emac_regs_t, sysctl) == 0x60);
-COMPILETIME_ASSERT (offsetof (bfin_emac_regs_t, rx_stat) == 0x68);
-COMPILETIME_ASSERT (offsetof (bfin_emac_regs_t, mmc_ctl) == 0x80);
-COMPILETIME_ASSERT (offsetof (bfin_emac_regs_t, mmc_tirqe) == 0x90);
-COMPILETIME_ASSERT (offsetof (bfin_emac_regs_t, mmc_rxc_ok) == 0x100);
-COMPILETIME_ASSERT (offsetof (bfin_emac_regs_t, mmc_rxc_dmaovf) == 0x110);
-COMPILETIME_ASSERT (offsetof (bfin_emac_regs_t, mmc_rxc_ge1024) == 0x15c);
+COMPILETIME_ASSERT(offsetof(bfin_emac_regs_t, opmode) == 0x0);
+COMPILETIME_ASSERT(offsetof(bfin_emac_regs_t, staadd) == 0x14);
+COMPILETIME_ASSERT(offsetof(bfin_emac_regs_t, wkup_ctl) == 0x2c);
+COMPILETIME_ASSERT(offsetof(bfin_emac_regs_t, wkup_ffcrc1) == 0x4c);
+COMPILETIME_ASSERT(offsetof(bfin_emac_regs_t, sysctl) == 0x60);
+COMPILETIME_ASSERT(offsetof(bfin_emac_regs_t, rx_stat) == 0x68);
+COMPILETIME_ASSERT(offsetof(bfin_emac_regs_t, mmc_ctl) == 0x80);
+COMPILETIME_ASSERT(offsetof(bfin_emac_regs_t, mmc_tirqe) == 0x90);
+COMPILETIME_ASSERT(offsetof(bfin_emac_regs_t, mmc_rxc_ok) == 0x100);
+COMPILETIME_ASSERT(offsetof(bfin_emac_regs_t, mmc_rxc_dmaovf) == 0x110);
+COMPILETIME_ASSERT(offsetof(bfin_emac_regs_t, mmc_rxc_ge1024) == 0x15c);
 
 /* 32-bit aligned struct for ethernet data */
-typedef struct ethernet_data {
-   uint16_t length;     /* When TX = frame data length in bytes, not including 'length'
-                         * When RX = 0x0000 padding when using RXDWA
-                         */
+typedef struct ethernet_data
+{
+   uint16_t length;              /* When TX = frame data length in bytes, not including 'length'
+                                  * When RX = 0x0000 padding when using RXDWA
+                                  */
    uint8_t data[ETH_FRAME_SIZE]; /* Hold the ethernet frame */
-   uint16_t padding;    /* To make the struct 32-bit aligned */
+   uint16_t padding;             /* To make the struct 32-bit aligned */
 } ethernet_data_t;
 
-COMPILETIME_ASSERT (sizeof (ethernet_data_t) == 0x618) ;
+COMPILETIME_ASSERT(sizeof(ethernet_data_t) == 0x618);
 
-static volatile bfin_emac_regs_t * pEth = (bfin_emac_regs_t *) EMAC_OPMODE;
+static volatile bfin_emac_regs_t *pEth = (bfin_emac_regs_t *)EMAC_OPMODE;
 
 /* Buffers for rx and tx DMA operations */
 static ethernet_data_t rxBuffer[ETH_RX_BUF_SIZE] __attribute__((section(".dma")));
@@ -159,48 +160,52 @@ static bfin_dma_descriptor_t txDMADesc[ETH_TX_BUF_SIZE * 2] __attribute__((secti
 /* Hold the current index of rx and tx buffers */
 static uint8_t rxIdx, txIdx;
 
-
 /* Internal function that writes to a PHY register  */
-static void lw_emac_write_phy_reg(uint8_t phy_addr, uint8_t reg_addr, uint32_t data) {
+static void lw_emac_write_phy_reg(uint8_t phy_addr, uint8_t reg_addr, uint32_t data)
+{
    /* Set the flags that should be set reg_addr on PHY */
    pEth->stadat = data;
 
    /* Wait for our turn then initiate writing of stadat to PHY register */
    pEth->staadd = SET_PHYAD(phy_addr) | SET_REGAD(reg_addr) | STAOP | STABUSY;
-   while (pEth->staadd & STABUSY) ;
+   while (pEth->staadd & STABUSY)
+      ;
 }
 
 /* Internal function that reads from; and returns a PHY register  */
-static uint32_t lw_emac_read_phy_reg(uint8_t phy_addr, uint8_t reg_addr) {
+static uint32_t lw_emac_read_phy_reg(uint8_t phy_addr, uint8_t reg_addr)
+{
    pEth->staadd = SET_PHYAD(phy_addr) | SET_REGAD(reg_addr) | STABUSY;
-   while (pEth->staadd & STABUSY) ;
+   while (pEth->staadd & STABUSY)
+      ;
 
    return pEth->stadat;
 }
 
 /* Internal function that sets the MAC address */
-static void lw_emac_set_mac_addr(const uint8_t * ethAddr)
+static void lw_emac_set_mac_addr(const uint8_t *ethAddr)
 {
    pEth->addrlo =
-      ethAddr[0] |
-      ethAddr[1] << 8 |
-      ethAddr[2] << 16 |
-      ethAddr[3] << 24;
+       ethAddr[0] |
+       ethAddr[1] << 8 |
+       ethAddr[2] << 16 |
+       ethAddr[3] << 24;
    pEth->addrhi =
-      ethAddr[4] |
-      ethAddr[5] << 8;
+       ethAddr[4] |
+       ethAddr[5] << 8;
 }
 
-static uint8_t lw_emac_init_registers(const uint8_t * ethAddr) {
+static uint8_t lw_emac_init_registers(const uint8_t *ethAddr)
+{
    uint32_t clock_divisor, sysctl_mdcdiv, phy_stadat, counter;
 
    /* CONFIGURE MAC MII PINS */
 
    /* Enable PHY Clock Output */
-   *(volatile uint16_t *) VR_CTL |= PHYCLKOE;
+   *(volatile uint16_t *)VR_CTL |= PHYCLKOE;
 
    /* Set all bits to 1 to use MII mode */
-   *(uint16_t *) PORTH_FER = 0xFFFF;
+   *(uint16_t *)PORTH_FER = 0xFFFF;
 
    /* CONFIGURE MAC REGISTERS */
 
@@ -213,16 +218,15 @@ static uint8_t lw_emac_init_registers(const uint8_t * ethAddr) {
    pEth->mmc_ctl = RSTC;
 
    /* Set MAC address */
-   lw_emac_set_mac_addr (ethAddr);
+   lw_emac_set_mac_addr(ethAddr);
 
    clock_divisor = SCLK / PHY_MDC_Hz;
    sysctl_mdcdiv = clock_divisor / 2 - 1;
-   ASSERT (sysctl_mdcdiv <= 0x3f);
+   ASSERT(sysctl_mdcdiv <= 0x3f);
 
-   rprintp ("PHY ID: %04x %04x\n",
-         lw_emac_read_phy_reg (PHY_ADDR, MII_PHYIDR1),
-         lw_emac_read_phy_reg (PHY_ADDR, MII_PHYIDR2)
-         );
+   rprintp("PHY ID: %04x %04x\n",
+           lw_emac_read_phy_reg(PHY_ADDR, MII_PHYIDR1),
+           lw_emac_read_phy_reg(PHY_ADDR, MII_PHYIDR2));
 
    /*
     * Set the system control register
@@ -230,7 +234,7 @@ static uint8_t lw_emac_init_registers(const uint8_t * ethAddr) {
     * RXDWA = Pad incoming frame with 0x0000 as to make the data-part 32-bit aligned
     * RXCKS = Enable Receive Frame TCP/UDP Checksum Computation
     */
-   pEth->sysctl = SET_MDCDIV(sysctl_mdcdiv) | RXDWA ;
+   pEth->sysctl = SET_MDCDIV(sysctl_mdcdiv) | RXDWA;
 
    /* CONFIGURE PHY */
 
@@ -245,25 +249,29 @@ static uint8_t lw_emac_init_registers(const uint8_t * ethAddr) {
 
    /* Loop until link is up or time out after PHY_RETRIES */
    counter = 0;
-   do {
-      if (counter > PHY_RETRIES) {
+   do
+   {
+      if (counter > PHY_RETRIES)
+      {
          rprintp("Ethernet link is down\n");
          return -1;
       }
 
-      task_delay (tick_from_ms (10));
+      task_delay(tick_from_ms(10));
       phy_stadat = lw_emac_read_phy_reg(PHY_ADDR, MII_BMSR);
 
       ++counter;
-   } while (!(phy_stadat & MII_BMSR_LINK)) ;
+   } while (!(phy_stadat & MII_BMSR_LINK));
 
    /* Check whether link partner can do full duplex or not */
    phy_stadat = lw_emac_read_phy_reg(PHY_ADDR, MII_LPAR);
 
-   if (phy_stadat & (MII_ANAR_100_FD | MII_ANAR_10_FD) ) {
+   if (phy_stadat & (MII_ANAR_100_FD | MII_ANAR_10_FD))
+   {
       pEth->opmode = FDMODE;
    }
-   else {
+   else
+   {
       pEth->opmode = 0;
    }
 
@@ -277,17 +285,18 @@ static uint8_t lw_emac_init_registers(const uint8_t * ethAddr) {
    return 0;
 }
 
-int oshw_mac_init (const uint8_t * ethAddr)
+int oshw_mac_init(const uint8_t *ethAddr)
 {
    rxIdx = txIdx = 0;
 
-   if (lw_emac_init_registers(ethAddr) != 0) {
+   if (lw_emac_init_registers(ethAddr) != 0)
+   {
       return -1;
    }
 
    // Reset status words
-   memset ((uint8_t *)rxStatusWord, 0, sizeof(rxStatusWord));
-   memset ((uint8_t *)txStatusWord, 0, sizeof(txStatusWord));
+   memset((uint8_t *)rxStatusWord, 0, sizeof(rxStatusWord));
+   memset((uint8_t *)txStatusWord, 0, sizeof(txStatusWord));
 
    txDMADesc[0].next = &txDMADesc[1];
    txDMADesc[0].start_addr = &txBuffer[0];
@@ -344,14 +353,15 @@ int oshw_mac_init (const uint8_t * ethAddr)
    return 0;
 }
 
-int oshw_mac_send (const void *packet, size_t length)
+int oshw_mac_send(const void *packet, size_t length)
 {
    UASSERT(length > 0, EARG);
    UASSERT(length < ETH_FRAME_SIZE, EARG);
 
    /* TODO: Check DMA Error in IRQ status */
 
-   while (bfin_dma_channel_interrupt_is_active (DMA_CHANNEL_EMAC_TX));
+   while (bfin_dma_channel_interrupt_is_active(DMA_CHANNEL_EMAC_TX))
+      ;
 
    txBuffer[txIdx].length = length;
    memcpy(txBuffer[txIdx].data, packet, length);
@@ -359,7 +369,8 @@ int oshw_mac_send (const void *packet, size_t length)
    bfin_dma_channel_enable(DMA_CHANNEL_EMAC_TX, txDMADesc);
    pEth->opmode |= TE;
 
-   while ((txStatusWord[txIdx] & TX_COMP) == 0);
+   while ((txStatusWord[txIdx] & TX_COMP) == 0)
+      ;
 
    ASSERT(txStatusWord[txIdx] & TX_OK);
 
@@ -367,28 +378,32 @@ int oshw_mac_send (const void *packet, size_t length)
 
    ++txIdx;
 
-    if (txIdx == ETH_TX_BUF_SIZE) {
-       txIdx = 0;
-    }
+   if (txIdx == ETH_TX_BUF_SIZE)
+   {
+      txIdx = 0;
+   }
 
    return 0;
 }
 
-int oshw_mac_recv (void * packet, size_t size)
+int oshw_mac_recv(void *packet, size_t size)
 {
    uint32_t length;
    uint32_t status = rxStatusWord[rxIdx];
 
    /* Check if rx frame is completed */
-   if ((status & RX_COMP) == 0) {
+   if ((status & RX_COMP) == 0)
+   {
       return -1;
    }
-   else if ((status & RX_OK) == 0) {
+   else if ((status & RX_OK) == 0)
+   {
       ASSERT(0);
       /* TODO: Handle error */
       return -1;
    }
-   else if (status & RX_DMAO) {
+   else if (status & RX_DMAO)
+   {
       ASSERT(0);
       /* TODO: Handle overrun */
       return -1;
@@ -396,18 +411,20 @@ int oshw_mac_recv (void * packet, size_t size)
 
    length = status & RX_FRLEN;
 
-   if (size < length) {
+   if (size < length)
+   {
       length = size;
    }
 
    memcpy(packet, rxBuffer[rxIdx].data, length);
 
-   bfin_dma_channel_interrupt_clear (DMA_CHANNEL_EMAC_RX);
+   bfin_dma_channel_interrupt_clear(DMA_CHANNEL_EMAC_RX);
    rxStatusWord[rxIdx] = 0;
 
    ++rxIdx;
 
-   if (rxIdx == ETH_RX_BUF_SIZE) {
+   if (rxIdx == ETH_RX_BUF_SIZE)
+   {
       rxIdx = 0;
    }
 
index 70dd7ad5d1e994afffea02152c07df672dcf9135..010b739bc18a1b8f4584fd893672b7372349b8fc 100644 (file)
@@ -39,8 +39,8 @@
 #include "oshw.h"
 
 #ifndef MAX
-#define MAX(a,b) (((a) > (b)) ? (a) : (b))
-#define MIN(a,b) (((a) < (b)) ? (a) : (b))
+#define MAX(a, b) (((a) > (b)) ? (a) : (b))
+#define MIN(a, b) (((a) < (b)) ? (a) : (b))
 #endif
 
 /** Redundancy modes */
@@ -58,19 +58,19 @@ enum
  * differentiate the route the packet traverses through the EtherCAT
  * segment. This is needed to find out the packet flow in redundant
  * configurations. */
-const uint16 priMAC[3] = { 0x0101, 0x0101, 0x0101 };
+const uint16 priMAC[3] = {0x0101, 0x0101, 0x0101};
 /** Secondary source MAC address used for EtherCAT. */
-const uint16 secMAC[3] = { 0x0404, 0x0404, 0x0404 };
+const uint16 secMAC[3] = {0x0404, 0x0404, 0x0404};
 
 /** second MAC word is used for identification */
 #define RX_PRIM priMAC[1]
 /** second MAC word is used for identification */
-#define RX_SEC secMAC[1]
+#define RX_SEC  secMAC[1]
 
 static void ecx_clear_rxbufstat(int *rxbufstat)
 {
    int i;
-   for(i = 0; i < EC_MAXBUF; i++)
+   for (i = 0; i < EC_MAXBUF; i++)
    {
       rxbufstat[i] = EC_BUF_EMPTY;
    }
@@ -104,14 +104,14 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
          /* when using secondary socket it is automatically a redundant setup */
          psock = &(port->redport->sockhandle);
          *psock = -1;
-         port->redstate                   = ECT_RED_DOUBLE;
-         port->redport->stack.sock        = &(port->redport->sockhandle);
-         port->redport->stack.txbuf       = &(port->txbuf);
+         port->redstate = ECT_RED_DOUBLE;
+         port->redport->stack.sock = &(port->redport->sockhandle);
+         port->redport->stack.txbuf = &(port->txbuf);
          port->redport->stack.txbuflength = &(port->txbuflength);
-         port->redport->stack.tempbuf     = &(port->redport->tempinbuf);
-         port->redport->stack.rxbuf       = &(port->redport->rxbuf);
-         port->redport->stack.rxbufstat   = &(port->redport->rxbufstat);
-         port->redport->stack.rxsa        = &(port->redport->rxsa);
+         port->redport->stack.tempbuf = &(port->redport->tempinbuf);
+         port->redport->stack.rxbuf = &(port->redport->rxbuf);
+         port->redport->stack.rxbufstat = &(port->redport->rxbufstat);
+         port->redport->stack.rxsa = &(port->redport->rxsa);
          ecx_clear_rxbufstat(&(port->redport->rxbufstat[0]));
       }
       else
@@ -125,16 +125,16 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
       port->getindex_mutex = mtx_create();
       port->tx_mutex = mtx_create();
       port->rx_mutex = mtx_create();
-      port->sockhandle        = -1;
-      port->lastidx           = 0;
-      port->redstate          = ECT_RED_NONE;
-      port->stack.sock        = &(port->sockhandle);
-      port->stack.txbuf       = &(port->txbuf);
+      port->sockhandle = -1;
+      port->lastidx = 0;
+      port->redstate = ECT_RED_NONE;
+      port->stack.sock = &(port->sockhandle);
+      port->stack.txbuf = &(port->txbuf);
       port->stack.txbuflength = &(port->txbuflength);
-      port->stack.tempbuf     = &(port->tempinbuf);
-      port->stack.rxbuf       = &(port->rxbuf);
-      port->stack.rxbufstat   = &(port->rxbufstat);
-      port->stack.rxsa        = &(port->rxsa);
+      port->stack.tempbuf = &(port->tempinbuf);
+      port->stack.rxbuf = &(port->rxbuf);
+      port->stack.rxbufstat = &(port->rxbufstat);
+      port->stack.rxsa = &(port->rxsa);
       ecx_clear_rxbufstat(&(port->rxbufstat[0]));
       psock = &(port->sockhandle);
    }
@@ -194,7 +194,7 @@ uint8 ecx_getindex(ecx_portt *port)
    uint8 idx;
    uint8 cnt;
 
-   mtx_lock (port->getindex_mutex);
+   mtx_lock(port->getindex_mutex);
 
    idx = port->lastidx + 1;
    /* index can't be larger than buffer array */
@@ -220,7 +220,7 @@ uint8 ecx_getindex(ecx_portt *port)
    }
    port->lastidx = idx;
 
-   mtx_unlock (port->getindex_mutex);
+   mtx_unlock(port->getindex_mutex);
 
    return idx;
 }
@@ -283,21 +283,21 @@ int ecx_outframe_red(ecx_portt *port, uint8 idx)
    rval = ecx_outframe(port, idx, 0);
    if (port->redstate != ECT_RED_NONE)
    {
-      mtx_lock (port->tx_mutex);
+      mtx_lock(port->tx_mutex);
       ehp = (ec_etherheadert *)&(port->txbuf2);
       /* use dummy frame for secondary socket transmit (BRD) */
-      datagramP = (ec_comt*)&(port->txbuf2[ETH_HEADERSIZE]);
+      datagramP = (ec_comt *)&(port->txbuf2[ETH_HEADERSIZE]);
       /* write index to frame */
       datagramP->index = idx;
       /* rewrite MAC source address 1 to secondary */
       ehp->sa1 = oshw_htons(secMAC[1]);
       /* transmit over secondary socket */
-      //send(sockhandle2, &ec_txbuf2, ec_txbuflength2 , 0);
-      // OBS! redundant not ACTIVE for BFIN, just added to compile
-      ASSERT (0);
+      // send(sockhandle2, &ec_txbuf2, ec_txbuflength2 , 0);
+      //  OBS! redundant not ACTIVE for BFIN, just added to compile
+      ASSERT(0);
       port->redport->rxbufstat[idx] = EC_BUF_TX;
       oshw_mac_send(&(port->txbuf2), port->txbuflength2);
-      mtx_unlock (port->tx_mutex);
+      mtx_unlock(port->tx_mutex);
    }
 
    return rval;
@@ -346,9 +346,9 @@ static int ecx_recvpkt(ecx_portt *port, int stacknumber)
  */
 int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
 {
-   uint16  l;
-   int     rval;
-   uint8   idxf;
+   uint16 l;
+   int rval;
+   uint8 idxf;
    ec_etherheadert *ehp;
    ec_comt *ecp;
    ec_stackT *stack;
@@ -365,7 +365,7 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
    rval = EC_NOFRAME;
    rxbuf = &(*stack->rxbuf)[idx];
    /* check if requested index is already in buffer ? */
-   if ((idx < EC_MAXBUF) && (   (*stack->rxbufstat)[idx] == EC_BUF_RCVD))
+   if ((idx < EC_MAXBUF) && ((*stack->rxbufstat)[idx] == EC_BUF_RCVD))
    {
       l = (*rxbuf)[0] + ((uint16)((*rxbuf)[1] & 0x0f) << 8);
       /* return WKC */
@@ -375,16 +375,16 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
    }
    else
    {
-      mtx_lock (port->rx_mutex);
+      mtx_lock(port->rx_mutex);
       /* non blocking call to retrieve frame from socket */
       if (ecx_recvpkt(port, stacknumber))
       {
          rval = EC_OTHERFRAME;
-         ehp =(ec_etherheadert*)(stack->tempbuf);
+         ehp = (ec_etherheadert *)(stack->tempbuf);
          /* check if it is an EtherCAT frame */
          if (ehp->etype == oshw_htons(ETH_P_ECAT))
          {
-            ecp =(ec_comt*)(&(*stack->tempbuf)[ETH_HEADERSIZE]);
+            ecp = (ec_comt *)(&(*stack->tempbuf)[ETH_HEADERSIZE]);
             l = etohs(ecp->elength) & 0x0fff;
             idxf = ecp->index;
             /* found index equals requested index ? */
@@ -418,8 +418,7 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
             }
          }
       }
-      mtx_unlock (port->rx_mutex);
-
+      mtx_unlock(port->rx_mutex);
    }
 
    /* WKC if matching frame found */
@@ -440,7 +439,7 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
  */
 static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert timer)
 {
-   int wkc  = EC_NOFRAME;
+   int wkc = EC_NOFRAME;
    int wkc2 = EC_NOFRAME;
    int primrx, secrx;
 
@@ -454,7 +453,7 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert timer)
       /* only read frame if not already in */
       if (wkc <= EC_NOFRAME)
       {
-         wkc  = ecx_inframe(port, idx, 0);
+         wkc = ecx_inframe(port, idx, 0);
       }
       /* only try secondary if in redundant mode */
       if (port->redstate != ECT_RED_NONE)
@@ -463,7 +462,7 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert timer)
          if (wkc2 <= EC_NOFRAME)
             wkc2 = ecx_inframe(port, idx, 1);
       }
-   /* wait for both frames to arrive or timeout */
+      /* wait for both frames to arrive or timeout */
    } while (((wkc <= EC_NOFRAME) || (wkc2 <= EC_NOFRAME)) && (osal_timer_is_expired(&timer) == FALSE));
    /* only do redundant functions when in redundant mode */
    if (port->redstate != ECT_RED_NONE)
@@ -482,7 +481,7 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert timer)
       }
       /* primary socket got secondary frame and secondary socket got primary frame */
       /* normal situation in redundant mode */
-      if ( ((primrx == RX_SEC) && (secrx == RX_PRIM)) )
+      if (((primrx == RX_SEC) && (secrx == RX_PRIM)))
       {
          /* copy secondary buffer to primary */
          memcpy(&(port->rxbuf[idx]), &(port->redport->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
@@ -490,15 +489,15 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert timer)
       }
       /* primary socket got nothing or primary frame, and secondary socket got secondary frame */
       /* we need to resend TX packet */
-      if ( ((primrx == 0) && (secrx == RX_SEC)) ||
-           ((primrx == RX_PRIM) && (secrx == RX_SEC)) )
+      if (((primrx == 0) && (secrx == RX_SEC)) ||
+          ((primrx == RX_PRIM) && (secrx == RX_SEC)))
       {
          osal_timert read_timer;
 
          /* If both primary and secondary have partial connection retransmit the primary received
           * frame over the secondary socket. The result from the secondary received frame is a combined
           * frame that traversed all slaves in standard order. */
-         if ( (primrx == RX_PRIM) && (secrx == RX_SEC) )
+         if ((primrx == RX_PRIM) && (secrx == RX_SEC))
          {
             /* copy primary rx to tx buffer */
             memcpy(&(port->txbuf[idx][ETH_HEADERSIZE]), &(port->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
@@ -536,7 +535,7 @@ int ecx_waitinframe(ecx_portt *port, uint8 idx, int timeout)
    int wkc;
    osal_timert timer;
 
-   osal_timer_start (&timer, timeout);
+   osal_timer_start(&timer, timeout);
    wkc = ecx_waitinframe_red(port, idx, timer);
 
    return wkc;
@@ -569,7 +568,7 @@ int ecx_srconfirm(ecx_portt *port, uint8 idx, int timeout)
       osal_timer_start(&read_timer, MIN(timeout, EC_TIMEOUTRET));
       /* get frame from primary or if in redundant mode possibly from secondary */
       wkc = ecx_waitinframe_red(port, idx, read_timer);
-   /* wait for answer with WKC>0 or otherwise retry until timeout */
+      /* wait for answer with WKC>0 or otherwise retry until timeout */
    } while ((wkc <= EC_NOFRAME) && (osal_timer_is_expired(&timer) == FALSE));
 
    return wkc;
index d4223c1d857f1c929cb5c002e29b0cd8aed7a3e4..8dd4d4b588b723f933d15a45de4864064879fd71 100644 (file)
 typedef struct
 {
    /** socket connection used */
-   int         *sock;
+   int *sock;
    /** tx buffer */
-   ec_bufT     (*txbuf)[EC_MAXBUF];
+   ec_bufT (*txbuf)[EC_MAXBUF];
    /** tx buffer lengths */
-   int         (*txbuflength)[EC_MAXBUF];
+   int (*txbuflength)[EC_MAXBUF];
    /** temporary receive buffer */
-   ec_bufT     *tempbuf;
+   ec_bufT *tempbuf;
    /** rx buffers */
-   ec_bufT     (*rxbuf)[EC_MAXBUF];
+   ec_bufT (*rxbuf)[EC_MAXBUF];
    /** rx buffer status fields */
-   int         (*rxbufstat)[EC_MAXBUF];
+   int (*rxbufstat)[EC_MAXBUF];
    /** received MAC source address (middle word) */
-   int         (*rxsa)[EC_MAXBUF];
+   int (*rxsa)[EC_MAXBUF];
 } ec_stackT;
 
 /** pointer structure to buffers for redundant port */
 typedef struct
 {
-   ec_stackT   stack;
-   int         sockhandle;
+   ec_stackT stack;
+   int sockhandle;
    /** rx buffers */
    ec_bufT rxbuf[EC_MAXBUF];
    /** rx buffer status */
@@ -51,8 +51,8 @@ typedef struct
 /** pointer structure to buffers, vars and mutexes for port instantiation */
 typedef struct
 {
-   ec_stackT   stack;
-   int         sockhandle;
+   ec_stackT stack;
+   int sockhandle;
    /** rx buffers */
    ec_bufT rxbuf[EC_MAXBUF];
    /** rx buffer status */
@@ -77,22 +77,22 @@ typedef struct
    int redstate;
    /** pointer to redundancy port and buffers */
    ecx_redportt *redport;
-   mtx_t * getindex_mutex;
-   mtx_t * tx_mutex;
-   mtx_t * rx_mutex;
+   mtx_t *getindex_mutex;
+   mtx_t *tx_mutex;
+   mtx_t *rx_mutex;
 } ecx_portt;
 
 extern const uint16 priMAC[3];
 extern const uint16 secMAC[3];
 
 void ec_setupheader(void *p);
-int ecx_setupnic(ecx_portt *port, const char * ifname, int secondary);
+int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary);
 int ecx_closenic(ecx_portt *port);
 void ecx_setbufstat(ecx_portt *port, uint8 idx, int bufstat);
 uint8 ecx_getindex(ecx_portt *port);
 int ecx_outframe(ecx_portt *port, uint8 idx, int stacknumber);
 int ecx_outframe_red(ecx_portt *port, uint8 idx);
 int ecx_waitinframe(ecx_portt *port, uint8 idx, int timeout);
-int ecx_srconfirm(ecx_portt *port, uint8 idx,int timeout);
+int ecx_srconfirm(ecx_portt *port, uint8 idx, int timeout);
 
 #endif
index 2cd58071a17b564ca141a9688dc27523e87bfba3..9e6335b101068af7a1ed3d3cc59a8190868eb40b 100644 (file)
@@ -16,8 +16,8 @@
  */
 uint16 oshw_htons(const uint16 host)
 {
-       uint16 network = htons (host);
-       return network;
+   uint16 network = htons(host);
+   return network;
 }
 
 /**
@@ -28,16 +28,16 @@ uint16 oshw_htons(const uint16 host)
  */
 uint16 oshw_ntohs(const uint16 network)
 {
-       uint16 host = ntohs (network);
-       return host;
+   uint16 host = ntohs(network);
+   return host;
 }
 
 /* Create list over available network adapters.
  * @return First element in linked list of adapters
  */
-ec_adaptert * oshw_find_adapters(void)
+ec_adaptert *oshw_find_adapters(void)
 {
-   ec_adaptert * ret_adapter = NULL;
+   ec_adaptert *ret_adapter = NULL;
 
    /* TODO if needed */
 
@@ -48,7 +48,7 @@ ec_adaptert * oshw_find_adapters(void)
  * @param[in] adapter = First element in linked list of adapters
  * EC_NOFRAME.
  */
-void oshw_free_adapters(ec_adaptert * adapter)
+void oshw_free_adapters(ec_adaptert *adapter)
 {
-          /* TODO if needed */
+   /* TODO if needed */
 }
index ebf301f9353cb8c8c3ef8342368bc180662f561f..f3903ca8b1563f3f489fdbb9a26521371cd8a81a 100644 (file)
 #define _oshw_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 #include <kern/kern.h>
 #include "soem/soem.h"
 #include "nicdrv.h"
 
-int oshw_mac_init (const uint8_t * mac_address);
-int oshw_mac_send (const void *payload, size_t tot_len);
-int oshw_mac_recv (void * buffer, size_t buffer_length);
+int oshw_mac_init(const uint8_t *mac_address);
+int oshw_mac_send(const void *payload, size_t tot_len);
+int oshw_mac_recv(void *buffer, size_t buffer_length);
 
 uint16 oshw_htons(uint16 host);
 uint16 oshw_ntohs(uint16 network);
 
-ec_adaptert * oshw_find_adapters(void);
-void oshw_free_adapters(ec_adaptert * adapter);
+ec_adaptert *oshw_find_adapters(void);
+void oshw_free_adapters(ec_adaptert *adapter);
 
 #ifdef __cplusplus
 }
index 394f5b17ce56a717a32c6d5401b4550da542724e..affa6128157fc62a9add4e898e8211614518aa64 100644 (file)
@@ -18,9 +18,9 @@
  * If there is a match the packet can be combined with the transmit packet
  * and returned to the higher level function.
  *
- * If EtherCAT is run in parallel with normal IP traffic and EtherCAT have a 
+ * If EtherCAT is run in parallel with normal IP traffic and EtherCAT have a
  * dedicated NIC, instantiate an extra tNetX task and redirect the NIC workQ
- * to be handle by the extra tNetX task, if needed raise the tNetX task prio. 
+ * to be handle by the extra tNetX task, if needed raise the tNetX task prio.
  * This prevents from having tNet0 becoming a bottleneck.
  *
  * The "redundant" option will configure two Mux drivers and two NIC interfaces.
 #include "osal.h"
 #include "nicdrv.h"
 
-#define NIC_DEBUG                /* Print debugging info? */
+#define NIC_DEBUG          /* Print debugging info? */
 
 // wvEvent flags
-#define ECAT_RECV_FAILED    0x664
-#define ECAT_RECV_OK        0x665
-#define ECAT_RECV_RETRY_OK  0x666
-#define ECAT_STACK_RECV     0x667
-#define ECAT_SEND_START     0x675
-#define ECAT_SEND_COMPLETE  0x676
-#define ECAT_SEND_FAILED    0x677
+#define ECAT_RECV_FAILED   0x664
+#define ECAT_RECV_OK       0x665
+#define ECAT_RECV_RETRY_OK 0x666
+#define ECAT_STACK_RECV    0x667
+#define ECAT_SEND_START    0x675
+#define ECAT_SEND_COMPLETE 0x676
+#define ECAT_SEND_FAILED   0x677
 
 #ifdef NIC_DEBUG
 
-#define NIC_LOGMSG(x,a,b,c,d,e,f)   \
-    do  {                           \
-        logMsg (x,a,b,c,d,e,f);     \
-    } while (0)
-#define NIC_WVEVENT(a,b,c)          \
-    do  {                           \
-        wvEvent(a, b, c);          \
-        } while (0)
-
+#define NIC_LOGMSG(x, a, b, c, d, e, f) \
+   do                                   \
+   {                                    \
+      logMsg(x, a, b, c, d, e, f);      \
+   } while (0)
+#define NIC_WVEVENT(a, b, c) \
+   do                        \
+   {                         \
+      wvEvent(a, b, c);      \
+   } while (0)
 
 #else
-#define NIC_LOGMSG(x,a,b,c,d,e,f)
-#define NIC_WVEVENT(a,b,c)
+#define NIC_LOGMSG(x, a, b, c, d, e, f)
+#define NIC_WVEVENT(a, b, c)
 #endif /* NIC_DEBUG */
 
 #define IF_NAME_SIZE 8
@@ -84,33 +85,32 @@ enum
    ECT_RED_DOUBLE
 };
 
-
 /** Primary source MAC address used for EtherCAT.
  * This address is not the MAC address used from the NIC.
  * EtherCAT does not care about MAC addressing, but it is used here to
  * differentiate the route the packet traverses through the EtherCAT
  * segment. This is needed to find out the packet flow in redundant
  * configurations. */
-const uint16 priMAC[3] = { 0x0101, 0x0101, 0x0101 };
+const uint16 priMAC[3] = {0x0101, 0x0101, 0x0101};
 /** Secondary source MAC address used for EtherCAT. */
-const uint16 secMAC[3] = { 0x0404, 0x0404, 0x0404 };
+const uint16 secMAC[3] = {0x0404, 0x0404, 0x0404};
 
 /** second MAC word is used for identification */
-#define RX_PRIM priMAC[1]
+#define RX_PRIM       priMAC[1]
 /** second MAC word is used for identification */
-#define RX_SEC secMAC[1]
+#define RX_SEC        secMAC[1]
 
 /* usec per tick for timeconversion, default to 1kHz */
 #define USECS_PER_SEC 1000000
 static unsigned int usec_per_tick = 1000;
 
 /** Receive hook called by Mux driver. */
-static int mux_rx_callback(voidpCookie, long type, M_BLK_ID pMblk, LL_HDR_INFO *llHdrInfo, void *muxUserArg);
+static int mux_rx_callback(void *pCookie, long type, M_BLK_ID pMblk, LL_HDR_INFO *llHdrInfo, void *muxUserArg);
 
 static void ecx_clear_rxbufstat(int *rxbufstat)
 {
    int i;
-   for(i = 0; i < EC_MAXBUF; i++)
+   for (i = 0; i < EC_MAXBUF; i++)
    {
       rxbufstat[i] = EC_BUF_EMPTY;
    }
@@ -118,39 +118,39 @@ static void ecx_clear_rxbufstat(int *rxbufstat)
 
 void print_nicversion(void)
 {
-    printf("Generic is used\n");
+   printf("Generic is used\n");
 }
 
 /** Basic setup to connect NIC to socket.
-* @param[in] port        = port context struct
-* @param[in] ifname      = Name of NIC device, f.e. "gei0"
-* @param[in] secondary   = if >0 then use secondary stack instead of primary
-* @return >0 if succeeded
-*/
-int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary) 
+ * @param[in] port        = port context struct
+ * @param[in] ifname      = Name of NIC device, f.e. "gei0"
+ * @param[in] secondary   = if >0 then use secondary stack instead of primary
+ * @return >0 if succeeded
+ */
+int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
 {
    int i;
    char ifn[IF_NAME_SIZE];
-   int unit_no = -1;   
-   ETHERCAT_PKT_DEV * pPktDev;
+   int unit_no = -1;
+   ETHERCAT_PKT_DEV *pPktDev;
 
    /* Get systick info, sysClkRateGet return ticks per second */
-   usec_per_tick =  USECS_PER_SEC / sysClkRateGet();
+   usec_per_tick = USECS_PER_SEC / sysClkRateGet();
    /* Don't allow 0 since it is used in DIV */
-   if(usec_per_tick == 0)
+   if (usec_per_tick == 0)
       usec_per_tick = 1;
    /* Make reference to packet device struct, keep track if the packet
     * device is the redundant or not.
     */
    if (secondary)
    {
-       pPktDev = &(port->redport->pktDev);
-       pPktDev->redundant = 1;
+      pPktDev = &(port->redport->pktDev);
+      pPktDev->redundant = 1;
    }
    else
    {
-       pPktDev = &(port->pktDev);
-       pPktDev->redundant = 0;
+      pPktDev = &(port->pktDev);
+      pPktDev->redundant = 0;
    }
 
    /* Clear frame counters*/
@@ -160,45 +160,45 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
 
    /* Create multi-thread support semaphores */
    port->sem_get_index = semMCreate(SEM_Q_PRIORITY | SEM_INVERSION_SAFE);
-   
-   /* Get the dev name and unit from ifname 
-    * We assume form gei1, fei0... 
+
+   /* Get the dev name and unit from ifname
+    * We assume form gei1, fei0...
     */
-   memset(ifn,0x0,sizeof(ifn));
-   
-   for(i=0; i < strlen(ifname);i++)
+   memset(ifn, 0x0, sizeof(ifn));
+
+   for (i = 0; i < strlen(ifname); i++)
    {
-       if(isdigit(ifname[i]))
-       {
-          strncpy(ifn, ifname, i);
-          unit_no = atoi(&ifname[i]);
-          break;
-       }
+      if (isdigit(ifname[i]))
+      {
+         strncpy(ifn, ifname, i);
+         unit_no = atoi(&ifname[i]);
+         break;
+      }
    }
 
    /* Detach IP stack */
-   //ipDetach(pktDev.unit,pktDev.name);
+   // ipDetach(pktDev.unit,pktDev.name);
 
    pPktDev->port = port;
 
-   /* Bind to mux driver for given interface, include ethercat driver pointer 
-     * as user reference 
-     */
+   /* Bind to mux driver for given interface, include ethercat driver pointer
+    * as user reference
+    */
    /* Bind to mux */
    pPktDev->pCookie = muxBind(ifn,
-                              unit_no, 
-                              mux_rx_callback, 
-                              NULL, 
-                              NULL, 
-                              NULL, 
-                              MUX_PROTO_SNARF, 
-                              "ECAT SNARF", 
+                              unit_no,
+                              mux_rx_callback,
+                              NULL,
+                              NULL,
+                              NULL,
+                              MUX_PROTO_SNARF,
+                              "ECAT SNARF",
                               pPktDev);
 
    if (pPktDev->pCookie == NULL)
    {
       /* fail */
-      NIC_LOGMSG("ecx_setupnic: muxBind init for gei: %d failed\n", 
+      NIC_LOGMSG("ecx_setupnic: muxBind init for gei: %d failed\n",
                  unit_no, 2, 3, 4, 5, 6);
       goto exit;
    }
@@ -219,22 +219,22 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
       /* secondary port struct available? */
       if (port->redport)
       {
-         port->redstate                   = ECT_RED_DOUBLE;
-         port->redport->stack.txbuf       = &(port->txbuf);
+         port->redstate = ECT_RED_DOUBLE;
+         port->redport->stack.txbuf = &(port->txbuf);
          port->redport->stack.txbuflength = &(port->txbuflength);
-         port->redport->stack.rxbuf       = &(port->redport->rxbuf);
-         port->redport->stack.rxbufstat   = &(port->redport->rxbufstat);
-         port->redport->stack.rxsa        = &(port->redport->rxsa);
+         port->redport->stack.rxbuf = &(port->redport->rxbuf);
+         port->redport->stack.rxbufstat = &(port->redport->rxbufstat);
+         port->redport->stack.rxsa = &(port->redport->rxsa);
          /* Create mailboxes for each potential EtherCAT frame index */
          for (i = 0; i < EC_MAXBUF; i++)
          {
-             port->redport->msgQId[i] = msgQCreate(1, sizeof(M_BLK_ID), MSG_Q_FIFO);
-             if (port->redport->msgQId[i] == MSG_Q_ID_NULL)
-             {
-                 NIC_LOGMSG("ecx_setupnic: Failed to create redundant MsgQ[%d]",
-                     i, 2, 3, 4, 5, 6);
-                goto exit;
-             }
+            port->redport->msgQId[i] = msgQCreate(1, sizeof(M_BLK_ID), MSG_Q_FIFO);
+            if (port->redport->msgQId[i] == MSG_Q_ID_NULL)
+            {
+               NIC_LOGMSG("ecx_setupnic: Failed to create redundant MsgQ[%d]",
+                          i, 2, 3, 4, 5, 6);
+               goto exit;
+            }
          }
          ecx_clear_rxbufstat(&(port->redport->rxbufstat[0]));
       }
@@ -248,13 +248,13 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
    }
    else
    {
-      port->lastidx           = 0;
-      port->redstate          = ECT_RED_NONE;
-      port->stack.txbuf       = &(port->txbuf);
+      port->lastidx = 0;
+      port->redstate = ECT_RED_NONE;
+      port->stack.txbuf = &(port->txbuf);
       port->stack.txbuflength = &(port->txbuflength);
-      port->stack.rxbuf       = &(port->rxbuf);
-      port->stack.rxbufstat   = &(port->rxbufstat);
-      port->stack.rxsa        = &(port->rxsa);
+      port->stack.rxbuf = &(port->rxbuf);
+      port->stack.rxbufstat = &(port->rxbufstat);
+      port->stack.rxsa = &(port->rxsa);
       /* Create mailboxes for each potential EtherCAT frame index */
       for (i = 0; i < EC_MAXBUF; i++)
       {
@@ -270,7 +270,7 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
    }
 
    /* setup ethernet headers in tx buffers so we don't have to repeat it */
-   for (i = 0; i < EC_MAXBUF; i++) 
+   for (i = 0; i < EC_MAXBUF; i++)
    {
       ec_setupheader(&(port->txbuf[i]));
       port->rxbufstat[i] = EC_BUF_EMPTY;
@@ -282,17 +282,16 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
 exit:
 
    return 0;
-
 }
 
 /** Close sockets used
  * @param[in] port        = port context struct
  * @return 0
  */
-int ecx_closenic(ecx_portt *port) 
+int ecx_closenic(ecx_portt *port)
 {
    int i;
-   ETHERCAT_PKT_DEV * pPktDev;
+   ETHERCAT_PKT_DEV *pPktDev;
    M_BLK_ID trash_can;
 
    pPktDev = &(port->pktDev);
@@ -301,18 +300,18 @@ int ecx_closenic(ecx_portt *port)
    {
       if (port->msgQId[i] != MSG_Q_ID_NULL)
       {
-         if (msgQReceive(port->msgQId[i], 
-                         (char *)&trash_can, 
-                         sizeof(M_BLK_ID), 
+         if (msgQReceive(port->msgQId[i],
+                         (char *)&trash_can,
+                         sizeof(M_BLK_ID),
                          NO_WAIT) != ERROR)
          {
             NIC_LOGMSG("ecx_closenic: idx %d MsgQ close\n", i,
-                        2, 3, 4, 5, 6);
-                  /* Free resources */
+                       2, 3, 4, 5, 6);
+            /* Free resources */
             netMblkClChainFree(trash_can);
          }
          msgQDelete(port->msgQId[i]);
-       }
+      }
    }
 
    if (pPktDev->pCookie != NULL)
@@ -328,9 +327,9 @@ int ecx_closenic(ecx_portt *port)
       {
          if (port->redport->msgQId[i] != MSG_Q_ID_NULL)
          {
-            if (msgQReceive(port->redport->msgQId[i], 
-                            (char *)&trash_can, 
-                            sizeof(M_BLK_ID), 
+            if (msgQReceive(port->redport->msgQId[i],
+                            (char *)&trash_can,
+                            sizeof(M_BLK_ID),
                             NO_WAIT) != ERROR)
             {
                NIC_LOGMSG("ecx_closenic: idx %d MsgQ close\n", i,
@@ -346,7 +345,7 @@ int ecx_closenic(ecx_portt *port)
          muxUnbind(pPktDev->pCookie, MUX_PROTO_SNARF, mux_rx_callback);
       }
    }
-      
+
    return 0;
 }
 
@@ -355,7 +354,7 @@ int ecx_closenic(ecx_portt *port)
  * Ethertype is always ETH_P_ECAT.
  * @param[out] p = buffer
  */
-void ec_setupheader(void *p) 
+void ec_setupheader(void *p)
 {
    ec_etherheadert *bp;
    bp = p;
@@ -378,10 +377,10 @@ uint8 ecx_getindex(ecx_portt *port)
    uint8 cnt;
 
    semTake(port->sem_get_index, WAIT_FOREVER);
-   
+
    idx = port->lastidx + 1;
    /* index can't be larger than buffer array */
-   if (idx >= EC_MAXBUF) 
+   if (idx >= EC_MAXBUF)
    {
       idx = 0;
    }
@@ -391,16 +390,16 @@ uint8 ecx_getindex(ecx_portt *port)
    {
       idx++;
       cnt++;
-      if (idx >= EC_MAXBUF) 
+      if (idx >= EC_MAXBUF)
       {
          idx = 0;
       }
    }
    port->rxbufstat[idx] = EC_BUF_ALLOC;
    port->lastidx = idx;
-   
+
    semGive(port->sem_get_index);
-   
+
    return idx;
 }
 
@@ -417,32 +416,32 @@ void ecx_setbufstat(ecx_portt *port, uint8 idx, int bufstat)
 }
 
 /** Low level transmit buffer over mux layer 2 driver
-* 
-* @param[in] pPktDev     = packet device to send buffer over
-* @param[in] idx         = index in tx buffer array
-* @param[in] buf         = buff to send
-* @param[in] len         = bytes to send
-* @return driver send result
-*/
-static int ec_outfram_send(ETHERCAT_PKT_DEV * pPktDev, uint8 idx, void * buf, int len)
+ *
+ * @param[in] pPktDev     = packet device to send buffer over
+ * @param[in] idx         = index in tx buffer array
+ * @param[in] buf         = buff to send
+ * @param[in] len         = bytes to send
+ * @return driver send result
+ */
+static int ec_outfram_send(ETHERCAT_PKT_DEV *pPktDev, uint8 idx, void *buf, int len)
 {
    STATUS status = OK;
    M_BLK_ID pPacket = NULL;
    int rval = 0;
    END_OBJ *endObj = (END_OBJ *)pPktDev->endObj;
-   MSG_Q_ID  msgQId;
+   MSG_Q_ID msgQId;
 
    /* Clean up any abandoned frames and re-use the allocated buffer*/
    msgQId = pPktDev->port->msgQId[idx];
-   if(msgQNumMsgs(msgQId) > 0)
+   if (msgQNumMsgs(msgQId) > 0)
    {
       pPktDev->abandoned_count++;
       NIC_LOGMSG("ec_outfram_send: idx %d MsgQ abandoned\n", idx,
                  2, 3, 4, 5, 6);
-      if (msgQReceive(msgQId, 
-                     (char *)&pPacket, 
-                     sizeof(M_BLK_ID), 
-                     NO_WAIT) == ERROR)
+      if (msgQReceive(msgQId,
+                      (char *)&pPacket,
+                      sizeof(M_BLK_ID),
+                      NO_WAIT) == ERROR)
       {
          pPacket = NULL;
          NIC_LOGMSG("ec_outfram_send: idx %d MsgQ mBlk handled by receiver\n", idx,
@@ -485,7 +484,7 @@ static int ec_outfram_send(ETHERCAT_PKT_DEV * pPktDev, uint8 idx, void * buf, in
       if (print_once == 0)
       {
          NIC_LOGMSG("ec_outfram_send: failed\n",
-                     1, 2, 3, 4, 5, 6);
+                    1, 2, 3, 4, 5, 6);
          print_once = 1;
       }
       NIC_WVEVENT(ECAT_SEND_FAILED, (char *)&rval, sizeof(rval));
@@ -494,18 +493,18 @@ static int ec_outfram_send(ETHERCAT_PKT_DEV * pPktDev, uint8 idx, void * buf, in
    return rval;
 }
 
-/** High level transmit buffer over mux layer 2 driver, passing buffer 
-* and packet device to send on as arguments
-* @param[in] port         = port context holding reference to packet device
-* @param[in] idx          = index in tx buffer array
-* @param[in] stacknumber  = 0=Primary 1=Secondary stack
-* @return socket send result
-*/
+/** High level transmit buffer over mux layer 2 driver, passing buffer
+ * and packet device to send on as arguments
+ * @param[in] port         = port context holding reference to packet device
+ * @param[in] idx          = index in tx buffer array
+ * @param[in] stacknumber  = 0=Primary 1=Secondary stack
+ * @return socket send result
+ */
 int ecx_outframe(ecx_portt *port, uint8 idx, int stacknumber)
 {
    int rval = 0;
    ec_stackT *stack;
-   ETHERCAT_PKT_DEV * pPktDev;
+   ETHERCAT_PKT_DEV *pPktDev;
 
    if (!stacknumber)
    {
@@ -519,7 +518,7 @@ int ecx_outframe(ecx_portt *port, uint8 idx, int stacknumber)
    }
 
    (*stack->rxbufstat)[idx] = EC_BUF_TX;
-   rval = ec_outfram_send(pPktDev, idx, (char*)(*stack->txbuf)[idx], 
+   rval = ec_outfram_send(pPktDev, idx, (char *)(*stack->txbuf)[idx],
                           (*stack->txbuflength)[idx]);
    if (rval > 0)
    {
@@ -529,7 +528,7 @@ int ecx_outframe(ecx_portt *port, uint8 idx, int stacknumber)
    {
       (*stack->rxbufstat)[idx] = EC_BUF_EMPTY;
    }
-   
+
    return rval;
 }
 
@@ -550,10 +549,10 @@ int ecx_outframe_red(ecx_portt *port, uint8 idx)
    /* transmit over primary socket*/
    rval = ecx_outframe(port, idx, 0);
    if (port->redstate != ECT_RED_NONE)
-   {   
+   {
       ehp = (ec_etherheadert *)&(port->txbuf2);
       /* use dummy frame for secondary socket transmit (BRD) */
-      datagramP = (ec_comt*)&(port->txbuf2[ETH_HEADERSIZE]);
+      datagramP = (ec_comt *)&(port->txbuf2[ETH_HEADERSIZE]);
       /* write index to frame */
       datagramP->index = idx;
       /* rewrite MAC source address 1 to secondary */
@@ -566,29 +565,28 @@ int ecx_outframe_red(ecx_portt *port, uint8 idx)
          port->redport->rxbufstat[idx] = EC_BUF_EMPTY;
       }
    }
-   
+
    return rval;
 }
 
-
-/** Call back routine registered as hook with mux layer 2 driver 
-* @param[in] pCookie      = Mux cookie
-* @param[in] type         = received type
-* @param[in] pMblk        = the received packet reference
-* @param[in] llHdrInfo    = header info
-* @param[in] muxUserArg   = assigned reference to packet device when init called
-* @return TRUE if frame was successfully read and passed to MsgQ
-*/
-static int mux_rx_callback(void* pCookie, long type, M_BLK_ID pMblk, LL_HDR_INFO *llHdrInfo, void *muxUserArg)
+/** Call back routine registered as hook with mux layer 2 driver
+ * @param[in] pCookie      = Mux cookie
+ * @param[in] type         = received type
+ * @param[in] pMblk        = the received packet reference
+ * @param[in] llHdrInfo    = header info
+ * @param[in] muxUserArg   = assigned reference to packet device when init called
+ * @return TRUE if frame was successfully read and passed to MsgQ
+ */
+static int mux_rx_callback(void *pCookie, long type, M_BLK_ID pMblk, LL_HDR_INFO *llHdrInfo, void *muxUserArg)
 {
    BOOL ret = FALSE;
    uint8 idxf;
    ec_comt *ecp;
-   ec_bufT * tempbuf;
-   ecx_portt * port;
-   MSG_Q_ID  msgQId;
-   ETHERCAT_PKT_DEV * pPktDev;
-   int  length;
+   ec_bufT *tempbuf;
+   ecx_portt *port;
+   MSG_Q_ID msgQId;
+   ETHERCAT_PKT_DEV *pPktDev;
+   int length;
    int bufstat;
 
    /* check if it is an EtherCAT frame */
@@ -600,7 +598,7 @@ static int mux_rx_callback(void* pCookie, long type, M_BLK_ID pMblk, LL_HDR_INFO
       port = pPktDev->port;
 
       /* Get ethercat frame header */
-      ecp = (ec_comt*)&(*tempbuf)[ETH_HEADERSIZE];
+      ecp = (ec_comt *)&(*tempbuf)[ETH_HEADERSIZE];
       idxf = ecp->index;
       if (idxf >= EC_MAXBUF)
       {
@@ -644,18 +642,18 @@ static int mux_rx_callback(void* pCookie, long type, M_BLK_ID pMblk, LL_HDR_INFO
             NIC_LOGMSG("mux_rx_callback: idx %d MsgQ overrun\n", idxf,
                        2, 3, 4, 5, 6);
             M_BLK_ID trash_can;
-            if (msgQReceive(msgQId, 
+            if (msgQReceive(msgQId,
                             (char *)&trash_can,
-                            sizeof(M_BLK_ID), 
+                            sizeof(M_BLK_ID),
                             NO_WAIT) != ERROR)
             {
-                /* Free resources */
-                netMblkClChainFree(trash_can);
+               /* Free resources */
+               netMblkClChainFree(trash_can);
             }
-            status = msgQSend(msgQId, 
-                             (char *)&pMblk, 
+            status = msgQSend(msgQId,
+                              (char *)&pMblk,
                               sizeof(M_BLK_ID),
-                              NO_WAIT, 
+                              NO_WAIT,
                               MSG_PRI_NORMAL);
             if (status == OK)
             {
@@ -679,12 +677,12 @@ static int mux_rx_callback(void* pCookie, long type, M_BLK_ID pMblk, LL_HDR_INFO
  * @param[in] timeout    = timeout in us
  * @return >0 if frame is available and read
  */
-static int ecx_recvpkt(ecx_portt *port, uint8 idx, int stacknumber, M_BLK_ID * pMblk, int timeout)
+static int ecx_recvpkt(ecx_portt *port, uint8 idx, int stacknumber, M_BLK_ID *pMblk, int timeout)
 {
    int bytesrx = 0;
-   MSG_Q_ID  msgQId;
+   MSG_Q_ID msgQId;
    int tick_timeout = max((timeout / usec_per_tick), 1);
-   
+
    if (stacknumber == 1)
    {
       msgQId = port->redport->msgQId[idx];
@@ -693,35 +691,34 @@ static int ecx_recvpkt(ecx_portt *port, uint8 idx, int stacknumber, M_BLK_ID * p
    {
       msgQId = port->msgQId[idx];
    }
-   
+
    if (timeout == 0)
    {
-       bytesrx = msgQReceive(msgQId, (void *)pMblk,
-                         sizeof(M_BLK_ID), NO_WAIT);
+      bytesrx = msgQReceive(msgQId, (void *)pMblk,
+                            sizeof(M_BLK_ID), NO_WAIT);
    }
    else
    {
-       bytesrx = msgQReceive(msgQId, (void *)pMblk,
-                         sizeof(M_BLK_ID), tick_timeout);
+      bytesrx = msgQReceive(msgQId, (void *)pMblk,
+                            sizeof(M_BLK_ID), tick_timeout);
    }
 
    if (bytesrx > 0)
    {
-       bytesrx = (*pMblk)->mBlkHdr.mLen;
-       NIC_WVEVENT(ECAT_STACK_RECV, (char *)&bytesrx, sizeof(bytesrx));
+      bytesrx = (*pMblk)->mBlkHdr.mLen;
+      NIC_WVEVENT(ECAT_STACK_RECV, (char *)&bytesrx, sizeof(bytesrx));
    }
 
-     
    return (bytesrx > 0);
 }
 
 /** Non blocking receive frame function. Uses RX buffer and index to combine
  * read frame with transmitted frame. Frames are received by separate receiver
- * task tNet0 (default), tNet0 fetch what frame index and store a reference to the 
- * received frame in matching MsgQ. The stack user tasks fetch the frame 
+ * task tNet0 (default), tNet0 fetch what frame index and store a reference to the
+ * received frame in matching MsgQ. The stack user tasks fetch the frame
  * reference and copies the frame the the RX buffer, when done it free
  * the frame buffer allocated by the Mux.
- * 
+ *
  * @param[in] port        = port context struct
  * @param[in] idx         = requested index of frame
  * @param[in] stacknumber = 0=primary 1=secondary stack
@@ -731,8 +728,8 @@ static int ecx_recvpkt(ecx_portt *port, uint8 idx, int stacknumber, M_BLK_ID * p
  */
 int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber, int timeout)
 {
-   uint16  l;
-   int     rval;
+   uint16 l;
+   int rval;
    ec_etherheadert *ehp;
    ec_comt *ecp;
    ec_stackT *stack;
@@ -753,29 +750,29 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber, int timeout)
    /* (non-) blocking call to retrieve frame from Muxlayer */
    if (ecx_recvpkt(port, idx, stacknumber, &pMblk, timeout))
    {
-       rval = EC_OTHERFRAME;
-
-       /* Get pointer to the frame */
-       tempinbuf = (ec_bufT *)pMblk->mBlkHdr.mData;
-       /* Get pointer to the Ethernet header */
-       ehp = (ec_etherheadert*)tempinbuf;
-       /* Get pointer to the EtherCAT frame as ethernet payload */
-       ecp = (ec_comt*)&(*tempinbuf)[ETH_HEADERSIZE];
-       l = etohs(ecp->elength) & 0x0fff;
-       /* yes, put it in the buffer array (strip ethernet header) */
-       netMblkOffsetToBufCopy(pMblk, ETH_HEADERSIZE,(void *) rxbuf,
+      rval = EC_OTHERFRAME;
+
+      /* Get pointer to the frame */
+      tempinbuf = (ec_bufT *)pMblk->mBlkHdr.mData;
+      /* Get pointer to the Ethernet header */
+      ehp = (ec_etherheadert *)tempinbuf;
+      /* Get pointer to the EtherCAT frame as ethernet payload */
+      ecp = (ec_comt *)&(*tempinbuf)[ETH_HEADERSIZE];
+      l = etohs(ecp->elength) & 0x0fff;
+      /* yes, put it in the buffer array (strip ethernet header) */
+      netMblkOffsetToBufCopy(pMblk, ETH_HEADERSIZE, (void *)rxbuf,
                              (*stack->txbuflength)[idx] - ETH_HEADERSIZE, NULL);
 
-       /* return WKC */
-       rval = ((*rxbuf)[l] + ((uint16)((*rxbuf)[l + 1]) << 8));
-       /* mark as completed */
-       (*stack->rxbufstat)[idx] = EC_BUF_COMPLETE;
-       /* store MAC source word 1 for redundant routing info */
-       (*stack->rxsa)[idx] = ntohs(ehp->sa1);
-       netMblkClChainFree(pMblk);
-       port->pktDev.rx_count++;
+      /* return WKC */
+      rval = ((*rxbuf)[l] + ((uint16)((*rxbuf)[l + 1]) << 8));
+      /* mark as completed */
+      (*stack->rxbufstat)[idx] = EC_BUF_COMPLETE;
+      /* store MAC source word 1 for redundant routing info */
+      (*stack->rxsa)[idx] = ntohs(ehp->sa1);
+      netMblkClChainFree(pMblk);
+      port->pktDev.rx_count++;
    }
-   
+
    /* WKC if matching frame found */
    return rval;
 }
@@ -784,7 +781,7 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber, int timeout)
  * it skips the secondary stack and redundancy functions. In redundant mode it waits
  * for both (primary and secondary) frames to come in. The result goes in an decision
  * tree that decides, depending on the route of the packet and its possible missing arrival,
- * how to reroute the original packet to get the data in an other try. 
+ * how to reroute the original packet to get the data in an other try.
  *
  * @param[in] port  = port context struct
  * @param[in] idx   = requested index of frame
@@ -796,16 +793,16 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber, int timeout)
 static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer, int timeout)
 {
    osal_timert timer2;
-   int wkc  = EC_NOFRAME;
+   int wkc = EC_NOFRAME;
    int wkc2 = EC_NOFRAME;
    int primrx, secrx;
-   
+
    /* if not in redundant mode then always assume secondary is OK */
    if (port->redstate == ECT_RED_NONE)
    {
       wkc2 = 0;
    }
-   do 
+   do
    {
       /* only read frame if not already in */
       if (wkc <= EC_NOFRAME)
@@ -814,14 +811,14 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer, i
       }
       /* only try secondary if in redundant mode */
       if (port->redstate != ECT_RED_NONE)
-      {   
+      {
          /* only read frame if not already in */
          if (wkc2 <= EC_NOFRAME)
          {
             wkc2 = ecx_inframe(port, idx, 1, timeout);
          }
-      }   
-   /* wait for both frames to arrive or timeout */   
+      }
+      /* wait for both frames to arrive or timeout */
    } while (((wkc <= EC_NOFRAME) || (wkc2 <= EC_NOFRAME)) && !osal_timer_is_expired(timer));
    /* only do redundant functions when in redundant mode */
    if (port->redstate != ECT_RED_NONE)
@@ -832,48 +829,48 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer, i
       /* secrx if the received MAC source on psecondary socket */
       secrx = 0;
       if (wkc2 > EC_NOFRAME) secrx = port->redport->rxsa[idx];
-      
+
       /* primary socket got secondary frame and secondary socket got primary frame */
       /* normal situation in redundant mode */
-      if ( ((primrx == RX_SEC) && (secrx == RX_PRIM)) )
+      if (((primrx == RX_SEC) && (secrx == RX_PRIM)))
       {
          /* copy secondary buffer to primary */
          memcpy(&(port->rxbuf[idx]), &(port->redport->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
          wkc = wkc2;
-      }   
+      }
       /* primary socket got nothing or primary frame, and secondary socket got secondary frame */
-      /* we need to resend TX packet */ 
-      if ( ((primrx == 0) && (secrx == RX_SEC)) ||
-           ((primrx == RX_PRIM) && (secrx == RX_SEC)) )
+      /* we need to resend TX packet */
+      if (((primrx == 0) && (secrx == RX_SEC)) ||
+          ((primrx == RX_PRIM) && (secrx == RX_SEC)))
       {
          /* If both primary and secondary have partial connection retransmit the primary received
           * frame over the secondary socket. The result from the secondary received frame is a combined
           * frame that traversed all slaves in standard order. */
-         if ( (primrx == RX_PRIM) && (secrx == RX_SEC) )
-         {   
+         if ((primrx == RX_PRIM) && (secrx == RX_SEC))
+         {
             /* copy primary rx to tx buffer */
             memcpy(&(port->txbuf[idx][ETH_HEADERSIZE]), &(port->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
          }
-         osal_timer_start (&timer2, EC_TIMEOUTRET);
+         osal_timer_start(&timer2, EC_TIMEOUTRET);
          /* resend secondary tx */
          ecx_outframe(port, idx, 1);
-         do 
+         do
          {
             /* retrieve frame */
             wkc2 = ecx_inframe(port, idx, 1, timeout);
          } while ((wkc2 <= EC_NOFRAME) && !osal_timer_is_expired(&timer2));
          if (wkc2 > EC_NOFRAME)
-         {   
+         {
             /* copy secondary result to primary rx buffer */
             memcpy(&(port->rxbuf[idx]), &(port->redport->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
             wkc = wkc2;
-         }   
-      }      
+         }
+      }
    }
-   
+
    /* return WKC or EC_NOFRAME */
    return wkc;
-}   
+}
 
 /** Blocking receive frame function. Calls ec_waitinframe_red().
  * @param[in] port        = port context struct
@@ -886,10 +883,10 @@ int ecx_waitinframe(ecx_portt *port, uint8 idx, int timeout)
 {
    int wkc;
    osal_timert timer;
-   
-   osal_timer_start (&timer, timeout); 
+
+   osal_timer_start(&timer, timeout);
    wkc = ecx_waitinframe_red(port, idx, &timer, timeout);
-   
+
    return wkc;
 }
 
@@ -910,25 +907,24 @@ int ecx_srconfirm(ecx_portt *port, uint8 idx, int timeout)
    int wkc = EC_NOFRAME;
    osal_timert timer1, timer2;
 
-   osal_timer_start (&timer1, timeout);
-   do 
+   osal_timer_start(&timer1, timeout);
+   do
    {
       /* tx frame on primary and if in redundant mode a dummy on secondary */
       ecx_outframe_red(port, idx);
-      if (timeout < EC_TIMEOUTRET) 
+      if (timeout < EC_TIMEOUTRET)
       {
-         osal_timer_start (&timer2, timeout); 
+         osal_timer_start(&timer2, timeout);
       }
-      else 
+      else
       {
          /* normally use partial timeout for rx */
-         osal_timer_start (&timer2, EC_TIMEOUTRET); 
+         osal_timer_start(&timer2, EC_TIMEOUTRET);
       }
       /* get frame from primary or if in redundant mode possibly from secondary */
       wkc = ecx_waitinframe_red(port, idx, &timer2, timeout);
-   /* wait for answer with WKC>=0 or otherwise retry until timeout */   
-   } while ((wkc <= EC_NOFRAME) && !osal_timer_is_expired (&timer1));
+      /* wait for answer with WKC>=0 or otherwise retry until timeout */
+   } while ((wkc <= EC_NOFRAME) && !osal_timer_is_expired(&timer1));
 
-   
    return wkc;
 }
index 1a74968987c20993a8296f457eb8dbffc6fa01fa..a4961838e0f58e888f1d51419e9f456fa738aa3d 100644 (file)
@@ -4,17 +4,16 @@
  * full license information.
  */
 
-/** \file 
+/** \file
  * \brief
- * Headerfile for nicdrv.c 
+ * Headerfile for nicdrv.c
  */
 
 #ifndef _nicdrvh_
 #define _nicdrvh_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 #include <vxWorks.h>
@@ -22,35 +21,35 @@ extern "C"
 /** structure to connect EtherCAT stack and VxWorks device */
 typedef struct ETHERCAT_PKT_DEV
 {
-   struct ecx_port  *port;
-   void             *pCookie;
-   void             *endObj; 
-   UINT32           redundant;
-   UINT32           tx_count;
-   UINT32           rx_count;
-   UINT32           overrun_count;
-   UINT32           abandoned_count;
-}ETHERCAT_PKT_DEV;
+   struct ecx_port *port;
+   void *pCookie;
+   void *endObj;
+   UINT32 redundant;
+   UINT32 tx_count;
+   UINT32 rx_count;
+   UINT32 overrun_count;
+   UINT32 abandoned_count;
+} ETHERCAT_PKT_DEV;
 
 /** pointer structure to Tx and Rx stacks */
 typedef struct
 {
    /** tx buffer */
-   ec_bufT     (*txbuf)[EC_MAXBUF];
+   ec_bufT (*txbuf)[EC_MAXBUF];
    /** tx buffer lengths */
-   int         (*txbuflength)[EC_MAXBUF];
+   int (*txbuflength)[EC_MAXBUF];
    /** rx buffers */
-   ec_bufT     (*rxbuf)[EC_MAXBUF];
+   ec_bufT (*rxbuf)[EC_MAXBUF];
    /** rx buffer status fields */
-   int         (*rxbufstat)[EC_MAXBUF];
+   int (*rxbufstat)[EC_MAXBUF];
    /** received MAC source address (middle word) */
-   int         (*rxsa)[EC_MAXBUF];
-} ec_stackT;   
+   int (*rxsa)[EC_MAXBUF];
+} ec_stackT;
 
 /** pointer structure to buffers for redundant port */
 typedef struct ecx_redport
 {
-   /** Stack reference */   
+   /** Stack reference */
    ec_stackT stack;
    /** Packet device instance */
    ETHERCAT_PKT_DEV pktDev;
@@ -61,13 +60,13 @@ typedef struct ecx_redport
    /** rx MAC source address */
    int rxsa[EC_MAXBUF];
    /** MSG Q for receive callbacks to post into */
-   MSG_Q_ID  msgQId[EC_MAXBUF];
+   MSG_Q_ID msgQId[EC_MAXBUF];
 } ecx_redportt;
 
 /** pointer structure to buffers, vars and mutexes for port instantiation */
 typedef struct ecx_port
 {
-   /** Stack reference */   
+   /** Stack reference */
    ec_stackT stack;
    /** Packet device instance */
    ETHERCAT_PKT_DEV pktDev;
@@ -90,25 +89,25 @@ typedef struct ecx_port
    /** current redundancy state */
    int redstate;
    /** pointer to redundancy port and buffers */
-   ecx_redportt *redport;   
+   ecx_redportt *redport;
    /** Semaphore to protect single resources */
-   SEM_ID  sem_get_index;
+   SEM_ID sem_get_index;
    /** MSG Q for receive callbacks to post into */
-   MSG_Q_ID  msgQId[EC_MAXBUF];
+   MSG_Q_ID msgQId[EC_MAXBUF];
 } ecx_portt;
 
 extern const uint16 priMAC[3];
 extern const uint16 secMAC[3];
 
 void ec_setupheader(void *p);
-int ecx_setupnic(ecx_portt *port, const char * ifname, int secondary);
+int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary);
 int ecx_closenic(ecx_portt *port);
 void ecx_setbufstat(ecx_portt *port, uint8 idx, int bufstat);
 uint8 ecx_getindex(ecx_portt *port);
 int ecx_outframe(ecx_portt *port, uint8 idx, int sock);
 int ecx_outframe_red(ecx_portt *port, uint8 idx);
 int ecx_waitinframe(ecx_portt *port, uint8 idx, int timeout);
-int ecx_srconfirm(ecx_portt *port, uint8 idx,int timeout);
+int ecx_srconfirm(ecx_portt *port, uint8 idx, int timeout);
 
 #ifdef __cplusplus
 }
index 5b8e8afb9a512f0403ba2c12808afdc82bf18a44..be6b614a972e7acc7cccb7859270707b93b7e35a 100644 (file)
@@ -22,7 +22,7 @@
  */
 uint16 oshw_htons(uint16 host)
 {
-   uint16 network = htons (host);
+   uint16 network = htons(host);
    return network;
 }
 
@@ -34,17 +34,17 @@ uint16 oshw_htons(uint16 host)
  */
 uint16 oshw_ntohs(uint16 network)
 {
-   uint16 host = ntohs (network);
+   uint16 host = ntohs(network);
    return host;
 }
 
 /** Create list over available network adapters.
  * @return First element in linked list of adapters
  */
-ec_adaptert * oshw_find_adapters(void)
+ec_adaptert *oshw_find_adapters(void)
 {
-   ec_adaptert * ret_adapter = NULL;
-    /* Not implemented */
+   ec_adaptert *ret_adapter = NULL;
+   /* Not implemented */
    assert(0);
 
    return ret_adapter;
@@ -54,8 +54,8 @@ ec_adaptert * oshw_find_adapters(void)
  * @param[in] adapter = First element in linked list of adapters
  * EC_NOFRAME.
  */
-void oshw_free_adapters(ec_adaptert * adapter)
+void oshw_free_adapters(ec_adaptert *adapter)
 {
-    /* Not implemented */
-    assert(0);
+   /* Not implemented */
+   assert(0);
 }
index 3640906a0e96a3b8e3a1ce4a4924cb70386e6922..5f5b29b5aeb2ff55aae51cc09c46b6fa2e662e09 100644 (file)
@@ -4,9 +4,9 @@
  * full license information.
  */
 
-/** \file 
+/** \file
  * \brief
- * Headerfile for oshw.c 
+ * Headerfile for oshw.c
  */
 
 #ifndef _oshw_
@@ -17,7 +17,7 @@
 
 uint16 oshw_htons(uint16 hostshort);
 uint16 oshw_ntohs(uint16 networkshort);
-ec_adaptert * oshw_find_adapters(void);
-void oshw_free_adapters(ec_adaptert * adapter);
+ec_adaptert *oshw_find_adapters(void);
+void oshw_free_adapters(ec_adaptert *adapter);
 
 #endif
index 3e87f0107407a50a45125cab5e6535da68e4127f..0f438ceadc57e2ea64044a976432f8da95b97890 100644 (file)
@@ -33,7 +33,6 @@
 
 #ifdef WIN32
 
-
 #include <sys/types.h>
 #include <fcntl.h>
 #include <string.h>
 /** Redundancy modes */
 enum
 {
-    /** No redundancy, single NIC mode */
-    ECT_RED_NONE,
-    /** Double redundant NIC connection */
-    ECT_RED_DOUBLE
+   /** No redundancy, single NIC mode */
+   ECT_RED_NONE,
+   /** Double redundant NIC connection */
+   ECT_RED_DOUBLE
 };
 
 /** Primary source MAC address used for EtherCAT.
@@ -60,21 +59,21 @@ enum
  * differentiate the route the packet traverses through the EtherCAT
  * segment. This is needed to fund out the packet flow in redundant
  * configurations. */
-const uint16 priMAC[3] = { 0x0101, 0x0101, 0x0101 };
+const uint16 priMAC[3] = {0x0101, 0x0101, 0x0101};
 /** Secondary source MAC address used for EtherCAT. */
-const uint16 secMAC[3] = { 0x0404, 0x0404, 0x0404 };
+const uint16 secMAC[3] = {0x0404, 0x0404, 0x0404};
 
 /** second MAC word is used for identification */
 #define RX_PRIM priMAC[1]
 /** second MAC word is used for identification */
-#define RX_SEC secMAC[1]
+#define RX_SEC  secMAC[1]
 
 static char errbuf[PCAP_ERRBUF_SIZE];
 
 static void ecx_clear_rxbufstat(int *rxbufstat)
 {
    int i;
-   for(i = 0; i < EC_MAXBUF; i++)
+   for (i = 0; i < EC_MAXBUF; i++)
    {
       rxbufstat[i] = EC_BUF_EMPTY;
    }
@@ -99,14 +98,14 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
          /* when using secondary socket it is automatically a redundant setup */
          psock = &(port->redport->sockhandle);
          *psock = NULL;
-         port->redstate                   = ECT_RED_DOUBLE;
-         port->redport->stack.sock        = &(port->redport->sockhandle);
-         port->redport->stack.txbuf       = &(port->txbuf);
+         port->redstate = ECT_RED_DOUBLE;
+         port->redport->stack.sock = &(port->redport->sockhandle);
+         port->redport->stack.txbuf = &(port->txbuf);
          port->redport->stack.txbuflength = &(port->txbuflength);
-         port->redport->stack.tempbuf     = &(port->redport->tempinbuf);
-         port->redport->stack.rxbuf       = &(port->redport->rxbuf);
-         port->redport->stack.rxbufstat   = &(port->redport->rxbufstat);
-         port->redport->stack.rxsa        = &(port->redport->rxsa);
+         port->redport->stack.tempbuf = &(port->redport->tempinbuf);
+         port->redport->stack.rxbuf = &(port->redport->rxbuf);
+         port->redport->stack.rxbufstat = &(port->redport->rxbufstat);
+         port->redport->stack.rxsa = &(port->redport->rxsa);
          ecx_clear_rxbufstat(&(port->redport->rxbufstat[0]));
       }
       else
@@ -120,30 +119,28 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
       InitializeCriticalSection(&(port->getindex_mutex));
       InitializeCriticalSection(&(port->tx_mutex));
       InitializeCriticalSection(&(port->rx_mutex));
-      port->sockhandle        = NULL;
-      port->lastidx           = 0;
-      port->redstate          = ECT_RED_NONE;
-      port->stack.sock        = &(port->sockhandle);
-      port->stack.txbuf       = &(port->txbuf);
+      port->sockhandle = NULL;
+      port->lastidx = 0;
+      port->redstate = ECT_RED_NONE;
+      port->stack.sock = &(port->sockhandle);
+      port->stack.txbuf = &(port->txbuf);
       port->stack.txbuflength = &(port->txbuflength);
-      port->stack.tempbuf     = &(port->tempinbuf);
-      port->stack.rxbuf       = &(port->rxbuf);
-      port->stack.rxbufstat   = &(port->rxbufstat);
-      port->stack.rxsa        = &(port->rxsa);
+      port->stack.tempbuf = &(port->tempinbuf);
+      port->stack.rxbuf = &(port->rxbuf);
+      port->stack.rxbufstat = &(port->rxbufstat);
+      port->stack.rxsa = &(port->rxsa);
       ecx_clear_rxbufstat(&(port->rxbufstat[0]));
       psock = &(port->sockhandle);
    }
    /* we use pcap socket to send RAW packets in windows user mode*/
-   *psock = pcap_open(ifname, 65536, PCAP_OPENFLAG_PROMISCUOUS |
-                                     PCAP_OPENFLAG_MAX_RESPONSIVENESS |
-                                     PCAP_OPENFLAG_NOCAPTURE_LOCAL, -1, NULL , errbuf);
+   *psock = pcap_open(ifname, 65536, PCAP_OPENFLAG_PROMISCUOUS | PCAP_OPENFLAG_MAX_RESPONSIVENESS | PCAP_OPENFLAG_NOCAPTURE_LOCAL, -1, NULL, errbuf);
    if (NULL == *psock)
    {
       printf("interface %s could not open with pcap\n", ifname);
       return 0;
    }
 
-    for (i = 0; i < EC_MAXBUF; i++)
+   for (i = 0; i < EC_MAXBUF; i++)
    {
       ec_setupheader(&(port->txbuf[i]));
       port->rxbufstat[i] = EC_BUF_EMPTY;
@@ -294,10 +291,10 @@ int ecx_outframe_red(ecx_portt *port, uint8 idx)
    rval = ecx_outframe(port, idx, 0);
    if (port->redstate != ECT_RED_NONE)
    {
-      EnterCriticalSection( &(port->tx_mutex) );
+      EnterCriticalSection(&(port->tx_mutex));
       ehp = (ec_etherheadert *)&(port->txbuf2);
       /* use dummy frame for secondary socket transmit (BRD) */
-      datagramP = (ec_comt*)&(port->txbuf2[ETH_HEADERSIZE]);
+      datagramP = (ec_comt *)&(port->txbuf2[ETH_HEADERSIZE]);
       /* write index to frame */
       datagramP->index = idx;
       /* rewrite MAC source address 1 to secondary */
@@ -308,7 +305,7 @@ int ecx_outframe_red(ecx_portt *port, uint8 idx)
       {
          port->redport->rxbufstat[idx] = EC_BUF_EMPTY;
       }
-      LeaveCriticalSection( &(port->tx_mutex) );
+      LeaveCriticalSection(&(port->tx_mutex));
    }
 
    return rval;
@@ -323,8 +320,8 @@ static int ecx_recvpkt(ecx_portt *port, int stacknumber)
 {
    int lp, bytesrx;
    ec_stackT *stack;
-   struct pcap_pkthdr * header;
-   unsigned char const * pkt_data;
+   struct pcap_pkthdr *header;
+   unsigned char const *pkt_data;
    int res;
 
    if (!stacknumber)
@@ -338,9 +335,9 @@ static int ecx_recvpkt(ecx_portt *port, int stacknumber)
    lp = sizeof(port->tempinbuf);
 
    res = pcap_next_ex(*stack->sock, &header, &pkt_data);
-   if (res <=)
+   if (res <= 0)
    {
-     port->tempinbufs = 0;
+      port->tempinbufs = 0;
       return 0;
    }
    bytesrx = header->len;
@@ -371,9 +368,9 @@ static int ecx_recvpkt(ecx_portt *port, int stacknumber)
  */
 int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
 {
-   uint16  l;
-   int     rval;
-   uint8   idxf;
+   uint16 l;
+   int rval;
+   uint8 idxf;
    ec_etherheadert *ehp;
    ec_comt *ecp;
    ec_stackT *stack;
@@ -405,11 +402,11 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
       if (ecx_recvpkt(port, stacknumber))
       {
          rval = EC_OTHERFRAME;
-         ehp =(ec_etherheadert*)(stack->tempbuf);
+         ehp = (ec_etherheadert *)(stack->tempbuf);
          /* check if it is an EtherCAT frame */
          if (ehp->etype == htons(ETH_P_ECAT))
          {
-            ecp =(ec_comt*)(&(*stack->tempbuf)[ETH_HEADERSIZE]);
+            ecp = (ec_comt *)(&(*stack->tempbuf)[ETH_HEADERSIZE]);
             l = etohs(ecp->elength) & 0x0fff;
             idxf = ecp->index;
             /* found index equals requested index ? */
@@ -443,8 +440,7 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
             }
          }
       }
-      LeaveCriticalSection( &(port->rx_mutex) );
-
+      LeaveCriticalSection(&(port->rx_mutex));
    }
 
    /* WKC if matching frame found */
@@ -466,7 +462,7 @@ int ecx_inframe(ecx_portt *port, uint8 idx, int stacknumber)
 static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
 {
    osal_timert timer2;
-   int wkc  = EC_NOFRAME;
+   int wkc = EC_NOFRAME;
    int wkc2 = EC_NOFRAME;
    int primrx, secrx;
 
@@ -477,7 +473,7 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
    {
       /* only read frame if not already in */
       if (wkc <= EC_NOFRAME)
-         wkc  = ecx_inframe(port, idx, 0);
+         wkc = ecx_inframe(port, idx, 0);
       /* only try secondary if in redundant mode */
       if (port->redstate != ECT_RED_NONE)
       {
@@ -485,7 +481,7 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
          if (wkc2 <= EC_NOFRAME)
             wkc2 = ecx_inframe(port, idx, 1);
       }
-   /* wait for both frames to arrive or timeout */
+      /* wait for both frames to arrive or timeout */
    } while (((wkc <= EC_NOFRAME) || (wkc2 <= EC_NOFRAME)) && !osal_timer_is_expired(timer));
    /* only do redundant functions when in redundant mode */
    if (port->redstate != ECT_RED_NONE)
@@ -499,7 +495,7 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
 
       /* primary socket got secondary frame and secondary socket got primary frame */
       /* normal situation in redundant mode */
-      if ( ((primrx == RX_SEC) && (secrx == RX_PRIM)) )
+      if (((primrx == RX_SEC) && (secrx == RX_PRIM)))
       {
          /* copy secondary buffer to primary */
          memcpy(&(port->rxbuf[idx]), &(port->redport->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
@@ -507,18 +503,18 @@ static int ecx_waitinframe_red(ecx_portt *port, uint8 idx, osal_timert *timer)
       }
       /* primary socket got nothing or primary frame, and secondary socket got secondary frame */
       /* we need to resend TX packet */
-      if ( ((primrx == 0) && (secrx == RX_SEC)) ||
-           ((primrx == RX_PRIM) && (secrx == RX_SEC)) )
+      if (((primrx == 0) && (secrx == RX_SEC)) ||
+          ((primrx == RX_PRIM) && (secrx == RX_SEC)))
       {
          /* If both primary and secondary have partial connection retransmit the primary received
           * frame over the secondary socket. The result from the secondary received frame is a combined
           * frame that traversed all slaves in standard order. */
-         if ( (primrx == RX_PRIM) && (secrx == RX_SEC) )
+         if ((primrx == RX_PRIM) && (secrx == RX_SEC))
          {
             /* copy primary rx to tx buffer */
             memcpy(&(port->txbuf[idx][ETH_HEADERSIZE]), &(port->rxbuf[idx]), port->txbuflength[idx] - ETH_HEADERSIZE);
          }
-         osal_timer_start (&timer2, EC_TIMEOUTRET);
+         osal_timer_start(&timer2, EC_TIMEOUTRET);
          /* resend secondary tx */
          ecx_outframe(port, idx, 1);
          do
@@ -551,7 +547,7 @@ int ecx_waitinframe(ecx_portt *port, uint8 idx, int timeout)
    int wkc;
    osal_timert timer;
 
-   osal_timer_start (&timer, timeout);
+   osal_timer_start(&timer, timeout);
    wkc = ecx_waitinframe_red(port, idx, &timer);
 
    return wkc;
@@ -574,24 +570,24 @@ int ecx_srconfirm(ecx_portt *port, uint8 idx, int timeout)
    int wkc = EC_NOFRAME;
    osal_timert timer1, timer2;
 
-   osal_timer_start (&timer1, timeout);
+   osal_timer_start(&timer1, timeout);
    do
    {
       /* tx frame on primary and if in redundant mode a dummy on secondary */
       ecx_outframe_red(port, idx);
       if (timeout < EC_TIMEOUTRET)
       {
-         osal_timer_start (&timer2, timeout);
+         osal_timer_start(&timer2, timeout);
       }
       else
       {
          /* normally use partial timeout for rx */
-         osal_timer_start (&timer2, EC_TIMEOUTRET);
+         osal_timer_start(&timer2, EC_TIMEOUTRET);
       }
       /* get frame from primary or if in redundant mode possibly from secondary */
       wkc = ecx_waitinframe_red(port, idx, &timer2);
-   /* wait for answer with WKC>=0 or otherwise retry until timeout */
-   } while ((wkc <= EC_NOFRAME) && !osal_timer_is_expired (&timer1));
+      /* wait for answer with WKC>=0 or otherwise retry until timeout */
+   } while ((wkc <= EC_NOFRAME) && !osal_timer_is_expired(&timer1));
 
    return wkc;
 }
index cc224f15e3123d96c5734c727a09d52dbd27e35d..698336df89c4e41c88a976a534f2ff4217a407bf 100644 (file)
@@ -13,8 +13,7 @@
 #define _nicdrvh_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 #define HAVE_REMOTE
@@ -26,26 +25,26 @@ extern "C"
 typedef struct
 {
    /** socket connection used */
-   pcap_t      **sock;
+   pcap_t **sock;
    /** tx buffer */
-   ec_bufT     (*txbuf)[EC_MAXBUF];
+   ec_bufT (*txbuf)[EC_MAXBUF];
    /** tx buffer lengths */
-   int         (*txbuflength)[EC_MAXBUF];
+   int (*txbuflength)[EC_MAXBUF];
    /** temporary receive buffer */
-   ec_bufT     *tempbuf;
+   ec_bufT *tempbuf;
    /** rx buffers */
-   ec_bufT     (*rxbuf)[EC_MAXBUF];
+   ec_bufT (*rxbuf)[EC_MAXBUF];
    /** rx buffer status fields */
-   int         (*rxbufstat)[EC_MAXBUF];
+   int (*rxbufstat)[EC_MAXBUF];
    /** received MAC source address (middle word) */
-   int         (*rxsa)[EC_MAXBUF];
+   int (*rxsa)[EC_MAXBUF];
 } ec_stackT;
 
 /** pointer structure to buffers for redundant port */
 typedef struct
 {
-   ec_stackT   stack;
-   pcap_t      *sockhandle;
+   ec_stackT stack;
+   pcap_t *sockhandle;
    /** rx buffers */
    ec_bufT rxbuf[EC_MAXBUF];
    /** rx buffer status */
@@ -59,8 +58,8 @@ typedef struct
 /** pointer structure to buffers, vars and mutexes for port instantiation */
 typedef struct
 {
-   ec_stackT   stack;
-   pcap_t      *sockhandle;
+   ec_stackT stack;
+   pcap_t *sockhandle;
    /** rx buffers */
    ec_bufT rxbuf[EC_MAXBUF];
    /** rx buffer status */
@@ -94,14 +93,14 @@ extern const uint16 priMAC[3];
 extern const uint16 secMAC[3];
 
 void ec_setupheader(void *p);
-int ecx_setupnic(ecx_portt *port, const char * ifname, int secondary);
+int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary);
 int ecx_closenic(ecx_portt *port);
 void ecx_setbufstat(ecx_portt *port, uint8 idx, int bufstat);
 uint8 ecx_getindex(ecx_portt *port);
 int ecx_outframe(ecx_portt *port, uint8 idx, int sock);
 int ecx_outframe_red(ecx_portt *port, uint8 idx);
 int ecx_waitinframe(ecx_portt *port, uint8 idx, int timeout);
-int ecx_srconfirm(ecx_portt *port, uint8 idx,int timeout);
+int ecx_srconfirm(ecx_portt *port, uint8 idx, int timeout);
 
 #ifdef __cplusplus
 }
index 517c8f6d1a044a05251d238c977adeabe4b03fe8..e9d97d0dd701c1cd1a1d6c3bf0f862d02c7e79ea 100644 (file)
@@ -13,9 +13,9 @@
  * Note that Ethercat uses little endian byte order, except for the Ethernet
  * header which is big endian as usual.
  */
-uint16 oshw_htons (uint16 host)
+uint16 oshw_htons(uint16 host)
 {
-   uint16 network = htons (host);
+   uint16 network = htons(host);
    return network;
 }
 
@@ -25,34 +25,34 @@ uint16 oshw_htons (uint16 host)
  * Note that Ethercat uses little endian byte order, except for the Ethernet
  * header which is big endian as usual.
  */
-uint16 oshw_ntohs (uint16 network)
+uint16 oshw_ntohs(uint16 network)
 {
-   uint16 host = ntohs (network);
+   uint16 host = ntohs(network);
    return host;
 }
 
 /* Create list over available network adapters.
  * @return First element in linked list of adapters
  */
-ec_adaptert * oshw_find_adapters (void)
+ec_adaptert *oshw_find_adapters(void)
 {
    pcap_if_t *alldevs;
    pcap_if_t *d;
-   ec_adaptert * adapter;
-   ec_adaptert * prev_adapter;
-   ec_adaptert * ret_adapter = NULL;
+   ec_adaptert *adapter;
+   ec_adaptert *prev_adapter;
+   ec_adaptert *ret_adapter = NULL;
    char errbuf[PCAP_ERRBUF_SIZE];
 
    /* find all devices */
    if (pcap_findalldevs(&alldevs, errbuf) == -1)
    {
-      fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);
+      fprintf(stderr, "Error in pcap_findalldevs_ex: %s\n", errbuf);
       return (NULL);
    }
    /* Iterate all devices and create a local copy holding the name and
     * description.
     */
-   for(d= alldevs; d != NULL; d= d->next)
+   for (d = alldevs; d != NULL; d = d->next)
    {
       adapter = (ec_adaptert *)malloc(sizeof(ec_adaptert));
       /* If we got more than one adapter save link list pointer to previous
@@ -73,7 +73,7 @@ ec_adaptert * oshw_find_adapters (void)
       if (d->name)
       {
          strncpy(adapter->name, d->name, EC_MAXLEN_ADAPTERNAME);
-         adapter->name[EC_MAXLEN_ADAPTERNAME-1] = '\0';
+         adapter->name[EC_MAXLEN_ADAPTERNAME - 1] = '\0';
       }
       else
       {
@@ -82,11 +82,11 @@ ec_adaptert * oshw_find_adapters (void)
       if (d->description)
       {
          strncpy(adapter->desc, d->description, EC_MAXLEN_ADAPTERNAME);
-         adapter->desc[EC_MAXLEN_ADAPTERNAME-1] = '\0';
+         adapter->desc[EC_MAXLEN_ADAPTERNAME - 1] = '\0';
       }
       else
       {
-          adapter->desc[0] = '\0';
+         adapter->desc[0] = '\0';
       }
       prev_adapter = adapter;
    }
@@ -100,21 +100,21 @@ ec_adaptert * oshw_find_adapters (void)
  * @param[in] adapter = First element in linked list of adapters
  * EC_NOFRAME.
  */
-void oshw_free_adapters (ec_adaptert * adapter)
+void oshw_free_adapters(ec_adaptert *adapter)
 {
-   ec_adaptert * next_adapter;
+   ec_adaptert *next_adapter;
    /* Iterate the linked list and free all elements holding
     * adapter information
     */
-   if(adapter)
+   if (adapter)
    {
       next_adapter = adapter->next;
-      free (adapter);
+      free(adapter);
       while (next_adapter)
       {
          adapter = next_adapter;
          next_adapter = adapter->next;
-         free (adapter);
+         free(adapter);
       }
    }
 }
index d178846dfee70c20df6d80e4e7882bc788bb6fdd..350ef51176535872e868677fa3a69c46ff2b34d1 100644 (file)
 #define _oshw_
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif
 
 #include "soem/soem.h"
 #include "nicdrv.h"
 
-uint16 oshw_htons (uint16 hostshort);
-uint16 oshw_ntohs (uint16 networkshort);
-ec_adaptert * oshw_find_adapters (void);
-void oshw_free_adapters (ec_adaptert * adapter);
+uint16 oshw_htons(uint16 hostshort);
+uint16 oshw_ntohs(uint16 networkshort);
+ec_adaptert *oshw_find_adapters(void);
+void oshw_free_adapters(ec_adaptert *adapter);
 
 #ifdef __cplusplus
 }
index 090c8c509a630793bc86a08e61f31defa35df88a..8cb863f894626543cf0a3021a423a285e2d69e39 100644 (file)
 
 #include "soem/soem.h"
 
-#define MAXBUF 524288
-#define STDBUF 2048
-#define MINBUF 128
-#define CRCBUF 14
+#define MAXBUF          524288
+#define STDBUF          2048
+#define MINBUF          128
+#define CRCBUF          14
 
-#define MODE_NONE         0
-#define MODE_READBIN      1
-#define MODE_READINTEL    2
-#define MODE_WRITEBIN     3
-#define MODE_WRITEINTEL   4
-#define MODE_WRITEALIAS   5
-#define MODE_INFO         6
+#define MODE_NONE       0
+#define MODE_READBIN    1
+#define MODE_READINTEL  2
+#define MODE_WRITEBIN   3
+#define MODE_WRITEINTEL 4
+#define MODE_WRITEALIAS 5
+#define MODE_INFO       6
 
-#define MAXSLENGTH        256
+#define MAXSLENGTH      256
 
 uint8 ebuf[MAXBUF];
 uint8 ob;
@@ -41,7 +41,7 @@ uint16 ow;
 int os;
 int slave;
 int alias;
-ec_timet tstart,tend, tdif;
+ec_timet tstart, tend, tdif;
 int wkc;
 int mode;
 char sline[MAXSLENGTH];
@@ -63,30 +63,30 @@ static int64 ec_DCtime;
 static ecx_portt ecx_port;
 static ec_mbxpoolt ec_mbxpool;
 
-static ecx_contextt  ctx = {
-   .port = &ecx_port,
-   .slavelist = &ec_slave[0],
-   .slavecount = &ec_slavecount,
-   .maxslave = EC_MAXSLAVE,
-   .grouplist = &ec_group[0],
-   .maxgroup = EC_MAXGROUP,
-   .esibuf = &ec_esibuf[0],
-   .esimap = &ec_esimap[0],
-   .esislave = 0,
-   .elist = &ec_elist,
-   .idxstack = &ec_idxstack,
-   .ecaterror = &EcatError,
-   .DCtime = &ec_DCtime,
-   .SMcommtype = &ec_SMcommtype[0],
-   .PDOassign = &ec_PDOassign[0],
-   .PDOdesc = &ec_PDOdesc[0],
-   .eepSM = &ec_SM,
-   .eepFMMU = &ec_FMMU,
-   .mbxpool = &ec_mbxpool,
-   .FOEhook = NULL,
-   .EOEhook = NULL,
-   .manualstatechange = 0,
-   .userdata = NULL,
+static ecx_contextt ctx = {
+    .port = &ecx_port,
+    .slavelist = &ec_slave[0],
+    .slavecount = &ec_slavecount,
+    .maxslave = EC_MAXSLAVE,
+    .grouplist = &ec_group[0],
+    .maxgroup = EC_MAXGROUP,
+    .esibuf = &ec_esibuf[0],
+    .esimap = &ec_esimap[0],
+    .esislave = 0,
+    .elist = &ec_elist,
+    .idxstack = &ec_idxstack,
+    .ecaterror = &EcatError,
+    .DCtime = &ec_DCtime,
+    .SMcommtype = &ec_SMcommtype[0],
+    .PDOassign = &ec_PDOassign[0],
+    .PDOdesc = &ec_PDOdesc[0],
+    .eepSM = &ec_SM,
+    .eepFMMU = &ec_FMMU,
+    .mbxpool = &ec_mbxpool,
+    .FOEhook = NULL,
+    .EOEhook = NULL,
+    .manualstatechange = 0,
+    .userdata = NULL,
 };
 
 #define IHEXLENGTH 0x20
@@ -95,12 +95,12 @@ void calc_crc(uint8 *crc, uint8 b)
 {
    int j;
    *crc ^= b;
-   for(j = 0; j <= 7 ; j++ )
+   for (j = 0; j <= 7; j++)
    {
-     if(*crc & 0x80)
-        *crc = (*crc << 1) ^ 0x07;
-     else
-        *crc = (*crc << 1);
+      if (*crc & 0x80)
+         *crc = (*crc << 1) ^ 0x07;
+      else
+         *crc = (*crc << 1);
    }
 }
 
@@ -110,9 +110,9 @@ uint16 SIIcrc(uint8 *buf)
    uint8 crc;
 
    crc = 0xff;
-   for( i = 0 ; i <= 13 ; i++ )
+   for (i = 0; i <= 13; i++)
    {
-      calc_crc(&crc , *(buf++));
+      calc_crc(&crc, *(buf++));
    }
    return (uint16)crc;
 }
@@ -124,7 +124,7 @@ int input_bin(char *fname, int *length)
    int cc = 0, c;
 
    fp = fopen(fname, "rb");
-   if(fp == NULL)
+   if (fp == NULL)
       return 0;
    while (((c = fgetc(fp)) != EOF) && (cc < MAXBUF))
       ebuf[cc++] = (uint8)c;
@@ -143,7 +143,7 @@ int input_intelhex(char *fname, int *start, int *length)
    int hstart, hlength, sum;
 
    fp = fopen(fname, "r");
-   if(fp == NULL)
+   if (fp == NULL)
       return 0;
    hstart = MAXBUF;
    hlength = 0;
@@ -152,7 +152,7 @@ int input_intelhex(char *fname, int *start, int *length)
    {
       memset(sline, 0x00, MAXSLENGTH);
       sc = 0;
-      while (((c = fgetc(fp)) != EOF) && (c != 0x0A) && (sc < (MAXSLENGTH -1)))
+      while (((c = fgetc(fp)) != EOF) && (c != 0x0A) && (sc < (MAXSLENGTH - 1)))
          sline[sc++] = (uint8)c;
       if ((c != EOF) && ((sc < 11) || (sline[0] != ':')))
       {
@@ -162,18 +162,18 @@ int input_intelhex(char *fname, int *start, int *length)
       }
       if (c != EOF)
       {
-         sn = sscanf(sline , ":%2x%4x%2x", &ll, &ladr, &lt);
+         sn = sscanf(sline, ":%2x%4x%2x", &ll, &ladr, &lt);
          if ((sn == 3) && ((ladr + ll) <= MAXBUF) && (lt == 0))
          {
             sum = ll + (ladr >> 8) + (ladr & 0xff) + lt;
-            if(ladr < hstart) hstart = ladr;
-            for(i = 0; i < ll ; i++)
+            if (ladr < hstart) hstart = ladr;
+            for (i = 0; i < ll; i++)
             {
                sn = sscanf(&sline[9 + (i << 1)], "%2x", &lval);
                ebuf[ladr + i] = (uint8)lval;
                sum += (uint8)lval;
             }
-            if(((ladr + ll) - hstart) > hlength)
+            if (((ladr + ll) - hstart) > hlength)
                hlength = (ladr + ll) - hstart;
             sum = (0x100 - sum) & 0xff;
             sn = sscanf(&sline[9 + (i << 1)], "%2x", &lval);
@@ -185,8 +185,7 @@ int input_intelhex(char *fname, int *start, int *length)
             }
          }
       }
-   }
-   while (c != EOF);
+   } while (c != EOF);
    if (retval)
    {
       *length = hlength;
@@ -204,10 +203,10 @@ int output_bin(char *fname, int length)
    int cc;
 
    fp = fopen(fname, "wb");
-   if(fp == NULL)
+   if (fp == NULL)
       return 0;
-   for (cc = 0 ; cc < length ; cc++)
-      fputc( ebuf[cc], fp);
+   for (cc = 0; cc < length; cc++)
+      fputc(ebuf[cc], fp);
    fclose(fp);
 
    return 1;
@@ -220,7 +219,7 @@ int output_intelhex(char *fname, int length)
    int cc = 0, ll, sum, i;
 
    fp = fopen(fname, "w");
-   if(fp == NULL)
+   if (fp == NULL)
       return 0;
    while (cc < length)
    {
@@ -250,13 +249,13 @@ int eeprom_read(int slave, int start, int length)
    uint64 b8;
    uint8 eepctl;
 
-   if((ec_slavecount >= slave) && (slave > 0) && ((start + length) <= MAXBUF))
+   if ((ec_slavecount >= slave) && (slave > 0) && ((start + length) <= MAXBUF))
    {
       aiadr = 1 - slave;
       eepctl = 2;
-      ecx_APWR(&ctx.port[0], aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl , EC_TIMEOUTRET); /* force Eeprom from PDI */
+      ecx_APWR(&ctx.port[0], aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl, EC_TIMEOUTRET); /* force Eeprom from PDI */
       eepctl = 0;
-      ecx_APWR(&ctx.port[0], aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl , EC_TIMEOUTRET); /* set Eeprom to master */
+      ecx_APWR(&ctx.port[0], aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl, EC_TIMEOUTRET); /* set Eeprom to master */
 
       estat = 0x0000;
       aiadr = 1 - slave;
@@ -265,28 +264,28 @@ int eeprom_read(int slave, int start, int length)
       if (estat & EC_ESTAT_R64)
       {
          ainc = 8;
-         for (i = start ; i < (start + length) ; i+=ainc)
+         for (i = start; i < (start + length); i += ainc)
          {
-            b8 = ecx_readeepromAP(&ctx, aiadr, i >> 1 , EC_TIMEOUTEEP);
+            b8 = ecx_readeepromAP(&ctx, aiadr, i >> 1, EC_TIMEOUTEEP);
             ebuf[i] = b8 & 0xFF;
-            ebuf[i+1] = (b8 >> 8) & 0xFF;
-            ebuf[i+2] = (b8 >> 16) & 0xFF;
-            ebuf[i+3] = (b8 >> 24) & 0xFF;
-            ebuf[i+4] = (b8 >> 32) & 0xFF;
-            ebuf[i+5] = (b8 >> 40) & 0xFF;
-            ebuf[i+6] = (b8 >> 48) & 0xFF;
-            ebuf[i+7] = (b8 >> 56) & 0xFF;
+            ebuf[i + 1] = (b8 >> 8) & 0xFF;
+            ebuf[i + 2] = (b8 >> 16) & 0xFF;
+            ebuf[i + 3] = (b8 >> 24) & 0xFF;
+            ebuf[i + 4] = (b8 >> 32) & 0xFF;
+            ebuf[i + 5] = (b8 >> 40) & 0xFF;
+            ebuf[i + 6] = (b8 >> 48) & 0xFF;
+            ebuf[i + 7] = (b8 >> 56) & 0xFF;
          }
       }
       else
       {
-         for (i = start ; i < (start + length) ; i+=ainc)
+         for (i = start; i < (start + length); i += ainc)
          {
-            b4 = ecx_readeepromAP(&ctx, aiadr, i >> 1 , EC_TIMEOUTEEP) & 0xFFFFFFFF;
+            b4 = ecx_readeepromAP(&ctx, aiadr, i >> 1, EC_TIMEOUTEEP) & 0xFFFFFFFF;
             ebuf[i] = b4 & 0xFF;
-            ebuf[i+1] = (b4 >> 8) & 0xFF;
-            ebuf[i+2] = (b4 >> 16) & 0xFF;
-            ebuf[i+3] = (b4 >> 24) & 0xFF;
+            ebuf[i + 1] = (b4 >> 8) & 0xFF;
+            ebuf[i + 2] = (b4 >> 16) & 0xFF;
+            ebuf[i + 3] = (b4 >> 24) & 0xFF;
          }
       }
 
@@ -302,19 +301,19 @@ int eeprom_write(int slave, int start, int length)
    uint16 aiadr, *wbuf;
    uint8 eepctl;
 
-   if((ec_slavecount >= slave) && (slave > 0) && ((start + length) <= MAXBUF))
+   if ((ec_slavecount >= slave) && (slave > 0) && ((start + length) <= MAXBUF))
    {
       aiadr = 1 - slave;
       eepctl = 2;
-      ecx_APWR(&ctx.port[0], aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl , EC_TIMEOUTRET); /* force Eeprom from PDI */
+      ecx_APWR(&ctx.port[0], aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl, EC_TIMEOUTRET); /* force Eeprom from PDI */
       eepctl = 0;
-      ecx_APWR(&ctx.port[0], aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl , EC_TIMEOUTRET); /* set Eeprom to master */
+      ecx_APWR(&ctx.port[0], aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl, EC_TIMEOUTRET); /* set Eeprom to master */
 
       aiadr = 1 - slave;
       wbuf = (uint16 *)&ebuf[0];
-      for (i = start ; i < (start + length) ; i+=2)
+      for (i = start; i < (start + length); i += 2)
       {
-         ecx_writeeepromAP(&ctx, aiadr, i >> 1 , *(wbuf + (i >> 1)), EC_TIMEOUTEEP);
+         ecx_writeeepromAP(&ctx, aiadr, i >> 1, *(wbuf + (i >> 1)), EC_TIMEOUTEEP);
          if (++dc >= 100)
          {
             dc = 0;
@@ -335,17 +334,17 @@ int eeprom_writealias(int slave, int alias, uint16 crc)
    uint8 eepctl;
    int ret;
 
-   if((ec_slavecount >= slave) && (slave > 0) && (alias <= 0xffff))
+   if ((ec_slavecount >= slave) && (slave > 0) && (alias <= 0xffff))
    {
       aiadr = 1 - slave;
       eepctl = 2;
-      ecx_APWR(&ctx.port[0], aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl , EC_TIMEOUTRET); /* force Eeprom from PDI */
+      ecx_APWR(&ctx.port[0], aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl, EC_TIMEOUTRET); /* force Eeprom from PDI */
       eepctl = 0;
-      ecx_APWR(&ctx.port[0], aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl , EC_TIMEOUTRET); /* set Eeprom to master */
+      ecx_APWR(&ctx.port[0], aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl, EC_TIMEOUTRET); /* set Eeprom to master */
 
-      ret = ecx_writeeepromAP(&ctx, aiadr, 0x04 , alias, EC_TIMEOUTEEP);
+      ret = ecx_writeeepromAP(&ctx, aiadr, 0x04, alias, EC_TIMEOUTEEP);
       if (ret)
-         ret = ecx_writeeepromAP(&ctx, aiadr, 0x07 , crc, EC_TIMEOUTEEP);
+         ret = ecx_writeeepromAP(&ctx, aiadr, 0x07, crc, EC_TIMEOUTEEP);
 
       return ret;
    }
@@ -361,16 +360,16 @@ void eepromtool(char *ifname, int slave, int mode, char *fname)
    /* initialise SOEM, bind socket to ifname */
    if (ecx_init(&ctx, ifname))
    {
-      printf("ec_init on %s succeeded.\n",ifname);
+      printf("ec_init on %s succeeded.\n", ifname);
 
       w = 0x0000;
-      wkc = ecx_BRD(&ctx.port[0], 0x0000, ECT_REG_TYPE, sizeof(w), &w, EC_TIMEOUTSAFE);      /* detect number of slaves */
-       if (wkc > 0)
-       {
+      wkc = ecx_BRD(&ctx.port[0], 0x0000, ECT_REG_TYPE, sizeof(w), &w, EC_TIMEOUTSAFE); /* detect number of slaves */
+      if (wkc > 0)
+      {
          ec_slavecount = wkc;
 
-         printf("%d slaves found.\n",ec_slavecount);
-         if((ec_slavecount >= slave) && (slave > 0))
+         printf("%d slaves found.\n", ec_slavecount);
+         if ((ec_slavecount >= slave) && (slave > 0))
          {
             if ((mode == MODE_INFO) || (mode == MODE_READBIN) || (mode == MODE_READINTEL))
             {
@@ -379,20 +378,20 @@ void eepromtool(char *ifname, int slave, int mode, char *fname)
 
                wbuf = (uint16 *)&ebuf[0];
                printf("Slave %d data\n", slave);
-               printf(" PDI Control      : %4.4X\n",*(wbuf + 0x00));
-               printf(" PDI Config       : %4.4X\n",*(wbuf + 0x01));
-               printf(" Config Alias     : %4.4X\n",*(wbuf + 0x04));
-               printf(" Checksum         : %4.4X\n",*(wbuf + 0x07));
-               printf("   calculated     : %4.4X\n",SIIcrc(&ebuf[0]));
-               printf(" Vendor ID        : %8.8X\n",*(uint32 *)(wbuf + 0x08));
-               printf(" Product Code     : %8.8X\n",*(uint32 *)(wbuf + 0x0A));
-               printf(" Revision Number  : %8.8X\n",*(uint32 *)(wbuf + 0x0C));
-               printf(" Serial Number    : %8.8X\n",*(uint32 *)(wbuf + 0x0E));
-               printf(" Mailbox Protocol : %4.4X\n",*(wbuf + 0x1C));
+               printf(" PDI Control      : %4.4X\n", *(wbuf + 0x00));
+               printf(" PDI Config       : %4.4X\n", *(wbuf + 0x01));
+               printf(" Config Alias     : %4.4X\n", *(wbuf + 0x04));
+               printf(" Checksum         : %4.4X\n", *(wbuf + 0x07));
+               printf("   calculated     : %4.4X\n", SIIcrc(&ebuf[0]));
+               printf(" Vendor ID        : %8.8X\n", *(uint32 *)(wbuf + 0x08));
+               printf(" Product Code     : %8.8X\n", *(uint32 *)(wbuf + 0x0A));
+               printf(" Revision Number  : %8.8X\n", *(uint32 *)(wbuf + 0x0C));
+               printf(" Serial Number    : %8.8X\n", *(uint32 *)(wbuf + 0x0E));
+               printf(" Mailbox Protocol : %4.4X\n", *(wbuf + 0x1C));
                esize = (*(wbuf + 0x3E) + 1) * 128;
                if (esize > MAXBUF) esize = MAXBUF;
-               printf(" Size             : %4.4X = %d bytes\n",*(wbuf + 0x3E), esize);
-               printf(" Version          : %4.4X\n",*(wbuf + 0x3F));
+               printf(" Size             : %4.4X = %d bytes\n", *(wbuf + 0x3E), esize);
+               printf(" Version          : %4.4X\n", *(wbuf + 0x3F));
             }
             if ((mode == MODE_READBIN) || (mode == MODE_READINTEL))
             {
@@ -402,24 +401,24 @@ void eepromtool(char *ifname, int slave, int mode, char *fname)
                tend = osal_current_time();
                osal_time_diff(&tstart, &tend, &tdif);
                if (mode == MODE_READINTEL) output_intelhex(fname, esize);
-               if (mode == MODE_READBIN)   output_bin(fname, esize);
+               if (mode == MODE_READBIN) output_bin(fname, esize);
 
-               printf("\nTotal EEPROM read time :%ldms\n", (tdif.usec+(tdif.sec*1000000L)) / 1000);
+               printf("\nTotal EEPROM read time :%ldms\n", (tdif.usec + (tdif.sec * 1000000L)) / 1000);
             }
             if ((mode == MODE_WRITEBIN) || (mode == MODE_WRITEINTEL))
             {
                estart = 0;
                if (mode == MODE_WRITEINTEL) rc = input_intelhex(fname, &estart, &esize);
-               if (mode == MODE_WRITEBIN)   rc = input_bin(fname, &esize);
+               if (mode == MODE_WRITEBIN) rc = input_bin(fname, &esize);
 
                if (rc > 0)
                {
                   wbuf = (uint16 *)&ebuf[0];
                   printf("Slave %d\n", slave);
-                  printf(" Vendor ID        : %8.8X\n",*(uint32 *)(wbuf + 0x08));
-                  printf(" Product Code     : %8.8X\n",*(uint32 *)(wbuf + 0x0A));
-                  printf(" Revision Number  : %8.8X\n",*(uint32 *)(wbuf + 0x0C));
-                  printf(" Serial Number    : %8.8X\n",*(uint32 *)(wbuf + 0x0E));
+                  printf(" Vendor ID        : %8.8X\n", *(uint32 *)(wbuf + 0x08));
+                  printf(" Product Code     : %8.8X\n", *(uint32 *)(wbuf + 0x0A));
+                  printf(" Revision Number  : %8.8X\n", *(uint32 *)(wbuf + 0x0C));
+                  printf(" Serial Number    : %8.8X\n", *(uint32 *)(wbuf + 0x0E));
 
                   printf("Busy");
                   fflush(stdout);
@@ -428,18 +427,18 @@ void eepromtool(char *ifname, int slave, int mode, char *fname)
                   tend = osal_current_time();
                   osal_time_diff(&tstart, &tend, &tdif);
 
-                  printf("\nTotal EEPROM write time :%ldms\n", (tdif.usec+(tdif.sec*1000000L)) / 1000);
+                  printf("\nTotal EEPROM write time :%ldms\n", (tdif.usec + (tdif.sec * 1000000L)) / 1000);
                }
                else
                   printf("Error reading file, abort.\n");
             }
             if (mode == MODE_WRITEALIAS)
             {
-               if( eeprom_read(slave, 0x0000, CRCBUF) ) // read first 14 bytes
+               if (eeprom_read(slave, 0x0000, CRCBUF)) // read first 14 bytes
                {
                   wbuf = (uint16 *)&ebuf[0];
                   *(wbuf + 0x04) = alias;
-                  if(eeprom_writealias(slave, alias, SIIcrc(&ebuf[0])))
+                  if (eeprom_writealias(slave, alias, SIIcrc(&ebuf[0])))
                   {
                      printf("Alias %4.4X written successfully to slave %d\n", alias, slave);
                   }
@@ -469,7 +468,7 @@ void eepromtool(char *ifname, int slave, int mode, char *fname)
    }
    else
    {
-      printf("No socket connection on %s\nExcecute as root\n",ifname);
+      printf("No socket connection on %s\nExcecute as root\n", ifname);
    }
 }
 
@@ -481,12 +480,12 @@ int main(int argc, char *argv[])
    if (argc > 3)
    {
       slave = atoi(argv[2]);
-      if ((strncmp(argv[3], "-i", sizeof("-i")) == 0))   mode = MODE_INFO;
+      if ((strncmp(argv[3], "-i", sizeof("-i")) == 0)) mode = MODE_INFO;
       if (argc > 4)
       {
-         if ((strncmp(argv[3], "-r", sizeof("-r")) == 0))   mode = MODE_READBIN;
+         if ((strncmp(argv[3], "-r", sizeof("-r")) == 0)) mode = MODE_READBIN;
          if ((strncmp(argv[3], "-ri", sizeof("-ri")) == 0)) mode = MODE_READINTEL;
-         if ((strncmp(argv[3], "-w", sizeof("-w")) == 0))   mode = MODE_WRITEBIN;
+         if ((strncmp(argv[3], "-w", sizeof("-w")) == 0)) mode = MODE_WRITEBIN;
          if ((strncmp(argv[3], "-wi", sizeof("-wi")) == 0)) mode = MODE_WRITEINTEL;
          if ((strncmp(argv[3], "-walias", sizeof("-walias")) == 0))
          {
@@ -495,12 +494,12 @@ int main(int argc, char *argv[])
          }
       }
       /* start tool */
-      eepromtool(argv[1],slave,mode,argv[4]);
+      eepromtool(argv[1], slave, mode, argv[4]);
    }
    else
    {
-      ec_adaptert * adapter = NULL;
-      ec_adaptert * head = NULL;
+      ec_adaptert *adapter = NULL;
+      ec_adaptert *head = NULL;
 
       printf("Usage: eepromtool ifname slave OPTION fname|alias\n");
       printf("ifname = eth0 for example\n");
@@ -512,11 +511,11 @@ int main(int argc, char *argv[])
       printf("    -w      write EEPROM, input binary format\n");
       printf("    -wi     write EEPROM, input Intel Hex format\n");
 
-      printf ("\nAvailable adapters:\n");
-      head = adapter = ec_find_adapters ();
+      printf("\nAvailable adapters:\n");
+      head = adapter = ec_find_adapters();
       while (adapter != NULL)
       {
-         printf ("    - %s  (%s)\n", adapter->name, adapter->desc);
+         printf("    - %s  (%s)\n", adapter->name, adapter->desc);
          adapter = adapter->next;
       }
       ec_free_adapters(head);
index f4e40e90fce677d6e346b79b0bcdebb3db99a552..f3628020757fac142106491417b64fbdd246f42a 100644 (file)
 #include <stdlib.h>
 #include <string.h>
 
-
-typedef struct {
-    ecx_contextt    context;
-    char *          iface;
-    uint8           group;
-    int             roundtrip_time;
-
-    /* Used by the context */
-    uint8           map[4096];
-    ecx_portt       port;
-    ec_slavet       slavelist[EC_MAXSLAVE];
-    int             slavecount;
-    ec_groupt       grouplist[EC_MAXGROUP];
-    uint8           esibuf[EC_MAXEEPBUF];
-    uint32          esimap[EC_MAXEEPBITMAP];
-    ec_eringt       elist;
-    ec_idxstackT    idxstack;
-    boolean         ecaterror;
-    int64           DCtime;
-    ec_SMcommtypet  SMcommtype[EC_MAX_MAPT];
-    ec_PDOassignt   PDOassign[EC_MAX_MAPT];
-    ec_PDOdesct     PDOdesc[EC_MAX_MAPT];
-    ec_eepromSMt    eepSM;
-    ec_eepromFMMUt  eepFMMU;
+typedef struct
+{
+   ecx_contextt context;
+   char *iface;
+   uint8 group;
+   int roundtrip_time;
+
+   /* Used by the context */
+   uint8 map[4096];
+   ecx_portt port;
+   ec_slavet slavelist[EC_MAXSLAVE];
+   int slavecount;
+   ec_groupt grouplist[EC_MAXGROUP];
+   uint8 esibuf[EC_MAXEEPBUF];
+   uint32 esimap[EC_MAXEEPBITMAP];
+   ec_eringt elist;
+   ec_idxstackT idxstack;
+   boolean ecaterror;
+   int64 DCtime;
+   ec_SMcommtypet SMcommtype[EC_MAX_MAPT];
+   ec_PDOassignt PDOassign[EC_MAX_MAPT];
+   ec_PDOdesct PDOdesc[EC_MAX_MAPT];
+   ec_eepromSMt eepSM;
+   ec_eepromFMMUt eepFMMU;
 } Fieldbus;
 
-
 static void
 fieldbus_initialize(Fieldbus *fieldbus, char *iface)
 {
-    ecx_contextt *context;
-
-    /* Let's start by 0-filling `fieldbus` to avoid surprises */
-    memset(fieldbus, 0, sizeof(*fieldbus));
-
-    fieldbus->iface = iface;
-    fieldbus->group = 0;
-    fieldbus->roundtrip_time = 0;
-    fieldbus->ecaterror = FALSE;
-
-    /* Initialize the ecx_contextt data structure */
-    context = &fieldbus->context;
-    context->port = &fieldbus->port;
-    context->slavelist = fieldbus->slavelist;
-    context->slavecount = &fieldbus->slavecount;
-    context->maxslave = EC_MAXSLAVE;
-    context->grouplist = fieldbus->grouplist;
-    context->maxgroup = EC_MAXGROUP;
-    context->esibuf = fieldbus->esibuf;
-    context->esimap = fieldbus->esimap;
-    context->esislave = 0;
-    context->elist = &fieldbus->elist;
-    context->idxstack = &fieldbus->idxstack;
-    context->ecaterror = &fieldbus->ecaterror;
-    context->DCtime = &fieldbus->DCtime;
-    context->SMcommtype = fieldbus->SMcommtype;
-    context->PDOassign = fieldbus->PDOassign;
-    context->PDOdesc = fieldbus->PDOdesc;
-    context->eepSM = &fieldbus->eepSM;
-    context->eepFMMU = &fieldbus->eepFMMU;
-    context->FOEhook = NULL;
-    context->EOEhook = NULL;
-    context->manualstatechange = 0;
+   ecx_contextt *context;
+
+   /* Let's start by 0-filling `fieldbus` to avoid surprises */
+   memset(fieldbus, 0, sizeof(*fieldbus));
+
+   fieldbus->iface = iface;
+   fieldbus->group = 0;
+   fieldbus->roundtrip_time = 0;
+   fieldbus->ecaterror = FALSE;
+
+   /* Initialize the ecx_contextt data structure */
+   context = &fieldbus->context;
+   context->port = &fieldbus->port;
+   context->slavelist = fieldbus->slavelist;
+   context->slavecount = &fieldbus->slavecount;
+   context->maxslave = EC_MAXSLAVE;
+   context->grouplist = fieldbus->grouplist;
+   context->maxgroup = EC_MAXGROUP;
+   context->esibuf = fieldbus->esibuf;
+   context->esimap = fieldbus->esimap;
+   context->esislave = 0;
+   context->elist = &fieldbus->elist;
+   context->idxstack = &fieldbus->idxstack;
+   context->ecaterror = &fieldbus->ecaterror;
+   context->DCtime = &fieldbus->DCtime;
+   context->SMcommtype = fieldbus->SMcommtype;
+   context->PDOassign = fieldbus->PDOassign;
+   context->PDOdesc = fieldbus->PDOdesc;
+   context->eepSM = &fieldbus->eepSM;
+   context->eepFMMU = &fieldbus->eepFMMU;
+   context->FOEhook = NULL;
+   context->EOEhook = NULL;
+   context->manualstatechange = 0;
 }
 
 static int
 fieldbus_roundtrip(Fieldbus *fieldbus)
 {
-    ecx_contextt *context;
-    ec_timet start, end, diff;
-    int wkc;
+   ecx_contextt *context;
+   ec_timet start, end, diff;
+   int wkc;
 
-    context = &fieldbus->context;
+   context = &fieldbus->context;
 
-    start = osal_current_time();
-    ecx_send_processdata(context);
-    wkc = ecx_receive_processdata(context, EC_TIMEOUTRET);
-    end = osal_current_time();
-    osal_time_diff(&start, &end, &diff);
-    fieldbus->roundtrip_time = diff.sec * 1000000 + diff.usec;
+   start = osal_current_time();
+   ecx_send_processdata(context);
+   wkc = ecx_receive_processdata(context, EC_TIMEOUTRET);
+   end = osal_current_time();
+   osal_time_diff(&start, &end, &diff);
+   fieldbus->roundtrip_time = diff.sec * 1000000 + diff.usec;
 
-    return wkc;
+   return wkc;
 }
 
 static boolean
 fieldbus_start(Fieldbus *fieldbus)
 {
-    ecx_contextt *context;
-    ec_groupt *grp;
-    ec_slavet *slave;
-    int i;
-
-    context = &fieldbus->context;
-    grp = fieldbus->grouplist + fieldbus->group;
-
-    printf("Initializing SOEM on '%s'... ", fieldbus->iface);
-    if (! ecx_init(context, fieldbus->iface)) {
-        printf("no socket connection\n");
-        return FALSE;
-    }
-    printf("done\n");
-
-    printf("Finding autoconfig slaves... ");
-    if (ecx_config_init(context, FALSE) <= 0) {
-        printf("no slaves found\n");
-        return FALSE;
-    }
-    printf("%d slaves found\n", fieldbus->slavecount);
-
-    printf("Sequential mapping of I/O... ");
-    ecx_config_map_group(context, fieldbus->map, fieldbus->group);
-    printf("mapped %dO+%dI bytes from %d segments",
-           grp->Obytes, grp->Ibytes, grp->nsegments);
-    if (grp->nsegments > 1) {
-        /* Show how slaves are distrubuted */
-        for (i = 0; i < grp->nsegments; ++i) {
-            printf("%s%d", i == 0 ? " (" : "+", grp->IOsegment[i]);
-        }
-        printf(" slaves)");
-    }
-    printf("\n");
-
-    printf("Configuring distributed clock... ");
-    ecx_configdc(context);
-    printf("done\n");
-
-    printf("Waiting for all slaves in safe operational... ");
-    ecx_statecheck(context, 0, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE * 4);
-    printf("done\n");
-
-    printf("Send a roundtrip to make outputs in slaves happy... ");
-    fieldbus_roundtrip(fieldbus);
-    printf("done\n");
-
-    printf("Setting operational state..");
-    /* Act on slave 0 (a virtual slave used for broadcasting) */
-    slave = fieldbus->slavelist;
-    slave->state = EC_STATE_OPERATIONAL;
-    ecx_writestate(context, 0);
-    /* Poll the result ten times before giving up */
-    for (i = 0; i < 10; ++i) {
-        printf(".");
-        fieldbus_roundtrip(fieldbus);
-        ecx_statecheck(context, 0, EC_STATE_OPERATIONAL, EC_TIMEOUTSTATE / 10);
-        if (slave->state == EC_STATE_OPERATIONAL) {
-            printf(" all slaves are now operational\n");
-            return TRUE;
-        }
-    }
-
-    printf(" failed,");
-    ecx_readstate(context);
-    for (i = 1; i <= fieldbus->slavecount; ++i) {
-        slave = fieldbus->slavelist + i;
-        if (slave->state != EC_STATE_OPERATIONAL) {
-            printf(" slave %d is 0x%04X (AL-status=0x%04X %s)",
-                 i, slave->state, slave->ALstatuscode,
-                 ec_ALstatuscode2string(slave->ALstatuscode));
-        }
-    }
-    printf("\n");
-
-    return FALSE;
+   ecx_contextt *context;
+   ec_groupt *grp;
+   ec_slavet *slave;
+   int i;
+
+   context = &fieldbus->context;
+   grp = fieldbus->grouplist + fieldbus->group;
+
+   printf("Initializing SOEM on '%s'... ", fieldbus->iface);
+   if (!ecx_init(context, fieldbus->iface))
+   {
+      printf("no socket connection\n");
+      return FALSE;
+   }
+   printf("done\n");
+
+   printf("Finding autoconfig slaves... ");
+   if (ecx_config_init(context, FALSE) <= 0)
+   {
+      printf("no slaves found\n");
+      return FALSE;
+   }
+   printf("%d slaves found\n", fieldbus->slavecount);
+
+   printf("Sequential mapping of I/O... ");
+   ecx_config_map_group(context, fieldbus->map, fieldbus->group);
+   printf("mapped %dO+%dI bytes from %d segments",
+          grp->Obytes, grp->Ibytes, grp->nsegments);
+   if (grp->nsegments > 1)
+   {
+      /* Show how slaves are distrubuted */
+      for (i = 0; i < grp->nsegments; ++i)
+      {
+         printf("%s%d", i == 0 ? " (" : "+", grp->IOsegment[i]);
+      }
+      printf(" slaves)");
+   }
+   printf("\n");
+
+   printf("Configuring distributed clock... ");
+   ecx_configdc(context);
+   printf("done\n");
+
+   printf("Waiting for all slaves in safe operational... ");
+   ecx_statecheck(context, 0, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE * 4);
+   printf("done\n");
+
+   printf("Send a roundtrip to make outputs in slaves happy... ");
+   fieldbus_roundtrip(fieldbus);
+   printf("done\n");
+
+   printf("Setting operational state..");
+   /* Act on slave 0 (a virtual slave used for broadcasting) */
+   slave = fieldbus->slavelist;
+   slave->state = EC_STATE_OPERATIONAL;
+   ecx_writestate(context, 0);
+   /* Poll the result ten times before giving up */
+   for (i = 0; i < 10; ++i)
+   {
+      printf(".");
+      fieldbus_roundtrip(fieldbus);
+      ecx_statecheck(context, 0, EC_STATE_OPERATIONAL, EC_TIMEOUTSTATE / 10);
+      if (slave->state == EC_STATE_OPERATIONAL)
+      {
+         printf(" all slaves are now operational\n");
+         return TRUE;
+      }
+   }
+
+   printf(" failed,");
+   ecx_readstate(context);
+   for (i = 1; i <= fieldbus->slavecount; ++i)
+   {
+      slave = fieldbus->slavelist + i;
+      if (slave->state != EC_STATE_OPERATIONAL)
+      {
+         printf(" slave %d is 0x%04X (AL-status=0x%04X %s)",
+                i, slave->state, slave->ALstatuscode,
+                ec_ALstatuscode2string(slave->ALstatuscode));
+      }
+   }
+   printf("\n");
+
+   return FALSE;
 }
 
 static void
 fieldbus_stop(Fieldbus *fieldbus)
 {
-    ecx_contextt *context;
-    ec_slavet *slave;
+   ecx_contextt *context;
+   ec_slavet *slave;
 
-    context = &fieldbus->context;
-    /* Act on slave 0 (a virtual slave used for broadcasting) */
-    slave = fieldbus->slavelist;
+   context = &fieldbus->context;
+   /* Act on slave 0 (a virtual slave used for broadcasting) */
+   slave = fieldbus->slavelist;
 
-    printf("Requesting init state on all slaves... ");
-    slave->state = EC_STATE_INIT;
-    ecx_writestate(context, 0);
-    printf("done\n");
+   printf("Requesting init state on all slaves... ");
+   slave->state = EC_STATE_INIT;
+   ecx_writestate(context, 0);
+   printf("done\n");
 
-    printf("Close socket... ");
-    ecx_close(context);
-    printf("done\n");
+   printf("Close socket... ");
+   ecx_close(context);
+   printf("done\n");
 }
 
 static boolean
 fieldbus_dump(Fieldbus *fieldbus)
 {
-    ec_groupt *grp;
-    uint32 n;
-    int wkc, expected_wkc;
-
-    grp = fieldbus->grouplist + fieldbus->group;
-
-    wkc = fieldbus_roundtrip(fieldbus);
-    expected_wkc = grp->outputsWKC * 2 + grp->inputsWKC;
-    printf("%6d usec  WKC %d", fieldbus->roundtrip_time, wkc);
-    if (wkc < expected_wkc) {
-        printf(" wrong (expected %d)\n", expected_wkc);
-        return FALSE;
-    }
-
-    printf("  O:");
-    for (n = 0; n < grp->Obytes; ++n) {
-        printf(" %02X", grp->outputs[n]);
-    }
-    printf("  I:");
-    for (n = 0; n < grp->Ibytes; ++n) {
-        printf(" %02X", grp->inputs[n]);
-    }
-    printf("  T: %lld\r", (long long) fieldbus->DCtime);
-    return TRUE;
+   ec_groupt *grp;
+   uint32 n;
+   int wkc, expected_wkc;
+
+   grp = fieldbus->grouplist + fieldbus->group;
+
+   wkc = fieldbus_roundtrip(fieldbus);
+   expected_wkc = grp->outputsWKC * 2 + grp->inputsWKC;
+   printf("%6d usec  WKC %d", fieldbus->roundtrip_time, wkc);
+   if (wkc < expected_wkc)
+   {
+      printf(" wrong (expected %d)\n", expected_wkc);
+      return FALSE;
+   }
+
+   printf("  O:");
+   for (n = 0; n < grp->Obytes; ++n)
+   {
+      printf(" %02X", grp->outputs[n]);
+   }
+   printf("  I:");
+   for (n = 0; n < grp->Ibytes; ++n)
+   {
+      printf(" %02X", grp->inputs[n]);
+   }
+   printf("  T: %lld\r", (long long)fieldbus->DCtime);
+   return TRUE;
 }
 
 static void
 fieldbus_check_state(Fieldbus *fieldbus)
 {
-    ecx_contextt *context;
-    ec_groupt *grp;
-    ec_slavet *slave;
-    int i;
-
-    context = &fieldbus->context;
-    grp = context->grouplist + fieldbus->group;
-    grp->docheckstate = FALSE;
-    ecx_readstate(context);
-    for (i = 1; i <= fieldbus->slavecount; ++i) {
-        slave = context->slavelist + i;
-        if (slave->group != fieldbus->group) {
-            /* This slave is part of another group: do nothing */
-        } else if (slave->state != EC_STATE_OPERATIONAL) {
-            grp->docheckstate = TRUE;
-            if (slave->state == EC_STATE_SAFE_OP + EC_STATE_ERROR) {
-                printf("* Slave %d is in SAFE_OP+ERROR, attempting ACK\n", i);
-                slave->state = EC_STATE_SAFE_OP + EC_STATE_ACK;
-                ecx_writestate(context, i);
-            } else if(slave->state == EC_STATE_SAFE_OP) {
-                printf("* Slave %d is in SAFE_OP, change to OPERATIONAL\n", i);
-                slave->state = EC_STATE_OPERATIONAL;
-                ecx_writestate(context, i);
-            } else if(slave->state > EC_STATE_NONE) {
-                if (ecx_reconfig_slave(context, i, EC_TIMEOUTRET)) {
-                    slave->islost = FALSE;
-                    printf("* Slave %d reconfigured\n", i);
-                }
-            } else if(! slave->islost) {
-                ecx_statecheck(context, i, EC_STATE_OPERATIONAL, EC_TIMEOUTRET);
-                if (slave->state == EC_STATE_NONE) {
-                    slave->islost = TRUE;
-                    printf("* Slave %d lost\n", i);
-                }
+   ecx_contextt *context;
+   ec_groupt *grp;
+   ec_slavet *slave;
+   int i;
+
+   context = &fieldbus->context;
+   grp = context->grouplist + fieldbus->group;
+   grp->docheckstate = FALSE;
+   ecx_readstate(context);
+   for (i = 1; i <= fieldbus->slavecount; ++i)
+   {
+      slave = context->slavelist + i;
+      if (slave->group != fieldbus->group)
+      {
+         /* This slave is part of another group: do nothing */
+      }
+      else if (slave->state != EC_STATE_OPERATIONAL)
+      {
+         grp->docheckstate = TRUE;
+         if (slave->state == EC_STATE_SAFE_OP + EC_STATE_ERROR)
+         {
+            printf("* Slave %d is in SAFE_OP+ERROR, attempting ACK\n", i);
+            slave->state = EC_STATE_SAFE_OP + EC_STATE_ACK;
+            ecx_writestate(context, i);
+         }
+         else if (slave->state == EC_STATE_SAFE_OP)
+         {
+            printf("* Slave %d is in SAFE_OP, change to OPERATIONAL\n", i);
+            slave->state = EC_STATE_OPERATIONAL;
+            ecx_writestate(context, i);
+         }
+         else if (slave->state > EC_STATE_NONE)
+         {
+            if (ecx_reconfig_slave(context, i, EC_TIMEOUTRET))
+            {
+               slave->islost = FALSE;
+               printf("* Slave %d reconfigured\n", i);
             }
-        } else if (slave->islost) {
-            if(slave->state != EC_STATE_NONE) {
-                slave->islost = FALSE;
-                printf("* Slave %d found\n", i);
-            } else if (ecx_recover_slave(context, i, EC_TIMEOUTRET)) {
-                slave->islost = FALSE;
-                printf("* Slave %d recovered\n", i);
+         }
+         else if (!slave->islost)
+         {
+            ecx_statecheck(context, i, EC_STATE_OPERATIONAL, EC_TIMEOUTRET);
+            if (slave->state == EC_STATE_NONE)
+            {
+               slave->islost = TRUE;
+               printf("* Slave %d lost\n", i);
             }
-        }
-    }
-
-    if (! grp->docheckstate) {
-        printf("All slaves resumed OPERATIONAL\n");
-    }
+         }
+      }
+      else if (slave->islost)
+      {
+         if (slave->state != EC_STATE_NONE)
+         {
+            slave->islost = FALSE;
+            printf("* Slave %d found\n", i);
+         }
+         else if (ecx_recover_slave(context, i, EC_TIMEOUTRET))
+         {
+            slave->islost = FALSE;
+            printf("* Slave %d recovered\n", i);
+         }
+      }
+   }
+
+   if (!grp->docheckstate)
+   {
+      printf("All slaves resumed OPERATIONAL\n");
+   }
 }
 
-int
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
-    Fieldbus fieldbus;
-
-    if (argc != 2) {
-        ec_adaptert * adapter = NULL;
-        ec_adaptert * head = NULL;
-        printf("Usage: simple_ng IFNAME1\n"
-               "IFNAME1 is the NIC interface name, e.g. 'eth0'\n");
-
-        printf("\nAvailable adapters:\n");
-        head = adapter = ec_find_adapters();
-        while (adapter != NULL)
-        {
-            printf("    - %s  (%s)\n", adapter->name, adapter->desc);
-            adapter = adapter->next;
-        }
-        ec_free_adapters(head);
-        return 1;
-    }
-
-    fieldbus_initialize(&fieldbus, argv[1]);
-    if (fieldbus_start(&fieldbus)) {
-        int i, min_time, max_time;
-        min_time = max_time = 0;
-        for (i = 1; i <= 10000; ++i) {
-            printf("Iteration %4d:", i);
-            if (! fieldbus_dump(&fieldbus)) {
-                fieldbus_check_state(&fieldbus);
-            } else if (i == 1) {
-                min_time = max_time = fieldbus.roundtrip_time;
-            } else if (fieldbus.roundtrip_time < min_time) {
-                min_time = fieldbus.roundtrip_time;
-            } else if (fieldbus.roundtrip_time > max_time) {
-                max_time = fieldbus.roundtrip_time;
-            }
-            osal_usleep(5000);
-        }
-        printf("\nRoundtrip time (usec): min %d max %d\n", min_time, max_time);
-        fieldbus_stop(&fieldbus);
-    }
-
-    return 0;
+   Fieldbus fieldbus;
+
+   if (argc != 2)
+   {
+      ec_adaptert *adapter = NULL;
+      ec_adaptert *head = NULL;
+      printf("Usage: simple_ng IFNAME1\n"
+             "IFNAME1 is the NIC interface name, e.g. 'eth0'\n");
+
+      printf("\nAvailable adapters:\n");
+      head = adapter = ec_find_adapters();
+      while (adapter != NULL)
+      {
+         printf("    - %s  (%s)\n", adapter->name, adapter->desc);
+         adapter = adapter->next;
+      }
+      ec_free_adapters(head);
+      return 1;
+   }
+
+   fieldbus_initialize(&fieldbus, argv[1]);
+   if (fieldbus_start(&fieldbus))
+   {
+      int i, min_time, max_time;
+      min_time = max_time = 0;
+      for (i = 1; i <= 10000; ++i)
+      {
+         printf("Iteration %4d:", i);
+         if (!fieldbus_dump(&fieldbus))
+         {
+            fieldbus_check_state(&fieldbus);
+         }
+         else if (i == 1)
+         {
+            min_time = max_time = fieldbus.roundtrip_time;
+         }
+         else if (fieldbus.roundtrip_time < min_time)
+         {
+            min_time = fieldbus.roundtrip_time;
+         }
+         else if (fieldbus.roundtrip_time > max_time)
+         {
+            max_time = fieldbus.roundtrip_time;
+         }
+         osal_usleep(5000);
+      }
+      printf("\nRoundtrip time (usec): min %d max %d\n", min_time, max_time);
+      fieldbus_stop(&fieldbus);
+   }
+
+   return 0;
 }
index 08b00cdf074aa23094f7b602915af459f797ad54..6c9550ab0aaddc275dac91a268e226bc349d9632 100644 (file)
@@ -43,49 +43,49 @@ static int64 ec_DCtime;
 static ecx_portt ecx_port;
 static ec_mbxpoolt ec_mbxpool;
 
-static ecx_contextt  ctx = {
-   .port = &ecx_port,
-   .slavelist = &ec_slave[0],
-   .slavecount = &ec_slavecount,
-   .maxslave = EC_MAXSLAVE,
-   .grouplist = &ec_group[0],
-   .maxgroup = EC_MAXGROUP,
-   .esibuf = &ec_esibuf[0],
-   .esimap = &ec_esimap[0],
-   .esislave = 0,
-   .elist = &ec_elist,
-   .idxstack = &ec_idxstack,
-   .ecaterror = &EcatError,
-   .DCtime = &ec_DCtime,
-   .SMcommtype = &ec_SMcommtype[0],
-   .PDOassign = &ec_PDOassign[0],
-   .PDOdesc = &ec_PDOdesc[0],
-   .eepSM = &ec_SM,
-   .eepFMMU = &ec_FMMU,
-   .mbxpool = &ec_mbxpool,
-   .FOEhook = NULL,
-   .EOEhook = NULL,
-   .manualstatechange = 0,
-   .userdata = NULL,
+static ecx_contextt ctx = {
+    .port = &ecx_port,
+    .slavelist = &ec_slave[0],
+    .slavecount = &ec_slavecount,
+    .maxslave = EC_MAXSLAVE,
+    .grouplist = &ec_group[0],
+    .maxgroup = EC_MAXGROUP,
+    .esibuf = &ec_esibuf[0],
+    .esimap = &ec_esimap[0],
+    .esislave = 0,
+    .elist = &ec_elist,
+    .idxstack = &ec_idxstack,
+    .ecaterror = &EcatError,
+    .DCtime = &ec_DCtime,
+    .SMcommtype = &ec_SMcommtype[0],
+    .PDOassign = &ec_PDOassign[0],
+    .PDOdesc = &ec_PDOdesc[0],
+    .eepSM = &ec_SM,
+    .eepFMMU = &ec_FMMU,
+    .mbxpool = &ec_mbxpool,
+    .FOEhook = NULL,
+    .EOEhook = NULL,
+    .manualstatechange = 0,
+    .userdata = NULL,
 };
 
 void simpletest(char *ifname)
 {
-    int i, j, oloop, iloop, chk;
-    needlf = FALSE;
-    inOP = FALSE;
+   int i, j, oloop, iloop, chk;
+   needlf = FALSE;
+   inOP = FALSE;
 
    printf("Starting simple test\n");
 
    /* initialise SOEM, bind socket to ifname */
    if (ecx_init(&ctx, ifname))
    {
-      printf("ec_init on %s succeeded.\n",ifname);
+      printf("ec_init on %s succeeded.\n", ifname);
 
       /* find and auto-config slaves */
       if (ecx_config_init(&ctx, FALSE) > 0)
       {
-         printf("%d slaves found and configured.\n",ec_slavecount);
+         printf("%d slaves found and configured.\n", ec_slavecount);
 
          if (forceByteAlignment)
          {
@@ -100,7 +100,7 @@ void simpletest(char *ifname)
 
          printf("Slaves mapped, state to SAFE_OP.\n");
          /* wait for all slaves to reach SAFE_OP state */
-         ecx_statecheck(&ctx, 0, EC_STATE_SAFE_OP,  EC_TIMEOUTSTATE * 4);
+         ecx_statecheck(&ctx, 0, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE * 4);
 
          oloop = ec_slave[0].Obytes;
          if ((oloop == 0) && (ec_slave[0].Obits > 0)) oloop = 1;
@@ -109,7 +109,7 @@ void simpletest(char *ifname)
          if ((iloop == 0) && (ec_slave[0].Ibits > 0)) iloop = 1;
          if (iloop > 8) iloop = 8;
 
-         printf("segments : %d : %d %d %d %d\n",ec_group[0].nsegments ,ec_group[0].IOsegment[0],ec_group[0].IOsegment[1],ec_group[0].IOsegment[2],ec_group[0].IOsegment[3]);
+         printf("segments : %d : %d %d %d %d\n", ec_group[0].nsegments, ec_group[0].IOsegment[0], ec_group[0].IOsegment[1], ec_group[0].IOsegment[2], ec_group[0].IOsegment[3]);
 
          printf("Request operational state for all slaves\n");
          expectedWKC = (ec_group[0].outputsWKC * 2) + ec_group[0].inputsWKC;
@@ -127,156 +127,154 @@ void simpletest(char *ifname)
             ecx_send_processdata(&ctx);
             ecx_receive_processdata(&ctx, EC_TIMEOUTRET);
             ecx_statecheck(&ctx, 0, EC_STATE_OPERATIONAL, 50000);
-         }
-         while (chk-- && (ec_slave[0].state != EC_STATE_OPERATIONAL));
-         if (ec_slave[0].state == EC_STATE_OPERATIONAL )
+         } while (chk-- && (ec_slave[0].state != EC_STATE_OPERATIONAL));
+         if (ec_slave[0].state == EC_STATE_OPERATIONAL)
          {
             printf("Operational state reached for all slaves.\n");
             inOP = TRUE;
-                /* cyclic loop */
-            for(i = 1; i <= 10000; i++)
+            /* cyclic loop */
+            for (i = 1; i <= 10000; i++)
             {
                ecx_send_processdata(&ctx);
                wkc = ecx_receive_processdata(&ctx, EC_TIMEOUTRET);
 
-                    if(wkc >= expectedWKC)
-                    {
-                        printf("Processdata cycle %4d, WKC %d , O:", i, wkc);
-
-                        for(j = 0 ; j < oloop; j++)
-                        {
-                            printf(" %2.2x", *(ec_slave[0].outputs + j));
-                        }
+               if (wkc >= expectedWKC)
+               {
+                  printf("Processdata cycle %4d, WKC %d , O:", i, wkc);
 
-                        printf(" I:");
-                        for(j = 0 ; j < iloop; j++)
-                        {
-                            printf(" %2.2x", *(ec_slave[0].inputs + j));
-                        }
-                        printf(" T:%"PRId64"\r",ec_DCtime);
-                        needlf = TRUE;
-                    }
-                    osal_usleep(5000);
+                  for (j = 0; j < oloop; j++)
+                  {
+                     printf(" %2.2x", *(ec_slave[0].outputs + j));
+                  }
 
-                }
-                inOP = FALSE;
+                  printf(" I:");
+                  for (j = 0; j < iloop; j++)
+                  {
+                     printf(" %2.2x", *(ec_slave[0].inputs + j));
+                  }
+                  printf(" T:%" PRId64 "\r", ec_DCtime);
+                  needlf = TRUE;
+               }
+               osal_usleep(5000);
             }
-            else
+            inOP = FALSE;
+         }
+         else
+         {
+            printf("Not all slaves reached operational state.\n");
+            ecx_readstate(&ctx);
+            for (i = 1; i <= ec_slavecount; i++)
             {
-                printf("Not all slaves reached operational state.\n");
-                ecx_readstate(&ctx);
-                for(i = 1; i<=ec_slavecount ; i++)
-                {
-                    if(ec_slave[i].state != EC_STATE_OPERATIONAL)
-                    {
-                        printf("Slave %d State=0x%2.2x StatusCode=0x%4.4x : %s\n",
-                            i, ec_slave[i].state, ec_slave[i].ALstatuscode, ec_ALstatuscode2string(ec_slave[i].ALstatuscode));
-                    }
-                }
+               if (ec_slave[i].state != EC_STATE_OPERATIONAL)
+               {
+                  printf("Slave %d State=0x%2.2x StatusCode=0x%4.4x : %s\n",
+                         i, ec_slave[i].state, ec_slave[i].ALstatuscode, ec_ALstatuscode2string(ec_slave[i].ALstatuscode));
+               }
             }
-            printf("\nRequest init state for all slaves\n");
-            ec_slave[0].state = EC_STATE_INIT;
-            /* request INIT state for all slaves */
-            ecx_writestate(&ctx, 0);
-        }
-        else
-        {
-            printf("No slaves found!\n");
-        }
-        printf("End simple test, close socket\n");
-        /* stop SOEM, close socket */
-        ecx_close(&ctx);
-    }
-    else
-    {
-        printf("No socket connection on %s\nExecute as root\n",ifname);
-    }
+         }
+         printf("\nRequest init state for all slaves\n");
+         ec_slave[0].state = EC_STATE_INIT;
+         /* request INIT state for all slaves */
+         ecx_writestate(&ctx, 0);
+      }
+      else
+      {
+         printf("No slaves found!\n");
+      }
+      printf("End simple test, close socket\n");
+      /* stop SOEM, close socket */
+      ecx_close(&ctx);
+   }
+   else
+   {
+      printf("No socket connection on %s\nExecute as root\n", ifname);
+   }
 }
 
-OSAL_THREAD_FUNC ecatcheck( void *ptr )
+OSAL_THREAD_FUNC ecatcheck(void *ptr)
 {
-    int slave;
-    (void)ptr;                  /* Not used */
+   int slave;
+   (void)ptr; /* Not used */
 
-    while(1)
-    {
-        if( inOP && ((wkc < expectedWKC) || ec_group[currentgroup].docheckstate))
-        {
-           printf("check wkc=%d/%d docheckstate=%d!\n", wkc, expectedWKC, ec_group[currentgroup].docheckstate);
-            if (needlf)
-            {
-               needlf = FALSE;
-               printf("\n");
-            }
-            /* one ore more slaves are not responding */
-            ec_group[currentgroup].docheckstate = FALSE;
-            ecx_readstate(&ctx);
-            for (slave = 1; slave <= ec_slavecount; slave++)
+   while (1)
+   {
+      if (inOP && ((wkc < expectedWKC) || ec_group[currentgroup].docheckstate))
+      {
+         printf("check wkc=%d/%d docheckstate=%d!\n", wkc, expectedWKC, ec_group[currentgroup].docheckstate);
+         if (needlf)
+         {
+            needlf = FALSE;
+            printf("\n");
+         }
+         /* one ore more slaves are not responding */
+         ec_group[currentgroup].docheckstate = FALSE;
+         ecx_readstate(&ctx);
+         for (slave = 1; slave <= ec_slavecount; slave++)
+         {
+            if ((ec_slave[slave].group == currentgroup) && (ec_slave[slave].state != EC_STATE_OPERATIONAL))
             {
-               if ((ec_slave[slave].group == currentgroup) && (ec_slave[slave].state != EC_STATE_OPERATIONAL))
+               ec_group[currentgroup].docheckstate = TRUE;
+               if (ec_slave[slave].state == (EC_STATE_SAFE_OP + EC_STATE_ERROR))
                {
-                  ec_group[currentgroup].docheckstate = TRUE;
-                  if (ec_slave[slave].state == (EC_STATE_SAFE_OP + EC_STATE_ERROR))
-                  {
-                     printf("ERROR : slave %d is in SAFE_OP + ERROR, attempting ack.\n", slave);
-                     ec_slave[slave].state = (EC_STATE_SAFE_OP + EC_STATE_ACK);
-                     ecx_writestate(&ctx, slave);
-                  }
-                  else if(ec_slave[slave].state == EC_STATE_SAFE_OP)
-                  {
-                     printf("WARNING : slave %d is in SAFE_OP, change to OPERATIONAL.\n", slave);
-                     ec_slave[slave].state = EC_STATE_OPERATIONAL;
-                     if(ec_slave[slave].mbxhandlerstate == ECT_MBXH_LOST) ec_slave[slave].mbxhandlerstate = ECT_MBXH_CYCLIC;
-                     ecx_writestate(&ctx, slave);
-                  }
-                  else if(ec_slave[slave].state > EC_STATE_NONE)
-                  {
-                     if (ecx_reconfig_slave(&ctx, slave, EC_TIMEOUTMON) >= EC_STATE_PRE_OP)
-                     {
-                        ec_slave[slave].islost = FALSE;
-                        printf("MESSAGE : slave %d reconfigured\n",slave);
-                     }
-                  }
-                  else if(!ec_slave[slave].islost)
+                  printf("ERROR : slave %d is in SAFE_OP + ERROR, attempting ack.\n", slave);
+                  ec_slave[slave].state = (EC_STATE_SAFE_OP + EC_STATE_ACK);
+                  ecx_writestate(&ctx, slave);
+               }
+               else if (ec_slave[slave].state == EC_STATE_SAFE_OP)
+               {
+                  printf("WARNING : slave %d is in SAFE_OP, change to OPERATIONAL.\n", slave);
+                  ec_slave[slave].state = EC_STATE_OPERATIONAL;
+                  if (ec_slave[slave].mbxhandlerstate == ECT_MBXH_LOST) ec_slave[slave].mbxhandlerstate = ECT_MBXH_CYCLIC;
+                  ecx_writestate(&ctx, slave);
+               }
+               else if (ec_slave[slave].state > EC_STATE_NONE)
+               {
+                  if (ecx_reconfig_slave(&ctx, slave, EC_TIMEOUTMON) >= EC_STATE_PRE_OP)
                   {
-                     /* re-check state */
-                     ecx_statecheck(&ctx, slave, EC_STATE_OPERATIONAL, EC_TIMEOUTRET);
-                     if (ec_slave[slave].state == EC_STATE_NONE)
-                     {
-                        ec_slave[slave].islost = TRUE;
-                        ec_slave[slave].mbxhandlerstate = ECT_MBXH_LOST;
-                        /* zero input data for this slave */
-                        if(ec_slave[slave].Ibytes)
-                        {
-                           memset(ec_slave[slave].inputs, 0x00, ec_slave[slave].Ibytes);
-                           printf("zero inputs %p %d\n\r", ec_slave[slave].inputs, ec_slave[slave].Ibytes);
-                        }
-                        printf("ERROR : slave %d lost\n",slave);
-                     }
+                     ec_slave[slave].islost = FALSE;
+                     printf("MESSAGE : slave %d reconfigured\n", slave);
                   }
                }
-               if (ec_slave[slave].islost)
+               else if (!ec_slave[slave].islost)
                {
-                  if(ec_slave[slave].state <= EC_STATE_INIT)
+                  /* re-check state */
+                  ecx_statecheck(&ctx, slave, EC_STATE_OPERATIONAL, EC_TIMEOUTRET);
+                  if (ec_slave[slave].state == EC_STATE_NONE)
                   {
-                     if (ecx_recover_slave(&ctx, slave, EC_TIMEOUTMON))
+                     ec_slave[slave].islost = TRUE;
+                     ec_slave[slave].mbxhandlerstate = ECT_MBXH_LOST;
+                     /* zero input data for this slave */
+                     if (ec_slave[slave].Ibytes)
                      {
-                        ec_slave[slave].islost = FALSE;
-                        printf("MESSAGE : slave %d recovered\n",slave);
+                        memset(ec_slave[slave].inputs, 0x00, ec_slave[slave].Ibytes);
+                        printf("zero inputs %p %d\n\r", ec_slave[slave].inputs, ec_slave[slave].Ibytes);
                      }
+                     printf("ERROR : slave %d lost\n", slave);
                   }
-                  else
+               }
+            }
+            if (ec_slave[slave].islost)
+            {
+               if (ec_slave[slave].state <= EC_STATE_INIT)
+               {
+                  if (ecx_recover_slave(&ctx, slave, EC_TIMEOUTMON))
                   {
                      ec_slave[slave].islost = FALSE;
-                     printf("MESSAGE : slave %d found\n",slave);
+                     printf("MESSAGE : slave %d recovered\n", slave);
                   }
                }
+               else
+               {
+                  ec_slave[slave].islost = FALSE;
+                  printf("MESSAGE : slave %d found\n", slave);
+               }
             }
-            if(!ec_group[currentgroup].docheckstate)
-               printf("OK : all slaves resumed OPERATIONAL.\n");
-        }
-        osal_usleep(10000);
-    }
+         }
+         if (!ec_group[currentgroup].docheckstate)
+            printf("OK : all slaves resumed OPERATIONAL.\n");
+      }
+      osal_usleep(10000);
+   }
 }
 
 int main(int argc, char *argv[])
@@ -292,15 +290,15 @@ int main(int argc, char *argv[])
    }
    else
    {
-      ec_adaptert * adapter = NULL;
-      ec_adaptert * head = NULL;
+      ec_adaptert *adapter = NULL;
+      ec_adaptert *head = NULL;
       printf("Usage: simple_test ifname1\nifname = eth0 for example\n");
 
-      printf ("\nAvailable adapters:\n");
-      head = adapter = ec_find_adapters ();
+      printf("\nAvailable adapters:\n");
+      head = adapter = ec_find_adapters();
       while (adapter != NULL)
       {
-         printf ("    - %s  (%s)\n", adapter->name, adapter->desc);
+         printf("    - %s  (%s)\n", adapter->name, adapter->desc);
          adapter = adapter->next;
       }
       ec_free_adapters(head);
index 428ee5c871f188c704b6b90dae89f23216fe4d0c..d051f734a8add6262e13623183018ab95eab71c5 100644 (file)
@@ -42,161 +42,160 @@ static int64 ec_DCtime;
 static ecx_portt ecx_port;
 static ec_mbxpoolt ec_mbxpool;
 
-static ecx_contextt  ctx = {
-   .port = &ecx_port,
-   .slavelist = &ec_slave[0],
-   .slavecount = &ec_slavecount,
-   .maxslave = EC_MAXSLAVE,
-   .grouplist = &ec_group[0],
-   .maxgroup = EC_MAXGROUP,
-   .esibuf = &ec_esibuf[0],
-   .esimap = &ec_esimap[0],
-   .esislave = 0,
-   .elist = &ec_elist,
-   .idxstack = &ec_idxstack,
-   .ecaterror = &EcatError,
-   .DCtime = &ec_DCtime,
-   .SMcommtype = &ec_SMcommtype[0],
-   .PDOassign = &ec_PDOassign[0],
-   .PDOdesc = &ec_PDOdesc[0],
-   .eepSM = &ec_SM,
-   .eepFMMU = &ec_FMMU,
-   .mbxpool = &ec_mbxpool,
-   .FOEhook = NULL,
-   .EOEhook = NULL,
-   .manualstatechange = 0,
-   .userdata = NULL,
+static ecx_contextt ctx = {
+    .port = &ecx_port,
+    .slavelist = &ec_slave[0],
+    .slavecount = &ec_slavecount,
+    .maxslave = EC_MAXSLAVE,
+    .grouplist = &ec_group[0],
+    .maxgroup = EC_MAXGROUP,
+    .esibuf = &ec_esibuf[0],
+    .esimap = &ec_esimap[0],
+    .esislave = 0,
+    .elist = &ec_elist,
+    .idxstack = &ec_idxstack,
+    .ecaterror = &EcatError,
+    .DCtime = &ec_DCtime,
+    .SMcommtype = &ec_SMcommtype[0],
+    .PDOassign = &ec_PDOassign[0],
+    .PDOdesc = &ec_PDOdesc[0],
+    .eepSM = &ec_SM,
+    .eepFMMU = &ec_FMMU,
+    .mbxpool = &ec_mbxpool,
+    .FOEhook = NULL,
+    .EOEhook = NULL,
+    .manualstatechange = 0,
+    .userdata = NULL,
 };
 
-#define OTYPE_VAR               0x0007
-#define OTYPE_ARRAY             0x0008
-#define OTYPE_RECORD            0x0009
+#define OTYPE_VAR    0x0007
+#define OTYPE_ARRAY  0x0008
+#define OTYPE_RECORD 0x0009
 
-#define ATYPE_Rpre              0x01
-#define ATYPE_Rsafe             0x02
-#define ATYPE_Rop               0x04
-#define ATYPE_Wpre              0x08
-#define ATYPE_Wsafe             0x10
-#define ATYPE_Wop               0x20
+#define ATYPE_Rpre   0x01
+#define ATYPE_Rsafe  0x02
+#define ATYPE_Rop    0x04
+#define ATYPE_Wpre   0x08
+#define ATYPE_Wsafe  0x10
+#define ATYPE_Wop    0x20
 
-
-char* dtype2string(uint16 dtype, uint16 bitlen)
+char *dtype2string(uint16 dtype, uint16 bitlen)
 {
-    static char str[32] = { 0 };
-
-    switch(dtype)
-    {
-        case ECT_BOOLEAN:
-            sprintf(str, "BOOLEAN");
-            break;
-        case ECT_INTEGER8:
-            sprintf(str, "INTEGER8");
-            break;
-        case ECT_INTEGER16:
-            sprintf(str, "INTEGER16");
-            break;
-        case ECT_INTEGER32:
-            sprintf(str, "INTEGER32");
-            break;
-        case ECT_INTEGER24:
-            sprintf(str, "INTEGER24");
-            break;
-        case ECT_INTEGER64:
-            sprintf(str, "INTEGER64");
-            break;
-        case ECT_UNSIGNED8:
-            sprintf(str, "UNSIGNED8");
-            break;
-        case ECT_UNSIGNED16:
-            sprintf(str, "UNSIGNED16");
-            break;
-        case ECT_UNSIGNED32:
-            sprintf(str, "UNSIGNED32");
-            break;
-        case ECT_UNSIGNED24:
-            sprintf(str, "UNSIGNED24");
-            break;
-        case ECT_UNSIGNED64:
-            sprintf(str, "UNSIGNED64");
-            break;
-        case ECT_REAL32:
-            sprintf(str, "REAL32");
-            break;
-        case ECT_REAL64:
-            sprintf(str, "REAL64");
-            break;
-        case ECT_BIT1:
-            sprintf(str, "BIT1");
-            break;
-        case ECT_BIT2:
-            sprintf(str, "BIT2");
-            break;
-        case ECT_BIT3:
-            sprintf(str, "BIT3");
-            break;
-        case ECT_BIT4:
-            sprintf(str, "BIT4");
-            break;
-        case ECT_BIT5:
-            sprintf(str, "BIT5");
-            break;
-        case ECT_BIT6:
-            sprintf(str, "BIT6");
-            break;
-        case ECT_BIT7:
-            sprintf(str, "BIT7");
-            break;
-        case ECT_BIT8:
-            sprintf(str, "BIT8");
-            break;
-        case ECT_VISIBLE_STRING:
-            sprintf(str, "VISIBLE_STR(%d)", bitlen);
-            break;
-        case ECT_OCTET_STRING:
-            sprintf(str, "OCTET_STR(%d)", bitlen);
-            break;
-        default:
-            sprintf(str, "dt:0x%4.4X (%d)", dtype, bitlen);
-    }
-    return str;
+   static char str[32] = {0};
+
+   switch (dtype)
+   {
+   case ECT_BOOLEAN:
+      sprintf(str, "BOOLEAN");
+      break;
+   case ECT_INTEGER8:
+      sprintf(str, "INTEGER8");
+      break;
+   case ECT_INTEGER16:
+      sprintf(str, "INTEGER16");
+      break;
+   case ECT_INTEGER32:
+      sprintf(str, "INTEGER32");
+      break;
+   case ECT_INTEGER24:
+      sprintf(str, "INTEGER24");
+      break;
+   case ECT_INTEGER64:
+      sprintf(str, "INTEGER64");
+      break;
+   case ECT_UNSIGNED8:
+      sprintf(str, "UNSIGNED8");
+      break;
+   case ECT_UNSIGNED16:
+      sprintf(str, "UNSIGNED16");
+      break;
+   case ECT_UNSIGNED32:
+      sprintf(str, "UNSIGNED32");
+      break;
+   case ECT_UNSIGNED24:
+      sprintf(str, "UNSIGNED24");
+      break;
+   case ECT_UNSIGNED64:
+      sprintf(str, "UNSIGNED64");
+      break;
+   case ECT_REAL32:
+      sprintf(str, "REAL32");
+      break;
+   case ECT_REAL64:
+      sprintf(str, "REAL64");
+      break;
+   case ECT_BIT1:
+      sprintf(str, "BIT1");
+      break;
+   case ECT_BIT2:
+      sprintf(str, "BIT2");
+      break;
+   case ECT_BIT3:
+      sprintf(str, "BIT3");
+      break;
+   case ECT_BIT4:
+      sprintf(str, "BIT4");
+      break;
+   case ECT_BIT5:
+      sprintf(str, "BIT5");
+      break;
+   case ECT_BIT6:
+      sprintf(str, "BIT6");
+      break;
+   case ECT_BIT7:
+      sprintf(str, "BIT7");
+      break;
+   case ECT_BIT8:
+      sprintf(str, "BIT8");
+      break;
+   case ECT_VISIBLE_STRING:
+      sprintf(str, "VISIBLE_STR(%d)", bitlen);
+      break;
+   case ECT_OCTET_STRING:
+      sprintf(str, "OCTET_STR(%d)", bitlen);
+      break;
+   default:
+      sprintf(str, "dt:0x%4.4X (%d)", dtype, bitlen);
+   }
+   return str;
 }
 
-charotype2string(uint16 otype)
+char *otype2string(uint16 otype)
 {
-    static char str[32] = { 0 };
-
-    switch(otype)
-    {
-        case OTYPE_VAR:
-            sprintf(str, "VAR");
-            break;
-        case OTYPE_ARRAY:
-            sprintf(str, "ARRAY");
-            break;
-        case OTYPE_RECORD:
-            sprintf(str, "RECORD");
-            break;
-        default:
-            sprintf(str, "ot:0x%4.4X", otype);
-    }
-    return str;
+   static char str[32] = {0};
+
+   switch (otype)
+   {
+   case OTYPE_VAR:
+      sprintf(str, "VAR");
+      break;
+   case OTYPE_ARRAY:
+      sprintf(str, "ARRAY");
+      break;
+   case OTYPE_RECORD:
+      sprintf(str, "RECORD");
+      break;
+   default:
+      sprintf(str, "ot:0x%4.4X", otype);
+   }
+   return str;
 }
 
-characcess2string(uint16 access)
+char *access2string(uint16 access)
 {
-    static char str[32] = { 0 };
-
-    sprintf(str, "%s%s%s%s%s%s",
-            ((access & ATYPE_Rpre) != 0 ? "R" : "_"),
-            ((access & ATYPE_Wpre) != 0 ? "W" : "_"),
-            ((access & ATYPE_Rsafe) != 0 ? "R" : "_"),
-            ((access & ATYPE_Wsafe) != 0 ? "W" : "_"),
-            ((access & ATYPE_Rop) != 0 ? "R" : "_"),
-            ((access & ATYPE_Wop) != 0 ? "W" : "_"));
-    return str;
+   static char str[32] = {0};
+
+   sprintf(str, "%s%s%s%s%s%s",
+           ((access & ATYPE_Rpre) != 0 ? "R" : "_"),
+           ((access & ATYPE_Wpre) != 0 ? "W" : "_"),
+           ((access & ATYPE_Rsafe) != 0 ? "R" : "_"),
+           ((access & ATYPE_Wsafe) != 0 ? "W" : "_"),
+           ((access & ATYPE_Rop) != 0 ? "R" : "_"),
+           ((access & ATYPE_Wop) != 0 ? "W" : "_"));
+   return str;
 }
 
-charSDO2string(uint16 slave, uint16 index, uint8 subidx, uint16 dtype)
+char *SDO2string(uint16 slave, uint16 index, uint8 subidx, uint16 dtype)
 {
    int l = sizeof(usdo) - 1, i;
    uint8 *u8;
@@ -219,82 +218,84 @@ char* SDO2string(uint16 slave, uint16 index, uint8 subidx, uint16 dtype)
    }
    else
    {
-      static char str[64] = { 0 };
-      switch(dtype)
+      static char str[64] = {0};
+      switch (dtype)
       {
-         case ECT_BOOLEAN:
-            u8 = (uint8*) &usdo[0];
-            if (*u8) sprintf(str, "TRUE");
-            else sprintf(str, "FALSE");
-            break;
-         case ECT_INTEGER8:
-            i8 = (int8*) &usdo[0];
-            sprintf(str, "0x%2.2x / %d", *i8, *i8);
-            break;
-         case ECT_INTEGER16:
-            i16 = (int16*) &usdo[0];
-            sprintf(str, "0x%4.4x / %d", *i16, *i16);
-            break;
-         case ECT_INTEGER32:
-         case ECT_INTEGER24:
-            i32 = (int32*) &usdo[0];
-            sprintf(str, "0x%8.8x / %d", *i32, *i32);
-            break;
-         case ECT_INTEGER64:
-            i64 = (int64*) &usdo[0];
-            sprintf(str, "0x%16.16"PRIx64" / %"PRId64, *i64, *i64);
-            break;
-         case ECT_UNSIGNED8:
-            u8 = (uint8*) &usdo[0];
-            sprintf(str, "0x%2.2x / %u", *u8, *u8);
-            break;
-         case ECT_UNSIGNED16:
-            u16 = (uint16*) &usdo[0];
-            sprintf(str, "0x%4.4x / %u", *u16, *u16);
-            break;
-         case ECT_UNSIGNED32:
-         case ECT_UNSIGNED24:
-            u32 = (uint32*) &usdo[0];
-            sprintf(str, "0x%8.8x / %u", *u32, *u32);
-            break;
-         case ECT_UNSIGNED64:
-            u64 = (uint64*) &usdo[0];
-            sprintf(str, "0x%16.16"PRIx64" / %"PRIu64, *u64, *u64);
-            break;
-         case ECT_REAL32:
-            sr = (float*) &usdo[0];
-            sprintf(str, "%f", *sr);
-            break;
-         case ECT_REAL64:
-            dr = (double*) &usdo[0];
-            sprintf(str, "%f", *dr);
-            break;
-         case ECT_BIT1:
-         case ECT_BIT2:
-         case ECT_BIT3:
-         case ECT_BIT4:
-         case ECT_BIT5:
-         case ECT_BIT6:
-         case ECT_BIT7:
-         case ECT_BIT8:
-            u8 = (uint8*) &usdo[0];
-            sprintf(str, "0x%x / %u", *u8, *u8);
-            break;
-         case ECT_VISIBLE_STRING:
-            strcpy(str, "\"");
-            strcat(str, usdo);
-            strcat(str, "\"");
-            break;
-         case ECT_OCTET_STRING:
-            str[0] = 0x00;
-            for (i = 0 ; i < l ; i++)
-            {
-               sprintf(es, "0x%2.2x ", usdo[i]);
-               strcat( str, es);
-            }
-            break;
-         default:
-            sprintf(str, "Unknown type");
+      case ECT_BOOLEAN:
+         u8 = (uint8 *)&usdo[0];
+         if (*u8)
+            sprintf(str, "TRUE");
+         else
+            sprintf(str, "FALSE");
+         break;
+      case ECT_INTEGER8:
+         i8 = (int8 *)&usdo[0];
+         sprintf(str, "0x%2.2x / %d", *i8, *i8);
+         break;
+      case ECT_INTEGER16:
+         i16 = (int16 *)&usdo[0];
+         sprintf(str, "0x%4.4x / %d", *i16, *i16);
+         break;
+      case ECT_INTEGER32:
+      case ECT_INTEGER24:
+         i32 = (int32 *)&usdo[0];
+         sprintf(str, "0x%8.8x / %d", *i32, *i32);
+         break;
+      case ECT_INTEGER64:
+         i64 = (int64 *)&usdo[0];
+         sprintf(str, "0x%16.16" PRIx64 " / %" PRId64, *i64, *i64);
+         break;
+      case ECT_UNSIGNED8:
+         u8 = (uint8 *)&usdo[0];
+         sprintf(str, "0x%2.2x / %u", *u8, *u8);
+         break;
+      case ECT_UNSIGNED16:
+         u16 = (uint16 *)&usdo[0];
+         sprintf(str, "0x%4.4x / %u", *u16, *u16);
+         break;
+      case ECT_UNSIGNED32:
+      case ECT_UNSIGNED24:
+         u32 = (uint32 *)&usdo[0];
+         sprintf(str, "0x%8.8x / %u", *u32, *u32);
+         break;
+      case ECT_UNSIGNED64:
+         u64 = (uint64 *)&usdo[0];
+         sprintf(str, "0x%16.16" PRIx64 " / %" PRIu64, *u64, *u64);
+         break;
+      case ECT_REAL32:
+         sr = (float *)&usdo[0];
+         sprintf(str, "%f", *sr);
+         break;
+      case ECT_REAL64:
+         dr = (double *)&usdo[0];
+         sprintf(str, "%f", *dr);
+         break;
+      case ECT_BIT1:
+      case ECT_BIT2:
+      case ECT_BIT3:
+      case ECT_BIT4:
+      case ECT_BIT5:
+      case ECT_BIT6:
+      case ECT_BIT7:
+      case ECT_BIT8:
+         u8 = (uint8 *)&usdo[0];
+         sprintf(str, "0x%x / %u", *u8, *u8);
+         break;
+      case ECT_VISIBLE_STRING:
+         strcpy(str, "\"");
+         strcat(str, usdo);
+         strcat(str, "\"");
+         break;
+      case ECT_OCTET_STRING:
+         str[0] = 0x00;
+         for (i = 0; i < l; i++)
+         {
+            sprintf(es, "0x%2.2x ", usdo[i]);
+            strcat(str, es);
+         }
+         break;
+      default:
+         sprintf(str, "Unknown type");
       }
       return str;
    }
@@ -303,340 +304,349 @@ char* SDO2string(uint16 slave, uint16 index, uint8 subidx, uint16 dtype)
 /** Read PDO assign structure */
 int si_PDOassign(uint16 slave, uint16 PDOassign, int mapoffset, int bitoffset)
 {
-    uint16 idxloop, nidx, subidxloop, rdat, idx, subidx;
-    uint8 subcnt;
-    int wkc, bsize = 0, rdl;
-    int32 rdat2;
-    uint8 bitlen, obj_subidx;
-    uint16 obj_idx;
-    int abs_offset, abs_bit;
-
-    rdl = sizeof(rdat); rdat = 0;
-    /* read PDO assign subindex 0 ( = number of PDO's) */
-    wkc = ecx_SDOread(&ctx, slave, PDOassign, 0x00, FALSE, &rdl, &rdat, EC_TIMEOUTRXM);
-    rdat = etohs(rdat);
-    /* positive result from slave ? */
-    if ((wkc > 0) && (rdat > 0))
-    {
-        /* number of available sub indexes */
-        nidx = rdat;
-        bsize = 0;
-        /* read all PDO's */
-        for (idxloop = 1; idxloop <= nidx; idxloop++)
-        {
-            rdl = sizeof(rdat); rdat = 0;
-            /* read PDO assign */
-            wkc = ecx_SDOread(&ctx, slave, PDOassign, (uint8)idxloop, FALSE, &rdl, &rdat, EC_TIMEOUTRXM);
-            /* result is index of PDO */
-            idx = etohs(rdat);
-            if (idx > 0)
+   uint16 idxloop, nidx, subidxloop, rdat, idx, subidx;
+   uint8 subcnt;
+   int wkc, bsize = 0, rdl;
+   int32 rdat2;
+   uint8 bitlen, obj_subidx;
+   uint16 obj_idx;
+   int abs_offset, abs_bit;
+
+   rdl = sizeof(rdat);
+   rdat = 0;
+   /* read PDO assign subindex 0 ( = number of PDO's) */
+   wkc = ecx_SDOread(&ctx, slave, PDOassign, 0x00, FALSE, &rdl, &rdat, EC_TIMEOUTRXM);
+   rdat = etohs(rdat);
+   /* positive result from slave ? */
+   if ((wkc > 0) && (rdat > 0))
+   {
+      /* number of available sub indexes */
+      nidx = rdat;
+      bsize = 0;
+      /* read all PDO's */
+      for (idxloop = 1; idxloop <= nidx; idxloop++)
+      {
+         rdl = sizeof(rdat);
+         rdat = 0;
+         /* read PDO assign */
+         wkc = ecx_SDOread(&ctx, slave, PDOassign, (uint8)idxloop, FALSE, &rdl, &rdat, EC_TIMEOUTRXM);
+         /* result is index of PDO */
+         idx = etohs(rdat);
+         if (idx > 0)
+         {
+            rdl = sizeof(subcnt);
+            subcnt = 0;
+            /* read number of subindexes of PDO */
+            wkc = ecx_SDOread(&ctx, slave, idx, 0x00, FALSE, &rdl, &subcnt, EC_TIMEOUTRXM);
+            subidx = subcnt;
+            /* for each subindex */
+            for (subidxloop = 1; subidxloop <= subidx; subidxloop++)
             {
-                rdl = sizeof(subcnt); subcnt = 0;
-                /* read number of subindexes of PDO */
-                wkc = ecx_SDOread(&ctx, slave,idx, 0x00, FALSE, &rdl, &subcnt, EC_TIMEOUTRXM);
-                subidx = subcnt;
-                /* for each subindex */
-                for (subidxloop = 1; subidxloop <= subidx; subidxloop++)
-                {
-                    rdl = sizeof(rdat2); rdat2 = 0;
-                    /* read SDO that is mapped in PDO */
-                    wkc = ecx_SDOread(&ctx, slave, idx, (uint8)subidxloop, FALSE, &rdl, &rdat2, EC_TIMEOUTRXM);
-                    rdat2 = etohl(rdat2);
-                    /* extract bitlength of SDO */
-                    bitlen = LO_BYTE(rdat2);
-                    bsize += bitlen;
-                    obj_idx = (uint16)(rdat2 >> 16);
-                    obj_subidx = (uint8)((rdat2 >> 8) & 0x000000ff);
-                    abs_offset = mapoffset + (bitoffset / 8);
-                    abs_bit = bitoffset % 8;
-                    ODlist.Slave = slave;
-                    ODlist.Index[0] = obj_idx;
-                    OElist.Entries = 0;
-                    wkc = 0;
-                    /* read object entry from dictionary if not a filler (0x0000:0x00) */
-                    if(obj_idx || obj_subidx)
-                       wkc = ecx_readOEsingle(&ctx, 0, obj_subidx, &ODlist, &OElist);
-                    printf("  [0x%4.4X.%1d] 0x%4.4X:0x%2.2X 0x%2.2X", abs_offset, abs_bit, obj_idx, obj_subidx, bitlen);
-                    if((wkc > 0) && OElist.Entries)
-                    {
-                        printf(" %-12s %s\n", dtype2string(OElist.DataType[obj_subidx], bitlen), OElist.Name[obj_subidx]);
-                    }
-                    else
-                        printf("\n");
-                    bitoffset += bitlen;
-                };
+               rdl = sizeof(rdat2);
+               rdat2 = 0;
+               /* read SDO that is mapped in PDO */
+               wkc = ecx_SDOread(&ctx, slave, idx, (uint8)subidxloop, FALSE, &rdl, &rdat2, EC_TIMEOUTRXM);
+               rdat2 = etohl(rdat2);
+               /* extract bitlength of SDO */
+               bitlen = LO_BYTE(rdat2);
+               bsize += bitlen;
+               obj_idx = (uint16)(rdat2 >> 16);
+               obj_subidx = (uint8)((rdat2 >> 8) & 0x000000ff);
+               abs_offset = mapoffset + (bitoffset / 8);
+               abs_bit = bitoffset % 8;
+               ODlist.Slave = slave;
+               ODlist.Index[0] = obj_idx;
+               OElist.Entries = 0;
+               wkc = 0;
+               /* read object entry from dictionary if not a filler (0x0000:0x00) */
+               if (obj_idx || obj_subidx)
+                  wkc = ecx_readOEsingle(&ctx, 0, obj_subidx, &ODlist, &OElist);
+               printf("  [0x%4.4X.%1d] 0x%4.4X:0x%2.2X 0x%2.2X", abs_offset, abs_bit, obj_idx, obj_subidx, bitlen);
+               if ((wkc > 0) && OElist.Entries)
+               {
+                  printf(" %-12s %s\n", dtype2string(OElist.DataType[obj_subidx], bitlen), OElist.Name[obj_subidx]);
+               }
+               else
+                  printf("\n");
+               bitoffset += bitlen;
             };
-        };
-    };
-    /* return total found bitlength (PDO) */
-    return bsize;
+         };
+      };
+   };
+   /* return total found bitlength (PDO) */
+   return bsize;
 }
 
 int si_map_sdo(int slave)
 {
-    int wkc, rdl;
-    int retVal = 0;
-    uint8 nSM, iSM, tSM;
-    int Tsize, outputs_bo, inputs_bo;
-    uint8 SMt_bug_add;
-
-    printf("PDO mapping according to CoE :\n");
-    SMt_bug_add = 0;
-    outputs_bo = 0;
-    inputs_bo = 0;
-    rdl = sizeof(nSM); nSM = 0;
-    /* read SyncManager Communication Type object count */
-    wkc = ecx_SDOread(&ctx, slave, ECT_SDO_SMCOMMTYPE, 0x00, FALSE, &rdl, &nSM, EC_TIMEOUTRXM);
-    /* positive result from slave ? */
-    if ((wkc > 0) && (nSM > 2))
-    {
-        /* make nSM equal to number of defined SM */
-        nSM--;
-        /* limit to maximum number of SM defined, if true the slave can't be configured */
-        if (nSM > EC_MAXSM)
-            nSM = EC_MAXSM;
-        /* iterate for every SM type defined */
-        for (iSM = 2 ; iSM <= nSM ; iSM++)
-        {
-            rdl = sizeof(tSM); tSM = 0;
-            /* read SyncManager Communication Type */
-            wkc = ecx_SDOread(&ctx, slave, ECT_SDO_SMCOMMTYPE, iSM + 1, FALSE, &rdl, &tSM, EC_TIMEOUTRXM);
-            if (wkc > 0)
+   int wkc, rdl;
+   int retVal = 0;
+   uint8 nSM, iSM, tSM;
+   int Tsize, outputs_bo, inputs_bo;
+   uint8 SMt_bug_add;
+
+   printf("PDO mapping according to CoE :\n");
+   SMt_bug_add = 0;
+   outputs_bo = 0;
+   inputs_bo = 0;
+   rdl = sizeof(nSM);
+   nSM = 0;
+   /* read SyncManager Communication Type object count */
+   wkc = ecx_SDOread(&ctx, slave, ECT_SDO_SMCOMMTYPE, 0x00, FALSE, &rdl, &nSM, EC_TIMEOUTRXM);
+   /* positive result from slave ? */
+   if ((wkc > 0) && (nSM > 2))
+   {
+      /* make nSM equal to number of defined SM */
+      nSM--;
+      /* limit to maximum number of SM defined, if true the slave can't be configured */
+      if (nSM > EC_MAXSM)
+         nSM = EC_MAXSM;
+      /* iterate for every SM type defined */
+      for (iSM = 2; iSM <= nSM; iSM++)
+      {
+         rdl = sizeof(tSM);
+         tSM = 0;
+         /* read SyncManager Communication Type */
+         wkc = ecx_SDOread(&ctx, slave, ECT_SDO_SMCOMMTYPE, iSM + 1, FALSE, &rdl, &tSM, EC_TIMEOUTRXM);
+         if (wkc > 0)
+         {
+            if ((iSM == 2) && (tSM == 2)) // SM2 has type 2 == mailbox out, this is a bug in the slave!
             {
-                if((iSM == 2) && (tSM == 2)) // SM2 has type 2 == mailbox out, this is a bug in the slave!
-                {
-                    SMt_bug_add = 1; // try to correct, this works if the types are 0 1 2 3 and should be 1 2 3 4
-                    printf("Activated SM type workaround, possible incorrect mapping.\n");
-                }
-                if(tSM)
-                    tSM += SMt_bug_add; // only add if SMt > 0
-
-                if (tSM == 3) // outputs
-                {
-                    /* read the assign RXPDO */
-                    printf("  SM%1d outputs\n     addr b   index: sub bitl data_type    name\n", iSM);
-                    Tsize = si_PDOassign(slave, ECT_SDO_PDOASSIGN + iSM, (int)(ec_slave[slave].outputs - (uint8 *)&IOmap[0]), outputs_bo );
-                    outputs_bo += Tsize;
-                }
-                if (tSM == 4) // inputs
-                {
-                    /* read the assign TXPDO */
-                    printf("  SM%1d inputs\n     addr b   index: sub bitl data_type    name\n", iSM);
-                    Tsize = si_PDOassign(slave, ECT_SDO_PDOASSIGN + iSM, (int)(ec_slave[slave].inputs - (uint8 *)&IOmap[0]), inputs_bo );
-                    inputs_bo += Tsize;
-                }
+               SMt_bug_add = 1; // try to correct, this works if the types are 0 1 2 3 and should be 1 2 3 4
+               printf("Activated SM type workaround, possible incorrect mapping.\n");
             }
-        }
-    }
+            if (tSM)
+               tSM += SMt_bug_add; // only add if SMt > 0
 
-    /* found some I/O bits ? */
-    if ((outputs_bo > 0) || (inputs_bo > 0))
-        retVal = 1;
-    return retVal;
+            if (tSM == 3) // outputs
+            {
+               /* read the assign RXPDO */
+               printf("  SM%1d outputs\n     addr b   index: sub bitl data_type    name\n", iSM);
+               Tsize = si_PDOassign(slave, ECT_SDO_PDOASSIGN + iSM, (int)(ec_slave[slave].outputs - (uint8 *)&IOmap[0]), outputs_bo);
+               outputs_bo += Tsize;
+            }
+            if (tSM == 4) // inputs
+            {
+               /* read the assign TXPDO */
+               printf("  SM%1d inputs\n     addr b   index: sub bitl data_type    name\n", iSM);
+               Tsize = si_PDOassign(slave, ECT_SDO_PDOASSIGN + iSM, (int)(ec_slave[slave].inputs - (uint8 *)&IOmap[0]), inputs_bo);
+               inputs_bo += Tsize;
+            }
+         }
+      }
+   }
+
+   /* found some I/O bits ? */
+   if ((outputs_bo > 0) || (inputs_bo > 0))
+      retVal = 1;
+   return retVal;
 }
 
 int si_siiPDO(uint16 slave, uint8 t, int mapoffset, int bitoffset)
 {
-    uint16 a , w, c, e, er;
-    uint8 eectl;
-    uint16 obj_idx;
-    uint8 obj_subidx;
-    uint8 obj_name;
-    uint8 obj_datatype;
-    uint8 bitlen;
-    int totalsize;
-    ec_eepromPDOt eepPDO;
-    ec_eepromPDOt *PDO;
-    int abs_offset, abs_bit;
-    char str_name[EC_MAXNAME + 1];
-
-    eectl = ec_slave[slave].eep_pdi;
-
-    totalsize = 0;
-    PDO = &eepPDO;
-    PDO->nPDO = 0;
-    PDO->Length = 0;
-    PDO->Index[1] = 0;
-    for (c = 0 ; c < EC_MAXSM ; c++) PDO->SMbitsize[c] = 0;
-    if (t > 1)
-        t = 1;
-    PDO->Startpos = ecx_siifind(&ctx, slave, ECT_SII_PDO + t);
-    if (PDO->Startpos > 0)
-    {
-        a = PDO->Startpos;
-        w = ecx_siigetbyte(&ctx, slave, a++);
-        w += (ecx_siigetbyte(&ctx, slave, a++) << 8);
-        PDO->Length = w;
-        c = 1;
-        /* traverse through all PDOs */
-        do
-        {
-            PDO->nPDO++;
-            PDO->Index[PDO->nPDO] = ecx_siigetbyte(&ctx, slave, a++);
-            PDO->Index[PDO->nPDO] += (ecx_siigetbyte(&ctx, slave, a++) << 8);
-            PDO->BitSize[PDO->nPDO] = 0;
-            c++;
-            /* number of entries in PDO */
-            e = ecx_siigetbyte(&ctx, slave, a++);
-            PDO->SyncM[PDO->nPDO] = ecx_siigetbyte(&ctx, slave, a++);
-            a++;
-            obj_name = ecx_siigetbyte(&ctx, slave, a++);
-            a += 2;
-            c += 2;
-            if (PDO->SyncM[PDO->nPDO] < EC_MAXSM) /* active and in range SM? */
-            {
-                str_name[0] = 0;
-                if(obj_name)
-                  ecx_siistring(&ctx, str_name, slave, obj_name);
-                if (t)
-                  printf("  SM%1d RXPDO 0x%4.4X %s\n", PDO->SyncM[PDO->nPDO], PDO->Index[PDO->nPDO], str_name);
-                else
-                  printf("  SM%1d TXPDO 0x%4.4X %s\n", PDO->SyncM[PDO->nPDO], PDO->Index[PDO->nPDO], str_name);
-                printf("     addr b   index: sub bitl data_type    name\n");
-                /* read all entries defined in PDO */
-                for (er = 1; er <= e; er++)
-                {
-                    c += 4;
-                    obj_idx = ecx_siigetbyte(&ctx, slave, a++);
-                    obj_idx += (ecx_siigetbyte(&ctx, slave, a++) << 8);
-                    obj_subidx = ecx_siigetbyte(&ctx, slave, a++);
-                    obj_name = ecx_siigetbyte(&ctx, slave, a++);
-                    obj_datatype = ecx_siigetbyte(&ctx, slave, a++);
-                    bitlen = ecx_siigetbyte(&ctx, slave, a++);
-                    abs_offset = mapoffset + (bitoffset / 8);
-                    abs_bit = bitoffset % 8;
-
-                    PDO->BitSize[PDO->nPDO] += bitlen;
-                    a += 2;
-
-                    /* skip entry if filler (0x0000:0x00) */
-                    if(obj_idx || obj_subidx)
-                    {
-                       str_name[0] = 0;
-                       if(obj_name)
-                          ecx_siistring(&ctx, str_name, slave, obj_name);
-
-                       printf("  [0x%4.4X.%1d] 0x%4.4X:0x%2.2X 0x%2.2X", abs_offset, abs_bit, obj_idx, obj_subidx, bitlen);
-                       printf(" %-12s %s\n", dtype2string(obj_datatype, bitlen), str_name);
-                    }
-                    bitoffset += bitlen;
-                    totalsize += bitlen;
-                }
-                PDO->SMbitsize[ PDO->SyncM[PDO->nPDO] ] += PDO->BitSize[PDO->nPDO];
-                c++;
-            }
-            else /* PDO deactivated because SM is 0xff or > EC_MAXSM */
+   uint16 a, w, c, e, er;
+   uint8 eectl;
+   uint16 obj_idx;
+   uint8 obj_subidx;
+   uint8 obj_name;
+   uint8 obj_datatype;
+   uint8 bitlen;
+   int totalsize;
+   ec_eepromPDOt eepPDO;
+   ec_eepromPDOt *PDO;
+   int abs_offset, abs_bit;
+   char str_name[EC_MAXNAME + 1];
+
+   eectl = ec_slave[slave].eep_pdi;
+
+   totalsize = 0;
+   PDO = &eepPDO;
+   PDO->nPDO = 0;
+   PDO->Length = 0;
+   PDO->Index[1] = 0;
+   for (c = 0; c < EC_MAXSM; c++)
+      PDO->SMbitsize[c] = 0;
+   if (t > 1)
+      t = 1;
+   PDO->Startpos = ecx_siifind(&ctx, slave, ECT_SII_PDO + t);
+   if (PDO->Startpos > 0)
+   {
+      a = PDO->Startpos;
+      w = ecx_siigetbyte(&ctx, slave, a++);
+      w += (ecx_siigetbyte(&ctx, slave, a++) << 8);
+      PDO->Length = w;
+      c = 1;
+      /* traverse through all PDOs */
+      do
+      {
+         PDO->nPDO++;
+         PDO->Index[PDO->nPDO] = ecx_siigetbyte(&ctx, slave, a++);
+         PDO->Index[PDO->nPDO] += (ecx_siigetbyte(&ctx, slave, a++) << 8);
+         PDO->BitSize[PDO->nPDO] = 0;
+         c++;
+         /* number of entries in PDO */
+         e = ecx_siigetbyte(&ctx, slave, a++);
+         PDO->SyncM[PDO->nPDO] = ecx_siigetbyte(&ctx, slave, a++);
+         a++;
+         obj_name = ecx_siigetbyte(&ctx, slave, a++);
+         a += 2;
+         c += 2;
+         if (PDO->SyncM[PDO->nPDO] < EC_MAXSM) /* active and in range SM? */
+         {
+            str_name[0] = 0;
+            if (obj_name)
+               ecx_siistring(&ctx, str_name, slave, obj_name);
+            if (t)
+               printf("  SM%1d RXPDO 0x%4.4X %s\n", PDO->SyncM[PDO->nPDO], PDO->Index[PDO->nPDO], str_name);
+            else
+               printf("  SM%1d TXPDO 0x%4.4X %s\n", PDO->SyncM[PDO->nPDO], PDO->Index[PDO->nPDO], str_name);
+            printf("     addr b   index: sub bitl data_type    name\n");
+            /* read all entries defined in PDO */
+            for (er = 1; er <= e; er++)
             {
-                c += 4 * e;
-                a += 8 * e;
-                c++;
+               c += 4;
+               obj_idx = ecx_siigetbyte(&ctx, slave, a++);
+               obj_idx += (ecx_siigetbyte(&ctx, slave, a++) << 8);
+               obj_subidx = ecx_siigetbyte(&ctx, slave, a++);
+               obj_name = ecx_siigetbyte(&ctx, slave, a++);
+               obj_datatype = ecx_siigetbyte(&ctx, slave, a++);
+               bitlen = ecx_siigetbyte(&ctx, slave, a++);
+               abs_offset = mapoffset + (bitoffset / 8);
+               abs_bit = bitoffset % 8;
+
+               PDO->BitSize[PDO->nPDO] += bitlen;
+               a += 2;
+
+               /* skip entry if filler (0x0000:0x00) */
+               if (obj_idx || obj_subidx)
+               {
+                  str_name[0] = 0;
+                  if (obj_name)
+                     ecx_siistring(&ctx, str_name, slave, obj_name);
+
+                  printf("  [0x%4.4X.%1d] 0x%4.4X:0x%2.2X 0x%2.2X", abs_offset, abs_bit, obj_idx, obj_subidx, bitlen);
+                  printf(" %-12s %s\n", dtype2string(obj_datatype, bitlen), str_name);
+               }
+               bitoffset += bitlen;
+               totalsize += bitlen;
             }
-            if (PDO->nPDO >= (EC_MAXEEPDO - 1)) c = PDO->Length; /* limit number of PDO entries in buffer */
-        }
-        while (c < PDO->Length);
-    }
-    if (eectl) ecx_eeprom2pdi(&ctx, slave); /* if eeprom control was previously pdi then restore */
-    return totalsize;
+            PDO->SMbitsize[PDO->SyncM[PDO->nPDO]] += PDO->BitSize[PDO->nPDO];
+            c++;
+         }
+         else /* PDO deactivated because SM is 0xff or > EC_MAXSM */
+         {
+            c += 4 * e;
+            a += 8 * e;
+            c++;
+         }
+         if (PDO->nPDO >= (EC_MAXEEPDO - 1)) c = PDO->Length; /* limit number of PDO entries in buffer */
+      } while (c < PDO->Length);
+   }
+   if (eectl) ecx_eeprom2pdi(&ctx, slave); /* if eeprom control was previously pdi then restore */
+   return totalsize;
 }
 
-
 int si_map_sii(int slave)
 {
-    int retVal = 0;
-    int Tsize, outputs_bo, inputs_bo;
-
-    printf("PDO mapping according to SII :\n");
-
-    outputs_bo = 0;
-    inputs_bo = 0;
-    /* read the assign RXPDOs */
-    Tsize = si_siiPDO(slave, 1, (int)(ec_slave[slave].outputs - (uint8*)&IOmap), outputs_bo );
-    outputs_bo += Tsize;
-    /* read the assign TXPDOs */
-    Tsize = si_siiPDO(slave, 0, (int)(ec_slave[slave].inputs - (uint8*)&IOmap), inputs_bo );
-    inputs_bo += Tsize;
-    /* found some I/O bits ? */
-    if ((outputs_bo > 0) || (inputs_bo > 0))
-        retVal = 1;
-    return retVal;
+   int retVal = 0;
+   int Tsize, outputs_bo, inputs_bo;
+
+   printf("PDO mapping according to SII :\n");
+
+   outputs_bo = 0;
+   inputs_bo = 0;
+   /* read the assign RXPDOs */
+   Tsize = si_siiPDO(slave, 1, (int)(ec_slave[slave].outputs - (uint8 *)&IOmap), outputs_bo);
+   outputs_bo += Tsize;
+   /* read the assign TXPDOs */
+   Tsize = si_siiPDO(slave, 0, (int)(ec_slave[slave].inputs - (uint8 *)&IOmap), inputs_bo);
+   inputs_bo += Tsize;
+   /* found some I/O bits ? */
+   if ((outputs_bo > 0) || (inputs_bo > 0))
+      retVal = 1;
+   return retVal;
 }
 
 void si_sdo(int cnt)
 {
-    int i, j;
-
-    ODlist.Entries = 0;
-    memset(&ODlist, 0, sizeof(ODlist));
-    if( ecx_readODlist(&ctx, cnt, &ODlist))
-    {
-        printf(" CoE Object Description found, %d entries.\n",ODlist.Entries);
-        for( i = 0 ; i < ODlist.Entries ; i++)
-        {
-            uint16_t max_sub;
-            char name[128] = { 0 };
-
-            ecx_readODdescription(&ctx, i, &ODlist);
-            while(EcatError) printf(" - %s\n", ecx_elist2string(&ctx));
-            snprintf(name, sizeof(name) - 1, "\"%s\"", ODlist.Name[i]);
-            if (ODlist.ObjectCode[i] == OTYPE_VAR)
-            {
-                printf("0x%04x      %-40s      [%s]\n", ODlist.Index[i], name,
-                       otype2string(ODlist.ObjectCode[i]));
-            }
-            else
-            {
-                printf("0x%04x      %-40s      [%s  maxsub(0x%02x / %d)]\n",
-                       ODlist.Index[i], name, otype2string(ODlist.ObjectCode[i]),
-                       ODlist.MaxSub[i], ODlist.MaxSub[i]);
-            }
-            memset(&OElist, 0, sizeof(OElist));
-            ecx_readOE(&ctx, i, &ODlist, &OElist);
-            while(EcatError) printf("- %s\n", ecx_elist2string(&ctx));
+   int i, j;
 
-            if(ODlist.ObjectCode[i] != OTYPE_VAR)
-            {
-                int l = sizeof(max_sub);
-                ecx_SDOread(&ctx, cnt, ODlist.Index[i], 0, FALSE, &l, &max_sub, EC_TIMEOUTRXM);
-            }
-            else {
-                max_sub = ODlist.MaxSub[i];
-            }
+   ODlist.Entries = 0;
+   memset(&ODlist, 0, sizeof(ODlist));
+   if (ecx_readODlist(&ctx, cnt, &ODlist))
+   {
+      printf(" CoE Object Description found, %d entries.\n", ODlist.Entries);
+      for (i = 0; i < ODlist.Entries; i++)
+      {
+         uint16_t max_sub;
+         char name[128] = {0};
+
+         ecx_readODdescription(&ctx, i, &ODlist);
+         while (EcatError)
+            printf(" - %s\n", ecx_elist2string(&ctx));
+         snprintf(name, sizeof(name) - 1, "\"%s\"", ODlist.Name[i]);
+         if (ODlist.ObjectCode[i] == OTYPE_VAR)
+         {
+            printf("0x%04x      %-40s      [%s]\n", ODlist.Index[i], name,
+                   otype2string(ODlist.ObjectCode[i]));
+         }
+         else
+         {
+            printf("0x%04x      %-40s      [%s  maxsub(0x%02x / %d)]\n",
+                   ODlist.Index[i], name, otype2string(ODlist.ObjectCode[i]),
+                   ODlist.MaxSub[i], ODlist.MaxSub[i]);
+         }
+         memset(&OElist, 0, sizeof(OElist));
+         ecx_readOE(&ctx, i, &ODlist, &OElist);
+         while (EcatError)
+            printf("- %s\n", ecx_elist2string(&ctx));
+
+         if (ODlist.ObjectCode[i] != OTYPE_VAR)
+         {
+            int l = sizeof(max_sub);
+            ecx_SDOread(&ctx, cnt, ODlist.Index[i], 0, FALSE, &l, &max_sub, EC_TIMEOUTRXM);
+         }
+         else
+         {
+            max_sub = ODlist.MaxSub[i];
+         }
 
-            for( j = 0 ; j < max_sub+1 ; j++)
+         for (j = 0; j < max_sub + 1; j++)
+         {
+            if ((OElist.DataType[j] > 0) && (OElist.BitLength[j] > 0))
             {
-                if ((OElist.DataType[j] > 0) && (OElist.BitLength[j] > 0))
-                {
-                    snprintf(name, sizeof(name) - 1, "\"%s\"", OElist.Name[j]);
-                    printf("    0x%02x      %-40s      [%-16s %6s]      ", j, name,
-                           dtype2string(OElist.DataType[j], OElist.BitLength[j]),
-                           access2string(OElist.ObjAccess[j]));
-                    if ((OElist.ObjAccess[j] & 0x0007))
-                    {
-                        printf("%s", SDO2string(cnt, ODlist.Index[i], j, OElist.DataType[j]));
-                    }
-                    printf("\n");
-                }
+               snprintf(name, sizeof(name) - 1, "\"%s\"", OElist.Name[j]);
+               printf("    0x%02x      %-40s      [%-16s %6s]      ", j, name,
+                      dtype2string(OElist.DataType[j], OElist.BitLength[j]),
+                      access2string(OElist.ObjAccess[j]));
+               if ((OElist.ObjAccess[j] & 0x0007))
+               {
+                  printf("%s", SDO2string(cnt, ODlist.Index[i], j, OElist.DataType[j]));
+               }
+               printf("\n");
             }
-        }
-    }
-    else
-    {
-        while(EcatError) printf("%s", ecx_elist2string(&ctx));
-    }
+         }
+      }
+   }
+   else
+   {
+      while (EcatError)
+         printf("%s", ecx_elist2string(&ctx));
+   }
 }
 
 void slaveinfo(char *ifname)
 {
    int cnt, i, j, nSM;
-    uint16 ssigen;
-    int expectedWKC;
+   uint16 ssigen;
+   int expectedWKC;
 
    printf("Starting slaveinfo\n");
 
    /* initialise SOEM, bind socket to ifname */
    if (ecx_init(&ctx, ifname))
    {
-      printf("ec_init on %s succeeded.\n",ifname);
+      printf("ec_init on %s succeeded.\n", ifname);
 
       /* find and auto-config slaves */
       if (ecx_config_init(&ctx, FALSE) > 0)
@@ -653,55 +663,55 @@ void slaveinfo(char *ifname)
          }
 
          ecx_configdc(&ctx);
-         while(EcatError) printf("%s", ecx_elist2string(&ctx));
-         printf("%d slaves found and configured.\n",ec_slavecount);
+         while (EcatError)
+            printf("%s", ecx_elist2string(&ctx));
+         printf("%d slaves found and configured.\n", ec_slavecount);
          expectedWKC = (ec_group[0].outputsWKC * 2) + ec_group[0].inputsWKC;
          printf("Calculated workcounter %d\n", expectedWKC);
          /* wait for all slaves to reach SAFE_OP state */
-         ecx_statecheck(&ctx, 0, EC_STATE_SAFE_OP,  EC_TIMEOUTSTATE * 3);
-         if (ec_slave[0].state != EC_STATE_SAFE_OP )
+         ecx_statecheck(&ctx, 0, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE * 3);
+         if (ec_slave[0].state != EC_STATE_SAFE_OP)
          {
             printf("Not all slaves reached safe operational state.\n");
             ecx_readstate(&ctx);
-            for(i = 1; i<=ec_slavecount ; i++)
+            for (i = 1; i <= ec_slavecount; i++)
             {
-               if(ec_slave[i].state != EC_STATE_SAFE_OP)
+               if (ec_slave[i].state != EC_STATE_SAFE_OP)
                {
                   printf("Slave %d State=%2x StatusCode=%4x : %s\n",
-                     i, ec_slave[i].state, ec_slave[i].ALstatuscode, ec_ALstatuscode2string(ec_slave[i].ALstatuscode));
+                         i, ec_slave[i].state, ec_slave[i].ALstatuscode, ec_ALstatuscode2string(ec_slave[i].ALstatuscode));
                }
             }
          }
 
-
          ecx_readstate(&ctx);
-         for( cnt = 1 ; cnt <= ec_slavecount ; cnt++)
+         for (cnt = 1; cnt <= ec_slavecount; cnt++)
          {
             printf("\nSlave:%d\n Name:%s\n Output size: %dbits\n Input size: %dbits\n State: %d\n Delay: %d[ns]\n Has DC: %d\n",
-                  cnt, ec_slave[cnt].name, ec_slave[cnt].Obits, ec_slave[cnt].Ibits,
-                  ec_slave[cnt].state, ec_slave[cnt].pdelay, ec_slave[cnt].hasdc);
+                   cnt, ec_slave[cnt].name, ec_slave[cnt].Obits, ec_slave[cnt].Ibits,
+                   ec_slave[cnt].state, ec_slave[cnt].pdelay, ec_slave[cnt].hasdc);
             if (ec_slave[cnt].hasdc) printf(" DCParentport:%d\n", ec_slave[cnt].parentport);
-            printf(" Activeports:%d.%d.%d.%d\n", (ec_slave[cnt].activeports & 0x01) > 0 ,
-                                         (ec_slave[cnt].activeports & 0x02) > 0 ,
-                                         (ec_slave[cnt].activeports & 0x04) > 0 ,
-                                         (ec_slave[cnt].activeports & 0x08) > 0 );
+            printf(" Activeports:%d.%d.%d.%d\n", (ec_slave[cnt].activeports & 0x01) > 0,
+                   (ec_slave[cnt].activeports & 0x02) > 0,
+                   (ec_slave[cnt].activeports & 0x04) > 0,
+                   (ec_slave[cnt].activeports & 0x08) > 0);
             printf(" Configured address: %4.4x\n", ec_slave[cnt].configadr);
             printf(" Man: %8.8x ID: %8.8x Rev: %8.8x\n", (int)ec_slave[cnt].eep_man, (int)ec_slave[cnt].eep_id, (int)ec_slave[cnt].eep_rev);
-            for(nSM = 0 ; nSM < EC_MAXSM ; nSM++)
+            for (nSM = 0; nSM < EC_MAXSM; nSM++)
             {
-               if(ec_slave[cnt].SM[nSM].StartAddr > 0)
-                  printf(" SM%1d A:%4.4x L:%4d F:%8.8x Type:%d\n",nSM, etohs(ec_slave[cnt].SM[nSM].StartAddr), etohs(ec_slave[cnt].SM[nSM].SMlength),
+               if (ec_slave[cnt].SM[nSM].StartAddr > 0)
+                  printf(" SM%1d A:%4.4x L:%4d F:%8.8x Type:%d\n", nSM, etohs(ec_slave[cnt].SM[nSM].StartAddr), etohs(ec_slave[cnt].SM[nSM].SMlength),
                          etohl(ec_slave[cnt].SM[nSM].SMflags), ec_slave[cnt].SMtype[nSM]);
             }
-            for(j = 0 ; j < ec_slave[cnt].FMMUunused ; j++)
+            for (j = 0; j < ec_slave[cnt].FMMUunused; j++)
             {
                printf(" FMMU%1d Ls:%8.8x Ll:%4d Lsb:%d Leb:%d Ps:%4.4x Psb:%d Ty:%2.2x Act:%2.2x\n", j,
-                       etohl(ec_slave[cnt].FMMU[j].LogStart), etohs(ec_slave[cnt].FMMU[j].LogLength), ec_slave[cnt].FMMU[j].LogStartbit,
-                       ec_slave[cnt].FMMU[j].LogEndbit, etohs(ec_slave[cnt].FMMU[j].PhysStart), ec_slave[cnt].FMMU[j].PhysStartBit,
-                       ec_slave[cnt].FMMU[j].FMMUtype, ec_slave[cnt].FMMU[j].FMMUactive);
+                      etohl(ec_slave[cnt].FMMU[j].LogStart), etohs(ec_slave[cnt].FMMU[j].LogLength), ec_slave[cnt].FMMU[j].LogStartbit,
+                      ec_slave[cnt].FMMU[j].LogEndbit, etohs(ec_slave[cnt].FMMU[j].PhysStart), ec_slave[cnt].FMMU[j].PhysStartBit,
+                      ec_slave[cnt].FMMU[j].FMMUtype, ec_slave[cnt].FMMU[j].FMMUactive);
             }
             printf(" FMMUfunc 0:%d 1:%d 2:%d 3:%d\n",
-                     ec_slave[cnt].FMMU0func, ec_slave[cnt].FMMU1func, ec_slave[cnt].FMMU2func, ec_slave[cnt].FMMU3func);
+                   ec_slave[cnt].FMMU0func, ec_slave[cnt].FMMU1func, ec_slave[cnt].FMMU2func, ec_slave[cnt].FMMU3func);
             printf(" MBX length wr: %d rd: %d MBX protocols : %2.2x\n", ec_slave[cnt].mbx_l, ec_slave[cnt].mbx_rl, ec_slave[cnt].mbx_proto);
             ssigen = ecx_siifind(&ctx, cnt, ECT_SII_GENERAL);
             /* SII general section */
@@ -711,7 +721,7 @@ void slaveinfo(char *ifname)
                ec_slave[cnt].FoEdetails = ecx_siigetbyte(&ctx, cnt, ssigen + 0x08);
                ec_slave[cnt].EoEdetails = ecx_siigetbyte(&ctx, cnt, ssigen + 0x09);
                ec_slave[cnt].SoEdetails = ecx_siigetbyte(&ctx, cnt, ssigen + 0x0a);
-               if((ecx_siigetbyte(&ctx, cnt, ssigen + 0x0d) & 0x02) > 0)
+               if ((ecx_siigetbyte(&ctx, cnt, ssigen + 0x0d) & 0x02) > 0)
                {
                   ec_slave[cnt].blockLRW = 1;
                   ec_slave[0].blockLRW++;
@@ -721,17 +731,17 @@ void slaveinfo(char *ifname)
                ec_slave[0].Ebuscurrent += ec_slave[cnt].Ebuscurrent;
             }
             printf(" CoE details: %2.2x FoE details: %2.2x EoE details: %2.2x SoE details: %2.2x\n",
-                    ec_slave[cnt].CoEdetails, ec_slave[cnt].FoEdetails, ec_slave[cnt].EoEdetails, ec_slave[cnt].SoEdetails);
+                   ec_slave[cnt].CoEdetails, ec_slave[cnt].FoEdetails, ec_slave[cnt].EoEdetails, ec_slave[cnt].SoEdetails);
             printf(" Ebus current: %d[mA]\n only LRD/LWR:%d\n",
-                    ec_slave[cnt].Ebuscurrent, ec_slave[cnt].blockLRW);
+                   ec_slave[cnt].Ebuscurrent, ec_slave[cnt].blockLRW);
             if ((ec_slave[cnt].mbx_proto & ECT_MBXPROT_COE) && printSDO)
-                    si_sdo(cnt);
-                if(printMAP)
+               si_sdo(cnt);
+            if (printMAP)
             {
-                    if (ec_slave[cnt].mbx_proto & ECT_MBXPROT_COE)
-                        si_map_sdo(cnt);
-                    else
-                        si_map_sii(cnt);
+               if (ec_slave[cnt].mbx_proto & ECT_MBXPROT_COE)
+                  si_map_sdo(cnt);
+               else
+                  si_map_sii(cnt);
             }
          }
       }
@@ -745,7 +755,7 @@ void slaveinfo(char *ifname)
    }
    else
    {
-      printf("No socket connection on %s\nExcecute as root\n",ifname);
+      printf("No socket connection on %s\nExcecute as root\n", ifname);
    }
 }
 
@@ -753,8 +763,8 @@ char ifbuf[1024];
 
 int main(int argc, char *argv[])
 {
-   ec_adaptert * adapter = NULL;
-   ec_adaptert * head = NULL;
+   ec_adaptert *adapter = NULL;
+   ec_adaptert *head = NULL;
    printf("SOEM (Simple Open EtherCAT Master)\nSlaveinfo\n");
 
    if (argc > 1)
@@ -769,11 +779,11 @@ int main(int argc, char *argv[])
    {
       printf("Usage: slaveinfo ifname [options]\nifname = eth0 for example\nOptions :\n -sdo : print SDO info\n -map : print mapping\n");
 
-      printf ("Available adapters\n");
-      head = adapter = ec_find_adapters ();
+      printf("Available adapters\n");
+      head = adapter = ec_find_adapters();
       while (adapter != NULL)
       {
-         printf ("Description : %s, Device to use for wpcap: %s\n", adapter->desc,adapter->name);
+         printf("Description : %s, Device to use for wpcap: %s\n", adapter->desc, adapter->name);
          adapter = adapter->next;
       }
       ec_free_adapters(head);
index 16bd086b46ec3d3f1067052bc328476fd3a39ab1..01b87e931b51029f1e6804e52e00bf265b6a1f39 100644 (file)
  * @param[in]  length         = length of databuffer
  * @param[in]  data           = databuffer to be copied into datagram
  */
-static void ecx_writedatagramdata(void *datagramdata, ec_cmdtype com, uint16 length, const void * data)
+static void ecx_writedatagramdata(void *datagramdata, ec_cmdtype com, uint16 length, const void *data)
 {
    if (length > 0)
    {
       switch (com)
       {
-         case EC_CMD_NOP:
-            /* Fall-through */
-         case EC_CMD_APRD:
-            /* Fall-through */
-         case EC_CMD_FPRD:
-            /* Fall-through */
-         case EC_CMD_BRD:
-            /* Fall-through */
-         case EC_CMD_LRD:
-            /* no data to write. initialise data so frame is in a known state */
-            memset(datagramdata, 0, length);
-            break;
-         default:
-            memcpy(datagramdata, data, length);
-            break;
+      case EC_CMD_NOP:
+         /* Fall-through */
+      case EC_CMD_APRD:
+         /* Fall-through */
+      case EC_CMD_FPRD:
+         /* Fall-through */
+      case EC_CMD_BRD:
+         /* Fall-through */
+      case EC_CMD_LRD:
+         /* no data to write. initialise data so frame is in a known state */
+         memset(datagramdata, 0, length);
+         break;
+      default:
+         memcpy(datagramdata, data, length);
+         break;
       }
    }
 }
@@ -71,7 +71,7 @@ int ecx_setupdatagram(ecx_portt *port, void *frame, uint8 com, uint8 idx, uint16
    frameP = frame;
    /* Ethernet header is preset and fixed in frame buffers
       EtherCAT header needs to be added after that */
-   datagramP = (ec_comt*)&frameP[ETH_HEADERSIZE];
+   datagramP = (ec_comt *)&frameP[ETH_HEADERSIZE];
    datagramP->elength = htoes(EC_ECATTYPE + EC_HEADERSIZE + length);
    datagramP->command = com;
    datagramP->index = idx;
@@ -110,13 +110,13 @@ uint16 ecx_adddatagram(ecx_portt *port, void *frame, uint8 com, uint8 idx, boole
    frameP = frame;
    /* copy previous frame size */
    prevlength = (uint16)port->txbuflength[idx];
-   datagramP = (ec_comt*)&frameP[ETH_HEADERSIZE];
+   datagramP = (ec_comt *)&frameP[ETH_HEADERSIZE];
    /* add new datagram to ethernet frame size */
-   datagramP->elength = htoes( etohs(datagramP->elength) + EC_HEADERSIZE + length );
+   datagramP->elength = htoes(etohs(datagramP->elength) + EC_HEADERSIZE + length);
    /* add "datagram follows" flag to previous subframe dlength */
-   datagramP->dlength = htoes( etohs(datagramP->dlength) | EC_DATAGRAMFOLLOWS );
+   datagramP->dlength = htoes(etohs(datagramP->dlength) | EC_DATAGRAMFOLLOWS);
    /* set new EtherCAT header position */
-   datagramP = (ec_comt*)&frameP[prevlength - EC_ELENGTHSIZE];
+   datagramP = (ec_comt *)&frameP[prevlength - EC_ELENGTHSIZE];
    datagramP->command = com;
    datagramP->index = idx;
    datagramP->ADP = htoes(ADP);
@@ -153,19 +153,19 @@ uint16 ecx_adddatagram(ecx_portt *port, void *frame, uint8 com, uint8 idx, boole
  * @param[in] timeout     = timeout in us, standard is EC_TIMEOUTRET
  * @return Workcounter or EC_NOFRAME
  */
-int ecx_BWR (ecx_portt *port, uint16 ADP, uint16 ADO, uint16 length, void *data, int timeout)
+int ecx_BWR(ecx_portt *port, uint16 ADP, uint16 ADO, uint16 length, void *data, int timeout)
 {
    uint8 idx;
    int wkc;
 
    /* get fresh index */
-   idx = ecx_getindex (port);
+   idx = ecx_getindex(port);
    /* setup datagram */
-   ecx_setupdatagram (port, &(port->txbuf[idx]), EC_CMD_BWR, idx, ADP, ADO, length, data);
+   ecx_setupdatagram(port, &(port->txbuf[idx]), EC_CMD_BWR, idx, ADP, ADO, length, data);
    /* send data and wait for answer */
-   wkc = ecx_srconfirm (port, idx, timeout);
+   wkc = ecx_srconfirm(port, idx, timeout);
    /* clear buffer status */
-   ecx_setbufstat (port, idx, EC_BUF_EMPTY);
+   ecx_setbufstat(port, idx, EC_BUF_EMPTY);
 
    return wkc;
 }
@@ -190,7 +190,7 @@ int ecx_BRD(ecx_portt *port, uint16 ADP, uint16 ADO, uint16 length, void *data,
    /* setup datagram */
    ecx_setupdatagram(port, &(port->txbuf[idx]), EC_CMD_BRD, idx, ADP, ADO, length, data);
    /* send data and wait for answer */
-   wkc = ecx_srconfirm (port, idx, timeout);
+   wkc = ecx_srconfirm(port, idx, timeout);
    if (wkc > 0)
    {
       /* copy datagram to data buffer */
@@ -464,7 +464,7 @@ int ecx_LRD(ecx_portt *port, uint32 LogAdr, uint16 length, void *data, int timeo
    idx = ecx_getindex(port);
    ecx_setupdatagram(port, &(port->txbuf[idx]), EC_CMD_LRD, idx, LO_WORD(LogAdr), HI_WORD(LogAdr), length, data);
    wkc = ecx_srconfirm(port, idx, timeout);
-   if ((wkc > 0) && (port->rxbuf[idx][EC_CMDOFFSET]==EC_CMD_LRD))
+   if ((wkc > 0) && (port->rxbuf[idx][EC_CMDOFFSET] == EC_CMD_LRD))
    {
       memcpy(data, &(port->rxbuf[idx][EC_HEADERSIZE]), length);
    }
index be46d172e340ebd4949b414363147bdaa1598f79..6303d4ac924b7d05f3ff102f6dcafc2cb4a90a18 100644 (file)
 PACKED_BEGIN
 typedef struct PACKED
 {
-   ec_mbxheadert   MbxHeader;
-   uint16          CANOpen;
-   uint8           Command;
-   uint16          Index;
-   uint8           SubIndex;
+   ec_mbxheadert MbxHeader;
+   uint16 CANOpen;
+   uint8 Command;
+   uint16 Index;
+   uint8 SubIndex;
    union
    {
-      uint8   bdata[0x200]; /* variants for easy data access */
-      uint16  wdata[0x100];
-      uint32  ldata[0x80];
+      uint8 bdata[0x200]; /* variants for easy data access */
+      uint16 wdata[0x100];
+      uint32 ldata[0x80];
    };
 } ec_SDOt;
 PACKED_END
@@ -38,16 +38,16 @@ PACKED_END
 PACKED_BEGIN
 typedef struct PACKED
 {
-   ec_mbxheadert   MbxHeader;
-   uint16          CANOpen;
-   uint8           Opcode;
-   uint8           Reserved;
-   uint16          Fragments;
+   ec_mbxheadert MbxHeader;
+   uint16 CANOpen;
+   uint8 Opcode;
+   uint8 Reserved;
+   uint16 Fragments;
    union
    {
-      uint8   bdata[0x200]; /* variants for easy data access */
-      uint16  wdata[0x100];
-      uint32  ldata[0x80];
+      uint8 bdata[0x200]; /* variants for easy data access */
+      uint16 wdata[0x100];
+      uint32 ldata[0x80];
    };
 } ec_SDOservicet;
 PACKED_END
@@ -115,7 +115,7 @@ static void ecx_SDOinfoerror(ecx_contextt *context, uint16 Slave, uint16 Index,
  * @return Workcounter from last slave response
  */
 int ecx_SDOread(ecx_contextt *context, uint16 slave, uint16 index, uint8 subindex,
-               boolean CA, int *psize, void *p, int timeout)
+                boolean CA, int *psize, void *p, int timeout)
 {
    ec_SDOt *SDOp, *aSDOp;
    uint16 bytesize, Framedatasize;
@@ -131,17 +131,17 @@ int ecx_SDOread(ecx_contextt *context, uint16 slave, uint16 index, uint8 subinde
    MbxOut = NULL;
    wkc = ecx_mbxreceive(context, slave, &MbxIn, 0);
    MbxOut = ecx_getmbx(context);
-   if(!MbxOut) return wkc;
+   if (!MbxOut) return wkc;
    ec_clearmbx(MbxOut);
    SDOp = (ec_SDOt *)MbxOut;
    SDOp->MbxHeader.length = htoes(0x000a);
    SDOp->MbxHeader.address = htoes(0x0000);
    SDOp->MbxHeader.priority = 0x00;
    /* get new mailbox count value, used as session handle */
-   cnt = ec_nextmbxcnt(context->slavelist[slave].mbx_cnt);   
+   cnt = ec_nextmbxcnt(context->slavelist[slave].mbx_cnt);
    context->slavelist[slave].mbx_cnt = cnt;
    SDOp->MbxHeader.mbxtype = ECT_MBXT_COE + MBX_HDR_SET_CNT(cnt); /* CoE */
-   SDOp->CANOpen = htoes(0x000 + (ECT_COES_SDOREQ << 12)); /* number 9bits service upper 4 bits (SDO request) */
+   SDOp->CANOpen = htoes(0x000 + (ECT_COES_SDOREQ << 12));        /* number 9bits service upper 4 bits (SDO request) */
    if (CA)
    {
       SDOp->Command = ECT_SDO_UP_REQ_CA; /* upload request complete access */
@@ -163,7 +163,7 @@ int ecx_SDOread(ecx_contextt *context, uint16 slave, uint16 index, uint8 subinde
    if (wkc > 0) /* succeeded to place mailbox in slave ? */
    {
       /* read slave response */
-      if(MbxIn) ecx_dropmbx(context, MbxIn);
+      if (MbxIn) ecx_dropmbx(context, MbxIn);
       MbxIn = NULL;
       do
       {
@@ -175,7 +175,7 @@ int ecx_SDOread(ecx_contextt *context, uint16 slave, uint16 index, uint8 subinde
          /* slave response should be CoE, SDO response and the correct index */
          if (((aSDOp->MbxHeader.mbxtype & 0x0f) == ECT_MBXT_COE) &&
              ((etohs(aSDOp->CANOpen) >> 12) == ECT_COES_SDORES) &&
-              (aSDOp->Index == SDOp->Index))
+             (aSDOp->Index == SDOp->Index))
          {
             if ((aSDOp->Command & 0x02) > 0)
             {
@@ -212,11 +212,11 @@ int ecx_SDOread(ecx_contextt *context, uint16 slave, uint16 index, uint8 subinde
                      hp += Framedatasize;
                      *psize = Framedatasize;
                      NotLast = TRUE;
-                     toggle= 0x00;
+                     toggle = 0x00;
                      while (NotLast) /* segmented transfer */
                      {
                         MbxOut = ecx_getmbx(context);
-                        if(!MbxOut)
+                        if (!MbxOut)
                         {
                            NotLast = FALSE;
                            break;
@@ -228,8 +228,8 @@ int ecx_SDOread(ecx_contextt *context, uint16 slave, uint16 index, uint8 subinde
                         cnt = ec_nextmbxcnt(context->slavelist[slave].mbx_cnt);
                         context->slavelist[slave].mbx_cnt = cnt;
                         SDOp->MbxHeader.mbxtype = ECT_MBXT_COE + MBX_HDR_SET_CNT(cnt); /* CoE */
-                        SDOp->CANOpen = htoes(0x000 + (ECT_COES_SDOREQ << 12)); /* number 9bits service upper 4 bits (SDO request) */
-                        SDOp->Command = ECT_SDO_SEG_UP_REQ + toggle; /* segment upload request */
+                        SDOp->CANOpen = htoes(0x000 + (ECT_COES_SDOREQ << 12));        /* number 9bits service upper 4 bits (SDO request) */
+                        SDOp->Command = ECT_SDO_SEG_UP_REQ + toggle;                   /* segment upload request */
                         SDOp->Index = htoes(index);
                         SDOp->SubIndex = subindex;
                         SDOp->ldata[0] = 0;
@@ -238,7 +238,7 @@ int ecx_SDOread(ecx_contextt *context, uint16 slave, uint16 index, uint8 subinde
                         MbxOut = NULL;
                         if (wkc > 0)
                         {
-                           if(MbxIn) ecx_dropmbx(context, MbxIn);
+                           if (MbxIn) ecx_dropmbx(context, MbxIn);
                            MbxIn = NULL;
                            /* read slave response */
                            wkc = ecx_mbxreceive(context, slave, &MbxIn, timeout);
@@ -250,7 +250,7 @@ int ecx_SDOread(ecx_contextt *context, uint16 slave, uint16 index, uint8 subinde
                               if ((((aSDOp->MbxHeader.mbxtype & 0x0f) == ECT_MBXT_COE) &&
                                    ((etohs(aSDOp->CANOpen) >> 12) == ECT_COES_SDORES) &&
                                    ((aSDOp->Command & 0xe0) == 0x00)))
-                                        {
+                              {
                                  /* calculate mailbox transfer size */
                                  Framedatasize = etohs(aSDOp->MbxHeader.length) - 3;
                                  if ((aSDOp->Command & 0x01) > 0)
@@ -318,8 +318,8 @@ int ecx_SDOread(ecx_contextt *context, uint16 slave, uint16 index, uint8 subinde
          }
       }
    }
-   if (MbxIn) ecx_dropmbx(context, MbxIn);  
-   if (MbxOut) ecx_dropmbx(context, MbxOut);  
+   if (MbxIn) ecx_dropmbx(context, MbxIn);
+   if (MbxOut) ecx_dropmbx(context, MbxOut);
    return wkc;
 }
 
@@ -348,14 +348,14 @@ int ecx_SDOwrite(ecx_contextt *context, uint16 Slave, uint16 Index, uint8 SubInd
    ec_mbxbuft *MbxIn, *MbxOut;
    uint8 cnt, toggle;
    int framedatasize;
-   boolean  NotLast;
+   boolean NotLast;
    const uint8 *hp;
 
    MbxIn = NULL;
    MbxOut = NULL;
    wkc = ecx_mbxreceive(context, Slave, &MbxIn, 0);
    MbxOut = ecx_getmbx(context);
-   if(!MbxOut) return wkc;
+   if (!MbxOut) return wkc;
    ec_clearmbx(MbxOut);
    SDOp = (ec_SDOt *)MbxOut;
    maxdata = context->slavelist[Slave].mbx_l - 0x10; /* data section=mailbox size - 6 mbx - 2 CoE - 8 sdo req */
@@ -368,8 +368,8 @@ int ecx_SDOwrite(ecx_contextt *context, uint16 Slave, uint16 Index, uint8 SubInd
       /* get new mailbox counter, used for session handle */
       cnt = ec_nextmbxcnt(context->slavelist[Slave].mbx_cnt);
       context->slavelist[Slave].mbx_cnt = cnt;
-      SDOp->MbxHeader.mbxtype = ECT_MBXT_COE + MBX_HDR_SET_CNT(cnt); /* CoE */
-      SDOp->CANOpen = htoes(0x000 + (ECT_COES_SDOREQ << 12)); /* number 9bits service upper 4 bits */
+      SDOp->MbxHeader.mbxtype = ECT_MBXT_COE + MBX_HDR_SET_CNT(cnt);  /* CoE */
+      SDOp->CANOpen = htoes(0x000 + (ECT_COES_SDOREQ << 12));         /* number 9bits service upper 4 bits */
       SDOp->Command = ECT_SDO_DOWN_EXP | (((4 - psize) << 2) & 0x0c); /* expedited SDO download transfer */
       SDOp->Index = htoes(Index);
       SDOp->SubIndex = SubIndex;
@@ -381,7 +381,7 @@ int ecx_SDOwrite(ecx_contextt *context, uint16 Slave, uint16 Index, uint8 SubInd
       MbxOut = NULL;
       if (wkc > 0)
       {
-         if(MbxIn) ecx_dropmbx(context, MbxIn);
+         if (MbxIn) ecx_dropmbx(context, MbxIn);
          MbxIn = NULL;
          /* read slave response */
          wkc = ecx_mbxreceive(context, Slave, &MbxIn, Timeout);
@@ -391,10 +391,10 @@ int ecx_SDOwrite(ecx_contextt *context, uint16 Slave, uint16 Index, uint8 SubInd
             /* response should be CoE, SDO response, correct index and subindex */
             if (((aSDOp->MbxHeader.mbxtype & 0x0f) == ECT_MBXT_COE) &&
                 ((etohs(aSDOp->CANOpen) >> 12) == ECT_COES_SDORES) &&
-                 (aSDOp->Index == SDOp->Index) &&
-                 (aSDOp->SubIndex == SDOp->SubIndex))
+                (aSDOp->Index == SDOp->Index) &&
+                (aSDOp->SubIndex == SDOp->SubIndex))
             {
-                 /* all OK */
+               /* all OK */
             }
             /* unexpected response from slave */
             else
@@ -418,7 +418,7 @@ int ecx_SDOwrite(ecx_contextt *context, uint16 Slave, uint16 Index, uint8 SubInd
       NotLast = FALSE;
       if (framedatasize > maxdata)
       {
-         framedatasize = maxdata;  /*  segmented transfer needed  */
+         framedatasize = maxdata; /*  segmented transfer needed  */
          NotLast = TRUE;
       }
       SDOp->MbxHeader.length = htoes((uint16)(0x0a + framedatasize));
@@ -428,7 +428,7 @@ int ecx_SDOwrite(ecx_contextt *context, uint16 Slave, uint16 Index, uint8 SubInd
       cnt = ec_nextmbxcnt(context->slavelist[Slave].mbx_cnt);
       context->slavelist[Slave].mbx_cnt = cnt;
       SDOp->MbxHeader.mbxtype = ECT_MBXT_COE + MBX_HDR_SET_CNT(cnt); /* CoE */
-      SDOp->CANOpen = htoes(0x000 + (ECT_COES_SDOREQ << 12)); /* number 9bits service upper 4 bits */
+      SDOp->CANOpen = htoes(0x000 + (ECT_COES_SDOREQ << 12));        /* number 9bits service upper 4 bits */
       if (CA)
       {
          SDOp->Command = ECT_SDO_DOWN_INIT_CA; /* Complete Access, normal SDO init download transfer */
@@ -454,7 +454,7 @@ int ecx_SDOwrite(ecx_contextt *context, uint16 Slave, uint16 Index, uint8 SubInd
       MbxOut = NULL;
       if (wkc > 0)
       {
-         if(MbxIn) ecx_dropmbx(context, MbxIn);
+         if (MbxIn) ecx_dropmbx(context, MbxIn);
          MbxIn = NULL;
          /* read slave response */
          wkc = ecx_mbxreceive(context, Slave, &MbxIn, Timeout);
@@ -464,8 +464,8 @@ int ecx_SDOwrite(ecx_contextt *context, uint16 Slave, uint16 Index, uint8 SubInd
             /* response should be CoE, SDO response, correct index and subindex */
             if (((aSDOp->MbxHeader.mbxtype & 0x0f) == ECT_MBXT_COE) &&
                 ((etohs(aSDOp->CANOpen) >> 12) == ECT_COES_SDORES) &&
-                 (aSDOp->Index == SDOp->Index) &&
-                 (aSDOp->SubIndex == SDOp->SubIndex))
+                (aSDOp->Index == SDOp->Index) &&
+                (aSDOp->SubIndex == SDOp->SubIndex))
             {
                /* all ok */
                maxdata += 7;
@@ -474,7 +474,7 @@ int ecx_SDOwrite(ecx_contextt *context, uint16 Slave, uint16 Index, uint8 SubInd
                while (NotLast)
                {
                   MbxOut = ecx_getmbx(context);
-                  if(!MbxOut)
+                  if (!MbxOut)
                   {
                      NotLast = FALSE;
                      break;
@@ -486,13 +486,13 @@ int ecx_SDOwrite(ecx_contextt *context, uint16 Slave, uint16 Index, uint8 SubInd
                   SDOp->Command = 0x01; /* last segment */
                   if (framedatasize > maxdata)
                   {
-                     framedatasize = maxdata;  /*  more segments needed  */
+                     framedatasize = maxdata; /*  more segments needed  */
                      NotLast = TRUE;
                      SDOp->Command = 0x00; /* segments follow */
                   }
                   if (!NotLast && (framedatasize < 7))
                   {
-                     SDOp->MbxHeader.length = htoes(0x0a); /* minimum size */
+                     SDOp->MbxHeader.length = htoes(0x0a);                       /* minimum size */
                      SDOp->Command = (uint8)(0x01 + ((7 - framedatasize) << 1)); /* last segment reduced octets */
                   }
                   else
@@ -505,8 +505,8 @@ int ecx_SDOwrite(ecx_contextt *context, uint16 Slave, uint16 Index, uint8 SubInd
                   cnt = ec_nextmbxcnt(context->slavelist[Slave].mbx_cnt);
                   context->slavelist[Slave].mbx_cnt = cnt;
                   SDOp->MbxHeader.mbxtype = ECT_MBXT_COE + MBX_HDR_SET_CNT(cnt); /* CoE */
-                  SDOp->CANOpen = htoes(0x000 + (ECT_COES_SDOREQ << 12)); /* number 9bits service upper 4 bits (SDO request) */
-                  SDOp->Command = SDOp->Command + toggle; /* add toggle bit to command byte */
+                  SDOp->CANOpen = htoes(0x000 + (ECT_COES_SDOREQ << 12));        /* number 9bits service upper 4 bits (SDO request) */
+                  SDOp->Command = SDOp->Command + toggle;                        /* add toggle bit to command byte */
                   /* copy parameter data to mailbox */
                   memcpy(&SDOp->Index, hp, framedatasize);
                   /* update parameter buffer pointer */
@@ -517,7 +517,7 @@ int ecx_SDOwrite(ecx_contextt *context, uint16 Slave, uint16 Index, uint8 SubInd
                   MbxOut = NULL;
                   if (wkc > 0)
                   {
-                     if(MbxIn) ecx_dropmbx(context, MbxIn);
+                     if (MbxIn) ecx_dropmbx(context, MbxIn);
                      MbxIn = NULL;
                      /* read slave response */
                      wkc = ecx_mbxreceive(context, Slave, &MbxIn, Timeout);
@@ -528,7 +528,7 @@ int ecx_SDOwrite(ecx_contextt *context, uint16 Slave, uint16 Index, uint8 SubInd
                             ((etohs(aSDOp->CANOpen) >> 12) == ECT_COES_SDORES) &&
                             ((aSDOp->Command & 0xe0) == 0x20))
                         {
-                                   /* all OK, nothing to do */
+                           /* all OK, nothing to do */
                         }
                         else
                         {
@@ -564,8 +564,8 @@ int ecx_SDOwrite(ecx_contextt *context, uint16 Slave, uint16 Index, uint8 SubInd
          }
       }
    }
-   if (MbxIn) ecx_dropmbx(context, MbxIn);  
-   if (MbxOut) ecx_dropmbx(context, MbxOut);  
+   if (MbxIn) ecx_dropmbx(context, MbxIn);
+   if (MbxOut) ecx_dropmbx(context, MbxOut);
    return wkc;
 }
 
@@ -586,20 +586,20 @@ int ecx_RxPDO(ecx_contextt *context, uint16 Slave, uint16 RxPDOnumber, int psize
    int wkc, maxdata, framedatasize;
    ec_mbxbuft *MbxIn, *MbxOut;
    uint8 cnt;
-   
+
    MbxIn = NULL;
    MbxOut = NULL;
    wkc = ecx_mbxreceive(context, Slave, &MbxIn, 0);
    if (MbxIn) ecx_dropmbx(context, MbxIn);
    MbxOut = ecx_getmbx(context);
-   if(!MbxOut) return wkc;
+   if (!MbxOut) return wkc;
    ec_clearmbx(MbxOut);
    SDOp = (ec_SDOt *)MbxOut;
    maxdata = context->slavelist[Slave].mbx_l - 0x08; /* data section=mailbox size - 6 mbx - 2 CoE */
    framedatasize = psize;
    if (framedatasize > maxdata)
    {
-      framedatasize = maxdata;  /*  limit transfer */
+      framedatasize = maxdata; /*  limit transfer */
    }
    SDOp->MbxHeader.length = htoes((uint16)(0x02 + framedatasize));
    SDOp->MbxHeader.address = htoes(0x0000);
@@ -607,7 +607,7 @@ int ecx_RxPDO(ecx_contextt *context, uint16 Slave, uint16 RxPDOnumber, int psize
    /* get new mailbox counter, used for session handle */
    cnt = ec_nextmbxcnt(context->slavelist[Slave].mbx_cnt);
    context->slavelist[Slave].mbx_cnt = cnt;
-   SDOp->MbxHeader.mbxtype = ECT_MBXT_COE + MBX_HDR_SET_CNT(cnt); /* CoE */
+   SDOp->MbxHeader.mbxtype = ECT_MBXT_COE + MBX_HDR_SET_CNT(cnt);          /* CoE */
    SDOp->CANOpen = htoes((RxPDOnumber & 0x01ff) + (ECT_COES_RXPDO << 12)); /* number 9bits service upper 4 bits */
    /* copy PDO data to mailbox */
    memcpy(&SDOp->Command, p, framedatasize);
@@ -629,7 +629,7 @@ int ecx_RxPDO(ecx_contextt *context, uint16 Slave, uint16 RxPDOnumber, int psize
  * @param[in]  timeout       = Timeout in us, standard is EC_TIMEOUTRXM
  * @return Workcounter from last slave response
  */
-int ecx_TxPDO(ecx_contextt *context, uint16 slave, uint16 TxPDOnumber , int *psize, void *p, int timeout)
+int ecx_TxPDO(ecx_contextt *context, uint16 slave, uint16 TxPDOnumber, int *psize, void *p, int timeout)
 {
    ec_SDOt *SDOp, *aSDOp;
    int wkc;
@@ -642,7 +642,7 @@ int ecx_TxPDO(ecx_contextt *context, uint16 slave, uint16 TxPDOnumber , int *psi
    wkc = ecx_mbxreceive(context, slave, &MbxIn, 0);
    if (MbxIn) ecx_dropmbx(context, MbxIn);
    MbxOut = ecx_getmbx(context);
-   if(!MbxOut) return wkc;
+   if (!MbxOut) return wkc;
    ec_clearmbx(MbxOut);
    SDOp = (ec_SDOt *)MbxOut;
    SDOp->MbxHeader.length = htoes(0x02);
@@ -651,13 +651,13 @@ int ecx_TxPDO(ecx_contextt *context, uint16 slave, uint16 TxPDOnumber , int *psi
    /* get new mailbox counter, used for session handle */
    cnt = ec_nextmbxcnt(context->slavelist[slave].mbx_cnt);
    context->slavelist[slave].mbx_cnt = cnt;
-   SDOp->MbxHeader.mbxtype = ECT_MBXT_COE + MBX_HDR_SET_CNT(cnt); /* CoE */
+   SDOp->MbxHeader.mbxtype = ECT_MBXT_COE + MBX_HDR_SET_CNT(cnt);             /* CoE */
    SDOp->CANOpen = htoes((TxPDOnumber & 0x01ff) + (ECT_COES_TXPDO_RR << 12)); /* number 9bits service upper 4 bits */
    wkc = ecx_mbxsend(context, slave, MbxOut, EC_TIMEOUTTXM);
    MbxOut = NULL;
    if (wkc > 0)
    {
-      if(MbxIn) ecx_dropmbx(context, MbxIn);
+      if (MbxIn) ecx_dropmbx(context, MbxIn);
       MbxIn = NULL;
       /* read slave response */
       wkc = ecx_mbxreceive(context, slave, &MbxIn, timeout);
@@ -699,8 +699,8 @@ int ecx_TxPDO(ecx_contextt *context, uint16 slave, uint16 TxPDOnumber , int *psi
          }
       }
    }
-   if (MbxIn) ecx_dropmbx(context, MbxIn);  
-   if (MbxOut) ecx_dropmbx(context, MbxOut);  
+   if (MbxIn) ecx_dropmbx(context, MbxIn);
+   if (MbxOut) ecx_dropmbx(context, MbxOut);
    return wkc;
 }
 
@@ -718,7 +718,8 @@ uint32 ecx_readPDOassign(ecx_contextt *context, uint16 Slave, uint16 PDOassign)
    int32 rdat2;
    uint32 bsize = 0;
 
-   rdl = sizeof(rdat); rdat = 0;
+   rdl = sizeof(rdat);
+   rdat = 0;
    /* read PDO assign subindex 0 ( = number of PDO's) */
    wkc = ecx_SDOread(context, Slave, PDOassign, 0x00, FALSE, &rdl, &rdat, EC_TIMEOUTRXM);
    rdat = etohs(rdat);
@@ -731,21 +732,24 @@ uint32 ecx_readPDOassign(ecx_contextt *context, uint16 Slave, uint16 PDOassign)
       /* read all PDO's */
       for (idxloop = 1; idxloop <= nidx; idxloop++)
       {
-         rdl = sizeof(rdat); rdat = 0;
+         rdl = sizeof(rdat);
+         rdat = 0;
          /* read PDO assign */
          wkc = ecx_SDOread(context, Slave, PDOassign, (uint8)idxloop, FALSE, &rdl, &rdat, EC_TIMEOUTRXM);
          /* result is index of PDO */
          idx = etohs(rdat);
          if (idx > 0)
          {
-            rdl = sizeof(subcnt); subcnt = 0;
+            rdl = sizeof(subcnt);
+            subcnt = 0;
             /* read number of subindexes of PDO */
-            wkc = ecx_SDOread(context, Slave,idx, 0x00, FALSE, &rdl, &subcnt, EC_TIMEOUTRXM);
+            wkc = ecx_SDOread(context, Slave, idx, 0x00, FALSE, &rdl, &subcnt, EC_TIMEOUTRXM);
             subidx = subcnt;
             /* for each subindex */
             for (subidxloop = 1; subidxloop <= subidx; subidxloop++)
             {
-               rdl = sizeof(rdat2); rdat2 = 0;
+               rdl = sizeof(rdat2);
+               rdat2 = 0;
                /* read SDO that is mapped in PDO */
                wkc = ecx_SDOread(context, Slave, idx, (uint8)subidxloop, FALSE, &rdl, &rdat2, EC_TIMEOUTRXM);
                rdat2 = etohl(rdat2);
@@ -756,9 +760,10 @@ uint32 ecx_readPDOassign(ecx_contextt *context, uint16 Slave, uint16 PDOassign)
                }
                else
                {
-                  rdl = sizeof(rdat); rdat = htoes(0xff);
+                  rdl = sizeof(rdat);
+                  rdat = htoes(0xff);
                   /* read Object Entry in Object database */
-//                  wkc = ec_readOEsingle(idx, (uint8)SubCount, pODlist, pOElist);
+                  //                  wkc = ec_readOEsingle(idx, (uint8)SubCount, pODlist, pOElist);
                   bsize += etohs(rdat);
                }
             }
@@ -777,7 +782,7 @@ uint32 ecx_readPDOassign(ecx_contextt *context, uint16 Slave, uint16 PDOassign)
  * @return total bitlength of PDO assign
  */
 uint32 ecx_readPDOassignCA(ecx_contextt *context, uint16 Slave, int Thread_n,
-      uint16 PDOassign)
+                           uint16 PDOassign)
 {
    uint16 idxloop, nidx, subidxloop, idx, subidx;
    int wkc, rdl;
@@ -785,10 +790,10 @@ uint32 ecx_readPDOassignCA(ecx_contextt *context, uint16 Slave, int Thread_n,
 
    /* find maximum size of PDOassign buffer */
    rdl = sizeof(ec_PDOassignt);
-   context->PDOassign[Thread_n].n=0;
+   context->PDOassign[Thread_n].n = 0;
    /* read rxPDOassign in CA mode, all subindexes are read in one struct */
    wkc = ecx_SDOread(context, Slave, PDOassign, 0x00, TRUE, &rdl,
-         &(context->PDOassign[Thread_n]), EC_TIMEOUTRXM);
+                     &(context->PDOassign[Thread_n]), EC_TIMEOUTRXM);
    /* positive result from slave ? */
    if ((wkc > 0) && (context->PDOassign[Thread_n].n > 0))
    {
@@ -801,15 +806,16 @@ uint32 ecx_readPDOassignCA(ecx_contextt *context, uint16 Slave, int Thread_n,
          idx = etohs(context->PDOassign[Thread_n].index[idxloop - 1]);
          if (idx > 0)
          {
-            rdl = sizeof(ec_PDOdesct); context->PDOdesc[Thread_n].n = 0;
+            rdl = sizeof(ec_PDOdesct);
+            context->PDOdesc[Thread_n].n = 0;
             /* read SDO's that are mapped in PDO, CA mode */
-            wkc = ecx_SDOread(context, Slave,idx, 0x00, TRUE, &rdl,
-                  &(context->PDOdesc[Thread_n]), EC_TIMEOUTRXM);
+            wkc = ecx_SDOread(context, Slave, idx, 0x00, TRUE, &rdl,
+                              &(context->PDOdesc[Thread_n]), EC_TIMEOUTRXM);
             subidx = context->PDOdesc[Thread_n].n;
             /* extract all bitlengths of SDO's */
             for (subidxloop = 1; subidxloop <= subidx; subidxloop++)
             {
-               bsize += LO_BYTE(etohl(context->PDOdesc[Thread_n].PDO[subidxloop -1]));
+               bsize += LO_BYTE(etohl(context->PDOdesc[Thread_n].PDO[subidxloop - 1]));
             }
          }
       }
@@ -858,7 +864,8 @@ int ecx_readPDOmap(ecx_contextt *context, uint16 Slave, uint32 *Osize, uint32 *I
    *Isize = 0;
    *Osize = 0;
    SMt_bug_add = 0;
-   rdl = sizeof(nSM); nSM = 0;
+   rdl = sizeof(nSM);
+   nSM = 0;
    /* read SyncManager Communication Type object count */
    wkc = ecx_SDOread(context, Slave, ECT_SDO_SMCOMMTYPE, 0x00, FALSE, &rdl, &nSM, EC_TIMEOUTRXM);
    /* positive result from slave ? */
@@ -868,43 +875,44 @@ int ecx_readPDOmap(ecx_contextt *context, uint16 Slave, uint32 *Osize, uint32 *I
       if (nSM > EC_MAXSM)
          nSM = EC_MAXSM;
       /* iterate for every SM type defined */
-      for (iSM = 2 ; iSM < nSM ; iSM++)
+      for (iSM = 2; iSM < nSM; iSM++)
       {
-         rdl = sizeof(tSM); tSM = 0;
+         rdl = sizeof(tSM);
+         tSM = 0;
          /* read SyncManager Communication Type */
          wkc = ecx_SDOread(context, Slave, ECT_SDO_SMCOMMTYPE, iSM + 1, FALSE, &rdl, &tSM, EC_TIMEOUTRXM);
          if (wkc > 0)
          {
-// start slave bug prevention code, remove if possible
-            if((iSM == 2) && (tSM == 2)) // SM2 has type 2 == mailbox out, this is a bug in the slave!
+            // start slave bug prevention code, remove if possible
+            if ((iSM == 2) && (tSM == 2)) // SM2 has type 2 == mailbox out, this is a bug in the slave!
             {
                SMt_bug_add = 1; // try to correct, this works if the types are 0 1 2 3 and should be 1 2 3 4
             }
-            if(tSM)
+            if (tSM)
             {
                tSM += SMt_bug_add; // only add if SMt > 0
             }
-            if((iSM == 2) && (tSM == 0)) // SM2 has type 0, this is a bug in the slave!
+            if ((iSM == 2) && (tSM == 0)) // SM2 has type 0, this is a bug in the slave!
             {
                tSM = 3;
             }
-            if((iSM == 3) && (tSM == 0)) // SM3 has type 0, this is a bug in the slave!
+            if ((iSM == 3) && (tSM == 0)) // SM3 has type 0, this is a bug in the slave!
             {
                tSM = 4;
             }
-// end slave bug prevention code
+            // end slave bug prevention code
 
             context->slavelist[Slave].SMtype[iSM] = tSM;
             /* check if SM is unused -> clear enable flag */
             if (tSM == 0)
             {
                context->slavelist[Slave].SM[iSM].SMflags =
-                  htoel( etohl(context->slavelist[Slave].SM[iSM].SMflags) & EC_SMENABLEMASK);
+                   htoel(etohl(context->slavelist[Slave].SM[iSM].SMflags) & EC_SMENABLEMASK);
             }
             if ((tSM == 3) || (tSM == 4))
             {
                /* read the assign PDO */
-               Tsize = ecx_readPDOassign(context, Slave, ECT_SDO_PDOASSIGN + iSM );
+               Tsize = ecx_readPDOassign(context, Slave, ECT_SDO_PDOASSIGN + iSM);
                /* if a mapping is found */
                if (Tsize)
                {
@@ -962,7 +970,7 @@ int ecx_readPDOmapCA(ecx_contextt *context, uint16 Slave, int Thread_n, uint32 *
    context->SMcommtype[Thread_n].n = 0;
    /* read SyncManager Communication Type object count Complete Access*/
    wkc = ecx_SDOread(context, Slave, ECT_SDO_SMCOMMTYPE, 0x00, TRUE, &rdl,
-         &(context->SMcommtype[Thread_n]), EC_TIMEOUTRXM);
+                     &(context->SMcommtype[Thread_n]), EC_TIMEOUTRXM);
    /* positive result from slave ? */
    if ((wkc > 0) && (context->SMcommtype[Thread_n].n > 2))
    {
@@ -974,33 +982,33 @@ int ecx_readPDOmapCA(ecx_contextt *context, uint16 Slave, int Thread_n, uint32 *
          ecx_packeterror(context, Slave, 0, 0, 10); /* #SM larger than EC_MAXSM */
       }
       /* iterate for every SM type defined */
-      for (iSM = 2 ; iSM < nSM ; iSM++)
+      for (iSM = 2; iSM < nSM; iSM++)
       {
          tSM = context->SMcommtype[Thread_n].SMtype[iSM];
 
-// start slave bug prevention code, remove if possible
-         if((iSM == 2) && (tSM == 2)) // SM2 has type 2 == mailbox out, this is a bug in the slave!
+         // start slave bug prevention code, remove if possible
+         if ((iSM == 2) && (tSM == 2)) // SM2 has type 2 == mailbox out, this is a bug in the slave!
          {
             SMt_bug_add = 1; // try to correct, this works if the types are 0 1 2 3 and should be 1 2 3 4
          }
-         if(tSM)
+         if (tSM)
          {
             tSM += SMt_bug_add; // only add if SMt > 0
          }
-// end slave bug prevention code
+         // end slave bug prevention code
 
          context->slavelist[Slave].SMtype[iSM] = tSM;
          /* check if SM is unused -> clear enable flag */
          if (tSM == 0)
          {
             context->slavelist[Slave].SM[iSM].SMflags =
-               htoel( etohl(context->slavelist[Slave].SM[iSM].SMflags) & EC_SMENABLEMASK);
+                htoel(etohl(context->slavelist[Slave].SM[iSM].SMflags) & EC_SMENABLEMASK);
          }
          if ((tSM == 3) || (tSM == 4))
          {
             /* read the assign PDO */
             Tsize = ecx_readPDOassignCA(context, Slave, Thread_n,
-                  ECT_SDO_PDOASSIGN + iSM );
+                                        ECT_SDO_PDOASSIGN + iSM);
             /* if a mapping is found */
             if (Tsize)
             {
@@ -1053,7 +1061,7 @@ int ecx_readODlist(ecx_contextt *context, uint16 Slave, ec_ODlistt *pODlist)
    wkc = ecx_mbxreceive(context, Slave, &MbxIn, 0);
    if (MbxIn) ecx_dropmbx(context, MbxIn);
    MbxOut = ecx_getmbx(context);
-   if(!MbxOut) return wkc;
+   if (!MbxOut) return wkc;
    ec_clearmbx(MbxOut);
    SDOp = (ec_SDOservicet *)MbxOut;
    SDOp->MbxHeader.length = htoes(0x0008);
@@ -1063,10 +1071,10 @@ int ecx_readODlist(ecx_contextt *context, uint16 Slave, ec_ODlistt *pODlist)
    cnt = ec_nextmbxcnt(context->slavelist[Slave].mbx_cnt);
    context->slavelist[Slave].mbx_cnt = cnt;
    SDOp->MbxHeader.mbxtype = ECT_MBXT_COE + MBX_HDR_SET_CNT(cnt); /* CoE */
-   SDOp->CANOpen = htoes(0x000 + (ECT_COES_SDOINFO << 12)); /* number 9bits service upper 4 bits */
-   SDOp->Opcode = ECT_GET_ODLIST_REQ; /* get object description list request */
+   SDOp->CANOpen = htoes(0x000 + (ECT_COES_SDOINFO << 12));       /* number 9bits service upper 4 bits */
+   SDOp->Opcode = ECT_GET_ODLIST_REQ;                             /* get object description list request */
    SDOp->Reserved = 0;
-   SDOp->Fragments = 0; /* fragments left */
+   SDOp->Fragments = 0;          /* fragments left */
    SDOp->wdata[0] = htoes(0x01); /* all objects */
    /* send get object description list request to slave */
    wkc = ecx_mbxsend(context, Slave, MbxOut, EC_TIMEOUTTXM);
@@ -1081,14 +1089,14 @@ int ecx_readODlist(ecx_contextt *context, uint16 Slave, ec_ODlistt *pODlist)
       do
       {
          stop = TRUE; /* assume this is last iteration */
-         if(MbxIn) ecx_dropmbx(context, MbxIn);
+         if (MbxIn) ecx_dropmbx(context, MbxIn);
          MbxIn = NULL;
          /* read slave response */
          wkc = ecx_mbxreceive(context, Slave, &MbxIn, EC_TIMEOUTRXM);
          /* got response ? */
          if (wkc > 0)
          {
-            aSDOp = (ec_SDOservicet*)MbxIn;
+            aSDOp = (ec_SDOservicet *)MbxIn;
             /* response should be CoE and "get object description list response" */
             if (((aSDOp->MbxHeader.mbxtype & 0x0f) == ECT_MBXT_COE) &&
                 ((aSDOp->Opcode & 0x7f) == ECT_GET_ODLIST_RES))
@@ -1133,7 +1141,7 @@ int ecx_readODlist(ecx_contextt *context, uint16 Slave, ec_ODlistt *pODlist)
             /* got unexpected response from slave */
             else
             {
-               if ((aSDOp->Opcode &  0x7f) == ECT_SDOINFO_ERROR) /* SDO info error received */
+               if ((aSDOp->Opcode & 0x7f) == ECT_SDOINFO_ERROR) /* SDO info error received */
                {
                   ecx_SDOinfoerror(context, Slave, 0, 0, etohl(aSDOp->ldata[0]));
                   stop = TRUE;
@@ -1147,11 +1155,10 @@ int ecx_readODlist(ecx_contextt *context, uint16 Slave, ec_ODlistt *pODlist)
             }
          }
          x++;
-      }
-      while ((x <= 128) && !stop);
+      } while ((x <= 128) && !stop);
    }
-   if (MbxIn) ecx_dropmbx(context, MbxIn);  
-   if (MbxOut) ecx_dropmbx(context, MbxOut);  
+   if (MbxIn) ecx_dropmbx(context, MbxIn);
+   if (MbxOut) ecx_dropmbx(context, MbxOut);
    return wkc;
 }
 
@@ -1166,7 +1173,7 @@ int ecx_readODdescription(ecx_contextt *context, uint16 Item, ec_ODlistt *pODlis
 {
    ec_SDOservicet *SDOp, *aSDOp;
    int wkc;
-   uint16  n, Slave;
+   uint16 n, Slave;
    ec_mbxbuft *MbxIn, *MbxOut;
    uint8 cnt;
 
@@ -1179,9 +1186,9 @@ int ecx_readODdescription(ecx_contextt *context, uint16 Item, ec_ODlistt *pODlis
    MbxOut = NULL;
    /* Empty slave out mailbox if something is in. Timout set to 0 */
    wkc = ecx_mbxreceive(context, Slave, &MbxIn, 0);
-   if (MbxIn) ecx_dropmbx(context, MbxIn);  
+   if (MbxIn) ecx_dropmbx(context, MbxIn);
    MbxOut = ecx_getmbx(context);
-   if(!MbxOut) return wkc;
+   if (!MbxOut) return wkc;
    ec_clearmbx(MbxOut);
    SDOp = (ec_SDOservicet *)MbxOut;
    SDOp->MbxHeader.length = htoes(0x0008);
@@ -1191,10 +1198,10 @@ int ecx_readODdescription(ecx_contextt *context, uint16 Item, ec_ODlistt *pODlis
    cnt = ec_nextmbxcnt(context->slavelist[Slave].mbx_cnt);
    context->slavelist[Slave].mbx_cnt = cnt;
    SDOp->MbxHeader.mbxtype = ECT_MBXT_COE + MBX_HDR_SET_CNT(cnt); /* CoE */
-   SDOp->CANOpen = htoes(0x000 + (ECT_COES_SDOINFO << 12)); /* number 9bits service upper 4 bits */
-   SDOp->Opcode = ECT_GET_OD_REQ; /* get object description request */
+   SDOp->CANOpen = htoes(0x000 + (ECT_COES_SDOINFO << 12));       /* number 9bits service upper 4 bits */
+   SDOp->Opcode = ECT_GET_OD_REQ;                                 /* get object description request */
    SDOp->Reserved = 0;
-   SDOp->Fragments = 0; /* fragments left */
+   SDOp->Fragments = 0;                          /* fragments left */
    SDOp->wdata[0] = htoes(pODlist->Index[Item]); /* Data of Index */
    /* send get object description request to slave */
    wkc = ecx_mbxsend(context, Slave, MbxOut, EC_TIMEOUTTXM);
@@ -1209,7 +1216,7 @@ int ecx_readODdescription(ecx_contextt *context, uint16 Item, ec_ODlistt *pODlis
       /* got response ? */
       if (wkc > 0)
       {
-         aSDOp = (ec_SDOservicet*)MbxIn;
+         aSDOp = (ec_SDOservicet *)MbxIn;
          if (((aSDOp->MbxHeader.mbxtype & 0x0f) == ECT_MBXT_COE) &&
              ((aSDOp->Opcode & 0x7f) == ECT_GET_OD_RES))
          {
@@ -1222,7 +1229,7 @@ int ecx_readODdescription(ecx_contextt *context, uint16 Item, ec_ODlistt *pODlis
             pODlist->ObjectCode[Item] = aSDOp->bdata[5];
             pODlist->MaxSub[Item] = aSDOp->bdata[4];
 
-            memcpy(pODlist->Name[Item] , (char *)&aSDOp->bdata[6], n);
+            memcpy(pODlist->Name[Item], (char *)&aSDOp->bdata[6], n);
             pODlist->Name[Item][n] = 0x00; /* String terminator */
          }
          /* got unexpected response from slave */
@@ -1230,18 +1237,18 @@ int ecx_readODdescription(ecx_contextt *context, uint16 Item, ec_ODlistt *pODlis
          {
             if (((aSDOp->Opcode & 0x7f) == ECT_SDOINFO_ERROR)) /* SDO info error received */
             {
-               ecx_SDOinfoerror(context, Slave,pODlist->Index[Item], 0, etohl(aSDOp->ldata[0]));
+               ecx_SDOinfoerror(context, Slave, pODlist->Index[Item], 0, etohl(aSDOp->ldata[0]));
             }
             else
             {
-               ecx_packeterror(context, Slave,pODlist->Index[Item], 0, 1); /* Unexpected frame returned */
+               ecx_packeterror(context, Slave, pODlist->Index[Item], 0, 1); /* Unexpected frame returned */
             }
             wkc = 0;
          }
       }
    }
-   if (MbxIn) ecx_dropmbx(context, MbxIn);  
-   if (MbxOut) ecx_dropmbx(context, MbxOut);  
+   if (MbxIn) ecx_dropmbx(context, MbxIn);
+   if (MbxOut) ecx_dropmbx(context, MbxOut);
    return wkc;
 }
 
@@ -1273,7 +1280,7 @@ int ecx_readOEsingle(ecx_contextt *context, uint16 Item, uint8 SubI, ec_ODlistt
    wkc = ecx_mbxreceive(context, Slave, &MbxIn, 0);
    if (MbxIn) ecx_dropmbx(context, MbxIn);
    MbxOut = ecx_getmbx(context);
-   if(!MbxOut) return wkc;
+   if (!MbxOut) return wkc;
    ec_clearmbx(MbxOut);
    SDOp = (ec_SDOservicet *)MbxOut;
    SDOp->MbxHeader.length = htoes(0x000a);
@@ -1283,13 +1290,13 @@ int ecx_readOEsingle(ecx_contextt *context, uint16 Item, uint8 SubI, ec_ODlistt
    cnt = ec_nextmbxcnt(context->slavelist[Slave].mbx_cnt);
    context->slavelist[Slave].mbx_cnt = cnt;
    SDOp->MbxHeader.mbxtype = ECT_MBXT_COE + MBX_HDR_SET_CNT(cnt); /* CoE */
-   SDOp->CANOpen = htoes(0x000 + (ECT_COES_SDOINFO << 12)); /* number 9bits service upper 4 bits */
-   SDOp->Opcode = ECT_GET_OE_REQ; /* get object entry description request */
+   SDOp->CANOpen = htoes(0x000 + (ECT_COES_SDOINFO << 12));       /* number 9bits service upper 4 bits */
+   SDOp->Opcode = ECT_GET_OE_REQ;                                 /* get object entry description request */
    SDOp->Reserved = 0;
-   SDOp->Fragments = 0;      /* fragments left */
-   SDOp->wdata[0] = htoes(Index);      /* Index */
-   SDOp->bdata[2] = SubI;       /* SubIndex */
-   SDOp->bdata[3] = 1 + 2 + 4; /* get access rights, object category, PDO */
+   SDOp->Fragments = 0;           /* fragments left */
+   SDOp->wdata[0] = htoes(Index); /* Index */
+   SDOp->bdata[2] = SubI;         /* SubIndex */
+   SDOp->bdata[3] = 1 + 2 + 4;    /* get access rights, object category, PDO */
    /* send get object entry description request to slave */
    wkc = ecx_mbxsend(context, Slave, MbxOut, EC_TIMEOUTTXM);
    MbxOut = NULL;
@@ -1303,9 +1310,9 @@ int ecx_readOEsingle(ecx_contextt *context, uint16 Item, uint8 SubI, ec_ODlistt
       /* got response ? */
       if (wkc > 0)
       {
-         aSDOp = (ec_SDOservicet*)MbxIn;
+         aSDOp = (ec_SDOservicet *)MbxIn;
          if (((aSDOp->MbxHeader.mbxtype & 0x0f) == ECT_MBXT_COE) &&
-             ((aSDOp->Opcode &  0x7f) == ECT_GET_OE_RES))
+             ((aSDOp->Opcode & 0x7f) == ECT_GET_OE_RES))
          {
             pOElist->Entries++;
             n = (etohs(aSDOp->MbxHeader.length) - 16); /* length of string(name of object) */
@@ -1313,7 +1320,7 @@ int ecx_readOEsingle(ecx_contextt *context, uint16 Item, uint8 SubI, ec_ODlistt
             {
                n = EC_MAXNAME; /* max string length */
             }
-            if (n < 0 )
+            if (n < 0)
             {
                n = 0;
             }
@@ -1322,7 +1329,7 @@ int ecx_readOEsingle(ecx_contextt *context, uint16 Item, uint8 SubI, ec_ODlistt
             pOElist->BitLength[SubI] = etohs(aSDOp->wdata[3]);
             pOElist->ObjAccess[SubI] = etohs(aSDOp->wdata[4]);
 
-            memcpy(pOElist->Name[SubI] , (char *)&aSDOp->wdata[5], n);
+            memcpy(pOElist->Name[SubI], (char *)&aSDOp->wdata[5], n);
             pOElist->Name[SubI][n] = 0x00; /* string terminator */
          }
          /* got unexpected response from slave */
@@ -1340,8 +1347,8 @@ int ecx_readOEsingle(ecx_contextt *context, uint16 Item, uint8 SubI, ec_ODlistt
          }
       }
    }
-   if (MbxIn) ecx_dropmbx(context, MbxIn);  
-   if (MbxOut) ecx_dropmbx(context, MbxOut);  
+   if (MbxIn) ecx_dropmbx(context, MbxIn);
+   if (MbxOut) ecx_dropmbx(context, MbxOut);
    return wkc;
 }
 
index b091e2b8468941c115d5ea3fcd66e9f0c4d0b1bd..cb32d49f9d050d8cdebc19625f3b92ad78908db3 100644 (file)
@@ -18,7 +18,6 @@
 #include "osal.h"
 #include "oshw.h"
 
-
 typedef struct
 {
    int thread_n;
@@ -33,11 +32,11 @@ OSAL_THREAD_HANDLE ecx_threadh[EC_MAX_MAPT];
 #endif
 
 /** standard SM0 flags configuration for mailbox slaves */
-#define EC_DEFAULTMBXSM0  0x00010026
+#define EC_DEFAULTMBXSM0 0x00010026
 /** standard SM1 flags configuration for mailbox slaves */
-#define EC_DEFAULTMBXSM1  0x00010022
+#define EC_DEFAULTMBXSM1 0x00010022
 /** standard SM0 flags configuration for digital output slaves */
-#define EC_DEFAULTDOSM0   0x00010044
+#define EC_DEFAULTDOSM0  0x00010044
 
 void ecx_init_context(ecx_contextt *context)
 {
@@ -48,7 +47,7 @@ void ecx_init_context(ecx_contextt *context)
    memset(context->grouplist, 0x00, sizeof(ec_groupt) * context->maxgroup);
    /* clear slave eeprom cache, does not actually read any eeprom */
    ecx_siigetbyte(context, 0, EC_MAXEEPBUF);
-   for(lp = 0; lp < context->maxgroup; lp++)
+   for (lp = 0; lp < context->maxgroup; lp++)
    {
       /* default start address per group entry */
       context->grouplist[lp].logstartaddr = lp << EC_LOGGROUPOFFSET;
@@ -58,19 +57,19 @@ void ecx_init_context(ecx_contextt *context)
 
 int ecx_detect_slaves(ecx_contextt *context)
 {
-   uint8  b;
+   uint8 b;
    uint16 w;
-   int    wkc;
+   int wkc;
 
    /* make special pre-init register writes to enable MAC[1] local administered bit *
     * setting for old netX100 slaves */
    b = 0x00;
-   ecx_BWR(context->port, 0x0000, ECT_REG_DLALIAS, sizeof(b), &b, EC_TIMEOUTRET3);     /* Ignore Alias register */
+   ecx_BWR(context->port, 0x0000, ECT_REG_DLALIAS, sizeof(b), &b, EC_TIMEOUTRET3); /* Ignore Alias register */
    w = htoes(EC_STATE_INIT | EC_STATE_ACK);
-   ecx_BWR(context->port, 0x0000, ECT_REG_ALCTL, sizeof(w), &w, EC_TIMEOUTRET3);       /* Reset all slaves to Init */
+   ecx_BWR(context->port, 0x0000, ECT_REG_ALCTL, sizeof(w), &w, EC_TIMEOUTRET3); /* Reset all slaves to Init */
    /* netX100 should now be happy */
-   ecx_BWR(context->port, 0x0000, ECT_REG_ALCTL, sizeof(w), &w, EC_TIMEOUTRET3);       /* Reset all slaves to Init */
-   wkc = ecx_BRD(context->port, 0x0000, ECT_REG_TYPE, sizeof(w), &w, EC_TIMEOUTSAFE);  /* detect number of slaves */
+   ecx_BWR(context->port, 0x0000, ECT_REG_ALCTL, sizeof(w), &w, EC_TIMEOUTRET3);      /* Reset all slaves to Init */
+   wkc = ecx_BRD(context->port, 0x0000, ECT_REG_TYPE, sizeof(w), &w, EC_TIMEOUTSAFE); /* detect number of slaves */
    if (wkc > 0)
    {
       /* this is strictly "less than" since the master is "slave 0" */
@@ -81,7 +80,7 @@ int ecx_detect_slaves(ecx_contextt *context)
       else
       {
          EC_PRINT("Error: too many slaves on network: num_slaves=%d, max_slaves=%d\n",
-               wkc, context->maxslave);
+                  wkc, context->maxslave);
          return EC_SLAVECOUNTEXCEEDED;
       }
    }
@@ -95,27 +94,27 @@ static void ecx_set_slaves_to_default(ecx_contextt *context)
    uint8 zbuf[64];
    memset(&zbuf, 0x00, sizeof(zbuf));
    b = 0x00;
-   ecx_BWR(context->port, 0x0000, ECT_REG_DLPORT      , sizeof(b) , &b, EC_TIMEOUTRET3);     /* deact loop manual */
+   ecx_BWR(context->port, 0x0000, ECT_REG_DLPORT, sizeof(b), &b, EC_TIMEOUTRET3); /* deact loop manual */
    w = htoes(0x0004);
-   ecx_BWR(context->port, 0x0000, ECT_REG_IRQMASK     , sizeof(w) , &w, EC_TIMEOUTRET3);     /* set IRQ mask */
-   ecx_BWR(context->port, 0x0000, ECT_REG_RXERR       , 8         , &zbuf, EC_TIMEOUTRET3);  /* reset CRC counters */
-   ecx_BWR(context->port, 0x0000, ECT_REG_FMMU0       , 16 * 3    , &zbuf, EC_TIMEOUTRET3);  /* reset FMMU's */
-   ecx_BWR(context->port, 0x0000, ECT_REG_SM0         , 8 * 4     , &zbuf, EC_TIMEOUTRET3);  /* reset SyncM */
+   ecx_BWR(context->port, 0x0000, ECT_REG_IRQMASK, sizeof(w), &w, EC_TIMEOUTRET3); /* set IRQ mask */
+   ecx_BWR(context->port, 0x0000, ECT_REG_RXERR, 8, &zbuf, EC_TIMEOUTRET3);        /* reset CRC counters */
+   ecx_BWR(context->port, 0x0000, ECT_REG_FMMU0, 16 * 3, &zbuf, EC_TIMEOUTRET3);   /* reset FMMU's */
+   ecx_BWR(context->port, 0x0000, ECT_REG_SM0, 8 * 4, &zbuf, EC_TIMEOUTRET3);      /* reset SyncM */
    b = 0x00;
-   ecx_BWR(context->port, 0x0000, ECT_REG_DCSYNCACT   , sizeof(b) , &b, EC_TIMEOUTRET3);     /* reset activation register */
-   ecx_BWR(context->port, 0x0000, ECT_REG_DCSYSTIME   , 4         , &zbuf, EC_TIMEOUTRET3);  /* reset system time+ofs */
+   ecx_BWR(context->port, 0x0000, ECT_REG_DCSYNCACT, sizeof(b), &b, EC_TIMEOUTRET3); /* reset activation register */
+   ecx_BWR(context->port, 0x0000, ECT_REG_DCSYSTIME, 4, &zbuf, EC_TIMEOUTRET3);      /* reset system time+ofs */
    w = htoes(0x1000);
-   ecx_BWR(context->port, 0x0000, ECT_REG_DCSPEEDCNT  , sizeof(w) , &w, EC_TIMEOUTRET3);     /* DC speedstart */
+   ecx_BWR(context->port, 0x0000, ECT_REG_DCSPEEDCNT, sizeof(w), &w, EC_TIMEOUTRET3); /* DC speedstart */
    w = htoes(0x0c00);
-   ecx_BWR(context->port, 0x0000, ECT_REG_DCTIMEFILT  , sizeof(w) , &w, EC_TIMEOUTRET3);     /* DC filt expr */
+   ecx_BWR(context->port, 0x0000, ECT_REG_DCTIMEFILT, sizeof(w), &w, EC_TIMEOUTRET3); /* DC filt expr */
    b = 0x00;
-   ecx_BWR(context->port, 0x0000, ECT_REG_DLALIAS     , sizeof(b) , &b, EC_TIMEOUTRET3);     /* Ignore Alias register */
+   ecx_BWR(context->port, 0x0000, ECT_REG_DLALIAS, sizeof(b), &b, EC_TIMEOUTRET3); /* Ignore Alias register */
    w = htoes(EC_STATE_INIT | EC_STATE_ACK);
-   ecx_BWR(context->port, 0x0000, ECT_REG_ALCTL       , sizeof(w) , &w, EC_TIMEOUTRET3);     /* Reset all slaves to Init */
+   ecx_BWR(context->port, 0x0000, ECT_REG_ALCTL, sizeof(w), &w, EC_TIMEOUTRET3); /* Reset all slaves to Init */
    b = 2;
-   ecx_BWR(context->port, 0x0000, ECT_REG_EEPCFG      , sizeof(b) , &b, EC_TIMEOUTRET3);     /* force Eeprom from PDI */
+   ecx_BWR(context->port, 0x0000, ECT_REG_EEPCFG, sizeof(b), &b, EC_TIMEOUTRET3); /* force Eeprom from PDI */
    b = 0;
-   ecx_BWR(context->port, 0x0000, ECT_REG_EEPCFG      , sizeof(b) , &b, EC_TIMEOUTRET3);     /* set Eeprom to master */
+   ecx_BWR(context->port, 0x0000, ECT_REG_EEPCFG, sizeof(b), &b, EC_TIMEOUTRET3); /* set Eeprom to master */
 }
 
 static int ecx_config_from_table(ecx_contextt *context, uint16 slave)
@@ -134,20 +133,20 @@ static int ecx_lookup_prev_sii(ecx_contextt *context, uint16 slave)
    if ((slave > 1) && (*(context->slavecount) > 0))
    {
       i = 1;
-      while(((context->slavelist[i].eep_man != context->slavelist[slave].eep_man) ||
-             (context->slavelist[i].eep_id  != context->slavelist[slave].eep_id ) ||
-             (context->slavelist[i].eep_rev != context->slavelist[slave].eep_rev)) &&
-            (i < slave))
+      while (((context->slavelist[i].eep_man != context->slavelist[slave].eep_man) ||
+              (context->slavelist[i].eep_id != context->slavelist[slave].eep_id) ||
+              (context->slavelist[i].eep_rev != context->slavelist[slave].eep_rev)) &&
+             (i < slave))
       {
          i++;
       }
-      if(i < slave)
+      if (i < slave)
       {
          context->slavelist[slave].CoEdetails = context->slavelist[i].CoEdetails;
          context->slavelist[slave].FoEdetails = context->slavelist[i].FoEdetails;
          context->slavelist[slave].EoEdetails = context->slavelist[i].EoEdetails;
          context->slavelist[slave].SoEdetails = context->slavelist[i].SoEdetails;
-         if(context->slavelist[i].blockLRW > 0)
+         if (context->slavelist[i].blockLRW > 0)
          {
             context->slavelist[slave].blockLRW = 1;
             context->slavelist[0].blockLRW++;
@@ -155,11 +154,11 @@ static int ecx_lookup_prev_sii(ecx_contextt *context, uint16 slave)
          context->slavelist[slave].Ebuscurrent = context->slavelist[i].Ebuscurrent;
          context->slavelist[0].Ebuscurrent += context->slavelist[slave].Ebuscurrent;
          memcpy(context->slavelist[slave].name, context->slavelist[i].name, EC_MAXNAME + 1);
-         for( nSM=0 ; nSM < EC_MAXSM ; nSM++ )
+         for (nSM = 0; nSM < EC_MAXSM; nSM++)
          {
             context->slavelist[slave].SM[nSM].StartAddr = context->slavelist[i].SM[nSM].StartAddr;
-            context->slavelist[slave].SM[nSM].SMlength  = context->slavelist[i].SM[nSM].SMlength;
-            context->slavelist[slave].SM[nSM].SMflags   = context->slavelist[i].SM[nSM].SMflags;
+            context->slavelist[slave].SM[nSM].SMlength = context->slavelist[i].SM[nSM].SMlength;
+            context->slavelist[slave].SM[nSM].SMflags = context->slavelist[i].SM[nSM].SMflags;
          }
          context->slavelist[slave].FMMU0func = context->slavelist[i].FMMU0func;
          context->slavelist[slave].FMMU1func = context->slavelist[i].FMMU1func;
@@ -183,13 +182,13 @@ int ecx_config_init(ecx_contextt *context, uint8 usetable)
    uint16 slave, ADPh, configadr, ssigen;
    uint16 topology, estat;
    int16 topoc, slavec, aliasadr;
-   uint8 b,h;
+   uint8 b, h;
    uint8 SMc;
    uint32 eedat;
    int wkc, cindex, nSM;
    uint16 val16;
 
-   EC_PRINT("ec_config_init %d\n",usetable);
+   EC_PRINT("ec_config_init %d\n", usetable);
    ecx_init_context(context);
    wkc = ecx_detect_slaves(context);
    if (wkc > 0)
@@ -202,7 +201,7 @@ int ecx_config_init(ecx_contextt *context, uint8 usetable)
          context->slavelist[slave].Itype = etohs(val16);
          /* a node offset is used to improve readability of network frames */
          /* this has no impact on the number of addressable slaves (auto wrap around) */
-         ecx_APWRw(context->port, ADPh, ECT_REG_STADR, htoes(slave + EC_NODEOFFSET) , EC_TIMEOUTRET3); /* set node address of slave */
+         ecx_APWRw(context->port, ADPh, ECT_REG_STADR, htoes(slave + EC_NODEOFFSET), EC_TIMEOUTRET3); /* set node address of slave */
          if (slave == 1)
          {
             b = 1; /* kill non ecat frames for first slave */
@@ -263,7 +262,7 @@ int ecx_config_init(ecx_contextt *context, uint8 usetable)
       {
          if (context->slavelist[slave].mbx_l > 0)
          {
-            eedat = ecx_readeeprom2(context, slave, EC_TIMEOUTEEP); /* read mailbox offset */
+            eedat = ecx_readeeprom2(context, slave, EC_TIMEOUTEEP);           /* read mailbox offset */
             context->slavelist[slave].mbx_ro = (uint16)LO_WORD(etohl(eedat)); /* read mailbox offset */
             context->slavelist[slave].mbx_rl = (uint16)HI_WORD(etohl(eedat)); /*read mailbox length */
             if (context->slavelist[slave].mbx_rl == 0)
@@ -274,7 +273,7 @@ int ecx_config_init(ecx_contextt *context, uint8 usetable)
          }
          configadr = context->slavelist[slave].configadr;
          val16 = ecx_FPRDw(context->port, configadr, ECT_REG_ESCSUP, EC_TIMEOUTRET3);
-         if ((etohs(val16) & 0x04) > 0)  /* Support DC? */
+         if ((etohs(val16) & 0x04) > 0) /* Support DC? */
          {
             context->slavelist[slave].hasdc = TRUE;
          }
@@ -344,13 +343,12 @@ int ecx_config_init(ecx_contextt *context, uint8 usetable)
                   slavec = 1;
                }
                slavec--;
-            }
-            while (slavec > 0);
+            } while (slavec > 0);
          }
-         (void)ecx_statecheck(context, slave, EC_STATE_INIT,  EC_TIMEOUTSTATE); //* check state change Init */
+         (void)ecx_statecheck(context, slave, EC_STATE_INIT, EC_TIMEOUTSTATE); //* check state change Init */
 
          /* set default mailbox configuration if slave has mailbox */
-         if (context->slavelist[slave].mbx_l>0)
+         if (context->slavelist[slave].mbx_l > 0)
          {
             context->slavelist[slave].SMtype[0] = 1;
             context->slavelist[slave].SMtype[1] = 2;
@@ -382,7 +380,7 @@ int ecx_config_init(ecx_contextt *context, uint8 usetable)
                context->slavelist[slave].FoEdetails = ecx_siigetbyte(context, slave, ssigen + 0x08);
                context->slavelist[slave].EoEdetails = ecx_siigetbyte(context, slave, ssigen + 0x09);
                context->slavelist[slave].SoEdetails = ecx_siigetbyte(context, slave, ssigen + 0x0a);
-               if((ecx_siigetbyte(context, slave, ssigen + 0x0d) & 0x02) > 0)
+               if ((ecx_siigetbyte(context, slave, ssigen + 0x0d) & 0x02) > 0)
                {
                   context->slavelist[slave].blockLRW = 1;
                   context->slavelist[0].blockLRW++;
@@ -405,38 +403,38 @@ int ecx_config_init(ecx_contextt *context, uint8 usetable)
             }
             /* SII SM section */
             nSM = ecx_siiSM(context, slave, context->eepSM);
-            if (nSM>0)
+            if (nSM > 0)
             {
                context->slavelist[slave].SM[0].StartAddr = htoes(context->eepSM->PhStart);
                context->slavelist[slave].SM[0].SMlength = htoes(context->eepSM->Plength);
                context->slavelist[slave].SM[0].SMflags =
-                  htoel((context->eepSM->Creg) + (context->eepSM->Activate << 16));
+                   htoel((context->eepSM->Creg) + (context->eepSM->Activate << 16));
                SMc = 1;
-               while ((SMc < EC_MAXSM) &&  ecx_siiSMnext(context, slave, context->eepSM, SMc))
+               while ((SMc < EC_MAXSM) && ecx_siiSMnext(context, slave, context->eepSM, SMc))
                {
                   context->slavelist[slave].SM[SMc].StartAddr = htoes(context->eepSM->PhStart);
                   context->slavelist[slave].SM[SMc].SMlength = htoes(context->eepSM->Plength);
                   context->slavelist[slave].SM[SMc].SMflags =
-                     htoel((context->eepSM->Creg) + (context->eepSM->Activate << 16));
+                      htoel((context->eepSM->Creg) + (context->eepSM->Activate << 16));
                   SMc++;
                }
             }
             /* SII FMMU section */
             if (ecx_siiFMMU(context, slave, context->eepFMMU))
             {
-               if (context->eepFMMU->FMMU0 !=0xff)
+               if (context->eepFMMU->FMMU0 != 0xff)
                {
                   context->slavelist[slave].FMMU0func = context->eepFMMU->FMMU0;
                }
-               if (context->eepFMMU->FMMU1 !=0xff)
+               if (context->eepFMMU->FMMU1 != 0xff)
                {
                   context->slavelist[slave].FMMU1func = context->eepFMMU->FMMU1;
                }
-               if (context->eepFMMU->FMMU2 !=0xff)
+               if (context->eepFMMU->FMMU2 != 0xff)
                {
                   context->slavelist[slave].FMMU2func = context->eepFMMU->FMMU2;
                }
-               if (context->eepFMMU->FMMU3 !=0xff)
+               if (context->eepFMMU->FMMU3 != 0xff)
                {
                   context->slavelist[slave].FMMU3func = context->eepFMMU->FMMU3;
                }
@@ -464,7 +462,7 @@ int ecx_config_init(ecx_contextt *context, uint8 usetable)
             /* program SM0 mailbox in and SM1 mailbox out for slave */
             /* writing both SM in one datagram will solve timing issue in old NETX */
             ecx_FPWR(context->port, configadr, ECT_REG_SM0, sizeof(ec_smt) * 2,
-               &(context->slavelist[slave].SM[0]), EC_TIMEOUTRET3);
+                     &(context->slavelist[slave].SM[0]), EC_TIMEOUTRET3);
          }
          /* some slaves need eeprom available to PDI in init->preop transition */
          ecx_eeprom2pdi(context, slave);
@@ -473,10 +471,10 @@ int ecx_config_init(ecx_contextt *context, uint8 usetable)
          {
             /* request pre_op for slave */
             ecx_FPWRw(context->port,
-               configadr,
-               ECT_REG_ALCTL,
-               htoes(EC_STATE_PRE_OP | EC_STATE_ACK),
-               EC_TIMEOUTRET3); /* set preop status */
+                      configadr,
+                      ECT_REG_ALCTL,
+                      htoes(EC_STATE_PRE_OP | EC_STATE_ACK),
+                      EC_TIMEOUTRET3); /* set preop status */
          }
       }
    }
@@ -492,16 +490,16 @@ static int ecx_lookup_mapping(ecx_contextt *context, uint16 slave, uint32 *Osize
    if ((slave > 1) && (*(context->slavecount) > 0))
    {
       i = 1;
-      while(((context->slavelist[i].eep_man != context->slavelist[slave].eep_man) ||
-             (context->slavelist[i].eep_id  != context->slavelist[slave].eep_id ) ||
-             (context->slavelist[i].eep_rev != context->slavelist[slave].eep_rev)) &&
-            (i < slave))
+      while (((context->slavelist[i].eep_man != context->slavelist[slave].eep_man) ||
+              (context->slavelist[i].eep_id != context->slavelist[slave].eep_id) ||
+              (context->slavelist[i].eep_rev != context->slavelist[slave].eep_rev)) &&
+             (i < slave))
       {
          i++;
       }
-      if(i < slave)
+      if (i < slave)
       {
-         for( nSM=0 ; nSM < EC_MAXSM ; nSM++ )
+         for (nSM = 0; nSM < EC_MAXSM; nSM++)
          {
             context->slavelist[slave].SM[nSM].SMlength = context->slavelist[i].SM[nSM].SMlength;
             context->slavelist[slave].SMtype[nSM] = context->slavelist[i].SMtype[nSM];
@@ -582,22 +580,22 @@ static int ecx_map_sii(ecx_contextt *context, uint16 slave)
       memset(&eepPDO, 0, sizeof(eepPDO));
       Isize = ecx_siiPDO(context, slave, &eepPDO, 0);
       EC_PRINT("  SII Isize:%u\n", Isize);
-      for( nSM=0 ; nSM < EC_MAXSM ; nSM++ )
+      for (nSM = 0; nSM < EC_MAXSM; nSM++)
       {
          if (eepPDO.SMbitsize[nSM] > 0)
          {
-            context->slavelist[slave].SM[nSM].SMlength =  htoes((eepPDO.SMbitsize[nSM] + 7) / 8);
+            context->slavelist[slave].SM[nSM].SMlength = htoes((eepPDO.SMbitsize[nSM] + 7) / 8);
             context->slavelist[slave].SMtype[nSM] = 4;
             EC_PRINT("    SM%d length %d\n", nSM, eepPDO.SMbitsize[nSM]);
          }
       }
       Osize = ecx_siiPDO(context, slave, &eepPDO, 1);
       EC_PRINT("  SII Osize:%u\n", Osize);
-      for( nSM=0 ; nSM < EC_MAXSM ; nSM++ )
+      for (nSM = 0; nSM < EC_MAXSM; nSM++)
       {
          if (eepPDO.SMbitsize[nSM] > 0)
          {
-            context->slavelist[slave].SM[nSM].SMlength =  htoes((eepPDO.SMbitsize[nSM] + 7) / 8);
+            context->slavelist[slave].SM[nSM].SMlength = htoes((eepPDO.SMbitsize[nSM] + 7) / 8);
             context->slavelist[slave].SMtype[nSM] = 3;
             EC_PRINT("    SM%d length %d\n", nSM, eepPDO.SMbitsize[nSM]);
          }
@@ -606,7 +604,7 @@ static int ecx_map_sii(ecx_contextt *context, uint16 slave)
    context->slavelist[slave].Obits = (uint16)Osize;
    context->slavelist[slave].Ibits = (uint16)Isize;
    EC_PRINT("     ISIZE:%d %d OSIZE:%d\n",
-      context->slavelist[slave].Ibits, Isize,context->slavelist[slave].Obits);
+            context->slavelist[slave].Ibits, Isize, context->slavelist[slave].Obits);
 
    return 1;
 }
@@ -622,44 +620,44 @@ static int ecx_map_sm(ecx_contextt *context, uint16 slave)
    if (!context->slavelist[slave].mbx_l && context->slavelist[slave].SM[0].StartAddr)
    {
       ecx_FPWR(context->port, configadr, ECT_REG_SM0,
-         sizeof(ec_smt), &(context->slavelist[slave].SM[0]), EC_TIMEOUTRET3);
+               sizeof(ec_smt), &(context->slavelist[slave].SM[0]), EC_TIMEOUTRET3);
       EC_PRINT("    SM0 Type:%d StartAddr:%4.4x Flags:%8.8x\n",
-          context->slavelist[slave].SMtype[0],
-          etohs(context->slavelist[slave].SM[0].StartAddr),
-          etohl(context->slavelist[slave].SM[0].SMflags));
+               context->slavelist[slave].SMtype[0],
+               etohs(context->slavelist[slave].SM[0].StartAddr),
+               etohl(context->slavelist[slave].SM[0].SMflags));
    }
    if (!context->slavelist[slave].mbx_l && context->slavelist[slave].SM[1].StartAddr)
    {
       ecx_FPWR(context->port, configadr, ECT_REG_SM1,
-         sizeof(ec_smt), &context->slavelist[slave].SM[1], EC_TIMEOUTRET3);
+               sizeof(ec_smt), &context->slavelist[slave].SM[1], EC_TIMEOUTRET3);
       EC_PRINT("    SM1 Type:%d StartAddr:%4.4x Flags:%8.8x\n",
-          context->slavelist[slave].SMtype[1],
-          etohs(context->slavelist[slave].SM[1].StartAddr),
-          etohl(context->slavelist[slave].SM[1].SMflags));
+               context->slavelist[slave].SMtype[1],
+               etohs(context->slavelist[slave].SM[1].StartAddr),
+               etohl(context->slavelist[slave].SM[1].SMflags));
    }
    /* program SM2 to SMx */
-   for( nSM = 2 ; nSM < EC_MAXSM ; nSM++ )
+   for (nSM = 2; nSM < EC_MAXSM; nSM++)
    {
       if (context->slavelist[slave].SM[nSM].StartAddr)
       {
          /* check if SM length is zero -> clear enable flag */
-         ifcontext->slavelist[slave].SM[nSM].SMlength == 0)
+         if (context->slavelist[slave].SM[nSM].SMlength == 0)
          {
             context->slavelist[slave].SM[nSM].SMflags =
-               htoel( etohl(context->slavelist[slave].SM[nSM].SMflags) & EC_SMENABLEMASK);
+                htoel(etohl(context->slavelist[slave].SM[nSM].SMflags) & EC_SMENABLEMASK);
          }
          /* if SM length is non zero always set enable flag */
          else
          {
             context->slavelist[slave].SM[nSM].SMflags =
-               htoel( etohl(context->slavelist[slave].SM[nSM].SMflags) | ~EC_SMENABLEMASK);
+                htoel(etohl(context->slavelist[slave].SM[nSM].SMflags) | ~EC_SMENABLEMASK);
          }
          ecx_FPWR(context->port, configadr, (uint16)(ECT_REG_SM0 + (nSM * sizeof(ec_smt))),
-            sizeof(ec_smt), &context->slavelist[slave].SM[nSM], EC_TIMEOUTRET3);
+                  sizeof(ec_smt), &context->slavelist[slave].SM[nSM], EC_TIMEOUTRET3);
          EC_PRINT("    SM%d Type:%d StartAddr:%4.4x Flags:%8.8x\n", nSM,
-             context->slavelist[slave].SMtype[nSM],
-             etohs(context->slavelist[slave].SM[nSM].StartAddr),
-             etohl(context->slavelist[slave].SM[nSM].SMflags));
+                  context->slavelist[slave].SMtype[nSM],
+                  etohs(context->slavelist[slave].SM[nSM].StartAddr),
+                  etohl(context->slavelist[slave].SM[nSM].SMflags));
       }
    }
    if (context->slavelist[slave].Ibits > 7)
@@ -687,11 +685,11 @@ static int ecx_find_mapt(void)
 {
    int p;
    p = 0;
-   while((p < EC_MAX_MAPT) && ecx_mapt[p].running)
+   while ((p < EC_MAX_MAPT) && ecx_mapt[p].running)
    {
       p++;
    }
-   if(p < EC_MAX_MAPT)
+   if (p < EC_MAX_MAPT)
    {
       return p;
    }
@@ -706,7 +704,7 @@ static int ecx_get_threadcount(void)
 {
    int thrc, thrn;
    thrc = 0;
-   for(thrn = 0 ; thrn < EC_MAX_MAPT ; thrn++)
+   for (thrn = 0; thrn < EC_MAX_MAPT; thrn++)
    {
       thrc += ecx_mapt[thrn].running;
    }
@@ -728,20 +726,20 @@ static void ecx_config_find_mappings(ecx_contextt *context, uint8 group)
       if (!group || (group == context->slavelist[slave].group))
       {
 #if EC_MAX_MAPT > 1
-            /* multi-threaded version */
-            while ((thrn = ecx_find_mapt()) < 0)
-            {
-               osal_usleep(1000);
-            }
-            ecx_mapt[thrn].context = context;
-            ecx_mapt[thrn].slave = slave;
-            ecx_mapt[thrn].thread_n = thrn;
-            ecx_mapt[thrn].running = 1;
-            osal_thread_create(&(ecx_threadh[thrn]), 128000,
-               &ecx_mapper_thread, &(ecx_mapt[thrn]));
+         /* multi-threaded version */
+         while ((thrn = ecx_find_mapt()) < 0)
+         {
+            osal_usleep(1000);
+         }
+         ecx_mapt[thrn].context = context;
+         ecx_mapt[thrn].slave = slave;
+         ecx_mapt[thrn].thread_n = thrn;
+         ecx_mapt[thrn].running = 1;
+         osal_thread_create(&(ecx_threadh[thrn]), 128000,
+                            &ecx_mapper_thread, &(ecx_mapt[thrn]));
 #else
-            /* serialised version */
-            ecx_map_coe_soe(context, slave, 0);
+         /* serialised version */
+         ecx_map_coe_soe(context, slave, 0);
 #endif
       }
    }
@@ -766,7 +764,7 @@ static void ecx_config_find_mappings(ecx_contextt *context, uint8 group)
 }
 
 static void ecx_config_create_input_mappings(ecx_contextt *context, void *pIOmap,
-   uint8 group, int16 slave, uint32 * LogAddr, uint8 * BitPos)
+                                             uint8 group, int16 slave, uint32 *LogAddr, uint8 *BitPos)
 {
    int BitCount = 0;
    int FMMUdone = 0;
@@ -799,7 +797,7 @@ static void ecx_config_create_input_mappings(ecx_contextt *context, void *pIOmap
       }
       EC_PRINT("      SM%d\n", SMc);
       context->slavelist[slave].FMMU[FMMUc].PhysStart =
-         context->slavelist[slave].SM[SMc].StartAddr;
+          context->slavelist[slave].SM[SMc].StartAddr;
       SMlength = etohs(context->slavelist[slave].SM[SMc].SMlength);
       ByteCount += SMlength;
       BitCount += SMlength * 8;
@@ -856,7 +854,7 @@ static void ecx_config_create_input_mappings(ecx_contextt *context, void *pIOmap
          context->slavelist[slave].FMMU[FMMUc].LogStartbit = *BitPos;
          *BitPos = 7;
          FMMUsize = ByteCount;
-         if ((FMMUsize + FMMUdone)> (int)context->slavelist[slave].Ibytes)
+         if ((FMMUsize + FMMUdone) > (int)context->slavelist[slave].Ibytes)
          {
             FMMUsize = (uint16)(context->slavelist[slave].Ibytes - FMMUdone);
          }
@@ -873,28 +871,28 @@ static void ecx_config_create_input_mappings(ecx_contextt *context, void *pIOmap
          context->slavelist[slave].FMMU[FMMUc].FMMUactive = 1;
          /* program FMMU for input */
          ecx_FPWR(context->port, configadr, ECT_REG_FMMU0 + (sizeof(ec_fmmut) * FMMUc),
-            sizeof(ec_fmmut), &(context->slavelist[slave].FMMU[FMMUc]), EC_TIMEOUTRET3);
+                  sizeof(ec_fmmut), &(context->slavelist[slave].FMMU[FMMUc]), EC_TIMEOUTRET3);
       }
       if (!context->slavelist[slave].inputs)
       {
          if (group)
          {
             context->slavelist[slave].inputs =
-               (uint8 *)(pIOmap) +
-               etohl(context->slavelist[slave].FMMU[FMMUc].LogStart) -
-               context->grouplist[group].logstartaddr;
+                (uint8 *)(pIOmap) +
+                etohl(context->slavelist[slave].FMMU[FMMUc].LogStart) -
+                context->grouplist[group].logstartaddr;
          }
          else
          {
             context->slavelist[slave].inputs =
-               (uint8 *)(pIOmap) +
-               etohl(context->slavelist[slave].FMMU[FMMUc].LogStart);
+                (uint8 *)(pIOmap) +
+                etohl(context->slavelist[slave].FMMU[FMMUc].LogStart);
          }
          context->slavelist[slave].Istartbit =
-            context->slavelist[slave].FMMU[FMMUc].LogStartbit;
+             context->slavelist[slave].FMMU[FMMUc].LogStartbit;
          EC_PRINT("    Inputs %p startbit %d\n",
-            context->slavelist[slave].inputs,
-            context->slavelist[slave].Istartbit);
+                  context->slavelist[slave].inputs,
+                  context->slavelist[slave].Istartbit);
       }
       FMMUc++;
    }
@@ -902,7 +900,7 @@ static void ecx_config_create_input_mappings(ecx_contextt *context, void *pIOmap
 }
 
 static void ecx_config_create_output_mappings(ecx_contextt *context, void *pIOmap,
-   uint8 group, int16 slave, uint32 * LogAddr, uint8 * BitPos)
+                                              uint8 group, int16 slave, uint32 *LogAddr, uint8 *BitPos)
 {
    int BitCount = 0;
    int FMMUdone = 0;
@@ -929,7 +927,7 @@ static void ecx_config_create_output_mappings(ecx_contextt *context, void *pIOma
       }
       EC_PRINT("      SM%d\n", SMc);
       context->slavelist[slave].FMMU[FMMUc].PhysStart =
-         context->slavelist[slave].SM[SMc].StartAddr;
+          context->slavelist[slave].SM[SMc].StartAddr;
       SMlength = etohs(context->slavelist[slave].SM[SMc].SMlength);
       ByteCount += SMlength;
       BitCount += SMlength * 8;
@@ -986,7 +984,7 @@ static void ecx_config_create_output_mappings(ecx_contextt *context, void *pIOma
          context->slavelist[slave].FMMU[FMMUc].LogStartbit = *BitPos;
          *BitPos = 7;
          FMMUsize = ByteCount;
-         if ((FMMUsize + FMMUdone)> (int)context->slavelist[slave].Obytes)
+         if ((FMMUsize + FMMUdone) > (int)context->slavelist[slave].Obytes)
          {
             FMMUsize = (uint16)(context->slavelist[slave].Obytes - FMMUdone);
          }
@@ -1003,29 +1001,29 @@ static void ecx_config_create_output_mappings(ecx_contextt *context, void *pIOma
          context->slavelist[slave].FMMU[FMMUc].FMMUactive = 1;
          /* program FMMU for output */
          ecx_FPWR(context->port, configadr, ECT_REG_FMMU0 + (sizeof(ec_fmmut) * FMMUc),
-            sizeof(ec_fmmut), &(context->slavelist[slave].FMMU[FMMUc]), EC_TIMEOUTRET3);
+                  sizeof(ec_fmmut), &(context->slavelist[slave].FMMU[FMMUc]), EC_TIMEOUTRET3);
       }
       if (!context->slavelist[slave].outputs)
       {
          if (group)
          {
             context->slavelist[slave].outputs =
-               (uint8 *)(pIOmap) +
-               etohl(context->slavelist[slave].FMMU[FMMUc].LogStart) -
-               context->grouplist[group].logstartaddr;
+                (uint8 *)(pIOmap) +
+                etohl(context->slavelist[slave].FMMU[FMMUc].LogStart) -
+                context->grouplist[group].logstartaddr;
          }
          else
          {
             context->slavelist[slave].outputs =
-               (uint8 *)(pIOmap) +
-               etohl(context->slavelist[slave].FMMU[FMMUc].LogStart);
+                (uint8 *)(pIOmap) +
+                etohl(context->slavelist[slave].FMMU[FMMUc].LogStart);
          }
          context->slavelist[slave].Ostartbit =
-            context->slavelist[slave].FMMU[FMMUc].LogStartbit;
+             context->slavelist[slave].FMMU[FMMUc].LogStartbit;
          EC_PRINT("    slave %d Outputs %p startbit %d\n",
-            slave,
-            context->slavelist[slave].outputs,
-            context->slavelist[slave].Ostartbit);
+                  slave,
+                  context->slavelist[slave].outputs,
+                  context->slavelist[slave].Ostartbit);
       }
       FMMUc++;
    }
@@ -1033,7 +1031,7 @@ static void ecx_config_create_output_mappings(ecx_contextt *context, void *pIOma
 }
 
 static void ecx_config_create_mbxstatus_mappings(ecx_contextt *context, void *pIOmap,
-   uint8 group, int16 slave, uint32 * LogAddr)
+                                                 uint8 group, int16 slave, uint32 *LogAddr)
 {
    uint16 FMMUsize = 1;
    uint16 configadr;
@@ -1051,13 +1049,13 @@ static void ecx_config_create_mbxstatus_mappings(ecx_contextt *context, void *pI
       *LogAddr += FMMUsize;
       context->slavelist[slave].FMMU[FMMUc].LogLength = htoes(FMMUsize);
       context->slavelist[slave].FMMU[FMMUc].LogEndbit = 7;
-      context->slavelist[slave].FMMU[FMMUc].PhysStart  = ECT_REG_SM1STAT;
+      context->slavelist[slave].FMMU[FMMUc].PhysStart = ECT_REG_SM1STAT;
       context->slavelist[slave].FMMU[FMMUc].PhysStartBit = 0;
       context->slavelist[slave].FMMU[FMMUc].FMMUtype = 1;
       context->slavelist[slave].FMMU[FMMUc].FMMUactive = 1;
       /* program FMMU for input */
       ecx_FPWR(context->port, configadr, ECT_REG_FMMU0 + (sizeof(ec_fmmut) * FMMUc),
-         sizeof(ec_fmmut), &(context->slavelist[slave].FMMU[FMMUc]), EC_TIMEOUTRET3);
+               sizeof(ec_fmmut), &(context->slavelist[slave].FMMU[FMMUc]), EC_TIMEOUTRET3);
 
       position = etohl(context->slavelist[slave].FMMU[FMMUc].LogStart);
       context->slavelist[slave].mbxstatus = (uint8 *)(pIOmap) + position;
@@ -1065,7 +1063,7 @@ static void ecx_config_create_mbxstatus_mappings(ecx_contextt *context, void *pI
       context->grouplist[group].mbxstatuslength++;
       FMMUc++;
       /* account for MBXSTATUS wkc increment */
-      if(!context->slavelist[slave].Ibytes)
+      if (!context->slavelist[slave].Ibytes)
          context->grouplist[group].inputsWKC++;
    }
    context->slavelist[slave].FMMUunused = FMMUc;
@@ -1105,7 +1103,7 @@ static int ecx_main_config_map_group(ecx_contextt *context, void *pIOmap, uint8
             /* create output mapping */
             if (context->slavelist[slave].Obits)
             {
-               ecx_config_create_output_mappings (context, pIOmap, group, slave, &LogAddr, &BitPos);
+               ecx_config_create_output_mappings(context, pIOmap, group, slave, &LogAddr, &BitPos);
 
                if (forceByteAlignment)
                {
@@ -1162,7 +1160,7 @@ static int ecx_main_config_map_group(ecx_contextt *context, void *pIOmap, uint8
       {
          context->slavelist[0].outputs = pIOmap;
          context->slavelist[0].Obytes = LogAddr -
-            context->grouplist[group].logstartaddr; /* store output bytes in master record */
+                                        context->grouplist[group].logstartaddr; /* store output bytes in master record */
       }
 
       /* do input mapping of slave and program FMMUs */
@@ -1226,8 +1224,8 @@ static int ecx_main_config_map_group(ecx_contextt *context, void *pIOmap, uint8
       context->grouplist[group].nsegments = currentsegment + 1;
       context->grouplist[group].inputs = (uint8 *)(pIOmap) + context->grouplist[group].Obytes;
       context->grouplist[group].Ibytes = LogAddr -
-         context->grouplist[group].logstartaddr -
-         context->grouplist[group].Obytes;
+                                         context->grouplist[group].logstartaddr -
+                                         context->grouplist[group].Obytes;
 
       /* do mbxstatus mapping of slave and program FMMUs */
       for (slave = 1; slave <= *(context->slavecount); slave++)
@@ -1240,16 +1238,16 @@ static int ecx_main_config_map_group(ecx_contextt *context, void *pIOmap, uint8
             oLogAddr = LogAddr;
             if ((segmentsize + diff) > (EC_MAXLRWDATA - EC_FIRSTDCDATAGRAM))
             {
-                  context->grouplist[group].IOsegment[currentsegment] = segmentsize;
-                  if (currentsegment < (EC_MAXIOSEGMENTS - 1))
-                  {
-                        currentsegment++;
-                        segmentsize = diff;
-                  }
+               context->grouplist[group].IOsegment[currentsegment] = segmentsize;
+               if (currentsegment < (EC_MAXIOSEGMENTS - 1))
+               {
+                  currentsegment++;
+                  segmentsize = diff;
+               }
             }
             else
             {
-                  segmentsize += diff;
+               segmentsize += diff;
             }
          }
       }
@@ -1262,12 +1260,11 @@ static int ecx_main_config_map_group(ecx_contextt *context, void *pIOmap, uint8
       {
          context->slavelist[0].inputs = (uint8 *)(pIOmap) + context->slavelist[0].Obytes;
          context->slavelist[0].Ibytes = LogAddr -
-            context->grouplist[group].logstartaddr -
-            context->slavelist[0].Obytes; /* store input bytes in master record */
+                                        context->grouplist[group].logstartaddr -
+                                        context->slavelist[0].Obytes; /* store input bytes in master record */
          context->slavelist[0].mbxstatus = (uint8 *)(pIOmap) + context->slavelist[0].Obytes + context->slavelist[0].Ibytes;
       }
 
-
       /* Do post mapping actions */
       for (slave = 1; slave <= *(context->slavecount); slave++)
       {
@@ -1279,38 +1276,38 @@ static int ecx_main_config_map_group(ecx_contextt *context, void *pIOmap, uint8
             /* User may override automatic state change */
             if (context->manualstatechange == 0)
             {
-                /* request safe_op for slave */
-                ecx_FPWRw(context->port,
-                    configadr,
-                    ECT_REG_ALCTL,
-                    htoes(EC_STATE_SAFE_OP),
-                    EC_TIMEOUTRET3);
+               /* request safe_op for slave */
+               ecx_FPWRw(context->port,
+                         configadr,
+                         ECT_REG_ALCTL,
+                         htoes(EC_STATE_SAFE_OP),
+                         EC_TIMEOUTRET3);
             }
 
             /* Store slave properties*/
             if (context->slavelist[slave].blockLRW)
             {
-                context->grouplist[group].blockLRW++;
+               context->grouplist[group].blockLRW++;
             }
             context->grouplist[group].Ebuscurrent += context->slavelist[slave].Ebuscurrent;
          }
       }
 
       EC_PRINT("IOmapSize %d\n", context->grouplist[group].Obytes +
-          context->grouplist[group].Ibytes +
-          context->grouplist[group].mbxstatuslength);
+                                     context->grouplist[group].Ibytes +
+                                     context->grouplist[group].mbxstatuslength);
 
       return (context->grouplist[group].Obytes +
-          context->grouplist[group].Ibytes) +
-          context->grouplist[group].mbxstatuslength;
+              context->grouplist[group].Ibytes) +
+             context->grouplist[group].mbxstatuslength;
    }
 
    return 0;
 }
 
 /** Map all PDOs in one group of slaves to IOmap with Outputs/Inputs
-* in sequential order (legacy SOEM way).
-*
+ * in sequential order (legacy SOEM way).
+ *
  *
  * @param[in]  context    = context struct
  * @param[out] pIOmap     = pointer to IOmap
@@ -1323,8 +1320,8 @@ int ecx_config_map_group(ecx_contextt *context, void *pIOmap, uint8 group)
 }
 
 /** Map all PDOs in one group of slaves to IOmap with Outputs/Inputs
-* in sequential order (legacy SOEM way) and force byte alignement.
-*
+ * in sequential order (legacy SOEM way) and force byte alignement.
+ *
  *
  * @param[in]  context    = context struct
  * @param[out] pIOmap     = pointer to IOmap
@@ -1384,7 +1381,7 @@ int ecx_config_overlap_map_group(ecx_contextt *context, void *pIOmap, uint8 grou
             {
 
                ecx_config_create_output_mappings(context, pIOmap, group,
-                  slave, &soLogAddr, &BitPos);
+                                                 slave, &soLogAddr, &BitPos);
                if (BitPos)
                {
                   soLogAddr++;
@@ -1396,7 +1393,7 @@ int ecx_config_overlap_map_group(ecx_contextt *context, void *pIOmap, uint8 grou
             if (context->slavelist[slave].Ibits)
             {
                ecx_config_create_input_mappings(context, pIOmap, group,
-                  slave, &siLogAddr, &BitPos);
+                                                slave, &siLogAddr, &BitPos);
                if (BitPos)
                {
                   siLogAddr++;
@@ -1404,7 +1401,7 @@ int ecx_config_overlap_map_group(ecx_contextt *context, void *pIOmap, uint8 grou
                }
             }
 
-            tempLogAddr = (siLogAddr > soLogAddr) ?  siLogAddr : soLogAddr;
+            tempLogAddr = (siLogAddr > soLogAddr) ? siLogAddr : soLogAddr;
             diff = tempLogAddr - mLogAddr;
             int soLength = soLogAddr - mLogAddr;
             int siLength = siLogAddr - mLogAddr;
@@ -1453,7 +1450,7 @@ int ecx_config_overlap_map_group(ecx_contextt *context, void *pIOmap, uint8 grou
       {
          if (!group || (group == context->slavelist[slave].group))
          {
-            if(context->slavelist[slave].Ibits > 0)
+            if (context->slavelist[slave].Ibits > 0)
             {
                context->slavelist[slave].inputs += context->grouplist[group].Obytes;
             }
@@ -1471,16 +1468,16 @@ int ecx_config_overlap_map_group(ecx_contextt *context, void *pIOmap, uint8 grou
             mLogAddr = tempLogAddr;
             if ((segmentsize + diff) > (EC_MAXLRWDATA - EC_FIRSTDCDATAGRAM))
             {
-                context->grouplist[group].IOsegment[currentsegment] = segmentsize;
-                if (currentsegment < (EC_MAXIOSEGMENTS - 1))
-                {
-                    currentsegment++;
-                    segmentsize = diff;
-                }
+               context->grouplist[group].IOsegment[currentsegment] = segmentsize;
+               if (currentsegment < (EC_MAXIOSEGMENTS - 1))
+               {
+                  currentsegment++;
+                  segmentsize = diff;
+               }
             }
             else
             {
-                segmentsize += diff;
+               segmentsize += diff;
             }
             /* Move calculated mbxstatus with OBytes + Ibytes offset */
             context->slavelist[slave].mbxstatus += context->grouplist[group].Obytes;
@@ -1500,8 +1497,8 @@ int ecx_config_overlap_map_group(ecx_contextt *context, void *pIOmap, uint8 grou
          context->slavelist[0].inputs = (uint8 *)pIOmap + context->slavelist[0].Obytes;
          context->slavelist[0].Ibytes = siLogAddr - context->grouplist[group].logstartaddr;
          context->slavelist[0].mbxstatus = (uint8 *)pIOmap +
-            context->slavelist[0].Obytes +
-            context->slavelist[0].Ibytes;
+                                           context->slavelist[0].Obytes +
+                                           context->slavelist[0].Ibytes;
       }
 
       /* Do post mapping actions */
@@ -1515,36 +1512,35 @@ int ecx_config_overlap_map_group(ecx_contextt *context, void *pIOmap, uint8 grou
             /* User may override automatic state change */
             if (context->manualstatechange == 0)
             {
-                /* request safe_op for slave */
-                ecx_FPWRw(context->port,
-                    configadr,
-                    ECT_REG_ALCTL,
-                    htoes(EC_STATE_SAFE_OP),
-                    EC_TIMEOUTRET3);
+               /* request safe_op for slave */
+               ecx_FPWRw(context->port,
+                         configadr,
+                         ECT_REG_ALCTL,
+                         htoes(EC_STATE_SAFE_OP),
+                         EC_TIMEOUTRET3);
             }
 
             /* Store slave properties*/
             if (context->slavelist[slave].blockLRW)
             {
-                context->grouplist[group].blockLRW++;
+               context->grouplist[group].blockLRW++;
             }
             context->grouplist[group].Ebuscurrent += context->slavelist[slave].Ebuscurrent;
          }
       }
 
       EC_PRINT("IOmapSize %d\n", context->grouplist[group].Obytes +
-          context->grouplist[group].Ibytes +
-          context->grouplist[group].mbxstatuslength);
+                                     context->grouplist[group].Ibytes +
+                                     context->grouplist[group].mbxstatuslength);
 
       return (context->grouplist[group].Obytes +
-          context->grouplist[group].Ibytes) +
-          context->grouplist[group].mbxstatuslength;
+              context->grouplist[group].Ibytes) +
+             context->grouplist[group].mbxstatuslength;
    }
 
    return 0;
 }
 
-
 /** Recover slave.
  *
  * @param[in] context = context struct
@@ -1565,42 +1561,42 @@ int ecx_recover_slave(ecx_contextt *context, uint16 slave, int timeout)
    readadr = 0xfffe;
    wkc = ecx_APRD(context->port, ADPh, ECT_REG_STADR, sizeof(readadr), &readadr, timeout);
    /* correct slave found, finished */
-   if(readadr == configadr)
+   if (readadr == configadr)
    {
-       return 1;
+      return 1;
    }
    /* only try if no config address*/
-   if(wkc > 0) && (readadr == 0))
+   if ((wkc > 0) && (readadr == 0))
    {
       /* clear possible slaves at EC_TEMPNODE */
-      ecx_FPWRw(context->port, EC_TEMPNODE, ECT_REG_STADR, htoes(0) , 0);
+      ecx_FPWRw(context->port, EC_TEMPNODE, ECT_REG_STADR, htoes(0), 0);
       /* set temporary node address of slave */
-      if(ecx_APWRw(context->port, ADPh, ECT_REG_STADR, htoes(EC_TEMPNODE) , timeout) <= 0)
+      if (ecx_APWRw(context->port, ADPh, ECT_REG_STADR, htoes(EC_TEMPNODE), timeout) <= 0)
       {
-         ecx_FPWRw(context->port, EC_TEMPNODE, ECT_REG_STADR, htoes(0) , 0);
+         ecx_FPWRw(context->port, EC_TEMPNODE, ECT_REG_STADR, htoes(0), 0);
          return 0; /* slave fails to respond */
       }
 
       context->slavelist[slave].configadr = EC_TEMPNODE; /* temporary config address */
-      ecx_eeprom2master(context, slave); /* set Eeprom control to master */
+      ecx_eeprom2master(context, slave);                 /* set Eeprom control to master */
 
       /* check if slave is the same as configured before */
       if ((ecx_FPRDw(context->port, EC_TEMPNODE, ECT_REG_ALIAS, timeout) ==
-             htoes(context->slavelist[slave].aliasadr)) &&
+           htoes(context->slavelist[slave].aliasadr)) &&
           (ecx_readeeprom(context, slave, ECT_SII_ID, EC_TIMEOUTEEP) ==
-             htoel(context->slavelist[slave].eep_id)) &&
+           htoel(context->slavelist[slave].eep_id)) &&
           (ecx_readeeprom(context, slave, ECT_SII_MANUF, EC_TIMEOUTEEP) ==
-             htoel(context->slavelist[slave].eep_man)) &&
+           htoel(context->slavelist[slave].eep_man)) &&
           (ecx_readeeprom(context, slave, ECT_SII_REV, EC_TIMEOUTEEP) ==
-             htoel(context->slavelist[slave].eep_rev)))
+           htoel(context->slavelist[slave].eep_rev)))
       {
-         rval = ecx_FPWRw(context->port, EC_TEMPNODE, ECT_REG_STADR, htoes(configadr) , timeout);
+         rval = ecx_FPWRw(context->port, EC_TEMPNODE, ECT_REG_STADR, htoes(configadr), timeout);
          context->slavelist[slave].configadr = configadr;
       }
       else
       {
          /* slave is not the expected one, remove config address*/
-         ecx_FPWRw(context->port, EC_TEMPNODE, ECT_REG_STADR, htoes(0) , timeout);
+         ecx_FPWRw(context->port, EC_TEMPNODE, ECT_REG_STADR, htoes(0), timeout);
          context->slavelist[slave].configadr = configadr;
       }
    }
@@ -1621,7 +1617,7 @@ int ecx_reconfig_slave(ecx_contextt *context, uint16 slave, int timeout)
    uint16 configadr;
 
    configadr = context->slavelist[slave].configadr;
-   if (ecx_FPWRw(context->port, configadr, ECT_REG_ALCTL, htoes(EC_STATE_INIT) , timeout) <= 0)
+   if (ecx_FPWRw(context->port, configadr, ECT_REG_ALCTL, htoes(EC_STATE_INIT), timeout) <= 0)
    {
       return 0;
    }
@@ -1629,35 +1625,35 @@ int ecx_reconfig_slave(ecx_contextt *context, uint16 slave, int timeout)
    ecx_eeprom2pdi(context, slave); /* set Eeprom control to PDI */
    /* check state change init */
    state = ecx_statecheck(context, slave, EC_STATE_INIT, EC_TIMEOUTSTATE);
-   if(state == EC_STATE_INIT)
+   if (state == EC_STATE_INIT)
    {
       /* program all enabled SM */
-      for( nSM = 0 ; nSM < EC_MAXSM ; nSM++ )
+      for (nSM = 0; nSM < EC_MAXSM; nSM++)
       {
          if (context->slavelist[slave].SM[nSM].StartAddr)
          {
             ecx_FPWR(context->port, configadr, (uint16)(ECT_REG_SM0 + (nSM * sizeof(ec_smt))),
-               sizeof(ec_smt), &context->slavelist[slave].SM[nSM], timeout);
+                     sizeof(ec_smt), &context->slavelist[slave].SM[nSM], timeout);
          }
       }
       /* small delay to allow slave to process SM changes */
       osal_usleep(5000);
-      ecx_FPWRw(context->port, configadr, ECT_REG_ALCTL, htoes(EC_STATE_PRE_OP) , timeout);
+      ecx_FPWRw(context->port, configadr, ECT_REG_ALCTL, htoes(EC_STATE_PRE_OP), timeout);
       state = ecx_statecheck(context, slave, EC_STATE_PRE_OP, EC_TIMEOUTSTATE); /* check state change pre-op */
-      ifstate == EC_STATE_PRE_OP)
+      if (state == EC_STATE_PRE_OP)
       {
          /* execute slave configuration hook Pre-Op to Safe-OP */
          if (context->slavelist[slave].PO2SOconfig) /* only if registered */
          {
             context->slavelist[slave].PO2SOconfig(context, slave);
          }
-         ecx_FPWRw(context->port, configadr, ECT_REG_ALCTL, htoes(EC_STATE_SAFE_OP) , timeout); /* set safeop status */
-         state = ecx_statecheck(context, slave, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE); /* check state change safe-op */
+         ecx_FPWRw(context->port, configadr, ECT_REG_ALCTL, htoes(EC_STATE_SAFE_OP), timeout); /* set safeop status */
+         state = ecx_statecheck(context, slave, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE);            /* check state change safe-op */
          /* program configured FMMU */
-         for( FMMUc = 0 ; FMMUc < context->slavelist[slave].FMMUunused ; FMMUc++ )
+         for (FMMUc = 0; FMMUc < context->slavelist[slave].FMMUunused; FMMUc++)
          {
             ecx_FPWR(context->port, configadr, (uint16)(ECT_REG_FMMU0 + (sizeof(ec_fmmut) * FMMUc)),
-               sizeof(ec_fmmut), &context->slavelist[slave].FMMU[FMMUc], timeout);
+                     sizeof(ec_fmmut), &context->slavelist[slave].FMMU[FMMUc], timeout);
          }
       }
    }
index 942c4bd4f8def09a1829f0ffdafa53cf65d69815..10e85cffd9638ad456fc0931570d7f656cc0fc97 100644 (file)
 #include "oshw.h"
 #include "osal.h"
 
-#define PORTM0 0x01
-#define PORTM1 0x02
-#define PORTM2 0x04
-#define PORTM3 0x08
+#define PORTM0    0x01
+#define PORTM1    0x02
+#define PORTM2    0x04
+#define PORTM3    0x08
 
 /** 1st sync pulse delay in ns here 100ms */
-#define SyncDelay       ((int32)100000000)
+#define SyncDelay ((int32)100000000)
 
 /**
  * Set DC of slave to fire sync0 at CyclTime interval with CyclShift offset.
@@ -44,7 +44,7 @@ void ecx_dcsync0(ecx_contextt *context, uint16 slave, boolean act, uint32 CyclTi
    (void)ecx_FPWR(context->port, slaveh, ECT_REG_DCSYNCACT, sizeof(RA), &RA, EC_TIMEOUTRET);
    if (act)
    {
-       RA = 1 + 2;    /* act cyclic operation and sync0, sync1 deactivated */
+      RA = 1 + 2; /* act cyclic operation and sync0, sync1 deactivated */
    }
    h = 0;
    (void)ecx_FPWR(context->port, slaveh, ECT_REG_DCCUC, sizeof(h), &h, EC_TIMEOUTRET); /* write access to ethercat */
@@ -58,7 +58,7 @@ void ecx_dcsync0(ecx_contextt *context, uint16 slave, boolean act, uint32 CyclTi
    will sync at the same moment (you can use CyclShift to shift the sync) */
    if (CyclTime > 0)
    {
-       t = ((t1 + SyncDelay) / CyclTime) * CyclTime + CyclTime + CyclShift;
+      t = ((t1 + SyncDelay) / CyclTime) * CyclTime + CyclTime + CyclShift;
    }
    else
    {
@@ -68,13 +68,13 @@ void ecx_dcsync0(ecx_contextt *context, uint16 slave, boolean act, uint32 CyclTi
    t = htoell(t);
    (void)ecx_FPWR(context->port, slaveh, ECT_REG_DCSTART0, sizeof(t), &t, EC_TIMEOUTRET); /* SYNC0 start time */
    tc = htoel(CyclTime);
-   (void)ecx_FPWR(context->port, slaveh, ECT_REG_DCCYCLE0, sizeof(tc), &tc, EC_TIMEOUTRET); /* SYNC0 cycle time */
+   (void)ecx_FPWR(context->port, slaveh, ECT_REG_DCCYCLE0, sizeof(tc), &tc, EC_TIMEOUTRET);  /* SYNC0 cycle time */
    (void)ecx_FPWR(context->port, slaveh, ECT_REG_DCSYNCACT, sizeof(RA), &RA, EC_TIMEOUTRET); /* activate cyclic operation */
 
-    // update ec_slave state
-    context->slavelist[slave].DCactive = (uint8)act;
-    context->slavelist[slave].DCshift = CyclShift;
-    context->slavelist[slave].DCcycle = CyclTime;
+   // update ec_slave state
+   context->slavelist[slave].DCactive = (uint8)act;
+   context->slavelist[slave].DCshift = CyclShift;
+   context->slavelist[slave].DCcycle = CyclTime;
 }
 
 /**
@@ -107,7 +107,7 @@ void ecx_dcsync01(ecx_contextt *context, uint16 slave, boolean act, uint32 CyclT
    (void)ecx_FPWR(context->port, slaveh, ECT_REG_DCSYNCACT, sizeof(RA), &RA, EC_TIMEOUTRET);
    if (act)
    {
-      RA = 1 + 2 + 4;    /* act cyclic operation and sync0 + sync1 */
+      RA = 1 + 2 + 4; /* act cyclic operation and sync0 + sync1 */
    }
    h = 0;
    (void)ecx_FPWR(context->port, slaveh, ECT_REG_DCCUC, sizeof(h), &h, EC_TIMEOUTRET); /* write access to ethercat */
@@ -133,13 +133,13 @@ void ecx_dcsync01(ecx_contextt *context, uint16 slave, boolean act, uint32 CyclT
    tc = htoel(CyclTime0);
    (void)ecx_FPWR(context->port, slaveh, ECT_REG_DCCYCLE0, sizeof(tc), &tc, EC_TIMEOUTRET); /* SYNC0 cycle time */
    tc = htoel(CyclTime1);
-   (void)ecx_FPWR(context->port, slaveh, ECT_REG_DCCYCLE1, sizeof(tc), &tc, EC_TIMEOUTRET); /* SYNC1 cycle time */
+   (void)ecx_FPWR(context->port, slaveh, ECT_REG_DCCYCLE1, sizeof(tc), &tc, EC_TIMEOUTRET);  /* SYNC1 cycle time */
    (void)ecx_FPWR(context->port, slaveh, ECT_REG_DCSYNCACT, sizeof(RA), &RA, EC_TIMEOUTRET); /* activate cyclic operation */
 
-    // update ec_slave state
-    context->slavelist[slave].DCactive = (uint8)act;
-    context->slavelist[slave].DCshift = CyclShift;
-    context->slavelist[slave].DCcycle = CyclTime0;
+   // update ec_slave state
+   context->slavelist[slave].DCactive = (uint8)act;
+   context->slavelist[slave].DCshift = CyclShift;
+   context->slavelist[slave].DCcycle = CyclTime0;
 }
 
 /* latched port time of slave */
@@ -148,21 +148,21 @@ static int32 ecx_porttime(ecx_contextt *context, uint16 slave, uint8 port)
    int32 ts;
    switch (port)
    {
-      case 0:
-         ts = context->slavelist[slave].DCrtA;
-         break;
-      case 1:
-         ts = context->slavelist[slave].DCrtB;
-         break;
-      case 2:
-         ts = context->slavelist[slave].DCrtC;
-         break;
-      case 3:
-         ts = context->slavelist[slave].DCrtD;
-         break;
-      default:
-         ts = 0;
-         break;
+   case 0:
+      ts = context->slavelist[slave].DCrtA;
+      break;
+   case 1:
+      ts = context->slavelist[slave].DCrtB;
+      break;
+   case 2:
+      ts = context->slavelist[slave].DCrtC;
+      break;
+   case 3:
+      ts = context->slavelist[slave].DCrtD;
+      break;
+   default:
+      ts = 0;
+      break;
    }
    return ts;
 }
@@ -172,40 +172,40 @@ static uint8 ecx_prevport(ecx_contextt *context, uint16 slave, uint8 port)
 {
    uint8 pport = port;
    uint8 aport = context->slavelist[slave].activeports;
-   switch(port)
+   switch (port)
    {
-      case 0:
-         if(aport & PORTM2)
-            pport = 2;
-         else if (aport & PORTM1)
-            pport = 1;
-         else if (aport & PORTM3)
-            pport = 3;
-         break;
-      case 1:
-         if(aport & PORTM3)
-            pport = 3;
-         else if (aport & PORTM0)
-            pport = 0;
-         else if (aport & PORTM2)
-            pport = 2;
-         break;
-      case 2:
-         if(aport & PORTM1)
-            pport = 1;
-         else if (aport & PORTM3)
-            pport = 3;
-         else if (aport & PORTM0)
-            pport = 0;
-         break;
-      case 3:
-         if(aport & PORTM0)
-            pport = 0;
-         else if (aport & PORTM2)
-            pport = 2;
-         else if (aport & PORTM1)
-            pport = 1;
-         break;
+   case 0:
+      if (aport & PORTM2)
+         pport = 2;
+      else if (aport & PORTM1)
+         pport = 1;
+      else if (aport & PORTM3)
+         pport = 3;
+      break;
+   case 1:
+      if (aport & PORTM3)
+         pport = 3;
+      else if (aport & PORTM0)
+         pport = 0;
+      else if (aport & PORTM2)
+         pport = 2;
+      break;
+   case 2:
+      if (aport & PORTM1)
+         pport = 1;
+      else if (aport & PORTM3)
+         pport = 3;
+      else if (aport & PORTM0)
+         pport = 0;
+      break;
+   case 3:
+      if (aport & PORTM0)
+         pport = 0;
+      else if (aport & PORTM2)
+         pport = 2;
+      else if (aport & PORTM1)
+         pport = 1;
+      break;
    }
    return pport;
 }
@@ -265,9 +265,9 @@ boolean ecx_configdc(ecx_contextt *context)
    context->grouplist[0].hasdc = FALSE;
    ht = 0;
 
-   ecx_BWR(context->port, 0, ECT_REG_DCTIME0, sizeof(ht), &ht, EC_TIMEOUTRET);  /* latch DCrecvTimeA of all slaves */
+   ecx_BWR(context->port, 0, ECT_REG_DCTIME0, sizeof(ht), &ht, EC_TIMEOUTRET); /* latch DCrecvTimeA of all slaves */
    mastertime = osal_current_time();
-   mastertime.sec -= 946684800UL;  /* EtherCAT uses 2000-01-01 as epoch start instead of 1970-01-01 */
+   mastertime.sec -= 946684800UL; /* EtherCAT uses 2000-01-01 as epoch start instead of 1970-01-01 */
    mastertime64 = (((uint64)mastertime.sec * 1000000) + (uint64)mastertime.usec) * 1000;
    for (i = 1; i <= *(context->slavecount); i++)
    {
@@ -334,22 +334,22 @@ boolean ecx_configdc(ecx_contextt *context)
          }
          /* entryport is port with the lowest timestamp */
          entryport = 0;
-         if((nlist > 1) && (tlist[1] < tlist[entryport]))
+         if ((nlist > 1) && (tlist[1] < tlist[entryport]))
          {
             entryport = 1;
          }
-         if((nlist > 2) && (tlist[2] < tlist[entryport]))
+         if ((nlist > 2) && (tlist[2] < tlist[entryport]))
          {
             entryport = 2;
          }
-         if((nlist > 3) && (tlist[3] < tlist[entryport]))
+         if ((nlist > 3) && (tlist[3] < tlist[entryport]))
          {
             entryport = 3;
          }
          entryport = plist[entryport];
          context->slavelist[i].entryport = entryport;
          /* consume entryport from activeports */
-         context->slavelist[i].consumedports &= (uint8)~(1 << entryport);
+         context->slavelist[i].consumedports &= (uint8) ~(1 << entryport);
 
          /* finding DC parent of current */
          parent = i;
@@ -357,8 +357,7 @@ boolean ecx_configdc(ecx_contextt *context)
          {
             child = parent;
             parent = context->slavelist[parent].parent;
-         }
-         while (!((parent == 0) || (context->slavelist[parent].hasdc)));
+         } while (!((parent == 0) || (context->slavelist[parent].hasdc)));
          /* only calculate propagation delay if slave is not the first */
          if (parent > 0)
          {
@@ -376,13 +375,13 @@ boolean ecx_configdc(ecx_contextt *context)
             /* non active ports are skipped */
             dt3 = ecx_porttime(context, parent, context->slavelist[i].parentport) -
                   ecx_porttime(context, parent,
-                    ecx_prevport(context, parent, context->slavelist[i].parentport));
+                               ecx_prevport(context, parent, context->slavelist[i].parentport));
             /* current slave has children */
             /* those children's delays need to be subtracted */
             if (context->slavelist[i].topology > 1)
             {
                dt1 = ecx_porttime(context, i,
-                        ecx_prevport(context, i, context->slavelist[i].entryport)) -
+                                  ecx_prevport(context, i, context->slavelist[i].entryport)) -
                      ecx_porttime(context, i, context->slavelist[i].entryport);
             }
             /* we are only interested in positive difference */
@@ -392,7 +391,7 @@ boolean ecx_configdc(ecx_contextt *context)
             if ((child - parent) > 1)
             {
                dt2 = ecx_porttime(context, parent,
-                        ecx_prevport(context, parent, context->slavelist[i].parentport)) -
+                                  ecx_prevport(context, parent, context->slavelist[i].parentport)) -
                      ecx_porttime(context, parent, context->slavelist[parent].entryport);
             }
             if (dt2 < 0) dt2 = -dt2;
@@ -400,7 +399,7 @@ boolean ecx_configdc(ecx_contextt *context)
             /* calculate current slave delay from delta times */
             /* assumption : forward delay equals return delay */
             context->slavelist[i].pdelay = ((dt3 - dt1) / 2) + dt2 +
-               context->slavelist[parent].pdelay;
+                                           context->slavelist[parent].pdelay;
             ht = htoel(context->slavelist[i].pdelay);
             /* write propagation delay*/
             (void)ecx_FPWR(context->port, slaveh, ECT_REG_DCSYSDELAY, sizeof(ht), &ht, EC_TIMEOUTRET);
@@ -414,10 +413,10 @@ boolean ecx_configdc(ecx_contextt *context)
          context->slavelist[i].DCrtD = 0;
          parent = context->slavelist[i].parent;
          /* if non DC slave found on first position on branch hold root parent */
-         if ( (parent > 0) && (context->slavelist[parent].topology > 2))
+         if ((parent > 0) && (context->slavelist[parent].topology > 2))
             parenthold = parent;
          /* if branch has no DC slaves consume port on root parent */
-         if ( parenthold && (context->slavelist[i].topology == 1))
+         if (parenthold && (context->slavelist[i].topology == 1))
          {
             ecx_parentport(context, parenthold);
             parenthold = 0;
index df96d37e6e74945965b8b3afc1c88c74aa397123..83721c32af760ecf9ace5905de8a26252e998947 100644 (file)
 #include "osal.h"
 #include "oshw.h"
 
- /** EoE utility function to convert uint32 to eoe ip bytes.
+/** EoE utility function to convert uint32 to eoe ip bytes.
  * @param[in] ip       = ip in uint32
  * @param[out] byte_ip = eoe ip 4th octet, 3ed octet, 2nd octet, 1st octet
  */
-static void EOE_ip_uint32_to_byte(eoe_ip4_addr_t * ip, uint8_t * byte_ip)
+static void EOE_ip_uint32_to_byte(eoe_ip4_addr_t *ip, uint8_t *byte_ip)
 {
    byte_ip[3] = eoe_ip4_addr1(ip); /* 1st octet */
    byte_ip[2] = eoe_ip4_addr2(ip); /* 2nd octet */
@@ -32,24 +32,24 @@ static void EOE_ip_uint32_to_byte(eoe_ip4_addr_t * ip, uint8_t * byte_ip)
 }
 
 /** EoE utility function to convert eoe ip bytes to uint32.
-* @param[in] byte_ip = eoe ip 4th octet, 3ed octet, 2nd octet, 1st octet
-* @param[out] ip     = ip in uint32
-*/
-static void EOE_ip_byte_to_uint32(uint8_t * byte_ip, eoe_ip4_addr_t * ip)
+ * @param[in] byte_ip = eoe ip 4th octet, 3ed octet, 2nd octet, 1st octet
+ * @param[out] ip     = ip in uint32
+ */
+static void EOE_ip_byte_to_uint32(uint8_t *byte_ip, eoe_ip4_addr_t *ip)
 {
    EOE_IP4_ADDR_TO_U32(ip,
-      byte_ip[3],  /* 1st octet */
-      byte_ip[2],  /* 2nd octet */
-      byte_ip[1],  /* 3ed octet */
-      byte_ip[0]); /* 4th octet */
+                       byte_ip[3],  /* 1st octet */
+                       byte_ip[2],  /* 2nd octet */
+                       byte_ip[1],  /* 3ed octet */
+                       byte_ip[0]); /* 4th octet */
 }
 
 /** EoE fragment data handler hook. Should not block.
-*
-* @param[in]  context = context struct
-* @param[in]  hook    = Pointer to hook function.
-* @return 1
-*/
+ *
+ * @param[in]  context = context struct
+ * @param[in]  hook    = Pointer to hook function.
+ * @return 1
+ */
 int ecx_EOEdefinehook(ecx_contextt *context, void *hook)
 {
    context->EOEhook = hook;
@@ -57,15 +57,15 @@ int ecx_EOEdefinehook(ecx_contextt *context, void *hook)
 }
 
 /** EoE EOE set IP, blocking. Waits for response from the slave.
-*
-* @param[in]  context    = Context struct
-* @param[in]  slave      = Slave number
-* @param[in]  port       = Port number on slave if applicable
-* @param[in]  ipparam    = IP parameter data to be sent
-* @param[in]  timeout    = Timeout in us, standard is EC_TIMEOUTRXM
-* @return Workcounter from last slave response or returned result code 
-*/
-int ecx_EOEsetIp(ecx_contextt *context, uint16 slave, uint8 port, eoe_param_t * ipparam, int timeout)
+ *
+ * @param[in]  context    = Context struct
+ * @param[in]  slave      = Slave number
+ * @param[in]  port       = Port number on slave if applicable
+ * @param[in]  ipparam    = IP parameter data to be sent
+ * @param[in]  timeout    = Timeout in us, standard is EC_TIMEOUTRXM
+ * @return Workcounter from last slave response or returned result code
+ */
+int ecx_EOEsetIp(ecx_contextt *context, uint16 slave, uint8 port, eoe_param_t *ipparam, int timeout)
 {
    ec_EOEt *EOEp, *aEOEp;
    ec_mbxbuft *MbxIn, *MbxOut;
@@ -77,14 +77,14 @@ int ecx_EOEsetIp(ecx_contextt *context, uint16 slave, uint8 port, eoe_param_t *
    MbxIn = NULL;
    MbxOut = NULL;
    /* Empty slave out mailbox if something is in. Timout set to 0 */
-   wkc = ecx_mbxreceive(context,  slave, &MbxIn, 0);
+   wkc = ecx_mbxreceive(context, slave, &MbxIn, 0);
    MbxOut = ecx_getmbx(context);
    ec_clearmbx(MbxOut);
    EOEp = (ec_EOEt *)MbxOut;
    EOEp->mbxheader.address = htoes(0x0000);
    EOEp->mbxheader.priority = 0x00;
    data_offset = EOE_PARAM_OFFSET;
-   
+
    /* get new mailbox count value, used as session handle */
    cnt = ec_nextmbxcnt(context->slavelist[slave].mbx_cnt);
    context->slavelist[slave].mbx_cnt = cnt;
@@ -92,10 +92,10 @@ int ecx_EOEsetIp(ecx_contextt *context, uint16 slave, uint8 port, eoe_param_t *
    EOEp->mbxheader.mbxtype = ECT_MBXT_EOE + MBX_HDR_SET_CNT(cnt); /* EoE */
 
    EOEp->frameinfo1 = htoes(EOE_HDR_FRAME_TYPE_SET(EOE_INIT_REQ) |
-      EOE_HDR_FRAME_PORT_SET(port) |
-      EOE_HDR_LAST_FRAGMENT);
+                            EOE_HDR_FRAME_PORT_SET(port) |
+                            EOE_HDR_LAST_FRAGMENT);
    EOEp->frameinfo2 = 0;
-  
+
    if (ipparam->mac_set)
    {
       flags |= EOE_PARAM_MAC_INCLUDE;
@@ -143,13 +143,13 @@ int ecx_EOEsetIp(ecx_contextt *context, uint16 slave, uint8 port, eoe_param_t *
 
    if (wkc > 0) /* succeeded to place mailbox in slave ? */
    {
-       if (MbxIn) ecx_dropmbx(context, MbxIn);
-       MbxIn = NULL;
+      if (MbxIn) ecx_dropmbx(context, MbxIn);
+      MbxIn = NULL;
       /* read slave response */
       wkc = ecx_mbxreceive(context, slave, &MbxIn, timeout);
       if (wkc > 0) /* succeeded to read slave response ? */
       {
-          aEOEp = (ec_EOEt*)MbxIn;
+         aEOEp = (ec_EOEt *)MbxIn;
          /* slave response should be EoE */
          if ((aEOEp->mbxheader.mbxtype & 0x0f) == ECT_MBXT_EOE)
          {
@@ -176,15 +176,15 @@ int ecx_EOEsetIp(ecx_contextt *context, uint16 slave, uint8 port, eoe_param_t *
 }
 
 /** EoE EOE get IP, blocking. Waits for response from the slave.
-*
-* @param[in]  context    = Context struct
-* @param[in]  slave      = Slave number
-* @param[in]  port       = Port number on slave if applicable
-* @param[out] ipparam    = IP parameter data retrived from slave
-* @param[in]  timeout    = Timeout in us, standard is EC_TIMEOUTRXM
-* @return Workcounter from last slave response or returned result code
-*/
-int ecx_EOEgetIp(ecx_contextt *context, uint16 slave, uint8 port, eoe_param_t * ipparam, int timeout)
+ *
+ * @param[in]  context    = Context struct
+ * @param[in]  slave      = Slave number
+ * @param[in]  port       = Port number on slave if applicable
+ * @param[out] ipparam    = IP parameter data retrived from slave
+ * @param[in]  timeout    = Timeout in us, standard is EC_TIMEOUTRXM
+ * @return Workcounter from last slave response or returned result code
+ */
+int ecx_EOEgetIp(ecx_contextt *context, uint16 slave, uint8 port, eoe_param_t *ipparam, int timeout)
 {
    ec_EOEt *EOEp, *aEOEp;
    ec_mbxbuft *MbxIn, *MbxOut;
@@ -211,11 +211,11 @@ int ecx_EOEgetIp(ecx_contextt *context, uint16 slave, uint8 port, eoe_param_t *
    EOEp->mbxheader.mbxtype = ECT_MBXT_EOE + MBX_HDR_SET_CNT(cnt); /* EoE */
 
    EOEp->frameinfo1 = htoes(EOE_HDR_FRAME_TYPE_SET(EOE_GET_IP_PARAM_REQ) |
-      EOE_HDR_FRAME_PORT_SET(port) |
-      EOE_HDR_LAST_FRAGMENT);
+                            EOE_HDR_FRAME_PORT_SET(port) |
+                            EOE_HDR_LAST_FRAGMENT);
    EOEp->frameinfo2 = 0;
 
-   EOEp->mbxheader.length = htoes(0x0004); 
+   EOEp->mbxheader.length = htoes(0x0004);
    EOEp->data[0] = flags;
 
    /* send EoE request to slave */
@@ -223,13 +223,13 @@ int ecx_EOEgetIp(ecx_contextt *context, uint16 slave, uint8 port, eoe_param_t *
    MbxOut = NULL;
    if (wkc > 0) /* succeeded to place mailbox in slave ? */
    {
-       if (MbxIn) ecx_dropmbx(context, MbxIn);
-       MbxIn = NULL;
+      if (MbxIn) ecx_dropmbx(context, MbxIn);
+      MbxIn = NULL;
       /* read slave response */
       wkc = ecx_mbxreceive(context, slave, &MbxIn, timeout);
       if (wkc > 0) /* succeeded to read slave response ? */
       {
-          aEOEp = (ec_EOEt*)MbxIn;
+         aEOEp = (ec_EOEt *)MbxIn;
          /* slave response should be FoE */
          if ((aEOEp->mbxheader.mbxtype & 0x0f) == ECT_MBXT_EOE)
          {
@@ -244,37 +244,37 @@ int ecx_EOEgetIp(ecx_contextt *context, uint16 slave, uint8 port, eoe_param_t *
                flags = aEOEp->data[0];
                if (flags & EOE_PARAM_MAC_INCLUDE)
                {
-                  memcpy(ipparam->mac.addr, 
-                     &aEOEp->data[data_offset], 
-                     EOE_ETHADDR_LENGTH);
+                  memcpy(ipparam->mac.addr,
+                         &aEOEp->data[data_offset],
+                         EOE_ETHADDR_LENGTH);
                   ipparam->mac_set = 1;
                   data_offset += EOE_ETHADDR_LENGTH;
                }
                if (flags & EOE_PARAM_IP_INCLUDE)
                {
                   EOE_ip_byte_to_uint32(&aEOEp->data[data_offset],
-                     &ipparam->ip);
+                                        &ipparam->ip);
                   ipparam->ip_set = 1;
                   data_offset += EOE_IP4_LENGTH;
                }
                if (flags & EOE_PARAM_SUBNET_IP_INCLUDE)
                {
                   EOE_ip_byte_to_uint32(&aEOEp->data[data_offset],
-                     &ipparam->subnet);
+                                        &ipparam->subnet);
                   ipparam->subnet_set = 1;
                   data_offset += EOE_IP4_LENGTH;
                }
                if (flags & EOE_PARAM_DEFAULT_GATEWAY_INCLUDE)
                {
                   EOE_ip_byte_to_uint32(&aEOEp->data[data_offset],
-                     &ipparam->default_gateway);
+                                        &ipparam->default_gateway);
                   ipparam->default_gateway_set = 1;
                   data_offset += EOE_IP4_LENGTH;
                }
                if (flags & EOE_PARAM_DNS_IP_INCLUDE)
                {
                   EOE_ip_byte_to_uint32(&aEOEp->data[data_offset],
-                     &ipparam->dns_ip);
+                                        &ipparam->dns_ip);
                   ipparam->dns_ip_set = 1;
                   data_offset += EOE_IP4_LENGTH;
                }
@@ -288,14 +288,14 @@ int ecx_EOEgetIp(ecx_contextt *context, uint16 slave, uint8 port, eoe_param_t *
                   else
                   {
                      dns_len = EOE_DNS_NAME_LENGTH;
-                  }     
+                  }
                   /* Assume ZERO terminated string */
                   memcpy(ipparam->dns_name, &aEOEp->data[data_offset], dns_len);
                   ipparam->dns_name_set = 1;
                   data_offset += EOE_DNS_NAME_LENGTH;
                }
                /* Something os not correct, flag the error */
-               if(data_offset > eoedatasize)
+               if (data_offset > eoedatasize)
                {
                   wkc = -EC_ERR_TYPE_MBX_ERROR;
                }
@@ -315,34 +315,34 @@ int ecx_EOEgetIp(ecx_contextt *context, uint16 slave, uint8 port, eoe_param_t *
    return wkc;
 }
 
-/** EoE ethernet buffer write, blocking. 
-*
-* If the buffer is larger than the mailbox size then the buffer is sent in 
-* several fragments. The function will split the buf data in fragments and
-* send them to the slave one by one.
-*
-* @param[in]  context    = context struct
-* @param[in]  slave      = Slave number
-* @param[in]  port       = Port number on slave if applicable
-* @param[in]  psize      = Size in bytes of parameter buffer.
-* @param[in]  p          = Pointer to parameter buffer
-* @param[in]  timeout    = Timeout in us, standard is EC_TIMEOUTRXM
-* @return Workcounter from last slave transmission
-*/
+/** EoE ethernet buffer write, blocking.
+ *
+ * If the buffer is larger than the mailbox size then the buffer is sent in
+ * several fragments. The function will split the buf data in fragments and
+ * send them to the slave one by one.
+ *
+ * @param[in]  context    = context struct
+ * @param[in]  slave      = Slave number
+ * @param[in]  port       = Port number on slave if applicable
+ * @param[in]  psize      = Size in bytes of parameter buffer.
+ * @param[in]  p          = Pointer to parameter buffer
+ * @param[in]  timeout    = Timeout in us, standard is EC_TIMEOUTRXM
+ * @return Workcounter from last slave transmission
+ */
 int ecx_EOEsend(ecx_contextt *context, uint16 slave, uint8 port, int psize, void *p, int timeout)
 {
    ec_EOEt *EOEp;
    ec_mbxbuft *MbxOut;
    uint16 frameinfo1, frameinfo2;
-   uint8 cnt, txfragmentno;  
-   boolean  NotLast;
+   uint8 cnt, txfragmentno;
+   boolean NotLast;
    int wkc, maxdata, txframesize, txframeoffset;
-   const uint8 * buf = p;
+   const uint8 *buf = p;
    static uint8_t txframeno = 0;
 
    MbxOut = NULL;
    /* data section=mailbox size - 6 mbx - 4 EoEh */
-   maxdata = context->slavelist[slave].mbx_l - 0x0A; 
+   maxdata = context->slavelist[slave].mbx_l - 0x0A;
    txframesize = psize;
    txfragmentno = 0;
    txframeoffset = 0;
@@ -352,7 +352,7 @@ int ecx_EOEsend(ecx_contextt *context, uint16 slave, uint8 port, int psize, void
    {
       MbxOut = ecx_getmbx(context);
       ec_clearmbx(MbxOut);
-      EOEp = (ec_EOEt*)MbxOut;
+      EOEp = (ec_EOEt *)MbxOut;
       EOEp->mbxheader.address = htoes(0x0000);
       EOEp->mbxheader.priority = 0x00;
 
@@ -389,7 +389,7 @@ int ecx_EOEsend(ecx_contextt *context, uint16 slave, uint8 port, int psize, void
       cnt = ec_nextmbxcnt(context->slavelist[slave].mbx_cnt);
       context->slavelist[slave].mbx_cnt = cnt;
 
-      EOEp->mbxheader.length = htoes((uint16)(4 + txframesize)); /* no timestamp */
+      EOEp->mbxheader.length = htoes((uint16)(4 + txframesize));     /* no timestamp */
       EOEp->mbxheader.mbxtype = ECT_MBXT_EOE + MBX_HDR_SET_CNT(cnt); /* EoE */
 
       EOEp->frameinfo1 = htoes(frameinfo1);
@@ -400,7 +400,7 @@ int ecx_EOEsend(ecx_contextt *context, uint16 slave, uint8 port, int psize, void
       /* send EoE request to slave */
       wkc = ecx_mbxsend(context, slave, MbxOut, timeout);
       MbxOut = NULL;
-      if ((NotLast == TRUE)  && (wkc > 0))
+      if ((NotLast == TRUE) && (wkc > 0))
       {
          txframeoffset += txframesize;
          txfragmentno++;
@@ -412,22 +412,21 @@ int ecx_EOEsend(ecx_contextt *context, uint16 slave, uint8 port, int psize, void
    return wkc;
 }
 
-
 /** EoE ethernet buffer read, blocking.
-*
-* If the buffer is larger than the mailbox size then the buffer is received 
-* by several fragments. The function will assamble the fragments into
-* a complete Ethernet buffer.
-*
-* @param[in]     context = context struct
-* @param[in]     slave   = Slave number
-* @param[in]     port    = Port number on slave if applicable
-* @param[in,out] psize   = Size in bytes of parameter buffer.
-* @param[in]     p       = Pointer to parameter buffer
-* @param[in]     timeout = Timeout in us, standard is EC_TIMEOUTRXM
-* @return Workcounter from last slave response or error code
-*/
-int ecx_EOErecv(ecx_contextt *context, uint16 slave, uint8 port, int * psize, void *p, int timeout)
+ *
+ * If the buffer is larger than the mailbox size then the buffer is received
+ * by several fragments. The function will assamble the fragments into
+ * a complete Ethernet buffer.
+ *
+ * @param[in]     context = context struct
+ * @param[in]     slave   = Slave number
+ * @param[in]     port    = Port number on slave if applicable
+ * @param[in,out] psize   = Size in bytes of parameter buffer.
+ * @param[in]     p       = Pointer to parameter buffer
+ * @param[in]     timeout = Timeout in us, standard is EC_TIMEOUTRXM
+ * @return Workcounter from last slave response or error code
+ */
+int ecx_EOErecv(ecx_contextt *context, uint16 slave, uint8 port, int *psize, void *p, int timeout)
 {
    ec_EOEt *aEOEp;
    ec_mbxbuft *MbxIn;
@@ -435,7 +434,7 @@ int ecx_EOErecv(ecx_contextt *context, uint16 slave, uint8 port, int * psize, vo
    uint8 rxfragmentno, rxframeno;
    boolean NotLast;
    int wkc, buffersize, rxframesize, rxframeoffset, eoedatasize;
-   uint8 * buf = p;
+   uint8 *buf = p;
 
    MbxIn = NULL;
    NotLast = TRUE;
@@ -443,13 +442,13 @@ int ecx_EOErecv(ecx_contextt *context, uint16 slave, uint8 port, int * psize, vo
    rxfragmentno = 0;
    rxframeno = 0xff;
    rxframeoffset = 0;
-   
+
    /* Hang for a while if nothing is in */
    wkc = ecx_mbxreceive(context, slave, &MbxIn, timeout);
 
    while ((wkc > 0) && (NotLast == TRUE))
    {
-      aEOEp = (ec_EOEt*)MbxIn;
+      aEOEp = (ec_EOEt *)MbxIn;
       /* slave response should be FoE */
       if ((aEOEp->mbxheader.mbxtype & 0x0f) == ECT_MBXT_EOE)
       {
@@ -519,8 +518,8 @@ int ecx_EOErecv(ecx_contextt *context, uint16 slave, uint8 port, int * psize, vo
          }
          else
          {
-             if (MbxIn) ecx_dropmbx(context, MbxIn);
-             MbxIn = NULL;
+            if (MbxIn) ecx_dropmbx(context, MbxIn);
+            MbxIn = NULL;
             /* Hang for a while if nothing is in */
             wkc = ecx_mbxreceive(context, slave, &MbxIn, timeout);
          }
@@ -536,33 +535,33 @@ int ecx_EOErecv(ecx_contextt *context, uint16 slave, uint8 port, int * psize, vo
 }
 
 /** EoE mailbox fragment read
-*
-* Will take the data in incoming mailbox buffer and copy to destination 
-* Ethernet frame buffer at given offset and update current fragment variables
-*
-* @param[in] MbxIn             = Received mailbox containing fragment data
-* @param[in,out] rxfragmentno  = Fragment number
-* @param[in,out] rxframesize   = Frame size
-* @param[in,out] rxframeoffset = Frame offset
-* @param[in,out] rxframeno     = Frame number
-* @param[in,out] psize         = Size in bytes of frame buffer.
-* @param[out] p                = Pointer to frame buffer
-* @return 0= if fragment OK, >0 if last fragment, <0 on error
-*/
+ *
+ * Will take the data in incoming mailbox buffer and copy to destination
+ * Ethernet frame buffer at given offset and update current fragment variables
+ *
+ * @param[in] MbxIn             = Received mailbox containing fragment data
+ * @param[in,out] rxfragmentno  = Fragment number
+ * @param[in,out] rxframesize   = Frame size
+ * @param[in,out] rxframeoffset = Frame offset
+ * @param[in,out] rxframeno     = Frame number
+ * @param[in,out] psize         = Size in bytes of frame buffer.
+ * @param[out] p                = Pointer to frame buffer
+ * @return 0= if fragment OK, >0 if last fragment, <0 on error
+ */
 int ecx_EOEreadfragment(
-   ec_mbxbuft *MbxIn,
-   uint8 *rxfragmentno,
-   uint16 *rxframesize,
-   uint16 *rxframeoffset,
-   uint16 *rxframeno,
-   int *psize,
-   void *p)
-{  
-   uint16 frameinfo1, frameinfo2,  eoedatasize;
+    ec_mbxbuft *MbxIn,
+    uint8 *rxfragmentno,
+    uint16 *rxframesize,
+    uint16 *rxframeoffset,
+    uint16 *rxframeno,
+    int *psize,
+    void *p)
+{
+   uint16 frameinfo1, frameinfo2, eoedatasize;
    int wkc;
-   ec_EOEt * aEOEp;
-   uint8 * buf;
-   
+   ec_EOEt *aEOEp;
+   uint8 *buf;
+
    aEOEp = (ec_EOEt *)MbxIn;
    buf = p;
    wkc = 0;
@@ -625,8 +624,8 @@ int ecx_EOEreadfragment(
       }
 
       /* Make sure we're inside expected frame size */
-      if (((*rxframeoffset + eoedatasize) <= *rxframesize) && 
-         ((*rxframeoffset + eoedatasize) <= *psize))
+      if (((*rxframeoffset + eoedatasize) <= *rxframesize) &&
+          ((*rxframeoffset + eoedatasize) <= *psize))
       {
          memcpy(&buf[*rxframeoffset], aEOEp->data, eoedatasize);
          *rxframeoffset += eoedatasize;
index a9c61e3758d36af97a974429949f37bdb9dbf64c..d93aab10d10b75e17e5fad5e5aca365e9f77fadb 100644 (file)
 #include "oshw.h"
 
 /* use maximum size for FOE mailbox data - header and metadata */
-#define EC_MAXFOEDATA                           \
-   (EC_MAXMBX -                                 \
-    (sizeof(ec_mbxheadert) +                    \
-     sizeof(uint8_t) +                          \
-     sizeof(uint8_t) +                          \
+#define EC_MAXFOEDATA        \
+   (EC_MAXMBX -              \
+    (sizeof(ec_mbxheadert) + \
+     sizeof(uint8_t) +       \
+     sizeof(uint8_t) +       \
      sizeof(uint32_t)))
 
 /** FOE structure.
@@ -31,19 +31,19 @@ PACKED_BEGIN
 typedef struct PACKED
 {
    ec_mbxheadert MbxHeader;
-   uint8         OpCode;
-   uint8         Reserved;
+   uint8 OpCode;
+   uint8 Reserved;
    union
    {
-      uint32        Password;
-      uint32        PacketNumber;
-      uint32        ErrorCode;
+      uint32 Password;
+      uint32 PacketNumber;
+      uint32 ErrorCode;
    };
    union
    {
-      char          FileName[EC_MAXFOEDATA];
-      uint8         Data[EC_MAXFOEDATA];
-      char          ErrorText[EC_MAXFOEDATA];
+      char FileName[EC_MAXFOEDATA];
+      uint8 Data[EC_MAXFOEDATA];
+      char ErrorText[EC_MAXFOEDATA];
    };
 } ec_FOEt;
 PACKED_END
@@ -56,8 +56,8 @@ PACKED_END
  */
 int ecx_FOEdefinehook(ecx_contextt *context, void *hook)
 {
-  context->FOEhook = hook;
-  return 1;
+   context->FOEhook = hook;
+   return 1;
 }
 
 /** FoE read, blocking.
@@ -119,7 +119,7 @@ int ecx_FOEread(ecx_contextt *context, uint16 slave, char *filename, uint32 pass
       do
       {
          worktodo = FALSE;
-         if(MbxIn) ecx_dropmbx(context, MbxIn);
+         if (MbxIn) ecx_dropmbx(context, MbxIn);
          MbxIn = NULL;
          /* read slave response */
          wkc = ecx_mbxreceive(context, slave, &MbxIn, timeout);
@@ -129,7 +129,7 @@ int ecx_FOEread(ecx_contextt *context, uint16 slave, char *filename, uint32 pass
             /* slave response should be FoE */
             if ((aFOEp->MbxHeader.mbxtype & 0x0f) == ECT_MBXT_FOE)
             {
-               if(aFOEp->OpCode == ECT_FOE_DATA)
+               if (aFOEp->OpCode == ECT_FOE_DATA)
                {
                   segmentdata = etohs(aFOEp->MbxHeader.length) - 0x0006;
                   packetnumber = etohl(aFOEp->PacketNumber);
@@ -174,7 +174,7 @@ int ecx_FOEread(ecx_contextt *context, uint16 slave, char *filename, uint32 pass
                }
                else
                {
-                  if(aFOEp->OpCode == ECT_FOE_ERROR)
+                  if (aFOEp->OpCode == ECT_FOE_ERROR)
                   {
                      /* FoE error */
                      wkc = -EC_ERR_TYPE_FOE_ERROR;
@@ -195,8 +195,8 @@ int ecx_FOEread(ecx_contextt *context, uint16 slave, char *filename, uint32 pass
          }
       } while (worktodo);
    }
-   if(MbxIn) ecx_dropmbx(context, MbxIn);
-   if(MbxOut) ecx_dropmbx(context, MbxOut);
+   if (MbxIn) ecx_dropmbx(context, MbxIn);
+   if (MbxOut) ecx_dropmbx(context, MbxOut);
    return wkc;
 }
 
@@ -260,7 +260,7 @@ int ecx_FOEwrite(ecx_contextt *context, uint16 slave, char *filename, uint32 pas
       do
       {
          worktodo = FALSE;
-         if(MbxIn) ecx_dropmbx(context, MbxIn);
+         if (MbxIn) ecx_dropmbx(context, MbxIn);
          MbxIn = NULL;
          /* read slave response */
          wkc = ecx_mbxreceive(context, slave, &MbxIn, timeout);
@@ -272,130 +272,130 @@ int ecx_FOEwrite(ecx_contextt *context, uint16 slave, char *filename, uint32 pas
             {
                switch (aFOEp->OpCode)
                {
-                  case ECT_FOE_ACK:
+               case ECT_FOE_ACK:
+               {
+                  packetnumber = etohl(aFOEp->PacketNumber);
+                  if (packetnumber == sendpacket)
                   {
-                     packetnumber = etohl(aFOEp->PacketNumber);
-                     if (packetnumber == sendpacket)
+                     if (context->FOEhook)
                      {
-                        if (context->FOEhook)
-                        {
-                           context->FOEhook(slave, packetnumber, psize);
-                        }
-                        tsize = psize;
-                        if (tsize > maxdata)
-                        {
-                           tsize = maxdata;
-                        }
-                        if(tsize || dofinalzero)
-                        {
-                           worktodo = TRUE;
-                           dofinalzero = FALSE;
-                           segmentdata = tsize;
-                           psize -= segmentdata;
-                           /* if last packet was full size, add a zero size packet as final */
-                           /* EOF is defined as packetsize < full packetsize */
-                           if (!psize && (segmentdata == maxdata))
-                           {
-                              dofinalzero = TRUE;
-                           }
-                           MbxOut = ecx_getmbx(context);
-                           ec_clearmbx(MbxOut);
-                           FOEp = (ec_FOEt *)MbxOut;
-                           FOEp->MbxHeader.length = htoes((uint16)(0x0006 + segmentdata));
-                           FOEp->MbxHeader.address = htoes(0x0000);
-                           FOEp->MbxHeader.priority = 0x00;
-                           /* get new mailbox count value */
-                           cnt = ec_nextmbxcnt(context->slavelist[slave].mbx_cnt);
-                           context->slavelist[slave].mbx_cnt = cnt;
-                           FOEp->MbxHeader.mbxtype = ECT_MBXT_FOE + MBX_HDR_SET_CNT(cnt); /* FoE */
-                           FOEp->OpCode = ECT_FOE_DATA;
-                           sendpacket++;
-                           FOEp->PacketNumber = htoel(sendpacket);
-                           memcpy(&FOEp->Data[0], p, segmentdata);
-                           p = (uint8 *)p + segmentdata;
-                           /* send FoE data to slave */
-                           wkc = ecx_mbxsend(context, slave, MbxOut, EC_TIMEOUTTXM);
-                           MbxOut = NULL;
-                           if (wkc <= 0)
-                           {
-                              worktodo = FALSE;
-                           }
-                        }
+                        context->FOEhook(slave, packetnumber, psize);
                      }
-                     else
+                     tsize = psize;
+                     if (tsize > maxdata)
                      {
-                        /* FoE error */
-                        wkc = -EC_ERR_TYPE_FOE_PACKETNUMBER;
+                        tsize = maxdata;
                      }
-                     break;
-                  }
-                  case ECT_FOE_BUSY:
-                  {
-                     /* resend if data has been send before */
-                     /* otherwise ignore */
-                     if (sendpacket)
+                     if (tsize || dofinalzero)
                      {
-                        psize += segmentdata;
-                        p = (uint8 *)p - segmentdata;
-                        --sendpacket;
-                        tsize = psize;
-                        if (tsize > maxdata)
+                        worktodo = TRUE;
+                        dofinalzero = FALSE;
+                        segmentdata = tsize;
+                        psize -= segmentdata;
+                        /* if last packet was full size, add a zero size packet as final */
+                        /* EOF is defined as packetsize < full packetsize */
+                        if (!psize && (segmentdata == maxdata))
                         {
-                           tsize = maxdata;
+                           dofinalzero = TRUE;
                         }
-                        if(tsize || dofinalzero)
+                        MbxOut = ecx_getmbx(context);
+                        ec_clearmbx(MbxOut);
+                        FOEp = (ec_FOEt *)MbxOut;
+                        FOEp->MbxHeader.length = htoes((uint16)(0x0006 + segmentdata));
+                        FOEp->MbxHeader.address = htoes(0x0000);
+                        FOEp->MbxHeader.priority = 0x00;
+                        /* get new mailbox count value */
+                        cnt = ec_nextmbxcnt(context->slavelist[slave].mbx_cnt);
+                        context->slavelist[slave].mbx_cnt = cnt;
+                        FOEp->MbxHeader.mbxtype = ECT_MBXT_FOE + MBX_HDR_SET_CNT(cnt); /* FoE */
+                        FOEp->OpCode = ECT_FOE_DATA;
+                        sendpacket++;
+                        FOEp->PacketNumber = htoel(sendpacket);
+                        memcpy(&FOEp->Data[0], p, segmentdata);
+                        p = (uint8 *)p + segmentdata;
+                        /* send FoE data to slave */
+                        wkc = ecx_mbxsend(context, slave, MbxOut, EC_TIMEOUTTXM);
+                        MbxOut = NULL;
+                        if (wkc <= 0)
                         {
-                           worktodo = TRUE;
-                           dofinalzero = FALSE;
-                           segmentdata = tsize;
-                           psize -= segmentdata;
-                           /* if last packet was full size, add a zero size packet as final */
-                           /* EOF is defined as packetsize < full packetsize */
-                           if (!psize && (segmentdata == maxdata))
-                           {
-                              dofinalzero = TRUE;
-                           }
-                           FOEp->MbxHeader.length = htoes((uint16)(0x0006 + segmentdata));
-                           FOEp->MbxHeader.address = htoes(0x0000);
-                           FOEp->MbxHeader.priority = 0x00;
-                           /* get new mailbox count value */
-                           cnt = ec_nextmbxcnt(context->slavelist[slave].mbx_cnt);
-                           context->slavelist[slave].mbx_cnt = cnt;
-                           FOEp->MbxHeader.mbxtype = ECT_MBXT_FOE + MBX_HDR_SET_CNT(cnt); /* FoE */
-                           FOEp->OpCode = ECT_FOE_DATA;
-                           sendpacket++;
-                           FOEp->PacketNumber = htoel(sendpacket);
-                           memcpy(&FOEp->Data[0], p, segmentdata);
-                           p = (uint8 *)p + segmentdata;
-                           /* send FoE data to slave */
-                           wkc = ecx_mbxsend(context, slave, (ec_mbxbuft *)&MbxOut, EC_TIMEOUTTXM);
-                           if (wkc <= 0)
-                           {
-                              worktodo = FALSE;
-                           }
+                           worktodo = FALSE;
                         }
                      }
-                     break;
                   }
-                  case ECT_FOE_ERROR:
+                  else
                   {
                      /* FoE error */
-                     if (aFOEp->ErrorCode == 0x8001)
+                     wkc = -EC_ERR_TYPE_FOE_PACKETNUMBER;
+                  }
+                  break;
+               }
+               case ECT_FOE_BUSY:
+               {
+                  /* resend if data has been send before */
+                  /* otherwise ignore */
+                  if (sendpacket)
+                  {
+                     psize += segmentdata;
+                     p = (uint8 *)p - segmentdata;
+                     --sendpacket;
+                     tsize = psize;
+                     if (tsize > maxdata)
                      {
-                        wkc = -EC_ERR_TYPE_FOE_FILE_NOTFOUND;
+                        tsize = maxdata;
                      }
-                     else
+                     if (tsize || dofinalzero)
                      {
-                        wkc = -EC_ERR_TYPE_FOE_ERROR;
+                        worktodo = TRUE;
+                        dofinalzero = FALSE;
+                        segmentdata = tsize;
+                        psize -= segmentdata;
+                        /* if last packet was full size, add a zero size packet as final */
+                        /* EOF is defined as packetsize < full packetsize */
+                        if (!psize && (segmentdata == maxdata))
+                        {
+                           dofinalzero = TRUE;
+                        }
+                        FOEp->MbxHeader.length = htoes((uint16)(0x0006 + segmentdata));
+                        FOEp->MbxHeader.address = htoes(0x0000);
+                        FOEp->MbxHeader.priority = 0x00;
+                        /* get new mailbox count value */
+                        cnt = ec_nextmbxcnt(context->slavelist[slave].mbx_cnt);
+                        context->slavelist[slave].mbx_cnt = cnt;
+                        FOEp->MbxHeader.mbxtype = ECT_MBXT_FOE + MBX_HDR_SET_CNT(cnt); /* FoE */
+                        FOEp->OpCode = ECT_FOE_DATA;
+                        sendpacket++;
+                        FOEp->PacketNumber = htoel(sendpacket);
+                        memcpy(&FOEp->Data[0], p, segmentdata);
+                        p = (uint8 *)p + segmentdata;
+                        /* send FoE data to slave */
+                        wkc = ecx_mbxsend(context, slave, (ec_mbxbuft *)&MbxOut, EC_TIMEOUTTXM);
+                        if (wkc <= 0)
+                        {
+                           worktodo = FALSE;
+                        }
                      }
-                     break;
                   }
-                  default:
+                  break;
+               }
+               case ECT_FOE_ERROR:
+               {
+                  /* FoE error */
+                  if (aFOEp->ErrorCode == 0x8001)
                   {
-                     /* unexpected mailbox received */
-                     wkc = -EC_ERR_TYPE_PACKET_ERROR;
-                     break;
+                     wkc = -EC_ERR_TYPE_FOE_FILE_NOTFOUND;
+                  }
+                  else
+                  {
+                     wkc = -EC_ERR_TYPE_FOE_ERROR;
                   }
+                  break;
+               }
+               default:
+               {
+                  /* unexpected mailbox received */
+                  wkc = -EC_ERR_TYPE_PACKET_ERROR;
+                  break;
+               }
                }
             }
             else
@@ -406,7 +406,7 @@ int ecx_FOEwrite(ecx_contextt *context, uint16 slave, char *filename, uint32 pas
          }
       } while (worktodo);
    }
-   if(MbxIn) ecx_dropmbx(context, MbxIn);
-   if(MbxOut) ecx_dropmbx(context, MbxOut);
+   if (MbxIn) ecx_dropmbx(context, MbxIn);
+   if (MbxOut) ecx_dropmbx(context, MbxOut);
    return wkc;
 }
index 9927295671433842fcc935ac9e06db45264d87a5..482be436aa73d26119e3bca432cb2a52e08699de 100644 (file)
 #include "osal.h"
 #include "oshw.h"
 
-
 /** delay in us for eeprom ready loop */
-#define EC_LOCALDELAY  200
+#define EC_LOCALDELAY 200
 
 /** record for ethercat eeprom communications */
 PACKED_BEGIN
 typedef struct PACKED
 {
-   uint16    comm;
-   uint16    addr;
-   uint16    d2;
+   uint16 comm;
+   uint16 addr;
+   uint16 d2;
 } ec_eepromt;
 PACKED_END
 
@@ -39,9 +38,9 @@ PACKED_END
 PACKED_BEGIN
 typedef struct PACKED
 {
-   ec_mbxheadert   MbxHeader;
-   uint16          Type;
-   uint16          Detail;
+   ec_mbxheadert MbxHeader;
+   uint16 Type;
+   uint16 Detail;
 } ec_mbxerrort;
 PACKED_END
 
@@ -49,12 +48,12 @@ PACKED_END
 PACKED_BEGIN
 typedef struct PACKED
 {
-   ec_mbxheadert   MbxHeader;
-   uint16          CANOpen;
-   uint16          ErrorCode;
-   uint8           ErrorReg;
-   uint8           bData;
-   uint16          w1,w2;
+   ec_mbxheadert MbxHeader;
+   uint16 CANOpen;
+   uint16 ErrorCode;
+   uint8 ErrorReg;
+   uint8 bData;
+   uint16 w1, w2;
 } ec_emcyt;
 PACKED_END
 
@@ -62,11 +61,11 @@ PACKED_END
  *
  * @return First element in list over available network adapters.
  */
-ec_adaptert * ec_find_adapters (void)
+ec_adaptert *ec_find_adapters(void)
 {
-   ec_adaptert * ret_adapter;
+   ec_adaptert *ret_adapter;
 
-   ret_adapter = oshw_find_adapters ();
+   ret_adapter = oshw_find_adapters();
 
    return ret_adapter;
 }
@@ -75,9 +74,9 @@ ec_adaptert * ec_find_adapters (void)
  *
  * @param[in] adapter = Struct holding adapter name, description and pointer to next.
  */
-void ec_free_adapters (ec_adaptert * adapter)
+void ec_free_adapters(ec_adaptert *adapter)
 {
-   oshw_free_adapters (adapter);
+   oshw_free_adapters(adapter);
 }
 
 /** Pushes an error on the error list.
@@ -171,7 +170,7 @@ void ecx_packeterror(ecx_contextt *context, uint16 Slave, uint16 Index, uint8 Su
  * @param[in]  Slave        = Slave number
  * @param[in]  Detail       = Following EtherCAT specification
  */
-static void ecx_mbxerror(ecx_contextt *context, uint16 Slave,uint16 Detail)
+static void ecx_mbxerror(ecx_contextt *context, uint16 Slave, uint16 Detail)
 {
    ec_errort Ec;
 
@@ -195,8 +194,8 @@ static void ecx_mbxerror(ecx_contextt *context, uint16 Slave,uint16 Detail)
  * @param[in]  w1
  * @param[in]  w2
  */
-static void ecx_mbxemergencyerror(ecx_contextt *context, uint16 Slave,uint16 ErrorCode,uint16 ErrorReg,
-    uint8 b1, uint16 w1, uint16 w2)
+static void ecx_mbxemergencyerror(ecx_contextt *context, uint16 Slave, uint16 ErrorCode, uint16 ErrorReg,
+                                  uint8 b1, uint16 w1, uint16 w2)
 {
    ec_errort Ec;
 
@@ -219,7 +218,7 @@ static void ecx_mbxemergencyerror(ecx_contextt *context, uint16 Slave,uint16 Err
  * @param[in] ifname   = Dev name, f.e. "eth0"
  * @return >0 if OK
  */
-int ecx_init(ecx_contextt *context, const char * ifname)
+int ecx_init(ecx_contextt *context, const char *ifname)
 {
    ecx_initmbxpool(context);
    return ecx_setupnic(context->port, ifname, FALSE);
@@ -265,12 +264,12 @@ ec_mbxbuft *ecx_getmbx(ecx_contextt *context)
    ec_mbxbuft *mbx = NULL;
    ec_mbxpoolt *mbxpool = context->mbxpool;
    osal_mutex_lock(mbxpool->mbxmutex);
-   if(mbxpool->listcount > 0)
+   if (mbxpool->listcount > 0)
    {
       mbx = (ec_mbxbuft *)&(mbxpool->mbx[mbxpool->mbxemptylist[mbxpool->listtail]]);
-//      printf("getmbx item:%d mbx:%p\n\r",mbxpool->mbxemptylist[mbxpool->listtail], mbx);
+      //      printf("getmbx item:%d mbx:%p\n\r",mbxpool->mbxemptylist[mbxpool->listtail], mbx);
       mbxpool->listtail++;
-      if(mbxpool->listtail >= EC_MBXPOOLSIZE) mbxpool->listtail = 0;
+      if (mbxpool->listtail >= EC_MBXPOOLSIZE) mbxpool->listtail = 0;
       mbxpool->listcount--;
    }
    osal_mutex_unlock(mbxpool->mbxmutex);
@@ -281,12 +280,12 @@ int ecx_dropmbx(ecx_contextt *context, ec_mbxbuft *mbx)
 {
    ec_mbxpoolt *mbxpool = context->mbxpool;
    int item = mbx - &(mbxpool->mbx[0]);
-//   printf("dropmbx item:%d mbx:%p\n\r",item, mbx);
-   if((item >= 0) && (item < EC_MBXPOOLSIZE))
+   //   printf("dropmbx item:%d mbx:%p\n\r",item, mbx);
+   if ((item >= 0) && (item < EC_MBXPOOLSIZE))
    {
       osal_mutex_lock(mbxpool->mbxmutex);
       mbxpool->mbxemptylist[mbxpool->listhead++] = item;
-      if(mbxpool->listhead >= EC_MBXPOOLSIZE) mbxpool->listhead = 0;
+      if (mbxpool->listhead >= EC_MBXPOOLSIZE) mbxpool->listhead = 0;
       mbxpool->listcount++;
       osal_mutex_unlock(mbxpool->mbxmutex);
       return 1;
@@ -299,14 +298,14 @@ int ecx_initmbxpool(ecx_contextt *context)
    int retval = 0;
    ec_mbxpoolt *mbxpool = context->mbxpool;
    mbxpool->mbxmutex = (osal_mutext *)osal_mutex_create();
-   for(int item = 0 ; item < EC_MBXPOOLSIZE ; item++)
+   for (int item = 0; item < EC_MBXPOOLSIZE; item++)
    {
       mbxpool->mbxemptylist[item] = item;
    }
    mbxpool->listhead = 0;
    mbxpool->listtail = 0;
    mbxpool->listcount = EC_MBXPOOLSIZE;
- //  printf("intmbxpool mbxp:%p mutex:%p\n\r", mbxpool->mbx[0],  mbxpool->mbxmutex);
  //  printf("intmbxpool mbxp:%p mutex:%p\n\r", mbxpool->mbx[0],  mbxpool->mbxmutex);
    return retval;
 }
 
@@ -319,7 +318,7 @@ int ecx_initmbxqueue(ecx_contextt *context, uint16 group)
    mbxqueue->listhead = 0;
    mbxqueue->listtail = 0;
    mbxqueue->listcount = 0;
-   for(cnt = 0 ; cnt < EC_MBXPOOLSIZE ; cnt++)
+   for (cnt = 0; cnt < EC_MBXPOOLSIZE; cnt++)
       mbxqueue->mbxticket[cnt] = -1;
    return retval;
 }
@@ -331,15 +330,17 @@ int ecx_mbxaddqueue(ecx_contextt *context, uint16 slave, ec_mbxbuft *mbx)
    uint8 group = context->slavelist[slave].group;
    ec_mbxqueuet *mbxqueue = &(context->grouplist[group].mbxtxqueue);
    osal_mutex_lock(mbxqueue->mbxmutex);
-   if((mbxqueue->listcount < EC_MBXPOOLSIZE))
+   if ((mbxqueue->listcount < EC_MBXPOOLSIZE))
    {
       ticketloc = mbxqueue->listhead;
-      while((++ticket < EC_MBXPOOLSIZE) && (mbxqueue->mbxticket[ticket] >= 0)) {};
+      while ((++ticket < EC_MBXPOOLSIZE) && (mbxqueue->mbxticket[ticket] >= 0))
+      {
+      };
       mbxqueue->mbxticket[ticket] = ticketloc;
       mbxqueue->mbxslave[ticketloc] = slave;
       mbxqueue->mbx[ticketloc] = mbx;
       mbxqueue->listhead++;
-      if(mbxqueue->listhead >= EC_MBXPOOLSIZE) mbxqueue->listhead = 0;
+      if (mbxqueue->listhead >= EC_MBXPOOLSIZE) mbxqueue->listhead = 0;
       mbxqueue->mbxremove[ticketloc] = 0;
       mbxqueue->mbxstate[ticketloc] = EC_MBXQUEUESTATE_REQ;
       mbxqueue->listcount++;
@@ -351,12 +352,12 @@ int ecx_mbxaddqueue(ecx_contextt *context, uint16 slave, ec_mbxbuft *mbx)
 int ecx_mbxdonequeue(ecx_contextt *context, uint16 slave, int ticket)
 {
    int retval = 0;
-   if((ticket >= 0) && (ticket < EC_MBXPOOLSIZE))
+   if ((ticket >= 0) && (ticket < EC_MBXPOOLSIZE))
    {
       uint8 group = context->slavelist[slave].group;
       ec_mbxqueuet *mbxqueue = &(context->grouplist[group].mbxtxqueue);
       osal_mutex_lock(mbxqueue->mbxmutex);
-      if(mbxqueue->mbxstate[mbxqueue->mbxticket[ticket]] == EC_MBXQUEUESTATE_DONE)
+      if (mbxqueue->mbxstate[mbxqueue->mbxticket[ticket]] == EC_MBXQUEUESTATE_DONE)
       {
          mbxqueue->mbxremove[mbxqueue->mbxticket[ticket]] = 1;
          mbxqueue->mbxticket[ticket] = -1;
@@ -370,12 +371,12 @@ int ecx_mbxdonequeue(ecx_contextt *context, uint16 slave, int ticket)
 int ecx_mbxexpirequeue(ecx_contextt *context, uint16 slave, int ticket)
 {
    int retval = 0;
-   if((ticket >= 0) && (ticket < EC_MBXPOOLSIZE))
+   if ((ticket >= 0) && (ticket < EC_MBXPOOLSIZE))
    {
       uint8 group = context->slavelist[slave].group;
       ec_mbxqueuet *mbxqueue = &(context->grouplist[group].mbxtxqueue);
       osal_mutex_lock(mbxqueue->mbxmutex);
-      if(mbxqueue->mbxstate[mbxqueue->mbxticket[ticket]] > EC_MBXQUEUESTATE_NONE)
+      if (mbxqueue->mbxstate[mbxqueue->mbxticket[ticket]] > EC_MBXQUEUESTATE_NONE)
       {
          mbxqueue->mbxremove[mbxqueue->mbxticket[ticket]] = 1;
          mbxqueue->mbxticket[ticket] = -1;
@@ -395,11 +396,12 @@ int ecx_mbxrotatequeue(ecx_contextt *context, uint16 group, int ticketloc)
    osal_mutex_lock(mbxqueue->mbxmutex);
    int head = mbxqueue->listhead;
    int tail = mbxqueue->listtail;
-   if(head != tail)
+   if (head != tail)
    {
-      while((cnt < EC_MBXPOOLSIZE) && (mbxqueue->mbxticket[cnt] != ticketloc)) cnt++;
+      while ((cnt < EC_MBXPOOLSIZE) && (mbxqueue->mbxticket[cnt] != ticketloc))
+         cnt++;
       ticket = cnt;
-      if((ticket >= 0) && (ticket < EC_MBXPOOLSIZE))
+      if ((ticket >= 0) && (ticket < EC_MBXPOOLSIZE))
       {
          mbxqueue->mbxticket[ticket] = head;
          mbxqueue->mbxremove[head] = mbxqueue->mbxremove[tail];
@@ -407,13 +409,13 @@ int ecx_mbxrotatequeue(ecx_contextt *context, uint16 group, int ticketloc)
          mbxqueue->mbxslave[head] = mbxqueue->mbxslave[tail];
          mbxqueue->mbx[head] = mbxqueue->mbx[tail];
          mbxqueue->listhead++;
-         if(mbxqueue->listhead >= EC_MBXPOOLSIZE) mbxqueue->listhead = 0;
+         if (mbxqueue->listhead >= EC_MBXPOOLSIZE) mbxqueue->listhead = 0;
          mbxqueue->listtail++;
-         if(mbxqueue->listtail >= EC_MBXPOOLSIZE) mbxqueue->listtail = 0;
+         if (mbxqueue->listtail >= EC_MBXPOOLSIZE) mbxqueue->listtail = 0;
          retval = 1;
       }
    }
-   else 
+   else
    {
       retval = 1;
    }
@@ -423,7 +425,7 @@ int ecx_mbxrotatequeue(ecx_contextt *context, uint16 group, int ticketloc)
 
 int ecx_slavembxcyclic(ecx_contextt *context, uint16 slave)
 {
-   if(context->slavelist[slave].mbxstatus)
+   if (context->slavelist[slave].mbxstatus)
    {
       context->slavelist[slave].coembxin = EC_MBXINENABLE;
       context->slavelist[slave].mbxhandlerstate = ECT_MBXH_CYCLIC;
@@ -436,7 +438,7 @@ ec_mbxbuft *ecx_mbxdropqueue(ecx_contextt *context, uint16 group, int ticketloc)
 {
    ec_mbxbuft *mbx;
    ec_mbxqueuet *mbxqueue = &(context->grouplist[group].mbxtxqueue);
-//   printf("mbxgetqueue item:%d mbx:%p\n\r",item, mbx);
+   //   printf("mbxgetqueue item:%d mbx:%p\n\r",item, mbx);
    osal_mutex_lock(mbxqueue->mbxmutex);
    mbxqueue->mbxstate[ticketloc] = EC_MBXQUEUESTATE_NONE;
    mbxqueue->mbxremove[ticketloc] = 0;
@@ -444,12 +446,12 @@ ec_mbxbuft *ecx_mbxdropqueue(ecx_contextt *context, uint16 group, int ticketloc)
    mbx = mbxqueue->mbx[ticketloc];
    mbxqueue->mbx[ticketloc] = NULL;
    mbxqueue->listtail++;
-   if(mbxqueue->listtail >= EC_MBXPOOLSIZE) mbxqueue->listtail = 0;
+   if (mbxqueue->listtail >= EC_MBXPOOLSIZE) mbxqueue->listtail = 0;
    mbxqueue->listcount--;
    osal_mutex_unlock(mbxqueue->mbxmutex);
    return mbx;
 }
+
 /** Read one byte from slave EEPROM via cache.
  *  If the cache location is empty then a read request is made to the slave.
  *  Depending on the slave capabilities the request is 4 or 8 bytes.
@@ -464,7 +466,7 @@ uint8 ecx_siigetbyte(ecx_contextt *context, uint16 slave, uint16 address)
    uint64 edat64;
    uint32 edat32;
    uint16 mapw, mapb;
-   int lp,cnt;
+   int lp, cnt;
    uint8 retval;
 
    retval = 0xff;
@@ -488,7 +490,7 @@ uint8 ecx_siigetbyte(ecx_contextt *context, uint16 slave, uint16 address)
          configadr = context->slavelist[slave].configadr;
          ecx_eeprom2master(context, slave); /* set eeprom control to master */
          eadr = address >> 1;
-         edat64 = ecx_readeepromFP (context, configadr, eadr, EC_TIMEOUTEEP);
+         edat64 = ecx_readeepromFP(context, configadr, eadr, EC_TIMEOUTEEP);
          /* 8 byte response */
          if (context->slavelist[slave].eep_8byte)
          {
@@ -505,7 +507,7 @@ uint8 ecx_siigetbyte(ecx_contextt *context, uint16 slave, uint16 address)
          /* find bitmap location */
          mapw = eadr >> 4;
          mapb = (uint16)((eadr << 1) - (mapw << 5));
-         for(lp = 0 ; lp < cnt ; lp++)
+         for (lp = 0; lp < cnt; lp++)
          {
             /* set bitmap for each byte that is read */
             context->esimap[mapw] |= (1U << mapb);
@@ -571,17 +573,17 @@ int16 ecx_siifind(ecx_contextt *context, uint16 slave, uint16 cat)
  */
 void ecx_siistring(ecx_contextt *context, char *str, uint16 slave, uint16 Sn)
 {
-   uint16 a,i,j,l,n,ba;
+   uint16 a, i, j, l, n, ba;
    char *ptr;
    uint8 eectl = context->slavelist[slave].eep_pdi;
 
    ptr = str;
-   a = ecx_siifind (context, slave, ECT_SII_STRING); /* find string section */
+   a = ecx_siifind(context, slave, ECT_SII_STRING); /* find string section */
    if (a > 0)
    {
-      ba = a + 2; /* skip SII section header */
+      ba = a + 2;                               /* skip SII section header */
       n = ecx_siigetbyte(context, slave, ba++); /* read number of strings in section */
-      if (Sn <= n) /* is req string available? */
+      if (Sn <= n)                              /* is req string available? */
       {
          for (i = 1; i <= Sn; i++) /* walk through strings */
          {
@@ -595,7 +597,7 @@ void ecx_siistring(ecx_contextt *context, char *str, uint16 slave, uint16 Sn)
                ptr = str;
                for (j = 1; j <= l; j++) /* copy one string */
                {
-                  if(j <= EC_MAXNAME)
+                  if (j <= EC_MAXNAME)
                   {
                      *ptr = (char)ecx_siigetbyte(context, slave, ba++);
                      ptr++;
@@ -627,9 +629,9 @@ void ecx_siistring(ecx_contextt *context, char *str, uint16 slave, uint16 Sn)
  *  @param[out] FMMU    = FMMU struct from SII, max. 4 FMMU's
  *  @return number of FMMU's defined in section
  */
-uint16 ecx_siiFMMU(ecx_contextt *context, uint16 slave, ec_eepromFMMUtFMMU)
+uint16 ecx_siiFMMU(ecx_contextt *context, uint16 slave, ec_eepromFMMUt *FMMU)
 {
-   uint16  a;
+   uint16 a;
    uint8 eectl = context->slavelist[slave].eep_pdi;
 
    FMMU->nFMMU = 0;
@@ -667,9 +669,9 @@ uint16 ecx_siiFMMU(ecx_contextt *context, uint16 slave, ec_eepromFMMUt* FMMU)
  *  @param[out] SM      = first SM struct from SII
  *  @return number of SM's defined in section
  */
-uint16 ecx_siiSM(ecx_contextt *context, uint16 slave, ec_eepromSMtSM)
+uint16 ecx_siiSM(ecx_contextt *context, uint16 slave, ec_eepromSMt *SM)
 {
-   uint16 a,w;
+   uint16 a, w;
    uint8 eectl = context->slavelist[slave].eep_pdi;
 
    SM->nSM = 0;
@@ -704,7 +706,7 @@ uint16 ecx_siiSM(ecx_contextt *context, uint16 slave, ec_eepromSMt* SM)
  *  @param[in]  n       = SM number
  *  @return >0 if OK
  */
-uint16 ecx_siiSMnext(ecx_contextt *context, uint16 slave, ec_eepromSMtSM, uint16 n)
+uint16 ecx_siiSMnext(ecx_contextt *context, uint16 slave, ec_eepromSMt *SM, uint16 n)
 {
    uint16 a;
    uint16 retVal = 0;
@@ -738,16 +740,17 @@ uint16 ecx_siiSMnext(ecx_contextt *context, uint16 slave, ec_eepromSMt* SM, uint
  *  @param[in]  t       = 0=RXPDO 1=TXPDO
  *  @return mapping size in bits of PDO
  */
-uint32 ecx_siiPDO(ecx_contextt *context, uint16 slave, ec_eepromPDOtPDO, uint8 t)
+uint32 ecx_siiPDO(ecx_contextt *context, uint16 slave, ec_eepromPDOt *PDO, uint8 t)
 {
-   uint16 a , w, c, e, er, Size;
+   uint16 a, w, c, e, er, Size;
    uint8 eectl = context->slavelist[slave].eep_pdi;
 
    Size = 0;
    PDO->nPDO = 0;
    PDO->Length = 0;
    PDO->Index[1] = 0;
-   for (c = 0 ; c < EC_MAXSM ; c++) PDO->SMbitsize[c] = 0;
+   for (c = 0; c < EC_MAXSM; c++)
+      PDO->SMbitsize[c] = 0;
    if (t > 1)
       t = 1;
    PDO->Startpos = ecx_siifind(context, slave, ECT_SII_PDO + t);
@@ -780,7 +783,7 @@ uint32 ecx_siiPDO(ecx_contextt *context, uint16 slave, ec_eepromPDOt* PDO, uint8
                PDO->BitSize[PDO->nPDO] += ecx_siigetbyte(context, slave, a++);
                a += 2;
             }
-            PDO->SMbitsize[ PDO->SyncM[PDO->nPDO] ] += PDO->BitSize[PDO->nPDO];
+            PDO->SMbitsize[PDO->SyncM[PDO->nPDO]] += PDO->BitSize[PDO->nPDO];
             Size += PDO->BitSize[PDO->nPDO];
             c++;
          }
@@ -794,8 +797,7 @@ uint32 ecx_siiPDO(ecx_contextt *context, uint16 slave, ec_eepromPDOt* PDO, uint8
          {
             c = PDO->Length; /* limit number of PDO entries in buffer */
          }
-      }
-      while (c < PDO->Length);
+      } while (c < PDO->Length);
    }
    if (eectl)
    {
@@ -819,22 +821,22 @@ int ecx_FPRD_multi(ecx_contextt *context, int n, uint16 *configlst, ec_alstatust
    idx = ecx_getindex(port);
    slcnt = 0;
    ecx_setupdatagram(port, &(port->txbuf[idx]), EC_CMD_FPRD, idx,
-      *(configlst + slcnt), ECT_REG_ALSTAT, sizeof(ec_alstatust), slstatlst + slcnt);
+                     *(configlst + slcnt), ECT_REG_ALSTAT, sizeof(ec_alstatust), slstatlst + slcnt);
    sldatapos[slcnt] = EC_HEADERSIZE;
-   while(++slcnt < (n - 1))
+   while (++slcnt < (n - 1))
    {
       sldatapos[slcnt] = ecx_adddatagram(port, &(port->txbuf[idx]), EC_CMD_FPRD, idx, TRUE,
-                            *(configlst + slcnt), ECT_REG_ALSTAT, sizeof(ec_alstatust), slstatlst + slcnt);
+                                         *(configlst + slcnt), ECT_REG_ALSTAT, sizeof(ec_alstatust), slstatlst + slcnt);
    }
-   if(slcnt < n)
+   if (slcnt < n)
    {
       sldatapos[slcnt] = ecx_adddatagram(port, &(port->txbuf[idx]), EC_CMD_FPRD, idx, FALSE,
-                            *(configlst + slcnt), ECT_REG_ALSTAT, sizeof(ec_alstatust), slstatlst + slcnt);
+                                         *(configlst + slcnt), ECT_REG_ALSTAT, sizeof(ec_alstatust), slstatlst + slcnt);
    }
    wkc = ecx_srconfirm(port, idx, timeout);
    if (wkc >= 0)
    {
-      for(slcnt = 0 ; slcnt < n ; slcnt++)
+      for (slcnt = 0; slcnt < n; slcnt++)
       {
          memcpy(slstatlst + slcnt, &(port->rxbuf[idx][sldatapos[slcnt]]), sizeof(ec_alstatust));
       }
@@ -862,7 +864,7 @@ int ecx_readstate(ecx_contextt *context)
    rval = 0;
    wkc = ecx_BRD(context->port, 0, ECT_REG_ALSTAT, sizeof(rval), &rval, EC_TIMEOUTRET);
 
-   if(wkc >= *(context->slavecount))
+   if (wkc >= *(context->slavecount))
    {
       allslavespresent = TRUE;
    }
@@ -874,7 +876,7 @@ int ecx_readstate(ecx_contextt *context)
    {
       noerrorflag = TRUE;
       context->slavelist[0].ALstatuscode = 0;
-   }   
+   }
    else
    {
       noerrorflag = FALSE;
@@ -882,19 +884,19 @@ int ecx_readstate(ecx_contextt *context)
 
    switch (bitwisestate)
    {
-       /* Note: BOOT State collides with PRE_OP | INIT and cannot be used here */
-      case EC_STATE_INIT:
-      case EC_STATE_PRE_OP:
-      case EC_STATE_SAFE_OP:
-      case EC_STATE_OPERATIONAL:
-         allslavessamestate = TRUE;
-         context->slavelist[0].state = bitwisestate;
-         break;
-      default:
-         allslavessamestate = FALSE;
-         break;
+      /* Note: BOOT State collides with PRE_OP | INIT and cannot be used here */
+   case EC_STATE_INIT:
+   case EC_STATE_PRE_OP:
+   case EC_STATE_SAFE_OP:
+   case EC_STATE_OPERATIONAL:
+      allslavessamestate = TRUE;
+      context->slavelist[0].state = bitwisestate;
+      break;
+   default:
+      allslavessamestate = FALSE;
+      break;
    }
-    
+
    if (noerrorflag && allslavessamestate && allslavespresent)
    {
       /* No slave has toggled the error flag so the alstatuscode
@@ -917,14 +919,14 @@ int ecx_readstate(ecx_contextt *context)
       fslave = 1;
       do
       {
-         lslave = (uint16)*(context->slavecount);
+         lslave = (uint16) * (context->slavecount);
          if ((lslave - fslave) >= MAX_FPRD_MULTI)
          {
             lslave = fslave + MAX_FPRD_MULTI - 1;
          }
          for (slave = fslave; slave <= lslave; slave++)
          {
-            const ec_alstatust zero = { 0, 0, 0 };
+            const ec_alstatust zero = {0, 0, 0};
 
             configadr = context->slavelist[slave].configadr;
             slca[slave - fslave] = configadr;
@@ -947,7 +949,7 @@ int ecx_readstate(ecx_contextt *context)
       } while (lslave < *(context->slavecount));
       context->slavelist[0].state = lowest;
    }
-  
+
    return lowest;
 }
 
@@ -966,14 +968,14 @@ int ecx_writestate(ecx_contextt *context, uint16 slave)
    {
       slstate = htoes(context->slavelist[slave].state);
       ret = ecx_BWR(context->port, 0, ECT_REG_ALCTL, sizeof(slstate),
-                   &slstate, EC_TIMEOUTRET3);
+                    &slstate, EC_TIMEOUTRET3);
    }
    else
    {
       configadr = context->slavelist[slave].configadr;
 
       ret = ecx_FPWRw(context->port, configadr, ECT_REG_ALCTL,
-               htoes(context->slavelist[slave].state), EC_TIMEOUTRET3);
+                      htoes(context->slavelist[slave].state), EC_TIMEOUTRET3);
    }
    return ret;
 }
@@ -998,7 +1000,7 @@ uint16 ecx_statecheck(ecx_contextt *context, uint16 slave, uint16 reqstate, int
    ec_alstatust slstat;
    osal_timert timer;
 
-   if ( slave > *(context->slavecount) )
+   if (slave > *(context->slavecount))
    {
       return 0;
    }
@@ -1009,7 +1011,7 @@ uint16 ecx_statecheck(ecx_contextt *context, uint16 slave, uint16 reqstate, int
       if (slave < 1)
       {
          rval = 0;
-         ecx_BRD(context->port, 0, ECT_REG_ALSTAT, sizeof(rval), &rval , EC_TIMEOUTRET);
+         ecx_BRD(context->port, 0, ECT_REG_ALSTAT, sizeof(rval), &rval, EC_TIMEOUTRET);
          rval = etohs(rval);
       }
       else
@@ -1025,8 +1027,7 @@ uint16 ecx_statecheck(ecx_contextt *context, uint16 slave, uint16 reqstate, int
       {
          osal_usleep(1000);
       }
-   }
-   while ((state != reqstate) && (osal_timer_is_expired(&timer) == FALSE));
+   } while ((state != reqstate) && (osal_timer_is_expired(&timer) == FALSE));
    context->slavelist[slave].state = rval;
 
    return state;
@@ -1053,13 +1054,13 @@ uint8 ec_nextmbxcnt(uint8 cnt)
  */
 void ec_clearmbx(ec_mbxbuft *Mbx)
 {
-  if(Mbx)      
-    memset(Mbx, 0x00, EC_MAXMBX);
+   if (Mbx)
+      memset(Mbx, 0x00, EC_MAXMBX);
 }
 
 int ecx_clearmbxstatus(ecx_contextt *context, uint8 group)
 {
-   if(context->grouplist[group].mbxstatus && context->grouplist[group].mbxstatuslength)
+   if (context->grouplist[group].mbxstatus && context->grouplist[group].mbxstatuslength)
    {
       memset(context->grouplist[group].mbxstatus, 0x00, context->grouplist[group].mbxstatuslength);
       return 1;
@@ -1070,13 +1071,13 @@ int ecx_clearmbxstatus(ecx_contextt *context, uint8 group)
 int ecx_readmbxstatus(ecx_contextt *context, uint16 slave, uint8 *SMstat)
 {
    int wkc = 0;
-   if(context->slavelist[slave].mbxhandlerstate == ECT_MBXH_CYCLIC)
+   if (context->slavelist[slave].mbxhandlerstate == ECT_MBXH_CYCLIC)
    {
       *SMstat = *(context->slavelist[slave].mbxstatus);
       wkc = 1;
    }
    else
-   { 
+   {
       uint16 configadr = context->slavelist[slave].configadr;
       wkc = ecx_FPRD(context->port, configadr, ECT_REG_SM1STAT, sizeof(uint8), SMstat, EC_TIMEOUTRET);
    }
@@ -1116,8 +1117,7 @@ int ecx_mbxempty(ecx_contextt *context, uint16 slave, int timeout)
       {
          osal_usleep(EC_LOCALDELAY);
       }
-   }
-   while (((wkc <= 0) || ((SMstat & 0x08) != 0)) && (osal_timer_is_expired(&timer) == FALSE));
+   } while (((wkc <= 0) || ((SMstat & 0x08) != 0)) && (osal_timer_is_expired(&timer) == FALSE));
 
    if ((wkc > 0) && ((SMstat & 0x08) == 0))
    {
@@ -1137,73 +1137,73 @@ int ecx_mbxinhandler(ecx_contextt *context, uint8 group, int limit)
    ec_mbxerrort *MBXEp;
    uint8 SMcontr;
    uint16 SMstatex;
-   
+
    limitcnt = 0;
    int firstmbxpos = context->grouplist[group].lastmbxpos + 1;
    int maxcntstored = maxcnt;
    /* iterate over all possible mailbox slaves */
-   for(cnt = 0 ; cnt < maxcnt ; cnt++)
+   for (cnt = 0; cnt < maxcnt; cnt++)
    {
       /* start from last stored slave position to allow fair handling under load */
-      cntoffset =  firstmbxpos + cnt;
-      if(cntoffset >= maxcntstored) cntoffset -= maxcntstored;
+      cntoffset = firstmbxpos + cnt;
+      if (cntoffset >= maxcntstored) cntoffset -= maxcntstored;
       context->grouplist[group].lastmbxpos = cntoffset;
       uint16 slave = context->grouplist[group].mbxstatuslookup[cntoffset];
       ec_slavet *slaveitem = &context->slavelist[slave];
       uint16 configadr = slaveitem->configadr;
       /* cyclic handler enabled for this slave */
-      if(slaveitem->mbxhandlerstate == ECT_MBXH_CYCLIC)
+      if (slaveitem->mbxhandlerstate == ECT_MBXH_CYCLIC)
       {
          /* handle robust mailbox protocol state machine */
-         if(slaveitem->mbxrmpstate)
+         if (slaveitem->mbxrmpstate)
          {
-            if(slaveitem->islost)
+            if (slaveitem->islost)
             {
-                slaveitem->mbxrmpstate = 0;
+               slaveitem->mbxrmpstate = 0;
             }
             else
             {
-               switch(slaveitem->mbxrmpstate)
+               switch (slaveitem->mbxrmpstate)
                {
-                  case 1 :
-                     if(ecx_readmbxstatusex(context, slave, &(slaveitem->mbxinstateex)) > 0)
-                     {
-                        slaveitem->mbxinstateex ^= 0x0200; /* toggle repeat request */
-                        slaveitem->mbxrmpstate++;
-                     }
-                     break;
-                  case 2 :
-                     SMstatex = htoes(slaveitem->mbxinstateex);
-                     if(ecx_FPWR(context->port, configadr, ECT_REG_SM1STAT, sizeof(SMstatex), &(slaveitem->mbxinstateex), EC_TIMEOUTRET) > 0)
-                     {
-                        slaveitem->mbxrmpstate++;
-                     }
-                     break; 
-                  case 3 :
-                     /* wait for repeat ack */
-                     SMstatex = htoes(slaveitem->mbxinstateex);
-                     wkc2 = ecx_FPRD(context->port, configadr, ECT_REG_SM1CONTR, sizeof(SMcontr), &SMcontr, EC_TIMEOUTRET);
-                     if((wkc2 > 0) && ((SMcontr & 0x02) == (HI_BYTE(SMstatex) & 0x02)))
-                     {
-                        slaveitem->mbxrmpstate = 0;
-                     }
-                     break;
+               case 1:
+                  if (ecx_readmbxstatusex(context, slave, &(slaveitem->mbxinstateex)) > 0)
+                  {
+                     slaveitem->mbxinstateex ^= 0x0200; /* toggle repeat request */
+                     slaveitem->mbxrmpstate++;
+                  }
+                  break;
+               case 2:
+                  SMstatex = htoes(slaveitem->mbxinstateex);
+                  if (ecx_FPWR(context->port, configadr, ECT_REG_SM1STAT, sizeof(SMstatex), &(slaveitem->mbxinstateex), EC_TIMEOUTRET) > 0)
+                  {
+                     slaveitem->mbxrmpstate++;
+                  }
+                  break;
+               case 3:
+                  /* wait for repeat ack */
+                  SMstatex = htoes(slaveitem->mbxinstateex);
+                  wkc2 = ecx_FPRD(context->port, configadr, ECT_REG_SM1CONTR, sizeof(SMcontr), &SMcontr, EC_TIMEOUTRET);
+                  if ((wkc2 > 0) && ((SMcontr & 0x02) == (HI_BYTE(SMstatex) & 0x02)))
+                  {
+                     slaveitem->mbxrmpstate = 0;
+                  }
+                  break;
                }
                /* keep track of work limit */
-               if(++limitcnt >= limit) maxcnt = 0;
+               if (++limitcnt >= limit) maxcnt = 0;
             }
          }
          /* mbxin full detected */
-         else if((*(context->grouplist[group].mbxstatus + cntoffset) & 0x08) > 0)
+         else if ((*(context->grouplist[group].mbxstatus + cntoffset) & 0x08) > 0)
          {
             uint16 mbxl = slaveitem->mbx_rl;
             uint16 mbxro = slaveitem->mbx_ro;
-            if((mbxl > 0) && (mbx = ecx_getmbx(context)))
+            if ((mbxl > 0) && (mbx = ecx_getmbx(context)))
             {
                /* keep track of work limit */
-               if(++limitcnt >= limit) maxcnt = 0;
+               if (++limitcnt >= limit) maxcnt = 0;
                wkc = ecx_FPRD(context->port, configadr, mbxro, mbxl, mbx, EC_TIMEOUTRET); /* get mailbox */
-               if(wkc > 0)
+               if (wkc > 0)
                {
                   mbxh = (ec_mbxheadert *)mbx;
                   if ((mbxh->mbxtype & 0x0f) == ECT_MBXT_ERR) /* Mailbox error response? */
@@ -1217,11 +1217,11 @@ int ecx_mbxinhandler(ecx_contextt *context, uint8 group, int limit)
                      if ((etohs(EMp->CANOpen) >> 12) == 0x01) /* Emergency request? */
                      {
                         ecx_mbxemergencyerror(context, slave, etohs(EMp->ErrorCode), EMp->ErrorReg,
-                                 EMp->bData, etohs(EMp->w1), etohs(EMp->w2));
+                                              EMp->bData, etohs(EMp->w1), etohs(EMp->w2));
                      }
                      else
                      {
-                        if(slaveitem->coembxin && (slaveitem->coembxinfull == FALSE))
+                        if (slaveitem->coembxin && (slaveitem->coembxinfull == FALSE))
                         {
                            slaveitem->coembxin = (uint8 *)mbx;
                            mbx = NULL;
@@ -1235,7 +1235,7 @@ int ecx_mbxinhandler(ecx_contextt *context, uint8 group, int limit)
                   }
                   else if ((mbxh->mbxtype & 0x0f) == ECT_MBXT_SOE) /* SoE response? */
                   {
-                     if(slaveitem->soembxin && (slaveitem->soembxinfull == FALSE))
+                     if (slaveitem->soembxin && (slaveitem->soembxinfull == FALSE))
                      {
                         slaveitem->soembxin = (uint8 *)mbx;
                         mbx = NULL;
@@ -1248,7 +1248,7 @@ int ecx_mbxinhandler(ecx_contextt *context, uint8 group, int limit)
                   }
                   else if ((mbxh->mbxtype & 0x0f) == ECT_MBXT_EOE) /* EoE response? */
                   {
-                     ec_EOEt *eoembx = (ec_EOEt*)mbx;
+                     ec_EOEt *eoembx = (ec_EOEt *)mbx;
                      uint16 frameinfo1 = etohs(eoembx->frameinfo1);
                      /* All non fragment data frame types are expected to be handled by
                       * slave send/receive API if the EoE hook is set
@@ -1261,11 +1261,11 @@ int ecx_mbxinhandler(ecx_contextt *context, uint8 group, int limit)
                            {
                               /* Fragment handled by EoE hook */
                               wkc = 0;
-                            }
+                           }
                         }
                      }
                      /* Not handled by hook */
-                     if((wkc > 0) && slaveitem->eoembxin && (slaveitem->eoembxinfull == FALSE))
+                     if ((wkc > 0) && slaveitem->eoembxin && (slaveitem->eoembxinfull == FALSE))
                      {
                         slaveitem->eoembxin = (uint8 *)mbx;
                         mbx = NULL;
@@ -1278,7 +1278,7 @@ int ecx_mbxinhandler(ecx_contextt *context, uint8 group, int limit)
                   }
                   else if ((mbxh->mbxtype & 0x0f) == ECT_MBXT_FOE) /* FoE response? */
                   {
-                     if(slaveitem->foembxin && (slaveitem->foembxinfull == FALSE))
+                     if (slaveitem->foembxin && (slaveitem->foembxinfull == FALSE))
                      {
                         slaveitem->foembxin = (uint8 *)mbx;
                         mbx = NULL;
@@ -1291,8 +1291,8 @@ int ecx_mbxinhandler(ecx_contextt *context, uint8 group, int limit)
                   }
                   else if ((mbxh->mbxtype & 0x0f) == ECT_MBXT_VOE) /* VoE response? */
                   {
-                     if(slaveitem->voembxin && (slaveitem->voembxinfull == FALSE))
-                     { 
+                     if (slaveitem->voembxin && (slaveitem->voembxinfull == FALSE))
+                     {
                         slaveitem->voembxin = (uint8 *)mbx;
                         mbx = NULL;
                         slaveitem->voembxinfull = TRUE;
@@ -1304,7 +1304,7 @@ int ecx_mbxinhandler(ecx_contextt *context, uint8 group, int limit)
                   }
                   else if ((mbxh->mbxtype & 0x0f) == ECT_MBXT_AOE) /* AoE response? */
                   {
-                     if(slaveitem->aoembxin && (slaveitem->aoembxinfull == FALSE))
+                     if (slaveitem->aoembxin && (slaveitem->aoembxinfull == FALSE))
                      {
                         slaveitem->aoembxin = (uint8 *)mbx;
                         mbx = NULL;
@@ -1328,8 +1328,8 @@ int ecx_mbxinhandler(ecx_contextt *context, uint8 group, int limit)
                }
             }
          }
-      } 
-   } 
+      }
+   }
    return limitcnt;
 }
 
@@ -1342,48 +1342,48 @@ int ecx_mbxouthandler(ecx_contextt *context, uint8 group, int limit)
    ec_mbxbuft *mbx;
    ec_mbxqueuet *mbxqueue = &(context->grouplist[group].mbxtxqueue);
    int listcount = mbxqueue->listcount;
-   while((limitcnt <= limit) && listcount) 
+   while ((limitcnt <= limit) && listcount)
    {
       listcount--;
       ticketloc = mbxqueue->listtail;
       state = mbxqueue->mbxstate[ticketloc];
-      switch(state)
+      switch (state)
       {
-         case EC_MBXQUEUESTATE_REQ :
-         case EC_MBXQUEUESTATE_FAIL:
-            slave = mbxqueue->mbxslave[ticketloc];
-            mbx = mbxqueue->mbx[ticketloc];
-            mbxl = context->slavelist[slave].mbx_l;
-            configadr = context->slavelist[slave].configadr;
-            mbxwo = context->slavelist[slave].mbx_wo;
-            limitcnt++;
-            if(context->slavelist[slave].state >= EC_STATE_PRE_OP)
+      case EC_MBXQUEUESTATE_REQ:
+      case EC_MBXQUEUESTATE_FAIL:
+         slave = mbxqueue->mbxslave[ticketloc];
+         mbx = mbxqueue->mbx[ticketloc];
+         mbxl = context->slavelist[slave].mbx_l;
+         configadr = context->slavelist[slave].configadr;
+         mbxwo = context->slavelist[slave].mbx_wo;
+         limitcnt++;
+         if (context->slavelist[slave].state >= EC_STATE_PRE_OP)
+         {
+            /* write slave in mailbox 1st try*/
+            wkc = ecx_FPWR(context->port, configadr, mbxwo, mbxl, mbx, EC_TIMEOUTRET);
+            if (wkc > 0)
             {
-               /* write slave in mailbox 1st try*/
-               wkc = ecx_FPWR(context->port, configadr, mbxwo, mbxl, mbx, EC_TIMEOUTRET);
-               if(wkc > 0)
-               {
-                  mbxqueue->mbxstate[ticketloc] = EC_MBXQUEUESTATE_DONE; // mbx tx ok
-                  ecx_dropmbx(context, mbx);
-                  mbxqueue->mbx[ticketloc] = NULL;
-               }
-               else
-               {
-                  if(state != EC_MBXQUEUESTATE_FAIL)
-                     mbxqueue->mbxstate[ticketloc] = EC_MBXQUEUESTATE_FAIL; // mbx tx fail, retry
-               }
+               mbxqueue->mbxstate[ticketloc] = EC_MBXQUEUESTATE_DONE; // mbx tx ok
+               ecx_dropmbx(context, mbx);
+               mbxqueue->mbx[ticketloc] = NULL;
             }
-            /* fall through */
-         case EC_MBXQUEUESTATE_DONE: // mbx tx ok   
-            ecx_mbxrotatequeue(context, group, ticketloc);
-            break;
+            else
+            {
+               if (state != EC_MBXQUEUESTATE_FAIL)
+                  mbxqueue->mbxstate[ticketloc] = EC_MBXQUEUESTATE_FAIL; // mbx tx fail, retry
+            }
+         }
+         /* fall through */
+      case EC_MBXQUEUESTATE_DONE: // mbx tx ok
+         ecx_mbxrotatequeue(context, group, ticketloc);
+         break;
       }
-      if(mbxqueue->mbxremove[ticketloc])
+      if (mbxqueue->mbxremove[ticketloc])
       {
          mbx = ecx_mbxdropqueue(context, group, ticketloc);
-         if(mbx) ecx_dropmbx(context, mbx);
+         if (mbx) ecx_dropmbx(context, mbx);
       }
-   }   
+   }
    return limitcnt;
 }
 
@@ -1392,7 +1392,7 @@ int ecx_mbxhandler(ecx_contextt *context, uint8 group, int limit)
    int limitcnt;
    limitcnt = ecx_mbxinhandler(context, group, limit);
    return ecx_mbxouthandler(context, group, (limit - limitcnt));
//return limitcnt;
  // return limitcnt;
 }
 
 /** Write IN mailbox to slave.
@@ -1403,7 +1403,7 @@ int ecx_mbxhandler(ecx_contextt *context, uint8 group, int limit)
  * @param[in]  timeout    = Timeout in us
  * @return Work counter (>0 is success)
  */
-int ecx_mbxsend(ecx_contextt *context, uint16 slave,ec_mbxbuft *mbx, int timeout)
+int ecx_mbxsend(ecx_contextt *context, uint16 slave, ec_mbxbuft *mbx, int timeout)
 {
    uint16 mbxwo, mbxl, configadr;
    int wkc, ticket;
@@ -1417,11 +1417,11 @@ int ecx_mbxsend(ecx_contextt *context, uint16 slave,ec_mbxbuft *mbx, int timeout
    {
       osal_timer_start(&timer, timeout);
       wkc = 0;
-      if(mbxl > 0)
+      if (mbxl > 0)
       {
          do
          {
-            if((ticket = ecx_mbxaddqueue(context, slave, mbx)) >= 0)
+            if ((ticket = ecx_mbxaddqueue(context, slave, mbx)) >= 0)
             {
                mbx = NULL;
                do
@@ -1431,13 +1431,12 @@ int ecx_mbxsend(ecx_contextt *context, uint16 slave,ec_mbxbuft *mbx, int timeout
                   {
                      osal_usleep(EC_LOCALDELAY);
                   }
-               }
-               while ((wkc <= 0) && (osal_timer_is_expired(&timer) == FALSE));
-               if(wkc <= 0)
+               } while ((wkc <= 0) && (osal_timer_is_expired(&timer) == FALSE));
+               if (wkc <= 0)
                {
-                  if(!ecx_mbxexpirequeue(context, slave, ticket))
+                  if (!ecx_mbxexpirequeue(context, slave, ticket))
                   {
-//                     printf("expirequeue failed\n\r");
+                     //                     printf("expirequeue failed\n\r");
                   }
                }
             }
@@ -1445,8 +1444,7 @@ int ecx_mbxsend(ecx_contextt *context, uint16 slave,ec_mbxbuft *mbx, int timeout
             {
                osal_usleep(EC_LOCALDELAY);
             }
-         }
-         while ((wkc <= 0) && (osal_timer_is_expired(&timer) == FALSE));
+         } while ((wkc <= 0) && (osal_timer_is_expired(&timer) == FALSE));
       }
    }
    else if ((mbxl > 0) && (mbxl <= EC_MAXMBX) && (slavelist->state >= EC_STATE_PRE_OP))
@@ -1460,7 +1458,7 @@ int ecx_mbxsend(ecx_contextt *context, uint16 slave,ec_mbxbuft *mbx, int timeout
          /* retry */
          wkc = ecx_FPWR(context->port, configadr, mbxwo, mbxl, mbx, EC_TIMEOUTRET3);
       }
-      if(wkc < 0 ) wkc = 0;
+      if (wkc < 0) wkc = 0;
    }
    if (mbx) ecx_dropmbx(context, mbx);
    return wkc;
@@ -1468,7 +1466,7 @@ int ecx_mbxsend(ecx_contextt *context, uint16 slave,ec_mbxbuft *mbx, int timeout
 
 /** Read OUT mailbox from slave.
  * Supports Mailbox Link Layer with repeat requests.
- * Mailbox is fetched from pool, caller is owner after return 
+ * Mailbox is fetched from pool, caller is owner after return
  * and therefore should drop it back to the pool whe finished.
  * @param[in]  context    = context struct
  * @param[in]  slave      = Slave number
@@ -1478,8 +1476,8 @@ int ecx_mbxsend(ecx_contextt *context, uint16 slave,ec_mbxbuft *mbx, int timeout
  */
 int ecx_mbxreceive(ecx_contextt *context, uint16 slave, ec_mbxbuft **mbx, int timeout)
 {
-   uint16 mbxro,mbxl,configadr;
-   int wkc=0;
+   uint16 mbxro, mbxl, configadr;
+   int wkc = 0;
    int wkc2;
    uint8 SMstat;
    uint16 SMstatex;
@@ -1522,17 +1520,16 @@ int ecx_mbxreceive(ecx_contextt *context, uint16 slave, ec_mbxbuft **mbx, int ti
          }
          else if (slavelist->eoembxinfull == TRUE)
          {
-             *mbx = (ec_mbxbuft*)slavelist->eoembxin;
-             slavelist->eoembxin = EC_MBXINENABLE;
-             slavelist->eoembxinfull = FALSE;
-             wkc = 1;
+            *mbx = (ec_mbxbuft *)slavelist->eoembxin;
+            slavelist->eoembxin = EC_MBXINENABLE;
+            slavelist->eoembxinfull = FALSE;
+            wkc = 1;
          }
          if (!wkc && (timeout > EC_LOCALDELAY))
          {
             osal_usleep(EC_LOCALDELAY);
          }
-      }
-      while ((wkc <= 0) && (osal_timer_is_expired(&timer) == FALSE));
+      } while ((wkc <= 0) && (osal_timer_is_expired(&timer) == FALSE));
    }
    else if ((mbxl > 0) && (mbxl <= EC_MAXMBX))
    {
@@ -1546,8 +1543,7 @@ int ecx_mbxreceive(ecx_contextt *context, uint16 slave, ec_mbxbuft **mbx, int ti
          {
             osal_usleep(EC_LOCALDELAY);
          }
-      }
-      while (((wkc <= 0) || ((SMstat & 0x08) == 0)) && (osal_timer_is_expired(&timer) == FALSE));
+      } while (((wkc <= 0) || ((SMstat & 0x08) == 0)) && (osal_timer_is_expired(&timer) == FALSE));
 
       if ((wkc > 0) && ((SMstat & 0x08) > 0)) /* read mailbox available ? */
       {
@@ -1557,7 +1553,7 @@ int ecx_mbxreceive(ecx_contextt *context, uint16 slave, ec_mbxbuft **mbx, int ti
          do
          {
             wkc = ecx_FPRD(context->port, configadr, mbxro, mbxl, mbxin, EC_TIMEOUTRET); /* get mailbox */
-            if ((wkc > 0) && ((mbxh->mbxtype & 0x0f) == 0x00)) /* Mailbox error response? */
+            if ((wkc > 0) && ((mbxh->mbxtype & 0x0f) == 0x00))                           /* Mailbox error response? */
             {
                MBXEp = (ec_mbxerrort *)mbxin;
                ecx_mbxerror(context, slave, etohs(MBXEp->Detail));
@@ -1571,12 +1567,12 @@ int ecx_mbxreceive(ecx_contextt *context, uint16 slave, ec_mbxbuft **mbx, int ti
                if ((etohs(EMp->CANOpen) >> 12) == 0x01) /* Emergency request? */
                {
                   ecx_mbxemergencyerror(context, slave, etohs(EMp->ErrorCode), EMp->ErrorReg,
-                          EMp->bData, etohs(EMp->w1), etohs(EMp->w2));
+                                        EMp->bData, etohs(EMp->w1), etohs(EMp->w2));
                   ecx_dropmbx(context, mbxin);
                   mbxin = NULL;
                   wkc = 0; /* prevent emergency to cascade up, it is already handled. */
                }
-               else 
+               else
                {
                   *mbx = mbxin;
                   mbxin = NULL;
@@ -1584,30 +1580,30 @@ int ecx_mbxreceive(ecx_contextt *context, uint16 slave, ec_mbxbuft **mbx, int ti
             }
             else if ((wkc > 0) && ((mbxh->mbxtype & 0x0f) == ECT_MBXT_EOE)) /* EoE response? */
             {
-                ec_EOEt* eoembx = (ec_EOEt*)mbx;
-                uint16 frameinfo1 = etohs(eoembx->frameinfo1);
-                /* All non fragment data frame types are expected to be handled by
+               ec_EOEt *eoembx = (ec_EOEt *)mbx;
+               uint16 frameinfo1 = etohs(eoembx->frameinfo1);
+               /* All non fragment data frame types are expected to be handled by
                 * slave send/receive API if the EoE hook is set
                 */
-                if (EOE_HDR_FRAME_TYPE_GET(frameinfo1) == EOE_FRAG_DATA)
-                {
-                    if (context->EOEhook)
-                    {
-                        if (context->EOEhook(context, slave, eoembx) > 0)
-                        {
-                            /* Fragment handled by EoE hook */
-                            ecx_dropmbx(context, mbxin);
-                            mbxin = NULL;
-                            wkc = 0;
-                        }
-                    }
-                }
-                /* Not handled by EoE hook*/
-                if(wkc > 0)
-                {
-                    *mbx = mbxin;
-                    mbxin = NULL;
-                }
+               if (EOE_HDR_FRAME_TYPE_GET(frameinfo1) == EOE_FRAG_DATA)
+               {
+                  if (context->EOEhook)
+                  {
+                     if (context->EOEhook(context, slave, eoembx) > 0)
+                     {
+                        /* Fragment handled by EoE hook */
+                        ecx_dropmbx(context, mbxin);
+                        mbxin = NULL;
+                        wkc = 0;
+                     }
+                  }
+               }
+               /* Not handled by EoE hook*/
+               if (wkc > 0)
+               {
+                  *mbx = mbxin;
+                  mbxin = NULL;
+               }
             }
             else
             {
@@ -1624,7 +1620,7 @@ int ecx_mbxreceive(ecx_contextt *context, uint16 slave, ec_mbxbuft **mbx, int ti
                   do /* wait for toggle ack */
                   {
                      wkc2 = ecx_FPRD(context->port, configadr, ECT_REG_SM1CONTR, sizeof(SMcontr), &SMcontr, EC_TIMEOUTRET);
-                   } while (((wkc2 <= 0) || ((SMcontr & 0x02) != (HI_BYTE(SMstatex) & 0x02))) && (osal_timer_is_expired(&timer) == FALSE));
+                  } while (((wkc2 <= 0) || ((SMcontr & 0x02) != (HI_BYTE(SMstatex) & 0x02))) && (osal_timer_is_expired(&timer) == FALSE));
                   do /* wait for read mailbox available */
                   {
                      wkc2 = ecx_readmbxstatusex(context, slave, &SMstatex);
@@ -1636,7 +1632,7 @@ int ecx_mbxreceive(ecx_contextt *context, uint16 slave, ec_mbxbuft **mbx, int ti
                }
             }
          } while ((wkc <= 0) && (osal_timer_is_expired(&timer) == FALSE)); /* if WKC<=0 repeat */
-         if(mbxin) ecx_dropmbx(context, mbxin);
+         if (mbxin) ecx_dropmbx(context, mbxin);
       }
       else /* no read mailbox available */
       {
@@ -1664,7 +1660,7 @@ void ecx_esidump(ecx_contextt *context, uint16 slave, uint8 *esibuf)
    ecx_eeprom2master(context, slave); /* set eeprom control to master */
    configadr = context->slavelist[slave].configadr;
    address = ECT_SII_START;
-   p16=(uint16*)esibuf;
+   p16 = (uint16 *)esibuf;
    if (context->slavelist[slave].eep_8byte)
    {
       incr = 4;
@@ -1676,7 +1672,7 @@ void ecx_esidump(ecx_contextt *context, uint16 slave, uint8 *esibuf)
    do
    {
       edat = ecx_readeepromFP(context, configadr, address, EC_TIMEOUTEEP);
-      p64 = (uint64*)p16;
+      p64 = (uint64 *)p16;
       *p64 = edat;
       p16 += incr;
       address += incr;
@@ -1733,22 +1729,20 @@ int ecx_eeprom2master(ecx_contextt *context, uint16 slave)
    uint16 configadr;
    uint8 eepctl;
 
-   if ( context->slavelist[slave].eep_pdi )
+   if (context->slavelist[slave].eep_pdi)
    {
       configadr = context->slavelist[slave].configadr;
       eepctl = 2;
       do
       {
-         wkc = ecx_FPWR(context->port, configadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl , EC_TIMEOUTRET); /* force Eeprom from PDI */
-      }
-      while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
+         wkc = ecx_FPWR(context->port, configadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl, EC_TIMEOUTRET); /* force Eeprom from PDI */
+      } while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
       eepctl = 0;
       cnt = 0;
       do
       {
-         wkc = ecx_FPWR(context->port, configadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl , EC_TIMEOUTRET); /* set Eeprom to master */
-      }
-      while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
+         wkc = ecx_FPWR(context->port, configadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl, EC_TIMEOUTRET); /* set Eeprom to master */
+      } while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
       context->slavelist[slave].eep_pdi = 0;
    }
 
@@ -1766,22 +1760,21 @@ int ecx_eeprom2pdi(ecx_contextt *context, uint16 slave)
    uint16 configadr;
    uint8 eepctl;
 
-   if ( !context->slavelist[slave].eep_pdi )
+   if (!context->slavelist[slave].eep_pdi)
    {
       configadr = context->slavelist[slave].configadr;
       eepctl = 1;
       do
       {
-         wkc = ecx_FPWR(context->port, configadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl , EC_TIMEOUTRET); /* set Eeprom to PDI */
-      }
-      while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
+         wkc = ecx_FPWR(context->port, configadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl, EC_TIMEOUTRET); /* set Eeprom to PDI */
+      } while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
       context->slavelist[slave].eep_pdi = 1;
    }
 
    return wkc;
 }
 
-uint16 ecx_eeprom_waitnotbusyAP(ecx_contextt *context, uint16 aiadr,uint16 *estat, int timeout)
+uint16 ecx_eeprom_waitnotbusyAP(ecx_contextt *context, uint16 aiadr, uint16 *estat, int timeout)
 {
    int wkc, cnt = 0;
    uint16 retval = 0;
@@ -1795,10 +1788,9 @@ uint16 ecx_eeprom_waitnotbusyAP(ecx_contextt *context, uint16 aiadr,uint16 *esta
          osal_usleep(EC_LOCALDELAY);
       }
       *estat = 0;
-      wkc=ecx_APRD(context->port, aiadr, ECT_REG_EEPSTAT, sizeof(*estat), estat, EC_TIMEOUTRET);
+      wkc = ecx_APRD(context->port, aiadr, ECT_REG_EEPSTAT, sizeof(*estat), estat, EC_TIMEOUTRET);
       *estat = etohs(*estat);
-   }
-   while (((wkc <= 0) || ((*estat & EC_ESTAT_BUSY) > 0)) && (osal_timer_is_expired(&timer) == FALSE)); /* wait for eeprom ready */
+   } while (((wkc <= 0) || ((*estat & EC_ESTAT_BUSY) > 0)) && (osal_timer_is_expired(&timer) == FALSE)); /* wait for eeprom ready */
    if ((*estat & EC_ESTAT_BUSY) == 0)
    {
       retval = 1;
@@ -1836,13 +1828,12 @@ uint64 ecx_readeepromAP(ecx_contextt *context, uint16 aiadr, uint16 eeproma, int
       {
          ed.comm = htoes(EC_ECMD_READ);
          ed.addr = htoes(eeproma);
-         ed.d2   = 0x0000;
+         ed.d2 = 0x0000;
          cnt = 0;
          do
          {
             wkc = ecx_APWR(context->port, aiadr, ECT_REG_EEPCTL, sizeof(ed), &ed, EC_TIMEOUTRET);
-         }
-         while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
+         } while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
          if (wkc)
          {
             osal_usleep(EC_LOCALDELAY);
@@ -1863,8 +1854,7 @@ uint64 ecx_readeepromAP(ecx_contextt *context, uint16 aiadr, uint16 eeproma, int
                      do
                      {
                         wkc = ecx_APRD(context->port, aiadr, ECT_REG_EEPDAT, sizeof(edat64), &edat64, EC_TIMEOUTRET);
-                     }
-                     while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
+                     } while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
                   }
                   else
                   {
@@ -1872,15 +1862,13 @@ uint64 ecx_readeepromAP(ecx_contextt *context, uint16 aiadr, uint16 eeproma, int
                      do
                      {
                         wkc = ecx_APRD(context->port, aiadr, ECT_REG_EEPDAT, sizeof(edat32), &edat32, EC_TIMEOUTRET);
-                     }
-                     while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
-                     edat64=(uint64)edat32;
+                     } while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
+                     edat64 = (uint64)edat32;
                   }
                }
             }
          }
-      }
-      while ((nackcnt > 0) && (nackcnt < 3));
+      } while ((nackcnt > 0) && (nackcnt < 3));
    }
 
    return edat64;
@@ -1913,18 +1901,16 @@ int ecx_writeeepromAP(ecx_contextt *context, uint16 aiadr, uint16 eeproma, uint1
          do
          {
             wkc = ecx_APWR(context->port, aiadr, ECT_REG_EEPDAT, sizeof(data), &data, EC_TIMEOUTRET);
-         }
-         while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
+         } while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
 
          ed.comm = EC_ECMD_WRITE;
          ed.addr = eeproma;
-         ed.d2   = 0x0000;
+         ed.d2 = 0x0000;
          cnt = 0;
          do
          {
             wkc = ecx_APWR(context->port, aiadr, ECT_REG_EEPCTL, sizeof(ed), &ed, EC_TIMEOUTRET);
-         }
-         while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
+         } while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
          if (wkc)
          {
             osal_usleep(EC_LOCALDELAY * 2);
@@ -1944,14 +1930,13 @@ int ecx_writeeepromAP(ecx_contextt *context, uint16 aiadr, uint16 eeproma, uint1
             }
          }
 
-      }
-      while ((nackcnt > 0) && (nackcnt < 3));
+      } while ((nackcnt > 0) && (nackcnt < 3));
    }
 
    return rval;
 }
 
-uint16 ecx_eeprom_waitnotbusyFP(ecx_contextt *context, uint16 configadr,uint16 *estat, int timeout)
+uint16 ecx_eeprom_waitnotbusyFP(ecx_contextt *context, uint16 configadr, uint16 *estat, int timeout)
 {
    int wkc, cnt = 0;
    uint16 retval = 0;
@@ -1965,10 +1950,9 @@ uint16 ecx_eeprom_waitnotbusyFP(ecx_contextt *context, uint16 configadr,uint16 *
          osal_usleep(EC_LOCALDELAY);
       }
       *estat = 0;
-      wkc=ecx_FPRD(context->port, configadr, ECT_REG_EEPSTAT, sizeof(*estat), estat, EC_TIMEOUTRET);
+      wkc = ecx_FPRD(context->port, configadr, ECT_REG_EEPSTAT, sizeof(*estat), estat, EC_TIMEOUTRET);
       *estat = etohs(*estat);
-   }
-   while (((wkc <= 0) || ((*estat & EC_ESTAT_BUSY) > 0)) && (osal_timer_is_expired(&timer) == FALSE)); /* wait for eeprom ready */
+   } while (((wkc <= 0) || ((*estat & EC_ESTAT_BUSY) > 0)) && (osal_timer_is_expired(&timer) == FALSE)); /* wait for eeprom ready */
    if ((*estat & EC_ESTAT_BUSY) == 0)
    {
       retval = 1;
@@ -1999,20 +1983,19 @@ uint64 ecx_readeepromFP(ecx_contextt *context, uint16 configadr, uint16 eeproma,
       if (estat & EC_ESTAT_EMASK) /* error bits are set */
       {
          estat = htoes(EC_ECMD_NOP); /* clear error bits */
-         wkc=ecx_FPWR(context->port, configadr, ECT_REG_EEPCTL, sizeof(estat), &estat, EC_TIMEOUTRET3);
+         wkc = ecx_FPWR(context->port, configadr, ECT_REG_EEPCTL, sizeof(estat), &estat, EC_TIMEOUTRET3);
       }
 
       do
       {
          ed.comm = htoes(EC_ECMD_READ);
          ed.addr = htoes(eeproma);
-         ed.d2   = 0x0000;
+         ed.d2 = 0x0000;
          cnt = 0;
          do
          {
-            wkc=ecx_FPWR(context->port, configadr, ECT_REG_EEPCTL, sizeof(ed), &ed, EC_TIMEOUTRET);
-         }
-         while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
+            wkc = ecx_FPWR(context->port, configadr, ECT_REG_EEPCTL, sizeof(ed), &ed, EC_TIMEOUTRET);
+         } while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
          if (wkc)
          {
             osal_usleep(EC_LOCALDELAY);
@@ -2032,25 +2015,22 @@ uint64 ecx_readeepromFP(ecx_contextt *context, uint16 configadr, uint16 eeproma,
                      cnt = 0;
                      do
                      {
-                        wkc=ecx_FPRD(context->port, configadr, ECT_REG_EEPDAT, sizeof(edat64), &edat64, EC_TIMEOUTRET);
-                     }
-                     while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
+                        wkc = ecx_FPRD(context->port, configadr, ECT_REG_EEPDAT, sizeof(edat64), &edat64, EC_TIMEOUTRET);
+                     } while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
                   }
                   else
                   {
                      cnt = 0;
                      do
                      {
-                        wkc=ecx_FPRD(context->port, configadr, ECT_REG_EEPDAT, sizeof(edat32), &edat32, EC_TIMEOUTRET);
-                     }
-                     while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
-                     edat64=(uint64)edat32;
+                        wkc = ecx_FPRD(context->port, configadr, ECT_REG_EEPDAT, sizeof(edat32), &edat32, EC_TIMEOUTRET);
+                     } while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
+                     edat64 = (uint64)edat32;
                   }
                }
             }
          }
-      }
-      while ((nackcnt > 0) && (nackcnt < 3));
+      } while ((nackcnt > 0) && (nackcnt < 3));
    }
 
    return edat64;
@@ -2083,17 +2063,15 @@ int ecx_writeeepromFP(ecx_contextt *context, uint16 configadr, uint16 eeproma, u
          do
          {
             wkc = ecx_FPWR(context->port, configadr, ECT_REG_EEPDAT, sizeof(data), &data, EC_TIMEOUTRET);
-         }
-         while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
+         } while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
          ed.comm = EC_ECMD_WRITE;
          ed.addr = eeproma;
-         ed.d2   = 0x0000;
+         ed.d2 = 0x0000;
          cnt = 0;
          do
          {
             wkc = ecx_FPWR(context->port, configadr, ECT_REG_EEPCTL, sizeof(ed), &ed, EC_TIMEOUTRET);
-         }
-         while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
+         } while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
          if (wkc)
          {
             osal_usleep(EC_LOCALDELAY * 2);
@@ -2112,8 +2090,7 @@ int ecx_writeeepromFP(ecx_contextt *context, uint16 configadr, uint16 eeproma, u
                }
             }
          }
-      }
-      while ((nackcnt > 0) && (nackcnt < 3));
+      } while ((nackcnt > 0) && (nackcnt < 3));
    }
 
    return rval;
@@ -2142,12 +2119,11 @@ void ecx_readeeprom1(ecx_contextt *context, uint16 slave, uint16 eeproma)
       }
       ed.comm = htoes(EC_ECMD_READ);
       ed.addr = htoes(eeproma);
-      ed.d2   = 0x0000;
+      ed.d2 = 0x0000;
       do
       {
          wkc = ecx_FPWR(context->port, configadr, ECT_REG_EEPCTL, sizeof(ed), &ed, EC_TIMEOUTRET);
-      }
-      while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
+      } while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
    }
 }
 
@@ -2171,9 +2147,8 @@ uint32 ecx_readeeprom2(ecx_contextt *context, uint16 slave, int timeout)
    {
       do
       {
-          wkc = ecx_FPRD(context->port, configadr, ECT_REG_EEPDAT, sizeof(edat), &edat, EC_TIMEOUTRET);
-      }
-      while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
+         wkc = ecx_FPRD(context->port, configadr, ECT_REG_EEPDAT, sizeof(edat), &edat, EC_TIMEOUTRET);
+      } while ((wkc <= 0) && (cnt++ < EC_DEFAULTRETRIES));
    }
 
    return edat;
@@ -2188,7 +2163,7 @@ uint32 ecx_readeeprom2(ecx_contextt *context, uint16 slave, int timeout)
  */
 static void ecx_pushindex(ecx_contextt *context, uint8 idx, void *data, uint16 length, uint16 DCO)
 {
-   if(context->idxstack->pushed < EC_MAXBUF)
+   if (context->idxstack->pushed < EC_MAXBUF)
    {
       context->idxstack->idx[context->idxstack->pushed] = idx;
       context->idxstack->data[context->idxstack->pushed] = data;
@@ -2205,7 +2180,7 @@ static void ecx_pushindex(ecx_contextt *context, uint8 idx, void *data, uint16 l
 static int ecx_pullindex(ecx_contextt *context)
 {
    int rval = -1;
-   if(context->idxstack->pulled < context->idxstack->pushed)
+   if (context->idxstack->pulled < context->idxstack->pushed)
    {
       rval = context->idxstack->pulled;
       context->idxstack->pulled++;
@@ -2214,16 +2189,16 @@ static int ecx_pullindex(ecx_contextt *context)
    return rval;
 }
 
-/** 
+/**
  * Clear the idx stack.
- * 
+ *
  * @param context           = context struct
  */
-static void ecx_clearindex(ecx_contextt *context)  {
+static void ecx_clearindex(ecx_contextt *context)
+{
 
    context->idxstack->pushed = 0;
    context->idxstack->pulled = 0;
-
 }
 
 /** Transmit processdata to slaves.
@@ -2247,48 +2222,47 @@ static int ecx_main_send_processdata(ecx_contextt *context, uint8 group, boolean
    uint16 sublength;
    uint8 idx;
    int wkc;
-   uint8data;
-   boolean first=FALSE;
+   uint8 *data;
+   boolean first = FALSE;
    uint16 currentsegment = 0;
    uint32 iomapinputoffset;
    uint16 DCO;
 
    wkc = 0;
-   if(context->grouplist[group].hasdc)
+   if (context->grouplist[group].hasdc)
    {
       first = TRUE;
    }
 
    ecx_clearmbxstatus(context, group);
+
    /* For overlapping IO map use the biggest */
-   if(use_overlap_io == TRUE)
+   if (use_overlap_io == TRUE)
    {
       /* For overlap IOmap make the frame EQ big to biggest part */
-      length = (context->grouplist[group].Obytes > context->grouplist[group].Ibytes) ?
-         context->grouplist[group].Obytes : context->grouplist[group].Ibytes;
+      length = (context->grouplist[group].Obytes > context->grouplist[group].Ibytes) ? context->grouplist[group].Obytes : context->grouplist[group].Ibytes;
       length += context->grouplist[group].mbxstatuslength;
       /* Save the offset used to compensate where to save inputs when frame returns */
       iomapinputoffset = context->grouplist[group].Obytes;
    }
    else
    {
-       length = context->grouplist[group].Obytes +
-           context->grouplist[group].Ibytes +
-           context->grouplist[group].mbxstatuslength;
+      length = context->grouplist[group].Obytes +
+               context->grouplist[group].Ibytes +
+               context->grouplist[group].mbxstatuslength;
       iomapinputoffset = 0;
    }
-   
+
    LogAdr = context->grouplist[group].logstartaddr;
-   if(length)
+   if (length)
    {
 
       wkc = 1;
       /* LRW blocked by one or more slaves ? */
-      if(context->grouplist[group].blockLRW)
+      if (context->grouplist[group].blockLRW)
       {
          /* if inputs available generate LRD */
-         if(context->grouplist[group].Ibytes)
+         if (context->grouplist[group].Ibytes)
          {
             currentsegment = context->grouplist[group].Isegment;
             data = context->grouplist[group].inputs;
@@ -2297,7 +2271,7 @@ static int ecx_main_send_processdata(ecx_contextt *context, uint8 group, boolean
             /* segment transfer if needed */
             do
             {
-               if(currentsegment == context->grouplist[group].Isegment)
+               if (currentsegment == context->grouplist[group].Isegment)
                {
                   sublength = (uint16)(context->grouplist[group].IOsegment[currentsegment++] - context->grouplist[group].Ioffset);
                }
@@ -2311,12 +2285,12 @@ static int ecx_main_send_processdata(ecx_contextt *context, uint8 group, boolean
                w2 = HI_WORD(LogAdr);
                DCO = 0;
                ecx_setupdatagram(context->port, &(context->port->txbuf[idx]), EC_CMD_LRD, idx, w1, w2, sublength, data);
-               if(first)
+               if (first)
                {
                   /* FPRMW in second datagram */
                   DCO = ecx_adddatagram(context->port, &(context->port->txbuf[idx]), EC_CMD_FRMW, idx, FALSE,
-                                           context->slavelist[context->grouplist[group].DCnext].configadr,
-                                           ECT_REG_DCSYSTIME, sizeof(int64), context->DCtime);
+                                        context->slavelist[context->grouplist[group].DCnext].configadr,
+                                        ECT_REG_DCSYSTIME, sizeof(int64), context->DCtime);
                   first = FALSE;
                }
                /* send frame */
@@ -2329,7 +2303,7 @@ static int ecx_main_send_processdata(ecx_contextt *context, uint8 group, boolean
             } while (length && (currentsegment < context->grouplist[group].nsegments));
          }
          /* if outputs available generate LWR */
-         if(context->grouplist[group].Obytes)
+         if (context->grouplist[group].Obytes)
          {
             data = context->grouplist[group].outputs;
             length = context->grouplist[group].Obytes;
@@ -2339,7 +2313,7 @@ static int ecx_main_send_processdata(ecx_contextt *context, uint8 group, boolean
             do
             {
                sublength = (uint16)context->grouplist[group].IOsegment[currentsegment++];
-               if((length - sublength) < 0)
+               if ((length - sublength) < 0)
                {
                   sublength = (uint16)length;
                }
@@ -2349,12 +2323,12 @@ static int ecx_main_send_processdata(ecx_contextt *context, uint8 group, boolean
                w2 = HI_WORD(LogAdr);
                DCO = 0;
                ecx_setupdatagram(context->port, &(context->port->txbuf[idx]), EC_CMD_LWR, idx, w1, w2, sublength, data);
-               if(first)
+               if (first)
                {
                   /* FPRMW in second datagram */
                   DCO = ecx_adddatagram(context->port, &(context->port->txbuf[idx]), EC_CMD_FRMW, idx, FALSE,
-                                           context->slavelist[context->grouplist[group].DCnext].configadr,
-                                           ECT_REG_DCSYSTIME, sizeof(int64), context->DCtime);
+                                        context->slavelist[context->grouplist[group].DCnext].configadr,
+                                        ECT_REG_DCSYSTIME, sizeof(int64), context->DCtime);
                   first = FALSE;
                }
                /* send frame */
@@ -2390,22 +2364,22 @@ static int ecx_main_send_processdata(ecx_contextt *context, uint8 group, boolean
             w2 = HI_WORD(LogAdr);
             DCO = 0;
             ecx_setupdatagram(context->port, &(context->port->txbuf[idx]), EC_CMD_LRW, idx, w1, w2, sublength, data);
-            if(first)
+            if (first)
             {
                /* FPRMW in second datagram */
                DCO = ecx_adddatagram(context->port, &(context->port->txbuf[idx]), EC_CMD_FRMW, idx, FALSE,
-                                        context->slavelist[context->grouplist[group].DCnext].configadr,
-                                        ECT_REG_DCSYSTIME, sizeof(int64), context->DCtime);
+                                     context->slavelist[context->grouplist[group].DCnext].configadr,
+                                     ECT_REG_DCSYSTIME, sizeof(int64), context->DCtime);
                first = FALSE;
             }
             /* send frame */
             ecx_outframe_red(context->port, idx);
             /* push index and data pointer on stack.
-             * the iomapinputoffset compensate for where the inputs are stored 
+             * the iomapinputoffset compensate for where the inputs are stored
              * in the IOmap if we use an overlapping IOmap. If a regular IOmap
              * is used it should always be 0.
              */
-            ecx_pushindex(context, idx, (data + iomapinputoffset), sublength, DCO);      
+            ecx_pushindex(context, idx, (data + iomapinputoffset), sublength, DCO);
             length -= sublength;
             LogAdr += sublength;
             data += sublength;
@@ -2417,34 +2391,34 @@ static int ecx_main_send_processdata(ecx_contextt *context, uint8 group, boolean
 }
 
 /** Transmit processdata to slaves.
-* Uses LRW, or LRD/LWR if LRW is not allowed (blockLRW).
-* Both the input and output processdata are transmitted in the overlapped IOmap.
-* The outputs with the actual data, the inputs replace the output data in the
-* returning frame. The inputs are gathered with the receive processdata function.
-* In contrast to the base LRW function this function is non-blocking.
-* If the processdata does not fit in one datagram, multiple are used.
-* In order to recombine the slave response, a stack is used.
-* @param[in]  context        = context struct
-* @param[in]  group          = group number
-* @return >0 if processdata is transmitted.
-*/
+ * Uses LRW, or LRD/LWR if LRW is not allowed (blockLRW).
+ * Both the input and output processdata are transmitted in the overlapped IOmap.
+ * The outputs with the actual data, the inputs replace the output data in the
+ * returning frame. The inputs are gathered with the receive processdata function.
+ * In contrast to the base LRW function this function is non-blocking.
+ * If the processdata does not fit in one datagram, multiple are used.
+ * In order to recombine the slave response, a stack is used.
+ * @param[in]  context        = context struct
+ * @param[in]  group          = group number
+ * @return >0 if processdata is transmitted.
+ */
 int ecx_send_overlap_processdata_group(ecx_contextt *context, uint8 group)
 {
    return ecx_main_send_processdata(context, group, TRUE);
 }
 
 /** Transmit processdata to slaves.
-* Uses LRW, or LRD/LWR if LRW is not allowed (blockLRW).
-* Both the input and output processdata are transmitted.
-* The outputs with the actual data, the inputs have a placeholder.
-* The inputs are gathered with the receive processdata function.
-* In contrast to the base LRW function this function is non-blocking.
-* If the processdata does not fit in one datagram, multiple are used.
-* In order to recombine the slave response, a stack is used.
-* @param[in]  context        = context struct
-* @param[in]  group          = group number
-* @return >0 if processdata is transmitted.
-*/
+ * Uses LRW, or LRD/LWR if LRW is not allowed (blockLRW).
+ * Both the input and output processdata are transmitted.
+ * The outputs with the actual data, the inputs have a placeholder.
+ * The inputs are gathered with the receive processdata function.
+ * In contrast to the base LRW function this function is non-blocking.
+ * If the processdata does not fit in one datagram, multiple are used.
+ * In order to recombine the slave response, a stack is used.
+ * @param[in]  context        = context struct
+ * @param[in]  group          = group number
+ * @return >0 if processdata is transmitted.
+ */
 int ecx_send_processdata_group(ecx_contextt *context, uint8 group)
 {
    return ecx_main_send_processdata(context, group, FALSE);
@@ -2485,9 +2459,9 @@ int ecx_receive_processdata_group(ecx_contextt *context, uint8 group, int timeou
       /* check if there is input data in frame */
       if (wkc2 > EC_NOFRAME)
       {
-         if((rxbuf[idx][EC_CMDOFFSET]==EC_CMD_LRD) || (rxbuf[idx][EC_CMDOFFSET]==EC_CMD_LRW))
+         if ((rxbuf[idx][EC_CMDOFFSET] == EC_CMD_LRD) || (rxbuf[idx][EC_CMDOFFSET] == EC_CMD_LRW))
          {
-            if(idxstack->dcoffset[pos] > 0)
+            if (idxstack->dcoffset[pos] > 0)
             {
                memcpy(idxstack->data[pos], &(rxbuf[idx][EC_HEADERSIZE]), idxstack->length[pos]);
                memcpy(&le_wkc, &(rxbuf[idx][EC_HEADERSIZE + idxstack->length[pos]]), EC_WKCSIZE);
@@ -2503,9 +2477,9 @@ int ecx_receive_processdata_group(ecx_contextt *context, uint8 group, int timeou
             }
             valid_wkc = 1;
          }
-         else if(rxbuf[idx][EC_CMDOFFSET]==EC_CMD_LWR)
+         else if (rxbuf[idx][EC_CMDOFFSET] == EC_CMD_LWR)
          {
-            if(idxstack->dcoffset[pos] > 0)
+            if (idxstack->dcoffset[pos] > 0)
             {
                memcpy(&le_wkc, &(rxbuf[idx][EC_HEADERSIZE + idxstack->length[pos]]), EC_WKCSIZE);
                /* output WKC counts 2 times when using LRW, emulate the same for LWR */
index 14a6288a9bb871e42728a172776530ab7e7aa7f2..a7038e55b3bc8faaf75ec3305a8c8a1fa05bd384 100644 (file)
 typedef struct
 {
    /** Error code returned from SDO */
-   uint32        errorcode;
+   uint32 errorcode;
    /** Readable error description */
-   char          errordescription[EC_MAXERRORNAME + 1];
+   char errordescription[EC_MAXERRORNAME + 1];
 } ec_sdoerrorlist_t;
 
 /** AL status code list type definition */
 typedef struct
 {
    /** AL status code */
-   uint16        ALstatuscode;
+   uint16 ALstatuscode;
    /** Readable description */
-   char          ALstatuscodedescription[EC_MAXERRORNAME + 1];
+   char ALstatuscodedescription[EC_MAXERRORNAME + 1];
 } ec_ALstatuscodelist_t;
 
 /** SoE error list type definition */
 typedef struct
 {
    /** SoE error code */
-   uint16        errorcode;
+   uint16 errorcode;
    /** Readable description */
-   char          errordescription[EC_MAXERRORNAME + 1];
+   char errordescription[EC_MAXERRORNAME + 1];
 } ec_soeerrorlist_t;
 
 /** MBX error list type definition */
 typedef struct
 {
    /** MBX error code */
-   uint16              errorcode;
+   uint16 errorcode;
    /** Readable description */
-   char                errordescription[EC_MAXERRORNAME + 1];
+   char errordescription[EC_MAXERRORNAME + 1];
 } ec_mbxerrorlist_t;
 
 char estring[EC_MAXERRORNAME];
 
 /** SDO error list definition */
 const ec_sdoerrorlist_t ec_sdoerrorlist[] = {
-   {0x00000000, "No error" },
-   {0x05030000, "Toggle bit not changed" },
-   {0x05040000, "SDO protocol timeout" },
-   {0x05040001, "Client/Server command specifier not valid or unknown" },
-   {0x05040005, "Out of memory" },
-   {0x06010000, "Unsupported access to an object" },
-   {0x06010001, "Attempt to read to a write only object" },
-   {0x06010002, "Attempt to write to a read only object" },
-   {0x06010003, "Subindex can not be written, SI0 must be 0 for write access" },
-   {0x06010004, "SDO Complete access not supported for variable length objects" },
-   {0x06010005, "Object length exceeds mailbox size" },
-   {0x06010006, "Object mapped to RxPDO, SDO download blocked" },
-   {0x06020000, "The object does not exist in the object directory" },
-   {0x06040041, "The object can not be mapped into the PDO" },
-   {0x06040042, "The number and length of the objects to be mapped would exceed the PDO length" },
-   {0x06040043, "General parameter incompatibility reason" },
-   {0x06040047, "General internal incompatibility in the device" },
-   {0x06060000, "Access failed due to a hardware error" },
-   {0x06070010, "Data type does not match, length of service parameter does not match" },
-   {0x06070012, "Data type does not match, length of service parameter too high" },
-   {0x06070013, "Data type does not match, length of service parameter too low" },
-   {0x06090011, "Subindex does not exist" },
-   {0x06090030, "Value range of parameter exceeded (only for write access)" },
-   {0x06090031, "Value of parameter written too high" },
-   {0x06090032, "Value of parameter written too low" },
-   {0x06090036, "Maximum value is less than minimum value" },
-   {0x08000000, "General error" },
-   {0x08000020, "Data cannot be transferred or stored to the application" },
-   {0x08000021, "Data cannot be transferred or stored to the application because of local control" },
-   {0x08000022, "Data cannot be transferred or stored to the application because of the present device state" },
-   {0x08000023, "Object dictionary dynamic generation fails or no object dictionary is present" },
-   {0xffffffff, "Unknown" }
+    {0x00000000, "No error"},
+    {0x05030000, "Toggle bit not changed"},
+    {0x05040000, "SDO protocol timeout"},
+    {0x05040001, "Client/Server command specifier not valid or unknown"},
+    {0x05040005, "Out of memory"},
+    {0x06010000, "Unsupported access to an object"},
+    {0x06010001, "Attempt to read to a write only object"},
+    {0x06010002, "Attempt to write to a read only object"},
+    {0x06010003, "Subindex can not be written, SI0 must be 0 for write access"},
+    {0x06010004, "SDO Complete access not supported for variable length objects"},
+    {0x06010005, "Object length exceeds mailbox size"},
+    {0x06010006, "Object mapped to RxPDO, SDO download blocked"},
+    {0x06020000, "The object does not exist in the object directory"},
+    {0x06040041, "The object can not be mapped into the PDO"},
+    {0x06040042, "The number and length of the objects to be mapped would exceed the PDO length"},
+    {0x06040043, "General parameter incompatibility reason"},
+    {0x06040047, "General internal incompatibility in the device"},
+    {0x06060000, "Access failed due to a hardware error"},
+    {0x06070010, "Data type does not match, length of service parameter does not match"},
+    {0x06070012, "Data type does not match, length of service parameter too high"},
+    {0x06070013, "Data type does not match, length of service parameter too low"},
+    {0x06090011, "Subindex does not exist"},
+    {0x06090030, "Value range of parameter exceeded (only for write access)"},
+    {0x06090031, "Value of parameter written too high"},
+    {0x06090032, "Value of parameter written too low"},
+    {0x06090036, "Maximum value is less than minimum value"},
+    {0x08000000, "General error"},
+    {0x08000020, "Data cannot be transferred or stored to the application"},
+    {0x08000021, "Data cannot be transferred or stored to the application because of local control"},
+    {0x08000022, "Data cannot be transferred or stored to the application because of the present device state"},
+    {0x08000023, "Object dictionary dynamic generation fails or no object dictionary is present"},
+    {0xffffffff, "Unknown"},
 };
 
 /** AL status code list definition */
 const ec_ALstatuscodelist_t ec_ALstatuscodelist[] = {
-   {0x0000 , "No error" },
-   {0x0001 , "Unspecified error" },
-   {0x0002 , "No memory" },
-   {0x0003 , "Invalid device setup" },
-   {0x0004 , "Invalid revision" },
-   {0x0006 , "SII/EEPROM information does not match firmware" },
-   {0x0007 , "Firmware update not successful. Old firmware still running" },
-   {0x000E , "License error" },
-   {0x0011 , "Invalid requested state change" },
-   {0x0012 , "Unknown requested state" },
-   {0x0013 , "Bootstrap not supported" },
-   {0x0014 , "No valid firmware" },
-   {0x0015 , "Invalid mailbox configuration" },
-   {0x0016 , "Invalid mailbox configuration" },
-   {0x0017 , "Invalid sync manager configuration" },
-   {0x0018 , "No valid inputs available" },
-   {0x0019 , "No valid outputs" },
-   {0x001A , "Synchronization error" },
-   {0x001B , "Sync manager watchdog" },
-   {0x001C , "Invalid sync Manager types" },
-   {0x001D , "Invalid output configuration" },
-   {0x001E , "Invalid input configuration" },
-   {0x001F , "Invalid watchdog configuration" },
-   {0x0020 , "Slave needs cold start" },
-   {0x0021 , "Slave needs INIT" },
-   {0x0022 , "Slave needs PREOP" },
-   {0x0023 , "Slave needs SAFEOP" },
-   {0x0024 , "Invalid input mapping" },
-   {0x0025 , "Invalid output mapping" },
-   {0x0026 , "Inconsistent settings" },
-   {0x0027 , "Freerun not supported" },
-   {0x0028 , "Synchronisation not supported" },
-   {0x0029 , "Freerun needs 3buffer mode" },
-   {0x002A , "Background watchdog" },
-   {0x002B , "No valid Inputs and Outputs" },
-   {0x002C , "Fatal sync error" },
-   {0x002D , "No sync error" }, // was "Invalid Output FMMU Configuration"
-   {0x002E , "Invalid input FMMU configuration" },
-   {0x0030 , "Invalid DC SYNC configuration" },
-   {0x0031 , "Invalid DC latch configuration" },
-   {0x0032 , "PLL error" },
-   {0x0033 , "DC sync IO error" },
-   {0x0034 , "DC sync timeout error" },
-   {0x0035 , "DC invalid sync cycle time" },
-   {0x0036 , "DC invalid sync0 cycle time" },
-   {0x0037 , "DC invalid sync1 cycle time" },
-   {0x0041 , "MBX_AOE" },
-   {0x0042 , "MBX_EOE" },
-   {0x0043 , "MBX_COE" },
-   {0x0044 , "MBX_FOE" },
-   {0x0045 , "MBX_SOE" },
-   {0x004F , "MBX_VOE" },
-   {0x0050 , "EEPROM no access" },
-   {0x0051 , "EEPROM error" },
-   {0x0052 , "External hardware not ready" },
-   {0x0060 , "Slave restarted locally" },
-   {0x0061 , "Device identification value updated" },
-   {0x0070 , "Detected Module Ident List does not match" },
-   {0x0080 , "Supply voltage too low" },
-   {0x0081 , "Supply voltage too high" },
-   {0x0082 , "Temperature too low" },
-   {0x0083 , "Temperature too high" },
-   {0x00f0 , "Application controller available" },
-   {0xffff , "Unknown" }
-};
+    {0x0000, "No error"},
+    {0x0001, "Unspecified error"},
+    {0x0002, "No memory"},
+    {0x0003, "Invalid device setup"},
+    {0x0004, "Invalid revision"},
+    {0x0006, "SII/EEPROM information does not match firmware"},
+    {0x0007, "Firmware update not successful. Old firmware still running"},
+    {0x000E, "License error"},
+    {0x0011, "Invalid requested state change"},
+    {0x0012, "Unknown requested state"},
+    {0x0013, "Bootstrap not supported"},
+    {0x0014, "No valid firmware"},
+    {0x0015, "Invalid mailbox configuration"},
+    {0x0016, "Invalid mailbox configuration"},
+    {0x0017, "Invalid sync manager configuration"},
+    {0x0018, "No valid inputs available"},
+    {0x0019, "No valid outputs"},
+    {0x001A, "Synchronization error"},
+    {0x001B, "Sync manager watchdog"},
+    {0x001C, "Invalid sync Manager types"},
+    {0x001D, "Invalid output configuration"},
+    {0x001E, "Invalid input configuration"},
+    {0x001F, "Invalid watchdog configuration"},
+    {0x0020, "Slave needs cold start"},
+    {0x0021, "Slave needs INIT"},
+    {0x0022, "Slave needs PREOP"},
+    {0x0023, "Slave needs SAFEOP"},
+    {0x0024, "Invalid input mapping"},
+    {0x0025, "Invalid output mapping"},
+    {0x0026, "Inconsistent settings"},
+    {0x0027, "Freerun not supported"},
+    {0x0028, "Synchronisation not supported"},
+    {0x0029, "Freerun needs 3buffer mode"},
+    {0x002A, "Background watchdog"},
+    {0x002B, "No valid Inputs and Outputs"},
+    {0x002C, "Fatal sync error"},
+    {0x002D, "No sync error"}, // was "Invalid Output FMMU Configuration"
+    {0x002E, "Invalid input FMMU configuration"},
+    {0x0030, "Invalid DC SYNC configuration"},
+    {0x0031, "Invalid DC latch configuration"},
+    {0x0032, "PLL error"},
+    {0x0033, "DC sync IO error"},
+    {0x0034, "DC sync timeout error"},
+    {0x0035, "DC invalid sync cycle time"},
+    {0x0036, "DC invalid sync0 cycle time"},
+    {0x0037, "DC invalid sync1 cycle time"},
+    {0x0041, "MBX_AOE"},
+    {0x0042, "MBX_EOE"},
+    {0x0043, "MBX_COE"},
+    {0x0044, "MBX_FOE"},
+    {0x0045, "MBX_SOE"},
+    {0x004F, "MBX_VOE"},
+    {0x0050, "EEPROM no access"},
+    {0x0051, "EEPROM error"},
+    {0x0052, "External hardware not ready"},
+    {0x0060, "Slave restarted locally"},
+    {0x0061, "Device identification value updated"},
+    {0x0070, "Detected Module Ident List does not match"},
+    {0x0080, "Supply voltage too low"},
+    {0x0081, "Supply voltage too high"},
+    {0x0082, "Temperature too low"},
+    {0x0083, "Temperature too high"},
+    {0x00f0, "Application controller available"},
+    {0xffff, "Unknown"}};
 
 /** SoE error list definition */
 const ec_soeerrorlist_t ec_soeerrorlist[] = {
-   {0x0000, "No error" },
-   {0x1001, "No IDN" },
-   {0x1009, "Invalid access to element 1" },
-   {0x2001, "No Name" },
-   {0x2002, "Name transmission too short" },
-   {0x2003, "Name transmission too long" },
-   {0x2004, "Name cannot be changed (read only)" },
-   {0x2005, "Name is write-protected at this time" },
-   {0x3002, "Attribute transmission too short" },
-   {0x3003, "Attribute transmission too long" },
-   {0x3004, "Attribute cannot be changed (read only)" },
-   {0x3005, "Attribute is write-protected at this time" },
-   {0x4001, "No units" },
-   {0x4002, "Unit transmission too short" },
-   {0x4003, "Unit transmission too long" },
-   {0x4004, "Unit cannot be changed (read only)" },
-   {0x4005, "Unit is write-protected at this time" },
-   {0x5001, "No minimum input value" },
-   {0x5002, "Minimum input value transmission too short" },
-   {0x5003, "Minimum input value transmission too long" },
-   {0x5004, "Minimum input value cannot be changed (read only)" },
-   {0x5005, "Minimum input value is write-protected at this time" },
-   {0x6001, "No maximum input value" },
-   {0x6002, "Maximum input value transmission too short" },
-   {0x6003, "Maximum input value transmission too long" },
-   {0x6004, "Maximum input value cannot be changed (read only)" },
-   {0x6005, "Maximum input value is write-protected at this time" },
-   {0x7002, "Operation data transmission too short" },
-   {0x7003, "Operation data transmission too long" },
-   {0x7004, "Operation data cannot be changed (read only)" },
-   {0x7005, "Operation data is write-protected at this time (state)" },
-   {0x7006, "Operation data is smaller than the minimum input value" },
-   {0x7007, "Operation data is smaller than the maximum input value" },
-   {0x7008, "Invalid operation data:Configured IDN will not be supported" },
-   {0x7009, "Operation data write protected by a password" },
-   {0x700A, "Operation data is write protected, it is configured cyclically" },
-   {0x700B, "Invalid indirect addressing: (e.g., data container, list handling)" },
-   {0x700C, "Operation data is write protected, due to other settings" },
-   {0x700D, "Reserved" },
-   {0x7010, "Procedure command already active" },
-   {0x7011, "Procedure command not interruptible" },
-   {0x7012, "Procedure command at this time not executable (state)" },
-   {0x7013, "Procedure command not executable (invalid or false parameters)" },
-   {0x7014, "No data state" },
-   {0x8001, "No default value" },
-   {0x8002, "Default value transmission too long" },
-   {0x8004, "Default value cannot be changed, read only" },
-   {0x800A, "Invalid drive number" },
-   {0x800A, "General error" },
-   {0x800A, "No element addressed" },
-   {0xffff, "Unknown" }
+    {0x0000, "No error"},
+    {0x1001, "No IDN"},
+    {0x1009, "Invalid access to element 1"},
+    {0x2001, "No Name"},
+    {0x2002, "Name transmission too short"},
+    {0x2003, "Name transmission too long"},
+    {0x2004, "Name cannot be changed (read only)"},
+    {0x2005, "Name is write-protected at this time"},
+    {0x3002, "Attribute transmission too short"},
+    {0x3003, "Attribute transmission too long"},
+    {0x3004, "Attribute cannot be changed (read only)"},
+    {0x3005, "Attribute is write-protected at this time"},
+    {0x4001, "No units"},
+    {0x4002, "Unit transmission too short"},
+    {0x4003, "Unit transmission too long"},
+    {0x4004, "Unit cannot be changed (read only)"},
+    {0x4005, "Unit is write-protected at this time"},
+    {0x5001, "No minimum input value"},
+    {0x5002, "Minimum input value transmission too short"},
+    {0x5003, "Minimum input value transmission too long"},
+    {0x5004, "Minimum input value cannot be changed (read only)"},
+    {0x5005, "Minimum input value is write-protected at this time"},
+    {0x6001, "No maximum input value"},
+    {0x6002, "Maximum input value transmission too short"},
+    {0x6003, "Maximum input value transmission too long"},
+    {0x6004, "Maximum input value cannot be changed (read only)"},
+    {0x6005, "Maximum input value is write-protected at this time"},
+    {0x7002, "Operation data transmission too short"},
+    {0x7003, "Operation data transmission too long"},
+    {0x7004, "Operation data cannot be changed (read only)"},
+    {0x7005, "Operation data is write-protected at this time (state)"},
+    {0x7006, "Operation data is smaller than the minimum input value"},
+    {0x7007, "Operation data is smaller than the maximum input value"},
+    {0x7008, "Invalid operation data:Configured IDN will not be supported"},
+    {0x7009, "Operation data write protected by a password"},
+    {0x700A, "Operation data is write protected, it is configured cyclically"},
+    {0x700B, "Invalid indirect addressing: (e.g., data container, list handling)"},
+    {0x700C, "Operation data is write protected, due to other settings"},
+    {0x700D, "Reserved"},
+    {0x7010, "Procedure command already active"},
+    {0x7011, "Procedure command not interruptible"},
+    {0x7012, "Procedure command at this time not executable (state)"},
+    {0x7013, "Procedure command not executable (invalid or false parameters)"},
+    {0x7014, "No data state"},
+    {0x8001, "No default value"},
+    {0x8002, "Default value transmission too long"},
+    {0x8004, "Default value cannot be changed, read only"},
+    {0x800A, "Invalid drive number"},
+    {0x800A, "General error"},
+    {0x800A, "No element addressed"},
+    {0xffff, "Unknown"},
 };
 
 /** MBX error list definition */
 const ec_mbxerrorlist_t ec_mbxerrorlist[] = {
-   {0x0000, "No error" },
-   {0x0001, "Syntax of 6 octet Mailbox Header is wrong" },
-   {0x0002, "The mailbox protocol is not supported" },
-   {0x0003, "Channel Field contains wrong value"},
-   {0x0004, "The service is no supported"},
-   {0x0005, "Invalid mailbox header"},
-   {0x0006, "Length of received mailbox data is too short"},
-   {0x0007, "No more memory in slave"},
-   {0x0008, "The length of data is inconsistent"},
-   {0xffff, "Unknown"}
+    {0x0000, "No error"},
+    {0x0001, "Syntax of 6 octet Mailbox Header is wrong"},
+    {0x0002, "The mailbox protocol is not supported"},
+    {0x0003, "Channel Field contains wrong value"},
+    {0x0004, "The service is no supported"},
+    {0x0005, "Invalid mailbox header"},
+    {0x0006, "Length of received mailbox data is too short"},
+    {0x0007, "No more memory in slave"},
+    {0x0008, "The length of data is inconsistent"},
+    {0xffff, "Unknown"},
 };
 
 /** Look up text string that belongs to SDO error code.
@@ -235,12 +234,12 @@ const ec_mbxerrorlist_t ec_mbxerrorlist[] = {
  * @param[in] sdoerrorcode   = SDO error code as defined in EtherCAT protocol
  * @return readable string
  */
-const char* ec_sdoerror2string( uint32 sdoerrorcode)
+const char *ec_sdoerror2string(uint32 sdoerrorcode)
 {
    int i = 0;
 
-   while ( (ec_sdoerrorlist[i].errorcode != 0xffffffffUL) &&
-           (ec_sdoerrorlist[i].errorcode != sdoerrorcode) )
+   while ((ec_sdoerrorlist[i].errorcode != 0xffffffffUL) &&
+          (ec_sdoerrorlist[i].errorcode != sdoerrorcode))
    {
       i++;
    }
@@ -253,17 +252,17 @@ const char* ec_sdoerror2string( uint32 sdoerrorcode)
  * @param[in] ALstatuscode   = AL status code as defined in EtherCAT protocol
  * @return readable string
  */
-char* ec_ALstatuscode2string( uint16 ALstatuscode)
+char *ec_ALstatuscode2string(uint16 ALstatuscode)
 {
    int i = 0;
 
-   while ( (ec_ALstatuscodelist[i].ALstatuscode != 0xffff) &&
-           (ec_ALstatuscodelist[i].ALstatuscode != ALstatuscode) )
+   while ((ec_ALstatuscodelist[i].ALstatuscode != 0xffff) &&
+          (ec_ALstatuscodelist[i].ALstatuscode != ALstatuscode))
    {
       i++;
    }
 
-   return (char *) ec_ALstatuscodelist[i].ALstatuscodedescription;
+   return (char *)ec_ALstatuscodelist[i].ALstatuscodedescription;
 }
 
 /** Look up text string that belongs to SoE error code.
@@ -271,17 +270,17 @@ char* ec_ALstatuscode2string( uint16 ALstatuscode)
  * @param[in] errorcode   = SoE error code as defined in EtherCAT protocol
  * @return readable string
  */
-char* ec_soeerror2string( uint16 errorcode)
+char *ec_soeerror2string(uint16 errorcode)
 {
    int i = 0;
 
-   while ( (ec_soeerrorlist[i].errorcode != 0xffff) &&
-           (ec_soeerrorlist[i].errorcode != errorcode) )
+   while ((ec_soeerrorlist[i].errorcode != 0xffff) &&
+          (ec_soeerrorlist[i].errorcode != errorcode))
    {
       i++;
    }
 
-   return (char *) ec_soeerrorlist[i].errordescription;
+   return (char *)ec_soeerrorlist[i].errordescription;
 }
 
 /** Look up text string that belongs to MBX error code.
@@ -289,17 +288,17 @@ char* ec_soeerror2string( uint16 errorcode)
  * @param[in] errorcode   = MBX error code as defined in EtherCAT protocol
  * @return readable string
  */
-char* ec_mbxerror2string( uint16 errorcode)
+char *ec_mbxerror2string(uint16 errorcode)
 {
    int i = 0;
 
-   while ( (ec_mbxerrorlist[i].errorcode != 0xffff) &&
-           (ec_mbxerrorlist[i].errorcode != errorcode) )
+   while ((ec_mbxerrorlist[i].errorcode != 0xffff) &&
+          (ec_mbxerrorlist[i].errorcode != errorcode))
    {
       i++;
    }
 
-   return (char *) ec_mbxerrorlist[i].errordescription;
+   return (char *)ec_mbxerrorlist[i].errordescription;
 }
 
 /** Convert an error to text string.
@@ -307,56 +306,56 @@ char* ec_mbxerror2string( uint16 errorcode)
  * @param[in] Ec = Struct describing the error.
  * @return readable string
  */
-charecx_err2string(const ec_errort Ec)
+char *ecx_err2string(const ec_errort Ec)
 {
    char timestr[20];
-   sprintf(timestr, "Time:%12.3f", Ec.Time.sec + (Ec.Time.usec / 1000000.0) );
+   sprintf(timestr, "Time:%12.3f", Ec.Time.sec + (Ec.Time.usec / 1000000.0));
    switch (Ec.Etype)
    {
-      case EC_ERR_TYPE_SDO_ERROR:
-      {
-         sprintf(estring, "%s SDO slave:%d index:%4.4x.%2.2x error:%8.8x %s\n",
-                 timestr, Ec.Slave, Ec.Index, Ec.SubIdx, (unsigned)Ec.AbortCode, ec_sdoerror2string(Ec.AbortCode));
-         break;
-      }
-      case EC_ERR_TYPE_EMERGENCY:
-      {
-         sprintf(estring, "%s EMERGENCY slave:%d error:%4.4x\n",
-                 timestr, Ec.Slave, Ec.ErrorCode);
-         break;
-      }
-      case EC_ERR_TYPE_PACKET_ERROR:
-      {
-         sprintf(estring, "%s PACKET slave:%d index:%4.4x.%2.2x error:%d\n",
-                 timestr, Ec.Slave, Ec.Index, Ec.SubIdx, Ec.ErrorCode);
-         break;
-      }
-      case EC_ERR_TYPE_SDOINFO_ERROR:
-      {
-         sprintf(estring, "%s SDO slave:%d index:%4.4x.%2.2x error:%8.8x %s\n",
-                 timestr, Ec.Slave, Ec.Index, Ec.SubIdx, (unsigned)Ec.AbortCode, ec_sdoerror2string(Ec.AbortCode));
-         break;
-      }
-      case EC_ERR_TYPE_SOE_ERROR:
-      {
-         sprintf(estring, "%s SoE slave:%d IDN:%4.4x error:%4.4x %s\n",
-                 timestr, Ec.Slave, Ec.Index, (unsigned)Ec.AbortCode, ec_soeerror2string(Ec.ErrorCode));
-         break;
-      }
-      case EC_ERR_TYPE_MBX_ERROR:
-      {
-         sprintf(estring, "%s MBX slave:%d error:%4.4x %s\n",
-                 timestr, Ec.Slave, Ec.ErrorCode, ec_mbxerror2string(Ec.ErrorCode));
-         break;
-      }
-      default:
-      {
-         sprintf(estring, "%s error:%8.8x\n",
-                 timestr, (unsigned)Ec.AbortCode);
-         break;
-      }
+   case EC_ERR_TYPE_SDO_ERROR:
+   {
+      sprintf(estring, "%s SDO slave:%d index:%4.4x.%2.2x error:%8.8x %s\n",
+              timestr, Ec.Slave, Ec.Index, Ec.SubIdx, (unsigned)Ec.AbortCode, ec_sdoerror2string(Ec.AbortCode));
+      break;
+   }
+   case EC_ERR_TYPE_EMERGENCY:
+   {
+      sprintf(estring, "%s EMERGENCY slave:%d error:%4.4x\n",
+              timestr, Ec.Slave, Ec.ErrorCode);
+      break;
+   }
+   case EC_ERR_TYPE_PACKET_ERROR:
+   {
+      sprintf(estring, "%s PACKET slave:%d index:%4.4x.%2.2x error:%d\n",
+              timestr, Ec.Slave, Ec.Index, Ec.SubIdx, Ec.ErrorCode);
+      break;
+   }
+   case EC_ERR_TYPE_SDOINFO_ERROR:
+   {
+      sprintf(estring, "%s SDO slave:%d index:%4.4x.%2.2x error:%8.8x %s\n",
+              timestr, Ec.Slave, Ec.Index, Ec.SubIdx, (unsigned)Ec.AbortCode, ec_sdoerror2string(Ec.AbortCode));
+      break;
+   }
+   case EC_ERR_TYPE_SOE_ERROR:
+   {
+      sprintf(estring, "%s SoE slave:%d IDN:%4.4x error:%4.4x %s\n",
+              timestr, Ec.Slave, Ec.Index, (unsigned)Ec.AbortCode, ec_soeerror2string(Ec.ErrorCode));
+      break;
+   }
+   case EC_ERR_TYPE_MBX_ERROR:
+   {
+      sprintf(estring, "%s MBX slave:%d error:%4.4x %s\n",
+              timestr, Ec.Slave, Ec.ErrorCode, ec_mbxerror2string(Ec.ErrorCode));
+      break;
+   }
+   default:
+   {
+      sprintf(estring, "%s error:%8.8x\n",
+              timestr, (unsigned)Ec.AbortCode);
+      break;
+   }
    }
-   return (char*) estring;
+   return (char *)estring;
 }
 
 /** Look up error in ec_errorlist and convert to text string.
@@ -364,7 +363,7 @@ char* ecx_err2string(const ec_errort Ec)
  * @param[in]  context        = context struct
  * @return readable string
  */
-charecx_elist2string(ecx_contextt *context)
+char *ecx_elist2string(ecx_contextt *context)
 {
    ec_errort Ec;
 
index 036ccbf82059182139496a8440cf8318e58170bf..f0ede39f79559f56e59a2632e4cca4a13d380858 100644 (file)
@@ -21,15 +21,15 @@ PACKED_BEGIN
 typedef struct PACKED
 {
    ec_mbxheadert MbxHeader;
-   uint8         opCode         :3;
-   uint8         incomplete     :1;
-   uint8         error          :1;
-   uint8         driveNo        :3;
-   uint8         elementflags;
+   uint8 opCode : 3;
+   uint8 incomplete : 1;
+   uint8 error : 1;
+   uint8 driveNo : 3;
+   uint8 elementflags;
    union
    {
-      uint16     idn;
-      uint16     fragmentsleft;
+      uint16 idn;
+      uint16 fragmentsleft;
    };
 } ec_SoEt;
 PACKED_END
@@ -115,7 +115,7 @@ int ecx_SoEread(ecx_contextt *context, uint16 slave, uint8 driveNo, uint8 elemen
    {
       while (NotLast)
       {
-         if(MbxIn) ecx_dropmbx(context, MbxIn);
+         if (MbxIn) ecx_dropmbx(context, MbxIn);
          MbxIn = NULL;
          /* read slave response */
          wkc = ecx_mbxreceive(context, slave, &MbxIn, timeout);
@@ -129,7 +129,7 @@ int ecx_SoEread(ecx_contextt *context, uint16 slave, uint8 driveNo, uint8 elemen
                 (aSoEp->driveNo == driveNo) &&
                 (aSoEp->elementflags == elementflags))
             {
-               framedatasize = etohs(aSoEp->MbxHeader.length) - sizeof(ec_SoEt)  + sizeof(ec_mbxheadert);
+               framedatasize = etohs(aSoEp->MbxHeader.length) - sizeof(ec_SoEt) + sizeof(ec_mbxheadert);
                totalsize += framedatasize;
                /* Does parameter fit in parameter buffer ? */
                if (totalsize <= *psize)
@@ -179,8 +179,8 @@ int ecx_SoEread(ecx_contextt *context, uint16 slave, uint8 driveNo, uint8 elemen
          }
       }
    }
-   if(MbxIn) ecx_dropmbx(context, MbxIn);
-   if(MbxOut) ecx_dropmbx(context, MbxOut);
+   if (MbxIn) ecx_dropmbx(context, MbxIn);
+   if (MbxOut) ecx_dropmbx(context, MbxOut);
    return wkc;
 }
 
@@ -236,7 +236,7 @@ int ecx_SoEwrite(ecx_contextt *context, uint16 slave, uint8 driveNo, uint8 eleme
       SoEp->incomplete = 0;
       if (framedatasize > maxdata)
       {
-         framedatasize = maxdata;  /*  segmented transfer needed  */
+         framedatasize = maxdata; /*  segmented transfer needed  */
          NotLast = TRUE;
          SoEp->incomplete = 1;
          SoEp->fragmentsleft = (uint16)(psize / maxdata);
@@ -257,7 +257,7 @@ int ecx_SoEwrite(ecx_contextt *context, uint16 slave, uint8 driveNo, uint8 eleme
       {
          if (!NotLast || !ecx_mbxempty(context, slave, timeout))
          {
-            if(MbxIn) ecx_dropmbx(context, MbxIn);
+            if (MbxIn) ecx_dropmbx(context, MbxIn);
             MbxIn = NULL;
             /* read slave response */
             wkc = ecx_mbxreceive(context, slave, &MbxIn, timeout);
@@ -299,8 +299,8 @@ int ecx_SoEwrite(ecx_contextt *context, uint16 slave, uint8 driveNo, uint8 eleme
          }
       }
    }
-   if(MbxIn) ecx_dropmbx(context, MbxIn);
-   if(MbxOut) ecx_dropmbx(context, MbxOut);
+   if (MbxIn) ecx_dropmbx(context, MbxIn);
+   if (MbxOut) ecx_dropmbx(context, MbxOut);
    return wkc;
 }
 
@@ -319,16 +319,16 @@ int ecx_SoEwrite(ecx_contextt *context, uint16 slave, uint8 driveNo, uint8 eleme
 int ecx_readIDNmap(ecx_contextt *context, uint16 slave, uint32 *Osize, uint32 *Isize)
 {
    int retVal = 0;
-   int   wkc;
+   int wkc;
    int psize;
    uint8 driveNr;
    uint16 entries, itemcount;
-   ec_SoEmappingt     SoEmapping;
-   ec_SoEattributet   SoEattribute;
+   ec_SoEmappingt SoEmapping;
+   ec_SoEattributet SoEattribute;
 
    *Isize = 0;
    *Osize = 0;
-   for(driveNr = 0; driveNr < EC_SOE_MAX_DRIVES; driveNr++)
+   for (driveNr = 0; driveNr < EC_SOE_MAX_DRIVES; driveNr++)
    {
       psize = sizeof(SoEmapping);
       /* read output mapping via SoE */
@@ -337,7 +337,7 @@ int ecx_readIDNmap(ecx_contextt *context, uint16 slave, uint32 *Osize, uint32 *I
       {
          /* command word (uint16) is always mapped but not in list */
          *Osize += 16;
-         for (itemcount = 0 ; itemcount < entries ; itemcount++)
+         for (itemcount = 0; itemcount < entries; itemcount++)
          {
             psize = sizeof(SoEattribute);
             /* read attribute of each IDN in mapping list */
@@ -356,7 +356,7 @@ int ecx_readIDNmap(ecx_contextt *context, uint16 slave, uint32 *Osize, uint32 *I
       {
          /* status word (uint16) is always mapped but not in list */
          *Isize += 16;
-         for (itemcount = 0 ; itemcount < entries ; itemcount++)
+         for (itemcount = 0; itemcount < entries; itemcount++)
          {
             psize = sizeof(SoEattribute);
             /* read attribute of each IDN in mapping list */
index 035fdd29997e07a74277c82025505d1d59329980..91e56bfbb354d7c280a7f9e99e4c8f8a96e5cc96 100644 (file)
@@ -8,7 +8,6 @@
 
 #include <stdio.h>
 
-
 /*****************************************************************************
 *
 * FUNCTION:                    main
@@ -38,7 +37,6 @@
 
 #include "ethercat.h"
 
-
 char IOmap[4096];
 char IOmap2[4096];
 
@@ -47,36 +45,36 @@ char IOmap2[4096];
  *  ec_slave[0] is reserved for the master. Structure gets filled
  *  in by the configuration function ec_config().
  */
-ec_slavet   ec_slave[EC_MAXSLAVE];
-ec_slavet   ec_slave2[EC_MAXSLAVE];
+ec_slavet ec_slave[EC_MAXSLAVE];
+ec_slavet ec_slave2[EC_MAXSLAVE];
 /** number of slaves found on the network */
-int         ec_slavecount;
-int         ec_slavecount2;
+int ec_slavecount;
+int ec_slavecount2;
 /** slave group structure */
-ec_groupt   ec_groups[EC_MAXGROUP];
-ec_groupt   ec_groups2[EC_MAXGROUP];
+ec_groupt ec_groups[EC_MAXGROUP];
+ec_groupt ec_groups2[EC_MAXGROUP];
 
 /** cache for EEPROM read functions */
-static uint8        esibuf[EC_MAXEEPBUF];
-static uint8        esibuf2[EC_MAXEEPBUF];
+static uint8 esibuf[EC_MAXEEPBUF];
+static uint8 esibuf2[EC_MAXEEPBUF];
 /** bitmap for filled cache buffer bytes */
-static uint32       esimap[EC_MAXEEPBITMAP];
-static uint32       esimap2[EC_MAXEEPBITMAP];
+static uint32 esimap[EC_MAXEEPBITMAP];
+static uint32 esimap2[EC_MAXEEPBITMAP];
 /** current slave for EEPROM cache buffer */
-static ec_eringt    ec_elist;
-static ec_eringt    ec_elist2;
+static ec_eringt ec_elist;
+static ec_eringt ec_elist2;
 static ec_idxstackT ec_idxstack;
 static ec_idxstackT ec_idxstack2;
 
 /** SyncManager Communication Type struct to store data of one slave */
-static ec_SMcommtypet  ec_SMcommtype;
-static ec_SMcommtypet  ec_SMcommtype2;
+static ec_SMcommtypet ec_SMcommtype;
+static ec_SMcommtypet ec_SMcommtype2;
 /** PDO assign struct to store data of one slave */
-static ec_PDOassignt   ec_PDOassign;
-static ec_PDOassignt   ec_PDOassign2;
+static ec_PDOassignt ec_PDOassign;
+static ec_PDOassignt ec_PDOassign2;
 /** PDO description struct to store data of one slave */
-static ec_PDOdesct     ec_PDOdesc;
-static ec_PDOdesct     ec_PDOdesc2;
+static ec_PDOdesct ec_PDOdesc;
+static ec_PDOdesct ec_PDOdesc2;
 
 /** buffer for EEPROM SM data */
 static ec_eepromSMt ec_SM;
@@ -86,62 +84,56 @@ static ec_eepromFMMUt ec_FMMU;
 static ec_eepromFMMUt ec_FMMU2;
 
 /** Global variable TRUE if error available in error stack */
-static boolean    EcatError = FALSE;
-static boolean    EcatError2 = FALSE;
-
-int64         ec_DCtime;
-int64         ec_DCtime2;
-
-static ecx_portt      ecx_port;
-static ecx_portt      ecx_port2;
-
-
-static ecx_contextt ctx [] = {
-   {
-   &ecx_port,
-   &ec_slave[0],
-   &ec_slavecount,
-   EC_MAXSLAVE,
-   &ec_groups[0],
-   EC_MAXGROUP,
-   &esibuf[0],
-   &esimap[0],
-   0,
-   &ec_elist,
-   &ec_idxstack,
-   &EcatError,
-   0,
-   0,
-   &ec_DCtime,
-   &ec_SMcommtype,
-   &ec_PDOassign,
-   &ec_PDOdesc,
-   &ec_SM,
-   &ec_FMMU
-   },
-   {
-   &ecx_port2,
-   &ec_slave2[0],
-   &ec_slavecount2,
-   EC_MAXSLAVE,
-   &ec_groups2[0],
-   EC_MAXGROUP,
-   &esibuf2[0],
-   &esimap2[0],
-   0,
-   &ec_elist2,
-   &ec_idxstack2,
-   &EcatError2,
-   0,
-   0,
-   &ec_DCtime2,
-   &ec_SMcommtype2,
-   &ec_PDOassign2,
-   &ec_PDOdesc2,
-   &ec_SM2,
-   &ec_FMMU2
-   }
-};
+static boolean EcatError = FALSE;
+static boolean EcatError2 = FALSE;
+
+int64 ec_DCtime;
+int64 ec_DCtime2;
+
+static ecx_portt ecx_port;
+static ecx_portt ecx_port2;
+
+static ecx_contextt ctx[] = {
+    {&ecx_port,
+     &ec_slave[0],
+     &ec_slavecount,
+     EC_MAXSLAVE,
+     &ec_groups[0],
+     EC_MAXGROUP,
+     &esibuf[0],
+     &esimap[0],
+     0,
+     &ec_elist,
+     &ec_idxstack,
+     &EcatError,
+     0,
+     0,
+     &ec_DCtime,
+     &ec_SMcommtype,
+     &ec_PDOassign,
+     &ec_PDOdesc,
+     &ec_SM,
+     &ec_FMMU},
+    {&ecx_port2,
+     &ec_slave2[0],
+     &ec_slavecount2,
+     EC_MAXSLAVE,
+     &ec_groups2[0],
+     EC_MAXGROUP,
+     &esibuf2[0],
+     &esimap2[0],
+     0,
+     &ec_elist2,
+     &ec_idxstack2,
+     &EcatError2,
+     0,
+     0,
+     &ec_DCtime2,
+     &ec_SMcommtype2,
+     &ec_PDOassign2,
+     &ec_PDOdesc2,
+     &ec_SM2,
+     &ec_FMMU2}};
 
 void slaveinfo(char *ifname)
 {
@@ -157,73 +149,74 @@ void slaveinfo(char *ifname)
    printf("Starting slaveinfo\n");
 
    /* initialise SOEM, bind socket to ifname */
-   if (ecx_init(&ctx[0],"ie1g1") && ecx_init(&ctx[1],"ie1g0"))
+   if (ecx_init(&ctx[0], "ie1g1") && ecx_init(&ctx[1], "ie1g0"))
    {
-      printf("ec_init on %s succeeded.\n",ifname);
+      printf("ec_init on %s succeeded.\n", ifname);
       /* find and auto-config slaves */
-      if ( ecx_config_init(&ctx[0],FALSE) > 0 && ecx_config_init(&ctx[1],FALSE) > 0 )
+      if (ecx_config_init(&ctx[0], FALSE) > 0 && ecx_config_init(&ctx[1], FALSE) > 0)
       {
          for (ctx_count = 0; ctx_count < 2; ctx_count++)
          {
             ecx_config_map_group(&ctx[ctx_count], IOmap, 0);
             ecx_configdc(&ctx[ctx_count]);
-            while(*(ctx[ctx_count].ecaterror)) printf("%s", ecx_elist2string(&ctx[ctx_count]));
-            printf("%d slaves found and configured.\n",*(ctx[ctx_count].slavecount));
-            expectedWKC[ctx_count] = ( ctx[ctx_count].grouplist[0].outputsWKC * 2) + ctx[ctx_count].grouplist[0].inputsWKC;
+            while (*(ctx[ctx_count].ecaterror))
+               printf("%s", ecx_elist2string(&ctx[ctx_count]));
+            printf("%d slaves found and configured.\n", *(ctx[ctx_count].slavecount));
+            expectedWKC[ctx_count] = (ctx[ctx_count].grouplist[0].outputsWKC * 2) + ctx[ctx_count].grouplist[0].inputsWKC;
             printf("Calculated workcounter %d\n", expectedWKC[ctx_count]);
             /* wait for all slaves to reach SAFE_OP state */
-            ecx_statecheck(&ctx[ctx_count],0, EC_STATE_SAFE_OP,  EC_TIMEOUTSTATE * 3);
-            if (ctx[ctx_count].slavelist[ctx_count].state != EC_STATE_SAFE_OP )
+            ecx_statecheck(&ctx[ctx_count], 0, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE * 3);
+            if (ctx[ctx_count].slavelist[ctx_count].state != EC_STATE_SAFE_OP)
             {
                printf("Not all slaves reached safe operational state.\n");
                ecx_readstate(&ctx[ctx_count]);
-               for(i = 1; i <= *(ctx[ctx_count].slavecount) ; i++)
+               for (i = 1; i <= *(ctx[ctx_count].slavecount); i++)
                {
-                  if(ctx[ctx_count].slavelist[i].state != EC_STATE_SAFE_OP)
+                  if (ctx[ctx_count].slavelist[i].state != EC_STATE_SAFE_OP)
                   {
                      printf("Slave %d State=%2x StatusCode=%4x : %s\n",
-                        i, ctx[ctx_count].slavelist[i].state, ctx[ctx_count].slavelist[i].ALstatuscode, ec_ALstatuscode2string(ctx[ctx_count].slavelist[i].ALstatuscode));
+                            i, ctx[ctx_count].slavelist[i].state, ctx[ctx_count].slavelist[i].ALstatuscode, ec_ALstatuscode2string(ctx[ctx_count].slavelist[i].ALstatuscode));
                   }
                }
             }
             ecx_readstate(&ctx[ctx_count]);
 
-            for( cnt = 1 ; cnt <= *(ctx[ctx_count].slavecount) ; cnt++)
+            for (cnt = 1; cnt <= *(ctx[ctx_count].slavecount); cnt++)
             {
                printf("\nSlave:%d\n Name:%s\n Output size: %dbits\n Input size: %dbits\n State: %d\n Delay: %d[ns]\n Has DC: %d\n",
-                     cnt, ctx[ctx_count].slavelist[cnt].name, ctx[ctx_count].slavelist[cnt].Obits, ctx[ctx_count].slavelist[cnt].Ibits,
-                     ctx[ctx_count].slavelist[cnt].state, ctx[ctx_count].slavelist[cnt].pdelay, ctx[ctx_count].slavelist[cnt].hasdc);
+                      cnt, ctx[ctx_count].slavelist[cnt].name, ctx[ctx_count].slavelist[cnt].Obits, ctx[ctx_count].slavelist[cnt].Ibits,
+                      ctx[ctx_count].slavelist[cnt].state, ctx[ctx_count].slavelist[cnt].pdelay, ctx[ctx_count].slavelist[cnt].hasdc);
                if (ctx[ctx_count].slavelist[cnt].hasdc)
                {
                   printf(" DCParentport:%d\n", ctx[ctx_count].slavelist[cnt].parentport);
                }
-               printf(" Activeports:%d.%d.%d.%d\n", (ctx[ctx_count].slavelist[cnt].activeports & 0x01) > 0 ,
-                                                      (ctx[ctx_count].slavelist[cnt].activeports & 0x02) > 0 ,
-                                                      (ctx[ctx_count].slavelist[cnt].activeports & 0x04) > 0 ,
-                                                      (ctx[ctx_count].slavelist[cnt].activeports & 0x08) > 0 );
+               printf(" Activeports:%d.%d.%d.%d\n", (ctx[ctx_count].slavelist[cnt].activeports & 0x01) > 0,
+                      (ctx[ctx_count].slavelist[cnt].activeports & 0x02) > 0,
+                      (ctx[ctx_count].slavelist[cnt].activeports & 0x04) > 0,
+                      (ctx[ctx_count].slavelist[cnt].activeports & 0x08) > 0);
                printf(" Configured address: %4.4x\n", ctx[ctx_count].slavelist[cnt].configadr);
                printf(" Man: %8.8x ID: %8.8x Rev: %8.8x\n", (int)ctx[ctx_count].slavelist[cnt].eep_man,
-                        (int)ctx[ctx_count].slavelist[cnt].eep_id, (int)ctx[ctx_count].slavelist[cnt].eep_rev);
-               for(nSM = 0 ; nSM < EC_MAXSM ; nSM++)
+                      (int)ctx[ctx_count].slavelist[cnt].eep_id, (int)ctx[ctx_count].slavelist[cnt].eep_rev);
+               for (nSM = 0; nSM < EC_MAXSM; nSM++)
                {
-                  if(ctx[ctx_count].slavelist[cnt].SM[nSM].StartAddr > 0)
-                     printf(" SM%1d A:%4.4x L:%4d F:%8.8x Type:%d\n",nSM, ctx[ctx_count].slavelist[cnt].SM[nSM].StartAddr,
-                              ctx[ctx_count].slavelist[cnt].SM[nSM].SMlength,(int)ctx[ctx_count].slavelist[cnt].SM[nSM].SMflags,
-                              ctx[ctx_count].slavelist[cnt].SMtype[nSM]);
+                  if (ctx[ctx_count].slavelist[cnt].SM[nSM].StartAddr > 0)
+                     printf(" SM%1d A:%4.4x L:%4d F:%8.8x Type:%d\n", nSM, ctx[ctx_count].slavelist[cnt].SM[nSM].StartAddr,
+                            ctx[ctx_count].slavelist[cnt].SM[nSM].SMlength, (int)ctx[ctx_count].slavelist[cnt].SM[nSM].SMflags,
+                            ctx[ctx_count].slavelist[cnt].SMtype[nSM]);
                }
-               for(j = 0 ; j < ctx[ctx_count].slavelist[cnt].FMMUunused ; j++)
+               for (j = 0; j < ctx[ctx_count].slavelist[cnt].FMMUunused; j++)
                {
                   printf(" FMMU%1d Ls:%8.8x Ll:%4d Lsb:%d Leb:%d Ps:%4.4x Psb:%d Ty:%2.2x Act:%2.2x\n", j,
-                           (int)ctx[ctx_count].slavelist[cnt].FMMU[j].LogStart, ctx[ctx_count].slavelist[cnt].FMMU[j].LogLength,
-                           ctx[ctx_count].slavelist[cnt].FMMU[j].LogStartbit, ctx[ctx_count].slavelist[cnt].FMMU[j].LogEndbit,
-                           ctx[ctx_count].slavelist[cnt].FMMU[j].PhysStart, ctx[ctx_count].slavelist[cnt].FMMU[j].PhysStartBit,
-                           ctx[ctx_count].slavelist[cnt].FMMU[j].FMMUtype, ctx[ctx_count].slavelist[cnt].FMMU[j].FMMUactive);
+                         (int)ctx[ctx_count].slavelist[cnt].FMMU[j].LogStart, ctx[ctx_count].slavelist[cnt].FMMU[j].LogLength,
+                         ctx[ctx_count].slavelist[cnt].FMMU[j].LogStartbit, ctx[ctx_count].slavelist[cnt].FMMU[j].LogEndbit,
+                         ctx[ctx_count].slavelist[cnt].FMMU[j].PhysStart, ctx[ctx_count].slavelist[cnt].FMMU[j].PhysStartBit,
+                         ctx[ctx_count].slavelist[cnt].FMMU[j].FMMUtype, ctx[ctx_count].slavelist[cnt].FMMU[j].FMMUactive);
                }
                printf(" FMMUfunc 0:%d 1:%d 2:%d 3:%d\n",
-                        ctx[ctx_count].slavelist[cnt].FMMU0func, ctx[ctx_count].slavelist[cnt].FMMU1func, ctx[ctx_count].slavelist[cnt].FMMU2func,
-                        ctx[ctx_count].slavelist[cnt].FMMU3func);
+                      ctx[ctx_count].slavelist[cnt].FMMU0func, ctx[ctx_count].slavelist[cnt].FMMU1func, ctx[ctx_count].slavelist[cnt].FMMU2func,
+                      ctx[ctx_count].slavelist[cnt].FMMU3func);
                printf(" MBX length wr: %d rd: %d MBX protocols : %2.2x\n", ctx[ctx_count].slavelist[cnt].mbx_l,
-                        ctx[ctx_count].slavelist[cnt].mbx_rl, ctx[ctx_count].slavelist[cnt].mbx_proto);
+                      ctx[ctx_count].slavelist[cnt].mbx_rl, ctx[ctx_count].slavelist[cnt].mbx_proto);
                ssigen = ecx_siifind(&ctx[ctx_count], cnt, ECT_SII_GENERAL);
                /* SII general section */
                if (ssigen)
@@ -232,7 +225,7 @@ void slaveinfo(char *ifname)
                   ctx[ctx_count].slavelist[cnt].FoEdetails = ecx_siigetbyte(&ctx[ctx_count], cnt, ssigen + 0x08);
                   ctx[ctx_count].slavelist[cnt].EoEdetails = ecx_siigetbyte(&ctx[ctx_count], cnt, ssigen + 0x09);
                   ctx[ctx_count].slavelist[cnt].SoEdetails = ecx_siigetbyte(&ctx[ctx_count], cnt, ssigen + 0x0a);
-                  if((ecx_siigetbyte(&ctx[ctx_count], cnt, ssigen + 0x0d) & 0x02) > 0)
+                  if ((ecx_siigetbyte(&ctx[ctx_count], cnt, ssigen + 0x0d) & 0x02) > 0)
                   {
                      ctx[ctx_count].slavelist[cnt].blockLRW = 1;
                      ctx[ctx_count].slavelist[0].blockLRW++;
@@ -242,9 +235,9 @@ void slaveinfo(char *ifname)
                   ctx[ctx_count].slavelist[0].Ebuscurrent += ctx[ctx_count].slavelist[cnt].Ebuscurrent;
                }
                printf(" CoE details: %2.2x FoE details: %2.2x EoE details: %2.2x SoE details: %2.2x\n",
-                        ctx[ctx_count].slavelist[cnt].CoEdetails, ctx[ctx_count].slavelist[cnt].FoEdetails, ctx[ctx_count].slavelist[cnt].EoEdetails, ctx[ctx_count].slavelist[cnt].SoEdetails);
+                      ctx[ctx_count].slavelist[cnt].CoEdetails, ctx[ctx_count].slavelist[cnt].FoEdetails, ctx[ctx_count].slavelist[cnt].EoEdetails, ctx[ctx_count].slavelist[cnt].SoEdetails);
                printf(" Ebus current: %d[mA]\n only LRD/LWR:%d\n",
-                        ctx[ctx_count].slavelist[cnt].Ebuscurrent, ctx[ctx_count].slavelist[cnt].blockLRW);
+                      ctx[ctx_count].slavelist[cnt].Ebuscurrent, ctx[ctx_count].slavelist[cnt].blockLRW);
             }
          }
 
@@ -260,8 +253,8 @@ void slaveinfo(char *ifname)
          /* send one valid process data to make outputs in slaves happy*/
          ecx_send_processdata(&ctx[0]);
          ecx_send_processdata(&ctx[1]);
-         ecx_receive_processdata(&ctx[0],EC_TIMEOUTRET);
-         ecx_receive_processdata(&ctx[1],EC_TIMEOUTRET);
+         ecx_receive_processdata(&ctx[0], EC_TIMEOUTRET);
+         ecx_receive_processdata(&ctx[1], EC_TIMEOUTRET);
          /* request OP state for all slaves */
          ecx_writestate(&ctx[0], 0);
          ecx_writestate(&ctx[1], 0);
@@ -271,59 +264,56 @@ void slaveinfo(char *ifname)
          {
             ecx_send_processdata(&ctx[0]);
             ecx_send_processdata(&ctx[1]);
-            ecx_receive_processdata(&ctx[0],EC_TIMEOUTRET);
-            ecx_receive_processdata(&ctx[1],EC_TIMEOUTRET);
-            ecx_statecheck(&ctx[0],0, EC_STATE_OPERATIONAL, 50000);
-            ecx_statecheck(&ctx[1],0, EC_STATE_OPERATIONAL, 50000);
-         }
-         while (chk-- && (ctx[0].slavelist[0].state != EC_STATE_OPERATIONAL) && (ctx[1].slavelist[0].state != EC_STATE_OPERATIONAL));
-
+            ecx_receive_processdata(&ctx[0], EC_TIMEOUTRET);
+            ecx_receive_processdata(&ctx[1], EC_TIMEOUTRET);
+            ecx_statecheck(&ctx[0], 0, EC_STATE_OPERATIONAL, 50000);
+            ecx_statecheck(&ctx[1], 0, EC_STATE_OPERATIONAL, 50000);
+         } while (chk-- && (ctx[0].slavelist[0].state != EC_STATE_OPERATIONAL) && (ctx[1].slavelist[0].state != EC_STATE_OPERATIONAL));
 
          *(ctx[0].slavelist[6].outputs) = 0xFF;
          *(ctx[1].slavelist[1].outputs) = 0x0F;
 
-         if (ctx[0].slavelist[0].state == EC_STATE_OPERATIONAL && ctx[1].slavelist[0].state == EC_STATE_OPERATIONAL  )
+         if (ctx[0].slavelist[0].state == EC_STATE_OPERATIONAL && ctx[1].slavelist[0].state == EC_STATE_OPERATIONAL)
          {
             printf("Operational state reached for all slaves.\n");
             /* cyclic loop */
-            start_RT_trace (1);
+            start_RT_trace(1);
             wkc_count = 0;
             inOP = TRUE;
-            for(i = 1; i <= 10000; i++)
+            for (i = 1; i <= 10000; i++)
             {
                for (ctx_count = 0; ctx_count < 2; ctx_count++)
                {
                   /* Receive processdata */
-                  log_RT_event('R',(WORD)(1 + ctx_count * 10));
+                  log_RT_event('R', (WORD)(1 + ctx_count * 10));
                   wkc[ctx_count] = ecx_receive_processdata(&ctx[ctx_count], 0);
-                  log_RT_event('R',(WORD)(99 + ctx_count * 100));
+                  log_RT_event('R', (WORD)(99 + ctx_count * 100));
                }
                for (ctx_count = 0; ctx_count < 2; ctx_count++)
                {
                   /* Send processdata */
-                  log_RT_event('S',(WORD)(1 + ctx_count * 10));
+                  log_RT_event('S', (WORD)(1 + ctx_count * 10));
                   if (!ecx_send_processdata(&ctx[ctx_count]))
                   {
-                     printf (" Frame no: %d on master %d,Not sentOK\n", i,ctx_count);
+                     printf(" Frame no: %d on master %d,Not sentOK\n", i, ctx_count);
                   }
-                  log_RT_event('S',(WORD)(99 + ctx_count * 100));
+                  log_RT_event('S', (WORD)(99 + ctx_count * 100));
                }
                knRtSleep(1);
 
                for (ctx_count = 0; ctx_count < 2; ctx_count++)
                {
-                  if(wkc[ctx_count] >= expectedWKC[ctx_count])
+                  if (wkc[ctx_count] >= expectedWKC[ctx_count])
                   {
                   }
                   else
                   {
-                     printf (" Frame no: %d on master %d , wc not wkc >= expectedWKC, %d\n",i, ctx_count, wkc[ctx_count]);
+                     printf(" Frame no: %d on master %d , wc not wkc >= expectedWKC, %d\n", i, ctx_count, wkc[ctx_count]);
                   }
                }
             }
-            stop_RT_trace ();
+            stop_RT_trace();
             inOP = FALSE;
-
          }
       }
       else
@@ -337,12 +327,11 @@ void slaveinfo(char *ifname)
    }
    else
    {
-      printf("No socket connection on %s\nExcecute as root\n",ifname);
+      printf("No socket connection on %s\nExcecute as root\n", ifname);
    }
 }
 
-
-void                           main(int argc, char* argv[])
+void main(int argc, char *argv[])
 {
    printf("SOEM (Simple Open EtherCAT Master)\nSlaveinfo\n");
 
@@ -353,10 +342,8 @@ void                               main(int argc, char* argv[])
    }
    else
    {
-        printf("Usage: slaveinfo ifname [options]\nifname = eth0 for example\nOptions :\n -sdo : print SDO info\n -map : print mapping\n");
+      printf("Usage: slaveinfo ifname [options]\nifname = eth0 for example\nOptions :\n -sdo : print SDO info\n -map : print mapping\n");
    }
 
    printf("End program\n");
-
 }
-
index c9c649c8c8db25671faa828be9378a090cef2747..0db16298bc9f768cf361aa94e35f3826f181e469 100644 (file)
 
 #include "ethercat.h"
 
-#define MAXBUF 32768
-#define STDBUF 2048
-#define MINBUF 128
+#define MAXBUF          32768
+#define STDBUF          2048
+#define MINBUF          128
 
-#define MODE_NONE         0
-#define MODE_READBIN      1
-#define MODE_READINTEL    2
-#define MODE_WRITEBIN     3
-#define MODE_WRITEINTEL   4
-#define MODE_WRITEALIAS   5
-#define MODE_INFO         6
+#define MODE_NONE       0
+#define MODE_READBIN    1
+#define MODE_READINTEL  2
+#define MODE_WRITEBIN   3
+#define MODE_WRITEINTEL 4
+#define MODE_WRITEALIAS 5
+#define MODE_INFO       6
 
-#define MAXSLENGTH        256
+#define MAXSLENGTH      256
 
 uint8 ebuf[MAXBUF];
 uint8 ob;
@@ -43,7 +43,7 @@ uint16 ow;
 int os;
 int slave;
 int alias;
-struct timeval tstart,tend, tdif;
+struct timeval tstart, tend, tdif;
 int wkc;
 int mode;
 char sline[MAXSLENGTH];
@@ -57,7 +57,7 @@ int input_bin(char *fname, int *length)
    int cc = 0, c;
 
    fp = fopen(fname, "rb");
-   if(fp == NULL)
+   if (fp == NULL)
       return 0;
    while (((c = fgetc(fp)) != EOF) && (cc < MAXBUF))
       ebuf[cc++] = (uint8)c;
@@ -76,7 +76,7 @@ int input_intelhex(char *fname, int *start, int *length)
    int hstart, hlength, sum;
 
    fp = fopen(fname, "r");
-   if(fp == NULL)
+   if (fp == NULL)
       return 0;
    hstart = MAXBUF;
    hlength = 0;
@@ -85,7 +85,7 @@ int input_intelhex(char *fname, int *start, int *length)
    {
       memset(sline, 0x00, MAXSLENGTH);
       sc = 0;
-      while (((c = fgetc(fp)) != EOF) && (c != 0x0A) && (sc < (MAXSLENGTH -1)))
+      while (((c = fgetc(fp)) != EOF) && (c != 0x0A) && (sc < (MAXSLENGTH - 1)))
          sline[sc++] = (uint8)c;
       if ((c != EOF) && ((sc < 11) || (sline[0] != ':')))
       {
@@ -95,18 +95,18 @@ int input_intelhex(char *fname, int *start, int *length)
       }
       if (c != EOF)
       {
-         sn = sscanf(sline , ":%2x%4x%2x", &ll, &ladr, &lt);
+         sn = sscanf(sline, ":%2x%4x%2x", &ll, &ladr, &lt);
          if ((sn == 3) && ((ladr + ll) <= MAXBUF) && (lt == 0))
          {
             sum = ll + (ladr >> 8) + (ladr & 0xff) + lt;
-            if(ladr < hstart) hstart = ladr;
-            for(i = 0; i < ll ; i++)
+            if (ladr < hstart) hstart = ladr;
+            for (i = 0; i < ll; i++)
             {
                sn = sscanf(&sline[9 + (i << 1)], "%2x", &lval);
                ebuf[ladr + i] = (uint8)lval;
                sum += (uint8)lval;
             }
-            if(((ladr + ll) - hstart) > hlength)
+            if (((ladr + ll) - hstart) > hlength)
                hlength = (ladr + ll) - hstart;
             sum = (0x100 - sum) & 0xff;
             sn = sscanf(&sline[9 + (i << 1)], "%2x", &lval);
@@ -118,8 +118,7 @@ int input_intelhex(char *fname, int *start, int *length)
             }
          }
       }
-   }
-   while (c != EOF);
+   } while (c != EOF);
    if (retval)
    {
       *length = hlength;
@@ -137,10 +136,10 @@ int output_bin(char *fname, int length)
    int cc;
 
    fp = fopen(fname, "wb");
-   if(fp == NULL)
+   if (fp == NULL)
       return 0;
-   for (cc = 0 ; cc < length ; cc++)
-      fputc( ebuf[cc], fp);
+   for (cc = 0; cc < length; cc++)
+      fputc(ebuf[cc], fp);
    fclose(fp);
 
    return 1;
@@ -153,7 +152,7 @@ int output_intelhex(char *fname, int length)
    int cc = 0, ll, sum, i;
 
    fp = fopen(fname, "w");
-   if(fp == NULL)
+   if (fp == NULL)
       return 0;
    while (cc < length)
    {
@@ -183,43 +182,43 @@ int eeprom_read(int slave, int start, int length)
    uint64 b8;
    uint8 eepctl;
 
-   if((ec_slavecount >= slave) && (slave > 0) && ((start + length) <= MAXBUF))
+   if ((ec_slavecount >= slave) && (slave > 0) && ((start + length) <= MAXBUF))
    {
       aiadr = 1 - slave;
       eepctl = 2;
-      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl , EC_TIMEOUTRET); /* force Eeprom from PDI */
+      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl, EC_TIMEOUTRET); /* force Eeprom from PDI */
       eepctl = 0;
-      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl , EC_TIMEOUTRET); /* set Eeprom to master */
+      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl, EC_TIMEOUTRET); /* set Eeprom to master */
 
       estat = 0x0000;
       aiadr = 1 - slave;
-      wkc=ec_APRD(aiadr, ECT_REG_EEPSTAT, sizeof(estat), &estat, EC_TIMEOUTRET); /* read eeprom status */
+      wkc = ec_APRD(aiadr, ECT_REG_EEPSTAT, sizeof(estat), &estat, EC_TIMEOUTRET); /* read eeprom status */
       estat = etohs(estat);
       if (estat & EC_ESTAT_R64)
       {
          ainc = 8;
-         for (i = start ; i < (start + length) ; i+=ainc)
+         for (i = start; i < (start + length); i += ainc)
          {
-            b8 = ec_readeepromAP(aiadr, i >> 1 , EC_TIMEOUTEEP);
+            b8 = ec_readeepromAP(aiadr, i >> 1, EC_TIMEOUTEEP);
             ebuf[i] = b8;
-            ebuf[i+1] = b8 >> 8;
-            ebuf[i+2] = b8 >> 16;
-            ebuf[i+3] = b8 >> 24;
-            ebuf[i+4] = b8 >> 32;
-            ebuf[i+5] = b8 >> 40;
-            ebuf[i+6] = b8 >> 48;
-            ebuf[i+7] = b8 >> 56;
+            ebuf[i + 1] = b8 >> 8;
+            ebuf[i + 2] = b8 >> 16;
+            ebuf[i + 3] = b8 >> 24;
+            ebuf[i + 4] = b8 >> 32;
+            ebuf[i + 5] = b8 >> 40;
+            ebuf[i + 6] = b8 >> 48;
+            ebuf[i + 7] = b8 >> 56;
          }
       }
       else
       {
-         for (i = start ; i < (start + length) ; i+=ainc)
+         for (i = start; i < (start + length); i += ainc)
          {
-            b4 = ec_readeepromAP(aiadr, i >> 1 , EC_TIMEOUTEEP);
+            b4 = ec_readeepromAP(aiadr, i >> 1, EC_TIMEOUTEEP);
             ebuf[i] = b4;
-            ebuf[i+1] = b4 >> 8;
-            ebuf[i+2] = b4 >> 16;
-            ebuf[i+3] = b4 >> 24;
+            ebuf[i + 1] = b4 >> 8;
+            ebuf[i + 2] = b4 >> 16;
+            ebuf[i + 3] = b4 >> 24;
          }
       }
 
@@ -236,19 +235,19 @@ int eeprom_write(int slave, int start, int length)
    uint8 eepctl;
    int ret;
 
-   if((ec_slavecount >= slave) && (slave > 0) && ((start + length) <= MAXBUF))
+   if ((ec_slavecount >= slave) && (slave > 0) && ((start + length) <= MAXBUF))
    {
       aiadr = 1 - slave;
       eepctl = 2;
-      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl , EC_TIMEOUTRET); /* force Eeprom from PDI */
+      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl, EC_TIMEOUTRET); /* force Eeprom from PDI */
       eepctl = 0;
-      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl , EC_TIMEOUTRET); /* set Eeprom to master */
+      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl, EC_TIMEOUTRET); /* set Eeprom to master */
 
       aiadr = 1 - slave;
       wbuf = (uint16 *)&ebuf[0];
-      for (i = start ; i < (start + length) ; i+=2)
+      for (i = start; i < (start + length); i += 2)
       {
-         ret = ec_writeeepromAP(aiadr, i >> 1 , *(wbuf + (i >> 1)), EC_TIMEOUTEEP);
+         ret = ec_writeeepromAP(aiadr, i >> 1, *(wbuf + (i >> 1)), EC_TIMEOUTEEP);
          if (++dc >= 100)
          {
             dc = 0;
@@ -270,15 +269,15 @@ int eeprom_writealias(int slave, int alias)
    uint8 eepctl;
    int ret;
 
-   if((ec_slavecount >= slave) && (slave > 0) && (alias <= 0xffff))
+   if ((ec_slavecount >= slave) && (slave > 0) && (alias <= 0xffff))
    {
       aiadr = 1 - slave;
       eepctl = 2;
-      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl , EC_TIMEOUTRET); /* force Eeprom from PDI */
+      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl, EC_TIMEOUTRET); /* force Eeprom from PDI */
       eepctl = 0;
-      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl , EC_TIMEOUTRET); /* set Eeprom to master */
+      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl, EC_TIMEOUTRET); /* set Eeprom to master */
 
-      ret = ec_writeeepromAP(aiadr, 0x04 , alias, EC_TIMEOUTEEP);
+      ret = ec_writeeepromAP(aiadr, 0x04, alias, EC_TIMEOUTEEP);
 
       return ret;
    }
@@ -294,84 +293,84 @@ void eepromtool(char *ifname, int slave, int mode, char *fname)
    /* initialise SOEM, bind socket to ifname */
    if (ec_init(ifname))
    {
-      printf("ec_init on %s succeeded.\n",ifname);
+      printf("ec_init on %s succeeded.\n", ifname);
 
       w = 0x0000;
-       wkc = ec_BRD(0x0000, ECT_REG_TYPE, sizeof(w), &w, EC_TIMEOUTSAFE);      /* detect number of slaves */
-       if (wkc > 0)
-       {
+      wkc = ec_BRD(0x0000, ECT_REG_TYPE, sizeof(w), &w, EC_TIMEOUTSAFE); /* detect number of slaves */
+      if (wkc > 0)
+      {
          ec_slavecount = wkc;
 
-         printf("%d slaves found.\n",ec_slavecount);
-         if((ec_slavecount >= slave) && (slave > 0))
+         printf("%d slaves found.\n", ec_slavecount);
+         if ((ec_slavecount >= slave) && (slave > 0))
          {
             if ((mode == MODE_INFO) || (mode == MODE_READBIN) || (mode == MODE_READINTEL))
             {
-               rc =  gettimeofday(&tstart, NULL);
+               rc = gettimeofday(&tstart, NULL);
                eeprom_read(slave, 0x0000, MINBUF); // read first 128 bytes
 
                wbuf = (uint16 *)&ebuf[0];
                printf("Slave %d data\n", slave);
-               printf(" PDI Control      : %4.4X\n",*(wbuf + 0x00));
-               printf(" PDI Config       : %4.4X\n",*(wbuf + 0x01));
-               printf(" Config Alias     : %4.4X\n",*(wbuf + 0x04));
-               printf(" Checksum         : %4.4X\n",*(wbuf + 0x07));
-               printf(" Vendor ID        : %8.8X\n",*(uint32 *)(wbuf + 0x08));
-               printf(" Product Code     : %8.8X\n",*(uint32 *)(wbuf + 0x0A));
-               printf(" Revision Number  : %8.8X\n",*(uint32 *)(wbuf + 0x0C));
-               printf(" Serial Number    : %8.8X\n",*(uint32 *)(wbuf + 0x0E));
-               printf(" Mailbox Protocol : %4.4X\n",*(wbuf + 0x1C));
+               printf(" PDI Control      : %4.4X\n", *(wbuf + 0x00));
+               printf(" PDI Config       : %4.4X\n", *(wbuf + 0x01));
+               printf(" Config Alias     : %4.4X\n", *(wbuf + 0x04));
+               printf(" Checksum         : %4.4X\n", *(wbuf + 0x07));
+               printf(" Vendor ID        : %8.8X\n", *(uint32 *)(wbuf + 0x08));
+               printf(" Product Code     : %8.8X\n", *(uint32 *)(wbuf + 0x0A));
+               printf(" Revision Number  : %8.8X\n", *(uint32 *)(wbuf + 0x0C));
+               printf(" Serial Number    : %8.8X\n", *(uint32 *)(wbuf + 0x0E));
+               printf(" Mailbox Protocol : %4.4X\n", *(wbuf + 0x1C));
                esize = (*(wbuf + 0x3E) + 1) * 128;
                if (esize > MAXBUF) esize = MAXBUF;
-               printf(" Size             : %4.4X = %d bytes\n",*(wbuf + 0x3E), esize);
-               printf(" Version          : %4.4X\n",*(wbuf + 0x3F));
+               printf(" Size             : %4.4X = %d bytes\n", *(wbuf + 0x3E), esize);
+               printf(" Version          : %4.4X\n", *(wbuf + 0x3F));
             }
             if ((mode == MODE_READBIN) || (mode == MODE_READINTEL))
             {
                if (esize > MINBUF)
                   eeprom_read(slave, MINBUF, esize - MINBUF); // read reminder
 
-               rc =  gettimeofday(&tend, NULL);
+               rc = gettimeofday(&tend, NULL);
                timersub(&tend, &tstart, &tdif);
                if (mode == MODE_READINTEL) output_intelhex(fname, esize);
-               if (mode == MODE_READBIN)   output_bin(fname, esize);
+               if (mode == MODE_READBIN) output_bin(fname, esize);
 
-               printf("\nTotal EEPROM read time :%ldms\n", (tdif.tv_usec+(tdif.tv_sec*1000000L)) / 1000);
+               printf("\nTotal EEPROM read time :%ldms\n", (tdif.tv_usec + (tdif.tv_sec * 1000000L)) / 1000);
             }
             if ((mode == MODE_WRITEBIN) || (mode == MODE_WRITEINTEL))
             {
                estart = 0;
                if (mode == MODE_WRITEINTEL) rc = input_intelhex(fname, &estart, &esize);
-               if (mode == MODE_WRITEBIN)   rc = input_bin(fname, &esize);
+               if (mode == MODE_WRITEBIN) rc = input_bin(fname, &esize);
 
                if (rc > 0)
                {
                   wbuf = (uint16 *)&ebuf[0];
                   printf("Slave %d\n", slave);
-                  printf(" Vendor ID        : %8.8X\n",*(uint32 *)(wbuf + 0x08));
-                  printf(" Product Code     : %8.8X\n",*(uint32 *)(wbuf + 0x0A));
-                  printf(" Revision Number  : %8.8X\n",*(uint32 *)(wbuf + 0x0C));
-                  printf(" Serial Number    : %8.8X\n",*(uint32 *)(wbuf + 0x0E));
+                  printf(" Vendor ID        : %8.8X\n", *(uint32 *)(wbuf + 0x08));
+                  printf(" Product Code     : %8.8X\n", *(uint32 *)(wbuf + 0x0A));
+                  printf(" Revision Number  : %8.8X\n", *(uint32 *)(wbuf + 0x0C));
+                  printf(" Serial Number    : %8.8X\n", *(uint32 *)(wbuf + 0x0E));
 
                   printf("Busy");
                   fflush(stdout);
-                  rc =  gettimeofday(&tstart, NULL);
+                  rc = gettimeofday(&tstart, NULL);
                   eeprom_write(slave, estart, esize);
-                  rc =  gettimeofday(&tend, NULL);
+                  rc = gettimeofday(&tend, NULL);
                   timersub(&tend, &tstart, &tdif);
 
-                  printf("\nTotal EEPROM write time :%ldms\n", (tdif.tv_usec+(tdif.tv_sec*1000000L)) / 1000);
+                  printf("\nTotal EEPROM write time :%ldms\n", (tdif.tv_usec + (tdif.tv_sec * 1000000L)) / 1000);
                }
                else
                   printf("Error reading file, abort.\n");
             }
             if (mode == MODE_WRITEALIAS)
-                       {
-                         if(eeprom_writealias(slave, alias))
-                           printf("Alias %4.4X written successfully to slave %d\n");
-                         else
-                printf("Alias not written\n");
-                       }
+            {
+               if (eeprom_writealias(slave, alias))
+                  printf("Alias %4.4X written successfully to slave %d\n");
+               else
+                  printf("Alias not written\n");
+            }
          }
          else
             printf("Slave number outside range.\n");
@@ -383,7 +382,7 @@ void eepromtool(char *ifname, int slave, int mode, char *fname)
       ec_close();
    }
    else
-      printf("No socket connection on %s\nExcecute as root\n",ifname);
+      printf("No socket connection on %s\nExcecute as root\n", ifname);
 }
 
 int main(int argc, char *argv[])
@@ -394,21 +393,21 @@ int main(int argc, char *argv[])
    if (argc > 3)
    {
       slave = atoi(argv[2]);
-      if ((strncmp(argv[3], "-i", sizeof("-i")) == 0))   mode = MODE_INFO;
-         if (argc > 4)
-         {
-        if ((strncmp(argv[3], "-r", sizeof("-r")) == 0))   mode = MODE_READBIN;
-        if ((strncmp(argv[3], "-ri", sizeof("-ri")) == 0)) mode = MODE_READINTEL;
-        if ((strncmp(argv[3], "-w", sizeof("-w")) == 0))   mode = MODE_WRITEBIN;
-        if ((strncmp(argv[3], "-wi", sizeof("-wi")) == 0)) mode = MODE_WRITEINTEL;
-        if ((strncmp(argv[3], "-walias", sizeof("-walias")) == 0))
-           {
-              mode = MODE_WRITEALIAS;
-                  alias = atoi(argv[4]);
-           }
+      if ((strncmp(argv[3], "-i", sizeof("-i")) == 0)) mode = MODE_INFO;
+      if (argc > 4)
+      {
+         if ((strncmp(argv[3], "-r", sizeof("-r")) == 0)) mode = MODE_READBIN;
+         if ((strncmp(argv[3], "-ri", sizeof("-ri")) == 0)) mode = MODE_READINTEL;
+         if ((strncmp(argv[3], "-w", sizeof("-w")) == 0)) mode = MODE_WRITEBIN;
+         if ((strncmp(argv[3], "-wi", sizeof("-wi")) == 0)) mode = MODE_WRITEINTEL;
+         if ((strncmp(argv[3], "-walias", sizeof("-walias")) == 0))
+         {
+            mode = MODE_WRITEALIAS;
+            alias = atoi(argv[4]);
+         }
       }
       /* start tool */
-      eepromtool(argv[1],slave,mode,argv[4]);
+      eepromtool(argv[1], slave, mode, argv[4]);
    }
    else
    {
index ec2431c0e98b7cfffce56e3df2daf1a5e6dad0f1..f81bc1c9432e035434095a5fd1f08ff885fa243f 100644 (file)
@@ -24,10 +24,10 @@ char IOmap[4096];
 OSAL_THREAD_HANDLE threadrt, thread1;
 int expectedWKC;
 int mappingdone, dorun, inOP, dowkccheck;
-int adapterisbound, conf_io_size, currentgroup; 
+int adapterisbound, conf_io_size, currentgroup;
 int64_t cycletime = 1000000;
 #define NSEC_PER_MSEC 1000000
-#define NSEC_PER_SEC 1000000000
+#define NSEC_PER_SEC  1000000000
 
 /* add ns to timespec */
 void add_timespec(struct timespec *ts, int64 addtime)
@@ -38,7 +38,7 @@ void add_timespec(struct timespec *ts, int64 addtime)
    sec = (addtime - nsec) / NSEC_PER_SEC;
    ts->tv_sec += sec;
    ts->tv_nsec += nsec;
-   if ( ts->tv_nsec >= NSEC_PER_SEC )
+   if (ts->tv_nsec >= NSEC_PER_SEC)
    {
       nsec = ts->tv_nsec % NSEC_PER_SEC;
       ts->tv_sec += (ts->tv_nsec - nsec) / NSEC_PER_SEC;
@@ -53,12 +53,15 @@ static int64 syncoffset = 500000;
 int64 timeerror;
 
 /* PI calculation to get linux time synced to DC time */
-void ec_sync(int64 reftime, int64 cycletime , int64 *offsettime)
+void ec_sync(int64 reftime, int64 cycletime, int64 *offsettime)
 {
    static int64 integral = 0;
    int64 delta;
    delta = (reftime - syncoffset) % cycletime;
-   if(delta> (cycletime / 2)) { delta = delta - cycletime; }
+   if (delta > (cycletime / 2))
+   {
+      delta = delta - cycletime;
+   }
    timeerror = -delta;
    integral += timeerror;
    *offsettime = (timeerror * pgain) + (integral * igain);
@@ -67,17 +70,20 @@ void ec_sync(int64 reftime, int64 cycletime , int64 *offsettime)
 /* RT EtherCAT thread */
 OSAL_THREAD_FUNC_RT ecatthread(void)
 {
-   struct timespec   ts, tleft;
+   struct timespec ts, tleft;
    int ht, wkc;
    static int64_t toff = 0;
 
    dorun = 0;
-   while(!mappingdone) { osal_usleep(100); } 
+   while (!mappingdone)
+   {
+      osal_usleep(100);
+   }
    clock_gettime(CLOCK_MONOTONIC, &ts);
    ht = (ts.tv_nsec / 1000000) + 1; /* round to nearest ms */
    ts.tv_nsec = ht * 1000000;
    ecx_send_processdata(&ecx_context);
-   while(1)
+   while (1)
    {
       /* calculate next cycle start */
       add_timespec(&ts, cycletime + toff);
@@ -85,151 +91,154 @@ OSAL_THREAD_FUNC_RT ecatthread(void)
       clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &ts, &tleft);
       if (dorun > 0)
       {
-        wkc = ecx_receive_processdata(&ecx_context, EC_TIMEOUTRET);
-        if(wkc != expectedWKC) dowkccheck++; else dowkccheck = 0;
-        if (ec_slave[0].hasdc && (wkc > 0))
-        {
-        /* calulate toff to get linux time and DC synced */
-        ec_sync(ec_DCtime, cycletime, &toff);
-        }
-        ecx_mbxhandler(&ecx_context, 0, 4);
-        ecx_send_processdata(&ecx_context);
+         wkc = ecx_receive_processdata(&ecx_context, EC_TIMEOUTRET);
+         if (wkc != expectedWKC)
+            dowkccheck++;
+         else
+            dowkccheck = 0;
+         if (ec_slave[0].hasdc && (wkc > 0))
+         {
+            /* calulate toff to get linux time and DC synced */
+            ec_sync(ec_DCtime, cycletime, &toff);
+         }
+         ecx_mbxhandler(&ecx_context, 0, 4);
+         ecx_send_processdata(&ecx_context);
       }
    }
 }
 
-OSAL_THREAD_FUNC ecatcheck( void)
+OSAL_THREAD_FUNC ecatcheck(void)
 {
-    int slave;
+   int slave;
 
-    while(1)
-    {
-        if( inOP && ((dowkccheck > 2) || ec_group[currentgroup].docheckstate))
-        {
-            /* one ore more slaves are not responding */
-            ec_group[currentgroup].docheckstate = FALSE;
-            ec_readstate();
-            for (slave = 1; slave <= ec_slavecount; slave++)
+   while (1)
+   {
+      if (inOP && ((dowkccheck > 2) || ec_group[currentgroup].docheckstate))
+      {
+         /* one ore more slaves are not responding */
+         ec_group[currentgroup].docheckstate = FALSE;
+         ec_readstate();
+         for (slave = 1; slave <= ec_slavecount; slave++)
+         {
+            if ((ec_slave[slave].group == currentgroup) && (ec_slave[slave].state != EC_STATE_OPERATIONAL))
             {
-               if ((ec_slave[slave].group == currentgroup) && (ec_slave[slave].state != EC_STATE_OPERATIONAL))
+               ec_group[currentgroup].docheckstate = TRUE;
+               if (ec_slave[slave].state == (EC_STATE_SAFE_OP + EC_STATE_ERROR))
                {
-                  ec_group[currentgroup].docheckstate = TRUE;
-                  if (ec_slave[slave].state == (EC_STATE_SAFE_OP + EC_STATE_ERROR))
-                  {
-                     printf("ERROR : slave %d is in SAFE_OP + ERROR, attempting ack.\n", slave);
-                     ec_slave[slave].state = (EC_STATE_SAFE_OP + EC_STATE_ACK);
-                     ec_writestate(slave);
-                  }
-                  else if(ec_slave[slave].state == EC_STATE_SAFE_OP)
-                  {
-                     printf("WARNING : slave %d is in SAFE_OP, change to OPERATIONAL.\n", slave);
-                     ec_slave[slave].state = EC_STATE_OPERATIONAL;
-                     ec_writestate(slave);
-                  }
-                  else if(ec_slave[slave].state > EC_STATE_NONE)
-                  {
-                     if (ec_reconfig_slave(slave, EC_TIMEOUTMON))
-                     {
-                        ec_slave[slave].islost = FALSE;
-                        printf("MESSAGE : slave %d reconfigured\n",slave);
-                     }
-                  }
-                  else if(!ec_slave[slave].islost)
+                  printf("ERROR : slave %d is in SAFE_OP + ERROR, attempting ack.\n", slave);
+                  ec_slave[slave].state = (EC_STATE_SAFE_OP + EC_STATE_ACK);
+                  ec_writestate(slave);
+               }
+               else if (ec_slave[slave].state == EC_STATE_SAFE_OP)
+               {
+                  printf("WARNING : slave %d is in SAFE_OP, change to OPERATIONAL.\n", slave);
+                  ec_slave[slave].state = EC_STATE_OPERATIONAL;
+                  ec_writestate(slave);
+               }
+               else if (ec_slave[slave].state > EC_STATE_NONE)
+               {
+                  if (ec_reconfig_slave(slave, EC_TIMEOUTMON))
                   {
-                     /* re-check state */
-                     ec_statecheck(slave, EC_STATE_OPERATIONAL, EC_TIMEOUTRET);
-                     if (ec_slave[slave].state == EC_STATE_NONE)
-                     {
-                        ec_slave[slave].islost = TRUE;
-                        printf("ERROR : slave %d lost\n",slave);
-                     }
+                     ec_slave[slave].islost = FALSE;
+                     printf("MESSAGE : slave %d reconfigured\n", slave);
                   }
                }
-               if (ec_slave[slave].islost)
+               else if (!ec_slave[slave].islost)
                {
-                  if(ec_slave[slave].state <= EC_STATE_INIT)
+                  /* re-check state */
+                  ec_statecheck(slave, EC_STATE_OPERATIONAL, EC_TIMEOUTRET);
+                  if (ec_slave[slave].state == EC_STATE_NONE)
                   {
-                     if (ec_recover_slave(slave, EC_TIMEOUTMON))
-                     {
-                        ec_slave[slave].islost = FALSE;
-                        printf("MESSAGE : slave %d recovered\n",slave);
-                     }
+                     ec_slave[slave].islost = TRUE;
+                     printf("ERROR : slave %d lost\n", slave);
                   }
-                  else
+               }
+            }
+            if (ec_slave[slave].islost)
+            {
+               if (ec_slave[slave].state <= EC_STATE_INIT)
+               {
+                  if (ec_recover_slave(slave, EC_TIMEOUTMON))
                   {
                      ec_slave[slave].islost = FALSE;
-                     printf("MESSAGE : slave %d found. State %2.2x\n",slave, ec_slave[slave].state);
+                     printf("MESSAGE : slave %d recovered\n", slave);
                   }
                }
+               else
+               {
+                  ec_slave[slave].islost = FALSE;
+                  printf("MESSAGE : slave %d found. State %2.2x\n", slave, ec_slave[slave].state);
+               }
             }
-            if(!ec_group[currentgroup].docheckstate)
-               printf("OK : all slaves resumed OPERATIONAL.\n");
-            dowkccheck = 0;   
-        }
-        osal_usleep(10000);
-    }
+         }
+         if (!ec_group[currentgroup].docheckstate)
+            printf("OK : all slaves resumed OPERATIONAL.\n");
+         dowkccheck = 0;
+      }
+      osal_usleep(10000);
+   }
 }
 
 void ethercatstartup(char *ifname)
 {
-    printf("EtherCAT Startup\n");
-    int rv = ecx_init(&ecx_context, ifname);
-    if(rv)
-    {
-        adapterisbound = 1;
-        ecx_config_init(&ecx_context, FALSE);
-        if(ec_slavecount > 0)
-        {
-            if(forceByteAlignment)
-                conf_io_size = ecx_config_map_group_aligned(&ecx_context, &IOmap, 0);
-            else
-                conf_io_size = ecx_config_map_group(&ecx_context, &IOmap, 0);
-            expectedWKC = (ecx_context.grouplist[0].outputsWKC * 2) + ecx_context.grouplist[0].inputsWKC;
-            mappingdone = 1;
-            ecx_configdc(&ecx_context);
-            int sdoslave = -1;
-            for(int si = 1 ; si <= *ecx_context.slavecount ; si++ )
+   printf("EtherCAT Startup\n");
+   int rv = ecx_init(&ecx_context, ifname);
+   if (rv)
+   {
+      adapterisbound = 1;
+      ecx_config_init(&ecx_context, FALSE);
+      if (ec_slavecount > 0)
+      {
+         if (forceByteAlignment)
+            conf_io_size = ecx_config_map_group_aligned(&ecx_context, &IOmap, 0);
+         else
+            conf_io_size = ecx_config_map_group(&ecx_context, &IOmap, 0);
+         expectedWKC = (ecx_context.grouplist[0].outputsWKC * 2) + ecx_context.grouplist[0].inputsWKC;
+         mappingdone = 1;
+         ecx_configdc(&ecx_context);
+         int sdoslave = -1;
+         for (int si = 1; si <= *ecx_context.slavecount; si++)
+         {
+            ec_slavet *slave = &ecx_context.slavelist[si];
+            printf("Slave %d name:%s man:%8.8x id:%8.8x rev:%d ser:%d\n", si, slave->name, slave->eep_man, slave->eep_id, slave->eep_rev, slave->eep_ser);
+            if (slave->CoEdetails > 0)
             {
-                ec_slavet *slave = &ecx_context.slavelist[si];
-                printf("Slave %d name:%s man:%8.8x id:%8.8x rev:%d ser:%d\n", si, slave->name, slave->eep_man, slave->eep_id, slave->eep_rev, slave->eep_ser);
-                if(slave->CoEdetails > 0)
-                {
-                    ecx_slavembxcyclic(&ecx_context, si);
-                    sdoslave = si;
-                    printf(" Slave added to cyclic mailbox handler\n");
-                } 
+               ecx_slavembxcyclic(&ecx_context, si);
+               sdoslave = si;
+               printf(" Slave added to cyclic mailbox handler\n");
             }
-            dorun = 1;
-            osal_usleep(1000000);
-            ecx_context.slavelist[0].state = EC_STATE_OPERATIONAL;
-            ecx_writestate(&ecx_context, 0);
-            ecx_statecheck(&ecx_context, 0, EC_STATE_OPERATIONAL, EC_TIMEOUTSTATE);
-            inOP = 1;
-            printf("EtherCAT OP\n");
-            uint32_t aval = 0;
-            int avals = sizeof(aval);
-            for(int i = 0 ; i < 100 ; i++)
+         }
+         dorun = 1;
+         osal_usleep(1000000);
+         ecx_context.slavelist[0].state = EC_STATE_OPERATIONAL;
+         ecx_writestate(&ecx_context, 0);
+         ecx_statecheck(&ecx_context, 0, EC_STATE_OPERATIONAL, EC_TIMEOUTSTATE);
+         inOP = 1;
+         printf("EtherCAT OP\n");
+         uint32_t aval = 0;
+         int avals = sizeof(aval);
+         for (int i = 0; i < 100; i++)
+         {
+            printf("Cycle %d timeerror %ld\n", i, timeerror);
+            if (sdoslave > 0)
             {
-                printf("Cycle %d timeerror %ld\n", i, timeerror);
-                if(sdoslave >0)
-                {
-                    aval = 0;
-                    int rval = ecx_SDOread(&ecx_context, sdoslave, 0x1018, 0x02, FALSE, &avals, &aval, EC_TIMEOUTRXM);
-                    printf(" Slave %d Rval %d Prodcode %8.8x\n", sdoslave, rval , aval);
-                }
-                osal_usleep(100000);
+               aval = 0;
+               int rval = ecx_SDOread(&ecx_context, sdoslave, 0x1018, 0x02, FALSE, &avals, &aval, EC_TIMEOUTRXM);
+               printf(" Slave %d Rval %d Prodcode %8.8x\n", sdoslave, rval, aval);
             }
-            inOP = 0;
-            printf("EtherCAT to safe-OP\n");
-            ecx_context.slavelist[0].state = EC_STATE_SAFE_OP;
-            ecx_writestate(&ecx_context, 0);
-            ecx_statecheck(&ecx_context, 0, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE);
-            printf("EtherCAT to INIT\n");
-            ecx_context.slavelist[0].state = EC_STATE_INIT;
-            ecx_writestate(&ecx_context, 0);
-            ecx_statecheck(&ecx_context, 0, EC_STATE_INIT, EC_TIMEOUTSTATE);
-        }
-    }
+            osal_usleep(100000);
+         }
+         inOP = 0;
+         printf("EtherCAT to safe-OP\n");
+         ecx_context.slavelist[0].state = EC_STATE_SAFE_OP;
+         ecx_writestate(&ecx_context, 0);
+         ecx_statecheck(&ecx_context, 0, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE);
+         printf("EtherCAT to INIT\n");
+         ecx_context.slavelist[0].state = EC_STATE_INIT;
+         ecx_writestate(&ecx_context, 0);
+         ecx_statecheck(&ecx_context, 0, EC_STATE_INIT, EC_TIMEOUTSTATE);
+      }
+   }
 }
 
 int main(int argc, char *argv[])
@@ -247,14 +256,14 @@ int main(int argc, char *argv[])
    }
    else
    {
-      ec_adaptert * adapter = NULL;
+      ec_adaptert *adapter = NULL;
       printf("Usage: coetest ifname1\nifname = eth0 for example\n");
 
-      printf ("\nAvailable adapters:\n");
-      adapter = ec_find_adapters ();
+      printf("\nAvailable adapters:\n");
+      adapter = ec_find_adapters();
       while (adapter != NULL)
       {
-         printf ("    - %s  (%s)\n", adapter->name, adapter->desc);
+         printf("    - %s  (%s)\n", adapter->name, adapter->desc);
          adapter = adapter->next;
       }
       ec_free_adapters(adapter);
index 262873466529ba801460dda326cd104652926f85..1d2aebd2bb00c6f856156d1cf725d5d6b9f175d7 100644 (file)
 
 typedef struct PACKED
 {
-   uint8         status;
-   uint8         counter;
-   uint8         din;
-   int32         ain[2];
-   uint32        tsain;
-   int32         enc[2];
+   uint8 status;
+   uint8 counter;
+   uint8 din;
+   int32 ain[2];
+   uint32 tsain;
+   int32 enc[2];
 } in_EBOXt;
 
 typedef struct PACKED
 {
-   uint8         counter;
-   int16         stream[100];
+   uint8 counter;
+   int16 stream[100];
 } in_EBOX_streamt;
 
 typedef struct PACKED
 {
-   uint8         control;
-   uint8         dout;
-   int16         aout[2];
-   uint16        pwmout[2];
+   uint8 control;
+   uint8 dout;
+   int16 aout[2];
+   uint16 pwmout[2];
 } out_EBOXt;
 
 typedef struct PACKED
 {
-   uint8         control;
+   uint8 control;
 } out_EBOX_streamt;
 
 // total samples to capture
@@ -63,35 +63,35 @@ typedef struct PACKED
 struct sched_param schedp;
 char IOmap[4096];
 pthread_t thread1;
-struct timeval tv,t1,t2;
+struct timeval tv, t1, t2;
 int dorun = 0;
-int deltat, tmax=0;
+int deltat, tmax = 0;
 int64 toff;
 int DCdiff;
 int os;
 uint32 ob;
 int16 ob2;
 uint8 ob3;
-pthread_cond_t  cond  = PTHREAD_COND_INITIALIZER;
+pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
 pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
-int64 integral=0;
+int64 integral = 0;
 uint32 cyclecount;
-in_EBOX_streamt  *in_EBOX;
+in_EBOX_streamt *in_EBOX;
 out_EBOX_streamt *out_EBOX;
-double     ain[2];
-int        ainc;
-int        streampos;
-int16      stream1[MAXSTREAM];
-int16      stream2[MAXSTREAM];
+double ain[2];
+int ainc;
+int streampos;
+int16 stream1[MAXSTREAM];
+int16 stream2[MAXSTREAM];
 
 int output_cvs(char *fname, int length)
 {
    FILE *fp;
 
-   int  i;
+   int i;
 
    fp = fopen(fname, "w");
-   if(fp == NULL)
+   if (fp == NULL)
       return 0;
    for (i = 0; i < length; i++)
    {
@@ -111,22 +111,24 @@ void eboxtest(char *ifname)
    /* initialise SOEM, bind socket to ifname */
    if (ec_init(ifname))
    {
-      printf("ec_init on %s succeeded.\n",ifname);
+      printf("ec_init on %s succeeded.\n", ifname);
       /* find and auto-config slaves */
-      if ( ec_config_init(FALSE) > 0 )
+      if (ec_config_init(FALSE) > 0)
       {
-         printf("%d slaves found and configured.\n",ec_slavecount);
+         printf("%d slaves found and configured.\n", ec_slavecount);
 
          // check if first slave is an E/BOX
-         if (( ec_slavecount >= 1 ) &&
-             (strcmp(ec_slave[1].name,"E/BOX") == 0))
+         if ((ec_slavecount >= 1) &&
+             (strcmp(ec_slave[1].name, "E/BOX") == 0))
          {
             // reprogram PDO mapping to set slave in stream mode
             // this can only be done in pre-OP state
-            os=sizeof(ob2); ob2 = 0x1601;
-            ec_SDOwrite(1,0x1c12,01,FALSE,os,&ob2,EC_TIMEOUTRXM);
-            os=sizeof(ob2); ob2 = 0x1a01;
-            ec_SDOwrite(1,0x1c13,01,FALSE,os,&ob2,EC_TIMEOUTRXM);
+            os = sizeof(ob2);
+            ob2 = 0x1601;
+            ec_SDOwrite(1, 0x1c12, 01, FALSE, os, &ob2, EC_TIMEOUTRXM);
+            os = sizeof(ob2);
+            ob2 = 0x1a01;
+            ec_SDOwrite(1, 0x1c13, 01, FALSE, os, &ob2, EC_TIMEOUTRXM);
          }
 
          ec_config_map(&IOmap);
@@ -134,29 +136,28 @@ void eboxtest(char *ifname)
          ec_configdc();
 
          /* wait for all slaves to reach SAFE_OP state */
-         ec_statecheck(0, EC_STATE_SAFE_OP,  EC_TIMEOUTSTATE);
+         ec_statecheck(0, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE);
 
          /* configure DC options for every DC capable slave found in the list */
-         printf("DC capable : %d\n",ec_configdc());
+         printf("DC capable : %d\n", ec_configdc());
 
          /* check configuration */
-         if (( ec_slavecount >= 1 ) &&
-             (strcmp(ec_slave[1].name,"E/BOX") == 0)
-            )
+         if ((ec_slavecount >= 1) &&
+             (strcmp(ec_slave[1].name, "E/BOX") == 0))
          {
             printf("E/BOX found.\n");
 
             /* connect struct pointers to slave I/O pointers */
-            in_EBOX = (in_EBOX_streamt*) ec_slave[1].inputs;
-            out_EBOX = (out_EBOX_streamt*) ec_slave[1].outputs;
+            in_EBOX = (in_EBOX_streamt *)ec_slave[1].inputs;
+            out_EBOX = (out_EBOX_streamt *)ec_slave[1].outputs;
 
             /* read indevidual slave state and store in ec_slave[] */
             ec_readstate();
-            for(cnt = 1; cnt <= ec_slavecount ; cnt++)
+            for (cnt = 1; cnt <= ec_slavecount; cnt++)
             {
                printf("Slave:%d Name:%s Output size:%3dbits Input size:%3dbits State:%2d delay:%d.%d\n",
-                     cnt, ec_slave[cnt].name, ec_slave[cnt].Obits, ec_slave[cnt].Ibits,
-                     ec_slave[cnt].state, (int)ec_slave[cnt].pdelay, ec_slave[cnt].hasdc);
+                      cnt, ec_slave[cnt].name, ec_slave[cnt].Obits, ec_slave[cnt].Ibits,
+                      ec_slave[cnt].state, (int)ec_slave[cnt].pdelay, ec_slave[cnt].hasdc);
             }
             printf("Request operational state for all slaves\n");
 
@@ -168,30 +169,30 @@ void eboxtest(char *ifname)
             /* request OP state for all slaves */
             ec_writestate(0);
             /* wait for all slaves to reach OP state */
-            ec_statecheck(0, EC_STATE_OPERATIONAL,  EC_TIMEOUTSTATE);
-            if (ec_slave[0].state == EC_STATE_OPERATIONAL )
+            ec_statecheck(0, EC_STATE_OPERATIONAL, EC_TIMEOUTSTATE);
+            if (ec_slave[0].state == EC_STATE_OPERATIONAL)
             {
                printf("Operational state reached for all slaves.\n");
                ain[0] = 0;
                ain[1] = 0;
                ainc = 0;
                dorun = 1;
-               usleep(100000); // wait for linux to sync on DC
+               usleep(100000);                    // wait for linux to sync on DC
                ec_dcsync0(1, TRUE, SYNC0TIME, 0); // SYNC0 on slave 1
                /* acyclic loop 20ms */
-               for(i = 1; i <= 200; i++)
+               for (i = 1; i <= 200; i++)
                {
                   /* read DC difference register for slave 2 */
-   //               ec_FPRD(ec_slave[1].configadr, ECT_REG_DCSYSDIFF, sizeof(DCdiff), &DCdiff, EC_TIMEOUTRET);
-   //               if(DCdiff<0) { DCdiff = - (int32)((uint32)DCdiff & 0x7ffffff); }
+                  //               ec_FPRD(ec_slave[1].configadr, ECT_REG_DCSYSDIFF, sizeof(DCdiff), &DCdiff, EC_TIMEOUTRET);
+                  //               if(DCdiff<0) { DCdiff = - (int32)((uint32)DCdiff & 0x7ffffff); }
                   printf("PD cycle %5d DCtime %12lld Cnt:%3d Data: %6d %6d %6d %6d %6d %6d %6d %6d \n",
-                        cyclecount, ec_DCtime, in_EBOX->counter, in_EBOX->stream[0], in_EBOX->stream[1],
+                         cyclecount, ec_DCtime, in_EBOX->counter, in_EBOX->stream[0], in_EBOX->stream[1],
                          in_EBOX->stream[2], in_EBOX->stream[3], in_EBOX->stream[4], in_EBOX->stream[5],
                          in_EBOX->stream[98], in_EBOX->stream[99]);
                   usleep(20000);
                }
                dorun = 0;
-   //            printf("\nCnt %d : Ain0 = %f  Ain2 = %f\n", ainc, ain[0] / ainc, ain[1] / ainc);
+               //            printf("\nCnt %d : Ain0 = %f  Ain2 = %f\n", ainc, ain[0] / ainc, ain[1] / ainc);
             }
             else
             {
@@ -208,21 +209,23 @@ void eboxtest(char *ifname)
          /* request SAFE_OP state for all slaves */
          ec_writestate(0);
          /* wait for all slaves to reach state */
-         ec_statecheck(0, EC_STATE_SAFE_OP,  EC_TIMEOUTSTATE);
+         ec_statecheck(0, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE);
          ec_slave[0].state = EC_STATE_PRE_OP;
          /* request SAFE_OP state for all slaves */
          ec_writestate(0);
          /* wait for all slaves to reach state */
-         ec_statecheck(0, EC_STATE_PRE_OP,  EC_TIMEOUTSTATE);
-         if (( ec_slavecount >= 1 ) &&
-             (strcmp(ec_slave[1].name,"E/BOX") == 0))
+         ec_statecheck(0, EC_STATE_PRE_OP, EC_TIMEOUTSTATE);
+         if ((ec_slavecount >= 1) &&
+             (strcmp(ec_slave[1].name, "E/BOX") == 0))
          {
             // restore PDO to standard mode
             // this can only be done is pre-op state
-            os=sizeof(ob2); ob2 = 0x1600;
-            ec_SDOwrite(1,0x1c12,01,FALSE,os,&ob2,EC_TIMEOUTRXM);
-            os=sizeof(ob2); ob2 = 0x1a00;
-            ec_SDOwrite(1,0x1c13,01,FALSE,os,&ob2,EC_TIMEOUTRXM);
+            os = sizeof(ob2);
+            ob2 = 0x1600;
+            ec_SDOwrite(1, 0x1c12, 01, FALSE, os, &ob2, EC_TIMEOUTRXM);
+            os = sizeof(ob2);
+            ob2 = 0x1a00;
+            ec_SDOwrite(1, 0x1c13, 01, FALSE, os, &ob2, EC_TIMEOUTRXM);
          }
          printf("Streampos %d\n", streampos);
          output_cvs("stream.txt", streampos);
@@ -237,7 +240,7 @@ void eboxtest(char *ifname)
    }
    else
    {
-      printf("No socket connection on %s\nExcecute as root\n",ifname);
+      printf("No socket connection on %s\nExcecute as root\n", ifname);
    }
 }
 
@@ -250,7 +253,7 @@ void add_timespec(struct timespec *ts, int64 addtime)
    sec = (addtime - nsec) / NSEC_PER_SEC;
    ts->tv_sec += sec;
    ts->tv_nsec += nsec;
-   if ( ts->tv_nsec >= NSEC_PER_SEC )
+   if (ts->tv_nsec >= NSEC_PER_SEC)
    {
       nsec = ts->tv_nsec % NSEC_PER_SEC;
       ts->tv_sec += (ts->tv_nsec - nsec) / NSEC_PER_SEC;
@@ -259,22 +262,31 @@ void add_timespec(struct timespec *ts, int64 addtime)
 }
 
 /* PI calculation to get linux time synced to DC time */
-void ec_sync(int64 reftime, int64 cycletime , int64 *offsettime)
+void ec_sync(int64 reftime, int64 cycletime, int64 *offsettime)
 {
    int64 delta;
    /* set linux sync point 50us later than DC sync, just as example */
    delta = (reftime - 50000) % cycletime;
-   if(delta> (cycletime /2)) { delta= delta - cycletime; }
-   if(delta>0){ integral++; }
-   if(delta<0){ integral--; }
-   *offsettime = -(delta / 100) - (integral /20);
+   if (delta > (cycletime / 2))
+   {
+      delta = delta - cycletime;
+   }
+   if (delta > 0)
+   {
+      integral++;
+   }
+   if (delta < 0)
+   {
+      integral--;
+   }
+   *offsettime = -(delta / 100) - (integral / 20);
 }
 
 /* RT EtherCAT thread */
-void ecatthread( void *ptr )
+void ecatthread(void *ptr)
 {
-   struct timespec   ts;
-   struct timeval    tp;
+   struct timespec ts;
+   struct timeval tp;
    int ht;
    int i;
    int pcounter = 0;
@@ -283,20 +295,20 @@ void ecatthread( void *ptr )
    pthread_mutex_lock(&mutex);
    gettimeofday(&tp, NULL);
 
-    /* Convert from timeval to timespec */
-   ts.tv_sec  = tp.tv_sec;
+   /* Convert from timeval to timespec */
+   ts.tv_sec = tp.tv_sec;
    ht = (tp.tv_usec / 1000) + 1; /* round to nearest ms */
    ts.tv_nsec = ht * 1000000;
-   cycletime = *(int*)ptr * 1000; /* cycletime in ns */
+   cycletime = *(int *)ptr * 1000; /* cycletime in ns */
    toff = 0;
    dorun = 0;
-   while(1)
+   while (1)
    {
       /* calculate next cycle start */
       add_timespec(&ts, cycletime + toff);
       /* wait to cycle start */
       pthread_cond_timedwait(&cond, &mutex, &ts);
-      if (dorun>0)
+      if (dorun > 0)
       {
          gettimeofday(&tp, NULL);
 
@@ -306,24 +318,23 @@ void ecatthread( void *ptr )
 
          cyclecount++;
 
-
-         if((in_EBOX->counter != pcounter) && (streampos < (MAXSTREAM - 1)))
+         if ((in_EBOX->counter != pcounter) && (streampos < (MAXSTREAM - 1)))
          {
             // check if we have timing problems in master
             // if so, overwrite stream data so it shows up clearly in plots.
-            if(in_EBOX->counter > (pcounter + 1))
+            if (in_EBOX->counter > (pcounter + 1))
             {
-               for(i = 0 ; i < 50 ; i++)
+               for (i = 0; i < 50; i++)
                {
-                  stream1[streampos]   = 20000;
+                  stream1[streampos] = 20000;
                   stream2[streampos++] = -20000;
                }
             }
             else
             {
-               for(i = 0 ; i < 50 ; i++)
+               for (i = 0; i < 50; i++)
                {
-                  stream1[streampos]   = in_EBOX->stream[i * 2];
+                  stream1[streampos] = in_EBOX->stream[i * 2];
                   stream2[streampos++] = in_EBOX->stream[(i * 2) + 1];
                }
             }
@@ -339,8 +350,8 @@ void ecatthread( void *ptr )
 int main(int argc, char *argv[])
 {
    int ctime;
-   struct sched_param    param;
-   int                   policy = SCHED_OTHER;
+   struct sched_param param;
+   int policy = SCHED_OTHER;
 
    printf("SOEM (Simple Open EtherCAT Master)\nE/BOX test\n");
 
@@ -352,18 +363,17 @@ int main(int argc, char *argv[])
    do
    {
       usleep(1000);
-   }
-   while (dorun);
+   } while (dorun);
 
    if (argc > 1)
    {
       dorun = 1;
-      ifargc > 2)
+      if (argc > 2)
          ctime = atoi(argv[2]);
       else
          ctime = 1000; // 1ms cycle time
       /* create RT thread */
-      pthread_create( &thread1, NULL, (void *) &ecatthread, (void*) &ctime);
+      pthread_create(&thread1, NULL, (void *)&ecatthread, (void *)&ctime);
       memset(&param, 0, sizeof(param));
       /* give it higher priority */
       param.sched_priority = 40;
index 58c804878c7da94c4de8e474f58dd9d84a59b128..13a0d9b8604acfe0b142b5cf89910befe01b9894 100644 (file)
@@ -1,6 +1,6 @@
 /** \file
  * \brief Example code for Simple Open EtherCAT master EoE
- * 
+ *
  * This example will run the follwing EoE functions
  * SetIP
  * GetIP
@@ -8,10 +8,10 @@
  * Loop
  *    Send fragment data (Layer 2 0x88A4)
  *    Receive fragment data (Layer 2 0x88A4)
- * 
+ *
  * For this to work, a special slave test code is running that
  * will bounce the sent 0x88A4 back to receive.
- * 
+ *
  * Usage : eoe_test [ifname1]
  * ifname is NIC interface, f.e. eth0
  *
@@ -51,26 +51,26 @@ uint8 rxbuf[1024];
 int size_of_rx = sizeof(rxbuf);
 
 /** registered EoE hook */
-int eoe_hook(ecx_contextt * context, uint16 slave, void * eoembx)
+int eoe_hook(ecx_contextt *context, uint16 slave, void *eoembx)
 {
    int wkc;
    /* Pass received Mbx data to EoE recevive fragment function that
-   * that will start/continue fill an Ethernet frame buffer
-   */
+    * that will start/continue fill an Ethernet frame buffer
+    */
    size_of_rx = sizeof(rxbuf);
    wkc = ecx_EOEreadfragment(eoembx,
-      &rxfragmentno,
-      &rxframesize,
-      &rxframeoffset,
-      &rxframeno,
-      &size_of_rx,
-      rxbuf);
+                             &rxfragmentno,
+                             &rxframesize,
+                             &rxframeoffset,
+                             &rxframeno,
+                             &size_of_rx,
+                             rxbuf);
 
    printf("Read frameno %d, fragmentno %d\n", rxframeno, rxfragmentno);
 
    /* wkc == 1 would mean a frame is complete , last fragment flag have been set and all
-   * other checks must have past
-   */
+    * other checks must have past
+    */
    if (wkc > 0)
    {
       ec_etherheadert *bp = (ec_etherheadert *)rxbuf;
@@ -119,7 +119,7 @@ OSAL_THREAD_FUNC mailbox_reader(void *lpParam)
    ecx_contextt *context = (ecx_contextt *)lpParam;
    int wkc;
    ec_mbxbuft MbxIn;
-   ec_mbxheadert * MbxHdr = (ec_mbxheadert *)MbxIn;
+   ec_mbxheadert *MbxHdr = (ec_mbxheadert *)MbxIn;
 
    int ixme;
    ec_setupheader(&txbuf);
@@ -128,9 +128,9 @@ OSAL_THREAD_FUNC mailbox_reader(void *lpParam)
       txbuf[ixme] = (uint8)rand();
    }
    /* Send a made up frame to trigger a fragmented transfer
-   * Used with a special bound impelmentaion of SOES. Will
-   * trigger a fragmented transfer back of the same frame.
-   */
+    * Used with a special bound impelmentaion of SOES. Will
+    * trigger a fragmented transfer back of the same frame.
+    */
    ecx_EOEsend(context, 1, 0, sizeof(txbuf), txbuf, EC_TIMEOUTRXM);
 
    for (;;)
@@ -145,7 +145,7 @@ OSAL_THREAD_FUNC mailbox_reader(void *lpParam)
    }
 }
 
-void test_eoe(ecx_contextt * context)
+void test_eoe(ecx_contextt *context)
 {
    /* Set the HOOK */
    ecx_EOEdefinehook(context, eoe_hook);
@@ -161,7 +161,7 @@ void test_eoe(ecx_contextt * context)
    EOE_IP4_ADDR_TO_U32(&ipsettings.ip, 192, 168, 9, 200);
    EOE_IP4_ADDR_TO_U32(&ipsettings.subnet, 255, 255, 255, 0);
    EOE_IP4_ADDR_TO_U32(&ipsettings.default_gateway, 0, 0, 0, 0);
-   
+
    /* Send a set IP request */
    ecx_EOEsetIp(context, 1, 0, &ipsettings, EC_TIMEOUTRXM);
 
@@ -169,23 +169,23 @@ void test_eoe(ecx_contextt * context)
    ecx_EOEgetIp(context, 1, 0, &re_ipsettings, EC_TIMEOUTRXM);
 
    /* Trigger an MBX read request, to be replaced by slave Mbx
-   * full notification via polling of FMMU status process data
-   */
+    * full notification via polling of FMMU status process data
+    */
    printf("recieved IP (%d.%d.%d.%d)\n",
-      eoe_ip4_addr1(&re_ipsettings.ip),
-      eoe_ip4_addr2(&re_ipsettings.ip),
-      eoe_ip4_addr3(&re_ipsettings.ip),
-      eoe_ip4_addr4(&re_ipsettings.ip));
+          eoe_ip4_addr1(&re_ipsettings.ip),
+          eoe_ip4_addr2(&re_ipsettings.ip),
+          eoe_ip4_addr3(&re_ipsettings.ip),
+          eoe_ip4_addr4(&re_ipsettings.ip));
    printf("recieved subnet (%d.%d.%d.%d)\n",
-      eoe_ip4_addr1(&re_ipsettings.subnet),
-      eoe_ip4_addr2(&re_ipsettings.subnet),
-      eoe_ip4_addr3(&re_ipsettings.subnet),
-      eoe_ip4_addr4(&re_ipsettings.subnet));
+          eoe_ip4_addr1(&re_ipsettings.subnet),
+          eoe_ip4_addr2(&re_ipsettings.subnet),
+          eoe_ip4_addr3(&re_ipsettings.subnet),
+          eoe_ip4_addr4(&re_ipsettings.subnet));
    printf("recieved gateway (%d.%d.%d.%d)\n",
-      eoe_ip4_addr1(&re_ipsettings.default_gateway),
-      eoe_ip4_addr2(&re_ipsettings.default_gateway),
-      eoe_ip4_addr3(&re_ipsettings.default_gateway),
-      eoe_ip4_addr4(&re_ipsettings.default_gateway));
+          eoe_ip4_addr1(&re_ipsettings.default_gateway),
+          eoe_ip4_addr2(&re_ipsettings.default_gateway),
+          eoe_ip4_addr3(&re_ipsettings.default_gateway),
+          eoe_ip4_addr4(&re_ipsettings.default_gateway));
 
    /* Create a asyncronous EoE reader */
    osal_thread_create(&thread2, 128000, &mailbox_reader, &ecx_context);
@@ -202,11 +202,11 @@ void teststarter(char *ifname)
    /* initialise SOEM, bind socket to ifname */
    if (ec_init(ifname))
    {
-      printf("ec_init on %s succeeded.\n",ifname);
+      printf("ec_init on %s succeeded.\n", ifname);
       /* find and auto-config slaves */
-      if ( ec_config_init(FALSE) > 0 )
+      if (ec_config_init(FALSE) > 0)
       {
-         printf("%d slaves found and configured.\n",ec_slavecount);
+         printf("%d slaves found and configured.\n", ec_slavecount);
 
          ec_config_map(&IOmap);
 
@@ -214,7 +214,7 @@ void teststarter(char *ifname)
 
          printf("Slaves mapped, state to SAFE_OP.\n");
          /* wait for all slaves to reach SAFE_OP state */
-         ec_statecheck(0, EC_STATE_SAFE_OP,  EC_TIMEOUTSTATE * 4);
+         ec_statecheck(0, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE * 4);
 
          oloop = ec_slave[0].Obytes;
          if ((oloop == 0) && (ec_slave[0].Obits > 0)) oloop = 1;
@@ -223,7 +223,7 @@ void teststarter(char *ifname)
          if ((iloop == 0) && (ec_slave[0].Ibits > 0)) iloop = 1;
          if (iloop > 8) iloop = 8;
 
-         printf("segments : %d : %d %d %d %d\n",ec_group[0].nsegments ,ec_group[0].IOsegment[0],ec_group[0].IOsegment[1],ec_group[0].IOsegment[2],ec_group[0].IOsegment[3]);
+         printf("segments : %d : %d %d %d %d\n", ec_group[0].nsegments, ec_group[0].IOsegment[0], ec_group[0].IOsegment[1], ec_group[0].IOsegment[2], ec_group[0].IOsegment[3]);
 
          printf("Request operational state for all slaves\n");
          expectedWKC = (ec_group[0].outputsWKC * 2) + ec_group[0].inputsWKC;
@@ -235,7 +235,7 @@ void teststarter(char *ifname)
 
          /* Simple EoE test */
          test_eoe(&ecx_context);
-   
+
          /* request OP state for all slaves */
          ec_writestate(0);
          chk = 200;
@@ -245,33 +245,32 @@ void teststarter(char *ifname)
             ec_send_processdata();
             ec_receive_processdata(EC_TIMEOUTRET);
             ec_statecheck(0, EC_STATE_OPERATIONAL, 50000);
-         }
-         while (chk-- && (ec_slave[0].state != EC_STATE_OPERATIONAL));
-         if (ec_slave[0].state == EC_STATE_OPERATIONAL )
+         } while (chk-- && (ec_slave[0].state != EC_STATE_OPERATIONAL));
+         if (ec_slave[0].state == EC_STATE_OPERATIONAL)
          {
             printf("Operational state reached for all slaves.\n");
             globalwkc = expectedWKC;
             inOP = TRUE;
             /* cyclic loop */
-            for(i = 1; i <= 10000; i++)
+            for (i = 1; i <= 10000; i++)
             {
                ec_send_processdata();
                globalwkc = ec_receive_processdata(EC_TIMEOUTRET * 5);
 #if PRINT_EOE_INFO_INSTEAD
                int j;
-               if(globalwkc >= expectedWKC)
+               if (globalwkc >= expectedWKC)
                {
                   printf("Processdata cycle %4d, WKC %d , O:", i, globalwkc);
-                  for(j = 0 ; j < oloop; j++)
+                  for (j = 0; j < oloop; j++)
                   {
                      printf(" %2.2x", *(ec_slave[0].outputs + j));
                   }
                   printf(" I:");
-                  for(j = 0 ; j < iloop; j++)
+                  for (j = 0; j < iloop; j++)
                   {
                      printf(" %2.2x", *(ec_slave[0].inputs + j));
                   }
-                  printf(" T:%"PRId64"\r",ec_DCtime);
+                  printf(" T:%" PRId64 "\r", ec_DCtime);
                   needlf = TRUE;
                }
 #endif
@@ -283,12 +282,12 @@ void teststarter(char *ifname)
          {
             printf("Not all slaves reached operational state.\n");
             ec_readstate();
-            for(i = 1; i<=ec_slavecount ; i++)
+            for (i = 1; i <= ec_slavecount; i++)
             {
-               if(ec_slave[i].state != EC_STATE_OPERATIONAL)
+               if (ec_slave[i].state != EC_STATE_OPERATIONAL)
                {
                   printf("Slave %d State=0x%2.2x StatusCode=0x%4.4x : %s\n",
-                        i, ec_slave[i].state, ec_slave[i].ALstatuscode, ec_ALstatuscode2string(ec_slave[i].ALstatuscode));
+                         i, ec_slave[i].state, ec_slave[i].ALstatuscode, ec_ALstatuscode2string(ec_slave[i].ALstatuscode));
                }
             }
          }
@@ -307,18 +306,18 @@ void teststarter(char *ifname)
    }
    else
    {
-      printf("No socket connection on %s\nExcecute as root\n",ifname);
+      printf("No socket connection on %s\nExcecute as root\n", ifname);
    }
 }
 
-OSAL_THREAD_FUNC ecatcheck( void *ptr )
+OSAL_THREAD_FUNC ecatcheck(void *ptr)
 {
    int slave;
-   (void)ptr;                  /* Not used */
+   (void)ptr; /* Not used */
 
-   while(1)
+   while (1)
    {
-      ifinOP && ((globalwkc < expectedWKC) || ec_group[currentgroup].docheckstate))
+      if (inOP && ((globalwkc < expectedWKC) || ec_group[currentgroup].docheckstate))
       {
          if (globalwkc < expectedWKC)
          {
@@ -348,49 +347,49 @@ OSAL_THREAD_FUNC ecatcheck( void *ptr )
                   ec_slave[slave].state = (EC_STATE_SAFE_OP + EC_STATE_ACK);
                   ec_writestate(slave);
                }
-               else if(ec_slave[slave].state == EC_STATE_SAFE_OP)
+               else if (ec_slave[slave].state == EC_STATE_SAFE_OP)
                {
                   printf("WARNING : slave %d is in SAFE_OP, change to OPERATIONAL.\n", slave);
                   ec_slave[slave].state = EC_STATE_OPERATIONAL;
                   ec_writestate(slave);
                }
-               else if(ec_slave[slave].state > EC_STATE_NONE)
+               else if (ec_slave[slave].state > EC_STATE_NONE)
                {
                   if (ec_reconfig_slave(slave, EC_TIMEOUTMON))
                   {
                      ec_slave[slave].islost = FALSE;
-                     printf("MESSAGE : slave %d reconfigured\n",slave);
+                     printf("MESSAGE : slave %d reconfigured\n", slave);
                   }
                }
-               else if(!ec_slave[slave].islost)
+               else if (!ec_slave[slave].islost)
                {
                   /* re-check state */
                   ec_statecheck(slave, EC_STATE_OPERATIONAL, EC_TIMEOUTRET);
                   if (ec_slave[slave].state == EC_STATE_NONE)
                   {
                      ec_slave[slave].islost = TRUE;
-                     printf("ERROR : slave %d lost\n",slave);
+                     printf("ERROR : slave %d lost\n", slave);
                   }
                }
             }
             if (ec_slave[slave].islost)
             {
-               if(ec_slave[slave].state == EC_STATE_NONE)
+               if (ec_slave[slave].state == EC_STATE_NONE)
                {
                   if (ec_recover_slave(slave, EC_TIMEOUTMON))
                   {
                      ec_slave[slave].islost = FALSE;
-                     printf("MESSAGE : slave %d recovered\n",slave);
+                     printf("MESSAGE : slave %d recovered\n", slave);
                   }
                }
                else
                {
                   ec_slave[slave].islost = FALSE;
-                  printf("MESSAGE : slave %d found\n",slave);
+                  printf("MESSAGE : slave %d found\n", slave);
                }
             }
          }
-         if(!ec_group[currentgroup].docheckstate)
+         if (!ec_group[currentgroup].docheckstate)
             printf("OK : all slaves resumed OPERATIONAL.\n");
       }
       osal_usleep(10000);
index b59374f6af6be4bd47b42326c3a8a2b2661a1da5..375f342fe20fc3dac1aa0201cab308769cf0cc04 100644 (file)
@@ -33,130 +33,127 @@ uint16 argslave;
 
 int input_bin(char *fname, int *length)
 {
-    FILE *fp;
-
-       int cc = 0, c;
-
-    fp = fopen(fname, "rb");
-    if(fp == NULL)
-        return 0;
-       while (((c = fgetc(fp)) != EOF) && (cc < FWBUFSIZE))
-               filebuffer[cc++] = (uint8)c;
-       *length = cc;
-       fclose(fp);
-       return 1;
+   FILE *fp;
+
+   int cc = 0, c;
+
+   fp = fopen(fname, "rb");
+   if (fp == NULL)
+      return 0;
+   while (((c = fgetc(fp)) != EOF) && (cc < FWBUFSIZE))
+      filebuffer[cc++] = (uint8)c;
+   *length = cc;
+   fclose(fp);
+   return 1;
 }
 
-
 void boottest(char *ifname, uint16 slave, char *filename)
 {
-       printf("Starting firmware update example\n");
-
-       /* initialise SOEM, bind socket to ifname */
-       if (ec_init(ifname))
-       {
-               printf("ec_init on %s succeeded.\n",ifname);
-               /* find and auto-config slaves */
-
-
-           if ( ec_config_init(FALSE) > 0 )
-               {
-                       printf("%d slaves found and configured.\n",ec_slavecount);
-
-                       /* wait for all slaves to reach PRE_OP state */
-                       ec_statecheck(0, EC_STATE_PRE_OP,  EC_TIMEOUTSTATE * 4);
-
-                       printf("Request init state for slave %d\n", slave);
-                       ec_slave[slave].state = EC_STATE_INIT;
-                       ec_writestate(slave);
-
-                       /* wait for slave to reach INIT state */
-                       ec_statecheck(slave, EC_STATE_INIT,  EC_TIMEOUTSTATE * 4);
-                       printf("Slave %d state to INIT.\n", slave);
-
-                       /* read BOOT mailbox data, master -> slave */
-                       data = ec_readeeprom(slave, ECT_SII_BOOTRXMBX, EC_TIMEOUTEEP);
-                       ec_slave[slave].SM[0].StartAddr = (uint16)LO_WORD(data);
-                       ec_slave[slave].SM[0].SMlength = (uint16)HI_WORD(data);
-                       /* store boot write mailbox address */
-                       ec_slave[slave].mbx_wo = (uint16)LO_WORD(data);
-                       /* store boot write mailbox size */
-                       ec_slave[slave].mbx_l = (uint16)HI_WORD(data);
-
-                       /* read BOOT mailbox data, slave -> master */
-                       data = ec_readeeprom(slave, ECT_SII_BOOTTXMBX, EC_TIMEOUTEEP);
-                       ec_slave[slave].SM[1].StartAddr = (uint16)LO_WORD(data);
-                        ec_slave[slave].SM[1].SMlength = (uint16)HI_WORD(data);
-                       /* store boot read mailbox address */
-                       ec_slave[slave].mbx_ro = (uint16)LO_WORD(data);
-                       /* store boot read mailbox size */
-                       ec_slave[slave].mbx_rl = (uint16)HI_WORD(data);
-
-                       printf(" SM0 A:%4.4x L:%4d F:%8.8x\n", ec_slave[slave].SM[0].StartAddr, ec_slave[slave].SM[0].SMlength,
-                           (int)ec_slave[slave].SM[0].SMflags);
-                       printf(" SM1 A:%4.4x L:%4d F:%8.8x\n", ec_slave[slave].SM[1].StartAddr, ec_slave[slave].SM[1].SMlength,
-                           (int)ec_slave[slave].SM[1].SMflags);
-                       /* program SM0 mailbox in for slave */
-                       ec_FPWR (ec_slave[slave].configadr, ECT_REG_SM0, sizeof(ec_smt), &ec_slave[slave].SM[0], EC_TIMEOUTRET);
-                       /* program SM1 mailbox out for slave */
-                       ec_FPWR (ec_slave[slave].configadr, ECT_REG_SM1, sizeof(ec_smt), &ec_slave[slave].SM[1], EC_TIMEOUTRET);
-
-                       printf("Request BOOT state for slave %d\n", slave);
-                       ec_slave[slave].state = EC_STATE_BOOT;
-                       ec_writestate(slave);
-
-                       /* wait for slave to reach BOOT state */
-                       if (ec_statecheck(slave, EC_STATE_BOOT,  EC_TIMEOUTSTATE * 10) == EC_STATE_BOOT)
-                       {
-                               printf("Slave %d state to BOOT.\n", slave);
-
-                               if (input_bin(filename, &filesize))
-                               {
-                                       printf("File read OK, %d bytes.\n",filesize);
-                                       printf("FoE write....");
-                                       j = ec_FOEwrite(slave, filename, 0, filesize , &filebuffer, EC_TIMEOUTSTATE);
-                                       printf("result %d.\n",j);
-                                       printf("Request init state for slave %d\n", slave);
-                                       ec_slave[slave].state = EC_STATE_INIT;
-                                       ec_writestate(slave);
-                               }
-                               else
-                                   printf("File not read OK.\n");
-                       }
-
-               }
-               else
-               {
-                       printf("No slaves found!\n");
-               }
-               printf("End firmware update example, close socket\n");
-               /* stop SOEM, close socket */
-               ec_close();
-       }
-       else
-       {
-               printf("No socket connection on %s\nExcecute as root\n",ifname);
-       }
+   printf("Starting firmware update example\n");
+
+   /* initialise SOEM, bind socket to ifname */
+   if (ec_init(ifname))
+   {
+      printf("ec_init on %s succeeded.\n", ifname);
+      /* find and auto-config slaves */
+
+      if (ec_config_init(FALSE) > 0)
+      {
+         printf("%d slaves found and configured.\n", ec_slavecount);
+
+         /* wait for all slaves to reach PRE_OP state */
+         ec_statecheck(0, EC_STATE_PRE_OP, EC_TIMEOUTSTATE * 4);
+
+         printf("Request init state for slave %d\n", slave);
+         ec_slave[slave].state = EC_STATE_INIT;
+         ec_writestate(slave);
+
+         /* wait for slave to reach INIT state */
+         ec_statecheck(slave, EC_STATE_INIT, EC_TIMEOUTSTATE * 4);
+         printf("Slave %d state to INIT.\n", slave);
+
+         /* read BOOT mailbox data, master -> slave */
+         data = ec_readeeprom(slave, ECT_SII_BOOTRXMBX, EC_TIMEOUTEEP);
+         ec_slave[slave].SM[0].StartAddr = (uint16)LO_WORD(data);
+         ec_slave[slave].SM[0].SMlength = (uint16)HI_WORD(data);
+         /* store boot write mailbox address */
+         ec_slave[slave].mbx_wo = (uint16)LO_WORD(data);
+         /* store boot write mailbox size */
+         ec_slave[slave].mbx_l = (uint16)HI_WORD(data);
+
+         /* read BOOT mailbox data, slave -> master */
+         data = ec_readeeprom(slave, ECT_SII_BOOTTXMBX, EC_TIMEOUTEEP);
+         ec_slave[slave].SM[1].StartAddr = (uint16)LO_WORD(data);
+         ec_slave[slave].SM[1].SMlength = (uint16)HI_WORD(data);
+         /* store boot read mailbox address */
+         ec_slave[slave].mbx_ro = (uint16)LO_WORD(data);
+         /* store boot read mailbox size */
+         ec_slave[slave].mbx_rl = (uint16)HI_WORD(data);
+
+         printf(" SM0 A:%4.4x L:%4d F:%8.8x\n", ec_slave[slave].SM[0].StartAddr, ec_slave[slave].SM[0].SMlength,
+                (int)ec_slave[slave].SM[0].SMflags);
+         printf(" SM1 A:%4.4x L:%4d F:%8.8x\n", ec_slave[slave].SM[1].StartAddr, ec_slave[slave].SM[1].SMlength,
+                (int)ec_slave[slave].SM[1].SMflags);
+         /* program SM0 mailbox in for slave */
+         ec_FPWR(ec_slave[slave].configadr, ECT_REG_SM0, sizeof(ec_smt), &ec_slave[slave].SM[0], EC_TIMEOUTRET);
+         /* program SM1 mailbox out for slave */
+         ec_FPWR(ec_slave[slave].configadr, ECT_REG_SM1, sizeof(ec_smt), &ec_slave[slave].SM[1], EC_TIMEOUTRET);
+
+         printf("Request BOOT state for slave %d\n", slave);
+         ec_slave[slave].state = EC_STATE_BOOT;
+         ec_writestate(slave);
+
+         /* wait for slave to reach BOOT state */
+         if (ec_statecheck(slave, EC_STATE_BOOT, EC_TIMEOUTSTATE * 10) == EC_STATE_BOOT)
+         {
+            printf("Slave %d state to BOOT.\n", slave);
+
+            if (input_bin(filename, &filesize))
+            {
+               printf("File read OK, %d bytes.\n", filesize);
+               printf("FoE write....");
+               j = ec_FOEwrite(slave, filename, 0, filesize, &filebuffer, EC_TIMEOUTSTATE);
+               printf("result %d.\n", j);
+               printf("Request init state for slave %d\n", slave);
+               ec_slave[slave].state = EC_STATE_INIT;
+               ec_writestate(slave);
+            }
+            else
+               printf("File not read OK.\n");
+         }
+      }
+      else
+      {
+         printf("No slaves found!\n");
+      }
+      printf("End firmware update example, close socket\n");
+      /* stop SOEM, close socket */
+      ec_close();
+   }
+   else
+   {
+      printf("No socket connection on %s\nExcecute as root\n", ifname);
+   }
 }
 
 int main(int argc, char *argv[])
 {
-       printf("SOEM (Simple Open EtherCAT Master)\nFirmware update example\n");
-
-       if (argc > 3)
-       {
-               argslave = atoi(argv[2]);
-               boottest(argv[1], argslave, argv[3]);
-       }
-       else
-       {
-               printf("Usage: firm_update ifname1 slave fname\n");
-               printf("ifname = eth0 for example\n");
-               printf("slave = slave number in EtherCAT order 1..n\n");
-               printf("fname = binary file to store in slave\n");
-               printf("CAUTION! Using the wrong file can result in a bricked slave!\n");
-       }
-
-       printf("End program\n");
-       return (0);
+   printf("SOEM (Simple Open EtherCAT Master)\nFirmware update example\n");
+
+   if (argc > 3)
+   {
+      argslave = atoi(argv[2]);
+      boottest(argv[1], argslave, argv[3]);
+   }
+   else
+   {
+      printf("Usage: firm_update ifname1 slave fname\n");
+      printf("ifname = eth0 for example\n");
+      printf("slave = slave number in EtherCAT order 1..n\n");
+      printf("fname = binary file to store in slave\n");
+      printf("CAUTION! Using the wrong file can result in a bricked slave!\n");
+   }
+
+   printf("End program\n");
+   return (0);
 }
index 368daac5c5908191ab34ab2ec83a9b52dbfd61e9..108c3937d068383c32a71ab7ea1ab0717b5895d4 100644 (file)
@@ -24,7 +24,7 @@
 
 #include "ethercat.h"
 
-#define NSEC_PER_SEC 1000000000
+#define NSEC_PER_SEC  1000000000
 #define EC_TIMEOUTMON 500
 
 struct sched_param schedp;
@@ -45,7 +45,6 @@ volatile int wkc;
 boolean inOP;
 uint8 currentgroup = 0;
 
-
 void redtest(char *ifname, char *ifname2)
 {
    int cnt, i, j, oloop, iloop;
@@ -53,32 +52,32 @@ void redtest(char *ifname, char *ifname2)
    printf("Starting Redundant test\n");
 
    /* initialise SOEM, bind socket to ifname */
-   (void) ifname2;
-//   if (ec_init_redundant(ifname, ifname2))
+   (void)ifname2;
+   //   if (ec_init_redundant(ifname, ifname2))
    if (ec_init(ifname))
    {
-      printf("ec_init on %s succeeded.\n",ifname);
+      printf("ec_init on %s succeeded.\n", ifname);
       /* find and auto-config slaves */
-      if ( ec_config(FALSE, &IOmap) > 0 )
+      if (ec_config(FALSE, &IOmap) > 0)
       {
-         printf("%d slaves found and configured.\n",ec_slavecount);
+         printf("%d slaves found and configured.\n", ec_slavecount);
          /* wait for all slaves to reach SAFE_OP state */
-         ec_statecheck(0, EC_STATE_SAFE_OP,  EC_TIMEOUTSTATE);
+         ec_statecheck(0, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE);
 
          /* configure DC options for every DC capable slave found in the list */
          ec_configdc();
 
          /* read indevidual slave state and store in ec_slave[] */
          ec_readstate();
-         for(cnt = 1; cnt <= ec_slavecount ; cnt++)
+         for (cnt = 1; cnt <= ec_slavecount; cnt++)
          {
             printf("Slave:%d Name:%s Output size:%3dbits Input size:%3dbits State:%2d delay:%d.%d\n",
-                  cnt, ec_slave[cnt].name, ec_slave[cnt].Obits, ec_slave[cnt].Ibits,
-                  ec_slave[cnt].state, (int)ec_slave[cnt].pdelay, ec_slave[cnt].hasdc);
+                   cnt, ec_slave[cnt].name, ec_slave[cnt].Obits, ec_slave[cnt].Ibits,
+                   ec_slave[cnt].state, (int)ec_slave[cnt].pdelay, ec_slave[cnt].hasdc);
             printf("         Out:%p,%4d In:%p,%4d\n",
-                  ec_slave[cnt].outputs, ec_slave[cnt].Obytes, ec_slave[cnt].inputs, ec_slave[cnt].Ibytes);
+                   ec_slave[cnt].outputs, ec_slave[cnt].Obytes, ec_slave[cnt].inputs, ec_slave[cnt].Ibytes);
             /* check for EL2004 or EL2008 */
-            if!digout && ((ec_slave[cnt].eep_id == 0x0af83052) || (ec_slave[cnt].eep_id == 0x07d83052)))
+            if (!digout && ((ec_slave[cnt].eep_id == 0x0af83052) || (ec_slave[cnt].eep_id == 0x07d83052)))
             {
                digout = ec_slave[cnt].outputs;
             }
@@ -93,28 +92,28 @@ void redtest(char *ifname, char *ifname2)
          /* activate cyclic process data */
          dorun = 1;
          /* wait for all slaves to reach OP state */
-         ec_statecheck(0, EC_STATE_OPERATIONAL,  5 * EC_TIMEOUTSTATE);
+         ec_statecheck(0, EC_STATE_OPERATIONAL, 5 * EC_TIMEOUTSTATE);
          oloop = ec_slave[0].Obytes;
          if ((oloop == 0) && (ec_slave[0].Obits > 0)) oloop = 1;
          if (oloop > 8) oloop = 8;
          iloop = ec_slave[0].Ibytes;
          if ((iloop == 0) && (ec_slave[0].Ibits > 0)) iloop = 1;
          if (iloop > 8) iloop = 8;
-         if (ec_slave[0].state == EC_STATE_OPERATIONAL )
+         if (ec_slave[0].state == EC_STATE_OPERATIONAL)
          {
             printf("Operational state reached for all slaves.\n");
             inOP = TRUE;
             /* acyclic loop 5000 x 20ms = 10s */
-            for(i = 1; i <= 5000; i++)
+            for (i = 1; i <= 5000; i++)
             {
-               printf("Processdata cycle %5d , Wck %3d, DCtime %12"PRId64", dt %12"PRId64", O:",
-                  dorun, wkc , ec_DCtime, gl_delta);
-               for(j = 0 ; j < oloop; j++)
+               printf("Processdata cycle %5d , Wck %3d, DCtime %12" PRId64 ", dt %12" PRId64 ", O:",
+                      dorun, wkc, ec_DCtime, gl_delta);
+               for (j = 0; j < oloop; j++)
                {
                   printf(" %2.2x", *(ec_slave[0].outputs + j));
                }
                printf(" I:");
-               for(j = 0 ; j < iloop; j++)
+               for (j = 0; j < iloop; j++)
                {
                   printf(" %2.2x", *(ec_slave[0].inputs + j));
                }
@@ -128,15 +127,15 @@ void redtest(char *ifname, char *ifname2)
          else
          {
             printf("Not all slaves reached operational state.\n");
-             ec_readstate();
-             for(i = 1; i<=ec_slavecount ; i++)
-             {
-                 if(ec_slave[i].state != EC_STATE_OPERATIONAL)
-                 {
-                     printf("Slave %d State=0x%2.2x StatusCode=0x%4.4x : %s\n",
+            ec_readstate();
+            for (i = 1; i <= ec_slavecount; i++)
+            {
+               if (ec_slave[i].state != EC_STATE_OPERATIONAL)
+               {
+                  printf("Slave %d State=0x%2.2x StatusCode=0x%4.4x : %s\n",
                          i, ec_slave[i].state, ec_slave[i].ALstatuscode, ec_ALstatuscode2string(ec_slave[i].ALstatuscode));
-                 }
-             }
+               }
+            }
          }
          printf("Request safe operational state for all slaves\n");
          ec_slave[0].state = EC_STATE_SAFE_OP;
@@ -153,7 +152,7 @@ void redtest(char *ifname, char *ifname2)
    }
    else
    {
-      printf("No socket connection on %s\nExcecute as root\n",ifname);
+      printf("No socket connection on %s\nExcecute as root\n", ifname);
    }
 }
 
@@ -166,7 +165,7 @@ void add_timespec(struct timespec *ts, int64 addtime)
    sec = (addtime - nsec) / NSEC_PER_SEC;
    ts->tv_sec += sec;
    ts->tv_nsec += nsec;
-   if ( ts->tv_nsec >= NSEC_PER_SEC )
+   if (ts->tv_nsec >= NSEC_PER_SEC)
    {
       nsec = ts->tv_nsec % NSEC_PER_SEC;
       ts->tv_sec += (ts->tv_nsec - nsec) / NSEC_PER_SEC;
@@ -175,15 +174,24 @@ void add_timespec(struct timespec *ts, int64 addtime)
 }
 
 /* PI calculation to get linux time synced to DC time */
-void ec_sync(int64 reftime, int64 cycletime , int64 *offsettime)
+void ec_sync(int64 reftime, int64 cycletime, int64 *offsettime)
 {
    static int64 integral = 0;
    int64 delta;
    /* set linux sync point 50us later than DC sync, just as example */
    delta = (reftime - 50000) % cycletime;
-   if(delta> (cycletime / 2)) { delta= delta - cycletime; }
-   if(delta>0){ integral++; }
-   if(delta<0){ integral--; }
+   if (delta > (cycletime / 2))
+   {
+      delta = delta - cycletime;
+   }
+   if (delta > 0)
+   {
+      integral++;
+   }
+   if (delta < 0)
+   {
+      integral--;
+   }
    *offsettime = -(delta / 100) - (integral / 20);
    gl_delta = delta;
 }
@@ -191,34 +199,35 @@ void ec_sync(int64 reftime, int64 cycletime , int64 *offsettime)
 /* RT EtherCAT thread */
 OSAL_THREAD_FUNC_RT ecatthread(void *ptr)
 {
-   struct timespec   ts, tleft;
+   struct timespec ts, tleft;
    int ht;
    int64 cycletime;
 
    clock_gettime(CLOCK_MONOTONIC, &ts);
    ht = (ts.tv_nsec / 1000000) + 1; /* round to nearest ms */
    ts.tv_nsec = ht * 1000000;
-   if (ts.tv_nsec >= NSEC_PER_SEC) {
+   if (ts.tv_nsec >= NSEC_PER_SEC)
+   {
       ts.tv_sec++;
       ts.tv_nsec -= NSEC_PER_SEC;
    }
-   cycletime = *(int*)ptr * 1000; /* cycletime in ns */
+   cycletime = *(int *)ptr * 1000; /* cycletime in ns */
    toff = 0;
    dorun = 0;
    ec_send_processdata();
-   while(1)
+   while (1)
    {
       /* calculate next cycle start */
       add_timespec(&ts, cycletime + toff);
       /* wait to cycle start */
       clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &ts, &tleft);
-      if (dorun>0)
+      if (dorun > 0)
       {
          wkc = ec_receive_processdata(EC_TIMEOUTRET);
 
          dorun++;
          /* if we have some digital output, cycle */
-         if( digout ) *digout = (uint8) ((dorun / 16) & 0xff);
+         if (digout) *digout = (uint8)((dorun / 16) & 0xff);
 
          if (ec_slave[0].hasdc)
          {
@@ -230,82 +239,82 @@ OSAL_THREAD_FUNC_RT ecatthread(void *ptr)
    }
 }
 
-OSAL_THREAD_FUNC ecatcheck( void *ptr )
+OSAL_THREAD_FUNC ecatcheck(void *ptr)
 {
-    int slave;
+   int slave;
 
-    (void) ptr;
+   (void)ptr;
 
-    while(1)
-    {
-        if( inOP && ((wkc < expectedWKC) || ec_group[currentgroup].docheckstate))
-        {
-            if (needlf)
-            {
-               needlf = FALSE;
-               printf("\n");
-            }
-            /* one ore more slaves are not responding */
-            ec_group[currentgroup].docheckstate = FALSE;
-            ec_readstate();
-            for (slave = 1; slave <= ec_slavecount; slave++)
+   while (1)
+   {
+      if (inOP && ((wkc < expectedWKC) || ec_group[currentgroup].docheckstate))
+      {
+         if (needlf)
+         {
+            needlf = FALSE;
+            printf("\n");
+         }
+         /* one ore more slaves are not responding */
+         ec_group[currentgroup].docheckstate = FALSE;
+         ec_readstate();
+         for (slave = 1; slave <= ec_slavecount; slave++)
+         {
+            if ((ec_slave[slave].group == currentgroup) && (ec_slave[slave].state != EC_STATE_OPERATIONAL))
             {
-               if ((ec_slave[slave].group == currentgroup) && (ec_slave[slave].state != EC_STATE_OPERATIONAL))
+               ec_group[currentgroup].docheckstate = TRUE;
+               if (ec_slave[slave].state == (EC_STATE_SAFE_OP + EC_STATE_ERROR))
                {
-                  ec_group[currentgroup].docheckstate = TRUE;
-                  if (ec_slave[slave].state == (EC_STATE_SAFE_OP + EC_STATE_ERROR))
-                  {
-                     printf("ERROR : slave %d is in SAFE_OP + ERROR, attempting ack.\n", slave);
-                     ec_slave[slave].state = (EC_STATE_SAFE_OP + EC_STATE_ACK);
-                     ec_writestate(slave);
-                  }
-                  else if(ec_slave[slave].state == EC_STATE_SAFE_OP)
-                  {
-                     printf("WARNING : slave %d is in SAFE_OP, change to OPERATIONAL.\n", slave);
-                     ec_slave[slave].state = EC_STATE_OPERATIONAL;
-                     ec_writestate(slave);
-                  }
-                  else if(ec_slave[slave].state > EC_STATE_NONE)
-                  {
-                     if (ec_reconfig_slave(slave, EC_TIMEOUTMON))
-                     {
-                        ec_slave[slave].islost = FALSE;
-                        printf("MESSAGE : slave %d reconfigured\n",slave);
-                     }
-                  }
-                  else if(!ec_slave[slave].islost)
+                  printf("ERROR : slave %d is in SAFE_OP + ERROR, attempting ack.\n", slave);
+                  ec_slave[slave].state = (EC_STATE_SAFE_OP + EC_STATE_ACK);
+                  ec_writestate(slave);
+               }
+               else if (ec_slave[slave].state == EC_STATE_SAFE_OP)
+               {
+                  printf("WARNING : slave %d is in SAFE_OP, change to OPERATIONAL.\n", slave);
+                  ec_slave[slave].state = EC_STATE_OPERATIONAL;
+                  ec_writestate(slave);
+               }
+               else if (ec_slave[slave].state > EC_STATE_NONE)
+               {
+                  if (ec_reconfig_slave(slave, EC_TIMEOUTMON))
                   {
-                     /* re-check state */
-                     ec_statecheck(slave, EC_STATE_OPERATIONAL, EC_TIMEOUTRET);
-                     if (ec_slave[slave].state == EC_STATE_NONE)
-                     {
-                        ec_slave[slave].islost = TRUE;
-                        printf("ERROR : slave %d lost\n",slave);
-                     }
+                     ec_slave[slave].islost = FALSE;
+                     printf("MESSAGE : slave %d reconfigured\n", slave);
                   }
                }
-               if (ec_slave[slave].islost)
+               else if (!ec_slave[slave].islost)
                {
-                  if(ec_slave[slave].state == EC_STATE_NONE)
+                  /* re-check state */
+                  ec_statecheck(slave, EC_STATE_OPERATIONAL, EC_TIMEOUTRET);
+                  if (ec_slave[slave].state == EC_STATE_NONE)
                   {
-                     if (ec_recover_slave(slave, EC_TIMEOUTMON))
-                     {
-                        ec_slave[slave].islost = FALSE;
-                        printf("MESSAGE : slave %d recovered\n",slave);
-                     }
+                     ec_slave[slave].islost = TRUE;
+                     printf("ERROR : slave %d lost\n", slave);
                   }
-                  else
+               }
+            }
+            if (ec_slave[slave].islost)
+            {
+               if (ec_slave[slave].state == EC_STATE_NONE)
+               {
+                  if (ec_recover_slave(slave, EC_TIMEOUTMON))
                   {
                      ec_slave[slave].islost = FALSE;
-                     printf("MESSAGE : slave %d found\n",slave);
+                     printf("MESSAGE : slave %d recovered\n", slave);
                   }
                }
+               else
+               {
+                  ec_slave[slave].islost = FALSE;
+                  printf("MESSAGE : slave %d found\n", slave);
+               }
             }
-            if(!ec_group[currentgroup].docheckstate)
-               printf("OK : all slaves resumed OPERATIONAL.\n");
-        }
-        osal_usleep(10000);
-    }
+         }
+         if (!ec_group[currentgroup].docheckstate)
+            printf("OK : all slaves resumed OPERATIONAL.\n");
+      }
+      osal_usleep(10000);
+   }
 }
 
 #define stack64k (64 * 1024)
@@ -322,13 +331,13 @@ int main(int argc, char *argv[])
       ctime = atoi(argv[3]);
 
       /* create RT thread */
-      osal_thread_create_rt(&thread1, stack64k * 2, &ecatthread, (void*) &ctime);
+      osal_thread_create_rt(&thread1, stack64k * 2, &ecatthread, (void *)&ctime);
 
       /* create thread to handle slave error handling in OP */
       osal_thread_create(&thread2, stack64k * 4, &ecatcheck, NULL);
 
       /* start acyclic part */
-      redtest(argv[1],argv[2]);
+      redtest(argv[1], argv[2]);
    }
    else
    {
index 820ef7c5c5f77644e8e3d670f6d8af7be7e42c16..ebe810d2a6d9764e02538e34003caff96c9aef71 100644 (file)
 
 #include <defBF537.h>
 
-#define pPORTFIO_SET  ((vuint16_t *)PORTFIO_SET)
-#define pPORTFIO_CLEAR  ((vuint16_t *)PORTFIO_CLEAR)
-#define pPORTFIO_DIR  ((vuint16_t *)PORTFIO_DIR)
-
-#define EK1100_1           1
-#define EL4001_1           2
-#define EL3061_1           3
-#define EL1008_1           4
-#define EL1008_2           5
-#define EL2622_1           6
-#define EL2622_2           7
-#define EL2622_3           8
-#define EL2622_4           9
-#define NUMBER_OF_SLAVES   9
-
+#define pPORTFIO_SET     ((vuint16_t *)PORTFIO_SET)
+#define pPORTFIO_CLEAR   ((vuint16_t *)PORTFIO_CLEAR)
+#define pPORTFIO_DIR     ((vuint16_t *)PORTFIO_DIR)
+
+#define EK1100_1         1
+#define EL4001_1         2
+#define EL3061_1         3
+#define EL1008_1         4
+#define EL1008_2         5
+#define EL2622_1         6
+#define EL2622_2         7
+#define EL2622_3         8
+#define EL2622_4         9
+#define NUMBER_OF_SLAVES 9
 
 typedef struct
 {
-   uint8    in1;
-   uint8    in2;
-   uint8    in3;
-   uint8    in4;
-   uint8    in5;
-   uint8    in6;
-   uint8    in7;
-   uint8    in8;
+   uint8 in1;
+   uint8 in2;
+   uint8 in3;
+   uint8 in4;
+   uint8 in5;
+   uint8 in6;
+   uint8 in7;
+   uint8 in8;
 } in_EL1008_t;
 
 typedef struct
 {
-   uint8    out1;
-   uint8    out2;
+   uint8 out1;
+   uint8 out2;
 } out_EL2622_t;
 
 typedef struct
 {
-   int16    out1;
+   int16 out1;
 } out_EL4001_t;
 
 typedef struct
 {
-   int32    in1;
+   int32 in1;
 } in_EL3061_t;
 
-out_EL4001_t   slave_EL4001_1;
-in_EL3061_t    slave_EL3061_1;
-in_EL1008_t    slave_EL1008_1;
-in_EL1008_t    slave_EL1008_2;
-out_EL2622_t   slave_EL2622_1;
-out_EL2622_t   slave_EL2622_2;
-out_EL2622_t   slave_EL2622_3;
+out_EL4001_t slave_EL4001_1;
+in_EL3061_t slave_EL3061_1;
+in_EL1008_t slave_EL1008_1;
+in_EL1008_t slave_EL1008_2;
+out_EL2622_t slave_EL2622_1;
+out_EL2622_t slave_EL2622_2;
+out_EL2622_t slave_EL2622_3;
 
 uint32 network_configuration(void)
 {
@@ -74,29 +73,29 @@ uint32 network_configuration(void)
       return 0;
 
    /* Verify slave by slave that it is correct*/
-   if (strcmp(ec_slave[EK1100_1].name,"EK1100"))
+   if (strcmp(ec_slave[EK1100_1].name, "EK1100"))
       return 0;
-   else if (strcmp(ec_slave[EL4001_1].name,"EL4001"))
+   else if (strcmp(ec_slave[EL4001_1].name, "EL4001"))
       return 0;
-   else if (strcmp(ec_slave[EL3061_1].name,"EL3061"))
+   else if (strcmp(ec_slave[EL3061_1].name, "EL3061"))
       return 0;
-   else if (strcmp(ec_slave[EL1008_1].name,"EL1008"))
+   else if (strcmp(ec_slave[EL1008_1].name, "EL1008"))
       return 0;
-   else if (strcmp(ec_slave[EL1008_2].name,"EL1008"))
+   else if (strcmp(ec_slave[EL1008_2].name, "EL1008"))
       return 0;
-   else if (strcmp(ec_slave[EL2622_1].name,"EL2622"))
+   else if (strcmp(ec_slave[EL2622_1].name, "EL2622"))
       return 0;
-   else if (strcmp(ec_slave[EL2622_2].name,"EL2622"))
+   else if (strcmp(ec_slave[EL2622_2].name, "EL2622"))
       return 0;
-   else if (strcmp(ec_slave[EL2622_3].name,"EL2622"))
+   else if (strcmp(ec_slave[EL2622_3].name, "EL2622"))
       return 0;
-   else if (strcmp(ec_slave[EL2622_4].name,"EL2622"))
+   else if (strcmp(ec_slave[EL2622_4].name, "EL2622"))
       return 0;
 
-  return 1;
+   return 1;
 }
 
-int32 get_input_int32(uint16 slave_no,uint8 module_index)
+int32 get_input_int32(uint16 slave_no, uint8 module_index)
 {
    int32 return_value;
    uint8 *data_ptr;
@@ -115,7 +114,7 @@ int32 get_input_int32(uint16 slave_no,uint8 module_index)
    return return_value;
 }
 
-void set_input_int32 (uint16 slave_no, uint8 module_index, int32 value)
+void set_input_int32(uint16 slave_no, uint8 module_index, int32 value)
 {
    uint8 *data_ptr;
    /* Get the IO map pointer from the ec_slave struct */
@@ -131,18 +130,18 @@ void set_input_int32 (uint16 slave_no, uint8 module_index, int32 value)
    *data_ptr++ = (value >> 24) & 0xFF;
 }
 
-uint8 get_input_bit (uint16 slave_no,uint8 module_index)
+uint8 get_input_bit(uint16 slave_no, uint8 module_index)
 {
    /* Get the the startbit position in slaves IO byte */
    uint8 startbit = ec_slave[slave_no].Istartbit;
    /* Mask bit and return boolean 0 or 1 */
-   if (*ec_slave[slave_no].inputs & BIT (module_index - 1  + startbit))
+   if (*ec_slave[slave_no].inputs & BIT(module_index - 1 + startbit))
       return 1;
    else
       return 0;
 }
 
-int16 get_output_int16(uint16 slave_no,uint8 module_index)
+int16 get_output_int16(uint16 slave_no, uint8 module_index)
 {
    int16 return_value;
    uint8 *data_ptr;
@@ -160,7 +159,7 @@ int16 get_output_int16(uint16 slave_no,uint8 module_index)
    return return_value;
 }
 
-void set_output_int16 (uint16 slave_no, uint8 module_index, int16 value)
+void set_output_int16(uint16 slave_no, uint8 module_index, int16 value)
 {
    uint8 *data_ptr;
    /* Get the IO map pointer from the ec_slave struct */
@@ -174,18 +173,18 @@ void set_output_int16 (uint16 slave_no, uint8 module_index, int16 value)
    *data_ptr++ = (value >> 8) & 0xFF;
 }
 
-uint8 get_output_bit (uint16 slave_no,uint8 module_index)
+uint8 get_output_bit(uint16 slave_no, uint8 module_index)
 {
    /* Get the the startbit position in slaves IO byte */
    uint8 startbit = ec_slave[slave_no].Ostartbit;
    /* Mask bit and return boolean 0 or 1 */
-   if (*ec_slave[slave_no].outputs & BIT (module_index - 1  + startbit))
+   if (*ec_slave[slave_no].outputs & BIT(module_index - 1 + startbit))
       return 1;
    else
       return 0;
 }
 
-void set_output_bit (uint16 slave_no, uint8 module_index, uint8 value)
+void set_output_bit(uint16 slave_no, uint8 module_index, uint8 value)
 {
    /* Get the the startbit position in slaves IO byte */
    uint8 startbit = ec_slave[slave_no].Ostartbit;
@@ -196,8 +195,7 @@ void set_output_bit (uint16 slave_no, uint8 module_index, uint8 value)
       *ec_slave[slave_no].outputs |= (1 << (module_index - 1 + startbit));
 }
 
-
-extern tt_sched_t * tt_sched[];
+extern tt_sched_t *tt_sched[];
 
 char IOmap[128];
 int dorun = 0;
@@ -205,48 +203,46 @@ int dorun = 0;
 uint8_t load1s, load5s, load10s;
 uint32_t error_counter = 0;
 
-void tt_error (uint32_t task_ix);
-void tt_error (uint32_t task_ix)
+void tt_error(uint32_t task_ix);
+void tt_error(uint32_t task_ix)
 {
    error_counter++;
 }
 
-static void my_cyclic_callback (void * arg)
+static void my_cyclic_callback(void *arg)
 {
    while (1)
    {
-      stats_get_load (&load1s, &load5s, &load10s);
-      rprintp ("Processor load was %d:%d:%d (1s:5s:10s) with TT errors: %d\n",
-               load1s, load5s, load10s,error_counter);
+      stats_get_load(&load1s, &load5s, &load10s);
+      rprintp("Processor load was %d:%d:%d (1s:5s:10s) with TT errors: %d\n",
+              load1s, load5s, load10s, error_counter);
       task_delay(20000);
    }
 }
 
-
-void read_io (void * arg)
+void read_io(void *arg)
 {
    /* Function connected to cyclic TTOS task
     * The function is executed cyclic according
     * sceduel specified in schedule.tt
     */
-   *pPORTFIO_SET = BIT (6);
+   *pPORTFIO_SET = BIT(6);
    /* Send and receive processdata
     * Note that you need som synchronization
     * case you modifey IO in local application
     */
    ec_send_processdata();
    ec_receive_processdata(EC_TIMEOUTRET);
-   *pPORTFIO_CLEAR = BIT (6);
+   *pPORTFIO_CLEAR = BIT(6);
 }
 
-
 void simpletest(void *arg)
 {
 
    char *ifname = arg;
    int cnt, i, j;
 
-   *pPORTFIO_DIR |= BIT (6);
+   *pPORTFIO_DIR |= BIT(6);
 
    rprintp("Starting simple test\n");
 
@@ -256,9 +252,9 @@ void simpletest(void *arg)
       rprintp("ec_init succeeded.\n");
 
       /* find and auto-config slaves */
-      if ( ec_config_init(FALSE) > 0 )
+      if (ec_config_init(FALSE) > 0)
       {
-         rprintp("%d slaves found and configured.\n",ec_slavecount);
+         rprintp("%d slaves found and configured.\n", ec_slavecount);
 
          /* Check network  setup */
          if (network_configuration())
@@ -268,10 +264,10 @@ void simpletest(void *arg)
 
             rprintp("Slaves mapped, state to SAFE_OP.\n");
             /* wait for all slaves to reach SAFE_OP state */
-            ec_statecheck(0, EC_STATE_SAFE_OP,  EC_TIMEOUTSTATE);
+            ec_statecheck(0, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE);
 
             /* Print som information on the mapped network */
-            for( cnt = 1 ; cnt <= ec_slavecount ; cnt++)
+            for (cnt = 1; cnt <= ec_slavecount; cnt++)
             {
                rprintp("\nSlave:%d\n Name:%s\n Output size: %dbits\n Input size: %dbits\n State: %d\n Delay: %d[ns]\n Has DC: %d\n",
                        cnt, ec_slave[cnt].name, ec_slave[cnt].Obits, ec_slave[cnt].Ibits,
@@ -280,7 +276,7 @@ void simpletest(void *arg)
                rprintp(" Outputs address: %x\n", ec_slave[cnt].outputs);
                rprintp(" Inputs address: %x\n", ec_slave[cnt].inputs);
 
-               for(j = 0 ; j < ec_slave[cnt].FMMUunused ; j++)
+               for (j = 0; j < ec_slave[cnt].FMMUunused; j++)
                {
                   rprintp(" FMMU%1d Ls:%x Ll:%4d Lsb:%d Leb:%d Ps:%x Psb:%d Ty:%x Act:%x\n", j,
                           (int)ec_slave[cnt].FMMU[j].LogStart, ec_slave[cnt].FMMU[j].LogLength, ec_slave[cnt].FMMU[j].LogStartbit,
@@ -288,8 +284,7 @@ void simpletest(void *arg)
                           ec_slave[cnt].FMMU[j].FMMUtype, ec_slave[cnt].FMMU[j].FMMUactive);
                }
                rprintp(" FMMUfunc 0:%d 1:%d 2:%d 3:%d\n",
-                        ec_slave[cnt].FMMU0func, ec_slave[cnt].FMMU1func, ec_slave[cnt].FMMU2func, ec_slave[cnt].FMMU3func);
-
+                       ec_slave[cnt].FMMU0func, ec_slave[cnt].FMMU1func, ec_slave[cnt].FMMU2func, ec_slave[cnt].FMMU3func);
             }
 
             rprintp("Request operational state for all slaves\n");
@@ -300,8 +295,8 @@ void simpletest(void *arg)
             /* request OP state for all slaves */
             ec_writestate(0);
             /* wait for all slaves to reach OP state */
-            ec_statecheck(0, EC_STATE_OPERATIONAL,  EC_TIMEOUTSTATE);
-            if (ec_slave[0].state == EC_STATE_OPERATIONAL )
+            ec_statecheck(0, EC_STATE_OPERATIONAL, EC_TIMEOUTSTATE);
+            if (ec_slave[0].state == EC_STATE_OPERATIONAL)
             {
                rprintp("Operational state reached for all slaves.\n");
             }
@@ -309,9 +304,9 @@ void simpletest(void *arg)
             {
                rprintp("Not all slaves reached operational state.\n");
                ec_readstate();
-               for(i = 1; i<=ec_slavecount ; i++)
+               for (i = 1; i <= ec_slavecount; i++)
                {
-                  if(ec_slave[i].state != EC_STATE_OPERATIONAL)
+                  if (ec_slave[i].state != EC_STATE_OPERATIONAL)
                   {
                      rprintp("Slave %d State=0x%04x StatusCode=0x%04x\n",
                              i, ec_slave[i].state, ec_slave[i].ALstatuscode);
@@ -319,22 +314,21 @@ void simpletest(void *arg)
                }
             }
 
-
             /* Simple blinking lamps BOX demo */
             uint8 digout = 0;
 
             slave_EL4001_1.out1 = (int16)0x3FFF;
-            set_output_int16(EL4001_1,0,slave_EL4001_1.out1);
+            set_output_int16(EL4001_1, 0, slave_EL4001_1.out1);
 
-            task_spawn ("t_StatsPrint", my_cyclic_callback, 20, 1024, (void *)NULL);
-            tt_start_wait (tt_sched[0]);
+            task_spawn("t_StatsPrint", my_cyclic_callback, 20, 1024, (void *)NULL);
+            tt_start_wait(tt_sched[0]);
 
-            while(1)
+            while (1)
             {
                dorun = 0;
-               slave_EL1008_1.in1 = get_input_bit(EL1008_1,1); // Start button
-               slave_EL1008_1.in2 = get_input_bit(EL1008_1,2);  // Turnkey RIGHT
-               slave_EL1008_1.in3 = get_input_bit(EL1008_1,3); // Turnkey LEFT
+               slave_EL1008_1.in1 = get_input_bit(EL1008_1, 1); // Start button
+               slave_EL1008_1.in2 = get_input_bit(EL1008_1, 2); // Turnkey RIGHT
+               slave_EL1008_1.in3 = get_input_bit(EL1008_1, 3); // Turnkey LEFT
 
                /* (Turnkey MIDDLE + Start button) OR Turnkey RIGHT OR Turnkey LEFT
                   Turnkey LEFT: Light positions bottom to top. Loop, slow operation.
@@ -346,14 +340,14 @@ void simpletest(void *arg)
                   digout = 0;
                   /* *ec_slave[6].outputs = digout; */
                   /* set_output_bit(slave_name #,index as 1 output on module , value */
-                  set_output_bit(EL2622_1,1,(digout & BIT (0))); /* Start button */
-                  set_output_bit(EL2622_1,2,(digout & BIT (1))); /* Turnkey RIGHT */
-                  set_output_bit(EL2622_2,1,(digout & BIT (2))); /* Turnkey LEFT */
-                  set_output_bit(EL2622_2,2,(digout & BIT (3)));
-                  set_output_bit(EL2622_3,1,(digout & BIT (4)));
-                  set_output_bit(EL2622_3,2,(digout & BIT (5)));
-
-                  while(dorun < 95)
+                  set_output_bit(EL2622_1, 1, (digout & BIT(0))); /* Start button */
+                  set_output_bit(EL2622_1, 2, (digout & BIT(1))); /* Turnkey RIGHT */
+                  set_output_bit(EL2622_2, 1, (digout & BIT(2))); /* Turnkey LEFT */
+                  set_output_bit(EL2622_2, 2, (digout & BIT(3)));
+                  set_output_bit(EL2622_3, 1, (digout & BIT(4)));
+                  set_output_bit(EL2622_3, 2, (digout & BIT(5)));
+
+                  while (dorun < 95)
                   {
                      dorun++;
 
@@ -362,22 +356,21 @@ void simpletest(void *arg)
                      else
                         task_delay(tick_from_ms(5));
 
-                     digout = (uint8) (digout | BIT((dorun / 16) & 0xFF));
+                     digout = (uint8)(digout | BIT((dorun / 16) & 0xFF));
 
-                     set_output_bit(EL2622_1,1,(digout & BIT (0))); /* LED1 */
-                     set_output_bit(EL2622_1,2,(digout & BIT (1))); /* LED2 */
-                     set_output_bit(EL2622_2,1,(digout & BIT (2))); /* LED3 */
-                     set_output_bit(EL2622_2,2,(digout & BIT (3))); /* LED4 */
-                     set_output_bit(EL2622_3,1,(digout & BIT (4))); /* LED5 */
-                     set_output_bit(EL2622_3,2,(digout & BIT (5))); /* LED6 */
+                     set_output_bit(EL2622_1, 1, (digout & BIT(0))); /* LED1 */
+                     set_output_bit(EL2622_1, 2, (digout & BIT(1))); /* LED2 */
+                     set_output_bit(EL2622_2, 1, (digout & BIT(2))); /* LED3 */
+                     set_output_bit(EL2622_2, 2, (digout & BIT(3))); /* LED4 */
+                     set_output_bit(EL2622_3, 1, (digout & BIT(4))); /* LED5 */
+                     set_output_bit(EL2622_3, 2, (digout & BIT(5))); /* LED6 */
 
-                     slave_EL1008_1.in1 = get_input_bit(EL1008_1,2);  /* Turnkey RIGHT */
-                     slave_EL1008_1.in2 = get_input_bit(EL1008_1,3); /* Turnkey LEFT */
-                     slave_EL3061_1.in1 = get_input_int32(EL3061_1,0); /* Read AI */
+                     slave_EL1008_1.in1 = get_input_bit(EL1008_1, 2);   /* Turnkey RIGHT */
+                     slave_EL1008_1.in2 = get_input_bit(EL1008_1, 3);   /* Turnkey LEFT */
+                     slave_EL3061_1.in1 = get_input_int32(EL3061_1, 0); /* Read AI */
                   }
                }
                task_delay(tick_from_ms(2));
-
             }
          }
          else
@@ -400,48 +393,48 @@ void simpletest(void *arg)
    rprintp("End program\n");
 }
 
-static void test_osal_timer_timeout_us (const uint32 timeout_us)
+static void test_osal_timer_timeout_us(const uint32 timeout_us)
 {
    osal_timert timer;
 
-   ASSERT (timeout_us > 4000);
+   ASSERT(timeout_us > 4000);
 
-   osal_timer_start (&timer, timeout_us);
-   ASSERT (osal_timer_is_expired (&timer) == false);
-   osal_usleep (timeout_us - 2000);
-   ASSERT (osal_timer_is_expired (&timer) == false);
-   osal_usleep (4000);
-   ASSERT (osal_timer_is_expired (&timer));
+   osal_timer_start(&timer, timeout_us);
+   ASSERT(osal_timer_is_expired(&timer) == false);
+   osal_usleep(timeout_us - 2000);
+   ASSERT(osal_timer_is_expired(&timer) == false);
+   osal_usleep(4000);
+   ASSERT(osal_timer_is_expired(&timer));
 }
 
-static void test_osal_timer (void)
+static void test_osal_timer(void)
 {
-   test_osal_timer_timeout_us (10*1000);     /* 10ms */
-   test_osal_timer_timeout_us (100*1000);    /* 100ms */
-   test_osal_timer_timeout_us (1000*1000);   /* 1s */
-   test_osal_timer_timeout_us (2000*1000);   /* 2s */
+   test_osal_timer_timeout_us(10 * 1000);   /* 10ms */
+   test_osal_timer_timeout_us(100 * 1000);  /* 100ms */
+   test_osal_timer_timeout_us(1000 * 1000); /* 1s */
+   test_osal_timer_timeout_us(2000 * 1000); /* 2s */
 }
 
-#define USECS_PER_SEC   1000000
-#define USECS_PER_TICK  (USECS_PER_SEC / CFG_TICKS_PER_SECOND)
+#define USECS_PER_SEC  1000000
+#define USECS_PER_TICK (USECS_PER_SEC / CFG_TICKS_PER_SECOND)
 #ifndef ABS
 #define ABS(x) ((x) < 0 ? -(x) : (x))
 #endif
 
-static int32 time_difference_us (const ec_timet stop, const ec_timet start)
+static int32 time_difference_us(const ec_timet stop, const ec_timet start)
 {
    int32 difference_us;
 
-   ASSERT (stop.sec >= start.sec);
+   ASSERT(stop.sec >= start.sec);
    if (stop.sec == start.sec)
    {
-      ASSERT (stop.usec >= start.usec);
+      ASSERT(stop.usec >= start.usec);
    }
 
    difference_us = (stop.sec - start.sec) * USECS_PER_SEC;
    difference_us += ((int32)stop.usec - (int32)start.usec);
 
-   ASSERT (difference_us >= 0);
+   ASSERT(difference_us >= 0);
    return difference_us;
 }
 
@@ -449,7 +442,7 @@ static int32 time_difference_us (const ec_timet stop, const ec_timet start)
  * Test osal_current_time() by using it for measuring how long an osal_usleep()
  * takes, in specified number of microseconds.
  */
-static void test_osal_current_time_for_delay_us (const int32 sleep_time_us)
+static void test_osal_current_time_for_delay_us(const int32 sleep_time_us)
 {
    ec_timet start;
    ec_timet stop;
@@ -458,61 +451,60 @@ static void test_osal_current_time_for_delay_us (const int32 sleep_time_us)
    const int32 usleep_accuracy_us = USECS_PER_TICK;
    boolean is_deviation_within_tolerance;
 
-   start = osal_current_time ();
-   osal_usleep (sleep_time_us);
-   stop = osal_current_time ();
+   start = osal_current_time();
+   osal_usleep(sleep_time_us);
+   stop = osal_current_time();
 
-   measurement_us = time_difference_us (stop, start);
-   deviation_us = ABS (measurement_us - sleep_time_us);
+   measurement_us = time_difference_us(stop, start);
+   deviation_us = ABS(measurement_us - sleep_time_us);
    is_deviation_within_tolerance = deviation_us <= usleep_accuracy_us;
-   ASSERT (is_deviation_within_tolerance);
+   ASSERT(is_deviation_within_tolerance);
 }
 
-static void test_osal_current_time (void)
+static void test_osal_current_time(void)
 {
-   test_osal_current_time_for_delay_us (0);
-   test_osal_current_time_for_delay_us (1);
-   test_osal_current_time_for_delay_us (500);
-   test_osal_current_time_for_delay_us (999);
-   test_osal_current_time_for_delay_us (USECS_PER_TICK);
-   test_osal_current_time_for_delay_us (USECS_PER_TICK-1);
-   test_osal_current_time_for_delay_us (USECS_PER_TICK+1);
-   test_osal_current_time_for_delay_us (2 * 1000 * 1000);  /* 2s */
+   test_osal_current_time_for_delay_us(0);
+   test_osal_current_time_for_delay_us(1);
+   test_osal_current_time_for_delay_us(500);
+   test_osal_current_time_for_delay_us(999);
+   test_osal_current_time_for_delay_us(USECS_PER_TICK);
+   test_osal_current_time_for_delay_us(USECS_PER_TICK - 1);
+   test_osal_current_time_for_delay_us(USECS_PER_TICK + 1);
+   test_osal_current_time_for_delay_us(2 * 1000 * 1000); /* 2s */
 }
 
 #include <lwip/inet.h>
 
-static void test_oshw_htons (void)
+static void test_oshw_htons(void)
 {
-          uint16 network;
-          uint16 host;
+   uint16 network;
+   uint16 host;
 
-          host = 0x1234;
-          network = oshw_htons (host);
-          ASSERT (network == htons (host));
+   host = 0x1234;
+   network = oshw_htons(host);
+   ASSERT(network == htons(host));
 }
 
-static void test_oshw_ntohs (void)
+static void test_oshw_ntohs(void)
 {
-          uint16 host;
-          uint16 network;
+   uint16 host;
+   uint16 network;
 
-          network = 0x1234;
-          host = oshw_ntohs (network);
-          ASSERT (host == ntohs (network));
+   network = 0x1234;
+   host = oshw_ntohs(network);
+   ASSERT(host == ntohs(network));
 }
 
-int main (void)
+int main(void)
 {
-   test_oshw_htons ();
-   test_oshw_ntohs ();
-   test_osal_timer ();
-   test_osal_current_time ();
+   test_oshw_htons();
+   test_oshw_ntohs();
+   test_osal_timer();
+   test_osal_current_time();
 
    rprintp("SOEM (Simple Open EtherCAT Master)\nSimple test\n");
 
-   task_spawn ("simpletest", simpletest, 9, 8192, NULL);
+   task_spawn("simpletest", simpletest, 9, 8192, NULL);
 
    return (0);
 }
-
index cd1fb422a76e6993a8d4922087f05048e5d7c1ba..fc410cefaf7fddecf5805520e8ea91762370b065 100644 (file)
 
 typedef struct PACKED
 {
-   uint8         status;
-   uint8         counter;
-   uint8         din;
-   int32         ain[2];
-   uint32        tsain;
-   int32         enc[2];
+   uint8 status;
+   uint8 counter;
+   uint8 din;
+   int32 ain[2];
+   uint32 tsain;
+   int32 enc[2];
 } in_EBOXt;
 
 typedef struct PACKED
 {
-   uint8         counter;
-   int16         stream[100];
+   uint8 counter;
+   int16 stream[100];
 } in_EBOX_streamt;
 
 typedef struct PACKED
 {
-   uint8         control;
-   uint8         dout;
-   int16         aout[2];
-   uint16        pwmout[2];
+   uint8 control;
+   uint8 dout;
+   int16 aout[2];
+   uint16 pwmout[2];
 } out_EBOXt;
 
 typedef struct PACKED
 {
-   uint8         control;
+   uint8 control;
 } out_EBOX_streamt;
 
 // total samples to capture
@@ -63,35 +63,35 @@ typedef struct PACKED
 struct sched_param schedp;
 char IOmap[4096];
 pthread_t thread1;
-struct timeval tv,t1,t2;
+struct timeval tv, t1, t2;
 int dorun = 0;
-int deltat, tmax=0;
+int deltat, tmax = 0;
 int64 toff;
 int DCdiff;
 int os;
 uint32 ob;
 int16 ob2;
 uint8 ob3;
-pthread_cond_t  cond  = PTHREAD_COND_INITIALIZER;
+pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
 pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
-int64 integral=0;
+int64 integral = 0;
 uint32 cyclecount;
-in_EBOX_streamt  *in_EBOX;
+in_EBOX_streamt *in_EBOX;
 out_EBOX_streamt *out_EBOX;
-double     ain[2];
-int        ainc;
-int        streampos;
-int16      stream1[MAXSTREAM];
-int16      stream2[MAXSTREAM];
+double ain[2];
+int ainc;
+int streampos;
+int16 stream1[MAXSTREAM];
+int16 stream2[MAXSTREAM];
 
 int output_cvs(char *fname, int length)
 {
    FILE *fp;
 
-   int  i;
+   int i;
 
    fp = fopen(fname, "w");
-   if(fp == NULL)
+   if (fp == NULL)
       return 0;
    for (i = 0; i < length; i++)
    {
@@ -111,22 +111,24 @@ void eboxtest(char *ifname)
    /* initialise SOEM, bind socket to ifname */
    if (ec_init(ifname))
    {
-      printf("ec_init on %s succeeded.\n",ifname);
+      printf("ec_init on %s succeeded.\n", ifname);
       /* find and auto-config slaves */
-      if ( ec_config_init(FALSE) > 0 )
+      if (ec_config_init(FALSE) > 0)
       {
-         printf("%d slaves found and configured.\n",ec_slavecount);
+         printf("%d slaves found and configured.\n", ec_slavecount);
 
          // check if first slave is an E/BOX
-         if (( ec_slavecount >= 1 ) &&
-             (strcmp(ec_slave[1].name,"E/BOX") == 0))
+         if ((ec_slavecount >= 1) &&
+             (strcmp(ec_slave[1].name, "E/BOX") == 0))
          {
             // reprogram PDO mapping to set slave in stream mode
             // this can only be done in pre-OP state
-            os=sizeof(ob2); ob2 = 0x1601;
-            ec_SDOwrite(1,0x1c12,01,FALSE,os,&ob2,EC_TIMEOUTRXM);
-            os=sizeof(ob2); ob2 = 0x1a01;
-            ec_SDOwrite(1,0x1c13,01,FALSE,os,&ob2,EC_TIMEOUTRXM);
+            os = sizeof(ob2);
+            ob2 = 0x1601;
+            ec_SDOwrite(1, 0x1c12, 01, FALSE, os, &ob2, EC_TIMEOUTRXM);
+            os = sizeof(ob2);
+            ob2 = 0x1a01;
+            ec_SDOwrite(1, 0x1c13, 01, FALSE, os, &ob2, EC_TIMEOUTRXM);
          }
 
          ec_config_map(&IOmap);
@@ -134,29 +136,28 @@ void eboxtest(char *ifname)
          ec_configdc();
 
          /* wait for all slaves to reach SAFE_OP state */
-         ec_statecheck(0, EC_STATE_SAFE_OP,  EC_TIMEOUTSTATE);
+         ec_statecheck(0, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE);
 
          /* configure DC options for every DC capable slave found in the list */
-         printf("DC capable : %d\n",ec_configdc());
+         printf("DC capable : %d\n", ec_configdc());
 
          /* check configuration */
-         if (( ec_slavecount >= 1 ) &&
-             (strcmp(ec_slave[1].name,"E/BOX") == 0)
-            )
+         if ((ec_slavecount >= 1) &&
+             (strcmp(ec_slave[1].name, "E/BOX") == 0))
          {
             printf("E/BOX found.\n");
 
             /* connect struct pointers to slave I/O pointers */
-            in_EBOX = (in_EBOX_streamt*) ec_slave[1].inputs;
-            out_EBOX = (out_EBOX_streamt*) ec_slave[1].outputs;
+            in_EBOX = (in_EBOX_streamt *)ec_slave[1].inputs;
+            out_EBOX = (out_EBOX_streamt *)ec_slave[1].outputs;
 
             /* read indevidual slave state and store in ec_slave[] */
             ec_readstate();
-            for(cnt = 1; cnt <= ec_slavecount ; cnt++)
+            for (cnt = 1; cnt <= ec_slavecount; cnt++)
             {
                printf("Slave:%d Name:%s Output size:%3dbits Input size:%3dbits State:%2d delay:%d.%d\n",
-                     cnt, ec_slave[cnt].name, ec_slave[cnt].Obits, ec_slave[cnt].Ibits,
-                     ec_slave[cnt].state, (int)ec_slave[cnt].pdelay, ec_slave[cnt].hasdc);
+                      cnt, ec_slave[cnt].name, ec_slave[cnt].Obits, ec_slave[cnt].Ibits,
+                      ec_slave[cnt].state, (int)ec_slave[cnt].pdelay, ec_slave[cnt].hasdc);
             }
             printf("Request operational state for all slaves\n");
 
@@ -168,30 +169,30 @@ void eboxtest(char *ifname)
             /* request OP state for all slaves */
             ec_writestate(0);
             /* wait for all slaves to reach OP state */
-            ec_statecheck(0, EC_STATE_OPERATIONAL,  EC_TIMEOUTSTATE);
-            if (ec_slave[0].state == EC_STATE_OPERATIONAL )
+            ec_statecheck(0, EC_STATE_OPERATIONAL, EC_TIMEOUTSTATE);
+            if (ec_slave[0].state == EC_STATE_OPERATIONAL)
             {
                printf("Operational state reached for all slaves.\n");
                ain[0] = 0;
                ain[1] = 0;
                ainc = 0;
                dorun = 1;
-               usleep(100000); // wait for linux to sync on DC
+               usleep(100000);                    // wait for linux to sync on DC
                ec_dcsync0(1, TRUE, SYNC0TIME, 0); // SYNC0 on slave 1
                /* acyclic loop 20ms */
-               for(i = 1; i <= 200; i++)
+               for (i = 1; i <= 200; i++)
                {
                   /* read DC difference register for slave 2 */
-   //               ec_FPRD(ec_slave[1].configadr, ECT_REG_DCSYSDIFF, sizeof(DCdiff), &DCdiff, EC_TIMEOUTRET);
-   //               if(DCdiff<0) { DCdiff = - (int32)((uint32)DCdiff & 0x7ffffff); }
+                  //               ec_FPRD(ec_slave[1].configadr, ECT_REG_DCSYSDIFF, sizeof(DCdiff), &DCdiff, EC_TIMEOUTRET);
+                  //               if(DCdiff<0) { DCdiff = - (int32)((uint32)DCdiff & 0x7ffffff); }
                   printf("PD cycle %5d DCtime %12lld Cnt:%3d Data: %6d %6d %6d %6d %6d %6d %6d %6d \n",
-                        cyclecount, ec_DCtime, in_EBOX->counter, in_EBOX->stream[0], in_EBOX->stream[1],
+                         cyclecount, ec_DCtime, in_EBOX->counter, in_EBOX->stream[0], in_EBOX->stream[1],
                          in_EBOX->stream[2], in_EBOX->stream[3], in_EBOX->stream[4], in_EBOX->stream[5],
                          in_EBOX->stream[98], in_EBOX->stream[99]);
                   usleep(20000);
                }
                dorun = 0;
-   //            printf("\nCnt %d : Ain0 = %f  Ain2 = %f\n", ainc, ain[0] / ainc, ain[1] / ainc);
+               //            printf("\nCnt %d : Ain0 = %f  Ain2 = %f\n", ainc, ain[0] / ainc, ain[1] / ainc);
             }
             else
             {
@@ -208,21 +209,23 @@ void eboxtest(char *ifname)
          /* request SAFE_OP state for all slaves */
          ec_writestate(0);
          /* wait for all slaves to reach state */
-         ec_statecheck(0, EC_STATE_SAFE_OP,  EC_TIMEOUTSTATE);
+         ec_statecheck(0, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE);
          ec_slave[0].state = EC_STATE_PRE_OP;
          /* request SAFE_OP state for all slaves */
          ec_writestate(0);
          /* wait for all slaves to reach state */
-         ec_statecheck(0, EC_STATE_PRE_OP,  EC_TIMEOUTSTATE);
-         if (( ec_slavecount >= 1 ) &&
-             (strcmp(ec_slave[1].name,"E/BOX") == 0))
+         ec_statecheck(0, EC_STATE_PRE_OP, EC_TIMEOUTSTATE);
+         if ((ec_slavecount >= 1) &&
+             (strcmp(ec_slave[1].name, "E/BOX") == 0))
          {
             // restore PDO to standard mode
             // this can only be done is pre-op state
-            os=sizeof(ob2); ob2 = 0x1600;
-            ec_SDOwrite(1,0x1c12,01,FALSE,os,&ob2,EC_TIMEOUTRXM);
-            os=sizeof(ob2); ob2 = 0x1a00;
-            ec_SDOwrite(1,0x1c13,01,FALSE,os,&ob2,EC_TIMEOUTRXM);
+            os = sizeof(ob2);
+            ob2 = 0x1600;
+            ec_SDOwrite(1, 0x1c12, 01, FALSE, os, &ob2, EC_TIMEOUTRXM);
+            os = sizeof(ob2);
+            ob2 = 0x1a00;
+            ec_SDOwrite(1, 0x1c13, 01, FALSE, os, &ob2, EC_TIMEOUTRXM);
          }
          printf("Streampos %d\n", streampos);
          output_cvs("stream.txt", streampos);
@@ -237,7 +240,7 @@ void eboxtest(char *ifname)
    }
    else
    {
-      printf("No socket connection on %s\nExcecute as root\n",ifname);
+      printf("No socket connection on %s\nExcecute as root\n", ifname);
    }
 }
 
@@ -250,7 +253,7 @@ void add_timespec(struct timespec *ts, int64 addtime)
    sec = (addtime - nsec) / NSEC_PER_SEC;
    ts->tv_sec += sec;
    ts->tv_nsec += nsec;
-   if ( ts->tv_nsec >= NSEC_PER_SEC )
+   if (ts->tv_nsec >= NSEC_PER_SEC)
    {
       nsec = ts->tv_nsec % NSEC_PER_SEC;
       ts->tv_sec += (ts->tv_nsec - nsec) / NSEC_PER_SEC;
@@ -259,22 +262,31 @@ void add_timespec(struct timespec *ts, int64 addtime)
 }
 
 /* PI calculation to get linux time synced to DC time */
-void ec_sync(int64 reftime, int64 cycletime , int64 *offsettime)
+void ec_sync(int64 reftime, int64 cycletime, int64 *offsettime)
 {
    int64 delta;
    /* set linux sync point 50us later than DC sync, just as example */
    delta = (reftime - 50000) % cycletime;
-   if(delta> (cycletime /2)) { delta= delta - cycletime; }
-   if(delta>0){ integral++; }
-   if(delta<0){ integral--; }
-   *offsettime = -(delta / 100) - (integral /20);
+   if (delta > (cycletime / 2))
+   {
+      delta = delta - cycletime;
+   }
+   if (delta > 0)
+   {
+      integral++;
+   }
+   if (delta < 0)
+   {
+      integral--;
+   }
+   *offsettime = -(delta / 100) - (integral / 20);
 }
 
 /* RT EtherCAT thread */
-void ecatthread( void *ptr )
+void ecatthread(void *ptr)
 {
-   struct timespec   ts;
-   struct timeval    tp;
+   struct timespec ts;
+   struct timeval tp;
    int rc;
    int ht;
    int i;
@@ -282,24 +294,24 @@ void ecatthread( void *ptr )
    int64 cycletime;
 
    rc = pthread_mutex_lock(&mutex);
-   rc =  gettimeofday(&tp, NULL);
+   rc = gettimeofday(&tp, NULL);
 
-    /* Convert from timeval to timespec */
-   ts.tv_sec  = tp.tv_sec;
+   /* Convert from timeval to timespec */
+   ts.tv_sec = tp.tv_sec;
    ht = (tp.tv_usec / 1000) + 1; /* round to nearest ms */
    ts.tv_nsec = ht * 1000000;
-   cycletime = *(int*)ptr * 1000; /* cycletime in ns */
+   cycletime = *(int *)ptr * 1000; /* cycletime in ns */
    toff = 0;
    dorun = 0;
-   while(1)
+   while (1)
    {
       /* calculate next cycle start */
       add_timespec(&ts, cycletime + toff);
       /* wait to cycle start */
       rc = pthread_cond_timedwait(&cond, &mutex, &ts);
-      if (dorun>0)
+      if (dorun > 0)
       {
-         rc =  gettimeofday(&tp, NULL);
+         rc = gettimeofday(&tp, NULL);
 
          ec_send_processdata();
 
@@ -307,24 +319,23 @@ void ecatthread( void *ptr )
 
          cyclecount++;
 
-
-         if((in_EBOX->counter != pcounter) && (streampos < (MAXSTREAM - 1)))
+         if ((in_EBOX->counter != pcounter) && (streampos < (MAXSTREAM - 1)))
          {
             // check if we have timing problems in master
             // if so, overwrite stream data so it shows up clearly in plots.
-            if(in_EBOX->counter > (pcounter + 1))
+            if (in_EBOX->counter > (pcounter + 1))
             {
-               for(i = 0 ; i < 50 ; i++)
+               for (i = 0; i < 50; i++)
                {
-                  stream1[streampos]   = 20000;
+                  stream1[streampos] = 20000;
                   stream2[streampos++] = -20000;
                }
             }
             else
             {
-               for(i = 0 ; i < 50 ; i++)
+               for (i = 0; i < 50; i++)
                {
-                  stream1[streampos]   = in_EBOX->stream[i * 2];
+                  stream1[streampos] = in_EBOX->stream[i * 2];
                   stream2[streampos++] = in_EBOX->stream[(i * 2) + 1];
                }
             }
@@ -341,8 +352,8 @@ int main(int argc, char *argv[])
 {
    int iret1;
    int ctime;
-   struct sched_param    param;
-   int                   policy = SCHED_OTHER;
+   struct sched_param param;
+   int policy = SCHED_OTHER;
 
    printf("SOEM (Simple Open EtherCAT Master)\nE/BOX test\n");
 
@@ -354,18 +365,17 @@ int main(int argc, char *argv[])
    do
    {
       usleep(1000);
-   }
-   while (dorun);
+   } while (dorun);
 
    if (argc > 1)
    {
       dorun = 1;
-      ifargc > 2)
+      if (argc > 2)
          ctime = atoi(argv[2]);
       else
          ctime = 1000; // 1ms cycle time
       /* create RT thread */
-      iret1 = pthread_create( &thread1, NULL, (void *) &ecatthread, (void*) &ctime);
+      iret1 = pthread_create(&thread1, NULL, (void *)&ecatthread, (void *)&ctime);
       memset(&param, 0, sizeof(param));
       /* give it higher priority */
       param.sched_priority = 40;
index 66575d8c22bddb967e145aa89db3fddc43348865..34b822ddea0f89fa88e481048323ee3132a4eba7 100644 (file)
 
 #include "ethercat.h"
 
-#define MAXBUF 32768
-#define STDBUF 2048
-#define MINBUF 128
+#define MAXBUF          32768
+#define STDBUF          2048
+#define MINBUF          128
 
-#define MODE_NONE         0
-#define MODE_READBIN      1
-#define MODE_READINTEL    2
-#define MODE_WRITEBIN     3
-#define MODE_WRITEINTEL   4
+#define MODE_NONE       0
+#define MODE_READBIN    1
+#define MODE_READINTEL  2
+#define MODE_WRITEBIN   3
+#define MODE_WRITEINTEL 4
 
-#define MAXSLENGTH        256
+#define MAXSLENGTH      256
 
 uint8 ebuf[MAXBUF];
 uint8 ob;
 uint16 ow;
 int os;
 int slave;
-ec_timet tstart,tend, tdif;
+ec_timet tstart, tend, tdif;
 int wkc;
 int mode;
 char sline[MAXSLENGTH];
@@ -49,7 +49,7 @@ int input_bin(char *fname, int *length)
    int cc = 0, c;
 
    fp = fopen(fname, "rb");
-   if(fp == NULL)
+   if (fp == NULL)
       return 0;
    while (((c = fgetc(fp)) != EOF) && (cc < MAXBUF))
       ebuf[cc++] = (uint8)c;
@@ -68,7 +68,7 @@ int input_intelhex(char *fname, int *start, int *length)
    int hstart, hlength, sum;
 
    fp = fopen(fname, "r");
-   if(fp == NULL)
+   if (fp == NULL)
       return 0;
    hstart = MAXBUF;
    hlength = 0;
@@ -77,7 +77,7 @@ int input_intelhex(char *fname, int *start, int *length)
    {
       memset(sline, 0x00, MAXSLENGTH);
       sc = 0;
-      while (((c = fgetc(fp)) != EOF) && (c != 0x0A) && (sc < (MAXSLENGTH -1)))
+      while (((c = fgetc(fp)) != EOF) && (c != 0x0A) && (sc < (MAXSLENGTH - 1)))
          sline[sc++] = (uint8)c;
       if ((c != EOF) && ((sc < 11) || (sline[0] != ':')))
       {
@@ -87,18 +87,18 @@ int input_intelhex(char *fname, int *start, int *length)
       }
       if (c != EOF)
       {
-         sn = sscanf(sline , ":%2x%4x%2x", &ll, &ladr, &lt);
+         sn = sscanf(sline, ":%2x%4x%2x", &ll, &ladr, &lt);
          if ((sn == 3) && ((ladr + ll) <= MAXBUF) && (lt == 0))
          {
             sum = ll + (ladr >> 8) + (ladr & 0xff) + lt;
-            if(ladr < hstart) hstart = ladr;
-            for(i = 0; i < ll ; i++)
+            if (ladr < hstart) hstart = ladr;
+            for (i = 0; i < ll; i++)
             {
                sn = sscanf(&sline[9 + (i << 1)], "%2x", &lval);
                ebuf[ladr + i] = (uint8)lval;
                sum += (uint8)lval;
             }
-            if(((ladr + ll) - hstart) > hlength)
+            if (((ladr + ll) - hstart) > hlength)
                hlength = (ladr + ll) - hstart;
             sum = (0x100 - sum) & 0xff;
             sn = sscanf(&sline[9 + (i << 1)], "%2x", &lval);
@@ -110,8 +110,7 @@ int input_intelhex(char *fname, int *start, int *length)
             }
          }
       }
-   }
-   while (c != EOF);
+   } while (c != EOF);
    if (retval)
    {
       *length = hlength;
@@ -129,10 +128,10 @@ int output_bin(char *fname, int length)
    int cc;
 
    fp = fopen(fname, "wb");
-   if(fp == NULL)
+   if (fp == NULL)
       return 0;
-   for (cc = 0 ; cc < length ; cc++)
-      fputc( ebuf[cc], fp);
+   for (cc = 0; cc < length; cc++)
+      fputc(ebuf[cc], fp);
    fclose(fp);
 
    return 1;
@@ -145,7 +144,7 @@ int output_intelhex(char *fname, int length)
    int cc = 0, ll, sum, i;
 
    fp = fopen(fname, "w");
-   if(fp == NULL)
+   if (fp == NULL)
       return 0;
    while (cc < length)
    {
@@ -175,43 +174,43 @@ int eeprom_read(int slave, int start, int length)
    uint64 b8;
    uint8 eepctl;
 
-   if((ec_slavecount >= slave) && (slave > 0) && ((start + length) <= MAXBUF))
+   if ((ec_slavecount >= slave) && (slave > 0) && ((start + length) <= MAXBUF))
    {
       aiadr = 1 - slave;
       eepctl = 2;
-      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl , EC_TIMEOUTRET3); /* force Eeprom from PDI */
+      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl, EC_TIMEOUTRET3); /* force Eeprom from PDI */
       eepctl = 0;
-      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl , EC_TIMEOUTRET3); /* set Eeprom to master */
+      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl, EC_TIMEOUTRET3); /* set Eeprom to master */
 
       estat = 0x0000;
       aiadr = 1 - slave;
-      wkc=ec_APRD(aiadr, ECT_REG_EEPSTAT, sizeof(estat), &estat, EC_TIMEOUTRET3); /* read eeprom status */
+      wkc = ec_APRD(aiadr, ECT_REG_EEPSTAT, sizeof(estat), &estat, EC_TIMEOUTRET3); /* read eeprom status */
       estat = etohs(estat);
       if (estat & EC_ESTAT_R64)
       {
          ainc = 8;
-         for (i = start ; i < (start + length) ; i+=ainc)
+         for (i = start; i < (start + length); i += ainc)
          {
-            b8 = ec_readeepromAP(aiadr, i >> 1 , EC_TIMEOUTEEP);
-            ebuf[i] = (uint8) b8;
-            ebuf[i+1] = (uint8) (b8 >> 8);
-            ebuf[i+2] = (uint8) (b8 >> 16);
-            ebuf[i+3] = (uint8) (b8 >> 24);
-            ebuf[i+4] = (uint8) (b8 >> 32);
-            ebuf[i+5] = (uint8) (b8 >> 40);
-            ebuf[i+6] = (uint8) (b8 >> 48);
-            ebuf[i+7] = (uint8) (b8 >> 56);
+            b8 = ec_readeepromAP(aiadr, i >> 1, EC_TIMEOUTEEP);
+            ebuf[i] = (uint8)b8;
+            ebuf[i + 1] = (uint8)(b8 >> 8);
+            ebuf[i + 2] = (uint8)(b8 >> 16);
+            ebuf[i + 3] = (uint8)(b8 >> 24);
+            ebuf[i + 4] = (uint8)(b8 >> 32);
+            ebuf[i + 5] = (uint8)(b8 >> 40);
+            ebuf[i + 6] = (uint8)(b8 >> 48);
+            ebuf[i + 7] = (uint8)(b8 >> 56);
          }
       }
       else
       {
-         for (i = start ; i < (start + length) ; i+=ainc)
+         for (i = start; i < (start + length); i += ainc)
          {
-            b4 = (uint32)ec_readeepromAP(aiadr, i >> 1 , EC_TIMEOUTEEP);
-            ebuf[i] = (uint8) b4;
-            ebuf[i+1] = (uint8) (b4 >> 8);
-            ebuf[i+2] = (uint8) (b4 >> 16);
-            ebuf[i+3] = (uint8) (b4 >> 24);
+            b4 = (uint32)ec_readeepromAP(aiadr, i >> 1, EC_TIMEOUTEEP);
+            ebuf[i] = (uint8)b4;
+            ebuf[i + 1] = (uint8)(b4 >> 8);
+            ebuf[i + 2] = (uint8)(b4 >> 16);
+            ebuf[i + 3] = (uint8)(b4 >> 24);
          }
       }
 
@@ -228,19 +227,19 @@ int eeprom_write(int slave, int start, int length)
    uint8 eepctl;
    int ret;
 
-   if((ec_slavecount >= slave) && (slave > 0) && ((start + length) <= MAXBUF))
+   if ((ec_slavecount >= slave) && (slave > 0) && ((start + length) <= MAXBUF))
    {
       aiadr = 1 - slave;
       eepctl = 2;
-      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl , EC_TIMEOUTRET3); /* force Eeprom from PDI */
+      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl, EC_TIMEOUTRET3); /* force Eeprom from PDI */
       eepctl = 0;
-      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl , EC_TIMEOUTRET3); /* set Eeprom to master */
+      wkc = ec_APWR(aiadr, ECT_REG_EEPCFG, sizeof(eepctl), &eepctl, EC_TIMEOUTRET3); /* set Eeprom to master */
 
       aiadr = 1 - slave;
       wbuf = (uint16 *)&ebuf[0];
-      for (i = start ; i < (start + length) ; i+=2)
+      for (i = start; i < (start + length); i += 2)
       {
-         ret = ec_writeeepromAP(aiadr, i >> 1 , *(wbuf + (i >> 1)), EC_TIMEOUTEEP);
+         ret = ec_writeeepromAP(aiadr, i >> 1, *(wbuf + (i >> 1)), EC_TIMEOUTEEP);
          if (++dc >= 100)
          {
             dc = 0;
@@ -263,16 +262,16 @@ void eepromtool(char *ifname, int slave, int mode, char *fname)
    /* initialise SOEM, bind socket to ifname */
    if (ec_init(ifname))
    {
-      printf("ec_init on %s succeeded.\n",ifname);
+      printf("ec_init on %s succeeded.\n", ifname);
 
       w = 0x0000;
-       wkc = ec_BRD(0x0000, ECT_REG_TYPE, sizeof(w), &w, EC_TIMEOUTSAFE);      /* detect number of slaves */
-       if (wkc > 0)
-       {
+      wkc = ec_BRD(0x0000, ECT_REG_TYPE, sizeof(w), &w, EC_TIMEOUTSAFE); /* detect number of slaves */
+      if (wkc > 0)
+      {
          ec_slavecount = wkc;
 
-         printf("%d slaves found.\n",ec_slavecount);
-         if((ec_slavecount >= slave) && (slave > 0))
+         printf("%d slaves found.\n", ec_slavecount);
+         if ((ec_slavecount >= slave) && (slave > 0))
          {
             if ((mode == MODE_READBIN) || (mode == MODE_READINTEL))
             {
@@ -281,19 +280,19 @@ void eepromtool(char *ifname, int slave, int mode, char *fname)
 
                wbuf = (uint16 *)&ebuf[0];
                printf("Slave %d data\n", slave);
-               printf(" PDI Control      : %4.4X\n",*(wbuf + 0x00));
-               printf(" PDI Config       : %4.4X\n",*(wbuf + 0x01));
-               printf(" Config Alias     : %4.4X\n",*(wbuf + 0x04));
-               printf(" Checksum         : %4.4X\n",*(wbuf + 0x07));
-               printf(" Vendor ID        : %8.8X\n",*(uint32 *)(wbuf + 0x08));
-               printf(" Product Code     : %8.8X\n",*(uint32 *)(wbuf + 0x0A));
-               printf(" Revision Number  : %8.8X\n",*(uint32 *)(wbuf + 0x0C));
-               printf(" Serial Number    : %8.8X\n",*(uint32 *)(wbuf + 0x0E));
-               printf(" Mailbox Protocol : %4.4X\n",*(wbuf + 0x1C));
+               printf(" PDI Control      : %4.4X\n", *(wbuf + 0x00));
+               printf(" PDI Config       : %4.4X\n", *(wbuf + 0x01));
+               printf(" Config Alias     : %4.4X\n", *(wbuf + 0x04));
+               printf(" Checksum         : %4.4X\n", *(wbuf + 0x07));
+               printf(" Vendor ID        : %8.8X\n", *(uint32 *)(wbuf + 0x08));
+               printf(" Product Code     : %8.8X\n", *(uint32 *)(wbuf + 0x0A));
+               printf(" Revision Number  : %8.8X\n", *(uint32 *)(wbuf + 0x0C));
+               printf(" Serial Number    : %8.8X\n", *(uint32 *)(wbuf + 0x0E));
+               printf(" Mailbox Protocol : %4.4X\n", *(wbuf + 0x1C));
                esize = (*(wbuf + 0x3E) + 1) * 128;
                if (esize > MAXBUF) esize = MAXBUF;
-               printf(" Size             : %4.4X = %d bytes\n",*(wbuf + 0x3E), esize);
-               printf(" Version          : %4.4X\n",*(wbuf + 0x3F));
+               printf(" Size             : %4.4X = %d bytes\n", *(wbuf + 0x3E), esize);
+               printf(" Version          : %4.4X\n", *(wbuf + 0x3F));
 
                if (esize > MINBUF)
                   eeprom_read(slave, MINBUF, esize - MINBUF); // read reminder
@@ -301,24 +300,24 @@ void eepromtool(char *ifname, int slave, int mode, char *fname)
                tend = osal_current_time();
                osal_time_diff(&tstart, &tend, &tdif);
                if (mode == MODE_READINTEL) output_intelhex(fname, esize);
-               if (mode == MODE_READBIN)    output_bin(fname, esize);
+               if (mode == MODE_READBIN) output_bin(fname, esize);
 
-               printf("\nTotal EEPROM read time :%ldms\n", (tdif.usec+(tdif.sec*1000000L)) / 1000);
+               printf("\nTotal EEPROM read time :%ldms\n", (tdif.usec + (tdif.sec * 1000000L)) / 1000);
             }
             if ((mode == MODE_WRITEBIN) || (mode == MODE_WRITEINTEL))
             {
                estart = 0;
                if (mode == MODE_WRITEINTEL) rc = input_intelhex(fname, &estart, &esize);
-               if (mode == MODE_WRITEBIN)     rc = input_bin(fname, &esize);
+               if (mode == MODE_WRITEBIN) rc = input_bin(fname, &esize);
 
                if (rc > 0)
                {
                   wbuf = (uint16 *)&ebuf[0];
                   printf("Slave %d\n", slave);
-                  printf(" Vendor ID        : %8.8X\n",*(uint32 *)(wbuf + 0x08));
-                  printf(" Product Code     : %8.8X\n",*(uint32 *)(wbuf + 0x0A));
-                  printf(" Revision Number  : %8.8X\n",*(uint32 *)(wbuf + 0x0C));
-                  printf(" Serial Number    : %8.8X\n",*(uint32 *)(wbuf + 0x0E));
+                  printf(" Vendor ID        : %8.8X\n", *(uint32 *)(wbuf + 0x08));
+                  printf(" Product Code     : %8.8X\n", *(uint32 *)(wbuf + 0x0A));
+                  printf(" Revision Number  : %8.8X\n", *(uint32 *)(wbuf + 0x0C));
+                  printf(" Serial Number    : %8.8X\n", *(uint32 *)(wbuf + 0x0E));
 
                   printf("Busy");
                   fflush(stdout);
@@ -327,7 +326,7 @@ void eepromtool(char *ifname, int slave, int mode, char *fname)
                   tend = osal_current_time();
                   osal_time_diff(&tstart, &tend, &tdif);
 
-                  printf("\nTotal EEPROM write time :%ldms\n", (tdif.usec+(tdif.sec*1000000L)) / 1000);
+                  printf("\nTotal EEPROM write time :%ldms\n", (tdif.usec + (tdif.sec * 1000000L)) / 1000);
                }
                else
                   printf("Error reading file, abort.\n");
@@ -343,26 +342,26 @@ void eepromtool(char *ifname, int slave, int mode, char *fname)
       ec_close();
    }
    else
-      printf("No socket connection on %s\nExcecute as root\n",ifname);
+      printf("No socket connection on %s\nExcecute as root\n", ifname);
 }
 
 int main(int argc, char *argv[])
 {
-   ec_adaptert * adapter = NULL;
-   ec_adaptert * head = NULL;
+   ec_adaptert *adapter = NULL;
+   ec_adaptert *head = NULL;
    printf("SOEM (Simple Open EtherCAT Master)\nEEPROM tool\n");
 
    if (argc > 4)
    {
       slave = atoi(argv[2]);
       mode = MODE_NONE;
-      if ((strncmp(argv[3], "-r", sizeof("-r")) == 0))   mode = MODE_READBIN;
+      if ((strncmp(argv[3], "-r", sizeof("-r")) == 0)) mode = MODE_READBIN;
       if ((strncmp(argv[3], "-ri", sizeof("-ri")) == 0)) mode = MODE_READINTEL;
-      if ((strncmp(argv[3], "-w", sizeof("-w")) == 0))   mode = MODE_WRITEBIN;
+      if ((strncmp(argv[3], "-w", sizeof("-w")) == 0)) mode = MODE_WRITEBIN;
       if ((strncmp(argv[3], "-wi", sizeof("-wi")) == 0)) mode = MODE_WRITEINTEL;
 
       /* start tool */
-      eepromtool(argv[1],slave,mode,argv[4]);
+      eepromtool(argv[1], slave, mode, argv[4]);
    }
    else
    {
@@ -373,12 +372,12 @@ int main(int argc, char *argv[])
       printf("    -ri     read EEPROM, output Intel Hex format\n");
       printf("    -w      write EEPROM, input binary format\n");
       printf("    -wi     write EEPROM, input Intel Hex format\n");
-       /* Print the list */
-      printf ("Available adapters\n");
-      head = adapter = ec_find_adapters ();
+      /* Print the list */
+      printf("Available adapters\n");
+      head = adapter = ec_find_adapters();
       while (adapter != NULL)
       {
-         printf ("Description : %s, Device to use for wpcap: %s\n", adapter->desc,adapter->name);
+         printf("Description : %s, Device to use for wpcap: %s\n", adapter->desc, adapter->name);
          adapter = adapter->next;
       }
       ec_free_adapters(adapter);
index 0cd511e91945843f71de81589b16ec3b9b18536e..d4c7c2783c8cba2c574d316117392b5fe01216be 100644 (file)
@@ -33,127 +33,124 @@ uint16 argslave;
 
 int input_bin(char *fname, int *length)
 {
-    FILE *fp;
-
-       int cc = 0, c;
-
-    fp = fopen(fname, "rb");
-    if(fp == NULL)
-        return 0;
-       while (((c = fgetc(fp)) != EOF) && (cc < FWBUFSIZE))
-               filebuffer[cc++] = (uint8)c;
-       *length = cc;
-       fclose(fp);
-       return 1;
+   FILE *fp;
+
+   int cc = 0, c;
+
+   fp = fopen(fname, "rb");
+   if (fp == NULL)
+      return 0;
+   while (((c = fgetc(fp)) != EOF) && (cc < FWBUFSIZE))
+      filebuffer[cc++] = (uint8)c;
+   *length = cc;
+   fclose(fp);
+   return 1;
 }
 
-
 void boottest(char *ifname, uint16 slave, char *filename)
 {
-       printf("Starting firmware update example\n");
-
-       /* initialise SOEM, bind socket to ifname */
-       if (ec_init(ifname))
-       {
-               printf("ec_init on %s succeeded.\n",ifname);
-               /* find and auto-config slaves */
-
-
-           if ( ec_config_init(FALSE) > 0 )
-               {
-                       printf("%d slaves found and configured.\n",ec_slavecount);
-
-                       printf("Request init state for slave %d\n", slave);
-                       ec_slave[slave].state = EC_STATE_INIT;
-                       ec_writestate(slave);
-
-                       /* wait for slave to reach INIT state */
-                       ec_statecheck(slave, EC_STATE_INIT,  EC_TIMEOUTSTATE * 4);
-                       printf("Slave %d state to INIT.\n", slave);
-
-                       /* read BOOT mailbox data, master -> slave */
-                       data = ec_readeeprom(slave, ECT_SII_BOOTRXMBX, EC_TIMEOUTEEP);
-                       ec_slave[slave].SM[0].StartAddr = (uint16)LO_WORD(data);
-                       ec_slave[slave].SM[0].SMlength = (uint16)HI_WORD(data);
-                       /* store boot write mailbox address */
-                       ec_slave[slave].mbx_wo = (uint16)LO_WORD(data);
-                       /* store boot write mailbox size */
-                       ec_slave[slave].mbx_l = (uint16)HI_WORD(data);
-
-                       /* read BOOT mailbox data, slave -> master */
-                       data = ec_readeeprom(slave, ECT_SII_BOOTTXMBX, EC_TIMEOUTEEP);
-                       ec_slave[slave].SM[1].StartAddr = (uint16)LO_WORD(data);
-                        ec_slave[slave].SM[1].SMlength = (uint16)HI_WORD(data);
-                       /* store boot read mailbox address */
-                       ec_slave[slave].mbx_ro = (uint16)LO_WORD(data);
-                       /* store boot read mailbox size */
-                       ec_slave[slave].mbx_rl = (uint16)HI_WORD(data);
-
-                       printf(" SM0 A:%4.4x L:%4d F:%8.8x\n", ec_slave[slave].SM[0].StartAddr, ec_slave[slave].SM[0].SMlength,
-                           (int)ec_slave[slave].SM[0].SMflags);
-                       printf(" SM1 A:%4.4x L:%4d F:%8.8x\n", ec_slave[slave].SM[1].StartAddr, ec_slave[slave].SM[1].SMlength,
-                           (int)ec_slave[slave].SM[1].SMflags);
-                       /* program SM0 mailbox in for slave */
-                       ec_FPWR (ec_slave[slave].configadr, ECT_REG_SM0, sizeof(ec_smt), &ec_slave[slave].SM[0], EC_TIMEOUTRET);
-                       /* program SM1 mailbox out for slave */
-                       ec_FPWR (ec_slave[slave].configadr, ECT_REG_SM1, sizeof(ec_smt), &ec_slave[slave].SM[1], EC_TIMEOUTRET);
-
-                       printf("Request BOOT state for slave %d\n", slave);
-                       ec_slave[slave].state = EC_STATE_BOOT;
-                       ec_writestate(slave);
-
-                       /* wait for slave to reach BOOT state */
-                       if (ec_statecheck(slave, EC_STATE_BOOT,  EC_TIMEOUTSTATE * 10) == EC_STATE_BOOT)
-                       {
-                               printf("Slave %d state to BOOT.\n", slave);
-
-                               if (input_bin(filename, &filesize))
-                               {
-                                       printf("File read OK, %d bytes.\n",filesize);
-                                       printf("FoE write....");
-                                       j = ec_FOEwrite(slave, filename, 0, filesize , &filebuffer, EC_TIMEOUTSTATE);
-                                       printf("result %d.\n",j);
-                                       printf("Request init state for slave %d\n", slave);
-                                       ec_slave[slave].state = EC_STATE_INIT;
-                                       ec_writestate(slave);
-                               }
-                               else
-                                   printf("File not read OK.\n");
-                       }
-
-               }
-               else
-               {
-                       printf("No slaves found!\n");
-               }
-               printf("End firmware update example, close socket\n");
-               /* stop SOEM, close socket */
-               ec_close();
-       }
-       else
-       {
-               printf("No socket connection on %s\nExcecute as root\n",ifname);
-       }
+   printf("Starting firmware update example\n");
+
+   /* initialise SOEM, bind socket to ifname */
+   if (ec_init(ifname))
+   {
+      printf("ec_init on %s succeeded.\n", ifname);
+      /* find and auto-config slaves */
+
+      if (ec_config_init(FALSE) > 0)
+      {
+         printf("%d slaves found and configured.\n", ec_slavecount);
+
+         printf("Request init state for slave %d\n", slave);
+         ec_slave[slave].state = EC_STATE_INIT;
+         ec_writestate(slave);
+
+         /* wait for slave to reach INIT state */
+         ec_statecheck(slave, EC_STATE_INIT, EC_TIMEOUTSTATE * 4);
+         printf("Slave %d state to INIT.\n", slave);
+
+         /* read BOOT mailbox data, master -> slave */
+         data = ec_readeeprom(slave, ECT_SII_BOOTRXMBX, EC_TIMEOUTEEP);
+         ec_slave[slave].SM[0].StartAddr = (uint16)LO_WORD(data);
+         ec_slave[slave].SM[0].SMlength = (uint16)HI_WORD(data);
+         /* store boot write mailbox address */
+         ec_slave[slave].mbx_wo = (uint16)LO_WORD(data);
+         /* store boot write mailbox size */
+         ec_slave[slave].mbx_l = (uint16)HI_WORD(data);
+
+         /* read BOOT mailbox data, slave -> master */
+         data = ec_readeeprom(slave, ECT_SII_BOOTTXMBX, EC_TIMEOUTEEP);
+         ec_slave[slave].SM[1].StartAddr = (uint16)LO_WORD(data);
+         ec_slave[slave].SM[1].SMlength = (uint16)HI_WORD(data);
+         /* store boot read mailbox address */
+         ec_slave[slave].mbx_ro = (uint16)LO_WORD(data);
+         /* store boot read mailbox size */
+         ec_slave[slave].mbx_rl = (uint16)HI_WORD(data);
+
+         printf(" SM0 A:%4.4x L:%4d F:%8.8x\n", ec_slave[slave].SM[0].StartAddr, ec_slave[slave].SM[0].SMlength,
+                (int)ec_slave[slave].SM[0].SMflags);
+         printf(" SM1 A:%4.4x L:%4d F:%8.8x\n", ec_slave[slave].SM[1].StartAddr, ec_slave[slave].SM[1].SMlength,
+                (int)ec_slave[slave].SM[1].SMflags);
+         /* program SM0 mailbox in for slave */
+         ec_FPWR(ec_slave[slave].configadr, ECT_REG_SM0, sizeof(ec_smt), &ec_slave[slave].SM[0], EC_TIMEOUTRET);
+         /* program SM1 mailbox out for slave */
+         ec_FPWR(ec_slave[slave].configadr, ECT_REG_SM1, sizeof(ec_smt), &ec_slave[slave].SM[1], EC_TIMEOUTRET);
+
+         printf("Request BOOT state for slave %d\n", slave);
+         ec_slave[slave].state = EC_STATE_BOOT;
+         ec_writestate(slave);
+
+         /* wait for slave to reach BOOT state */
+         if (ec_statecheck(slave, EC_STATE_BOOT, EC_TIMEOUTSTATE * 10) == EC_STATE_BOOT)
+         {
+            printf("Slave %d state to BOOT.\n", slave);
+
+            if (input_bin(filename, &filesize))
+            {
+               printf("File read OK, %d bytes.\n", filesize);
+               printf("FoE write....");
+               j = ec_FOEwrite(slave, filename, 0, filesize, &filebuffer, EC_TIMEOUTSTATE);
+               printf("result %d.\n", j);
+               printf("Request init state for slave %d\n", slave);
+               ec_slave[slave].state = EC_STATE_INIT;
+               ec_writestate(slave);
+            }
+            else
+               printf("File not read OK.\n");
+         }
+      }
+      else
+      {
+         printf("No slaves found!\n");
+      }
+      printf("End firmware update example, close socket\n");
+      /* stop SOEM, close socket */
+      ec_close();
+   }
+   else
+   {
+      printf("No socket connection on %s\nExcecute as root\n", ifname);
+   }
 }
 
 int main(int argc, char *argv[])
 {
-       printf("SOEM (Simple Open EtherCAT Master)\nFirmware update example\n");
-
-       if (argc > 3)
-       {
-               argslave = atoi(argv[2]);
-               boottest(argv[1], argslave, argv[3]);
-       }
-       else
-       {
-               printf("Usage: firm_update ifname1 slave fname\n");
-               printf("ifname = eth0 for example\n");
-               printf("slave = slave number in EtherCAT order 1..n\n");
-               printf("fname = binary file to store in slave\n");
-               printf("CAUTION! Using the wrong file can result in a bricked slave!\n");
-       }
-
-       printf("End program\n");
-       return (0);
+   printf("SOEM (Simple Open EtherCAT Master)\nFirmware update example\n");
+
+   if (argc > 3)
+   {
+      argslave = atoi(argv[2]);
+      boottest(argv[1], argslave, argv[3]);
+   }
+   else
+   {
+      printf("Usage: firm_update ifname1 slave fname\n");
+      printf("ifname = eth0 for example\n");
+      printf("slave = slave number in EtherCAT order 1..n\n");
+      printf("fname = binary file to store in slave\n");
+      printf("CAUTION! Using the wrong file can result in a bricked slave!\n");
+   }
+
+   printf("End program\n");
+   return (0);
 }
index 0a5d5e41f65a46354dc3b9f533b84991b8d95365..4f69e67b3b8a429518df4d139e7a14bea271e25c 100644 (file)
@@ -36,8 +36,8 @@ int DCdiff;
 int os;
 uint8 ob;
 uint16 ob2;
-pthread_cond_t      cond  = PTHREAD_COND_INITIALIZER;
-pthread_mutex_t     mutex = PTHREAD_MUTEX_INITIALIZER;
+pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
+pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
 uint8 *digout = 0;
 int wcounter;
 
@@ -50,28 +50,28 @@ void redtest(char *ifname, char *ifname2)
    /* initialise SOEM, bind socket to ifname */
    if (ec_init_redundant(ifname, ifname2))
    {
-      printf("ec_init on %s succeeded.\n",ifname);
+      printf("ec_init on %s succeeded.\n", ifname);
       /* find and auto-config slaves */
-      if ( ec_config(FALSE, &IOmap) > 0 )
+      if (ec_config(FALSE, &IOmap) > 0)
       {
-         printf("%d slaves found and configured.\n",ec_slavecount);
+         printf("%d slaves found and configured.\n", ec_slavecount);
          /* wait for all slaves to reach SAFE_OP state */
-         ec_statecheck(0, EC_STATE_SAFE_OP,  EC_TIMEOUTSTATE);
+         ec_statecheck(0, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE);
 
          /* configure DC options for every DC capable slave found in the list */
          ec_configdc();
 
          /* read indevidual slave state and store in ec_slave[] */
          ec_readstate();
-         for(cnt = 1; cnt <= ec_slavecount ; cnt++)
+         for (cnt = 1; cnt <= ec_slavecount; cnt++)
          {
             printf("Slave:%d Name:%s Output size:%3dbits Input size:%3dbits State:%2d delay:%d.%d\n",
-                  cnt, ec_slave[cnt].name, ec_slave[cnt].Obits, ec_slave[cnt].Ibits,
-                  ec_slave[cnt].state, (int)ec_slave[cnt].pdelay, ec_slave[cnt].hasdc);
+                   cnt, ec_slave[cnt].name, ec_slave[cnt].Obits, ec_slave[cnt].Ibits,
+                   ec_slave[cnt].state, (int)ec_slave[cnt].pdelay, ec_slave[cnt].hasdc);
             printf("         Out:%8.8x,%4d In:%8.8x,%4d\n",
-                  (int)ec_slave[cnt].outputs, ec_slave[cnt].Obytes, (int)ec_slave[cnt].inputs, ec_slave[cnt].Ibytes);
+                   (int)ec_slave[cnt].outputs, ec_slave[cnt].Obytes, (int)ec_slave[cnt].inputs, ec_slave[cnt].Ibytes);
             /* check for EL2004 or EL2008 */
-            if!digout && ((ec_slave[cnt].eep_id == 0x07d43052) || (ec_slave[cnt].eep_id == 0x07d83052)))
+            if (!digout && ((ec_slave[cnt].eep_id == 0x07d43052) || (ec_slave[cnt].eep_id == 0x07d83052)))
             {
                digout = ec_slave[cnt].outputs;
             }
@@ -88,20 +88,20 @@ void redtest(char *ifname, char *ifname2)
          iloop = ec_slave[0].Ibytes;
          if ((iloop == 0) && (ec_slave[0].Ibits > 0)) iloop = 1;
          if (iloop > 8) iloop = 8;
-         if (ec_slave[0].state == EC_STATE_OPERATIONAL )
+         if (ec_slave[0].state == EC_STATE_OPERATIONAL)
          {
             printf("Operational state reached for all slaves.\n");
             dorun = 1;
             /* acyclic loop 5000 x 20ms = 10s */
-            for(i = 1; i <= 5000; i++)
+            for (i = 1; i <= 5000; i++)
             {
-               printf("Processdata cycle %5d , Wck %3d, DCtime %12lld, O:", dorun, wcounter , ec_DCtime);
-               for(j = 0 ; j < oloop; j++)
+               printf("Processdata cycle %5d , Wck %3d, DCtime %12lld, O:", dorun, wcounter, ec_DCtime);
+               for (j = 0; j < oloop; j++)
                {
                   printf(" %2.2x", *(ec_slave[0].outputs + j));
                }
                printf(" I:");
-               for(j = 0 ; j < iloop; j++)
+               for (j = 0; j < iloop; j++)
                {
                   printf(" %2.2x", *(ec_slave[0].inputs + j));
                }
@@ -129,7 +129,7 @@ void redtest(char *ifname, char *ifname2)
    }
    else
    {
-      printf("No socket connection on %s\nExcecute as root\n",ifname);
+      printf("No socket connection on %s\nExcecute as root\n", ifname);
    }
 }
 
@@ -142,7 +142,7 @@ void add_timespec(struct timespec *ts, int64 addtime)
    sec = (addtime - nsec) / NSEC_PER_SEC;
    ts->tv_sec += sec;
    ts->tv_nsec += nsec;
-   if ( ts->tv_nsec >= NSEC_PER_SEC )
+   if (ts->tv_nsec >= NSEC_PER_SEC)
    {
       nsec = ts->tv_nsec % NSEC_PER_SEC;
       ts->tv_sec += (ts->tv_nsec - nsec) / NSEC_PER_SEC;
@@ -151,46 +151,55 @@ void add_timespec(struct timespec *ts, int64 addtime)
 }
 
 /* PI calculation to get linux time synced to DC time */
-void ec_sync(int64 reftime, int64 cycletime , int64 *offsettime)
+void ec_sync(int64 reftime, int64 cycletime, int64 *offsettime)
 {
    static int64 integral = 0;
    int64 delta;
    /* set linux sync point 50us later than DC sync, just as example */
    delta = (reftime - 50000) % cycletime;
-   if(delta> (cycletime / 2)) { delta= delta - cycletime; }
-   if(delta>0){ integral++; }
-   if(delta<0){ integral--; }
+   if (delta > (cycletime / 2))
+   {
+      delta = delta - cycletime;
+   }
+   if (delta > 0)
+   {
+      integral++;
+   }
+   if (delta < 0)
+   {
+      integral--;
+   }
    *offsettime = -(delta / 100) - (integral / 20);
 }
 
 /* RT EtherCAT thread */
-void ecatthread( void *ptr )
+void ecatthread(void *ptr)
 {
-   struct timespec   ts;
-   struct timeval    tp;
+   struct timespec ts;
+   struct timeval tp;
    int rc;
    int ht;
    int64 cycletime;
 
    rc = pthread_mutex_lock(&mutex);
-   rc =  gettimeofday(&tp, NULL);
+   rc = gettimeofday(&tp, NULL);
 
-    /* Convert from timeval to timespec */
-   ts.tv_sec  = tp.tv_sec;
+   /* Convert from timeval to timespec */
+   ts.tv_sec = tp.tv_sec;
    ht = (tp.tv_usec / 1000) + 1; /* round to nearest ms */
    ts.tv_nsec = ht * 1000000;
-   cycletime = *(int*)ptr * 1000; /* cycletime in ns */
+   cycletime = *(int *)ptr * 1000; /* cycletime in ns */
    toff = 0;
    dorun = 0;
-   while(1)
+   while (1)
    {
       /* calculate next cycle start */
       add_timespec(&ts, cycletime + toff);
       /* wait to cycle start */
       rc = pthread_cond_timedwait(&cond, &mutex, &ts);
-      if (dorun>0)
+      if (dorun > 0)
       {
-         rc =  gettimeofday(&tp, NULL);
+         rc = gettimeofday(&tp, NULL);
 
          ec_send_processdata();
 
@@ -198,7 +207,7 @@ void ecatthread( void *ptr )
 
          dorun++;
          /* if we have some digital output, cycle */
-         if( digout ) *digout = (uint8) ((dorun / 16) & 0xff);
+         if (digout) *digout = (uint8)((dorun / 16) & 0xff);
 
          if (ec_slave[0].hasdc)
          {
@@ -213,8 +222,8 @@ int main(int argc, char *argv[])
 {
    int iret1;
    int ctime;
-   struct sched_param    param;
-   int                   policy = SCHED_OTHER;
+   struct sched_param param;
+   int policy = SCHED_OTHER;
 
    printf("SOEM (Simple Open EtherCAT Master)\nRedundancy test\n");
 
@@ -226,22 +235,21 @@ int main(int argc, char *argv[])
    do
    {
       usleep(1000);
-   }
-   while (dorun);
+   } while (dorun);
 
    if (argc > 3)
    {
       dorun = 1;
       ctime = atoi(argv[3]);
       /* create RT thread */
-      iret1 = pthread_create( &thread1, NULL, (void *) &ecatthread, (void*) &ctime);
+      iret1 = pthread_create(&thread1, NULL, (void *)&ecatthread, (void *)&ctime);
       memset(&param, 0, sizeof(param));
       /* give it higher priority */
       param.sched_priority = 40;
       iret1 = pthread_setschedparam(thread1, policy, &param);
 
       /* start acyclic part */
-      redtest(argv[1],argv[2]);
+      redtest(argv[1], argv[2]);
    }
    else
    {
index 8e1d60f6d0015f82d60b3f87bc9daf4d60190946..83a990f47486e1654f34728fc06bb4b1e75d9b86 100644 (file)
@@ -11,7 +11,7 @@
 
 #include <stdio.h>
 #include <string.h>
-//#include <Mmsystem.h>
+// #include <Mmsystem.h>
 
 #include "osal.h"
 #include "ethercat.h"
@@ -28,141 +28,141 @@ boolean inOP;
 uint8 currentgroup = 0;
 
 /* most basic RT thread for process data, just does IO transfer */
-void CALLBACK RTthread(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1,  DWORD_PTR dw2)
+void CALLBACK RTthread(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2)
 {
-    IOmap[0]++;
+   IOmap[0]++;
 
-    ec_send_processdata();
-    wkc = ec_receive_processdata(EC_TIMEOUTRET);
-    rtcnt++;
-    /* do RT control stuff here */
+   ec_send_processdata();
+   wkc = ec_receive_processdata(EC_TIMEOUTRET);
+   rtcnt++;
+   /* do RT control stuff here */
 }
 
 int EL7031setup(uint16 slave)
 {
-    int retval;
-    uint16 u16val;
+   int retval;
+   uint16 u16val;
 
-    // map velocity
-    uint16 map_1c12[4] = {0x0003, 0x1601, 0x1602, 0x1604};
-    uint16 map_1c13[3] = {0x0002, 0x1a01, 0x1a03};
+   // map velocity
+   uint16 map_1c12[4] = {0x0003, 0x1601, 0x1602, 0x1604};
+   uint16 map_1c13[3] = {0x0002, 0x1a01, 0x1a03};
 
-    retval = 0;
+   retval = 0;
 
-    // Set PDO mapping using Complete Access
-    // Strange, writing CA works, reading CA doesn't
-    // This is a protocol error of the slave.
-    retval += ec_SDOwrite(slave, 0x1c12, 0x00, TRUE, sizeof(map_1c12), &map_1c12, EC_TIMEOUTSAFE);
-    retval += ec_SDOwrite(slave, 0x1c13, 0x00, TRUE, sizeof(map_1c13), &map_1c13, EC_TIMEOUTSAFE);
+   // Set PDO mapping using Complete Access
+   // Strange, writing CA works, reading CA doesn't
+   // This is a protocol error of the slave.
+   retval += ec_SDOwrite(slave, 0x1c12, 0x00, TRUE, sizeof(map_1c12), &map_1c12, EC_TIMEOUTSAFE);
+   retval += ec_SDOwrite(slave, 0x1c13, 0x00, TRUE, sizeof(map_1c13), &map_1c13, EC_TIMEOUTSAFE);
 
-    // bug in EL7031 old firmware, CompleteAccess for reading is not supported even if the slave says it is.
-    ec_slave[slave].CoEdetails &= ~ECT_COEDET_SDOCA;
+   // bug in EL7031 old firmware, CompleteAccess for reading is not supported even if the slave says it is.
+   ec_slave[slave].CoEdetails &= ~ECT_COEDET_SDOCA;
 
-    // set some motor parameters, just as example
-    u16val = 1200; // max motor current in mA
-//    retval += ec_SDOwrite(slave, 0x8010, 0x01, FALSE, sizeof(u16val), &u16val, EC_TIMEOUTSAFE);
-    u16val = 150; // motor coil resistance in 0.01ohm
-//    retval += ec_SDOwrite(slave, 0x8010, 0x04, FALSE, sizeof(u16val), &u16val, EC_TIMEOUTSAFE);
+   // set some motor parameters, just as example
+   u16val = 1200; // max motor current in mA
+                  //    retval += ec_SDOwrite(slave, 0x8010, 0x01, FALSE, sizeof(u16val), &u16val, EC_TIMEOUTSAFE);
+   u16val = 150;  // motor coil resistance in 0.01ohm
+                  //    retval += ec_SDOwrite(slave, 0x8010, 0x04, FALSE, sizeof(u16val), &u16val, EC_TIMEOUTSAFE);
 
-    // set other nescessary parameters as needed
-    // .....
+   // set other nescessary parameters as needed
+   // .....
 
-    while(EcatError) printf("%s", ec_elist2string());
+   while (EcatError)
+      printf("%s", ec_elist2string());
 
-    printf("EL7031 slave %d set, retval = %d\n", slave, retval);
-    return 1;
+   printf("EL7031 slave %d set, retval = %d\n", slave, retval);
+   return 1;
 }
 
 int AEPsetup(uint16 slave)
 {
-    int retval;
-    uint8 u8val;
-    uint16 u16val;
-
-    retval = 0;
-
-    u8val = 0;
-    retval += ec_SDOwrite(slave, 0x1c12, 0x00, FALSE, sizeof(u8val), &u8val, EC_TIMEOUTRXM);
-    u16val = 0x1603;
-    retval += ec_SDOwrite(slave, 0x1c12, 0x01, FALSE, sizeof(u16val), &u16val, EC_TIMEOUTRXM);
-    u8val = 1;
-    retval += ec_SDOwrite(slave, 0x1c12, 0x00, FALSE, sizeof(u8val), &u8val, EC_TIMEOUTRXM);
-
-    u8val = 0;
-    retval += ec_SDOwrite(slave, 0x1c13, 0x00, FALSE, sizeof(u8val), &u8val, EC_TIMEOUTRXM);
-    u16val = 0x1a03;
-    retval += ec_SDOwrite(slave, 0x1c13, 0x01, FALSE, sizeof(u16val), &u16val, EC_TIMEOUTRXM);
-    u8val = 1;
-    retval += ec_SDOwrite(slave, 0x1c13, 0x00, FALSE, sizeof(u8val), &u8val, EC_TIMEOUTRXM);
-
-    u8val = 8;
-    retval += ec_SDOwrite(slave, 0x6060, 0x00, FALSE, sizeof(u8val), &u8val, EC_TIMEOUTRXM);
-
-    // set some motor parameters, just as example
-    u16val = 1200; // max motor current in mA
-//    retval += ec_SDOwrite(slave, 0x8010, 0x01, FALSE, sizeof(u16val), &u16val, EC_TIMEOUTSAFE);
-    u16val = 150; // motor coil resistance in 0.01ohm
-//    retval += ec_SDOwrite(slave, 0x8010, 0x04, FALSE, sizeof(u16val), &u16val, EC_TIMEOUTSAFE);
-
-    // set other nescessary parameters as needed
-    // .....
-
-    while(EcatError) printf("%s", ec_elist2string());
-
-    printf("AEP slave %d set, retval = %d\n", slave, retval);
-    return 1;
+   int retval;
+   uint8 u8val;
+   uint16 u16val;
+
+   retval = 0;
+
+   u8val = 0;
+   retval += ec_SDOwrite(slave, 0x1c12, 0x00, FALSE, sizeof(u8val), &u8val, EC_TIMEOUTRXM);
+   u16val = 0x1603;
+   retval += ec_SDOwrite(slave, 0x1c12, 0x01, FALSE, sizeof(u16val), &u16val, EC_TIMEOUTRXM);
+   u8val = 1;
+   retval += ec_SDOwrite(slave, 0x1c12, 0x00, FALSE, sizeof(u8val), &u8val, EC_TIMEOUTRXM);
+
+   u8val = 0;
+   retval += ec_SDOwrite(slave, 0x1c13, 0x00, FALSE, sizeof(u8val), &u8val, EC_TIMEOUTRXM);
+   u16val = 0x1a03;
+   retval += ec_SDOwrite(slave, 0x1c13, 0x01, FALSE, sizeof(u16val), &u16val, EC_TIMEOUTRXM);
+   u8val = 1;
+   retval += ec_SDOwrite(slave, 0x1c13, 0x00, FALSE, sizeof(u8val), &u8val, EC_TIMEOUTRXM);
+
+   u8val = 8;
+   retval += ec_SDOwrite(slave, 0x6060, 0x00, FALSE, sizeof(u8val), &u8val, EC_TIMEOUTRXM);
+
+   // set some motor parameters, just as example
+   u16val = 1200; // max motor current in mA
+                  //    retval += ec_SDOwrite(slave, 0x8010, 0x01, FALSE, sizeof(u16val), &u16val, EC_TIMEOUTSAFE);
+   u16val = 150;  // motor coil resistance in 0.01ohm
+                  //    retval += ec_SDOwrite(slave, 0x8010, 0x04, FALSE, sizeof(u16val), &u16val, EC_TIMEOUTSAFE);
+
+   // set other nescessary parameters as needed
+   // .....
+
+   while (EcatError)
+      printf("%s", ec_elist2string());
+
+   printf("AEP slave %d set, retval = %d\n", slave, retval);
+   return 1;
 }
 
 void simpletest(char *ifname)
 {
-    int i, j, oloop, iloop, wkc_count, chk, slc;
-    UINT mmResult;
+   int i, j, oloop, iloop, wkc_count, chk, slc;
+   UINT mmResult;
 
-    needlf = FALSE;
-    inOP = FALSE;
+   needlf = FALSE;
+   inOP = FALSE;
 
    printf("Starting simple test\n");
 
    /* initialise SOEM, bind socket to ifname */
    if (ec_init(ifname))
    {
-      printf("ec_init on %s succeeded.\n",ifname);
+      printf("ec_init on %s succeeded.\n", ifname);
       /* find and auto-config slaves */
 
+      if (ec_config_init(FALSE) > 0)
+      {
+         printf("%d slaves found and configured.\n", ec_slavecount);
 
-       if ( ec_config_init(FALSE) > 0 )
-       {
-         printf("%d slaves found and configured.\n",ec_slavecount);
-
-         if((ec_slavecount > 1))
+         if ((ec_slavecount > 1))
          {
-             for(slc = 1; slc <= ec_slavecount; slc++)
-             {
-                 // beckhoff EL7031, using ec_slave[].name is not very reliable
-                 if((ec_slave[slc].eep_man == 0x00000002) && (ec_slave[slc].eep_id == 0x1b773052))
-                 {
-                     printf("Found %s at position %d\n", ec_slave[slc].name, slc);
-                     // link slave specific setup to preop->safeop hook
-                     ec_slave[slc].PO2SOconfig = &EL7031setup;
-                 }
-                 // Copley Controls EAP, using ec_slave[].name is not very reliable
-                 if((ec_slave[slc].eep_man == 0x000000ab) && (ec_slave[slc].eep_id == 0x00000380))
-                 {
-                     printf("Found %s at position %d\n", ec_slave[slc].name, slc);
-                     // link slave specific setup to preop->safeop hook
-                     ec_slave[slc].PO2SOconfig = &AEPsetup;
-                 }
-             }
+            for (slc = 1; slc <= ec_slavecount; slc++)
+            {
+               // beckhoff EL7031, using ec_slave[].name is not very reliable
+               if ((ec_slave[slc].eep_man == 0x00000002) && (ec_slave[slc].eep_id == 0x1b773052))
+               {
+                  printf("Found %s at position %d\n", ec_slave[slc].name, slc);
+                  // link slave specific setup to preop->safeop hook
+                  ec_slave[slc].PO2SOconfig = &EL7031setup;
+               }
+               // Copley Controls EAP, using ec_slave[].name is not very reliable
+               if ((ec_slave[slc].eep_man == 0x000000ab) && (ec_slave[slc].eep_id == 0x00000380))
+               {
+                  printf("Found %s at position %d\n", ec_slave[slc].name, slc);
+                  // link slave specific setup to preop->safeop hook
+                  ec_slave[slc].PO2SOconfig = &AEPsetup;
+               }
+            }
          }
 
-
          ec_config_map(&IOmap);
 
          ec_configdc();
 
          printf("Slaves mapped, state to SAFE_OP.\n");
          /* wait for all slaves to reach SAFE_OP state */
-         ec_statecheck(0, EC_STATE_SAFE_OP,  EC_TIMEOUTSTATE * 4);
+         ec_statecheck(0, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE * 4);
 
          oloop = ec_slave[0].Obytes;
          if ((oloop == 0) && (ec_slave[0].Obits > 0)) oloop = 1;
@@ -171,7 +171,7 @@ void simpletest(char *ifname)
          if ((iloop == 0) && (ec_slave[0].Ibits > 0)) iloop = 1;
          if (iloop > 8) iloop = 8;
 
-         printf("segments : %d : %d %d %d %d\n",ec_group[0].nsegments ,ec_group[0].IOsegment[0],ec_group[0].IOsegment[1],ec_group[0].IOsegment[2],ec_group[0].IOsegment[3]);
+         printf("segments : %d : %d %d %d %d\n", ec_group[0].nsegments, ec_group[0].IOsegment[0], ec_group[0].IOsegment[1], ec_group[0].IOsegment[2], ec_group[0].IOsegment[3]);
 
          printf("Request operational state for all slaves\n");
          expectedWKC = (ec_group[0].outputsWKC * 2) + ec_group[0].inputsWKC;
@@ -191,52 +191,49 @@ void simpletest(char *ifname)
          do
          {
             ec_statecheck(0, EC_STATE_OPERATIONAL, 50000);
-         }
-         while (chk-- && (ec_slave[0].state != EC_STATE_OPERATIONAL));
-         if (ec_slave[0].state == EC_STATE_OPERATIONAL )
+         } while (chk-- && (ec_slave[0].state != EC_STATE_OPERATIONAL));
+         if (ec_slave[0].state == EC_STATE_OPERATIONAL)
          {
             printf("Operational state reached for all slaves.\n");
             wkc_count = 0;
             inOP = TRUE;
 
-
             /* cyclic loop, reads data from RT thread */
-            for(i = 1; i <= 500; i++)
+            for (i = 1; i <= 500; i++)
             {
-                    if(wkc >= expectedWKC)
-                    {
-                        printf("Processdata cycle %4d, WKC %d , O:", rtcnt, wkc);
-
-                        for(j = 0 ; j < oloop; j++)
-                        {
-                            printf(" %2.2x", *(ec_slave[0].outputs + j));
-                        }
-
-                        printf(" I:");
-                        for(j = 0 ; j < iloop; j++)
-                        {
-                            printf(" %2.2x", *(ec_slave[0].inputs + j));
-                        }
-                        printf(" T:%lld\r",ec_DCtime);
-                        needlf = TRUE;
-                    }
-                    osal_usleep(50000);
+               if (wkc >= expectedWKC)
+               {
+                  printf("Processdata cycle %4d, WKC %d , O:", rtcnt, wkc);
+
+                  for (j = 0; j < oloop; j++)
+                  {
+                     printf(" %2.2x", *(ec_slave[0].outputs + j));
+                  }
 
+                  printf(" I:");
+                  for (j = 0; j < iloop; j++)
+                  {
+                     printf(" %2.2x", *(ec_slave[0].inputs + j));
+                  }
+                  printf(" T:%lld\r", ec_DCtime);
+                  needlf = TRUE;
+               }
+               osal_usleep(50000);
             }
             inOP = FALSE;
          }
          else
          {
-                printf("Not all slaves reached operational state.\n");
-                ec_readstate();
-                for(i = 1; i<=ec_slavecount ; i++)
-                {
-                    if(ec_slave[i].state != EC_STATE_OPERATIONAL)
-                    {
-                        printf("Slave %d State=0x%2.2x StatusCode=0x%4.4x : %s\n",
-                            i, ec_slave[i].state, ec_slave[i].ALstatuscode, ec_ALstatuscode2string(ec_slave[i].ALstatuscode));
-                    }
-                }
+            printf("Not all slaves reached operational state.\n");
+            ec_readstate();
+            for (i = 1; i <= ec_slavecount; i++)
+            {
+               if (ec_slave[i].state != EC_STATE_OPERATIONAL)
+               {
+                  printf("Slave %d State=0x%2.2x StatusCode=0x%4.4x : %s\n",
+                         i, ec_slave[i].state, ec_slave[i].ALstatuscode, ec_ALstatuscode2string(ec_slave[i].ALstatuscode));
+               }
+            }
          }
 
          /* stop RT thread */
@@ -246,106 +243,106 @@ void simpletest(char *ifname)
          ec_slave[0].state = EC_STATE_INIT;
          /* request INIT state for all slaves */
          ec_writestate(0);
-        }
-        else
-        {
-            printf("No slaves found!\n");
-        }
-        printf("End simple test, close socket\n");
-        /* stop SOEM, close socket */
-        ec_close();
-    }
-    else
-    {
-        printf("No socket connection on %s\nExcecute as root\n",ifname);
-    }
+      }
+      else
+      {
+         printf("No slaves found!\n");
+      }
+      printf("End simple test, close socket\n");
+      /* stop SOEM, close socket */
+      ec_close();
+   }
+   else
+   {
+      printf("No socket connection on %s\nExcecute as root\n", ifname);
+   }
 }
 
-//DWORD WINAPI ecatcheck( LPVOID lpParam )
+// DWORD WINAPI ecatcheck( LPVOID lpParam )
 OSAL_THREAD_FUNC ecatcheck(void *lpParam)
 {
-    int slave;
+   int slave;
 
-    while(1)
-    {
-        if( inOP && ((wkc < expectedWKC) || ec_group[currentgroup].docheckstate))
-        {
-            if (needlf)
-            {
-               needlf = FALSE;
-               printf("\n");
-            }
-            /* one ore more slaves are not responding */
-            ec_group[currentgroup].docheckstate = FALSE;
-            ec_readstate();
-            for (slave = 1; slave <= ec_slavecount; slave++)
+   while (1)
+   {
+      if (inOP && ((wkc < expectedWKC) || ec_group[currentgroup].docheckstate))
+      {
+         if (needlf)
+         {
+            needlf = FALSE;
+            printf("\n");
+         }
+         /* one ore more slaves are not responding */
+         ec_group[currentgroup].docheckstate = FALSE;
+         ec_readstate();
+         for (slave = 1; slave <= ec_slavecount; slave++)
+         {
+            if ((ec_slave[slave].group == currentgroup) && (ec_slave[slave].state != EC_STATE_OPERATIONAL))
             {
-               if ((ec_slave[slave].group == currentgroup) && (ec_slave[slave].state != EC_STATE_OPERATIONAL))
+               ec_group[currentgroup].docheckstate = TRUE;
+               if (ec_slave[slave].state == (EC_STATE_SAFE_OP + EC_STATE_ERROR))
                {
-                  ec_group[currentgroup].docheckstate = TRUE;
-                  if (ec_slave[slave].state == (EC_STATE_SAFE_OP + EC_STATE_ERROR))
-                  {
-                     printf("ERROR : slave %d is in SAFE_OP + ERROR, attempting ack.\n", slave);
-                     ec_slave[slave].state = (EC_STATE_SAFE_OP + EC_STATE_ACK);
-                     ec_writestate(slave);
-                  }
-                  else if(ec_slave[slave].state == EC_STATE_SAFE_OP)
-                  {
-                     printf("WARNING : slave %d is in SAFE_OP, change to OPERATIONAL.\n", slave);
-                     ec_slave[slave].state = EC_STATE_OPERATIONAL;
-                     ec_writestate(slave);
-                  }
-                  else if(ec_slave[slave].state > EC_STATE_NONE)
-                  {
-                     if (ec_reconfig_slave(slave, EC_TIMEOUTMON))
-                     {
-                        ec_slave[slave].islost = FALSE;
-                        printf("MESSAGE : slave %d reconfigured\n",slave);
-                     }
-                  }
-                  else if(!ec_slave[slave].islost)
+                  printf("ERROR : slave %d is in SAFE_OP + ERROR, attempting ack.\n", slave);
+                  ec_slave[slave].state = (EC_STATE_SAFE_OP + EC_STATE_ACK);
+                  ec_writestate(slave);
+               }
+               else if (ec_slave[slave].state == EC_STATE_SAFE_OP)
+               {
+                  printf("WARNING : slave %d is in SAFE_OP, change to OPERATIONAL.\n", slave);
+                  ec_slave[slave].state = EC_STATE_OPERATIONAL;
+                  ec_writestate(slave);
+               }
+               else if (ec_slave[slave].state > EC_STATE_NONE)
+               {
+                  if (ec_reconfig_slave(slave, EC_TIMEOUTMON))
                   {
-                     /* re-check state */
-                     ec_statecheck(slave, EC_STATE_OPERATIONAL, EC_TIMEOUTRET);
-                     if (ec_slave[slave].state == EC_STATE_NONE)
-                     {
-                        ec_slave[slave].islost = TRUE;
-                        printf("ERROR : slave %d lost\n",slave);
-                     }
+                     ec_slave[slave].islost = FALSE;
+                     printf("MESSAGE : slave %d reconfigured\n", slave);
                   }
                }
-               if (ec_slave[slave].islost)
+               else if (!ec_slave[slave].islost)
                {
-                  if(ec_slave[slave].state == EC_STATE_NONE)
+                  /* re-check state */
+                  ec_statecheck(slave, EC_STATE_OPERATIONAL, EC_TIMEOUTRET);
+                  if (ec_slave[slave].state == EC_STATE_NONE)
                   {
-                     if (ec_recover_slave(slave, EC_TIMEOUTMON))
-                     {
-                        ec_slave[slave].islost = FALSE;
-                        printf("MESSAGE : slave %d recovered\n",slave);
-                     }
+                     ec_slave[slave].islost = TRUE;
+                     printf("ERROR : slave %d lost\n", slave);
                   }
-                  else
+               }
+            }
+            if (ec_slave[slave].islost)
+            {
+               if (ec_slave[slave].state == EC_STATE_NONE)
+               {
+                  if (ec_recover_slave(slave, EC_TIMEOUTMON))
                   {
                      ec_slave[slave].islost = FALSE;
-                     printf("MESSAGE : slave %d found\n",slave);
+                     printf("MESSAGE : slave %d recovered\n", slave);
                   }
                }
+               else
+               {
+                  ec_slave[slave].islost = FALSE;
+                  printf("MESSAGE : slave %d found\n", slave);
+               }
             }
-            if(!ec_group[currentgroup].docheckstate)
-               printf("OK : all slaves resumed OPERATIONAL.\n");
-        }
-        osal_usleep(10000);
-    }
+         }
+         if (!ec_group[currentgroup].docheckstate)
+            printf("OK : all slaves resumed OPERATIONAL.\n");
+      }
+      osal_usleep(10000);
+   }
 
-    return 0;
+   return 0;
 }
 
 char ifbuf[1024];
 
 int main(int argc, char *argv[])
 {
-   ec_adaptert * adapter = NULL;
-   ec_adaptert * head = NULL;
+   ec_adaptert *adapter = NULL;
+   ec_adaptert *head = NULL;
    printf("SOEM (Simple Open EtherCAT Master)\nSimple test\n");
 
    if (argc > 1)
@@ -359,12 +356,12 @@ int main(int argc, char *argv[])
    else
    {
       printf("Usage: simple_test ifname1\n");
-       /* Print the list */
-      printf ("Available adapters\n");
-      head = adapter = ec_find_adapters ();
+      /* Print the list */
+      printf("Available adapters\n");
+      head = adapter = ec_find_adapters();
       while (adapter != NULL)
       {
-         printf ("Description : %s, Device to use for wpcap: %s\n", adapter->desc,adapter->name);
+         printf("Description : %s, Device to use for wpcap: %s\n", adapter->desc, adapter->name);
          adapter = adapter->next;
       }
       ec_free_adapters(adapter);
index 057db73aa82ffadfead1ff1e6f0a03557e5aaf83..90cc3a193141ba901f8795a16938f9fca1f3f15c 100644 (file)
@@ -25,86 +25,86 @@ boolean printMAP = FALSE;
 char usdo[128];
 char hstr[1024];
 
-chardtype2string(uint16 dtype)
+char *dtype2string(uint16 dtype)
 {
-    switch(dtype)
-    {
-        case ECT_BOOLEAN:
-            sprintf(hstr, "BOOLEAN");
-            break;
-        case ECT_INTEGER8:
-            sprintf(hstr, "INTEGER8");
-            break;
-        case ECT_INTEGER16:
-            sprintf(hstr, "INTEGER16");
-            break;
-        case ECT_INTEGER32:
-            sprintf(hstr, "INTEGER32");
-            break;
-        case ECT_INTEGER24:
-            sprintf(hstr, "INTEGER24");
-            break;
-        case ECT_INTEGER64:
-            sprintf(hstr, "INTEGER64");
-            break;
-        case ECT_UNSIGNED8:
-            sprintf(hstr, "UNSIGNED8");
-            break;
-        case ECT_UNSIGNED16:
-            sprintf(hstr, "UNSIGNED16");
-            break;
-        case ECT_UNSIGNED32:
-            sprintf(hstr, "UNSIGNED32");
-            break;
-        case ECT_UNSIGNED24:
-            sprintf(hstr, "UNSIGNED24");
-            break;
-        case ECT_UNSIGNED64:
-            sprintf(hstr, "UNSIGNED64");
-            break;
-        case ECT_REAL32:
-            sprintf(hstr, "REAL32");
-            break;
-        case ECT_REAL64:
-            sprintf(hstr, "REAL64");
-            break;
-        case ECT_BIT1:
-            sprintf(hstr, "BIT1");
-            break;
-        case ECT_BIT2:
-            sprintf(hstr, "BIT2");
-            break;
-        case ECT_BIT3:
-            sprintf(hstr, "BIT3");
-            break;
-        case ECT_BIT4:
-            sprintf(hstr, "BIT4");
-            break;
-        case ECT_BIT5:
-            sprintf(hstr, "BIT5");
-            break;
-        case ECT_BIT6:
-            sprintf(hstr, "BIT6");
-            break;
-        case ECT_BIT7:
-            sprintf(hstr, "BIT7");
-            break;
-        case ECT_BIT8:
-            sprintf(hstr, "BIT8");
-            break;
-        case ECT_VISIBLE_STRING:
-            sprintf(hstr, "VISIBLE_STRING");
-            break;
-        case ECT_OCTET_STRING:
-            sprintf(hstr, "OCTET_STRING");
-            break;
-        default:
-            sprintf(hstr, "Type 0x%4.4X", dtype);
-    }
-    return hstr;
+   switch (dtype)
+   {
+   case ECT_BOOLEAN:
+      sprintf(hstr, "BOOLEAN");
+      break;
+   case ECT_INTEGER8:
+      sprintf(hstr, "INTEGER8");
+      break;
+   case ECT_INTEGER16:
+      sprintf(hstr, "INTEGER16");
+      break;
+   case ECT_INTEGER32:
+      sprintf(hstr, "INTEGER32");
+      break;
+   case ECT_INTEGER24:
+      sprintf(hstr, "INTEGER24");
+      break;
+   case ECT_INTEGER64:
+      sprintf(hstr, "INTEGER64");
+      break;
+   case ECT_UNSIGNED8:
+      sprintf(hstr, "UNSIGNED8");
+      break;
+   case ECT_UNSIGNED16:
+      sprintf(hstr, "UNSIGNED16");
+      break;
+   case ECT_UNSIGNED32:
+      sprintf(hstr, "UNSIGNED32");
+      break;
+   case ECT_UNSIGNED24:
+      sprintf(hstr, "UNSIGNED24");
+      break;
+   case ECT_UNSIGNED64:
+      sprintf(hstr, "UNSIGNED64");
+      break;
+   case ECT_REAL32:
+      sprintf(hstr, "REAL32");
+      break;
+   case ECT_REAL64:
+      sprintf(hstr, "REAL64");
+      break;
+   case ECT_BIT1:
+      sprintf(hstr, "BIT1");
+      break;
+   case ECT_BIT2:
+      sprintf(hstr, "BIT2");
+      break;
+   case ECT_BIT3:
+      sprintf(hstr, "BIT3");
+      break;
+   case ECT_BIT4:
+      sprintf(hstr, "BIT4");
+      break;
+   case ECT_BIT5:
+      sprintf(hstr, "BIT5");
+      break;
+   case ECT_BIT6:
+      sprintf(hstr, "BIT6");
+      break;
+   case ECT_BIT7:
+      sprintf(hstr, "BIT7");
+      break;
+   case ECT_BIT8:
+      sprintf(hstr, "BIT8");
+      break;
+   case ECT_VISIBLE_STRING:
+      sprintf(hstr, "VISIBLE_STRING");
+      break;
+   case ECT_OCTET_STRING:
+      sprintf(hstr, "OCTET_STRING");
+      break;
+   default:
+      sprintf(hstr, "Type 0x%4.4X", dtype);
+   }
+   return hstr;
 }
 
-charSDO2string(uint16 slave, uint16 index, uint8 subidx, uint16 dtype)
+char *SDO2string(uint16 slave, uint16 index, uint8 subidx, uint16 dtype)
 {
    int l = sizeof(usdo) - 1, i;
    uint8 *u8;
@@ -127,79 +127,81 @@ char* SDO2string(uint16 slave, uint16 index, uint8 subidx, uint16 dtype)
    }
    else
    {
-      switch(dtype)
+      switch (dtype)
       {
-         case ECT_BOOLEAN:
-            u8 = (uint8*) &usdo[0];
-            if (*u8) sprintf(hstr, "TRUE");
-             else sprintf(hstr, "FALSE");
-            break;
-         case ECT_INTEGER8:
-            i8 = (int8*) &usdo[0];
-            sprintf(hstr, "0x%2.2x %d", *i8, *i8);
-            break;
-         case ECT_INTEGER16:
-            i16 = (int16*) &usdo[0];
-            sprintf(hstr, "0x%4.4x %d", *i16, *i16);
-            break;
-         case ECT_INTEGER32:
-         case ECT_INTEGER24:
-            i32 = (int32*) &usdo[0];
-            sprintf(hstr, "0x%8.8x %d", *i32, *i32);
-            break;
-         case ECT_INTEGER64:
-            i64 = (int64*) &usdo[0];
-            sprintf(hstr, "0x%16.16"PRIx64" %"PRId64, *i64, *i64);
-            break;
-         case ECT_UNSIGNED8:
-            u8 = (uint8*) &usdo[0];
-            sprintf(hstr, "0x%2.2x %u", *u8, *u8);
-            break;
-         case ECT_UNSIGNED16:
-            u16 = (uint16*) &usdo[0];
-            sprintf(hstr, "0x%4.4x %u", *u16, *u16);
-            break;
-         case ECT_UNSIGNED32:
-         case ECT_UNSIGNED24:
-            u32 = (uint32*) &usdo[0];
-            sprintf(hstr, "0x%8.8x %u", *u32, *u32);
-            break;
-         case ECT_UNSIGNED64:
-            u64 = (uint64*) &usdo[0];
-            sprintf(hstr, "0x%16.16"PRIx64" %"PRIu64, *u64, *u64);
-            break;
-         case ECT_REAL32:
-            sr = (float*) &usdo[0];
-            sprintf(hstr, "%f", *sr);
-            break;
-         case ECT_REAL64:
-            dr = (double*) &usdo[0];
-            sprintf(hstr, "%f", *dr);
-            break;
-         case ECT_BIT1:
-         case ECT_BIT2:
-         case ECT_BIT3:
-         case ECT_BIT4:
-         case ECT_BIT5:
-         case ECT_BIT6:
-         case ECT_BIT7:
-         case ECT_BIT8:
-            u8 = (uint8*) &usdo[0];
-            sprintf(hstr, "0x%x", *u8);
-            break;
-         case ECT_VISIBLE_STRING:
-            strcpy(hstr, usdo);
-            break;
-         case ECT_OCTET_STRING:
-            hstr[0] = 0x00;
-            for (i = 0 ; i < l ; i++)
-            {
-               sprintf(es, "0x%2.2x ", usdo[i]);
-               strcat( hstr, es);
-            }
-            break;
-         default:
-            sprintf(hstr, "Unknown type");
+      case ECT_BOOLEAN:
+         u8 = (uint8 *)&usdo[0];
+         if (*u8)
+            sprintf(hstr, "TRUE");
+         else
+            sprintf(hstr, "FALSE");
+         break;
+      case ECT_INTEGER8:
+         i8 = (int8 *)&usdo[0];
+         sprintf(hstr, "0x%2.2x %d", *i8, *i8);
+         break;
+      case ECT_INTEGER16:
+         i16 = (int16 *)&usdo[0];
+         sprintf(hstr, "0x%4.4x %d", *i16, *i16);
+         break;
+      case ECT_INTEGER32:
+      case ECT_INTEGER24:
+         i32 = (int32 *)&usdo[0];
+         sprintf(hstr, "0x%8.8x %d", *i32, *i32);
+         break;
+      case ECT_INTEGER64:
+         i64 = (int64 *)&usdo[0];
+         sprintf(hstr, "0x%16.16" PRIx64 " %" PRId64, *i64, *i64);
+         break;
+      case ECT_UNSIGNED8:
+         u8 = (uint8 *)&usdo[0];
+         sprintf(hstr, "0x%2.2x %u", *u8, *u8);
+         break;
+      case ECT_UNSIGNED16:
+         u16 = (uint16 *)&usdo[0];
+         sprintf(hstr, "0x%4.4x %u", *u16, *u16);
+         break;
+      case ECT_UNSIGNED32:
+      case ECT_UNSIGNED24:
+         u32 = (uint32 *)&usdo[0];
+         sprintf(hstr, "0x%8.8x %u", *u32, *u32);
+         break;
+      case ECT_UNSIGNED64:
+         u64 = (uint64 *)&usdo[0];
+         sprintf(hstr, "0x%16.16" PRIx64 " %" PRIu64, *u64, *u64);
+         break;
+      case ECT_REAL32:
+         sr = (float *)&usdo[0];
+         sprintf(hstr, "%f", *sr);
+         break;
+      case ECT_REAL64:
+         dr = (double *)&usdo[0];
+         sprintf(hstr, "%f", *dr);
+         break;
+      case ECT_BIT1:
+      case ECT_BIT2:
+      case ECT_BIT3:
+      case ECT_BIT4:
+      case ECT_BIT5:
+      case ECT_BIT6:
+      case ECT_BIT7:
+      case ECT_BIT8:
+         u8 = (uint8 *)&usdo[0];
+         sprintf(hstr, "0x%x", *u8);
+         break;
+      case ECT_VISIBLE_STRING:
+         strcpy(hstr, usdo);
+         break;
+      case ECT_OCTET_STRING:
+         hstr[0] = 0x00;
+         for (i = 0; i < l; i++)
+         {
+            sprintf(es, "0x%2.2x ", usdo[i]);
+            strcat(hstr, es);
+         }
+         break;
+      default:
+         sprintf(hstr, "Unknown type");
       }
       return hstr;
    }
@@ -208,364 +210,372 @@ char* SDO2string(uint16 slave, uint16 index, uint8 subidx, uint16 dtype)
 /** Read PDO assign structure */
 int si_PDOassign(uint16 slave, uint16 PDOassign, int mapoffset, int bitoffset)
 {
-    uint16 idxloop, nidx, subidxloop, rdat, idx, subidx;
-    uint8 subcnt;
-    int wkc, bsize = 0, rdl;
-    int32 rdat2;
-    uint8 bitlen, obj_subidx;
-    uint16 obj_idx;
-    int abs_offset, abs_bit;
-
-    rdl = sizeof(rdat); rdat = 0;
-    /* read PDO assign subindex 0 ( = number of PDO's) */
-    wkc = ec_SDOread(slave, PDOassign, 0x00, FALSE, &rdl, &rdat, EC_TIMEOUTRXM);
-    rdat = etohs(rdat);
-    /* positive result from slave ? */
-    if ((wkc > 0) && (rdat > 0))
-    {
-        /* number of available sub indexes */
-        nidx = rdat;
-        bsize = 0;
-        /* read all PDO's */
-        for (idxloop = 1; idxloop <= nidx; idxloop++)
-        {
-            rdl = sizeof(rdat); rdat = 0;
-            /* read PDO assign */
-            wkc = ec_SDOread(slave, PDOassign, (uint8)idxloop, FALSE, &rdl, &rdat, EC_TIMEOUTRXM);
-            /* result is index of PDO */
-            idx = etohl(rdat);
-            if (idx > 0)
+   uint16 idxloop, nidx, subidxloop, rdat, idx, subidx;
+   uint8 subcnt;
+   int wkc, bsize = 0, rdl;
+   int32 rdat2;
+   uint8 bitlen, obj_subidx;
+   uint16 obj_idx;
+   int abs_offset, abs_bit;
+
+   rdl = sizeof(rdat);
+   rdat = 0;
+   /* read PDO assign subindex 0 ( = number of PDO's) */
+   wkc = ec_SDOread(slave, PDOassign, 0x00, FALSE, &rdl, &rdat, EC_TIMEOUTRXM);
+   rdat = etohs(rdat);
+   /* positive result from slave ? */
+   if ((wkc > 0) && (rdat > 0))
+   {
+      /* number of available sub indexes */
+      nidx = rdat;
+      bsize = 0;
+      /* read all PDO's */
+      for (idxloop = 1; idxloop <= nidx; idxloop++)
+      {
+         rdl = sizeof(rdat);
+         rdat = 0;
+         /* read PDO assign */
+         wkc = ec_SDOread(slave, PDOassign, (uint8)idxloop, FALSE, &rdl, &rdat, EC_TIMEOUTRXM);
+         /* result is index of PDO */
+         idx = etohl(rdat);
+         if (idx > 0)
+         {
+            rdl = sizeof(subcnt);
+            subcnt = 0;
+            /* read number of subindexes of PDO */
+            wkc = ec_SDOread(slave, idx, 0x00, FALSE, &rdl, &subcnt, EC_TIMEOUTRXM);
+            subidx = subcnt;
+            /* for each subindex */
+            for (subidxloop = 1; subidxloop <= subidx; subidxloop++)
             {
-                rdl = sizeof(subcnt); subcnt = 0;
-                /* read number of subindexes of PDO */
-                wkc = ec_SDOread(slave,idx, 0x00, FALSE, &rdl, &subcnt, EC_TIMEOUTRXM);
-                subidx = subcnt;
-                /* for each subindex */
-                for (subidxloop = 1; subidxloop <= subidx; subidxloop++)
-                {
-                    rdl = sizeof(rdat2); rdat2 = 0;
-                    /* read SDO that is mapped in PDO */
-                    wkc = ec_SDOread(slave, idx, (uint8)subidxloop, FALSE, &rdl, &rdat2, EC_TIMEOUTRXM);
-                    rdat2 = etohl(rdat2);
-                    /* extract bitlength of SDO */
-                    bitlen = LO_BYTE(rdat2);
-                    bsize += bitlen;
-                    obj_idx = (uint16)(rdat2 >> 16);
-                    obj_subidx = (uint8)((rdat2 >> 8) & 0x000000ff);
-                    abs_offset = mapoffset + (bitoffset / 8);
-                    abs_bit = bitoffset % 8;
-                    ODlist.Slave = slave;
-                    ODlist.Index[0] = obj_idx;
-                    OElist.Entries = 0;
-                    wkc = 0;
-                    /* read object entry from dictionary if not a filler (0x0000:0x00) */
-                    if(obj_idx || obj_subidx)
-                        wkc = ec_readOEsingle(0, obj_subidx, &ODlist, &OElist);
-                    printf("  [0x%4.4X.%1d] 0x%4.4X:0x%2.2X 0x%2.2X", abs_offset, abs_bit, obj_idx, obj_subidx, bitlen);
-                    if((wkc > 0) && OElist.Entries)
-                    {
-                        printf(" %-12s %s\n", dtype2string(OElist.DataType[obj_subidx]), OElist.Name[obj_subidx]);
-                    }
-                    else
-                        printf("\n");
-                    bitoffset += bitlen;
-                };
+               rdl = sizeof(rdat2);
+               rdat2 = 0;
+               /* read SDO that is mapped in PDO */
+               wkc = ec_SDOread(slave, idx, (uint8)subidxloop, FALSE, &rdl, &rdat2, EC_TIMEOUTRXM);
+               rdat2 = etohl(rdat2);
+               /* extract bitlength of SDO */
+               bitlen = LO_BYTE(rdat2);
+               bsize += bitlen;
+               obj_idx = (uint16)(rdat2 >> 16);
+               obj_subidx = (uint8)((rdat2 >> 8) & 0x000000ff);
+               abs_offset = mapoffset + (bitoffset / 8);
+               abs_bit = bitoffset % 8;
+               ODlist.Slave = slave;
+               ODlist.Index[0] = obj_idx;
+               OElist.Entries = 0;
+               wkc = 0;
+               /* read object entry from dictionary if not a filler (0x0000:0x00) */
+               if (obj_idx || obj_subidx)
+                  wkc = ec_readOEsingle(0, obj_subidx, &ODlist, &OElist);
+               printf("  [0x%4.4X.%1d] 0x%4.4X:0x%2.2X 0x%2.2X", abs_offset, abs_bit, obj_idx, obj_subidx, bitlen);
+               if ((wkc > 0) && OElist.Entries)
+               {
+                  printf(" %-12s %s\n", dtype2string(OElist.DataType[obj_subidx]), OElist.Name[obj_subidx]);
+               }
+               else
+                  printf("\n");
+               bitoffset += bitlen;
             };
-        };
-    };
-    /* return total found bitlength (PDO) */
-    return bsize;
+         };
+      };
+   };
+   /* return total found bitlength (PDO) */
+   return bsize;
 }
 
 int si_map_sdo(int slave)
 {
-    int wkc, rdl;
-    int retVal = 0;
-    uint8 nSM, iSM, tSM;
-    int Tsize, outputs_bo, inputs_bo;
-    uint8 SMt_bug_add;
-
-    printf("PDO mapping according to CoE :\n");
-    SMt_bug_add = 0;
-    outputs_bo = 0;
-    inputs_bo = 0;
-    rdl = sizeof(nSM); nSM = 0;
-    /* read SyncManager Communication Type object count */
-    wkc = ec_SDOread(slave, ECT_SDO_SMCOMMTYPE, 0x00, FALSE, &rdl, &nSM, EC_TIMEOUTRXM);
-    /* positive result from slave ? */
-    if ((wkc > 0) && (nSM > 2))
-    {
-        /* make nSM equal to number of defined SM */
-        nSM--;
-        /* limit to maximum number of SM defined, if true the slave can't be configured */
-        if (nSM > EC_MAXSM)
-            nSM = EC_MAXSM;
-        /* iterate for every SM type defined */
-        for (iSM = 2 ; iSM <= nSM ; iSM++)
-        {
-            rdl = sizeof(tSM); tSM = 0;
-            /* read SyncManager Communication Type */
-            wkc = ec_SDOread(slave, ECT_SDO_SMCOMMTYPE, iSM + 1, FALSE, &rdl, &tSM, EC_TIMEOUTRXM);
-            if (wkc > 0)
+   int wkc, rdl;
+   int retVal = 0;
+   uint8 nSM, iSM, tSM;
+   int Tsize, outputs_bo, inputs_bo;
+   uint8 SMt_bug_add;
+
+   printf("PDO mapping according to CoE :\n");
+   SMt_bug_add = 0;
+   outputs_bo = 0;
+   inputs_bo = 0;
+   rdl = sizeof(nSM);
+   nSM = 0;
+   /* read SyncManager Communication Type object count */
+   wkc = ec_SDOread(slave, ECT_SDO_SMCOMMTYPE, 0x00, FALSE, &rdl, &nSM, EC_TIMEOUTRXM);
+   /* positive result from slave ? */
+   if ((wkc > 0) && (nSM > 2))
+   {
+      /* make nSM equal to number of defined SM */
+      nSM--;
+      /* limit to maximum number of SM defined, if true the slave can't be configured */
+      if (nSM > EC_MAXSM)
+         nSM = EC_MAXSM;
+      /* iterate for every SM type defined */
+      for (iSM = 2; iSM <= nSM; iSM++)
+      {
+         rdl = sizeof(tSM);
+         tSM = 0;
+         /* read SyncManager Communication Type */
+         wkc = ec_SDOread(slave, ECT_SDO_SMCOMMTYPE, iSM + 1, FALSE, &rdl, &tSM, EC_TIMEOUTRXM);
+         if (wkc > 0)
+         {
+            if ((iSM == 2) && (tSM == 2)) // SM2 has type 2 == mailbox out, this is a bug in the slave!
             {
-                if((iSM == 2) && (tSM == 2)) // SM2 has type 2 == mailbox out, this is a bug in the slave!
-                {
-                    SMt_bug_add = 1; // try to correct, this works if the types are 0 1 2 3 and should be 1 2 3 4
-                    printf("Activated SM type workaround, possible incorrect mapping.\n");
-                }
-                if(tSM)
-                    tSM += SMt_bug_add; // only add if SMt > 0
+               SMt_bug_add = 1; // try to correct, this works if the types are 0 1 2 3 and should be 1 2 3 4
+               printf("Activated SM type workaround, possible incorrect mapping.\n");
+            }
+            if (tSM)
+               tSM += SMt_bug_add; // only add if SMt > 0
 
-                if (tSM == 3) // outputs
-                {
-                    /* read the assign RXPDO */
-                    printf("  SM%1d outputs\n     addr b   index: sub bitl data_type    name\n", iSM);
-                    Tsize = si_PDOassign(slave, ECT_SDO_PDOASSIGN + iSM, (int)(ec_slave[slave].outputs - (uint8 *)&IOmap[0]), outputs_bo );
-                    outputs_bo += Tsize;
-                }
-                if (tSM == 4) // inputs
-                {
-                    /* read the assign TXPDO */
-                    printf("  SM%1d inputs\n     addr b   index: sub bitl data_type    name\n", iSM);
-                    Tsize = si_PDOassign(slave, ECT_SDO_PDOASSIGN + iSM, (int)(ec_slave[slave].inputs - (uint8 *)&IOmap[0]), inputs_bo );
-                    inputs_bo += Tsize;
-                }
+            if (tSM == 3) // outputs
+            {
+               /* read the assign RXPDO */
+               printf("  SM%1d outputs\n     addr b   index: sub bitl data_type    name\n", iSM);
+               Tsize = si_PDOassign(slave, ECT_SDO_PDOASSIGN + iSM, (int)(ec_slave[slave].outputs - (uint8 *)&IOmap[0]), outputs_bo);
+               outputs_bo += Tsize;
             }
-        }
-    }
+            if (tSM == 4) // inputs
+            {
+               /* read the assign TXPDO */
+               printf("  SM%1d inputs\n     addr b   index: sub bitl data_type    name\n", iSM);
+               Tsize = si_PDOassign(slave, ECT_SDO_PDOASSIGN + iSM, (int)(ec_slave[slave].inputs - (uint8 *)&IOmap[0]), inputs_bo);
+               inputs_bo += Tsize;
+            }
+         }
+      }
+   }
 
-    /* found some I/O bits ? */
-    if ((outputs_bo > 0) || (inputs_bo > 0))
-        retVal = 1;
-    return retVal;
+   /* found some I/O bits ? */
+   if ((outputs_bo > 0) || (inputs_bo > 0))
+      retVal = 1;
+   return retVal;
 }
 
 int si_siiPDO(uint16 slave, uint8 t, int mapoffset, int bitoffset)
 {
-    uint16 a , w, c, e, er, Size;
-    uint8 eectl;
-    uint16 obj_idx;
-    uint8 obj_subidx;
-    uint8 obj_name;
-    uint8 obj_datatype;
-    uint8 bitlen;
-    int totalsize;
-    ec_eepromPDOt eepPDO;
-    ec_eepromPDOt *PDO;
-    int abs_offset, abs_bit;
-    char str_name[EC_MAXNAME + 1];
-
-    eectl = ec_slave[slave].eep_pdi;
-    Size = 0;
-    totalsize = 0;
-    PDO = &eepPDO;
-    PDO->nPDO = 0;
-    PDO->Length = 0;
-    PDO->Index[1] = 0;
-    for (c = 0 ; c < EC_MAXSM ; c++) PDO->SMbitsize[c] = 0;
-    if (t > 1)
-        t = 1;
-    PDO->Startpos = ec_siifind(slave, ECT_SII_PDO + t);
-    if (PDO->Startpos > 0)
-    {
-        a = PDO->Startpos;
-        w = ec_siigetbyte(slave, a++);
-        w += (ec_siigetbyte(slave, a++) << 8);
-        PDO->Length = w;
-        c = 1;
-        /* traverse through all PDOs */
-        do
-        {
-            PDO->nPDO++;
-            PDO->Index[PDO->nPDO] = ec_siigetbyte(slave, a++);
-            PDO->Index[PDO->nPDO] += (ec_siigetbyte(slave, a++) << 8);
-            PDO->BitSize[PDO->nPDO] = 0;
-            c++;
-            /* number of entries in PDO */
-            e = ec_siigetbyte(slave, a++);
-            PDO->SyncM[PDO->nPDO] = ec_siigetbyte(slave, a++);
-            a++;
-            obj_name = ec_siigetbyte(slave, a++);
-            a += 2;
-            c += 2;
-            if (PDO->SyncM[PDO->nPDO] < EC_MAXSM) /* active and in range SM? */
+   uint16 a, w, c, e, er, Size;
+   uint8 eectl;
+   uint16 obj_idx;
+   uint8 obj_subidx;
+   uint8 obj_name;
+   uint8 obj_datatype;
+   uint8 bitlen;
+   int totalsize;
+   ec_eepromPDOt eepPDO;
+   ec_eepromPDOt *PDO;
+   int abs_offset, abs_bit;
+   char str_name[EC_MAXNAME + 1];
+
+   eectl = ec_slave[slave].eep_pdi;
+   Size = 0;
+   totalsize = 0;
+   PDO = &eepPDO;
+   PDO->nPDO = 0;
+   PDO->Length = 0;
+   PDO->Index[1] = 0;
+   for (c = 0; c < EC_MAXSM; c++)
+      PDO->SMbitsize[c] = 0;
+   if (t > 1)
+      t = 1;
+   PDO->Startpos = ec_siifind(slave, ECT_SII_PDO + t);
+   if (PDO->Startpos > 0)
+   {
+      a = PDO->Startpos;
+      w = ec_siigetbyte(slave, a++);
+      w += (ec_siigetbyte(slave, a++) << 8);
+      PDO->Length = w;
+      c = 1;
+      /* traverse through all PDOs */
+      do
+      {
+         PDO->nPDO++;
+         PDO->Index[PDO->nPDO] = ec_siigetbyte(slave, a++);
+         PDO->Index[PDO->nPDO] += (ec_siigetbyte(slave, a++) << 8);
+         PDO->BitSize[PDO->nPDO] = 0;
+         c++;
+         /* number of entries in PDO */
+         e = ec_siigetbyte(slave, a++);
+         PDO->SyncM[PDO->nPDO] = ec_siigetbyte(slave, a++);
+         a++;
+         obj_name = ec_siigetbyte(slave, a++);
+         a += 2;
+         c += 2;
+         if (PDO->SyncM[PDO->nPDO] < EC_MAXSM) /* active and in range SM? */
+         {
+            str_name[0] = 0;
+            if (obj_name)
+               ec_siistring(str_name, slave, obj_name);
+            if (t)
+               printf("  SM%1d RXPDO 0x%4.4X %s\n", PDO->SyncM[PDO->nPDO], PDO->Index[PDO->nPDO], str_name);
+            else
+               printf("  SM%1d TXPDO 0x%4.4X %s\n", PDO->SyncM[PDO->nPDO], PDO->Index[PDO->nPDO], str_name);
+            printf("     addr b   index: sub bitl data_type    name\n");
+            /* read all entries defined in PDO */
+            for (er = 1; er <= e; er++)
             {
-                str_name[0] = 0;
-                if(obj_name)
+               c += 4;
+               obj_idx = ec_siigetbyte(slave, a++);
+               obj_idx += (ec_siigetbyte(slave, a++) << 8);
+               obj_subidx = ec_siigetbyte(slave, a++);
+               obj_name = ec_siigetbyte(slave, a++);
+               obj_datatype = ec_siigetbyte(slave, a++);
+               bitlen = ec_siigetbyte(slave, a++);
+               abs_offset = mapoffset + (bitoffset / 8);
+               abs_bit = bitoffset % 8;
+
+               PDO->BitSize[PDO->nPDO] += bitlen;
+               a += 2;
+
+               str_name[0] = 0;
+               if (obj_name)
                   ec_siistring(str_name, slave, obj_name);
-                if (t)
-                  printf("  SM%1d RXPDO 0x%4.4X %s\n", PDO->SyncM[PDO->nPDO], PDO->Index[PDO->nPDO], str_name);
-                else
-                  printf("  SM%1d TXPDO 0x%4.4X %s\n", PDO->SyncM[PDO->nPDO], PDO->Index[PDO->nPDO], str_name);
-                printf("     addr b   index: sub bitl data_type    name\n");
-                /* read all entries defined in PDO */
-                for (er = 1; er <= e; er++)
-                {
-                    c += 4;
-                    obj_idx = ec_siigetbyte(slave, a++);
-                    obj_idx += (ec_siigetbyte(slave, a++) << 8);
-                    obj_subidx = ec_siigetbyte(slave, a++);
-                    obj_name = ec_siigetbyte(slave, a++);
-                    obj_datatype = ec_siigetbyte(slave, a++);
-                    bitlen = ec_siigetbyte(slave, a++);
-                    abs_offset = mapoffset + (bitoffset / 8);
-                    abs_bit = bitoffset % 8;
-
-                    PDO->BitSize[PDO->nPDO] += bitlen;
-                    a += 2;
 
-                    str_name[0] = 0;
-                    if(obj_name)
-                      ec_siistring(str_name, slave, obj_name);
-
-                    printf("  [0x%4.4X.%1d] 0x%4.4X:0x%2.2X 0x%2.2X", abs_offset, abs_bit, obj_idx, obj_subidx, bitlen);
-                    printf(" %-12s %s\n", dtype2string(obj_datatype), str_name);
-                    bitoffset += bitlen;
-                    totalsize += bitlen;
-                }
-                PDO->SMbitsize[ PDO->SyncM[PDO->nPDO] ] += PDO->BitSize[PDO->nPDO];
-                Size += PDO->BitSize[PDO->nPDO];
-                c++;
+               printf("  [0x%4.4X.%1d] 0x%4.4X:0x%2.2X 0x%2.2X", abs_offset, abs_bit, obj_idx, obj_subidx, bitlen);
+               printf(" %-12s %s\n", dtype2string(obj_datatype), str_name);
+               bitoffset += bitlen;
+               totalsize += bitlen;
             }
-            else /* PDO deactivated because SM is 0xff or > EC_MAXSM */
-            {
-                c += 4 * e;
-                a += 8 * e;
-                c++;
-            }
-            if (PDO->nPDO >= (EC_MAXEEPDO - 1)) c = PDO->Length; /* limit number of PDO entries in buffer */
-        }
-        while (c < PDO->Length);
-    }
-    if (eectl) ec_eeprom2pdi(slave); /* if eeprom control was previously pdi then restore */
-    return totalsize;
+            PDO->SMbitsize[PDO->SyncM[PDO->nPDO]] += PDO->BitSize[PDO->nPDO];
+            Size += PDO->BitSize[PDO->nPDO];
+            c++;
+         }
+         else /* PDO deactivated because SM is 0xff or > EC_MAXSM */
+         {
+            c += 4 * e;
+            a += 8 * e;
+            c++;
+         }
+         if (PDO->nPDO >= (EC_MAXEEPDO - 1)) c = PDO->Length; /* limit number of PDO entries in buffer */
+      } while (c < PDO->Length);
+   }
+   if (eectl) ec_eeprom2pdi(slave); /* if eeprom control was previously pdi then restore */
+   return totalsize;
 }
 
-
 int si_map_sii(int slave)
 {
-    int retVal = 0;
-    int Tsize, outputs_bo, inputs_bo;
-
-    printf("PDO mapping according to SII :\n");
-
-    outputs_bo = 0;
-    inputs_bo = 0;
-    /* read the assign RXPDOs */
-    Tsize = si_siiPDO(slave, 1, (int)(ec_slave[slave].outputs - (uint8*)&IOmap), outputs_bo );
-    outputs_bo += Tsize;
-    /* read the assign TXPDOs */
-    Tsize = si_siiPDO(slave, 0, (int)(ec_slave[slave].inputs - (uint8*)&IOmap), inputs_bo );
-    inputs_bo += Tsize;
-    /* found some I/O bits ? */
-    if ((outputs_bo > 0) || (inputs_bo > 0))
-        retVal = 1;
-    return retVal;
+   int retVal = 0;
+   int Tsize, outputs_bo, inputs_bo;
+
+   printf("PDO mapping according to SII :\n");
+
+   outputs_bo = 0;
+   inputs_bo = 0;
+   /* read the assign RXPDOs */
+   Tsize = si_siiPDO(slave, 1, (int)(ec_slave[slave].outputs - (uint8 *)&IOmap), outputs_bo);
+   outputs_bo += Tsize;
+   /* read the assign TXPDOs */
+   Tsize = si_siiPDO(slave, 0, (int)(ec_slave[slave].inputs - (uint8 *)&IOmap), inputs_bo);
+   inputs_bo += Tsize;
+   /* found some I/O bits ? */
+   if ((outputs_bo > 0) || (inputs_bo > 0))
+      retVal = 1;
+   return retVal;
 }
 
 void si_sdo(int cnt)
 {
-    int i, j;
+   int i, j;
 
-    ODlist.Entries = 0;
-    memset(&ODlist, 0, sizeof(ODlist));
-    if( ec_readODlist(cnt, &ODlist))
-    {
-        printf(" CoE Object Description found, %d entries.\n",ODlist.Entries);
-        for( i = 0 ; i < ODlist.Entries ; i++)
-        {
-            ec_readODdescription(i, &ODlist);
-            while(EcatError) printf("%s", ec_elist2string());
-            printf(" Index: %4.4x Datatype: %4.4x Objectcode: %2.2x Name: %s\n",
+   ODlist.Entries = 0;
+   memset(&ODlist, 0, sizeof(ODlist));
+   if (ec_readODlist(cnt, &ODlist))
+   {
+      printf(" CoE Object Description found, %d entries.\n", ODlist.Entries);
+      for (i = 0; i < ODlist.Entries; i++)
+      {
+         ec_readODdescription(i, &ODlist);
+         while (EcatError)
+            printf("%s", ec_elist2string());
+         printf(" Index: %4.4x Datatype: %4.4x Objectcode: %2.2x Name: %s\n",
                 ODlist.Index[i], ODlist.DataType[i], ODlist.ObjectCode[i], ODlist.Name[i]);
-            memset(&OElist, 0, sizeof(OElist));
-            ec_readOE(i, &ODlist, &OElist);
-            while(EcatError) printf("%s", ec_elist2string());
-            for( j = 0 ; j < ODlist.MaxSub[i]+1 ; j++)
+         memset(&OElist, 0, sizeof(OElist));
+         ec_readOE(i, &ODlist, &OElist);
+         while (EcatError)
+            printf("%s", ec_elist2string());
+         for (j = 0; j < ODlist.MaxSub[i] + 1; j++)
+         {
+            if ((OElist.DataType[j] > 0) && (OElist.BitLength[j] > 0))
             {
-                if ((OElist.DataType[j] > 0) && (OElist.BitLength[j] > 0))
-                {
-                    printf("  Sub: %2.2x Datatype: %4.4x Bitlength: %4.4x Obj.access: %4.4x Name: %s\n",
-                        j, OElist.DataType[j], OElist.BitLength[j], OElist.ObjAccess[j], OElist.Name[j]);
-                    if ((OElist.ObjAccess[j] & 0x0007))
-                    {
-                        printf("          Value :%s\n", SDO2string(cnt, ODlist.Index[i], j, OElist.DataType[j]));
-                    }
-                }
+               printf("  Sub: %2.2x Datatype: %4.4x Bitlength: %4.4x Obj.access: %4.4x Name: %s\n",
+                      j, OElist.DataType[j], OElist.BitLength[j], OElist.ObjAccess[j], OElist.Name[j]);
+               if ((OElist.ObjAccess[j] & 0x0007))
+               {
+                  printf("          Value :%s\n", SDO2string(cnt, ODlist.Index[i], j, OElist.DataType[j]));
+               }
             }
-        }
-    }
-    else
-    {
-        while(EcatError) printf("%s", ec_elist2string());
-    }
+         }
+      }
+   }
+   else
+   {
+      while (EcatError)
+         printf("%s", ec_elist2string());
+   }
 }
 
 void slaveinfo(char *ifname)
 {
    int cnt, i, j, nSM;
-    uint16 ssigen;
-    int expectedWKC;
+   uint16 ssigen;
+   int expectedWKC;
 
    printf("Starting slaveinfo\n");
 
    /* initialise SOEM, bind socket to ifname */
    if (ec_init(ifname))
    {
-      printf("ec_init on %s succeeded.\n",ifname);
+      printf("ec_init on %s succeeded.\n", ifname);
       /* find and auto-config slaves */
-      if ( ec_config(FALSE, &IOmap) > 0 )
+      if (ec_config(FALSE, &IOmap) > 0)
       {
          ec_configdc();
-         while(EcatError) printf("%s", ec_elist2string());
-         printf("%d slaves found and configured.\n",ec_slavecount);
+         while (EcatError)
+            printf("%s", ec_elist2string());
+         printf("%d slaves found and configured.\n", ec_slavecount);
          expectedWKC = (ec_group[0].outputsWKC * 2) + ec_group[0].inputsWKC;
          printf("Calculated workcounter %d\n", expectedWKC);
          /* wait for all slaves to reach SAFE_OP state */
-         ec_statecheck(0, EC_STATE_SAFE_OP,  EC_TIMEOUTSTATE * 3);
-         if (ec_slave[0].state != EC_STATE_SAFE_OP )
+         ec_statecheck(0, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE * 3);
+         if (ec_slave[0].state != EC_STATE_SAFE_OP)
          {
             printf("Not all slaves reached safe operational state.\n");
             ec_readstate();
-            for(i = 1; i<=ec_slavecount ; i++)
+            for (i = 1; i <= ec_slavecount; i++)
             {
-               if(ec_slave[i].state != EC_STATE_SAFE_OP)
+               if (ec_slave[i].state != EC_STATE_SAFE_OP)
                {
                   printf("Slave %d State=%2x StatusCode=%4x : %s\n",
-                     i, ec_slave[i].state, ec_slave[i].ALstatuscode, ec_ALstatuscode2string(ec_slave[i].ALstatuscode));
+                         i, ec_slave[i].state, ec_slave[i].ALstatuscode, ec_ALstatuscode2string(ec_slave[i].ALstatuscode));
                }
             }
          }
 
-
          ec_readstate();
-         for( cnt = 1 ; cnt <= ec_slavecount ; cnt++)
+         for (cnt = 1; cnt <= ec_slavecount; cnt++)
          {
             printf("\nSlave:%d\n Name:%s\n Output size: %dbits\n Input size: %dbits\n State: %d\n Delay: %d[ns]\n Has DC: %d\n",
-                  cnt, ec_slave[cnt].name, ec_slave[cnt].Obits, ec_slave[cnt].Ibits,
-                  ec_slave[cnt].state, ec_slave[cnt].pdelay, ec_slave[cnt].hasdc);
+                   cnt, ec_slave[cnt].name, ec_slave[cnt].Obits, ec_slave[cnt].Ibits,
+                   ec_slave[cnt].state, ec_slave[cnt].pdelay, ec_slave[cnt].hasdc);
             if (ec_slave[cnt].hasdc) printf(" DCParentport:%d\n", ec_slave[cnt].parentport);
-            printf(" Activeports:%d.%d.%d.%d\n", (ec_slave[cnt].activeports & 0x01) > 0 ,
-                                         (ec_slave[cnt].activeports & 0x02) > 0 ,
-                                         (ec_slave[cnt].activeports & 0x04) > 0 ,
-                                         (ec_slave[cnt].activeports & 0x08) > 0 );
+            printf(" Activeports:%d.%d.%d.%d\n", (ec_slave[cnt].activeports & 0x01) > 0,
+                   (ec_slave[cnt].activeports & 0x02) > 0,
+                   (ec_slave[cnt].activeports & 0x04) > 0,
+                   (ec_slave[cnt].activeports & 0x08) > 0);
             printf(" Configured address: %4.4x\n", ec_slave[cnt].configadr);
             printf(" Man: %8.8x ID: %8.8x Rev: %8.8x\n", (int)ec_slave[cnt].eep_man, (int)ec_slave[cnt].eep_id, (int)ec_slave[cnt].eep_rev);
-            for(nSM = 0 ; nSM < EC_MAXSM ; nSM++)
+            for (nSM = 0; nSM < EC_MAXSM; nSM++)
             {
-               if(ec_slave[cnt].SM[nSM].StartAddr > 0)
-                  printf(" SM%1d A:%4.4x L:%4d F:%8.8x Type:%d\n",nSM, ec_slave[cnt].SM[nSM].StartAddr, ec_slave[cnt].SM[nSM].SMlength,
+               if (ec_slave[cnt].SM[nSM].StartAddr > 0)
+                  printf(" SM%1d A:%4.4x L:%4d F:%8.8x Type:%d\n", nSM, ec_slave[cnt].SM[nSM].StartAddr, ec_slave[cnt].SM[nSM].SMlength,
                          (int)ec_slave[cnt].SM[nSM].SMflags, ec_slave[cnt].SMtype[nSM]);
             }
-            for(j = 0 ; j < ec_slave[cnt].FMMUunused ; j++)
+            for (j = 0; j < ec_slave[cnt].FMMUunused; j++)
             {
                printf(" FMMU%1d Ls:%8.8x Ll:%4d Lsb:%d Leb:%d Ps:%4.4x Psb:%d Ty:%2.2x Act:%2.2x\n", j,
-                       (int)ec_slave[cnt].FMMU[j].LogStart, ec_slave[cnt].FMMU[j].LogLength, ec_slave[cnt].FMMU[j].LogStartbit,
-                       ec_slave[cnt].FMMU[j].LogEndbit, ec_slave[cnt].FMMU[j].PhysStart, ec_slave[cnt].FMMU[j].PhysStartBit,
-                       ec_slave[cnt].FMMU[j].FMMUtype, ec_slave[cnt].FMMU[j].FMMUactive);
+                      (int)ec_slave[cnt].FMMU[j].LogStart, ec_slave[cnt].FMMU[j].LogLength, ec_slave[cnt].FMMU[j].LogStartbit,
+                      ec_slave[cnt].FMMU[j].LogEndbit, ec_slave[cnt].FMMU[j].PhysStart, ec_slave[cnt].FMMU[j].PhysStartBit,
+                      ec_slave[cnt].FMMU[j].FMMUtype, ec_slave[cnt].FMMU[j].FMMUactive);
             }
             printf(" FMMUfunc 0:%d 1:%d 2:%d 3:%d\n",
-                     ec_slave[cnt].FMMU0func, ec_slave[cnt].FMMU1func, ec_slave[cnt].FMMU2func, ec_slave[cnt].FMMU3func);
+                   ec_slave[cnt].FMMU0func, ec_slave[cnt].FMMU1func, ec_slave[cnt].FMMU2func, ec_slave[cnt].FMMU3func);
             printf(" MBX length wr: %d rd: %d MBX protocols : %2.2x\n", ec_slave[cnt].mbx_l, ec_slave[cnt].mbx_rl, ec_slave[cnt].mbx_proto);
             ssigen = ec_siifind(cnt, ECT_SII_GENERAL);
             /* SII general section */
@@ -575,7 +585,7 @@ void slaveinfo(char *ifname)
                ec_slave[cnt].FoEdetails = ec_siigetbyte(cnt, ssigen + 0x08);
                ec_slave[cnt].EoEdetails = ec_siigetbyte(cnt, ssigen + 0x09);
                ec_slave[cnt].SoEdetails = ec_siigetbyte(cnt, ssigen + 0x0a);
-               if((ec_siigetbyte(cnt, ssigen + 0x0d) & 0x02) > 0)
+               if ((ec_siigetbyte(cnt, ssigen + 0x0d) & 0x02) > 0)
                {
                   ec_slave[cnt].blockLRW = 1;
                   ec_slave[0].blockLRW++;
@@ -585,17 +595,17 @@ void slaveinfo(char *ifname)
                ec_slave[0].Ebuscurrent += ec_slave[cnt].Ebuscurrent;
             }
             printf(" CoE details: %2.2x FoE details: %2.2x EoE details: %2.2x SoE details: %2.2x\n",
-                    ec_slave[cnt].CoEdetails, ec_slave[cnt].FoEdetails, ec_slave[cnt].EoEdetails, ec_slave[cnt].SoEdetails);
+                   ec_slave[cnt].CoEdetails, ec_slave[cnt].FoEdetails, ec_slave[cnt].EoEdetails, ec_slave[cnt].SoEdetails);
             printf(" Ebus current: %d[mA]\n only LRD/LWR:%d\n",
-                    ec_slave[cnt].Ebuscurrent, ec_slave[cnt].blockLRW);
+                   ec_slave[cnt].Ebuscurrent, ec_slave[cnt].blockLRW);
             if ((ec_slave[cnt].mbx_proto & ECT_MBXPROT_COE) && printSDO)
-                    si_sdo(cnt);
-                if(printMAP)
+               si_sdo(cnt);
+            if (printMAP)
             {
-                    if (ec_slave[cnt].mbx_proto & ECT_MBXPROT_COE)
-                        si_map_sdo(cnt);
-                    else
-                        si_map_sii(cnt);
+               if (ec_slave[cnt].mbx_proto & ECT_MBXPROT_COE)
+                  si_map_sdo(cnt);
+               else
+                  si_map_sii(cnt);
             }
          }
       }
@@ -609,7 +619,7 @@ void slaveinfo(char *ifname)
    }
    else
    {
-      printf("No socket connection on %s\nExcecute as root\n",ifname);
+      printf("No socket connection on %s\nExcecute as root\n", ifname);
    }
 }
 
@@ -617,8 +627,8 @@ char ifbuf[1024];
 
 int main(int argc, char *argv[])
 {
-   ec_adaptert * adapter = NULL;
-   ec_adaptert * head = NULL;
+   ec_adaptert *adapter = NULL;
+   ec_adaptert *head = NULL;
    printf("SOEM (Simple Open EtherCAT Master)\nSlaveinfo\n");
 
    if (argc > 1)
@@ -632,12 +642,12 @@ int main(int argc, char *argv[])
    else
    {
       printf("Usage: slaveinfo ifname [options]\nifname = eth0 for example\nOptions :\n -sdo : print SDO info\n -map : print mapping\n");
-       /* Print the list */
-      printf ("Available adapters\n");
-      head = adapter = ec_find_adapters ();
+      /* Print the list */
+      printf("Available adapters\n");
+      head = adapter = ec_find_adapters();
       while (adapter != NULL)
       {
-         printf ("Description : %s, Device to use for wpcap: %s\n", adapter->desc,adapter->name);
+         printf("Description : %s, Device to use for wpcap: %s\n", adapter->desc, adapter->name);
          adapter = adapter->next;
       }
       ec_free_adapters(head);