fp@0: /****************************************************************
fp@0:  *
fp@0:  *  e c _ s l a v e . h
fp@0:  *
fp@0:  *  Struktur für einen EtherCAT-Slave.
fp@0:  *
fp@0:  *  $Date$
fp@0:  *  $Author$
fp@0:  *
fp@0:  ***************************************************************/
fp@0: 
fp@0: #ifndef _EC_SLAVE_H_
fp@0: #define _EC_SLAVE_H_
fp@0: 
fp@0: #include "ec_types.h"
fp@0: 
fp@0: /***************************************************************/
fp@0: 
fp@0: /**
fp@0:    EtherCAT-Slave
fp@5: 
fp@5:    Achtung: Bei Änderungen dieser Struktur immer das Define
fp@5:    ECAT_INIT_SLAVE anpassen!
fp@0: */
fp@0: 
fp@0: typedef struct
fp@0: {
fp@0:   // Base data
fp@0:   unsigned char type; /**< Slave-Typ */
fp@0:   unsigned char revision; /**< Revision */
fp@0:   unsigned short build; /**< Build-Nummer */
fp@0: 
fp@0:   // Addresses
fp@0:   short ring_position; /**< (Negative) Position des Slaves im Bus */
fp@0:   unsigned short station_address; /**< Konfigurierte Slave-Adresse */
fp@0: 
fp@0:   // Slave information interface
fp@0:   unsigned int vendor_id; /**< Identifikationsnummer des Herstellers */
fp@0:   unsigned int product_code; /**< Herstellerspezifischer Produktcode */
fp@0:   unsigned int revision_number; /**< Revisionsnummer */
fp@5:   unsigned int serial_number; /**< Seriennummer der Klemme */
fp@0: 
fp@0:   const EtherCAT_slave_desc_t *desc; /**< Zeiger auf die Beschreibung
fp@0:                                         des Slave-Typs */
fp@0: 
fp@0:   unsigned int logical_address0; /**< Konfigurierte, logische adresse */
fp@0: 
fp@0:   EtherCAT_state_t current_state; /**< Aktueller Zustand */
fp@0:   EtherCAT_state_t requested_state; /**< Angeforderter Zustand */
fp@0: 
fp@0:   unsigned char *process_data; /**< Zeiger auf den Speicherbereich
fp@0:                                   im Prozessdatenspeicher des Masters */
fp@0: }
fp@0: EtherCAT_slave_t;
fp@0: 
fp@5: #define ECAT_INIT_SLAVE(TYPE) {0, 0, 0, 0, 0, 0, 0, 0, 0, \
fp@0:                                TYPE, 0, ECAT_STATE_UNKNOWN, \
fp@0:                                ECAT_STATE_UNKNOWN, NULL}
fp@0: 
fp@0: /***************************************************************/
fp@0: 
fp@0: // Slave construction and deletion
fp@0: void EtherCAT_slave_init(EtherCAT_slave_t *);
fp@0: void EtherCAT_slave_clear(EtherCAT_slave_t *);
fp@0: 
fp@0: int EtherCAT_read_value(EtherCAT_slave_t *, unsigned int);
fp@0: void EtherCAT_write_value(EtherCAT_slave_t *, unsigned int, int);
fp@0: 
fp@0: /***************************************************************/
fp@0: 
fp@0: #endif