esc.h 11.2 KB
Newer Older
Jeroen Vreeken's avatar
Jeroen Vreeken committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
/*
	Copyright Jeroen Vreeken (pe1rxq@amsat.org), 2009, 2011
	Copyright Stichting C.A. Muller Radioastronomiestation, 2009, 2011

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program.  If not, see <http://www.gnu.org/licenses/>.

 */

#ifndef _INCLUDE_EC_ESC_H_
#define _INCLUDE_EC_ESC_H_


#include <unistd.h>
#include <ec.h>

#define ESC_ADDR_MAP_TYPE			0x0000
#define ESC_TYPE_ESC					0x02
#define ESC_TYPE_IPCORE					0x04
#define ESC_TYPE_ET1100					0x11
#define ESC_TYPE_ET1200					0x12
#define ESC_ADDR_MAP_REVISION			0x0001
#define ESC_ADDR_MAP_BUILD			0x0002
#define ESC_ADDR_MAP_FMMUS_SUPPORTED		0x0004
#define ESC_ADDR_MAP_SYNCMANAGERS_SUPPORTED	0x0005
#define ESC_ADDR_MAP_RAM_SIZE			0x0006
#define ESC_ADDR_MAP_FEATURES			0x0008
#define ESC_FEATURE_FMMU_BYTE_ORIENTED 		0x0001
#define ESC_FEATURE_DISTRIBUTED_CLOCKS			0x0004
#define ESC_FEATURE_64BIT_DISTRIBUTED_CLOCKS		0x0008
#define ESC_FEATURE_LOW_JITTER_EBUS			0x0010
#define ESC_FEATURE_ENHANCED_LINK_DETECTION_EBUS	0x0020
#define ESC_FEATURE_ENHANCED_LINK_DETECTION_MII		0x0040
#define ESC_FEATURE_SEPERATE_FCS_HANDLING		0x0080
#define ESC_FEATURE_ENHANCED_DC_SYNC_ACTIVATION		0x0100
#define ESC_ADDR_MAP_AL_CONTROL			0x0120
#define ESC_ADDR_MAP_AL_CONTROL_ERROR_ACK		0x0010
#define ESC_ADDR_MAP_AL_STATUS			0x0130
#define ESC_ADDR_MAP_AL_STATUS_ERR_IND			0x0010
#define ESC_ADDR_MAP_AL_STATUS_CODE		0x0134

#define ESC_ADDR_MAP_ESI_EEPROM_CONFIG		0x0500
#define ESC_ESI_EEPROM_CONFIG_PDI			0x01
#define ESC_ESI_EEPROM_CONFIG_FORCE_ECAT		0x02
#define ESC_ADDR_MAP_ESI_EEPROM_PDI_STATE	0x0501
#define ESC_ADDR_MAP_ESI_EEPROM_CONTROL_STATUS	0x0502
#define ESC_ESI_EEPROM_CONTROL_STATUS_READ_8B		0x0001
#define ESC_ESI_EEPROM_CONTROL_STATUS_CMD_READ		0x0100
#define ESC_ESI_EEPROM_CONTROL_STATUS_CHKSUM_ERR	0x0800
#define ESC_ESI_EEPROM_CONTROL_STATUS_NOT_LOADED	0x1000
#define ESC_ESI_EEPROM_CONTROL_STATUS_ACK_ERR		0x2000
#define ESC_ESI_EEPROM_CONTROL_STATUS_WRITE_ERR		0x4000
#define ESC_ESI_EEPROM_CONTROL_STATUS_BUSY		0x8000
#define ESC_ADDR_MAP_ESI_EEPROM_ADDRESS		0x0504
#define ESC_ADDR_MAP_ESI_EEPROM_DATA		0x0508

