302 return 0; |
302 return 0; |
303 } |
303 } |
304 |
304 |
305 /*****************************************************************************/ |
305 /*****************************************************************************/ |
306 |
306 |
|
307 int ecrt_master_write_idn(ec_master_t *master, uint16_t slave_position, |
|
308 uint16_t idn, uint8_t *data, size_t data_size, uint32_t *error_code) |
|
309 { |
|
310 ec_ioctl_slave_soe_write_t io; |
|
311 |
|
312 io.slave_position = slave_position; |
|
313 io.idn = idn; |
|
314 io.data_size = data_size; |
|
315 io.data = data; |
|
316 |
|
317 if (ioctl(master->fd, EC_IOCTL_SLAVE_SOE_WRITE, &io) == -1) { |
|
318 if (errno == EIO && error_code) { |
|
319 *error_code = io.error_code; |
|
320 } |
|
321 fprintf(stderr, "Failed to write IDN: %s\n", strerror(errno)); |
|
322 return -1; |
|
323 } |
|
324 |
|
325 return 0; |
|
326 } |
|
327 |
|
328 /*****************************************************************************/ |
|
329 |
|
330 int ecrt_master_read_idn(ec_master_t *master, uint16_t slave_position, |
|
331 uint16_t idn, uint8_t *target, size_t target_size, |
|
332 size_t *result_size, uint32_t *error_code) |
|
333 { |
|
334 ec_ioctl_slave_soe_read_t io; |
|
335 |
|
336 io.slave_position = slave_position; |
|
337 io.idn = idn; |
|
338 io.mem_size = target_size; |
|
339 io.data = target; |
|
340 |
|
341 if (ioctl(master->fd, EC_IOCTL_SLAVE_SOE_READ, &io) == -1) { |
|
342 if (errno == EIO && error_code) { |
|
343 *error_code = io.error_code; |
|
344 } |
|
345 fprintf(stderr, "Failed to read IDN: %s\n", strerror(errno)); |
|
346 return -1; |
|
347 } |
|
348 |
|
349 *result_size = io.data_size; |
|
350 return 0; |
|
351 } |
|
352 |
|
353 /*****************************************************************************/ |
|
354 |
307 int ecrt_master_activate(ec_master_t *master) |
355 int ecrt_master_activate(ec_master_t *master) |
308 { |
356 { |
309 if (ioctl(master->fd, EC_IOCTL_ACTIVATE, |
357 if (ioctl(master->fd, EC_IOCTL_ACTIVATE, |
310 &master->process_data_size) == -1) { |
358 &master->process_data_size) == -1) { |
311 fprintf(stderr, "Failed to activate master: %s\n", |
359 fprintf(stderr, "Failed to activate master: %s\n", |