diff -r 3b7eec329112 -r 8fede404c01f master/slave.c --- a/master/slave.c Wed Oct 25 16:53:17 2006 +0000 +++ b/master/slave.c Thu Oct 26 16:29:26 2006 +0000 @@ -136,7 +136,6 @@ slave->error_flag = 0; slave->online = 1; slave->fmmu_count = 0; - slave->registered = 0; slave->coupler_index = 0; slave->coupler_subindex = 0xFFFF; @@ -243,7 +242,7 @@ kobject_put(&sdo->kobj); } - // free SDO kobject + // free SDO kobject FIXME if (slave->sdo_dictionary_fetched) kobject_del(&slave->sdo_kobj); kobject_put(&slave->sdo_kobj); @@ -263,6 +262,30 @@ /*****************************************************************************/ /** + Reset slave from operation mode. +*/ + +void ec_slave_reset(ec_slave_t *slave /**< EtherCAT slave */) +{ + slave->fmmu_count = 0; +} + +/*****************************************************************************/ + +/** + */ + +void ec_slave_request_state(ec_slave_t *slave, /**< ETherCAT slave */ + ec_slave_state_t state /**< new state */ + ) +{ + slave->requested_state = state; + slave->error_flag = 0; +} + +/*****************************************************************************/ + +/** Fetches data from a STRING category. \return 0 in case of success, else < 0 */ @@ -514,7 +537,6 @@ fmmu->logical_start_address = 0; slave->fmmu_count++; - slave->registered = 1; return 0; } @@ -810,13 +832,13 @@ if (attr == &attr_state) { char state[EC_STATE_STRING_SIZE]; if (!strcmp(buffer, "INIT\n")) - slave->requested_state = EC_SLAVE_STATE_INIT; + ec_slave_request_state(slave, EC_SLAVE_STATE_INIT); else if (!strcmp(buffer, "PREOP\n")) - slave->requested_state = EC_SLAVE_STATE_PREOP; + ec_slave_request_state(slave, EC_SLAVE_STATE_PREOP); else if (!strcmp(buffer, "SAVEOP\n")) - slave->requested_state = EC_SLAVE_STATE_SAVEOP; + ec_slave_request_state(slave, EC_SLAVE_STATE_SAVEOP); else if (!strcmp(buffer, "OP\n")) - slave->requested_state = EC_SLAVE_STATE_OP; + ec_slave_request_state(slave, EC_SLAVE_STATE_OP); else { EC_ERR("Invalid slave state \"%s\"!\n", buffer); return -EINVAL; @@ -825,7 +847,6 @@ ec_state_string(slave->requested_state, state); EC_INFO("Accepted new state %s for slave %i.\n", state, slave->ring_position); - slave->error_flag = 0; return size; } else if (attr == &attr_eeprom) {