#define ESC_ADDR_MAP_SYNCMANAGER			0x0800
#define ESC_ADDR_MAP_SYNCMANAGER_OFFSET			0x0008
#define ESC_ADDR_MAP_SYNCMANAGER_NR(nr)	\
	(ESC_ADDR_MAP_SYNCMANAGER + ESC_ADDR_MAP_SYNCMANAGER_OFFSET * (nr))
#define ESC_ADDR_MAP_SYNCMANAGER_PHYSICAL_START	0x0
#define ESC_ADDR_MAP_SYNCMANAGER_LENGTH		0x2
#define ESC_ADDR_MAP_SYNCMANAGER_CONTROL	0x4
#define ESC_SYNCMANAGER_CONTROL_MAILBOX			0x02
#define ESC_SYNCMANAGER_CONTROL_WRITE			0x04
#define ESC_SYNCMANAGER_CONTROL_INT_PDI			0x20
#define ESC_SYNCMANAGER_CONTROL_WATCHDOG_ENABLE		0x40
#define ESC_ADDR_MAP_SYNCMANAGER_STATUS		0x5
#define ESC_ADDR_MAP_SYNCMANAGER_ACTIVATE	0x6
#define ESC_SYNCMANAGER_ACTIVATE_ENABLE			0x01
#define ESC_ADDR_MAP_SYNCMANAGER_PDI_CONTROL	0x7

#define ESC_ADDR_MAP_DC_SYSTEM_TIME		0x0910
#define ESC_ADDR_MAP_DC_CYCLIC_UNIT_CONTROL	0x0980
#define ESC_ADDR_MAP_DC_ACTIVATION_REGISTER	0x0981
#define ESC_ADDR_MAP_DC_START_TIME_CYCLIC_OPERATION	0x0990
#define ESC_ADDR_MAP_DC_SYNC0_CYCLE_TIME	0x09a0
#define ESC_ADDR_MAP_DC_SYNC1_CYCLE_TIME	0x09a4

#define ESC_DC_ACTIVATION_REGISTER_SYNC_OUT_ACTIVE	0x01
#define ESC_DC_ACTIVATION_REGISTER_SYNC0_ACTIVE		0x02
#define ESC_DC_ACTIVATION_REGISTER_SYNC1_ACTIVE		0x04
#define ESC_DC_EPOCH	(946684800 + 2)


#define ESC_AL_STATE_INIT		1
#define ESC_AL_STATE_REQUEST_BOOTSTRAP	3
#define ESC_AL_STATE_PRE_OPERATIONAL	2
#define ESC_AL_STATE_SAFE_OPERATIONAL	4
#define ESC_AL_STATE_OPERATIONAL	8


#define ESC_ESI_ADDR_VENDORID		0x10
#define ESC_ESI_ADDR_PRODUCTCODE	0x14
#define ESC_ESI_ADDR_REVISIONNO		0x18
#define ESC_ESI_ADDR_SERIALNO		0x1c

#define ESC_ESI_VENDORID_BECKHOFF	0x00000002
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1002	0x03ea3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1004	0x03ec3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1008	0x03f03052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1012	0x03f43052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1014	0x03f63052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1018	0x03fa3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1024	0x04003052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1034	0x040a3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1084	0x043c3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1088	0x04403052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1094	0x04463052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1098	0x044a3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1104	0x04503052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1114	0x045a3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1124	0x04643052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1134	0x046e3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1144	0x04783052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1202	0x04b23052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1252	0x04e43052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1262	0x04ee3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1702	0x06a63052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1712	0x06b03052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL1722	0x06ba3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2002	0x07d23052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2004	0x07d43052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2008	0x07d83052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2022	0x07e63052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2024	0x07e83052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2032	0x07f03052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2034	0x07f23052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2042	0x07fa3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2084	0x08243052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2088	0x08283052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2124	0x084c3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2202	0x089a3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2252	0x08cc3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2262	0x08d63052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2502	0x09c63052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2602	0x0a2a3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2612	0x0a343052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2622	0x0a3e3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2624	0x0a403052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2712	0x0a983052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2722	0x0aa23052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL2732	0x0aac3052

