9 *****************************************************************************/ |
9 *****************************************************************************/ |
10 |
10 |
11 #ifndef _EC_DOMAIN_H_ |
11 #ifndef _EC_DOMAIN_H_ |
12 #define _EC_DOMAIN_H_ |
12 #define _EC_DOMAIN_H_ |
13 |
13 |
|
14 #include <linux/list.h> |
|
15 |
14 #include "globals.h" |
16 #include "globals.h" |
15 #include "slave.h" |
17 #include "slave.h" |
16 #include "command.h" |
18 #include "frame.h" |
|
19 |
|
20 /*****************************************************************************/ |
|
21 |
|
22 /** |
|
23 Datenfeld-Konfiguration. |
|
24 */ |
|
25 |
|
26 typedef struct |
|
27 { |
|
28 struct list_head list; |
|
29 ec_slave_t *slave; |
|
30 const ec_sync_t *sync; |
|
31 uint32_t field_offset; |
|
32 void **data_ptr; |
|
33 } |
|
34 ec_field_reg_t; |
17 |
35 |
18 /*****************************************************************************/ |
36 /*****************************************************************************/ |
19 |
37 |
20 /** |
38 /** |
21 EtherCAT-Domäne |
39 EtherCAT-Domäne |
22 |
40 |
23 Verwaltet die Prozessdaten und das hierfür nötige Kommando einer bestimmten |
41 Verwaltet die Prozessdaten und das hierfür nötige Kommando einer bestimmten |
24 Menge von Slaves. |
42 Menge von Slaves. |
25 */ |
43 */ |
26 |
44 |
27 typedef struct ec_domain |
45 struct ec_domain |
28 { |
46 { |
29 int number; /*<< Domänen-Identifikation */ |
47 ec_master_t *master; /**< EtherCAT-Master, zu der die Domäne gehört. */ |
30 ec_command_t command; /**< Kommando zum Senden und Empfangen der |
48 |
31 Prozessdaten */ |
49 unsigned char *data; /**< Prozessdaten */ |
32 unsigned char data[EC_FRAME_SIZE]; /**< Prozessdaten-Array */ |
50 unsigned int data_size; /**< Größe der Prozessdaten */ |
33 unsigned int data_size; /**< Größe der Prozessdaten */ |
51 |
34 unsigned int logical_offset; /**< Logische Basisaddresse */ |
52 ec_frame_t frame; /**< EtherCAT-Frame für die Prozessdaten */ |
35 unsigned int response_count; /**< Anzahl antwortender Slaves */ |
53 |
36 } |
54 ec_domain_mode_t mode; |
37 ec_domain_t; |
55 unsigned int timeout_us; /**< Timeout in Mikrosekunden. */ |
|
56 unsigned int base_address; /**< Logische Basisaddresse der Domain */ |
|
57 unsigned int response_count; /**< Anzahl antwortender Slaves */ |
|
58 |
|
59 struct list_head field_regs; /**< Liste der Datenfeldregistrierungen */ |
|
60 }; |
38 |
61 |
39 /*****************************************************************************/ |
62 /*****************************************************************************/ |
40 |
63 |
41 void ec_domain_init(ec_domain_t *); |
64 void ec_domain_init(ec_domain_t *, ec_master_t *, ec_domain_mode_t, |
|
65 unsigned int); |
|
66 void ec_domain_clear(ec_domain_t *); |
|
67 |
|
68 int ec_domain_alloc(ec_domain_t *, uint32_t); |
42 |
69 |
43 /*****************************************************************************/ |
70 /*****************************************************************************/ |
44 |
71 |
45 #endif |
72 #endif |
46 |
73 |
47 /* Emacs-Konfiguration |
74 /* Emacs-Konfiguration |
48 ;;; Local Variables: *** |
75 ;;; Local Variables: *** |
49 ;;; c-basic-offset:2 *** |
76 ;;; c-basic-offset:4 *** |
50 ;;; End: *** |
77 ;;; End: *** |
51 */ |
78 */ |