diff --git a/include/ecrt.h b/include/ecrt.h index 315d4883..82138d7f 100644 --- a/include/ecrt.h +++ b/include/ecrt.h @@ -2078,6 +2078,9 @@ ec_request_state_t ecrt_sdo_request_state( * * \ingroup ApplicationInterfaceRT * \return 0 on success, otherwise negative error code. + * \retval -EINVAL Invalid input data, e.g. data size == 0. + * \retval -ENOMEM Reserved memory in ecrt_slave_config_create_sdo_request() + * too small. */ EC_PUBLIC_API int ecrt_sdo_request_write( ec_sdo_request_t *req /**< SDO request. */ @@ -2117,8 +2120,9 @@ EC_PUBLIC_API int ecrt_sdo_request_read( * set via ecrt_slave_config_create_soe_request(). * * \ingroup ApplicationInterfaceRT + * \return 0 on success, otherwise negative error code. */ -EC_PUBLIC_API void ecrt_soe_request_idn( +EC_PUBLIC_API int ecrt_soe_request_idn( ec_soe_request_t *req, /**< IDN request. */ uint8_t drive_no, /**< SDO index. */ uint16_t idn /**< SoE IDN. */ @@ -2134,8 +2138,9 @@ EC_PUBLIC_API void ecrt_soe_request_idn( * * The timeout should be defined in non-realtime context, but can also be * changed afterwards. + * \return 0 on success, otherwise negative error code. */ -EC_PUBLIC_API void ecrt_soe_request_timeout( +EC_PUBLIC_API int ecrt_soe_request_timeout( ec_soe_request_t *req, /**< SoE request. */ uint32_t timeout /**< Timeout in milliseconds. Zero means no timeout. */ @@ -2213,8 +2218,12 @@ EC_PUBLIC_API ec_request_state_t ecrt_soe_request_state( * activation). * * \ingroup ApplicationInterfaceRT + * \return 0 on success, otherwise negative error code. + * \retval -EINVAL Invalid input data, e.g. data size == 0. + * \retval -ENOMEM Reserved memory in ecrt_slave_config_create_soe_request() + * too small. */ -EC_PUBLIC_API void ecrt_soe_request_write( +EC_PUBLIC_API int ecrt_soe_request_write( ec_soe_request_t *req /**< SoE request. */ ); @@ -2231,8 +2240,9 @@ EC_PUBLIC_API void ecrt_soe_request_write( * activation). * * \ingroup ApplicationInterfaceRT + * \return 0 on success, otherwise negative error code. */ -EC_PUBLIC_API void ecrt_soe_request_read( +EC_PUBLIC_API int ecrt_soe_request_read( ec_soe_request_t *req /**< SoE request. */ ); diff --git a/lib/soe_request.c b/lib/soe_request.c index d95a4ef1..822e3c1e 100644 --- a/lib/soe_request.c +++ b/lib/soe_request.c @@ -48,7 +48,7 @@ void ec_soe_request_clear(ec_soe_request_t *req) * Application interface. ****************************************************************************/ -void ecrt_soe_request_idn(ec_soe_request_t *req, uint8_t drive_no, +int ecrt_soe_request_idn(ec_soe_request_t *req, uint8_t drive_no, uint16_t idn) { ec_ioctl_soe_request_t data; @@ -61,14 +61,14 @@ void ecrt_soe_request_idn(ec_soe_request_t *req, uint8_t drive_no, ret = ioctl(req->config->master->fd, EC_IOCTL_SOE_REQUEST_IDN, &data); if (EC_IOCTL_IS_ERROR(ret)) { - fprintf(stderr, "Failed to set SoE request IDN: %s\n", - strerror(EC_IOCTL_ERRNO(ret))); + return -EC_IOCTL_ERRNO(ret); } + return 0; } /****************************************************************************/ -void ecrt_soe_request_timeout(ec_soe_request_t *req, uint32_t timeout) +int ecrt_soe_request_timeout(ec_soe_request_t *req, uint32_t timeout) { ec_ioctl_soe_request_t data; int ret; @@ -79,9 +79,9 @@ void ecrt_soe_request_timeout(ec_soe_request_t *req, uint32_t timeout) ret = ioctl(req->config->master->fd, EC_IOCTL_SOE_REQUEST_TIMEOUT, &data); if (EC_IOCTL_IS_ERROR(ret)) { - fprintf(stderr, "Failed to set SoE request timeout: %s\n", - strerror(EC_IOCTL_ERRNO(ret))); + return -EC_IOCTL_ERRNO(ret); } + return 0; } /****************************************************************************/ @@ -139,7 +139,7 @@ ec_request_state_t ecrt_soe_request_state(ec_soe_request_t *req) /****************************************************************************/ -void ecrt_soe_request_read(ec_soe_request_t *req) +int ecrt_soe_request_read(ec_soe_request_t *req) { ec_ioctl_soe_request_t data; int ret; @@ -149,14 +149,14 @@ void ecrt_soe_request_read(ec_soe_request_t *req) ret = ioctl(req->config->master->fd, EC_IOCTL_SOE_REQUEST_READ, &data); if (EC_IOCTL_IS_ERROR(ret)) { - fprintf(stderr, "Failed to command an SoE read operation : %s\n", - strerror(EC_IOCTL_ERRNO(ret))); + return -EC_IOCTL_ERRNO(ret); } + return 0; } /****************************************************************************/ -void ecrt_soe_request_write(ec_soe_request_t *req) +int ecrt_soe_request_write(ec_soe_request_t *req) { ec_ioctl_soe_request_t data; int ret; @@ -168,9 +168,9 @@ void ecrt_soe_request_write(ec_soe_request_t *req) ret = ioctl(req->config->master->fd, EC_IOCTL_SOE_REQUEST_WRITE, &data); if (EC_IOCTL_IS_ERROR(ret)) { - fprintf(stderr, "Failed to command an SDO write 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 04afb142..134b2edc 100644 --- a/master/ioctl.c +++ b/master/ioctl.c @@ -3703,8 +3703,7 @@ static ATTRIBUTES int ec_ioctl_soe_request_index( return -ENOENT; } - ecrt_soe_request_idn(req, data.drive_no, data.idn); - return 0; + return ecrt_soe_request_idn(req, data.drive_no, data.idn); } /****************************************************************************/ @@ -3740,8 +3739,7 @@ static ATTRIBUTES int ec_ioctl_soe_request_timeout( return -ENOENT; } - ecrt_soe_request_timeout(req, data.timeout); - return 0; + return ecrt_soe_request_timeout(req, data.timeout); } /****************************************************************************/ @@ -3824,8 +3822,7 @@ static ATTRIBUTES int ec_ioctl_soe_request_read( return -ENOENT; } - ecrt_soe_request_read(req); - return 0; + return ecrt_soe_request_read(req); } /****************************************************************************/ @@ -3874,8 +3871,7 @@ static ATTRIBUTES int ec_ioctl_soe_request_write( return -EFAULT; req->data_size = data.size; - ecrt_soe_request_write(req); - return 0; + return ecrt_soe_request_write(req); } /****************************************************************************/ diff --git a/master/soe_request.c b/master/soe_request.c index 3960d2b4..ef90124b 100644 --- a/master/soe_request.c +++ b/master/soe_request.c @@ -223,7 +223,7 @@ int ec_soe_request_append_data( /** Request a read operation. */ -void ec_soe_request_read( +int ec_soe_request_read( ec_soe_request_t *req /**< SoE request. */ ) { @@ -231,13 +231,14 @@ void ec_soe_request_read( req->state = EC_INT_REQUEST_QUEUED; req->error_code = 0x0000; req->jiffies_start = jiffies; + return 0; } /****************************************************************************/ /** Request a write operation. */ -void ec_soe_request_write( +int ec_soe_request_write( ec_soe_request_t *req /**< SoE request. */ ) { @@ -245,6 +246,7 @@ void ec_soe_request_write( req->state = EC_INT_REQUEST_QUEUED; req->error_code = 0x0000; req->jiffies_start = jiffies; + return 0; } /****************************************************************************/ @@ -263,18 +265,20 @@ int ec_soe_request_timed_out(const ec_soe_request_t *req /**< SDO request. */) * Application interface. ****************************************************************************/ -void ecrt_soe_request_idn(ec_soe_request_t *req, uint8_t drive_no, +int ecrt_soe_request_idn(ec_soe_request_t *req, uint8_t drive_no, uint16_t idn) { req->drive_no = drive_no; req->idn = idn; + return 0; } /****************************************************************************/ -void ecrt_soe_request_timeout(ec_soe_request_t *req, uint32_t timeout) +int ecrt_soe_request_timeout(ec_soe_request_t *req, uint32_t timeout) { req->issue_timeout = timeout; + return 0; } /****************************************************************************/ @@ -300,16 +304,16 @@ ec_request_state_t ecrt_soe_request_state(const ec_soe_request_t *req) /****************************************************************************/ -void ecrt_soe_request_read(ec_soe_request_t *req) +int ecrt_soe_request_read(ec_soe_request_t *req) { - ec_soe_request_read(req); + return ec_soe_request_read(req); } /****************************************************************************/ -void ecrt_soe_request_write(ec_soe_request_t *req) +int ecrt_soe_request_write(ec_soe_request_t *req) { - ec_soe_request_write(req); + return ec_soe_request_write(req); } /****************************************************************************/ diff --git a/master/soe_request.h b/master/soe_request.h index 67422ff7..ced4c9a1 100644 --- a/master/soe_request.h +++ b/master/soe_request.h @@ -67,8 +67,8 @@ void ec_soe_request_set_idn(ec_soe_request_t *, uint16_t); int ec_soe_request_alloc(ec_soe_request_t *, size_t); int ec_soe_request_copy_data(ec_soe_request_t *, const uint8_t *, size_t); int ec_soe_request_append_data(ec_soe_request_t *, const uint8_t *, size_t); -void ec_soe_request_read(ec_soe_request_t *); -void ec_soe_request_write(ec_soe_request_t *); +int ec_soe_request_read(ec_soe_request_t *); +int ec_soe_request_write(ec_soe_request_t *); int ec_soe_request_timed_out(const ec_soe_request_t *); /****************************************************************************/