equal
deleted
inserted
replaced
50 #define EC_FUNC_HEADER \ |
50 #define EC_FUNC_HEADER \ |
51 if (unlikely(ec_datagram_prealloc(datagram, data_size))) \ |
51 if (unlikely(ec_datagram_prealloc(datagram, data_size))) \ |
52 return -1; \ |
52 return -1; \ |
53 datagram->index = 0; \ |
53 datagram->index = 0; \ |
54 datagram->working_counter = 0; \ |
54 datagram->working_counter = 0; \ |
55 datagram->state = EC_CMD_INIT; |
55 datagram->state = EC_DATAGRAM_INIT; |
56 |
56 |
57 #define EC_FUNC_FOOTER \ |
57 #define EC_FUNC_FOOTER \ |
58 datagram->data_size = data_size; \ |
58 datagram->data_size = data_size; \ |
59 memset(datagram->data, 0x00, data_size); \ |
59 memset(datagram->data, 0x00, data_size); \ |
60 return 0; |
60 return 0; |
67 Datagram constructor. |
67 Datagram constructor. |
68 */ |
68 */ |
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 datagram->type = EC_CMD_NONE; |
72 datagram->type = EC_DATAGRAM_NONE; |
73 datagram->address.logical = 0x00000000; |
73 datagram->address.logical = 0x00000000; |
74 datagram->data = NULL; |
74 datagram->data = NULL; |
75 datagram->mem_size = 0; |
75 datagram->mem_size = 0; |
76 datagram->data_size = 0; |
76 datagram->data_size = 0; |
77 datagram->index = 0x00; |
77 datagram->index = 0x00; |
78 datagram->working_counter = 0x00; |
78 datagram->working_counter = 0x00; |
79 datagram->state = EC_CMD_INIT; |
79 datagram->state = EC_DATAGRAM_INIT; |
80 datagram->t_sent = 0; |
80 datagram->t_sent = 0; |
81 } |
81 } |
82 |
82 |
83 /*****************************************************************************/ |
83 /*****************************************************************************/ |
84 |
84 |
140 { |
140 { |
141 if (unlikely(node_address == 0x0000)) |
141 if (unlikely(node_address == 0x0000)) |
142 EC_WARN("Using node address 0x0000!\n"); |
142 EC_WARN("Using node address 0x0000!\n"); |
143 |
143 |
144 EC_FUNC_HEADER; |
144 EC_FUNC_HEADER; |
145 datagram->type = EC_CMD_NPRD; |
145 datagram->type = EC_DATAGRAM_NPRD; |
146 datagram->address.physical.slave = node_address; |
146 datagram->address.physical.slave = node_address; |
147 datagram->address.physical.mem = offset; |
147 datagram->address.physical.mem = offset; |
148 EC_FUNC_FOOTER; |
148 EC_FUNC_FOOTER; |
149 } |
149 } |
150 |
150 |
168 { |
168 { |
169 if (unlikely(node_address == 0x0000)) |
169 if (unlikely(node_address == 0x0000)) |
170 EC_WARN("Using node address 0x0000!\n"); |
170 EC_WARN("Using node address 0x0000!\n"); |
171 |
171 |
172 EC_FUNC_HEADER; |
172 EC_FUNC_HEADER; |
173 datagram->type = EC_CMD_NPWR; |
173 datagram->type = EC_DATAGRAM_NPWR; |
174 datagram->address.physical.slave = node_address; |
174 datagram->address.physical.slave = node_address; |
175 datagram->address.physical.mem = offset; |
175 datagram->address.physical.mem = offset; |
176 EC_FUNC_FOOTER; |
176 EC_FUNC_FOOTER; |
177 } |
177 } |
178 |
178 |
193 size_t data_size |
193 size_t data_size |
194 /**< number of bytes to read */ |
194 /**< number of bytes to read */ |
195 ) |
195 ) |
196 { |
196 { |
197 EC_FUNC_HEADER; |
197 EC_FUNC_HEADER; |
198 datagram->type = EC_CMD_APRD; |
198 datagram->type = EC_DATAGRAM_APRD; |
199 datagram->address.physical.slave = (int16_t) ring_position * (-1); |
199 datagram->address.physical.slave = (int16_t) ring_position * (-1); |
200 datagram->address.physical.mem = offset; |
200 datagram->address.physical.mem = offset; |
201 EC_FUNC_FOOTER; |
201 EC_FUNC_FOOTER; |
202 } |
202 } |
203 |
203 |
218 size_t data_size |
218 size_t data_size |
219 /**< number of bytes to write */ |
219 /**< number of bytes to write */ |
220 ) |
220 ) |
221 { |
221 { |
222 EC_FUNC_HEADER; |
222 EC_FUNC_HEADER; |
223 datagram->type = EC_CMD_APWR; |
223 datagram->type = EC_DATAGRAM_APWR; |
224 datagram->address.physical.slave = (int16_t) ring_position * (-1); |
224 datagram->address.physical.slave = (int16_t) ring_position * (-1); |
225 datagram->address.physical.mem = offset; |
225 datagram->address.physical.mem = offset; |
226 EC_FUNC_FOOTER; |
226 EC_FUNC_FOOTER; |
227 } |
227 } |
228 |
228 |
241 size_t data_size |
241 size_t data_size |
242 /**< number of bytes to read */ |
242 /**< number of bytes to read */ |
243 ) |
243 ) |
244 { |
244 { |
245 EC_FUNC_HEADER; |
245 EC_FUNC_HEADER; |
246 datagram->type = EC_CMD_BRD; |
246 datagram->type = EC_DATAGRAM_BRD; |
247 datagram->address.physical.slave = 0x0000; |
247 datagram->address.physical.slave = 0x0000; |
248 datagram->address.physical.mem = offset; |
248 datagram->address.physical.mem = offset; |
249 EC_FUNC_FOOTER; |
249 EC_FUNC_FOOTER; |
250 } |
250 } |
251 |
251 |
264 size_t data_size |
264 size_t data_size |
265 /**< number of bytes to write */ |
265 /**< number of bytes to write */ |
266 ) |
266 ) |
267 { |
267 { |
268 EC_FUNC_HEADER; |
268 EC_FUNC_HEADER; |
269 datagram->type = EC_CMD_BWR; |
269 datagram->type = EC_DATAGRAM_BWR; |
270 datagram->address.physical.slave = 0x0000; |
270 datagram->address.physical.slave = 0x0000; |
271 datagram->address.physical.mem = offset; |
271 datagram->address.physical.mem = offset; |
272 EC_FUNC_FOOTER; |
272 EC_FUNC_FOOTER; |
273 } |
273 } |
274 |
274 |
287 size_t data_size |
287 size_t data_size |
288 /**< number of bytes to read/write */ |
288 /**< number of bytes to read/write */ |
289 ) |
289 ) |
290 { |
290 { |
291 EC_FUNC_HEADER; |
291 EC_FUNC_HEADER; |
292 datagram->type = EC_CMD_LRW; |
292 datagram->type = EC_DATAGRAM_LRW; |
293 datagram->address.logical = offset; |
293 datagram->address.logical = offset; |
294 EC_FUNC_FOOTER; |
294 EC_FUNC_FOOTER; |
295 } |
295 } |
296 |
296 |
297 /*****************************************************************************/ |
297 /*****************************************************************************/ |