lib/master.c
changeset 1913 cbef34ba142b
parent 1911 460baca4df83
child 1947 024a3c6aa3f7
child 1959 656f114153c2
child 1980 a89e2bedf004
equal deleted inserted replaced
1912:d480e0439664 1913:cbef34ba142b
   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",