libethercat - an embeddable realtime EtherCAT-master library
Communicate with EtherCAT slaves attached to a Network interface.
Loading...
Searching...
No Matches
Datagram

Data Structures

struct  ec_frame
 
struct  ec_datagram
 
struct  ec_cyclic_datagram
 

Macros

#define EC_WKC_SIZE   (2u)
 Working counter byte length.
 
#define ec_frame_hdr_length   (sizeof(ec_frame_t))
 EtherCAT frame header length.
 
#define ec_frame_length(f)   ((f)->len)
 EtherCAT frame length.
 
#define ec_frame_end(pframe)   (&((osal_uint8_t *)(pframe))[(pframe)->len])
 Pointer to EtherCAT frame end.
 
#define ec_datagram_hdr_length   (sizeof(ec_datagram_t))
 EtherCAT datagram header length.
 
#define ec_datagram_length(pdg)   (ec_datagram_hdr_length + (pdg)->len + EC_WKC_SIZE)
 EtherCAT datagram length.
 

Typedefs

typedef struct ec_frame ec_frame_t
 EtherCAT frame type.
 
typedef struct ec_datagram ec_datagram_t
 EtherCAT datagram type.
 
typedef struct ec_cyclic_datagram ec_cyclic_datagram_t
 EtherCAT cyclic datagram type.
 

Functions

int ec_cyclic_datagram_init (ec_cyclic_datagram_t *cdg, osal_uint64_t recv_timeout)
 Initialize cyclic datagram structure.
 
int ec_cyclic_datagram_destroy (ec_cyclic_datagram_t *cdg)
 Destroy cyclic datagram structure.
 
int ec_frame_init (ec_frame_t *frame)
 Initialize empty frame.
 
void ec_frame_add_datagram_phys (ec_frame_t *frame, osal_uint8_t cmd, osal_uint8_t idx, osal_uint16_t adp, osal_uint16_t ado, osal_uint8_t *payload, osal_size_t payload_len)
 Add datagram at the end of frame.
 
void ec_frame_add_datagram_log (ec_frame_t *frame, osal_uint8_t cmd, osal_uint8_t idx, osal_uint32_t adr, osal_uint8_t *payload, osal_size_t payload_len)
 Add datagram at the end of frame.
 
static ec_datagram_tec_datagram_cast (osal_uint8_t *p)
 Cast pointer to ec_datagram_t type.
 
static void ec_datagram_mark_next (ec_datagram_t *pdg)
 Marking next field in datagram.
 
static ec_datagram_tec_datagram_first (ec_frame_t *pf)
 Get pointer to first datagram in frame.
 
static ec_datagram_tec_datagram_next (ec_datagram_t *pdg)
 Get pointer to next datagram in frame.
 
static osal_uint8_t * ec_datagram_payload (ec_datagram_t *pdg)
 Get pointer to datagram payload.
 
static osal_uint16_t ec_datagram_wkc (ec_datagram_t *pdg)
 Get working counter of datagram.
 

Detailed Description

This modules contains functions on how EtherCAT datagrams are beeing build.

Function Documentation

◆ ec_cyclic_datagram_destroy()

int ec_cyclic_datagram_destroy ( ec_cyclic_datagram_t cdg)

Destroy cyclic datagram structure.

This functions destroys a datagram.

Parameters
[in]cdgPointer to cyclic datagram structure.
Return values
EC_OKOn success.

◆ ec_cyclic_datagram_init()

int ec_cyclic_datagram_init ( ec_cyclic_datagram_t cdg,
osal_uint64_t  recv_timeout 
)

Initialize cyclic datagram structure.

This function initializes a default datagram.

Parameters
[in]cdgPointer to cyclic datagram structure.
[in]recv_timeoutReceive timeout in [ns].
Return values
EC_OKOn success.

◆ ec_datagram_cast()

static ec_datagram_t * ec_datagram_cast ( osal_uint8_t *  p)
inlinestatic

Cast pointer to ec_datagram_t type.

Parameters
[in]pPointer which contains a ec_datagram_t.
Returns
Pointer to ec_datagram_t.

◆ ec_datagram_first()

static ec_datagram_t * ec_datagram_first ( ec_frame_t pf)
inlinestatic

Get pointer to first datagram in frame.

Parameters
[in]pfPointer which contains a EtherCAT frame.
Returns
Pointer to first datagram in frame.

◆ ec_datagram_mark_next()

static void ec_datagram_mark_next ( ec_datagram_t pdg)
inlinestatic

Marking next field in datagram.

Parameters
[in,out]pdgPointer which contains a datagram.

◆ ec_datagram_next()

static ec_datagram_t * ec_datagram_next ( ec_datagram_t pdg)
inlinestatic

Get pointer to next datagram in frame.

Parameters
[in]pdgPointer which contains a EtherCAT datagram.
Returns
Pointer to next datagram in frame.

◆ ec_datagram_payload()

static osal_uint8_t * ec_datagram_payload ( ec_datagram_t pdg)
inlinestatic

Get pointer to datagram payload.

Parameters
[in]pdgPointer which contains a EtherCAT datagram.
Returns
Pointer to payload of datagram.

◆ ec_datagram_wkc()

static osal_uint16_t ec_datagram_wkc ( ec_datagram_t pdg)
inlinestatic

Get working counter of datagram.

Parameters
[in]pdgPointer which contains a EtherCAT datagram.
Returns
working counter of datagram.

◆ ec_frame_add_datagram_log()

void ec_frame_add_datagram_log ( ec_frame_t frame,
osal_uint8_t  cmd,
osal_uint8_t  idx,
osal_uint32_t  adr,
osal_uint8_t *  payload,
osal_size_t  payload_len 
)

Add datagram at the end of frame.

This function add a logical datagram at the end of frame.

Parameters
[in,out]framePointer to frame.
[in]cmdEthercat command.
[in]idxEthercat frame index.
[in]adrLogical address.
[in]payloadFrame payload.
[in]payload_lenLength of payload.

◆ ec_frame_add_datagram_phys()

void ec_frame_add_datagram_phys ( ec_frame_t frame,
osal_uint8_t  cmd,
osal_uint8_t  idx,
osal_uint16_t  adp,
osal_uint16_t  ado,
osal_uint8_t *  payload,
osal_size_t  payload_len 
)

Add datagram at the end of frame.

This function add a non-logical datagram at the end of frame.

Parameters
[in,out]framePointer to frame.
[in]cmdEthercat command.
[in]idxEthercat frame index.
[in]adpAuto inc/configured address.
[in]adoPhysical mem address.
[in]payloadFrame payload.
[in]payload_lenLength of payload.

◆ ec_frame_init()

int ec_frame_init ( ec_frame_t frame)

Initialize empty frame.

Initialize a frame with empty content.

Parameters
[in,out]framePointer to frame.
Return values
EC_OKOn success.