IgH EtherCAT Master  1.5.2
slave.h File Reference

EtherCAT slave structure. More...

Go to the source code of this file.

Data Structures

struct  ec_slave_port_t
 Slave port. More...
 
struct  ec_sii_t
 Extracted slave information interface data. More...
 
struct  ec_sii_image_t
 Complete slave information interface data image. More...
 
struct  ec_slave
 EtherCAT slave. More...
 

Macros

#define EC_SLAVE_INFO(slave, fmt, args...)
 Convenience macro for printing slave-specific information to syslog. More...
 
#define EC_SLAVE_ERR(slave, fmt, args...)
 Convenience macro for printing slave-specific errors to syslog. More...
 
#define EC_SLAVE_WARN(slave, fmt, args...)
 Convenience macro for printing slave-specific warnings to syslog. More...
 
#define EC_SLAVE_DBG(slave, level, fmt, args...)
 Convenience macro for printing slave-specific debug messages to syslog. More...
 

Functions

void ec_slave_init (ec_slave_t *, ec_master_t *, ec_device_index_t, uint16_t, uint16_t)
 Slave constructor. More...
 
void ec_slave_sii_image_init (ec_sii_image_t *)
 
void ec_slave_clear (ec_slave_t *)
 Slave destructor. More...
 
void ec_slave_clear_sync_managers (ec_slave_t *)
 Clear the sync manager array.
 
void ec_slave_request_state (ec_slave_t *, ec_slave_state_t)
 Request a slave state and resets the error flag.
 
void ec_slave_set_dl_status (ec_slave_t *, uint16_t)
 Sets the data-link state of a slave.
 
void ec_slave_set_al_status (ec_slave_t *, ec_slave_state_t)
 Sets the application state of a slave.
 
void ec_slave_request_reboot (ec_slave_t *)
 Request a slave reboot (some slaves will ignore this).
 
int ec_slave_fetch_sii_strings (ec_slave_t *, const uint8_t *, size_t)
 Fetches data from a STRING category. More...
 
int ec_slave_fetch_sii_general (ec_slave_t *, const uint8_t *, size_t)
 Fetches data from a GENERAL category. More...
 
int ec_slave_fetch_sii_syncs (ec_slave_t *, const uint8_t *, size_t)
 Fetches data from a SYNC MANAGER category. More...
 
int ec_slave_fetch_sii_pdos (ec_slave_t *, const uint8_t *, size_t, ec_direction_t)
 Fetches data from a [RT]xPDO category. More...
 
ec_sync_tec_slave_get_sync (ec_slave_t *, uint8_t)
 Get the sync manager given an index. More...
 
void ec_slave_sdo_dict_info (const ec_slave_t *, unsigned int *, unsigned int *)
 Counts the total number of SDOs and entries in the dictionary.
 
ec_sdo_tec_slave_get_sdo (ec_slave_t *, uint16_t)
 Get an SDO from the dictionary. More...
 
const ec_sdo_tec_slave_get_sdo_const (const ec_slave_t *, uint16_t)
 Get an SDO from the dictionary. More...
 
const ec_sdo_tec_slave_get_sdo_by_pos_const (const ec_slave_t *, uint16_t)
 Get an SDO from the dictionary, given its position in the list. More...
 
uint16_t ec_slave_sdo_count (const ec_slave_t *)
 Get the number of SDOs in the dictionary. More...
 
const ec_pdo_tec_slave_find_pdo (const ec_slave_t *, uint16_t)
 Finds a mapped PDO. More...
 
void ec_slave_attach_pdo_names (ec_slave_t *)
 Attach PDO names.
 
void ec_slave_calc_upstream_port (ec_slave_t *)
 Calculates which of ports 0-3 appears to be the upstream one.
 
void ec_slave_calc_port_delays (ec_slave_t *)
 Calculates the port transmission delays.
 
void ec_slave_calc_transmission_delays_rec (ec_slave_t *, uint32_t *)
 Recursively calculates transmission delays.
 
