SOEM  v1.4.0
Data Structures | Macros | Functions
ethercateoe.h File Reference

Headerfile for ethercatfoe.c. More...

#include <ethercattype.h>

Data Structures

struct  eoe_ip4_addr_t
 
struct  eoe_ethaddr_t
 
struct  eoe_param_t
 
struct  ec_EOEt
 

Macros

#define EOE_DNS_NAME_LENGTH   32
 
#define EOE_ETHADDR_LENGTH   6
 
#define EOE_MAKEU32(a, b, c, d)
 
#define EOE_HTONS(x)   ((((x) & 0x00ffUL) << 8) | (((x) & 0xff00UL) >> 8))
 
#define EOE_NTOHS(x)   EOE_HTONS(x)
 
#define EOE_HTONL(x)
 
#define EOE_NTOHL(x)   EOE_HTONL(x)
 
#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_ADDR_TO_U32(ipaddr, a, b, c, d)   (ipaddr)->addr = EOE_HTONL(EOE_MAKEU32(a,b,c,d))
 
#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)   (((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_FRAG_NO_OFFSET   0
 
#define EOE_HDR_FRAG_NO   (0x3F << 0)
 
#define EOE_HDR_FRAG_NO_SET(x)   (((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)   (((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)   (((x) & 0xF) << 12)
 
#define EOE_HDR_FRAME_NO_GET(x)   (((x) >> 12) & 0xF)
 
#define EOE_PARAM_OFFSET   4
 
#define EOE_PARAM_MAC_INCLUDE   (0x1 << 0)
 
#define EOE_PARAM_IP_INCLUDE   (0x1 << 1)
 
#define EOE_PARAM_SUBNET_IP_INCLUDE   (0x1 << 2)
 
#define EOE_PARAM_DEFAULT_GATEWAY_INCLUDE   (0x1 << 3)
 
#define EOE_PARAM_DNS_IP_INCLUDE   (0x1 << 4)
 
#define EOE_PARAM_DNS_NAME_INCLUDE   (0x1 << 5)
 
#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_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
 

Functions

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_EOEreadfragment (ec_mbxbuft *MbxIn, uint8 *rxfragmentno, uint16 *rxframesize, uint16 *rxframeoffset, uint16 *rxframeno, int *psize, void *p)
 

Detailed Description

Headerfile for ethercatfoe.c.

Macro Definition Documentation

◆ EOE_DNS_NAME_LENGTH

#define EOE_DNS_NAME_LENGTH   32

DNS length according to ETG 1000.6

◆ EOE_ETHADDR_LENGTH

#define EOE_ETHADDR_LENGTH   6

Ethernet address length not including VLAN

◆ EOE_FRAG_DATA

#define EOE_FRAG_DATA   0

EoE frame types

◆ EOE_GET_ADDR_FILTER_REQ

#define EOE_GET_ADDR_FILTER_REQ   8

◆ EOE_GET_ADDR_FILTER_RESP

#define EOE_GET_ADDR_FILTER_RESP   9

◆ EOE_GET_IP_PARAM_REQ

#define EOE_GET_IP_PARAM_REQ   6

◆ EOE_GET_IP_PARAM_RESP

#define EOE_GET_IP_PARAM_RESP   7

◆ EOE_HDR_FRAG_NO

#define EOE_HDR_FRAG_NO   (0x3F << 0)

◆ EOE_HDR_FRAG_NO_GET

#define EOE_HDR_FRAG_NO_GET (   x)    (((x) >> 0) & 0x3F)

◆ EOE_HDR_FRAG_NO_OFFSET

#define EOE_HDR_FRAG_NO_OFFSET   0

Header frame info 2

◆ EOE_HDR_FRAG_NO_SET

#define EOE_HDR_FRAG_NO_SET (   x)    (((x) & 0x3F) << 0)

◆ EOE_HDR_FRAME_NO

#define EOE_HDR_FRAME_NO   (0xF << 12)