#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3001	0x0bb93052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3002	0x0bba3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3004	0x0bbc3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3008	0x0bc03052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3041	0x0be13052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3042	0x0be23052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3044	0x0be43052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3048	0x0be83052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3051	0x0beb3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3052	0x0bec3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3054	0x0bee3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3058	0x0bf23052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3061	0x0bf53052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3062	0x0bf63052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3064	0x0bf83052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3068	0x0bfc3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3102	0x0c1e3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3112	0x0c283052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3122	0x0c323052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3142	0x0c463052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3152	0x0c503052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3162	0x0c5a3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3201	0x0c813052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3202	0x0c823052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3204	0x0c843052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3311	0x0cef3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3312	0x0cf03052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3314	0x0cf23052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3351	0x0d173052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3403	0x0d4b3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3602	0x0e123052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL3612	0x0e1c3052

#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4001	0x0fa13052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4002	0x0fa23052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4004	0x0fa43052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4008	0x0fa83052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4011	0x0fab3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4012	0x0fac3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4014	0x0fae3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4018	0x0fb23052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4021	0x0fb53052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4022	0x0fb63052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4024	0x0fb83052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4028	0x0fbc3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4031	0x0fbf3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4032	0x0fc03052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4034	0x0fc23052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4038	0x0fc63052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4102	0x10063052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4112	0x10103052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4114	0x10123052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4122	0x101a3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4132	0x10243052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL4134	0x10263052

#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL5001	0x13893052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL5101	0x13ed3052
#define ESC_ESI_PRODUCTCODE_BECKHOFF_EL5151	0x141f3052


int esc_init(struct ec_dgram_addr *addr);

ssize_t esc_esi_eeprom_read(struct ec_dgram_addr *ec_addr, 
    void *buffer, size_t offset, size_t size);

uint32_t esc_esi_vendorid_get(struct ec_dgram_addr *ec_addr);
uint32_t esc_esi_productcode_get(struct ec_dgram_addr *ec_addr);
uint32_t esc_esi_revisionno_get(struct ec_dgram_addr *ec_addr);
uint32_t esc_esi_serialno_get(struct ec_dgram_addr *ec_addr);


int esc_al_state_get(struct ec_dgram_addr *addr);
int esc_al_state_set(struct ec_dgram_addr *addr, int newstate);

int esc_al_error_ack(struct ec_dgram_addr *addr);
int esc_al_status_code_get(struct ec_dgram_addr *addr);

int esc_dc_init(struct ec_dgram_addr *addr);
int esc_dc_sync0_cycle_time(struct ec_dgram_addr *addr, unsigned long ns);

int esc_syncmanager_claim(struct ec_dgram_addr *addr);

struct esc_syncmanager_info {
	size_t	start;
	size_t	len;
	int	sm;
};

struct esc_mailbox *esc_mailbox_create(struct ec_dgram_addr *node,
    struct esc_syncmanager_info *rd, struct esc_syncmanager_info *wr);
ssize_t esc_mailbox_read(struct esc_mailbox *mailbox, int *type,
    void *data, size_t len);
ssize_t esc_mailbox_write(struct esc_mailbox *mailbox, int type,
    void *data, size_t len);
void esc_mailbox_destroy(struct esc_mailbox *mailbox);

struct canopen_dev *esc_coe_create(struct esc_mailbox *mailbox);
void esc_coe_destroy(struct canopen_dev *coe);

int esc_pdo_tx_set(struct ec_dgram_addr *addr,
    struct esc_syncmanager_info *sm, unsigned char **data,
    bool watchdog);
int esc_pdo_rx_set(struct ec_dgram_addr *addr,
    struct esc_syncmanager_info *sm, unsigned char **data);

#endif /* _INCLUDE_EC_ESC_H_ */