master/slave.c
changeset 446 8fede404c01f
parent 423 862ff892cf18
child 448 e4b76dc7910c
--- 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) {