equal
deleted
inserted
replaced
69 |
69 |
70 void ec_datagram_init(ec_datagram_t *datagram /**< EtherCAT datagram */) |
70 void ec_datagram_init(ec_datagram_t *datagram /**< EtherCAT datagram */) |
71 { |
71 { |
72 INIT_LIST_HEAD(&datagram->queue); // mark as unqueued |
72 INIT_LIST_HEAD(&datagram->queue); // mark as unqueued |
73 datagram->type = EC_DATAGRAM_NONE; |
73 datagram->type = EC_DATAGRAM_NONE; |
74 datagram->address.logical = 0x00000000; |
74 memset(datagram->address, 0x00, EC_ADDR_LEN); |
75 datagram->data = NULL; |
75 datagram->data = NULL; |
76 datagram->mem_size = 0; |
76 datagram->mem_size = 0; |
77 datagram->data_size = 0; |
77 datagram->data_size = 0; |
78 datagram->index = 0x00; |
78 datagram->index = 0x00; |
79 datagram->working_counter = 0x00; |
79 datagram->working_counter = 0x00; |
145 if (unlikely(node_address == 0x0000)) |
145 if (unlikely(node_address == 0x0000)) |
146 EC_WARN("Using node address 0x0000!\n"); |
146 EC_WARN("Using node address 0x0000!\n"); |
147 |
147 |
148 EC_FUNC_HEADER; |
148 EC_FUNC_HEADER; |
149 datagram->type = EC_DATAGRAM_NPRD; |
149 datagram->type = EC_DATAGRAM_NPRD; |
150 datagram->address.physical.slave = node_address; |
150 EC_WRITE_U16(datagram->address, node_address); |
151 datagram->address.physical.mem = offset; |
151 EC_WRITE_U16(datagram->address + 2, offset); |
152 EC_FUNC_FOOTER; |
152 EC_FUNC_FOOTER; |
153 } |
153 } |
154 |
154 |
155 /*****************************************************************************/ |
155 /*****************************************************************************/ |
156 |
156 |
173 if (unlikely(node_address == 0x0000)) |
173 if (unlikely(node_address == 0x0000)) |
174 EC_WARN("Using node address 0x0000!\n"); |
174 EC_WARN("Using node address 0x0000!\n"); |
175 |
175 |
176 EC_FUNC_HEADER; |
176 EC_FUNC_HEADER; |
177 datagram->type = EC_DATAGRAM_NPWR; |
177 datagram->type = EC_DATAGRAM_NPWR; |
178 datagram->address.physical.slave = node_address; |
178 EC_WRITE_U16(datagram->address, node_address); |
179 datagram->address.physical.mem = offset; |
179 EC_WRITE_U16(datagram->address + 2, offset); |
180 EC_FUNC_FOOTER; |
180 EC_FUNC_FOOTER; |
181 } |
181 } |
182 |
182 |
183 /*****************************************************************************/ |
183 /*****************************************************************************/ |
184 |
184 |
198 /**< number of bytes to read */ |
198 /**< number of bytes to read */ |
199 ) |
199 ) |
200 { |
200 { |
201 EC_FUNC_HEADER; |
201 EC_FUNC_HEADER; |
202 datagram->type = EC_DATAGRAM_APRD; |
202 datagram->type = EC_DATAGRAM_APRD; |
203 datagram->address.physical.slave = (int16_t) ring_position * (-1); |
203 EC_WRITE_S16(datagram->address, (int16_t) ring_position * (-1)); |
204 datagram->address.physical.mem = offset; |
204 EC_WRITE_U16(datagram->address + 2, offset); |
205 EC_FUNC_FOOTER; |
205 EC_FUNC_FOOTER; |
206 } |
206 } |
207 |
207 |
208 /*****************************************************************************/ |
208 /*****************************************************************************/ |
209 |
209 |
223 /**< number of bytes to write */ |
223 /**< number of bytes to write */ |
224 ) |
224 ) |
225 { |
225 { |
226 EC_FUNC_HEADER; |
226 EC_FUNC_HEADER; |
227 datagram->type = EC_DATAGRAM_APWR; |
227 datagram->type = EC_DATAGRAM_APWR; |
228 datagram->address.physical.slave = (int16_t) ring_position * (-1); |
228 EC_WRITE_S16(datagram->address, (int16_t) ring_position * (-1)); |
229 datagram->address.physical.mem = offset; |
229 EC_WRITE_U16(datagram->address + 2, offset); |
230 EC_FUNC_FOOTER; |
230 EC_FUNC_FOOTER; |
231 } |
231 } |
232 |
232 |
233 /*****************************************************************************/ |
233 /*****************************************************************************/ |
234 |
234 |
246 /**< number of bytes to read */ |
246 /**< number of bytes to read */ |
247 ) |
247 ) |
248 { |
248 { |
249 EC_FUNC_HEADER; |
249 EC_FUNC_HEADER; |
250 datagram->type = EC_DATAGRAM_BRD; |
250 datagram->type = EC_DATAGRAM_BRD; |
251 datagram->address.physical.slave = 0x0000; |
251 EC_WRITE_U16(datagram->address, 0x0000); |
252 datagram->address.physical.mem = offset; |
252 EC_WRITE_U16(datagram->address + 2, offset); |
253 EC_FUNC_FOOTER; |
253 EC_FUNC_FOOTER; |
254 } |
254 } |
255 |
255 |
256 /*****************************************************************************/ |
256 /*****************************************************************************/ |
257 |
257 |
269 /**< number of bytes to write */ |
269 /**< number of bytes to write */ |
270 ) |
270 ) |
271 { |
271 { |
272 EC_FUNC_HEADER; |
272 EC_FUNC_HEADER; |
273 datagram->type = EC_DATAGRAM_BWR; |
273 datagram->type = EC_DATAGRAM_BWR; |
274 datagram->address.physical.slave = 0x0000; |
274 EC_WRITE_U16(datagram->address, 0x0000); |
275 datagram->address.physical.mem = offset; |
275 EC_WRITE_U16(datagram->address + 2, offset); |
276 EC_FUNC_FOOTER; |
276 EC_FUNC_FOOTER; |
277 } |
277 } |
278 |
278 |
279 /*****************************************************************************/ |
279 /*****************************************************************************/ |
280 |
280 |
292 /**< number of bytes to read/write */ |
292 /**< number of bytes to read/write */ |
293 ) |
293 ) |
294 { |
294 { |
295 EC_FUNC_HEADER; |
295 EC_FUNC_HEADER; |
296 datagram->type = EC_DATAGRAM_LRW; |
296 datagram->type = EC_DATAGRAM_LRW; |
297 datagram->address.logical = offset; |
297 EC_WRITE_U32(datagram->address, offset); |
298 EC_FUNC_FOOTER; |
298 EC_FUNC_FOOTER; |
299 } |
299 } |
300 |
300 |
301 /*****************************************************************************/ |
301 /*****************************************************************************/ |