diff --git a/include/ecrt.h b/include/ecrt.h index 754821f6..ba36d4d3 100644 --- a/include/ecrt.h +++ b/include/ecrt.h @@ -2472,8 +2472,9 @@ ec_request_state_t ecrt_reg_request_state( * activation). * * \ingroup ApplicationInterfaceRT + * \return 0 on success, otherwise negative error code. */ -EC_PUBLIC_API void ecrt_reg_request_write( +EC_PUBLIC_API int ecrt_reg_request_write( ec_reg_request_t *req, /**< Register request. */ uint16_t address, /**< Register address. */ size_t size /**< Size to write. */ @@ -2491,8 +2492,9 @@ EC_PUBLIC_API void ecrt_reg_request_write( * activation). * * \ingroup ApplicationInterfaceRT + * \return 0 on success, otherwise negative error code. */ -EC_PUBLIC_API void ecrt_reg_request_read( +EC_PUBLIC_API int ecrt_reg_request_read( ec_reg_request_t *req, /**< Register request. */ uint16_t address, /**< Register address. */ size_t size /**< Size to write. */ diff --git a/lib/reg_request.c b/lib/reg_request.c index 6fb04c98..f52afd15 100644 --- a/lib/reg_request.c +++ b/lib/reg_request.c @@ -89,7 +89,7 @@ ec_request_state_t ecrt_reg_request_state(const ec_reg_request_t *reg) /****************************************************************************/ -void ecrt_reg_request_write(ec_reg_request_t *reg, uint16_t address, +int ecrt_reg_request_write(ec_reg_request_t *reg, uint16_t address, size_t size) { ec_ioctl_reg_request_t io; @@ -103,14 +103,14 @@ void ecrt_reg_request_write(ec_reg_request_t *reg, uint16_t address, ret = ioctl(reg->config->master->fd, EC_IOCTL_REG_REQUEST_WRITE, &io); if (EC_IOCTL_IS_ERROR(ret)) { - fprintf(stderr, "Failed to command an register write operation: %s\n", - strerror(EC_IOCTL_ERRNO(ret))); + return -EC_IOCTL_ERRNO(ret); } + return 0; } /****************************************************************************/ -void ecrt_reg_request_read(ec_reg_request_t *reg, uint16_t address, +int ecrt_reg_request_read(ec_reg_request_t *reg, uint16_t address, size_t size) { ec_ioctl_reg_request_t io; @@ -123,9 +123,9 @@ void ecrt_reg_request_read(ec_reg_request_t *reg, uint16_t address, ret = ioctl(reg->config->master->fd, EC_IOCTL_REG_REQUEST_READ, &io); if (EC_IOCTL_IS_ERROR(ret)) { - fprintf(stderr, "Failed to command an register read operation: %s\n", - strerror(EC_IOCTL_ERRNO(ret))); + return -EC_IOCTL_ERRNO(ret); } + return 0; } /****************************************************************************/ diff --git a/master/ioctl.c b/master/ioctl.c index ed07d063..1289e27d 100644 --- a/master/ioctl.c +++ b/master/ioctl.c @@ -1069,7 +1069,10 @@ static ATTRIBUTES int ec_ioctl_slave_reg_read( return ret; } - ecrt_reg_request_read(&request, io.address, io.size); + ret = ecrt_reg_request_read(&request, io.address, io.size); + if (ret) { + return ret; + } if (down_interruptible(&master->master_sem)) { ec_reg_request_clear(&request); @@ -1153,7 +1156,10 @@ static ATTRIBUTES int ec_ioctl_slave_reg_write( return -EFAULT; } - ecrt_reg_request_write(&request, io.address, io.size); + ret = ecrt_reg_request_write(&request, io.address, io.size); + if (ret) { + return ret; + } if (down_interruptible(&master->master_sem)) { ec_reg_request_clear(&request); @@ -4050,8 +4056,7 @@ static ATTRIBUTES int ec_ioctl_reg_request_write( return -EFAULT; } - ecrt_reg_request_write(reg, io.address, io.transfer_size); - return 0; + return ecrt_reg_request_write(reg, io.address, io.transfer_size); } /****************************************************************************/ @@ -4093,8 +4098,7 @@ static ATTRIBUTES int ec_ioctl_reg_request_read( return -EOVERFLOW; } - ecrt_reg_request_read(reg, io.address, io.transfer_size); - return 0; + return ecrt_reg_request_read(reg, io.address, io.transfer_size); } /****************************************************************************/ diff --git a/master/reg_request.c b/master/reg_request.c index 29f7d4e2..eab70b1d 100644 --- a/master/reg_request.c +++ b/master/reg_request.c @@ -89,24 +89,26 @@ ec_request_state_t ecrt_reg_request_state(const ec_reg_request_t *reg) /****************************************************************************/ -void ecrt_reg_request_write(ec_reg_request_t *reg, uint16_t address, +int ecrt_reg_request_write(ec_reg_request_t *reg, uint16_t address, size_t size) { reg->dir = EC_DIR_OUTPUT; reg->address = address; reg->transfer_size = min(size, reg->mem_size); reg->state = EC_INT_REQUEST_QUEUED; + return 0; } /****************************************************************************/ -void ecrt_reg_request_read(ec_reg_request_t *reg, uint16_t address, +int ecrt_reg_request_read(ec_reg_request_t *reg, uint16_t address, size_t size) { reg->dir = EC_DIR_INPUT; reg->address = address; reg->transfer_size = min(size, reg->mem_size); reg->state = EC_INT_REQUEST_QUEUED; + return 0; } /****************************************************************************/