From 06b408ef1b79e986d4cf4dedefe6dbaadf4250c5 Mon Sep 17 00:00:00 2001 From: Bjarne von Horn Date: Fri, 9 Feb 2024 09:20:07 +0100 Subject: [PATCH] use int as return type for ecrt_domain_* See #101 --- include/ecrt.h | 9 ++++++--- lib/domain.c | 18 +++++++++--------- master/domain.c | 9 ++++++--- master/ioctl.c | 13 ++++++++----- 4 files changed, 29 insertions(+), 20 deletions(-) diff --git a/include/ecrt.h b/include/ecrt.h index 1ffda2db..08bb66b6 100644 --- a/include/ecrt.h +++ b/include/ecrt.h @@ -1901,8 +1901,9 @@ EC_PUBLIC_API uint8_t *ecrt_domain_data( * ecrt_domain_state() return the result of the last process data exchange. * * \ingroup ApplicationInterfaceRT + * \return 0 on success, otherwise negative error code. */ -EC_PUBLIC_API void ecrt_domain_process( +EC_PUBLIC_API int ecrt_domain_process( ec_domain_t *domain /**< Domain. */ ); @@ -1912,8 +1913,9 @@ EC_PUBLIC_API void ecrt_domain_process( * next call of ecrt_master_send(). * * \ingroup ApplicationInterfaceRT + * \return 0 on success, otherwise negative error code. */ -EC_PUBLIC_API void ecrt_domain_queue( +EC_PUBLIC_API int ecrt_domain_queue( ec_domain_t *domain /**< Domain. */ ); @@ -1924,8 +1926,9 @@ EC_PUBLIC_API void ecrt_domain_queue( * Using this method, the process data exchange can be monitored in realtime. * * \ingroup ApplicationInterfaceRT + * \return 0 on success, otherwise negative error code. */ -EC_PUBLIC_API void ecrt_domain_state( +EC_PUBLIC_API int ecrt_domain_state( const ec_domain_t *domain, /**< Domain. */ ec_domain_state_t *state /**< Pointer to a state object to store the information. */ diff --git a/lib/domain.c b/lib/domain.c index c04fdeee..7382a24b 100644 --- a/lib/domain.c +++ b/lib/domain.c @@ -90,33 +90,33 @@ uint8_t *ecrt_domain_data(const ec_domain_t *domain) /****************************************************************************/ -void ecrt_domain_process(ec_domain_t *domain) +int ecrt_domain_process(ec_domain_t *domain) { int ret; ret = ioctl(domain->master->fd, EC_IOCTL_DOMAIN_PROCESS, domain->index); if (EC_IOCTL_IS_ERROR(ret)) { - fprintf(stderr, "Failed to process domain: %s\n", - strerror(EC_IOCTL_ERRNO(ret))); + return -EC_IOCTL_ERRNO(ret); } + return 0; } /****************************************************************************/ -void ecrt_domain_queue(ec_domain_t *domain) +int ecrt_domain_queue(ec_domain_t *domain) { int ret; ret = ioctl(domain->master->fd, EC_IOCTL_DOMAIN_QUEUE, domain->index); if (EC_IOCTL_IS_ERROR(ret)) { - fprintf(stderr, "Failed to queue domain: %s\n", - strerror(EC_IOCTL_ERRNO(ret))); + return -EC_IOCTL_ERRNO(ret); } + return 0; } /****************************************************************************/ -void ecrt_domain_state(const ec_domain_t *domain, ec_domain_state_t *state) +int ecrt_domain_state(const ec_domain_t *domain, ec_domain_state_t *state) { ec_ioctl_domain_state_t data; int ret; @@ -126,9 +126,9 @@ void ecrt_domain_state(const ec_domain_t *domain, ec_domain_state_t *state) ret = ioctl(domain->master->fd, EC_IOCTL_DOMAIN_STATE, &data); if (EC_IOCTL_IS_ERROR(ret)) { - fprintf(stderr, "Failed to get domain state: %s\n", - strerror(EC_IOCTL_ERRNO(ret))); + return -EC_IOCTL_ERRNO(ret); } + return 0; } /****************************************************************************/ diff --git a/master/domain.c b/master/domain.c index 0a886821..34eecb4b 100644 --- a/master/domain.c +++ b/master/domain.c @@ -447,7 +447,7 @@ uint8_t *ecrt_domain_data(const ec_domain_t *domain) /****************************************************************************/ -void ecrt_domain_process(ec_domain_t *domain) +int ecrt_domain_process(ec_domain_t *domain) { uint16_t wc_sum[EC_MAX_NUM_DEVICES] = {}, wc_total; ec_datagram_pair_t *pair; @@ -633,11 +633,12 @@ void ecrt_domain_process(ec_domain_t *domain) domain->working_counter_changes = 0; } #endif + return 0; } /****************************************************************************/ -void ecrt_domain_queue(ec_domain_t *domain) +int ecrt_domain_queue(ec_domain_t *domain) { ec_datagram_pair_t *datagram_pair; ec_device_index_t dev_idx; @@ -663,11 +664,12 @@ void ecrt_domain_queue(ec_domain_t *domain) &datagram_pair->datagrams[dev_idx]); } } + return 0; } /****************************************************************************/ -void ecrt_domain_state(const ec_domain_t *domain, ec_domain_state_t *state) +int ecrt_domain_state(const ec_domain_t *domain, ec_domain_state_t *state) { unsigned int dev_idx; uint16_t wc = 0; @@ -690,6 +692,7 @@ void ecrt_domain_state(const ec_domain_t *domain, ec_domain_state_t *state) } state->redundancy_active = domain->redundancy_active; + return 0; } /****************************************************************************/ diff --git a/master/ioctl.c b/master/ioctl.c index 1a1c97b6..a0ebb862 100644 --- a/master/ioctl.c +++ b/master/ioctl.c @@ -3334,8 +3334,7 @@ static ATTRIBUTES int ec_ioctl_domain_process( return -ENOENT; } - ecrt_domain_process(domain); - return 0; + return ecrt_domain_process(domain); } /****************************************************************************/ @@ -3351,6 +3350,7 @@ static ATTRIBUTES int ec_ioctl_domain_queue( ) { ec_domain_t *domain; + int ret; if (unlikely(!ctx->requested)) return -EPERM; @@ -3365,9 +3365,9 @@ static ATTRIBUTES int ec_ioctl_domain_queue( if (ec_ioctl_lock_interruptible(&master->io_mutex)) return -EINTR; - ecrt_domain_queue(domain); + ret = ecrt_domain_queue(domain); ec_ioctl_unlock(&master->io_mutex); - return 0; + return ret; } /****************************************************************************/ @@ -3385,6 +3385,7 @@ static ATTRIBUTES int ec_ioctl_domain_state( ec_ioctl_domain_state_t data; const ec_domain_t *domain; ec_domain_state_t state; + int ret; if (unlikely(!ctx->requested)) return -EPERM; @@ -3400,7 +3401,9 @@ static ATTRIBUTES int ec_ioctl_domain_state( return -ENOENT; } - ecrt_domain_state(domain, &state); + ret = ecrt_domain_state(domain, &state); + if (ret) + return ret; if (ec_copy_to_user((void __user *) data.state, &state, sizeof(state), ctx))