master/slave.c
changeset 1586 eb9185dfa8ac
parent 1543 373cd456dc26
parent 1583 017fa8fd9ac1
child 1606 6c5849669900
--- a/master/slave.c	Mon Dec 14 13:11:36 2009 +0100
+++ b/master/slave.c	Mon Dec 14 13:25:50 2009 +0100
@@ -67,6 +67,7 @@
         )
 {
     unsigned int i;
+    int ret;
 
     slave->master = master;
     slave->ring_position = ring_position;
@@ -147,6 +148,20 @@
 
     slave->sdo_dictionary_fetched = 0;
     slave->jiffies_preop = 0;
+
+    // init state machine datagram
+    ec_datagram_init(&slave->fsm_datagram);
+    snprintf(slave->fsm_datagram.name, EC_DATAGRAM_NAME_SIZE, "slave%u-fsm",slave->ring_position);
+    ret = ec_datagram_prealloc(&slave->fsm_datagram, EC_MAX_DATA_SIZE);
+    if (ret < 0) {
+        ec_datagram_clear(&slave->fsm_datagram);
+        EC_ERR("Failed to allocate Slave %u FSM datagram.\n",slave->ring_position);
+        return;
+    }
+
+    // create state machine object
+    ec_fsm_slave_init(&slave->fsm, slave, &slave->fsm_datagram);
+
 }
 
 /*****************************************************************************/
@@ -191,6 +206,9 @@
 
     if (slave->sii_words)
         kfree(slave->sii_words);
+    ec_fsm_slave_clear(&slave->fsm);
+    ec_datagram_clear(&slave->fsm_datagram);
+
 }
 
 /*****************************************************************************/