void ec_read_mbox_lock_clear (ec_slave_t *)
 Clears the mailbox lock.
 
int ec_read_mbox_locked (ec_slave_t *)
 Return the current mailbox lock status and lock it if not locked.
 

Detailed Description

EtherCAT slave structure.

Definition in file slave.h.

Macro Definition Documentation

◆ EC_SLAVE_INFO

#define EC_SLAVE_INFO (   slave,
  fmt,
  args... 
)
Value:
printk(KERN_INFO "EtherCAT %u-%s-%u: " fmt, slave->master->index, \
ec_device_names[slave->device_index!=0], slave->ring_position, ##args)
const char * ec_device_names[2]
Device names.
Definition: module.c:472

Convenience macro for printing slave-specific information to syslog.

This will print the message in fmt with a prefixed "EtherCAT <INDEX>-<DEV>-<POSITION>: ", where INDEX is the master index, DEV is the device, and POSITION is the slave's ring position.

Parameters
slaveEtherCAT slave
fmtformat string (like in printf())
argsarguments (optional)

Definition at line 63 of file slave.h.

◆ EC_SLAVE_ERR

#define EC_SLAVE_ERR (   slave,
  fmt,
  args... 
)
Value:
printk(KERN_ERR "EtherCAT ERROR %u-%s-%u: " fmt, slave->master->index, \
ec_device_names[slave->device_index!=0], slave->ring_position, ##args)
const char * ec_device_names[2]
Device names.
Definition: module.c:472

Convenience macro for printing slave-specific errors to syslog.

This will print the message in fmt with a prefixed "EtherCAT <INDEX>-<DEV>-<POSITION>: ", where INDEX is the master index, DEV is the device, and POSITION is the slave's ring position.

Parameters
slaveEtherCAT slave
fmtformat string (like in printf())
argsarguments (optional)

Definition at line 77 of file slave.h.

◆ EC_SLAVE_WARN

#define EC_SLAVE_WARN (   slave,
  fmt,
  args... 
)
Value:
printk(KERN_WARNING "EtherCAT WARNING %u-%s-%u: " fmt, \
slave->master->index, ec_device_names[slave->device_index!=0], \
slave->ring_position, ##args)
const char * ec_device_names[2]
Device names.
Definition: module.c:472

Convenience macro for printing slave-specific warnings to syslog.

This will print the message in fmt with a prefixed "EtherCAT <INDEX>-<DEV>-<POSITION>: ", where INDEX is the master index, DEV is the device, and POSITION is the slave's ring position.

Parameters
slaveEtherCAT slave
fmtformat string (like in printf())
argsarguments (optional)

Definition at line 91 of file slave.h.

◆ EC_SLAVE_DBG

#define EC_SLAVE_DBG (   slave,
  level,
  fmt,
  args... 
)
Value:
do { \
if (slave->master->debug_level >= level) { \
printk(KERN_DEBUG "EtherCAT DEBUG %u-%s-%u: " fmt, \
slave->master->index, ec_device_names[slave->device_index!=0], \
slave->ring_position, ##args); \
} \
} while (0)
const char * ec_device_names[2]
Device names.
Definition: module.c:472

Convenience macro for printing slave-specific debug messages to syslog.

This will print the message in fmt with a prefixed "EtherCAT <INDEX>-<DEV>-<POSITION>: ", where INDEX is the master index, DEV is the device, and POSITION is the slave's ring position.

Parameters
slaveEtherCAT slave
levelDebug level. Master's debug level must be >= level for output.
fmtformat string (like in printf())
argsarguments (optional)

Definition at line 108 of file slave.h.

Function Documentation

◆ ec_slave_init()

void ec_slave_init ( ec_slave_t slave,
ec_master_t master,
ec_device_index_t  dev_idx,
uint16_t  ring_position,
uint16_t  station_address 
)

Slave constructor.

Returns
0 in case of success, else < 0
Parameters
slaveEtherCAT slave
masterEtherCAT master
dev_idxDevice index.
ring_positionring position
station_addressstation address to configure

Definition at line 62 of file slave.c.

◆ ec_slave_clear()

void ec_slave_clear ( ec_slave_t slave)

Slave destructor.

Clears and frees a slave object.

Parameters
slaveEtherCAT slave

Definition at line 250 of file slave.c.

◆ ec_slave_fetch_sii_strings()

int ec_slave_fetch_sii_strings ( ec_slave_t slave,
const uint8_t *  data,
size_t  data_size 
)

Fetches data from a STRING category.

Todo:
range checking
Returns
0 in case of success, else < 0
Parameters
slaveEtherCAT slave
datacategory data
data_sizenumber of bytes

Definition at line 464 of file slave.c.

◆ ec_slave_fetch_sii_general()

int ec_slave_fetch_sii_general ( ec_slave_t slave,
const uint8_t *  data,
size_t  data_size 
)

Fetches data from a GENERAL category.

Returns
0 in case of success, else < 0
Parameters
slaveEtherCAT slave
datacategory data
data_sizesize in bytes

Definition at line 525 of file slave.c.

◆ ec_slave_fetch_sii_syncs()

int ec_slave_fetch_sii_syncs ( ec_slave_t slave,
const uint8_t *  data,
size_t  data_size 
)

Fetches data from a SYNC MANAGER category.

Appends the sync managers described in the category to the existing ones.

Returns
0 in case of success, else < 0
Parameters
slaveEtherCAT slave.
dataCategory data.
data_sizeNumber of bytes.

Definition at line 581 of file slave.c.

◆ ec_slave_fetch_sii_pdos()

int ec_slave_fetch_sii_pdos ( ec_slave_t slave,
const uint8_t *  data,
size_t  data_size,
ec_direction_t  dir 
)

Fetches data from a [RT]xPDO category.

Returns
0 in case of success, else < 0
Parameters
slaveEtherCAT slave
datacategory data
data_sizenumber of bytes
dirPDO direction.

Definition at line 652 of file slave.c.

◆ ec_slave_get_sync()

ec_sync_t* ec_slave_get_sync ( ec_slave_t slave,
uint8_t  sync_index 
)

Get the sync manager given an index.

Returns
pointer to sync manager, or NULL.
Parameters
slaveEtherCAT slave.
sync_indexSync manager index.

Definition at line 767 of file slave.c.

◆ ec_slave_get_sdo()

ec_sdo_t* ec_slave_get_sdo ( ec_slave_t slave,
uint16_t  index 
)

Get an SDO from the dictionary.

Returns
The desired SDO, or NULL.
Parameters
slaveEtherCAT slave
indexSDO index

Definition at line 819 of file slave.c.

◆ ec_slave_get_sdo_const()

const ec_sdo_t* ec_slave_get_sdo_const ( const ec_slave_t slave,
uint16_t  index 
)

Get an SDO from the dictionary.

const version.

Returns
The desired SDO, or NULL.
Parameters
slaveEtherCAT slave
indexSDO index

Definition at line 845 of file slave.c.

◆ ec_slave_get_sdo_by_pos_const()

const ec_sdo_t* ec_slave_get_sdo_by_pos_const ( const ec_slave_t slave,
uint16_t  sdo_position 
)

Get an SDO from the dictionary, given its position in the list.

Returns
The desired SDO, or NULL.
Parameters
slaveEtherCAT slave.
sdo_positionSDO list position.

Definition at line 867 of file slave.c.

◆ ec_slave_sdo_count()

uint16_t ec_slave_sdo_count ( const ec_slave_t slave)

Get the number of SDOs in the dictionary.

Returns
SDO count.
Parameters
slaveEtherCAT slave.

Definition at line 889 of file slave.c.

◆ ec_slave_find_pdo()

const ec_pdo_t* ec_slave_find_pdo ( const ec_slave_t slave,
uint16_t  index 
)

Finds a mapped PDO.

Returns
The desired PDO object, or NULL.
Parameters
slaveSlave.
indexPDO index to find.

Definition at line 908 of file slave.c.