fp@39: /****************************************************************************** fp@0: * fp@54: * t y p e s . h fp@0: * fp@0: * EtherCAT-Slave-Typen. fp@0: * fp@39: * $Id$ fp@0: * fp@39: *****************************************************************************/ fp@0: fp@0: #ifndef _EC_TYPES_H_ fp@0: #define _EC_TYPES_H_ fp@0: fp@55: #include "../include/EtherCAT_rt.h" fp@55: fp@41: /*****************************************************************************/ fp@41: fp@0: /** fp@55: Features eines EtherCAT-Slaves. fp@0: fp@55: Diese Angabe muss für die Konfiguration bekannt sein. Der fp@0: Master entscheidet danach, ober bspw. Mailboxes konfigurieren, fp@0: oder Sync-Manager setzen soll. fp@0: */ fp@0: fp@0: typedef enum fp@0: { fp@61: EC_SIMPLE_SLAVE, EC_MAILBOX_SLAVE, EC_NOSYNC_SLAVE fp@0: } fp@55: ec_slave_features_t; fp@0: fp@39: /*****************************************************************************/ fp@0: fp@0: /** fp@0: Beschreibung eines EtherCAT-Slave-Typs. fp@0: fp@0: Diese Beschreibung dient zur Konfiguration einer bestimmten fp@0: Slave-Art. Sie enthält die Konfigurationsdaten für die fp@0: Slave-internen Sync-Manager und FMMU's. fp@0: */ fp@0: fp@55: struct ec_slave_type fp@0: { fp@61: const char *vendor_name; /**< Name des Herstellers */ fp@61: const char *product_name; /**< Name des Slaves-Typs */ fp@61: const char *product_desc; /**< Genauere Beschreibung des Slave-Typs */ fp@0: fp@61: ec_slave_features_t features; /**< Features des Slave-Typs */ fp@0: fp@61: const unsigned char *sm0; /**< Konfigurationsdaten des fp@61: ersten Sync-Managers */ fp@61: const unsigned char *sm1; /**< Konfigurationsdaten des fp@61: zweiten Sync-Managers */ fp@61: const unsigned char *sm2; /**< Konfigurationsdaten des fp@61: dritten Sync-Managers */ fp@61: const unsigned char *sm3; /**< Konfigurationsdaten des fp@61: vierten Sync-Managers */ fp@0: fp@61: const unsigned char *fmmu0; /**< Konfigurationsdaten fp@61: der ersten FMMU */ fp@0: fp@61: unsigned int process_data_size; /**< Länge der Prozessdaten in Bytes */ fp@55: }; fp@0: fp@39: /*****************************************************************************/ fp@0: fp@0: /** fp@0: Identifikation eines Slave-Typs. fp@0: fp@0: Diese Struktur wird zur 1:n-Zuordnung von Hersteller- und fp@0: Produktcodes zu den einzelnen Slave-Typen verwendet. fp@0: */ fp@0: fp@39: typedef struct slave_ident fp@0: { fp@61: unsigned int vendor_id; /**< Hersteller-Code */ fp@61: unsigned int product_code; /**< Herstellerspezifischer Produktcode */ fp@61: const ec_slave_type_t *type; /**< Zeiger auf den entsprechenden Typ */ fp@39: } fp@54: ec_slave_ident_t; fp@0: fp@54: extern ec_slave_ident_t slave_idents[]; /**< Statisches Array der fp@54: Slave-Identifikationen */ fp@39: extern unsigned int slave_ident_count; /**< Anzahl der vorhandenen fp@39: Slave-Identifikationen */ fp@0: fp@39: /*****************************************************************************/ fp@0: fp@0: #endif