plugins/canfestival/cf_runtime.c
changeset 178 2390b409eb93
parent 174 dc81d1d0f463
child 203 cb9901076a21
--- a/plugins/canfestival/cf_runtime.c	Fri Jun 27 09:38:16 2008 +0200
+++ b/plugins/canfestival/cf_runtime.c	Fri Jun 27 16:21:22 2008 +0200
@@ -1,16 +1,21 @@
 
 #include "canfestival.h"
 
+/* CanFestival nodes generated OD headers*/
 %(nodes_includes)s
 
 #define BOARD_DECL(nodename, busname, baudrate)\
     s_BOARD nodename##Board = {busname, baudrate};
 
+/* CAN channels declaration */
 %(board_decls)s
 
+/* Keep track of init level to cleanup correctly */
 static int init_level=0;
+/* Retrieve PLC cycle time */
 extern int common_ticktime__;
 
+/* Called once all NetworkEdit declares slaves have booted*/
 static void Master_post_SlaveBootup(CO_Data* d, UNS8 nodeId)
 {
     /* Put the master in operational mode */
@@ -20,23 +25,40 @@
     masterSendNMTstateChange (d, 0, NMT_Start_Node);
 }
 
+/* Per master node slavebootup callbacks. Checks that
+ * every node have booted before calling Master_post_SlaveBootup */
 %(slavebootups)s
 
-#define NODE_INIT(nodename, nodeid) \
+/* One slave node post_sync callback.
+ * Used to align PLC tick-time on CANopen SYNC 
+ */
+%(post_sync)s
+
+#define NODE_FORCE_SYNC(nodename) \
     /* Artificially force sync state to 1 so that it is not started */\
     nodename##_Data.CurrentCommunicationState.csSYNC = -1;\
     /* Force sync period to common_ticktime__ so that other node can read it*/\
     *nodename##_Data.COB_ID_Sync = 0x40000080;\
-    *nodename##_Data.Sync_Cycle_Period = common_ticktime__ * 1000;\
+    *nodename##_Data.Sync_Cycle_Period = common_ticktime__ * 1000;
+
+#define NODE_INIT(nodename, nodeid) \
     /* Defining the node Id */\
     setNodeId(&nodename##_Data, nodeid);\
     /* init */\
     setState(&nodename##_Data, Initialisation);
 
+#define NODE_MASTER_INIT(nodename, nodeid) \
+	NODE_FORCE_SYNC(nodename) \
+	NODE_INIT(nodename, nodeid)
+
+#define NODE_SLAVE_INIT(nodename, nodeid) \
+	NODE_INIT(nodename, nodeid)
+
 void InitNodes(CO_Data* d, UNS32 id)
 {
+	%(slavebootup_register)s
+	%(post_sync_register)s
     %(nodes_init)s
-	%(slavebootup_register)s
 }
 
 void Exit(CO_Data* d, UNS32 id)
@@ -103,7 +125,7 @@
      * TODO : implement buffers to avoid such a big lock  
      *  */
     EnterMutex();
-    /*Send Sync */
+    /* Send Sync */
     %(nodes_send_sync)s
 }
 
@@ -112,7 +134,7 @@
 
 void __publish_%(locstr)s()
 {
-    /*Call SendPDOEvent */
+    /* Process sync event */
     %(nodes_proceed_sync)s
     LeaveMutex();
 }