IgH EtherCAT Master  1.6.2
domain.c File Reference

EtherCAT domain methods. More...

Go to the source code of this file.

Macros

#define DEBUG_REDUNDANCY   0
 Extra debug output for redundancy functions.
 

Functions

void ec_domain_clear_data (ec_domain_t *domain)
 Frees internally allocated memory. More...
 
int ec_domain_add_datagram_pair (ec_domain_t *domain, uint32_t logical_offset, size_t data_size, uint8_t *data, const unsigned int used[])
 Allocates a domain datagram pair and appends it to the list. More...
 
int shall_count (const ec_fmmu_config_t *cur_fmmu, const ec_fmmu_config_t *first_fmmu)
 Domain finish helper function. More...
 
int data_changed (uint8_t *send_buffer, const ec_datagram_t *datagram, size_t offset, size_t size)
 Process received data.
 
void ec_domain_init (ec_domain_t *domain, ec_master_t *master, unsigned int index)
 Domain constructor. More...
 
void ec_domain_clear (ec_domain_t *domain)
 Domain destructor. More...
 
void ec_domain_add_fmmu_config (ec_domain_t *domain, ec_fmmu_config_t *fmmu)
 Adds an FMMU configuration to the domain. More...
 
int ec_domain_finish (ec_domain_t *domain, uint32_t base_address)
 Finishes a domain. More...
 
unsigned int ec_domain_fmmu_count (const ec_domain_t *domain)
 Get the number of FMMU configurations of the domain.
 
const ec_fmmu_config_tec_domain_find_fmmu (const ec_domain_t *domain, unsigned int pos)
 Get a certain FMMU configuration via its position in the list. More...
 
int ecrt_domain_reg_pdo_entry_list (ec_domain_t *domain, const ec_pdo_entry_reg_t *regs)
 Registers a bunch of PDO entries for a domain. More...
 
size_t ecrt_domain_size (const ec_domain_t *domain)
 Returns the current size of the domain's process data. More...
 
void ecrt_domain_external_memory (ec_domain_t *domain, uint8_t *mem)
 Provide external memory to store the domain's process data. More...
 
uint8_t * ecrt_domain_data (const ec_domain_t *domain)
 Returns the domain's process data. More...
 
int ecrt_domain_process (ec_domain_t *domain)
 Determines the states of the domain's datagrams. More...
 
int ecrt_domain_queue (ec_domain_t *domain)
 (Re-)queues all domain datagrams in the master's datagram queue. More...
 
int ecrt_domain_state (const ec_domain_t *domain, ec_domain_state_t *state)
 Reads the state of a domain. More...
 

Detailed Description

EtherCAT domain methods.

Definition in file domain.c.

Function Documentation

◆ ec_domain_clear_data()

void ec_domain_clear_data ( ec_domain_t domain)

Frees internally allocated memory.

Parameters
domainEtherCAT domain.

Definition at line 105 of file domain.c.

◆ ec_domain_add_datagram_pair()

int ec_domain_add_datagram_pair ( ec_domain_t domain,
uint32_t  logical_offset,
size_t  data_size,
uint8_t *  data,
const unsigned int  used[] 
)

Allocates a domain datagram pair and appends it to the list.

The datagrams' types and expected working counters are determined by the number of input and output fmmus that share the datagrams.

Return values
0Success.
<0Error code.
Parameters
domainEtherCAT domain.
logical_offsetLogical offset.
data_sizeSize of the data.
dataProcess data.
usedSlave config counter for in/out.

Definition at line 146 of file domain.c.

◆ shall_count()

int shall_count ( const ec_fmmu_config_t cur_fmmu,
const ec_fmmu_config_t first_fmmu 
)

Domain finish helper function.

Detects, if a slave configuration has already been taken into account for a datagram's expected working counter calculation.

Walks through the list of all FMMU configurations for the current datagram and ends before the current datagram.

Returns
Non-zero if slave connfig was already counted.
Parameters
cur_fmmuCurrent FMMU with direction to search for.
first_fmmuDatagram's first FMMU.

Definition at line 194 of file domain.c.

◆ ec_domain_init()

void ec_domain_init ( ec_domain_t domain,
ec_master_t master,
unsigned int  index 
)

Domain constructor.

Parameters
domainEtherCAT domain.
masterParent master.
indexIndex.

Definition at line 57 of file domain.c.

◆ ec_domain_clear()

void ec_domain_clear ( ec_domain_t domain)

Domain destructor.

Parameters
domainEtherCAT domain

Definition at line 87 of file domain.c.

◆ ec_domain_add_fmmu_config()

void ec_domain_add_fmmu_config ( ec_domain_t domain,
ec_fmmu_config_t fmmu 
)

Adds an FMMU configuration to the domain.

Parameters
domainEtherCAT domain.
fmmuFMMU configuration.

Definition at line 121 of file domain.c.

◆ ec_domain_finish()

int ec_domain_finish ( ec_domain_t domain,
uint32_t  base_address 
)

Finishes a domain.

This allocates the necessary datagrams and writes the correct logical addresses to every configured FMMU.

Todo:
Check for FMMUs that do not fit into any datagram.
Return values
0Success
<0Error code.
Parameters
domainEtherCAT domain.
base_addressLogical base address.

Definition at line 225 of file domain.c.

◆ ec_domain_find_fmmu()

const ec_fmmu_config_t* ec_domain_find_fmmu ( const ec_domain_t domain,
unsigned int  pos 
)

Get a certain FMMU configuration via its position in the list.

Returns
FMMU at position pos, or NULL.
Parameters
domainEtherCAT domain.
posList position.

Definition at line 349 of file domain.c.