lib/slave_config.c
branchstable-1.5
changeset 2438 9c3e629a220c
parent 2433 3bdd7a747fae
child 2443 2c3ccdde3919
equal deleted inserted replaced
2437:7b8078c1ad36 2438:9c3e629a220c
   401     return ecrt_slave_config_sdo(sc, index, subindex, data, 4);
   401     return ecrt_slave_config_sdo(sc, index, subindex, data, 4);
   402 }
   402 }
   403 
   403 
   404 /*****************************************************************************/
   404 /*****************************************************************************/
   405 
   405 
       
   406 int ecrt_slave_config_emerg_size(ec_slave_config_t *sc, size_t elements)
       
   407 {
       
   408     ec_ioctl_sc_emerg_t io;
       
   409     int ret;
       
   410 
       
   411     io.config_index = sc->index;
       
   412     io.size = elements;
       
   413 
       
   414     ret = ioctl(sc->master->fd, EC_IOCTL_SC_EMERG_SIZE, &io);
       
   415     if (EC_IOCTL_IS_ERROR(ret)) {
       
   416         fprintf(stderr, "Failed to set emergency ring size: %s\n",
       
   417                 strerror(EC_IOCTL_ERRNO(ret)));
       
   418         return -EC_IOCTL_ERRNO(ret);
       
   419     }
       
   420 
       
   421     return 0;
       
   422 }
       
   423 
       
   424 /*****************************************************************************/
       
   425 
       
   426 int ecrt_slave_config_emerg_pop(ec_slave_config_t *sc, uint8_t *target)
       
   427 {
       
   428     ec_ioctl_sc_emerg_t io;
       
   429     int ret;
       
   430 
       
   431     io.config_index = sc->index;
       
   432     io.target = target;
       
   433 
       
   434     ret = ioctl(sc->master->fd, EC_IOCTL_SC_EMERG_POP, &io);
       
   435     if (EC_IOCTL_IS_ERROR(ret)) {
       
   436         fprintf(stderr, "Failed to get emergency message: %s\n",
       
   437                 strerror(EC_IOCTL_ERRNO(ret)));
       
   438         return -EC_IOCTL_ERRNO(ret);
       
   439     }
       
   440 
       
   441     return 0;
       
   442 }
       
   443 
       
   444 /*****************************************************************************/
       
   445 
       
   446 int ecrt_slave_config_emerg_clear(ec_slave_config_t *sc)
       
   447 {
       
   448     ec_ioctl_sc_emerg_t io;
       
   449     int ret;
       
   450 
       
   451     io.config_index = sc->index;
       
   452 
       
   453     ret = ioctl(sc->master->fd, EC_IOCTL_SC_EMERG_CLEAR, &io);
       
   454     if (EC_IOCTL_IS_ERROR(ret)) {
       
   455         fprintf(stderr, "Failed to clear emergency ring: %s\n",
       
   456                 strerror(EC_IOCTL_ERRNO(ret)));
       
   457         return -EC_IOCTL_ERRNO(ret);
       
   458     }
       
   459 
       
   460     return 0;
       
   461 }
       
   462 
       
   463 /*****************************************************************************/
       
   464 
       
   465 int ecrt_slave_config_emerg_overruns(ec_slave_config_t *sc)
       
   466 {
       
   467     ec_ioctl_sc_emerg_t io;
       
   468     int ret;
       
   469 
       
   470     io.config_index = sc->index;
       
   471 
       
   472     ret = ioctl(sc->master->fd, EC_IOCTL_SC_EMERG_OVERRUNS, &io);
       
   473     if (EC_IOCTL_IS_ERROR(ret)) {
       
   474         fprintf(stderr, "Failed to get emergency overruns: %s\n",
       
   475                 strerror(EC_IOCTL_ERRNO(ret)));
       
   476         return -EC_IOCTL_ERRNO(ret);
       
   477     }
       
   478 
       
   479     return io.overruns;
       
   480 }
       
   481 
       
   482 /*****************************************************************************/
       
   483 
   406 void ec_slave_config_add_sdo_request(ec_slave_config_t *sc,
   484 void ec_slave_config_add_sdo_request(ec_slave_config_t *sc,
   407         ec_sdo_request_t *req)
   485         ec_sdo_request_t *req)
   408 {
   486 {
   409     if (sc->first_sdo_request) {
   487     if (sc->first_sdo_request) {
   410         ec_sdo_request_t *r = sc->first_sdo_request;
   488         ec_sdo_request_t *r = sc->first_sdo_request;