1 /*
2  * CANopen Object Dictionary.
3  *
4  * This file was automatically generated with CANopenNode Object
5  * Dictionary Editor. DON'T EDIT THIS FILE MANUALLY !!!!
6  * Object Dictionary Editor is currently an older, but functional web
7  * application. For more info see See 'Object_Dictionary_Editor/about.html' in
8  * <http://sourceforge.net/p/canopennode/code_complete/ci/master/tree/>
9  * For more information on CANopen Object Dictionary see <CO_SDO.h>.
10  *
11  * @file        CO_OD.c
12  * @author      Janez Paternoster
13  * @copyright   2010 - 2020 Janez Paternoster
14  *
15  * This file is part of CANopenNode, an opensource CANopen Stack.
16  * Project home page is <https://github.com/CANopenNode/CANopenNode>.
17  * For more information on CANopen see <http://www.can-cia.org/>.
18  *
19  * Licensed under the Apache License, Version 2.0 (the "License");
20  * you may not use this file except in compliance with the License.
21  * You may obtain a copy of the License at
22  *
23  *     http://www.apache.org/licenses/LICENSE-2.0
24  *
25  * Unless required by applicable law or agreed to in writing, software
26  * distributed under the License is distributed on an "AS IS" BASIS,
27  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
28  * See the License for the specific language governing permissions and
29  * limitations under the License.
30  */
31 
32 
33 #include "CO_driver.h"
34 #include "CO_OD.h"
35 #include "CO_SDO.h"
36 
37 
38 /*******************************************************************************
39    DEFINITION AND INITIALIZATION OF OBJECT DICTIONARY VARIABLES
40 *******************************************************************************/
41 
42 /***** Definition for RAM variables *******************************************/
43 struct sCO_OD_RAM CO_OD_RAM = {
44            CO_OD_FIRST_LAST_WORD,
45 
46 /*1001*/ 0x0,
47 /*1002*/ 0x0L,
48 /*1003*/ {0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L},
49 /*1010*/ {0x3L},
50 /*1011*/ {0x1L},
51 /*2100*/ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
52 /*2103*/ 0x0,
53 /*2104*/ 0x0,
54 /*2107*/ {0x3E8, 0x0, 0x0, 0x0, 0x0},
55 /*2108*/ {0},
56 /*2109*/ {0},
57 /*2110*/ {0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L},
58 /*2120*/ {0x5, 0x1234567890ABCDEFLL, 0x234567890ABCDEF1LL, 12.345, 456.789, 0},
59 /*2130*/ {0x3, {'-', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, 0, 0x0L},
60 /*6000*/ {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
61 /*6200*/ {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
62 /*6401*/ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
63 /*6411*/ {0, 0, 0, 0, 0, 0, 0, 0},
64 
65            CO_OD_FIRST_LAST_WORD,
66 };
67 
68 
69 /***** Definition for EEPROM variables ****************************************/
70 struct sCO_OD_EEPROM CO_OD_EEPROM = {
71            CO_OD_FIRST_LAST_WORD,
72 
73 /*2106*/ 0x0L,
74 /*2112*/ {1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L},
75 
76            CO_OD_FIRST_LAST_WORD,
77 };
78 
79 
80 /***** Definition for ROM variables *******************************************/
81    struct sCO_OD_ROM CO_OD_ROM = {    //constant variables, stored in flash
82            CO_OD_FIRST_LAST_WORD,
83 
84 /*1000*/ 0x0L,
85 /*1005*/ 0x80L,
86 /*1006*/ 0x0L,
87 /*1007*/ 0x0L,
88 /*1008*/ {'C', 'A', 'N', 'o', 'p', 'e', 'n', 'N', 'o', 'd', 'e'},
89 /*1009*/ {'3', '.', '0', '0'},
90 /*100A*/ {'3', '.', '0', '0'},
91 /*1012*/ 0x80000100L,
92 /*1014*/ 0x80L,
93 /*1015*/ 0x64,
94 /*1016*/ {0x0L, 0x0L, 0x0L, 0x0L},
95 /*1017*/ 0x3E8,
96 /*1018*/ {0x4, 0x0L, 0x0L, 0x0L, 0x0L},
97 /*1019*/ 0x0,
98 /*1029*/ {0x0, 0x0, 0x1, 0x0, 0x0, 0x0},
99 /*1200*/{{0x2, 0x600L, 0x580L}},
100 /*1400*/{{0x2, 0x200L, 0xFF},
101 /*1401*/ {0x2, 0x300L, 0xFE},
102 /*1402*/ {0x2, 0x400L, 0xFE},
103 /*1403*/ {0x2, 0x500L, 0xFE}},
104 /*1600*/{{0x2, 0x62000108L, 0x62000208L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L},
105 /*1601*/ {0x0, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L},
106 /*1602*/ {0x0, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L},
107 /*1603*/ {0x0, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L}},
108 /*1800*/{{0x6, 0x180L, 0xFF, 0x64, 0x0, 0x0, 0x0},
109 /*1801*/ {0x6, 0x280L, 0xFE, 0x0, 0x0, 0x0, 0x0},
110 /*1802*/ {0x6, 0x380L, 0xFE, 0x0, 0x0, 0x0, 0x0},
111 /*1803*/ {0x6, 0x480L, 0xFE, 0x0, 0x0, 0x0, 0x0}},
112 /*1A00*/{{0x2, 0x60000108L, 0x60000208L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L},
113 /*1A01*/ {0x0, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L},
114 /*1A02*/ {0x0, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L},
115 /*1A03*/ {0x0, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L}},
116 /*1F80*/ 0x00000008L,
117 /*2101*/ 0x30,
118 /*2102*/ 0xFA,
119 /*2111*/ {1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L},
120 
121            CO_OD_FIRST_LAST_WORD
122 };
123 
124 
125 /*******************************************************************************
126    STRUCTURES FOR RECORD TYPE OBJECTS
127 *******************************************************************************/
128 /*0x1018*/ const CO_OD_entryRecord_t OD_record1018[5] = {
129            {(void*)&CO_OD_ROM.identity.maxSubIndex, 0x05,  1},
130            {(void*)&CO_OD_ROM.identity.vendorID, 0x85,  4},
131            {(void*)&CO_OD_ROM.identity.productCode, 0x85,  4},
132            {(void*)&CO_OD_ROM.identity.revisionNumber, 0x85,  4},
133            {(void*)&CO_OD_ROM.identity.serialNumber, 0x85,  4}};
134 /*0x1200*/ const CO_OD_entryRecord_t OD_record1200[3] = {
135            {(void*)&CO_OD_ROM.SDOServerParameter[0].maxSubIndex, 0x05,  1},
136            {(void*)&CO_OD_ROM.SDOServerParameter[0].COB_IDClientToServer, 0x85,  4},
137            {(void*)&CO_OD_ROM.SDOServerParameter[0].COB_IDServerToClient, 0x85,  4}};
138 /*0x1400*/ const CO_OD_entryRecord_t OD_record1400[3] = {
139            {(void*)&CO_OD_ROM.RPDOCommunicationParameter[0].maxSubIndex, 0x05,  1},
140            {(void*)&CO_OD_ROM.RPDOCommunicationParameter[0].COB_IDUsedByRPDO, 0x8D,  4},
141            {(void*)&CO_OD_ROM.RPDOCommunicationParameter[0].transmissionType, 0x0D,  1}};
142 /*0x1401*/ const CO_OD_entryRecord_t OD_record1401[3] = {
143            {(void*)&CO_OD_ROM.RPDOCommunicationParameter[1].maxSubIndex, 0x05,  1},
144            {(void*)&CO_OD_ROM.RPDOCommunicationParameter[1].COB_IDUsedByRPDO, 0x8D,  4},
145            {(void*)&CO_OD_ROM.RPDOCommunicationParameter[1].transmissionType, 0x0D,  1}};
146 /*0x1402*/ const CO_OD_entryRecord_t OD_record1402[3] = {
147            {(void*)&CO_OD_ROM.RPDOCommunicationParameter[2].maxSubIndex, 0x05,  1},
148            {(void*)&CO_OD_ROM.RPDOCommunicationParameter[2].COB_IDUsedByRPDO, 0x8D,  4},
149            {(void*)&CO_OD_ROM.RPDOCommunicationParameter[2].transmissionType, 0x0D,  1}};
150 /*0x1403*/ const CO_OD_entryRecord_t OD_record1403[3] = {
151            {(void*)&CO_OD_ROM.RPDOCommunicationParameter[3].maxSubIndex, 0x05,  1},
152            {(void*)&CO_OD_ROM.RPDOCommunicationParameter[3].COB_IDUsedByRPDO, 0x8D,  4},
153            {(void*)&CO_OD_ROM.RPDOCommunicationParameter[3].transmissionType, 0x0D,  1}};
154 /*0x1600*/ const CO_OD_entryRecord_t OD_record1600[9] = {
155            {(void*)&CO_OD_ROM.RPDOMappingParameter[0].numberOfMappedObjects, 0x0D,  1},
156            {(void*)&CO_OD_ROM.RPDOMappingParameter[0].mappedObject1, 0x8D,  4},
157            {(void*)&CO_OD_ROM.RPDOMappingParameter[0].mappedObject2, 0x8D,  4},
158            {(void*)&CO_OD_ROM.RPDOMappingParameter[0].mappedObject3, 0x8D,  4},
159            {(void*)&CO_OD_ROM.RPDOMappingParameter[0].mappedObject4, 0x8D,  4},
160            {(void*)&CO_OD_ROM.RPDOMappingParameter[0].mappedObject5, 0x8D,  4},
161            {(void*)&CO_OD_ROM.RPDOMappingParameter[0].mappedObject6, 0x8D,  4},
162            {(void*)&CO_OD_ROM.RPDOMappingParameter[0].mappedObject7, 0x8D,  4},
163            {(void*)&CO_OD_ROM.RPDOMappingParameter[0].mappedObject8, 0x8D,  4}};
164 /*0x1601*/ const CO_OD_entryRecord_t OD_record1601[9] = {
165            {(void*)&CO_OD_ROM.RPDOMappingParameter[1].numberOfMappedObjects, 0x0D,  1},
166            {(void*)&CO_OD_ROM.RPDOMappingParameter[1].mappedObject1, 0x8D,  4},
167            {(void*)&CO_OD_ROM.RPDOMappingParameter[1].mappedObject2, 0x8D,  4},
168            {(void*)&CO_OD_ROM.RPDOMappingParameter[1].mappedObject3, 0x8D,  4},
169            {(void*)&CO_OD_ROM.RPDOMappingParameter[1].mappedObject4, 0x8D,  4},
170            {(void*)&CO_OD_ROM.RPDOMappingParameter[1].mappedObject5, 0x8D,  4},
171            {(void*)&CO_OD_ROM.RPDOMappingParameter[1].mappedObject6, 0x8D,  4},
172            {(void*)&CO_OD_ROM.RPDOMappingParameter[1].mappedObject7, 0x8D,  4},
173            {(void*)&CO_OD_ROM.RPDOMappingParameter[1].mappedObject8, 0x8D,  4}};
174 /*0x1602*/ const CO_OD_entryRecord_t OD_record1602[9] = {
175            {(void*)&CO_OD_ROM.RPDOMappingParameter[2].numberOfMappedObjects, 0x0D,  1},
176            {(void*)&CO_OD_ROM.RPDOMappingParameter[2].mappedObject1, 0x8D,  4},
177            {(void*)&CO_OD_ROM.RPDOMappingParameter[2].mappedObject2, 0x8D,  4},
178            {(void*)&CO_OD_ROM.RPDOMappingParameter[2].mappedObject3, 0x8D,  4},
179            {(void*)&CO_OD_ROM.RPDOMappingParameter[2].mappedObject4, 0x8D,  4},
180            {(void*)&CO_OD_ROM.RPDOMappingParameter[2].mappedObject5, 0x8D,  4},
181            {(void*)&CO_OD_ROM.RPDOMappingParameter[2].mappedObject6, 0x8D,  4},
182            {(void*)&CO_OD_ROM.RPDOMappingParameter[2].mappedObject7, 0x8D,  4},
183            {(void*)&CO_OD_ROM.RPDOMappingParameter[2].mappedObject8, 0x8D,  4}};
184 /*0x1603*/ const CO_OD_entryRecord_t OD_record1603[9] = {
185            {(void*)&CO_OD_ROM.RPDOMappingParameter[3].numberOfMappedObjects, 0x0D,  1},
186            {(void*)&CO_OD_ROM.RPDOMappingParameter[3].mappedObject1, 0x8D,  4},
187            {(void*)&CO_OD_ROM.RPDOMappingParameter[3].mappedObject2, 0x8D,  4},
188            {(void*)&CO_OD_ROM.RPDOMappingParameter[3].mappedObject3, 0x8D,  4},
189            {(void*)&CO_OD_ROM.RPDOMappingParameter[3].mappedObject4, 0x8D,  4},
190            {(void*)&CO_OD_ROM.RPDOMappingParameter[3].mappedObject5, 0x8D,  4},
191            {(void*)&CO_OD_ROM.RPDOMappingParameter[3].mappedObject6, 0x8D,  4},
192            {(void*)&CO_OD_ROM.RPDOMappingParameter[3].mappedObject7, 0x8D,  4},
193            {(void*)&CO_OD_ROM.RPDOMappingParameter[3].mappedObject8, 0x8D,  4}};
194 /*0x1800*/ const CO_OD_entryRecord_t OD_record1800[7] = {
195            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[0].maxSubIndex, 0x05,  1},
196            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[0].COB_IDUsedByTPDO, 0x8D,  4},
197            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[0].transmissionType, 0x0D,  1},
198            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[0].inhibitTime, 0x8D,  2},
199            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[0].compatibilityEntry, 0x0D,  1},
200            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[0].eventTimer, 0x8D,  2},
201            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[0].SYNCStartValue, 0x0D,  1}};
202 /*0x1801*/ const CO_OD_entryRecord_t OD_record1801[7] = {
203            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[1].maxSubIndex, 0x05,  1},
204            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[1].COB_IDUsedByTPDO, 0x8D,  4},
205            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[1].transmissionType, 0x0D,  1},
206            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[1].inhibitTime, 0x8D,  2},
207            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[1].compatibilityEntry, 0x0D,  1},
208            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[1].eventTimer, 0x8D,  2},
209            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[1].SYNCStartValue, 0x0D,  1}};
210 /*0x1802*/ const CO_OD_entryRecord_t OD_record1802[7] = {
211            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[2].maxSubIndex, 0x05,  1},
212            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[2].COB_IDUsedByTPDO, 0x8D,  4},
213            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[2].transmissionType, 0x0D,  1},
214            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[2].inhibitTime, 0x8D,  2},
215            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[2].compatibilityEntry, 0x0D,  1},
216            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[2].eventTimer, 0x8D,  2},
217            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[2].SYNCStartValue, 0x0D,  1}};
218 /*0x1803*/ const CO_OD_entryRecord_t OD_record1803[7] = {
219            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[3].maxSubIndex, 0x05,  1},
220            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[3].COB_IDUsedByTPDO, 0x8D,  4},
221            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[3].transmissionType, 0x0D,  1},
222            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[3].inhibitTime, 0x8D,  2},
223            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[3].compatibilityEntry, 0x0D,  1},
224            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[3].eventTimer, 0x8D,  2},
225            {(void*)&CO_OD_ROM.TPDOCommunicationParameter[3].SYNCStartValue, 0x0D,  1}};
226 /*0x1A00*/ const CO_OD_entryRecord_t OD_record1A00[9] = {
227            {(void*)&CO_OD_ROM.TPDOMappingParameter[0].numberOfMappedObjects, 0x0D,  1},
228            {(void*)&CO_OD_ROM.TPDOMappingParameter[0].mappedObject1, 0x8D,  4},
229            {(void*)&CO_OD_ROM.TPDOMappingParameter[0].mappedObject2, 0x8D,  4},
230            {(void*)&CO_OD_ROM.TPDOMappingParameter[0].mappedObject3, 0x8D,  4},
231            {(void*)&CO_OD_ROM.TPDOMappingParameter[0].mappedObject4, 0x8D,  4},
232            {(void*)&CO_OD_ROM.TPDOMappingParameter[0].mappedObject5, 0x8D,  4},
233            {(void*)&CO_OD_ROM.TPDOMappingParameter[0].mappedObject6, 0x8D,  4},
234            {(void*)&CO_OD_ROM.TPDOMappingParameter[0].mappedObject7, 0x8D,  4},
235            {(void*)&CO_OD_ROM.TPDOMappingParameter[0].mappedObject8, 0x8D,  4}};
236 /*0x1A01*/ const CO_OD_entryRecord_t OD_record1A01[9] = {
237            {(void*)&CO_OD_ROM.TPDOMappingParameter[1].numberOfMappedObjects, 0x0D,  1},
238            {(void*)&CO_OD_ROM.TPDOMappingParameter[1].mappedObject1, 0x8D,  4},
239            {(void*)&CO_OD_ROM.TPDOMappingParameter[1].mappedObject2, 0x8D,  4},
240            {(void*)&CO_OD_ROM.TPDOMappingParameter[1].mappedObject3, 0x8D,  4},
241            {(void*)&CO_OD_ROM.TPDOMappingParameter[1].mappedObject4, 0x8D,  4},
242            {(void*)&CO_OD_ROM.TPDOMappingParameter[1].mappedObject5, 0x8D,  4},
243            {(void*)&CO_OD_ROM.TPDOMappingParameter[1].mappedObject6, 0x8D,  4},
244            {(void*)&CO_OD_ROM.TPDOMappingParameter[1].mappedObject7, 0x8D,  4},
245            {(void*)&CO_OD_ROM.TPDOMappingParameter[1].mappedObject8, 0x8D,  4}};
246 /*0x1A02*/ const CO_OD_entryRecord_t OD_record1A02[9] = {
247            {(void*)&CO_OD_ROM.TPDOMappingParameter[2].numberOfMappedObjects, 0x0D,  1},
248            {(void*)&CO_OD_ROM.TPDOMappingParameter[2].mappedObject1, 0x8D,  4},
249            {(void*)&CO_OD_ROM.TPDOMappingParameter[2].mappedObject2, 0x8D,  4},
250            {(void*)&CO_OD_ROM.TPDOMappingParameter[2].mappedObject3, 0x8D,  4},
251            {(void*)&CO_OD_ROM.TPDOMappingParameter[2].mappedObject4, 0x8D,  4},
252            {(void*)&CO_OD_ROM.TPDOMappingParameter[2].mappedObject5, 0x8D,  4},
253            {(void*)&CO_OD_ROM.TPDOMappingParameter[2].mappedObject6, 0x8D,  4},
254            {(void*)&CO_OD_ROM.TPDOMappingParameter[2].mappedObject7, 0x8D,  4},
255            {(void*)&CO_OD_ROM.TPDOMappingParameter[2].mappedObject8, 0x8D,  4}};
256 /*0x1A03*/ const CO_OD_entryRecord_t OD_record1A03[9] = {
257            {(void*)&CO_OD_ROM.TPDOMappingParameter[3].numberOfMappedObjects, 0x0D,  1},
258            {(void*)&CO_OD_ROM.TPDOMappingParameter[3].mappedObject1, 0x8D,  4},
259            {(void*)&CO_OD_ROM.TPDOMappingParameter[3].mappedObject2, 0x8D,  4},
260            {(void*)&CO_OD_ROM.TPDOMappingParameter[3].mappedObject3, 0x8D,  4},
261            {(void*)&CO_OD_ROM.TPDOMappingParameter[3].mappedObject4, 0x8D,  4},
262            {(void*)&CO_OD_ROM.TPDOMappingParameter[3].mappedObject5, 0x8D,  4},
263            {(void*)&CO_OD_ROM.TPDOMappingParameter[3].mappedObject6, 0x8D,  4},
264            {(void*)&CO_OD_ROM.TPDOMappingParameter[3].mappedObject7, 0x8D,  4},
265            {(void*)&CO_OD_ROM.TPDOMappingParameter[3].mappedObject8, 0x8D,  4}};
266 /*0x2120*/ const CO_OD_entryRecord_t OD_record2120[6] = {
267            {(void*)&CO_OD_RAM.testVar.maxSubIndex, 0x06,  1},
268            {(void*)&CO_OD_RAM.testVar.I64, 0xBE,  8},
269            {(void*)&CO_OD_RAM.testVar.U64, 0xBE,  8},
270            {(void*)&CO_OD_RAM.testVar.R32, 0xBE,  4},
271            {(void*)&CO_OD_RAM.testVar.R64, 0xBE,  8},
272            {0, 0x0E,  0}};
273 /*0x2130*/ const CO_OD_entryRecord_t OD_record2130[4] = {
274            {(void*)&CO_OD_RAM.time.maxSubIndex, 0x06,  1},
275            {(void*)&CO_OD_RAM.time.string[0], 0x06, 30},
276            {(void*)&CO_OD_RAM.time.epochTimeBaseMs, 0x8E,  8},
277            {(void*)&CO_OD_RAM.time.epochTimeOffsetMs, 0xBE,  4}};
278 
279 
280 /*******************************************************************************
281    OBJECT DICTIONARY
282 *******************************************************************************/
283 const CO_OD_entry_t CO_OD[CO_OD_NoOfElements] = {
284 {0x1000, 0x00, 0x85,  4, (void*)&CO_OD_ROM.deviceType},
285 {0x1001, 0x00, 0x36,  1, (void*)&CO_OD_RAM.errorRegister},
286 {0x1002, 0x00, 0xB6,  4, (void*)&CO_OD_RAM.manufacturerStatusRegister},
287 {0x1003, 0x08, 0x8E,  4, (void*)&CO_OD_RAM.preDefinedErrorField[0]},
288 {0x1005, 0x00, 0x8D,  4, (void*)&CO_OD_ROM.COB_ID_SYNCMessage},
289 {0x1006, 0x00, 0x8D,  4, (void*)&CO_OD_ROM.communicationCyclePeriod},
290 {0x1007, 0x00, 0x8D,  4, (void*)&CO_OD_ROM.synchronousWindowLength},
291 {0x1008, 0x00, 0x05, 11, (void*)&CO_OD_ROM.manufacturerDeviceName[0]},
292 {0x1009, 0x00, 0x05,  4, (void*)&CO_OD_ROM.manufacturerHardwareVersion[0]},
293 {0x100A, 0x00, 0x05,  4, (void*)&CO_OD_ROM.manufacturerSoftwareVersion[0]},
294 {0x1010, 0x01, 0x8E,  4, (void*)&CO_OD_RAM.storeParameters[0]},
295 {0x1011, 0x01, 0x8E,  4, (void*)&CO_OD_RAM.restoreDefaultParameters[0]},
296 {0x1012, 0x00, 0x85,  4, (void*)&CO_OD_ROM.COB_ID_TIME},
297 {0x1014, 0x00, 0x85,  4, (void*)&CO_OD_ROM.COB_ID_EMCY},
298 {0x1015, 0x00, 0x8D,  2, (void*)&CO_OD_ROM.inhibitTimeEMCY},
299 {0x1016, 0x04, 0x8D,  4, (void*)&CO_OD_ROM.consumerHeartbeatTime[0]},
300 {0x1017, 0x00, 0x8D,  2, (void*)&CO_OD_ROM.producerHeartbeatTime},
301 {0x1018, 0x04, 0x00,  0, (void*)&OD_record1018},
302 {0x1019, 0x00, 0x0D,  1, (void*)&CO_OD_ROM.synchronousCounterOverflowValue},
303 {0x1029, 0x06, 0x0D,  1, (void*)&CO_OD_ROM.errorBehavior[0]},
304 {0x1200, 0x02, 0x00,  0, (void*)&OD_record1200},
305 {0x1400, 0x02, 0x00,  0, (void*)&OD_record1400},
306 {0x1401, 0x02, 0x00,  0, (void*)&OD_record1401},
307 {0x1402, 0x02, 0x00,  0, (void*)&OD_record1402},
308 {0x1403, 0x02, 0x00,  0, (void*)&OD_record1403},
309 {0x1600, 0x08, 0x00,  0, (void*)&OD_record1600},
310 {0x1601, 0x08, 0x00,  0, (void*)&OD_record1601},
311 {0x1602, 0x08, 0x00,  0, (void*)&OD_record1602},
312 {0x1603, 0x08, 0x00,  0, (void*)&OD_record1603},
313 {0x1800, 0x06, 0x00,  0, (void*)&OD_record1800},
314 {0x1801, 0x06, 0x00,  0, (void*)&OD_record1801},
315 {0x1802, 0x06, 0x00,  0, (void*)&OD_record1802},
316 {0x1803, 0x06, 0x00,  0, (void*)&OD_record1803},
317 {0x1A00, 0x08, 0x00,  0, (void*)&OD_record1A00},
318 {0x1A01, 0x08, 0x00,  0, (void*)&OD_record1A01},
319 {0x1A02, 0x08, 0x00,  0, (void*)&OD_record1A02},
320 {0x1A03, 0x08, 0x00,  0, (void*)&OD_record1A03},
321 {0x1F80, 0x00, 0x8D,  4, (void*)&CO_OD_ROM.NMTStartup},
322 {0x2100, 0x00, 0x36, 10, (void*)&CO_OD_RAM.errorStatusBits[0]},
323 {0x2101, 0x00, 0x0D,  1, (void*)&CO_OD_ROM.CANNodeID},
324 {0x2102, 0x00, 0x8D,  2, (void*)&CO_OD_ROM.CANBitRate},
325 {0x2103, 0x00, 0x8E,  2, (void*)&CO_OD_RAM.SYNCCounter},
326 {0x2104, 0x00, 0x86,  2, (void*)&CO_OD_RAM.SYNCTime},
327 {0x2106, 0x00, 0x87,  4, (void*)&CO_OD_EEPROM.powerOnCounter},
328 {0x2107, 0x05, 0xBE,  2, (void*)&CO_OD_RAM.performance[0]},
329 {0x2108, 0x01, 0xB6,  2, (void*)&CO_OD_RAM.temperature[0]},
330 {0x2109, 0x01, 0xB6,  2, (void*)&CO_OD_RAM.voltage[0]},
331 {0x2110, 0x10, 0xFE,  4, (void*)&CO_OD_RAM.variableInt32[0]},
332 {0x2111, 0x10, 0xFD,  4, (void*)&CO_OD_ROM.variableROMInt32[0]},
333 {0x2112, 0x10, 0xFF,  4, (void*)&CO_OD_EEPROM.variableNVInt32[0]},
334 {0x2120, 0x05, 0x00,  0, (void*)&OD_record2120},
335 {0x2130, 0x03, 0x00,  0, (void*)&OD_record2130},
336 {0x6000, 0x08, 0x76,  1, (void*)&CO_OD_RAM.readInput8Bit[0]},
337 {0x6200, 0x08, 0x3E,  1, (void*)&CO_OD_RAM.writeOutput8Bit[0]},
338 {0x6401, 0x0C, 0xB6,  2, (void*)&CO_OD_RAM.readAnalogueInput16Bit[0]},
339 {0x6411, 0x08, 0xBE,  2, (void*)&CO_OD_RAM.writeAnalogueOutput16Bit[0]},
340 };
341 
342