diff -r 7b8078c1ad36 -r 9c3e629a220c lib/slave_config.c --- a/lib/slave_config.c Tue Nov 06 11:49:55 2012 +0100 +++ b/lib/slave_config.c Tue Nov 06 14:23:44 2012 +0100 @@ -403,6 +403,84 @@ /*****************************************************************************/ +int ecrt_slave_config_emerg_size(ec_slave_config_t *sc, size_t elements) +{ + ec_ioctl_sc_emerg_t io; + int ret; + + io.config_index = sc->index; + io.size = elements; + + ret = ioctl(sc->master->fd, EC_IOCTL_SC_EMERG_SIZE, &io); + if (EC_IOCTL_IS_ERROR(ret)) { + fprintf(stderr, "Failed to set emergency ring size: %s\n", + strerror(EC_IOCTL_ERRNO(ret))); + return -EC_IOCTL_ERRNO(ret); + } + + return 0; +} + +/*****************************************************************************/ + +int ecrt_slave_config_emerg_pop(ec_slave_config_t *sc, uint8_t *target) +{ + ec_ioctl_sc_emerg_t io; + int ret; + + io.config_index = sc->index; + io.target = target; + + ret = ioctl(sc->master->fd, EC_IOCTL_SC_EMERG_POP, &io); + if (EC_IOCTL_IS_ERROR(ret)) { + fprintf(stderr, "Failed to get emergency message: %s\n", + strerror(EC_IOCTL_ERRNO(ret))); + return -EC_IOCTL_ERRNO(ret); + } + + return 0; +} + +/*****************************************************************************/ + +int ecrt_slave_config_emerg_clear(ec_slave_config_t *sc) +{ + ec_ioctl_sc_emerg_t io; + int ret; + + io.config_index = sc->index; + + ret = ioctl(sc->master->fd, EC_IOCTL_SC_EMERG_CLEAR, &io); + if (EC_IOCTL_IS_ERROR(ret)) { + fprintf(stderr, "Failed to clear emergency ring: %s\n", + strerror(EC_IOCTL_ERRNO(ret))); + return -EC_IOCTL_ERRNO(ret); + } + + return 0; +} + +/*****************************************************************************/ + +int ecrt_slave_config_emerg_overruns(ec_slave_config_t *sc) +{ + ec_ioctl_sc_emerg_t io; + int ret; + + io.config_index = sc->index; + + ret = ioctl(sc->master->fd, EC_IOCTL_SC_EMERG_OVERRUNS, &io); + if (EC_IOCTL_IS_ERROR(ret)) { + fprintf(stderr, "Failed to get emergency overruns: %s\n", + strerror(EC_IOCTL_ERRNO(ret))); + return -EC_IOCTL_ERRNO(ret); + } + + return io.overruns; +} + +/*****************************************************************************/ + void ec_slave_config_add_sdo_request(ec_slave_config_t *sc, ec_sdo_request_t *req) {