lib/master.c
changeset 1913 cbef34ba142b
parent 1911 460baca4df83
child 1947 024a3c6aa3f7
child 1959 656f114153c2
child 1980 a89e2bedf004
--- 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,