diff -r c5f3f71e7260 -r ae3488c79283 plugins/canfestival/cf_runtime.c --- 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 */