Link-State im Device.
/******************************************************************************
*
* Oeffentliche EtherCAT-Schnittstellen fuer Echtzeitprozesse.
*
* $Id$
*
*****************************************************************************/
#ifndef _ETHERCAT_RT_H_
#define _ETHERCAT_RT_H_
/*****************************************************************************/
struct ec_master;
typedef struct ec_master ec_master_t;
struct ec_domain;
typedef struct ec_domain ec_domain_t;
struct ec_slave;
typedef struct ec_slave ec_slave_t;
typedef enum
{
ec_sync,
ec_async
}
ec_domain_mode_t;
typedef enum
{
ec_status,
ec_control,
ec_ipvalue,
ec_opvalue
}
ec_field_type_t;
typedef struct
{
void **data;
const char *address;
const char *vendor;
const char *product;
ec_field_type_t field_type;
unsigned int field_index;
unsigned int field_count;
}
ec_field_init_t;
/*****************************************************************************/
// Master request functions
ec_master_t *EtherCAT_rt_request_master(unsigned int master_index);
void EtherCAT_rt_release_master(ec_master_t *master);
/*****************************************************************************/
// Master methods
ec_domain_t *EtherCAT_rt_master_register_domain(ec_master_t *master,
ec_domain_mode_t mode,
unsigned int timeout_us);
int EtherCAT_rt_master_activate(ec_master_t *master);
int EtherCAT_rt_master_deactivate(ec_master_t *master);
void EtherCAT_rt_master_debug(ec_master_t *master, int level);
void EtherCAT_rt_master_print(const ec_master_t *master);
/*****************************************************************************/
// Domain Methods
ec_slave_t *EtherCAT_rt_register_slave_field(ec_domain_t *domain,
const char *address,
const char *vendor_name,
const char *product_name,
void **data_ptr,
ec_field_type_t field_type,
unsigned int field_index,
unsigned int field_count);
int EtherCAT_rt_domain_xio(ec_domain_t *domain);
/*****************************************************************************/
// Slave Methods
int EtherCAT_rt_canopen_sdo_write(ec_slave_t *slave,
uint16_t sdo_index,
uint8_t sdo_subindex,
uint32_t value,
size_t size);
int EtherCAT_rt_canopen_sdo_read(ec_slave_t *slave,
uint16_t sdo_index,
uint8_t sdo_subindex,
uint32_t *value);
int EtherCAT_rt_canopen_sdo_addr_write(ec_master_t *master,
const char *addr,
uint16_t sdo_index,
uint8_t sdo_subindex,
uint32_t value,
size_t size);
int EtherCAT_rt_canopen_sdo_addr_read(ec_master_t *master,
const char *addr,
uint16_t sdo_index,
uint8_t sdo_subindex,
uint32_t *value);
/*****************************************************************************/
#endif