parent
3870a66c8f
commit
06b408ef1b
|
|
@ -1901,8 +1901,9 @@ EC_PUBLIC_API uint8_t *ecrt_domain_data(
|
||||||
* ecrt_domain_state() return the result of the last process data exchange.
|
* ecrt_domain_state() return the result of the last process data exchange.
|
||||||
*
|
*
|
||||||
* \ingroup ApplicationInterfaceRT
|
* \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. */
|
ec_domain_t *domain /**< Domain. */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -1912,8 +1913,9 @@ EC_PUBLIC_API void ecrt_domain_process(
|
||||||
* next call of ecrt_master_send().
|
* next call of ecrt_master_send().
|
||||||
*
|
*
|
||||||
* \ingroup ApplicationInterfaceRT
|
* \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. */
|
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.
|
* Using this method, the process data exchange can be monitored in realtime.
|
||||||
*
|
*
|
||||||
* \ingroup ApplicationInterfaceRT
|
* \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. */
|
const ec_domain_t *domain, /**< Domain. */
|
||||||
ec_domain_state_t *state /**< Pointer to a state object to store the
|
ec_domain_state_t *state /**< Pointer to a state object to store the
|
||||||
information. */
|
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;
|
int ret;
|
||||||
|
|
||||||
ret = ioctl(domain->master->fd, EC_IOCTL_DOMAIN_PROCESS, domain->index);
|
ret = ioctl(domain->master->fd, EC_IOCTL_DOMAIN_PROCESS, domain->index);
|
||||||
if (EC_IOCTL_IS_ERROR(ret)) {
|
if (EC_IOCTL_IS_ERROR(ret)) {
|
||||||
fprintf(stderr, "Failed to process domain: %s\n",
|
return -EC_IOCTL_ERRNO(ret);
|
||||||
strerror(EC_IOCTL_ERRNO(ret)));
|
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
void ecrt_domain_queue(ec_domain_t *domain)
|
int ecrt_domain_queue(ec_domain_t *domain)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = ioctl(domain->master->fd, EC_IOCTL_DOMAIN_QUEUE, domain->index);
|
ret = ioctl(domain->master->fd, EC_IOCTL_DOMAIN_QUEUE, domain->index);
|
||||||
if (EC_IOCTL_IS_ERROR(ret)) {
|
if (EC_IOCTL_IS_ERROR(ret)) {
|
||||||
fprintf(stderr, "Failed to queue domain: %s\n",
|
return -EC_IOCTL_ERRNO(ret);
|
||||||
strerror(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;
|
ec_ioctl_domain_state_t data;
|
||||||
int ret;
|
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);
|
ret = ioctl(domain->master->fd, EC_IOCTL_DOMAIN_STATE, &data);
|
||||||
if (EC_IOCTL_IS_ERROR(ret)) {
|
if (EC_IOCTL_IS_ERROR(ret)) {
|
||||||
fprintf(stderr, "Failed to get domain state: %s\n",
|
return -EC_IOCTL_ERRNO(ret);
|
||||||
strerror(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;
|
uint16_t wc_sum[EC_MAX_NUM_DEVICES] = {}, wc_total;
|
||||||
ec_datagram_pair_t *pair;
|
ec_datagram_pair_t *pair;
|
||||||
|
|
@ -633,11 +633,12 @@ void ecrt_domain_process(ec_domain_t *domain)
|
||||||
domain->working_counter_changes = 0;
|
domain->working_counter_changes = 0;
|
||||||
}
|
}
|
||||||
#endif
|
#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_datagram_pair_t *datagram_pair;
|
||||||
ec_device_index_t dev_idx;
|
ec_device_index_t dev_idx;
|
||||||
|
|
@ -663,11 +664,12 @@ void ecrt_domain_queue(ec_domain_t *domain)
|
||||||
&datagram_pair->datagrams[dev_idx]);
|
&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;
|
unsigned int dev_idx;
|
||||||
uint16_t wc = 0;
|
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;
|
state->redundancy_active = domain->redundancy_active;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
|
||||||
|
|
@ -3334,8 +3334,7 @@ static ATTRIBUTES int ec_ioctl_domain_process(
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
ecrt_domain_process(domain);
|
return ecrt_domain_process(domain);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
@ -3351,6 +3350,7 @@ static ATTRIBUTES int ec_ioctl_domain_queue(
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ec_domain_t *domain;
|
ec_domain_t *domain;
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (unlikely(!ctx->requested))
|
if (unlikely(!ctx->requested))
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
|
@ -3365,9 +3365,9 @@ static ATTRIBUTES int ec_ioctl_domain_queue(
|
||||||
if (ec_ioctl_lock_interruptible(&master->io_mutex))
|
if (ec_ioctl_lock_interruptible(&master->io_mutex))
|
||||||
return -EINTR;
|
return -EINTR;
|
||||||
|
|
||||||
ecrt_domain_queue(domain);
|
ret = ecrt_domain_queue(domain);
|
||||||
ec_ioctl_unlock(&master->io_mutex);
|
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;
|
ec_ioctl_domain_state_t data;
|
||||||
const ec_domain_t *domain;
|
const ec_domain_t *domain;
|
||||||
ec_domain_state_t state;
|
ec_domain_state_t state;
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (unlikely(!ctx->requested))
|
if (unlikely(!ctx->requested))
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
|
@ -3400,7 +3401,9 @@ static ATTRIBUTES int ec_ioctl_domain_state(
|
||||||
return -ENOENT;
|
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),
|
if (ec_copy_to_user((void __user *) data.state, &state, sizeof(state),
|
||||||
ctx))
|
ctx))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue