Coverage Report

Created: 2026-05-14 06:28

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-isobus-vt.c
Line
Count
Source
1
/* packet-isobus-vt.c
2
 * Routines for ISObus VT dissection (Based on CANOpen Dissector)
3
 * Copyright 2016, Jeroen Sack <jeroen@jeroensack.nl>
4
 * ISO 11783-6
5
 *
6
 * Wireshark - Network traffic analyzer
7
 * By Gerald Combs <gerald@wireshark.org>
8
 * Copyright 1998 Gerald Combs
9
 *
10
 * SPDX-License-Identifier: GPL-2.0-or-later
11
 */
12
13
#include "config.h"
14
15
#include <epan/packet.h>
16
#include <epan/prefs.h>
17
#include <wsutil/file_util.h>
18
19
#define MAX_OBJECT_ID_DB_SIZE 10000
20
21
void proto_register_isobus_vt(void);
22
void proto_reg_handoff_isobus_vt(void);
23
24
static uint8_t current_vt_version;
25
26
/* Initialize the protocol and registered fields */
27
static int proto_vt;
28
static int hf_isobus_vt;
29
static int hf_isobus_vt_command;
30
static int hf_isobus_vt_objectid;
31
static int hf_isobus_vt_softkey_keyactcode;
32
static int hf_isobus_vt_softkey_objectid;
33
static int hf_isobus_vt_softkey_parentobjectid;
34
static int hf_isobus_vt_softkey_keynumber;
35
static int hf_isobus_vt_button_keyactcode;
36
static int hf_isobus_vt_button_objectid;
37
static int hf_isobus_vt_button_parentobjectid;
38
static int hf_isobus_vt_button_keynumber;
39
static int hf_isobus_vt_pointing_xposition;
40
static int hf_isobus_vt_pointing_yposition;
41
static int hf_isobus_vt_pointing_touchstate;
42
static int hf_isobus_vt_vtselectinputobject_objectid;
43
static int hf_isobus_vt_vtselectinputobject_selection;
44
static int hf_isobus_vt_vtselectinputobject_openforinput;
45
static int hf_isobus_vt_vtescmessage_objectid;
46
static int hf_isobus_vt_vtescmessage_errorcodes;
47
static int hf_isobus_vt_vtchgnumval_objectid;
48
static int hf_isobus_vt_vtchgnumval_value;
49
static int hf_isobus_vt_vtchgactivemask_maskobjectid;
50
static int hf_isobus_vt_vtchgactivemask_errorcodes;
51
static int hf_isobus_vt_vtchgactivemask_errorobjectid;
52
static int hf_isobus_vt_vtchgactivemask_errorobjectidparent;
53
static int hf_isobus_vt_vtchgstrval_objectid;
54
static int hf_isobus_vt_vtchgstrval_length;
55
static int hf_isobus_vt_vtchgstrval_value;
56
static int hf_isobus_vt_vtonuserlayouthideshow_objectid_1;
57
static int hf_isobus_vt_vtonuserlayouthideshow_status_1;
58
static int hf_isobus_vt_vtonuserlayouthideshow_objectid_2;
59
static int hf_isobus_vt_vtonuserlayouthideshow_status_2;
60
static int hf_isobus_vt_vtcontrolaudiosignaltermination_terminationcause;
61
static int hf_isobus_vt_endofobjectpool_errorcodes;
62
static int hf_isobus_vt_endofobjectpool_faultyobjectid;
63
static int hf_isobus_vt_endofobjectpool_faultyparentobjectid;
64
static int hf_isobus_vt_endofobjectpool_objectpoolerrorcodes;
65
static int hf_isobus_vt_auxiliaryassignmenttype1_sourceaddressauxinputdevice;
66
static int hf_isobus_vt_auxiliaryassignmenttype1_auxinputnumber;
67
static int hf_isobus_vt_auxiliaryassignmenttype1_objectidauxinputdevice;
68
static int hf_isobus_vt_auxiliaryinputtype1status_inputnumber;
69
static int hf_isobus_vt_auxiliaryinputtype1status_analyzevalue;
70
static int hf_isobus_vt_auxiliaryinputtype1status_numberoftransitions;
71
static int hf_isobus_vt_auxiliaryinputtype1status_booleanvalue;
72
static int hf_isobus_vt_preferredassignment_numberofinputunits;
73
static int hf_isobus_vt_preferredassignment_auxinputunit_name;
74
static int hf_isobus_vt_preferredassignment_auxinputunit_modelidentificationcode;
75
static int hf_isobus_vt_preferredassignment_auxinputunit_numberofpreferredfunctions;
76
static int hf_isobus_vt_preferredassignment_auxinputunit_preferredfunctions_auxfunctionobjectid;
77
static int hf_isobus_vt_preferredassignment_auxinputunit_preferredfunctions_auxinputobjectid;
78
static int hf_isobus_vt_preferredassignment_errorcodes;
79
static int hf_isobus_vt_preferredassignment_faultyauxiliaryfunctionobjectid;
80
static int hf_isobus_vt_auxiliaryinputtype2maintenance_modelidentificationcode;
81
static int hf_isobus_vt_auxiliaryinputtype2maintenance_status;
82
static int hf_isobus_vt_auxiliaryassignmenttype2_name;
83
static int hf_isobus_vt_auxiliaryassignmenttype2_flags;
84
static int hf_isobus_vt_auxiliaryassignmenttype2_flags_preferredassignment;
85
static int hf_isobus_vt_auxiliaryassignmenttype2_flags_auxiliaryfunctiontype;
86
static int hf_isobus_vt_auxiliaryassignmenttype2_auxinputobjectid;
87
static int hf_isobus_vt_auxiliaryassignmenttype2_auxfunctionobjectid;
88
static int hf_isobus_vt_auxiliaryassignmenttype2_errorcodes;
89
static int hf_isobus_vt_auxiliaryinputstatustype2enable_auxiliaryinputobjectid;
90
static int hf_isobus_vt_auxiliaryinputstatustype2enable_enable;
91
static int hf_isobus_vt_auxiliaryinputstatustype2enable_status;
92
static int hf_isobus_vt_auxiliaryinputstatustype2enable_errorcodes;
93
static int hf_isobus_vt_auxiliaryinputtype2status_auxiliaryinputobjectid;
94
static int hf_isobus_vt_auxiliaryinputtype2status_value1;
95
static int hf_isobus_vt_auxiliaryinputtype2status_value2;
96
static int hf_isobus_vt_auxiliaryinputtype2status_operatingstate;
97
static int hf_isobus_vt_auxiliaryinputtype2status_operatingstate_learnmodeactive;
98
static int hf_isobus_vt_auxiliaryinputtype2status_operatingstate_inputactivatedinlearnmode;
99
static int hf_isobus_vt_auxiliarycapabilities_requesttype;
100
static int hf_isobus_vt_auxiliarycapabilities_numberofauxiliaryunits;
101
static int hf_isobus_vt_auxiliarycapabilities_auxiliaryunit_name;
102
static int hf_isobus_vt_auxiliarycapabilities_auxiliaryunit_numberofdifferentsets;
103
static int hf_isobus_vt_auxiliarycapabilities_auxiliaryunit_set_numberofinstances;
104
static int hf_isobus_vt_auxiliarycapabilities_auxiliaryunit_set_functionattribute;
105
static int hf_isobus_vt_auxiliarycapabilities_auxiliaryunit_set_assignedattribute;
106
static int hf_isobus_vt_esc_objectid;
107
static int hf_isobus_vt_esc_errorcodes;
108
static int hf_isobus_vt_hideshowobj_objectid;
109
static int hf_isobus_vt_hideshowobj_action;
110
static int hf_isobus_vt_hideshowobj_errorcodes;
111
static int hf_isobus_vt_enabledisableobj_objectid;
112
static int hf_isobus_vt_enabledisableobj_enabledisable;
113
static int hf_isobus_vt_enabledisableobj_errorcodes;
114
static int hf_isobus_vt_selectinputobject_objectid;
115
static int hf_isobus_vt_selectinputobject_option;
116
static int hf_isobus_vt_selectinputobject_response;
117
static int hf_isobus_vt_selectinputobject_errorcodes;
118
static int hf_isobus_vt_controlaudiosignal_activations;
119
static int hf_isobus_vt_controlaudiosignal_frequency;
120
static int hf_isobus_vt_controlaudiosignal_ontime;
121
static int hf_isobus_vt_controlaudiosignal_offtime;
122
static int hf_isobus_vt_controlaudiosignal_errorcodes;
123
static int hf_isobus_vt_setaudiovolume_volume;
124
static int hf_isobus_vt_setaudiovolume_errorcodes;
125
static int hf_isobus_vt_changechildlocation_parentobjectid;
126
static int hf_isobus_vt_changechildlocation_objectid;
127
static int hf_isobus_vt_changechildlocation_relativexpos;
128
static int hf_isobus_vt_changechildlocation_relativeypos;
129
static int hf_isobus_vt_changechildlocation_errorcodes;
130
static int hf_isobus_vt_changesize_objectid;
131
static int hf_isobus_vt_changesize_newwidth;
132
static int hf_isobus_vt_changesize_newheight;
133
static int hf_isobus_vt_changesize_errorcodes;
134
static int hf_isobus_vt_changebackgroundcolour_objectid;
135
static int hf_isobus_vt_changebackgroundcolour_colour;
136
static int hf_isobus_vt_changebackgroundcolour_errorcodes;
137
static int hf_isobus_vt_chgnumval_objectid;
138
static int hf_isobus_vt_chgnumval_errorcodes;
139
static int hf_isobus_vt_chgnumval_value;
140
static int hf_isobus_vt_changeendpoint_objectid;
141
static int hf_isobus_vt_changeendpoint_width;
142
static int hf_isobus_vt_changeendpoint_height;
143
static int hf_isobus_vt_changeendpoint_linedirection;
144
static int hf_isobus_vt_changefontattributes_objectid;
145
static int hf_isobus_vt_changefontattributes_fontcolour;
146
static int hf_isobus_vt_changefontattributes_fontsize;
147
static int hf_isobus_vt_changefontattributes_fonttype;
148
static int hf_isobus_vt_changefontattributes_fontstyle;
149
static int hf_isobus_vt_changefontattributes_errorcodes;
150
static int hf_isobus_vt_changelineattributes_objectid;
151
static int hf_isobus_vt_changelineattributes_linecolour;
152
static int hf_isobus_vt_changelineattributes_linewidth;
153
static int hf_isobus_vt_changelineattributes_lineart;
154
static int hf_isobus_vt_changelineattributes_errorcodes;
155
static int hf_isobus_vt_changefillattributes_objectid;
156
static int hf_isobus_vt_changefillattributes_filltype;
157
static int hf_isobus_vt_changefillattributes_fillcolour;
158
static int hf_isobus_vt_changefillattributes_fillpatternobjectid;
159
static int hf_isobus_vt_changefillattributes_errorcodes;
160
static int hf_isobus_vt_changeactivemask_workingset;
161
static int hf_isobus_vt_changeactivemask_newactivemask;
162
static int hf_isobus_vt_changeactivemask_errorcodes;
163
static int hf_isobus_vt_changesoftkeymask_masktype;
164
static int hf_isobus_vt_changesoftkeymask_datamaskobjectid;
165
static int hf_isobus_vt_changesoftkeymask_newsoftkeymaskobjectid;
166
static int hf_isobus_vt_changesoftkeymask_errorcodes;
167
static int hf_isobus_vt_changeattributes_objectid;
168
static int hf_isobus_vt_changeattributes_attributeid;
169
static int hf_isobus_vt_changeattributes_newvalue;
170
static int hf_isobus_vt_changeattributes_errorcodes;
171
static int hf_isobus_vt_changepriority_objectid;
172
static int hf_isobus_vt_changepriority_newpriority;
173
static int hf_isobus_vt_changepriority_errorcodes;
174
static int hf_isobus_vt_changelistitem_listobjectid;
175
static int hf_isobus_vt_changelistitem_listindex;
176
static int hf_isobus_vt_changelistitem_newobjectid;
177
static int hf_isobus_vt_changelistitem_errorcodes;
178
static int hf_isobus_vt_deleteobjectpool_errorcodes;
179
static int hf_isobus_vt_chgstrval_objectid;
180
static int hf_isobus_vt_chgstrval_length;
181
static int hf_isobus_vt_chgstrval_errorcodes;
182
static int hf_isobus_vt_chgstrval_value;
183
static int hf_isobus_vt_changechildposition_parentobjectid;
184
static int hf_isobus_vt_changechildposition_objectid;
185
static int hf_isobus_vt_changechildposition_xpos;
186
static int hf_isobus_vt_changechildposition_ypos;
187
static int hf_isobus_vt_changechildposition_errorcodes;
188
static int hf_isobus_vt_changeobjectlabel_objectid;
189
static int hf_isobus_vt_changeobjectlabel_stringobjectid;
190
static int hf_isobus_vt_changeobjectlabel_fonttype;
191
static int hf_isobus_vt_changeobjectlabel_graphicobjectid;
192
static int hf_isobus_vt_changeobjectlabel_errorcodes;
193
static int hf_isobus_vt_changepolygonpoint_objectid;
194
static int hf_isobus_vt_changepolygonpoint_pointindex;
195
static int hf_isobus_vt_changepolygonpoint_xvalue;
196
static int hf_isobus_vt_changepolygonpoint_yvalue;
197
static int hf_isobus_vt_changepolygonpoint_errorcodes;
198
static int hf_isobus_vt_changepolygonscale_objectid;
199
static int hf_isobus_vt_changepolygonscale_newwidth;
200
static int hf_isobus_vt_changepolygonscale_newheight;
201
static int hf_isobus_vt_changepolygonscale_errorcodes;
202
static int hf_isobus_vt_graphicscontext_objectid;
203
static int hf_isobus_vt_graphicscontext_subcommandid;
204
static int hf_isobus_vt_graphicscontext_setgraphicscursor_xposition;
205
static int hf_isobus_vt_graphicscontext_setgraphicscursor_yposition;
206
static int hf_isobus_vt_graphicscontext_movegraphicscursor_xoffset;
207
static int hf_isobus_vt_graphicscontext_movegraphicscursor_yoffset;
208
static int hf_isobus_vt_graphicscontext_setforegroundcolour_colour;
209
static int hf_isobus_vt_graphicscontext_setbackgroundcolour_colour;
210
static int hf_isobus_vt_graphicscontext_setlineattributesobjectid_objectid;
211
static int hf_isobus_vt_graphicscontext_setfillattributesobjectid_objectid;
212
static int hf_isobus_vt_graphicscontext_setfontattributesobjectid_objectid;
213
static int hf_isobus_vt_graphicscontext_eraserectangle_width;
214
static int hf_isobus_vt_graphicscontext_eraserectangle_height;
215
static int hf_isobus_vt_graphicscontext_drawpoint_xoffset;
216
static int hf_isobus_vt_graphicscontext_drawpoint_yoffset;
217
static int hf_isobus_vt_graphicscontext_drawline_xoffset;
218
static int hf_isobus_vt_graphicscontext_drawline_yoffset;
219
static int hf_isobus_vt_graphicscontext_drawrectangle_width;
220
static int hf_isobus_vt_graphicscontext_drawrectangle_height;
221
static int hf_isobus_vt_graphicscontext_drawclosedellipse_width;
222
static int hf_isobus_vt_graphicscontext_drawclosedellipse_height;
223
static int hf_isobus_vt_graphicscontext_drawpolygon_numberofpoints;
224
static int hf_isobus_vt_graphicscontext_drawpolygon_point_xoffset;
225
static int hf_isobus_vt_graphicscontext_drawpolygon_point_yoffset;
226
static int hf_isobus_vt_graphicscontext_drawtext_background;
227
static int hf_isobus_vt_graphicscontext_drawtext_numberofbytes;
228
static int hf_isobus_vt_graphicscontext_drawtext_textstring;
229
static int hf_isobus_vt_graphicscontext_panviewport_viewportx;
230
static int hf_isobus_vt_graphicscontext_panviewport_viewporty;
231
static int hf_isobus_vt_graphicscontext_zoomviewport_zoomvalue;
232
static int hf_isobus_vt_graphicscontext_panandzoomviewport_viewportx;
233
static int hf_isobus_vt_graphicscontext_panandzoomviewport_viewporty;
234
static int hf_isobus_vt_graphicscontext_panandzoomviewport_zoomvalue;
235
static int hf_isobus_vt_graphicscontext_changeviewportsize_newwidth;
236
static int hf_isobus_vt_graphicscontext_changeviewportsize_newheight;
237
static int hf_isobus_vt_graphicscontext_drawvtobject_objectid;
238
static int hf_isobus_vt_graphicscontext_copycanvastopicturegraphic_objectidpicturegraphic;
239
static int hf_isobus_vt_graphicscontext_copyviewporttopicturegraphic_objectidpicturegraphic;
240
static int hf_isobus_vt_getattributevalue_objectid;
241
static int hf_isobus_vt_getattributevalue_attributeid;
242
static int hf_isobus_vt_getattributevalue_value;
243
static int hf_isobus_vt_getattributevalue_errorcodes;
244
static int hf_isobus_vt_selectcolourmap_objectid;
245
static int hf_isobus_vt_selectcolourmap_errorcodes;
246
static int hf_isobus_vt_executeextendedmacro_objectid;
247
static int hf_isobus_vt_executeextendedmacro_errorcodes;
248
static int hf_isobus_vt_lockunlockmask_command;
249
static int hf_isobus_vt_lockunlockmask_objectid;
250
static int hf_isobus_vt_lockunlockmask_locktimeout;
251
static int hf_isobus_vt_lockunlockmask_errorcodes;
252
static int hf_isobus_vt_executemacro_objectid;
253
static int hf_isobus_vt_executemacro_errorcodes;
254
static int hf_isobus_vt_getmemory_memoryrequired;
255
static int hf_isobus_vt_getmemory_vtversion;
256
static int hf_isobus_vt_getmemory_status;
257
static int hf_isobus_vt_getsupportedwidechars_codeplane;
258
static int hf_isobus_vt_getsupportedwidechars_firstwidechar;
259
static int hf_isobus_vt_getsupportedwidechars_lastwidechar;
260
static int hf_isobus_vt_getsupportedwidechars_errorcodes;
261
static int hf_isobus_vt_getsupportedwidechars_numberofranges;
262
static int hf_isobus_vt_getsupportedwidechars_firstavailablewidechar;
263
static int hf_isobus_vt_getsupportedwidechars_lastavailablewidechar;
264
static int hf_isobus_vt_getnumberofsoftkeys_navigationsoftkeys;
265
static int hf_isobus_vt_getnumberofsoftkeys_xdots;
266
static int hf_isobus_vt_getnumberofsoftkeys_ydots;
267
static int hf_isobus_vt_getnumberofsoftkeys_virtualsoftkeys;
268
static int hf_isobus_vt_getnumberofsoftkeys_physicalsoftkeys;
269
static int hf_isobus_vt_gettextfontdata_smallfontsizes;
270
static int hf_isobus_vt_gettextfontdata_smallfontsizes_font8x8;
271
static int hf_isobus_vt_gettextfontdata_smallfontsizes_font8x12;
272
static int hf_isobus_vt_gettextfontdata_smallfontsizes_font12x16;
273
static int hf_isobus_vt_gettextfontdata_smallfontsizes_font16x16;
274
static int hf_isobus_vt_gettextfontdata_smallfontsizes_font16x24;
275
static int hf_isobus_vt_gettextfontdata_smallfontsizes_font24x32;
276
static int hf_isobus_vt_gettextfontdata_smallfontsizes_font32x32;
277
static int hf_isobus_vt_gettextfontdata_largefontsizes;
278
static int hf_isobus_vt_gettextfontdata_largefontsizes_font32x48;
279
static int hf_isobus_vt_gettextfontdata_largefontsizes_font48x64;
280
static int hf_isobus_vt_gettextfontdata_largefontsizes_font64x64;
281
static int hf_isobus_vt_gettextfontdata_largefontsizes_font64x96;
282
static int hf_isobus_vt_gettextfontdata_largefontsizes_font96x128;
283
static int hf_isobus_vt_gettextfontdata_largefontsizes_font128x128;
284
static int hf_isobus_vt_gettextfontdata_largefontsizes_font128x192;
285
static int hf_isobus_vt_gettextfontdata_typeattributes;
286
static int hf_isobus_vt_gettextfontdata_typeattributes_boldtext;
287
static int hf_isobus_vt_gettextfontdata_typeattributes_crossedouttext;
288
static int hf_isobus_vt_gettextfontdata_typeattributes_underlinedtext;
289
static int hf_isobus_vt_gettextfontdata_typeattributes_italicstext;
290
static int hf_isobus_vt_gettextfontdata_typeattributes_invertedtext;
291
static int hf_isobus_vt_gettextfontdata_typeattributes_flashinverted;
292
static int hf_isobus_vt_gettextfontdata_typeattributes_flashhidden;
293
static int hf_isobus_vt_gettextfontdata_typeattributes_proportionalfontrendering;
294
static int hf_isobus_vt_getwindowmaskdata_backgroundcolourdatamask;
295
static int hf_isobus_vt_getwindowmaskdata_backgroundcoloursoftkeymask;
296
static int hf_isobus_vt_getsupportedobjects_numberofbytes;
297
static int hf_isobus_vt_getsupportedobjects_objecttype;
298
static int hf_isobus_vt_gethardware_boottime;
299
static int hf_isobus_vt_gethardware_graphictype;
300
static int hf_isobus_vt_gethardware_hardware;
301
static int hf_isobus_vt_gethardware_hardware_touchscreen;
302
static int hf_isobus_vt_gethardware_hardware_pointingdevice;
303
static int hf_isobus_vt_gethardware_hardware_multifreqaudiooutput;
304
static int hf_isobus_vt_gethardware_hardware_adjustvolumeaudiooutput;
305
static int hf_isobus_vt_gethardware_hardware_simultaneousactivationphysicalsoftkeys;
306
static int hf_isobus_vt_gethardware_hardware_simultaneousactivationbuttons;
307
static int hf_isobus_vt_gethardware_hardware_dragoperation;
308
static int hf_isobus_vt_gethardware_hardware_intermediatecoordinatesdrag;
309
static int hf_isobus_vt_gethardware_xpixels;
310
static int hf_isobus_vt_gethardware_ypixels;
311
static int hf_isobus_vt_storeversion_versionlabel;
312
static int hf_isobus_vt_storeversion_errorcodes;
313
static int hf_isobus_vt_loadversion_versionlabel;
314
static int hf_isobus_vt_loadversion_errorcodes;
315
static int hf_isobus_vt_deleteversion_versionlabel;
316
static int hf_isobus_vt_deleteversion_errorcodes;
317
static int hf_isobus_vt_extendedgetversions_numberofversions;
318
static int hf_isobus_vt_extendedgetversions_versionlabel;
319
static int hf_isobus_vt_extendedstoreversion_versionlabel;
320
static int hf_isobus_vt_extendedstoreversion_errorcodes;
321
static int hf_isobus_vt_extendedloadversion_versionlabel;
322
static int hf_isobus_vt_extendedloadversion_errorcodes;
323
static int hf_isobus_vt_extendeddeleteversion_versionlabel;
324
static int hf_isobus_vt_extendeddeleteversion_errorcodes;
325
static int hf_isobus_vt_getversions_numberofversions;
326
static int hf_isobus_vt_getversions_versionlabel;
327
static int hf_isobus_vt_unsupportedvtfunction_unsupportedvtfunction;
328
static int hf_isobus_vt_vtstatus_workingsetmaster;
329
static int hf_isobus_vt_vtstatus_objectiddatamask;
330
static int hf_isobus_vt_vtstatus_objectidsoftkeymask;
331
static int hf_isobus_vt_vtstatus_vtbusycodes;
332
static int hf_isobus_vt_vtstatus_vtbusycodes_updatingvisiblemask;
333
static int hf_isobus_vt_vtstatus_vtbusycodes_savingdata;
334
static int hf_isobus_vt_vtstatus_vtbusycodes_executingcommand;
335
static int hf_isobus_vt_vtstatus_vtbusycodes_executingmacro;
336
static int hf_isobus_vt_vtstatus_vtbusycodes_parsingobjectpool;
337
static int hf_isobus_vt_vtstatus_vtbusycodes_auxcontrolsactive;
338
static int hf_isobus_vt_vtstatus_vtbusycodes_outofmemory;
339
static int hf_isobus_vt_vtstatus_vtfunctioncodes;
340
static int hf_isobus_vt_wrksetmain_bitmask;
341
static int hf_isobus_vt_wrksetmain_version;
342
static int hf_isobus_vt_screencapture_item;
343
static int hf_isobus_vt_screencapture_path;
344
static int hf_isobus_vt_screencapture_response_errorcodes;
345
static int hf_isobus_vt_screencapture_response_errorcodes_flags;
346
static int hf_isobus_vt_screen_capture_response_error_not_enabled;
347
static int hf_isobus_vt_screen_capture_response_error_vt_transfer_is_busy;
348
static int hf_isobus_vt_screen_capture_response_error_item_unsupported;
349
static int hf_isobus_vt_screen_capture_response_error_path_unsupported;
350
static int hf_isobus_vt_screen_capture_response_error_removable_media_is_full_or_unavailable;
351
static int hf_isobus_vt_screen_capture_response_error_other;
352
static int hf_isobus_vt_screencapture_response_imageid;
353
354
355
0
#define VT_SOFT_KEY_ACTIVATION                  0
356
0
#define VT_BUTTON_ACTIVATION                    1
357
0
#define VT_POINTING_EVENT                       2
358
0
#define VT_VT_SELECT_INPUT_OBJECT               3
359
0
#define VT_VT_ESC_MESSAGE                       4
360
0
#define VT_VT_CHANGE_NUMERIC_VALUE              5
361
0
#define VT_VT_CHANGE_ACTIVE_MASK                6
362
#define VT_VT_CHANGE_SOFT_KEY_MASK              7
363
0
#define VT_VT_CHANGE_STRING_VALUE               8
364
0
#define VT_VT_ON_USER_LAYOUT_HIDE_SHOW          9
365
0
#define VT_VT_CONTROL_AUDIO_SIGNAL_TERMINATION  10
366
#define VT_OBJECT_POOL_TRANSFER                 17
367
0
#define VT_END_OF_OBJECT_POOL                   18
368
0
#define VT_AUXILIARY_ASSIGNMENT_TYPE_1          32
369
0
#define VT_AUXILIARY_INPUT_TYPE_1_STATUS        33
370
0
#define VT_PREFERRED_ASSIGNMENT                 34
371
0
#define VT_AUXILIARY_INPUT_TYPE_2_MAINTENANCE   35
372
0
#define VT_AUXILIARY_ASSIGNMENT_TYPE_2          36
373
0
#define VT_AUXILIARY_INPUT_STATUS_TYPE_2_ENABLE 37
374
0
#define VT_AUXILIARY_INPUT_TYPE_2_STATUS        38
375
0
#define VT_AUXILIARY_CAPABILITIES               39
376
0
#define VT_ESC                                  146
377
0
#define VT_HIDE_SHOW_OBJECT                     160
378
0
#define VT_ENABLE_DISABLE_COMMAND               161
379
0
#define VT_SELECT_INPUT_OBJECT                  162
380
0
#define VT_CONTROL_AUDIO_SIGNAL                 163
381
0
#define VT_SET_AUDIO_VOLUME                     164
382
0
#define VT_CHANGE_CHILD_LOCATION                165
383
0
#define VT_CHANGE_SIZE                          166
384
0
#define VT_CHANGE_BACKGROUND_COLOUR             167
385
0
#define VT_CHANGE_NUMERIC_VALUE                 168
386
0
#define VT_CHANGE_END_POINT                     169
387
0
#define VT_CHANGE_FONT_ATTRIBUTES               170
388
0
#define VT_CHANGE_LINE_ATTRIBUTES               171
389
0
#define VT_CHANGE_FILL_ATTRIBUTES               172
390
0
#define VT_CHANGE_ACTIVE_MASK                   173
391
0
#define VT_CHANGE_SOFT_KEY_MASK                 174
392
0
#define VT_CHANGE_ATTRIBUTES                    175
393
0
#define VT_CHANGE_PRIORITY                      176
394
0
#define VT_CHANGE_LIST_ITEM                     177
395
0
#define VT_DELETE_OBJECT_POOL                   178
396
0
#define VT_CHANGE_STRING_VALUE                  179
397
0
#define VT_CHANGE_CHILD_POSITION                180
398
0
#define VT_CHANGE_OBJECT_LABEL                  181
399
0
#define VT_CHANGE_POLYGON_POINT                 182
400
0
#define VT_CHANGE_POLYGON_SCALE                 183
401
0
#define VT_GRAPHICS_CONTEXT                     184
402
0
#define VT_GET_ATTRIBUTE_VALUE                  185
403
0
#define VT_SELECT_COLOUR_MAP                    186
404
0
#define VT_IDENTIFY_VT                          187
405
0
#define VT_EXECUTE_EXTENDED_MACRO               188
406
0
#define VT_LOCK_UNLOCK_MASK                     189
407
0
#define VT_EXECUTE_MACRO                        190
408
0
#define VT_GET_MEMORY                           192
409
0
#define VT_GET_SUPPORTED_WIDECHARS              193
410
0
#define VT_GET_NUMBER_OF_SOFT_KEYS              194
411
0
#define VT_GET_TEXT_FONT_DATA                   195
412
0
#define VT_GET_WINDOW_MASK_DATA                 196
413
0
#define VT_GET_SUPPORTED_OBJECTS                197
414
0
#define VT_SCREEN_CAPTURE                       198
415
0
#define VT_GET_HARDWARE                         199
416
0
#define VT_STORE_VERSION                        208
417
0
#define VT_LOAD_VERSION                         209
418
0
#define VT_DELETE_VERSION                       210
419
0
#define VT_EXTENDED_GET_VERSIONS                211
420
0
#define VT_EXTENDED_STORE_VERSION               212
421
0
#define VT_EXTENDED_LOAD_VERSION                213
422
0
#define VT_EXTENDED_DELETE_VERSION              214
423
0
#define VT_GET_VERSIONS_MESSAGE                 223
424
0
#define VT_GET_VERSIONS_RESPONSE                224
425
0
#define VT_UNSUPPORTED_VT_FUNCTION              253
426
0
#define VT_VT_STATUS                            254
427
0
#define VT_WORKING_SET_MAINTENANCE              255
428
429
static const value_string vt_function_code[] = {
430
    { VT_SOFT_KEY_ACTIVATION                 , "Soft Key Activation" },
431
    { VT_BUTTON_ACTIVATION                   , "Button Activation" },
432
    { VT_POINTING_EVENT                      , "Pointing Event" },
433
    { VT_VT_SELECT_INPUT_OBJECT              , "VT Select Input Object" },
434
    { VT_VT_ESC_MESSAGE                      , "VT ESC message" },
435
    { VT_VT_CHANGE_NUMERIC_VALUE             , "VT Change Numeric Value" },
436
    { VT_VT_CHANGE_ACTIVE_MASK               , "VT Change Active Mask" },
437
    { VT_VT_CHANGE_SOFT_KEY_MASK             , "VT Change Soft Key Mask" },
438
    { VT_VT_CHANGE_STRING_VALUE              , "VT Change String Value" },
439
    { VT_VT_ON_USER_LAYOUT_HIDE_SHOW         , "VT On User-Layout Hide/Show" },
440
    { VT_VT_CONTROL_AUDIO_SIGNAL_TERMINATION , "VT Control Audio Signal Termination" },
441
    { VT_OBJECT_POOL_TRANSFER                , "Object pool transfer" },
442
    { VT_END_OF_OBJECT_POOL                  , "End of Object Pool" },
443
    { VT_AUXILIARY_ASSIGNMENT_TYPE_1         , "Auxiliary Assignment Type 1" },
444
    { VT_AUXILIARY_INPUT_TYPE_1_STATUS       , "Auxiliary Input Type 1" },
445
    { VT_PREFERRED_ASSIGNMENT                , "Preferred Assignment" },
446
    { VT_AUXILIARY_INPUT_TYPE_2_MAINTENANCE  , "Auxiliary Input Type 2 Maintenance" },
447
    { VT_AUXILIARY_ASSIGNMENT_TYPE_2         , "Auxiliary Assignment Type 2" },
448
    { VT_AUXILIARY_INPUT_STATUS_TYPE_2_ENABLE, "Auxiliary Input Status Type 2 Enable" },
449
    { VT_AUXILIARY_INPUT_TYPE_2_STATUS       , "Auxiliary Input Type 2 Status" },
450
    { VT_AUXILIARY_CAPABILITIES              , "Auxiliary Capabilities" },
451
    { VT_ESC                                 , "ESC" },
452
    { VT_HIDE_SHOW_OBJECT                    , "Hide/Show Object" },
453
    { VT_ENABLE_DISABLE_COMMAND              , "Enable/Disable Object" },
454
    { VT_SELECT_INPUT_OBJECT                 , "Select Input Object" },
455
    { VT_CONTROL_AUDIO_SIGNAL                , "Control Audio Signal" },
456
    { VT_SET_AUDIO_VOLUME                    , "Set Audio Volume" },
457
    { VT_CHANGE_CHILD_LOCATION               , "Change Child Location" },
458
    { VT_CHANGE_SIZE                         , "Change Size" },
459
    { VT_CHANGE_BACKGROUND_COLOUR            , "Change Background Colour" },
460
    { VT_CHANGE_NUMERIC_VALUE                , "Change Numeric Value" },
461
    { VT_CHANGE_END_POINT                    , "Change End Point" },
462
    { VT_CHANGE_FONT_ATTRIBUTES              , "Change Font Attributes" },
463
    { VT_CHANGE_LINE_ATTRIBUTES              , "Change Line Attributes" },
464
    { VT_CHANGE_FILL_ATTRIBUTES              , "Change Fill Attributes" },
465
    { VT_CHANGE_ACTIVE_MASK                  , "Change Active Mask" },
466
    { VT_CHANGE_SOFT_KEY_MASK                , "Change Soft Key Mask" },
467
    { VT_CHANGE_ATTRIBUTES                   , "Change Attribute" },
468
    { VT_CHANGE_PRIORITY                     , "Change Priority" },
469
    { VT_CHANGE_LIST_ITEM                    , "Change List Item" },
470
    { VT_DELETE_OBJECT_POOL                  , "Delete Object Pool" },
471
    { VT_CHANGE_STRING_VALUE                 , "Change String Value" },
472
    { VT_CHANGE_CHILD_POSITION               , "Change Child Position" },
473
    { VT_CHANGE_OBJECT_LABEL                 , "Change Object Label" },
474
    { VT_CHANGE_POLYGON_POINT                , "Change Polygon Point" },
475
    { VT_CHANGE_POLYGON_SCALE                , "Change Polygon Scale" },
476
    { VT_GRAPHICS_CONTEXT                    , "Graphics Context" },
477
    { VT_GET_ATTRIBUTE_VALUE                 , "Get Attribute Value" },
478
    { VT_SELECT_COLOUR_MAP                   , "Select Colour Map" },
479
    { VT_IDENTIFY_VT                         , "Identify VT" },
480
    { VT_EXECUTE_EXTENDED_MACRO              , "Execute Extended Macro" },
481
    { VT_LOCK_UNLOCK_MASK                    , "Lock/Unlock Mask" },
482
    { VT_EXECUTE_MACRO                       , "Execute Macro" },
483
    { VT_GET_MEMORY                          , "Get Memory" },
484
    { VT_GET_SUPPORTED_WIDECHARS             , "Get Supported Widechars" },
485
    { VT_GET_NUMBER_OF_SOFT_KEYS             , "Get Number of Soft Keys" },
486
    { VT_GET_TEXT_FONT_DATA                  , "Get Text Font Data" },
487
    { VT_GET_WINDOW_MASK_DATA                , "Get Window Mask Data" },
488
    { VT_GET_SUPPORTED_OBJECTS               , "Get Supported Objects" },
489
    { VT_SCREEN_CAPTURE                      , "Screen capture" },
490
    { VT_GET_HARDWARE                        , "Get Hardware" },
491
    { VT_STORE_VERSION                       , "Store Version" },
492
    { VT_LOAD_VERSION                        , "Load Version" },
493
    { VT_DELETE_VERSION                      , "Delete Version" },
494
    { VT_EXTENDED_GET_VERSIONS               , "Extended Get Versions" },
495
    { VT_EXTENDED_STORE_VERSION              , "Extended Store Version" },
496
    { VT_EXTENDED_LOAD_VERSION               , "Extended Load Version" },
497
    { VT_EXTENDED_DELETE_VERSION             , "Extended Delete Version" },
498
    { VT_GET_VERSIONS_MESSAGE                , "Get Versions message" },
499
    { VT_GET_VERSIONS_RESPONSE               , "Get Versions response" },
500
    { VT_UNSUPPORTED_VT_FUNCTION             , "Unsupported VT Function" },
501
    { VT_VT_STATUS                           , "VT Status" },
502
    { VT_WORKING_SET_MAINTENANCE             , "Working Set Maintenance" },
503
    { 0, NULL }
504
};
505
static value_string_ext vt_function_code_ext = VALUE_STRING_EXT_INIT(vt_function_code);
506
507
0
#define SET_GRAPHICS_CURSOR              0
508
0
#define MOVE_GRAPHICS_CURSOR             1
509
0
#define SET_FOREGROUND_COLOUR            2
510
0
#define SET_BACKGROUND_COLOUR            3
511
0
#define SET_LINE_ATTRIBUTES_OBJECT_ID    4
512
0
#define SET_FILL_ATTRIBUTES_OBJECT_ID    5
513
0
#define SET_FONT_ATTRIBUTES_OBJECT_ID    6
514
0
#define ERASE_RECTANGLE                  7
515
0
#define DRAW_POINT                       8
516
0
#define DRAW_LINE                        9
517
0
#define DRAW_RECTANGLE                   10
518
0
#define DRAW_CLOSED_ELLIPSE              11
519
0
#define DRAW_POLYGON                     12
520
0
#define DRAW_TEXT                        13
521
0
#define PAN_VIEWPORT                     14
522
0
#define ZOOM_VIEWPORT                    15
523
0
#define PAN_AND_ZOOM_VIEWPORT            16
524
0
#define CHANGE_VIEWPORT_SIZE             17
525
0
#define DRAW_VT_OBJECT                   18
526
0
#define COPY_CANVAS_TO_PICTURE_GRAPHIC   19
527
0
#define COPY_VIEWPORT_TO_PICTURE_GRAPHIC 20
528
529
static const value_string graphics_context_sub_command_id[] = {
530
    { SET_GRAPHICS_CURSOR              , "Set Graphics Cursor" },
531
    { MOVE_GRAPHICS_CURSOR             , "Move Graphics Cursor" },
532
    { SET_FOREGROUND_COLOUR            , "Set Foreground Colour" },
533
    { SET_BACKGROUND_COLOUR            , "Set Background Colour" },
534
    { SET_LINE_ATTRIBUTES_OBJECT_ID    , "Set Line Attributes Object ID" },
535
    { SET_FILL_ATTRIBUTES_OBJECT_ID    , "Set Fill Attributes Object ID" },
536
    { SET_FONT_ATTRIBUTES_OBJECT_ID    , "Set Font Attributes Object ID" },
537
    { ERASE_RECTANGLE                  , "Erase Rectangle" },
538
    { DRAW_POINT                       , "Draw Point" },
539
    { DRAW_LINE                        , "Draw Line" },
540
    { DRAW_RECTANGLE                   , "Draw Rectangle" },
541
    { DRAW_CLOSED_ELLIPSE              , "Draw Closed Ellipse" },
542
    { DRAW_POLYGON                     , "Draw Polygon" },
543
    { DRAW_TEXT                        , "Draw Text" },
544
    { PAN_VIEWPORT                     , "Pan Viewport" },
545
    { ZOOM_VIEWPORT                    , "Zoom Viewport" },
546
    { PAN_AND_ZOOM_VIEWPORT            , "Pan and Zoom Viewport" },
547
    { CHANGE_VIEWPORT_SIZE             , "Change Viewport Size" },
548
    { DRAW_VT_OBJECT                   , "Draw VT Object" },
549
    { COPY_CANVAS_TO_PICTURE_GRAPHIC   , "Copy Canvas to Picture Graphic" },
550
    { COPY_VIEWPORT_TO_PICTURE_GRAPHIC , "Copy Viewport to Picture Graphic" },
551
    { 0, NULL }
552
};
553
static value_string_ext graphics_context_sub_command_id_ext = VALUE_STRING_EXT_INIT(graphics_context_sub_command_id);
554
555
static const value_string vt_hide_show_action[] = {
556
    { 0, "Hide" },
557
    { 1, "Show" },
558
    { 0, NULL }
559
};
560
561
static const value_string vt_hide_show_action_info[] = {
562
    { 0, "hidden" },
563
    { 1, "shown" },
564
    { 0, NULL }
565
};
566
567
static const value_string vt_enable_disable_action[] = {
568
    { 0, "Disable" },
569
    { 1, "Enable" },
570
    { 0, NULL }
571
};
572
573
static const range_string vt_colours[] = {
574
    { 0  , 0  , "Black" },
575
    { 1  , 1  , "White" },
576
    { 2  , 2  , "Green" },
577
    { 3  , 3  , "Teal" },
578
    { 4  , 4  , "Maroon" },
579
    { 5  , 5  , "Purple" },
580
    { 6  , 6  , "Olive" },
581
    { 7  , 7  , "Silver" },
582
    { 8  , 8  , "Grey" },
583
    { 9  , 9  , "Blue" },
584
    { 10 , 10 , "Lime" },
585
    { 11 , 11 , "Cyan" },
586
    { 12 , 12 , "Red" },
587
    { 13 , 13 , "Magenta" },
588
    { 14 , 14 , "Yellow" },
589
    { 15 , 15 , "Navy" },
590
    { 16 , 231, "Colour code defined" },
591
    { 232, 255, "Proprietary" },
592
    { 0  , 0  , NULL }
593
};
594
595
#define KEY_RELEASED 0
596
#define KEY_PRESSED 1
597
#define KEY_STILL_PRESSED 2
598
#define KEY_PRESS_ABORTED 3
599
600
static const value_string key_activation_codes[] = {
601
    { KEY_RELEASED, "Key has been released (state change)" },
602
    { KEY_PRESSED, "Key has been pressed (state change)" },
603
    { KEY_STILL_PRESSED, "Key is still pressed" },
604
    { KEY_PRESS_ABORTED, "Key press aborted" },
605
    { 0, NULL }
606
};
607
608
static const value_string key_activation_codes_info_postfix[] = {
609
    { KEY_RELEASED, "has been released" },
610
    { KEY_PRESSED, "has been pressed" },
611
    { KEY_STILL_PRESSED, "is still held" },
612
    { KEY_PRESS_ABORTED, "press aborted" },
613
    { 0, NULL }
614
};
615
616
#define BUTTON_RELEASED 0
617
#define BUTTON_PRESSED 1
618
#define BUTTON_STILL_HELD 2
619
#define BUTTON_PRESS_ABORTED 3
620
621
static const value_string button_activation_codes[] = {
622
    { BUTTON_RELEASED, "Button has been unlatched or released (state change)" },
623
    { BUTTON_PRESSED, "Button has been \"pressed\" or latched (state change)" },
624
    { BUTTON_STILL_HELD, "Button is still held (latchable buttons do not repeat)" },
625
    { BUTTON_PRESS_ABORTED, "Button press aborted" },
626
    { 0, NULL }
627
};
628
629
#define TOUCH_RELEASED 0
630
#define TOUCH_PRESSED 1
631
#define TOUCH_HELD 2
632
633
static const value_string pointing_touch_state[] = {
634
    { TOUCH_RELEASED, "Released" },
635
    { TOUCH_PRESSED, "Pressed" },
636
    { TOUCH_HELD, "Held" },
637
    { 0, NULL }
638
};
639
640
static const value_string pointing_touch_state_info_postfix[] = {
641
    { TOUCH_RELEASED, "has been released" },
642
    { TOUCH_PRESSED, "has been pressed" },
643
    { TOUCH_HELD, "is still held" },
644
    { 0, NULL }
645
};
646
647
static const value_string selection[] = {
648
    { 0, "Object is deselected" },
649
    { 1, "Object is selected (has focus)" },
650
    { 0, NULL }
651
};
652
653
static const range_string vt_versions[] = {
654
    { 0, 2, "Reserved" },
655
    { 3, 3, "Compliant with VT Version 3" },
656
    { 4, 4, "Compliant with VT Version 4" },
657
    { 5, 5, "Compliant with VT Version 5" },
658
    { 6, 254, "Reserved" },
659
    { 255, 255, "Compliant with VT Version 2" },
660
    { 0, 0, NULL }
661
};
662
663
static const range_string screencapture_items[] = {
664
    { 0, 0, "Screen Image" },
665
    { 1, 239, "Reserved" },
666
    { 240, 255, "Manufacturer Proprietary" },
667
    { 0, 0, NULL }
668
};
669
670
static const range_string screencapture_path[] = {
671
    { 0, 0, "Reserved" },
672
    { 1, 1, "VT accessible storage/removable media" },
673
    { 2, 239, "Reserved" },
674
    { 240, 255, "Manufacturer Proprietary" },
675
    { 0, 0, NULL }
676
};
677
678
static const value_string line_direction[] = {
679
    { 0, "Top left to bottom right" },
680
    { 1, "Bottom left to top right" },
681
    { 0, NULL }
682
};
683
684
0
#define MASK_UNLOCK 0
685
0
#define MASK_LOCK 1
686
687
static const value_string lock_unlock[] = {
688
    { MASK_UNLOCK, "Unlock Data Mask or User-Layout Data Mask" },
689
    { MASK_LOCK  , "Lock Data Mask or User-Layout Data Mask" },
690
    { 0, NULL }
691
};
692
693
0
#define ENOUGH_MEMORY 0
694
#define NOT_ENOUGH_MEMORY 1
695
696
static const value_string memory_status[] = {
697
    { ENOUGH_MEMORY    , "There can be enough memory." },
698
    { NOT_ENOUGH_MEMORY, "There is not enough memory available. Do not transmit Object Pool." },
699
    { 0, NULL }
700
};
701
702
static const value_string vt_versions_extended[] = {
703
    { 0, "Hannover Agritechnica 2001 limited feature set" },
704
    { 1, "FDIS Version ISO11783-6:2004(E), (Final Draft International Standard)" },
705
    { 2, "IS Version ISO11783-6:2004(E), First Edition, 2004-06-15" },
706
    { 3, "IS Version ISO11783-6:2010(E), Second Edition, (ISO11783-6:2004(E) and features specifically noted with version 3 reference)" },
707
    { 4, "IS Version ISO11783-6:2010(E), Second Edition, (ISO11783-6:2004(E) and features specifically noted with version 4 reference)" },
708
    { 5, "IS Version ISO11783-6:2014(E), Third Edition" },
709
    { 0, NULL }
710
};
711
712
static const range_string vt_object_types[] = {
713
    /* Top level objects */
714
    { 0,   0,   "Working Set object" },
715
    { 1,   1,   "Data Mask object" },
716
    { 2,   2,   "Alarm Mask object" },
717
    { 3,   3,   "Container object" },
718
    { 34,  34,  "Window Mask object" },
719
    /* Key objects */
720
    { 4,   4,   "Soft Key Mask object" },
721
    { 5,   5,   "Key object" },
722
    { 6,   6,   "Button object" },
723
    { 35,  35,  "Key Group object" },
724
    /* Input field objects */
725
    { 7,   7,   "Input Boolean object" },
726
    { 8,   8,   "Input String object" },
727
    { 9,   9,   "Input Number object" },
728
    { 10,  10,  "Input List object" },
729
    /* Output field objects */
730
    { 11,  11,  "Output String object" },
731
    { 12,  12,  "Output Number object" },
732
    { 37,  37,  "Output List object" },
733
    /* Output shape objects */
734
    { 13,  13,  "Output Line object" },
735
    { 14,  14,  "Output Rectangle object" },
736
    { 15,  15,  "Output Ellipse object" },
737
    { 16,  16,  "Output Polygon object" },
738
    /* Output graphic objects */
739
    { 17,  17,  "Output Meter object" },
740
    { 18,  18,  "Output Linear Bar Graph object" },
741
    { 19,  19,  "Output Arched Bar Graph object" },
742
    { 36,  36,  "Graphics Context object" },
743
    { 44,  44,  "Animation object" },
744
    /* Picture graphic object */
745
    { 20,  20,  "Picture Graphic object" },
746
    /* Variable objects */
747
    { 21,  21,  "Number Variable object" },
748
    { 22,  22,  "String Variable object" },
749
    /* Attribute Objects */
750
    { 23,  23,  "Font Attributes object" },
751
    { 24,  24,  "Line Attributes object" },
752
    { 25,  25,  "Fill Attributes object" },
753
    { 26,  26,  "Input Attributes object" },
754
    { 38,  38,  "Extended Input Attributes object" },
755
    { 39,  39,  "Colour Map object" },
756
    { 40,  40,  "Object Label Reference List object" },
757
    /* Pointer objects */
758
    { 27,  27,  "Object Pointer object" },
759
    { 41,  41,  "External Object Definition object" },
760
    { 42,  42,  "External Reference NAME object" },
761
    { 43,  43,  "External Object Pointer object" },
762
    /* Macro object */
763
    { 28,  28,  "Macro object" },
764
    /* Auxiliary control */
765
    { 29,  29,  "Auxiliary Function Type 1 object" },
766
    { 30,  30,  "Auxiliary Input Type 1 object" },
767
    { 31,  31,  "Auxiliary Function Type 2 object" },
768
    { 32,  32,  "Auxiliary Input Type 2 object" },
769
    { 33,  33,  "Auxiliary Control Designator Type 2 Object Pointer" },
770
    /* Proprietary Objects */
771
    { 240, 254, "Manufacturer Defined Objects" },
772
    /* Reserved Objects */
773
    { 45,  239, "Reserved" },
774
    { 255, 255, "Reserved" },
775
    { 0, 0, NULL }
776
};
777
778
static const value_string graphic_types[] = {
779
    { 0, "Monochrome" },
780
    { 1, "16 Colour" },
781
    { 2, "256 Colour" },
782
    { 0, NULL }
783
};
784
785
static const value_string auxiliary_boolean_value[] = {
786
    { 0, "Disabled" },
787
    { 1, "Enabled" },
788
    { 2, "non-latched Boolean held" },
789
    { 0xFF, "Analog" },
790
    { 0, NULL }
791
};
792
793
static const value_string auxiliary_maintenance_status[] = {
794
    { 0, "Initializing, pool is not currently available for assignment." },
795
    { 1, "Ready, pool has been loaded into the VT and is available for assignments." },
796
    { 0, NULL }
797
};
798
799
static const value_string auxiliary_capabilities_request_type[] = {
800
    { 0, "Request capabilities of Auxiliary Input Unit(s)" },
801
    { 1, "Request capabilities of Auxiliary Function Unit(s)" },
802
    { 0, NULL }
803
};
804
805
static const value_string auxiliary_assigned_attributes[] = {
806
    { 0, "auxiliary input" },
807
    { 1, "auxiliary function" },
808
    { 2, "Input is assigned" },
809
    { 0, NULL }
810
};
811
812
static const value_string select_input_object_option[] = {
813
    { 0xFF, "Set Focus to object referenced by Object ID " },
814
    { 0   , "Activate for data-input the object reference by Object ID" },
815
    { 0, NULL },
816
};
817
818
static const value_string select_input_opject_response[] = {
819
    { 0, "Object referenced by Object ID is not selected or Object ID is the NULL object" },
820
    { 1, "Object referenced by Object ID is Selected" },
821
    { 2, "Object referenced by Object ID is Opened for Edit" },
822
    { 0, NULL }
823
};
824
825
static const value_string draw_text_background[] = {
826
    { 0, "Opaque" },
827
    { 1, "Transparent" },
828
    { 0, NULL }
829
};
830
831
832
833
static int * const screencapture_response_errorcodes_flag_fields[] = {
834
    &hf_isobus_vt_screen_capture_response_error_not_enabled,
835
    &hf_isobus_vt_screen_capture_response_error_vt_transfer_is_busy,
836
    &hf_isobus_vt_screen_capture_response_error_item_unsupported,
837
    &hf_isobus_vt_screen_capture_response_error_path_unsupported,
838
    &hf_isobus_vt_screen_capture_response_error_removable_media_is_full_or_unavailable,
839
    &hf_isobus_vt_screen_capture_response_error_other,
840
    NULL
841
};
842
843
844
static value_string object_id_strings[MAX_OBJECT_ID_DB_SIZE];
845
846
/* Initialize the subtree pointers */
847
static int ett_isobus_vt;
848
static int ett_isobus_vt_vtstatus_busycodes_subtree;
849
static int ett_isobus_vt_getsupportedwidechars_range;
850
static int ett_isobus_vt_gettextfontdata_smallfontsizes;
851
static int ett_isobus_vt_gettextfontdata_largefontsizes;
852
static int ett_isobus_vt_gettextfontdata_typeattributes;
853
static int ett_isobus_vt_gethardware_hardware;
854
static int ett_isobus_vt_preferredassignment_inputunit;
855
static int ett_isobus_vt_preferredassignment_inputunit_preferredfunction;
856
static int ett_isobus_vt_auxiliarycapabilities_inputunit;
857
static int ett_isobus_vt_auxiliarycapabilities_inputunit_set;
858
static int ett_isobus_vt_auxiliaryassignmenttype2_flags;
859
static int ett_isobus_vt_auxiliaryinputtype2status_operatingstate;
860
static int ett_isobus_vt_screencapture_response_errorcodes_flags;
861
862
static const char *object_id_translation = "";
863
864
enum vt_direction
865
{
866
    vt_to_ecu,
867
    ecu_to_vt
868
};
869
870
static const char* get_object_id_string(wmem_allocator_t* scope, uint16_t object_id)
871
0
{
872
0
    const char* translated_string;
873
0
    if(object_id == 0xFFFF)
874
0
    {
875
0
        return "NULL Object ID";
876
0
    }
877
878
0
    translated_string = val_to_str(scope, object_id, object_id_strings, "Object ID 0x%04X");
879
0
    return translated_string;
880
0
}
881
882
static int
883
dissect_vt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, enum vt_direction direction)
884
0
{
885
0
    int offset = 0;
886
0
    uint32_t function_id;
887
0
    proto_item *ti;
888
889
0
    ti = proto_tree_add_item(tree,
890
0
        hf_isobus_vt, tvb, 0, 0, ENC_NA);
891
0
    proto_item_set_hidden(ti);
892
893
0
    proto_tree_add_item_ret_uint(tree,
894
0
        hf_isobus_vt_command, tvb, offset, 1, ENC_LITTLE_ENDIAN, &function_id);
895
0
    offset += 1;
896
897
0
    switch(function_id)
898
0
    {
899
0
    case VT_SOFT_KEY_ACTIVATION:
900
0
    {
901
0
        uint32_t key_activation_code, object_id, parent_object_id;
902
903
0
        proto_tree_add_item_ret_uint(tree,
904
0
            hf_isobus_vt_softkey_keyactcode, tvb, offset, 1, ENC_LITTLE_ENDIAN, &key_activation_code);
905
0
        offset += 1;
906
907
0
        proto_tree_add_item_ret_uint(tree,
908
0
            hf_isobus_vt_softkey_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
909
0
        ti = proto_tree_add_item(tree,
910
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
911
0
        proto_item_set_hidden(ti);
912
0
        offset += 2;
913
914
0
        proto_tree_add_item_ret_uint(tree,
915
0
            hf_isobus_vt_softkey_parentobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &parent_object_id);
916
0
        ti = proto_tree_add_item(tree,
917
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
918
0
        proto_item_set_hidden(ti);
919
0
        offset += 2;
920
921
0
        proto_tree_add_item(tree,
922
0
            hf_isobus_vt_softkey_keynumber, tvb, offset, 1, ENC_LITTLE_ENDIAN);
923
924
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "Key %s of parent %s %s",
925
0
            get_object_id_string(pinfo->pool, object_id), get_object_id_string(pinfo->pool, parent_object_id),
926
0
            val_to_str_const(key_activation_code, key_activation_codes_info_postfix, "unknown action"));
927
0
    }
928
0
        break;
929
0
    case VT_BUTTON_ACTIVATION:
930
0
    {
931
0
        uint32_t key_activation_code, object_id, parent_object_id;
932
933
0
        proto_tree_add_item_ret_uint(tree,
934
0
            hf_isobus_vt_button_keyactcode, tvb, offset, 1, ENC_LITTLE_ENDIAN, &key_activation_code);
935
0
        offset += 1;
936
937
0
        proto_tree_add_item_ret_uint(tree,
938
0
            hf_isobus_vt_button_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
939
0
        ti = proto_tree_add_item(tree,
940
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
941
0
        proto_item_set_hidden(ti);
942
0
        offset += 2;
943
944
0
        proto_tree_add_item_ret_uint(tree,
945
0
            hf_isobus_vt_button_parentobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &parent_object_id);
946
0
        ti = proto_tree_add_item(tree,
947
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
948
0
        proto_item_set_hidden(ti);
949
0
        offset += 2;
950
951
0
        proto_tree_add_item(tree,
952
0
            hf_isobus_vt_button_keynumber, tvb, offset, 1, ENC_LITTLE_ENDIAN);
953
954
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "Button %s of parent %s %s",
955
0
            get_object_id_string(pinfo->pool, object_id), get_object_id_string(pinfo->pool, parent_object_id),
956
0
            val_to_str_const(key_activation_code, key_activation_codes_info_postfix, "unknown action"));
957
0
    }
958
0
        break;
959
0
    case VT_POINTING_EVENT:
960
0
    {
961
0
        uint32_t x_position, y_position, touch_state = 0;
962
963
0
        proto_tree_add_item_ret_uint(tree,
964
0
            hf_isobus_vt_pointing_xposition, tvb, offset, 2, ENC_LITTLE_ENDIAN, &x_position);
965
0
        offset += 2;
966
967
0
        proto_tree_add_item_ret_uint(tree,
968
0
            hf_isobus_vt_pointing_yposition, tvb, offset, 2, ENC_LITTLE_ENDIAN, &y_position);
969
0
        offset += 2;
970
971
0
        if(current_vt_version >= 4)
972
0
        {
973
0
            proto_tree_add_item_ret_uint(tree,
974
0
                hf_isobus_vt_pointing_touchstate, tvb, offset, 1, ENC_LITTLE_ENDIAN, &touch_state);
975
0
        }
976
977
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "Touch at [%d;%d]",
978
0
            x_position, y_position);
979
980
0
        if(current_vt_version >= 4)
981
0
        {
982
0
            col_append_fstr(pinfo->cinfo, COL_INFO, " %s", val_to_str_const(touch_state, pointing_touch_state_info_postfix, "unknown action"));
983
0
        }
984
0
    }
985
0
        break;
986
0
    case VT_VT_SELECT_INPUT_OBJECT:
987
0
    {
988
0
        uint32_t object_id;
989
990
0
        proto_tree_add_item_ret_uint(tree,
991
0
            hf_isobus_vt_vtselectinputobject_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
992
0
        ti = proto_tree_add_item(tree,
993
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
994
0
        proto_item_set_hidden(ti);
995
0
        offset += 2;
996
997
0
        proto_tree_add_item(tree,
998
0
            hf_isobus_vt_vtselectinputobject_selection, tvb, offset, 1, ENC_LITTLE_ENDIAN);
999
0
        offset += 1;
1000
1001
0
        if(current_vt_version >= 4)
1002
0
        {
1003
0
            proto_tree_add_item(tree,
1004
0
                hf_isobus_vt_vtselectinputobject_openforinput, tvb, offset, 1, ENC_LITTLE_ENDIAN);
1005
0
        }
1006
1007
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s was selected by VT", get_object_id_string(pinfo->pool, object_id));
1008
0
    }
1009
0
        break;
1010
0
    case VT_VT_ESC_MESSAGE:
1011
0
    {
1012
0
        uint32_t object_id;
1013
1014
0
        proto_tree_add_item_ret_uint(tree,
1015
0
            hf_isobus_vt_vtescmessage_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
1016
0
        ti = proto_tree_add_item(tree,
1017
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1018
0
        proto_item_set_hidden(ti);
1019
0
        offset += 2;
1020
1021
0
        if(direction == vt_to_ecu)
1022
0
        {
1023
0
            uint32_t error_codes;
1024
1025
0
            ti = proto_tree_add_item_ret_uint(tree,
1026
0
                hf_isobus_vt_vtescmessage_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
1027
1028
0
            proto_item_append_text(ti, ": ");
1029
0
            if (error_codes & 0x01)
1030
0
                proto_item_append_text(ti, "No input field is selected ");
1031
0
            if (error_codes & 0x10)
1032
0
                proto_item_append_text(ti, "Any other error ");
1033
1034
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "ESC button was pressed while %s was selected", get_object_id_string(pinfo->pool, object_id));
1035
0
        }
1036
0
        else
1037
0
        {
1038
0
            col_append_str(pinfo->cinfo, COL_INFO, "ESC button press was successfully received");
1039
0
        }
1040
0
    }
1041
0
        break;
1042
0
    case VT_VT_CHANGE_NUMERIC_VALUE:
1043
0
    {
1044
0
        uint32_t object_id, value;
1045
1046
0
        proto_tree_add_item_ret_uint(tree,
1047
0
            hf_isobus_vt_vtchgnumval_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
1048
0
        ti = proto_tree_add_item(tree,
1049
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1050
0
        proto_item_set_hidden(ti);
1051
0
        offset += 2;
1052
1053
0
        offset += 1; /* byte 4 is reserved */
1054
1055
0
        proto_tree_add_item_ret_uint(tree,
1056
0
            hf_isobus_vt_vtchgnumval_value, tvb, offset, 4, ENC_LITTLE_ENDIAN, &value);
1057
1058
0
        if(direction == ecu_to_vt)
1059
0
        {
1060
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "VT Numeric value of %s has changed to 0x%X",
1061
0
                get_object_id_string(pinfo->pool, object_id), value);
1062
0
        }
1063
0
        else
1064
0
        {
1065
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "VT Numeric value of %s should change to 0x%X",
1066
0
                get_object_id_string(pinfo->pool, object_id), value);
1067
0
        }
1068
0
    }
1069
0
        break;
1070
0
    case VT_VT_CHANGE_ACTIVE_MASK:
1071
0
    {
1072
0
        uint32_t mask_object_id;
1073
1074
0
        proto_tree_add_item_ret_uint(tree,
1075
0
            hf_isobus_vt_vtchgactivemask_maskobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &mask_object_id);
1076
0
        ti = proto_tree_add_item(tree,
1077
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1078
0
        proto_item_set_hidden(ti);
1079
0
        offset += 2;
1080
1081
0
        if(direction == vt_to_ecu)
1082
0
        {
1083
0
            uint32_t error_object_id, error_codes;
1084
1085
0
            ti = proto_tree_add_item_ret_uint(tree,
1086
0
                hf_isobus_vt_vtchgactivemask_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
1087
0
            proto_item_append_text(ti, ": ");
1088
0
            if (error_codes & 0x04)
1089
0
                proto_item_append_text(ti, "Missing object ");
1090
0
            if (error_codes & 0x08)
1091
0
                proto_item_append_text(ti, "Mask or child object has errors ");
1092
0
            if (error_codes & 0x10)
1093
0
                proto_item_append_text(ti, "Any other error ");
1094
0
            if (error_codes & 0x20)
1095
0
                proto_item_append_text(ti, "Pool being deleted ");
1096
0
            offset += 1;
1097
1098
0
            proto_tree_add_item_ret_uint(tree,
1099
0
                hf_isobus_vt_vtchgactivemask_errorobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &error_object_id);
1100
0
            ti = proto_tree_add_item(tree,
1101
0
                hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1102
0
            proto_item_set_hidden(ti);
1103
0
            offset += 2;
1104
1105
0
            proto_tree_add_item_ret_uint(tree,
1106
0
                hf_isobus_vt_vtchgactivemask_errorobjectidparent, tvb, offset, 2, ENC_LITTLE_ENDIAN, &error_object_id);
1107
0
            ti = proto_tree_add_item(tree,
1108
0
                hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1109
0
            proto_item_set_hidden(ti);
1110
1111
0
            if(error_codes)
1112
0
            {
1113
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "VT Active mask changed to %s",
1114
0
                    get_object_id_string(pinfo->pool, mask_object_id));
1115
0
            }
1116
0
            else
1117
0
            {
1118
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "VT Active mask changed to %s because of error in %s",
1119
0
                    get_object_id_string(pinfo->pool, mask_object_id), get_object_id_string(pinfo->pool, error_object_id));
1120
0
            }
1121
0
        }
1122
0
        else
1123
0
        {
1124
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "VT Active mask change to %s acknowledged",
1125
0
                get_object_id_string(pinfo->pool, mask_object_id));
1126
0
        }
1127
0
    }
1128
0
        break;
1129
0
    case VT_VT_CHANGE_STRING_VALUE:
1130
0
    {
1131
0
        if(direction == vt_to_ecu)
1132
0
        {
1133
0
            unsigned encoding = ENC_ASCII|ENC_NA;
1134
0
            uint32_t object_id, str_length;
1135
0
            uint16_t firstTwoBytesString;
1136
0
            const uint8_t* value;
1137
0
            unsigned bomOffset = 0;
1138
1139
0
            proto_tree_add_item_ret_uint(tree,
1140
0
                hf_isobus_vt_vtchgstrval_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
1141
0
            ti = proto_tree_add_item(tree,
1142
0
                hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1143
0
            proto_item_set_hidden(ti);
1144
0
            offset += 2;
1145
1146
0
            proto_tree_add_item_ret_uint(tree,
1147
0
                hf_isobus_vt_vtchgstrval_length, tvb, offset, 1, ENC_LITTLE_ENDIAN, &str_length);
1148
0
            offset += 1;
1149
1150
0
            firstTwoBytesString = tvb_get_letohs(tvb,offset);
1151
0
            if(firstTwoBytesString == 0xFEFF)
1152
0
            {
1153
0
                encoding = ENC_UCS_2|ENC_LITTLE_ENDIAN;
1154
0
                bomOffset = 2;
1155
0
            }
1156
1157
0
            proto_tree_add_item_ret_string(tree,
1158
0
                hf_isobus_vt_vtchgstrval_value, tvb, offset + bomOffset, str_length - bomOffset, encoding,
1159
0
                pinfo->pool, &value);
1160
1161
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "VT String value of %s should change to %s",
1162
0
                get_object_id_string(pinfo->pool, object_id), value);
1163
0
        }
1164
0
        else
1165
0
        {
1166
0
            uint32_t object_id;
1167
1168
0
            offset += 2;    /* first two bytes are reserved */
1169
1170
0
            proto_tree_add_item_ret_uint(tree,
1171
0
                hf_isobus_vt_chgstrval_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
1172
0
            ti = proto_tree_add_item(tree,
1173
0
                hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1174
0
            proto_item_set_hidden(ti);
1175
1176
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "VT String value change of %s acknowledged",
1177
0
                get_object_id_string(pinfo->pool, object_id));
1178
0
        }
1179
0
    }
1180
0
        break;
1181
0
    case VT_VT_ON_USER_LAYOUT_HIDE_SHOW:
1182
0
    {
1183
0
        uint32_t object_id[2], status[2];
1184
1185
0
        proto_tree_add_item_ret_uint(tree,
1186
0
            hf_isobus_vt_vtonuserlayouthideshow_objectid_1, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id[0]);
1187
0
        ti = proto_tree_add_item(tree,
1188
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1189
0
        proto_item_set_hidden(ti);
1190
0
        offset += 2;
1191
1192
0
        proto_tree_add_item_ret_uint(tree,
1193
0
            hf_isobus_vt_vtonuserlayouthideshow_status_1, tvb, offset, 1, ENC_LITTLE_ENDIAN, &status[0]);
1194
0
        offset += 1;
1195
1196
0
        proto_tree_add_item_ret_uint(tree,
1197
0
            hf_isobus_vt_vtonuserlayouthideshow_objectid_2, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id[1]);
1198
0
        ti = proto_tree_add_item(tree,
1199
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1200
0
        proto_item_set_hidden(ti);
1201
0
        offset += 2;
1202
1203
0
        proto_tree_add_item_ret_uint(tree,
1204
0
            hf_isobus_vt_vtonuserlayouthideshow_status_2, tvb, offset, 1, ENC_LITTLE_ENDIAN, &status[1]);
1205
1206
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "VT On User-Layout Hide/Show. %s is %s, %s is %s",
1207
0
            get_object_id_string(pinfo->pool, object_id[0]), val_to_str_const(status[0], vt_hide_show_action_info, "unknown"),
1208
0
            get_object_id_string(pinfo->pool, object_id[1]), val_to_str_const(status[1], vt_hide_show_action_info, "unknown"));
1209
0
    }
1210
0
        break;
1211
0
    case VT_VT_CONTROL_AUDIO_SIGNAL_TERMINATION:
1212
0
    {
1213
0
        uint32_t termination_cause;
1214
1215
0
        ti = proto_tree_add_item_ret_uint(tree,
1216
0
            hf_isobus_vt_vtcontrolaudiosignaltermination_terminationcause, tvb, offset, 1, ENC_LITTLE_ENDIAN, &termination_cause);
1217
1218
0
        proto_item_append_text(ti, ": ");
1219
0
        if (termination_cause & 0x01)
1220
0
        {
1221
0
            proto_item_append_text(ti, "Audio was terminated ");
1222
0
            col_append_str(pinfo->cinfo, COL_INFO, "VT Control audio signal termination: Audio was terminated");
1223
0
        }
1224
0
        else
1225
0
        {
1226
0
            col_append_str(pinfo->cinfo, COL_INFO, "VT Control audio signal termination: Error in message");
1227
0
        }
1228
0
    }
1229
0
        break;
1230
0
    case VT_END_OF_OBJECT_POOL:
1231
0
    {
1232
0
        if(direction == vt_to_ecu)
1233
0
        {
1234
0
            uint32_t error_codes, obj_pool_error_codes;
1235
1236
0
            ti = proto_tree_add_item_ret_uint(tree,
1237
0
                hf_isobus_vt_endofobjectpool_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
1238
0
            proto_item_append_text(ti, ": ");
1239
0
            if (error_codes & 0x01)
1240
0
                proto_item_append_text(ti, "There are errors in the Object Pool ");
1241
0
            if (error_codes & 0x02)
1242
0
                proto_item_append_text(ti, "VT ran out of memory during transfer ");
1243
0
            if (error_codes & 0x10)
1244
0
                proto_item_append_text(ti, "Any other error ");
1245
0
            offset += 1;
1246
1247
0
            proto_tree_add_item(tree,
1248
0
                hf_isobus_vt_endofobjectpool_faultyparentobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1249
0
            ti = proto_tree_add_item(tree,
1250
0
                hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1251
0
            proto_item_set_hidden(ti);
1252
0
            offset += 2;
1253
1254
0
            proto_tree_add_item(tree,
1255
0
                hf_isobus_vt_endofobjectpool_faultyobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1256
0
            ti = proto_tree_add_item(tree,
1257
0
                hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1258
0
            proto_item_set_hidden(ti);
1259
0
            offset += 2;
1260
1261
0
            ti = proto_tree_add_item_ret_uint(tree,
1262
0
                hf_isobus_vt_endofobjectpool_objectpoolerrorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &obj_pool_error_codes);
1263
0
            proto_item_append_text(ti, ": ");
1264
0
            if (obj_pool_error_codes & 0x01)
1265
0
                proto_item_append_text(ti, "method or Attribute not supported by the VT ");
1266
0
            if (obj_pool_error_codes & 0x02)
1267
0
                proto_item_append_text(ti, "unknown object reference (missing object) ");
1268
0
            if (obj_pool_error_codes & 0x04)
1269
0
                proto_item_append_text(ti, "any other error ");
1270
0
            if (obj_pool_error_codes & 0x08)
1271
0
                proto_item_append_text(ti, "object pool was deleted from volatile memory ");
1272
1273
0
            if(error_codes & 0x01)
1274
0
            {
1275
0
                col_append_str(pinfo->cinfo, COL_INFO, "End of object pool received, object pool contains errors");
1276
0
            }
1277
0
            else if(error_codes & 0x02)
1278
0
            {
1279
0
                col_append_str(pinfo->cinfo, COL_INFO, "End of object pool received, but VT ran out of memory");
1280
0
            }
1281
0
            else
1282
0
            {
1283
0
                col_append_str(pinfo->cinfo, COL_INFO, "End of object pool received, object pool accepted");
1284
0
            }
1285
0
        }
1286
0
    }
1287
0
        break;
1288
0
    case VT_AUXILIARY_ASSIGNMENT_TYPE_1:
1289
0
    {
1290
0
        uint32_t source_address, aux_input_number, object_id;
1291
1292
0
        proto_tree_add_item_ret_uint(tree,
1293
0
            hf_isobus_vt_auxiliaryassignmenttype1_sourceaddressauxinputdevice, tvb, offset, 1, ENC_LITTLE_ENDIAN, &source_address);
1294
0
        offset += 1;
1295
1296
0
        proto_tree_add_item_ret_uint(tree,
1297
0
            hf_isobus_vt_auxiliaryassignmenttype1_auxinputnumber, tvb, offset, 1, ENC_LITTLE_ENDIAN, &aux_input_number);
1298
0
        offset += 1;
1299
1300
0
        proto_tree_add_item_ret_uint(tree,
1301
0
            hf_isobus_vt_auxiliaryassignmenttype1_objectidauxinputdevice, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
1302
0
        ti = proto_tree_add_item(tree,
1303
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1304
0
        proto_item_set_hidden(ti);
1305
1306
0
        if(direction == ecu_to_vt)
1307
0
        {
1308
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Assign auxiliary input type 1 number %u of device %u to %s",
1309
0
                aux_input_number, source_address, get_object_id_string(pinfo->pool, object_id));
1310
0
        }
1311
0
        else
1312
0
        {
1313
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Auxiliary input type 1 number %u of device %u has been assigned to %s",
1314
0
                aux_input_number, source_address, get_object_id_string(pinfo->pool, object_id));
1315
0
        }
1316
0
    }
1317
0
        break;
1318
0
    case VT_AUXILIARY_INPUT_TYPE_1_STATUS:
1319
0
    {
1320
0
        uint32_t input_number, boolean_value, analyze_value;
1321
1322
0
        proto_tree_add_item_ret_uint(tree,
1323
0
            hf_isobus_vt_auxiliaryinputtype1status_inputnumber, tvb, offset, 1, ENC_LITTLE_ENDIAN, &input_number);
1324
0
        offset += 1;
1325
1326
0
        proto_tree_add_item_ret_uint(tree,
1327
0
            hf_isobus_vt_auxiliaryinputtype1status_analyzevalue, tvb, offset, 2, ENC_LITTLE_ENDIAN, &analyze_value);
1328
0
        offset += 2;
1329
1330
0
        proto_tree_add_item(tree,
1331
0
            hf_isobus_vt_auxiliaryinputtype1status_numberoftransitions, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1332
0
        offset += 2;
1333
1334
0
        proto_tree_add_item_ret_uint(tree,
1335
0
            hf_isobus_vt_auxiliaryinputtype1status_booleanvalue, tvb, offset, 1, ENC_LITTLE_ENDIAN, &boolean_value);
1336
1337
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "State of input %u is analog %u or digital %s",
1338
0
            input_number, analyze_value, val_to_str_const(boolean_value, auxiliary_boolean_value, "unknown"));
1339
1340
0
    }
1341
0
        break;
1342
0
    case VT_PREFERRED_ASSIGNMENT:
1343
0
    {
1344
0
        if(direction == ecu_to_vt)
1345
0
        {
1346
0
            uint32_t number_of_input_units, i;
1347
1348
0
            proto_tree_add_item_ret_uint(tree,
1349
0
                hf_isobus_vt_preferredassignment_numberofinputunits, tvb, offset, 1, ENC_LITTLE_ENDIAN, &number_of_input_units);
1350
0
            offset += 1;
1351
1352
0
            for(i = 0; i < number_of_input_units; i++)
1353
0
            {
1354
0
                proto_item *input_unit_item;
1355
0
                proto_tree *input_unit_subtree;
1356
0
                uint32_t number_of_preferred_functions, j, model_identification_code;
1357
0
                uint64_t name;
1358
1359
0
                input_unit_subtree = proto_tree_add_subtree_format(tree, tvb, offset, 0, ett_isobus_vt_preferredassignment_inputunit, &input_unit_item, "Input Unit");
1360
1361
0
                proto_tree_add_item_ret_uint64(input_unit_subtree,
1362
0
                    hf_isobus_vt_preferredassignment_auxinputunit_name, tvb, offset, 8, ENC_LITTLE_ENDIAN, &name);
1363
0
                offset += 8;
1364
1365
0
                proto_tree_add_item_ret_uint(input_unit_subtree,
1366
0
                    hf_isobus_vt_preferredassignment_auxinputunit_modelidentificationcode, tvb, offset, 2, ENC_LITTLE_ENDIAN, &model_identification_code);
1367
0
                offset += 2;
1368
1369
0
                proto_tree_add_item_ret_uint(input_unit_subtree,
1370
0
                    hf_isobus_vt_preferredassignment_auxinputunit_numberofpreferredfunctions, tvb, offset, 1, ENC_LITTLE_ENDIAN, &number_of_preferred_functions);
1371
0
                offset += 1;
1372
1373
0
                proto_item_set_text(input_unit_item, "Input Unit name 0x%" PRIX64 " model identification code %u", name, model_identification_code);
1374
0
                proto_item_set_len(input_unit_item, 8 + 2 + 1 + ((2 + 2) * number_of_preferred_functions));
1375
1376
0
                for(j = 0; j < number_of_preferred_functions; j++)
1377
0
                {
1378
0
                    proto_item *preferred_function_item;
1379
0
                    proto_tree *preferred_function_subtree;
1380
0
                    uint32_t auxiliary_function_object_id, auxiliary_input_object_id;
1381
1382
0
                    preferred_function_subtree = proto_tree_add_subtree(input_unit_subtree, tvb, offset, 4,
1383
0
                        ett_isobus_vt_preferredassignment_inputunit_preferredfunction, &preferred_function_item, "Input Unit");
1384
1385
0
                    proto_tree_add_item_ret_uint(preferred_function_subtree,
1386
0
                        hf_isobus_vt_preferredassignment_auxinputunit_preferredfunctions_auxfunctionobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &auxiliary_function_object_id);
1387
0
                    ti = proto_tree_add_item(tree,
1388
0
                        hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1389
0
                    proto_item_set_hidden(ti);
1390
0
                    offset += 2;
1391
1392
0
                    proto_tree_add_item_ret_uint(preferred_function_subtree,
1393
0
                        hf_isobus_vt_preferredassignment_auxinputunit_preferredfunctions_auxinputobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &auxiliary_input_object_id);
1394
0
                    ti = proto_tree_add_item(tree,
1395
0
                        hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1396
0
                    proto_item_set_hidden(ti);
1397
0
                    offset += 2;
1398
1399
0
                    proto_item_set_text(preferred_function_item, "Auxiliary Function %s connects to Auxiliary Input %s",
1400
0
                        get_object_id_string(pinfo->pool, auxiliary_function_object_id), get_object_id_string(pinfo->pool, auxiliary_input_object_id));
1401
0
                }
1402
0
            }
1403
0
            col_append_str(pinfo->cinfo, COL_INFO, "Create preferred assignment");
1404
0
        }
1405
0
        else
1406
0
        {
1407
0
            uint32_t error_codes, faulty_auxiliary_function_object_id;
1408
1409
0
            ti = proto_tree_add_item_ret_uint(tree,
1410
0
                hf_isobus_vt_preferredassignment_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
1411
0
            proto_item_append_text(ti, ": ");
1412
0
            if (error_codes & 0x01)
1413
0
                proto_item_append_text(ti, "Auxiliary Input Unit(s) not valid ");
1414
0
            if (error_codes & 0x02)
1415
0
                proto_item_append_text(ti, "Function Object ID(s) not valid ");
1416
0
            if (error_codes & 0x04)
1417
0
                proto_item_append_text(ti, "Input Object ID(s) not valid ");
1418
0
            if (error_codes & 0x08)
1419
0
                proto_item_append_text(ti, "Duplicate Object ID of Auxiliary Function ");
1420
0
            if (error_codes & 0x10)
1421
0
                proto_item_append_text(ti, "Any other error ");
1422
0
            offset += 1;
1423
1424
0
            proto_tree_add_item_ret_uint(tree,
1425
0
                hf_isobus_vt_preferredassignment_faultyauxiliaryfunctionobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &faulty_auxiliary_function_object_id);
1426
0
            ti = proto_tree_add_item(tree,
1427
0
                hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1428
0
            proto_item_set_hidden(ti);
1429
1430
0
            if(error_codes)
1431
0
            {
1432
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Error while creating preferred assignment because of %s", get_object_id_string(pinfo->pool, faulty_auxiliary_function_object_id));
1433
0
            }
1434
0
            else
1435
0
            {
1436
0
                col_append_str(pinfo->cinfo, COL_INFO, "Successfully created preferred assignment");
1437
0
            }
1438
0
        }
1439
0
    }
1440
0
        break;
1441
0
    case VT_AUXILIARY_INPUT_TYPE_2_MAINTENANCE:
1442
0
    {
1443
0
        if(direction == ecu_to_vt)
1444
0
        {
1445
0
            uint32_t model_identification_code, status;
1446
1447
0
            proto_tree_add_item_ret_uint(tree,
1448
0
                hf_isobus_vt_auxiliaryinputtype2maintenance_modelidentificationcode, tvb, offset, 2, ENC_LITTLE_ENDIAN, &model_identification_code);
1449
0
            offset += 2;
1450
1451
0
            proto_tree_add_item_ret_uint(tree,
1452
0
                hf_isobus_vt_auxiliaryinputtype2maintenance_status, tvb, offset, 1, ENC_LITTLE_ENDIAN, &status);
1453
1454
0
            if(status == 0)
1455
0
            {
1456
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Auxiliary Input Type 2 Maintenance: Model Identification Code %u, Status is Initializing",
1457
0
                    model_identification_code);
1458
0
            }
1459
0
            else
1460
0
            {
1461
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Auxiliary Input Type 2 Maintenance: Model Identification Code %u, Status is Ready",
1462
0
                    model_identification_code);
1463
0
            }
1464
0
        }
1465
0
    }
1466
0
        break;
1467
0
    case VT_AUXILIARY_ASSIGNMENT_TYPE_2:
1468
0
    {
1469
0
        uint32_t error_codes, auxiliary_input_object_id = 0, auxiliary_function_object_id;
1470
0
        uint64_t name = 0;
1471
1472
0
        if(direction == ecu_to_vt)
1473
0
        {
1474
0
            proto_tree *flags_subtree;
1475
1476
0
            proto_tree_add_item_ret_uint64(tree,
1477
0
                hf_isobus_vt_auxiliaryassignmenttype2_name, tvb, offset, 8, ENC_LITTLE_ENDIAN, &name);
1478
0
            offset += 8;
1479
1480
0
            ti = proto_tree_add_item(tree,
1481
0
                hf_isobus_vt_auxiliaryassignmenttype2_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
1482
0
            flags_subtree = proto_item_add_subtree(ti, ett_isobus_vt_auxiliaryassignmenttype2_flags);
1483
0
            ti = proto_tree_add_item(flags_subtree,
1484
0
                hf_isobus_vt_auxiliaryassignmenttype2_flags_preferredassignment, tvb, offset, 1, ENC_LITTLE_ENDIAN);
1485
0
            proto_item_set_generated(ti);
1486
0
            ti = proto_tree_add_item(flags_subtree,
1487
0
                hf_isobus_vt_auxiliaryassignmenttype2_flags_auxiliaryfunctiontype, tvb, offset, 1, ENC_LITTLE_ENDIAN);
1488
0
            proto_item_set_generated(ti);
1489
0
            offset += 1;
1490
1491
0
            proto_tree_add_item_ret_uint(tree,
1492
0
                hf_isobus_vt_auxiliaryassignmenttype2_auxinputobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &auxiliary_input_object_id);
1493
0
            ti = proto_tree_add_item(tree,
1494
0
                hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1495
0
            proto_item_set_hidden(ti);
1496
0
            offset += 2;
1497
0
        }
1498
1499
0
        proto_tree_add_item_ret_uint(tree,
1500
0
            hf_isobus_vt_auxiliaryassignmenttype2_auxfunctionobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &auxiliary_function_object_id);
1501
0
        ti = proto_tree_add_item(tree,
1502
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1503
0
        proto_item_set_hidden(ti);
1504
0
        offset += 2;
1505
1506
0
        if(direction == vt_to_ecu)
1507
0
        {
1508
0
            ti = proto_tree_add_item_ret_uint(tree,
1509
0
                hf_isobus_vt_auxiliaryassignmenttype2_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
1510
0
            proto_item_append_text(ti, ": ");
1511
0
            if (error_codes & 0x01)
1512
0
                proto_item_append_text(ti, "error, assignment not accepted ");
1513
0
            if (error_codes & 0x02)
1514
0
                proto_item_append_text(ti, "error, this function is already assigned ");
1515
0
        }
1516
1517
0
        if(direction == ecu_to_vt)
1518
0
        {
1519
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Assign %s of name 0x%" PRIX64 " to function %s",
1520
0
                get_object_id_string(pinfo->pool, auxiliary_input_object_id), name, get_object_id_string(pinfo->pool, auxiliary_function_object_id));
1521
0
        }
1522
0
        else if(direction == vt_to_ecu)
1523
0
        {
1524
0
            if(error_codes)
1525
0
            {
1526
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Error while assigning function %s",
1527
0
                    get_object_id_string(pinfo->pool, auxiliary_function_object_id));
1528
0
            }
1529
0
            else
1530
0
            {
1531
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Successfully assigned function %s",
1532
0
                    get_object_id_string(pinfo->pool, auxiliary_function_object_id));
1533
0
            }
1534
0
        }
1535
0
    }
1536
0
        break;
1537
0
    case VT_AUXILIARY_INPUT_STATUS_TYPE_2_ENABLE:
1538
0
    {
1539
0
        uint32_t enable, status, error_codes, auxiliary_input_object_id;
1540
1541
0
        proto_tree_add_item_ret_uint(tree,
1542
0
            hf_isobus_vt_auxiliaryinputstatustype2enable_auxiliaryinputobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &auxiliary_input_object_id);
1543
0
        ti = proto_tree_add_item(tree,
1544
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1545
0
        proto_item_set_hidden(ti);
1546
0
        offset += 2;
1547
1548
0
        if(direction == ecu_to_vt)
1549
0
        {
1550
0
            proto_tree_add_item_ret_uint(tree,
1551
0
                hf_isobus_vt_auxiliaryinputstatustype2enable_enable, tvb, offset, 1, ENC_LITTLE_ENDIAN, &enable);
1552
0
        }
1553
0
        else
1554
0
        {
1555
0
            proto_tree_add_item_ret_uint(tree,
1556
0
                hf_isobus_vt_auxiliaryinputstatustype2enable_status, tvb, offset, 1, ENC_LITTLE_ENDIAN, &status);
1557
0
            offset += 1;
1558
1559
0
            ti = proto_tree_add_item_ret_uint(tree,
1560
0
                hf_isobus_vt_auxiliaryinputstatustype2enable_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
1561
0
            proto_item_append_text(ti, ": ");
1562
0
            if (error_codes & 0x01)
1563
0
                proto_item_append_text(ti, "Invalid Auxiliary Input Object ID ");
1564
0
            if (error_codes & 0x02)
1565
0
                proto_item_append_text(ti, "any other error ");
1566
0
        }
1567
1568
0
        if(direction == ecu_to_vt)
1569
0
        {
1570
0
            if(enable == 0)
1571
0
            {
1572
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Auxiliary Input %s should be disabled",
1573
0
                    get_object_id_string(pinfo->pool, auxiliary_input_object_id));
1574
0
            }
1575
0
            else
1576
0
            {
1577
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Auxiliary Input %s should be enabled",
1578
0
                    get_object_id_string(pinfo->pool, auxiliary_input_object_id));
1579
0
            }
1580
0
        }
1581
0
        else
1582
0
        {
1583
0
            if(error_codes)
1584
0
            {
1585
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Error while changing status for Auxiliary Input %s",
1586
0
                    get_object_id_string(pinfo->pool, auxiliary_input_object_id));
1587
0
            }
1588
0
            else
1589
0
            {
1590
0
                if (status == 0)
1591
0
                {
1592
0
                    col_append_fstr(pinfo->cinfo, COL_INFO, "Status of Auxiliary Input %s was successfully changed to disabled",
1593
0
                        get_object_id_string(pinfo->pool, auxiliary_input_object_id));
1594
0
                }
1595
0
                else if (status == 1)
1596
0
                {
1597
0
                    col_append_fstr(pinfo->cinfo, COL_INFO, "Status of Auxiliary Input %s was successfully changed to enabled",
1598
0
                        get_object_id_string(pinfo->pool, auxiliary_input_object_id));
1599
0
                }
1600
0
            }
1601
0
        }
1602
0
    }
1603
0
        break;
1604
0
    case VT_AUXILIARY_INPUT_TYPE_2_STATUS:
1605
0
    {
1606
0
        uint32_t auxiliary_input_object_id, value_1, value_2;
1607
0
        proto_tree* operating_state_subtree;
1608
1609
0
        proto_tree_add_item_ret_uint(tree,
1610
0
            hf_isobus_vt_auxiliaryinputtype2status_auxiliaryinputobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &auxiliary_input_object_id);
1611
0
        ti = proto_tree_add_item(tree,
1612
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1613
0
        proto_item_set_hidden(ti);
1614
0
        offset += 2;
1615
1616
0
        proto_tree_add_item_ret_uint(tree,
1617
0
            hf_isobus_vt_auxiliaryinputtype2status_value1, tvb, offset, 2, ENC_LITTLE_ENDIAN, &value_1);
1618
0
        offset += 2;
1619
1620
0
        proto_tree_add_item_ret_uint(tree,
1621
0
            hf_isobus_vt_auxiliaryinputtype2status_value2, tvb, offset, 2, ENC_LITTLE_ENDIAN, &value_2);
1622
0
        offset += 2;
1623
1624
0
        ti = proto_tree_add_item(tree,
1625
0
            hf_isobus_vt_auxiliaryinputtype2status_operatingstate, tvb, offset, 1, ENC_LITTLE_ENDIAN);
1626
0
        operating_state_subtree = proto_item_add_subtree(ti, ett_isobus_vt_auxiliaryinputtype2status_operatingstate);
1627
0
        ti = proto_tree_add_item(operating_state_subtree,
1628
0
            hf_isobus_vt_auxiliaryinputtype2status_operatingstate_learnmodeactive, tvb, offset, 1, ENC_LITTLE_ENDIAN);
1629
0
        proto_item_set_generated(ti);
1630
0
        ti = proto_tree_add_item(operating_state_subtree,
1631
0
            hf_isobus_vt_auxiliaryinputtype2status_operatingstate_inputactivatedinlearnmode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
1632
0
        proto_item_set_generated(ti);
1633
1634
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "State of input %s value 1 = 0x%X value 2 = 0x%X.",
1635
0
            get_object_id_string(pinfo->pool, auxiliary_input_object_id), value_1, value_2);
1636
0
    }
1637
0
        break;
1638
0
    case VT_AUXILIARY_CAPABILITIES:
1639
0
    {
1640
0
        if(direction == ecu_to_vt)
1641
0
        {
1642
0
            uint32_t request_type;
1643
1644
0
            proto_tree_add_item_ret_uint(tree,
1645
0
                hf_isobus_vt_auxiliarycapabilities_requesttype, tvb, offset, 1, ENC_LITTLE_ENDIAN, &request_type);
1646
1647
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",
1648
0
                val_to_str_const(request_type, auxiliary_capabilities_request_type, "Request capabilities of Unknown"));
1649
0
        }
1650
0
        else
1651
0
        {
1652
0
            uint32_t number_of_auxiliary_units, i;
1653
1654
0
            proto_tree_add_item_ret_uint(tree,
1655
0
                hf_isobus_vt_auxiliarycapabilities_numberofauxiliaryunits, tvb, offset, 1, ENC_LITTLE_ENDIAN, &number_of_auxiliary_units);
1656
0
            offset += 1;
1657
1658
0
            for(i = 0; i < number_of_auxiliary_units; i++)
1659
0
            {
1660
0
                proto_item *input_unit_item;
1661
0
                proto_tree *input_unit_subtree;
1662
0
                uint32_t number_of_different_sets, j;
1663
0
                uint64_t name;
1664
1665
0
                input_unit_subtree = proto_tree_add_subtree(tree, tvb, offset, 0, ett_isobus_vt_auxiliarycapabilities_inputunit, &input_unit_item, "Auxiliary Unit");
1666
1667
0
                proto_tree_add_item_ret_uint64(input_unit_subtree,
1668
0
                    hf_isobus_vt_auxiliarycapabilities_auxiliaryunit_name, tvb, offset, 8, ENC_LITTLE_ENDIAN, &name);
1669
0
                offset += 8;
1670
1671
0
                proto_tree_add_item_ret_uint(input_unit_subtree,
1672
0
                    hf_isobus_vt_auxiliarycapabilities_auxiliaryunit_numberofdifferentsets, tvb, offset, 1, ENC_LITTLE_ENDIAN, &number_of_different_sets);
1673
0
                offset += 1;
1674
1675
0
                proto_item_set_text(input_unit_item, "Auxiliary unit name 0x%" PRIX64, name);
1676
0
                proto_item_set_len(input_unit_item, 8 + 1 + (3 * number_of_different_sets));
1677
1678
0
                for(j = 0; j < number_of_different_sets; j++)
1679
0
                {
1680
0
                    proto_item *auxiliary_unit_set;
1681
0
                    proto_tree *preferred_function_subtree;
1682
0
                    uint32_t number_of_instances, function_attribute, assigned_attribute;
1683
1684
0
                    preferred_function_subtree = proto_tree_add_subtree(input_unit_subtree, tvb, offset, 3, ett_isobus_vt_auxiliarycapabilities_inputunit_set, &auxiliary_unit_set, "Auxiliary Unit");
1685
1686
0
                    proto_tree_add_item_ret_uint(preferred_function_subtree,
1687
0
                        hf_isobus_vt_auxiliarycapabilities_auxiliaryunit_set_numberofinstances, tvb, offset, 1, ENC_LITTLE_ENDIAN, &number_of_instances);
1688
0
                    offset += 1;
1689
1690
0
                    proto_tree_add_item_ret_uint(preferred_function_subtree,
1691
0
                        hf_isobus_vt_auxiliarycapabilities_auxiliaryunit_set_functionattribute, tvb, offset, 1, ENC_LITTLE_ENDIAN, &function_attribute);
1692
0
                    offset += 1;
1693
1694
0
                    proto_tree_add_item_ret_uint(preferred_function_subtree,
1695
0
                        hf_isobus_vt_auxiliarycapabilities_auxiliaryunit_set_assignedattribute, tvb, offset, 1, ENC_LITTLE_ENDIAN, &assigned_attribute);
1696
0
                    offset += 1;
1697
1698
0
                    proto_item_set_text(input_unit_item, "Auxiliary set containing %u instances with function attribute %u assigned to %s",
1699
0
                        number_of_instances, function_attribute, val_to_str_const(assigned_attribute, auxiliary_assigned_attributes, "unknown"));
1700
0
                }
1701
0
            }
1702
0
            col_append_str(pinfo->cinfo, COL_INFO, "Received Auxiliary Capabilities");
1703
0
        }
1704
0
    }
1705
0
        break;
1706
0
    case VT_ESC:
1707
0
        if(direction == vt_to_ecu)
1708
0
        {
1709
0
            uint32_t object_id, error_codes;
1710
1711
0
            proto_tree_add_item_ret_uint(tree,
1712
0
                hf_isobus_vt_esc_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
1713
0
            ti = proto_tree_add_item(tree,
1714
0
                hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1715
0
            proto_item_set_hidden(ti);
1716
0
            offset += 2;
1717
1718
0
            ti = proto_tree_add_item_ret_uint(tree,
1719
0
                hf_isobus_vt_esc_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
1720
0
            proto_item_append_text(ti, ": ");
1721
0
            if (error_codes & 0x01)
1722
0
                proto_item_append_text(ti, "No input field is open for input, ESC ignored ");
1723
0
            if (error_codes & 0x10)
1724
0
                proto_item_append_text(ti, "any other error ");
1725
1726
0
            if(error_codes)
1727
0
            {
1728
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "ESC successful, %s", get_object_id_string(pinfo->pool, object_id));
1729
0
            }
1730
0
            else
1731
0
            {
1732
0
                col_append_str(pinfo->cinfo, COL_INFO, "ESC error");
1733
0
            }
1734
0
        }
1735
0
        else
1736
0
        {
1737
0
            col_append_str(pinfo->cinfo, COL_INFO, "End of object pool received, object pool accepted");
1738
0
        }
1739
0
        break;
1740
0
    case VT_HIDE_SHOW_OBJECT:
1741
0
    {
1742
0
        uint32_t object_id, action;
1743
1744
0
        proto_tree_add_item_ret_uint(tree,
1745
0
            hf_isobus_vt_hideshowobj_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
1746
0
        ti = proto_tree_add_item(tree,
1747
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1748
0
        proto_item_set_hidden(ti);
1749
0
        offset += 2;
1750
1751
0
        proto_tree_add_item_ret_uint(tree,
1752
0
            hf_isobus_vt_hideshowobj_action, tvb, offset, 1, ENC_LITTLE_ENDIAN, &action);
1753
0
        offset += 1;
1754
1755
0
        if(direction == vt_to_ecu)
1756
0
        {
1757
0
            uint32_t error_codes;
1758
0
            ti = proto_tree_add_item_ret_uint(tree,
1759
0
                hf_isobus_vt_hideshowobj_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
1760
1761
0
            proto_item_append_text(ti, ": ");
1762
0
            if (error_codes & 0x01)
1763
0
                proto_item_append_text(ti, "Invalid Object ID ");
1764
0
            if (error_codes & 0x02)
1765
0
                proto_item_append_text(ti, "Invalid Value ");
1766
0
            if (error_codes & 0x04)
1767
0
                proto_item_append_text(ti, "Value in use ");
1768
0
            if (error_codes & 0x10)
1769
0
                proto_item_append_text(ti, "Any other error ");
1770
1771
0
            if(error_codes)
1772
0
            {
1773
0
                col_append_str(pinfo->cinfo, COL_INFO, "Hide Show Error");
1774
0
            }
1775
0
            else
1776
0
            {
1777
0
                switch(action)
1778
0
                {
1779
0
                case 0:
1780
0
                    col_append_fstr(pinfo->cinfo, COL_INFO, "%s is now hidden",
1781
0
                        get_object_id_string(pinfo->pool, object_id));
1782
0
                    break;
1783
0
                case 1:
1784
0
                    col_append_fstr(pinfo->cinfo, COL_INFO, "%s is now shown",
1785
0
                        get_object_id_string(pinfo->pool, object_id));
1786
0
                    break;
1787
0
                }
1788
0
            }
1789
0
        }
1790
0
        else
1791
0
        {
1792
0
            switch(action)
1793
0
            {
1794
0
            case 0:
1795
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "%s should hide",
1796
0
                    get_object_id_string(pinfo->pool, object_id));
1797
0
                break;
1798
0
            case 1:
1799
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "%s should show",
1800
0
                    get_object_id_string(pinfo->pool, object_id));
1801
0
                break;
1802
0
            }
1803
0
        }
1804
0
    }
1805
0
        break;
1806
0
    case VT_ENABLE_DISABLE_COMMAND:
1807
0
    {
1808
0
        uint32_t object_id, enable_disable;
1809
1810
0
        proto_tree_add_item_ret_uint(tree,
1811
0
            hf_isobus_vt_enabledisableobj_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
1812
0
        ti = proto_tree_add_item(tree,
1813
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1814
0
        proto_item_set_hidden(ti);
1815
0
        offset += 2;
1816
1817
0
        proto_tree_add_item_ret_uint(tree,
1818
0
            hf_isobus_vt_enabledisableobj_enabledisable, tvb, offset, 1, ENC_LITTLE_ENDIAN, &enable_disable);
1819
0
        offset += 1;
1820
1821
0
        if(direction == ecu_to_vt)
1822
0
        {
1823
0
            switch(enable_disable)
1824
0
            {
1825
0
            case 0:
1826
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "%s should disable",
1827
0
                    get_object_id_string(pinfo->pool, object_id));
1828
0
                break;
1829
0
            case 1:
1830
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "%s should enable",
1831
0
                    get_object_id_string(pinfo->pool, object_id));
1832
0
                break;
1833
0
            }
1834
0
        }
1835
0
        else
1836
0
        {
1837
0
            uint32_t error_codes;
1838
1839
0
            ti = proto_tree_add_item_ret_uint(tree,
1840
0
                hf_isobus_vt_enabledisableobj_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
1841
1842
0
            proto_item_append_text(ti, ": ");
1843
0
            if (error_codes & 0x02)
1844
0
                proto_item_append_text(ti, "Invalid Object ID ");
1845
0
            if (error_codes & 0x04)
1846
0
                proto_item_append_text(ti, "Command error ");
1847
0
            if (error_codes & 0x08)
1848
0
                proto_item_append_text(ti, "Could not complete. Operator input is active on this object. ");
1849
0
            if (error_codes & 0x10)
1850
0
                proto_item_append_text(ti, "Any other error ");
1851
1852
0
            if(error_codes)
1853
0
            {
1854
0
                col_append_str(pinfo->cinfo, COL_INFO, "Enable Disable Error");
1855
0
            }
1856
0
            else
1857
0
            {
1858
0
                switch(enable_disable)
1859
0
                {
1860
0
                case 0:
1861
0
                    col_append_fstr(pinfo->cinfo, COL_INFO, "%s is now disabled",
1862
0
                        get_object_id_string(pinfo->pool, object_id));
1863
0
                    break;
1864
0
                case 1:
1865
0
                    col_append_fstr(pinfo->cinfo, COL_INFO, "%s is now enabled",
1866
0
                        get_object_id_string(pinfo->pool, object_id));
1867
0
                    break;
1868
0
                }
1869
1870
0
            }
1871
0
        }
1872
0
    }
1873
0
        break;
1874
0
    case VT_SELECT_INPUT_OBJECT:
1875
0
    {
1876
0
        uint32_t object_id;
1877
1878
0
        proto_tree_add_item_ret_uint(tree,
1879
0
            hf_isobus_vt_selectinputobject_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
1880
0
        ti = proto_tree_add_item(tree,
1881
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1882
0
        proto_item_set_hidden(ti);
1883
0
        offset += 2;
1884
1885
0
        if(direction == ecu_to_vt)
1886
0
        {
1887
0
            proto_tree_add_item(tree,
1888
0
                hf_isobus_vt_selectinputobject_option, tvb, offset, 1, ENC_LITTLE_ENDIAN);
1889
1890
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "%s should be selected for input",
1891
0
                get_object_id_string(pinfo->pool, object_id));
1892
0
        }
1893
0
        else
1894
0
        {
1895
0
            uint32_t response, error_codes;
1896
1897
0
            proto_tree_add_item_ret_uint(tree,
1898
0
                hf_isobus_vt_selectinputobject_response, tvb, offset, 1, ENC_LITTLE_ENDIAN, &response);
1899
0
            offset += 1;
1900
1901
0
            ti = proto_tree_add_item_ret_uint(tree,
1902
0
                hf_isobus_vt_selectinputobject_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
1903
0
            proto_item_append_text(ti, ": ");
1904
0
            if (error_codes & 0x01)
1905
0
                proto_item_append_text(ti, "Object is disabled ");
1906
0
            if (error_codes & 0x02)
1907
0
                proto_item_append_text(ti, "Invalid Object ID ");
1908
0
            if (error_codes & 0x04)
1909
0
                proto_item_append_text(ti, "Object is not on the active mask or object is in a hidden container ");
1910
0
            if (error_codes & 0x08)
1911
0
                proto_item_append_text(ti, "Could not complete. Another Input field is currently being modified, or a Button or Soft Key is currently being held. ");
1912
0
            if (error_codes & 0x10)
1913
0
                proto_item_append_text(ti, "Any other error ");
1914
0
            if (error_codes & 0x20)
1915
0
                proto_item_append_text(ti, "Invalid option value ");
1916
1917
0
            if(error_codes)
1918
0
            {
1919
0
                col_append_str(pinfo->cinfo, COL_INFO, "Error while selecting input object");
1920
0
            }
1921
0
            else
1922
0
            {
1923
0
                switch(response)
1924
0
                {
1925
0
                    case 0:
1926
0
                        col_append_fstr(pinfo->cinfo, COL_INFO, "%s is not selected",
1927
0
                            get_object_id_string(pinfo->pool, object_id));
1928
0
                        break;
1929
0
                    case 1:
1930
0
                        col_append_fstr(pinfo->cinfo, COL_INFO, "%s is selected",
1931
0
                            get_object_id_string(pinfo->pool, object_id));
1932
0
                        break;
1933
0
                    case 2:
1934
0
                        col_append_fstr(pinfo->cinfo, COL_INFO, "%s is opened for edit",
1935
0
                            get_object_id_string(pinfo->pool, object_id));
1936
0
                        break;
1937
0
                }
1938
0
            }
1939
0
        }
1940
0
    }
1941
0
        break;
1942
0
    case VT_CONTROL_AUDIO_SIGNAL:
1943
0
    {
1944
0
        if(direction == ecu_to_vt)
1945
0
        {
1946
0
            uint32_t activations, frequency, ontime, offtime;
1947
1948
0
            proto_tree_add_item_ret_uint(tree,
1949
0
                hf_isobus_vt_controlaudiosignal_activations, tvb, offset, 1, ENC_LITTLE_ENDIAN, &activations);
1950
0
            offset += 1;
1951
1952
0
            proto_tree_add_item_ret_uint(tree,
1953
0
                hf_isobus_vt_controlaudiosignal_frequency, tvb, offset, 2, ENC_LITTLE_ENDIAN, &frequency);
1954
0
            offset += 2;
1955
1956
0
            proto_tree_add_item_ret_uint(tree,
1957
0
                hf_isobus_vt_controlaudiosignal_ontime, tvb, offset, 2, ENC_LITTLE_ENDIAN, &ontime);
1958
0
            offset += 2;
1959
1960
0
            proto_tree_add_item_ret_uint(tree,
1961
0
                hf_isobus_vt_controlaudiosignal_offtime, tvb, offset, 2, ENC_LITTLE_ENDIAN, &offtime);
1962
1963
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Control audio signal with %d activations of %d Hz (On-time %d ms, Off-time %d ms.)",
1964
0
                            activations, frequency, ontime, offtime);
1965
0
        }
1966
0
        else
1967
0
        {
1968
0
            uint32_t error_codes;
1969
0
            ti = proto_tree_add_item_ret_uint(tree,
1970
0
                hf_isobus_vt_controlaudiosignal_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
1971
1972
0
            proto_item_append_text(ti, ": ");
1973
0
            if (error_codes & 0x01)
1974
0
                proto_item_append_text(ti, "Audio device is busy ");
1975
0
            if (error_codes & 0x10)
1976
0
                proto_item_append_text(ti, "Any other error ");
1977
1978
0
            if(error_codes)
1979
0
            {
1980
0
                col_append_str(pinfo->cinfo, COL_INFO, "Control audio signal Error");
1981
0
            }
1982
0
            else
1983
0
            {
1984
0
                col_append_str(pinfo->cinfo, COL_INFO, "Control audio signal successful");
1985
0
            }
1986
0
        }
1987
0
    }
1988
0
        break;
1989
0
    case VT_SET_AUDIO_VOLUME:
1990
0
    {
1991
0
        if(direction == ecu_to_vt)
1992
0
        {
1993
0
            uint32_t volume;
1994
0
            proto_tree_add_item_ret_uint(tree,
1995
0
                hf_isobus_vt_setaudiovolume_volume, tvb, offset, 1, ENC_LITTLE_ENDIAN, &volume);
1996
1997
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Set audio volume to %d%%", volume);
1998
0
        }
1999
0
        else
2000
0
        {
2001
0
            uint32_t error_codes;
2002
0
            ti = proto_tree_add_item_ret_uint(tree,
2003
0
                hf_isobus_vt_setaudiovolume_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
2004
2005
0
            proto_item_append_text(ti, ": ");
2006
0
            if (error_codes & 0x01)
2007
0
                proto_item_append_text(ti, "Audio device is busy, subsequent commands use the new setting ");
2008
0
            if (error_codes & 0x02)
2009
0
                proto_item_append_text(ti, "Command is not supported ");
2010
0
            if (error_codes & 0x10)
2011
0
                proto_item_append_text(ti, "Any other error ");
2012
2013
0
            if(error_codes)
2014
0
            {
2015
0
                col_append_str(pinfo->cinfo, COL_INFO, "Set audio volume Error");
2016
0
            }
2017
0
            else
2018
0
            {
2019
0
                col_append_str(pinfo->cinfo, COL_INFO, "Set audio volume successful");
2020
0
            }
2021
0
        }
2022
0
    }
2023
0
        break;
2024
0
    case VT_CHANGE_CHILD_LOCATION:
2025
0
    {
2026
0
        uint32_t parent_object_id, object_id;
2027
2028
0
        proto_tree_add_item_ret_uint(tree,
2029
0
            hf_isobus_vt_changechildlocation_parentobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &parent_object_id);
2030
0
        ti = proto_tree_add_item(tree,
2031
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2032
0
        proto_item_set_hidden(ti);
2033
0
        offset += 2;
2034
2035
0
        proto_tree_add_item_ret_uint(tree,
2036
0
            hf_isobus_vt_changechildlocation_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
2037
0
        ti = proto_tree_add_item(tree,
2038
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2039
0
        proto_item_set_hidden(ti);
2040
0
        offset += 2;
2041
2042
0
        if(direction == ecu_to_vt)
2043
0
        {
2044
0
            uint32_t rel_x_location, rel_y_location;
2045
2046
0
            proto_tree_add_item_ret_uint(tree,
2047
0
                hf_isobus_vt_changechildlocation_relativexpos, tvb, offset, 1, ENC_LITTLE_ENDIAN, &rel_x_location);
2048
0
            offset += 1;
2049
2050
0
            proto_tree_add_item_ret_uint(tree,
2051
0
                hf_isobus_vt_changechildlocation_relativeypos, tvb, offset, 1, ENC_LITTLE_ENDIAN, &rel_y_location);
2052
2053
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Change child location of %s in %s to [%u;%u]",
2054
0
                            get_object_id_string(pinfo->pool, object_id), get_object_id_string(pinfo->pool, parent_object_id), rel_x_location, rel_y_location);
2055
0
        }
2056
0
        else
2057
0
        {
2058
0
            uint32_t error_codes;
2059
0
            ti = proto_tree_add_item_ret_uint(tree,
2060
0
                hf_isobus_vt_changechildlocation_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
2061
2062
0
            proto_item_append_text(ti, ": ");
2063
0
            if (error_codes & 0x01)
2064
0
                proto_item_append_text(ti, "Invalid Parent Object ID ");
2065
0
            if (error_codes & 0x02)
2066
0
                proto_item_append_text(ti, "Invalid Object ID ");
2067
0
            if (error_codes & 0x10)
2068
0
                proto_item_append_text(ti, "Any other error ");
2069
2070
0
            if(error_codes)
2071
0
            {
2072
0
                col_append_str(pinfo->cinfo, COL_INFO, "Change child location error");
2073
0
            }
2074
0
            else
2075
0
            {
2076
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Change child location of %s in %s succeeded",
2077
0
                    get_object_id_string(pinfo->pool, object_id), get_object_id_string(pinfo->pool, parent_object_id));
2078
0
            }
2079
0
        }
2080
0
    }
2081
0
        break;
2082
0
    case VT_CHANGE_SIZE:
2083
0
    {
2084
0
        uint32_t object_id;
2085
2086
0
        proto_tree_add_item_ret_uint(tree,
2087
0
            hf_isobus_vt_changesize_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
2088
0
        ti = proto_tree_add_item(tree,
2089
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2090
0
        proto_item_set_hidden(ti);
2091
0
        offset += 2;
2092
2093
0
        if(direction == ecu_to_vt)
2094
0
        {
2095
0
            uint32_t new_width, new_height;
2096
2097
0
            proto_tree_add_item_ret_uint(tree,
2098
0
                hf_isobus_vt_changesize_newwidth, tvb, offset, 2, ENC_LITTLE_ENDIAN, &new_width);
2099
0
            offset += 2;
2100
2101
0
            proto_tree_add_item_ret_uint(tree,
2102
0
                hf_isobus_vt_changesize_newheight, tvb, offset, 2, ENC_LITTLE_ENDIAN, &new_height);
2103
2104
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Change size of %s to %u x %u",
2105
0
                get_object_id_string(pinfo->pool, object_id), new_width, new_height);
2106
0
        }
2107
0
        else
2108
0
        {
2109
0
            uint32_t error_codes;
2110
0
            ti = proto_tree_add_item_ret_uint(tree,
2111
0
                hf_isobus_vt_changesize_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
2112
2113
0
            proto_item_append_text(ti, ": ");
2114
0
            if (error_codes & 0x01)
2115
0
                proto_item_append_text(ti, "Invalid Object ID ");
2116
0
            if (error_codes & 0x10)
2117
0
                proto_item_append_text(ti, "Any other error ");
2118
2119
0
            if(error_codes)
2120
0
            {
2121
0
                col_append_str(pinfo->cinfo, COL_INFO, "Change size error");
2122
0
            }
2123
0
            else
2124
0
            {
2125
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Change size of %s succeeded",
2126
0
                    get_object_id_string(pinfo->pool, object_id));
2127
0
            }
2128
0
        }
2129
0
    }
2130
0
        break;
2131
0
    case VT_CHANGE_BACKGROUND_COLOUR:
2132
0
    {
2133
0
        uint32_t object_id, colour;
2134
2135
0
        proto_tree_add_item_ret_uint(tree,
2136
0
            hf_isobus_vt_changebackgroundcolour_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
2137
0
        ti = proto_tree_add_item(tree,
2138
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2139
0
        proto_item_set_hidden(ti);
2140
0
        offset += 2;
2141
2142
0
        proto_tree_add_item_ret_uint(tree,
2143
0
            hf_isobus_vt_changebackgroundcolour_colour, tvb, offset, 1, ENC_LITTLE_ENDIAN, &colour);
2144
0
        offset += 1;
2145
2146
0
        if(direction == vt_to_ecu)
2147
0
        {
2148
0
            uint32_t error_codes;
2149
0
            ti = proto_tree_add_item_ret_uint(tree,
2150
0
                hf_isobus_vt_changebackgroundcolour_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
2151
2152
0
            proto_item_append_text(ti, ": ");
2153
0
            if (error_codes & 0x01)
2154
0
                proto_item_append_text(ti, "Invalid Object ID ");
2155
0
            if (error_codes & 0x02)
2156
0
                proto_item_append_text(ti, "Invalid Value ");
2157
0
            if (error_codes & 0x04)
2158
0
                proto_item_append_text(ti, "Value in use ");
2159
0
            if (error_codes & 0x10)
2160
0
                proto_item_append_text(ti, "Any other error ");
2161
2162
0
            if(error_codes)
2163
0
            {
2164
0
                col_append_str(pinfo->cinfo, COL_INFO, "Background colour change error");
2165
0
            }
2166
0
            else
2167
0
            {
2168
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Background colour of %s has changed to %s",
2169
0
                    get_object_id_string(pinfo->pool, object_id), rval_to_str_const(colour, vt_colours, "Unknown"));
2170
0
            }
2171
0
        }
2172
0
        else
2173
0
        {
2174
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Background colour of %s should change to %s",
2175
0
                get_object_id_string(pinfo->pool, object_id), rval_to_str_const(colour, vt_colours, "Unknown"));
2176
0
        }
2177
0
    }
2178
0
        break;
2179
0
    case VT_CHANGE_NUMERIC_VALUE:
2180
0
    {
2181
0
        uint32_t object_id, error_codes, value;
2182
2183
0
        proto_tree_add_item_ret_uint(tree,
2184
0
            hf_isobus_vt_chgnumval_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
2185
0
        ti = proto_tree_add_item(tree,
2186
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2187
0
        proto_item_set_hidden(ti);
2188
0
        offset += 2;
2189
2190
0
        if(direction == vt_to_ecu)
2191
0
        {
2192
0
            ti = proto_tree_add_item_ret_uint(tree,
2193
0
                hf_isobus_vt_chgnumval_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
2194
0
            proto_item_append_text(ti, ": ");
2195
0
            if (error_codes & 0x01)
2196
0
                proto_item_append_text(ti, "Invalid Object ID ");
2197
0
            if (error_codes & 0x02)
2198
0
                proto_item_append_text(ti, "Invalid Value ");
2199
0
            if (error_codes & 0x04)
2200
0
                proto_item_append_text(ti, "Value in use ");
2201
0
            if (error_codes & 0x10)
2202
0
                proto_item_append_text(ti, "Any other error ");
2203
0
        } /* no else, byte is reserved for ecu_to_vt */
2204
0
        offset += 1;
2205
2206
0
        proto_tree_add_item_ret_uint(tree,
2207
0
            hf_isobus_vt_chgnumval_value, tvb, offset, 4, ENC_LITTLE_ENDIAN, &value);
2208
2209
0
        if(direction == vt_to_ecu)
2210
0
        {
2211
0
            if(error_codes)
2212
0
            {
2213
0
                col_append_str(pinfo->cinfo, COL_INFO, "Numeric value change error");
2214
0
            }
2215
0
            else
2216
0
            {
2217
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Numeric value of %s has changed to 0x%X",
2218
0
                    get_object_id_string(pinfo->pool, object_id), value);
2219
0
            }
2220
0
        }
2221
0
        else
2222
0
        {
2223
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Numeric value of %s should change to 0x%X",
2224
0
                get_object_id_string(pinfo->pool, object_id), value);
2225
0
        }
2226
0
    }
2227
0
        break;
2228
0
    case VT_CHANGE_END_POINT:
2229
0
    {
2230
0
        uint32_t object_id;
2231
2232
0
        proto_tree_add_item_ret_uint(tree,
2233
0
            hf_isobus_vt_changeendpoint_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
2234
0
        ti = proto_tree_add_item(tree,
2235
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2236
0
        proto_item_set_hidden(ti);
2237
0
        offset += 2;
2238
2239
0
        if(direction == ecu_to_vt)
2240
0
        {
2241
0
            uint32_t width, height;
2242
2243
0
            proto_tree_add_item_ret_uint(tree,
2244
0
                hf_isobus_vt_changeendpoint_width, tvb, offset, 2, ENC_LITTLE_ENDIAN, &width);
2245
0
            offset += 2;
2246
2247
0
            proto_tree_add_item_ret_uint(tree,
2248
0
                hf_isobus_vt_changeendpoint_height, tvb, offset, 2, ENC_LITTLE_ENDIAN, &height);
2249
0
            offset += 2;
2250
2251
0
            proto_tree_add_item(tree,
2252
0
                hf_isobus_vt_changeendpoint_linedirection, tvb, offset, 1, ENC_LITTLE_ENDIAN);
2253
2254
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Change end point of line %s to width %d and height %d",
2255
0
                get_object_id_string(pinfo->pool, object_id), width, height);
2256
0
        }
2257
0
    }
2258
0
        break;
2259
0
    case VT_CHANGE_FONT_ATTRIBUTES:
2260
0
    {
2261
0
        uint32_t object_id;
2262
2263
0
        proto_tree_add_item_ret_uint(tree,
2264
0
            hf_isobus_vt_changefontattributes_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
2265
0
        ti = proto_tree_add_item(tree,
2266
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2267
0
        proto_item_set_hidden(ti);
2268
0
        offset += 2;
2269
2270
0
        if(direction == ecu_to_vt)
2271
0
        {
2272
0
            proto_tree_add_item(tree,
2273
0
                hf_isobus_vt_changefontattributes_fontcolour, tvb, offset, 1, ENC_LITTLE_ENDIAN);
2274
0
            offset += 1;
2275
2276
0
            proto_tree_add_item(tree,
2277
0
                hf_isobus_vt_changefontattributes_fontsize, tvb, offset, 1, ENC_LITTLE_ENDIAN);
2278
0
            offset += 1;
2279
2280
0
            proto_tree_add_item(tree,
2281
0
                hf_isobus_vt_changefontattributes_fonttype, tvb, offset, 1, ENC_LITTLE_ENDIAN);
2282
0
            offset += 1;
2283
2284
0
            proto_tree_add_item(tree,
2285
0
                hf_isobus_vt_changefontattributes_fontstyle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
2286
2287
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Change font attributes of %s", get_object_id_string(pinfo->pool, object_id));
2288
0
        }
2289
0
        else
2290
0
        {
2291
0
            uint32_t error_codes;
2292
2293
0
            ti = proto_tree_add_item_ret_uint(tree,
2294
0
                hf_isobus_vt_changefontattributes_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
2295
0
            proto_item_append_text(ti, ": ");
2296
0
            if (error_codes & 0x01)
2297
0
                proto_item_append_text(ti, "Invalid Object ID ");
2298
0
            if (error_codes & 0x02)
2299
0
                proto_item_append_text(ti, "Invalid colour ");
2300
0
            if (error_codes & 0x04)
2301
0
                proto_item_append_text(ti, "Invalid size ");
2302
0
            if (error_codes & 0x08)
2303
0
                proto_item_append_text(ti, "Invalid type ");
2304
0
            if (error_codes & 0x10)
2305
0
                proto_item_append_text(ti, "Invalid style ");
2306
0
            if (error_codes & 0x20)
2307
0
                proto_item_append_text(ti, "Any other error ");
2308
2309
0
            if(error_codes == 0)
2310
0
            {
2311
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Font attributes of %s successfully changed", get_object_id_string(pinfo->pool, object_id));
2312
0
            }
2313
0
            else
2314
0
            {
2315
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Error while changing font attributes of %s", get_object_id_string(pinfo->pool, object_id));
2316
0
            }
2317
0
        }
2318
0
    }
2319
0
        break;
2320
0
    case VT_CHANGE_LINE_ATTRIBUTES:
2321
0
    {
2322
0
        uint32_t object_id;
2323
2324
0
        proto_tree_add_item_ret_uint(tree,
2325
0
            hf_isobus_vt_changelineattributes_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
2326
0
        ti = proto_tree_add_item(tree,
2327
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2328
0
        proto_item_set_hidden(ti);
2329
0
        offset += 2;
2330
2331
0
        if(direction == ecu_to_vt)
2332
0
        {
2333
0
            proto_tree_add_item(tree,
2334
0
                hf_isobus_vt_changelineattributes_linecolour, tvb, offset, 1, ENC_LITTLE_ENDIAN);
2335
0
            offset += 1;
2336
2337
0
            proto_tree_add_item(tree,
2338
0
                hf_isobus_vt_changelineattributes_linewidth, tvb, offset, 1, ENC_LITTLE_ENDIAN);
2339
0
            offset += 1;
2340
2341
0
            proto_tree_add_item(tree,
2342
0
                hf_isobus_vt_changelineattributes_lineart, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2343
2344
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Change line attributes of %s", get_object_id_string(pinfo->pool, object_id));
2345
0
        }
2346
0
        else
2347
0
        {
2348
0
            uint32_t error_codes;
2349
2350
0
            ti = proto_tree_add_item_ret_uint(tree,
2351
0
                hf_isobus_vt_changelineattributes_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
2352
0
            proto_item_append_text(ti, ": ");
2353
0
            if (error_codes & 0x01)
2354
0
                proto_item_append_text(ti, "Invalid Object ID ");
2355
0
            if (error_codes & 0x02)
2356
0
                proto_item_append_text(ti, "Invalid colour ");
2357
0
            if (error_codes & 0x04)
2358
0
                proto_item_append_text(ti, "Invalid width ");
2359
0
            if (error_codes & 0x10)
2360
0
                proto_item_append_text(ti, "Any other error ");
2361
2362
0
            if(error_codes == 0)
2363
0
            {
2364
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Line attributes of %s successfully changed", get_object_id_string(pinfo->pool, object_id));
2365
0
            }
2366
0
            else
2367
0
            {
2368
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Error while changing line attributes of %s", get_object_id_string(pinfo->pool, object_id));
2369
0
            }
2370
0
        }
2371
0
    }
2372
0
        break;
2373
0
    case VT_CHANGE_FILL_ATTRIBUTES:
2374
0
    {
2375
0
        uint32_t object_id;
2376
2377
0
        proto_tree_add_item_ret_uint(tree,
2378
0
            hf_isobus_vt_changefillattributes_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
2379
0
        ti = proto_tree_add_item(tree,
2380
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2381
0
        proto_item_set_hidden(ti);
2382
0
        offset += 2;
2383
2384
0
        if(direction == ecu_to_vt)
2385
0
        {
2386
0
            proto_tree_add_item(tree,
2387
0
                hf_isobus_vt_changefillattributes_filltype, tvb, offset, 1, ENC_LITTLE_ENDIAN);
2388
0
            offset += 1;
2389
2390
0
            proto_tree_add_item(tree,
2391
0
                hf_isobus_vt_changefillattributes_fillcolour, tvb, offset, 1, ENC_LITTLE_ENDIAN);
2392
0
            offset += 1;
2393
2394
0
            proto_tree_add_item(tree,
2395
0
                hf_isobus_vt_changefillattributes_fillpatternobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2396
0
            ti = proto_tree_add_item(tree,
2397
0
                hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2398
0
            proto_item_set_hidden(ti);
2399
2400
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Change fill attributes of %s", get_object_id_string(pinfo->pool, object_id));
2401
0
        }
2402
0
        else
2403
0
        {
2404
0
            uint32_t error_codes;
2405
2406
0
            ti = proto_tree_add_item_ret_uint(tree,
2407
0
                hf_isobus_vt_changefillattributes_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
2408
0
            proto_item_append_text(ti, ": ");
2409
0
            if (error_codes & 0x01)
2410
0
                proto_item_append_text(ti, "Invalid Object ID ");
2411
0
            if (error_codes & 0x02)
2412
0
                proto_item_append_text(ti, "Invalid type ");
2413
0
            if (error_codes & 0x04)
2414
0
                proto_item_append_text(ti, "Invalid colour ");
2415
0
            if (error_codes & 0x08)
2416
0
                proto_item_append_text(ti, "Invalid pattern Object ID ");
2417
0
            if (error_codes & 0x10)
2418
0
                proto_item_append_text(ti, "Any other error ");
2419
2420
0
            if(error_codes == 0)
2421
0
            {
2422
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Fill attributes of %s successfully changed", get_object_id_string(pinfo->pool, object_id));
2423
0
            }
2424
0
            else
2425
0
            {
2426
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Error while changing fill attributes of %s", get_object_id_string(pinfo->pool, object_id));
2427
0
            }
2428
0
        }
2429
0
    }
2430
0
        break;
2431
0
    case VT_CHANGE_ACTIVE_MASK:
2432
0
    {
2433
0
        uint32_t working_set_object_id, new_active_mask_object_id, error_codes;
2434
2435
0
        if(direction == ecu_to_vt)
2436
0
        {
2437
0
            proto_tree_add_item_ret_uint(tree,
2438
0
                hf_isobus_vt_changeactivemask_workingset, tvb, offset, 2, ENC_LITTLE_ENDIAN, &working_set_object_id);
2439
0
            ti = proto_tree_add_item(tree,
2440
0
                hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2441
0
            proto_item_set_hidden(ti);
2442
0
            offset += 2;
2443
0
        }
2444
0
        else
2445
0
        {
2446
0
            working_set_object_id = 0;
2447
0
        }
2448
2449
0
        proto_tree_add_item_ret_uint(tree,
2450
0
            hf_isobus_vt_changeactivemask_newactivemask, tvb, offset, 2, ENC_LITTLE_ENDIAN, &new_active_mask_object_id);
2451
0
        ti = proto_tree_add_item(tree,
2452
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2453
0
        proto_item_set_hidden(ti);
2454
0
        offset += 2;
2455
2456
0
        if(direction == vt_to_ecu)
2457
0
        {
2458
0
            ti = proto_tree_add_item_ret_uint(tree,
2459
0
                hf_isobus_vt_changeactivemask_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
2460
0
            proto_item_append_text(ti, ": ");
2461
0
            if (error_codes & 0x01)
2462
0
                proto_item_append_text(ti, "Invalid Working Set Object ID ");
2463
0
            if (error_codes & 0x02)
2464
0
                proto_item_append_text(ti, "Invalid Mask Object ID ");
2465
0
            if (error_codes & 0x10)
2466
0
                proto_item_append_text(ti, "Any other error ");
2467
0
        }
2468
2469
0
        if(direction == ecu_to_vt)
2470
0
        {
2471
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Change active mask of working set %s to %s", get_object_id_string(pinfo->pool, working_set_object_id), get_object_id_string(pinfo->pool, new_active_mask_object_id));
2472
0
        }
2473
0
        else if(direction == vt_to_ecu)
2474
0
        {
2475
0
            if(error_codes == 0)
2476
0
            {
2477
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Active mask successfully changed to %s", get_object_id_string(pinfo->pool, new_active_mask_object_id));
2478
0
            }
2479
0
            else
2480
0
            {
2481
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Error while changing active mask to %s", get_object_id_string(pinfo->pool, new_active_mask_object_id));
2482
0
            }
2483
0
        }
2484
0
    }
2485
0
        break;
2486
0
    case VT_CHANGE_SOFT_KEY_MASK:
2487
0
    {
2488
0
        uint32_t error_codes, data_mask_object_id, new_soft_key_mask_object_id;
2489
2490
0
        if(direction == ecu_to_vt)
2491
0
        {
2492
0
            proto_tree_add_item(tree,
2493
0
                hf_isobus_vt_changesoftkeymask_masktype, tvb, offset, 1, ENC_LITTLE_ENDIAN);
2494
0
            offset += 1;
2495
0
        }
2496
2497
0
        proto_tree_add_item_ret_uint(tree,
2498
0
            hf_isobus_vt_changesoftkeymask_datamaskobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &data_mask_object_id);
2499
0
        ti = proto_tree_add_item(tree,
2500
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2501
0
        proto_item_set_hidden(ti);
2502
0
        offset += 2;
2503
2504
0
        proto_tree_add_item_ret_uint(tree,
2505
0
            hf_isobus_vt_changesoftkeymask_newsoftkeymaskobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &new_soft_key_mask_object_id);
2506
0
        ti = proto_tree_add_item(tree,
2507
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2508
0
        proto_item_set_hidden(ti);
2509
0
        offset += 2;
2510
2511
0
        if(direction == vt_to_ecu)
2512
0
        {
2513
0
            ti = proto_tree_add_item_ret_uint(tree,
2514
0
                hf_isobus_vt_changesoftkeymask_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
2515
0
            proto_item_append_text(ti, ": ");
2516
0
            if (error_codes & 0x01)
2517
0
                proto_item_append_text(ti, "Invalid Data or Alarm Mask Object ID ");
2518
0
            if (error_codes & 0x02)
2519
0
                proto_item_append_text(ti, "Invalid Soft Key Mask Object ID ");
2520
0
            if (error_codes & 0x04)
2521
0
                proto_item_append_text(ti, "Missing Objects ");
2522
0
            if (error_codes & 0x08)
2523
0
                proto_item_append_text(ti, "Mask or child object has errors ");
2524
0
            if (error_codes & 0x10)
2525
0
                proto_item_append_text(ti, "Any other error ");
2526
0
        }
2527
2528
0
        if(direction == ecu_to_vt)
2529
0
        {
2530
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Soft key mask of %s should change to %s", get_object_id_string(pinfo->pool, data_mask_object_id), get_object_id_string(pinfo->pool, new_soft_key_mask_object_id));
2531
0
        }
2532
0
        else if(direction == vt_to_ecu)
2533
0
        {
2534
0
            if(error_codes == 0)
2535
0
            {
2536
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Soft key mask of %s successfully changed to %s", get_object_id_string(pinfo->pool, data_mask_object_id), get_object_id_string(pinfo->pool, new_soft_key_mask_object_id));
2537
0
            }
2538
0
            else
2539
0
            {
2540
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Error while changing soft key mask of %s to %s", get_object_id_string(pinfo->pool, data_mask_object_id), get_object_id_string(pinfo->pool, new_soft_key_mask_object_id));
2541
0
            }
2542
0
        }
2543
0
    }
2544
0
        break;
2545
0
    case VT_CHANGE_ATTRIBUTES:
2546
0
    {
2547
0
        uint32_t attribute_id, error_codes, object_id, new_value;
2548
2549
0
        proto_tree_add_item_ret_uint(tree,
2550
0
            hf_isobus_vt_changeattributes_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
2551
0
        ti = proto_tree_add_item(tree,
2552
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2553
0
        proto_item_set_hidden(ti);
2554
0
        offset += 2;
2555
2556
0
        proto_tree_add_item_ret_uint(tree,
2557
0
            hf_isobus_vt_changeattributes_attributeid, tvb, offset, 1, ENC_LITTLE_ENDIAN, &attribute_id);
2558
0
        offset += 1;
2559
2560
0
        if(direction == ecu_to_vt)
2561
0
        {
2562
0
            proto_tree_add_item_ret_uint(tree,
2563
0
                hf_isobus_vt_changeattributes_newvalue, tvb, offset, 4, ENC_LITTLE_ENDIAN, &new_value);
2564
0
        }
2565
0
        else if(direction == vt_to_ecu)
2566
0
        {
2567
0
            ti = proto_tree_add_item_ret_uint(tree,
2568
0
                hf_isobus_vt_changeattributes_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
2569
0
            proto_item_append_text(ti, ": ");
2570
0
            if (error_codes & 0x01)
2571
0
                proto_item_append_text(ti, "Invalid Object ID ");
2572
0
            if (error_codes & 0x02)
2573
0
                proto_item_append_text(ti, "Invalid Attribute ID ");
2574
0
            if (error_codes & 0x04)
2575
0
                proto_item_append_text(ti, "Invalid Value ");
2576
0
            if (error_codes & 0x08)
2577
0
                proto_item_append_text(ti, "Value in use ");
2578
0
            if (error_codes & 0x10)
2579
0
                proto_item_append_text(ti, "Any other error ");
2580
0
        }
2581
2582
0
        if(direction == ecu_to_vt)
2583
0
        {
2584
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Attribute ID %u of %s should change to 0x%X", attribute_id, get_object_id_string(pinfo->pool, object_id), new_value);
2585
0
        }
2586
0
        else if(direction == vt_to_ecu)
2587
0
        {
2588
0
            if(error_codes)
2589
0
            {
2590
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Error while changing Attribute ID %u of %s", attribute_id, get_object_id_string(pinfo->pool, object_id));
2591
0
            }
2592
0
            else
2593
0
            {
2594
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Attribute ID %u of %s has successfully changed", attribute_id, get_object_id_string(pinfo->pool, object_id));
2595
0
            }
2596
0
        }
2597
0
    }
2598
0
        break;
2599
0
    case VT_CHANGE_PRIORITY:
2600
0
    {
2601
0
        uint32_t object_id, new_priority, error_codes;
2602
2603
0
        proto_tree_add_item_ret_uint(tree,
2604
0
            hf_isobus_vt_changepriority_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
2605
0
        ti = proto_tree_add_item(tree,
2606
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2607
0
        proto_item_set_hidden(ti);
2608
0
        offset += 2;
2609
2610
0
        proto_tree_add_item_ret_uint(tree,
2611
0
            hf_isobus_vt_changepriority_newpriority, tvb, offset, 1, ENC_LITTLE_ENDIAN, &new_priority);
2612
0
        offset += 1;
2613
2614
0
        if(direction == vt_to_ecu)
2615
0
        {
2616
0
            ti = proto_tree_add_item_ret_uint(tree,
2617
0
                hf_isobus_vt_changepriority_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
2618
0
            proto_item_append_text(ti, ": ");
2619
0
            if (error_codes & 0x01)
2620
0
                proto_item_append_text(ti, "Invalid Object ID ");
2621
0
            if (error_codes & 0x02)
2622
0
                proto_item_append_text(ti, "Invalid priority ");
2623
0
            if (error_codes & 0x10)
2624
0
                proto_item_append_text(ti, "Any other error ");
2625
0
        }
2626
2627
0
        if(direction == ecu_to_vt)
2628
0
        {
2629
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Priority of alarm mask with %s should change to %u", get_object_id_string(pinfo->pool, object_id), new_priority);
2630
0
        }
2631
0
        else if(direction == vt_to_ecu)
2632
0
        {
2633
0
            if(error_codes)
2634
0
            {
2635
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Error while changing priority of alarm mask with %s to %u", get_object_id_string(pinfo->pool, object_id), new_priority);
2636
0
            }
2637
0
            else
2638
0
            {
2639
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Priority of alarm mask with %s has successfully changed to %u", get_object_id_string(pinfo->pool, object_id), new_priority);
2640
0
            }
2641
0
        }
2642
0
    }
2643
0
        break;
2644
0
    case VT_CHANGE_LIST_ITEM:
2645
0
    {
2646
0
        uint32_t list_object_id, new_object_id, list_index, error_codes;
2647
2648
0
        proto_tree_add_item_ret_uint(tree,
2649
0
            hf_isobus_vt_changelistitem_listobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &list_object_id);
2650
0
        ti = proto_tree_add_item(tree,
2651
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2652
0
        proto_item_set_hidden(ti);
2653
0
        offset += 2;
2654
2655
0
        proto_tree_add_item_ret_uint(tree,
2656
0
            hf_isobus_vt_changelistitem_listindex, tvb, offset, 1, ENC_LITTLE_ENDIAN, &list_index);
2657
0
        offset += 1;
2658
2659
0
        proto_tree_add_item_ret_uint(tree,
2660
0
            hf_isobus_vt_changelistitem_newobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &new_object_id);
2661
0
        ti = proto_tree_add_item(tree,
2662
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2663
0
        proto_item_set_hidden(ti);
2664
0
        offset += 2;
2665
2666
0
        if(direction == vt_to_ecu)
2667
0
        {
2668
0
            ti = proto_tree_add_item_ret_uint(tree,
2669
0
                hf_isobus_vt_changelistitem_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
2670
0
            proto_item_append_text(ti, ": ");
2671
0
            if (error_codes & 0x01)
2672
0
                proto_item_append_text(ti, "Invalid Input List object ID or Output List object ID, Animation object, External Object Definition object ");
2673
0
            if (error_codes & 0x02)
2674
0
                proto_item_append_text(ti, "Invalid List Index ");
2675
0
            if (error_codes & 0x04)
2676
0
                proto_item_append_text(ti, "Invalid New List Item Object ID ");
2677
0
            if (error_codes & 0x08)
2678
0
                proto_item_append_text(ti, "Value in user ");
2679
0
            if (error_codes & 0x10)
2680
0
                proto_item_append_text(ti, "Any other error ");
2681
0
        }
2682
2683
0
        if(direction == ecu_to_vt)
2684
0
        {
2685
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "%s should be added to list %s at index %u", get_object_id_string(pinfo->pool, new_object_id), get_object_id_string(pinfo->pool, list_object_id), list_index);
2686
0
        }
2687
0
        else if(direction == vt_to_ecu)
2688
0
        {
2689
0
            if(error_codes)
2690
0
            {
2691
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Error while adding %s to list %s at index %u", get_object_id_string(pinfo->pool, new_object_id), get_object_id_string(pinfo->pool, list_object_id), list_index);
2692
0
            }
2693
0
            else
2694
0
            {
2695
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "%s was successfully added to %s at index %u", get_object_id_string(pinfo->pool, new_object_id), get_object_id_string(pinfo->pool, list_object_id), list_index);
2696
0
            }
2697
0
        }
2698
0
    }
2699
0
        break;
2700
0
    case VT_DELETE_OBJECT_POOL:
2701
0
    {
2702
0
        if(direction == ecu_to_vt)
2703
0
        {
2704
0
            col_append_str(pinfo->cinfo, COL_INFO, "Object pool should be deleted from volatile memory");
2705
0
        }
2706
0
        else
2707
0
        {
2708
0
            uint32_t error_codes;
2709
2710
0
            ti = proto_tree_add_item_ret_uint(tree,
2711
0
                hf_isobus_vt_deleteobjectpool_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
2712
0
            proto_item_append_text(ti, ": ");
2713
0
            if (error_codes & 0x01)
2714
0
                proto_item_append_text(ti, "Deletion Error ");
2715
0
            if (error_codes & 0x10)
2716
0
                proto_item_append_text(ti, "Any other error ");
2717
2718
0
            if(error_codes)
2719
0
            {
2720
0
                col_append_str(pinfo->cinfo, COL_INFO, "Error while deleting object pool from volatile memory");
2721
0
            }
2722
0
            else
2723
0
            {
2724
0
                col_append_str(pinfo->cinfo, COL_INFO, "Object pool was successfully deleted from volatile memory");
2725
0
            }
2726
0
        }
2727
0
    }
2728
0
        break;
2729
0
    case VT_CHANGE_STRING_VALUE:
2730
0
    {
2731
0
        if(direction == ecu_to_vt)
2732
0
        {
2733
0
            unsigned encoding = ENC_ASCII|ENC_NA;
2734
0
            uint32_t object_id, str_length;
2735
0
            uint16_t firstTwoBytesString;
2736
0
            const uint8_t* value;
2737
0
            unsigned bomOffset = 0;
2738
2739
0
            proto_tree_add_item_ret_uint(tree,
2740
0
                hf_isobus_vt_chgstrval_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
2741
0
            ti = proto_tree_add_item(tree,
2742
0
                hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2743
0
            proto_item_set_hidden(ti);
2744
0
            offset += 2;
2745
2746
0
            proto_tree_add_item_ret_uint(tree,
2747
0
                hf_isobus_vt_chgstrval_length, tvb, offset, 2, ENC_LITTLE_ENDIAN, &str_length);
2748
0
            offset += 2;
2749
2750
0
            firstTwoBytesString = tvb_get_letohs(tvb,offset);
2751
0
            if(firstTwoBytesString == 0xFEFF)
2752
0
            {
2753
0
                encoding = ENC_UCS_2|ENC_LITTLE_ENDIAN;
2754
0
                bomOffset = 2;
2755
0
            }
2756
2757
0
            proto_tree_add_item_ret_string(tree,
2758
0
                hf_isobus_vt_chgstrval_value, tvb, offset + bomOffset, str_length - bomOffset, encoding, pinfo->pool, &value);
2759
2760
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "String value of %s should change to %s",
2761
0
                get_object_id_string(pinfo->pool, object_id), value);
2762
0
        }
2763
0
        else
2764
0
        {
2765
0
            uint32_t object_id, error_codes;
2766
2767
0
            offset += 2;    /*first two bytes are reserved*/
2768
2769
0
            proto_tree_add_item_ret_uint(tree,
2770
0
                hf_isobus_vt_chgstrval_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
2771
0
            ti = proto_tree_add_item(tree,
2772
0
                hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2773
0
            proto_item_set_hidden(ti);
2774
0
            offset += 2;
2775
2776
0
            ti = proto_tree_add_item_ret_uint(tree,
2777
0
                hf_isobus_vt_chgstrval_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
2778
2779
0
            proto_item_append_text(ti, ": ");
2780
0
            if (error_codes & 0x02)
2781
0
                proto_item_append_text(ti, "Invalid Object ID ");
2782
0
            if (error_codes & 0x04)
2783
0
                proto_item_append_text(ti, "String too long ");
2784
0
            if (error_codes & 0x08)
2785
0
                proto_item_append_text(ti, "Any other error ");
2786
0
            if (error_codes & 0x10)
2787
0
                proto_item_append_text(ti, "Value in use ");
2788
2789
0
            if(error_codes)
2790
0
            {
2791
0
                col_append_str(pinfo->cinfo, COL_INFO, "String value change error");
2792
0
            }
2793
0
            else
2794
0
            {
2795
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "String value of %s has changed",
2796
0
                    get_object_id_string(pinfo->pool, object_id));
2797
0
            }
2798
0
        }
2799
0
    }
2800
0
        break;
2801
0
    case VT_CHANGE_CHILD_POSITION:
2802
0
    {
2803
0
        uint32_t parent_object_id, object_id;
2804
2805
0
        proto_tree_add_item_ret_uint(tree,
2806
0
            hf_isobus_vt_changechildposition_parentobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &parent_object_id);
2807
0
        ti = proto_tree_add_item(tree,
2808
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2809
0
        proto_item_set_hidden(ti);
2810
0
        offset += 2;
2811
2812
2813
0
        proto_tree_add_item_ret_uint(tree,
2814
0
            hf_isobus_vt_changechildposition_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
2815
0
        ti = proto_tree_add_item(tree,
2816
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2817
0
        proto_item_set_hidden(ti);
2818
0
        offset += 2;
2819
2820
0
        if(direction == ecu_to_vt)
2821
0
        {
2822
0
            uint32_t rel_x_position, rel_y_position;
2823
2824
0
            proto_tree_add_item_ret_uint(tree,
2825
0
                hf_isobus_vt_changechildposition_xpos, tvb, offset, 2, ENC_LITTLE_ENDIAN, &rel_x_position);
2826
0
            offset += 2;
2827
2828
0
            proto_tree_add_item_ret_uint(tree,
2829
0
                hf_isobus_vt_changechildposition_ypos, tvb, offset, 2, ENC_LITTLE_ENDIAN, &rel_y_position);
2830
2831
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Change child position of %s in %s to [%u:%u]",
2832
0
                get_object_id_string(pinfo->pool, object_id), get_object_id_string(pinfo->pool, parent_object_id), rel_x_position, rel_y_position);
2833
0
        }
2834
0
        else
2835
0
        {
2836
0
            uint32_t error_codes;
2837
0
            ti = proto_tree_add_item_ret_uint(tree,
2838
0
                hf_isobus_vt_changechildposition_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
2839
2840
0
            proto_item_append_text(ti, ": ");
2841
0
            if (error_codes & 0x01)
2842
0
                proto_item_append_text(ti, "Invalid Parent Object ID ");
2843
0
            if (error_codes & 0x02)
2844
0
                proto_item_append_text(ti, "Invalid Object ID ");
2845
0
            if (error_codes & 0x10)
2846
0
                proto_item_append_text(ti, "Any other error ");
2847
2848
0
            if(error_codes)
2849
0
            {
2850
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Error while changing child position of %s", get_object_id_string(pinfo->pool, object_id));
2851
0
            }
2852
0
            else
2853
0
            {
2854
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Change child position of %s in %s succeeded",
2855
0
                    get_object_id_string(pinfo->pool, object_id), get_object_id_string(pinfo->pool, parent_object_id));
2856
0
            }
2857
0
        }
2858
0
    }
2859
0
        break;
2860
0
    case VT_CHANGE_OBJECT_LABEL:
2861
0
    {
2862
0
        if(direction == ecu_to_vt)
2863
0
        {
2864
0
            uint32_t object_id, string_object_id;
2865
2866
0
            proto_tree_add_item_ret_uint(tree,
2867
0
                hf_isobus_vt_changeobjectlabel_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
2868
0
            ti = proto_tree_add_item(tree,
2869
0
                hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2870
0
            proto_item_set_hidden(ti);
2871
0
            offset += 2;
2872
2873
0
            proto_tree_add_item_ret_uint(tree,
2874
0
                hf_isobus_vt_changeobjectlabel_stringobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &string_object_id);
2875
0
            ti = proto_tree_add_item(tree,
2876
0
                hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2877
0
            proto_item_set_hidden(ti);
2878
0
            offset += 2;
2879
2880
0
            proto_tree_add_item(tree,
2881
0
                hf_isobus_vt_changeobjectlabel_fonttype, tvb, offset, 1, ENC_LITTLE_ENDIAN);
2882
0
            offset += 1;
2883
2884
0
            proto_tree_add_item(tree,
2885
0
                hf_isobus_vt_changeobjectlabel_graphicobjectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2886
0
            ti = proto_tree_add_item(tree,
2887
0
                hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2888
0
            proto_item_set_hidden(ti);
2889
2890
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Change object label of %s to string %s",
2891
0
                            get_object_id_string(pinfo->pool, object_id), get_object_id_string(pinfo->pool, string_object_id));
2892
0
        }
2893
0
        else
2894
0
        {
2895
0
            uint32_t error_codes;
2896
0
            ti = proto_tree_add_item_ret_uint(tree,
2897
0
                hf_isobus_vt_changeobjectlabel_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
2898
2899
0
            proto_item_append_text(ti, ": ");
2900
0
            if (error_codes & 0x01)
2901
0
                proto_item_append_text(ti, "Invalid object id ");
2902
0
            if (error_codes & 0x02)
2903
0
                proto_item_append_text(ti, "Invalid String Variable object id ");
2904
0
            if (error_codes & 0x04)
2905
0
                proto_item_append_text(ti, "Invalid font type ");
2906
0
            if (error_codes & 0x08)
2907
0
                proto_item_append_text(ti, "No Object Label Reference List object available in object pool ");
2908
0
            if (error_codes & 0x10)
2909
0
                proto_item_append_text(ti, "Designator references invalid objects ");
2910
0
            if (error_codes & 0x20)
2911
0
                proto_item_append_text(ti, "Any other error ");
2912
2913
0
            if(error_codes)
2914
0
            {
2915
0
                col_append_str(pinfo->cinfo, COL_INFO, "Error while changing object label");
2916
0
            }
2917
0
            else
2918
0
            {
2919
0
                col_append_str(pinfo->cinfo, COL_INFO, "Object label successfully changed");
2920
0
            }
2921
0
        }
2922
0
    }
2923
0
        break;
2924
0
    case VT_CHANGE_POLYGON_POINT:
2925
0
    {
2926
0
        uint32_t object_id;
2927
2928
0
        proto_tree_add_item_ret_uint(tree,
2929
0
            hf_isobus_vt_changepolygonpoint_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
2930
0
        ti = proto_tree_add_item(tree,
2931
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2932
0
        proto_item_set_hidden(ti);
2933
0
        offset += 2;
2934
2935
0
        if(direction == ecu_to_vt)
2936
0
        {
2937
0
            uint32_t x_value, y_value, point_index;
2938
2939
0
            proto_tree_add_item_ret_uint(tree,
2940
0
                hf_isobus_vt_changepolygonpoint_pointindex, tvb, offset, 1, ENC_LITTLE_ENDIAN, &point_index);
2941
0
            offset += 1;
2942
2943
0
            proto_tree_add_item_ret_uint(tree,
2944
0
                hf_isobus_vt_changepolygonpoint_xvalue, tvb, offset, 2, ENC_LITTLE_ENDIAN, &x_value);
2945
0
            offset += 2;
2946
2947
0
            proto_tree_add_item_ret_uint(tree,
2948
0
                hf_isobus_vt_changepolygonpoint_yvalue, tvb, offset, 2, ENC_LITTLE_ENDIAN, &y_value);
2949
2950
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Change point %u of polygon %s to location [%u:%u] ",
2951
0
                point_index, get_object_id_string(pinfo->pool, object_id), x_value, y_value);
2952
0
        }
2953
0
        else
2954
0
        {
2955
0
            uint32_t error_codes;
2956
0
            ti = proto_tree_add_item_ret_uint(tree,
2957
0
                hf_isobus_vt_changepolygonpoint_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
2958
0
            proto_item_append_text(ti, ": ");
2959
0
            if (error_codes & 0x01)
2960
0
                proto_item_append_text(ti, "Invalid Object ID ");
2961
0
            if (error_codes & 0x02)
2962
0
                proto_item_append_text(ti, "Invalid point index ");
2963
0
            if (error_codes & 0x04)
2964
0
                proto_item_append_text(ti, "Any other error ");
2965
2966
0
            if(error_codes)
2967
0
            {
2968
0
                col_append_str(pinfo->cinfo, COL_INFO, "Error while changing polygon point");
2969
0
            }
2970
0
            else
2971
0
            {
2972
0
                col_append_str(pinfo->cinfo, COL_INFO, "Polygon point successfully changed");
2973
0
            }
2974
0
        }
2975
0
    }
2976
0
        break;
2977
0
    case VT_CHANGE_POLYGON_SCALE:
2978
0
    {
2979
0
        uint32_t object_id, new_width, new_height, error_codes;
2980
2981
0
        proto_tree_add_item_ret_uint(tree,
2982
0
            hf_isobus_vt_changepolygonscale_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
2983
0
        ti = proto_tree_add_item(tree,
2984
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2985
0
        proto_item_set_hidden(ti);
2986
0
        offset += 2;
2987
2988
0
        proto_tree_add_item_ret_uint(tree,
2989
0
            hf_isobus_vt_changepolygonscale_newwidth, tvb, offset, 2, ENC_LITTLE_ENDIAN, &new_width);
2990
0
        offset += 2;
2991
2992
0
        proto_tree_add_item_ret_uint(tree,
2993
0
            hf_isobus_vt_changepolygonscale_newheight, tvb, offset, 2, ENC_LITTLE_ENDIAN, &new_height);
2994
0
        offset += 2;
2995
2996
0
        if(direction == vt_to_ecu)
2997
0
        {
2998
0
            ti = proto_tree_add_item_ret_uint(tree,
2999
0
                hf_isobus_vt_changepolygonscale_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
3000
0
            proto_item_append_text(ti, ": ");
3001
0
            if (error_codes & 0x01)
3002
0
                proto_item_append_text(ti, "Invalid Object ID ");
3003
0
            if (error_codes & 0x10)
3004
0
                proto_item_append_text(ti, "Any other error ");
3005
0
        }
3006
3007
0
        if(direction == ecu_to_vt)
3008
0
        {
3009
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Change scale of polygon %s to width %u and height %u ",
3010
0
                get_object_id_string(pinfo->pool, object_id), new_width, new_height);
3011
0
        }
3012
0
        else if(direction == vt_to_ecu)
3013
0
        {
3014
0
            if(error_codes)
3015
0
            {
3016
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Error while changing scale of polygon %s to width %u and height %u ",
3017
0
                    get_object_id_string(pinfo->pool, object_id), new_width, new_height);
3018
0
            }
3019
0
            else
3020
0
            {
3021
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Scale of polygon %s scale successfully changed to width %u and height %u ",
3022
0
                    get_object_id_string(pinfo->pool, object_id), new_width, new_height);
3023
0
            }
3024
0
        }
3025
0
    }
3026
0
        break;
3027
0
    case VT_GRAPHICS_CONTEXT:
3028
0
    {
3029
0
        uint32_t object_id, sub_command_id;
3030
3031
0
        proto_tree_add_item_ret_uint(tree,
3032
0
            hf_isobus_vt_graphicscontext_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
3033
0
        ti = proto_tree_add_item(tree,
3034
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3035
0
        proto_item_set_hidden(ti);
3036
0
        offset += 2;
3037
3038
0
        proto_tree_add_item_ret_uint(tree,
3039
0
            hf_isobus_vt_graphicscontext_subcommandid, tvb, offset, 1, ENC_LITTLE_ENDIAN, &sub_command_id);
3040
0
        offset += 1;
3041
3042
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "Graphic Context of %s: ", get_object_id_string(pinfo->pool, object_id));
3043
3044
0
        switch(sub_command_id)
3045
0
        {
3046
0
            case SET_GRAPHICS_CURSOR:
3047
0
            {
3048
0
                int32_t x_position, y_position;
3049
3050
0
                proto_tree_add_item_ret_int(tree,
3051
0
                    hf_isobus_vt_graphicscontext_setgraphicscursor_xposition, tvb, offset, 2, ENC_LITTLE_ENDIAN, &x_position);
3052
0
                offset += 2;
3053
3054
0
                proto_tree_add_item_ret_int(tree,
3055
0
                    hf_isobus_vt_graphicscontext_setgraphicscursor_yposition, tvb, offset, 2, ENC_LITTLE_ENDIAN, &y_position);
3056
3057
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Set Graphics Cursor to Position [%d;%d] ",
3058
0
                    x_position, y_position);
3059
0
            }
3060
0
                break;
3061
0
            case MOVE_GRAPHICS_CURSOR:
3062
0
            {
3063
0
                int32_t x_offset, y_offset;
3064
3065
0
                proto_tree_add_item_ret_int(tree,
3066
0
                    hf_isobus_vt_graphicscontext_movegraphicscursor_xoffset, tvb, offset, 2, ENC_LITTLE_ENDIAN, &x_offset);
3067
0
                offset += 2;
3068
3069
0
                proto_tree_add_item_ret_int(tree,
3070
0
                    hf_isobus_vt_graphicscontext_movegraphicscursor_yoffset, tvb, offset, 2, ENC_LITTLE_ENDIAN, &y_offset);
3071
3072
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Move Graphics Cursor by Offset [%d;%d] ",
3073
0
                    x_offset, y_offset);
3074
0
            }
3075
0
                break;
3076
0
            case SET_FOREGROUND_COLOUR:
3077
0
            {
3078
0
                uint32_t colour;
3079
3080
0
                proto_tree_add_item_ret_uint(tree,
3081
0
                    hf_isobus_vt_graphicscontext_setforegroundcolour_colour, tvb, offset, 1, ENC_LITTLE_ENDIAN, &colour);
3082
3083
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Set Foreground Colour to %u",
3084
0
                    colour);
3085
0
            }
3086
0
                break;
3087
0
            case SET_BACKGROUND_COLOUR:
3088
0
            {
3089
0
                uint32_t colour;
3090
3091
0
                proto_tree_add_item_ret_uint(tree,
3092
0
                    hf_isobus_vt_graphicscontext_setbackgroundcolour_colour, tvb, offset, 1, ENC_LITTLE_ENDIAN, &colour);
3093
3094
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Set Background Colour to %u",
3095
0
                    colour);
3096
0
            }
3097
0
                break;
3098
0
            case SET_LINE_ATTRIBUTES_OBJECT_ID:
3099
0
            {
3100
0
                uint32_t line_attr_object_id;
3101
3102
0
                proto_tree_add_item_ret_uint(tree,
3103
0
                    hf_isobus_vt_graphicscontext_setlineattributesobjectid_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &line_attr_object_id);
3104
0
                ti = proto_tree_add_item(tree,
3105
0
                    hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3106
0
                proto_item_set_hidden(ti);
3107
3108
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Set Line Attributes to %s",
3109
0
                    get_object_id_string(pinfo->pool, line_attr_object_id));
3110
0
            }
3111
0
                break;
3112
0
            case SET_FILL_ATTRIBUTES_OBJECT_ID:
3113
0
            {
3114
0
                uint32_t fill_attr_object_id;
3115
3116
0
                proto_tree_add_item_ret_uint(tree,
3117
0
                    hf_isobus_vt_graphicscontext_setfillattributesobjectid_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &fill_attr_object_id);
3118
0
                ti = proto_tree_add_item(tree,
3119
0
                    hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3120
0
                proto_item_set_hidden(ti);
3121
3122
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Set Fill Attributes to %s",
3123
0
                    get_object_id_string(pinfo->pool, fill_attr_object_id));
3124
0
            }
3125
0
                break;
3126
0
            case SET_FONT_ATTRIBUTES_OBJECT_ID:
3127
0
            {
3128
0
                uint32_t font_attr_object_id;
3129
3130
0
                proto_tree_add_item_ret_uint(tree,
3131
0
                    hf_isobus_vt_graphicscontext_setfontattributesobjectid_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &font_attr_object_id);
3132
0
                ti = proto_tree_add_item(tree,
3133
0
                    hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3134
0
                proto_item_set_hidden(ti);
3135
3136
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Set Font Attributes to %s",
3137
0
                    get_object_id_string(pinfo->pool, font_attr_object_id));
3138
0
            }
3139
0
                break;
3140
0
            case ERASE_RECTANGLE:
3141
0
            {
3142
0
                uint32_t width, height;
3143
3144
0
                proto_tree_add_item_ret_uint(tree,
3145
0
                    hf_isobus_vt_graphicscontext_eraserectangle_width, tvb, offset, 2, ENC_LITTLE_ENDIAN, &width);
3146
0
                offset += 2;
3147
3148
0
                proto_tree_add_item_ret_uint(tree,
3149
0
                    hf_isobus_vt_graphicscontext_eraserectangle_height, tvb, offset, 2, ENC_LITTLE_ENDIAN, &height);
3150
3151
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Erase Rectangle width %u height %u",
3152
0
                    width, height);
3153
0
            }
3154
0
                break;
3155
0
            case DRAW_POINT:
3156
0
            {
3157
0
                int32_t x_offset, y_offset;
3158
3159
0
                proto_tree_add_item_ret_int(tree,
3160
0
                    hf_isobus_vt_graphicscontext_drawpoint_xoffset, tvb, offset, 2, ENC_LITTLE_ENDIAN, &x_offset);
3161
0
                offset += 2;
3162
3163
0
                proto_tree_add_item_ret_int(tree,
3164
0
                    hf_isobus_vt_graphicscontext_drawpoint_yoffset, tvb, offset, 2, ENC_LITTLE_ENDIAN, &y_offset);
3165
3166
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Draw point at graphics cursor with offset [%d;%d] ",
3167
0
                    x_offset, y_offset);
3168
0
            }
3169
0
                break;
3170
0
            case DRAW_LINE:
3171
0
            {
3172
0
                int32_t x_offset, y_offset;
3173
3174
0
                proto_tree_add_item_ret_int(tree,
3175
0
                    hf_isobus_vt_graphicscontext_drawline_xoffset, tvb, offset, 2, ENC_LITTLE_ENDIAN, &x_offset);
3176
0
                offset += 2;
3177
3178
0
                proto_tree_add_item_ret_int(tree,
3179
0
                    hf_isobus_vt_graphicscontext_drawline_yoffset, tvb, offset, 2, ENC_LITTLE_ENDIAN, &y_offset);
3180
3181
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Draw line from graphics cursor to offset [%d;%d] ",
3182
0
                    x_offset, y_offset);
3183
0
            }
3184
0
                break;
3185
0
            case DRAW_RECTANGLE:
3186
0
            {
3187
0
                uint32_t width, height;
3188
3189
0
                proto_tree_add_item_ret_uint(tree,
3190
0
                    hf_isobus_vt_graphicscontext_drawrectangle_width, tvb, offset, 2, ENC_LITTLE_ENDIAN, &width);
3191
0
                offset += 2;
3192
3193
0
                proto_tree_add_item_ret_uint(tree,
3194
0
                    hf_isobus_vt_graphicscontext_drawrectangle_height, tvb, offset, 2, ENC_LITTLE_ENDIAN, &height);
3195
3196
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Draw Rectangle width %u height %u",
3197
0
                    width, height);
3198
0
            }
3199
0
                break;
3200
0
            case DRAW_CLOSED_ELLIPSE:
3201
0
            {
3202
0
                uint32_t width, height;
3203
3204
0
                proto_tree_add_item_ret_uint(tree,
3205
0
                    hf_isobus_vt_graphicscontext_drawclosedellipse_width, tvb, offset, 2, ENC_LITTLE_ENDIAN, &width);
3206
0
                offset += 2;
3207
3208
0
                proto_tree_add_item_ret_uint(tree,
3209
0
                    hf_isobus_vt_graphicscontext_drawclosedellipse_height, tvb, offset, 2, ENC_LITTLE_ENDIAN, &height);
3210
3211
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Draw Closed Ellipse width %u height %u",
3212
0
                    width, height);
3213
0
            }
3214
0
                break;
3215
0
            case DRAW_POLYGON:
3216
0
            {
3217
0
                uint32_t number_of_points, i;
3218
3219
0
                proto_tree_add_item_ret_uint(tree,
3220
0
                    hf_isobus_vt_graphicscontext_drawpolygon_numberofpoints, tvb, offset, 1, ENC_LITTLE_ENDIAN, &number_of_points);
3221
0
                offset += 1;
3222
3223
0
                for(i = 0; i < number_of_points; i++)
3224
0
                {
3225
0
                    proto_item *point_item;
3226
0
                    proto_tree *point_subtree;
3227
0
                    int32_t x_offset, y_offset;
3228
3229
0
                    point_subtree = proto_tree_add_subtree(tree,
3230
0
                        tvb, offset, 4, ett_isobus_vt_getsupportedwidechars_range, &point_item, "Point");
3231
3232
0
                    proto_tree_add_item_ret_int(point_subtree,
3233
0
                        hf_isobus_vt_graphicscontext_drawpolygon_point_xoffset, tvb, offset, 2, ENC_LITTLE_ENDIAN, &x_offset);
3234
0
                    offset += 2;
3235
3236
0
                    proto_tree_add_item_ret_int(point_subtree,
3237
0
                        hf_isobus_vt_graphicscontext_drawpolygon_point_yoffset, tvb, offset, 2, ENC_LITTLE_ENDIAN, &y_offset);
3238
0
                    offset += 2;
3239
3240
0
                    proto_item_set_text(point_item, "Point with offset [%d;%d]", x_offset, y_offset);
3241
0
                }
3242
3243
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Draw Polygon of %u points",
3244
0
                    number_of_points);
3245
0
            }
3246
0
                break;
3247
0
            case DRAW_TEXT:
3248
0
            {
3249
0
                unsigned encoding = ENC_ASCII|ENC_NA;
3250
0
                uint16_t firstTwoBytesString;
3251
0
                unsigned bomOffset = 0;
3252
0
                uint32_t background, number_of_bytes;
3253
0
                const uint8_t* value;
3254
3255
0
                proto_tree_add_item_ret_uint(tree,
3256
0
                    hf_isobus_vt_graphicscontext_drawtext_background, tvb, offset, 1, ENC_LITTLE_ENDIAN, &background);
3257
0
                offset += 1;
3258
3259
0
                proto_tree_add_item_ret_uint(tree,
3260
0
                    hf_isobus_vt_graphicscontext_drawtext_numberofbytes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &number_of_bytes);
3261
0
                offset += 1;
3262
3263
0
                firstTwoBytesString = tvb_get_letohs(tvb,offset);
3264
0
                if(firstTwoBytesString == 0xFEFF)
3265
0
                {
3266
0
                    encoding = ENC_UCS_2|ENC_LITTLE_ENDIAN;
3267
0
                    bomOffset = 2;
3268
0
                }
3269
3270
0
                proto_tree_add_item_ret_string(tree,
3271
0
                    hf_isobus_vt_graphicscontext_drawtext_textstring, tvb, offset + bomOffset, number_of_bytes - bomOffset, encoding, pinfo->pool, &value);
3272
3273
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Draw string \"%s\" at cursor with a %s background",
3274
0
                    value, val_to_str_const(background, draw_text_background, "unknown"));
3275
0
            }
3276
0
                break;
3277
0
            case PAN_VIEWPORT:
3278
0
            {
3279
0
                int32_t viewport_x, viewport_y;
3280
3281
0
                proto_tree_add_item_ret_int(tree,
3282
0
                    hf_isobus_vt_graphicscontext_panviewport_viewportx, tvb, offset, 2, ENC_LITTLE_ENDIAN, &viewport_x);
3283
0
                offset += 2;
3284
3285
0
                proto_tree_add_item_ret_int(tree,
3286
0
                    hf_isobus_vt_graphicscontext_panviewport_viewporty, tvb, offset, 2, ENC_LITTLE_ENDIAN, &viewport_y);
3287
3288
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Pan Viewport by [%d;%d] pixels",
3289
0
                    viewport_x, viewport_y);
3290
0
            }
3291
0
                break;
3292
0
            case ZOOM_VIEWPORT:
3293
0
            {
3294
0
                float zoom_value;
3295
3296
0
                zoom_value = tvb_get_ieee_float(tvb, offset, ENC_LITTLE_ENDIAN);
3297
0
                proto_tree_add_item(tree,
3298
0
                    hf_isobus_vt_graphicscontext_zoomviewport_zoomvalue, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3299
3300
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Zoom Viewport by %g",
3301
0
                    zoom_value);
3302
0
            }
3303
0
                break;
3304
0
            case PAN_AND_ZOOM_VIEWPORT:
3305
0
            {
3306
0
                float zoom_value;
3307
0
                int32_t viewport_x, viewport_y;
3308
3309
0
                proto_tree_add_item_ret_int(tree,
3310
0
                    hf_isobus_vt_graphicscontext_panandzoomviewport_viewportx, tvb, offset, 2, ENC_LITTLE_ENDIAN, &viewport_x);
3311
0
                offset += 2;
3312
3313
0
                proto_tree_add_item_ret_int(tree,
3314
0
                    hf_isobus_vt_graphicscontext_panandzoomviewport_viewporty, tvb, offset, 2, ENC_LITTLE_ENDIAN, &viewport_y);
3315
0
                offset += 2;
3316
3317
0
                zoom_value = tvb_get_ieee_float(tvb, offset, ENC_LITTLE_ENDIAN);
3318
0
                proto_tree_add_item(tree,
3319
0
                    hf_isobus_vt_graphicscontext_panandzoomviewport_zoomvalue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3320
3321
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Pan viewport by [%d;%d] pixels and zoom by %g",
3322
0
                    viewport_x, viewport_y, zoom_value);
3323
0
            }
3324
0
                break;
3325
0
            case CHANGE_VIEWPORT_SIZE:
3326
0
            {
3327
0
                uint32_t new_width, new_height;
3328
3329
0
                proto_tree_add_item_ret_uint(tree,
3330
0
                    hf_isobus_vt_graphicscontext_changeviewportsize_newwidth, tvb, offset, 2, ENC_LITTLE_ENDIAN, &new_width);
3331
0
                offset += 2;
3332
3333
0
                proto_tree_add_item_ret_uint(tree,
3334
0
                    hf_isobus_vt_graphicscontext_changeviewportsize_newheight, tvb, offset, 2, ENC_LITTLE_ENDIAN, &new_height);
3335
3336
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Change viewport size to [%ux%u]",
3337
0
                    new_width, new_height);
3338
0
            }
3339
0
                break;
3340
0
            case DRAW_VT_OBJECT:
3341
0
            {
3342
0
                uint32_t draw_object_id;
3343
3344
0
                proto_tree_add_item_ret_uint(tree,
3345
0
                    hf_isobus_vt_graphicscontext_drawvtobject_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &draw_object_id);
3346
0
                ti = proto_tree_add_item(tree,
3347
0
                    hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3348
0
                proto_item_set_hidden(ti);
3349
3350
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Draw VT %s at graphics cursor",
3351
0
                    get_object_id_string(pinfo->pool, draw_object_id));
3352
0
            }
3353
0
                break;
3354
0
            case COPY_CANVAS_TO_PICTURE_GRAPHIC:
3355
0
            {
3356
0
                uint32_t object_id_picture_graphic;
3357
3358
0
                proto_tree_add_item_ret_uint(tree,
3359
0
                    hf_isobus_vt_graphicscontext_copycanvastopicturegraphic_objectidpicturegraphic, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id_picture_graphic);
3360
0
                ti = proto_tree_add_item(tree,
3361
0
                    hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3362
0
                proto_item_set_hidden(ti);
3363
3364
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Copy canvas to picture graphics %s",
3365
0
                    get_object_id_string(pinfo->pool, object_id_picture_graphic));
3366
0
            }
3367
0
                break;
3368
0
            case COPY_VIEWPORT_TO_PICTURE_GRAPHIC:
3369
0
            {
3370
0
                uint32_t object_id_picture_graphic;
3371
3372
0
                proto_tree_add_item_ret_uint(tree,
3373
0
                    hf_isobus_vt_graphicscontext_copyviewporttopicturegraphic_objectidpicturegraphic, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id_picture_graphic);
3374
0
                ti = proto_tree_add_item(tree,
3375
0
                    hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3376
0
                proto_item_set_hidden(ti);
3377
3378
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Copy viewport to picture graphics %s",
3379
0
                    get_object_id_string(pinfo->pool, object_id_picture_graphic));
3380
0
            }
3381
0
                break;
3382
0
        }
3383
0
    }
3384
0
        break;
3385
0
    case VT_GET_ATTRIBUTE_VALUE:
3386
0
    {
3387
0
        bool error_frame;
3388
0
        uint32_t attribute_id, object_id;
3389
3390
0
        object_id = tvb_get_letohs(tvb, offset);
3391
0
        if(direction == ecu_to_vt || object_id != 0xFFFF)
3392
0
        {
3393
0
            error_frame = false;
3394
0
            proto_tree_add_item(tree,
3395
0
                hf_isobus_vt_getattributevalue_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3396
0
            ti = proto_tree_add_item(tree,
3397
0
                hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3398
0
            proto_item_set_hidden(ti);
3399
0
        }
3400
0
        else
3401
0
        {
3402
0
            error_frame = true;
3403
0
        }
3404
0
        offset += 2;
3405
3406
0
        proto_tree_add_item_ret_uint(tree,
3407
0
            hf_isobus_vt_getattributevalue_attributeid, tvb, offset, 1, ENC_LITTLE_ENDIAN, &attribute_id);
3408
0
        offset += 1;
3409
3410
0
        if(direction == vt_to_ecu)
3411
0
        {
3412
0
            if(error_frame == false)
3413
0
            {
3414
0
                uint32_t value;
3415
0
                proto_tree_add_item_ret_uint(tree,
3416
0
                    hf_isobus_vt_getattributevalue_value, tvb, offset, 4, ENC_LITTLE_ENDIAN, &value);
3417
3418
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Return value of attribute %u from %s, value is 0x%X ",
3419
0
                    attribute_id, get_object_id_string(pinfo->pool, object_id), value);
3420
0
            }
3421
0
            else
3422
0
            {
3423
0
                uint32_t error_codes;
3424
3425
0
                proto_tree_add_item_ret_uint(tree,
3426
0
                    hf_isobus_vt_getattributevalue_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
3427
0
                ti = proto_tree_add_item(tree,
3428
0
                    hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3429
0
                proto_item_set_hidden(ti);
3430
0
                offset += 2;
3431
3432
0
                ti = proto_tree_add_item_ret_uint(tree,
3433
0
                    hf_isobus_vt_getattributevalue_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
3434
0
                proto_item_append_text(ti, ": ");
3435
0
                if (error_codes & 0x01)
3436
0
                    proto_item_append_text(ti, "Invalid Object ID ");
3437
0
                if (error_codes & 0x02)
3438
0
                    proto_item_append_text(ti, "Invalid Attribute ID ");
3439
0
                if (error_codes & 0x10)
3440
0
                    proto_item_append_text(ti, "Any other error ");
3441
3442
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Error while requesting value of attribute %u from %s ",
3443
0
                    attribute_id, get_object_id_string(pinfo->pool, object_id));
3444
0
            }
3445
0
        }
3446
0
        else
3447
0
        {
3448
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Get value of attribute %u from %s ",
3449
0
                attribute_id, get_object_id_string(pinfo->pool, object_id));
3450
0
        }
3451
0
    }
3452
0
        break;
3453
0
    case VT_SELECT_COLOUR_MAP:
3454
0
    {
3455
0
        uint32_t error_codes, object_id;
3456
3457
0
        proto_tree_add_item_ret_uint(tree,
3458
0
            hf_isobus_vt_selectcolourmap_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
3459
0
        ti = proto_tree_add_item(tree,
3460
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3461
0
        proto_item_set_hidden(ti);
3462
0
        offset += 2;
3463
3464
0
        if(direction == vt_to_ecu)
3465
0
        {
3466
0
            ti = proto_tree_add_item_ret_uint(tree,
3467
0
                hf_isobus_vt_selectcolourmap_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
3468
0
            proto_item_append_text(ti, ": ");
3469
0
            if (error_codes & 0x01)
3470
0
                proto_item_append_text(ti, "Invalid Object ID ");
3471
0
            if (error_codes & 0x02)
3472
0
                proto_item_append_text(ti, "Invalid Colour Map ");
3473
0
            if (error_codes & 0x04)
3474
0
                proto_item_append_text(ti, "Any other error ");
3475
0
        }
3476
3477
0
        if(direction == ecu_to_vt)
3478
0
        {
3479
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Select colour map %s ",
3480
0
                get_object_id_string(pinfo->pool, object_id));
3481
0
        }
3482
0
        else if(direction == vt_to_ecu)
3483
0
        {
3484
0
            if(error_codes)
3485
0
            {
3486
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Error while selecting colour map %s ",
3487
0
                    get_object_id_string(pinfo->pool, object_id));
3488
0
            }
3489
0
            else
3490
0
            {
3491
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Colour map %s successfully selected ",
3492
0
                    get_object_id_string(pinfo->pool, object_id));
3493
0
            }
3494
0
        }
3495
0
    }
3496
0
        break;
3497
0
    case VT_IDENTIFY_VT:
3498
0
    {
3499
0
        if(direction == ecu_to_vt)
3500
0
        {
3501
0
            col_append_str(pinfo->cinfo, COL_INFO, "Identify VT");
3502
0
        }
3503
0
        else
3504
0
        {
3505
0
            col_append_str(pinfo->cinfo, COL_INFO, "Reply Identify VT ");
3506
0
        }
3507
0
    }
3508
0
        break;
3509
0
    case VT_EXECUTE_EXTENDED_MACRO:
3510
0
    {
3511
0
        uint32_t error_codes, object_id;
3512
3513
0
        proto_tree_add_item_ret_uint(tree,
3514
0
            hf_isobus_vt_executeextendedmacro_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
3515
0
        ti = proto_tree_add_item(tree,
3516
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3517
0
        proto_item_set_hidden(ti);
3518
0
        offset += 2;
3519
3520
0
        if(direction == vt_to_ecu)
3521
0
        {
3522
0
            ti = proto_tree_add_item_ret_uint(tree,
3523
0
                hf_isobus_vt_executeextendedmacro_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
3524
0
            proto_item_append_text(ti, ": ");
3525
0
            if (error_codes & 0x01)
3526
0
                proto_item_append_text(ti, "Object ID does not exist ");
3527
0
            if (error_codes & 0x02)
3528
0
                proto_item_append_text(ti, "Object ID is not a Macro object ");
3529
0
            if (error_codes & 0x04)
3530
0
                proto_item_append_text(ti, "Any other error ");
3531
0
        }
3532
3533
0
        if(direction == ecu_to_vt)
3534
0
        {
3535
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Execute extended macro %s ",
3536
0
                get_object_id_string(pinfo->pool, object_id));
3537
0
        }
3538
0
        else if(direction == vt_to_ecu)
3539
0
        {
3540
0
            if(error_codes)
3541
0
            {
3542
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Error while executing extended macro %s ",
3543
0
                    get_object_id_string(pinfo->pool, object_id));
3544
0
            }
3545
0
            else
3546
0
            {
3547
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Extended macro %s successfully executed ",
3548
0
                    get_object_id_string(pinfo->pool, object_id));
3549
0
            }
3550
0
        }
3551
0
    }
3552
0
        break;
3553
0
    case VT_LOCK_UNLOCK_MASK:
3554
0
    {
3555
0
        uint32_t command, error_codes, object_id, lock_timeout;
3556
3557
0
        proto_tree_add_item_ret_uint(tree,
3558
0
            hf_isobus_vt_lockunlockmask_command, tvb, offset, 1, ENC_LITTLE_ENDIAN, &command);
3559
0
        offset += 1;
3560
3561
0
        if(direction == ecu_to_vt)
3562
0
        {
3563
0
            proto_tree_add_item_ret_uint(tree,
3564
0
                hf_isobus_vt_lockunlockmask_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id);
3565
0
            ti = proto_tree_add_item(tree,
3566
0
                hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3567
0
            proto_item_set_hidden(ti);
3568
0
            offset += 2;
3569
3570
0
            if(command == MASK_LOCK)
3571
0
            {
3572
0
                proto_tree_add_item_ret_uint(tree,
3573
0
                    hf_isobus_vt_lockunlockmask_locktimeout, tvb, offset, 2, ENC_LITTLE_ENDIAN, &lock_timeout);
3574
0
            }
3575
0
        }
3576
0
        else
3577
0
        {
3578
0
            ti = proto_tree_add_item_ret_uint(tree,
3579
0
                hf_isobus_vt_lockunlockmask_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
3580
0
            proto_item_append_text(ti, ": ");
3581
0
            if (error_codes & 0x01)
3582
0
                proto_item_append_text(ti, "Command ignored, no mask is visible or given Object ID does not match the visible mask ");
3583
0
            if (error_codes & 0x02)
3584
0
                proto_item_append_text(ti, "Lock command ignored, already locked ");
3585
0
            if (error_codes & 0x04)
3586
0
                proto_item_append_text(ti, "Unlock command ignored, not locked ");
3587
0
            if (error_codes & 0x08)
3588
0
                proto_item_append_text(ti, "Lock command ignored, an Alarm Mask is active ");
3589
0
            if (error_codes & 0x10)
3590
0
                proto_item_append_text(ti, "Unsolicited unlock, timeout occurred ");
3591
0
            if (error_codes & 0x20)
3592
0
                proto_item_append_text(ti, "Unsolicited unlock, this mask is hidden ");
3593
0
            if (error_codes & 0x40)
3594
0
                proto_item_append_text(ti, "Unsolicited unlock, operator induced, or any other error ");
3595
0
            if (error_codes & 0x80)
3596
0
                proto_item_append_text(ti, "Any other error ");
3597
0
        }
3598
3599
0
        if(direction == ecu_to_vt)
3600
0
        {
3601
0
            if(command == MASK_LOCK)
3602
0
            {
3603
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Lock data mask %s for %ums ",
3604
0
                    get_object_id_string(pinfo->pool, object_id), lock_timeout);
3605
0
            }
3606
0
            else if(command == MASK_UNLOCK)
3607
0
            {
3608
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Unlock data mask %s ",
3609
0
                    get_object_id_string(pinfo->pool, object_id));
3610
0
            }
3611
0
        }
3612
0
        else if(direction == vt_to_ecu)
3613
0
        {
3614
0
            if(error_codes)
3615
0
            {
3616
0
                if(command == MASK_LOCK)
3617
0
                {
3618
0
                    col_append_str(pinfo->cinfo, COL_INFO, "Error while locking ");
3619
0
                }
3620
0
                else if(command == MASK_UNLOCK)
3621
0
                {
3622
0
                    col_append_str(pinfo->cinfo, COL_INFO, "Error while unlocking ");
3623
0
                }
3624
0
            }
3625
0
            else
3626
0
            {
3627
0
                if(command == MASK_LOCK)
3628
0
                {
3629
0
                    col_append_str(pinfo->cinfo, COL_INFO, "Locking successful ");
3630
0
                }
3631
0
                else if(command == MASK_UNLOCK)
3632
0
                {
3633
0
                    col_append_str(pinfo->cinfo, COL_INFO, "Unlocking successful ");
3634
0
                }
3635
0
            }
3636
0
        }
3637
0
    }
3638
0
        break;
3639
0
    case VT_EXECUTE_MACRO:
3640
0
    {
3641
0
        uint32_t object_id;
3642
0
        uint32_t error_codes;
3643
3644
        /* Other than all object IDs macro object IDs are 1 byte in VT 4 */
3645
0
        proto_tree_add_item_ret_uint(tree,
3646
0
            hf_isobus_vt_executemacro_objectid, tvb, offset, 1, ENC_LITTLE_ENDIAN, &object_id);
3647
0
        ti = proto_tree_add_item(tree,
3648
0
            hf_isobus_vt_objectid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3649
0
        proto_item_set_hidden(ti);
3650
0
        offset += 1;
3651
3652
0
        if(direction == vt_to_ecu)
3653
0
        {
3654
0
            ti = proto_tree_add_item_ret_uint(tree,
3655
0
                hf_isobus_vt_executemacro_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
3656
0
            proto_item_append_text(ti, ": ");
3657
0
            if (error_codes & 0x01)
3658
0
                proto_item_append_text(ti, "Object ID does not exist ");
3659
0
            if (error_codes & 0x02)
3660
0
                proto_item_append_text(ti, "Object ID is not a Macro object ");
3661
0
            if (error_codes & 0x04)
3662
0
                proto_item_append_text(ti, "Any other error ");
3663
0
        }
3664
3665
0
        if(direction == ecu_to_vt)
3666
0
        {
3667
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Execute macro %s ",
3668
0
                get_object_id_string(pinfo->pool, object_id));
3669
0
        }
3670
0
        else if(direction == vt_to_ecu)
3671
0
        {
3672
0
            if(error_codes)
3673
0
            {
3674
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Error while executing macro %s ",
3675
0
                    get_object_id_string(pinfo->pool, object_id));
3676
0
            }
3677
0
            else
3678
0
            {
3679
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Macro %s successfully executed ",
3680
0
                    get_object_id_string(pinfo->pool, object_id));
3681
0
            }
3682
0
        }
3683
0
    }
3684
0
        break;
3685
0
    case VT_GET_MEMORY:
3686
0
    {
3687
0
        if(direction == ecu_to_vt)
3688
0
        {
3689
0
            uint32_t memory_required;
3690
0
            offset += 1; /* reserved byte */
3691
3692
0
            proto_tree_add_item_ret_uint(tree,
3693
0
                hf_isobus_vt_getmemory_memoryrequired, tvb, offset, 4, ENC_LITTLE_ENDIAN, &memory_required);
3694
3695
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "The amount of memory required is %u ",
3696
0
                memory_required);
3697
0
        }
3698
0
        else
3699
0
        {
3700
0
            uint32_t vt_version, status;
3701
3702
0
            proto_tree_add_item_ret_uint(tree,
3703
0
                hf_isobus_vt_getmemory_vtversion, tvb, offset, 1, ENC_LITTLE_ENDIAN, &vt_version);
3704
0
            offset += 1;
3705
3706
0
            proto_tree_add_item_ret_uint(tree,
3707
0
                hf_isobus_vt_getmemory_status, tvb, offset, 1, ENC_LITTLE_ENDIAN, &status);
3708
3709
0
            if(status == ENOUGH_MEMORY)
3710
0
            {
3711
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "There can be enough memory, VT Version is %u ",
3712
0
                    vt_version);
3713
0
            }
3714
0
            else
3715
0
            {
3716
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "There is not enough memory available, VT Version is %u ",
3717
0
                    vt_version);
3718
0
            }
3719
0
        }
3720
0
    }
3721
0
        break;
3722
0
    case VT_GET_SUPPORTED_WIDECHARS:
3723
0
    {
3724
0
        uint32_t code_plane, first_widechar, last_widechar;
3725
3726
0
        proto_tree_add_item_ret_uint(tree,
3727
0
            hf_isobus_vt_getsupportedwidechars_codeplane, tvb, offset, 1, ENC_LITTLE_ENDIAN, &code_plane);
3728
0
        offset += 1;
3729
3730
0
        proto_tree_add_item_ret_uint(tree,
3731
0
            hf_isobus_vt_getsupportedwidechars_firstwidechar, tvb, offset, 2, ENC_LITTLE_ENDIAN, &first_widechar);
3732
0
        offset += 2;
3733
3734
0
        proto_tree_add_item_ret_uint(tree,
3735
0
            hf_isobus_vt_getsupportedwidechars_lastwidechar, tvb, offset, 2, ENC_LITTLE_ENDIAN, &last_widechar);
3736
0
        offset += 2;
3737
3738
0
        if(direction == vt_to_ecu)
3739
0
        {
3740
0
            uint32_t error_codes, number_of_ranges, i;
3741
3742
0
            ti = proto_tree_add_item_ret_uint(tree,
3743
0
                hf_isobus_vt_getsupportedwidechars_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
3744
0
            proto_item_append_text(ti, ": ");
3745
0
            if (error_codes & 0x01)
3746
0
                proto_item_append_text(ti, "Too many ranges ");
3747
0
            if (error_codes & 0x02)
3748
0
                proto_item_append_text(ti, "Error in Code plane ");
3749
0
            if (error_codes & 0x10)
3750
0
                proto_item_append_text(ti, "Any other error ");
3751
0
            offset += 1;
3752
3753
0
            proto_tree_add_item_ret_uint(tree,
3754
0
                hf_isobus_vt_getsupportedwidechars_numberofranges, tvb, offset, 1, ENC_LITTLE_ENDIAN, &number_of_ranges);
3755
0
            offset += 1;
3756
3757
0
            for(i = 0; i < number_of_ranges; i++)
3758
0
            {
3759
0
                uint32_t first_avail_widechar, last_avail_widechar;
3760
0
                proto_tree* subtree;
3761
0
                proto_item* item;
3762
3763
0
                subtree = proto_tree_add_subtree_format(tree,
3764
0
                    tvb, offset, 4, ett_isobus_vt_getsupportedwidechars_range, &item, "Range");
3765
3766
0
                proto_tree_add_item_ret_uint(subtree,
3767
0
                    hf_isobus_vt_getsupportedwidechars_firstavailablewidechar, tvb, offset, 2, ENC_LITTLE_ENDIAN, &first_avail_widechar);
3768
0
                offset += 2;
3769
3770
0
                proto_tree_add_item_ret_uint(subtree,
3771
0
                    hf_isobus_vt_getsupportedwidechars_lastavailablewidechar, tvb, offset, 2, ENC_LITTLE_ENDIAN, &last_avail_widechar);
3772
0
                offset += 2;
3773
3774
0
                proto_item_set_text(item, "Range 0x%04X - 0x%04X", first_avail_widechar, last_avail_widechar);
3775
0
            }
3776
3777
0
            if(error_codes)
3778
0
            {
3779
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Error while getting supported widechars for code plane %u ",
3780
0
                    code_plane);
3781
0
            }
3782
0
            else
3783
0
            {
3784
0
                col_append_fstr(pinfo->cinfo, COL_INFO, "Received supported widechars for code plane %u in %u range",
3785
0
                    code_plane, number_of_ranges);
3786
3787
0
                if(number_of_ranges > 1)
3788
0
                {
3789
0
                    col_append_str(pinfo->cinfo, COL_INFO, "s");
3790
0
                }
3791
0
            }
3792
0
        }
3793
0
        else if(direction == ecu_to_vt)
3794
0
        {
3795
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Requesting supported widechars for code plane %u from character 0x%04X till 0x%04X ",
3796
0
                    code_plane, first_widechar, last_widechar);
3797
0
        }
3798
0
    }
3799
0
        break;
3800
0
    case VT_GET_NUMBER_OF_SOFT_KEYS:
3801
0
    {
3802
0
        if(direction == ecu_to_vt)
3803
0
        {
3804
0
            col_append_str(pinfo->cinfo, COL_INFO, "Requesting number of soft keys");
3805
0
        }
3806
0
        else
3807
0
        {
3808
0
            uint32_t navigation_soft_keys, virtual_soft_keys, physical_soft_keys;
3809
3810
0
            proto_tree_add_item_ret_uint(tree,
3811
0
                hf_isobus_vt_getnumberofsoftkeys_navigationsoftkeys, tvb, offset, 1, ENC_LITTLE_ENDIAN, &navigation_soft_keys);
3812
0
            offset += 1;
3813
3814
0
            offset += 2; /* 2 reserved bytes */
3815
3816
0
            proto_tree_add_item(tree,
3817
0
                hf_isobus_vt_getnumberofsoftkeys_xdots, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3818
0
            offset += 1;
3819
3820
0
            proto_tree_add_item(tree,
3821
0
                hf_isobus_vt_getnumberofsoftkeys_ydots, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3822
0
            offset += 1;
3823
3824
0
            proto_tree_add_item_ret_uint(tree,
3825
0
                hf_isobus_vt_getnumberofsoftkeys_virtualsoftkeys, tvb, offset, 1, ENC_LITTLE_ENDIAN, &virtual_soft_keys);
3826
0
            offset += 1;
3827
3828
0
            proto_tree_add_item_ret_uint(tree,
3829
0
                hf_isobus_vt_getnumberofsoftkeys_physicalsoftkeys, tvb, offset, 1, ENC_LITTLE_ENDIAN, &physical_soft_keys);
3830
3831
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "VT has %u softkeys, %u virtual soft keys and %u physical soft keys",
3832
0
                navigation_soft_keys, virtual_soft_keys, physical_soft_keys);
3833
0
        }
3834
0
    }
3835
0
        break;
3836
0
    case VT_GET_TEXT_FONT_DATA:
3837
0
    {
3838
0
        if(direction == ecu_to_vt)
3839
0
        {
3840
0
            col_append_str(pinfo->cinfo, COL_INFO, "Requesting text font data");
3841
0
        }
3842
0
        else if(direction == vt_to_ecu)
3843
0
        {
3844
0
            proto_tree *ti_smallfonts_subtree, *ti_largefonts_subtree, *ti_typeattribute_subtree;
3845
0
            proto_item *smallfonts_item, *largefonts_item, *typeattributes_item;
3846
3847
0
            offset += 4;
3848
3849
0
            smallfonts_item = proto_tree_add_item(tree,
3850
0
                hf_isobus_vt_gettextfontdata_smallfontsizes, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3851
0
            ti_smallfonts_subtree = proto_item_add_subtree(smallfonts_item, ett_isobus_vt_gettextfontdata_smallfontsizes);
3852
0
            proto_tree_add_item(ti_smallfonts_subtree, hf_isobus_vt_gettextfontdata_smallfontsizes_font8x8, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3853
0
            proto_tree_add_item(ti_smallfonts_subtree, hf_isobus_vt_gettextfontdata_smallfontsizes_font8x12, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3854
0
            proto_tree_add_item(ti_smallfonts_subtree, hf_isobus_vt_gettextfontdata_smallfontsizes_font12x16, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3855
0
            proto_tree_add_item(ti_smallfonts_subtree, hf_isobus_vt_gettextfontdata_smallfontsizes_font16x16, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3856
0
            proto_tree_add_item(ti_smallfonts_subtree, hf_isobus_vt_gettextfontdata_smallfontsizes_font16x24, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3857
0
            proto_tree_add_item(ti_smallfonts_subtree, hf_isobus_vt_gettextfontdata_smallfontsizes_font24x32, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3858
0
            proto_tree_add_item(ti_smallfonts_subtree, hf_isobus_vt_gettextfontdata_smallfontsizes_font32x32, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3859
0
            offset += 1;
3860
3861
0
            largefonts_item = proto_tree_add_item(tree,
3862
0
                hf_isobus_vt_gettextfontdata_largefontsizes, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3863
0
            ti_largefonts_subtree = proto_item_add_subtree(largefonts_item, ett_isobus_vt_gettextfontdata_largefontsizes);
3864
0
            proto_tree_add_item(ti_largefonts_subtree, hf_isobus_vt_gettextfontdata_largefontsizes_font32x48, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3865
0
            proto_tree_add_item(ti_largefonts_subtree, hf_isobus_vt_gettextfontdata_largefontsizes_font48x64, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3866
0
            proto_tree_add_item(ti_largefonts_subtree, hf_isobus_vt_gettextfontdata_largefontsizes_font64x64, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3867
0
            proto_tree_add_item(ti_largefonts_subtree, hf_isobus_vt_gettextfontdata_largefontsizes_font64x96, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3868
0
            proto_tree_add_item(ti_largefonts_subtree, hf_isobus_vt_gettextfontdata_largefontsizes_font96x128, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3869
0
            proto_tree_add_item(ti_largefonts_subtree, hf_isobus_vt_gettextfontdata_largefontsizes_font128x128, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3870
0
            proto_tree_add_item(ti_largefonts_subtree, hf_isobus_vt_gettextfontdata_largefontsizes_font128x192, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3871
0
            offset += 1;
3872
3873
0
            typeattributes_item = proto_tree_add_item(tree,
3874
0
                hf_isobus_vt_gettextfontdata_typeattributes, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3875
0
            ti_typeattribute_subtree = proto_item_add_subtree(typeattributes_item, ett_isobus_vt_gettextfontdata_typeattributes);
3876
0
            proto_tree_add_item(ti_typeattribute_subtree, hf_isobus_vt_gettextfontdata_typeattributes_boldtext, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3877
0
            proto_tree_add_item(ti_typeattribute_subtree, hf_isobus_vt_gettextfontdata_typeattributes_crossedouttext, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3878
0
            proto_tree_add_item(ti_typeattribute_subtree, hf_isobus_vt_gettextfontdata_typeattributes_underlinedtext, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3879
0
            proto_tree_add_item(ti_typeattribute_subtree, hf_isobus_vt_gettextfontdata_typeattributes_italicstext, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3880
0
            proto_tree_add_item(ti_typeattribute_subtree, hf_isobus_vt_gettextfontdata_typeattributes_invertedtext, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3881
0
            proto_tree_add_item(ti_typeattribute_subtree, hf_isobus_vt_gettextfontdata_typeattributes_flashinverted, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3882
0
            proto_tree_add_item(ti_typeattribute_subtree, hf_isobus_vt_gettextfontdata_typeattributes_flashhidden, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3883
0
            proto_tree_add_item(ti_typeattribute_subtree, hf_isobus_vt_gettextfontdata_typeattributes_proportionalfontrendering, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3884
3885
0
            col_append_str(pinfo->cinfo, COL_INFO, "Text font data received");
3886
0
        }
3887
0
    }
3888
0
        break;
3889
0
    case VT_GET_WINDOW_MASK_DATA:
3890
0
    {
3891
0
        if(direction == ecu_to_vt)
3892
0
        {
3893
0
            col_append_str(pinfo->cinfo, COL_INFO, "Request window mask data");
3894
0
        }
3895
0
        else
3896
0
        {
3897
0
            uint32_t background_colour_data_mask, background_colour_soft_key_mask;
3898
3899
0
            proto_tree_add_item_ret_uint(tree,
3900
0
                hf_isobus_vt_getwindowmaskdata_backgroundcolourdatamask, tvb, offset, 1, ENC_LITTLE_ENDIAN, &background_colour_data_mask);
3901
0
            offset += 1;
3902
3903
0
            proto_tree_add_item_ret_uint(tree,
3904
0
                hf_isobus_vt_getwindowmaskdata_backgroundcoloursoftkeymask, tvb, offset, 1, ENC_LITTLE_ENDIAN, &background_colour_soft_key_mask);
3905
3906
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Background colour of data mask is %s, soft key mask is %s",
3907
0
                rval_to_str_const(background_colour_data_mask, vt_colours, "Unknown"),
3908
0
                rval_to_str_const(background_colour_soft_key_mask, vt_colours, "Unknown"));
3909
0
        }
3910
0
    }
3911
0
        break;
3912
0
    case VT_GET_SUPPORTED_OBJECTS:
3913
0
    {
3914
0
        if(direction == ecu_to_vt)
3915
0
        {
3916
0
            col_append_str(pinfo->cinfo, COL_INFO, "Request supported objects");
3917
0
        }
3918
0
        else
3919
0
        {
3920
0
            uint32_t number_of_bytes, i;
3921
3922
0
            proto_tree_add_item_ret_uint(tree,
3923
0
                hf_isobus_vt_getsupportedobjects_numberofbytes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &number_of_bytes);
3924
0
            offset += 1;
3925
3926
0
            for(i = 0; i < number_of_bytes; i++)
3927
0
            {
3928
0
                uint8_t object_type;
3929
3930
0
                object_type = tvb_get_uint8(tvb, offset);
3931
0
                if(object_type == 0xFF)
3932
0
                {
3933
0
                    break;
3934
0
                }
3935
3936
0
                proto_tree_add_item(tree,
3937
0
                    hf_isobus_vt_getsupportedobjects_objecttype, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3938
0
                offset += 1;
3939
0
            }
3940
3941
0
            col_append_str(pinfo->cinfo, COL_INFO, "Supported objects received");
3942
0
        }
3943
0
    }
3944
0
        break;
3945
0
    case VT_GET_HARDWARE:
3946
0
    {
3947
0
        if(direction == ecu_to_vt)
3948
0
        {
3949
0
            col_append_str(pinfo->cinfo, COL_INFO, "Request hardware info");
3950
0
        }
3951
0
        else
3952
0
        {
3953
0
            uint32_t graphic_type, x_pixels, y_pixels;
3954
0
            proto_item *hardware_item;
3955
0
            proto_tree *hardware_subtree;
3956
3957
0
            proto_tree_add_item(tree,
3958
0
                hf_isobus_vt_gethardware_boottime, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3959
0
            offset += 1;
3960
3961
0
            proto_tree_add_item_ret_uint(tree,
3962
0
                hf_isobus_vt_gethardware_graphictype, tvb, offset, 1, ENC_LITTLE_ENDIAN, &graphic_type);
3963
0
            offset += 1;
3964
3965
0
            hardware_item = proto_tree_add_item(tree,
3966
0
                hf_isobus_vt_gethardware_hardware, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3967
3968
0
            hardware_subtree = proto_item_add_subtree(hardware_item, ett_isobus_vt_gethardware_hardware);
3969
0
            proto_tree_add_item(hardware_subtree, hf_isobus_vt_gethardware_hardware_touchscreen, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3970
0
            proto_tree_add_item(hardware_subtree, hf_isobus_vt_gethardware_hardware_pointingdevice, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3971
0
            proto_tree_add_item(hardware_subtree, hf_isobus_vt_gethardware_hardware_multifreqaudiooutput, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3972
0
            proto_tree_add_item(hardware_subtree, hf_isobus_vt_gethardware_hardware_adjustvolumeaudiooutput, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3973
0
            proto_tree_add_item(hardware_subtree, hf_isobus_vt_gethardware_hardware_simultaneousactivationphysicalsoftkeys, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3974
0
            proto_tree_add_item(hardware_subtree, hf_isobus_vt_gethardware_hardware_simultaneousactivationbuttons, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3975
0
            proto_tree_add_item(hardware_subtree, hf_isobus_vt_gethardware_hardware_dragoperation, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3976
0
            proto_tree_add_item(hardware_subtree, hf_isobus_vt_gethardware_hardware_intermediatecoordinatesdrag, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3977
0
            offset += 1;
3978
3979
0
            proto_tree_add_item_ret_uint(tree,
3980
0
                hf_isobus_vt_gethardware_xpixels, tvb, offset, 2, ENC_LITTLE_ENDIAN, &x_pixels);
3981
0
            offset += 2;
3982
3983
0
            proto_tree_add_item_ret_uint(tree,
3984
0
                hf_isobus_vt_gethardware_ypixels, tvb, offset, 2, ENC_LITTLE_ENDIAN, &y_pixels);
3985
3986
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Hardware info received. Graphic type is %s, screen is %u by %u pixels",
3987
0
                val_to_str_const(graphic_type, graphic_types, "unknown"),
3988
0
                x_pixels, y_pixels);
3989
0
        }
3990
0
    }
3991
0
        break;
3992
0
    case VT_STORE_VERSION:
3993
0
    {
3994
0
        if(direction == ecu_to_vt)
3995
0
        {
3996
0
            const uint8_t *version_label;
3997
3998
0
            proto_tree_add_item_ret_string(tree,
3999
0
                hf_isobus_vt_storeversion_versionlabel, tvb, offset, 7, ENC_ASCII|ENC_NA, pinfo->pool, &version_label);
4000
4001
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Store version under label %s", version_label);
4002
0
        }
4003
0
        else
4004
0
        {
4005
0
            uint32_t error_codes;
4006
0
            offset += 4;
4007
4008
0
            ti = proto_tree_add_item_ret_uint(tree,
4009
0
                hf_isobus_vt_storeversion_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
4010
0
            proto_item_append_text(ti, ": ");
4011
0
            if (error_codes & 0x02)
4012
0
                proto_item_append_text(ti, "Version label is not correct ");
4013
0
            if (error_codes & 0x04)
4014
0
                proto_item_append_text(ti, "Insufficient memory available ");
4015
0
            if (error_codes & 0x08)
4016
0
                proto_item_append_text(ti, "Any other error ");
4017
4018
0
            if(error_codes)
4019
0
            {
4020
0
                col_append_str(pinfo->cinfo, COL_INFO, "Error while storing version");
4021
0
            }
4022
0
            else
4023
0
            {
4024
0
                col_append_str(pinfo->cinfo, COL_INFO, "Version successfully stored");
4025
0
            }
4026
0
        }
4027
0
    }
4028
0
        break;
4029
0
    case VT_LOAD_VERSION:
4030
0
    {
4031
0
        if(direction == ecu_to_vt)
4032
0
        {
4033
0
            const uint8_t* version_label;
4034
4035
0
            proto_tree_add_item_ret_string(tree,
4036
0
                hf_isobus_vt_loadversion_versionlabel, tvb, offset, 7, ENC_ASCII|ENC_NA, pinfo->pool, &version_label);
4037
4038
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Load version stored under label \"%s\"", version_label);
4039
0
        }
4040
0
        else
4041
0
        {
4042
0
            uint32_t error_codes;
4043
0
            offset += 4;
4044
4045
0
            ti = proto_tree_add_item_ret_uint(tree,
4046
0
                hf_isobus_vt_loadversion_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
4047
0
            proto_item_append_text(ti, ": ");
4048
0
            if (error_codes & 0x01)
4049
0
                proto_item_append_text(ti, "File system error or pool data corruption ");
4050
0
            if (error_codes & 0x02)
4051
0
                proto_item_append_text(ti, "Version label is not correct or Version label unknown ");
4052
0
            if (error_codes & 0x04)
4053
0
                proto_item_append_text(ti, "Insufficient memory available ");
4054
0
            if (error_codes & 0x08)
4055
0
                proto_item_append_text(ti, "Any other error ");
4056
4057
0
            if(error_codes)
4058
0
            {
4059
0
                col_append_str(pinfo->cinfo, COL_INFO, "Error while loading version");
4060
0
            }
4061
0
            else
4062
0
            {
4063
0
                col_append_str(pinfo->cinfo, COL_INFO, "Version successfully loaded");
4064
0
            }
4065
0
        }
4066
0
    }
4067
0
        break;
4068
0
    case VT_DELETE_VERSION:
4069
0
    {
4070
0
        if(direction == ecu_to_vt)
4071
0
        {
4072
0
            const uint8_t* version_label;
4073
4074
0
            proto_tree_add_item_ret_string(tree,
4075
0
                hf_isobus_vt_deleteversion_versionlabel, tvb, offset, 7, ENC_ASCII|ENC_NA, pinfo->pool, &version_label);
4076
4077
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Delete version stored under label \"%s\"", version_label);
4078
0
        }
4079
0
        else
4080
0
        {
4081
0
            uint32_t error_codes;
4082
0
            offset += 4;
4083
4084
0
            ti = proto_tree_add_item_ret_uint(tree,
4085
0
                hf_isobus_vt_deleteversion_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
4086
0
            proto_item_append_text(ti, ": ");
4087
0
            if (error_codes & 0x02)
4088
0
                proto_item_append_text(ti, "Version label is not correct or Version label unknown ");
4089
0
            if (error_codes & 0x08)
4090
0
                proto_item_append_text(ti, "Any other error ");
4091
4092
0
            if(error_codes)
4093
0
            {
4094
0
                col_append_str(pinfo->cinfo, COL_INFO, "Error while deleting version");
4095
0
            }
4096
0
            else
4097
0
            {
4098
0
                col_append_str(pinfo->cinfo, COL_INFO, "Version successfully deleted");
4099
0
            }
4100
0
        }
4101
0
    }
4102
0
        break;
4103
0
    case VT_EXTENDED_GET_VERSIONS:
4104
0
    {
4105
0
        if(direction == ecu_to_vt)
4106
0
        {
4107
0
            col_append_str(pinfo->cinfo, COL_INFO, "Request a list of extended versions");
4108
0
        }
4109
0
        else
4110
0
        {
4111
0
            uint32_t number_of_versions, i;
4112
4113
0
            proto_tree_add_item_ret_uint(tree,
4114
0
                hf_isobus_vt_extendedgetversions_numberofversions, tvb, offset, 1, ENC_LITTLE_ENDIAN, &number_of_versions);
4115
0
            offset += 1;
4116
4117
0
            for(i = 0; i < number_of_versions; i++)
4118
0
            {
4119
0
                proto_tree_add_item(tree,
4120
0
                    hf_isobus_vt_extendedgetversions_versionlabel, tvb, offset, 32, ENC_ASCII);
4121
0
                offset += 32;
4122
0
            }
4123
4124
0
            col_append_str(pinfo->cinfo, COL_INFO, "Extended versions received");
4125
0
        }
4126
0
    }
4127
0
        break;
4128
0
    case VT_EXTENDED_STORE_VERSION:
4129
0
    {
4130
0
        if(direction == ecu_to_vt)
4131
0
        {
4132
0
            const uint8_t* version_label;
4133
4134
0
            proto_tree_add_item_ret_string(tree,
4135
0
                hf_isobus_vt_extendedstoreversion_versionlabel, tvb, offset, 32, ENC_ASCII|ENC_NA, pinfo->pool, &version_label);
4136
4137
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Store extended version under label \"%s\"", version_label);
4138
0
        }
4139
0
        else
4140
0
        {
4141
0
            uint32_t error_codes;
4142
0
            offset += 4;
4143
4144
0
            ti = proto_tree_add_item_ret_uint(tree,
4145
0
                hf_isobus_vt_extendedstoreversion_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
4146
0
            proto_item_append_text(ti, ": ");
4147
0
            if (error_codes & 0x02)
4148
0
                proto_item_append_text(ti, "Version label is not correct ");
4149
0
            if (error_codes & 0x04)
4150
0
                proto_item_append_text(ti, "Insufficient memory available ");
4151
0
            if (error_codes & 0x08)
4152
0
                proto_item_append_text(ti, "Any other error ");
4153
4154
0
            if(error_codes)
4155
0
            {
4156
0
                col_append_str(pinfo->cinfo, COL_INFO, "Error while storing extended version");
4157
0
            }
4158
0
            else
4159
0
            {
4160
0
                col_append_str(pinfo->cinfo, COL_INFO, "Extended version successfully stored");
4161
0
            }
4162
0
        }
4163
0
    }
4164
0
        break;
4165
0
    case VT_EXTENDED_LOAD_VERSION:
4166
0
    {
4167
0
        if(direction == ecu_to_vt)
4168
0
        {
4169
0
            const uint8_t* version_label;
4170
4171
0
            proto_tree_add_item_ret_string(tree,
4172
0
                hf_isobus_vt_extendedloadversion_versionlabel, tvb, offset, 32, ENC_ASCII|ENC_NA, pinfo->pool, &version_label);
4173
4174
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Store extended version under label \"%s\"", version_label);
4175
0
        }
4176
0
        else
4177
0
        {
4178
0
            uint32_t error_codes;
4179
0
            offset += 4;
4180
4181
0
            ti = proto_tree_add_item_ret_uint(tree,
4182
0
                hf_isobus_vt_extendedloadversion_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
4183
0
            proto_item_append_text(ti, ": ");
4184
0
            if (error_codes & 0x01)
4185
0
                proto_item_append_text(ti, "File system error or pool data corruption ");
4186
0
            if (error_codes & 0x02)
4187
0
                proto_item_append_text(ti, "Version label is not correct or Version label unknown ");
4188
0
            if (error_codes & 0x04)
4189
0
                proto_item_append_text(ti, "Insufficient memory available ");
4190
0
            if (error_codes & 0x08)
4191
0
                proto_item_append_text(ti, "Any other error ");
4192
4193
0
            if(error_codes)
4194
0
            {
4195
0
                col_append_str(pinfo->cinfo, COL_INFO, "Error while loading extended version");
4196
0
            }
4197
0
            else
4198
0
            {
4199
0
                col_append_str(pinfo->cinfo, COL_INFO, "Extended version successfully loaded");
4200
0
            }
4201
0
        }
4202
0
    }
4203
0
        break;
4204
0
    case VT_EXTENDED_DELETE_VERSION:
4205
0
    {
4206
0
        if(direction == ecu_to_vt)
4207
0
        {
4208
0
            const uint8_t* version_label;
4209
4210
0
            proto_tree_add_item_ret_string(tree,
4211
0
                hf_isobus_vt_extendeddeleteversion_versionlabel, tvb, offset, 32, ENC_ASCII|ENC_NA, pinfo->pool, &version_label);
4212
4213
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "Delete version stored under label %s", version_label);
4214
0
        }
4215
0
        else
4216
0
        {
4217
0
            uint32_t error_codes;
4218
0
            offset += 4;
4219
4220
0
            ti = proto_tree_add_item_ret_uint(tree,
4221
0
                hf_isobus_vt_extendeddeleteversion_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
4222
0
            proto_item_append_text(ti, ": ");
4223
0
            if (error_codes & 0x02)
4224
0
                proto_item_append_text(ti, "Version label is not correct or Version label unknown ");
4225
0
            if (error_codes & 0x08)
4226
0
                proto_item_append_text(ti, "Any other error ");
4227
4228
0
            if(error_codes)
4229
0
            {
4230
0
                col_append_str(pinfo->cinfo, COL_INFO, "Error while deleting extended version");
4231
0
            }
4232
0
            else
4233
0
            {
4234
0
                col_append_str(pinfo->cinfo, COL_INFO, "Extended version successfully deleted");
4235
0
            }
4236
0
        }
4237
0
    }
4238
0
        break;
4239
0
    case VT_GET_VERSIONS_MESSAGE:
4240
0
    {
4241
0
        if(direction == ecu_to_vt)
4242
0
        {
4243
0
            col_append_str(pinfo->cinfo, COL_INFO, "Get versions");
4244
0
        }
4245
        /*no else as this message can only be used from ecu to vt*/
4246
0
    }
4247
0
        break;
4248
0
    case VT_GET_VERSIONS_RESPONSE:
4249
0
    {
4250
0
        if(direction == vt_to_ecu)
4251
0
        {
4252
0
            uint32_t number_of_versions, i;
4253
4254
0
            proto_tree_add_item_ret_uint(tree,
4255
0
                hf_isobus_vt_getversions_numberofversions, tvb, offset, 1, ENC_LITTLE_ENDIAN, &number_of_versions);
4256
0
            offset += 1;
4257
4258
0
            for(i = 0; i < number_of_versions; i++)
4259
0
            {
4260
0
                proto_tree_add_item(tree,
4261
0
                    hf_isobus_vt_getversions_versionlabel, tvb, offset, 7, ENC_ASCII);
4262
0
                offset += 7;
4263
0
            }
4264
4265
0
            col_append_str(pinfo->cinfo, COL_INFO, "Versions received");
4266
0
        }
4267
        /*no else as this message can only be used from vt to ecu*/
4268
0
    }
4269
0
        break;
4270
0
    case VT_UNSUPPORTED_VT_FUNCTION:
4271
0
    {
4272
0
        uint32_t unsupported_vt_function;
4273
4274
0
        proto_tree_add_item_ret_uint(tree,
4275
0
            hf_isobus_vt_unsupportedvtfunction_unsupportedvtfunction, tvb, offset, 1, ENC_LITTLE_ENDIAN, &unsupported_vt_function);
4276
4277
0
        if(direction == ecu_to_vt)
4278
0
        {
4279
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "VT function %s (%u) is not supported by ECU",
4280
0
                val_to_str_ext_const(unsupported_vt_function, &vt_function_code_ext, "unknown"), unsupported_vt_function);
4281
0
        }
4282
0
        else
4283
0
        {
4284
0
            col_append_fstr(pinfo->cinfo, COL_INFO, "VT function %s (%u) is not supported by VT",
4285
0
                val_to_str_ext_const(unsupported_vt_function, &vt_function_code_ext, "unknown"), unsupported_vt_function);
4286
0
        }
4287
0
    }
4288
0
        break;
4289
0
    case VT_VT_STATUS:
4290
0
    {
4291
0
        proto_tree *ti_busycodes_subtree;
4292
0
        proto_item *busycodes_item;
4293
0
        uint32_t working_set_master, object_id_data_mask, object_id_soft_key_mask;
4294
4295
0
        proto_tree_add_item_ret_uint(tree,
4296
0
            hf_isobus_vt_vtstatus_workingsetmaster, tvb, offset, 1, ENC_LITTLE_ENDIAN, &working_set_master);
4297
0
        offset += 1;
4298
4299
0
        proto_tree_add_item_ret_uint(tree,
4300
0
            hf_isobus_vt_vtstatus_objectiddatamask, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id_data_mask);
4301
0
        ti = proto_tree_add_item(tree,
4302
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4303
0
        proto_item_set_hidden(ti);
4304
0
        offset += 2;
4305
4306
0
        proto_tree_add_item_ret_uint(tree,
4307
0
            hf_isobus_vt_vtstatus_objectidsoftkeymask, tvb, offset, 2, ENC_LITTLE_ENDIAN, &object_id_soft_key_mask);
4308
0
        ti = proto_tree_add_item(tree,
4309
0
            hf_isobus_vt_objectid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4310
0
        proto_item_set_hidden(ti);
4311
0
        offset += 2;
4312
4313
0
        busycodes_item = proto_tree_add_item(tree,
4314
0
            hf_isobus_vt_vtstatus_vtbusycodes, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4315
4316
0
        ti_busycodes_subtree = proto_item_add_subtree(busycodes_item, ett_isobus_vt_vtstatus_busycodes_subtree);
4317
0
        proto_tree_add_item(ti_busycodes_subtree, hf_isobus_vt_vtstatus_vtbusycodes_updatingvisiblemask, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4318
0
        proto_tree_add_item(ti_busycodes_subtree, hf_isobus_vt_vtstatus_vtbusycodes_savingdata, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4319
0
        proto_tree_add_item(ti_busycodes_subtree, hf_isobus_vt_vtstatus_vtbusycodes_executingcommand, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4320
0
        proto_tree_add_item(ti_busycodes_subtree, hf_isobus_vt_vtstatus_vtbusycodes_executingmacro, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4321
0
        proto_tree_add_item(ti_busycodes_subtree, hf_isobus_vt_vtstatus_vtbusycodes_parsingobjectpool, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4322
0
        proto_tree_add_item(ti_busycodes_subtree, hf_isobus_vt_vtstatus_vtbusycodes_auxcontrolsactive, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4323
0
        proto_tree_add_item(ti_busycodes_subtree, hf_isobus_vt_vtstatus_vtbusycodes_outofmemory, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4324
0
        offset += 1;
4325
4326
0
        proto_tree_add_item(tree,
4327
0
            hf_isobus_vt_vtstatus_vtfunctioncodes, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4328
4329
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "Status: Current master is %d data mask is %s soft key mask is %s",
4330
0
        working_set_master, get_object_id_string(pinfo->pool, object_id_data_mask), get_object_id_string(pinfo->pool, object_id_soft_key_mask));
4331
0
    }
4332
0
        break;
4333
0
    case VT_WORKING_SET_MAINTENANCE:
4334
0
    {
4335
0
        uint8_t bitmask = tvb_get_uint8(tvb, offset);
4336
0
        uint8_t version = tvb_get_uint8(tvb, offset + 1);
4337
0
        if(version == 0xFF)
4338
0
        {
4339
0
            version = 2;
4340
0
        }
4341
0
        if(version > 3)
4342
0
        {
4343
0
            proto_tree_add_item(tree,
4344
0
                hf_isobus_vt_wrksetmain_bitmask, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4345
0
        }
4346
0
        offset += 1;
4347
4348
0
        proto_tree_add_item(tree,
4349
0
            hf_isobus_vt_wrksetmain_version, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4350
4351
0
        if(version > 3 && bitmask & 0x80)
4352
0
        {
4353
0
            col_append_str(pinfo->cinfo, COL_INFO, "Initiate ");
4354
0
        }
4355
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "Working Set Maintenance, VT version is %d",
4356
0
            version);
4357
4358
0
        current_vt_version = version;
4359
0
    }
4360
0
        break;
4361
0
    case VT_SCREEN_CAPTURE:
4362
0
    {
4363
        // item and path is common between command/response
4364
0
        proto_tree_add_item(tree,
4365
0
            hf_isobus_vt_screencapture_item, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4366
0
        offset += 1;
4367
4368
0
        proto_tree_add_item(tree,
4369
0
            hf_isobus_vt_screencapture_path, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4370
0
        offset += 1;
4371
4372
0
        if(direction == vt_to_ecu)
4373
0
        {
4374
            // screen capture response
4375
0
            uint32_t error_codes;
4376
0
            ti = proto_tree_add_item_ret_uint(tree,
4377
0
                hf_isobus_vt_screencapture_response_errorcodes, tvb, offset, 1, ENC_LITTLE_ENDIAN, &error_codes);
4378
0
            offset += 1;
4379
4380
0
            if(error_codes)
4381
0
            {
4382
0
                col_append_str(pinfo->cinfo, COL_INFO, "Screen capture failed");
4383
0
                proto_tree_add_bitmask(tree, tvb, offset, hf_isobus_vt_screencapture_response_errorcodes_flags,
4384
0
                                       ett_isobus_vt_screencapture_response_errorcodes_flags,
4385
0
                                       screencapture_response_errorcodes_flag_fields, ENC_BIG_ENDIAN);
4386
4387
4388
0
                proto_item_append_text(ti, ": ");
4389
0
                if (error_codes & 0x01)
4390
0
                    proto_item_append_text(ti, "Screen capture is not enabled");
4391
0
                if (error_codes & 0x02)
4392
0
                    proto_item_append_text(ti, "VT transfer is busy");
4393
0
                if (error_codes & 0x04)
4394
0
                    proto_item_append_text(ti, "Item unsupported request");
4395
0
                if (error_codes & 0x08)
4396
0
                    proto_item_append_text(ti, "Path unsupported request");
4397
0
                if (error_codes & 0x10)
4398
0
                    proto_item_append_text(ti, "Removable media path is full or unavailable");
4399
0
                if (error_codes & 0x20)
4400
0
                    proto_item_append_text(ti, "Other error");
4401
0
            }
4402
0
            else
4403
0
            {
4404
0
                col_append_str(pinfo->cinfo, COL_INFO, "Screen capture successful");
4405
0
                proto_item_append_text(ti, ": no error");
4406
0
            }
4407
4408
0
            proto_tree_add_item(tree,
4409
0
                hf_isobus_vt_screencapture_response_imageid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4410
0
        }
4411
0
        else
4412
0
        {
4413
0
            col_append_str(pinfo->cinfo, COL_INFO, "Screen capture");
4414
0
        }
4415
0
    }
4416
0
        break;
4417
0
    }
4418
0
  return tvb_captured_length(tvb);
4419
0
}
4420
4421
static int
4422
dissect_vt_to_ecu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
4423
0
{
4424
0
    return dissect_vt(tvb, pinfo, tree, vt_to_ecu);
4425
0
}
4426
4427
static int
4428
dissect_ecu_to_vt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
4429
0
{
4430
0
    return dissect_vt(tvb, pinfo, tree, ecu_to_vt);
4431
0
}
4432
4433
/*
4434
 * Simple "get a line" routine, copied from giop dissector who copied it from somewhere :)
4435
 *
4436
 */
4437
4438
static int vt_getline(FILE *fp, char *line, int maxlen)
4439
0
{
4440
0
    if (fgets(line, maxlen, fp) == NULL)
4441
0
    {
4442
0
        return 0;
4443
0
    }
4444
0
    else
4445
0
    {
4446
0
        line[strcspn(line, "\n")] = '\0';
4447
0
        return (int)strlen(line);
4448
0
    }
4449
0
}
4450
4451
4452
static void read_object_id_file(void)
4453
15
{
4454
15
    char    buf[500];
4455
15
    uint16_t item_count = 0;
4456
15
    FILE     *file;
4457
4458
15
    if ((file = ws_fopen(object_id_translation, "r")) == NULL)
4459
15
    {
4460
15
        object_id_strings[0].value = 0;
4461
15
        object_id_strings[0].strptr = NULL;
4462
4463
15
        return;
4464
15
    }
4465
4466
0
    while ((vt_getline(file, buf, 500)) > 0)
4467
0
    {
4468
0
        char **split_string = g_strsplit(buf, ",", 2);
4469
4470
0
        object_id_strings[item_count].value = (uint32_t)g_ascii_strtoll(split_string[0], NULL, 10);
4471
0
        object_id_strings[item_count].strptr = wmem_strdup(wmem_epan_scope(), split_string[1]);
4472
4473
0
        g_strfreev(split_string);
4474
0
        item_count++;
4475
0
    }
4476
4477
0
    fclose(file);
4478
4479
0
    object_id_strings[item_count].value = 0;
4480
0
    object_id_strings[item_count].strptr = NULL;
4481
0
}
4482
4483
static void isobus_vt_init(void)
4484
15
{
4485
15
    read_object_id_file();
4486
15
}
4487
4488
/* Register the protocol with Wireshark */
4489
void
4490
proto_register_isobus_vt(void)
4491
15
{
4492
15
    static hf_register_info hf[] = {
4493
15
        { &hf_isobus_vt,
4494
15
          { "VT",                       "isobus.vt",
4495
15
            FT_PROTOCOL, BASE_NONE, NULL, 0x0,
4496
15
            NULL, HFILL }
4497
15
        },
4498
15
        { &hf_isobus_vt_command,
4499
15
          { "Command",                  "isobus.vt.command",
4500
15
            FT_UINT8, BASE_DEC | BASE_EXT_STRING, &vt_function_code_ext, 0x0,
4501
15
            NULL, HFILL }
4502
15
        },
4503
15
        { &hf_isobus_vt_objectid,
4504
15
          { "Object ID",                "isobus.vt.object_id",
4505
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4506
15
            NULL, HFILL }
4507
15
        },
4508
15
        { &hf_isobus_vt_softkey_keyactcode,
4509
15
          { "Activation Code",          "isobus.vt.soft_key.act_code",
4510
15
            FT_UINT8, BASE_DEC, VALS(key_activation_codes), 0x0,
4511
15
            NULL, HFILL }
4512
15
        },
4513
15
        { &hf_isobus_vt_softkey_objectid,
4514
15
          { "Object ID",                "isobus.vt.soft_key.object_id",
4515
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4516
15
            NULL, HFILL }
4517
15
        },
4518
15
        { &hf_isobus_vt_softkey_parentobjectid,
4519
15
          { "Parent Object ID",         "isobus.vt.soft_key.parent_object_id",
4520
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4521
15
            NULL, HFILL }
4522
15
        },
4523
15
        { &hf_isobus_vt_softkey_keynumber,
4524
15
          { "Key Number",               "isobus.vt.soft_key.key_number",
4525
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4526
15
            NULL, HFILL }
4527
15
        },
4528
15
        { &hf_isobus_vt_button_keyactcode,
4529
15
          { "Activation Code",          "isobus.vt.button.act_code",
4530
15
            FT_UINT8, BASE_DEC, VALS(button_activation_codes), 0x0,
4531
15
            NULL, HFILL }
4532
15
        },
4533
15
        { &hf_isobus_vt_button_objectid,
4534
15
          { "Object ID",                "isobus.vt.button.object_id",
4535
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4536
15
            NULL, HFILL }
4537
15
        },
4538
15
        { &hf_isobus_vt_button_parentobjectid,
4539
15
          { "Parent Object ID",         "isobus.vt.button.parent_object_id",
4540
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4541
15
            NULL, HFILL }
4542
15
        },
4543
15
        { &hf_isobus_vt_button_keynumber,
4544
15
          { "Key Number",               "isobus.vt.button.key_number",
4545
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4546
15
            NULL, HFILL }
4547
15
        },
4548
15
        { &hf_isobus_vt_pointing_xposition,
4549
15
          { "X Position",               "isobus.vt.pointing_event.x_position",
4550
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
4551
15
            NULL, HFILL }
4552
15
        },
4553
15
        { &hf_isobus_vt_pointing_yposition,
4554
15
          { "Y Position",               "isobus.vt.pointing_event.y_position",
4555
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
4556
15
            NULL, HFILL }
4557
15
        },
4558
15
        { &hf_isobus_vt_pointing_touchstate,
4559
15
          { "Touch State",              "isobus.vt.pointing_event.touch_state",
4560
15
            FT_UINT8, BASE_DEC, VALS(pointing_touch_state), 0x0,
4561
15
            NULL, HFILL }
4562
15
        },
4563
15
        { &hf_isobus_vt_vtselectinputobject_objectid,
4564
15
          { "Object ID",                "isobus.vt.vt_select_input_object.object_id",
4565
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4566
15
            NULL, HFILL }
4567
15
        },
4568
15
        { &hf_isobus_vt_vtselectinputobject_selection,
4569
15
          { "Selection",                "isobus.vt.vt_select_input_object.selection",
4570
15
            FT_UINT8, BASE_DEC, VALS(selection), 0x0,
4571
15
            NULL, HFILL }
4572
15
        },
4573
15
        { &hf_isobus_vt_vtselectinputobject_openforinput,
4574
15
          { "Open For Input",           "isobus.vt.vt_select_input_object.open_for_input",
4575
15
            FT_UINT8, BASE_DEC, NULL, 0x80,
4576
15
            NULL, HFILL }
4577
15
        },
4578
15
        { &hf_isobus_vt_vtescmessage_objectid,
4579
15
          { "Object ID",                "isobus.vt.vt_esc_message.object_id",
4580
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4581
15
            NULL, HFILL }
4582
15
        },
4583
15
        { &hf_isobus_vt_vtescmessage_errorcodes,
4584
15
          { "Error Codes",              "isobus.vt.vt_esc_message.error_codes",
4585
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4586
15
            NULL, HFILL }
4587
15
        },
4588
15
        { &hf_isobus_vt_vtchgnumval_objectid,
4589
15
          { "Object ID",                "isobus.vt.vt_chg_num_val.object_id",
4590
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4591
15
            NULL, HFILL }
4592
15
        },
4593
15
        { &hf_isobus_vt_vtchgnumval_value,
4594
15
          { "Value",                    "isobus.vt.vt_chg_num_val.val",
4595
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
4596
15
            NULL, HFILL }
4597
15
        },
4598
15
        { &hf_isobus_vt_vtchgactivemask_maskobjectid,
4599
15
          { "Mask Object ID",           "isobus.vt.vt_chg_active_mask.mask_object_id",
4600
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4601
15
            NULL, HFILL }
4602
15
        },
4603
15
        { &hf_isobus_vt_vtchgactivemask_errorcodes,
4604
15
          { "Error Codes",                "isobus.vt.vt_chg_active_mask.error_codes",
4605
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
4606
15
            NULL, HFILL }
4607
15
        },
4608
15
        { &hf_isobus_vt_vtchgactivemask_errorobjectid,
4609
15
          { "Error Object ID",          "isobus.vt.vt_chg_active_mask.error_object_id",
4610
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4611
15
            NULL, HFILL }
4612
15
        },
4613
15
        { &hf_isobus_vt_vtchgactivemask_errorobjectidparent,
4614
15
          { "Error Object ID Parent",   "isobus.vt.vt_chg_active_mask.error_object_id_parent",
4615
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4616
15
            NULL, HFILL }
4617
15
        },
4618
15
        { &hf_isobus_vt_vtchgstrval_objectid,
4619
15
          { "Object ID",                "isobus.vt.vt_chg_str_val.object_id",
4620
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4621
15
            NULL, HFILL }
4622
15
        },
4623
15
        { &hf_isobus_vt_vtchgstrval_length,
4624
15
          { "Length",                   "isobus.vt.vt_chg_str_val.length",
4625
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4626
15
            NULL, HFILL }
4627
15
        },
4628
15
        { &hf_isobus_vt_vtchgstrval_value,
4629
15
          { "Value",                    "isobus.vt.vt_chg_str_val.val",
4630
15
            FT_STRING, BASE_NONE, NULL, 0x0,
4631
15
            NULL, HFILL }
4632
15
        },
4633
15
        { &hf_isobus_vt_vtonuserlayouthideshow_objectid_1,
4634
15
          { "Object ID 1",                 "isobus.vt.vt_on_user_layout_hide_show.object_id_1",
4635
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4636
15
            NULL, HFILL }
4637
15
        },
4638
15
        { &hf_isobus_vt_vtonuserlayouthideshow_status_1,
4639
15
          { "Status 1",                    "isobus.vt.vt_on_user_layout_hide_show.status_1",
4640
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4641
15
            NULL, HFILL }
4642
15
        },
4643
15
        { &hf_isobus_vt_vtonuserlayouthideshow_objectid_2,
4644
15
          { "Object ID 2",                 "isobus.vt.vt_on_user_layout_hide_show.object_id_2",
4645
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4646
15
            NULL, HFILL }
4647
15
        },
4648
15
        { &hf_isobus_vt_vtonuserlayouthideshow_status_2,
4649
15
          { "Status 2",                    "isobus.vt.vt_on_user_layout_hide_show.status_2",
4650
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4651
15
            NULL, HFILL }
4652
15
        },
4653
15
        { &hf_isobus_vt_vtcontrolaudiosignaltermination_terminationcause,
4654
15
          { "Termination Cause",           "isobus.vt.vt_control_audio_signal_termination.termination_cause",
4655
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
4656
15
            NULL, HFILL }
4657
15
        },
4658
15
        { &hf_isobus_vt_endofobjectpool_errorcodes,
4659
15
          { "Error Codes",                 "isobus.vt.end_of_object_pool.error_codes",
4660
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
4661
15
            NULL, HFILL }
4662
15
        },
4663
15
        { &hf_isobus_vt_endofobjectpool_faultyparentobjectid,
4664
15
          { "Faulty Parent Object ID",     "isobus.vt.end_of_object_pool.faulty_parent_object_id",
4665
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4666
15
            NULL, HFILL }
4667
15
        },
4668
15
        { &hf_isobus_vt_endofobjectpool_faultyobjectid,
4669
15
          { "Faulty Object ID",            "isobus.vt.end_of_object_pool.faulty_object_id",
4670
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4671
15
            NULL, HFILL }
4672
15
        },
4673
15
        { &hf_isobus_vt_endofobjectpool_objectpoolerrorcodes,
4674
15
          { "Object Pool Error Codes",     "isobus.vt.end_of_object_pool.object_pool_error_codes",
4675
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
4676
15
            NULL, HFILL }
4677
15
        },
4678
15
        { &hf_isobus_vt_auxiliaryassignmenttype1_sourceaddressauxinputdevice,
4679
15
          { "Source Address Auxiliary Input Device", "isobus.vt.auxiliary_assignment_type_1.source_address_aux_input_device",
4680
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4681
15
            NULL, HFILL }
4682
15
        },
4683
15
        { &hf_isobus_vt_auxiliaryassignmenttype1_auxinputnumber,
4684
15
          { "Auxiliary Input Number",   "isobus.vt.auxiliary_assignment_type_1.aux_input_number",
4685
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4686
15
            NULL, HFILL }
4687
15
        },
4688
15
        { &hf_isobus_vt_auxiliaryassignmenttype1_objectidauxinputdevice,
4689
15
          { "Object ID of Auxiliary Function",                "isobus.vt.auxiliary_assignment_type_1.object_id_of_auxiliary_function",
4690
15
            FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
4691
15
            NULL, HFILL }
4692
15
        },
4693
15
        { &hf_isobus_vt_auxiliaryinputtype1status_inputnumber,
4694
15
          { "Input Number",             "isobus.vt.auxiliary_input_type_1_status.input_number",
4695
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4696
15
            NULL, HFILL }
4697
15
        },
4698
15
        { &hf_isobus_vt_auxiliaryinputtype1status_analyzevalue,
4699
15
          { "Analyze Value",             "isobus.vt.auxiliary_input_type_1_status.analyze_value",
4700
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
4701
15
            NULL, HFILL }
4702
15
        },
4703
15
        { &hf_isobus_vt_auxiliaryinputtype1status_numberoftransitions,
4704
15
          { "Number of transitions",     "isobus.vt.auxiliary_input_type_1_status.number_of_transitions",
4705
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
4706
15
            NULL, HFILL }
4707
15
        },
4708
15
        { &hf_isobus_vt_auxiliaryinputtype1status_booleanvalue,
4709
15
          { "Boolean Value",             "isobus.vt.auxiliary_input_type_1_status.boolean_value",
4710
15
            FT_UINT8, BASE_DEC, VALS(auxiliary_boolean_value), 0x0,
4711
15
            NULL, HFILL }
4712
15
        },
4713
15
        { &hf_isobus_vt_preferredassignment_numberofinputunits,
4714
15
          { "Number of Input Units",             "isobus.vt.preferred_assignment.number_of_input_units",
4715
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4716
15
            NULL, HFILL }
4717
15
        },
4718
15
        { &hf_isobus_vt_preferredassignment_auxinputunit_name,
4719
15
          { "64-bit NAME of the Auxiliary Input Unit", "isobus.vt.preferred_assignment.auxiliary_input_unit.name",
4720
15
            FT_UINT64, BASE_HEX, NULL, 0x0,
4721
15
            NULL, HFILL }
4722
15
        },
4723
15
        { &hf_isobus_vt_preferredassignment_auxinputunit_modelidentificationcode,
4724
15
          { "Model Identification Code of the Auxiliary Input Unit", "isobus.vt.preferred_assignment.auxiliary_input_unit.model_identification_code",
4725
15
            FT_UINT16, BASE_HEX, NULL, 0x0,
4726
15
            NULL, HFILL }
4727
15
        },
4728
15
        { &hf_isobus_vt_preferredassignment_auxinputunit_numberofpreferredfunctions,
4729
15
          { "Number of Preferred Functions for this Auxiliary Input Unit", "isobus.vt.preferred_assignment.auxiliary_input_unit.number_of_preferred_functions",
4730
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4731
15
            NULL, HFILL }
4732
15
        },
4733
15
        { &hf_isobus_vt_preferredassignment_auxinputunit_preferredfunctions_auxfunctionobjectid,
4734
15
          { "Object ID of Auxiliary Function", "isobus.vt.preferred_assignment.auxiliary_input_unit.preferred_functions.auxiliary_function_object_id",
4735
15
            FT_UINT16, BASE_HEX_DEC, VALS(object_id_strings), 0x0,
4736
15
            NULL, HFILL }
4737
15
        },
4738
15
        { &hf_isobus_vt_preferredassignment_auxinputunit_preferredfunctions_auxinputobjectid,
4739
15
          { "Object ID of Auxiliary Input", "isobus.vt.preferred_assignment.auxiliary_input_unit.preferred_functions.auxiliary_input_object_id",
4740
15
            FT_UINT16, BASE_HEX_DEC, VALS(object_id_strings), 0x0,
4741
15
            NULL, HFILL }
4742
15
        },
4743
15
        { &hf_isobus_vt_preferredassignment_errorcodes,
4744
15
          { "Error Codes", "isobus.vt.preferred_assignment.error_codes",
4745
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
4746
15
            NULL, HFILL }
4747
15
        },
4748
15
        { &hf_isobus_vt_preferredassignment_faultyauxiliaryfunctionobjectid,
4749
15
          { "Faulty Auxiliary Function Object ID", "isobus.vt.preferred_assignment.faulty_auxiliary_function_object_id",
4750
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4751
15
            NULL, HFILL }
4752
15
        },
4753
15
        { &hf_isobus_vt_auxiliaryinputtype2maintenance_modelidentificationcode,
4754
15
          { "Model Identification Code", "isobus.vt.auxiliary_input_type_2_maintenance.model_identification_code",
4755
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
4756
15
            NULL, HFILL }
4757
15
        },
4758
15
        { &hf_isobus_vt_auxiliaryinputtype2maintenance_status,
4759
15
          { "Status", "isobus.vt.auxiliary_input_type_2_maintenance.status",
4760
15
            FT_UINT8, BASE_DEC, VALS(auxiliary_maintenance_status), 0x0,
4761
15
            NULL, HFILL }
4762
15
        },
4763
15
        { &hf_isobus_vt_auxiliaryassignmenttype2_name,
4764
15
          { "64-bit NAME of the Auxiliary Input Unit", "isobus.vt.auxiliary_assignment_type_2.name",
4765
15
            FT_UINT64, BASE_HEX, NULL, 0x0,
4766
15
            NULL, HFILL }
4767
15
        },
4768
15
        { &hf_isobus_vt_auxiliaryassignmenttype2_flags,
4769
15
          { "Flags", "isobus.vt.auxiliary_assignment_type_2.flags",
4770
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
4771
15
            NULL, HFILL }
4772
15
        },
4773
15
        { &hf_isobus_vt_auxiliaryassignmenttype2_flags_preferredassignment,
4774
15
          { "Preferred Assignment", "isobus.vt.auxiliary_assignment_type_2.flags.preferred_assignment",
4775
15
            FT_UINT8, BASE_HEX, NULL, 0x80,
4776
15
            NULL, HFILL }
4777
15
        },
4778
15
        { &hf_isobus_vt_auxiliaryassignmenttype2_flags_auxiliaryfunctiontype,
4779
15
          { "Auxiliary Function Type", "isobus.vt.auxiliary_assignment_type_2.flags.auxiliary_function_type",
4780
15
            FT_UINT8, BASE_DEC, NULL, 0x1F,
4781
15
            NULL, HFILL }
4782
15
        },
4783
15
        { &hf_isobus_vt_auxiliaryassignmenttype2_auxinputobjectid,
4784
15
          { "Object ID of the Auxiliary Input", "isobus.vt.auxiliary_assignment_type_2.auxiliary_input_object_id",
4785
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4786
15
            NULL, HFILL }
4787
15
        },
4788
15
        { &hf_isobus_vt_auxiliaryassignmenttype2_auxfunctionobjectid,
4789
15
          { "Object ID of Auxiliary Function", "isobus.vt.auxiliary_assignment_type_2.auxiliary_function_object_id",
4790
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4791
15
            NULL, HFILL }
4792
15
        },
4793
15
        { &hf_isobus_vt_auxiliaryassignmenttype2_errorcodes,
4794
15
          { "Error Codes", "isobus.vt.auxiliary_assignment_type_2.error_codes",
4795
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
4796
15
            NULL, HFILL }
4797
15
        },
4798
15
        { &hf_isobus_vt_auxiliaryinputstatustype2enable_auxiliaryinputobjectid,
4799
15
          { "Auxiliary Input Object ID", "isobus.vt.auxiliary_input_status_type_2_enable.auxiliary_input_object_id",
4800
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4801
15
            NULL, HFILL }
4802
15
        },
4803
15
        { &hf_isobus_vt_auxiliaryinputstatustype2enable_enable,
4804
15
          { "Enable", "isobus.vt.auxiliary_input_status_type_2_enable.enable",
4805
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4806
15
            NULL, HFILL }
4807
15
        },
4808
15
        { &hf_isobus_vt_auxiliaryinputstatustype2enable_status,
4809
15
          { "Status", "isobus.vt.auxiliary_input_status_type_2_enable.status",
4810
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4811
15
            NULL, HFILL }
4812
15
        },
4813
15
        { &hf_isobus_vt_auxiliaryinputstatustype2enable_errorcodes,
4814
15
          { "Error Codes", "isobus.vt.auxiliary_input_status_type_2_enable.error_codes",
4815
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
4816
15
            NULL, HFILL }
4817
15
        },
4818
15
        { &hf_isobus_vt_auxiliaryinputtype2status_auxiliaryinputobjectid,
4819
15
          { "Auxiliary Input Object ID", "isobus.vt.auxiliary_input_type_2_status.auxiliary_input_object_id",
4820
15
            FT_UINT16, BASE_HEX, VALS(object_id_strings), 0x0,
4821
15
            NULL, HFILL }
4822
15
        },
4823
15
        { &hf_isobus_vt_auxiliaryinputtype2status_value1,
4824
15
          { "Value 1", "isobus.vt.auxiliary_input_type_2_status.value_1",
4825
15
            FT_UINT16, BASE_HEX, NULL, 0x0,
4826
15
            NULL, HFILL }
4827
15
        },
4828
15
        { &hf_isobus_vt_auxiliaryinputtype2status_value2,
4829
15
          { "Value 2", "isobus.vt.auxiliary_input_type_2_status.value_2",
4830
15
            FT_UINT16, BASE_HEX, NULL, 0x0,
4831
15
            NULL, HFILL }
4832
15
        },
4833
15
        { &hf_isobus_vt_auxiliaryinputtype2status_operatingstate,
4834
15
          { "Operating State", "isobus.vt.auxiliary_input_type_2_status.operating_state",
4835
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
4836
15
            NULL, HFILL }
4837
15
        },
4838
15
        { &hf_isobus_vt_auxiliaryinputtype2status_operatingstate_learnmodeactive,
4839
15
          { "Operating State", "isobus.vt.auxiliary_input_type_2_status.operating_state.learn_mode_active",
4840
15
            FT_UINT8, BASE_HEX, NULL, 0x01,
4841
15
            NULL, HFILL }
4842
15
        },
4843
15
        { &hf_isobus_vt_auxiliaryinputtype2status_operatingstate_inputactivatedinlearnmode,
4844
15
          { "Input activated in learn mode", "isobus.vt.auxiliary_input_type_2_status.operating_state.input_activated_in_learn_mode",
4845
15
            FT_UINT8, BASE_HEX, NULL, 0x02,
4846
15
            NULL, HFILL }
4847
15
        },
4848
15
        { &hf_isobus_vt_auxiliarycapabilities_requesttype,
4849
15
          { "Request Type", "isobus.vt.auxiliary_capabilities.request_type",
4850
15
            FT_UINT8, BASE_DEC, VALS(auxiliary_capabilities_request_type), 0x0,
4851
15
            NULL, HFILL }
4852
15
        },
4853
15
        { &hf_isobus_vt_auxiliarycapabilities_numberofauxiliaryunits,
4854
15
          { "Number of Auxiliary Unit", "isobus.vt.auxiliary_capabilities.number_of_auxiliary_units",
4855
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4856
15
            NULL, HFILL }
4857
15
        },
4858
15
        { &hf_isobus_vt_auxiliarycapabilities_auxiliaryunit_name,
4859
15
          { "64-bit NAME of the Auxiliary Unit", "isobus.vt.auxiliary_capabilities.auxiliary_unit.name",
4860
15
            FT_UINT64, BASE_HEX, NULL, 0x0,
4861
15
            NULL, HFILL }
4862
15
        },
4863
15
        { &hf_isobus_vt_auxiliarycapabilities_auxiliaryunit_numberofdifferentsets,
4864
15
          { "Number of different sets for this Auxiliary Unit", "isobus.vt.auxiliary_capabilities.auxiliary_unit.number_of_different_sets",
4865
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4866
15
            NULL, HFILL }
4867
15
        },
4868
15
        { &hf_isobus_vt_auxiliarycapabilities_auxiliaryunit_set_numberofinstances,
4869
15
          { "Number of Instances", "isobus.vt.auxiliary_capabilities.auxiliary_unit.set.number_of_instances",
4870
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4871
15
            NULL, HFILL }
4872
15
        },
4873
15
        { &hf_isobus_vt_auxiliarycapabilities_auxiliaryunit_set_functionattribute,
4874
15
          { "Function attribute", "isobus.vt.auxiliary_capabilities.auxiliary_unit.set.function_attribute",
4875
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4876
15
            NULL, HFILL }
4877
15
        },
4878
15
        { &hf_isobus_vt_auxiliarycapabilities_auxiliaryunit_set_assignedattribute,
4879
15
          { "Assigned attribute", "isobus.vt.auxiliary_capabilities.auxiliary_unit.set.assigned_attribute",
4880
15
            FT_UINT8, BASE_HEX, VALS(auxiliary_assigned_attributes), 0x0,
4881
15
            NULL, HFILL }
4882
15
        },
4883
15
        { &hf_isobus_vt_esc_objectid,
4884
15
          { "Object ID", "isobus.vt.esc.object_id",
4885
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4886
15
            NULL, HFILL }
4887
15
        },
4888
15
        { &hf_isobus_vt_esc_errorcodes,
4889
15
          { "Error Codes", "isobus.vt.esc.error_codes",
4890
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
4891
15
            NULL, HFILL }
4892
15
        },
4893
15
        { &hf_isobus_vt_hideshowobj_objectid,
4894
15
          { "Object ID", "isobus.vt.hide_show_object.object_id",
4895
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4896
15
            NULL, HFILL }
4897
15
        },
4898
15
        { &hf_isobus_vt_hideshowobj_action,
4899
15
          { "Action", "isobus.vt.hide_show_object.action",
4900
15
            FT_UINT8, BASE_DEC, VALS(vt_hide_show_action), 0x0,
4901
15
            NULL, HFILL }
4902
15
        },
4903
15
        { &hf_isobus_vt_hideshowobj_errorcodes,
4904
15
          { "Error Codes", "isobus.vt.hide_show_object.error_codes",
4905
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
4906
15
            NULL, HFILL }
4907
15
        },
4908
15
        { &hf_isobus_vt_enabledisableobj_objectid,
4909
15
          { "Object ID", "isobus.vt.enable_disable_object.object_id",
4910
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4911
15
            NULL, HFILL }
4912
15
        },
4913
15
        { &hf_isobus_vt_enabledisableobj_enabledisable,
4914
15
          { "Action",                   "isobus.vt.enable_disable_object.enable_disable",
4915
15
            FT_UINT8, BASE_DEC, VALS(vt_enable_disable_action), 0x0,
4916
15
            NULL, HFILL }
4917
15
        },
4918
15
        { &hf_isobus_vt_enabledisableobj_errorcodes,
4919
15
          { "Error Codes",              "isobus.vt.enable_disable_object.error_codes",
4920
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
4921
15
            NULL, HFILL }
4922
15
        },
4923
15
        { &hf_isobus_vt_selectinputobject_objectid,
4924
15
          { "Object ID",                "isobus.vt.select_input_object.object_id",
4925
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4926
15
            NULL, HFILL }
4927
15
        },
4928
15
        { &hf_isobus_vt_selectinputobject_option,
4929
15
          { "Option",                "isobus.vt.select_input_object.option",
4930
15
            FT_UINT8, BASE_HEX, VALS(select_input_object_option), 0x0,
4931
15
            NULL, HFILL }
4932
15
        },
4933
15
        { &hf_isobus_vt_selectinputobject_response,
4934
15
          { "Response",                "isobus.vt.select_input_object.response",
4935
15
            FT_UINT16, BASE_DEC_HEX, VALS(select_input_opject_response), 0x0,
4936
15
            NULL, HFILL }
4937
15
        },
4938
15
        { &hf_isobus_vt_selectinputobject_errorcodes,
4939
15
          { "Object ID", "isobus.vt.select_input_object.error_codes",
4940
15
            FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
4941
15
            NULL, HFILL }
4942
15
        },
4943
15
        { &hf_isobus_vt_controlaudiosignal_activations,
4944
15
          { "Activations", "isobus.vt.control_audio_signal.activations",
4945
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4946
15
            NULL, HFILL }
4947
15
        },
4948
15
        { &hf_isobus_vt_controlaudiosignal_frequency,
4949
15
          { "Frequency", "isobus.vt.control_audio_signal.frequency",
4950
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
4951
15
            NULL, HFILL }
4952
15
        },
4953
15
        { &hf_isobus_vt_controlaudiosignal_ontime,
4954
15
          { "On-time duration", "isobus.vt.control_audio_signal.on_time",
4955
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
4956
15
            NULL, HFILL }
4957
15
        },
4958
15
        { &hf_isobus_vt_controlaudiosignal_offtime,
4959
15
          { "Off-time duration", "isobus.vt.control_audio_signal.off_time",
4960
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
4961
15
            NULL, HFILL }
4962
15
        },
4963
15
        { &hf_isobus_vt_controlaudiosignal_errorcodes,
4964
15
          { "Error Codes", "isobus.vt.control_audio_signal.error_codes",
4965
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
4966
15
            NULL, HFILL }
4967
15
        },
4968
15
        { &hf_isobus_vt_setaudiovolume_volume,
4969
15
          { "Volume", "isobus.vt.set_audio_volume.volume",
4970
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4971
15
            NULL, HFILL }
4972
15
        },
4973
15
        { &hf_isobus_vt_setaudiovolume_errorcodes,
4974
15
          { "Error Codes", "isobus.vt.set_audio_volume.error_codes",
4975
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
4976
15
            NULL, HFILL }
4977
15
        },
4978
15
        { &hf_isobus_vt_changechildlocation_parentobjectid,
4979
15
          { "Parent Object ID", "isobus.vt.change_child_location.parent_object_id",
4980
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4981
15
            NULL, HFILL }
4982
15
        },
4983
15
        { &hf_isobus_vt_changechildlocation_objectid,
4984
15
          { "Object ID", "isobus.vt.change_child_location.object_id",
4985
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
4986
15
            NULL, HFILL }
4987
15
        },
4988
15
        { &hf_isobus_vt_changechildlocation_relativexpos,
4989
15
          { "Relative X Position", "isobus.vt.change_child_location.relative_x_position",
4990
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4991
15
            NULL, HFILL }
4992
15
        },
4993
15
        { &hf_isobus_vt_changechildlocation_relativeypos,
4994
15
          { "Relative Y Position", "isobus.vt.change_child_location.relative_y_position",
4995
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
4996
15
            NULL, HFILL }
4997
15
        },
4998
15
        { &hf_isobus_vt_changechildlocation_errorcodes,
4999
15
          { "Errorcode", "isobus.vt.change_child_location.error_codes",
5000
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5001
15
            NULL, HFILL }
5002
15
        },
5003
15
        { &hf_isobus_vt_changechildposition_parentobjectid,
5004
15
          { "Parent Object ID", "isobus.vt.chg_child_pos.parent_object_id",
5005
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5006
15
            NULL, HFILL }
5007
15
        },
5008
15
        { &hf_isobus_vt_changechildposition_objectid,
5009
15
          { "Object ID", "isobus.vt.chg_child_pos.object_id",
5010
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5011
15
            NULL, HFILL }
5012
15
        },
5013
15
        { &hf_isobus_vt_changechildposition_xpos,
5014
15
          { "Relative X Position", "isobus.vt.chg_child_pos.rel_x_pos",
5015
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5016
15
            NULL, HFILL }
5017
15
        },
5018
15
        { &hf_isobus_vt_changechildposition_ypos,
5019
15
          { "Relative Y Position", "isobus.vt.chg_child_pos.rel_y_pos",
5020
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5021
15
            NULL, HFILL }
5022
15
        },
5023
15
        { &hf_isobus_vt_changechildposition_errorcodes,
5024
15
          { "Error codes", "isobus.vt.chg_child_pos.error_codes",
5025
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5026
15
            NULL, HFILL }
5027
15
        },
5028
15
        { &hf_isobus_vt_changesize_objectid,
5029
15
          { "Object ID", "isobus.vt.change_size.object_id",
5030
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5031
15
            NULL, HFILL }
5032
15
        },
5033
15
        { &hf_isobus_vt_changesize_newwidth,
5034
15
          { "New Width", "isobus.vt.change_size.new_width",
5035
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5036
15
            NULL, HFILL }
5037
15
        },
5038
15
        { &hf_isobus_vt_changesize_newheight,
5039
15
          { "New Height", "isobus.vt.change_size.new_height",
5040
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5041
15
            NULL, HFILL }
5042
15
        },
5043
15
        { &hf_isobus_vt_changesize_errorcodes,
5044
15
          { "Errorcode", "isobus.vt.change_size.error_codes",
5045
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5046
15
            NULL, HFILL }
5047
15
        },
5048
15
        { &hf_isobus_vt_chgnumval_objectid,
5049
15
          { "Object ID", "isobus.vt.change_numeric_value.object_id",
5050
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5051
15
            NULL, HFILL }
5052
15
        },
5053
15
        { &hf_isobus_vt_chgnumval_errorcodes,
5054
15
          { "Error Codes", "isobus.vt.change_numeric_value.error_codes",
5055
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5056
15
            NULL, HFILL }
5057
15
        },
5058
15
        { &hf_isobus_vt_chgnumval_value,
5059
15
          { "Value", "isobus.vt.change_numeric_value.val",
5060
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
5061
15
            NULL, HFILL }
5062
15
        },
5063
15
        { &hf_isobus_vt_changeendpoint_objectid,
5064
15
          { "Object ID", "isobus.vt.change_end_point.object_id",
5065
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5066
15
            NULL, HFILL }
5067
15
        },
5068
15
        { &hf_isobus_vt_changeendpoint_width,
5069
15
          { "Width", "isobus.vt.change_end_point.width",
5070
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5071
15
            NULL, HFILL }
5072
15
        },
5073
15
        { &hf_isobus_vt_changeendpoint_height,
5074
15
          { "Height", "isobus.vt.change_end_point.height",
5075
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5076
15
            NULL, HFILL }
5077
15
        },
5078
15
        { &hf_isobus_vt_changeendpoint_linedirection,
5079
15
          { "Line Direction", "isobus.vt.change_end_point.line_direction",
5080
15
            FT_UINT8, BASE_DEC, VALS(line_direction), 0x0,
5081
15
            NULL, HFILL }
5082
15
        },
5083
15
        { &hf_isobus_vt_changefontattributes_objectid,
5084
15
          { "Object ID", "isobus.vt.change_font_attributes.object_id",
5085
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5086
15
            NULL, HFILL }
5087
15
        },
5088
15
        { &hf_isobus_vt_changefontattributes_fontcolour,
5089
15
          { "Font Colour", "isobus.vt.change_font_attributes.font_colour",
5090
15
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(vt_colours), 0x0,
5091
15
            NULL, HFILL }
5092
15
        },
5093
15
        { &hf_isobus_vt_changefontattributes_fontsize,
5094
15
          { "Font Size", "isobus.vt.change_font_attributes.font_size",
5095
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5096
15
            NULL, HFILL }
5097
15
        },
5098
15
        { &hf_isobus_vt_changefontattributes_fonttype,
5099
15
          { "Font Type", "isobus.vt.change_font_attributes.font_type",
5100
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5101
15
            NULL, HFILL }
5102
15
        },
5103
15
        { &hf_isobus_vt_changefontattributes_fontstyle,
5104
15
          { "Font Style", "isobus.vt.change_font_attributes.font_style",
5105
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5106
15
            NULL, HFILL }
5107
15
        },
5108
15
        { &hf_isobus_vt_changefontattributes_errorcodes,
5109
15
          { "Error Codes", "isobus.vt.change_font_attributes.error_codes",
5110
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5111
15
            NULL, HFILL }
5112
15
        },
5113
15
        { &hf_isobus_vt_changelineattributes_objectid,
5114
15
          { "Object ID", "isobus.vt.change_line_attributes.object_id",
5115
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5116
15
            NULL, HFILL }
5117
15
        },
5118
15
        { &hf_isobus_vt_changelineattributes_linecolour,
5119
15
          { "Line Colour", "isobus.vt.change_line_attributes.line_colour",
5120
15
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(vt_colours), 0x0,
5121
15
            NULL, HFILL }
5122
15
        },
5123
15
        { &hf_isobus_vt_changelineattributes_linewidth,
5124
15
          { "Line Width", "isobus.vt.change_line_attributes.line_width",
5125
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5126
15
            NULL, HFILL }
5127
15
        },
5128
15
        { &hf_isobus_vt_changelineattributes_lineart,
5129
15
          { "Line Art", "isobus.vt.change_line_attributes.line_art",
5130
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5131
15
            NULL, HFILL }
5132
15
        },
5133
15
        { &hf_isobus_vt_changelineattributes_errorcodes,
5134
15
          { "Error Codes", "isobus.vt.change_line_attributes.error_codes",
5135
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5136
15
            NULL, HFILL }
5137
15
        },
5138
15
        { &hf_isobus_vt_changefillattributes_objectid,
5139
15
          { "Object ID", "isobus.vt.change_fill_attributes.object_id",
5140
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5141
15
            NULL, HFILL }
5142
15
        },
5143
15
        { &hf_isobus_vt_changefillattributes_filltype,
5144
15
          { "Fill Type", "isobus.vt.change_fill_attributes.fill_type",
5145
15
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(vt_colours), 0x0,
5146
15
            NULL, HFILL }
5147
15
        },
5148
15
        { &hf_isobus_vt_changefillattributes_fillcolour,
5149
15
          { "Fill Colour", "isobus.vt.change_fill_attributes.fill_colour",
5150
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5151
15
            NULL, HFILL }
5152
15
        },
5153
15
        { &hf_isobus_vt_changefillattributes_fillpatternobjectid,
5154
15
          { "Fill Pattern Object ID", "isobus.vt.change_fill_attributes.fill_pattern_object_id",
5155
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5156
15
            NULL, HFILL }
5157
15
        },
5158
15
        { &hf_isobus_vt_changefillattributes_errorcodes,
5159
15
          { "Error Codes", "isobus.vt.change_fill_attributes.error_codes",
5160
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5161
15
            NULL, HFILL }
5162
15
        },
5163
15
        { &hf_isobus_vt_changeactivemask_workingset,
5164
15
          { "Working Set Object ID", "isobus.vt.chg_active_mask.working_set_object_id",
5165
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5166
15
            NULL, HFILL }
5167
15
        },
5168
15
        { &hf_isobus_vt_changeactivemask_newactivemask,
5169
15
          { "New Active Mask Object ID", "isobus.vt.chg_active_mask.new_active_mask_object_id",
5170
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5171
15
            NULL, HFILL }
5172
15
        },
5173
15
        { &hf_isobus_vt_changeactivemask_errorcodes,
5174
15
          { "Error Codes", "isobus.vt.chg_active_mask.error_codes",
5175
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5176
15
            NULL, HFILL }
5177
15
        },
5178
15
        { &hf_isobus_vt_changesoftkeymask_masktype,
5179
15
          { "Mask Type", "isobus.vt.change_soft_key_mask.mask_type",
5180
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5181
15
            NULL, HFILL }
5182
15
        },
5183
15
        { &hf_isobus_vt_changesoftkeymask_datamaskobjectid,
5184
15
          { "Working Set Object ID", "isobus.vt.change_soft_key_mask.data_mask_object_id",
5185
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5186
15
            NULL, HFILL }
5187
15
        },
5188
15
        { &hf_isobus_vt_changesoftkeymask_newsoftkeymaskobjectid,
5189
15
          { "New Active Mask Object ID", "isobus.vt.change_soft_key_mask.new_soft_key_mask_object_id",
5190
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5191
15
            NULL, HFILL }
5192
15
        },
5193
15
        { &hf_isobus_vt_changesoftkeymask_errorcodes,
5194
15
          { "Error Codes", "isobus.vt.change_soft_key_mask.error_codes",
5195
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5196
15
            NULL, HFILL }
5197
15
        },
5198
15
        { &hf_isobus_vt_changeattributes_objectid,
5199
15
          { "Object ID", "isobus.vt.change_attributes.object_id",
5200
15
            FT_UINT16, BASE_DEC, VALS(object_id_strings), 0x0,
5201
15
            NULL, HFILL }
5202
15
        },
5203
15
        { &hf_isobus_vt_changeattributes_attributeid,
5204
15
          { "Attribute ID", "isobus.vt.change_attributes.attribute_id",
5205
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5206
15
            NULL, HFILL }
5207
15
        },
5208
15
        { &hf_isobus_vt_changeattributes_newvalue,
5209
15
          { "New Value For Attribute", "isobus.vt.change_attributes.new_active_mask",
5210
15
            FT_UINT32, BASE_DEC_HEX, NULL, 0x0,
5211
15
            NULL, HFILL }
5212
15
        },
5213
15
        { &hf_isobus_vt_changeattributes_errorcodes,
5214
15
          { "Error Codes", "isobus.vt.change_attributes.error_codes",
5215
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5216
15
            NULL, HFILL }
5217
15
        },
5218
15
        { &hf_isobus_vt_changepriority_objectid,
5219
15
          { "Object ID", "isobus.vt.change_priority.object_id",
5220
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5221
15
            NULL, HFILL }
5222
15
        },
5223
15
        { &hf_isobus_vt_changepriority_newpriority,
5224
15
          { "New Priority", "isobus.vt.change_priority.new_priority",
5225
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5226
15
            NULL, HFILL }
5227
15
        },
5228
15
        { &hf_isobus_vt_changepriority_errorcodes,
5229
15
          { "Error Codes", "isobus.vt.change_priority.error_codes",
5230
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5231
15
            NULL, HFILL }
5232
15
        },
5233
15
        { &hf_isobus_vt_changelistitem_listobjectid,
5234
15
          { "List Object ID", "isobus.vt.change_list_item.list_object_id",
5235
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5236
15
            NULL, HFILL }
5237
15
        },
5238
15
        { &hf_isobus_vt_changelistitem_listindex,
5239
15
          { "List Index", "isobus.vt.change_list_item.list_index",
5240
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5241
15
            NULL, HFILL }
5242
15
        },
5243
15
        { &hf_isobus_vt_changelistitem_newobjectid,
5244
15
          { "New Object ID", "isobus.vt.change_list_item.new_object_id",
5245
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5246
15
            NULL, HFILL }
5247
15
        },
5248
15
        { &hf_isobus_vt_changelistitem_errorcodes,
5249
15
          { "Error Codes", "isobus.vt.change_list_item.error_codes",
5250
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5251
15
            NULL, HFILL }
5252
15
        },
5253
15
        { &hf_isobus_vt_deleteobjectpool_errorcodes,
5254
15
          { "Error Codes", "isobus.vt.delete_object_pool.error_codes",
5255
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5256
15
            NULL, HFILL }
5257
15
        },
5258
15
        { &hf_isobus_vt_chgstrval_objectid,
5259
15
          { "Object ID", "isobus.vt.change_string_value.object_id",
5260
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5261
15
            NULL, HFILL }
5262
15
        },
5263
15
        { &hf_isobus_vt_chgstrval_length,
5264
15
          { "Length", "isobus.vt.change_string_value.length",
5265
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5266
15
            NULL, HFILL }
5267
15
        },
5268
15
        { &hf_isobus_vt_chgstrval_errorcodes,
5269
15
          { "Error Codes", "isobus.vt.change_string_value.error_codes",
5270
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5271
15
            NULL, HFILL }
5272
15
        },
5273
15
        { &hf_isobus_vt_chgstrval_value,
5274
15
          { "Value", "isobus.vt.change_string_value.value",
5275
15
            FT_STRING, BASE_NONE, NULL, 0x0,
5276
15
            NULL, HFILL }
5277
15
        },
5278
15
        { &hf_isobus_vt_changebackgroundcolour_objectid,
5279
15
          { "Object ID", "isobus.vt.change_background_colour.object_id",
5280
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5281
15
            NULL, HFILL }
5282
15
        },
5283
15
        { &hf_isobus_vt_changebackgroundcolour_errorcodes,
5284
15
          { "Error Codes", "isobus.vt.change_background_colour.error_codes",
5285
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5286
15
            NULL, HFILL }
5287
15
        },
5288
15
        { &hf_isobus_vt_changebackgroundcolour_colour,
5289
15
          { "Colour", "isobus.vt.change_background_colour.colour",
5290
15
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(vt_colours), 0x0,
5291
15
            NULL, HFILL }
5292
15
        },
5293
15
        { &hf_isobus_vt_changeobjectlabel_objectid,
5294
15
          { "Object ID", "isobus.vt.change_object_label.object_id",
5295
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5296
15
            NULL, HFILL }
5297
15
        },
5298
15
        { &hf_isobus_vt_changeobjectlabel_stringobjectid,
5299
15
          { "String Object ID", "isobus.vt.change_object_label.string_object_id",
5300
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5301
15
            NULL, HFILL }
5302
15
        },
5303
15
        { &hf_isobus_vt_changeobjectlabel_fonttype,
5304
15
          { "Colour", "isobus.vt.change_object_label.colour",
5305
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5306
15
            NULL, HFILL }
5307
15
        },
5308
15
        { &hf_isobus_vt_changeobjectlabel_graphicobjectid,
5309
15
          { "Graphics Representation Object ID", "isobus.vt.change_object_label.graphic_representation_object_id",
5310
15
            FT_UINT16, BASE_DEC, VALS(object_id_strings), 0x0,
5311
15
            NULL, HFILL }
5312
15
        },
5313
15
        { &hf_isobus_vt_changeobjectlabel_errorcodes,
5314
15
          { "Error Codes", "isobus.vt.change_object_label.error_codes",
5315
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5316
15
            NULL, HFILL }
5317
15
        },
5318
15
        { &hf_isobus_vt_changepolygonpoint_objectid,
5319
15
          { "Object ID", "isobus.vt.change_polygon_point.object_id",
5320
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5321
15
            NULL, HFILL }
5322
15
        },
5323
15
        { &hf_isobus_vt_changepolygonpoint_pointindex,
5324
15
          { "Point Index", "isobus.vt.change_polygon_point.point_index",
5325
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5326
15
            NULL, HFILL }
5327
15
        },
5328
15
        { &hf_isobus_vt_changepolygonpoint_xvalue,
5329
15
          { "X Value", "isobus.vt.change_polygon_point.x_value",
5330
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5331
15
            NULL, HFILL }
5332
15
        },
5333
15
        { &hf_isobus_vt_changepolygonpoint_yvalue,
5334
15
          { "Y Value", "isobus.vt.change_polygon_point.y_value",
5335
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5336
15
            NULL, HFILL }
5337
15
        },
5338
15
        { &hf_isobus_vt_changepolygonpoint_errorcodes,
5339
15
          { "Error Codes", "isobus.vt.change_polygon_point.error_codes",
5340
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5341
15
            NULL, HFILL }
5342
15
        },
5343
15
        { &hf_isobus_vt_changepolygonscale_objectid,
5344
15
          { "Object ID", "isobus.vt.change_polygon_scale.object_id",
5345
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5346
15
            NULL, HFILL }
5347
15
        },
5348
15
        { &hf_isobus_vt_changepolygonscale_newwidth,
5349
15
          { "New Width", "isobus.vt.change_polygon_scale.new_width",
5350
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5351
15
            NULL, HFILL }
5352
15
        },
5353
15
        { &hf_isobus_vt_changepolygonscale_newheight,
5354
15
          { "New Height", "isobus.vt.change_polygon_scale.new_height",
5355
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5356
15
            NULL, HFILL }
5357
15
        },
5358
15
        { &hf_isobus_vt_changepolygonscale_errorcodes,
5359
15
          { "Error Codes", "isobus.vt.change_polygon_scale.error_codes",
5360
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5361
15
            NULL, HFILL }
5362
15
        },
5363
15
        { &hf_isobus_vt_graphicscontext_objectid,
5364
15
          { "Object ID", "isobus.vt.graphics_context.object_id",
5365
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5366
15
            NULL, HFILL }
5367
15
        },
5368
15
        { &hf_isobus_vt_graphicscontext_subcommandid,
5369
15
          { "Sub Command ID", "isobus.vt.graphics_context.sub_command_id",
5370
15
            FT_UINT8, BASE_DEC | BASE_EXT_STRING, &graphics_context_sub_command_id_ext, 0x0,
5371
15
            NULL, HFILL }
5372
15
        },
5373
15
        { &hf_isobus_vt_graphicscontext_setgraphicscursor_xposition,
5374
15
          { "X Position", "isobus.vt.graphics_context.set_graphics_cursor.x_position",
5375
15
            FT_INT16, BASE_DEC, NULL, 0x0,
5376
15
            NULL, HFILL }
5377
15
        },
5378
15
        { &hf_isobus_vt_graphicscontext_setgraphicscursor_yposition,
5379
15
          { "Y Position", "isobus.vt.graphics_context.set_graphics_cursor.y_position",
5380
15
            FT_INT16, BASE_DEC, NULL, 0x0,
5381
15
            NULL, HFILL }
5382
15
        },
5383
15
        { &hf_isobus_vt_graphicscontext_movegraphicscursor_xoffset,
5384
15
          { "X Offset", "isobus.vt.graphics_context.move_graphics_cursor.x_offset",
5385
15
            FT_INT16, BASE_DEC, NULL, 0x0,
5386
15
            NULL, HFILL }
5387
15
        },
5388
15
        { &hf_isobus_vt_graphicscontext_movegraphicscursor_yoffset,
5389
15
          { "Y Offset", "isobus.vt.graphics_context.move_graphics_cursor.y_offset",
5390
15
            FT_INT16, BASE_DEC, NULL, 0x0,
5391
15
            NULL, HFILL }
5392
15
        },
5393
15
        { &hf_isobus_vt_graphicscontext_setforegroundcolour_colour,
5394
15
          { "Colour", "isobus.vt.graphics_context.set_foreground_colour.colour",
5395
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5396
15
            NULL, HFILL }
5397
15
        },
5398
15
        { &hf_isobus_vt_graphicscontext_setbackgroundcolour_colour,
5399
15
          { "Colour", "isobus.vt.graphics_context.set_background_colour.colour",
5400
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5401
15
            NULL, HFILL }
5402
15
        },
5403
15
        { &hf_isobus_vt_graphicscontext_setlineattributesobjectid_objectid,
5404
15
          { "Object ID", "isobus.vt.graphics_context.set_line_attributes_object_id.object_id",
5405
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5406
15
            NULL, HFILL }
5407
15
        },
5408
15
        { &hf_isobus_vt_graphicscontext_setfillattributesobjectid_objectid,
5409
15
          { "Object ID", "isobus.vt.graphics_context.set_fill_attributes_object_id.object_id",
5410
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5411
15
            NULL, HFILL }
5412
15
        },
5413
15
        { &hf_isobus_vt_graphicscontext_setfontattributesobjectid_objectid,
5414
15
          { "Object ID", "isobus.vt.graphics_context.set_font_attributes_object_id.object_id",
5415
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5416
15
            NULL, HFILL }
5417
15
        },
5418
15
        { &hf_isobus_vt_graphicscontext_eraserectangle_width,
5419
15
          { "Width", "isobus.vt.graphics_context.erase_rectangle.width",
5420
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5421
15
            NULL, HFILL }
5422
15
        },
5423
15
        { &hf_isobus_vt_graphicscontext_eraserectangle_height,
5424
15
          { "Height", "isobus.vt.graphics_context.erase_rectangle.height",
5425
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5426
15
            NULL, HFILL }
5427
15
        },
5428
15
        { &hf_isobus_vt_graphicscontext_drawpoint_xoffset,
5429
15
          { "X Offset", "isobus.vt.graphics_context.draw_point.x_offset",
5430
15
            FT_INT16, BASE_DEC, NULL, 0x0,
5431
15
            NULL, HFILL }
5432
15
        },
5433
15
        { &hf_isobus_vt_graphicscontext_drawpoint_yoffset,
5434
15
          { "Y Offset", "isobus.vt.graphics_context.draw_point.y_offset",
5435
15
            FT_INT16, BASE_DEC, NULL, 0x0,
5436
15
            NULL, HFILL }
5437
15
        },
5438
15
        { &hf_isobus_vt_graphicscontext_drawline_xoffset,
5439
15
          { "X Offset", "isobus.vt.graphics_context.draw_line.x_offset",
5440
15
            FT_INT16, BASE_DEC, NULL, 0x0,
5441
15
            NULL, HFILL }
5442
15
        },
5443
15
        { &hf_isobus_vt_graphicscontext_drawline_yoffset,
5444
15
          { "Y Offset", "isobus.vt.graphics_context.draw_line.y_offset",
5445
15
            FT_INT16, BASE_DEC, NULL, 0x0,
5446
15
            NULL, HFILL }
5447
15
        },
5448
15
        { &hf_isobus_vt_graphicscontext_drawrectangle_width,
5449
15
          { "Width", "isobus.vt.graphics_context.draw_rectangle.width",
5450
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5451
15
            NULL, HFILL }
5452
15
        },
5453
15
        { &hf_isobus_vt_graphicscontext_drawrectangle_height,
5454
15
          { "Height", "isobus.vt.graphics_context.draw_rectangle.height",
5455
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5456
15
            NULL, HFILL }
5457
15
        },
5458
15
        { &hf_isobus_vt_graphicscontext_drawclosedellipse_width,
5459
15
          { "Width", "isobus.vt.graphics_context.draw_closed_rectangle.width",
5460
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5461
15
            NULL, HFILL }
5462
15
        },
5463
15
        { &hf_isobus_vt_graphicscontext_drawclosedellipse_height,
5464
15
          { "Height", "isobus.vt.graphics_context.draw_closed_rectangle.height",
5465
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5466
15
            NULL, HFILL }
5467
15
        },
5468
15
        { &hf_isobus_vt_graphicscontext_drawpolygon_numberofpoints,
5469
15
          { "Number of polygon points", "isobus.vt.graphics_context.draw_polygon.number_of_points",
5470
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5471
15
            NULL, HFILL }
5472
15
        },
5473
15
        { &hf_isobus_vt_graphicscontext_drawpolygon_point_xoffset,
5474
15
          { "X Offset", "isobus.vt.graphics_context.draw_polygon.point.x_offset",
5475
15
            FT_INT16, BASE_DEC, NULL, 0x0,
5476
15
            NULL, HFILL }
5477
15
        },
5478
15
        { &hf_isobus_vt_graphicscontext_drawpolygon_point_yoffset,
5479
15
          { "Y Offset", "isobus.vt.graphics_context.draw_polygon.point.y_offset",
5480
15
            FT_INT16, BASE_DEC, NULL, 0x0,
5481
15
            NULL, HFILL }
5482
15
        },
5483
15
        { &hf_isobus_vt_graphicscontext_drawtext_background,
5484
15
          { "Background", "isobus.vt.graphics_context.draw_text.point.background",
5485
15
            FT_UINT8, BASE_DEC, VALS(draw_text_background), 0x0,
5486
15
            NULL, HFILL }
5487
15
        },
5488
15
        { &hf_isobus_vt_graphicscontext_drawtext_numberofbytes,
5489
15
          { "Number of Bytes", "isobus.vt.graphics_context.draw_text.point.number_of_bytes",
5490
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5491
15
            NULL, HFILL }
5492
15
        },
5493
15
        { &hf_isobus_vt_graphicscontext_drawtext_textstring,
5494
15
          { "Text string", "isobus.vt.graphics_context.draw_text.point.text_string",
5495
15
            FT_STRING, BASE_NONE, NULL, 0x0,
5496
15
            NULL, HFILL }
5497
15
        },
5498
15
        { &hf_isobus_vt_graphicscontext_panviewport_viewportx,
5499
15
          { "Viewport X", "isobus.vt.graphics_context.pan_viewport.viewport_x",
5500
15
            FT_INT16, BASE_DEC, NULL, 0x0,
5501
15
            NULL, HFILL }
5502
15
        },
5503
15
        { &hf_isobus_vt_graphicscontext_panviewport_viewporty,
5504
15
          { "Viewport Y", "isobus.vt.graphics_context.pan_viewport.viewport_y",
5505
15
            FT_INT16, BASE_DEC, NULL, 0x0,
5506
15
            NULL, HFILL }
5507
15
        },
5508
15
        { &hf_isobus_vt_graphicscontext_zoomviewport_zoomvalue,
5509
15
          { "Zoom Value", "isobus.vt.graphics_context.zoom_viewport.zoom_value",
5510
15
            FT_FLOAT, BASE_NONE, NULL, 0x0,
5511
15
            NULL, HFILL }
5512
15
        },
5513
15
        { &hf_isobus_vt_graphicscontext_panandzoomviewport_viewportx,
5514
15
          { "Viewport X", "isobus.vt.graphics_context.pan_and_zoom_viewport.viewport_x",
5515
15
            FT_INT16, BASE_DEC, NULL, 0x0,
5516
15
            NULL, HFILL }
5517
15
        },
5518
15
        { &hf_isobus_vt_graphicscontext_panandzoomviewport_viewporty,
5519
15
          { "Viewport Y", "isobus.vt.graphics_context.pan_and_zoom_viewport.viewport_y",
5520
15
            FT_INT16, BASE_DEC, NULL, 0x0,
5521
15
            NULL, HFILL }
5522
15
        },
5523
15
        { &hf_isobus_vt_graphicscontext_panandzoomviewport_zoomvalue,
5524
15
          { "Zoom Value", "isobus.vt.graphics_context.pan_and_zoom_viewport.zoom_value",
5525
15
            FT_FLOAT, BASE_NONE, NULL, 0x0,
5526
15
            NULL, HFILL }
5527
15
        },
5528
15
        { &hf_isobus_vt_graphicscontext_changeviewportsize_newwidth,
5529
15
          { "New Width", "isobus.vt.graphics_context.change_viewport_size.new_width",
5530
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5531
15
            NULL, HFILL }
5532
15
        },
5533
15
        { &hf_isobus_vt_graphicscontext_changeviewportsize_newheight,
5534
15
          { "New Height", "isobus.vt.graphics_context.change_viewport_size.new_height",
5535
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5536
15
            NULL, HFILL }
5537
15
        },
5538
15
        { &hf_isobus_vt_graphicscontext_drawvtobject_objectid,
5539
15
          { "Object ID", "isobus.vt.graphics_context.draw_vt_object.object_id",
5540
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5541
15
            NULL, HFILL }
5542
15
        },
5543
15
        { &hf_isobus_vt_graphicscontext_copycanvastopicturegraphic_objectidpicturegraphic,
5544
15
          { "Object ID of Picture Graphic", "isobus.vt.graphics_context.copy_canvas_to_picture_graphic.object_id_picture_graphic",
5545
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5546
15
            NULL, HFILL }
5547
15
        },
5548
15
        { &hf_isobus_vt_graphicscontext_copyviewporttopicturegraphic_objectidpicturegraphic,
5549
15
          { "Object ID of Picture Graphic", "isobus.vt.graphics_context.copy_viewport_to_picture_graphic.object_id_picture_graphic",
5550
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5551
15
            NULL, HFILL }
5552
15
        },
5553
15
        { &hf_isobus_vt_getattributevalue_objectid,
5554
15
          { "Object ID", "isobus.vt.get_attribute_value.object_id",
5555
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5556
15
            NULL, HFILL }
5557
15
        },
5558
15
        { &hf_isobus_vt_getattributevalue_attributeid,
5559
15
          { "Attribute ID", "isobus.vt.get_attribute_value.attribute_id",
5560
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5561
15
            NULL, HFILL }
5562
15
        },
5563
15
        { &hf_isobus_vt_getattributevalue_value,
5564
15
          { "Value", "isobus.vt.get_attribute_value.value",
5565
15
            FT_UINT32, BASE_DEC_HEX, NULL, 0x0,
5566
15
            NULL, HFILL }
5567
15
        },
5568
15
        { &hf_isobus_vt_getattributevalue_errorcodes,
5569
15
          { "Error Codes", "isobus.vt.get_attribute_value.error_codes",
5570
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5571
15
            NULL, HFILL }
5572
15
        },
5573
15
        { &hf_isobus_vt_selectcolourmap_objectid,
5574
15
          { "Object ID", "isobus.vt.select_colour_map.object_id",
5575
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5576
15
            NULL, HFILL }
5577
15
        },
5578
15
        { &hf_isobus_vt_selectcolourmap_errorcodes,
5579
15
          { "Error Codes", "isobus.vt.select_colour_map.error_codes",
5580
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5581
15
            NULL, HFILL }
5582
15
        },
5583
15
        { &hf_isobus_vt_executeextendedmacro_objectid,
5584
15
          { "Object ID", "isobus.vt.execute_extended_macro.object_id",
5585
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5586
15
            NULL, HFILL }
5587
15
        },
5588
15
        { &hf_isobus_vt_executeextendedmacro_errorcodes,
5589
15
          { "Error Codes", "isobus.vt.execute_extended_macro.error_codes",
5590
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5591
15
            NULL, HFILL }
5592
15
        },
5593
15
        { &hf_isobus_vt_lockunlockmask_command,
5594
15
          { "Command", "isobus.vt.lock_unlock_mask.command",
5595
15
            FT_UINT8, BASE_DEC, VALS(lock_unlock), 0x0,
5596
15
            NULL, HFILL }
5597
15
        },
5598
15
        { &hf_isobus_vt_lockunlockmask_objectid,
5599
15
          { "Object ID", "isobus.vt.lock_unlock_mask.object_id",
5600
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5601
15
            NULL, HFILL }
5602
15
        },
5603
15
        { &hf_isobus_vt_lockunlockmask_locktimeout,
5604
15
          { "Lock Timeout", "isobus.vt.lock_unlock_mask.lock_timeout",
5605
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5606
15
            NULL, HFILL }
5607
15
        },
5608
15
        { &hf_isobus_vt_lockunlockmask_errorcodes,
5609
15
          { "Error Codes", "isobus.vt.lock_unlock_mask.error_codes",
5610
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5611
15
            NULL, HFILL }
5612
15
        },
5613
15
        { &hf_isobus_vt_executemacro_objectid,
5614
15
          { "Object ID", "isobus.vt.execute_macro.object_id",
5615
15
            FT_UINT8, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
5616
15
            NULL, HFILL }
5617
15
        },
5618
15
        { &hf_isobus_vt_executemacro_errorcodes,
5619
15
          { "Error Codes", "isobus.vt.execute_macro.error_codes",
5620
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5621
15
            NULL, HFILL }
5622
15
        },
5623
15
        { &hf_isobus_vt_getmemory_memoryrequired,
5624
15
          { "Memory Required", "isobus.vt.get_memory.memory_required",
5625
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
5626
15
            NULL, HFILL }
5627
15
        },
5628
15
        { &hf_isobus_vt_getmemory_vtversion,
5629
15
          { "VT Version", "isobus.vt.get_memory.vt_version",
5630
15
            FT_UINT8, BASE_DEC, VALS(vt_versions_extended), 0x0,
5631
15
            NULL, HFILL }
5632
15
        },
5633
15
        { &hf_isobus_vt_getmemory_status,
5634
15
          { "Status", "isobus.vt.get_memory.status",
5635
15
            FT_UINT8, BASE_DEC, VALS(memory_status), 0x0,
5636
15
            NULL, HFILL }
5637
15
        },
5638
15
        { &hf_isobus_vt_getsupportedwidechars_codeplane,
5639
15
          { "Code Plane", "isobus.vt.get_supported_widechars.code_plane",
5640
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5641
15
            NULL, HFILL }
5642
15
        },
5643
15
        { &hf_isobus_vt_getsupportedwidechars_firstwidechar,
5644
15
          { "First Widechar", "isobus.vt.get_supported_widechars.first_widechar",
5645
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5646
15
            NULL, HFILL }
5647
15
        },
5648
15
        { &hf_isobus_vt_getsupportedwidechars_lastwidechar,
5649
15
          { "Last Widechar", "isobus.vt.get_supported_widechars.last_widechar",
5650
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5651
15
            NULL, HFILL }
5652
15
        },
5653
15
        { &hf_isobus_vt_getsupportedwidechars_errorcodes,
5654
15
          { "Error Codes", "isobus.vt.get_supported_widechars.error_codes",
5655
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5656
15
            NULL, HFILL }
5657
15
        },
5658
15
        { &hf_isobus_vt_getsupportedwidechars_numberofranges,
5659
15
          { "Number of Ranges", "isobus.vt.get_supported_widechars.number_of_ranges",
5660
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5661
15
            NULL, HFILL }
5662
15
        },
5663
15
        { &hf_isobus_vt_getsupportedwidechars_firstavailablewidechar,
5664
15
          { "First Available Widechar", "isobus.vt.get_supported_widechars.first_available_widechar",
5665
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5666
15
            NULL, HFILL }
5667
15
        },
5668
15
        { &hf_isobus_vt_getsupportedwidechars_lastavailablewidechar,
5669
15
          { "Last Available Widechar", "isobus.vt.get_supported_widechars.last_available_widechar",
5670
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5671
15
            NULL, HFILL }
5672
15
        },
5673
15
        { &hf_isobus_vt_getnumberofsoftkeys_navigationsoftkeys,
5674
15
          { "Navigation Soft Keys", "isobus.vt.get_number_of_soft_keys.navigation_soft_keys",
5675
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5676
15
            NULL, HFILL }
5677
15
        },
5678
15
        { &hf_isobus_vt_getnumberofsoftkeys_xdots,
5679
15
          { "X Dots", "isobus.vt.get_number_of_soft_keys.x_dots",
5680
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5681
15
            NULL, HFILL }
5682
15
        },
5683
15
        { &hf_isobus_vt_getnumberofsoftkeys_ydots,
5684
15
          { "Y Dots", "isobus.vt.get_number_of_soft_keys.y_dots",
5685
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5686
15
            NULL, HFILL }
5687
15
        },
5688
15
        { &hf_isobus_vt_getnumberofsoftkeys_virtualsoftkeys,
5689
15
          { "Virtual Soft Keys", "isobus.vt.get_number_of_soft_keys.virtual_soft_keys",
5690
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5691
15
            NULL, HFILL }
5692
15
        },
5693
15
        { &hf_isobus_vt_getnumberofsoftkeys_physicalsoftkeys,
5694
15
          { "Physical Soft Keys", "isobus.vt.get_number_of_soft_keys.physical_soft_keys",
5695
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5696
15
            NULL, HFILL }
5697
15
        },
5698
15
        { &hf_isobus_vt_gettextfontdata_smallfontsizes,
5699
15
          { "Small Font Sizes", "isobus.vt.get_text_font_data.small_font_sizes",
5700
15
            FT_UINT8, BASE_HEX, NULL, 0x00,
5701
15
            NULL, HFILL }
5702
15
        },
5703
15
        { &hf_isobus_vt_gettextfontdata_smallfontsizes_font8x8,
5704
15
          { "Font 8 x 8",       "isobus.vt.get_text_font_data.small_font_sizes.font_8x8",
5705
15
            FT_UINT8, BASE_HEX, NULL, 0x01,
5706
15
            NULL, HFILL }
5707
15
        },
5708
15
        { &hf_isobus_vt_gettextfontdata_smallfontsizes_font8x12,
5709
15
          { "Font 8 x 12",       "isobus.vt.get_text_font_data.small_font_sizes.font_8x12",
5710
15
            FT_UINT8, BASE_HEX, NULL, 0x02,
5711
15
            NULL, HFILL }
5712
15
        },
5713
15
        { &hf_isobus_vt_gettextfontdata_smallfontsizes_font12x16,
5714
15
          { "Font 12 x 16",       "isobus.vt.get_text_font_data.small_font_sizes.font_12x16",
5715
15
            FT_UINT8, BASE_HEX, NULL, 0x04,
5716
15
            NULL, HFILL }
5717
15
        },
5718
15
        { &hf_isobus_vt_gettextfontdata_smallfontsizes_font16x16,
5719
15
          { "Font 12 x 16",       "isobus.vt.get_text_font_data.small_font_sizes.font_12x16",
5720
15
            FT_UINT8, BASE_HEX, NULL, 0x08,
5721
15
            NULL, HFILL }
5722
15
        },
5723
15
        { &hf_isobus_vt_gettextfontdata_smallfontsizes_font16x24,
5724
15
          { "Font 16 x 24",       "isobus.vt.get_text_font_data.small_font_sizes.font_16x24",
5725
15
            FT_UINT8, BASE_HEX, NULL, 0x10,
5726
15
            NULL, HFILL }
5727
15
        },
5728
15
        { &hf_isobus_vt_gettextfontdata_smallfontsizes_font24x32,
5729
15
          { "Font 24 x 32",       "isobus.vt.get_text_font_data.small_font_sizes.font_24x32",
5730
15
            FT_UINT8, BASE_HEX, NULL, 0x20,
5731
15
            NULL, HFILL }
5732
15
        },
5733
15
        { &hf_isobus_vt_gettextfontdata_smallfontsizes_font32x32,
5734
15
          { "Font 32 x 32",       "isobus.vt.get_text_font_data.small_font_sizes.font_32x32",
5735
15
            FT_UINT8, BASE_HEX, NULL, 0x40,
5736
15
            NULL, HFILL }
5737
15
        },
5738
15
        { &hf_isobus_vt_gettextfontdata_largefontsizes,
5739
15
          { "Large Font Sizes",       "isobus.vt.get_text_font_data.large_font_sizes",
5740
15
            FT_UINT8, BASE_HEX, NULL, 0x00,
5741
15
            NULL, HFILL }
5742
15
        },
5743
15
        { &hf_isobus_vt_gettextfontdata_largefontsizes_font32x48,
5744
15
          { "Font 32 x 48",       "isobus.vt.get_text_font_data.large_font_sizes.font_32x48",
5745
15
            FT_UINT8, BASE_HEX, NULL, 0x01,
5746
15
            NULL, HFILL }
5747
15
        },
5748
15
        { &hf_isobus_vt_gettextfontdata_largefontsizes_font48x64,
5749
15
          { "Font 48 x 64",       "isobus.vt.get_text_font_data.large_font_sizes.font_48x64",
5750
15
            FT_UINT8, BASE_HEX, NULL, 0x02,
5751
15
            NULL, HFILL }
5752
15
        },
5753
15
        { &hf_isobus_vt_gettextfontdata_largefontsizes_font64x64,
5754
15
          { "Font 64 x 64",       "isobus.vt.get_text_font_data.large_font_sizes.font_64x64",
5755
15
            FT_UINT8, BASE_HEX, NULL, 0x04,
5756
15
            NULL, HFILL }
5757
15
        },
5758
15
        { &hf_isobus_vt_gettextfontdata_largefontsizes_font64x96,
5759
15
          { "Font 64 x 96",       "isobus.vt.get_text_font_data.large_font_sizes.font_64x96",
5760
15
            FT_UINT8, BASE_HEX, NULL, 0x08,
5761
15
            NULL, HFILL }
5762
15
        },
5763
15
        { &hf_isobus_vt_gettextfontdata_largefontsizes_font96x128,
5764
15
          { "Font 96 x 128",       "isobus.vt.get_text_font_data.large_font_sizes.font_96x128",
5765
15
            FT_UINT8, BASE_HEX, NULL, 0x10,
5766
15
            NULL, HFILL }
5767
15
        },
5768
15
        { &hf_isobus_vt_gettextfontdata_largefontsizes_font128x128,
5769
15
          { "Font 128 x 128",       "isobus.vt.get_text_font_data.large_font_sizes.font_128x128",
5770
15
            FT_UINT8, BASE_HEX, NULL, 0x20,
5771
15
            NULL, HFILL }
5772
15
        },
5773
15
        { &hf_isobus_vt_gettextfontdata_largefontsizes_font128x192,
5774
15
          { "Font 128 x 192",       "isobus.vt.get_text_font_data.large_font_sizes.font_128x192",
5775
15
            FT_UINT8, BASE_HEX, NULL, 0x40,
5776
15
            NULL, HFILL }
5777
15
        },
5778
15
        { &hf_isobus_vt_gettextfontdata_typeattributes,
5779
15
          { "Type Attributes",       "isobus.vt.get_text_font_data.type_attributes",
5780
15
            FT_UINT8, BASE_HEX, NULL, 0x00,
5781
15
            NULL, HFILL }
5782
15
        },
5783
15
        { &hf_isobus_vt_gettextfontdata_typeattributes_boldtext,
5784
15
          { "Bold text",       "isobus.vt.get_text_font_data.type_attributes.bold_text",
5785
15
            FT_UINT8, BASE_HEX, NULL, 0x01,
5786
15
            NULL, HFILL }
5787
15
        },
5788
15
        { &hf_isobus_vt_gettextfontdata_typeattributes_crossedouttext,
5789
15
          { "Crossed out text",       "isobus.vt.get_text_font_data.type_attributes.crossed_out_text",
5790
15
            FT_UINT8, BASE_HEX, NULL, 0x02,
5791
15
            NULL, HFILL }
5792
15
        },
5793
15
        { &hf_isobus_vt_gettextfontdata_typeattributes_underlinedtext,
5794
15
          { "Underlined text",       "isobus.vt.get_text_font_data.type_attributes.underlined_text",
5795
15
            FT_UINT8, BASE_HEX, NULL, 0x04,
5796
15
            NULL, HFILL }
5797
15
        },
5798
15
        { &hf_isobus_vt_gettextfontdata_typeattributes_italicstext,
5799
15
          { "Italics text",       "isobus.vt.get_text_font_data.type_attributes.italics_text",
5800
15
            FT_UINT8, BASE_HEX, NULL, 0x08,
5801
15
            NULL, HFILL }
5802
15
        },
5803
15
        { &hf_isobus_vt_gettextfontdata_typeattributes_invertedtext,
5804
15
          { "Inverted text",       "isobus.vt.get_text_font_data.type_attributes.inverted_text",
5805
15
            FT_UINT8, BASE_HEX, NULL, 0x10,
5806
15
            NULL, HFILL }
5807
15
        },
5808
15
        { &hf_isobus_vt_gettextfontdata_typeattributes_flashinverted,
5809
15
          { "Flash inverted",       "isobus.vt.get_text_font_data.type_attributes.flash_inverted",
5810
15
            FT_UINT8, BASE_HEX, NULL, 0x20,
5811
15
            NULL, HFILL }
5812
15
        },
5813
15
        { &hf_isobus_vt_gettextfontdata_typeattributes_flashhidden,
5814
15
          { "Flash hidden",       "isobus.vt.get_text_font_data.type_attributes.flash_hidden",
5815
15
            FT_UINT8, BASE_HEX, NULL, 0x40,
5816
15
            NULL, HFILL }
5817
15
        },
5818
15
        { &hf_isobus_vt_gettextfontdata_typeattributes_proportionalfontrendering,
5819
15
          { "Proportional font rendering",       "isobus.vt.get_text_font_data.type_attributes.proportional_font_rendering",
5820
15
            FT_UINT8, BASE_DEC, NULL, 0x40,
5821
15
            NULL, HFILL }
5822
15
        },
5823
15
        { &hf_isobus_vt_getwindowmaskdata_backgroundcolourdatamask,
5824
15
          { "Background Colour Data Mask",      "isobus.vt.get_window_mask_data.background_colour_data_mask",
5825
15
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(vt_colours), 0x0,
5826
15
            NULL, HFILL }
5827
15
        },
5828
15
        { &hf_isobus_vt_getwindowmaskdata_backgroundcoloursoftkeymask,
5829
15
          { "Background Colour Soft Key Mask",      "isobus.vt.get_window_mask_data.background_colour_soft_key_mask",
5830
15
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(vt_colours), 0x0,
5831
15
            NULL, HFILL }
5832
15
        },
5833
15
        { &hf_isobus_vt_getsupportedobjects_numberofbytes,
5834
15
          { "Number of bytes",      "isobus.vt.get_supported_objects.number_of_bytes",
5835
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5836
15
            NULL, HFILL }
5837
15
        },
5838
15
        { &hf_isobus_vt_getsupportedobjects_objecttype,
5839
15
          { "Object Type",      "isobus.vt.get_supported_objects.object_type",
5840
15
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(vt_object_types), 0x0,
5841
15
            NULL, HFILL }
5842
15
        },
5843
15
        { &hf_isobus_vt_gethardware_boottime,
5844
15
          { "Boot time",      "isobus.vt.get_hardware.boot_time",
5845
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5846
15
            NULL, HFILL }
5847
15
        },
5848
15
        { &hf_isobus_vt_gethardware_graphictype,
5849
15
          { "Graphic type",      "isobus.vt.get_hardware.graphic_type",
5850
15
            FT_UINT8, BASE_DEC, VALS(graphic_types), 0x0,
5851
15
            NULL, HFILL }
5852
15
        },
5853
15
        { &hf_isobus_vt_gethardware_hardware,
5854
15
          { "Hardware",      "isobus.vt.get_hardware.hardware",
5855
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5856
15
            NULL, HFILL }
5857
15
        },
5858
15
        { &hf_isobus_vt_gethardware_hardware_touchscreen,
5859
15
          { "Touch Screen",      "isobus.vt.get_hardware.hardware.touch_screen",
5860
15
            FT_UINT8, BASE_HEX, NULL, 0x01,
5861
15
            NULL, HFILL }
5862
15
        },
5863
15
        { &hf_isobus_vt_gethardware_hardware_pointingdevice,
5864
15
          { "Pointing Device",      "isobus.vt.get_hardware.hardware.pointing_device",
5865
15
            FT_UINT8, BASE_HEX, NULL, 0x02,
5866
15
            NULL, HFILL }
5867
15
        },
5868
15
        { &hf_isobus_vt_gethardware_hardware_multifreqaudiooutput,
5869
15
          { "Multiple frequency audio output",      "isobus.vt.get_hardware.hardware.multiple_frequency_audio_output",
5870
15
            FT_UINT8, BASE_HEX, NULL, 0x04,
5871
15
            NULL, HFILL }
5872
15
        },
5873
15
        { &hf_isobus_vt_gethardware_hardware_adjustvolumeaudiooutput,
5874
15
          { "Adjustable volume audio output",      "isobus.vt.get_hardware.hardware.adjustable_volume_audio_output",
5875
15
            FT_UINT8, BASE_HEX, NULL, 0x08,
5876
15
            NULL, HFILL }
5877
15
        },
5878
15
        { &hf_isobus_vt_gethardware_hardware_simultaneousactivationphysicalsoftkeys,
5879
15
          { "Simultaneous activation of physical soft keys",      "isobus.vt.get_hardware.hardware.simultaneous_activation_physical_soft_keys",
5880
15
            FT_UINT8, BASE_HEX, NULL, 0x10,
5881
15
            NULL, HFILL }
5882
15
        },
5883
15
        { &hf_isobus_vt_gethardware_hardware_simultaneousactivationbuttons,
5884
15
          { "Simultaneous activation of buttons",      "isobus.vt.get_hardware.hardware.simultaneous_activation_buttons",
5885
15
            FT_UINT8, BASE_HEX, NULL, 0x20,
5886
15
            NULL, HFILL }
5887
15
        },
5888
15
        { &hf_isobus_vt_gethardware_hardware_dragoperation,
5889
15
          { "Reports drag operation",      "isobus.vt.get_hardware.hardware.drag_operation",
5890
15
            FT_UINT8, BASE_HEX, NULL, 0x40,
5891
15
            NULL, HFILL }
5892
15
        },
5893
15
        { &hf_isobus_vt_gethardware_hardware_intermediatecoordinatesdrag,
5894
15
          { "Intermediate coordinates during drag",      "isobus.vt.get_hardware.hardware.intermediate_coordinates_drag",
5895
15
            FT_UINT8, BASE_HEX, NULL, 0x80,
5896
15
            NULL, HFILL }
5897
15
        },
5898
15
        { &hf_isobus_vt_gethardware_xpixels,
5899
15
          { "X - Pixels",      "isobus.vt.get_hardware.x_pixels",
5900
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5901
15
            NULL, HFILL }
5902
15
        },
5903
15
        { &hf_isobus_vt_gethardware_ypixels,
5904
15
          { "Y - Pixels",      "isobus.vt.get_hardware.y_pixels",
5905
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
5906
15
            NULL, HFILL }
5907
15
        },
5908
15
        { &hf_isobus_vt_storeversion_versionlabel,
5909
15
          { "Version Label",       "isobus.vt.store_version.version_label",
5910
15
            FT_STRING, BASE_NONE, NULL, 0x0,
5911
15
            NULL, HFILL }
5912
15
        },
5913
15
        { &hf_isobus_vt_storeversion_errorcodes,
5914
15
          { "Error Codes",       "isobus.vt.store_version.error_codes",
5915
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5916
15
            NULL, HFILL }
5917
15
        },
5918
15
        { &hf_isobus_vt_loadversion_versionlabel,
5919
15
          { "Version Label",       "isobus.vt.load_version.version_label",
5920
15
            FT_STRING, BASE_NONE, NULL, 0x0,
5921
15
            NULL, HFILL }
5922
15
        },
5923
15
        { &hf_isobus_vt_loadversion_errorcodes,
5924
15
          { "Error Codes",       "isobus.vt.load_version.error_codes",
5925
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5926
15
            NULL, HFILL }
5927
15
        },
5928
15
        { &hf_isobus_vt_deleteversion_versionlabel,
5929
15
          { "Version Label",       "isobus.vt.delete_version.version_label",
5930
15
            FT_STRING, BASE_NONE, NULL, 0x0,
5931
15
            NULL, HFILL }
5932
15
        },
5933
15
        { &hf_isobus_vt_deleteversion_errorcodes,
5934
15
          { "Error Codes",       "isobus.vt.delete_version.error_codes",
5935
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5936
15
            NULL, HFILL }
5937
15
        },
5938
15
        { &hf_isobus_vt_extendedgetversions_numberofversions,
5939
15
          { "Number of versions",  "isobus.vt.extended_get_versions.number_of_versions",
5940
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5941
15
            NULL, HFILL }
5942
15
        },
5943
15
        { &hf_isobus_vt_extendedgetversions_versionlabel,
5944
15
          { "Version label",  "isobus.vt.extended_get_versions.version_label",
5945
15
            FT_STRING, BASE_NONE, NULL, 0x0,
5946
15
            NULL, HFILL }
5947
15
        },
5948
15
        { &hf_isobus_vt_extendedstoreversion_versionlabel,
5949
15
          { "Version Label",       "isobus.vt.extended_store_version.version_label",
5950
15
            FT_STRING, BASE_NONE, NULL, 0x0,
5951
15
            NULL, HFILL }
5952
15
        },
5953
15
        { &hf_isobus_vt_extendedstoreversion_errorcodes,
5954
15
          { "Error Codes",       "isobus.vt.extended_store_version.error_codes",
5955
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5956
15
            NULL, HFILL }
5957
15
        },
5958
15
        { &hf_isobus_vt_extendedloadversion_versionlabel,
5959
15
          { "Version Label",       "isobus.vt.extended_load_version.version_label",
5960
15
            FT_STRING, BASE_NONE, NULL, 0x0,
5961
15
            NULL, HFILL }
5962
15
        },
5963
15
        { &hf_isobus_vt_extendedloadversion_errorcodes,
5964
15
          { "Error Codes",       "isobus.vt.extended_load_version.error_codes",
5965
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5966
15
            NULL, HFILL }
5967
15
        },
5968
15
        { &hf_isobus_vt_extendeddeleteversion_versionlabel,
5969
15
          { "Version Label",       "isobus.vt.extended_delete_version.version_label",
5970
15
            FT_STRING, BASE_NONE, NULL, 0x0,
5971
15
            NULL, HFILL }
5972
15
        },
5973
15
        { &hf_isobus_vt_extendeddeleteversion_errorcodes,
5974
15
          { "Error Codes",       "isobus.vt.extended_delete_version.error_codes",
5975
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
5976
15
            NULL, HFILL }
5977
15
        },
5978
15
        { &hf_isobus_vt_getversions_numberofversions,
5979
15
          { "Number of versions",  "isobus.vt.get_versions.number_of_versions",
5980
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5981
15
            NULL, HFILL }
5982
15
        },
5983
15
        { &hf_isobus_vt_getversions_versionlabel,
5984
15
          { "Version label",  "isobus.vt.get_versions.version_label",
5985
15
            FT_STRING, BASE_NONE, NULL, 0x0,
5986
15
            NULL, HFILL }
5987
15
        },
5988
15
        { &hf_isobus_vt_unsupportedvtfunction_unsupportedvtfunction,
5989
15
          { "Unsupported VT function",       "isobus.vt.unsupported_vt_function.unsupported_vt_function",
5990
15
            FT_UINT8, BASE_DEC | BASE_EXT_STRING, &vt_function_code_ext, 0x0,
5991
15
            NULL, HFILL }
5992
15
        },
5993
15
        { &hf_isobus_vt_vtstatus_workingsetmaster,
5994
15
          { "Working Set Master",       "isobus.vt.vtstatus.working_set_master",
5995
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
5996
15
            NULL, HFILL }
5997
15
        },
5998
15
        { &hf_isobus_vt_vtstatus_objectiddatamask,
5999
15
          { "Object ID Data Mask",      "isobus.vt.vtstatus.object_id_data_mask",
6000
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
6001
15
            NULL, HFILL }
6002
15
        },
6003
15
        { &hf_isobus_vt_vtstatus_objectidsoftkeymask,
6004
15
          { "Object ID Soft Key Mask",  "isobus.vt.vtstatus.object_id_soft_key_mask",
6005
15
            FT_UINT16, BASE_DEC_HEX, VALS(object_id_strings), 0x0,
6006
15
            NULL, HFILL }
6007
15
        },
6008
15
        { &hf_isobus_vt_vtstatus_vtbusycodes,
6009
15
          { "VT Busy Codes",            "isobus.vt.vtstatus.vt_busy_codes",
6010
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
6011
15
            NULL, HFILL }
6012
15
        },
6013
15
        { &hf_isobus_vt_vtstatus_vtbusycodes_updatingvisiblemask,
6014
15
          { "VT is busy updating visible mask",            "isobus.vt.vtstatus.vt_busy_codes.updating_visible_mask",
6015
15
            FT_UINT8, BASE_HEX, NULL, 0x80,
6016
15
            NULL, HFILL }
6017
15
        },
6018
15
        { &hf_isobus_vt_vtstatus_vtbusycodes_savingdata,
6019
15
          { "VT is busy saving data to non-volatile memory","isobus.vt.vtstatus.vt_busy_codes.saving_data",
6020
15
            FT_UINT8, BASE_HEX, NULL, 0x40,
6021
15
            NULL, HFILL }
6022
15
        },
6023
15
        { &hf_isobus_vt_vtstatus_vtbusycodes_executingcommand,
6024
15
          { "VT is busy executing a command",            "isobus.vt.vtstatus.vt_busy_codes.executing_commands",
6025
15
            FT_UINT8, BASE_HEX, NULL, 0x20,
6026
15
            NULL, HFILL }
6027
15
        },
6028
15
        { &hf_isobus_vt_vtstatus_vtbusycodes_executingmacro,
6029
15
          { "VT is busy executing a Macro",            "isobus.vt.vtstatus.vt_busy_codes.executing_macro",
6030
15
            FT_UINT8, BASE_HEX, NULL, 0x10,
6031
15
            NULL, HFILL }
6032
15
        },
6033
15
        { &hf_isobus_vt_vtstatus_vtbusycodes_parsingobjectpool,
6034
15
          { "VT is busy parsing an object pool",            "isobus.vt.vtstatus.vt_busy_codes.parsing_object_pool",
6035
15
            FT_UINT8, BASE_HEX, NULL, 0x8,
6036
15
            NULL, HFILL }
6037
15
        },
6038
15
        { &hf_isobus_vt_vtstatus_vtbusycodes_auxcontrolsactive,
6039
15
          { "Auxiliary controls learn mode active",        "isobus.vt.vtstatus.vt_function_codes.aux_controls_active",
6040
15
            FT_UINT8, BASE_HEX, NULL, 0x2,
6041
15
            NULL, HFILL }
6042
15
        },
6043
15
        { &hf_isobus_vt_vtstatus_vtbusycodes_outofmemory,
6044
15
          { "VT is out of memory",        "isobus.vt.vtstatus.vt_function_codes.out_of_memory",
6045
15
            FT_UINT8, BASE_HEX, NULL, 0x1,
6046
15
            NULL, HFILL }
6047
15
        },
6048
15
        { &hf_isobus_vt_vtstatus_vtfunctioncodes,
6049
15
          { "VT Function Codes",        "isobus.vt.vtstatus.vt_function_codes",
6050
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
6051
15
            NULL, HFILL }
6052
15
        },
6053
15
        { &hf_isobus_vt_wrksetmain_bitmask,
6054
15
          { "Bitmask",                   "isobus.vt.working_set_maintenance.bitmask",
6055
15
            FT_UINT8, BASE_DEC, NULL, 0x80,
6056
15
            NULL, HFILL }
6057
15
        },
6058
15
        { &hf_isobus_vt_wrksetmain_version,
6059
15
          { "Version",                  "isobus.vt.working_set_maintenance.version",
6060
15
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(vt_versions), 0x0,
6061
15
            NULL, HFILL }
6062
15
        },
6063
15
        { &hf_isobus_vt_screencapture_item,
6064
15
          { "Item",                  "isobus.vt.screencapture.item",
6065
15
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(screencapture_items), 0x0,
6066
15
            NULL, HFILL }
6067
15
        },
6068
15
        { &hf_isobus_vt_screencapture_path,
6069
15
          { "Path",                  "isobus.vt.screencapture.path",
6070
15
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(screencapture_path), 0x0,
6071
15
            NULL, HFILL }
6072
15
        },
6073
15
        { &hf_isobus_vt_screencapture_response_errorcodes,
6074
15
          { "Error codes",           "isobus.vt.screencapture_response.errorcodes",
6075
15
            FT_UINT8, BASE_DEC, NULL, 0x80,
6076
15
            NULL, HFILL }
6077
15
        },
6078
15
        { &hf_isobus_vt_screencapture_response_errorcodes_flags,
6079
15
          { "Error flags",           "isobus.vt.screencapture_response.errorcodes.flags",
6080
15
            FT_UINT8, BASE_HEX,
6081
15
            NULL, 0, NULL, HFILL }
6082
15
        },
6083
15
        { &hf_isobus_vt_screen_capture_response_error_not_enabled,
6084
15
          { "Screen capture is not enabled", "isobus.vt.screencapture_response.errorcodes.flags.command_was_not_sent",
6085
15
            FT_BOOLEAN, 8, NULL, 0x01,
6086
15
            NULL, HFILL }
6087
15
        },
6088
15
        { &hf_isobus_vt_screen_capture_response_error_vt_transfer_is_busy,
6089
15
          { "VT transfer is busy", "isobus.vt.screencapture_response.errorcodes.flags.vt_transfer_is_busy",
6090
15
            FT_BOOLEAN, 8, NULL, 0x02,
6091
15
            NULL, HFILL }
6092
15
        },
6093
15
        { &hf_isobus_vt_screen_capture_response_error_item_unsupported,
6094
15
          { "The specified item is not supported", "isobus.vt.screencapture_response.errorcodes.flags.item_unsupported",
6095
15
            FT_BOOLEAN, 8, NULL, 0x04,
6096
15
            NULL, HFILL }
6097
15
        },
6098
15
        { &hf_isobus_vt_screen_capture_response_error_path_unsupported,
6099
15
          { "The specified path is not supported", "isobus.vt.screencapture_response.errorcodes.flags.path_unsupported",
6100
15
            FT_BOOLEAN, 8, NULL, 0x08,
6101
15
            NULL, HFILL }
6102
15
        },
6103
15
        { &hf_isobus_vt_screen_capture_response_error_removable_media_is_full_or_unavailable,
6104
15
          { "Removable media path is full or unavailable", "isobus.vt.screencapture_response.errorcodes.flags.media_full_or_unavailable",
6105
15
            FT_BOOLEAN, 8, NULL, 0x10,
6106
15
            NULL, HFILL }
6107
15
        },
6108
15
        { &hf_isobus_vt_screen_capture_response_error_other,
6109
15
          { "Other error", "isobus.vt.screencapture_response.errorcodes.flags.other_error",
6110
15
            FT_BOOLEAN, 8, NULL, 0x20,
6111
15
            NULL, HFILL }
6112
15
        },
6113
15
        { &hf_isobus_vt_screencapture_response_imageid,
6114
15
          { "Image ID",              "isobus.vt.screencapture_response.imageid",
6115
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
6116
15
            NULL, HFILL }
6117
15
        }
6118
15
    };
6119
6120
15
    static int *ett[] = {
6121
15
        &ett_isobus_vt,
6122
15
        &ett_isobus_vt_vtstatus_busycodes_subtree,
6123
15
        &ett_isobus_vt_getsupportedwidechars_range,
6124
15
        &ett_isobus_vt_gettextfontdata_smallfontsizes,
6125
15
        &ett_isobus_vt_gettextfontdata_largefontsizes,
6126
15
        &ett_isobus_vt_gettextfontdata_typeattributes,
6127
15
        &ett_isobus_vt_gethardware_hardware,
6128
15
        &ett_isobus_vt_preferredassignment_inputunit,
6129
15
        &ett_isobus_vt_preferredassignment_inputunit_preferredfunction,
6130
15
        &ett_isobus_vt_auxiliarycapabilities_inputunit,
6131
15
        &ett_isobus_vt_auxiliarycapabilities_inputunit_set,
6132
15
        &ett_isobus_vt_auxiliaryassignmenttype2_flags,
6133
15
        &ett_isobus_vt_auxiliaryinputtype2status_operatingstate,
6134
15
        &ett_isobus_vt_screencapture_response_errorcodes_flags,
6135
15
    };
6136
6137
15
    module_t *vt_module;
6138
6139
15
    register_init_routine(&isobus_vt_init);
6140
6141
15
    proto_vt = proto_register_protocol("ISObus Virtual Terminal",
6142
15
                                       "ISObus VT",
6143
15
                                       "isobus.vt");
6144
6145
15
    proto_register_field_array(proto_vt, hf, array_length(hf));
6146
15
    proto_register_subtree_array(ett, array_length(ett));
6147
6148
    /* register preferences */
6149
15
    vt_module = prefs_register_protocol(proto_vt, NULL);
6150
6151
    /* file to translate object ids to names, format should be separate line for each object.
6152
     * objects should be specified in the following way: <object ID number>,<object ID name>
6153
     */
6154
15
    prefs_register_filename_preference(vt_module, "object_ids", "Object ID Translation",
6155
15
        "File containing a translation from object ID to string", &object_id_translation,
6156
15
        false);
6157
15
}
6158
6159
void
6160
proto_reg_handoff_isobus_vt(void)
6161
15
{
6162
15
    dissector_handle_t vt_handle_vt_to_ecu;
6163
15
    dissector_handle_t vt_handle_ecu_to_vt;
6164
6165
15
    vt_handle_vt_to_ecu = create_dissector_handle( dissect_vt_to_ecu, proto_vt );
6166
15
    vt_handle_ecu_to_vt = create_dissector_handle( dissect_ecu_to_vt, proto_vt );
6167
6168
15
    dissector_add_uint("isobus.pdu_format", 230, vt_handle_vt_to_ecu);
6169
15
    dissector_add_uint("isobus.pdu_format", 231, vt_handle_ecu_to_vt);
6170
15
}
6171
6172
/*
6173
 * Editor modelines  -  https://www.wireshark.org/tools/modelines.html
6174
 *
6175
 * Local variables:
6176
 * c-basic-offset: 4
6177
 * tab-width: 8
6178
 * indent-tabs-mode: nil
6179
 * End:
6180
 *
6181
 * vi: set shiftwidth=4 tabstop=8 expandtab:
6182
 * :indentSize=4:tabSize=8:noTabs=true:
6183
 */