parent
13e99008c3
commit
5248b967d2
|
|
@ -1291,8 +1291,10 @@ EC_PUBLIC_API int ecrt_slave_config_sync_manager(
|
|||
*
|
||||
* This method has to be called in non-realtime context before
|
||||
* ecrt_master_activate().
|
||||
*
|
||||
* \return 0 on success, otherwise negative error code.
|
||||
*/
|
||||
EC_PUBLIC_API void ecrt_slave_config_watchdog(
|
||||
EC_PUBLIC_API int ecrt_slave_config_watchdog(
|
||||
ec_slave_config_t *sc, /**< Slave configuration. */
|
||||
uint16_t watchdog_divider, /**< Number of 40 ns intervals (register
|
||||
0x0400). Used as a base unit for all
|
||||
|
|
@ -1330,8 +1332,9 @@ EC_PUBLIC_API int ecrt_slave_config_pdo_assign_add(
|
|||
* ecrt_master_activate().
|
||||
*
|
||||
* \see ecrt_slave_config_pdos()
|
||||
* \return 0 on success, otherwise negative error code.
|
||||
*/
|
||||
EC_PUBLIC_API void ecrt_slave_config_pdo_assign_clear(
|
||||
EC_PUBLIC_API int ecrt_slave_config_pdo_assign_clear(
|
||||
ec_slave_config_t *sc, /**< Slave configuration. */
|
||||
uint8_t sync_index /**< Sync manager index. Must be less
|
||||
than #EC_MAX_SYNC_MANAGERS. */
|
||||
|
|
@ -1364,8 +1367,9 @@ EC_PUBLIC_API int ecrt_slave_config_pdo_mapping_add(
|
|||
* ecrt_master_activate().
|
||||
*
|
||||
* \see ecrt_slave_config_pdos()
|
||||
* \return 0 on success, otherwise negative error code.
|
||||
*/
|
||||
EC_PUBLIC_API void ecrt_slave_config_pdo_mapping_clear(
|
||||
EC_PUBLIC_API int ecrt_slave_config_pdo_mapping_clear(
|
||||
ec_slave_config_t *sc, /**< Slave configuration. */
|
||||
uint16_t pdo_index /**< Index of the PDO. */
|
||||
);
|
||||
|
|
@ -1512,8 +1516,9 @@ EC_PUBLIC_API int ecrt_slave_config_reg_pdo_entry_pos(
|
|||
* ecrt_master_activate().
|
||||
*
|
||||
* \attention The \a sync1_shift time is ignored.
|
||||
* \return 0 on success, otherwise negative error code.
|
||||
*/
|
||||
EC_PUBLIC_API void ecrt_slave_config_dc(
|
||||
EC_PUBLIC_API int ecrt_slave_config_dc(
|
||||
ec_slave_config_t *sc, /**< Slave configuration. */
|
||||
uint16_t assign_activate, /**< AssignActivate word. */
|
||||
uint32_t sync0_cycle, /**< SYNC0 cycle time [ns]. */
|
||||
|
|
@ -1780,7 +1785,7 @@ EC_PUBLIC_API ec_reg_request_t *ecrt_slave_config_create_reg_request(
|
|||
*
|
||||
* \ingroup ApplicationInterfaceRT
|
||||
*/
|
||||
EC_PUBLIC_API void ecrt_slave_config_state(
|
||||
EC_PUBLIC_API int ecrt_slave_config_state(
|
||||
const ec_slave_config_t *sc, /**< Slave configuration */
|
||||
ec_slave_config_state_t *state /**< State object to write to. */
|
||||
);
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@ int ecrt_slave_config_sync_manager(ec_slave_config_t *sc, uint8_t sync_index,
|
|||
|
||||
/****************************************************************************/
|
||||
|
||||
void ecrt_slave_config_watchdog(ec_slave_config_t *sc,
|
||||
int ecrt_slave_config_watchdog(ec_slave_config_t *sc,
|
||||
uint16_t divider, uint16_t intervals)
|
||||
{
|
||||
ec_ioctl_config_t data;
|
||||
|
|
@ -124,7 +124,9 @@ void ecrt_slave_config_watchdog(ec_slave_config_t *sc,
|
|||
if (EC_IOCTL_IS_ERROR(ret)) {
|
||||
fprintf(stderr, "Failed to config watchdog: %s\n",
|
||||
strerror(EC_IOCTL_ERRNO(ret)));
|
||||
return -EC_IOCTL_ERRNO(ret);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
|
@ -151,7 +153,7 @@ int ecrt_slave_config_pdo_assign_add(ec_slave_config_t *sc,
|
|||
|
||||
/****************************************************************************/
|
||||
|
||||
void ecrt_slave_config_pdo_assign_clear(ec_slave_config_t *sc,
|
||||
int ecrt_slave_config_pdo_assign_clear(ec_slave_config_t *sc,
|
||||
uint8_t sync_index)
|
||||
{
|
||||
ec_ioctl_config_pdo_t data;
|
||||
|
|
@ -164,7 +166,9 @@ void ecrt_slave_config_pdo_assign_clear(ec_slave_config_t *sc,
|
|||
if (EC_IOCTL_IS_ERROR(ret)) {
|
||||
fprintf(stderr, "Failed to clear PDOs: %s\n",
|
||||
strerror(EC_IOCTL_ERRNO(ret)));
|
||||
return -EC_IOCTL_ERRNO(ret);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
|
@ -194,7 +198,7 @@ int ecrt_slave_config_pdo_mapping_add(ec_slave_config_t *sc,
|
|||
|
||||
/****************************************************************************/
|
||||
|
||||
void ecrt_slave_config_pdo_mapping_clear(ec_slave_config_t *sc,
|
||||
int ecrt_slave_config_pdo_mapping_clear(ec_slave_config_t *sc,
|
||||
uint16_t pdo_index)
|
||||
{
|
||||
ec_ioctl_config_pdo_t data;
|
||||
|
|
@ -207,7 +211,9 @@ void ecrt_slave_config_pdo_mapping_clear(ec_slave_config_t *sc,
|
|||
if (EC_IOCTL_IS_ERROR(ret)) {
|
||||
fprintf(stderr, "Failed to clear PDO entries: %s\n",
|
||||
strerror(EC_IOCTL_ERRNO(ret)));
|
||||
return -EC_IOCTL_ERRNO(ret);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
|
@ -356,7 +362,7 @@ int ecrt_slave_config_reg_pdo_entry_pos(
|
|||
|
||||
/****************************************************************************/
|
||||
|
||||
void ecrt_slave_config_dc(ec_slave_config_t *sc, uint16_t assign_activate,
|
||||
int ecrt_slave_config_dc(ec_slave_config_t *sc, uint16_t assign_activate,
|
||||
uint32_t sync0_cycle_time, int32_t sync0_shift_time,
|
||||
uint32_t sync1_cycle_time, int32_t sync1_shift_time)
|
||||
{
|
||||
|
|
@ -372,9 +378,9 @@ void ecrt_slave_config_dc(ec_slave_config_t *sc, uint16_t assign_activate,
|
|||
|
||||
ret = ioctl(sc->master->fd, EC_IOCTL_SC_DC, &data);
|
||||
if (EC_IOCTL_IS_ERROR(ret)) {
|
||||
fprintf(stderr, "Failed to set DC parameters: %s\n",
|
||||
strerror(EC_IOCTL_ERRNO(ret)));
|
||||
return -EC_IOCTL_ERRNO(ret);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
|
@ -813,7 +819,7 @@ ec_voe_handler_t *ecrt_slave_config_create_voe_handler(ec_slave_config_t *sc,
|
|||
|
||||
/****************************************************************************/
|
||||
|
||||
void ecrt_slave_config_state(const ec_slave_config_t *sc,
|
||||
int ecrt_slave_config_state(const ec_slave_config_t *sc,
|
||||
ec_slave_config_state_t *state)
|
||||
{
|
||||
ec_ioctl_sc_state_t data;
|
||||
|
|
@ -824,9 +830,9 @@ void ecrt_slave_config_state(const ec_slave_config_t *sc,
|
|||
|
||||
ret = ioctl(sc->master->fd, EC_IOCTL_SC_STATE, &data);
|
||||
if (EC_IOCTL_IS_ERROR(ret)) {
|
||||
fprintf(stderr, "Failed to get slave configuration state: %s\n",
|
||||
strerror(EC_IOCTL_ERRNO(ret)));
|
||||
return -EC_IOCTL_ERRNO(ret);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
|
|
|||
|
|
@ -2392,7 +2392,7 @@ static ATTRIBUTES int ec_ioctl_sc_watchdog(
|
|||
goto out_up;
|
||||
}
|
||||
|
||||
ecrt_slave_config_watchdog(sc,
|
||||
ret = ecrt_slave_config_watchdog(sc,
|
||||
data.watchdog_divider, data.watchdog_intervals);
|
||||
|
||||
out_up:
|
||||
|
|
@ -2466,8 +2466,7 @@ static ATTRIBUTES int ec_ioctl_sc_clear_pdos(
|
|||
|
||||
up(&master->master_sem); /** \todo sc could be invalidated */
|
||||
|
||||
ecrt_slave_config_pdo_assign_clear(sc, data.sync_index);
|
||||
return 0;
|
||||
return ecrt_slave_config_pdo_assign_clear(sc, data.sync_index);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
|
@ -2536,8 +2535,7 @@ static ATTRIBUTES int ec_ioctl_sc_clear_entries(
|
|||
|
||||
up(&master->master_sem); /** \todo sc could be invalidated */
|
||||
|
||||
ecrt_slave_config_pdo_mapping_clear(sc, data.index);
|
||||
return 0;
|
||||
return ecrt_slave_config_pdo_mapping_clear(sc, data.index);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
|
@ -2651,6 +2649,7 @@ static ATTRIBUTES int ec_ioctl_sc_dc(
|
|||
{
|
||||
ec_ioctl_config_t data;
|
||||
ec_slave_config_t *sc;
|
||||
int ret;
|
||||
|
||||
if (unlikely(!ctx->requested))
|
||||
return -EPERM;
|
||||
|
|
@ -2666,7 +2665,7 @@ static ATTRIBUTES int ec_ioctl_sc_dc(
|
|||
return -ENOENT;
|
||||
}
|
||||
|
||||
ecrt_slave_config_dc(sc, data.dc_assign_activate,
|
||||
ret = ecrt_slave_config_dc(sc, data.dc_assign_activate,
|
||||
data.dc_sync[0].cycle_time,
|
||||
data.dc_sync[0].shift_time,
|
||||
data.dc_sync[1].cycle_time,
|
||||
|
|
@ -2674,7 +2673,7 @@ static ATTRIBUTES int ec_ioctl_sc_dc(
|
|||
|
||||
up(&master->master_sem);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
|
@ -3119,6 +3118,7 @@ static ATTRIBUTES int ec_ioctl_sc_state(
|
|||
ec_ioctl_sc_state_t data;
|
||||
const ec_slave_config_t *sc;
|
||||
ec_slave_config_state_t state;
|
||||
int ret;
|
||||
|
||||
if (unlikely(!ctx->requested))
|
||||
return -EPERM;
|
||||
|
|
@ -3134,7 +3134,9 @@ static ATTRIBUTES int ec_ioctl_sc_state(
|
|||
return -ENOENT;
|
||||
}
|
||||
|
||||
ecrt_slave_config_state(sc, &state);
|
||||
ret = ecrt_slave_config_state(sc, &state);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (ec_copy_to_user((void __user *) data.state,
|
||||
&state, sizeof(state), ctx))
|
||||
|
|
|
|||
|
|
@ -647,7 +647,7 @@ int ecrt_slave_config_sync_manager(ec_slave_config_t *sc, uint8_t sync_index,
|
|||
|
||||
/****************************************************************************/
|
||||
|
||||
void ecrt_slave_config_watchdog(ec_slave_config_t *sc,
|
||||
int ecrt_slave_config_watchdog(ec_slave_config_t *sc,
|
||||
uint16_t divider, uint16_t intervals)
|
||||
{
|
||||
EC_CONFIG_DBG(sc, 1, "%s(sc = 0x%p, divider = %u, intervals = %u)\n",
|
||||
|
|
@ -655,6 +655,7 @@ void ecrt_slave_config_watchdog(ec_slave_config_t *sc,
|
|||
|
||||
sc->watchdog_divider = divider;
|
||||
sc->watchdog_intervals = intervals;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
|
@ -689,7 +690,7 @@ int ecrt_slave_config_pdo_assign_add(ec_slave_config_t *sc,
|
|||
|
||||
/****************************************************************************/
|
||||
|
||||
void ecrt_slave_config_pdo_assign_clear(ec_slave_config_t *sc,
|
||||
int ecrt_slave_config_pdo_assign_clear(ec_slave_config_t *sc,
|
||||
uint8_t sync_index)
|
||||
{
|
||||
EC_CONFIG_DBG(sc, 1, "%s(sc = 0x%p, sync_index = %u)\n",
|
||||
|
|
@ -697,12 +698,13 @@ void ecrt_slave_config_pdo_assign_clear(ec_slave_config_t *sc,
|
|||
|
||||
if (sync_index >= EC_MAX_SYNC_MANAGERS) {
|
||||
EC_CONFIG_ERR(sc, "Invalid sync manager index %u!\n", sync_index);
|
||||
return;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
down(&sc->master->master_sem);
|
||||
ec_pdo_list_clear_pdos(&sc->sync_configs[sync_index].pdos);
|
||||
up(&sc->master->master_sem);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
|
@ -744,7 +746,7 @@ int ecrt_slave_config_pdo_mapping_add(ec_slave_config_t *sc,
|
|||
|
||||
/****************************************************************************/
|
||||
|
||||
void ecrt_slave_config_pdo_mapping_clear(ec_slave_config_t *sc,
|
||||
int ecrt_slave_config_pdo_mapping_clear(ec_slave_config_t *sc,
|
||||
uint16_t pdo_index)
|
||||
{
|
||||
uint8_t sync_index;
|
||||
|
|
@ -765,6 +767,7 @@ void ecrt_slave_config_pdo_mapping_clear(ec_slave_config_t *sc,
|
|||
} else {
|
||||
EC_CONFIG_WARN(sc, "PDO 0x%04X is not assigned.\n", pdo_index);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
|
@ -956,7 +959,7 @@ int ecrt_slave_config_reg_pdo_entry_pos(
|
|||
|
||||
/****************************************************************************/
|
||||
|
||||
void ecrt_slave_config_dc(ec_slave_config_t *sc, uint16_t assign_activate,
|
||||
int ecrt_slave_config_dc(ec_slave_config_t *sc, uint16_t assign_activate,
|
||||
uint32_t sync0_cycle_time, int32_t sync0_shift_time,
|
||||
uint32_t sync1_cycle_time, int32_t sync1_shift_time)
|
||||
{
|
||||
|
|
@ -971,6 +974,7 @@ void ecrt_slave_config_dc(ec_slave_config_t *sc, uint16_t assign_activate,
|
|||
sc->dc_sync[0].shift_time = sync0_shift_time;
|
||||
sc->dc_sync[1].cycle_time = sync1_cycle_time;
|
||||
sc->dc_sync[1].shift_time = sync1_shift_time;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
|
@ -1317,7 +1321,7 @@ ec_voe_handler_t *ecrt_slave_config_create_voe_handler(
|
|||
|
||||
/****************************************************************************/
|
||||
|
||||
void ecrt_slave_config_state(const ec_slave_config_t *sc,
|
||||
int ecrt_slave_config_state(const ec_slave_config_t *sc,
|
||||
ec_slave_config_state_t *state)
|
||||
{
|
||||
const ec_slave_t *slave = sc->slave;
|
||||
|
|
@ -1331,6 +1335,7 @@ void ecrt_slave_config_state(const ec_slave_config_t *sc,
|
|||
state->operational = 0;
|
||||
state->al_state = EC_SLAVE_STATE_UNKNOWN;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
|
|
|||
Loading…
Reference in New Issue