]> rtime.felk.cvut.cz Git - CanFestival-3.git/blob - include/data.h
compilator compatitibility
[CanFestival-3.git] / include / data.h
1 /*
2 This file is part of CanFestival, a library implementing CanOpen Stack. 
3
4 Copyright (C): Edouard TISSERANT and Francis DUPIN
5
6 See COPYING file for copyrights details.
7
8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Lesser General Public
10 License as published by the Free Software Foundation; either
11 version 2.1 of the License, or (at your option) any later version.
12
13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public
19 License along with this library; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21 */
22
23
24 #ifndef __data_h__
25 #define __data_h__
26
27 /* declaration of CO_Data type let us include all necessary headers
28  struct struct_CO_Data can then be defined later
29  */
30 typedef struct struct_CO_Data CO_Data;
31
32 #include <applicfg.h>
33 #include "def.h"
34 #include "can.h"
35 #include "objdictdef.h"
36 #include "objacces.h"
37 #include "sdo.h"
38 #include "pdo.h"
39 #include "states.h"
40 #include "lifegrd.h"
41 #include "sync.h"
42 #include "nmtMaster.h"
43
44 /* This structurs contains all necessary information for a CanOpen node */
45 struct struct_CO_Data {
46         /* Object dictionary */
47         UNS8 *bDeviceNodeId;
48         const indextable *objdict;
49         UNS8 *count_sync;
50         quick_index *firstIndex;
51         quick_index *lastIndex;
52         UNS16 *ObjdictSize;
53         const UNS8 *iam_a_slave;
54         valueRangeTest_t valueRangeTest;
55         
56         /* SDO */
57         s_transfer transfers[SDO_MAX_SIMULTANEOUS_TRANSFERTS];
58         SDOtimeoutError_t SDOtimeoutError;
59         /* s_sdo_parameter *sdo_parameters; */
60
61         /* State machine */
62         e_nodeState nodeState;
63         s_state_communication CurrentCommunicationState;
64         initialisation_t initialisation;
65         preOperational_t preOperational;
66         operational_t operational;
67         stopped_t stopped;
68
69         /* NMT-heartbeat */
70         UNS8 *ConsumerHeartbeatCount;
71         UNS32 *ConsumerHeartbeatEntries;
72         TIMER_HANDLE *ConsumerHeartBeatTimers;
73         UNS16 *ProducerHeartBeatTime;
74         TIMER_HANDLE ProducerHeartBeatTimer;
75         heartbeatError_t heartbeatError;
76         e_nodeState NMTable[NMT_MAX_NODE_ID]; 
77
78         /* SYNC */
79         TIMER_HANDLE syncTimer;
80         UNS32 *COB_ID_Sync;
81         UNS32 *Sync_Cycle_Period;
82         /*UNS32 *Sync_window_length;;*/
83         post_sync_t post_sync;
84         post_TPDO_t post_TPDO;
85         
86         /* PDO */
87         s_process_var process_var;
88         
89         /* General */
90         UNS8 toggle;
91         canSend_t canSend;      
92         scanIndexOD_t scanIndexOD;
93 };
94
95 /* A macro to initialize the data in client app.*/
96 #define CANOPEN_NODE_DATA_INITIALIZER(NODE_PREFIX) {\
97         /* Object dictionary*/\
98         bDeviceNodeId:& NODE_PREFIX ## _bDeviceNodeId,\
99         objdict: NODE_PREFIX ## _objdict,\
100         count_sync: NODE_PREFIX ## _count_sync,\
101         firstIndex: & NODE_PREFIX ## _firstIndex,\
102         lastIndex: & NODE_PREFIX ## _lastIndex,\
103         ObjdictSize: & NODE_PREFIX ## _ObjdictSize,\
104         iam_a_slave: & NODE_PREFIX ## _iam_a_slave,\
105         valueRangeTest: NODE_PREFIX ## _valueRangeTest,\
106         \
107         /* SDO */\
108         transfers:{{\
109                 nodeId: 0,\
110                 index: 0,\
111                 subIndex: 0,\
112                 state: SDO_RESET,\
113                 toggle: 0,\
114                 count: 0,\
115                 offset: 0,\
116                 data: {0,},\
117                 dataType: 0,\
118                 timer: -1,\
119                 Callback: NULL},},\
120         SDOtimeoutError: &NODE_PREFIX ## _SDOtimeoutError,\
121         \
122         /* State machine */\
123         nodeState:Unknown_state,\
124         CurrentCommunicationState:{\
125                 csBoot_Up: 0,\
126                 csSDO: 0,\
127                 csEmergency: 0,\
128                 csSYNC: 0,\
129                 csHeartbeat: 0,\
130                 csPDO: 0},\
131         initialisation: &NODE_PREFIX ## _initialisation,\
132         preOperational: &NODE_PREFIX ## _preOperational,\
133         operational: &NODE_PREFIX ## _operational,\
134         stopped: &NODE_PREFIX ## _stopped,\
135         \
136         /* NMT-heartbeat */\
137         ConsumerHeartbeatCount: & NODE_PREFIX ## _highestSubIndex_obj1016,\
138         ConsumerHeartbeatEntries: NODE_PREFIX ## _obj1016,\
139         ConsumerHeartBeatTimers: NODE_PREFIX ## _heartBeatTimers,\
140         ProducerHeartBeatTime: & NODE_PREFIX ## _obj1017,\
141         ProducerHeartBeatTimer: TIMER_NONE,\
142         heartbeatError: NODE_PREFIX ## _heartbeatError,\
143         NMTable:{Unknown_state,},\
144         \
145         /* SYNC */\
146         syncTimer: TIMER_NONE,\
147         COB_ID_Sync: & NODE_PREFIX ## _obj1005,\
148         Sync_Cycle_Period: & NODE_PREFIX ## _obj1006,\
149         /*Sync_window_length: & NODE_PREFIX ## _obj1007,*/\
150         post_sync: NODE_PREFIX ## _post_sync,\
151         post_TPDO: NODE_PREFIX ## _post_TPDO,\
152         \
153         /* PDO */\
154         process_var: {\
155                 count: 0,\
156                 data: {0,}},\
157         \
158         /* General */\
159         toggle: 0,\
160         canSend: NODE_PREFIX ## _canSend,\
161         scanIndexOD: NODE_PREFIX ## _scanIndexOD\
162 }
163
164 #endif /* __data_h__ */
165
166