◆ EOE_HDR_FRAME_NO_GET

#define EOE_HDR_FRAME_NO_GET (   x)    (((x) >> 12) & 0xF)

◆ EOE_HDR_FRAME_NO_OFFSET

#define EOE_HDR_FRAME_NO_OFFSET   12

◆ EOE_HDR_FRAME_NO_SET

#define EOE_HDR_FRAME_NO_SET (   x)    (((x) & 0xF) << 12)

◆ EOE_HDR_FRAME_OFFSET

#define EOE_HDR_FRAME_OFFSET   (0x3F << 6)

◆ EOE_HDR_FRAME_OFFSET_GET

#define EOE_HDR_FRAME_OFFSET_GET (   x)    (((x) >> 6) & 0x3F)

◆ EOE_HDR_FRAME_OFFSET_OFFSET

#define EOE_HDR_FRAME_OFFSET_OFFSET   6

◆ EOE_HDR_FRAME_OFFSET_SET

#define EOE_HDR_FRAME_OFFSET_SET (   x)    (((x) & 0x3F) << 6)

◆ EOE_HDR_FRAME_PORT

#define EOE_HDR_FRAME_PORT   (0xF << 4)

◆ EOE_HDR_FRAME_PORT_GET

#define EOE_HDR_FRAME_PORT_GET (   x)    (((x) >> 4) & 0xF)

◆ EOE_HDR_FRAME_PORT_OFFSET

#define EOE_HDR_FRAME_PORT_OFFSET   4

◆ EOE_HDR_FRAME_PORT_SET

#define EOE_HDR_FRAME_PORT_SET (   x)    (((x) & 0xF) << 4)

◆ EOE_HDR_FRAME_TYPE

#define EOE_HDR_FRAME_TYPE   (0xF << 0)

◆ EOE_HDR_FRAME_TYPE_GET

#define EOE_HDR_FRAME_TYPE_GET (   x)    (((x) >> 0) & 0xF)

◆ EOE_HDR_FRAME_TYPE_OFFSET

#define EOE_HDR_FRAME_TYPE_OFFSET   0

Header frame info 1

◆ EOE_HDR_FRAME_TYPE_SET

#define EOE_HDR_FRAME_TYPE_SET (   x)    (((x) & 0xF) << 0)

◆ EOE_HDR_LAST_FRAGMENT

#define EOE_HDR_LAST_FRAGMENT   (0x1 << 8)

◆ EOE_HDR_LAST_FRAGMENT_GET

#define EOE_HDR_LAST_FRAGMENT_GET (   x)    (((x) >> 8) & 0x1)

◆ EOE_HDR_LAST_FRAGMENT_OFFSET

#define EOE_HDR_LAST_FRAGMENT_OFFSET   8

◆ EOE_HDR_LAST_FRAGMENT_SET

#define EOE_HDR_LAST_FRAGMENT_SET (   x)    (((x) & 0x1) << 8)

◆ EOE_HDR_TIME_APPEND

#define EOE_HDR_TIME_APPEND   (0x1 << 9)

◆ EOE_HDR_TIME_APPEND_GET

#define EOE_HDR_TIME_APPEND_GET (   x)    (((x) >> 9) & 0x1)

◆ EOE_HDR_TIME_APPEND_OFFSET

#define EOE_HDR_TIME_APPEND_OFFSET   9

◆ EOE_HDR_TIME_APPEND_SET

#define EOE_HDR_TIME_APPEND_SET (   x)    (((x) & 0x1) << 9)

◆ EOE_HDR_TIME_REQUEST

#define EOE_HDR_TIME_REQUEST   (0x1 << 10)

◆ EOE_HDR_TIME_REQUEST_GET

#define EOE_HDR_TIME_REQUEST_GET (   x)    (((x) >> 10) & 0x1)

◆ EOE_HDR_TIME_REQUEST_OFFSET

#define EOE_HDR_TIME_REQUEST_OFFSET   10

