|
1 /****************************************************************************** |
|
2 * |
|
3 * t y p e s . h |
|
4 * |
|
5 * EtherCAT-Slave-Typen. |
|
6 * |
|
7 * $Id$ |
|
8 * |
|
9 *****************************************************************************/ |
|
10 |
|
11 #ifndef _EC_TYPES_H_ |
|
12 #define _EC_TYPES_H_ |
|
13 |
|
14 /*****************************************************************************/ |
|
15 |
|
16 /** |
|
17 Typ eines EtherCAT-Slaves. |
|
18 |
|
19 Dieser Typ muss für die Konfiguration bekannt sein. Der |
|
20 Master entscheidet danach, ober bspw. Mailboxes konfigurieren, |
|
21 oder Sync-Manager setzen soll. |
|
22 */ |
|
23 |
|
24 typedef enum |
|
25 { |
|
26 EC_SIMPLE_SLAVE, EC_MAILBOX_SLAVE, EC_NOSYNC_SLAVE |
|
27 } |
|
28 ec_slave_type_t; |
|
29 |
|
30 /*****************************************************************************/ |
|
31 |
|
32 /** |
|
33 Beschreibung eines EtherCAT-Slave-Typs. |
|
34 |
|
35 Diese Beschreibung dient zur Konfiguration einer bestimmten |
|
36 Slave-Art. Sie enthält die Konfigurationsdaten für die |
|
37 Slave-internen Sync-Manager und FMMU's. |
|
38 */ |
|
39 |
|
40 typedef struct slave_desc |
|
41 { |
|
42 const char *vendor_name; /**< Name des Herstellers */ |
|
43 const char *product_name; /**< Name des Slaves-Typs */ |
|
44 const char *product_desc; /**< Genauere Beschreibung des Slave-Typs */ |
|
45 |
|
46 const ec_slave_type_t type; /**< Art des Slave-Typs */ |
|
47 |
|
48 const unsigned char *sm0; /**< Konfigurationsdaten des |
|
49 ersten Sync-Managers */ |
|
50 const unsigned char *sm1; /**< Konfigurationsdaten des |
|
51 zweiten Sync-Managers */ |
|
52 const unsigned char *sm2; /**< Konfigurationsdaten des |
|
53 dritten Sync-Managers */ |
|
54 const unsigned char *sm3; /**< Konfigurationsdaten des |
|
55 vierten Sync-Managers */ |
|
56 |
|
57 const unsigned char *fmmu0; /**< Konfigurationsdaten |
|
58 der ersten FMMU */ |
|
59 |
|
60 const unsigned int process_data_size; /**< Länge der Prozessdaten in Bytes */ |
|
61 const unsigned int channel_count; /**< Anzahl der Kanäle */ |
|
62 |
|
63 int (*read) (unsigned char *, unsigned int); /**< Funktion zum Dekodieren |
|
64 und Lesen der Kanaldaten */ |
|
65 void (*write) (unsigned char *, unsigned int, int); /**< Funktion zum |
|
66 Kodieren und Schreiben |
|
67 der Kanaldaten */ |
|
68 } |
|
69 ec_slave_desc_t; |
|
70 |
|
71 /*****************************************************************************/ |
|
72 |
|
73 /** |
|
74 Identifikation eines Slave-Typs. |
|
75 |
|
76 Diese Struktur wird zur 1:n-Zuordnung von Hersteller- und |
|
77 Produktcodes zu den einzelnen Slave-Typen verwendet. |
|
78 */ |
|
79 |
|
80 typedef struct slave_ident |
|
81 { |
|
82 const unsigned int vendor_id; /**< Hersteller-Code */ |
|
83 const unsigned int product_code; /**< Herstellerspezifischer Produktcode */ |
|
84 const ec_slave_desc_t *desc; /**< Zeiger auf den dazugehörigen |
|
85 Slave-Typ */ |
|
86 } |
|
87 ec_slave_ident_t; |
|
88 |
|
89 extern ec_slave_ident_t slave_idents[]; /**< Statisches Array der |
|
90 Slave-Identifikationen */ |
|
91 extern unsigned int slave_ident_count; /**< Anzahl der vorhandenen |
|
92 Slave-Identifikationen */ |
|
93 |
|
94 /*****************************************************************************/ |
|
95 |
|
96 #endif |