338 ec_ioctl_slave_sdo_download_t download; |
338 ec_ioctl_slave_sdo_download_t download; |
339 |
339 |
340 download.slave_position = slave_position; |
340 download.slave_position = slave_position; |
341 download.sdo_index = index; |
341 download.sdo_index = index; |
342 download.sdo_entry_subindex = subindex; |
342 download.sdo_entry_subindex = subindex; |
|
343 download.complete_access = 0; |
|
344 download.data_size = data_size; |
|
345 download.data = data; |
|
346 |
|
347 if (ioctl(master->fd, EC_IOCTL_SLAVE_SDO_DOWNLOAD, &download) == -1) { |
|
348 if (errno == EIO && abort_code) { |
|
349 *abort_code = download.abort_code; |
|
350 } |
|
351 fprintf(stderr, "Failed to execute SDO download: %s\n", |
|
352 strerror(errno)); |
|
353 return -1; |
|
354 } |
|
355 |
|
356 return 0; |
|
357 } |
|
358 |
|
359 /*****************************************************************************/ |
|
360 |
|
361 int ecrt_master_sdo_download_complete(ec_master_t *master, |
|
362 uint16_t slave_position, uint16_t index, uint8_t *data, |
|
363 size_t data_size, uint32_t *abort_code) |
|
364 { |
|
365 ec_ioctl_slave_sdo_download_t download; |
|
366 |
|
367 download.slave_position = slave_position; |
|
368 download.sdo_index = index; |
|
369 download.sdo_entry_subindex = 0; |
|
370 download.complete_access = 1; |
343 download.data_size = data_size; |
371 download.data_size = data_size; |
344 download.data = data; |
372 download.data = data; |
345 |
373 |
346 if (ioctl(master->fd, EC_IOCTL_SLAVE_SDO_DOWNLOAD, &download) == -1) { |
374 if (ioctl(master->fd, EC_IOCTL_SLAVE_SDO_DOWNLOAD, &download) == -1) { |
347 if (errno == EIO && abort_code) { |
375 if (errno == EIO && abort_code) { |