◆ EOE_HDR_TIME_REQUEST_SET

#define EOE_HDR_TIME_REQUEST_SET (   x)    (((x) & 0x1) << 10)

◆ EOE_HTONL

#define EOE_HTONL (   x)
Value:
((((x) & 0x000000ffUL) << 24) | \
(((x) & 0x0000ff00UL) << 8) | \
(((x) & 0x00ff0000UL) >> 8) | \
(((x) & 0xff000000UL) >> 24))

◆ EOE_HTONS

#define EOE_HTONS (   x)    ((((x) & 0x00ffUL) << 8) | (((x) & 0xff00UL) >> 8))

◆ EOE_INIT_REQ

#define EOE_INIT_REQ   2 /* Spec SET IP REQ */

◆ EOE_INIT_RESP

#define EOE_INIT_RESP   3 /* Spec SET IP RESP */

◆ EOE_INIT_RESP_TIMESTAMP

#define EOE_INIT_RESP_TIMESTAMP   1

◆ eoe_ip4_addr1

#define eoe_ip4_addr1 (   ipaddr)    (((const uint8_t*)(&(ipaddr)->addr))[0])

Get one byte from the 4-byte address

◆ eoe_ip4_addr2

#define eoe_ip4_addr2 (   ipaddr)    (((const uint8_t*)(&(ipaddr)->addr))[1])

◆ eoe_ip4_addr3

#define eoe_ip4_addr3 (   ipaddr)    (((const uint8_t*)(&(ipaddr)->addr))[2])

◆ eoe_ip4_addr4

#define eoe_ip4_addr4 (   ipaddr)    (((const uint8_t*)(&(ipaddr)->addr))[3])

◆ EOE_IP4_ADDR_TO_U32

#define EOE_IP4_ADDR_TO_U32 (   ipaddr,
  a,
  b,
  c,
 
)    (ipaddr)->addr = EOE_HTONL(EOE_MAKEU32(a,b,c,d))

Set an IP address given by the four byte-parts

◆ EOE_MAKEU32

#define EOE_MAKEU32 (   a,
  b,
  c,
 
)
Value:
(((uint32_t)((a) & 0xff) << 24) | \
((uint32_t)((b) & 0xff) << 16) | \
((uint32_t)((c) & 0xff) << 8) | \
(uint32_t)((d) & 0xff))

◆ EOE_NTOHL

#define EOE_NTOHL (   x)    EOE_HTONL(x)

◆ EOE_NTOHS

#define EOE_NTOHS (   x)    EOE_HTONS(x)

◆ EOE_PARAM_DEFAULT_GATEWAY_INCLUDE

#define EOE_PARAM_DEFAULT_GATEWAY_INCLUDE   (0x1 << 3)

◆ EOE_PARAM_DNS_IP_INCLUDE

#define EOE_PARAM_DNS_IP_INCLUDE   (0x1 << 4)

◆ EOE_PARAM_DNS_NAME_INCLUDE

#define EOE_PARAM_DNS_NAME_INCLUDE   (0x1 << 5)

◆ EOE_PARAM_IP_INCLUDE

#define EOE_PARAM_IP_INCLUDE   (0x1 << 1)

◆ EOE_PARAM_MAC_INCLUDE

#define EOE_PARAM_MAC_INCLUDE   (0x1 << 0)

◆ EOE_PARAM_OFFSET

#define EOE_PARAM_OFFSET   4

EOE param

◆ EOE_PARAM_SUBNET_IP_INCLUDE

#define EOE_PARAM_SUBNET_IP_INCLUDE   (0x1 << 2)

◆ EOE_RESULT_NO_DHCP_SUPPORT

#define EOE_RESULT_NO_DHCP_SUPPORT   0x0202

◆ EOE_RESULT_NO_FILTER_SUPPORT

#define EOE_RESULT_NO_FILTER_SUPPORT   0x0401

◆ EOE_RESULT_NO_IP_SUPPORT

