SOEM
v1.4.0
|
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) |
Headerfile for ethercatfoe.c.
#define EOE_DNS_NAME_LENGTH 32 |
DNS length according to ETG 1000.6
#define EOE_ETHADDR_LENGTH 6 |
Ethernet address length not including VLAN
#define EOE_FRAG_DATA 0 |
EoE frame types
#define EOE_GET_ADDR_FILTER_REQ 8 |
#define EOE_GET_ADDR_FILTER_RESP 9 |
#define EOE_GET_IP_PARAM_REQ 6 |
#define EOE_GET_IP_PARAM_RESP 7 |
#define EOE_HDR_FRAG_NO (0x3F << 0) |
#define EOE_HDR_FRAG_NO_GET | ( | x | ) | (((x) >> 0) & 0x3F) |
#define EOE_HDR_FRAG_NO_OFFSET 0 |
Header frame info 2
#define EOE_HDR_FRAG_NO_SET | ( | x | ) | (((x) & 0x3F) << 0) |
#define EOE_HDR_FRAME_NO (0xF << 12) |
#define EOE_HDR_FRAME_NO_GET | ( | x | ) | (((x) >> 12) & 0xF) |
#define EOE_HDR_FRAME_NO_OFFSET 12 |
#define EOE_HDR_FRAME_NO_SET | ( | x | ) | (((x) & 0xF) << 12) |
#define EOE_HDR_FRAME_OFFSET (0x3F << 6) |
#define EOE_HDR_FRAME_OFFSET_GET | ( | x | ) | (((x) >> 6) & 0x3F) |
#define EOE_HDR_FRAME_OFFSET_OFFSET 6 |
#define EOE_HDR_FRAME_OFFSET_SET | ( | x | ) | (((x) & 0x3F) << 6) |
#define EOE_HDR_FRAME_PORT (0xF << 4) |
#define EOE_HDR_FRAME_PORT_GET | ( | x | ) | (((x) >> 4) & 0xF) |
#define EOE_HDR_FRAME_PORT_OFFSET 4 |
#define EOE_HDR_FRAME_PORT_SET | ( | x | ) | (((x) & 0xF) << 4) |
#define EOE_HDR_FRAME_TYPE (0xF << 0) |
#define EOE_HDR_FRAME_TYPE_GET | ( | x | ) | (((x) >> 0) & 0xF) |
#define EOE_HDR_FRAME_TYPE_OFFSET 0 |
Header frame info 1
#define EOE_HDR_FRAME_TYPE_SET | ( | x | ) | (((x) & 0xF) << 0) |
#define EOE_HDR_LAST_FRAGMENT (0x1 << 8) |
#define EOE_HDR_LAST_FRAGMENT_GET | ( | x | ) | (((x) >> 8) & 0x1) |
#define EOE_HDR_LAST_FRAGMENT_OFFSET 8 |
#define EOE_HDR_LAST_FRAGMENT_SET | ( | x | ) | (((x) & 0x1) << 8) |
#define EOE_HDR_TIME_APPEND (0x1 << 9) |
#define EOE_HDR_TIME_APPEND_GET | ( | x | ) | (((x) >> 9) & 0x1) |
#define EOE_HDR_TIME_APPEND_OFFSET 9 |
#define EOE_HDR_TIME_APPEND_SET | ( | x | ) | (((x) & 0x1) << 9) |
#define EOE_HDR_TIME_REQUEST (0x1 << 10) |
#define EOE_HDR_TIME_REQUEST_GET | ( | x | ) | (((x) >> 10) & 0x1) |
#define EOE_HDR_TIME_REQUEST_OFFSET 10 |
#define EOE_HDR_TIME_REQUEST_SET | ( | x | ) | (((x) & 0x1) << 10) |
#define EOE_HTONL | ( | x | ) |
#define EOE_HTONS | ( | x | ) | ((((x) & 0x00ffUL) << 8) | (((x) & 0xff00UL) >> 8)) |
#define EOE_INIT_REQ 2 /* Spec SET IP REQ */ |
#define EOE_INIT_RESP 3 /* Spec SET IP RESP */ |
#define EOE_INIT_RESP_TIMESTAMP 1 |
#define eoe_ip4_addr1 | ( | ipaddr | ) | (((const uint8_t*)(&(ipaddr)->addr))[0]) |
Get one byte from the 4-byte address
#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)) |
Set an IP address given by the four byte-parts
#define EOE_MAKEU32 | ( | a, | |
b, | |||
c, | |||
d | |||
) |
#define EOE_NTOHL | ( | x | ) | EOE_HTONL(x) |
#define EOE_NTOHS | ( | x | ) | EOE_HTONS(x) |
#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_PARAM_IP_INCLUDE (0x1 << 1) |
#define EOE_PARAM_MAC_INCLUDE (0x1 << 0) |
#define EOE_PARAM_OFFSET 4 |
EOE param
#define EOE_PARAM_SUBNET_IP_INCLUDE (0x1 << 2) |
#define EOE_RESULT_NO_DHCP_SUPPORT 0x0202 |
#define EOE_RESULT_NO_FILTER_SUPPORT 0x0401 |
#define EOE_RESULT_NO_IP_SUPPORT 0x0201 |
#define EOE_RESULT_SUCCESS 0x0000 |
EoE parameter result codes
#define EOE_RESULT_UNSPECIFIED_ERROR 0x0001 |
#define EOE_RESULT_UNSUPPORTED_FRAME_TYPE 0x0002 |
#define EOE_SET_ADDR_FILTER_REQ 4 |
#define EOE_SET_ADDR_FILTER_RESP 5 |
PACKED_END int ecx_EOEdefinehook | ( | ecx_contextt * | context, |
void * | hook | ||
) |
EoE fragment data handler hook. Should not block.
[in] | context | = context struct |
[in] | hook | = Pointer to hook function. |
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.
[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 |
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
[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 |
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.
[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 |
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.
[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 |
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.
[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 |