etisserant@52: etisserant@52: #include "canfestival.h" etisserant@52: etisserant@52: %(nodes_includes)s etisserant@52: etisserant@52: #define BOARD_DECL(nodename, busname, baudrate)\ etisserant@52: s_BOARD nodename##Board = {busname, baudrate}; etisserant@52: etisserant@52: %(board_decls)s etisserant@52: etisserant@52: static int init_level=0; etisserant@52: etisserant@52: #define NODE_INIT(nodename, nodeid) \ etisserant@52: /* Defining the node Id */\ etisserant@52: setNodeId(&nodename##_Data, nodeid);\ etisserant@52: /* init */\ etisserant@52: setState(&nodename##_Data, Initialisation); etisserant@52: etisserant@52: void InitNodes(CO_Data* d, UNS32 id) etisserant@52: { etisserant@52: %(nodes_init)s etisserant@52: } etisserant@52: etisserant@52: #define NODE_CLOSE(nodename) \ etisserant@52: if(init_level--)\ etisserant@52: {\ etisserant@52: EnterMutex();\ etisserant@52: setState(&nodename##_Data, Stopped);\ etisserant@52: LeaveMutex();\ etisserant@52: canClose(&nodename##_Data);\ etisserant@52: } etisserant@52: etisserant@52: void __cleanup_%(locstr)s() etisserant@52: { etisserant@52: %(nodes_close)s etisserant@52: etisserant@52: // Stop timer thread etisserant@52: StopTimerLoop(); etisserant@52: etisserant@52: } etisserant@52: etisserant@52: #define NODE_OPEN(nodename)\ etisserant@52: if(!canOpen(&nodename##Board,&nodename##_Data)){\ etisserant@52: printf("Cannot open " #nodename " Board (%%s,%%s)\n",nodename##Board.busname, nodename##Board.baudrate);\ etisserant@52: __cleanup_%(locstr)s();\ etisserant@52: return -1;\ etisserant@52: }\ etisserant@52: init_level++; etisserant@52: etisserant@52: /*************************** INIT *****************************************/ etisserant@52: int __init_%(locstr)s(int argc,char **argv) etisserant@52: { etisserant@52: etisserant@52: %(nodes_open)s etisserant@52: etisserant@52: #ifndef NOT_USE_DYNAMIC_LOADING etisserant@52: LoadCanDriver("libcanfestival_can_%(candriver)s.so"); etisserant@52: #endif etisserant@52: // Start timer thread etisserant@52: StartTimerLoop(&InitNodes); etisserant@52: return 0; etisserant@52: } etisserant@52: etisserant@52: void __retrive_%(locstr)s() etisserant@52: { etisserant@52: /*TODO: Send Sync */ etisserant@52: EnterMutex(); etisserant@52: } etisserant@52: etisserant@52: void __publish_%(locstr)s() etisserant@52: { etisserant@52: /*TODO: Call SendPDOEvent */ etisserant@52: LeaveMutex(); etisserant@52: } etisserant@52: