plugins/canfestival/cf_runtime.c
changeset 336 ae3488c79283
parent 235 a66e150f2888
child 360 32339ad7d9ae
--- a/plugins/canfestival/cf_runtime.c	Fri Apr 10 07:53:42 2009 +0200
+++ b/plugins/canfestival/cf_runtime.c	Fri Apr 10 07:55:55 2009 +0200
@@ -20,7 +20,7 @@
 {
     /* Put the master in operational mode */
     setState(d, Operational);
-      
+
     /* Ask slave node to go in operational mode */
     masterSendNMTstateChange (d, 0, NMT_Start_Node);
 }
@@ -30,7 +30,7 @@
 %(slavebootups)s
 
 /* One slave node post_sync callback.
- * Used to align PLC tick-time on CANopen SYNC 
+ * Used to align PLC tick-time on CANopen SYNC
  */
 %(post_sync)s
 
@@ -48,42 +48,47 @@
     setState(&nodename##_Data, Initialisation);
 
 #define NODE_MASTER_INIT(nodename, nodeid) \
-	NODE_FORCE_SYNC(nodename) \
-	NODE_INIT(nodename, nodeid)
+    NODE_FORCE_SYNC(nodename) \
+    NODE_INIT(nodename, nodeid)
 
 #define NODE_SLAVE_INIT(nodename, nodeid) \
-	NODE_INIT(nodename, nodeid)
+    NODE_INIT(nodename, nodeid)
 
 void InitNodes(CO_Data* d, UNS32 id)
 {
-	%(slavebootup_register)s
-	%(post_sync_register)s
+    %(slavebootup_register)s
+    %(post_sync_register)s
     %(nodes_init)s
 }
 
+#define NODE_STOP(nodename) \
+    if(init_level-- > 0)\
+    {\
+        masterSendNMTstateChange(&nodename##_Data, 0, NMT_Reset_Node);\
+        setState(&nodename##_Data, Stopped);\
+    }
+
 void Exit(CO_Data* d, UNS32 id)
 {
+    %(nodes_stop)s
 }
 
 #define NODE_CLOSE(nodename) \
-    if(init_level-- > 0)\
+    if(init_level_c-- > 0)\
     {\
-        EnterMutex();\
-        masterSendNMTstateChange(&nodename##_Data, 0, NMT_Reset_Node);\
-        setState(&nodename##_Data, Stopped);\
-        LeaveMutex();\
-        canClose(&nodename##_Data);\
+      canClose(&nodename##_Data);\
     }
 
 void __cleanup_%(locstr)s()
 {
     // Stop timer thread
     if(init_level-- > 0){
+    int init_level_c = init_level;	
         StopTimerLoop(&Exit);
         %(nodes_close)s
-   }
+    }
     #if !defined(WIN32) || defined(__CYGWIN__)
-   		TimerCleanup();
+        TimerCleanup();
     #endif
 }
 
@@ -104,11 +109,11 @@
         fflush(stderr);
         return -1;
     }
-#endif      
-	#if !defined(WIN32) || defined(__CYGWIN__)
-		TimerInit();
-	#endif
-	
+#endif
+    #if !defined(WIN32) || defined(__CYGWIN__)
+        TimerInit();
+    #endif
+
     %(nodes_open)s
 
     // Start timer thread
@@ -123,7 +128,7 @@
 void __retrieve_%(locstr)s()
 {
     /* Locks the stack, so that no changes occurs while PLC access variables
-     * TODO : implement buffers to avoid such a big lock  
+     * TODO : implement buffers to avoid such a big lock
      *  */
     EnterMutex();
     /* Send Sync */