From 7b435e5e84a1fc4a6ece8d7f464d7f603feba863 Mon Sep 17 00:00:00 2001 From: Florian Pose Date: Thu, 29 Nov 2012 10:15:40 +0100 Subject: [PATCH] Changed the datatypes of the shift times in ecrt_slave_config_dc() to int32_t to correctly display negative shift times. --- include/ecrt.h | 8 ++++++-- lib/slave_config.c | 6 +++--- master/fsm_slave_config.c | 2 +- master/globals.h | 2 +- master/slave_config.c | 16 ++++++++-------- 5 files changed, 19 insertions(+), 15 deletions(-) diff --git a/include/ecrt.h b/include/ecrt.h index 361cccb0..a284ecf5 100644 --- a/include/ecrt.h +++ b/include/ecrt.h @@ -64,6 +64,8 @@ * ecrt_master_reference_clock_time() and the feature flag * EC_HAVE_REF_CLOCK_TIME to have the possibility to synchronize the master * clock to the reference clock. + * - Changed the datatypes of the shift times in ecrt_slave_config_dc() to + * int32_t to correctly display negative shift times. * * Changes in version 1.5: * @@ -1266,14 +1268,16 @@ int ecrt_slave_config_reg_pdo_entry( * The AssignActivate word is vendor-specific and can be taken from the XML * device description file (Device -> Dc -> AssignActivate). Set this to zero, * if the slave shall be operated without distributed clocks (default). + * + * \attention The \a sync1_shift time is ignored. */ void 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]. */ - uint32_t sync0_shift, /**< SYNC0 shift time [ns]. */ + int32_t sync0_shift, /**< SYNC0 shift time [ns]. */ uint32_t sync1_cycle, /**< SYNC1 cycle time [ns]. */ - uint32_t sync1_shift /**< SYNC1 shift time [ns]. */ + int32_t sync1_shift /**< SYNC1 shift time [ns]. */ ); /** Add an SDO configuration. diff --git a/lib/slave_config.c b/lib/slave_config.c index 624f98b6..9066231f 100644 --- a/lib/slave_config.c +++ b/lib/slave_config.c @@ -306,8 +306,8 @@ int ecrt_slave_config_reg_pdo_entry( /*****************************************************************************/ void ecrt_slave_config_dc(ec_slave_config_t *sc, uint16_t assign_activate, - uint32_t sync0_cycle_time, uint32_t sync0_shift_time, - uint32_t sync1_cycle_time, uint32_t sync1_shift_time) + uint32_t sync0_cycle_time, int32_t sync0_shift_time, + uint32_t sync1_cycle_time, int32_t sync1_shift_time) { ec_ioctl_config_t data; int ret; @@ -321,7 +321,7 @@ 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 assign_activate word: %s\n", + fprintf(stderr, "Failed to set DC parameters: %s\n", strerror(EC_IOCTL_ERRNO(ret))); } } diff --git a/master/fsm_slave_config.c b/master/fsm_slave_config.c index 65cb05df..b93fd35a 100644 --- a/master/fsm_slave_config.c +++ b/master/fsm_slave_config.c @@ -1305,7 +1305,7 @@ void ec_fsm_slave_config_state_dc_sync_check( EC_SLAVE_DBG(slave, 1, " app_time=%llu\n", master->app_time); EC_SLAVE_DBG(slave, 1, " start_time=%llu\n", start_time); EC_SLAVE_DBG(slave, 1, " cycle_time=%u\n", sync0->cycle_time); - EC_SLAVE_DBG(slave, 1, " shift_time=%u\n", sync0->shift_time); + EC_SLAVE_DBG(slave, 1, " shift_time=%i\n", sync0->shift_time); EC_SLAVE_DBG(slave, 1, " remainder=%u\n", remainder); EC_SLAVE_DBG(slave, 1, " start=%llu\n", start); start_time = start; diff --git a/master/globals.h b/master/globals.h index d13409b1..31aaad52 100644 --- a/master/globals.h +++ b/master/globals.h @@ -182,7 +182,7 @@ typedef enum { */ typedef struct { uint32_t cycle_time; /**< Cycle time [ns]. */ - uint32_t shift_time; /**< Shift time [ns]. */ + int32_t shift_time; /**< Shift time [ns]. */ } ec_sync_signal_t; /** Access states for SDO entries. diff --git a/master/slave_config.c b/master/slave_config.c index 421d4658..bbe22826 100644 --- a/master/slave_config.c +++ b/master/slave_config.c @@ -79,10 +79,10 @@ void ec_slave_config_init( sc->used_fmmus = 0; sc->dc_assign_activate = 0x0000; - sc->dc_sync[0].cycle_time = 0x00000000; - sc->dc_sync[1].cycle_time = 0x00000000; - sc->dc_sync[0].shift_time = 0x00000000; - sc->dc_sync[1].shift_time = 0x00000000; + sc->dc_sync[0].cycle_time = 0U; + sc->dc_sync[1].cycle_time = 0; + sc->dc_sync[0].shift_time = 0U; + sc->dc_sync[1].shift_time = 0; INIT_LIST_HEAD(&sc->sdo_configs); INIT_LIST_HEAD(&sc->sdo_requests); @@ -771,12 +771,12 @@ int ecrt_slave_config_reg_pdo_entry( /*****************************************************************************/ void ecrt_slave_config_dc(ec_slave_config_t *sc, uint16_t assign_activate, - uint32_t sync0_cycle_time, uint32_t sync0_shift_time, - uint32_t sync1_cycle_time, uint32_t sync1_shift_time) + uint32_t sync0_cycle_time, int32_t sync0_shift_time, + uint32_t sync1_cycle_time, int32_t sync1_shift_time) { EC_CONFIG_DBG(sc, 1, "%s(sc = 0x%p, assign_activate = 0x%04X," - " sync0_cycle = %u, sync0_shift = %u," - " sync1_cycle = %u, sync1_shift = %u\n", + " sync0_cycle = %u, sync0_shift = %i," + " sync1_cycle = %u, sync1_shift = %i\n", __func__, sc, assign_activate, sync0_cycle_time, sync0_shift_time, sync1_cycle_time, sync1_shift_time);