mirror of
https://gitlab.com/etherlab.org/ethercat.git
synced 2026-02-06 20:01:44 +08:00
@@ -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. */
|
||||
|
||||
18
lib/domain.c
18
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;
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user