|
1 |
|
2 #include "canfestival.h" |
|
3 |
|
4 %(nodes_includes)s |
|
5 |
|
6 #define BOARD_DECL(nodename, busname, baudrate)\ |
|
7 s_BOARD nodename##Board = {busname, baudrate}; |
|
8 |
|
9 %(board_decls)s |
|
10 |
|
11 static int init_level=0; |
|
12 |
|
13 #define NODE_INIT(nodename, nodeid) \ |
|
14 /* Defining the node Id */\ |
|
15 setNodeId(&nodename##_Data, nodeid);\ |
|
16 /* init */\ |
|
17 setState(&nodename##_Data, Initialisation); |
|
18 |
|
19 void InitNodes(CO_Data* d, UNS32 id) |
|
20 { |
|
21 %(nodes_init)s |
|
22 } |
|
23 |
|
24 #define NODE_CLOSE(nodename) \ |
|
25 if(init_level--)\ |
|
26 {\ |
|
27 EnterMutex();\ |
|
28 setState(&nodename##_Data, Stopped);\ |
|
29 LeaveMutex();\ |
|
30 canClose(&nodename##_Data);\ |
|
31 } |
|
32 |
|
33 void __cleanup_%(locstr)s() |
|
34 { |
|
35 %(nodes_close)s |
|
36 |
|
37 // Stop timer thread |
|
38 StopTimerLoop(); |
|
39 |
|
40 } |
|
41 |
|
42 #define NODE_OPEN(nodename)\ |
|
43 if(!canOpen(&nodename##Board,&nodename##_Data)){\ |
|
44 printf("Cannot open " #nodename " Board (%%s,%%s)\n",nodename##Board.busname, nodename##Board.baudrate);\ |
|
45 __cleanup_%(locstr)s();\ |
|
46 return -1;\ |
|
47 }\ |
|
48 init_level++; |
|
49 |
|
50 /*************************** INIT *****************************************/ |
|
51 int __init_%(locstr)s(int argc,char **argv) |
|
52 { |
|
53 |
|
54 %(nodes_open)s |
|
55 |
|
56 #ifndef NOT_USE_DYNAMIC_LOADING |
|
57 LoadCanDriver("libcanfestival_can_%(candriver)s.so"); |
|
58 #endif |
|
59 // Start timer thread |
|
60 StartTimerLoop(&InitNodes); |
|
61 return 0; |
|
62 } |
|
63 |
|
64 void __retrive_%(locstr)s() |
|
65 { |
|
66 /*TODO: Send Sync */ |
|
67 EnterMutex(); |
|
68 } |
|
69 |
|
70 void __publish_%(locstr)s() |
|
71 { |
|
72 /*TODO: Call SendPDOEvent */ |
|
73 LeaveMutex(); |
|
74 } |
|
75 |