--- 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) {