fp@54: /****************************************************************************** fp@54: * fp@54: * Oeffentliche EtherCAT-Schnittstellen fuer Echtzeitprozesse. fp@54: * fp@54: * $Id$ fp@54: * fp@54: *****************************************************************************/ fp@54: fp@54: #ifndef _ETHERCAT_RT_H_ fp@54: #define _ETHERCAT_RT_H_ fp@54: fp@54: /*****************************************************************************/ fp@54: fp@54: struct ec_master; fp@54: typedef struct ec_master ec_master_t; fp@54: fp@55: struct ec_slave_type; fp@55: typedef struct ec_slave_type ec_slave_type_t; fp@55: fp@55: struct ec_slave; fp@55: typedef struct ec_slave ec_slave_t; fp@55: fp@61: struct ec_slave_init; fp@61: typedef struct ec_slave_init ec_slave_init_t; fp@61: fp@54: /*****************************************************************************/ fp@54: fp@54: ec_master_t *EtherCAT_rt_request_master(unsigned int master_index); fp@54: fp@54: void EtherCAT_rt_release_master(ec_master_t *master); fp@54: fp@55: ec_slave_t *EtherCAT_rt_register_slave(ec_master_t *master, fp@55: unsigned int slave_index, fp@55: const char *vendor_name, fp@55: const char *product_name, fp@56: int domain); fp@54: fp@61: int EtherCAT_rt_register_slave_list(ec_master_t *master, fp@61: const ec_slave_init_t *slaves, fp@61: unsigned int count); fp@61: fp@54: int EtherCAT_rt_activate_slaves(ec_master_t *master); fp@54: fp@54: int EtherCAT_rt_deactivate_slaves(ec_master_t *master); fp@54: fp@56: int EtherCAT_rt_domain_xio(ec_master_t *master, unsigned int domain, fp@56: unsigned int timeout_us); fp@56: fp@56: void EtherCAT_rt_debug_level(ec_master_t *master, int level); fp@55: fp@64: int EtherCAT_rt_canopen_sdo_write(ec_master_t *master, ec_slave_t *slave, fp@64: unsigned int sdo_index, fp@64: unsigned char sdo_subindex, fp@64: unsigned int value, unsigned int size); fp@64: fp@55: /*****************************************************************************/ fp@55: fp@55: /** fp@55: EtherCAT-Slave fp@55: */ fp@55: fp@55: struct ec_slave fp@55: { fp@55: // Base data fp@55: unsigned char base_type; /**< Slave-Typ */ fp@55: unsigned char base_revision; /**< Revision */ fp@55: unsigned short base_build; /**< Build-Nummer */ fp@55: fp@55: // Addresses fp@55: short ring_position; /**< (Negative) Position des Slaves im Bus */ fp@55: unsigned short station_address; /**< Konfigurierte Slave-Adresse */ fp@55: fp@55: // Slave information interface fp@55: unsigned int sii_vendor_id; /**< Identifikationsnummer des Herstellers */ fp@55: unsigned int sii_product_code; /**< Herstellerspezifischer Produktcode */ fp@55: unsigned int sii_revision_number; /**< Revisionsnummer */ fp@55: unsigned int sii_serial_number; /**< Seriennummer der Klemme */ fp@55: fp@55: const ec_slave_type_t *type; /**< Zeiger auf die Beschreibung fp@55: des Slave-Typs */ fp@55: fp@55: unsigned int logical_address; /**< Konfigurierte, logische Adresse */ fp@55: fp@55: void *process_data; /**< Zeiger auf den Speicherbereich fp@55: innerhalb eines Prozessdatenobjekts */ fp@55: void *private_data; /**< Zeiger auf privaten Datenbereich */ fp@55: int (*configure)(ec_slave_t *); /**< Zeiger auf die Funktion zur fp@55: Konfiguration */ fp@55: fp@55: unsigned char registered; /**< Der Slave wurde registriert */ fp@55: fp@55: unsigned int domain; /**< Prozessdatendomäne */ fp@55: fp@55: int error_reported; /**< Ein Zugriffsfehler wurde bereits gemeldet */ fp@55: }; fp@54: fp@54: /*****************************************************************************/ fp@54: fp@61: /** fp@61: Beschreibung eines EtherCAT-Slave-Typs. fp@61: fp@61: Diese Beschreibung dient zur Konfiguration einer bestimmten fp@61: Slave-Art. Sie enthält die Konfigurationsdaten für die fp@61: Slave-internen Sync-Manager und FMMU's. fp@61: */ fp@61: fp@61: struct ec_slave_init fp@61: { fp@61: ec_slave_t **slave_ptr; /**< Zeiger auf den Slave-Zeiger, der mit der fp@61: Adresse des Slaves belegt werden soll. */ fp@61: unsigned int bus_index; /**< Bus-Index des zu registrierenden Slaves */ fp@61: const char *vendor_name; /**< Name des Herstellers */ fp@61: const char *product_name; /**< Name des Slaves-Typs */ fp@61: unsigned int domain; /**< Domäne, in der registriert werden soll. */ fp@61: }; fp@61: fp@61: /*****************************************************************************/ fp@61: fp@54: #endif