#define EOE_RESULT_NO_IP_SUPPORT   0x0201

◆ EOE_RESULT_SUCCESS

#define EOE_RESULT_SUCCESS   0x0000

EoE parameter result codes

◆ EOE_RESULT_UNSPECIFIED_ERROR

#define EOE_RESULT_UNSPECIFIED_ERROR   0x0001

◆ EOE_RESULT_UNSUPPORTED_FRAME_TYPE

#define EOE_RESULT_UNSUPPORTED_FRAME_TYPE   0x0002

◆ EOE_SET_ADDR_FILTER_REQ

#define EOE_SET_ADDR_FILTER_REQ   4

◆ EOE_SET_ADDR_FILTER_RESP

#define EOE_SET_ADDR_FILTER_RESP   5

Function Documentation

◆ ecx_EOEdefinehook()

PACKED_END int ecx_EOEdefinehook ( ecx_contextt *  context,
void *  hook 
)

EoE fragment data handler hook. Should not block.

Parameters
[in]context= context struct
[in]hook= Pointer to hook function.
Returns
1

◆ ecx_EOEgetIp()

int ecx_EOEgetIp ( ecx_contextt *  context,
uint16  slave,
uint8  port,
eoe_param_t ipparam,
int  timeout 
)

EoE EOE get IP, blocking. Waits for response from the slave.

Parameters
[in]context= Context struct
[in]slave= Slave number
[in]port= Port number on slave if applicable
[out]ipparam= IP parameter data retrived from slave
[in]timeout= Timeout in us, standard is EC_TIMEOUTRXM
Returns
Workcounter from last slave response or returned result code

◆ ecx_EOEreadfragment()

int ecx_EOEreadfragment ( ec_mbxbuft MbxIn,
uint8 *  rxfragmentno,
uint16 *  rxframesize,
uint16 *  rxframeoffset,
uint16 *  rxframeno,
int *  psize,
void *  p 
)

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

Parameters
[in]MbxIn= Received mailbox containing fragment data
[in,out]rxfragmentno= Fragment number
[in,out]rxframesize= Frame size
[in,out]rxframeoffset= Frame offset
[in,out]rxframeno= Frame number
[in,out]psize= Size in bytes of frame buffer.
[out]p= Pointer to frame buffer
Returns
0= if fragment OK, >0 if last fragment, <0 on error

◆ ecx_EOErecv()

int ecx_EOErecv ( ecx_contextt *  context,
uint16  slave,
uint8  port,
int *  psize,
void *  p,
int  timeout 
)

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.

Parameters
[in]context= context struct
[in]slave= Slave number
[in]port= Port number on slave if applicable
[in,out]psize= Size in bytes of parameter buffer.
[in]p= Pointer to parameter buffer
[in]timeout= Timeout in us, standard is EC_TIMEOUTRXM
Returns
Workcounter from last slave response or error code

◆ ecx_EOEsend()

int ecx_EOEsend ( ecx_contextt *  context,
uint16  slave,
uint8  port,
int  psize,
void *  p,
int  timeout 
)

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.

Parameters
[in]context= context struct
[in]slave= Slave number
[in]port= Port number on slave if applicable
[in]psize= Size in bytes of parameter buffer.
[in]p= Pointer to parameter buffer
[in]timeout= Timeout in us, standard is EC_TIMEOUTRXM
Returns
Workcounter from last slave transmission

◆ ecx_EOEsetIp()

int ecx_EOEsetIp ( ecx_contextt *  context,
uint16  slave,
uint8  port,
eoe_param_t ipparam,
int  timeout 
)

EoE EOE set IP, blocking. Waits for response from the slave.

Parameters
[in]context= Context struct
[in]slave= Slave number
[in]port= Port number on slave if applicable
[in]ipparam= IP parameter data to be sent
[in]timeout= Timeout in us, standard is EC_TIMEOUTRXM
Returns
Workcounter from last slave response or returned result code