diff -r d480e0439664 -r cbef34ba142b lib/master.c --- a/lib/master.c Tue Apr 27 10:30:31 2010 +0200 +++ b/lib/master.c Tue Apr 27 10:37:32 2010 +0200 @@ -304,6 +304,54 @@ /*****************************************************************************/ +int ecrt_master_write_idn(ec_master_t *master, uint16_t slave_position, + uint16_t idn, uint8_t *data, size_t data_size, uint32_t *error_code) +{ + ec_ioctl_slave_soe_write_t io; + + io.slave_position = slave_position; + io.idn = idn; + io.data_size = data_size; + io.data = data; + + if (ioctl(master->fd, EC_IOCTL_SLAVE_SOE_WRITE, &io) == -1) { + if (errno == EIO && error_code) { + *error_code = io.error_code; + } + fprintf(stderr, "Failed to write IDN: %s\n", strerror(errno)); + return -1; + } + + return 0; +} + +/*****************************************************************************/ + +int ecrt_master_read_idn(ec_master_t *master, uint16_t slave_position, + uint16_t idn, uint8_t *target, size_t target_size, + size_t *result_size, uint32_t *error_code) +{ + ec_ioctl_slave_soe_read_t io; + + io.slave_position = slave_position; + io.idn = idn; + io.mem_size = target_size; + io.data = target; + + if (ioctl(master->fd, EC_IOCTL_SLAVE_SOE_READ, &io) == -1) { + if (errno == EIO && error_code) { + *error_code = io.error_code; + } + fprintf(stderr, "Failed to read IDN: %s\n", strerror(errno)); + return -1; + } + + *result_size = io.data_size; + return 0; +} + +/*****************************************************************************/ + int ecrt_master_activate(ec_master_t *master) { if (ioctl(master->fd, EC_IOCTL_ACTIVATE,