From Kovarththanan Rajaratnam via bug 3548:
[obnox/wireshark/wip.git] / epan / dissectors / packet-cigi.c
1 /* packet-cigi.c
2  * Routines for Common Image Generator Interface
3  * (Versions 2 and 3 ) dissection
4  * CIGI - http://cigi.sourceforge.net/
5  * Copyright (c) 2005 The Boeing Company
6  *
7  * $Id$
8  *
9  * Wireshark - Network traffic analyzer
10  * By Gerald Combs <gerald@wireshark.org>
11  * Copyright 1998 Gerald Combs
12  *
13  * This program is free software; you can redistribute it and/or
14  * modify it under the terms of the GNU General Public License
15  * as published by the Free Software Foundation; either version 2
16  * of the License, or (at your option) any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software
25  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26  *
27  * Contributers:
28  * Kyle J. Harms <kyle.j.harms@boeing.com>
29  * Brian M. Ames <bmames@apk.net>
30  */
31
32 #ifdef HAVE_CONFIG_H
33 # include "config.h"
34 #endif
35
36 #include <stdio.h>
37 #include <stdlib.h>
38 #include <string.h>
39
40 #include <glib.h>
41
42 #include <epan/packet.h>
43 #include <epan/prefs.h>
44
45 /* Forward declaration */
46 void proto_reg_handoff_cigi(void);
47 static gboolean packet_is_cigi(tvbuff_t*);
48 static gboolean dissect_cigi_heur(tvbuff_t*, packet_info*, proto_tree*);
49 static int dissect_cigi(tvbuff_t*, packet_info*, proto_tree*);
50 static void dissect_cigi_pdu(tvbuff_t*, packet_info*, proto_tree*);
51 static void cigi_add_tree(tvbuff_t*, proto_tree*);
52 static gint cigi_add_data(tvbuff_t*, proto_tree*, gint);
53
54 static void cigi2_add_tree(tvbuff_t*, proto_tree*);
55 static gint cigi2_add_ig_control(tvbuff_t*, proto_tree*, gint);
56 static gint cigi2_add_entity_control(tvbuff_t*, proto_tree*, gint);
57 static gint cigi2_add_component_control(tvbuff_t*, proto_tree*, gint);
58 static gint cigi2_add_articulated_parts_control(tvbuff_t*, proto_tree*, gint);
59 static gint cigi2_add_rate_control(tvbuff_t*, proto_tree*, gint);
60 static gint cigi2_add_environment_control(tvbuff_t*, proto_tree*, gint);
61 static gint cigi2_add_weather_control(tvbuff_t*, proto_tree*, gint);
62 static gint cigi2_add_view_control(tvbuff_t*, proto_tree*, gint);
63 static gint cigi2_add_sensor_control(tvbuff_t*, proto_tree*, gint);
64 static gint cigi2_add_trajectory_definition(tvbuff_t*, proto_tree*, gint);
65 static gint cigi2_add_special_effect_definition(tvbuff_t*, proto_tree*, gint);
66 static gint cigi2_add_view_definition(tvbuff_t*, proto_tree*, gint);
67 static gint cigi2_add_collision_detection_segment_definition(tvbuff_t*, proto_tree*, gint);
68 static gint cigi2_add_collision_detection_volume_definition(tvbuff_t*, proto_tree*, gint);
69 static gint cigi2_add_height_above_terrain_request(tvbuff_t*, proto_tree*, gint);
70 static gint cigi2_add_line_of_sight_occult_request(tvbuff_t*, proto_tree*, gint);
71 static gint cigi2_add_line_of_sight_range_request(tvbuff_t*, proto_tree*, gint);
72 static gint cigi2_add_height_of_terrain_request(tvbuff_t*, proto_tree*, gint);
73 static gint cigi2_add_start_of_frame(tvbuff_t*, proto_tree*, gint);
74 static gint cigi2_add_height_above_terrain_response(tvbuff_t*, proto_tree*, gint);
75 static gint cigi2_add_line_of_sight_response(tvbuff_t*, proto_tree*, gint);
76 static gint cigi2_add_collision_detection_segment_response(tvbuff_t*, proto_tree*, gint);
77 static gint cigi2_add_sensor_response(tvbuff_t*, proto_tree*, gint);
78 static gint cigi2_add_height_of_terrain_response(tvbuff_t*, proto_tree*, gint);
79 static gint cigi2_add_collision_detection_volume_response(tvbuff_t*, proto_tree*, gint);
80 static gint cigi2_add_image_generator_message(tvbuff_t*, proto_tree*, gint);
81
82 static void cigi3_add_tree(tvbuff_t*, proto_tree*);
83 static gint cigi3_add_ig_control(tvbuff_t*, proto_tree*, gint);
84 static gint cigi3_add_entity_control(tvbuff_t*, proto_tree*, gint);
85 static gint cigi3_add_conformal_clamped_entity_control(tvbuff_t*, proto_tree*, gint);
86 static gint cigi3_add_component_control(tvbuff_t*, proto_tree*, gint);
87 static gint cigi3_add_short_component_control(tvbuff_t*, proto_tree*, gint);
88 static gint cigi3_add_articulated_part_control(tvbuff_t*, proto_tree*, gint);
89 static gint cigi3_add_short_articulated_part_control(tvbuff_t*, proto_tree*, gint);
90 static gint cigi3_add_rate_control(tvbuff_t*, proto_tree*, gint);
91 static gint cigi3_add_celestial_sphere_control(tvbuff_t*, proto_tree*, gint);
92 static gint cigi3_add_atmosphere_control(tvbuff_t*, proto_tree*, gint);
93 static gint cigi3_add_environmental_region_control(tvbuff_t*, proto_tree*, gint);
94 static gint cigi3_add_weather_control(tvbuff_t*, proto_tree*, gint);
95 static gint cigi3_add_maritime_surface_conditions_control(tvbuff_t*, proto_tree*, gint);
96 static gint cigi3_add_wave_control(tvbuff_t*, proto_tree*, gint);
97 static gint cigi3_add_terrestrial_surface_conditions_control(tvbuff_t*, proto_tree*, gint);
98 static gint cigi3_add_view_control(tvbuff_t*, proto_tree*, gint);
99 static gint cigi3_add_sensor_control(tvbuff_t*, proto_tree*, gint);
100 static gint cigi3_add_motion_tracker_control(tvbuff_t*, proto_tree*, gint);
101 static gint cigi3_add_earth_reference_model_definition(tvbuff_t*, proto_tree*, gint);
102 static gint cigi3_add_trajectory_definition(tvbuff_t*, proto_tree*, gint);
103 static gint cigi3_add_view_definition(tvbuff_t*, proto_tree*, gint);
104 static gint cigi3_add_collision_detection_segment_definition(tvbuff_t*, proto_tree*, gint);
105 static gint cigi3_add_collision_detection_volume_definition(tvbuff_t*, proto_tree*, gint);
106 static gint cigi3_add_hat_hot_request(tvbuff_t*, proto_tree*, gint);
107 static gint cigi3_add_line_of_sight_segment_request(tvbuff_t*, proto_tree*, gint);
108 static gint cigi3_add_line_of_sight_vector_request(tvbuff_t*, proto_tree*, gint);
109 static gint cigi3_add_position_request(tvbuff_t*, proto_tree*, gint);
110 static gint cigi3_add_environmental_conditions_request(tvbuff_t*, proto_tree*, gint);
111 static gint cigi3_add_start_of_frame(tvbuff_t*, proto_tree*, gint);
112 static gint cigi3_add_hat_hot_response(tvbuff_t*, proto_tree*, gint);
113 static gint cigi3_add_hat_hot_extended_response(tvbuff_t*, proto_tree*, gint);
114 static gint cigi3_add_line_of_sight_response(tvbuff_t*, proto_tree*, gint);
115 static gint cigi3_add_line_of_sight_extended_response(tvbuff_t*, proto_tree*, gint);
116 static gint cigi3_add_sensor_response(tvbuff_t*, proto_tree*, gint);
117 static gint cigi3_add_sensor_extended_response(tvbuff_t*, proto_tree*, gint);
118 static gint cigi3_add_position_response(tvbuff_t*, proto_tree*, gint);
119 static gint cigi3_add_weather_conditions_response(tvbuff_t*, proto_tree*, gint);
120 static gint cigi3_add_aerosol_concentration_response(tvbuff_t*, proto_tree*, gint);
121 static gint cigi3_add_maritime_surface_conditions_response(tvbuff_t*, proto_tree*, gint);
122 static gint cigi3_add_terrestrial_surface_conditions_response(tvbuff_t*, proto_tree*, gint);
123 static gint cigi3_add_collision_detection_segment_notification(tvbuff_t*, proto_tree*, gint);
124 static gint cigi3_add_collision_detection_volume_notification(tvbuff_t*, proto_tree*, gint);
125 static gint cigi3_add_animation_stop_notification(tvbuff_t*, proto_tree*, gint);
126 static gint cigi3_add_event_notification(tvbuff_t*, proto_tree*, gint);
127 static gint cigi3_add_image_generator_message(tvbuff_t*, proto_tree*, gint);
128
129 static gint cigi3_2_add_ig_control(tvbuff_t*, proto_tree*, gint);
130 static gint cigi3_2_add_rate_control(tvbuff_t*, proto_tree*, gint);
131 static gint cigi3_2_add_hat_hot_request(tvbuff_t*, proto_tree*, gint);
132 static gint cigi3_2_add_line_of_sight_segment_request(tvbuff_t*, proto_tree*, gint);
133 static gint cigi3_2_add_line_of_sight_vector_request(tvbuff_t*, proto_tree*, gint);
134 static gint cigi3_2_add_start_of_frame(tvbuff_t*, proto_tree*, gint);
135 static gint cigi3_2_add_hat_hot_response(tvbuff_t*, proto_tree*, gint);
136 static gint cigi3_2_add_hat_hot_extended_response(tvbuff_t*, proto_tree*, gint);
137 static gint cigi3_2_add_line_of_sight_response(tvbuff_t*, proto_tree*, gint);
138 static gint cigi3_2_add_line_of_sight_extended_response(tvbuff_t*, proto_tree*, gint);
139
140 static gint cigi3_3_add_ig_control(tvbuff_t*, proto_tree*, gint);
141 static gint cigi3_3_add_entity_control(tvbuff_t*, proto_tree*, gint);
142 static gint cigi3_3_add_component_control(tvbuff_t*, proto_tree*, gint);
143 static gint cigi3_3_add_short_component_control(tvbuff_t*, proto_tree*, gint);
144 static gint cigi3_3_add_symbol_surface_definition(tvbuff_t*, proto_tree*, gint);
145 static gint cigi3_3_add_symbol_text_definition(tvbuff_t*, proto_tree*, gint);
146 static gint cigi3_3_add_symbol_circle_definition(tvbuff_t*, proto_tree*, gint);
147 static gint cigi3_3_add_symbol_line_definition(tvbuff_t*, proto_tree*, gint);
148 static gint cigi3_3_add_symbol_clone(tvbuff_t*, proto_tree*, gint);
149 static gint cigi3_3_add_symbol_control(tvbuff_t*, proto_tree*, gint);
150 static gint cigi3_3_add_short_symbol_control(tvbuff_t*, proto_tree*, gint);
151
152
153 static gfloat tvb_get_fixed_point(tvbuff_t*, int, gint);
154
155 /* CIGI Handle */
156 static dissector_handle_t cigi_handle;
157
158 /* Initialize the protocol and registered fields */
159 static int proto_cigi = -1;
160
161 static const true_false_string cigi_enable_tfs = {
162     "Enable",
163     "Disable"
164 };
165
166 static const true_false_string cigi_valid_tfs = {
167     "Valid",
168     "Invalid"
169 };
170
171
172 /* All CIGI Versions */
173 static int hf_cigi_src_port = -1;
174 static int hf_cigi_dest_port = -1;
175 static int hf_cigi_port = -1;
176
177 static int hf_cigi_packet_id = -1;
178 static int hf_cigi_packet_size = -1;
179 static int hf_cigi_version = -1;
180
181 static int hf_cigi_frame_size = -1;
182
183 static int hf_cigi_unknown = -1;
184
185
186 /*** Fields for CIGI2 ***/
187
188 /* CIGI2 Packet ID */
189 static int hf_cigi2_packet_id = -1;
190 #define CIGI2_PACKET_ID_IG_CONTROL                               1
191 #define CIGI2_PACKET_ID_ENTITY_CONTROL                           2
192 #define CIGI2_PACKET_ID_COMPONENT_CONTROL                        3
193 #define CIGI2_PACKET_ID_ARTICULATED_PARTS_CONTROL                4
194 #define CIGI2_PACKET_ID_RATE_CONTROL                             5
195 #define CIGI2_PACKET_ID_ENVIRONMENT_CONTROL                      6
196 #define CIGI2_PACKET_ID_WEATHER_CONTROL                          7
197 #define CIGI2_PACKET_ID_VIEW_CONTROL                             8
198 #define CIGI2_PACKET_ID_SENSOR_CONTROL                           9
199 #define CIGI2_PACKET_ID_TRAJECTORY_DEFINITION                   21
200 #define CIGI2_PACKET_ID_SPECIAL_EFFECT_DEFINITION               22
201 #define CIGI2_PACKET_ID_VIEW_DEFINITION                         23
202 #define CIGI2_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION  24
203 #define CIGI2_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION   25
204 #define CIGI2_PACKET_ID_HEIGHT_ABOVE_TERRAIN_REQUEST            41
205 #define CIGI2_PACKET_ID_LINE_OF_SIGHT_OCCULT_REQUEST            42
206 #define CIGI2_PACKET_ID_LINE_OF_SIGHT_RANGE_REQUEST             43
207 #define CIGI2_PACKET_ID_HEIGHT_OF_TERRAIN_REQUEST               44
208 #define CIGI2_PACKET_ID_START_OF_FRAME                         101
209 #define CIGI2_PACKET_ID_HEIGHT_ABOVE_TERRAIN_RESPONSE          102
210 #define CIGI2_PACKET_ID_LINE_OF_SIGHT_RESPONSE                 103
211 #define CIGI2_PACKET_ID_COLLISION_DETECTION_SEGMENT_RESPONSE   104
212 #define CIGI2_PACKET_ID_SENSOR_RESPONSE                        105
213 #define CIGI2_PACKET_ID_HEIGHT_OF_TERRAIN_RESPONSE             106
214 #define CIGI2_PACKET_ID_COLLISION_DETECTION_VOLUME_RESPONSE    107
215 #define CIGI2_PACKET_ID_IMAGE_GENERATOR_MESSAGE                108
216 #define CIGI2_PACKET_ID_USER_DEFINABLE_MIN                     236
217 #define CIGI2_PACKET_ID_USER_DEFINABLE_MAX                     255
218 static const value_string cigi2_packet_id_vals[] = {
219     {CIGI2_PACKET_ID_IG_CONTROL, "IG Control"},
220     {CIGI2_PACKET_ID_ENTITY_CONTROL, "Entity Control"},
221     {CIGI2_PACKET_ID_COMPONENT_CONTROL, "Component Control"},
222     {CIGI2_PACKET_ID_ARTICULATED_PARTS_CONTROL, "Articulated Parts Control"},
223     {CIGI2_PACKET_ID_RATE_CONTROL, "Rate Control"},
224     {CIGI2_PACKET_ID_ENVIRONMENT_CONTROL, "Environment Control"},
225     {CIGI2_PACKET_ID_WEATHER_CONTROL, "Weather Control"},
226     {CIGI2_PACKET_ID_VIEW_CONTROL, "View Control"},
227     {CIGI2_PACKET_ID_SENSOR_CONTROL, "Sensor Control"},
228     {CIGI2_PACKET_ID_TRAJECTORY_DEFINITION, "Trajectory Definition"},
229     {CIGI2_PACKET_ID_SPECIAL_EFFECT_DEFINITION, "Special Effect Definition"},
230     {CIGI2_PACKET_ID_VIEW_DEFINITION, "View Definition"},
231     {CIGI2_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION, "Collision Detection Segment Definition"},
232     {CIGI2_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION, "Collision Detection Volume Definition"},
233     {CIGI2_PACKET_ID_HEIGHT_ABOVE_TERRAIN_REQUEST, "Height Above Terrain Request"},
234     {CIGI2_PACKET_ID_LINE_OF_SIGHT_OCCULT_REQUEST, "Line of Sight Occult Request"},
235     {CIGI2_PACKET_ID_LINE_OF_SIGHT_RANGE_REQUEST, "Line of Sight Range Request"},
236     {CIGI2_PACKET_ID_HEIGHT_OF_TERRAIN_REQUEST, "Height of Terrain Request"},
237     {CIGI2_PACKET_ID_START_OF_FRAME, "Start of Frame"},
238     {CIGI2_PACKET_ID_HEIGHT_ABOVE_TERRAIN_RESPONSE, "Height Above Terrain Response"},
239     {CIGI2_PACKET_ID_LINE_OF_SIGHT_RESPONSE, "Line of Sight Response"},
240     {CIGI2_PACKET_ID_COLLISION_DETECTION_SEGMENT_RESPONSE, "Collision Detection Segment Response"},
241     {CIGI2_PACKET_ID_SENSOR_RESPONSE, "Sensor Response"},
242     {CIGI2_PACKET_ID_HEIGHT_OF_TERRAIN_RESPONSE, "Height of Terrain Response"},
243     {CIGI2_PACKET_ID_COLLISION_DETECTION_VOLUME_RESPONSE, "Collision Detection Volume Response"},
244     {CIGI2_PACKET_ID_IMAGE_GENERATOR_MESSAGE, "Image Generator Message"},
245     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN, "User Definable"},
246     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+1, "User Definable"},
247     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+2, "User Definable"},
248     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+3, "User Definable"},
249     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+4, "User Definable"},
250     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+5, "User Definable"},
251     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+6, "User Definable"},
252     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+7, "User Definable"},
253     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+8, "User Definable"},
254     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+9, "User Definable"},
255     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+10, "User Definable"},
256     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+11, "User Definable"},
257     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+12, "User Definable"},
258     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+13, "User Definable"},
259     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+14, "User Definable"},
260     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+15, "User Definable"},
261     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+16, "User Definable"},
262     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+17, "User Definable"},
263     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+18, "User Definable"},
264     {CIGI2_PACKET_ID_USER_DEFINABLE_MAX, "User Definable"},
265     {0, NULL},
266 };
267
268 /* CIGI2 IG Control */
269 #define CIGI2_PACKET_SIZE_IG_CONTROL 16
270 static int hf_cigi2_ig_control = -1;
271 static int hf_cigi2_ig_control_db_number = -1;
272 static int hf_cigi2_ig_control_ig_mode = -1;
273 static int hf_cigi2_ig_control_tracking_enable = -1;
274 static int hf_cigi2_ig_control_boresight = -1;
275 static int hf_cigi2_ig_control_frame_ctr = -1;
276 static int hf_cigi2_ig_control_time_tag = -1;
277
278 static const value_string cigi2_ig_control_ig_mode_vals[] = {
279     {0, "Standby/Reset"},
280     {1, "Operate"},
281     {2, "Debug"},
282     {0, NULL},
283 };
284
285 /* CIGI2 Entity Control */
286 #define CIGI2_PACKET_SIZE_ENTITY_CONTROL 56
287 static int hf_cigi2_entity_control = -1;
288 static int hf_cigi2_entity_control_entity_id = -1;
289 static int hf_cigi2_entity_control_entity_state = -1;
290 static int hf_cigi2_entity_control_attach_state = -1;
291 static int hf_cigi2_entity_control_collision_detect = -1;
292 static int hf_cigi2_entity_control_effect_state = -1;
293 static int hf_cigi2_entity_control_type = -1;
294 static int hf_cigi2_entity_control_parent_id = -1;
295 static int hf_cigi2_entity_control_opacity = -1;
296 static int hf_cigi2_entity_control_internal_temp = -1;
297 static int hf_cigi2_entity_control_roll = -1;
298 static int hf_cigi2_entity_control_pitch = -1;
299 static int hf_cigi2_entity_control_heading = -1;
300 static int hf_cigi2_entity_control_alt = -1;
301 static int hf_cigi2_entity_control_lat = -1;
302 static int hf_cigi2_entity_control_lon = -1;
303
304 static const value_string cigi2_entity_control_entity_state_vals[] = {
305     {0, "Load/Hide"},
306     {1, "Load/Show"},
307     {2, "Unload"},
308     {0, NULL},
309 };
310
311 static const true_false_string cigi2_entity_control_attach_state_tfs = {
312     "Attach",
313     "Detach"
314 };
315
316 static const value_string cigi2_entity_control_effect_state_vals[] = {
317     {0, "Stop"},
318     {1, "Play"},
319     {2, "Restart"},
320     {0, NULL},
321 };
322
323 /* CIGI2 Component Control */
324 #define CIGI2_PACKET_SIZE_COMPONENT_CONTROL 20
325 static int hf_cigi2_component_control = -1;
326 static int hf_cigi2_component_control_instance_id = -1;
327 static int hf_cigi2_component_control_component_class = -1;
328 static int hf_cigi2_component_control_component_id = -1;
329 static int hf_cigi2_component_control_component_state = -1;
330 static int hf_cigi2_component_control_component_val1 = -1;
331 static int hf_cigi2_component_control_component_val2 = -1;
332
333 static const value_string cigi2_component_control_component_class_vals[] = {
334     {0, "Entity"},
335     {1, "Environment"},
336     {2, "View"},
337     {3, "View Group"},
338     {4, "Sensor"},
339     {5, "System"},
340     {0, NULL},
341 };
342
343 /* CIGI2 Articulated Parts Control */
344 #define CIGI2_PACKET_SIZE_ARTICULATED_PARTS_CONTROL 32
345 static int hf_cigi2_articulated_parts_control = -1;
346 static int hf_cigi2_articulated_parts_control_entity_id = -1;
347 static int hf_cigi2_articulated_parts_control_part_id = -1;
348 static int hf_cigi2_articulated_parts_control_part_state = -1;
349 static int hf_cigi2_articulated_parts_control_xoff_enable = -1;
350 static int hf_cigi2_articulated_parts_control_yoff_enable = -1;
351 static int hf_cigi2_articulated_parts_control_zoff_enable = -1;
352 static int hf_cigi2_articulated_parts_control_roll_enable = -1;
353 static int hf_cigi2_articulated_parts_control_pitch_enable = -1;
354 static int hf_cigi2_articulated_parts_control_yaw_enable = -1;
355 static int hf_cigi2_articulated_parts_control_x_offset = -1;
356 static int hf_cigi2_articulated_parts_control_y_offset = -1;
357 static int hf_cigi2_articulated_parts_control_z_offset = -1;
358 static int hf_cigi2_articulated_parts_control_roll = -1;
359 static int hf_cigi2_articulated_parts_control_pitch = -1;
360 static int hf_cigi2_articulated_parts_control_yaw = -1;
361
362 /* CIGI2 Rate Control */
363 #define CIGI2_PACKET_SIZE_RATE_CONTROL 32
364 static int hf_cigi2_rate_control = -1;
365 static int hf_cigi2_rate_control_entity_id = -1;
366 static int hf_cigi2_rate_control_part_id = -1;
367 static int hf_cigi2_rate_control_x_rate = -1;
368 static int hf_cigi2_rate_control_y_rate = -1;
369 static int hf_cigi2_rate_control_z_rate = -1;
370 static int hf_cigi2_rate_control_roll_rate = -1;
371 static int hf_cigi2_rate_control_pitch_rate = -1;
372 static int hf_cigi2_rate_control_yaw_rate = -1;
373
374 /* CIGI2 Environmental Control */
375 #define CIGI2_PACKET_SIZE_ENVIRONMENT_CONTROL 36
376 static int hf_cigi2_environment_control = -1;
377 static int hf_cigi2_environment_control_hour = -1;
378 static int hf_cigi2_environment_control_minute = -1;
379 static int hf_cigi2_environment_control_ephemeris_enable = -1;
380 static int hf_cigi2_environment_control_humidity = -1;
381 static int hf_cigi2_environment_control_modtran_enable = -1;
382 static int hf_cigi2_environment_control_date = -1;
383 static int hf_cigi2_environment_control_air_temp = -1;
384 static int hf_cigi2_environment_control_global_visibility = -1;
385 static int hf_cigi2_environment_control_wind_speed = -1;
386 static int hf_cigi2_environment_control_wind_direction = -1;
387 static int hf_cigi2_environment_control_pressure = -1;
388 static int hf_cigi2_environment_control_aerosol = -1;
389
390 /* CIGI2 Weather Control */
391 #define CIGI2_PACKET_SIZE_WEATHER_CONTROL 44
392 static int hf_cigi2_weather_control = -1;
393 static int hf_cigi2_weather_control_entity_id = -1;
394 static int hf_cigi2_weather_control_weather_enable = -1;
395 static int hf_cigi2_weather_control_scud_enable = -1;
396 static int hf_cigi2_weather_control_random_winds = -1;
397 static int hf_cigi2_weather_control_severity = -1;
398 static int hf_cigi2_weather_control_phenomenon_type = -1;
399 static int hf_cigi2_weather_control_air_temp = -1;
400 static int hf_cigi2_weather_control_opacity = -1;
401 static int hf_cigi2_weather_control_scud_frequency = -1;
402 static int hf_cigi2_weather_control_coverage = -1;
403 static int hf_cigi2_weather_control_elevation = -1;
404 static int hf_cigi2_weather_control_thickness = -1;
405 static int hf_cigi2_weather_control_transition_band = -1;
406 static int hf_cigi2_weather_control_wind_speed = -1;
407 static int hf_cigi2_weather_control_wind_direction = -1;
408
409 static const value_string cigi2_weather_control_phenomenon_type_vals[] = {
410     {0, "Use Entity ID"},
411     {1, "Cloud Layer 1"},
412     {2, "Cloud Layer 2"},
413     {3, "Ground Fog"},
414     {4, "Rain"},
415     {5, "Snow"},
416     {6, "Sand"},
417     {0, NULL},
418 };
419
420 /* CIGI2 View Control */
421 #define CIGI2_PACKET_SIZE_VIEW_CONTROL 32
422 static int hf_cigi2_view_control = -1;
423 static int hf_cigi2_view_control_entity_id = -1;
424 static int hf_cigi2_view_control_view_id = -1;
425 static int hf_cigi2_view_control_view_group = -1;
426 static int hf_cigi2_view_control_xoff_enable = -1;
427 static int hf_cigi2_view_control_yoff_enable = -1;
428 static int hf_cigi2_view_control_zoff_enable = -1;
429 static int hf_cigi2_view_control_roll_enable = -1;
430 static int hf_cigi2_view_control_pitch_enable = -1;
431 static int hf_cigi2_view_control_yaw_enable = -1;
432 static int hf_cigi2_view_control_x_offset = -1;
433 static int hf_cigi2_view_control_y_offset = -1;
434 static int hf_cigi2_view_control_z_offset = -1;
435 static int hf_cigi2_view_control_roll = -1;
436 static int hf_cigi2_view_control_pitch = -1;
437 static int hf_cigi2_view_control_yaw = -1;
438
439 /* CIGI2 Sensor Control */
440 #define CIGI2_PACKET_SIZE_SENSOR_CONTROL 24
441 static int hf_cigi2_sensor_control = -1;
442 static int hf_cigi2_sensor_control_view_id = -1;
443 static int hf_cigi2_sensor_control_sensor_enable = -1;
444 static int hf_cigi2_sensor_control_polarity = -1;
445 static int hf_cigi2_sensor_control_line_dropout = -1;
446 static int hf_cigi2_sensor_control_sensor_id = -1;
447 static int hf_cigi2_sensor_control_track_mode = -1;
448 static int hf_cigi2_sensor_control_auto_gain = -1;
449 static int hf_cigi2_sensor_control_track_polarity = -1;
450 static int hf_cigi2_sensor_control_gain = -1;
451 static int hf_cigi2_sensor_control_level = -1;
452 static int hf_cigi2_sensor_control_ac_coupling = -1;
453 static int hf_cigi2_sensor_control_noise = -1;
454
455 static const true_false_string cigi2_sensor_control_polarity_tfs = {
456     "Black",
457     "White"
458 };
459
460 static const value_string cigi2_sensor_control_track_mode_vals[] = {
461     {0, "Off"},
462     {1, "Force Correlate"},
463     {2, "Scene"},
464     {3, "Target"},
465     {4, "Ship"},
466     {0, NULL},
467 };
468
469 /* CIGI2 Trajectory Definition */
470 #define CIGI2_PACKET_SIZE_TRAJECTORY_DEFINITION 16
471 static int hf_cigi2_trajectory_definition = -1;
472 static int hf_cigi2_trajectory_definition_entity_id = -1;
473 static int hf_cigi2_trajectory_definition_acceleration = -1;
474 static int hf_cigi2_trajectory_definition_retardation = -1;
475 static int hf_cigi2_trajectory_definition_terminal_velocity = -1;
476
477 /* CIGI2 Special Effect Definition */
478 #define CIGI2_PACKET_SIZE_SPECIAL_EFFECT_DEFINITION 32
479 static int hf_cigi2_special_effect_definition = -1;
480 static int hf_cigi2_special_effect_definition_entity_id = -1;
481 static int hf_cigi2_special_effect_definition_seq_direction = -1;
482 static int hf_cigi2_special_effect_definition_color_enable = -1;
483 static int hf_cigi2_special_effect_definition_red = -1;
484 static int hf_cigi2_special_effect_definition_green = -1;
485 static int hf_cigi2_special_effect_definition_blue = -1;
486 static int hf_cigi2_special_effect_definition_x_scale = -1;
487 static int hf_cigi2_special_effect_definition_y_scale = -1;
488 static int hf_cigi2_special_effect_definition_z_scale = -1;
489 static int hf_cigi2_special_effect_definition_time_scale = -1;
490 static int hf_cigi2_special_effect_definition_effect_count = -1;
491 static int hf_cigi2_special_effect_definition_separation = -1;
492 static int hf_cigi2_special_effect_definition_burst_interval = -1;
493 static int hf_cigi2_special_effect_definition_duration = -1;
494
495 static const true_false_string cigi2_special_effect_definition_seq_direction_tfs = {
496     "Backward",
497     "Forward"
498 };
499
500 /* CIGI2 View Definition */
501 #define CIGI2_PACKET_SIZE_VIEW_DEFINITION 32
502 static int hf_cigi2_view_definition = -1;
503 static int hf_cigi2_view_definition_view_id = -1;
504 static int hf_cigi2_view_definition_view_group = -1;
505 static int hf_cigi2_view_definition_view_type = -1;
506 static int hf_cigi2_view_definition_pixel_rep = -1;
507 static int hf_cigi2_view_definition_mirror = -1;
508 static int hf_cigi2_view_definition_tracker_assign = -1;
509 static int hf_cigi2_view_definition_near_enable = -1;
510 static int hf_cigi2_view_definition_far_enable = -1;
511 static int hf_cigi2_view_definition_left_enable = -1;
512 static int hf_cigi2_view_definition_right_enable = -1;
513 static int hf_cigi2_view_definition_top_enable = -1;
514 static int hf_cigi2_view_definition_bottom_enable = -1;
515 static int hf_cigi2_view_definition_fov_near = -1;
516 static int hf_cigi2_view_definition_fov_far = -1;
517 static int hf_cigi2_view_definition_fov_left = -1;
518 static int hf_cigi2_view_definition_fov_right = -1;
519 static int hf_cigi2_view_definition_fov_top = -1;
520 static int hf_cigi2_view_definition_fov_bottom = -1;
521
522 static const value_string cigi2_view_definition_pixel_rep_vals[] = {
523     {0, "No Replicate"},
524     {1, "1x2 Pixel Replicate"},
525     {2, "2x1 Pixel Replicate"},
526     {3, "2x2 Pixel Replicate"},
527     {4, "TBD"},
528     {5, "TBD"},
529     {6, "TBD"},
530     {0, NULL},
531 };
532
533 static const value_string cigi2_view_definition_mirror_vals[] = {
534     {0, "None"},
535     {1, "Horizontal"},
536     {2, "Vertical"},
537     {3, "Horizontal and Vertical"},
538     {0, NULL},
539 };
540
541 /* CIGI2 Collision Detection Segment Definition */
542 #define CIGI2_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_DEFINITION 24
543 static int hf_cigi2_collision_detection_segment_definition = -1;
544 static int hf_cigi2_collision_detection_segment_definition_entity_id = -1;
545 static int hf_cigi2_collision_detection_segment_definition_segment_enable = -1;
546 static int hf_cigi2_collision_detection_segment_definition_segment_id = -1;
547 static int hf_cigi2_collision_detection_segment_definition_collision_mask = -1;
548 static int hf_cigi2_collision_detection_segment_definition_x_start = -1;
549 static int hf_cigi2_collision_detection_segment_definition_y_start = -1;
550 static int hf_cigi2_collision_detection_segment_definition_z_start = -1;
551 static int hf_cigi2_collision_detection_segment_definition_x_end = -1;
552 static int hf_cigi2_collision_detection_segment_definition_y_end = -1;
553 static int hf_cigi2_collision_detection_segment_definition_z_end = -1;
554
555 /* CIGI2 Collision Detection Volume Definition */
556 #define CIGI2_PACKET_SIZE_COLLISION_DETECTION_VOLUME_DEFINITION 20
557 static int hf_cigi2_collision_detection_volume_definition = -1;
558 static int hf_cigi2_collision_detection_volume_definition_entity_id = -1;
559 static int hf_cigi2_collision_detection_volume_definition_volume_enable = -1;
560 static int hf_cigi2_collision_detection_volume_definition_volume_id = -1;
561 static int hf_cigi2_collision_detection_volume_definition_x_offset = -1;
562 static int hf_cigi2_collision_detection_volume_definition_y_offset = -1;
563 static int hf_cigi2_collision_detection_volume_definition_z_offset = -1;
564 static int hf_cigi2_collision_detection_volume_definition_height = -1;
565 static int hf_cigi2_collision_detection_volume_definition_width = -1;
566 static int hf_cigi2_collision_detection_volume_definition_depth = -1;
567
568 /* CIGI2 Height Above Terrain Request */
569 #define CIGI2_PACKET_SIZE_HEIGHT_ABOVE_TERRAIN_REQUEST 32
570 static int hf_cigi2_height_above_terrain_request = -1;
571 static int hf_cigi2_height_above_terrain_request_hat_id = -1;
572 static int hf_cigi2_height_above_terrain_request_alt = -1;
573 static int hf_cigi2_height_above_terrain_request_lat = -1;
574 static int hf_cigi2_height_above_terrain_request_lon = -1;
575
576 /* CIGI2 Line of Sight Occult Request */
577 #define CIGI2_PACKET_SIZE_LINE_OF_SIGHT_OCCULT_REQUEST 56
578 static int hf_cigi2_line_of_sight_occult_request = -1;
579 static int hf_cigi2_line_of_sight_occult_request_los_id = -1;
580 static int hf_cigi2_line_of_sight_occult_request_source_alt = -1;
581 static int hf_cigi2_line_of_sight_occult_request_source_lat = -1;
582 static int hf_cigi2_line_of_sight_occult_request_source_lon = -1;
583 static int hf_cigi2_line_of_sight_occult_request_dest_alt = -1;
584 static int hf_cigi2_line_of_sight_occult_request_dest_lat = -1;
585 static int hf_cigi2_line_of_sight_occult_request_dest_lon = -1;
586
587 /* CIGI2 Line of Sight Range Request */
588 #define CIGI2_PACKET_SIZE_LINE_OF_SIGHT_RANGE_REQUEST 48
589 static int hf_cigi2_line_of_sight_range_request = -1;
590 static int hf_cigi2_line_of_sight_range_request_los_id = -1;
591 static int hf_cigi2_line_of_sight_range_request_azimuth = -1;
592 static int hf_cigi2_line_of_sight_range_request_elevation = -1;
593 static int hf_cigi2_line_of_sight_range_request_min_range = -1;
594 static int hf_cigi2_line_of_sight_range_request_max_range = -1;
595 static int hf_cigi2_line_of_sight_range_request_source_alt = -1;
596 static int hf_cigi2_line_of_sight_range_request_source_lat = -1;
597 static int hf_cigi2_line_of_sight_range_request_source_lon = -1;
598
599 /* CIGI2 Height of Terrain Request */
600 #define CIGI2_PACKET_SIZE_HEIGHT_OF_TERRAIN_REQUEST 24
601 static int hf_cigi2_height_of_terrain_request = -1;
602 static int hf_cigi2_height_of_terrain_request_hot_id = -1;
603 static int hf_cigi2_height_of_terrain_request_lat = -1;
604 static int hf_cigi2_height_of_terrain_request_lon = -1;
605
606 /* CIGI2 Start of Frame */
607 #define CIGI2_PACKET_SIZE_START_OF_FRAME 16
608 static int hf_cigi2_start_of_frame = -1;
609 static int hf_cigi2_start_of_frame_db_number = -1;
610 static int hf_cigi2_start_of_frame_ig_status_code = -1;
611 static int hf_cigi2_start_of_frame_ig_mode = -1;
612 static int hf_cigi2_start_of_frame_frame_ctr = -1;
613 static int hf_cigi2_start_of_frame_time_tag = -1;
614
615 static const value_string cigi2_start_of_frame_ig_mode_vals[] = {
616     {0, "Standby/Reset"},
617     {1, "Operate"},
618     {2, "Debug"},
619     {3, "Off-Line Maintenance"},
620     {0, NULL},
621 };
622
623 /* CIGI2 Height Above Terrain Response */
624 #define CIGI2_PACKET_SIZE_HEIGHT_ABOVE_TERRAIN_RESPONSE 24
625 static int hf_cigi2_height_above_terrain_response = -1;
626 static int hf_cigi2_height_above_terrain_response_hat_id = -1;
627 static int hf_cigi2_height_above_terrain_response_valid = -1;
628 static int hf_cigi2_height_above_terrain_response_material_type = -1;
629 static int hf_cigi2_height_above_terrain_response_alt = -1;
630
631 /* CIGI2 Line of Sight Response */
632 #define CIGI2_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE 40
633 static int hf_cigi2_line_of_sight_response = -1;
634 static int hf_cigi2_line_of_sight_response_los_id = -1;
635 static int hf_cigi2_line_of_sight_response_valid = -1;
636 static int hf_cigi2_line_of_sight_response_occult_response = -1;
637 static int hf_cigi2_line_of_sight_response_material_type = -1;
638 static int hf_cigi2_line_of_sight_response_range = -1;
639 static int hf_cigi2_line_of_sight_response_alt = -1;
640 static int hf_cigi2_line_of_sight_response_lat = -1;
641 static int hf_cigi2_line_of_sight_response_lon = -1;
642
643 static const true_false_string cigi2_line_of_sight_occult_response_tfs = {
644     "Visible",
645     "Occulted"
646 };
647
648 /* CIGI2 Collision Detection Segment Response */
649 #define CIGI2_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_RESPONSE 24
650 static int hf_cigi2_collision_detection_segment_response = -1;
651 static int hf_cigi2_collision_detection_segment_response_entity_id = -1;
652 static int hf_cigi2_collision_detection_segment_response_segment_id = -1;
653 static int hf_cigi2_collision_detection_segment_response_contact = -1;
654 static int hf_cigi2_collision_detection_segment_response_contacted_entity = -1;
655 static int hf_cigi2_collision_detection_segment_response_material_type = -1;
656 static int hf_cigi2_collision_detection_segment_response_collision_x = -1;
657 static int hf_cigi2_collision_detection_segment_response_collision_y = -1;
658 static int hf_cigi2_collision_detection_segment_response_collision_z = -1;
659
660 static const true_false_string cigi2_collision_detection_segment_response_contact_tfs = {
661     "Contact with a defined entity",
662     "Contact with a non-entity surface"
663 };
664
665 /* CIGI2 Sensor Response */
666 #define CIGI2_PACKET_SIZE_SENSOR_RESPONSE 12
667 static int hf_cigi2_sensor_response = -1;
668 static int hf_cigi2_sensor_response_view_id = -1;
669 static int hf_cigi2_sensor_response_status = -1;
670 static int hf_cigi2_sensor_response_sensor_id = -1;
671 static int hf_cigi2_sensor_response_x_offset = -1;
672 static int hf_cigi2_sensor_response_y_offset = -1;
673 static int hf_cigi2_sensor_response_x_size = -1;
674 static int hf_cigi2_sensor_response_y_size = -1;
675
676 static const value_string cigi2_sensor_response_status_vals[] = {
677     {0, "Searching for Target"},
678     {1, "Tracking"},
679     {2, "Impending Breaklock"},
680     {3, "Breaklock"},
681     {0, NULL},
682 };
683
684 /* CIGI2 Height of Terrain Response */
685 #define CIGI2_PACKET_SIZE_HEIGHT_OF_TERRAIN_RESPONSE 24
686 static int hf_cigi2_height_of_terrain_response = -1;
687 static int hf_cigi2_height_of_terrain_response_hot_id = -1;
688 static int hf_cigi2_height_of_terrain_response_valid = -1;
689 static int hf_cigi2_height_of_terrain_response_material_type = -1;
690 static int hf_cigi2_height_of_terrain_response_alt = -1;
691
692 /* CIGI2 Collision Detection Volume Response */
693 #define CIGI2_PACKET_SIZE_COLLISION_DETECTION_VOLUME_RESPONSE 8
694 static int hf_cigi2_collision_detection_volume_response = -1;
695 static int hf_cigi2_collision_detection_volume_response_entity_id = -1;
696 static int hf_cigi2_collision_detection_volume_response_volume_id = -1;
697 static int hf_cigi2_collision_detection_volume_response_contact = -1;
698 static int hf_cigi2_collision_detection_volume_response_contact_entity = -1;
699
700 static const true_false_string cigi2_collision_detection_volume_response_contact_tfs = {
701     "Contact with a defined entity",
702     "Contact with a non-entity surface"
703 };
704
705 /* CIGI2 Image Generator Message */
706 static int hf_cigi2_image_generator_message = -1;
707 static int hf_cigi2_image_generator_message_id = -1;
708 static int hf_cigi2_image_generator_message_message = -1;
709
710 /* CIGI2 User Definable */
711 static int hf_cigi2_user_definable = -1;
712
713
714 /*** Fields for CIGI3 ***/
715
716 static int hf_cigi3_byte_swap = -1;
717
718 #define CIGI3_BYTE_SWAP_BIG_ENDIAN    0x8000
719 #define CIGI3_BYTE_SWAP_LITTLE_ENDIAN 0x0080
720 static const value_string cigi3_byte_swap_vals[] = {
721     {CIGI3_BYTE_SWAP_BIG_ENDIAN, "Big-Endian"},
722     {CIGI3_BYTE_SWAP_LITTLE_ENDIAN, "Little-Endian"},
723     {0, NULL},
724 };
725
726 /* CIGI3 Packet ID */
727 static int hf_cigi3_packet_id = -1;
728 #define CIGI3_PACKET_ID_IG_CONTROL                                 1
729 #define CIGI3_PACKET_ID_ENTITY_CONTROL                             2
730 #define CIGI3_PACKET_ID_CONFORMAL_CLAMPED_ENTITY_CONTROL           3
731 #define CIGI3_PACKET_ID_COMPONENT_CONTROL                          4
732 #define CIGI3_PACKET_ID_SHORT_COMPONENT_CONTROL                    5
733 #define CIGI3_PACKET_ID_ARTICULATED_PART_CONTROL                   6
734 #define CIGI3_PACKET_ID_SHORT_ARTICULATED_PART_CONTROL             7
735 #define CIGI3_PACKET_ID_RATE_CONTROL                               8
736 #define CIGI3_PACKET_ID_CELESTIAL_SPHERE_CONTROL                   9
737 #define CIGI3_PACKET_ID_ATMOSPHERE_CONTROL                        10
738 #define CIGI3_PACKET_ID_ENVIRONMENTAL_REGION_CONTROL              11
739 #define CIGI3_PACKET_ID_WEATHER_CONTROL                           12
740 #define CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_CONTROL       13
741 #define CIGI3_PACKET_ID_WAVE_CONTROL                              14
742 #define CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL    15
743 #define CIGI3_PACKET_ID_VIEW_CONTROL                              16
744 #define CIGI3_PACKET_ID_SENSOR_CONTROL                            17
745 #define CIGI3_PACKET_ID_MOTION_TRACKER_CONTROL                    18
746 #define CIGI3_PACKET_ID_EARTH_REFERENCE_MODEL_DEFINITION          19
747 #define CIGI3_PACKET_ID_TRAJECTORY_DEFINITION                     20
748 #define CIGI3_PACKET_ID_VIEW_DEFINITION                           21
749 #define CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION    22
750 #define CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION     23
751 #define CIGI3_PACKET_ID_HAT_HOT_REQUEST                           24
752 #define CIGI3_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST             25
753 #define CIGI3_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST              26
754 #define CIGI3_PACKET_ID_POSITION_REQUEST                          27
755 #define CIGI3_PACKET_ID_ENVIRONMENTAL_CONDITIONS_REQUEST          28
756 #define CIGI3_PACKET_ID_SYMBOL_SURFACE_DEFINITION                 29
757 #define CIGI3_PACKET_ID_SYMBOL_TEXT_DEFINITION                    30
758 #define CIGI3_PACKET_ID_SYMBOL_CIRCLE_DEFINITION                  31
759 #define CIGI3_PACKET_ID_SYMBOL_LINE_DEFINITION                    32
760 #define CIGI3_PACKET_ID_SYMBOL_CLONE                              33
761 #define CIGI3_PACKET_ID_SYMBOL_CONTROL                            34
762 #define CIGI3_PACKET_ID_SHORT_SYMBOL_CONTROL                      35
763 #define CIGI3_PACKET_ID_START_OF_FRAME                           101
764 #define CIGI3_PACKET_ID_HAT_HOT_RESPONSE                         102
765 #define CIGI3_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE                103
766 #define CIGI3_PACKET_ID_LINE_OF_SIGHT_RESPONSE                   104
767 #define CIGI3_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE          105
768 #define CIGI3_PACKET_ID_SENSOR_RESPONSE                          106
769 #define CIGI3_PACKET_ID_SENSOR_EXTENDED_RESPONSE                 107
770 #define CIGI3_PACKET_ID_POSITION_RESPONSE                        108
771 #define CIGI3_PACKET_ID_WEATHER_CONDITIONS_RESPONSE              109
772 #define CIGI3_PACKET_ID_AEROSOL_CONCENTRATION_RESPONSE           110
773 #define CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_RESPONSE     111
774 #define CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE  112
775 #define CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_NOTIFICATION 113
776 #define CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_NOTIFICATION  114
777 #define CIGI3_PACKET_ID_ANIMATION_STOP_NOTIFICATION              115
778 #define CIGI3_PACKET_ID_EVENT_NOTIFICATION                       116
779 #define CIGI3_PACKET_ID_IMAGE_GENERATOR_MESSAGE                  117
780 #define CIGI3_PACKET_ID_USER_DEFINED_MIN                         201
781 #define CIGI3_PACKET_ID_USER_DEFINED_MAX                         255
782 static const value_string cigi3_packet_id_vals[] = {
783     {CIGI3_PACKET_ID_IG_CONTROL, "IG Control"},
784     {CIGI3_PACKET_ID_ENTITY_CONTROL, "Entity Control"},
785     {CIGI3_PACKET_ID_CONFORMAL_CLAMPED_ENTITY_CONTROL, "Conformal Clamped Entity Control"},
786     {CIGI3_PACKET_ID_COMPONENT_CONTROL, "Component Control"},
787     {CIGI3_PACKET_ID_SHORT_COMPONENT_CONTROL, "Short Component Control"},
788     {CIGI3_PACKET_ID_ARTICULATED_PART_CONTROL, "Articulated Part Control"},
789     {CIGI3_PACKET_ID_SHORT_ARTICULATED_PART_CONTROL, "Short Articulated Part Control"},
790     {CIGI3_PACKET_ID_RATE_CONTROL, "Rate Control"},
791     {CIGI3_PACKET_ID_CELESTIAL_SPHERE_CONTROL, "Celestial Sphere Control"},
792     {CIGI3_PACKET_ID_ATMOSPHERE_CONTROL, "Atmosphere Control"},
793     {CIGI3_PACKET_ID_ENVIRONMENTAL_REGION_CONTROL, "Environmental Region Control"},
794     {CIGI3_PACKET_ID_WEATHER_CONTROL, "Weather Control"},
795     {CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_CONTROL, "Maritime Surface Conditions Control"},
796     {CIGI3_PACKET_ID_WAVE_CONTROL, "Wave Control"},
797     {CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL, "Terrestrial Surface Conditions Control"},
798     {CIGI3_PACKET_ID_VIEW_CONTROL, "View Control"},
799     {CIGI3_PACKET_ID_SENSOR_CONTROL, "Sensor Control"},
800     {CIGI3_PACKET_ID_MOTION_TRACKER_CONTROL, "Motion Tracker Control"},
801     {CIGI3_PACKET_ID_EARTH_REFERENCE_MODEL_DEFINITION, "Earth Reference Model Definition"},
802     {CIGI3_PACKET_ID_TRAJECTORY_DEFINITION, "Trajectory Definition"},
803     {CIGI3_PACKET_ID_VIEW_DEFINITION, "View Definition"},
804     {CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION, "Collision Detection Segment Definition"},
805     {CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION, "Collision Detection Volume Definition"},
806     {CIGI3_PACKET_ID_HAT_HOT_REQUEST, "HAT/HOT Request"},
807     {CIGI3_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST, "Line of Sight Segment Request"},
808     {CIGI3_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST, "Line of Sight Vector Request"},
809     {CIGI3_PACKET_ID_POSITION_REQUEST, "Position Request"},
810     {CIGI3_PACKET_ID_ENVIRONMENTAL_CONDITIONS_REQUEST, "Environmental Conditions Request"},
811     {CIGI3_PACKET_ID_SYMBOL_SURFACE_DEFINITION, "Symbol Surface Definition"},
812     {CIGI3_PACKET_ID_SYMBOL_TEXT_DEFINITION, "Symbol Text Definition"},
813     {CIGI3_PACKET_ID_SYMBOL_CIRCLE_DEFINITION, "Symbol Circle Definition"},
814     {CIGI3_PACKET_ID_SYMBOL_LINE_DEFINITION, "Symbol Line Definition"},
815     {CIGI3_PACKET_ID_SYMBOL_CLONE, "Symbol Clone"},
816     {CIGI3_PACKET_ID_SYMBOL_CONTROL, "Symbol Control"},
817     {CIGI3_PACKET_ID_SHORT_SYMBOL_CONTROL, "Short Symbol Control"},
818     {CIGI3_PACKET_ID_START_OF_FRAME, "Start of Frame"},
819     {CIGI3_PACKET_ID_HAT_HOT_RESPONSE, "HAT/HOT Response"},
820     {CIGI3_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE, "HAT/HOT Extended Response"},
821     {CIGI3_PACKET_ID_LINE_OF_SIGHT_RESPONSE, "Line of Sight Response"},
822     {CIGI3_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE, "Line of Sight Extended Response"},
823     {CIGI3_PACKET_ID_SENSOR_RESPONSE, "Sensor Response"},
824     {CIGI3_PACKET_ID_SENSOR_EXTENDED_RESPONSE, "Sensor Extended Response"},
825     {CIGI3_PACKET_ID_POSITION_RESPONSE, "Position Response"},
826     {CIGI3_PACKET_ID_WEATHER_CONDITIONS_RESPONSE, "Weather Conditions Response"},
827     {CIGI3_PACKET_ID_AEROSOL_CONCENTRATION_RESPONSE, "Aerosol Concentration Response"},
828     {CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_RESPONSE, "Maritime Surface Conditions Response"},
829     {CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE, "Terrestrial Surface Conditions Response"},
830     {CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_NOTIFICATION, "Collision Detection Segment Notification"},
831     {CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_NOTIFICATION, "Collision Detection Volume Notification"},
832     {CIGI3_PACKET_ID_ANIMATION_STOP_NOTIFICATION, "Animation Stop Notification"},
833     {CIGI3_PACKET_ID_EVENT_NOTIFICATION, "Event Notification"},
834     {CIGI3_PACKET_ID_IMAGE_GENERATOR_MESSAGE, "Image Generator Message"},
835     {CIGI3_PACKET_ID_USER_DEFINED_MIN, "User-Defined Data"},
836     {CIGI3_PACKET_ID_USER_DEFINED_MIN+1, "User-Defined Data"},
837     {CIGI3_PACKET_ID_USER_DEFINED_MIN+2, "User-Defined Data"},
838     {CIGI3_PACKET_ID_USER_DEFINED_MIN+3, "User-Defined Data"},
839     {CIGI3_PACKET_ID_USER_DEFINED_MIN+4, "User-Defined Data"},
840     {CIGI3_PACKET_ID_USER_DEFINED_MIN+5, "User-Defined Data"},
841     {CIGI3_PACKET_ID_USER_DEFINED_MIN+6, "User-Defined Data"},
842     {CIGI3_PACKET_ID_USER_DEFINED_MIN+7, "User-Defined Data"},
843     {CIGI3_PACKET_ID_USER_DEFINED_MIN+8, "User-Defined Data"},
844     {CIGI3_PACKET_ID_USER_DEFINED_MIN+9, "User-Defined Data"},
845     {CIGI3_PACKET_ID_USER_DEFINED_MIN+10, "User-Defined Data"},
846     {CIGI3_PACKET_ID_USER_DEFINED_MIN+11, "User-Defined Data"},
847     {CIGI3_PACKET_ID_USER_DEFINED_MIN+12, "User-Defined Data"},
848     {CIGI3_PACKET_ID_USER_DEFINED_MIN+13, "User-Defined Data"},
849     {CIGI3_PACKET_ID_USER_DEFINED_MIN+14, "User-Defined Data"},
850     {CIGI3_PACKET_ID_USER_DEFINED_MIN+15, "User-Defined Data"},
851     {CIGI3_PACKET_ID_USER_DEFINED_MIN+16, "User-Defined Data"},
852     {CIGI3_PACKET_ID_USER_DEFINED_MIN+17, "User-Defined Data"},
853     {CIGI3_PACKET_ID_USER_DEFINED_MIN+18, "User-Defined Data"},
854     {CIGI3_PACKET_ID_USER_DEFINED_MIN+19, "User-Defined Data"},
855     {CIGI3_PACKET_ID_USER_DEFINED_MIN+20, "User-Defined Data"},
856     {CIGI3_PACKET_ID_USER_DEFINED_MIN+21, "User-Defined Data"},
857     {CIGI3_PACKET_ID_USER_DEFINED_MIN+22, "User-Defined Data"},
858     {CIGI3_PACKET_ID_USER_DEFINED_MIN+23, "User-Defined Data"},
859     {CIGI3_PACKET_ID_USER_DEFINED_MIN+24, "User-Defined Data"},
860     {CIGI3_PACKET_ID_USER_DEFINED_MIN+25, "User-Defined Data"},
861     {CIGI3_PACKET_ID_USER_DEFINED_MIN+26, "User-Defined Data"},
862     {CIGI3_PACKET_ID_USER_DEFINED_MIN+27, "User-Defined Data"},
863     {CIGI3_PACKET_ID_USER_DEFINED_MIN+28, "User-Defined Data"},
864     {CIGI3_PACKET_ID_USER_DEFINED_MIN+29, "User-Defined Data"},
865     {CIGI3_PACKET_ID_USER_DEFINED_MIN+30, "User-Defined Data"},
866     {CIGI3_PACKET_ID_USER_DEFINED_MIN+31, "User-Defined Data"},
867     {CIGI3_PACKET_ID_USER_DEFINED_MIN+32, "User-Defined Data"},
868     {CIGI3_PACKET_ID_USER_DEFINED_MIN+33, "User-Defined Data"},
869     {CIGI3_PACKET_ID_USER_DEFINED_MIN+34, "User-Defined Data"},
870     {CIGI3_PACKET_ID_USER_DEFINED_MIN+35, "User-Defined Data"},
871     {CIGI3_PACKET_ID_USER_DEFINED_MIN+36, "User-Defined Data"},
872     {CIGI3_PACKET_ID_USER_DEFINED_MIN+37, "User-Defined Data"},
873     {CIGI3_PACKET_ID_USER_DEFINED_MIN+38, "User-Defined Data"},
874     {CIGI3_PACKET_ID_USER_DEFINED_MIN+39, "User-Defined Data"},
875     {CIGI3_PACKET_ID_USER_DEFINED_MIN+40, "User-Defined Data"},
876     {CIGI3_PACKET_ID_USER_DEFINED_MIN+41, "User-Defined Data"},
877     {CIGI3_PACKET_ID_USER_DEFINED_MIN+42, "User-Defined Data"},
878     {CIGI3_PACKET_ID_USER_DEFINED_MIN+43, "User-Defined Data"},
879     {CIGI3_PACKET_ID_USER_DEFINED_MIN+44, "User-Defined Data"},
880     {CIGI3_PACKET_ID_USER_DEFINED_MIN+45, "User-Defined Data"},
881     {CIGI3_PACKET_ID_USER_DEFINED_MIN+46, "User-Defined Data"},
882     {CIGI3_PACKET_ID_USER_DEFINED_MIN+47, "User-Defined Data"},
883     {CIGI3_PACKET_ID_USER_DEFINED_MIN+48, "User-Defined Data"},
884     {CIGI3_PACKET_ID_USER_DEFINED_MIN+49, "User-Defined Data"},
885     {CIGI3_PACKET_ID_USER_DEFINED_MIN+50, "User-Defined Data"},
886     {CIGI3_PACKET_ID_USER_DEFINED_MIN+51, "User-Defined Data"},
887     {CIGI3_PACKET_ID_USER_DEFINED_MIN+52, "User-Defined Data"},
888     {CIGI3_PACKET_ID_USER_DEFINED_MIN+53, "User-Defined Data"},
889     {CIGI3_PACKET_ID_USER_DEFINED_MAX, "User-Defined Data"},
890     {0, NULL},
891 };
892
893 /* CIGI3 IG Control */
894 #define CIGI3_PACKET_SIZE_IG_CONTROL 16
895 static int hf_cigi3_ig_control = -1;
896 static int hf_cigi3_ig_control_db_number = -1;
897 static int hf_cigi3_ig_control_ig_mode = -1;
898 static int hf_cigi3_ig_control_timestamp_valid = -1;
899 static int hf_cigi3_ig_control_frame_ctr = -1;
900 static int hf_cigi3_ig_control_timestamp = -1;
901
902 static const value_string cigi3_ig_control_ig_mode_vals[] = {
903     {0, "Reset/Standby"},
904     {1, "Operate"},
905     {2, "Debug"},
906     {0, NULL},
907 };
908
909 /* CIGI3_2 IG Control */
910 #define CIGI3_2_PACKET_SIZE_IG_CONTROL 24
911 static int hf_cigi3_2_ig_control = -1;
912 static int hf_cigi3_2_ig_control_db_number = -1;
913 static int hf_cigi3_2_ig_control_ig_mode = -1;
914 static int hf_cigi3_2_ig_control_timestamp_valid = -1;
915 static int hf_cigi3_2_ig_control_host_frame_number = -1;
916 static int hf_cigi3_2_ig_control_timestamp = -1;
917 static int hf_cigi3_2_ig_control_last_ig_frame_number = -1;
918
919 static const value_string cigi3_2_ig_control_ig_mode_vals[] = {
920     {0, "Reset/Standby"},
921     {1, "Operate"},
922     {2, "Debug"},
923     {0, NULL},
924 };
925
926 /* CIGI3_3 IG Control */
927 #define CIGI3_3_PACKET_SIZE_IG_CONTROL 24
928 static int hf_cigi3_3_ig_control = -1;
929 static int hf_cigi3_3_ig_control_db_number = -1;
930 static int hf_cigi3_3_ig_control_ig_mode = -1;
931 static int hf_cigi3_3_ig_control_timestamp_valid = -1;
932 static int hf_cigi3_3_ig_control_extrapolation_enable = -1;
933 static int hf_cigi3_3_ig_control_minor_version = -1;
934 static int hf_cigi3_3_ig_control_host_frame_number = -1;
935 static int hf_cigi3_3_ig_control_timestamp = -1;
936 static int hf_cigi3_3_ig_control_last_ig_frame_number = -1;
937
938 static const value_string cigi3_3_ig_control_ig_mode_vals[] = {
939     {0, "Reset/Standby"},
940     {1, "Operate"},
941     {2, "Debug"},
942     {0, NULL},
943 };
944
945 /* CIGI3 Entity Control */
946 #define CIGI3_PACKET_SIZE_ENTITY_CONTROL 48
947 static int hf_cigi3_entity_control = -1;
948 static int hf_cigi3_entity_control_entity_id = -1;
949 static int hf_cigi3_entity_control_entity_state = -1;
950 static int hf_cigi3_entity_control_attach_state = -1;
951 static int hf_cigi3_entity_control_collision_detection_request = -1;
952 static int hf_cigi3_entity_control_inherit_alpha = -1;
953 static int hf_cigi3_entity_control_ground_ocean_clamp = -1;
954 static int hf_cigi3_entity_control_animation_direction = -1;
955 static int hf_cigi3_entity_control_animation_loop_mode = -1;
956 static int hf_cigi3_entity_control_animation_state = -1;
957 static int hf_cigi3_entity_control_alpha = -1;
958 static int hf_cigi3_entity_control_entity_type = -1;
959 static int hf_cigi3_entity_control_parent_id = -1;
960 static int hf_cigi3_entity_control_roll = -1;
961 static int hf_cigi3_entity_control_pitch = -1;
962 static int hf_cigi3_entity_control_yaw = -1;
963 static int hf_cigi3_entity_control_lat_xoff = -1;
964 static int hf_cigi3_entity_control_lon_yoff = -1;
965 static int hf_cigi3_entity_control_alt_zoff = -1;
966
967 static const value_string cigi3_entity_control_entity_state_vals[] = {
968     {0, "Inactive/Standby"},
969     {1, "Active"},
970     {2, "Destroyed"},
971     {0, NULL},
972 };
973
974 static const true_false_string cigi3_entity_control_attach_state_tfs = {
975     "Attach",
976     "Detach"
977 };
978
979 static const true_false_string cigi3_entity_control_collision_detection_request_tfs = {
980     "Request",
981     "No Request"
982 };
983
984 static const true_false_string cigi3_entity_control_inherit_alpha_tfs = {
985     "Inherited",
986     "Not Inherited"
987 };
988
989 static const value_string cigi3_entity_control_ground_ocean_clamp_vals[] = {
990     {0, "No Clamp"},
991     {1, "Non-Conformal"},
992     {2, "Conformal"},
993     {0, NULL},
994 };
995
996 static const true_false_string cigi3_entity_control_animation_direction_tfs = {
997     "Backward",
998     "Forward"
999 };
1000
1001 static const true_false_string cigi3_entity_control_animation_loop_mode_tfs = {
1002     "Continuous",
1003     "One-Shot"
1004 };
1005
1006 static const value_string cigi3_entity_control_animation_state_vals[] = {
1007     {0, "Stop"},
1008     {1, "Pause"},
1009     {2, "Play"},
1010     {3, "Continue"},
1011     {0, NULL},
1012 };
1013
1014 /* CIGI3_3 Entity Control */
1015 static int hf_cigi3_3_entity_control = -1;
1016 static int hf_cigi3_3_entity_control_entity_id = -1;
1017 static int hf_cigi3_3_entity_control_entity_state = -1;
1018 static int hf_cigi3_3_entity_control_attach_state = -1;
1019 static int hf_cigi3_3_entity_control_collision_detection_request = -1;
1020 static int hf_cigi3_3_entity_control_inherit_alpha = -1;
1021 static int hf_cigi3_3_entity_control_ground_ocean_clamp = -1;
1022 static int hf_cigi3_3_entity_control_animation_direction = -1;
1023 static int hf_cigi3_3_entity_control_animation_loop_mode = -1;
1024 static int hf_cigi3_3_entity_control_animation_state = -1;
1025 static int hf_cigi3_3_entity_control_extrapolation_enable = -1;
1026 static int hf_cigi3_3_entity_control_alpha = -1;
1027 static int hf_cigi3_3_entity_control_entity_type = -1;
1028 static int hf_cigi3_3_entity_control_parent_id = -1;
1029 static int hf_cigi3_3_entity_control_roll = -1;
1030 static int hf_cigi3_3_entity_control_pitch = -1;
1031 static int hf_cigi3_3_entity_control_yaw = -1;
1032 static int hf_cigi3_3_entity_control_lat_xoff = -1;
1033 static int hf_cigi3_3_entity_control_lon_yoff = -1;
1034 static int hf_cigi3_3_entity_control_alt_zoff = -1;
1035
1036 /* CIGI3 Conformal Clamped Entity Control */
1037 #define CIGI3_PACKET_SIZE_CONFORMAL_CLAMPED_ENTITY_CONTROL 24
1038 static int hf_cigi3_conformal_clamped_entity_control = -1;
1039 static int hf_cigi3_conformal_clamped_entity_control_entity_id = -1;
1040 static int hf_cigi3_conformal_clamped_entity_control_yaw = -1;
1041 static int hf_cigi3_conformal_clamped_entity_control_lat = -1;
1042 static int hf_cigi3_conformal_clamped_entity_control_lon = -1;
1043
1044 /* CIGI3 Component Control */
1045 #define CIGI3_PACKET_SIZE_COMPONENT_CONTROL 32
1046 static int hf_cigi3_component_control = -1;
1047 static int hf_cigi3_component_control_component_id = -1;
1048 static int hf_cigi3_component_control_instance_id = -1;
1049 static int hf_cigi3_component_control_component_class = -1;
1050 static int hf_cigi3_component_control_component_state = -1;
1051 static int hf_cigi3_component_control_data_1 = -1;
1052 static int hf_cigi3_component_control_data_2 = -1;
1053 static int hf_cigi3_component_control_data_3 = -1;
1054 static int hf_cigi3_component_control_data_4 = -1;
1055 static int hf_cigi3_component_control_data_5 = -1;
1056 static int hf_cigi3_component_control_data_6 = -1;
1057
1058 static const value_string cigi3_component_control_component_class_vals[] = {
1059     {0, "Entity"},
1060     {1, "View"},
1061     {2, "View Group"},
1062     {3, "Sensor"},
1063     {4, "Regional Sea Surface"},
1064     {5, "Regional Terrain Surface"},
1065     {6, "Regional Layered Weather"},
1066     {7, "Global Sea Surface"},
1067     {8, "Global Terrain Surface"},
1068     {9, "Global Layered Weather"},
1069     {10, "Atmosphere"},
1070     {11, "Celestial Sphere"},
1071     {12, "Event"},
1072     {13, "System"},
1073     {0, NULL},
1074 };
1075
1076 /* CIGI3_3 Component Control */
1077 static int hf_cigi3_3_component_control = -1;
1078 static int hf_cigi3_3_component_control_component_id = -1;
1079 static int hf_cigi3_3_component_control_instance_id = -1;
1080 static int hf_cigi3_3_component_control_component_class = -1;
1081 static int hf_cigi3_3_component_control_component_state = -1;
1082 static int hf_cigi3_3_component_control_data_1 = -1;
1083 static int hf_cigi3_3_component_control_data_2 = -1;
1084 static int hf_cigi3_3_component_control_data_3 = -1;
1085 static int hf_cigi3_3_component_control_data_4 = -1;
1086 static int hf_cigi3_3_component_control_data_5 = -1;
1087 static int hf_cigi3_3_component_control_data_6 = -1;
1088
1089 static const value_string cigi3_3_component_control_component_class_vals[] = {
1090     {0, "Entity"},
1091     {1, "View"},
1092     {2, "View Group"},
1093     {3, "Sensor"},
1094     {4, "Regional Sea Surface"},
1095     {5, "Regional Terrain Surface"},
1096     {6, "Regional Layered Weather"},
1097     {7, "Global Sea Surface"},
1098     {8, "Global Terrain Surface"},
1099     {9, "Global Layered Weather"},
1100     {10, "Atmosphere"},
1101     {11, "Celestial Sphere"},
1102     {12, "Event"},
1103     {13, "System"},
1104     {14, "Symbol Surface"},
1105     {15, "Symbol"},
1106     {0, NULL},
1107 };
1108
1109 /* CIGI3 Short Component Control */
1110 #define CIGI3_PACKET_SIZE_SHORT_COMPONENT_CONTROL 16
1111 static int hf_cigi3_short_component_control = -1;
1112 static int hf_cigi3_short_component_control_component_id = -1;
1113 static int hf_cigi3_short_component_control_instance_id = -1;
1114 static int hf_cigi3_short_component_control_component_class = -1;
1115 static int hf_cigi3_short_component_control_component_state = -1;
1116 static int hf_cigi3_short_component_control_data_1 = -1;
1117 static int hf_cigi3_short_component_control_data_2 = -1;
1118
1119 static const value_string cigi3_short_component_control_component_class_vals[] = {
1120     {0, "Entity"},
1121     {1, "View"},
1122     {2, "View Group"},
1123     {3, "Sensor"},
1124     {4, "Regional Sea Surface"},
1125     {5, "Regional Terrain Surface"},
1126     {6, "Regional Layered Weather"},
1127     {7, "Global Sea Surface"},
1128     {8, "Global Terrain Surface"},
1129     {9, "Global Layered Weather"},
1130     {10, "Atmosphere"},
1131     {11, "Celestial Sphere"},
1132     {12, "Event"},
1133     {13, "System"},
1134     {0, NULL},
1135 };
1136
1137 /* CIGI3_3 Short Component Control */
1138 static int hf_cigi3_3_short_component_control = -1;
1139 static int hf_cigi3_3_short_component_control_component_id = -1;
1140 static int hf_cigi3_3_short_component_control_instance_id = -1;
1141 static int hf_cigi3_3_short_component_control_component_class = -1;
1142 static int hf_cigi3_3_short_component_control_component_state = -1;
1143 static int hf_cigi3_3_short_component_control_data_1 = -1;
1144 static int hf_cigi3_3_short_component_control_data_2 = -1;
1145
1146 static const value_string cigi3_3_short_component_control_component_class_vals[] = {
1147     {0, "Entity"},
1148     {1, "View"},
1149     {2, "View Group"},
1150     {3, "Sensor"},
1151     {4, "Regional Sea Surface"},
1152     {5, "Regional Terrain Surface"},
1153     {6, "Regional Layered Weather"},
1154     {7, "Global Sea Surface"},
1155     {8, "Global Terrain Surface"},
1156     {9, "Global Layered Weather"},
1157     {10, "Atmosphere"},
1158     {11, "Celestial Sphere"},
1159     {12, "Event"},
1160     {13, "System"},
1161     {14, "Symbol Surface"},
1162     {15, "Symbol"},
1163     {0, NULL},
1164 };
1165
1166 /* CIGI3 Articulated Part Control */
1167 #define CIGI3_PACKET_SIZE_ARTICULATED_PART_CONTROL 32
1168 static int hf_cigi3_articulated_part_control = -1;
1169 static int hf_cigi3_articulated_part_control_entity_id = -1;
1170 static int hf_cigi3_articulated_part_control_part_id = -1;
1171 static int hf_cigi3_articulated_part_control_part_enable = -1;
1172 static int hf_cigi3_articulated_part_control_xoff_enable = -1;
1173 static int hf_cigi3_articulated_part_control_yoff_enable = -1;
1174 static int hf_cigi3_articulated_part_control_zoff_enable = -1;
1175 static int hf_cigi3_articulated_part_control_roll_enable = -1;
1176 static int hf_cigi3_articulated_part_control_pitch_enable = -1;
1177 static int hf_cigi3_articulated_part_control_yaw_enable = -1;
1178 static int hf_cigi3_articulated_part_control_xoff = -1;
1179 static int hf_cigi3_articulated_part_control_yoff = -1;
1180 static int hf_cigi3_articulated_part_control_zoff = -1;
1181 static int hf_cigi3_articulated_part_control_roll = -1;
1182 static int hf_cigi3_articulated_part_control_pitch = -1;
1183 static int hf_cigi3_articulated_part_control_yaw = -1;
1184
1185 /* CIGI3 Short Articulated Part Control */
1186 #define CIGI3_PACKET_SIZE_SHORT_ARTICULATED_PART_CONTROL 16
1187 static int hf_cigi3_short_articulated_part_control = -1;
1188 static int hf_cigi3_short_articulated_part_control_entity_id = -1;
1189 static int hf_cigi3_short_articulated_part_control_part_id_1 = -1;
1190 static int hf_cigi3_short_articulated_part_control_part_id_2 = -1;
1191 static int hf_cigi3_short_articulated_part_control_dof_select_1 = -1;
1192 static int hf_cigi3_short_articulated_part_control_dof_select_2 = -1;
1193 static int hf_cigi3_short_articulated_part_control_part_enable_1 = -1;
1194 static int hf_cigi3_short_articulated_part_control_part_enable_2 = -1;
1195 static int hf_cigi3_short_articulated_part_control_dof_1 = -1;
1196 static int hf_cigi3_short_articulated_part_control_dof_2 = -1;
1197
1198 static const value_string cigi3_short_articulated_part_control_dof_select_vals[] = {
1199     {0, "Not Used"},
1200     {1, "X Offset"},
1201     {2, "Y Offset"},
1202     {3, "Z Offset"},
1203     {4, "Yaw"},
1204     {5, "Pitch"},
1205     {6, "Roll"},
1206     {0, NULL},
1207 };
1208
1209 /* CIGI3 Rate Control */
1210 #define CIGI3_PACKET_SIZE_RATE_CONTROL 32
1211 static int hf_cigi3_rate_control = -1;
1212 static int hf_cigi3_rate_control_entity_id = -1;
1213 static int hf_cigi3_rate_control_part_id = -1;
1214 static int hf_cigi3_rate_control_apply_to_part = -1;
1215 static int hf_cigi3_rate_control_x_rate = -1;
1216 static int hf_cigi3_rate_control_y_rate = -1;
1217 static int hf_cigi3_rate_control_z_rate = -1;
1218 static int hf_cigi3_rate_control_roll_rate = -1;
1219 static int hf_cigi3_rate_control_pitch_rate = -1;
1220 static int hf_cigi3_rate_control_yaw_rate = -1;
1221
1222 /* CIGI3_2 Rate Control */
1223 #define CIGI3_2_PACKET_SIZE_RATE_CONTROL 32
1224 static int hf_cigi3_2_rate_control = -1;
1225 static int hf_cigi3_2_rate_control_entity_id = -1;
1226 static int hf_cigi3_2_rate_control_part_id = -1;
1227 static int hf_cigi3_2_rate_control_apply_to_part = -1;
1228 static int hf_cigi3_2_rate_control_coordinate_system = -1;
1229 static int hf_cigi3_2_rate_control_x_rate = -1;
1230 static int hf_cigi3_2_rate_control_y_rate = -1;
1231 static int hf_cigi3_2_rate_control_z_rate = -1;
1232 static int hf_cigi3_2_rate_control_roll_rate = -1;
1233 static int hf_cigi3_2_rate_control_pitch_rate = -1;
1234 static int hf_cigi3_2_rate_control_yaw_rate = -1;
1235
1236 static const true_false_string cigi3_2_rate_control_coord_sys_select_vals = {
1237     "Local",
1238     "World/Parent"
1239 };
1240
1241 /* CIGI3 Celestial Sphere Control */
1242 #define CIGI3_PACKET_SIZE_CELESTIAL_SPHERE_CONTROL 16
1243 static int hf_cigi3_celestial_sphere_control = -1;
1244 static int hf_cigi3_celestial_sphere_control_hour = -1;
1245 static int hf_cigi3_celestial_sphere_control_minute = -1;
1246 static int hf_cigi3_celestial_sphere_control_ephemeris_enable = -1;
1247 static int hf_cigi3_celestial_sphere_control_sun_enable = -1;
1248 static int hf_cigi3_celestial_sphere_control_moon_enable = -1;
1249 static int hf_cigi3_celestial_sphere_control_star_enable = -1;
1250 static int hf_cigi3_celestial_sphere_control_date_time_valid = -1;
1251 static int hf_cigi3_celestial_sphere_control_date = -1;
1252 static int hf_cigi3_celestial_sphere_control_star_intensity = -1;
1253
1254 /* CIGI3 Atmosphere Control */
1255 #define CIGI3_PACKET_SIZE_ATMOSPHERE_CONTROL 32
1256 static int hf_cigi3_atmosphere_control = -1;
1257 static int hf_cigi3_atmosphere_control_atmospheric_model_enable = -1;
1258 static int hf_cigi3_atmosphere_control_humidity = -1;
1259 static int hf_cigi3_atmosphere_control_air_temp = -1;
1260 static int hf_cigi3_atmosphere_control_visibility_range = -1;
1261 static int hf_cigi3_atmosphere_control_horiz_wind = -1;
1262 static int hf_cigi3_atmosphere_control_vert_wind = -1;
1263 static int hf_cigi3_atmosphere_control_wind_direction = -1;
1264 static int hf_cigi3_atmosphere_control_barometric_pressure = -1;
1265
1266 /* CIGI3 Environmental Region Control */
1267 #define CIGI3_PACKET_SIZE_ENVIRONMENTAL_REGION_CONTROL 48
1268 static int hf_cigi3_environmental_region_control = -1;
1269 static int hf_cigi3_environmental_region_control_region_id = -1;
1270 static int hf_cigi3_environmental_region_control_region_state = -1;
1271 static int hf_cigi3_environmental_region_control_merge_weather = -1;
1272 static int hf_cigi3_environmental_region_control_merge_aerosol = -1;
1273 static int hf_cigi3_environmental_region_control_merge_maritime = -1;
1274 static int hf_cigi3_environmental_region_control_merge_terrestrial = -1;
1275 static int hf_cigi3_environmental_region_control_lat = -1;
1276 static int hf_cigi3_environmental_region_control_lon = -1;
1277 static int hf_cigi3_environmental_region_control_size_x = -1;
1278 static int hf_cigi3_environmental_region_control_size_y = -1;
1279 static int hf_cigi3_environmental_region_control_corner_radius = -1;
1280 static int hf_cigi3_environmental_region_control_rotation = -1;
1281 static int hf_cigi3_environmental_region_control_transition_perimeter = -1;
1282
1283 static const value_string cigi3_environmental_region_control_region_state_vals[] = {
1284     {0, "Inactive"},
1285     {1, "Active"},
1286     {2, "Destroyed"},
1287     {0, NULL},
1288 };
1289
1290 static const true_false_string cigi3_environmental_region_control_merge_properties_tfs = {
1291     "Merge",
1292     "Use Last"
1293 };
1294
1295 /* CIGI3 Weather Control */
1296 #define CIGI3_PACKET_SIZE_WEATHER_CONTROL 56
1297 static int hf_cigi3_weather_control = -1;
1298 static int hf_cigi3_weather_control_entity_region_id = -1;
1299 static int hf_cigi3_weather_control_layer_id = -1;
1300 static int hf_cigi3_weather_control_humidity = -1;
1301 static int hf_cigi3_weather_control_weather_enable = -1;
1302 static int hf_cigi3_weather_control_scud_enable = -1;
1303 static int hf_cigi3_weather_control_random_winds_enable = -1;
1304 static int hf_cigi3_weather_control_random_lightning_enable = -1;
1305 static int hf_cigi3_weather_control_cloud_type = -1;
1306 static int hf_cigi3_weather_control_scope = -1;
1307 static int hf_cigi3_weather_control_severity = -1;
1308 static int hf_cigi3_weather_control_air_temp = -1;
1309 static int hf_cigi3_weather_control_visibility_range = -1;
1310 static int hf_cigi3_weather_control_scud_frequency = -1;
1311 static int hf_cigi3_weather_control_coverage = -1;
1312 static int hf_cigi3_weather_control_base_elevation = -1;
1313 static int hf_cigi3_weather_control_thickness = -1;
1314 static int hf_cigi3_weather_control_transition_band = -1;
1315 static int hf_cigi3_weather_control_horiz_wind = -1;
1316 static int hf_cigi3_weather_control_vert_wind = -1;
1317 static int hf_cigi3_weather_control_wind_direction = -1;
1318 static int hf_cigi3_weather_control_barometric_pressure = -1;
1319 static int hf_cigi3_weather_control_aerosol_concentration = -1;
1320
1321 static const value_string cigi3_weather_control_layer_id_vals[] = {
1322     {0, "Ground Fog"},
1323     {1, "Cloud Layer 1"},
1324     {2, "Cloud Layer 2"},
1325     {3, "Cloud Layer 3"},
1326     {4, "Rain"},
1327     {5, "Snow"},
1328     {6, "Sleet"},
1329     {7, "Hail"},
1330     {8, "Sand"},
1331     {9, "Dust"},
1332     {0, NULL},
1333 };
1334
1335 static const value_string cigi3_weather_control_cloud_type_vals[] = {
1336     {0, "None"},
1337     {1, "Altocumulus"},
1338     {2, "Altostratus"},
1339     {3, "Cirrocumulus"},
1340     {4, "Cirrostratus"},
1341     {5, "Cirrus"},
1342     {6, "Cumulonimbus"},
1343     {7, "Cumulus"},
1344     {8, "Nimbostratus"},
1345     {9, "Stratocumulus"},
1346     {10, "Stratus"},
1347     {11, "Other"},
1348     {12, "Other"},
1349     {13, "Other"},
1350     {14, "Other"},
1351     {15, "Other"},
1352     {0, NULL},
1353 };
1354
1355 static const value_string cigi3_weather_control_scope_vals[] = {
1356     {0, "Global"},
1357     {1, "Regional"},
1358     {2, "Entity"},
1359     {0, NULL},
1360 };
1361
1362 /* CIGI3 Maritime Surface Conditions Control */
1363 #define CIGI3_PACKET_SIZE_MARITIME_SURFACE_CONDITIONS_CONTROL 24
1364 static int hf_cigi3_maritime_surface_conditions_control = -1;
1365 static int hf_cigi3_maritime_surface_conditions_control_entity_region_id = -1;
1366 static int hf_cigi3_maritime_surface_conditions_control_surface_conditions_enable = -1;
1367 static int hf_cigi3_maritime_surface_conditions_control_whitecap_enable = -1;
1368 static int hf_cigi3_maritime_surface_conditions_control_scope = -1;
1369 static int hf_cigi3_maritime_surface_conditions_control_sea_surface_height = -1;
1370 static int hf_cigi3_maritime_surface_conditions_control_surface_water_temp = -1;
1371 static int hf_cigi3_maritime_surface_conditions_control_surface_clarity = -1;
1372
1373 static const value_string cigi3_maritime_surface_conditions_control_scope_vals[] = {
1374     {0, "Global"},
1375     {1, "Regional"},
1376     {2, "Entity"},
1377     {0, NULL},
1378 };
1379
1380 /* CIGI3 Wave Control */
1381 #define CIGI3_PACKET_SIZE_WAVE_CONTROL 32
1382 static int hf_cigi3_wave_control = -1;
1383 static int hf_cigi3_wave_control_entity_region_id = -1;
1384 static int hf_cigi3_wave_control_wave_id = -1;
1385 static int hf_cigi3_wave_control_wave_enable = -1;
1386 static int hf_cigi3_wave_control_scope = -1;
1387 static int hf_cigi3_wave_control_breaker_type = -1;
1388 static int hf_cigi3_wave_control_height = -1;
1389 static int hf_cigi3_wave_control_wavelength = -1;
1390 static int hf_cigi3_wave_control_period = -1;
1391 static int hf_cigi3_wave_control_direction = -1;
1392 static int hf_cigi3_wave_control_phase_offset = -1;
1393 static int hf_cigi3_wave_control_leading = -1;
1394
1395 static const value_string cigi3_wave_control_scope_vals[] = {
1396     {0, "Global"},
1397     {1, "Regional"},
1398     {2, "Entity"},
1399     {0, NULL},
1400 };
1401
1402 static const value_string cigi3_wave_control_breaker_type_vals[] = {
1403     {0, "Plunging"},
1404     {1, "Spilling"},
1405     {2, "Surging"},
1406     {0, NULL},
1407 };
1408
1409 /* CIGI3 Terrestrial Surface Conditions Control */
1410 #define CIGI3_PACKET_SIZE_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL 8
1411 static int hf_cigi3_terrestrial_surface_conditions_control = -1;
1412 static int hf_cigi3_terrestrial_surface_conditions_control_entity_region_id = -1;
1413 static int hf_cigi3_terrestrial_surface_conditions_control_surface_condition_id = -1;
1414 static int hf_cigi3_terrestrial_surface_conditions_control_surface_condition_enable = -1;
1415 static int hf_cigi3_terrestrial_surface_conditions_control_scope = -1;
1416 static int hf_cigi3_terrestrial_surface_conditions_control_severity = -1;
1417 static int hf_cigi3_terrestrial_surface_conditions_control_coverage = -1;
1418
1419 static const value_string cigi3_terrestrial_surface_conditions_control_scope_vals[] = {
1420     {0, "Global"},
1421     {1, "Regional"},
1422     {2, "Entity"},
1423     {0, NULL},
1424 };
1425
1426 /* CIGI3 View Control */
1427 #define CIGI3_PACKET_SIZE_VIEW_CONTROL 32
1428 static int hf_cigi3_view_control = -1;
1429 static int hf_cigi3_view_control_view_id = -1;
1430 static int hf_cigi3_view_control_group_id = -1;
1431 static int hf_cigi3_view_control_xoff_enable = -1;
1432 static int hf_cigi3_view_control_yoff_enable = -1;
1433 static int hf_cigi3_view_control_zoff_enable = -1;
1434 static int hf_cigi3_view_control_roll_enable = -1;
1435 static int hf_cigi3_view_control_pitch_enable = -1;
1436 static int hf_cigi3_view_control_yaw_enable = -1;
1437 static int hf_cigi3_view_control_entity_id = -1;
1438 static int hf_cigi3_view_control_xoff = -1;
1439 static int hf_cigi3_view_control_yoff = -1;
1440 static int hf_cigi3_view_control_zoff = -1;
1441 static int hf_cigi3_view_control_roll = -1;
1442 static int hf_cigi3_view_control_pitch = -1;
1443 static int hf_cigi3_view_control_yaw = -1;
1444
1445 /* CIGI3 Sensor Control */
1446 #define CIGI3_PACKET_SIZE_SENSOR_CONTROL 24
1447 static int hf_cigi3_sensor_control = -1;
1448 static int hf_cigi3_sensor_control_view_id = -1;
1449 static int hf_cigi3_sensor_control_sensor_id = -1;
1450 static int hf_cigi3_sensor_control_sensor_on_off = -1;
1451 static int hf_cigi3_sensor_control_polarity = -1;
1452 static int hf_cigi3_sensor_control_line_dropout_enable = -1;
1453 static int hf_cigi3_sensor_control_auto_gain = -1;
1454 static int hf_cigi3_sensor_control_track_white_black = -1;
1455 static int hf_cigi3_sensor_control_track_mode = -1;
1456 static int hf_cigi3_sensor_control_response_type = -1;
1457 static int hf_cigi3_sensor_control_gain = -1;
1458 static int hf_cigi3_sensor_control_level = -1;
1459 static int hf_cigi3_sensor_control_ac_coupling = -1;
1460 static int hf_cigi3_sensor_control_noise = -1;
1461
1462 static const value_string cigi3_sensor_control_track_mode_vals[] = {
1463     {0, "Off"},
1464     {1, "Force Correlate"},
1465     {2, "Scene"},
1466     {3, "Target"},
1467     {4, "Ship"},
1468     {5, "Defined by IG"},
1469     {6, "Defined by IG"},
1470     {7, "Defined by IG"},
1471     {0, NULL},
1472 };
1473
1474 static const true_false_string cigi3_sensor_control_polarity_tfs = {
1475     "Black hot",
1476     "White hot"
1477 };
1478
1479 static const true_false_string cigi3_sensor_control_track_white_black_tfs = {
1480     "Black",
1481     "White"
1482 };
1483
1484 static const true_false_string cigi3_sensor_control_response_type_tfs = {
1485     "Extended",
1486     "Normal"
1487 };
1488
1489 /* CIGI3 Motion Tracker Control */
1490 #define CIGI3_PACKET_SIZE_MOTION_TRACKER_CONTROL 8
1491 static int hf_cigi3_motion_tracker_control = -1;
1492 static int hf_cigi3_motion_tracker_control_view_group_id = -1;
1493 static int hf_cigi3_motion_tracker_control_tracker_id = -1;
1494 static int hf_cigi3_motion_tracker_control_tracker_enable = -1;
1495 static int hf_cigi3_motion_tracker_control_boresight_enable = -1;
1496 static int hf_cigi3_motion_tracker_control_x_enable = -1;
1497 static int hf_cigi3_motion_tracker_control_y_enable = -1;
1498 static int hf_cigi3_motion_tracker_control_z_enable = -1;
1499 static int hf_cigi3_motion_tracker_control_roll_enable = -1;
1500 static int hf_cigi3_motion_tracker_control_pitch_enable = -1;
1501 static int hf_cigi3_motion_tracker_control_yaw_enable = -1;
1502 static int hf_cigi3_motion_tracker_control_view_group_select = -1;
1503
1504 static const true_false_string cigi3_motion_tracker_control_view_group_select_tfs = {
1505     "View Group",
1506     "View"
1507 };
1508
1509 /* CIGI3 Earth Reference Model Definition */
1510 #define CIGI3_PACKET_SIZE_EARTH_REFERENCE_MODEL_DEFINITION 24
1511 static int hf_cigi3_earth_reference_model_definition = -1;
1512 static int hf_cigi3_earth_reference_model_definition_erm_enable = -1;
1513 static int hf_cigi3_earth_reference_model_definition_equatorial_radius = -1;
1514 static int hf_cigi3_earth_reference_model_definition_flattening = -1;
1515
1516 /* CIGI3 Trajectory Definition */
1517 #define CIGI3_PACKET_SIZE_TRAJECTORY_DEFINITION 24
1518 static int hf_cigi3_trajectory_definition = -1;
1519 static int hf_cigi3_trajectory_definition_entity_id = -1;
1520 static int hf_cigi3_trajectory_definition_acceleration_x = -1;
1521 static int hf_cigi3_trajectory_definition_acceleration_y = -1;
1522 static int hf_cigi3_trajectory_definition_acceleration_z = -1;
1523 static int hf_cigi3_trajectory_definition_retardation_rate = -1;
1524 static int hf_cigi3_trajectory_definition_terminal_velocity = -1;
1525
1526 /* CIGI3 View Definition */
1527 #define CIGI3_PACKET_SIZE_VIEW_DEFINITION 32
1528 static int hf_cigi3_view_definition = -1;
1529 static int hf_cigi3_view_definition_view_id = -1;
1530 static int hf_cigi3_view_definition_group_id = -1;
1531 static int hf_cigi3_view_definition_near_enable = -1;
1532 static int hf_cigi3_view_definition_far_enable = -1;
1533 static int hf_cigi3_view_definition_left_enable = -1;
1534 static int hf_cigi3_view_definition_right_enable = -1;
1535 static int hf_cigi3_view_definition_top_enable = -1;
1536 static int hf_cigi3_view_definition_bottom_enable = -1;
1537 static int hf_cigi3_view_definition_mirror_mode = -1;
1538 static int hf_cigi3_view_definition_pixel_replication = -1;
1539 static int hf_cigi3_view_definition_projection_type = -1;
1540 static int hf_cigi3_view_definition_reorder = -1;
1541 static int hf_cigi3_view_definition_view_type = -1;
1542 static int hf_cigi3_view_definition_near = -1;
1543 static int hf_cigi3_view_definition_far = -1;
1544 static int hf_cigi3_view_definition_left = -1;
1545 static int hf_cigi3_view_definition_right = -1;
1546 static int hf_cigi3_view_definition_top = -1;
1547 static int hf_cigi3_view_definition_bottom = -1;
1548
1549 static const value_string cigi3_view_definition_mirror_mode_vals[] = {
1550     {0, "None"},
1551     {1, "Horizontal"},
1552     {2, "Vertical"},
1553     {3, "Horizontal and Vertical"},
1554     {0, NULL},
1555 };
1556
1557 static const value_string cigi3_view_definition_pixel_replication_vals[] = {
1558     {0, "None"},
1559     {1, "1x2"},
1560     {2, "2x1"},
1561     {3, "2x2"},
1562     {4, "Defined by IG"},
1563     {5, "Defined by IG"},
1564     {6, "Defined by IG"},
1565     {7, "Defined by IG"},
1566     {0, NULL},
1567 };
1568
1569 static const true_false_string cigi3_view_definition_projection_type_tfs = {
1570     "Orthographic Parallel",
1571     "Perspective"
1572 };
1573
1574 static const true_false_string cigi3_view_definition_reorder_tfs = {
1575     "Bring to Top",
1576     "No Reorder"
1577 };
1578
1579 /* CIGI3 Collision Detection Segment Definition */
1580 #define CIGI3_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_DEFINITION 40
1581 static int hf_cigi3_collision_detection_segment_definition = -1;
1582 static int hf_cigi3_collision_detection_segment_definition_entity_id = -1;
1583 static int hf_cigi3_collision_detection_segment_definition_segment_id = -1;
1584 static int hf_cigi3_collision_detection_segment_definition_segment_enable = -1;
1585 static int hf_cigi3_collision_detection_segment_definition_x1 = -1;
1586 static int hf_cigi3_collision_detection_segment_definition_y1 = -1;
1587 static int hf_cigi3_collision_detection_segment_definition_z1 = -1;
1588 static int hf_cigi3_collision_detection_segment_definition_x2 = -1;
1589 static int hf_cigi3_collision_detection_segment_definition_y2 = -1;
1590 static int hf_cigi3_collision_detection_segment_definition_z2 = -1;
1591 static int hf_cigi3_collision_detection_segment_definition_material_mask = -1;
1592
1593 /* CIGI3 Collision Detection Volume Definition */
1594 #define CIGI3_PACKET_SIZE_COLLISION_DETECTION_VOLUME_DEFINITION 48
1595 static int hf_cigi3_collision_detection_volume_definition = -1;
1596 static int hf_cigi3_collision_detection_volume_definition_entity_id = -1;
1597 static int hf_cigi3_collision_detection_volume_definition_volume_id = -1;
1598 static int hf_cigi3_collision_detection_volume_definition_volume_enable = -1;
1599 static int hf_cigi3_collision_detection_volume_definition_volume_type = -1;
1600 static int hf_cigi3_collision_detection_volume_definition_x = -1;
1601 static int hf_cigi3_collision_detection_volume_definition_y = -1;
1602 static int hf_cigi3_collision_detection_volume_definition_z = -1;
1603 static int hf_cigi3_collision_detection_volume_definition_radius_height = -1;
1604 static int hf_cigi3_collision_detection_volume_definition_width = -1;
1605 static int hf_cigi3_collision_detection_volume_definition_depth = -1;
1606 static int hf_cigi3_collision_detection_volume_definition_roll = -1;
1607 static int hf_cigi3_collision_detection_volume_definition_pitch = -1;
1608 static int hf_cigi3_collision_detection_volume_definition_yaw = -1;
1609
1610 static const true_false_string cigi3_collision_detection_volume_definition_volume_type_tfs = {
1611     "Cuboid",
1612     "Sphere"
1613 };
1614
1615 /* CIGI3 HAT/HOT Request */
1616 #define CIGI3_PACKET_SIZE_HAT_HOT_REQUEST 32
1617 static int hf_cigi3_hat_hot_request = -1;
1618 static int hf_cigi3_hat_hot_request_hat_hot_id = -1;
1619 static int hf_cigi3_hat_hot_request_type = -1;
1620 static int hf_cigi3_hat_hot_request_coordinate_system = -1;
1621 static int hf_cigi3_hat_hot_request_entity_id = -1;
1622 static int hf_cigi3_hat_hot_request_lat_xoff = -1;
1623 static int hf_cigi3_hat_hot_request_lon_yoff = -1;
1624 static int hf_cigi3_hat_hot_request_alt_zoff = -1;
1625
1626 static const value_string cigi3_hat_hot_request_type_vals[] = {
1627     {0, "HAT"},
1628     {1, "HOT"},
1629     {2, "Extended"},
1630     {0, NULL},
1631 };
1632
1633 static const true_false_string cigi3_hat_hot_request_coordinate_system_tfs = {
1634     "Entity",
1635     "Geodetic"
1636 };
1637
1638 /* CIGI3_2 HAT/HOT Request */
1639 #define CIGI3_2_PACKET_SIZE_HAT_HOT_REQUEST 32
1640 static int hf_cigi3_2_hat_hot_request = -1;
1641 static int hf_cigi3_2_hat_hot_request_hat_hot_id = -1;
1642 static int hf_cigi3_2_hat_hot_request_type = -1;
1643 static int hf_cigi3_2_hat_hot_request_coordinate_system = -1;
1644 static int hf_cigi3_2_hat_hot_request_update_period = -1;
1645 static int hf_cigi3_2_hat_hot_request_entity_id = -1;
1646 static int hf_cigi3_2_hat_hot_request_lat_xoff = -1;
1647 static int hf_cigi3_2_hat_hot_request_lon_yoff = -1;
1648 static int hf_cigi3_2_hat_hot_request_alt_zoff = -1;
1649
1650 static const value_string cigi3_2_hat_hot_request_type_vals[] = {
1651     {0, "HAT"},
1652     {1, "HOT"},
1653     {2, "Extended"},
1654     {0, NULL},
1655 };
1656
1657 static const true_false_string cigi3_2_hat_hot_request_coordinate_system_tfs = {
1658     "Entity",
1659     "Geodetic"
1660 };
1661
1662 /* CIGI3 Line of Sight Segment Request */
1663 #define CIGI3_PACKET_SIZE_LINE_OF_SIGHT_SEGMENT_REQUEST 64
1664 static int hf_cigi3_line_of_sight_segment_request = -1;
1665 static int hf_cigi3_line_of_sight_segment_request_los_id = -1;
1666 static int hf_cigi3_line_of_sight_segment_request_type = -1;
1667 static int hf_cigi3_line_of_sight_segment_request_source_coord = -1;
1668 static int hf_cigi3_line_of_sight_segment_request_destination_coord = -1;
1669 static int hf_cigi3_line_of_sight_segment_request_response_coord = -1;
1670 static int hf_cigi3_line_of_sight_segment_request_alpha_threshold = -1;
1671 static int hf_cigi3_line_of_sight_segment_request_entity_id = -1;
1672 static int hf_cigi3_line_of_sight_segment_request_source_lat_xoff = -1;
1673 static int hf_cigi3_line_of_sight_segment_request_source_lon_yoff = -1;
1674 static int hf_cigi3_line_of_sight_segment_request_source_alt_zoff = -1;
1675 static int hf_cigi3_line_of_sight_segment_request_destination_lat_xoff = -1;
1676 static int hf_cigi3_line_of_sight_segment_request_destination_lon_yoff = -1;
1677 static int hf_cigi3_line_of_sight_segment_request_destination_alt_zoff = -1;
1678 static int hf_cigi3_line_of_sight_segment_request_material_mask = -1;
1679
1680 static const true_false_string cigi3_line_of_sight_segment_request_type_tfs = {
1681     "Extended",
1682     "Basic"
1683 };
1684
1685 static const true_false_string cigi3_line_of_sight_segment_request_coord_tfs = {
1686     "Entity",
1687     "Geodetic"
1688 };
1689
1690 /* CIGI3_2 Line of Sight Segment Request */
1691 #define CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_SEGMENT_REQUEST 64
1692 static int hf_cigi3_2_line_of_sight_segment_request = -1;
1693 static int hf_cigi3_2_line_of_sight_segment_request_los_id = -1;
1694 static int hf_cigi3_2_line_of_sight_segment_request_type = -1;
1695 static int hf_cigi3_2_line_of_sight_segment_request_source_coord = -1;
1696 static int hf_cigi3_2_line_of_sight_segment_request_destination_coord = -1;
1697 static int hf_cigi3_2_line_of_sight_segment_request_response_coord = -1;
1698 static int hf_cigi3_2_line_of_sight_segment_request_destination_entity_id_valid = -1;
1699 static int hf_cigi3_2_line_of_sight_segment_request_alpha_threshold = -1;
1700 static int hf_cigi3_2_line_of_sight_segment_request_entity_id = -1;
1701 static int hf_cigi3_2_line_of_sight_segment_request_source_lat_xoff = -1;
1702 static int hf_cigi3_2_line_of_sight_segment_request_source_lon_yoff = -1;
1703 static int hf_cigi3_2_line_of_sight_segment_request_source_alt_zoff = -1;
1704 static int hf_cigi3_2_line_of_sight_segment_request_destination_lat_xoff = -1;
1705 static int hf_cigi3_2_line_of_sight_segment_request_destination_lon_yoff = -1;
1706 static int hf_cigi3_2_line_of_sight_segment_request_destination_alt_zoff = -1;
1707 static int hf_cigi3_2_line_of_sight_segment_request_material_mask = -1;
1708 static int hf_cigi3_2_line_of_sight_segment_request_update_period = -1;
1709 static int hf_cigi3_2_line_of_sight_segment_request_destination_entity_id = -1;
1710
1711 static const true_false_string cigi3_2_line_of_sight_segment_request_type_tfs = {
1712     "Extended",
1713     "Basic"
1714 };
1715
1716 static const true_false_string cigi3_2_line_of_sight_segment_request_coord_tfs = {
1717     "Entity",
1718     "Geodetic"
1719 };
1720
1721 /* CIGI3 Line of Sight Vector Request */
1722 #define CIGI3_PACKET_SIZE_LINE_OF_SIGHT_VECTOR_REQUEST 56
1723 static int hf_cigi3_line_of_sight_vector_request = -1;
1724 static int hf_cigi3_line_of_sight_vector_request_los_id = -1;
1725 static int hf_cigi3_line_of_sight_vector_request_type = -1;
1726 static int hf_cigi3_line_of_sight_vector_request_source_coord = -1;
1727 static int hf_cigi3_line_of_sight_vector_request_response_coord = -1;
1728 static int hf_cigi3_line_of_sight_vector_request_alpha = -1;
1729 static int hf_cigi3_line_of_sight_vector_request_entity_id = -1;
1730 static int hf_cigi3_line_of_sight_vector_request_azimuth = -1;
1731 static int hf_cigi3_line_of_sight_vector_request_elevation = -1;
1732 static int hf_cigi3_line_of_sight_vector_request_min_range = -1;
1733 static int hf_cigi3_line_of_sight_vector_request_max_range = -1;
1734 static int hf_cigi3_line_of_sight_vector_request_source_lat_xoff = -1;
1735 static int hf_cigi3_line_of_sight_vector_request_source_lon_yoff = -1;
1736 static int hf_cigi3_line_of_sight_vector_request_source_alt_zoff = -1;
1737 static int hf_cigi3_line_of_sight_vector_request_material_mask = -1;
1738
1739 static const true_false_string cigi3_line_of_sight_vector_request_type_tfs = {
1740     "Extended",
1741     "Basic"
1742 };
1743
1744 static const true_false_string cigi3_line_of_sight_vector_request_coord_tfs = {
1745     "Entity",
1746     "Geodetic"
1747 };
1748
1749 /* CIGI3_2 Line of Sight Vector Request */
1750 #define CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_VECTOR_REQUEST 56
1751 static int hf_cigi3_2_line_of_sight_vector_request = -1;
1752 static int hf_cigi3_2_line_of_sight_vector_request_los_id = -1;
1753 static int hf_cigi3_2_line_of_sight_vector_request_type = -1;
1754 static int hf_cigi3_2_line_of_sight_vector_request_source_coord = -1;
1755 static int hf_cigi3_2_line_of_sight_vector_request_response_coord = -1;
1756 static int hf_cigi3_2_line_of_sight_vector_request_alpha = -1;
1757 static int hf_cigi3_2_line_of_sight_vector_request_entity_id = -1;
1758 static int hf_cigi3_2_line_of_sight_vector_request_azimuth = -1;
1759 static int hf_cigi3_2_line_of_sight_vector_request_elevation = -1;
1760 static int hf_cigi3_2_line_of_sight_vector_request_min_range = -1;
1761 static int hf_cigi3_2_line_of_sight_vector_request_max_range = -1;
1762 static int hf_cigi3_2_line_of_sight_vector_request_source_lat_xoff = -1;
1763 static int hf_cigi3_2_line_of_sight_vector_request_source_lon_yoff = -1;
1764 static int hf_cigi3_2_line_of_sight_vector_request_source_alt_zoff = -1;
1765 static int hf_cigi3_2_line_of_sight_vector_request_material_mask = -1;
1766 static int hf_cigi3_2_line_of_sight_vector_request_update_period = -1;
1767
1768 static const true_false_string cigi3_2_line_of_sight_vector_request_type_tfs = {
1769     "Extended",
1770     "Basic"
1771 };
1772
1773 static const true_false_string cigi3_2_line_of_sight_vector_request_coord_tfs = {
1774     "Entity",
1775     "Geodetic"
1776 };
1777
1778 /* CIGI3 Position Request */
1779 #define CIGI3_PACKET_SIZE_POSITION_REQUEST 8
1780 static int hf_cigi3_position_request = -1;
1781 static int hf_cigi3_position_request_object_id = -1;
1782 static int hf_cigi3_position_request_part_id = -1;
1783 static int hf_cigi3_position_request_update_mode = -1;
1784 static int hf_cigi3_position_request_object_class = -1;
1785 static int hf_cigi3_position_request_coord_system = -1;
1786
1787 static const true_false_string cigi3_position_request_update_mode_tfs = {
1788     "Continuous",
1789     "One-Shot"
1790 };
1791
1792 static const value_string cigi3_position_request_object_class_vals[] = {
1793     {0, "Entity"},
1794     {1, "Articulated Part"},
1795     {2, "View"},
1796     {3, "View Group"},
1797     {4, "Motion Tracker"},
1798     {0, NULL},
1799 };
1800
1801 static const value_string cigi3_position_request_coord_system_vals[] = {
1802     {0, "Geodetic"},
1803     {1, "Parent Entity"},
1804     {2, "Submodel"},
1805     {0, NULL},
1806 };
1807
1808 /* CIGI3 Environmental Conditions Request */
1809 #define CIGI3_PACKET_SIZE_ENVIRONMENTAL_CONDITIONS_REQUEST 32
1810 static int hf_cigi3_environmental_conditions_request = -1;
1811 static int hf_cigi3_environmental_conditions_request_type = -1;
1812 static int hf_cigi3_environmental_conditions_request_id = -1;
1813 static int hf_cigi3_environmental_conditions_request_lat = -1;
1814 static int hf_cigi3_environmental_conditions_request_lon = -1;
1815 static int hf_cigi3_environmental_conditions_request_alt = -1;
1816
1817 static const value_string cigi3_environmental_conditions_request_type_vals[] = {
1818     {1, "Maritime Surface Conditions"},
1819     {2, "Terrestrial Surface Conditions"},
1820     {3, "Maritime+Terrestrial Surface Conditions"},
1821     {4, "Weather Conditions"},
1822     {5, "Maritime+Weather Surface Conditions"},
1823     {6, "Terrestrial+Weather Surface Conditions"},
1824     {7, "Maritime+Terrestrial+Weather Surface Conditions"},
1825     {8, "Aerosol Concentrations"},
1826     {9, "Maritime Surface Conditions+Aerosol Concentrations"},
1827     {10, "Terrestrial Surface Conditions+Aerosol Concentrations"},
1828     {11, "Maritime+Terrestrial Surface Conditions+Aerosol Concentrations"},
1829     {12, "Weather Conditions+Aerosol Concentrations"},
1830     {13, "Maritime+Weather Surface Conditions+Aerosol Concentrations"},
1831     {14, "Terrestrial+Weather Surface Conditions+Aerosol Concentrations"},
1832     {15, "Maritime+Terrestrial+Weather Surface Conditions+Aerosol Concentrations"},
1833     {0, NULL},
1834 };
1835
1836 /* CIGI3_3 Symbol Surface Definition */
1837 #define CIGI3_PACKET_SIZE_SYMBOL_SURFACE_DEFINITION 56
1838 static int hf_cigi3_3_symbol_surface_definition = -1;
1839 static int hf_cigi3_3_symbol_surface_definition_surface_id = -1;
1840 static int hf_cigi3_3_symbol_surface_definition_surface_state = -1;
1841 static int hf_cigi3_3_symbol_surface_definition_attach_type = -1;
1842 static int hf_cigi3_3_symbol_surface_definition_billboard = -1;
1843 static int hf_cigi3_3_symbol_surface_definition_perspective_growth_enable = -1;
1844 static int hf_cigi3_3_symbol_surface_definition_entity_view_id = -1;
1845 static int hf_cigi3_3_symbol_surface_definition_xoff_left = -1;
1846 static int hf_cigi3_3_symbol_surface_definition_yoff_right = -1;
1847 static int hf_cigi3_3_symbol_surface_definition_zoff_top = -1;
1848 static int hf_cigi3_3_symbol_surface_definition_yaw_bottom = -1;
1849 static int hf_cigi3_3_symbol_surface_definition_pitch = -1;
1850 static int hf_cigi3_3_symbol_surface_definition_roll = -1;
1851 static int hf_cigi3_3_symbol_surface_definition_width = -1;
1852 static int hf_cigi3_3_symbol_surface_definition_height = -1;
1853 static int hf_cigi3_3_symbol_surface_definition_min_u = -1;
1854 static int hf_cigi3_3_symbol_surface_definition_max_u = -1;
1855 static int hf_cigi3_3_symbol_surface_definition_min_v = -1;
1856 static int hf_cigi3_3_symbol_surface_definition_max_v = -1;
1857
1858 static const true_false_string cigi3_3_symbol_surface_definition_surface_state_tfs = {
1859     "Destroyed",
1860     "Active"
1861 };
1862
1863 static const true_false_string cigi3_3_symbol_surface_definition_attach_type_tfs = {
1864     "View",
1865     "Entity"
1866 };
1867
1868 static const true_false_string cigi3_3_symbol_surface_definition_billboard_tfs = {
1869     "Billboard",
1870     "Non-Billboard"
1871 };
1872
1873 /* CIGI3_3 Symbol Text Definition */
1874 #define CIGI3_PACKET_SIZE_SYMBOL_TEXT_DEFINITION 56
1875 static int hf_cigi3_3_symbol_text_definition = -1;
1876 static int hf_cigi3_3_symbol_text_definition_symbol_id = -1;
1877 static int hf_cigi3_3_symbol_text_definition_orientation = -1;
1878 static int hf_cigi3_3_symbol_text_definition_alignment = -1;
1879 static int hf_cigi3_3_symbol_text_definition_font_ident = -1;
1880 static int hf_cigi3_3_symbol_text_definition_font_size = -1;
1881 static int hf_cigi3_3_symbol_text_definition_text = -1;
1882
1883 static const value_string cigi3_3_symbol_text_definition_alignment_vals[] = {
1884     {0, "Top Left"},
1885     {1, "Top Center"},
1886     {2, "Top Right"},
1887     {3, "Center Left"},
1888     {4, "Center"},
1889     {5, "Center Right"},
1890     {6, "Bottom Left"},
1891     {7, "Bottom Center"},
1892     {8, "Bottom Right"},
1893     {0, NULL}
1894 };
1895
1896 static const value_string cigi3_3_symbol_text_definition_orientation_vals[] = {
1897     {0, "Left To Right"},
1898     {1, "Top To Bottom"},
1899     {2, "Right To Left"},
1900     {3, "Bottom To Top"},
1901     {0, NULL}
1902 };
1903
1904 static const value_string cigi3_3_symbol_text_definition_font_ident_vals[] = {
1905     {0, "IG Default"},
1906     {1, "Proportional Sans Serif"},
1907     {2, "Proportional Sans Serif Bold"},
1908     {3, "Proportional Sans Serif Italic"},
1909     {4, "Proportional Sans Serif Bold Italic"},
1910     {5, "Proportional Serif"},
1911     {6, "Proportional Serif Bold"},
1912     {7, "Proportional Serif Italic"},
1913     {8, "Proportional Serif Bold Italic"},
1914     {9, "Monospace Sans Serif"},
1915     {10, "Monospace Sans Serif Bold"},
1916     {11, "Monospace Sans Serif Italic"},
1917     {12, "Monospace Sans Serif Bold Italic"},
1918     {13, "Monospace Serif"},
1919     {14, "Monospace Serif Bold"},
1920     {15, "Monospace Serif Italic"},
1921     {16, "Monospace Serif Bold Italic"},
1922     {0, NULL}
1923 };
1924
1925 /* CIGI3_3 Symbol Circle Definition */
1926 #define CIGI3_PACKET_SIZE_SYMBOL_CIRCLE_DEFINITION 56
1927 static int hf_cigi3_3_symbol_circle_definition = -1;
1928 static int hf_cigi3_3_symbol_circle_definition_symbol_id = -1;
1929 static int hf_cigi3_3_symbol_circle_definition_drawing_style = -1;
1930 static int hf_cigi3_3_symbol_circle_definition_stipple_pattern = -1;
1931 static int hf_cigi3_3_symbol_circle_definition_line_width = -1;
1932 static int hf_cigi3_3_symbol_circle_definition_stipple_pattern_length = -1;
1933 static int hf_cigi3_3_symbol_circle_definition_center_u[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1};
1934 static int hf_cigi3_3_symbol_circle_definition_center_v[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1};
1935 static int hf_cigi3_3_symbol_circle_definition_radius[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1};
1936 static int hf_cigi3_3_symbol_circle_definition_inner_radius[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1};
1937 static int hf_cigi3_3_symbol_circle_definition_start_angle[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1};
1938 static int hf_cigi3_3_symbol_circle_definition_end_angle[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1};
1939
1940 static const true_false_string cigi3_3_symbol_circle_definition_drawing_style_tfs = {
1941     "Fill",
1942     "Line"
1943 };
1944
1945 /* CIGI3_3 Symbol Line Definition */
1946 #define CIGI3_PACKET_SIZE_SYMBOL_LINE_DEFINITION 56
1947 static int hf_cigi3_3_symbol_line_definition = -1;
1948 static int hf_cigi3_3_symbol_line_definition_symbol_id = -1;
1949 static int hf_cigi3_3_symbol_line_definition_primitive_type = -1;
1950 static int hf_cigi3_3_symbol_line_definition_stipple_pattern = -1;
1951 static int hf_cigi3_3_symbol_line_definition_line_width = -1;
1952 static int hf_cigi3_3_symbol_line_definition_stipple_pattern_length = -1;
1953 static int hf_cigi3_3_symbol_line_definition_vertex_u[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
1954 static int hf_cigi3_3_symbol_line_definition_vertex_v[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
1955
1956 static const value_string cigi3_3_symbol_line_definition_primitive_type_vals[] = {
1957     {0, "Point"},
1958     {1, "Line"},
1959     {2, "Line Strip"},
1960     {3, "Line Loop"},
1961     {4, "Triangle"},
1962     {5, "Triangle Strip"},
1963     {6, "Triangle Fan"},
1964     {0, NULL}
1965 };
1966
1967 /* CIGI3_3 Symbol Clone */
1968 #define CIGI3_PACKET_SIZE_SYMBOL_CLONE_DEFINITION 8
1969 static int hf_cigi3_3_symbol_clone = -1;
1970 static int hf_cigi3_3_symbol_clone_symbol_id = -1;
1971 static int hf_cigi3_3_symbol_clone_source_type = -1;
1972 static int hf_cigi3_3_symbol_clone_source_id = -1;
1973
1974 static const true_false_string cigi3_3_symbol_clone_source_type_tfs = {
1975     "Symbol Template",
1976     "Symbol"
1977 };
1978
1979 /* CIGI3_3 Symbol Control */
1980 #define CIGI3_PACKET_SIZE_SYMBOL_CONTROL_DEFINITION 40
1981 static int hf_cigi3_3_symbol_control = -1;
1982 static int hf_cigi3_3_symbol_control_symbol_id = -1;
1983 static int hf_cigi3_3_symbol_control_symbol_state = -1;
1984 static int hf_cigi3_3_symbol_control_attach_state = -1;
1985 static int hf_cigi3_3_symbol_control_flash_control = -1;
1986 static int hf_cigi3_3_symbol_control_inherit_color = -1;
1987 static int hf_cigi3_3_symbol_control_parent_symbol_ident = -1;
1988 static int hf_cigi3_3_symbol_control_surface_ident = -1;
1989 static int hf_cigi3_3_symbol_control_layer = -1;
1990 static int hf_cigi3_3_symbol_control_flash_duty_cycle = -1;
1991 static int hf_cigi3_3_symbol_control_flash_period = -1;
1992 static int hf_cigi3_3_symbol_control_position_u = -1;
1993 static int hf_cigi3_3_symbol_control_position_v = -1;
1994 static int hf_cigi3_3_symbol_control_rotation = -1;
1995 static int hf_cigi3_3_symbol_control_red = -1;
1996 static int hf_cigi3_3_symbol_control_green = -1;
1997 static int hf_cigi3_3_symbol_control_blue = -1;
1998 static int hf_cigi3_3_symbol_control_alpha = -1;
1999 static int hf_cigi3_3_symbol_control_scale_u = -1;
2000 static int hf_cigi3_3_symbol_control_scale_v = -1;
2001
2002 static const value_string cigi3_3_symbol_control_symbol_state_vals[] = {
2003     {0, "Hidden"},
2004     {1, "Visible"},
2005     {2, "Destroyed"},
2006     {0, NULL}
2007 };
2008
2009 static const true_false_string cigi3_3_symbol_control_attach_state_tfs = {
2010     "Attach",
2011     "Detach"
2012 };
2013
2014 static const true_false_string cigi3_3_symbol_control_flash_control_tfs = {
2015     "Reset",
2016     "Continue"
2017 };
2018
2019 static const true_false_string cigi3_3_symbol_control_inherit_color_tfs = {
2020     "Inherited",
2021     "Not Inherited"
2022 };
2023
2024 /* CIGI3_3 Short Symbol Control */
2025 #define CIGI3_PACKET_SIZE_SHORT_SYMBOL_CONTROL_DEFINITION 32
2026 static int hf_cigi3_3_short_symbol_control = -1;
2027 static int hf_cigi3_3_short_symbol_control_symbol_id = -1;
2028 static int hf_cigi3_3_short_symbol_control_inherit_color = -1;
2029 static int hf_cigi3_3_short_symbol_control_flash_control = -1;
2030 static int hf_cigi3_3_short_symbol_control_attach_state = -1;
2031 static int hf_cigi3_3_short_symbol_control_symbol_state = -1;
2032 static int hf_cigi3_3_short_symbol_control_attribute_select1 = -1;
2033 static int hf_cigi3_3_short_symbol_control_attribute_select2 = -1;
2034 static int hf_cigi3_3_short_symbol_control_attribute_value1 = -1;
2035 static int hf_cigi3_3_short_symbol_control_attribute_value2 = -1;
2036 static int hf_cigi3_3_short_symbol_control_attribute_value1f = -1;
2037 static int hf_cigi3_3_short_symbol_control_attribute_value2f = -1;
2038 static int hf_cigi3_3_short_symbol_control_red1 = -1;
2039 static int hf_cigi3_3_short_symbol_control_green1 = -1;
2040 static int hf_cigi3_3_short_symbol_control_blue1 = -1;
2041 static int hf_cigi3_3_short_symbol_control_alpha1 = -1;
2042 static int hf_cigi3_3_short_symbol_control_red2 = -1;
2043 static int hf_cigi3_3_short_symbol_control_green2 = -1;
2044 static int hf_cigi3_3_short_symbol_control_blue2 = -1;
2045 static int hf_cigi3_3_short_symbol_control_alpha2 = -1;
2046
2047 static const value_string cigi3_3_short_symbol_control_attribute_select_vals[] = {
2048     {0, "None"},
2049     {1, "Surface ID"},
2050     {2, "Parent Symbol ID"},
2051     {3, "Layer"},
2052     {4, "Flash Duty Cycle Percentage"},
2053     {5, "Flash Period"},
2054     {6, "Position U"},
2055     {7, "Position V"},
2056     {8, "Rotation"},
2057     {9, "Color"},
2058     {10,"Scale U"},
2059     {11,"Scale V"},
2060     {0, NULL}
2061 };
2062
2063 /* CIGI3 Start of Frame */
2064 #define CIGI3_PACKET_SIZE_START_OF_FRAME 16
2065 static int hf_cigi3_start_of_frame = -1;
2066 static int hf_cigi3_start_of_frame_db_number = -1;
2067 static int hf_cigi3_start_of_frame_ig_status = -1;
2068 static int hf_cigi3_start_of_frame_ig_mode = -1;
2069 static int hf_cigi3_start_of_frame_timestamp_valid = -1;
2070 static int hf_cigi3_start_of_frame_earth_reference_model = -1;
2071 static int hf_cigi3_start_of_frame_frame_ctr = -1;
2072 static int hf_cigi3_start_of_frame_timestamp = -1;
2073
2074 static const value_string cigi3_start_of_frame_ig_mode_vals[] = {
2075     {0, "Reset/Standby"},
2076     {1, "Operate"},
2077     {2, "Debug"},
2078     {3, "Offline Maintenance"},
2079     {0, NULL},
2080 };
2081
2082 static const true_false_string cigi3_start_of_frame_earth_reference_model_tfs = {
2083     "Host-Defined",
2084     "WGS 84"
2085 };
2086
2087 /* CIGI3_2 Start of Frame */
2088 #define CIGI3_2_PACKET_SIZE_START_OF_FRAME 24
2089 static int hf_cigi3_2_start_of_frame = -1;
2090 static int hf_cigi3_2_start_of_frame_db_number = -1;
2091 static int hf_cigi3_2_start_of_frame_ig_status = -1;
2092 static int hf_cigi3_2_start_of_frame_ig_mode = -1;
2093 static int hf_cigi3_2_start_of_frame_timestamp_valid = -1;
2094 static int hf_cigi3_2_start_of_frame_earth_reference_model = -1;
2095 static int hf_cigi3_2_start_of_frame_ig_frame_number = -1;
2096 static int hf_cigi3_2_start_of_frame_timestamp = -1;
2097 static int hf_cigi3_2_start_of_frame_last_host_frame_number = -1;
2098
2099 static const value_string cigi3_2_start_of_frame_ig_mode_vals[] = {
2100     {0, "Reset/Standby"},
2101     {1, "Operate"},
2102     {2, "Debug"},
2103     {3, "Offline Maintenance"},
2104     {0, NULL},
2105 };
2106
2107 static const true_false_string cigi3_2_start_of_frame_earth_reference_model_tfs = {
2108     "Host-Defined",
2109     "WGS 84"
2110 };
2111
2112 /* CIGI3 HAT/HOT Response */
2113 #define CIGI3_PACKET_SIZE_HAT_HOT_RESPONSE 16
2114 static int hf_cigi3_hat_hot_response = -1;
2115 static int hf_cigi3_hat_hot_response_hat_hot_id = -1;
2116 static int hf_cigi3_hat_hot_response_valid = -1;
2117 static int hf_cigi3_hat_hot_response_type = -1;
2118 static int hf_cigi3_hat_hot_response_height = -1;
2119
2120 static const true_false_string cigi3_hat_hot_response_type_tfs = {
2121     "HOT",
2122     "HAT"
2123 };
2124
2125 /* CIGI3_2 HAT/HOT Response */
2126 #define CIGI3_2_PACKET_SIZE_HAT_HOT_RESPONSE 16
2127 static int hf_cigi3_2_hat_hot_response = -1;
2128 static int hf_cigi3_2_hat_hot_response_hat_hot_id = -1;
2129 static int hf_cigi3_2_hat_hot_response_valid = -1;
2130 static int hf_cigi3_2_hat_hot_response_type = -1;
2131 static int hf_cigi3_2_hat_hot_response_host_frame_number_lsn = -1;
2132 static int hf_cigi3_2_hat_hot_response_height = -1;
2133
2134 static const true_false_string cigi3_2_hat_hot_response_type_tfs = {
2135     "HOT",
2136     "HAT"
2137 };
2138
2139 /* CIGI3 HAT/HOT Extended Response */
2140 #define CIGI3_PACKET_SIZE_HAT_HOT_EXTENDED_RESPONSE 40
2141 static int hf_cigi3_hat_hot_extended_response = -1;
2142 static int hf_cigi3_hat_hot_extended_response_hat_hot_id = -1;
2143 static int hf_cigi3_hat_hot_extended_response_valid = -1;
2144 static int hf_cigi3_hat_hot_extended_response_hat = -1;
2145 static int hf_cigi3_hat_hot_extended_response_hot = -1;
2146 static int hf_cigi3_hat_hot_extended_response_material_code = -1;
2147 static int hf_cigi3_hat_hot_extended_response_normal_vector_azimuth = -1;
2148 static int hf_cigi3_hat_hot_extended_response_normal_vector_elevation = -1;
2149
2150 /* CIGI3_2 HAT/HOT Extended Response */
2151 #define CIGI3_2_PACKET_SIZE_HAT_HOT_EXTENDED_RESPONSE 40
2152 static int hf_cigi3_2_hat_hot_extended_response = -1;
2153 static int hf_cigi3_2_hat_hot_extended_response_hat_hot_id = -1;
2154 static int hf_cigi3_2_hat_hot_extended_response_valid = -1;
2155 static int hf_cigi3_2_hat_hot_extended_response_host_frame_number_lsn = -1;
2156 static int hf_cigi3_2_hat_hot_extended_response_hat = -1;
2157 static int hf_cigi3_2_hat_hot_extended_response_hot = -1;
2158 static int hf_cigi3_2_hat_hot_extended_response_material_code = -1;
2159 static int hf_cigi3_2_hat_hot_extended_response_normal_vector_azimuth = -1;
2160 static int hf_cigi3_2_hat_hot_extended_response_normal_vector_elevation = -1;
2161
2162 /* CIGI3 Line of Sight Response */
2163 #define CIGI3_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE 16
2164 static int hf_cigi3_line_of_sight_response = -1;
2165 static int hf_cigi3_line_of_sight_response_los_id = -1;
2166 static int hf_cigi3_line_of_sight_response_valid = -1;
2167 static int hf_cigi3_line_of_sight_response_entity_id_valid = -1;
2168 static int hf_cigi3_line_of_sight_response_visible = -1;
2169 static int hf_cigi3_line_of_sight_response_count = -1;
2170 static int hf_cigi3_line_of_sight_response_entity_id = -1;
2171 static int hf_cigi3_line_of_sight_response_range = -1;
2172
2173 static const true_false_string cigi3_line_of_sight_response_visible_tfs = {
2174     "Visible",
2175     "Occluded"
2176 };
2177
2178 /* CIGI3_2 Line of Sight Response */
2179 #define CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE 16
2180 static int hf_cigi3_2_line_of_sight_response = -1;
2181 static int hf_cigi3_2_line_of_sight_response_los_id = -1;
2182 static int hf_cigi3_2_line_of_sight_response_valid = -1;
2183 static int hf_cigi3_2_line_of_sight_response_entity_id_valid = -1;
2184 static int hf_cigi3_2_line_of_sight_response_visible = -1;
2185 static int hf_cigi3_2_line_of_sight_response_host_frame_number_lsn = -1;
2186 static int hf_cigi3_2_line_of_sight_response_count = -1;
2187 static int hf_cigi3_2_line_of_sight_response_entity_id = -1;
2188 static int hf_cigi3_2_line_of_sight_response_range = -1;
2189
2190 static const true_false_string cigi3_2_line_of_sight_response_visible_tfs = {
2191     "Visible",
2192     "Occluded"
2193 };
2194
2195 /* CIGI3 Line of Sight Extended Response */
2196 #define CIGI3_PACKET_SIZE_LINE_OF_SIGHT_EXTENDED_RESPONSE 56
2197 static int hf_cigi3_line_of_sight_extended_response = -1;
2198 static int hf_cigi3_line_of_sight_extended_response_los_id = -1;
2199 static int hf_cigi3_line_of_sight_extended_response_valid = -1;
2200 static int hf_cigi3_line_of_sight_extended_response_entity_id_valid = -1;
2201 static int hf_cigi3_line_of_sight_extended_response_range_valid = -1;
2202 static int hf_cigi3_line_of_sight_extended_response_visible = -1;
2203 static int hf_cigi3_line_of_sight_extended_response_intersection_coord = -1;
2204 static int hf_cigi3_line_of_sight_extended_response_response_count = -1;
2205 static int hf_cigi3_line_of_sight_extended_response_entity_id = -1;
2206 static int hf_cigi3_line_of_sight_extended_response_range = -1;
2207 static int hf_cigi3_line_of_sight_extended_response_lat_xoff = -1;
2208 static int hf_cigi3_line_of_sight_extended_response_lon_yoff = -1;
2209 static int hf_cigi3_line_of_sight_extended_response_alt_zoff = -1;
2210 static int hf_cigi3_line_of_sight_extended_response_red = -1;
2211 static int hf_cigi3_line_of_sight_extended_response_green = -1;
2212 static int hf_cigi3_line_of_sight_extended_response_blue = -1;
2213 static int hf_cigi3_line_of_sight_extended_response_alpha = -1;
2214 static int hf_cigi3_line_of_sight_extended_response_material_code = -1;
2215 static int hf_cigi3_line_of_sight_extended_response_normal_vector_azimuth = -1;
2216 static int hf_cigi3_line_of_sight_extended_response_normal_vector_elevation = -1;
2217
2218 static const true_false_string cigi3_line_of_sight_extended_response_visible_tfs = {
2219     "Visible",
2220     "Occluded"
2221 };
2222
2223 static const true_false_string cigi3_line_of_sight_extended_response_intersection_coord_tfs = {
2224     "Entity",
2225     "Geodetic"
2226 };
2227
2228 /* CIGI3_2 Line of Sight Extended Response */
2229 #define CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_EXTENDED_RESPONSE 56
2230 static int hf_cigi3_2_line_of_sight_extended_response = -1;
2231 static int hf_cigi3_2_line_of_sight_extended_response_los_id = -1;
2232 static int hf_cigi3_2_line_of_sight_extended_response_valid = -1;
2233 static int hf_cigi3_2_line_of_sight_extended_response_entity_id_valid = -1;
2234 static int hf_cigi3_2_line_of_sight_extended_response_range_valid = -1;
2235 static int hf_cigi3_2_line_of_sight_extended_response_visible = -1;
2236 static int hf_cigi3_2_line_of_sight_extended_response_host_frame_number_lsn = -1;
2237 static int hf_cigi3_2_line_of_sight_extended_response_response_count = -1;
2238 static int hf_cigi3_2_line_of_sight_extended_response_entity_id = -1;
2239 static int hf_cigi3_2_line_of_sight_extended_response_range = -1;
2240 static int hf_cigi3_2_line_of_sight_extended_response_lat_xoff = -1;
2241 static int hf_cigi3_2_line_of_sight_extended_response_lon_yoff = -1;
2242 static int hf_cigi3_2_line_of_sight_extended_response_alt_zoff = -1;
2243 static int hf_cigi3_2_line_of_sight_extended_response_red = -1;
2244 static int hf_cigi3_2_line_of_sight_extended_response_green = -1;
2245 static int hf_cigi3_2_line_of_sight_extended_response_blue = -1;
2246 static int hf_cigi3_2_line_of_sight_extended_response_alpha = -1;
2247 static int hf_cigi3_2_line_of_sight_extended_response_material_code = -1;
2248 static int hf_cigi3_2_line_of_sight_extended_response_normal_vector_azimuth = -1;
2249 static int hf_cigi3_2_line_of_sight_extended_response_normal_vector_elevation = -1;
2250
2251 static const true_false_string cigi3_2_line_of_sight_extended_response_visible_tfs = {
2252     "Visible",
2253     "Occluded"
2254 };
2255
2256 /* CIGI3 Sensor Response */
2257 #define CIGI3_PACKET_SIZE_SENSOR_RESPONSE 24
2258 static int hf_cigi3_sensor_response = -1;
2259 static int hf_cigi3_sensor_response_view_id = -1;
2260 static int hf_cigi3_sensor_response_sensor_id = -1;
2261 static int hf_cigi3_sensor_response_sensor_status = -1;
2262 static int hf_cigi3_sensor_response_gate_x_size = -1;
2263 static int hf_cigi3_sensor_response_gate_y_size = -1;
2264 static int hf_cigi3_sensor_response_gate_x_pos = -1;
2265 static int hf_cigi3_sensor_response_gate_y_pos = -1;
2266 static int hf_cigi3_sensor_response_frame_ctr = -1;
2267
2268 static const value_string cigi3_sensor_response_sensor_status_vals[] = {
2269     {0, "Searching for target"},
2270     {1, "Tracking target"},
2271     {2, "Impending breaklock"},
2272     {3, "Breaklock"},
2273     {0, NULL},
2274 };
2275
2276 /* CIGI3 Sensor Extended Response */
2277 #define CIGI3_PACKET_SIZE_SENSOR_EXTENDED_RESPONSE 48
2278 static int hf_cigi3_sensor_extended_response = -1;
2279 static int hf_cigi3_sensor_extended_response_view_id = -1;
2280 static int hf_cigi3_sensor_extended_response_sensor_id = -1;
2281 static int hf_cigi3_sensor_extended_response_sensor_status = -1;
2282 static int hf_cigi3_sensor_extended_response_entity_id_valid = -1;
2283 static int hf_cigi3_sensor_extended_response_entity_id = -1;
2284 static int hf_cigi3_sensor_extended_response_gate_x_size = -1;
2285 static int hf_cigi3_sensor_extended_response_gate_y_size = -1;
2286 static int hf_cigi3_sensor_extended_response_gate_x_pos = -1;
2287 static int hf_cigi3_sensor_extended_response_gate_y_pos = -1;
2288 static int hf_cigi3_sensor_extended_response_frame_ctr = -1;
2289 static int hf_cigi3_sensor_extended_response_track_lat = -1;
2290 static int hf_cigi3_sensor_extended_response_track_lon = -1;
2291 static int hf_cigi3_sensor_extended_response_track_alt = -1;
2292
2293 static const value_string cigi3_sensor_extended_response_sensor_status_vals[] = {
2294     {0, "Searching for target"},
2295     {1, "Tracking target"},
2296     {2, "Impending breaklock"},
2297     {3, "Breaklock"},
2298     {0, NULL},
2299 };
2300
2301 /* CIGI3 Position Response */
2302 #define CIGI3_PACKET_SIZE_POSITION_RESPONSE 48
2303 static int hf_cigi3_position_response = -1;
2304 static int hf_cigi3_position_response_object_id = -1;
2305 static int hf_cigi3_position_response_part_id = -1;
2306 static int hf_cigi3_position_response_object_class = -1;
2307 static int hf_cigi3_position_response_coord_system = -1;
2308 static int hf_cigi3_position_response_lat_xoff = -1;
2309 static int hf_cigi3_position_response_lon_yoff = -1;
2310 static int hf_cigi3_position_response_alt_zoff = -1;
2311 static int hf_cigi3_position_response_roll = -1;
2312 static int hf_cigi3_position_response_pitch = -1;
2313 static int hf_cigi3_position_response_yaw = -1;
2314
2315 static const value_string cigi3_position_response_object_class_vals[] = {
2316     {0, "Entity"},
2317     {1, "Articulated Part"},
2318     {2, "View"},
2319     {3, "View Group"},
2320     {4, "Motion Tracker"},
2321     {0, NULL},
2322 };
2323
2324 static const value_string cigi3_position_response_coord_system_vals[] = {
2325     {0, "Geodetic"},
2326     {1, "Parent Entity"},
2327     {2, "Submodel"},
2328     {0, NULL},
2329 };
2330
2331 /* CIGI3 Weather Conditions Response */
2332 #define CIGI3_PACKET_SIZE_WEATHER_CONDITIONS_RESPONSE 32
2333 static int hf_cigi3_weather_conditions_response = -1;
2334 static int hf_cigi3_weather_conditions_response_request_id = -1;
2335 static int hf_cigi3_weather_conditions_response_humidity = -1;
2336 static int hf_cigi3_weather_conditions_response_air_temp = -1;
2337 static int hf_cigi3_weather_conditions_response_visibility_range = -1;
2338 static int hf_cigi3_weather_conditions_response_horiz_speed = -1;
2339 static int hf_cigi3_weather_conditions_response_vert_speed = -1;
2340 static int hf_cigi3_weather_conditions_response_wind_direction = -1;
2341 static int hf_cigi3_weather_conditions_response_barometric_pressure = -1;
2342
2343 /* CIGI3 Aerosol Concentration Response */
2344 #define CIGI3_PACKET_SIZE_AEROSOL_CONCENTRATION_RESPONSE 8
2345 static int hf_cigi3_aerosol_concentration_response = -1;
2346 static int hf_cigi3_aerosol_concentration_response_request_id = -1;
2347 static int hf_cigi3_aerosol_concentration_response_layer_id = -1;
2348 static int hf_cigi3_aerosol_concentration_response_aerosol_concentration = -1;
2349
2350 /* CIGI3 Maritime Surface Conditions Response */
2351 #define CIGI3_PACKET_SIZE_MARITIME_SURFACE_CONDITIONS_RESPONSE 16
2352 static int hf_cigi3_maritime_surface_conditions_response = -1;
2353 static int hf_cigi3_maritime_surface_conditions_response_request_id = -1;
2354 static int hf_cigi3_maritime_surface_conditions_response_sea_surface_height = -1;
2355 static int hf_cigi3_maritime_surface_conditions_response_surface_water_temp = -1;
2356 static int hf_cigi3_maritime_surface_conditions_response_surface_clarity = -1;
2357
2358 /* CIGI3 Terrestrial Surface Conditions Response */
2359 #define CIGI3_PACKET_SIZE_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE 8
2360 static int hf_cigi3_terrestrial_surface_conditions_response = -1;
2361 static int hf_cigi3_terrestrial_surface_conditions_response_request_id = -1;
2362 static int hf_cigi3_terrestrial_surface_conditions_response_surface_id = -1;
2363
2364 /* CIGI3 Collision Detection Segment Notification */
2365 #define CIGI3_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_NOTIFICATION 16
2366 static int hf_cigi3_collision_detection_segment_notification = -1;
2367 static int hf_cigi3_collision_detection_segment_notification_entity_id = -1;
2368 static int hf_cigi3_collision_detection_segment_notification_segment_id = -1;
2369 static int hf_cigi3_collision_detection_segment_notification_type = -1;
2370 static int hf_cigi3_collision_detection_segment_notification_contacted_entity_id = -1;
2371 static int hf_cigi3_collision_detection_segment_notification_material_code = -1;
2372 static int hf_cigi3_collision_detection_segment_notification_intersection_distance = -1;
2373
2374 static const true_false_string cigi3_collision_detection_segment_notification_type_tfs = {
2375     "Entity",
2376     "Non-entity"
2377 };
2378
2379 /* CIGI3 Collision Detection Volume Notification */
2380 #define CIGI3_PACKET_SIZE_COLLISION_DETECTION_VOLUME_NOTIFICATION 16
2381 static int hf_cigi3_collision_detection_volume_notification = -1;
2382 static int hf_cigi3_collision_detection_volume_notification_entity_id = -1;
2383 static int hf_cigi3_collision_detection_volume_notification_volume_id = -1;
2384 static int hf_cigi3_collision_detection_volume_notification_type = -1;
2385 static int hf_cigi3_collision_detection_volume_notification_contacted_entity_id = -1;
2386 static int hf_cigi3_collision_detection_volume_notification_contacted_volume_id = -1;
2387
2388 static const true_false_string cigi3_collision_detection_volume_notification_type_tfs = {
2389     "Entity",
2390     "Non-entity"
2391 };
2392
2393 /* CIGI3 Animation Stop Notification */
2394 #define CIGI3_PACKET_SIZE_ANIMATION_STOP_NOTIFICATION 8
2395 static int hf_cigi3_animation_stop_notification = -1;
2396 static int hf_cigi3_animation_stop_notification_entity_id = -1;
2397
2398 /* CIGI3 Event Notification */
2399 #define CIGI3_PACKET_SIZE_EVENT_NOTIFICATION 16
2400 static int hf_cigi3_event_notification = -1;
2401 static int hf_cigi3_event_notification_event_id = -1;
2402 static int hf_cigi3_event_notification_data_1 = -1;
2403 static int hf_cigi3_event_notification_data_2 = -1;
2404 static int hf_cigi3_event_notification_data_3 = -1;
2405
2406 /* CIGI3 Image Generator Message */
2407 static int hf_cigi3_image_generator_message = -1;
2408 static int hf_cigi3_image_generator_message_id = -1;
2409 static int hf_cigi3_image_generator_message_message = -1;
2410
2411 /* CIGI3 User-Defined Packets */
2412 static int hf_cigi3_user_defined = -1;
2413
2414
2415 /* Global preferences */
2416 #define CIGI_VERSION_FROM_PACKET 0
2417 #define CIGI_VERSION_1   1
2418 #define CIGI_VERSION_2   2
2419 #define CIGI_VERSION_3   3
2420
2421 static gint global_cigi_version = CIGI_VERSION_FROM_PACKET;
2422
2423 #define CIGI_BYTE_ORDER_FROM_PACKET   -1
2424 #define CIGI_BYTE_ORDER_BIG_ENDIAN    FALSE
2425 #define CIGI_BYTE_ORDER_LITTLE_ENDIAN TRUE
2426
2427 static gint global_cigi_byte_order = CIGI_BYTE_ORDER_FROM_PACKET;
2428
2429 static const char *global_host_ip;
2430 static const char *global_ig_ip;
2431
2432
2433 /* Initialize the subtree pointers */
2434 static gint ett_cigi = -1;
2435
2436 /* The version of cigi to use */
2437 static gint cigi_version = 0;
2438 static gint cigi_minor_version = 0;
2439
2440 /* The byte order of cigi to use; our default is big-endian */
2441 static gint cigi_byte_order = CIGI_BYTE_ORDER_BIG_ENDIAN;
2442
2443 /*
2444  * Check whether this looks like a CIGI packet or not.
2445  */
2446 static gboolean
2447 packet_is_cigi(tvbuff_t *tvb)
2448 {
2449     guint8 packet_id;
2450     guint8 packet_size;
2451     guint8 cigi_version_local;
2452     guint8 ig_mode;
2453
2454     /* CIGI 3 */
2455     guint16 byte_swap;
2456
2457     if (tvb_length(tvb) < 3) {
2458         /* Not enough data available to check */
2459         return FALSE;
2460     }
2461     packet_id = tvb_get_guint8(tvb, 0);
2462     packet_size = tvb_get_guint8(tvb, 1);
2463     cigi_version_local = tvb_get_guint8(tvb, 2);
2464
2465     if ( packet_size > tvb_reported_length(tvb) ) {
2466         return FALSE;
2467     }
2468
2469     /* Currently there are only 3 versions of CIGI */
2470     switch ( cigi_version_local ) {
2471
2472         case CIGI_VERSION_1:
2473             /* CIGI 1 requires that the first packet is always the IG Control or SOF */
2474             switch ( packet_id ) {
2475                 case 1:
2476                     if ( packet_size != 16 ) {
2477                         return FALSE;
2478                     }
2479
2480                     if (!tvb_bytes_exist(tvb, 4, 1)) {
2481                         /* Not enough data available to check */
2482                         return FALSE;
2483                     }
2484                     ig_mode = (tvb_get_guint8(tvb, 4) & 0xc0) >> 6;
2485                     if ( ig_mode > 2 ) {
2486                         return FALSE;
2487                     }
2488                     break;
2489                 case 101:
2490                     if ( packet_size != 12 ) {
2491                         return FALSE;
2492                     }
2493                     break;
2494                 default:
2495                     return FALSE;
2496             }
2497             break;
2498
2499         case CIGI_VERSION_2:
2500             /* CIGI 2 requires that the first packet is always the IG Control or SOF */
2501             switch ( packet_id ) {
2502                 case CIGI2_PACKET_ID_IG_CONTROL:
2503                     if ( packet_size != CIGI2_PACKET_SIZE_IG_CONTROL ) {
2504                         return FALSE;
2505                     }
2506
2507                     if (!tvb_bytes_exist(tvb, 4, 1)) {
2508                         /* Not enough data available to check */
2509                         return FALSE;
2510                     }
2511                     ig_mode = (tvb_get_guint8(tvb, 4) & 0xc0) >> 6;
2512                     if ( ig_mode > 2 ) {
2513                         return FALSE;
2514                     }
2515                     break;
2516                 case CIGI2_PACKET_ID_START_OF_FRAME:
2517                     if ( packet_size != CIGI2_PACKET_SIZE_START_OF_FRAME ) {
2518                         return FALSE;
2519                     }
2520                     break;
2521                 default:
2522                     return FALSE;
2523             }
2524             break;
2525
2526         case CIGI_VERSION_3:
2527             if (!tvb_bytes_exist(tvb, 6, 1)) {
2528                 /* Not enough data available to check */
2529                 return FALSE;
2530             }
2531
2532             /* CIGI 3 requires that the first packet is always the IG Control or SOF */
2533             switch ( packet_id ) {
2534                 case CIGI3_PACKET_ID_IG_CONTROL:
2535                                         if ( packet_size != CIGI3_PACKET_SIZE_IG_CONTROL ) {
2536                                                 if ( packet_size != CIGI3_2_PACKET_SIZE_IG_CONTROL ) {
2537                                                         return FALSE;
2538                                                 }
2539                     }
2540
2541                     if (!tvb_bytes_exist(tvb, 4, 2)) {
2542                         /* Not enough data available to check */
2543                         return FALSE;
2544                     }
2545
2546                     ig_mode = (tvb_get_guint8(tvb, 4) & 0x03);
2547                     if ( ig_mode > 2 ) {
2548                         return FALSE;
2549                     }
2550
2551                     break;
2552                 case CIGI3_PACKET_ID_START_OF_FRAME:
2553                                         if ( packet_size != CIGI3_PACKET_SIZE_START_OF_FRAME ) {
2554                                                 if ( packet_size != CIGI3_2_PACKET_SIZE_START_OF_FRAME) {
2555                                                         return FALSE;
2556                                                 }
2557                     }
2558
2559                     if (!tvb_bytes_exist(tvb, 5, 1)) {
2560                         /* Not enough data available to check */
2561                         return FALSE;
2562                     }
2563
2564                                         break;
2565                 default:
2566                     return FALSE;
2567             }
2568
2569             /* CIGI 3 has the byte swap field which only allows two values. */
2570             byte_swap = tvb_get_ntohs(tvb, 6);
2571
2572             if ( byte_swap != CIGI3_BYTE_SWAP_BIG_ENDIAN && byte_swap != CIGI3_BYTE_SWAP_LITTLE_ENDIAN ) {
2573                 return FALSE;
2574             }
2575             break;
2576
2577         default:
2578             return FALSE;
2579     }
2580
2581     /* If we made it here, then this is probably CIGI */
2582     return TRUE;
2583 }
2584
2585 /*
2586  * The heuristic dissector
2587  */
2588 static gboolean
2589 dissect_cigi_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
2590 {
2591     /* Does this look like CIGI? */
2592     if ( !packet_is_cigi(tvb) ) {
2593         return FALSE;
2594     }
2595     dissect_cigi_pdu(tvb, pinfo, tree);
2596     return TRUE;
2597 }
2598
2599 /*
2600  * The non-heuristic dissector.
2601  */
2602 static int
2603 dissect_cigi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
2604 {
2605     /* Make sure this looks like CIGI */
2606     if ( !packet_is_cigi(tvb) ) {
2607         return 0;
2608     }
2609     dissect_cigi_pdu(tvb, pinfo, tree);
2610     /* We probably ate the entire packet. */
2611     return tvb_length(tvb);
2612 }
2613
2614 /* Code to actually dissect the CIGI packets */
2615 static void
2616 dissect_cigi_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
2617 {
2618     /* Set up structures needed to add the protocol subtree and manage it */
2619     guint8 packet_id = 0;
2620
2621     proto_item *ti, *hidden_item;
2622     proto_tree *cigi_tree;
2623
2624     const char* src_str;
2625     const char* dest_str;
2626     const char* info_str;
2627
2628     packet_id = tvb_get_guint8(tvb, 0);
2629
2630
2631     /* Make entries in Protocol column and Info column on summary display */
2632     if (check_col(pinfo->cinfo, COL_PROTOCOL)) {
2633         col_set_str(pinfo->cinfo, COL_PROTOCOL, "CIGI");
2634     }
2635
2636     /* If we have the start of frame or IG Control packet set the version
2637      * XXX - If another version of cigi is added to this dissector be sure to
2638      * place the IG Control and SOF packet id's in this comparison. */
2639     if ( ( packet_id == CIGI2_PACKET_ID_IG_CONTROL || packet_id == CIGI2_PACKET_ID_START_OF_FRAME || packet_id == CIGI3_PACKET_ID_IG_CONTROL || packet_id == CIGI3_PACKET_ID_START_OF_FRAME ) && global_cigi_version == CIGI_VERSION_FROM_PACKET ) {
2640         cigi_version = tvb_get_guint8(tvb, 2);
2641     }
2642
2643     /* Format the Info String */
2644     src_str = ip_to_str(pinfo->src.data);
2645     if ( !g_ascii_strcasecmp(global_host_ip, src_str) ) {
2646         src_str = "Host";
2647     } else if ( !g_ascii_strcasecmp(global_ig_ip, src_str) ) {
2648         src_str = "IG";
2649     }
2650
2651     dest_str = ip_to_str(pinfo->dst.data);
2652     if ( !g_ascii_strcasecmp(global_host_ip, dest_str) ) {
2653         dest_str = "Host";
2654     } else if ( !g_ascii_strcasecmp(global_ig_ip, dest_str) ) {
2655         dest_str = "IG";
2656     }
2657
2658     info_str = g_strdup_printf("%s => %s (%u bytes)", src_str, dest_str,
2659         tvb_reported_length(tvb));
2660
2661     if (check_col(pinfo->cinfo, COL_INFO)) {
2662         col_clear(pinfo->cinfo, COL_INFO);
2663         col_add_str(pinfo->cinfo, COL_INFO, info_str);
2664     }
2665
2666     if (tree) {
2667
2668         ti = proto_tree_add_protocol_format(tree, proto_cigi, tvb, 0, tvb_length(tvb), "Common Image Generator Interface (%i), %s", cigi_version, info_str);
2669
2670         cigi_tree = proto_item_add_subtree(ti, ett_cigi);
2671
2672         /* Ports */
2673         hidden_item = proto_tree_add_uint(cigi_tree, hf_cigi_src_port, tvb, 0, 0, pinfo->srcport);
2674                 PROTO_ITEM_SET_HIDDEN(hidden_item);
2675         hidden_item = proto_tree_add_uint(cigi_tree, hf_cigi_dest_port, tvb, 0, 0, pinfo->destport);
2676                 PROTO_ITEM_SET_HIDDEN(hidden_item);
2677         hidden_item = proto_tree_add_uint(cigi_tree, hf_cigi_port, tvb, 0, 0, pinfo->srcport);
2678                 PROTO_ITEM_SET_HIDDEN(hidden_item);
2679         hidden_item = proto_tree_add_uint(cigi_tree, hf_cigi_port, tvb, 0, 0, pinfo->destport);
2680                 PROTO_ITEM_SET_HIDDEN(hidden_item);
2681
2682         /* Frame Size */
2683         hidden_item = proto_tree_add_uint(cigi_tree, hf_cigi_frame_size, tvb, 0, 0, tvb_reported_length(tvb));
2684                 PROTO_ITEM_SET_HIDDEN(hidden_item);
2685
2686         /* Since the versions of CIGI are not backwards compatible,
2687          * dissection is different for each version.
2688          * XXX - If another version of cigi is added to this dissector be
2689          * sure to place the version in this statement.*/
2690         if ( cigi_version == CIGI_VERSION_2 ) {
2691             cigi2_add_tree(tvb, cigi_tree);
2692         } else if ( cigi_version == CIGI_VERSION_3 ) {
2693             cigi3_add_tree(tvb, cigi_tree);
2694         } else {
2695             /* Since there exists no dissector to dissect this version
2696              * just put the data into a tree using an unknown version */
2697             cigi_add_tree(tvb, cigi_tree);
2698         }
2699     }
2700 }
2701
2702 /* Create the tree for CIGI (Unknown Version)
2703  * Note: If we have no version then we assume network order bytes (big endian). */
2704 static void
2705 cigi_add_tree(tvbuff_t *tvb, proto_tree *cigi_tree)
2706 {
2707     gint offset = 0;
2708     gint length = 0;
2709     gint packet_id = 0;
2710     gint packet_size = 0;
2711     gint data_size = 0;
2712
2713     proto_tree* cigi_packet_tree = NULL;
2714     proto_item* tipacket;
2715
2716     length = tvb_length(tvb);
2717
2718     /* Each iteration through this loop is meant to be a separate cigi packet
2719      * therefore it is okay to assume that at the top of this look we are given
2720      * a new packet to dissect. */
2721     while ( offset < length ) {
2722
2723         packet_id = tvb_get_guint8(tvb, offset);
2724         packet_size = tvb_get_guint8(tvb, offset + 1);
2725         data_size = packet_size;
2726
2727         /* if the second byte of the packet carries a value that is less than
2728          * then we know we have a malformed packet because every cigi packet
2729          * at minimal must be a least 2 bytes ( 1 - packet_id; 2 - packet_size ). */
2730         if ( packet_size < 2 ) {
2731             THROW(ReportedBoundsError);
2732         }
2733
2734         /* If we have the start of frame or IG Control packet set the version.
2735          * Since we have no cigi version we assume that packet id 1 is the
2736          * IG Control and packet id 101 is the Start of Frame. */
2737         if ( ( packet_id == 1 || packet_id == 101 ) && global_cigi_version == CIGI_VERSION_FROM_PACKET ) {
2738             cigi_version = tvb_get_guint8(tvb, 2);
2739         }
2740
2741         /* Add the subtree for the packet */
2742         tipacket = proto_tree_add_string_format(cigi_tree, hf_cigi_unknown, tvb, offset, packet_size, NULL, "Unknown (%i bytes)", packet_size);
2743
2744         cigi_packet_tree = proto_item_add_subtree(tipacket, ett_cigi);
2745
2746         /* In all CIGI versions the first byte of a packet is the packet ID.
2747          * The second byte is the size of the packet (in bytes). */
2748         proto_tree_add_item(cigi_packet_tree, hf_cigi_packet_id, tvb, offset, 1, cigi_byte_order);
2749         offset++;
2750         data_size--;
2751
2752         proto_tree_add_item(cigi_packet_tree, hf_cigi_packet_size, tvb, offset, 1, cigi_byte_order);
2753         offset++;
2754         data_size--;
2755
2756         /* If the packet ID is for the SOF or IG Control, which are usually 101
2757          * and 1 respectively then also print the version that we are using. */
2758         if ( packet_id == 1 || packet_id == 101 ) {
2759             proto_tree_add_item(cigi_packet_tree, hf_cigi_version, tvb, offset, 1, cigi_byte_order);
2760             offset++;
2761             data_size--;
2762         }
2763
2764         proto_tree_add_text(cigi_packet_tree, tvb, offset, data_size, "Data (%i bytes)", data_size );
2765         offset += data_size;
2766     }
2767 }
2768
2769 /* CIGI Add Data */
2770 /* offset is the position past the packet_id and packet_size */
2771 static gint
2772 cigi_add_data(tvbuff_t *tvb, proto_tree *tree, gint offset)
2773 {
2774     gint8 packet_size = 0;
2775
2776     packet_size = tvb_get_guint8(tvb, offset-1);
2777
2778     /* A cigi packet cannot be less than 2 bytes ( because every cigi packet
2779      * has a packet id (1 byte) and a packet size (1 byte) ). */
2780     if ( packet_size < 2 ) {
2781         THROW(ReportedBoundsError);
2782     }
2783
2784     proto_tree_add_text(tree, tvb, offset, packet_size-2, "Data (%i bytes)", packet_size-2 );
2785     offset += packet_size-2;
2786
2787     return offset;
2788 }
2789
2790 /* Create the tree for CIGI 2
2791  * Note: CIGI 2 guarantee's that the byte order will be big endian. */
2792 static void
2793 cigi2_add_tree(tvbuff_t *tvb, proto_tree *cigi_tree)
2794 {
2795     gint offset = 0;
2796     gint length = 0;
2797     gint init_offset = 0;
2798
2799     gint packet_id = 0;
2800     gint packet_size = 0;
2801     gint packet_length = 0;
2802
2803     proto_tree* cigi_packet_tree = NULL;
2804     proto_item* tipacket;
2805     int hf_cigi2_packet = -1;
2806
2807     length = tvb_length(tvb);
2808
2809     /* Each iteration through this loop is meant to be a separate cigi packet
2810      * therefore it is okay to assume that at the top of this look we are given
2811      * a new packet to dissect. */
2812     while ( offset < length ) {
2813
2814         packet_id = tvb_get_guint8(tvb, offset);
2815         packet_size = tvb_get_guint8(tvb, offset + 1);
2816
2817         /* If we have the start of frame or IG Control packet set the version */
2818         if ( ( packet_id == CIGI2_PACKET_ID_IG_CONTROL || packet_id == CIGI2_PACKET_ID_START_OF_FRAME ) && global_cigi_version == CIGI_VERSION_FROM_PACKET ) {
2819             cigi_version = tvb_get_guint8(tvb, 2);
2820         }
2821
2822         /* Add the subtree for the packet */
2823         if ( packet_id == CIGI2_PACKET_ID_IG_CONTROL ) {
2824             hf_cigi2_packet = hf_cigi2_ig_control;
2825             packet_length = CIGI2_PACKET_SIZE_IG_CONTROL;
2826         } else if ( packet_id == CIGI2_PACKET_ID_ENTITY_CONTROL ) {
2827             hf_cigi2_packet = hf_cigi2_entity_control;
2828             packet_length = CIGI2_PACKET_SIZE_ENTITY_CONTROL;
2829         } else if ( packet_id == CIGI2_PACKET_ID_COMPONENT_CONTROL ) {
2830             hf_cigi2_packet = hf_cigi2_component_control;
2831             packet_length = CIGI2_PACKET_SIZE_COMPONENT_CONTROL;
2832         } else if ( packet_id == CIGI2_PACKET_ID_ARTICULATED_PARTS_CONTROL ) {
2833             hf_cigi2_packet = hf_cigi2_articulated_parts_control;
2834             packet_length = CIGI2_PACKET_SIZE_ARTICULATED_PARTS_CONTROL;
2835         } else if ( packet_id == CIGI2_PACKET_ID_RATE_CONTROL ) {
2836             hf_cigi2_packet = hf_cigi2_rate_control;
2837             packet_length = CIGI2_PACKET_SIZE_RATE_CONTROL;
2838         } else if ( packet_id == CIGI2_PACKET_ID_ENVIRONMENT_CONTROL ) {
2839             hf_cigi2_packet = hf_cigi2_environment_control;
2840             packet_length = CIGI2_PACKET_SIZE_ENVIRONMENT_CONTROL;
2841         } else if ( packet_id == CIGI2_PACKET_ID_WEATHER_CONTROL ) {
2842             hf_cigi2_packet = hf_cigi2_weather_control;
2843             packet_length = CIGI2_PACKET_SIZE_WEATHER_CONTROL;
2844         } else if ( packet_id == CIGI2_PACKET_ID_VIEW_CONTROL ) {
2845             hf_cigi2_packet = hf_cigi2_view_control;
2846             packet_length = CIGI2_PACKET_SIZE_VIEW_CONTROL;
2847         } else if ( packet_id == CIGI2_PACKET_ID_SENSOR_CONTROL ) {
2848             hf_cigi2_packet = hf_cigi2_sensor_control;
2849             packet_length = CIGI2_PACKET_SIZE_SENSOR_CONTROL;
2850         } else if ( packet_id == CIGI2_PACKET_ID_TRAJECTORY_DEFINITION ) {
2851             hf_cigi2_packet = hf_cigi2_trajectory_definition;
2852             packet_length = CIGI2_PACKET_SIZE_TRAJECTORY_DEFINITION;
2853         } else if ( packet_id == CIGI2_PACKET_ID_SPECIAL_EFFECT_DEFINITION ) {
2854             hf_cigi2_packet = hf_cigi2_special_effect_definition;
2855             packet_length = CIGI2_PACKET_SIZE_SPECIAL_EFFECT_DEFINITION;
2856         } else if ( packet_id == CIGI2_PACKET_ID_VIEW_DEFINITION ) {
2857             hf_cigi2_packet = hf_cigi2_view_definition;
2858             packet_length = CIGI2_PACKET_SIZE_VIEW_DEFINITION;
2859         } else if ( packet_id == CIGI2_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION ) {
2860             hf_cigi2_packet = hf_cigi2_collision_detection_segment_definition;
2861             packet_length = CIGI2_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_DEFINITION;
2862         } else if ( packet_id == CIGI2_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION ) {
2863             hf_cigi2_packet = hf_cigi2_collision_detection_volume_definition;
2864             packet_length = CIGI2_PACKET_SIZE_COLLISION_DETECTION_VOLUME_DEFINITION;
2865         } else if ( packet_id == CIGI2_PACKET_ID_HEIGHT_ABOVE_TERRAIN_REQUEST ) {
2866             hf_cigi2_packet = hf_cigi2_height_above_terrain_request;
2867             packet_length = CIGI2_PACKET_SIZE_HEIGHT_ABOVE_TERRAIN_REQUEST;
2868         } else if ( packet_id == CIGI2_PACKET_ID_LINE_OF_SIGHT_OCCULT_REQUEST ) {
2869             hf_cigi2_packet = hf_cigi2_line_of_sight_occult_request;
2870             packet_length = CIGI2_PACKET_SIZE_LINE_OF_SIGHT_OCCULT_REQUEST;
2871         } else if ( packet_id == CIGI2_PACKET_ID_LINE_OF_SIGHT_RANGE_REQUEST ) {
2872             hf_cigi2_packet = hf_cigi2_line_of_sight_range_request;
2873             packet_length = CIGI2_PACKET_SIZE_LINE_OF_SIGHT_RANGE_REQUEST;
2874         } else if ( packet_id == CIGI2_PACKET_ID_HEIGHT_OF_TERRAIN_REQUEST ) {
2875             hf_cigi2_packet = hf_cigi2_height_of_terrain_request;
2876             packet_length = CIGI2_PACKET_SIZE_HEIGHT_OF_TERRAIN_REQUEST;
2877         } else if ( packet_id == CIGI2_PACKET_ID_START_OF_FRAME ) {
2878             hf_cigi2_packet = hf_cigi2_start_of_frame;
2879             packet_length = CIGI2_PACKET_SIZE_START_OF_FRAME;
2880         } else if ( packet_id == CIGI2_PACKET_ID_HEIGHT_ABOVE_TERRAIN_RESPONSE ) {
2881             hf_cigi2_packet = hf_cigi2_height_above_terrain_response;
2882             packet_length = CIGI2_PACKET_SIZE_HEIGHT_ABOVE_TERRAIN_RESPONSE;
2883         } else if ( packet_id == CIGI2_PACKET_ID_LINE_OF_SIGHT_RESPONSE ) {
2884             hf_cigi2_packet = hf_cigi2_line_of_sight_response;
2885             packet_length = CIGI2_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE;
2886         } else if ( packet_id == CIGI2_PACKET_ID_COLLISION_DETECTION_SEGMENT_RESPONSE ) {
2887             hf_cigi2_packet = hf_cigi2_collision_detection_segment_response;
2888             packet_length = CIGI2_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_RESPONSE;
2889         } else if ( packet_id == CIGI2_PACKET_ID_SENSOR_RESPONSE ) {
2890             hf_cigi2_packet = hf_cigi2_sensor_response;
2891             packet_length = CIGI2_PACKET_SIZE_SENSOR_RESPONSE;
2892         } else if ( packet_id == CIGI2_PACKET_ID_HEIGHT_OF_TERRAIN_RESPONSE ) {
2893             hf_cigi2_packet = hf_cigi2_height_of_terrain_response;
2894             packet_length = CIGI2_PACKET_SIZE_HEIGHT_OF_TERRAIN_RESPONSE;
2895         } else if ( packet_id == CIGI2_PACKET_ID_COLLISION_DETECTION_VOLUME_RESPONSE ) {
2896             hf_cigi2_packet = hf_cigi2_collision_detection_volume_response;
2897             packet_length = CIGI2_PACKET_SIZE_COLLISION_DETECTION_VOLUME_RESPONSE;
2898         } else if ( packet_id == CIGI2_PACKET_ID_IMAGE_GENERATOR_MESSAGE ) {
2899             hf_cigi2_packet = hf_cigi2_image_generator_message;
2900             packet_length = packet_size;
2901         } else if ( packet_id >= CIGI2_PACKET_ID_USER_DEFINABLE_MIN && packet_id <= CIGI2_PACKET_ID_USER_DEFINABLE_MAX ) {
2902             hf_cigi2_packet = hf_cigi2_user_definable;
2903             packet_length = packet_size;
2904         } else {
2905             hf_cigi2_packet = hf_cigi_unknown;
2906             packet_length = packet_size;
2907         }
2908         tipacket = proto_tree_add_string_format(cigi_tree, hf_cigi2_packet, tvb, offset, packet_length, NULL, "%s (%i bytes)", val_to_str(packet_id, cigi2_packet_id_vals, "Unknown"), packet_length);
2909
2910         cigi_packet_tree = proto_item_add_subtree(tipacket, ett_cigi);
2911
2912         /* In all CIGI versions the first byte of a packet is the packet ID.
2913          * The second byte is the size of the packet (in bytes). */
2914         init_offset = offset;
2915         proto_tree_add_item(cigi_packet_tree, hf_cigi2_packet_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
2916         offset++;
2917
2918         proto_tree_add_item(cigi_packet_tree, hf_cigi_packet_size, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
2919         offset++;
2920
2921         if ( packet_id == CIGI2_PACKET_ID_IG_CONTROL ) {
2922             offset = cigi2_add_ig_control(tvb, cigi_packet_tree, offset);
2923         } else if ( packet_id == CIGI2_PACKET_ID_ENTITY_CONTROL ) {
2924             offset = cigi2_add_entity_control(tvb, cigi_packet_tree, offset);
2925         } else if ( packet_id == CIGI2_PACKET_ID_COMPONENT_CONTROL ) {
2926             offset = cigi2_add_component_control(tvb, cigi_packet_tree, offset);
2927         } else if ( packet_id == CIGI2_PACKET_ID_ARTICULATED_PARTS_CONTROL ) {
2928             offset = cigi2_add_articulated_parts_control(tvb, cigi_packet_tree, offset);
2929         } else if ( packet_id == CIGI2_PACKET_ID_RATE_CONTROL ) {
2930             offset = cigi2_add_rate_control(tvb, cigi_packet_tree, offset);
2931         } else if ( packet_id == CIGI2_PACKET_ID_ENVIRONMENT_CONTROL ) {
2932             offset = cigi2_add_environment_control(tvb, cigi_packet_tree, offset);
2933         } else if ( packet_id == CIGI2_PACKET_ID_WEATHER_CONTROL ) {
2934             offset = cigi2_add_weather_control(tvb, cigi_packet_tree, offset);
2935         } else if ( packet_id == CIGI2_PACKET_ID_VIEW_CONTROL ) {
2936             offset = cigi2_add_view_control(tvb, cigi_packet_tree, offset);
2937         } else if ( packet_id == CIGI2_PACKET_ID_SENSOR_CONTROL ) {
2938             offset = cigi2_add_sensor_control(tvb, cigi_packet_tree, offset);
2939         } else if ( packet_id == CIGI2_PACKET_ID_TRAJECTORY_DEFINITION ) {
2940             offset = cigi2_add_trajectory_definition(tvb, cigi_packet_tree, offset);
2941         } else if ( packet_id == CIGI2_PACKET_ID_SPECIAL_EFFECT_DEFINITION ) {
2942             offset = cigi2_add_special_effect_definition(tvb, cigi_packet_tree, offset);
2943         } else if ( packet_id == CIGI2_PACKET_ID_VIEW_DEFINITION ) {
2944             offset = cigi2_add_view_definition(tvb, cigi_packet_tree, offset);
2945         } else if ( packet_id == CIGI2_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION ) {
2946             offset = cigi2_add_collision_detection_segment_definition(tvb, cigi_packet_tree, offset);
2947         } else if ( packet_id == CIGI2_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION ) {
2948             offset = cigi2_add_collision_detection_volume_definition(tvb, cigi_packet_tree, offset);
2949         } else if ( packet_id == CIGI2_PACKET_ID_HEIGHT_ABOVE_TERRAIN_REQUEST ) {
2950             offset = cigi2_add_height_above_terrain_request(tvb, cigi_packet_tree, offset);
2951         } else if ( packet_id == CIGI2_PACKET_ID_LINE_OF_SIGHT_OCCULT_REQUEST ) {
2952             offset = cigi2_add_line_of_sight_occult_request(tvb, cigi_packet_tree, offset);
2953         } else if ( packet_id == CIGI2_PACKET_ID_LINE_OF_SIGHT_RANGE_REQUEST ) {
2954             offset = cigi2_add_line_of_sight_range_request(tvb, cigi_packet_tree, offset);
2955         } else if ( packet_id == CIGI2_PACKET_ID_HEIGHT_OF_TERRAIN_REQUEST ) {
2956             offset = cigi2_add_height_of_terrain_request(tvb, cigi_packet_tree, offset);
2957         } else if ( packet_id == CIGI2_PACKET_ID_START_OF_FRAME ) {
2958             offset = cigi2_add_start_of_frame(tvb, cigi_packet_tree, offset);
2959         } else if ( packet_id == CIGI2_PACKET_ID_HEIGHT_ABOVE_TERRAIN_RESPONSE ) {
2960             offset = cigi2_add_height_above_terrain_response(tvb, cigi_packet_tree, offset);
2961         } else if ( packet_id == CIGI2_PACKET_ID_LINE_OF_SIGHT_RESPONSE ) {
2962             offset = cigi2_add_line_of_sight_response(tvb, cigi_packet_tree, offset);
2963         } else if ( packet_id == CIGI2_PACKET_ID_COLLISION_DETECTION_SEGMENT_RESPONSE ) {
2964             offset = cigi2_add_collision_detection_segment_response(tvb, cigi_packet_tree, offset);
2965         } else if ( packet_id == CIGI2_PACKET_ID_SENSOR_RESPONSE ) {
2966             offset = cigi2_add_sensor_response(tvb, cigi_packet_tree, offset);
2967         } else if ( packet_id == CIGI2_PACKET_ID_HEIGHT_OF_TERRAIN_RESPONSE ) {
2968             offset = cigi2_add_height_of_terrain_response(tvb, cigi_packet_tree, offset);
2969         } else if ( packet_id == CIGI2_PACKET_ID_COLLISION_DETECTION_VOLUME_RESPONSE ) {
2970             offset = cigi2_add_collision_detection_volume_response(tvb, cigi_packet_tree, offset);
2971         } else if ( packet_id == CIGI2_PACKET_ID_IMAGE_GENERATOR_MESSAGE ) {
2972             offset = cigi2_add_image_generator_message(tvb, cigi_packet_tree, offset);
2973         } else if ( packet_id >= CIGI2_PACKET_ID_USER_DEFINABLE_MIN && packet_id <= CIGI2_PACKET_ID_USER_DEFINABLE_MAX ) {
2974             offset = cigi_add_data(tvb, cigi_packet_tree, offset);
2975         } else {
2976             offset = cigi_add_data(tvb, cigi_packet_tree, offset);
2977         }
2978
2979         /* Does the packet offset match the supposed length of the packet? */
2980         DISSECTOR_ASSERT((offset - init_offset == packet_length) && "Packet offset does not match packet length");
2981     }
2982 }
2983
2984 /* Create the tree for CIGI 3 */
2985 static void
2986 cigi3_add_tree(tvbuff_t *tvb, proto_tree *cigi_tree)
2987 {
2988     gint offset = 0;
2989     gint length = 0;
2990     gint init_offset = 0;
2991
2992     gint packet_id = 0;
2993     gint packet_size = 0;
2994     gint packet_length = 0;
2995     guint16 byte_swap = 0;
2996
2997     proto_tree* cigi_packet_tree = NULL;
2998     proto_item* tipacket;
2999     int hf_cigi3_packet = -1;
3000
3001     length = tvb_length(tvb);
3002
3003     /* Each iteration through this loop is meant to be a separate cigi packet
3004      * therefore it is okay to assume that at the top of this look we are given
3005      * a new packet to dissect. */
3006     while ( offset < length ) {
3007
3008         packet_id = tvb_get_guint8(tvb, offset);
3009         packet_size = tvb_get_guint8(tvb, offset + 1);
3010         byte_swap = tvb_get_ntohs(tvb, offset + 6);
3011
3012         /* If we have the start of frame or IG Control packet set the version */
3013         if ( ( packet_id == CIGI3_PACKET_ID_IG_CONTROL || packet_id == CIGI3_PACKET_ID_START_OF_FRAME ) && global_cigi_version == CIGI_VERSION_FROM_PACKET ) {
3014             cigi_version = tvb_get_guint8(tvb, 2);
3015             if ( packet_size == CIGI3_2_PACKET_SIZE_IG_CONTROL || packet_size == CIGI3_2_PACKET_SIZE_START_OF_FRAME ) {
3016                cigi_minor_version = tvb_get_guint8(tvb, 4) >> 4;
3017             } else {
3018                cigi_minor_version = 0;
3019             }
3020         }
3021
3022         /* If we have the SOF or IG Control packet set the byte order */
3023         if ( ( packet_id == CIGI3_PACKET_ID_IG_CONTROL || packet_id == CIGI3_PACKET_ID_START_OF_FRAME ) && global_cigi_byte_order == CIGI_BYTE_ORDER_FROM_PACKET ) {
3024             if ( byte_swap == CIGI3_BYTE_SWAP_BIG_ENDIAN ) {
3025                 cigi_byte_order = CIGI_BYTE_ORDER_BIG_ENDIAN;
3026             } else if ( byte_swap == CIGI3_BYTE_SWAP_LITTLE_ENDIAN ) {
3027                 cigi_byte_order = CIGI_BYTE_ORDER_LITTLE_ENDIAN;
3028             } else {
3029                 /* Assume we want Big-Endian byte order */
3030                 cigi_byte_order = CIGI_BYTE_ORDER_BIG_ENDIAN;
3031             }
3032         }
3033
3034         /* Add the subtree for the packet */
3035         if ( packet_id == CIGI3_PACKET_ID_IG_CONTROL && cigi_minor_version == 2 ) {
3036             hf_cigi3_packet = hf_cigi3_2_ig_control;
3037             packet_length = CIGI3_2_PACKET_SIZE_IG_CONTROL;
3038         } else if ( packet_id == CIGI3_PACKET_ID_IG_CONTROL && cigi_minor_version == 3 ) {
3039             hf_cigi3_packet = hf_cigi3_3_ig_control;
3040             packet_length = CIGI3_3_PACKET_SIZE_IG_CONTROL;
3041         } else if ( packet_id == CIGI3_PACKET_ID_IG_CONTROL ) {
3042             hf_cigi3_packet = hf_cigi3_ig_control;
3043             packet_length = CIGI3_PACKET_SIZE_IG_CONTROL;
3044         } else if ( packet_id == CIGI3_PACKET_ID_ENTITY_CONTROL ) {
3045             hf_cigi3_packet = hf_cigi3_entity_control;
3046             packet_length = CIGI3_PACKET_SIZE_ENTITY_CONTROL;
3047         } else if ( packet_id == CIGI3_PACKET_ID_CONFORMAL_CLAMPED_ENTITY_CONTROL ) {
3048             hf_cigi3_packet = hf_cigi3_conformal_clamped_entity_control;
3049             packet_length = CIGI3_PACKET_SIZE_CONFORMAL_CLAMPED_ENTITY_CONTROL;
3050         } else if ( packet_id == CIGI3_PACKET_ID_COMPONENT_CONTROL ) {
3051             hf_cigi3_packet = hf_cigi3_component_control;
3052             packet_length = CIGI3_PACKET_SIZE_COMPONENT_CONTROL;
3053         } else if ( packet_id == CIGI3_PACKET_ID_SHORT_COMPONENT_CONTROL ) {
3054             hf_cigi3_packet = hf_cigi3_short_component_control;
3055             packet_length = CIGI3_PACKET_SIZE_SHORT_COMPONENT_CONTROL;
3056         } else if ( packet_id == CIGI3_PACKET_ID_ARTICULATED_PART_CONTROL ) {
3057             hf_cigi3_packet = hf_cigi3_articulated_part_control;
3058             packet_length = CIGI3_PACKET_SIZE_ARTICULATED_PART_CONTROL;
3059         } else if ( packet_id == CIGI3_PACKET_ID_SHORT_ARTICULATED_PART_CONTROL ) {
3060             hf_cigi3_packet = hf_cigi3_short_articulated_part_control;
3061             packet_length = CIGI3_PACKET_SIZE_SHORT_ARTICULATED_PART_CONTROL;
3062         } else if ( packet_id == CIGI3_PACKET_ID_RATE_CONTROL && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3063             hf_cigi3_packet = hf_cigi3_2_rate_control;
3064             packet_length = CIGI3_2_PACKET_SIZE_RATE_CONTROL;
3065         } else if ( packet_id == CIGI3_PACKET_ID_RATE_CONTROL ) {
3066             hf_cigi3_packet = hf_cigi3_rate_control;
3067             packet_length = CIGI3_PACKET_SIZE_RATE_CONTROL;
3068         } else if ( packet_id == CIGI3_PACKET_ID_CELESTIAL_SPHERE_CONTROL ) {
3069             hf_cigi3_packet = hf_cigi3_celestial_sphere_control;
3070             packet_length = CIGI3_PACKET_SIZE_CELESTIAL_SPHERE_CONTROL;
3071         } else if ( packet_id == CIGI3_PACKET_ID_ATMOSPHERE_CONTROL ) {
3072             hf_cigi3_packet = hf_cigi3_atmosphere_control;
3073             packet_length = CIGI3_PACKET_SIZE_ATMOSPHERE_CONTROL;
3074         } else if ( packet_id == CIGI3_PACKET_ID_ENVIRONMENTAL_REGION_CONTROL ) {
3075             hf_cigi3_packet = hf_cigi3_environmental_region_control;
3076             packet_length = CIGI3_PACKET_SIZE_ENVIRONMENTAL_REGION_CONTROL;
3077         } else if ( packet_id == CIGI3_PACKET_ID_WEATHER_CONTROL ) {
3078             hf_cigi3_packet = hf_cigi3_weather_control;
3079             packet_length = CIGI3_PACKET_SIZE_WEATHER_CONTROL;
3080         } else if ( packet_id == CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_CONTROL ) {
3081             hf_cigi3_packet = hf_cigi3_maritime_surface_conditions_control;
3082             packet_length = CIGI3_PACKET_SIZE_MARITIME_SURFACE_CONDITIONS_CONTROL;
3083         } else if ( packet_id == CIGI3_PACKET_ID_WAVE_CONTROL ) {
3084             hf_cigi3_packet = hf_cigi3_wave_control;
3085             packet_length = CIGI3_PACKET_SIZE_WAVE_CONTROL;
3086         } else if ( packet_id == CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL ) {
3087             hf_cigi3_packet = hf_cigi3_terrestrial_surface_conditions_control;
3088             packet_length = CIGI3_PACKET_SIZE_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL;
3089         } else if ( packet_id == CIGI3_PACKET_ID_VIEW_CONTROL ) {
3090             hf_cigi3_packet = hf_cigi3_view_control;
3091             packet_length = CIGI3_PACKET_SIZE_VIEW_CONTROL;
3092         } else if ( packet_id == CIGI3_PACKET_ID_SENSOR_CONTROL ) {
3093             hf_cigi3_packet = hf_cigi3_sensor_control;
3094             packet_length = CIGI3_PACKET_SIZE_SENSOR_CONTROL;
3095         } else if ( packet_id == CIGI3_PACKET_ID_MOTION_TRACKER_CONTROL ) {
3096             hf_cigi3_packet = hf_cigi3_motion_tracker_control;
3097             packet_length = CIGI3_PACKET_SIZE_MOTION_TRACKER_CONTROL;
3098         } else if ( packet_id == CIGI3_PACKET_ID_EARTH_REFERENCE_MODEL_DEFINITION ) {
3099             hf_cigi3_packet = hf_cigi3_earth_reference_model_definition;
3100             packet_length = CIGI3_PACKET_SIZE_EARTH_REFERENCE_MODEL_DEFINITION;
3101         } else if ( packet_id == CIGI3_PACKET_ID_TRAJECTORY_DEFINITION ) {
3102             hf_cigi3_packet = hf_cigi3_trajectory_definition;
3103             packet_length = CIGI3_PACKET_SIZE_TRAJECTORY_DEFINITION;
3104         } else if ( packet_id == CIGI3_PACKET_ID_VIEW_DEFINITION ) {
3105             hf_cigi3_packet = hf_cigi3_view_definition;
3106             packet_length = CIGI3_PACKET_SIZE_VIEW_DEFINITION;
3107         } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION ) {
3108             hf_cigi3_packet = hf_cigi3_collision_detection_segment_definition;
3109             packet_length = CIGI3_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_DEFINITION;
3110         } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION ) {
3111             hf_cigi3_packet = hf_cigi3_collision_detection_volume_definition;
3112             packet_length = CIGI3_PACKET_SIZE_COLLISION_DETECTION_VOLUME_DEFINITION;
3113         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_REQUEST && (cigi_minor_version == 2 || cigi_minor_version == 3)) {
3114             hf_cigi3_packet = hf_cigi3_2_hat_hot_request;
3115             packet_length = CIGI3_2_PACKET_SIZE_HAT_HOT_REQUEST;
3116         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_REQUEST ) {
3117             hf_cigi3_packet = hf_cigi3_hat_hot_request;
3118             packet_length = CIGI3_PACKET_SIZE_HAT_HOT_REQUEST;
3119         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3120             hf_cigi3_packet = hf_cigi3_2_line_of_sight_segment_request;
3121             packet_length = CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_SEGMENT_REQUEST;
3122         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST ) {
3123             hf_cigi3_packet = hf_cigi3_line_of_sight_segment_request;
3124             packet_length = CIGI3_PACKET_SIZE_LINE_OF_SIGHT_SEGMENT_REQUEST;
3125         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3126             hf_cigi3_packet = hf_cigi3_2_line_of_sight_vector_request;
3127             packet_length = CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_VECTOR_REQUEST;
3128         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST ) {
3129             hf_cigi3_packet = hf_cigi3_line_of_sight_vector_request;
3130             packet_length = CIGI3_PACKET_SIZE_LINE_OF_SIGHT_VECTOR_REQUEST;
3131         } else if ( packet_id == CIGI3_PACKET_ID_POSITION_REQUEST ) {
3132             hf_cigi3_packet = hf_cigi3_position_request;
3133             packet_length = CIGI3_PACKET_SIZE_POSITION_REQUEST;
3134         } else if ( packet_id == CIGI3_PACKET_ID_ENVIRONMENTAL_CONDITIONS_REQUEST ) {
3135             hf_cigi3_packet = hf_cigi3_environmental_conditions_request;
3136             packet_length = CIGI3_PACKET_SIZE_ENVIRONMENTAL_CONDITIONS_REQUEST;
3137         } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_SURFACE_DEFINITION ) {
3138             hf_cigi3_packet = hf_cigi3_3_symbol_surface_definition;
3139             packet_length = CIGI3_PACKET_SIZE_SYMBOL_SURFACE_DEFINITION;
3140         } else if ( packet_id == CIGI3_PACKET_ID_START_OF_FRAME && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3141             hf_cigi3_packet = hf_cigi3_2_start_of_frame;
3142             packet_length = CIGI3_2_PACKET_SIZE_START_OF_FRAME;
3143         } else if ( packet_id == CIGI3_PACKET_ID_START_OF_FRAME ) {
3144             hf_cigi3_packet = hf_cigi3_start_of_frame;
3145             packet_length = CIGI3_PACKET_SIZE_START_OF_FRAME;
3146         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3147             hf_cigi3_packet = hf_cigi3_2_hat_hot_response;
3148             packet_length = CIGI3_2_PACKET_SIZE_HAT_HOT_RESPONSE;
3149         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_RESPONSE ) {
3150             hf_cigi3_packet = hf_cigi3_hat_hot_response;
3151             packet_length = CIGI3_PACKET_SIZE_HAT_HOT_RESPONSE;
3152         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3153             hf_cigi3_packet = hf_cigi3_2_hat_hot_extended_response;
3154             packet_length = CIGI3_2_PACKET_SIZE_HAT_HOT_EXTENDED_RESPONSE;
3155         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE ) {
3156             hf_cigi3_packet = hf_cigi3_hat_hot_extended_response;
3157             packet_length = CIGI3_PACKET_SIZE_HAT_HOT_EXTENDED_RESPONSE;
3158         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3159             hf_cigi3_packet = hf_cigi3_2_line_of_sight_response;
3160             packet_length = CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE;
3161         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_RESPONSE ) {
3162             hf_cigi3_packet = hf_cigi3_line_of_sight_response;
3163             packet_length = CIGI3_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE;
3164         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3165             hf_cigi3_packet = hf_cigi3_2_line_of_sight_extended_response;
3166             packet_length = CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_EXTENDED_RESPONSE;
3167         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE ) {
3168             hf_cigi3_packet = hf_cigi3_line_of_sight_extended_response;
3169             packet_length = CIGI3_PACKET_SIZE_LINE_OF_SIGHT_EXTENDED_RESPONSE;
3170         } else if ( packet_id == CIGI3_PACKET_ID_SENSOR_RESPONSE ) {
3171             hf_cigi3_packet = hf_cigi3_sensor_response;
3172             packet_length = CIGI3_PACKET_SIZE_SENSOR_RESPONSE;
3173         } else if ( packet_id == CIGI3_PACKET_ID_SENSOR_EXTENDED_RESPONSE ) {
3174             hf_cigi3_packet = hf_cigi3_sensor_extended_response;
3175             packet_length = CIGI3_PACKET_SIZE_SENSOR_EXTENDED_RESPONSE;
3176         } else if ( packet_id == CIGI3_PACKET_ID_POSITION_RESPONSE ) {
3177             hf_cigi3_packet = hf_cigi3_position_response;
3178             packet_length = CIGI3_PACKET_SIZE_POSITION_RESPONSE;
3179         } else if ( packet_id == CIGI3_PACKET_ID_WEATHER_CONDITIONS_RESPONSE ) {
3180             hf_cigi3_packet = hf_cigi3_weather_conditions_response;
3181             packet_length = CIGI3_PACKET_SIZE_WEATHER_CONDITIONS_RESPONSE;
3182         } else if ( packet_id == CIGI3_PACKET_ID_AEROSOL_CONCENTRATION_RESPONSE ) {
3183             hf_cigi3_packet = hf_cigi3_aerosol_concentration_response;
3184             packet_length = CIGI3_PACKET_SIZE_AEROSOL_CONCENTRATION_RESPONSE;
3185         } else if ( packet_id == CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_RESPONSE ) {
3186             hf_cigi3_packet = hf_cigi3_maritime_surface_conditions_response;
3187             packet_length = CIGI3_PACKET_SIZE_MARITIME_SURFACE_CONDITIONS_RESPONSE;
3188         } else if ( packet_id == CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE ) {
3189             hf_cigi3_packet = hf_cigi3_terrestrial_surface_conditions_response;
3190             packet_length = CIGI3_PACKET_SIZE_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE;
3191         } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_NOTIFICATION ) {
3192             hf_cigi3_packet = hf_cigi3_collision_detection_segment_notification;
3193             packet_length = CIGI3_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_NOTIFICATION;
3194         } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_NOTIFICATION ) {
3195             hf_cigi3_packet = hf_cigi3_collision_detection_volume_notification;
3196             packet_length = CIGI3_PACKET_SIZE_COLLISION_DETECTION_VOLUME_NOTIFICATION;
3197         } else if ( packet_id == CIGI3_PACKET_ID_ANIMATION_STOP_NOTIFICATION ) {
3198             hf_cigi3_packet = hf_cigi3_animation_stop_notification;
3199             packet_length = CIGI3_PACKET_SIZE_ANIMATION_STOP_NOTIFICATION;
3200         } else if ( packet_id == CIGI3_PACKET_ID_EVENT_NOTIFICATION ) {
3201             hf_cigi3_packet = hf_cigi3_event_notification;
3202             packet_length = CIGI3_PACKET_SIZE_EVENT_NOTIFICATION;
3203         } else if ( packet_id == CIGI3_PACKET_ID_IMAGE_GENERATOR_MESSAGE ) {
3204             hf_cigi3_packet = hf_cigi3_image_generator_message;
3205             packet_length = packet_size;
3206         } else if ( packet_id >= CIGI3_PACKET_ID_USER_DEFINED_MIN && packet_id <= CIGI3_PACKET_ID_USER_DEFINED_MAX ) {
3207             hf_cigi3_packet = hf_cigi3_user_defined;
3208             packet_length = packet_size;
3209         } else {
3210             hf_cigi3_packet = hf_cigi_unknown;
3211             packet_length = packet_size;
3212         }
3213         tipacket = proto_tree_add_string_format(cigi_tree, hf_cigi3_packet, tvb, offset, packet_length, NULL, "%s (%i bytes)", val_to_str(packet_id, cigi3_packet_id_vals, "Unknown"), packet_length);
3214
3215         cigi_packet_tree = proto_item_add_subtree(tipacket, ett_cigi);
3216
3217         /* In all CIGI versions the first byte of a packet is the packet ID.
3218          * The second byte is the size of the packet (in bytes). */
3219         init_offset = offset;
3220         proto_tree_add_item(cigi_packet_tree, hf_cigi3_packet_id, tvb, offset, 1, cigi_byte_order);
3221         offset++;
3222
3223         proto_tree_add_item(cigi_packet_tree, hf_cigi_packet_size, tvb, offset, 1, cigi_byte_order);
3224         offset++;
3225
3226         if ( packet_id == CIGI3_PACKET_ID_IG_CONTROL && cigi_minor_version == 2 ) {
3227             offset = cigi3_2_add_ig_control(tvb, cigi_packet_tree, offset);
3228         } else if ( packet_id == CIGI3_PACKET_ID_IG_CONTROL && cigi_minor_version == 3 ) {
3229             offset = cigi3_3_add_ig_control(tvb, cigi_packet_tree, offset);
3230         } else if ( packet_id == CIGI3_PACKET_ID_IG_CONTROL ) {
3231             offset = cigi3_add_ig_control(tvb, cigi_packet_tree, offset);
3232         } else if ( packet_id == CIGI3_PACKET_ID_ENTITY_CONTROL && cigi_minor_version == 3 ) {
3233             offset = cigi3_3_add_entity_control(tvb, cigi_packet_tree, offset);
3234         } else if ( packet_id == CIGI3_PACKET_ID_ENTITY_CONTROL ) {
3235             offset = cigi3_add_entity_control(tvb, cigi_packet_tree, offset);
3236         } else if ( packet_id == CIGI3_PACKET_ID_CONFORMAL_CLAMPED_ENTITY_CONTROL ) {
3237             offset = cigi3_add_conformal_clamped_entity_control(tvb, cigi_packet_tree, offset);
3238         } else if ( packet_id == CIGI3_PACKET_ID_COMPONENT_CONTROL && cigi_minor_version == 3) {
3239             offset = cigi3_3_add_component_control(tvb, cigi_packet_tree, offset);
3240         } else if ( packet_id == CIGI3_PACKET_ID_COMPONENT_CONTROL ) {
3241             offset = cigi3_add_component_control(tvb, cigi_packet_tree, offset);
3242         } else if ( packet_id == CIGI3_PACKET_ID_SHORT_COMPONENT_CONTROL && cigi_minor_version == 3 ) {
3243             offset = cigi3_3_add_short_component_control(tvb, cigi_packet_tree, offset);
3244         } else if ( packet_id == CIGI3_PACKET_ID_SHORT_COMPONENT_CONTROL ) {
3245             offset = cigi3_add_short_component_control(tvb, cigi_packet_tree, offset);
3246         } else if ( packet_id == CIGI3_PACKET_ID_ARTICULATED_PART_CONTROL ) {
3247             offset = cigi3_add_articulated_part_control(tvb, cigi_packet_tree, offset);
3248         } else if ( packet_id == CIGI3_PACKET_ID_SHORT_ARTICULATED_PART_CONTROL ) {
3249             offset = cigi3_add_short_articulated_part_control(tvb, cigi_packet_tree, offset);
3250         } else if ( packet_id == CIGI3_PACKET_ID_RATE_CONTROL && (cigi_minor_version == 2 || cigi_minor_version == 3)) {
3251             offset = cigi3_2_add_rate_control(tvb, cigi_packet_tree, offset);
3252         } else if ( packet_id == CIGI3_PACKET_ID_RATE_CONTROL ) {
3253             offset = cigi3_add_rate_control(tvb, cigi_packet_tree, offset);
3254         } else if ( packet_id == CIGI3_PACKET_ID_CELESTIAL_SPHERE_CONTROL ) {
3255             offset = cigi3_add_celestial_sphere_control(tvb, cigi_packet_tree, offset);
3256         } else if ( packet_id == CIGI3_PACKET_ID_ATMOSPHERE_CONTROL ) {
3257             offset = cigi3_add_atmosphere_control(tvb, cigi_packet_tree, offset);
3258         } else if ( packet_id == CIGI3_PACKET_ID_ENVIRONMENTAL_REGION_CONTROL ) {
3259             offset = cigi3_add_environmental_region_control(tvb, cigi_packet_tree, offset);
3260         } else if ( packet_id == CIGI3_PACKET_ID_WEATHER_CONTROL ) {
3261             offset = cigi3_add_weather_control(tvb, cigi_packet_tree, offset);
3262         } else if ( packet_id == CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_CONTROL ) {
3263             offset = cigi3_add_maritime_surface_conditions_control(tvb, cigi_packet_tree, offset);
3264         } else if ( packet_id == CIGI3_PACKET_ID_WAVE_CONTROL ) {
3265             offset = cigi3_add_wave_control(tvb, cigi_packet_tree, offset);
3266         } else if ( packet_id == CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL ) {
3267             offset = cigi3_add_terrestrial_surface_conditions_control(tvb, cigi_packet_tree, offset);
3268         } else if ( packet_id == CIGI3_PACKET_ID_VIEW_CONTROL ) {
3269             offset = cigi3_add_view_control(tvb, cigi_packet_tree, offset);
3270         } else if ( packet_id == CIGI3_PACKET_ID_SENSOR_CONTROL ) {
3271             offset = cigi3_add_sensor_control(tvb, cigi_packet_tree, offset);
3272         } else if ( packet_id == CIGI3_PACKET_ID_MOTION_TRACKER_CONTROL ) {
3273             offset = cigi3_add_motion_tracker_control(tvb, cigi_packet_tree, offset);
3274         } else if ( packet_id == CIGI3_PACKET_ID_EARTH_REFERENCE_MODEL_DEFINITION ) {
3275             offset = cigi3_add_earth_reference_model_definition(tvb, cigi_packet_tree, offset);
3276         } else if ( packet_id == CIGI3_PACKET_ID_TRAJECTORY_DEFINITION ) {
3277             offset = cigi3_add_trajectory_definition(tvb, cigi_packet_tree, offset);
3278         } else if ( packet_id == CIGI3_PACKET_ID_VIEW_DEFINITION ) {
3279             offset = cigi3_add_view_definition(tvb, cigi_packet_tree, offset);
3280         } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION ) {
3281             offset = cigi3_add_collision_detection_segment_definition(tvb, cigi_packet_tree, offset);
3282         } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION ) {
3283             offset = cigi3_add_collision_detection_volume_definition(tvb, cigi_packet_tree, offset);
3284         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_REQUEST && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3285             offset = cigi3_2_add_hat_hot_request(tvb, cigi_packet_tree, offset);
3286         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_REQUEST ) {
3287             offset = cigi3_add_hat_hot_request(tvb, cigi_packet_tree, offset);
3288         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3289             offset = cigi3_2_add_line_of_sight_segment_request(tvb, cigi_packet_tree, offset);
3290         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST ) {
3291             offset = cigi3_add_line_of_sight_segment_request(tvb, cigi_packet_tree, offset);
3292         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3293             offset = cigi3_2_add_line_of_sight_vector_request(tvb, cigi_packet_tree, offset);
3294         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST ) {
3295             offset = cigi3_add_line_of_sight_vector_request(tvb, cigi_packet_tree, offset);
3296         } else if ( packet_id == CIGI3_PACKET_ID_POSITION_REQUEST ) {
3297             offset = cigi3_add_position_request(tvb, cigi_packet_tree, offset);
3298         } else if ( packet_id == CIGI3_PACKET_ID_ENVIRONMENTAL_CONDITIONS_REQUEST ) {
3299             offset = cigi3_add_environmental_conditions_request(tvb, cigi_packet_tree, offset);
3300         } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_SURFACE_DEFINITION && cigi_minor_version == 3 ) {
3301             offset = cigi3_3_add_symbol_surface_definition(tvb, cigi_packet_tree, offset);
3302         } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_TEXT_DEFINITION && cigi_minor_version == 3 ) {
3303             offset = cigi3_3_add_symbol_text_definition(tvb, cigi_packet_tree, offset);
3304         } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_CIRCLE_DEFINITION && cigi_minor_version == 3 ) {
3305             offset = cigi3_3_add_symbol_circle_definition(tvb, cigi_packet_tree, offset);
3306         } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_LINE_DEFINITION && cigi_minor_version == 3 ) {
3307             offset = cigi3_3_add_symbol_line_definition(tvb, cigi_packet_tree, offset);
3308         } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_CLONE && cigi_minor_version == 3 ) {
3309             offset = cigi3_3_add_symbol_clone(tvb, cigi_packet_tree, offset);
3310         } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_CONTROL && cigi_minor_version == 3 ) {
3311             offset = cigi3_3_add_symbol_control(tvb, cigi_packet_tree, offset);
3312         } else if ( packet_id == CIGI3_PACKET_ID_SHORT_SYMBOL_CONTROL && cigi_minor_version == 3 ) {
3313             offset = cigi3_3_add_short_symbol_control(tvb, cigi_packet_tree, offset);
3314         } else if ( packet_id == CIGI3_PACKET_ID_START_OF_FRAME && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3315             offset = cigi3_2_add_start_of_frame(tvb, cigi_packet_tree, offset);
3316         } else if ( packet_id == CIGI3_PACKET_ID_START_OF_FRAME ) {
3317             offset = cigi3_add_start_of_frame(tvb, cigi_packet_tree, offset);
3318         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3)) {
3319             offset = cigi3_2_add_hat_hot_response(tvb, cigi_packet_tree, offset);
3320         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_RESPONSE ) {
3321             offset = cigi3_add_hat_hot_response(tvb, cigi_packet_tree, offset);
3322         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3)) {
3323             offset = cigi3_2_add_hat_hot_extended_response(tvb, cigi_packet_tree, offset);
3324         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE ) {
3325             offset = cigi3_add_hat_hot_extended_response(tvb, cigi_packet_tree, offset);
3326         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3)) {
3327             offset = cigi3_2_add_line_of_sight_response(tvb, cigi_packet_tree, offset);
3328         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_RESPONSE ) {
3329             offset = cigi3_add_line_of_sight_response(tvb, cigi_packet_tree, offset);
3330         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3)) {
3331             offset = cigi3_2_add_line_of_sight_extended_response(tvb, cigi_packet_tree, offset);
3332         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE ) {
3333             offset = cigi3_add_line_of_sight_extended_response(tvb, cigi_packet_tree, offset);
3334         } else if ( packet_id == CIGI3_PACKET_ID_SENSOR_RESPONSE ) {
3335             offset = cigi3_add_sensor_response(tvb, cigi_packet_tree, offset);
3336         } else if ( packet_id == CIGI3_PACKET_ID_SENSOR_EXTENDED_RESPONSE ) {
3337             offset = cigi3_add_sensor_extended_response(tvb, cigi_packet_tree, offset);
3338         } else if ( packet_id == CIGI3_PACKET_ID_POSITION_RESPONSE ) {
3339             offset = cigi3_add_position_response(tvb, cigi_packet_tree, offset);
3340         } else if ( packet_id == CIGI3_PACKET_ID_WEATHER_CONDITIONS_RESPONSE ) {
3341             offset = cigi3_add_weather_conditions_response(tvb, cigi_packet_tree, offset);
3342         } else if ( packet_id == CIGI3_PACKET_ID_AEROSOL_CONCENTRATION_RESPONSE ) {
3343             offset = cigi3_add_aerosol_concentration_response(tvb, cigi_packet_tree, offset);
3344         } else if ( packet_id == CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_RESPONSE ) {
3345             offset = cigi3_add_maritime_surface_conditions_response(tvb, cigi_packet_tree, offset);
3346         } else if ( packet_id == CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE ) {
3347             offset = cigi3_add_terrestrial_surface_conditions_response(tvb, cigi_packet_tree, offset);
3348         } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_NOTIFICATION ) {
3349             offset = cigi3_add_collision_detection_segment_notification(tvb, cigi_packet_tree, offset);
3350         } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_NOTIFICATION ) {
3351             offset = cigi3_add_collision_detection_volume_notification(tvb, cigi_packet_tree, offset);
3352         } else if ( packet_id == CIGI3_PACKET_ID_ANIMATION_STOP_NOTIFICATION ) {
3353             offset = cigi3_add_animation_stop_notification(tvb, cigi_packet_tree, offset);
3354         } else if ( packet_id == CIGI3_PACKET_ID_EVENT_NOTIFICATION ) {
3355             offset = cigi3_add_event_notification(tvb, cigi_packet_tree, offset);
3356         } else if ( packet_id == CIGI3_PACKET_ID_IMAGE_GENERATOR_MESSAGE ) {
3357             offset = cigi3_add_image_generator_message(tvb, cigi_packet_tree, offset);
3358         } else if ( packet_id >= CIGI3_PACKET_ID_USER_DEFINED_MIN && packet_id <= CIGI3_PACKET_ID_USER_DEFINED_MAX ) {
3359             offset = cigi_add_data(tvb, cigi_packet_tree, offset);
3360         } else {
3361             offset = cigi_add_data(tvb, cigi_packet_tree, offset);
3362         }
3363
3364         /* Does the packet offset match the supposed length of the packet? */
3365         DISSECTOR_ASSERT((offset - init_offset == packet_length) && "Packet offset does not match packet length");
3366     }
3367 }
3368
3369 /* CIGI2 IG Control */
3370 static gint
3371 cigi2_add_ig_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
3372 {
3373     proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3374     offset++;
3375
3376     proto_tree_add_item(tree, hf_cigi2_ig_control_db_number, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3377     offset++;
3378
3379     proto_tree_add_item(tree, hf_cigi2_ig_control_ig_mode, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3380     proto_tree_add_item(tree, hf_cigi2_ig_control_tracking_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3381     proto_tree_add_item(tree, hf_cigi2_ig_control_boresight, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3382     offset += 4;
3383
3384     proto_tree_add_item(tree, hf_cigi2_ig_control_frame_ctr, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3385     offset += 4;
3386
3387     proto_tree_add_item(tree, hf_cigi2_ig_control_time_tag, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3388     offset += 4;
3389
3390     return offset;
3391 }
3392
3393 /* CIGI2 Entity Control */
3394 static gint
3395 cigi2_add_entity_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
3396 {
3397     proto_tree_add_item(tree, hf_cigi2_entity_control_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3398     offset += 2;
3399
3400     proto_tree_add_item(tree, hf_cigi2_entity_control_entity_state, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3401     proto_tree_add_item(tree, hf_cigi2_entity_control_attach_state, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3402     proto_tree_add_item(tree, hf_cigi2_entity_control_collision_detect, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3403     proto_tree_add_item(tree, hf_cigi2_entity_control_effect_state, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3404     offset += 4;
3405
3406     proto_tree_add_item(tree, hf_cigi2_entity_control_type, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3407     offset += 2;
3408
3409     proto_tree_add_item(tree, hf_cigi2_entity_control_parent_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3410     offset += 2;
3411
3412     proto_tree_add_item(tree, hf_cigi2_entity_control_opacity, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3413     offset += 4;
3414
3415     proto_tree_add_item(tree, hf_cigi2_entity_control_internal_temp, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3416     offset += 4;
3417
3418     proto_tree_add_item(tree, hf_cigi2_entity_control_roll, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3419     offset += 4;
3420
3421     proto_tree_add_item(tree, hf_cigi2_entity_control_pitch, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3422     offset += 4;
3423
3424     proto_tree_add_item(tree, hf_cigi2_entity_control_heading, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3425     offset += 4;
3426
3427     proto_tree_add_item(tree, hf_cigi2_entity_control_alt, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3428     offset += 8;
3429
3430     proto_tree_add_item(tree, hf_cigi2_entity_control_lat, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3431     offset += 8;
3432
3433     proto_tree_add_item(tree, hf_cigi2_entity_control_lon, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3434     offset += 8;
3435
3436     return offset;
3437 }
3438
3439 /* CIGI2 Component Control */
3440 static gint
3441 cigi2_add_component_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
3442 {
3443     proto_tree_add_item(tree, hf_cigi2_component_control_instance_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3444     offset += 2;
3445
3446     proto_tree_add_item(tree, hf_cigi2_component_control_component_class, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3447     offset += 4;
3448
3449     proto_tree_add_item(tree, hf_cigi2_component_control_component_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3450     offset += 2;
3451
3452     proto_tree_add_item(tree, hf_cigi2_component_control_component_state, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3453     offset += 2;
3454
3455     proto_tree_add_item(tree, hf_cigi2_component_control_component_val1, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3456     offset += 4;
3457
3458     proto_tree_add_item(tree, hf_cigi2_component_control_component_val2, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3459     offset += 4;
3460
3461     return offset;
3462 }
3463
3464 /* CIGI2 Articulated Part Control */
3465 static gint
3466 cigi2_add_articulated_parts_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
3467 {
3468     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3469     offset += 2;
3470
3471     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_part_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3472     offset++;
3473
3474     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_part_state, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3475     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_xoff_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3476     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_yoff_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3477     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_zoff_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3478     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_roll_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3479     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_pitch_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3480     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_yaw_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3481     offset += 3;
3482
3483     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_x_offset, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3484     offset += 4;
3485
3486     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_y_offset, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3487     offset += 4;
3488
3489     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_z_offset, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3490     offset += 4;
3491
3492     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_roll, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3493     offset += 4;
3494
3495     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_pitch, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3496     offset += 4;
3497
3498     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_yaw, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3499     offset += 4;
3500
3501     return offset;
3502 }
3503
3504 /* CIGI2 Rate Control */
3505 static gint
3506 cigi2_add_rate_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
3507 {
3508     proto_tree_add_item(tree, hf_cigi2_rate_control_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3509     offset += 2;
3510
3511     proto_tree_add_item(tree, hf_cigi2_rate_control_part_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3512     offset += 4;
3513
3514     proto_tree_add_item(tree, hf_cigi2_rate_control_x_rate, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3515     offset += 4;
3516
3517     proto_tree_add_item(tree, hf_cigi2_rate_control_y_rate, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3518     offset += 4;
3519
3520     proto_tree_add_item(tree, hf_cigi2_rate_control_z_rate, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3521     offset += 4;
3522
3523     proto_tree_add_item(tree, hf_cigi2_rate_control_roll_rate, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3524     offset += 4;
3525
3526     proto_tree_add_item(tree, hf_cigi2_rate_control_pitch_rate, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3527     offset += 4;
3528
3529     proto_tree_add_item(tree, hf_cigi2_rate_control_yaw_rate, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3530     offset += 4;
3531
3532     return offset;
3533 }
3534
3535 /* CIGI2 Environment Control */
3536 static gint
3537 cigi2_add_environment_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
3538 {
3539     proto_tree_add_item(tree, hf_cigi2_environment_control_hour, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3540     offset++;
3541
3542     proto_tree_add_item(tree, hf_cigi2_environment_control_minute, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3543     offset++;
3544
3545     proto_tree_add_item(tree, hf_cigi2_environment_control_ephemeris_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3546     proto_tree_add_item(tree, hf_cigi2_environment_control_humidity, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3547     offset++;
3548
3549     proto_tree_add_item(tree, hf_cigi2_environment_control_modtran_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3550     offset += 3;
3551
3552     proto_tree_add_item(tree, hf_cigi2_environment_control_date, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3553     offset += 4;
3554
3555     proto_tree_add_item(tree, hf_cigi2_environment_control_air_temp, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3556     offset += 4;
3557
3558     proto_tree_add_item(tree, hf_cigi2_environment_control_global_visibility, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3559     offset += 4;
3560
3561     proto_tree_add_item(tree, hf_cigi2_environment_control_wind_speed, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3562     offset += 4;
3563
3564     proto_tree_add_item(tree, hf_cigi2_environment_control_wind_direction, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3565     offset += 4;
3566
3567     proto_tree_add_item(tree, hf_cigi2_environment_control_pressure, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3568     offset += 4;
3569
3570     proto_tree_add_item(tree, hf_cigi2_environment_control_aerosol, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3571     offset += 4;
3572
3573     return offset;
3574 }
3575
3576 /* CIGI2 Weather Control */
3577 static gint
3578 cigi2_add_weather_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
3579 {
3580     proto_tree_add_item(tree, hf_cigi2_weather_control_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3581     offset += 2;
3582
3583     proto_tree_add_item(tree, hf_cigi2_weather_control_weather_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3584     proto_tree_add_item(tree, hf_cigi2_weather_control_scud_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3585     proto_tree_add_item(tree, hf_cigi2_weather_control_random_winds, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3586     proto_tree_add_item(tree, hf_cigi2_weather_control_severity, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3587     offset += 2;
3588
3589     proto_tree_add_item(tree, hf_cigi2_weather_control_phenomenon_type, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3590     offset += 2;
3591
3592     proto_tree_add_item(tree, hf_cigi2_weather_control_air_temp, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3593     offset += 4;
3594
3595     proto_tree_add_item(tree, hf_cigi2_weather_control_opacity, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3596     offset += 4;
3597
3598     proto_tree_add_item(tree, hf_cigi2_weather_control_scud_frequency, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3599     offset += 4;
3600
3601     proto_tree_add_item(tree, hf_cigi2_weather_control_coverage, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3602     offset += 4;
3603
3604     proto_tree_add_item(tree, hf_cigi2_weather_control_elevation, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3605     offset += 4;
3606
3607     proto_tree_add_item(tree, hf_cigi2_weather_control_thickness, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3608     offset += 4;
3609
3610     proto_tree_add_item(tree, hf_cigi2_weather_control_transition_band, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3611     offset += 4;
3612
3613     proto_tree_add_item(tree, hf_cigi2_weather_control_wind_speed, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3614     offset += 4;
3615
3616     proto_tree_add_item(tree, hf_cigi2_weather_control_wind_direction, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3617     offset += 4;
3618
3619     return offset;
3620 }
3621
3622 /* CIGI2 View Control */
3623 static gint
3624 cigi2_add_view_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
3625 {
3626     proto_tree_add_item(tree, hf_cigi2_view_control_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3627     offset += 2;
3628
3629     proto_tree_add_item(tree, hf_cigi2_view_control_view_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3630     proto_tree_add_item(tree, hf_cigi2_view_control_view_group, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3631     offset++;
3632
3633     proto_tree_add_item(tree, hf_cigi2_view_control_xoff_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3634     proto_tree_add_item(tree, hf_cigi2_view_control_yoff_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3635     proto_tree_add_item(tree, hf_cigi2_view_control_zoff_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3636     proto_tree_add_item(tree, hf_cigi2_view_control_roll_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3637     proto_tree_add_item(tree, hf_cigi2_view_control_pitch_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3638     proto_tree_add_item(tree, hf_cigi2_view_control_yaw_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3639     offset += 3;
3640
3641     proto_tree_add_item(tree, hf_cigi2_view_control_x_offset, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3642     offset += 4;
3643
3644     proto_tree_add_item(tree, hf_cigi2_view_control_y_offset, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3645     offset += 4;
3646
3647     proto_tree_add_item(tree, hf_cigi2_view_control_z_offset, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3648     offset += 4;
3649
3650     proto_tree_add_item(tree, hf_cigi2_view_control_roll, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3651     offset += 4;
3652
3653     proto_tree_add_item(tree, hf_cigi2_view_control_pitch, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3654     offset += 4;
3655
3656     proto_tree_add_item(tree, hf_cigi2_view_control_yaw, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3657     offset += 4;
3658
3659     return offset;
3660 }
3661
3662 /* CIGI2 Sensor Control */
3663 static gint
3664 cigi2_add_sensor_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
3665 {
3666     proto_tree_add_item(tree, hf_cigi2_sensor_control_view_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3667     proto_tree_add_item(tree, hf_cigi2_sensor_control_sensor_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3668     proto_tree_add_item(tree, hf_cigi2_sensor_control_polarity, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3669     proto_tree_add_item(tree, hf_cigi2_sensor_control_line_dropout, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3670     offset++;
3671
3672     proto_tree_add_item(tree, hf_cigi2_sensor_control_sensor_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3673     offset++;
3674
3675     proto_tree_add_item(tree, hf_cigi2_sensor_control_track_mode, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3676     proto_tree_add_item(tree, hf_cigi2_sensor_control_auto_gain, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3677     proto_tree_add_item(tree, hf_cigi2_sensor_control_track_polarity, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3678     offset += 4;
3679
3680     proto_tree_add_item(tree, hf_cigi2_sensor_control_gain, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3681     offset += 4;
3682
3683     proto_tree_add_item(tree, hf_cigi2_sensor_control_level, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3684     offset += 4;
3685
3686     proto_tree_add_item(tree, hf_cigi2_sensor_control_ac_coupling, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3687     offset += 4;
3688
3689     proto_tree_add_item(tree, hf_cigi2_sensor_control_noise, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3690     offset += 4;
3691
3692     return offset;
3693 }
3694
3695 /* CIGI2 Trajectory Definition */
3696 static gint
3697 cigi2_add_trajectory_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
3698 {
3699     proto_tree_add_item(tree, hf_cigi2_trajectory_definition_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3700     offset += 2;
3701
3702     proto_tree_add_item(tree, hf_cigi2_trajectory_definition_acceleration, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3703     offset += 4;
3704
3705     proto_tree_add_item(tree, hf_cigi2_trajectory_definition_retardation, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3706     offset += 4;
3707
3708     proto_tree_add_item(tree, hf_cigi2_trajectory_definition_terminal_velocity, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3709     offset += 4;
3710
3711     return offset;
3712 }
3713
3714 /* CIGI2 Special Effect Definition */
3715 static gint
3716 cigi2_add_special_effect_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
3717 {
3718     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3719     offset += 2;
3720
3721     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_seq_direction, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3722     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_color_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3723     offset++;
3724
3725     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_red, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3726     offset++;
3727
3728     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_green, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3729     offset++;
3730
3731     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_blue, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3732     offset++;
3733
3734     proto_tree_add_float(tree, hf_cigi2_special_effect_definition_x_scale, tvb, offset, 2, tvb_get_fixed_point(tvb, offset, CIGI_BYTE_ORDER_BIG_ENDIAN));
3735     offset += 2;
3736
3737     proto_tree_add_float(tree, hf_cigi2_special_effect_definition_y_scale, tvb, offset, 2, tvb_get_fixed_point(tvb, offset, CIGI_BYTE_ORDER_BIG_ENDIAN));
3738     offset += 2;
3739
3740     proto_tree_add_float(tree, hf_cigi2_special_effect_definition_z_scale, tvb, offset, 2, tvb_get_fixed_point(tvb, offset, CIGI_BYTE_ORDER_BIG_ENDIAN));
3741     offset += 2;
3742
3743     proto_tree_add_float(tree, hf_cigi2_special_effect_definition_time_scale, tvb, offset, 2, tvb_get_fixed_point(tvb, offset, CIGI_BYTE_ORDER_BIG_ENDIAN));
3744     offset += 2;
3745
3746     proto_tree_add_text(tree, tvb, offset, 2, "Spare");
3747     offset += 2;
3748
3749     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_effect_count, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3750     offset += 2;
3751
3752     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_separation, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3753     offset += 4;
3754
3755     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_burst_interval, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3756     offset += 4;
3757
3758     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_duration, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3759     offset += 4;
3760
3761     return offset;
3762 }
3763
3764 /* CIGI2 View Definition */
3765 static gint
3766 cigi2_add_view_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
3767 {
3768     proto_tree_add_item(tree, hf_cigi2_view_definition_view_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3769     proto_tree_add_item(tree, hf_cigi2_view_definition_view_group, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3770     offset++;
3771
3772     proto_tree_add_item(tree, hf_cigi2_view_definition_view_type, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3773     proto_tree_add_item(tree, hf_cigi2_view_definition_pixel_rep, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3774     proto_tree_add_item(tree, hf_cigi2_view_definition_mirror, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3775     offset++;
3776
3777     proto_tree_add_item(tree, hf_cigi2_view_definition_tracker_assign, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3778     proto_tree_add_item(tree, hf_cigi2_view_definition_near_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3779     proto_tree_add_item(tree, hf_cigi2_view_definition_far_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3780     proto_tree_add_item(tree, hf_cigi2_view_definition_left_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3781     proto_tree_add_item(tree, hf_cigi2_view_definition_right_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3782     proto_tree_add_item(tree, hf_cigi2_view_definition_top_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3783     proto_tree_add_item(tree, hf_cigi2_view_definition_bottom_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3784     offset += 4;
3785
3786     proto_tree_add_item(tree, hf_cigi2_view_definition_fov_near, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3787     offset += 4;
3788
3789     proto_tree_add_item(tree, hf_cigi2_view_definition_fov_far, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3790     offset += 4;
3791
3792     proto_tree_add_item(tree, hf_cigi2_view_definition_fov_left, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3793     offset += 4;
3794
3795     proto_tree_add_item(tree, hf_cigi2_view_definition_fov_right, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3796     offset += 4;
3797
3798     proto_tree_add_item(tree, hf_cigi2_view_definition_fov_top, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3799     offset += 4;
3800
3801     proto_tree_add_item(tree, hf_cigi2_view_definition_fov_bottom, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3802     offset += 4;
3803
3804     return offset;
3805 }
3806
3807 /* CIGI2 Collision Detection Segment Definition */
3808 static gint
3809 cigi2_add_collision_detection_segment_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
3810 {
3811     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_definition_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3812     offset += 2;
3813
3814     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_definition_segment_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3815     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_definition_segment_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3816     offset += 4;
3817
3818     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_definition_collision_mask, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3819     offset += 4;
3820
3821     proto_tree_add_float(tree, hf_cigi2_collision_detection_segment_definition_x_start, tvb, offset, 2, tvb_get_fixed_point(tvb, offset, CIGI_BYTE_ORDER_BIG_ENDIAN));
3822     offset += 2;
3823
3824     proto_tree_add_float(tree, hf_cigi2_collision_detection_segment_definition_y_start, tvb, offset, 2, tvb_get_fixed_point(tvb, offset, CIGI_BYTE_ORDER_BIG_ENDIAN));
3825     offset += 2;
3826
3827     proto_tree_add_float(tree, hf_cigi2_collision_detection_segment_definition_z_start, tvb, offset, 2, tvb_get_fixed_point(tvb, offset, CIGI_BYTE_ORDER_BIG_ENDIAN));
3828     offset += 2;
3829
3830     proto_tree_add_float(tree, hf_cigi2_collision_detection_segment_definition_x_end, tvb, offset, 2, tvb_get_fixed_point(tvb, offset, CIGI_BYTE_ORDER_BIG_ENDIAN));
3831     offset += 2;
3832
3833     proto_tree_add_float(tree, hf_cigi2_collision_detection_segment_definition_y_end, tvb, offset, 2, tvb_get_fixed_point(tvb, offset, CIGI_BYTE_ORDER_BIG_ENDIAN));
3834     offset += 2;
3835
3836     proto_tree_add_float(tree, hf_cigi2_collision_detection_segment_definition_z_end, tvb, offset, 2, tvb_get_fixed_point(tvb, offset, CIGI_BYTE_ORDER_BIG_ENDIAN));
3837     offset += 2;
3838
3839     return offset;
3840 }
3841
3842 /* CIGI2 Collision Detection Volume Definition*/
3843 static gint
3844 cigi2_add_collision_detection_volume_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
3845 {
3846     proto_tree_add_item(tree, hf_cigi2_collision_detection_volume_definition_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3847     offset += 2;
3848
3849     proto_tree_add_item(tree, hf_cigi2_collision_detection_volume_definition_volume_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3850     proto_tree_add_item(tree, hf_cigi2_collision_detection_volume_definition_volume_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3851     offset += 4;
3852
3853     proto_tree_add_float(tree, hf_cigi2_collision_detection_volume_definition_x_offset, tvb, offset, 2, tvb_get_fixed_point(tvb, offset, CIGI_BYTE_ORDER_BIG_ENDIAN));
3854     offset += 2;
3855
3856     proto_tree_add_float(tree, hf_cigi2_collision_detection_volume_definition_y_offset, tvb, offset, 2, tvb_get_fixed_point(tvb, offset, CIGI_BYTE_ORDER_BIG_ENDIAN));
3857     offset += 2;
3858
3859     proto_tree_add_float(tree, hf_cigi2_collision_detection_volume_definition_z_offset, tvb, offset, 2, tvb_get_fixed_point(tvb, offset, CIGI_BYTE_ORDER_BIG_ENDIAN));
3860     offset += 2;
3861
3862     proto_tree_add_float(tree, hf_cigi2_collision_detection_volume_definition_height, tvb, offset, 2, tvb_get_fixed_point(tvb, offset, CIGI_BYTE_ORDER_BIG_ENDIAN));
3863     offset += 2;
3864
3865     proto_tree_add_float(tree, hf_cigi2_collision_detection_volume_definition_width, tvb, offset, 2, tvb_get_fixed_point(tvb, offset, CIGI_BYTE_ORDER_BIG_ENDIAN));
3866     offset += 2;
3867
3868     proto_tree_add_float(tree, hf_cigi2_collision_detection_volume_definition_depth, tvb, offset, 2, tvb_get_fixed_point(tvb, offset, CIGI_BYTE_ORDER_BIG_ENDIAN));
3869     offset += 2;
3870
3871     return offset;
3872 }
3873
3874 /* CIGI2 Height Above Terrain Request*/
3875 static gint
3876 cigi2_add_height_above_terrain_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
3877 {
3878     proto_tree_add_item(tree, hf_cigi2_height_above_terrain_request_hat_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3879     offset += 6;
3880
3881     proto_tree_add_item(tree, hf_cigi2_height_above_terrain_request_alt, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3882     offset += 8;
3883
3884     proto_tree_add_item(tree, hf_cigi2_height_above_terrain_request_lat, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3885     offset += 8;
3886
3887     proto_tree_add_item(tree, hf_cigi2_height_above_terrain_request_lon, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3888     offset += 8;
3889
3890     return offset;
3891 }
3892
3893 /* CIGI2 Line of Sight Occult Request */
3894 static gint
3895 cigi2_add_line_of_sight_occult_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
3896 {
3897     proto_tree_add_item(tree, hf_cigi2_line_of_sight_occult_request_los_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3898     offset += 6;
3899
3900     proto_tree_add_item(tree, hf_cigi2_line_of_sight_occult_request_source_alt, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3901     offset += 8;
3902
3903     proto_tree_add_item(tree, hf_cigi2_line_of_sight_occult_request_source_lat, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3904     offset += 8;
3905
3906     proto_tree_add_item(tree, hf_cigi2_line_of_sight_occult_request_source_lon, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3907     offset += 8;
3908
3909     proto_tree_add_item(tree, hf_cigi2_line_of_sight_occult_request_dest_alt, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3910     offset += 8;
3911
3912     proto_tree_add_item(tree, hf_cigi2_line_of_sight_occult_request_dest_lat, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3913     offset += 8;
3914
3915     proto_tree_add_item(tree, hf_cigi2_line_of_sight_occult_request_dest_lon, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3916     offset += 8;
3917
3918     return offset;
3919 }
3920
3921 /* CIGI2 Line of Sight Range Request */
3922 static gint
3923 cigi2_add_line_of_sight_range_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
3924 {
3925     proto_tree_add_item(tree, hf_cigi2_line_of_sight_range_request_los_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3926     offset += 2;
3927
3928     proto_tree_add_item(tree, hf_cigi2_line_of_sight_range_request_azimuth, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3929     offset += 4;
3930
3931     proto_tree_add_item(tree, hf_cigi2_line_of_sight_range_request_elevation, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3932     offset += 8;
3933
3934     proto_tree_add_item(tree, hf_cigi2_line_of_sight_range_request_min_range, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3935     offset += 4;
3936
3937     proto_tree_add_item(tree, hf_cigi2_line_of_sight_range_request_max_range, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3938     offset += 4;
3939
3940     proto_tree_add_item(tree, hf_cigi2_line_of_sight_range_request_source_alt, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3941     offset += 8;
3942
3943     proto_tree_add_item(tree, hf_cigi2_line_of_sight_range_request_source_lat, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3944     offset += 8;
3945
3946     proto_tree_add_item(tree, hf_cigi2_line_of_sight_range_request_source_lon, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3947     offset += 8;
3948
3949     return offset;
3950 }
3951
3952 /* CIGI2 Height of Terrain Request */
3953 static gint
3954 cigi2_add_height_of_terrain_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
3955 {
3956     proto_tree_add_item(tree, hf_cigi2_height_of_terrain_request_hot_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3957     offset += 6;
3958
3959     proto_tree_add_item(tree, hf_cigi2_height_of_terrain_request_lat, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3960     offset += 8;
3961
3962     proto_tree_add_item(tree, hf_cigi2_height_of_terrain_request_lon, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3963     offset += 8;
3964
3965     return offset;
3966 }
3967
3968 /* CIGI2 Start of Frame */
3969 static gint
3970 cigi2_add_start_of_frame(tvbuff_t *tvb, proto_tree *tree, gint offset)
3971 {
3972     proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3973     offset++;
3974
3975     proto_tree_add_item(tree, hf_cigi2_start_of_frame_db_number, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3976     offset++;
3977
3978     proto_tree_add_item(tree, hf_cigi2_start_of_frame_ig_status_code, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3979     offset++;
3980
3981     proto_tree_add_item(tree, hf_cigi2_start_of_frame_ig_mode, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3982     offset += 3;
3983
3984     proto_tree_add_item(tree, hf_cigi2_start_of_frame_frame_ctr, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3985     offset += 4;
3986
3987     proto_tree_add_item(tree, hf_cigi2_start_of_frame_time_tag, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3988     offset += 4;
3989
3990     return offset;
3991 }
3992
3993 /* CIGI2 Height Above Terrain Response */
3994 static gint
3995 cigi2_add_height_above_terrain_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
3996 {
3997     proto_tree_add_item(tree, hf_cigi2_height_above_terrain_response_hat_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3998     offset += 2;
3999
4000     proto_tree_add_item(tree, hf_cigi2_height_above_terrain_response_valid, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4001     offset += 8;
4002
4003     proto_tree_add_item(tree, hf_cigi2_height_above_terrain_response_material_type, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
4004     offset += 4;
4005
4006     proto_tree_add_item(tree, hf_cigi2_height_above_terrain_response_alt, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
4007     offset += 8;
4008
4009     return offset;
4010 }
4011
4012 /* CIGI2 Line of Sight Response */
4013 static gint
4014 cigi2_add_line_of_sight_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
4015 {
4016     proto_tree_add_item(tree, hf_cigi2_line_of_sight_response_los_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4017     offset += 2;
4018
4019     proto_tree_add_item(tree, hf_cigi2_line_of_sight_response_valid, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4020     proto_tree_add_item(tree, hf_cigi2_line_of_sight_response_occult_response, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4021     offset += 4;
4022
4023     proto_tree_add_item(tree, hf_cigi2_line_of_sight_response_material_type, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
4024     offset += 4;
4025
4026     proto_tree_add_item(tree, hf_cigi2_line_of_sight_response_range, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
4027     offset += 4;
4028
4029     proto_tree_add_item(tree, hf_cigi2_line_of_sight_response_alt, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
4030     offset += 8;
4031
4032     proto_tree_add_item(tree, hf_cigi2_line_of_sight_response_lat, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
4033     offset += 8;
4034
4035     proto_tree_add_item(tree, hf_cigi2_line_of_sight_response_lon, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
4036     offset += 8;
4037
4038     return offset;
4039 }
4040
4041 /* CIGI2 Collision Detection Segment Response */
4042 static gint
4043 cigi2_add_collision_detection_segment_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
4044 {
4045     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_response_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4046     offset += 2;
4047
4048     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_response_segment_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4049     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_response_contact, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4050     offset += 2;
4051
4052     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_response_contacted_entity, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4053     offset += 2;
4054
4055     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_response_material_type, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
4056     offset += 4;
4057
4058     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_response_collision_x, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
4059     offset += 4;
4060
4061     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_response_collision_y, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
4062     offset += 4;
4063
4064     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_response_collision_z, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
4065     offset += 4;
4066
4067     return offset;
4068 }
4069
4070 /* CIGI2 Sensor Response */
4071 static gint
4072 cigi2_add_sensor_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
4073 {
4074     proto_tree_add_item(tree, hf_cigi2_sensor_response_view_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4075     proto_tree_add_item(tree, hf_cigi2_sensor_response_status, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4076     offset++;
4077
4078     proto_tree_add_item(tree, hf_cigi2_sensor_response_sensor_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4079     offset++;
4080
4081     proto_tree_add_item(tree, hf_cigi2_sensor_response_x_offset, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4082     offset += 2;
4083
4084     proto_tree_add_item(tree, hf_cigi2_sensor_response_y_offset, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4085     offset += 2;
4086
4087     proto_tree_add_item(tree, hf_cigi2_sensor_response_x_size, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4088     offset += 2;
4089
4090     proto_tree_add_item(tree, hf_cigi2_sensor_response_y_size, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4091     offset += 2;
4092
4093     return offset;
4094 }
4095
4096 /* CIGI2 Height of Terrain Response */
4097 static gint
4098 cigi2_add_height_of_terrain_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
4099 {
4100     proto_tree_add_item(tree, hf_cigi2_height_of_terrain_response_hot_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4101     offset += 2;
4102
4103     proto_tree_add_item(tree, hf_cigi2_height_of_terrain_response_valid, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4104     offset += 8;
4105
4106     proto_tree_add_item(tree, hf_cigi2_height_of_terrain_response_material_type, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
4107     offset += 4;
4108
4109     proto_tree_add_item(tree, hf_cigi2_height_of_terrain_response_alt, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
4110     offset += 8;
4111
4112     return offset;
4113 }
4114
4115 /* CIGI2 Collision Detection Volume Response */
4116 static gint
4117 cigi2_add_collision_detection_volume_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
4118 {
4119     proto_tree_add_item(tree, hf_cigi2_collision_detection_volume_response_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4120     offset += 2;
4121
4122     proto_tree_add_item(tree, hf_cigi2_collision_detection_volume_response_volume_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4123     proto_tree_add_item(tree, hf_cigi2_collision_detection_volume_response_contact, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4124     offset += 2;
4125
4126     proto_tree_add_item(tree, hf_cigi2_collision_detection_volume_response_contact_entity, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4127     offset += 2;
4128
4129     return offset;
4130 }
4131
4132 /* CIGI2 Image Generator Message */
4133 static gint
4134 cigi2_add_image_generator_message(tvbuff_t *tvb, proto_tree *tree, gint offset)
4135 {
4136     guint8 packet_size = 0;
4137
4138     packet_size = tvb_get_guint8(tvb, offset-1);
4139
4140     /* An image generator packet cannot be less than 4 bytes ( because every cigi packet
4141      * has a packet id (1 byte) and a packet size (1 byte) ). */
4142     if ( packet_size < 4 ) {
4143         THROW(ReportedBoundsError);
4144     }
4145
4146     proto_tree_add_item(tree, hf_cigi2_image_generator_message_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4147     offset += 2;
4148
4149     proto_tree_add_item(tree, hf_cigi2_image_generator_message_message, tvb, offset, packet_size-4, CIGI_BYTE_ORDER_BIG_ENDIAN);
4150     offset += packet_size-4;
4151
4152     return offset;
4153 }
4154
4155 /* CIGI3 IG Control */
4156 static gint
4157 cigi3_add_ig_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4158 {
4159     proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, cigi_byte_order);
4160     offset++;
4161
4162     proto_tree_add_item(tree, hf_cigi3_ig_control_db_number, tvb, offset, 1, cigi_byte_order);
4163     offset++;
4164
4165     proto_tree_add_item(tree, hf_cigi3_ig_control_ig_mode, tvb, offset, 1, cigi_byte_order);
4166     proto_tree_add_item(tree, hf_cigi3_ig_control_timestamp_valid, tvb, offset, 1, cigi_byte_order);
4167     offset += 2;
4168
4169     /* Get the Byte Swap in Big-Endian so that we can display whether the value
4170      * is big-endian or little-endian to the user */
4171     proto_tree_add_item(tree, hf_cigi3_byte_swap, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4172     offset += 2;
4173
4174     proto_tree_add_item(tree, hf_cigi3_ig_control_frame_ctr, tvb, offset, 4, cigi_byte_order);
4175     offset += 4;
4176
4177     proto_tree_add_item(tree, hf_cigi3_ig_control_timestamp, tvb, offset, 4, cigi_byte_order);
4178     offset += 4;
4179
4180     return offset;
4181 }
4182
4183 /* CIGI3_2 IG Control */
4184 static gint
4185 cigi3_2_add_ig_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4186 {
4187     proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, cigi_byte_order);
4188     offset++;
4189
4190     proto_tree_add_item(tree, hf_cigi3_2_ig_control_db_number, tvb, offset, 1, cigi_byte_order);
4191     offset++;
4192
4193     proto_tree_add_item(tree, hf_cigi3_2_ig_control_ig_mode, tvb, offset, 1, cigi_byte_order);
4194     proto_tree_add_item(tree, hf_cigi3_2_ig_control_timestamp_valid, tvb, offset, 1, cigi_byte_order);
4195     offset += 2;
4196
4197     /* Get the Byte Swap in Big-Endian so that we can display whether the value
4198      * is big-endian or little-endian to the user */
4199     proto_tree_add_item(tree, hf_cigi3_byte_swap, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4200     offset += 2;
4201
4202     proto_tree_add_item(tree, hf_cigi3_2_ig_control_host_frame_number, tvb, offset, 4, cigi_byte_order);
4203     offset += 4;
4204
4205     proto_tree_add_item(tree, hf_cigi3_2_ig_control_timestamp, tvb, offset, 4, cigi_byte_order);
4206     offset += 4;
4207
4208     proto_tree_add_item(tree, hf_cigi3_2_ig_control_last_ig_frame_number, tvb, offset, 4, cigi_byte_order);
4209     offset += 8;
4210
4211     return offset;
4212 }
4213
4214 /* CIGI3_3 IG Control */
4215 static gint
4216 cigi3_3_add_ig_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4217 {
4218     proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, cigi_byte_order);
4219     offset++;
4220
4221     proto_tree_add_item(tree, hf_cigi3_3_ig_control_db_number, tvb, offset, 1, cigi_byte_order);
4222     offset++;
4223
4224     proto_tree_add_item(tree, hf_cigi3_3_ig_control_ig_mode, tvb, offset, 1, cigi_byte_order);
4225     proto_tree_add_item(tree, hf_cigi3_3_ig_control_timestamp_valid, tvb, offset, 1, cigi_byte_order);
4226     proto_tree_add_item(tree, hf_cigi3_3_ig_control_extrapolation_enable, tvb, offset, 1, cigi_byte_order);
4227     proto_tree_add_item(tree, hf_cigi3_3_ig_control_minor_version, tvb, offset, 1, cigi_byte_order);
4228     offset += 2;
4229
4230     /* Get the Byte Swap in Big-Endian so that we can display whether the value
4231      * is big-endian or little-endian to the user */
4232     proto_tree_add_item(tree, hf_cigi3_byte_swap, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4233     offset += 2;
4234
4235     proto_tree_add_item(tree, hf_cigi3_2_ig_control_host_frame_number, tvb, offset, 4, cigi_byte_order);
4236     offset += 4;
4237
4238     proto_tree_add_item(tree, hf_cigi3_2_ig_control_timestamp, tvb, offset, 4, cigi_byte_order);
4239     offset += 4;
4240
4241     proto_tree_add_item(tree, hf_cigi3_2_ig_control_last_ig_frame_number, tvb, offset, 4, cigi_byte_order);
4242     offset += 8;
4243
4244     return offset;
4245 }
4246
4247 /* CIGI3 Entity Control */
4248 static gint
4249 cigi3_add_entity_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4250 {
4251     proto_tree_add_item(tree, hf_cigi3_entity_control_entity_id, tvb, offset, 2, cigi_byte_order);
4252     offset += 2;
4253
4254     proto_tree_add_item(tree, hf_cigi3_entity_control_entity_state, tvb, offset, 1, cigi_byte_order);
4255     proto_tree_add_item(tree, hf_cigi3_entity_control_attach_state, tvb, offset, 1, cigi_byte_order);
4256     proto_tree_add_item(tree, hf_cigi3_entity_control_collision_detection_request, tvb, offset, 1, cigi_byte_order);
4257     proto_tree_add_item(tree, hf_cigi3_entity_control_inherit_alpha, tvb, offset, 1, cigi_byte_order);
4258     proto_tree_add_item(tree, hf_cigi3_entity_control_ground_ocean_clamp, tvb, offset, 1, cigi_byte_order);
4259     offset++;
4260
4261     proto_tree_add_item(tree, hf_cigi3_entity_control_animation_direction, tvb, offset, 1, cigi_byte_order);
4262     proto_tree_add_item(tree, hf_cigi3_entity_control_animation_loop_mode, tvb, offset, 1, cigi_byte_order);
4263     proto_tree_add_item(tree, hf_cigi3_entity_control_animation_state, tvb, offset, 1, cigi_byte_order);
4264     offset++;
4265
4266     proto_tree_add_item(tree, hf_cigi3_entity_control_alpha, tvb, offset, 1, cigi_byte_order);
4267     offset += 2;
4268
4269     proto_tree_add_item(tree, hf_cigi3_entity_control_entity_type, tvb, offset, 2, cigi_byte_order);
4270     offset += 2;
4271
4272     proto_tree_add_item(tree, hf_cigi3_entity_control_parent_id, tvb, offset, 2, cigi_byte_order);
4273     offset += 2;
4274
4275     proto_tree_add_item(tree, hf_cigi3_entity_control_roll, tvb, offset, 4, cigi_byte_order);
4276     offset += 4;
4277
4278     proto_tree_add_item(tree, hf_cigi3_entity_control_pitch, tvb, offset, 4, cigi_byte_order);
4279     offset += 4;
4280
4281     proto_tree_add_item(tree, hf_cigi3_entity_control_yaw, tvb, offset, 4, cigi_byte_order);
4282     offset += 4;
4283
4284     proto_tree_add_item(tree, hf_cigi3_entity_control_lat_xoff, tvb, offset, 8, cigi_byte_order);
4285     offset += 8;
4286
4287     proto_tree_add_item(tree, hf_cigi3_entity_control_lon_yoff, tvb, offset, 8, cigi_byte_order);
4288     offset += 8;
4289
4290     proto_tree_add_item(tree, hf_cigi3_entity_control_alt_zoff, tvb, offset, 8, cigi_byte_order);
4291     offset += 8;
4292
4293     return offset;
4294 }
4295
4296 /* CIGI3_3 Entity Control */
4297 static gint
4298 cigi3_3_add_entity_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4299 {
4300     proto_tree_add_item(tree, hf_cigi3_3_entity_control_entity_id, tvb, offset, 2, cigi_byte_order);
4301     offset += 2;
4302
4303     proto_tree_add_item(tree, hf_cigi3_3_entity_control_entity_state, tvb, offset, 1, cigi_byte_order);
4304     proto_tree_add_item(tree, hf_cigi3_3_entity_control_attach_state, tvb, offset, 1, cigi_byte_order);
4305     proto_tree_add_item(tree, hf_cigi3_3_entity_control_collision_detection_request, tvb, offset, 1, cigi_byte_order);
4306     proto_tree_add_item(tree, hf_cigi3_3_entity_control_inherit_alpha, tvb, offset, 1, cigi_byte_order);
4307     proto_tree_add_item(tree, hf_cigi3_3_entity_control_ground_ocean_clamp, tvb, offset, 1, cigi_byte_order);
4308     offset++;
4309
4310     proto_tree_add_item(tree, hf_cigi3_3_entity_control_animation_direction, tvb, offset, 1, cigi_byte_order);
4311     proto_tree_add_item(tree, hf_cigi3_3_entity_control_animation_loop_mode, tvb, offset, 1, cigi_byte_order);
4312     proto_tree_add_item(tree, hf_cigi3_3_entity_control_animation_state, tvb, offset, 1, cigi_byte_order);
4313     proto_tree_add_item(tree, hf_cigi3_3_entity_control_extrapolation_enable, tvb, offset, 1, cigi_byte_order);
4314     offset++;
4315
4316     proto_tree_add_item(tree, hf_cigi3_3_entity_control_alpha, tvb, offset, 1, cigi_byte_order);
4317     offset += 2;
4318
4319     proto_tree_add_item(tree, hf_cigi3_3_entity_control_entity_type, tvb, offset, 2, cigi_byte_order);
4320     offset += 2;
4321
4322     proto_tree_add_item(tree, hf_cigi3_3_entity_control_parent_id, tvb, offset, 2, cigi_byte_order);
4323     offset += 2;
4324
4325     proto_tree_add_item(tree, hf_cigi3_3_entity_control_roll, tvb, offset, 4, cigi_byte_order);
4326     offset += 4;
4327
4328     proto_tree_add_item(tree, hf_cigi3_3_entity_control_pitch, tvb, offset, 4, cigi_byte_order);
4329     offset += 4;
4330
4331     proto_tree_add_item(tree, hf_cigi3_3_entity_control_yaw, tvb, offset, 4, cigi_byte_order);
4332     offset += 4;
4333
4334     proto_tree_add_item(tree, hf_cigi3_3_entity_control_lat_xoff, tvb, offset, 8, cigi_byte_order);
4335     offset += 8;
4336
4337     proto_tree_add_item(tree, hf_cigi3_3_entity_control_lon_yoff, tvb, offset, 8, cigi_byte_order);
4338     offset += 8;
4339
4340     proto_tree_add_item(tree, hf_cigi3_3_entity_control_alt_zoff, tvb, offset, 8, cigi_byte_order);
4341     offset += 8;
4342
4343     return offset;
4344 }
4345
4346 /* CIGI3 Conformal Clamped Entity Control */
4347 static gint
4348 cigi3_add_conformal_clamped_entity_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4349 {
4350     proto_tree_add_item(tree, hf_cigi3_conformal_clamped_entity_control_entity_id, tvb, offset, 2, cigi_byte_order);
4351     offset += 2;
4352
4353     proto_tree_add_item(tree, hf_cigi3_conformal_clamped_entity_control_yaw, tvb, offset, 4, cigi_byte_order);
4354     offset += 4;
4355
4356     proto_tree_add_item(tree, hf_cigi3_conformal_clamped_entity_control_lat, tvb, offset, 8, cigi_byte_order);
4357     offset += 8;
4358
4359     proto_tree_add_item(tree, hf_cigi3_conformal_clamped_entity_control_lon, tvb, offset, 8, cigi_byte_order);
4360     offset += 8;
4361
4362     return offset;
4363 }
4364
4365 /* CIGI3 Component Control */
4366 static gint
4367 cigi3_add_component_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4368 {
4369     proto_tree_add_item(tree, hf_cigi3_component_control_component_id, tvb, offset, 2, cigi_byte_order);
4370     offset += 2;
4371
4372     proto_tree_add_item(tree, hf_cigi3_component_control_instance_id, tvb, offset, 2, cigi_byte_order);
4373     offset += 2;
4374
4375     proto_tree_add_item(tree, hf_cigi3_component_control_component_class, tvb, offset, 1, cigi_byte_order);
4376     offset++;
4377
4378     proto_tree_add_item(tree, hf_cigi3_component_control_component_state, tvb, offset, 1, cigi_byte_order);
4379     offset++;
4380
4381     proto_tree_add_item(tree, hf_cigi3_component_control_data_1, tvb, offset, 4, cigi_byte_order);
4382     offset += 4;
4383
4384     proto_tree_add_item(tree, hf_cigi3_component_control_data_2, tvb, offset, 4, cigi_byte_order);
4385     offset += 4;
4386
4387     proto_tree_add_item(tree, hf_cigi3_component_control_data_3, tvb, offset, 4, cigi_byte_order);
4388     offset += 4;
4389
4390     proto_tree_add_item(tree, hf_cigi3_component_control_data_4, tvb, offset, 4, cigi_byte_order);
4391     offset += 4;
4392
4393     proto_tree_add_item(tree, hf_cigi3_component_control_data_5, tvb, offset, 4, cigi_byte_order);
4394     offset += 4;
4395
4396     proto_tree_add_item(tree, hf_cigi3_component_control_data_6, tvb, offset, 4, cigi_byte_order);
4397     offset += 4;
4398
4399     return offset;
4400 }
4401
4402 /* CIGI3_3 Component Control */
4403 static gint
4404 cigi3_3_add_component_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4405 {
4406     proto_tree_add_item(tree, hf_cigi3_3_component_control_component_id, tvb, offset, 2, cigi_byte_order);
4407     offset += 2;
4408
4409     proto_tree_add_item(tree, hf_cigi3_3_component_control_instance_id, tvb, offset, 2, cigi_byte_order);
4410     offset += 2;
4411
4412     proto_tree_add_item(tree, hf_cigi3_3_component_control_component_class, tvb, offset, 1, cigi_byte_order);
4413     offset++;
4414
4415     proto_tree_add_item(tree, hf_cigi3_3_component_control_component_state, tvb, offset, 1, cigi_byte_order);
4416     offset++;
4417
4418     proto_tree_add_item(tree, hf_cigi3_3_component_control_data_1, tvb, offset, 4, cigi_byte_order);
4419     offset += 4;
4420
4421     proto_tree_add_item(tree, hf_cigi3_3_component_control_data_2, tvb, offset, 4, cigi_byte_order);
4422     offset += 4;
4423
4424     proto_tree_add_item(tree, hf_cigi3_3_component_control_data_3, tvb, offset, 4, cigi_byte_order);
4425     offset += 4;
4426
4427     proto_tree_add_item(tree, hf_cigi3_3_component_control_data_4, tvb, offset, 4, cigi_byte_order);
4428     offset += 4;
4429
4430     proto_tree_add_item(tree, hf_cigi3_3_component_control_data_5, tvb, offset, 4, cigi_byte_order);
4431     offset += 4;
4432
4433     proto_tree_add_item(tree, hf_cigi3_3_component_control_data_6, tvb, offset, 4, cigi_byte_order);
4434     offset += 4;
4435
4436     return offset;
4437 }
4438
4439 /* CIGI3 Short Component Control */
4440 static gint
4441 cigi3_add_short_component_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4442 {
4443     proto_tree_add_item(tree, hf_cigi3_short_component_control_component_id, tvb, offset, 2, cigi_byte_order);
4444     offset += 2;
4445
4446     proto_tree_add_item(tree, hf_cigi3_short_component_control_instance_id, tvb, offset, 2, cigi_byte_order);
4447     offset += 2;
4448
4449     proto_tree_add_item(tree, hf_cigi3_short_component_control_component_class, tvb, offset, 1, cigi_byte_order);
4450     offset++;
4451
4452     proto_tree_add_item(tree, hf_cigi3_short_component_control_component_state, tvb, offset, 1, cigi_byte_order);
4453     offset++;
4454
4455     proto_tree_add_item(tree, hf_cigi3_short_component_control_data_1, tvb, offset, 4, cigi_byte_order);
4456     offset += 4;
4457
4458     proto_tree_add_item(tree, hf_cigi3_short_component_control_data_2, tvb, offset, 4, cigi_byte_order);
4459     offset += 4;
4460
4461     return offset;
4462 }
4463
4464 /* CIGI3_3 Short Component Control */
4465 static gint
4466 cigi3_3_add_short_component_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4467 {
4468     proto_tree_add_item(tree, hf_cigi3_3_short_component_control_component_id, tvb, offset, 2, cigi_byte_order);
4469     offset += 2;
4470
4471     proto_tree_add_item(tree, hf_cigi3_3_short_component_control_instance_id, tvb, offset, 2, cigi_byte_order);
4472     offset += 2;
4473
4474     proto_tree_add_item(tree, hf_cigi3_3_short_component_control_component_class, tvb, offset, 1, cigi_byte_order);
4475     offset++;
4476
4477     proto_tree_add_item(tree, hf_cigi3_3_short_component_control_component_state, tvb, offset, 1, cigi_byte_order);
4478     offset++;
4479
4480     proto_tree_add_item(tree, hf_cigi3_3_short_component_control_data_1, tvb, offset, 4, cigi_byte_order);
4481     offset += 4;
4482
4483     proto_tree_add_item(tree, hf_cigi3_3_short_component_control_data_2, tvb, offset, 4, cigi_byte_order);
4484     offset += 4;
4485
4486     return offset;
4487 }
4488
4489 /* CIGI3 Articulated Part Control */
4490 static gint
4491 cigi3_add_articulated_part_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4492 {
4493     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_entity_id, tvb, offset, 2, cigi_byte_order);
4494     offset += 2;
4495
4496     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_part_id, tvb, offset, 1, cigi_byte_order);
4497     offset++;
4498
4499     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_part_enable, tvb, offset, 1, cigi_byte_order);
4500     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_xoff_enable, tvb, offset, 1, cigi_byte_order);
4501     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_yoff_enable, tvb, offset, 1, cigi_byte_order);
4502     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_zoff_enable, tvb, offset, 1, cigi_byte_order);
4503     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_roll_enable, tvb, offset, 1, cigi_byte_order);
4504     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_pitch_enable, tvb, offset, 1, cigi_byte_order);
4505     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_yaw_enable, tvb, offset, 1, cigi_byte_order);
4506     offset += 3;
4507
4508     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_xoff, tvb, offset, 4, cigi_byte_order);
4509     offset += 4;
4510
4511     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_yoff, tvb, offset, 4, cigi_byte_order);
4512     offset += 4;
4513
4514     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_zoff, tvb, offset, 4, cigi_byte_order);
4515     offset += 4;
4516
4517     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_roll, tvb, offset, 4, cigi_byte_order);
4518     offset += 4;
4519
4520     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_pitch, tvb, offset, 4, cigi_byte_order);
4521     offset += 4;
4522
4523     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_yaw, tvb, offset, 4, cigi_byte_order);
4524     offset += 4;
4525
4526     return offset;
4527 }
4528
4529 /* CIGI3 Short Articulated Part Control */
4530 static gint
4531 cigi3_add_short_articulated_part_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4532 {
4533     proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_entity_id, tvb, offset, 2, cigi_byte_order);
4534     offset += 2;
4535
4536     proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_part_id_1, tvb, offset, 1, cigi_byte_order);
4537     offset++;
4538
4539     proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_part_id_2, tvb, offset, 1, cigi_byte_order);
4540     offset++;
4541
4542     proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_dof_select_1, tvb, offset, 1, cigi_byte_order);
4543     proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_dof_select_2, tvb, offset, 1, cigi_byte_order);
4544     proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_part_enable_1, tvb, offset, 1, cigi_byte_order);
4545     proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_part_enable_2, tvb, offset, 1, cigi_byte_order);
4546     offset += 2;
4547
4548     proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_dof_1, tvb, offset, 4, cigi_byte_order);
4549     offset += 4;
4550
4551     proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_dof_2, tvb, offset, 4, cigi_byte_order);
4552     offset += 4;
4553
4554     return offset;
4555 }
4556
4557 /* CIGI3 Rate Control */
4558 static gint
4559 cigi3_add_rate_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4560 {
4561     proto_tree_add_item(tree, hf_cigi3_rate_control_entity_id, tvb, offset, 2, cigi_byte_order);
4562     offset += 2;
4563
4564     proto_tree_add_item(tree, hf_cigi3_rate_control_part_id, tvb, offset, 1, cigi_byte_order);
4565     offset++;
4566
4567     proto_tree_add_item(tree, hf_cigi3_rate_control_apply_to_part, tvb, offset, 1, cigi_byte_order);
4568     offset += 3;
4569
4570     proto_tree_add_item(tree, hf_cigi3_rate_control_x_rate, tvb, offset, 4, cigi_byte_order);
4571     offset += 4;
4572
4573     proto_tree_add_item(tree, hf_cigi3_rate_control_y_rate, tvb, offset, 4, cigi_byte_order);
4574     offset += 4;
4575
4576     proto_tree_add_item(tree, hf_cigi3_rate_control_z_rate, tvb, offset, 4, cigi_byte_order);
4577     offset += 4;
4578
4579     proto_tree_add_item(tree, hf_cigi3_rate_control_roll_rate, tvb, offset, 4, cigi_byte_order);
4580     offset += 4;
4581
4582     proto_tree_add_item(tree, hf_cigi3_rate_control_pitch_rate, tvb, offset, 4, cigi_byte_order);
4583     offset += 4;
4584
4585     proto_tree_add_item(tree, hf_cigi3_rate_control_yaw_rate, tvb, offset, 4, cigi_byte_order);
4586     offset += 4;
4587
4588     return offset;
4589 }
4590
4591 /* CIGI3_2 Rate Control */
4592 static gint
4593 cigi3_2_add_rate_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4594 {
4595     proto_tree_add_item(tree, hf_cigi3_2_rate_control_entity_id, tvb, offset, 2, cigi_byte_order);
4596     offset += 2;
4597
4598     proto_tree_add_item(tree, hf_cigi3_2_rate_control_part_id, tvb, offset, 1, cigi_byte_order);
4599     offset++;
4600
4601     proto_tree_add_item(tree, hf_cigi3_2_rate_control_apply_to_part, tvb, offset, 1, cigi_byte_order);
4602     proto_tree_add_item(tree, hf_cigi3_2_rate_control_coordinate_system, tvb, offset, 1, cigi_byte_order);
4603     offset += 3;
4604
4605     proto_tree_add_item(tree, hf_cigi3_2_rate_control_x_rate, tvb, offset, 4, cigi_byte_order);
4606     offset += 4;
4607
4608     proto_tree_add_item(tree, hf_cigi3_2_rate_control_y_rate, tvb, offset, 4, cigi_byte_order);
4609     offset += 4;
4610
4611     proto_tree_add_item(tree, hf_cigi3_2_rate_control_z_rate, tvb, offset, 4, cigi_byte_order);
4612     offset += 4;
4613
4614     proto_tree_add_item(tree, hf_cigi3_2_rate_control_roll_rate, tvb, offset, 4, cigi_byte_order);
4615     offset += 4;
4616
4617     proto_tree_add_item(tree, hf_cigi3_2_rate_control_pitch_rate, tvb, offset, 4, cigi_byte_order);
4618     offset += 4;
4619
4620     proto_tree_add_item(tree, hf_cigi3_2_rate_control_yaw_rate, tvb, offset, 4, cigi_byte_order);
4621     offset += 4;
4622
4623     return offset;
4624 }
4625
4626 /* CIGI3 Celestial Sphere Control */
4627 static gint
4628 cigi3_add_celestial_sphere_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4629 {
4630     proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_hour, tvb, offset, 1, cigi_byte_order);
4631     offset++;
4632
4633     proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_minute, tvb, offset, 1, cigi_byte_order);
4634     offset++;
4635
4636     proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_ephemeris_enable, tvb, offset, 1, cigi_byte_order);
4637     proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_sun_enable, tvb, offset, 1, cigi_byte_order);
4638     proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_moon_enable, tvb, offset, 1, cigi_byte_order);
4639     proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_star_enable, tvb, offset, 1, cigi_byte_order);
4640     proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_date_time_valid, tvb, offset, 1, cigi_byte_order);
4641     offset += 4;
4642
4643     proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_date, tvb, offset, 4, cigi_byte_order);
4644     offset += 4;
4645
4646     proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_star_intensity, tvb, offset, 4, cigi_byte_order);
4647     offset += 4;
4648
4649     return offset;
4650 }
4651
4652 /* CIGI3 Atmosphere Control */
4653 static gint
4654 cigi3_add_atmosphere_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4655 {
4656     proto_tree_add_item(tree, hf_cigi3_atmosphere_control_atmospheric_model_enable, tvb, offset, 1, cigi_byte_order);
4657     offset++;
4658
4659     proto_tree_add_item(tree, hf_cigi3_atmosphere_control_humidity, tvb, offset, 1, cigi_byte_order);
4660     offset++;
4661
4662     proto_tree_add_item(tree, hf_cigi3_atmosphere_control_air_temp, tvb, offset, 4, cigi_byte_order);
4663     offset += 4;
4664
4665     proto_tree_add_item(tree, hf_cigi3_atmosphere_control_visibility_range, tvb, offset, 4, cigi_byte_order);
4666     offset += 4;
4667
4668     proto_tree_add_item(tree, hf_cigi3_atmosphere_control_horiz_wind, tvb, offset, 4, cigi_byte_order);
4669     offset += 4;
4670
4671     proto_tree_add_item(tree, hf_cigi3_atmosphere_control_vert_wind, tvb, offset, 4, cigi_byte_order);
4672     offset += 4;
4673
4674     proto_tree_add_item(tree, hf_cigi3_atmosphere_control_wind_direction, tvb, offset, 4, cigi_byte_order);
4675     offset += 4;
4676
4677     proto_tree_add_item(tree, hf_cigi3_atmosphere_control_barometric_pressure, tvb, offset, 4, cigi_byte_order);
4678     offset += 8;
4679
4680     return offset;
4681 }
4682
4683 /* CIGI3 Environmental Region Control */
4684 static gint
4685 cigi3_add_environmental_region_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4686 {
4687     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_region_id, tvb, offset, 2, cigi_byte_order);
4688     offset += 2;
4689
4690     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_region_state, tvb, offset, 1, cigi_byte_order);
4691     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_merge_weather, tvb, offset, 1, cigi_byte_order);
4692     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_merge_aerosol, tvb, offset, 1, cigi_byte_order);
4693     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_merge_maritime, tvb, offset, 1, cigi_byte_order);
4694     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_merge_terrestrial, tvb, offset, 1, cigi_byte_order);
4695     offset += 4;
4696
4697     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_lat, tvb, offset, 8, cigi_byte_order);
4698     offset += 8;
4699
4700     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_lon, tvb, offset, 8, cigi_byte_order);
4701     offset += 8;
4702
4703     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_size_x, tvb, offset, 4, cigi_byte_order);
4704     offset += 4;
4705
4706     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_size_y, tvb, offset, 4, cigi_byte_order);
4707     offset += 4;
4708
4709     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_corner_radius, tvb, offset, 4, cigi_byte_order);
4710     offset += 4;
4711
4712     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_rotation, tvb, offset, 4, cigi_byte_order);
4713     offset += 4;
4714
4715     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_transition_perimeter, tvb, offset, 4, cigi_byte_order);
4716     offset += 8;
4717
4718     return offset;
4719 }
4720
4721 /* CIGI3 Weather Control */
4722 static gint
4723 cigi3_add_weather_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4724 {
4725     proto_tree_add_item(tree, hf_cigi3_weather_control_entity_region_id, tvb, offset, 2, cigi_byte_order);
4726     offset += 2;
4727
4728     proto_tree_add_item(tree, hf_cigi3_weather_control_layer_id, tvb, offset, 1, cigi_byte_order);
4729     offset++;
4730
4731     proto_tree_add_item(tree, hf_cigi3_weather_control_humidity, tvb, offset, 1, cigi_byte_order);
4732     offset++;
4733
4734     proto_tree_add_item(tree, hf_cigi3_weather_control_weather_enable, tvb, offset, 1, cigi_byte_order);
4735     proto_tree_add_item(tree, hf_cigi3_weather_control_scud_enable, tvb, offset, 1, cigi_byte_order);
4736     proto_tree_add_item(tree, hf_cigi3_weather_control_random_winds_enable, tvb, offset, 1, cigi_byte_order);
4737     proto_tree_add_item(tree, hf_cigi3_weather_control_random_lightning_enable, tvb, offset, 1, cigi_byte_order);
4738     proto_tree_add_item(tree, hf_cigi3_weather_control_cloud_type, tvb, offset, 1, cigi_byte_order);
4739     offset++;
4740
4741     proto_tree_add_item(tree, hf_cigi3_weather_control_scope, tvb, offset, 1, cigi_byte_order);
4742     proto_tree_add_item(tree, hf_cigi3_weather_control_severity, tvb, offset, 1, cigi_byte_order);
4743     offset++;
4744
4745     proto_tree_add_item(tree, hf_cigi3_weather_control_air_temp, tvb, offset, 4, cigi_byte_order);
4746     offset += 4;
4747
4748     proto_tree_add_item(tree, hf_cigi3_weather_control_visibility_range, tvb, offset, 4, cigi_byte_order);
4749     offset += 4;
4750
4751     proto_tree_add_item(tree, hf_cigi3_weather_control_scud_frequency, tvb, offset, 4, cigi_byte_order);
4752     offset += 4;
4753
4754     proto_tree_add_item(tree, hf_cigi3_weather_control_coverage, tvb, offset, 4, cigi_byte_order);
4755     offset += 4;
4756
4757     proto_tree_add_item(tree, hf_cigi3_weather_control_base_elevation, tvb, offset, 4, cigi_byte_order);
4758     offset += 4;
4759
4760     proto_tree_add_item(tree, hf_cigi3_weather_control_thickness, tvb, offset, 4, cigi_byte_order);
4761     offset += 4;
4762
4763     proto_tree_add_item(tree, hf_cigi3_weather_control_transition_band, tvb, offset, 4, cigi_byte_order);
4764     offset += 4;
4765
4766     proto_tree_add_item(tree, hf_cigi3_weather_control_horiz_wind, tvb, offset, 4, cigi_byte_order);
4767     offset += 4;
4768
4769     proto_tree_add_item(tree, hf_cigi3_weather_control_vert_wind, tvb, offset, 4, cigi_byte_order);
4770     offset += 4;
4771
4772     proto_tree_add_item(tree, hf_cigi3_weather_control_wind_direction, tvb, offset, 4, cigi_byte_order);
4773     offset += 4;
4774
4775     proto_tree_add_item(tree, hf_cigi3_weather_control_barometric_pressure, tvb, offset, 4, cigi_byte_order);
4776     offset += 4;
4777
4778     proto_tree_add_item(tree, hf_cigi3_weather_control_aerosol_concentration, tvb, offset, 4, cigi_byte_order);
4779     offset += 4;
4780
4781     return offset;
4782 }
4783
4784 /* CIGI3 Maritime Surface Conditions Control */
4785 static gint
4786 cigi3_add_maritime_surface_conditions_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4787 {
4788     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_entity_region_id, tvb, offset, 2, cigi_byte_order);
4789     offset += 2;
4790
4791     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_surface_conditions_enable, tvb, offset, 1, cigi_byte_order);
4792     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_whitecap_enable, tvb, offset, 1, cigi_byte_order);
4793     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_scope, tvb, offset, 1, cigi_byte_order);
4794     offset += 4;
4795
4796     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_sea_surface_height, tvb, offset, 4, cigi_byte_order);
4797     offset += 4;
4798
4799     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_surface_water_temp, tvb, offset, 4, cigi_byte_order);
4800     offset += 4;
4801
4802     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_surface_clarity, tvb, offset, 4, cigi_byte_order);
4803     offset += 8;
4804
4805     return offset;
4806 }
4807
4808 /* CIGI3 Wave Control */
4809 static gint
4810 cigi3_add_wave_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4811 {
4812     proto_tree_add_item(tree, hf_cigi3_wave_control_entity_region_id, tvb, offset, 2, cigi_byte_order);
4813     offset += 2;
4814
4815     proto_tree_add_item(tree, hf_cigi3_wave_control_wave_id, tvb, offset, 1, cigi_byte_order);
4816     offset++;
4817
4818     proto_tree_add_item(tree, hf_cigi3_wave_control_wave_enable, tvb, offset, 1, cigi_byte_order);
4819     proto_tree_add_item(tree, hf_cigi3_wave_control_scope, tvb, offset, 1, cigi_byte_order);
4820     proto_tree_add_item(tree, hf_cigi3_wave_control_breaker_type, tvb, offset, 1, cigi_byte_order);
4821     offset += 3;
4822
4823     proto_tree_add_item(tree, hf_cigi3_wave_control_height, tvb, offset, 4, cigi_byte_order);
4824     offset += 4;
4825
4826     proto_tree_add_item(tree, hf_cigi3_wave_control_wavelength, tvb, offset, 4, cigi_byte_order);
4827     offset += 4;
4828
4829     proto_tree_add_item(tree, hf_cigi3_wave_control_period, tvb, offset, 4, cigi_byte_order);
4830     offset += 4;
4831
4832     proto_tree_add_item(tree, hf_cigi3_wave_control_direction, tvb, offset, 4, cigi_byte_order);
4833     offset += 4;
4834
4835     proto_tree_add_item(tree, hf_cigi3_wave_control_phase_offset, tvb, offset, 4, cigi_byte_order);
4836     offset += 4;
4837
4838     proto_tree_add_item(tree, hf_cigi3_wave_control_leading, tvb, offset, 4, cigi_byte_order);
4839     offset += 4;
4840
4841     return offset;
4842 }
4843
4844 /* CIGI3 Terrestrial Surface Conditions Control */
4845 static gint
4846 cigi3_add_terrestrial_surface_conditions_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4847 {
4848     proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_control_entity_region_id, tvb, offset, 2, cigi_byte_order);
4849     offset += 2;
4850
4851     proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_control_surface_condition_id, tvb, offset, 2, cigi_byte_order);
4852     offset += 2;
4853
4854     proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_control_surface_condition_enable, tvb, offset, 1, cigi_byte_order);
4855     proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_control_scope, tvb, offset, 1, cigi_byte_order);
4856     proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_control_severity, tvb, offset, 1, cigi_byte_order);
4857     offset++;
4858
4859     proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_control_coverage, tvb, offset, 1, cigi_byte_order);
4860     offset++;
4861
4862     return offset;
4863 }
4864
4865 /* CIGI3 View Control */
4866 static gint
4867 cigi3_add_view_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4868 {
4869     proto_tree_add_item(tree, hf_cigi3_view_control_view_id, tvb, offset, 2, cigi_byte_order);
4870     offset += 2;
4871
4872     proto_tree_add_item(tree, hf_cigi3_view_control_group_id, tvb, offset, 1, cigi_byte_order);
4873     offset++;
4874
4875     proto_tree_add_item(tree, hf_cigi3_view_control_xoff_enable, tvb, offset, 1, cigi_byte_order);
4876     proto_tree_add_item(tree, hf_cigi3_view_control_yoff_enable, tvb, offset, 1, cigi_byte_order);
4877     proto_tree_add_item(tree, hf_cigi3_view_control_zoff_enable, tvb, offset, 1, cigi_byte_order);
4878     proto_tree_add_item(tree, hf_cigi3_view_control_roll_enable, tvb, offset, 1, cigi_byte_order);
4879     proto_tree_add_item(tree, hf_cigi3_view_control_pitch_enable, tvb, offset, 1, cigi_byte_order);
4880     proto_tree_add_item(tree, hf_cigi3_view_control_yaw_enable, tvb, offset, 1, cigi_byte_order);
4881     offset++;
4882
4883     proto_tree_add_item(tree, hf_cigi3_view_control_entity_id, tvb, offset, 2, cigi_byte_order);
4884     offset += 2;
4885
4886     proto_tree_add_item(tree, hf_cigi3_view_control_xoff, tvb, offset, 4, cigi_byte_order);
4887     offset += 4;
4888
4889     proto_tree_add_item(tree, hf_cigi3_view_control_yoff, tvb, offset, 4, cigi_byte_order);
4890     offset += 4;
4891
4892     proto_tree_add_item(tree, hf_cigi3_view_control_zoff, tvb, offset, 4, cigi_byte_order);
4893     offset += 4;
4894
4895     proto_tree_add_item(tree, hf_cigi3_view_control_roll, tvb, offset, 4, cigi_byte_order);
4896     offset += 4;
4897
4898     proto_tree_add_item(tree, hf_cigi3_view_control_pitch, tvb, offset, 4, cigi_byte_order);
4899     offset += 4;
4900
4901     proto_tree_add_item(tree, hf_cigi3_view_control_yaw, tvb, offset, 4, cigi_byte_order);
4902     offset += 4;
4903
4904     return offset;
4905 }
4906
4907 /* CIGI3 Sensor Control */
4908 static gint
4909 cigi3_add_sensor_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4910 {
4911     proto_tree_add_item(tree, hf_cigi3_sensor_control_view_id, tvb, offset, 2, cigi_byte_order);
4912     offset += 2;
4913
4914     proto_tree_add_item(tree, hf_cigi3_sensor_control_sensor_id, tvb, offset, 1, cigi_byte_order);
4915     offset++;
4916
4917     proto_tree_add_item(tree, hf_cigi3_sensor_control_sensor_on_off, tvb, offset, 1, cigi_byte_order);
4918     proto_tree_add_item(tree, hf_cigi3_sensor_control_polarity, tvb, offset, 1, cigi_byte_order);
4919     proto_tree_add_item(tree, hf_cigi3_sensor_control_line_dropout_enable, tvb, offset, 1, cigi_byte_order);
4920     proto_tree_add_item(tree, hf_cigi3_sensor_control_auto_gain, tvb, offset, 1, cigi_byte_order);
4921     proto_tree_add_item(tree, hf_cigi3_sensor_control_track_white_black, tvb, offset, 1, cigi_byte_order);
4922     proto_tree_add_item(tree, hf_cigi3_sensor_control_track_mode, tvb, offset, 1, cigi_byte_order);
4923     offset++;
4924
4925     proto_tree_add_item(tree, hf_cigi3_sensor_control_response_type, tvb, offset, 1, cigi_byte_order);
4926     offset += 2;
4927
4928     proto_tree_add_item(tree, hf_cigi3_sensor_control_gain, tvb, offset, 4, cigi_byte_order);
4929     offset += 4;
4930
4931     proto_tree_add_item(tree, hf_cigi3_sensor_control_level, tvb, offset, 4, cigi_byte_order);
4932     offset += 4;
4933
4934     proto_tree_add_item(tree, hf_cigi3_sensor_control_ac_coupling, tvb, offset, 4, cigi_byte_order);
4935     offset += 4;
4936
4937     proto_tree_add_item(tree, hf_cigi3_sensor_control_noise, tvb, offset, 4, cigi_byte_order);
4938     offset += 4;
4939
4940     return offset;
4941 }
4942
4943 /* CIGI3 Motion Tracker Control */
4944 static gint
4945 cigi3_add_motion_tracker_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4946 {
4947     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_view_group_id, tvb, offset, 2, cigi_byte_order);
4948     offset += 2;
4949
4950     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_tracker_id, tvb, offset, 1, cigi_byte_order);
4951     offset++;
4952
4953     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_tracker_enable, tvb, offset, 1, cigi_byte_order);
4954     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_boresight_enable, tvb, offset, 1, cigi_byte_order);
4955     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_x_enable, tvb, offset, 1, cigi_byte_order);
4956     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_y_enable, tvb, offset, 1, cigi_byte_order);
4957     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_z_enable, tvb, offset, 1, cigi_byte_order);
4958     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_roll_enable, tvb, offset, 1, cigi_byte_order);
4959     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_pitch_enable, tvb, offset, 1, cigi_byte_order);
4960     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_yaw_enable, tvb, offset, 1, cigi_byte_order);
4961     offset++;
4962
4963     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_view_group_select, tvb, offset, 1, cigi_byte_order);
4964     offset += 2;
4965
4966     return offset;
4967 }
4968
4969 /* CIGI3 Earth Reference Model Definition */
4970 static gint
4971 cigi3_add_earth_reference_model_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
4972 {
4973     proto_tree_add_item(tree, hf_cigi3_earth_reference_model_definition_erm_enable, tvb, offset, 1, cigi_byte_order);
4974     offset += 6;
4975
4976     proto_tree_add_item(tree, hf_cigi3_earth_reference_model_definition_equatorial_radius, tvb, offset, 8, cigi_byte_order);
4977     offset += 8;
4978
4979     proto_tree_add_item(tree, hf_cigi3_earth_reference_model_definition_flattening, tvb, offset, 8, cigi_byte_order);
4980     offset += 8;
4981
4982     return offset;
4983 }
4984
4985 /* CIGI3 Trajectory Definition */
4986 static gint
4987 cigi3_add_trajectory_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
4988 {
4989     proto_tree_add_item(tree, hf_cigi3_trajectory_definition_entity_id, tvb, offset, 2, cigi_byte_order);
4990     offset += 2;
4991
4992     proto_tree_add_item(tree, hf_cigi3_trajectory_definition_acceleration_x, tvb, offset, 4, cigi_byte_order);
4993     offset += 4;
4994
4995     proto_tree_add_item(tree, hf_cigi3_trajectory_definition_acceleration_y, tvb, offset, 4, cigi_byte_order);
4996     offset += 4;
4997
4998     proto_tree_add_item(tree, hf_cigi3_trajectory_definition_acceleration_z, tvb, offset, 4, cigi_byte_order);
4999     offset += 4;
5000
5001     proto_tree_add_item(tree, hf_cigi3_trajectory_definition_retardation_rate, tvb, offset, 4, cigi_byte_order);
5002     offset += 4;
5003
5004     proto_tree_add_item(tree, hf_cigi3_trajectory_definition_terminal_velocity, tvb, offset, 4, cigi_byte_order);
5005     offset += 4;
5006
5007     return offset;
5008 }
5009
5010 /* CIGI3 View Definition */
5011 static gint
5012 cigi3_add_view_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
5013 {
5014     proto_tree_add_item(tree, hf_cigi3_view_definition_view_id, tvb, offset, 2, cigi_byte_order);
5015     offset += 2;
5016
5017     proto_tree_add_item(tree, hf_cigi3_view_definition_group_id, tvb, offset, 1, cigi_byte_order);
5018     offset++;
5019
5020     proto_tree_add_item(tree, hf_cigi3_view_definition_near_enable, tvb, offset, 1, cigi_byte_order);
5021     proto_tree_add_item(tree, hf_cigi3_view_definition_far_enable, tvb, offset, 1, cigi_byte_order);
5022     proto_tree_add_item(tree, hf_cigi3_view_definition_left_enable, tvb, offset, 1, cigi_byte_order);
5023     proto_tree_add_item(tree, hf_cigi3_view_definition_right_enable, tvb, offset, 1, cigi_byte_order);
5024     proto_tree_add_item(tree, hf_cigi3_view_definition_top_enable, tvb, offset, 1, cigi_byte_order);
5025     proto_tree_add_item(tree, hf_cigi3_view_definition_bottom_enable, tvb, offset, 1, cigi_byte_order);
5026     proto_tree_add_item(tree, hf_cigi3_view_definition_mirror_mode, tvb, offset, 1, cigi_byte_order);
5027     offset++;
5028
5029     proto_tree_add_item(tree, hf_cigi3_view_definition_pixel_replication, tvb, offset, 1, cigi_byte_order);
5030     proto_tree_add_item(tree, hf_cigi3_view_definition_projection_type, tvb, offset, 1, cigi_byte_order);
5031     proto_tree_add_item(tree, hf_cigi3_view_definition_reorder, tvb, offset, 1, cigi_byte_order);
5032     proto_tree_add_item(tree, hf_cigi3_view_definition_view_type, tvb, offset, 1, cigi_byte_order);
5033     offset += 2;
5034
5035     proto_tree_add_item(tree, hf_cigi3_view_definition_near, tvb, offset, 4, cigi_byte_order);
5036     offset += 4;
5037
5038     proto_tree_add_item(tree, hf_cigi3_view_definition_far, tvb, offset, 4, cigi_byte_order);
5039     offset += 4;
5040
5041     proto_tree_add_item(tree, hf_cigi3_view_definition_left, tvb, offset, 4, cigi_byte_order);
5042     offset += 4;
5043
5044     proto_tree_add_item(tree, hf_cigi3_view_definition_right, tvb, offset, 4, cigi_byte_order);
5045     offset += 4;
5046
5047     proto_tree_add_item(tree, hf_cigi3_view_definition_top, tvb, offset, 4, cigi_byte_order);
5048     offset += 4;
5049
5050     proto_tree_add_item(tree, hf_cigi3_view_definition_bottom, tvb, offset, 4, cigi_byte_order);
5051     offset += 4;
5052
5053     return offset;
5054 }
5055
5056 /* CIGI3 Collision Detection Segment Definition */
5057 static gint
5058 cigi3_add_collision_detection_segment_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
5059 {
5060     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_entity_id, tvb, offset, 2, cigi_byte_order);
5061     offset += 2;
5062
5063     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_segment_id, tvb, offset, 1, cigi_byte_order);
5064     offset++;
5065
5066     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_segment_enable, tvb, offset, 1, cigi_byte_order);
5067     offset += 3;
5068
5069     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_x1, tvb, offset, 4, cigi_byte_order);
5070     offset += 4;
5071
5072     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_y1, tvb, offset, 4, cigi_byte_order);
5073     offset += 4;
5074
5075     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_z1, tvb, offset, 4, cigi_byte_order);
5076     offset += 4;
5077
5078     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_x2, tvb, offset, 4, cigi_byte_order);
5079     offset += 4;
5080
5081     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_y2, tvb, offset, 4, cigi_byte_order);
5082     offset += 4;
5083
5084     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_z2, tvb, offset, 4, cigi_byte_order);
5085     offset += 4;
5086
5087     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_material_mask, tvb, offset, 4, cigi_byte_order);
5088     offset += 8;
5089
5090     return offset;
5091 }
5092
5093 /* CIGI3 Collision Detection Volume Definition */
5094 static gint
5095 cigi3_add_collision_detection_volume_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
5096 {
5097     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_entity_id, tvb, offset, 2, cigi_byte_order);
5098     offset += 2;
5099
5100     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_volume_id, tvb, offset, 1, cigi_byte_order);
5101     offset++;
5102
5103     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_volume_enable, tvb, offset, 1, cigi_byte_order);
5104     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_volume_type, tvb, offset, 1, cigi_byte_order);
5105     offset += 3;
5106
5107     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_x, tvb, offset, 4, cigi_byte_order);
5108     offset += 4;
5109
5110     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_y, tvb, offset, 4, cigi_byte_order);
5111     offset += 4;
5112
5113     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_z, tvb, offset, 4, cigi_byte_order);
5114     offset += 4;
5115
5116     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_radius_height, tvb, offset, 4, cigi_byte_order);
5117     offset += 4;
5118
5119     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_width, tvb, offset, 4, cigi_byte_order);
5120     offset += 4;
5121
5122     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_depth, tvb, offset, 4, cigi_byte_order);
5123     offset += 4;
5124
5125     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_roll, tvb, offset, 4, cigi_byte_order);
5126     offset += 4;
5127
5128     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_pitch, tvb, offset, 4, cigi_byte_order);
5129     offset += 4;
5130
5131     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_yaw, tvb, offset, 4, cigi_byte_order);
5132     offset += 8;
5133
5134     return offset;
5135 }
5136
5137 /* CIGI3 HAT/HOT Request */
5138 static gint
5139 cigi3_add_hat_hot_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
5140 {
5141     proto_tree_add_item(tree, hf_cigi3_hat_hot_request_hat_hot_id, tvb, offset, 2, cigi_byte_order);
5142     offset += 2;
5143
5144     proto_tree_add_item(tree, hf_cigi3_hat_hot_request_type, tvb, offset, 1, cigi_byte_order);
5145     proto_tree_add_item(tree, hf_cigi3_hat_hot_request_coordinate_system, tvb, offset, 1, cigi_byte_order);
5146     offset += 2;
5147
5148     proto_tree_add_item(tree, hf_cigi3_hat_hot_request_entity_id, tvb, offset, 2, cigi_byte_order);
5149     offset += 2;
5150
5151     proto_tree_add_item(tree, hf_cigi3_hat_hot_request_lat_xoff, tvb, offset, 8, cigi_byte_order);
5152     offset += 8;
5153
5154     proto_tree_add_item(tree, hf_cigi3_hat_hot_request_lon_yoff, tvb, offset, 8, cigi_byte_order);
5155     offset += 8;
5156
5157     proto_tree_add_item(tree, hf_cigi3_hat_hot_request_alt_zoff, tvb, offset, 8, cigi_byte_order);
5158     offset += 8;
5159
5160     return offset;
5161 }
5162
5163 /* CIGI3_2 HAT/HOT Request */
5164 static gint
5165 cigi3_2_add_hat_hot_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
5166 {
5167     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_hat_hot_id, tvb, offset, 2, cigi_byte_order);
5168     offset += 2;
5169
5170     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_type, tvb, offset, 1, cigi_byte_order);
5171     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_coordinate_system, tvb, offset, 1, cigi_byte_order);
5172     offset++;
5173
5174     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_update_period, tvb, offset, 1, cigi_byte_order);
5175     offset++;
5176
5177     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_entity_id, tvb, offset, 2, cigi_byte_order);
5178     offset += 2;
5179
5180     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_lat_xoff, tvb, offset, 8, cigi_byte_order);
5181     offset += 8;
5182
5183     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_lon_yoff, tvb, offset, 8, cigi_byte_order);
5184     offset += 8;
5185
5186     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_alt_zoff, tvb, offset, 8, cigi_byte_order);
5187     offset += 8;
5188
5189     return offset;
5190 }
5191
5192 /* CIGI3 Line of Sight Segment Request */
5193 static gint
5194 cigi3_add_line_of_sight_segment_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
5195 {
5196     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_los_id, tvb, offset, 2, cigi_byte_order);
5197     offset += 2;
5198
5199     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_type, tvb, offset, 1, cigi_byte_order);
5200     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_source_coord, tvb, offset, 1, cigi_byte_order);
5201     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_destination_coord, tvb, offset, 1, cigi_byte_order);
5202     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_response_coord, tvb, offset, 1, cigi_byte_order);
5203     offset++;
5204
5205     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_alpha_threshold, tvb, offset, 1, cigi_byte_order);
5206     offset++;
5207
5208     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_entity_id, tvb, offset, 2, cigi_byte_order);
5209     offset += 2;
5210
5211     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_source_lat_xoff, tvb, offset, 8, cigi_byte_order);
5212     offset += 8;
5213
5214     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_source_lon_yoff, tvb, offset, 8, cigi_byte_order);
5215     offset += 8;
5216
5217     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_source_alt_zoff, tvb, offset, 8, cigi_byte_order);
5218     offset += 8;
5219
5220     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_destination_lat_xoff, tvb, offset, 8, cigi_byte_order);
5221     offset += 8;
5222
5223     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_destination_lon_yoff, tvb, offset, 8, cigi_byte_order);
5224     offset += 8;
5225
5226     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_destination_alt_zoff, tvb, offset, 8, cigi_byte_order);
5227     offset += 8;
5228
5229     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_material_mask, tvb, offset, 4, cigi_byte_order);
5230     offset += 8;
5231
5232     return offset;
5233 }
5234
5235 /* CIGI3_2 Line of Sight Segment Request */
5236 static gint
5237 cigi3_2_add_line_of_sight_segment_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
5238 {
5239     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_los_id, tvb, offset, 2, cigi_byte_order);
5240     offset += 2;
5241
5242     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_type, tvb, offset, 1, cigi_byte_order);
5243     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_source_coord, tvb, offset, 1, cigi_byte_order);
5244     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_coord, tvb, offset, 1, cigi_byte_order);
5245     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_response_coord, tvb, offset, 1, cigi_byte_order);
5246     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_entity_id_valid, tvb, offset, 1, cigi_byte_order);
5247     offset++;
5248
5249     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_alpha_threshold, tvb, offset, 1, cigi_byte_order);
5250     offset++;
5251
5252     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_entity_id, tvb, offset, 2, cigi_byte_order);
5253     offset += 2;
5254
5255     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_source_lat_xoff, tvb, offset, 8, cigi_byte_order);
5256     offset += 8;
5257
5258     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_source_lon_yoff, tvb, offset, 8, cigi_byte_order);
5259     offset += 8;
5260
5261     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_source_alt_zoff, tvb, offset, 8, cigi_byte_order);
5262     offset += 8;
5263
5264     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_lat_xoff, tvb, offset, 8, cigi_byte_order);
5265     offset += 8;
5266
5267     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_lon_yoff, tvb, offset, 8, cigi_byte_order);
5268     offset += 8;
5269
5270     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_alt_zoff, tvb, offset, 8, cigi_byte_order);
5271     offset += 8;
5272
5273     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_material_mask, tvb, offset, 4, cigi_byte_order);
5274     offset += 4;
5275
5276     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_update_period, tvb, offset, 1, cigi_byte_order);
5277     offset += 2;
5278
5279     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_entity_id, tvb, offset, 2, cigi_byte_order);
5280     offset += 2;
5281
5282     return offset;
5283 }
5284
5285 /* CIGI3 Line of Sight Vector Request */
5286 static gint
5287 cigi3_add_line_of_sight_vector_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
5288 {
5289     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_los_id, tvb, offset, 2, cigi_byte_order);
5290     offset += 2;
5291
5292     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_type, tvb, offset, 1, cigi_byte_order);
5293     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_source_coord, tvb, offset, 1, cigi_byte_order);
5294     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_response_coord, tvb, offset, 1, cigi_byte_order);
5295     offset++;
5296
5297     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_alpha, tvb, offset, 1, cigi_byte_order);
5298     offset++;
5299
5300     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_entity_id, tvb, offset, 2, cigi_byte_order);
5301     offset += 2;
5302
5303     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_azimuth, tvb, offset, 4, cigi_byte_order);
5304     offset += 4;
5305
5306     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_elevation, tvb, offset, 4, cigi_byte_order);
5307     offset += 4;
5308
5309     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_min_range, tvb, offset, 4, cigi_byte_order);
5310     offset += 4;
5311
5312     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_max_range, tvb, offset, 4, cigi_byte_order);
5313     offset += 4;
5314
5315     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_source_lat_xoff, tvb, offset, 8, cigi_byte_order);
5316     offset += 8;
5317
5318     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_source_lon_yoff, tvb, offset, 8, cigi_byte_order);
5319     offset += 8;
5320
5321     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_source_alt_zoff, tvb, offset, 8, cigi_byte_order);
5322     offset += 8;
5323
5324     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_material_mask, tvb, offset, 4, cigi_byte_order);
5325     offset += 8;
5326
5327     return offset;
5328 }
5329
5330 /* CIGI3_2 Line of Sight Vector Request */
5331 static gint
5332 cigi3_2_add_line_of_sight_vector_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
5333 {
5334     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_los_id, tvb, offset, 2, cigi_byte_order);
5335     offset += 2;
5336
5337     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_type, tvb, offset, 1, cigi_byte_order);
5338     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_source_coord, tvb, offset, 1, cigi_byte_order);
5339     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_response_coord, tvb, offset, 1, cigi_byte_order);
5340     offset++;
5341
5342     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_alpha, tvb, offset, 1, cigi_byte_order);
5343     offset++;
5344
5345     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_entity_id, tvb, offset, 2, cigi_byte_order);
5346     offset += 2;
5347
5348     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_azimuth, tvb, offset, 4, cigi_byte_order);
5349     offset += 4;
5350
5351     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_elevation, tvb, offset, 4, cigi_byte_order);
5352     offset += 4;
5353
5354     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_min_range, tvb, offset, 4, cigi_byte_order);
5355     offset += 4;
5356
5357     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_max_range, tvb, offset, 4, cigi_byte_order);
5358     offset += 4;
5359
5360     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_source_lat_xoff, tvb, offset, 8, cigi_byte_order);
5361     offset += 8;
5362
5363     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_source_lon_yoff, tvb, offset, 8, cigi_byte_order);
5364     offset += 8;
5365
5366     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_source_alt_zoff, tvb, offset, 8, cigi_byte_order);
5367     offset += 8;
5368
5369     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_material_mask, tvb, offset, 4, cigi_byte_order);
5370     offset += 4;
5371
5372     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_update_period, tvb, offset, 1, cigi_byte_order);
5373     offset += 4;
5374
5375     return offset;
5376 }
5377
5378 /* CIGI3 Position Request */
5379 static gint
5380 cigi3_add_position_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
5381 {
5382     proto_tree_add_item(tree, hf_cigi3_position_request_object_id, tvb, offset, 2, cigi_byte_order);
5383     offset += 2;
5384
5385     proto_tree_add_item(tree, hf_cigi3_position_request_part_id, tvb, offset, 1, cigi_byte_order);
5386     offset++;
5387
5388     proto_tree_add_item(tree, hf_cigi3_position_request_update_mode, tvb, offset, 1, cigi_byte_order);
5389     proto_tree_add_item(tree, hf_cigi3_position_request_object_class, tvb, offset, 1, cigi_byte_order);
5390     proto_tree_add_item(tree, hf_cigi3_position_request_coord_system, tvb, offset, 1, cigi_byte_order);
5391     offset += 3;
5392
5393     return offset;
5394 }
5395
5396 /* CIGI3 Environmental Conditions Request */
5397 static gint
5398 cigi3_add_environmental_conditions_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
5399 {
5400     proto_tree_add_item(tree, hf_cigi3_environmental_conditions_request_type, tvb, offset, 1, cigi_byte_order);
5401     offset++;
5402
5403     proto_tree_add_item(tree, hf_cigi3_environmental_conditions_request_id, tvb, offset, 1, cigi_byte_order);
5404     offset += 5;;
5405
5406     proto_tree_add_item(tree, hf_cigi3_environmental_conditions_request_lat, tvb, offset, 8, cigi_byte_order);
5407     offset += 8;
5408
5409     proto_tree_add_item(tree, hf_cigi3_environmental_conditions_request_lon, tvb, offset, 8, cigi_byte_order);
5410     offset += 8;
5411
5412     proto_tree_add_item(tree, hf_cigi3_environmental_conditions_request_alt, tvb, offset, 8, cigi_byte_order);
5413     offset += 8;
5414
5415     return offset;
5416 }
5417
5418 /* CIGI3_3 Symbol Surface Definition */
5419 static gint
5420 cigi3_3_add_symbol_surface_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
5421 {
5422     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_surface_id, tvb, offset, 2, cigi_byte_order);
5423     offset += 2;
5424
5425     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_surface_state, tvb, offset, 1, cigi_byte_order);
5426     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_attach_type, tvb, offset, 1, cigi_byte_order);
5427     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_billboard, tvb, offset, 1, cigi_byte_order);
5428     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_perspective_growth_enable, tvb, offset, 1, cigi_byte_order);
5429     offset += 2;
5430
5431     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_entity_view_id, tvb, offset, 2, cigi_byte_order);
5432     offset += 2;
5433
5434     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_xoff_left, tvb, offset, 4, cigi_byte_order);
5435     offset += 4;
5436
5437     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_yoff_right, tvb, offset, 4, cigi_byte_order);
5438     offset += 4;
5439
5440     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_zoff_top, tvb, offset, 4, cigi_byte_order);
5441     offset += 4;
5442
5443     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_yaw_bottom, tvb, offset, 4, cigi_byte_order);
5444     offset += 4;
5445
5446     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_pitch, tvb, offset, 4, cigi_byte_order);
5447     offset += 4;
5448
5449     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_roll, tvb, offset, 4, cigi_byte_order);
5450     offset += 4;
5451
5452     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_width, tvb, offset, 4, cigi_byte_order);
5453     offset += 4;
5454
5455     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_height, tvb, offset, 4, cigi_byte_order);
5456     offset += 4;
5457
5458     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_min_u, tvb, offset, 4, cigi_byte_order);
5459     offset += 4;
5460
5461     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_max_u, tvb, offset, 4, cigi_byte_order);
5462     offset += 4;
5463
5464     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_min_v, tvb, offset, 4, cigi_byte_order);
5465     offset += 4;
5466
5467     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_max_v, tvb, offset, 4, cigi_byte_order);
5468     offset += 4;
5469
5470     return offset;
5471 }
5472
5473 /* CIGI3_3 Symbol Text Definition */
5474 static gint
5475 cigi3_3_add_symbol_text_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
5476 {
5477     guint8 packet_size = 0;
5478
5479     packet_size = tvb_get_guint8(tvb, offset-1);
5480
5481     /* A symbol text definition packet cannot be less than 16 bytes. */
5482     if ( packet_size < 16 ) {
5483         THROW(ReportedBoundsError);
5484     }
5485
5486     proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_symbol_id, tvb, offset, 2, cigi_byte_order);
5487     offset += 2;
5488
5489     proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_alignment, tvb, offset, 1, cigi_byte_order);
5490     proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_orientation, tvb, offset, 1, cigi_byte_order);
5491     offset += 1;
5492
5493     proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_font_ident, tvb, offset, 1, cigi_byte_order);
5494     offset += 3;
5495
5496     proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_font_size, tvb, offset, 4, cigi_byte_order);
5497     offset += 4;
5498
5499     proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_text, tvb, offset, packet_size-12, cigi_byte_order);
5500     offset += packet_size-12;
5501
5502     return offset;
5503 }
5504
5505 /* CIGI3_3 Symbol Circle Definition */
5506 static gint
5507 cigi3_3_add_symbol_circle_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
5508 {
5509     guint8 packet_size = 0;
5510     int ncircles,c;
5511
5512     packet_size = tvb_get_guint8(tvb, offset-1);
5513
5514     /* A symbol text definition packet cannot be less than 16 bytes. */
5515     if ( packet_size < 16 ) {
5516         THROW(ReportedBoundsError);
5517     }
5518
5519     ncircles = (packet_size - 16) / 24;
5520
5521     proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_symbol_id, tvb, offset, 2, cigi_byte_order);
5522     offset += 2;
5523
5524     proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_drawing_style, tvb, offset, 1, cigi_byte_order);
5525     offset += 2;
5526
5527     proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_stipple_pattern, tvb, offset, 2, cigi_byte_order);
5528     offset += 2;
5529
5530     proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_line_width, tvb, offset, 4, cigi_byte_order);
5531     offset += 4;
5532
5533     proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_stipple_pattern_length, tvb, offset, 4, cigi_byte_order);
5534     offset += 4;
5535
5536     for (c = 0; c< ncircles; c++) {
5537         proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_center_u[c], tvb, offset, 4, cigi_byte_order);
5538         offset += 4;
5539
5540         proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_center_v[c], tvb, offset, 4, cigi_byte_order);
5541         offset += 4;
5542
5543         proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_radius[c], tvb, offset, 4, cigi_byte_order);
5544         offset += 4;
5545
5546         proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_inner_radius[c], tvb, offset, 4, cigi_byte_order);
5547         offset += 4;
5548
5549         proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_start_angle[c], tvb, offset, 4, cigi_byte_order);
5550         offset += 4;
5551
5552         proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_end_angle[c], tvb, offset, 4, cigi_byte_order);
5553         offset += 4;
5554     }
5555
5556     return offset;
5557 }
5558
5559 /* CIGI3_3 Symbol Line Definition */
5560 static gint
5561 cigi3_3_add_symbol_line_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
5562 {
5563     guint8 packet_size = 0;
5564     int nvertices,v;
5565
5566     packet_size = tvb_get_guint8(tvb, offset-1);
5567
5568     /* A symbol text definition packet cannot be less than 16 bytes. */
5569     if ( packet_size < 16 ) {
5570         THROW(ReportedBoundsError);
5571     }
5572
5573     nvertices = (packet_size - 16) / 8;
5574
5575     proto_tree_add_item(tree, hf_cigi3_3_symbol_line_definition_symbol_id, tvb, offset, 2, cigi_byte_order);
5576     offset += 2;
5577
5578     proto_tree_add_item(tree, hf_cigi3_3_symbol_line_definition_primitive_type, tvb, offset, 1, cigi_byte_order);
5579     offset += 2;
5580
5581     proto_tree_add_item(tree, hf_cigi3_3_symbol_line_definition_stipple_pattern, tvb, offset, 2, cigi_byte_order);
5582     offset += 2;
5583
5584     proto_tree_add_item(tree, hf_cigi3_3_symbol_line_definition_line_width, tvb, offset, 4, cigi_byte_order);;
5585     offset += 4;
5586
5587     proto_tree_add_item(tree, hf_cigi3_3_symbol_line_definition_stipple_pattern_length, tvb, offset, 4, cigi_byte_order);
5588     offset += 4;
5589
5590     for(v=0; v<nvertices; v++) {
5591         proto_tree_add_item(tree, hf_cigi3_3_symbol_line_definition_vertex_u[v], tvb, offset, 4, cigi_byte_order);
5592         offset += 4;
5593
5594         proto_tree_add_item(tree, hf_cigi3_3_symbol_line_definition_vertex_v[v], tvb, offset, 4, cigi_byte_order);
5595         offset += 4;
5596     }
5597
5598     return offset;
5599 }
5600
5601 /* CIGI3_3 Symbol Clone */
5602 static gint
5603 cigi3_3_add_symbol_clone(tvbuff_t *tvb, proto_tree *tree, gint offset)
5604 {
5605     proto_tree_add_item(tree, hf_cigi3_3_symbol_clone_symbol_id, tvb, offset, 2, cigi_byte_order);
5606     offset += 2;
5607
5608     proto_tree_add_item(tree, hf_cigi3_3_symbol_clone_source_type, tvb, offset, 1, cigi_byte_order);
5609     offset += 2;
5610
5611     proto_tree_add_item(tree, hf_cigi3_3_symbol_clone_source_id, tvb, offset, 2, cigi_byte_order);
5612     offset += 2;
5613
5614     return offset;
5615 }
5616
5617 /* CIGI3_3 Symbol Control */
5618 static gint
5619 cigi3_3_add_symbol_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
5620 {
5621     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_symbol_id, tvb, offset, 2, cigi_byte_order);
5622     offset += 2;
5623
5624     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_symbol_state, tvb, offset, 1, cigi_byte_order);
5625     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_attach_state, tvb, offset, 1, cigi_byte_order);
5626     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_flash_control, tvb, offset, 1, cigi_byte_order);
5627     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_inherit_color, tvb, offset, 1, cigi_byte_order);
5628     offset += 2;
5629
5630     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_parent_symbol_ident, tvb, offset, 2, cigi_byte_order);
5631     offset += 2;
5632
5633     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_surface_ident, tvb, offset, 2, cigi_byte_order);
5634     offset += 2;
5635
5636     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_layer, tvb, offset, 1, cigi_byte_order);
5637     offset += 1;
5638
5639     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_flash_duty_cycle, tvb, offset, 1, cigi_byte_order);
5640     offset += 1;
5641
5642     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_flash_period, tvb, offset, 4, cigi_byte_order);
5643     offset += 4;
5644
5645     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_position_u, tvb, offset, 4, cigi_byte_order);
5646     offset += 4;
5647
5648     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_position_v, tvb, offset, 4, cigi_byte_order);
5649     offset += 4;
5650
5651     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_rotation, tvb, offset, 4, cigi_byte_order);
5652     offset += 4;
5653
5654     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_red, tvb, offset, 1, cigi_byte_order);
5655     offset += 1;
5656
5657     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_green, tvb, offset, 1, cigi_byte_order);
5658     offset += 1;
5659
5660     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_blue, tvb, offset, 1, cigi_byte_order);
5661     offset += 1;
5662
5663     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_alpha, tvb, offset, 1, cigi_byte_order);
5664     offset += 1;
5665
5666     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_scale_u, tvb, offset, 4, cigi_byte_order);
5667     offset += 4;
5668
5669     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_scale_v, tvb, offset, 4, cigi_byte_order);
5670     offset += 4;
5671
5672     return offset;
5673 }
5674
5675 /* CIGI3_3 Short Symbol Control */
5676 static gint
5677 cigi3_3_add_short_symbol_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
5678 {
5679     guint8 select1 = 0;
5680     guint8 select2 = 0;
5681
5682     proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_symbol_id, tvb, offset, 2, cigi_byte_order);
5683     offset += 2;
5684
5685     proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_symbol_state, tvb, offset, 1, cigi_byte_order);
5686     proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attach_state, tvb, offset, 1, cigi_byte_order);
5687     proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_flash_control, tvb, offset, 1, cigi_byte_order);
5688     proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_inherit_color, tvb, offset, 1, cigi_byte_order);
5689     offset += 2;
5690
5691     select1 = tvb_get_guint8(tvb, offset);
5692     proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attribute_select1, tvb, offset, 1, cigi_byte_order);
5693     offset += 1;
5694
5695     select2 = tvb_get_guint8(tvb, offset);
5696     proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attribute_select2, tvb, offset, 1, cigi_byte_order);
5697     offset++;
5698
5699     if (select1 == 9) {
5700         if (cigi_byte_order == CIGI_BYTE_ORDER_BIG_ENDIAN) {
5701             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_red1, tvb, offset, 1, cigi_byte_order);
5702             offset++;
5703
5704             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_green1, tvb, offset, 1, cigi_byte_order);
5705             offset++;
5706
5707             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_blue1, tvb, offset, 1, cigi_byte_order);
5708             offset++;
5709
5710             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_alpha1, tvb, offset, 1, cigi_byte_order);
5711             offset++;
5712         } else {
5713             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_alpha1, tvb, offset, 1, cigi_byte_order);
5714             offset++;
5715
5716             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_blue1, tvb, offset, 1, cigi_byte_order);
5717             offset++;
5718
5719             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_green1, tvb, offset, 1, cigi_byte_order);
5720             offset++;
5721
5722             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_red1, tvb, offset, 1, cigi_byte_order);
5723             offset++;
5724         }
5725     } else {
5726         if (select1 >= 5 && select1 <= 11) {
5727             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attribute_value1f, tvb, offset, 4, cigi_byte_order);
5728         } else {        
5729             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attribute_value1, tvb, offset, 4, cigi_byte_order);
5730         }    
5731         offset += 4;
5732     }
5733
5734     if (select2 == 9) {
5735         if (cigi_byte_order == CIGI_BYTE_ORDER_BIG_ENDIAN) {
5736             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_red2, tvb, offset, 1, cigi_byte_order);
5737             offset++;
5738
5739             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_green2, tvb, offset, 1, cigi_byte_order);
5740             offset++;
5741
5742             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_blue2, tvb, offset, 1, cigi_byte_order);
5743             offset++;
5744
5745             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_alpha2, tvb, offset, 1, cigi_byte_order);
5746             offset++;
5747         } else {
5748             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_alpha2, tvb, offset, 1, cigi_byte_order);
5749             offset++;
5750
5751             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_blue2, tvb, offset, 1, cigi_byte_order);
5752             offset++;
5753
5754             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_green2, tvb, offset, 1, cigi_byte_order);
5755             offset++;
5756
5757             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_red2, tvb, offset, 1, cigi_byte_order);
5758             offset++;
5759         }
5760
5761     } else {
5762         if (select2 >= 5 && select2 <= 11) {
5763             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attribute_value2f, tvb, offset, 4, cigi_byte_order);
5764         } else {        
5765             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attribute_value2, tvb, offset, 4, cigi_byte_order);
5766         }    
5767         offset += 4;
5768     }
5769
5770     return offset;
5771 }
5772
5773 /* CIGI3 Start of Frame */
5774 static gint
5775 cigi3_add_start_of_frame(tvbuff_t *tvb, proto_tree *tree, gint offset)
5776 {
5777     proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, cigi_byte_order);
5778     offset++;
5779
5780     proto_tree_add_item(tree, hf_cigi3_start_of_frame_db_number, tvb, offset, 1, cigi_byte_order);
5781     offset++;
5782
5783     proto_tree_add_item(tree, hf_cigi3_start_of_frame_ig_status, tvb, offset, 1, cigi_byte_order);
5784     offset++;
5785
5786     proto_tree_add_item(tree, hf_cigi3_start_of_frame_ig_mode, tvb, offset, 1, cigi_byte_order);
5787     proto_tree_add_item(tree, hf_cigi3_start_of_frame_timestamp_valid, tvb, offset, 1, cigi_byte_order);
5788     proto_tree_add_item(tree, hf_cigi3_start_of_frame_earth_reference_model, tvb, offset, 1, cigi_byte_order);
5789     offset++;
5790
5791     /* Get the Byte Swap in Big-Endian so that we can display whether the value
5792      * is big-endian or little-endian to the user */
5793     proto_tree_add_item(tree, hf_cigi3_byte_swap, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
5794     offset += 2;
5795
5796     proto_tree_add_item(tree, hf_cigi3_start_of_frame_frame_ctr, tvb, offset, 4, cigi_byte_order);
5797     offset += 4;
5798
5799     proto_tree_add_item(tree, hf_cigi3_start_of_frame_timestamp, tvb, offset, 4, cigi_byte_order);
5800     offset += 4;
5801
5802     return offset;
5803 }
5804
5805 /* CIGI3_2 Start of Frame */
5806 static gint
5807 cigi3_2_add_start_of_frame(tvbuff_t *tvb, proto_tree *tree, gint offset)
5808 {
5809     proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, cigi_byte_order);
5810     offset++;
5811
5812     proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_db_number, tvb, offset, 1, cigi_byte_order);
5813     offset++;
5814
5815     proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_ig_status, tvb, offset, 1, cigi_byte_order);
5816     offset++;
5817
5818     proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_ig_mode, tvb, offset, 1, cigi_byte_order);
5819     proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_timestamp_valid, tvb, offset, 1, cigi_byte_order);
5820     proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_earth_reference_model, tvb, offset, 1, cigi_byte_order);
5821     offset++;
5822
5823     /* Get the Byte Swap in Big-Endian so that we can display whether the value
5824      * is big-endian or little-endian to the user */
5825     proto_tree_add_item(tree, hf_cigi3_byte_swap, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
5826     offset += 2;
5827
5828     proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_ig_frame_number, tvb, offset, 4, cigi_byte_order);
5829     offset += 4;
5830
5831     proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_timestamp, tvb, offset, 4, cigi_byte_order);
5832     offset += 4;
5833
5834     proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_last_host_frame_number, tvb, offset, 4, cigi_byte_order);
5835     offset += 8;
5836
5837     return offset;
5838 }
5839
5840 /* CIGI3 HAT/HOT Response */
5841 static gint
5842 cigi3_add_hat_hot_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
5843 {
5844     proto_tree_add_item(tree, hf_cigi3_hat_hot_response_hat_hot_id, tvb, offset, 2, cigi_byte_order);
5845     offset += 2;
5846
5847     proto_tree_add_item(tree, hf_cigi3_hat_hot_response_valid, tvb, offset, 1, cigi_byte_order);
5848     proto_tree_add_item(tree, hf_cigi3_hat_hot_response_type, tvb, offset, 1, cigi_byte_order);
5849     offset += 4;
5850
5851     proto_tree_add_item(tree, hf_cigi3_hat_hot_response_height, tvb, offset, 8, cigi_byte_order);
5852     offset += 8;
5853
5854     return offset;
5855 }
5856
5857 /* CIGI3_2 HAT/HOT Response */
5858 static gint
5859 cigi3_2_add_hat_hot_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
5860 {
5861     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_response_hat_hot_id, tvb, offset, 2, cigi_byte_order);
5862     offset += 2;
5863
5864     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_response_valid, tvb, offset, 1, cigi_byte_order);
5865     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_response_type, tvb, offset, 1, cigi_byte_order);
5866     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order);
5867     offset += 4;
5868
5869     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_response_height, tvb, offset, 8, cigi_byte_order);
5870     offset += 8;
5871
5872     return offset;
5873 }
5874
5875 /* CIGI3 HAT/HOT Extended Response */
5876 static gint
5877 cigi3_add_hat_hot_extended_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
5878 {
5879     proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_hat_hot_id, tvb, offset, 2, cigi_byte_order);
5880     offset += 2;
5881
5882     proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_valid, tvb, offset, 1, cigi_byte_order);
5883     offset += 4;
5884
5885     proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_hat, tvb, offset, 8, cigi_byte_order);
5886     offset += 8;
5887
5888     proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_hot, tvb, offset, 8, cigi_byte_order);
5889     offset += 8;
5890
5891     proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_material_code, tvb, offset, 4, cigi_byte_order);
5892     offset += 4;
5893
5894     proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_normal_vector_azimuth, tvb, offset, 4, cigi_byte_order);
5895     offset += 4;
5896
5897     proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_normal_vector_elevation, tvb, offset, 4, cigi_byte_order);
5898     offset += 8;
5899
5900     return offset;
5901 }
5902
5903 /* CIGI3_2 HAT/HOT Extended Response */
5904 static gint
5905 cigi3_2_add_hat_hot_extended_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
5906 {
5907     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_hat_hot_id, tvb, offset, 2, cigi_byte_order);
5908     offset += 2;
5909
5910     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_valid, tvb, offset, 1, cigi_byte_order);
5911     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order);
5912     offset += 4;
5913
5914     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_hat, tvb, offset, 8, cigi_byte_order);
5915     offset += 8;
5916
5917     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_hot, tvb, offset, 8, cigi_byte_order);
5918     offset += 8;
5919
5920     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_material_code, tvb, offset, 4, cigi_byte_order);
5921     offset += 4;
5922
5923     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_normal_vector_azimuth, tvb, offset, 4, cigi_byte_order);
5924     offset += 4;
5925
5926     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_normal_vector_elevation, tvb, offset, 4, cigi_byte_order);
5927     offset += 8;
5928
5929     return offset;
5930 }
5931
5932 /* CIGI3 Line of Sight Response */
5933 static gint
5934 cigi3_add_line_of_sight_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
5935 {
5936     proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_los_id, tvb, offset, 2, cigi_byte_order);
5937     offset += 2;
5938
5939     proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_valid, tvb, offset, 1, cigi_byte_order);
5940     proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_entity_id_valid, tvb, offset, 1, cigi_byte_order);
5941     proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_visible, tvb, offset, 1, cigi_byte_order);
5942     offset++;
5943
5944     proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_count, tvb, offset, 1, cigi_byte_order);
5945     offset++;
5946
5947     proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_entity_id, tvb, offset, 2, cigi_byte_order);
5948     offset += 2;
5949
5950     proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_range, tvb, offset, 8, cigi_byte_order);
5951     offset += 8;
5952
5953     return offset;
5954 }
5955
5956 /* CIGI3_2 Line of Sight Response */
5957 static gint
5958 cigi3_2_add_line_of_sight_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
5959 {
5960     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_los_id, tvb, offset, 2, cigi_byte_order);
5961     offset += 2;
5962
5963     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_valid, tvb, offset, 1, cigi_byte_order);
5964     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_entity_id_valid, tvb, offset, 1, cigi_byte_order);
5965     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_visible, tvb, offset, 1, cigi_byte_order);
5966     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order);
5967     offset++;
5968
5969     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_count, tvb, offset, 1, cigi_byte_order);
5970     offset++;
5971
5972     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_entity_id, tvb, offset, 2, cigi_byte_order);
5973     offset += 2;
5974
5975     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_range, tvb, offset, 8, cigi_byte_order);
5976     offset += 8;
5977
5978     return offset;
5979 }
5980
5981 /* CIGI3 Line of Sight Extended Response */
5982 static gint
5983 cigi3_add_line_of_sight_extended_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
5984 {
5985     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_los_id, tvb, offset, 2, cigi_byte_order);
5986     offset += 2;
5987
5988     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_valid, tvb, offset, 1, cigi_byte_order);
5989     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_entity_id_valid, tvb, offset, 1, cigi_byte_order);
5990     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_range_valid, tvb, offset, 1, cigi_byte_order);
5991     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_visible, tvb, offset, 1, cigi_byte_order);
5992     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_intersection_coord, tvb, offset, 1, cigi_byte_order);
5993     offset++;
5994
5995     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_response_count, tvb, offset, 1, cigi_byte_order);
5996     offset++;
5997
5998     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_entity_id, tvb, offset, 2, cigi_byte_order);
5999     offset += 2;
6000
6001     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_range, tvb, offset, 8, cigi_byte_order);
6002     offset += 8;
6003
6004     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_lat_xoff, tvb, offset, 8, cigi_byte_order);
6005     offset += 8;
6006
6007     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_lon_yoff, tvb, offset, 8, cigi_byte_order);
6008     offset += 8;
6009
6010     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_alt_zoff, tvb, offset, 8, cigi_byte_order);
6011     offset += 8;
6012
6013     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_red, tvb, offset, 1, cigi_byte_order);
6014     offset++;
6015
6016     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_green, tvb, offset, 1, cigi_byte_order);
6017     offset++;
6018
6019     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_blue, tvb, offset, 1, cigi_byte_order);
6020     offset++;
6021
6022     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_alpha, tvb, offset, 1, cigi_byte_order);
6023     offset++;
6024
6025     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_material_code, tvb, offset, 4, cigi_byte_order);
6026     offset += 4;
6027
6028     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_normal_vector_azimuth, tvb, offset, 4, cigi_byte_order);
6029     offset += 4;
6030
6031     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_normal_vector_elevation, tvb, offset, 4, cigi_byte_order);
6032     offset += 4;
6033
6034     return offset;
6035 }
6036
6037 /* CIGI3_2 Line of Sight Extended Response */
6038 static gint
6039 cigi3_2_add_line_of_sight_extended_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
6040 {
6041     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_los_id, tvb, offset, 2, cigi_byte_order);
6042     offset += 2;
6043
6044     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_valid, tvb, offset, 1, cigi_byte_order);
6045     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_entity_id_valid, tvb, offset, 1, cigi_byte_order);
6046     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_range_valid, tvb, offset, 1, cigi_byte_order);
6047     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_visible, tvb, offset, 1, cigi_byte_order);
6048     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order);
6049     offset++;
6050
6051     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_response_count, tvb, offset, 1, cigi_byte_order);
6052     offset++;
6053
6054     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_entity_id, tvb, offset, 2, cigi_byte_order);
6055     offset += 2;
6056
6057     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_range, tvb, offset, 8, cigi_byte_order);
6058     offset += 8;
6059
6060     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_lat_xoff, tvb, offset, 8, cigi_byte_order);
6061     offset += 8;
6062
6063     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_lon_yoff, tvb, offset, 8, cigi_byte_order);
6064     offset += 8;
6065
6066     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_alt_zoff, tvb, offset, 8, cigi_byte_order);
6067     offset += 8;
6068
6069     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_red, tvb, offset, 1, cigi_byte_order);
6070     offset++;
6071
6072     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_green, tvb, offset, 1, cigi_byte_order);
6073     offset++;
6074
6075     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_blue, tvb, offset, 1, cigi_byte_order);
6076     offset++;
6077
6078     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_alpha, tvb, offset, 1, cigi_byte_order);
6079     offset++;
6080
6081     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_material_code, tvb, offset, 4, cigi_byte_order);
6082     offset += 4;
6083
6084     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_normal_vector_azimuth, tvb, offset, 4, cigi_byte_order);
6085     offset += 4;
6086
6087     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_normal_vector_elevation, tvb, offset, 4, cigi_byte_order);
6088     offset += 4;
6089
6090     return offset;
6091 }
6092
6093 /* CIGI3 Sensor Response */
6094 static gint
6095 cigi3_add_sensor_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
6096 {
6097     proto_tree_add_item(tree, hf_cigi3_sensor_response_view_id, tvb, offset, 2, cigi_byte_order);
6098     offset += 2;
6099
6100     proto_tree_add_item(tree, hf_cigi3_sensor_response_sensor_id, tvb, offset, 1, cigi_byte_order);
6101     offset++;
6102
6103     proto_tree_add_item(tree, hf_cigi3_sensor_response_sensor_status, tvb, offset, 1, cigi_byte_order);
6104     offset += 3;
6105
6106     proto_tree_add_item(tree, hf_cigi3_sensor_response_gate_x_size, tvb, offset, 2, cigi_byte_order);
6107     offset += 2;
6108
6109     proto_tree_add_item(tree, hf_cigi3_sensor_response_gate_y_size, tvb, offset, 2, cigi_byte_order);
6110     offset += 2;
6111
6112     proto_tree_add_item(tree, hf_cigi3_sensor_response_gate_x_pos, tvb, offset, 4, cigi_byte_order);
6113     offset += 4;
6114
6115     proto_tree_add_item(tree, hf_cigi3_sensor_response_gate_y_pos, tvb, offset, 4, cigi_byte_order);
6116     offset += 4;
6117
6118     proto_tree_add_item(tree, hf_cigi3_sensor_response_frame_ctr, tvb, offset, 4, cigi_byte_order);
6119     offset += 4;
6120
6121     return offset;
6122 }
6123
6124 /* CIGI3 Sensor Extended Response */
6125 static gint
6126 cigi3_add_sensor_extended_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
6127 {
6128     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_view_id, tvb, offset, 2, cigi_byte_order);
6129     offset += 2;
6130
6131     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_sensor_id, tvb, offset, 1, cigi_byte_order);
6132     offset++;
6133
6134     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_sensor_status, tvb, offset, 1, cigi_byte_order);
6135     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_entity_id_valid, tvb, offset, 1, cigi_byte_order);
6136     offset++;
6137
6138     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_entity_id, tvb, offset, 2, cigi_byte_order);
6139     offset += 2;
6140
6141     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_gate_x_size, tvb, offset, 2, cigi_byte_order);
6142     offset += 2;
6143
6144     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_gate_y_size, tvb, offset, 2, cigi_byte_order);
6145     offset += 2;
6146
6147     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_gate_x_pos, tvb, offset, 4, cigi_byte_order);
6148     offset += 4;
6149
6150     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_gate_y_pos, tvb, offset, 4, cigi_byte_order);
6151     offset += 4;
6152
6153     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_frame_ctr, tvb, offset, 4, cigi_byte_order);
6154     offset += 4;
6155
6156     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_track_lat, tvb, offset, 8, cigi_byte_order);
6157     offset += 8;
6158
6159     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_track_lon, tvb, offset, 8, cigi_byte_order);
6160     offset += 8;
6161
6162     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_track_alt, tvb, offset, 8, cigi_byte_order);
6163     offset += 8;
6164
6165     return offset;
6166 }
6167
6168 /* CIGI3 Position Response */
6169 static gint
6170 cigi3_add_position_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
6171 {
6172     proto_tree_add_item(tree, hf_cigi3_position_response_object_id, tvb, offset, 2, cigi_byte_order);
6173     offset += 2;
6174
6175     proto_tree_add_item(tree, hf_cigi3_position_response_part_id, tvb, offset, 1, cigi_byte_order);
6176     offset++;
6177
6178     proto_tree_add_item(tree, hf_cigi3_position_response_object_class, tvb, offset, 1, cigi_byte_order);
6179     proto_tree_add_item(tree, hf_cigi3_position_response_coord_system, tvb, offset, 1, cigi_byte_order);
6180     offset += 3;
6181
6182     proto_tree_add_item(tree, hf_cigi3_position_response_lat_xoff, tvb, offset, 8, cigi_byte_order);
6183     offset += 8;
6184
6185     proto_tree_add_item(tree, hf_cigi3_position_response_lon_yoff, tvb, offset, 8, cigi_byte_order);
6186     offset += 8;
6187
6188     proto_tree_add_item(tree, hf_cigi3_position_response_alt_zoff, tvb, offset, 8, cigi_byte_order);
6189     offset += 8;
6190
6191     proto_tree_add_item(tree, hf_cigi3_position_response_roll, tvb, offset, 4, cigi_byte_order);
6192     offset += 4;
6193
6194     proto_tree_add_item(tree, hf_cigi3_position_response_pitch, tvb, offset, 4, cigi_byte_order);
6195     offset += 4;
6196
6197     proto_tree_add_item(tree, hf_cigi3_position_response_yaw, tvb, offset, 4, cigi_byte_order);
6198     offset += 8;
6199
6200     return offset;
6201 }
6202
6203 /* CIGI3 Weather Conditions Response */
6204 static gint
6205 cigi3_add_weather_conditions_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
6206 {
6207     proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_request_id, tvb, offset, 1, cigi_byte_order);
6208     offset++;
6209
6210     proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_humidity, tvb, offset, 1, cigi_byte_order);
6211     offset++;
6212
6213     proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_air_temp, tvb, offset, 4, cigi_byte_order);
6214     offset += 4;
6215
6216     proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_visibility_range, tvb, offset, 4, cigi_byte_order);
6217     offset += 4;
6218
6219     proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_horiz_speed, tvb, offset, 4, cigi_byte_order);
6220     offset += 4;
6221
6222     proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_vert_speed, tvb, offset, 4, cigi_byte_order);
6223     offset += 4;
6224
6225     proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_wind_direction, tvb, offset, 4, cigi_byte_order);
6226     offset += 4;
6227
6228     proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_barometric_pressure, tvb, offset, 4, cigi_byte_order);
6229     offset += 8;
6230
6231     return offset;
6232 }
6233
6234 /* CIGI3 Aerosol Concentration Response */
6235 static gint
6236 cigi3_add_aerosol_concentration_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
6237 {
6238     proto_tree_add_item(tree, hf_cigi3_aerosol_concentration_response_request_id, tvb, offset, 1, cigi_byte_order);
6239     offset++;
6240
6241     proto_tree_add_item(tree, hf_cigi3_aerosol_concentration_response_layer_id, tvb, offset, 1, cigi_byte_order);
6242     offset++;
6243
6244     proto_tree_add_item(tree, hf_cigi3_aerosol_concentration_response_aerosol_concentration, tvb, offset, 4, cigi_byte_order);
6245     offset += 4;
6246
6247     return offset;
6248 }
6249
6250 /* CIGI3 Maritime Surface Conditions Response */
6251 static gint
6252 cigi3_add_maritime_surface_conditions_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
6253 {
6254     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_response_request_id, tvb, offset, 1, cigi_byte_order);
6255     offset += 2;
6256
6257     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_response_sea_surface_height, tvb, offset, 4, cigi_byte_order);
6258     offset += 4;
6259
6260     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_response_surface_water_temp, tvb, offset, 4, cigi_byte_order);
6261     offset += 4;
6262
6263     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_response_surface_clarity, tvb, offset, 4, cigi_byte_order);
6264     offset += 4;
6265
6266     return offset;
6267 }
6268
6269 /* CIGI3 Terrestrial Surface Conditions Response */
6270 static gint
6271 cigi3_add_terrestrial_surface_conditions_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
6272 {
6273     proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_response_request_id, tvb, offset, 1, cigi_byte_order);
6274     offset += 2;
6275
6276     proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_response_surface_id, tvb, offset, 4, cigi_byte_order);
6277     offset += 4;
6278
6279     return offset;
6280 }
6281
6282 /* CIGI3 Collision Detection Segment Notification */
6283 static gint
6284 cigi3_add_collision_detection_segment_notification(tvbuff_t *tvb, proto_tree *tree, gint offset)
6285 {
6286     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_notification_entity_id, tvb, offset, 2, cigi_byte_order);
6287     offset += 2;
6288
6289     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_notification_segment_id, tvb, offset, 1, cigi_byte_order);
6290     offset++;
6291
6292     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_notification_type, tvb, offset, 1, cigi_byte_order);
6293     offset++;
6294
6295     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_notification_contacted_entity_id, tvb, offset, 2, cigi_byte_order);
6296     offset += 2;
6297
6298     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_notification_material_code, tvb, offset, 4, cigi_byte_order);
6299     offset += 4;
6300
6301     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_notification_intersection_distance, tvb, offset, 4, cigi_byte_order);
6302     offset += 4;
6303
6304     return offset;
6305 }
6306
6307 /* CIGI3 Collision Detection Volume Notification */
6308 static gint
6309 cigi3_add_collision_detection_volume_notification(tvbuff_t *tvb, proto_tree *tree, gint offset)
6310 {
6311     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_notification_entity_id, tvb, offset, 2, cigi_byte_order);
6312     offset += 2;
6313
6314     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_notification_volume_id, tvb, offset, 1, cigi_byte_order);
6315     offset++;
6316
6317     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_notification_type, tvb, offset, 1, cigi_byte_order);
6318     offset++;
6319
6320     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_notification_contacted_entity_id, tvb, offset, 2, cigi_byte_order);
6321     offset += 2;
6322
6323     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_notification_contacted_volume_id, tvb, offset, 1, cigi_byte_order);
6324     offset += 8;
6325
6326     return offset;
6327 }
6328
6329 /* CIGI3 Animation Stop Notification */
6330 static gint
6331 cigi3_add_animation_stop_notification(tvbuff_t *tvb, proto_tree *tree, gint offset)
6332 {
6333     proto_tree_add_item(tree, hf_cigi3_animation_stop_notification_entity_id, tvb, offset, 2, cigi_byte_order);
6334     offset += 6;
6335
6336     return offset;
6337 }
6338
6339 /* CIGI3 Event Notification */
6340 static gint
6341 cigi3_add_event_notification(tvbuff_t *tvb, proto_tree *tree, gint offset)
6342 {
6343     proto_tree_add_item(tree, hf_cigi3_event_notification_event_id, tvb, offset, 2, cigi_byte_order);
6344     offset += 2;
6345
6346     proto_tree_add_item(tree, hf_cigi3_event_notification_data_1, tvb, offset, 4, cigi_byte_order);
6347     offset += 4;
6348
6349     proto_tree_add_item(tree, hf_cigi3_event_notification_data_2, tvb, offset, 4, cigi_byte_order);
6350     offset += 4;
6351
6352     proto_tree_add_item(tree, hf_cigi3_event_notification_data_3, tvb, offset, 4, cigi_byte_order);
6353     offset += 4;
6354
6355     return offset;
6356 }
6357
6358 /* CIGI3 Image Generator Message */
6359 static gint
6360 cigi3_add_image_generator_message(tvbuff_t *tvb, proto_tree *tree, gint offset)
6361 {
6362     guint8 packet_size = 0;
6363
6364     packet_size = tvb_get_guint8(tvb, offset-1);
6365
6366     /* An image generator packet cannot be less than 4 bytes ( because every cigi packet
6367      * has a packet id (1 byte) and a packet size (1 byte) ). */
6368     if ( packet_size < 4 ) {
6369         THROW(ReportedBoundsError);
6370     }
6371
6372     proto_tree_add_item(tree, hf_cigi3_image_generator_message_id, tvb, offset, 2, cigi_byte_order);
6373     offset += 2;
6374
6375     proto_tree_add_item(tree, hf_cigi3_image_generator_message_message, tvb, offset, packet_size-4, cigi_byte_order);
6376     offset += packet_size-4;
6377
6378     return offset;
6379 }
6380
6381 /*
6382  * Extract a 16-bit fixed-point value and convert it to a float.
6383  */
6384 static gfloat
6385 tvb_get_fixed_point(tvbuff_t *tvb, int offset, gint byte_order)
6386 {
6387     gint16 fixed;
6388
6389     switch (byte_order) {
6390
6391         case CIGI_BYTE_ORDER_BIG_ENDIAN:
6392             fixed = tvb_get_ntohs(tvb, offset);
6393             break;
6394
6395         case CIGI_BYTE_ORDER_LITTLE_ENDIAN:
6396             fixed = tvb_get_letohs(tvb, offset);
6397             break;
6398
6399         default:
6400             DISSECTOR_ASSERT_NOT_REACHED();
6401             fixed = 0;
6402     }
6403     return fixed / 128.0F;
6404 }
6405
6406 /* Register the protocol with Wireshark */
6407 void
6408 proto_register_cigi(void)
6409 {
6410     module_t *cigi_module;
6411
6412     static hf_register_info hf[] = {
6413         /* All Versions of CIGI */
6414         { &hf_cigi_src_port,
6415             { "Source Port", "cigi.srcport",
6416                 FT_UINT16, BASE_DEC, NULL, 0x0,
6417                 NULL, HFILL }
6418         },
6419         { &hf_cigi_dest_port,
6420             { "Destination Port", "cigi.destport",
6421                 FT_UINT16, BASE_DEC, NULL, 0x0,
6422                 NULL, HFILL }
6423         },
6424         { &hf_cigi_port,
6425             { "Source or Destination Port", "cigi.port",
6426                 FT_UINT16, BASE_DEC, NULL, 0x0,
6427                 NULL, HFILL }
6428         },
6429
6430         { &hf_cigi_frame_size,
6431             { "Frame Size (bytes)", "cigi.frame_size",
6432                 FT_UINT8, BASE_DEC, NULL, 0x0,
6433                 "Number of bytes sent with all cigi packets in this frame", HFILL }
6434         },
6435
6436         { &hf_cigi_packet_id,
6437             { "Packet ID", "cigi.packet_id",
6438                 FT_UINT8, BASE_DEC, NULL, 0x0,
6439                 "Identifies the packet's id", HFILL }
6440         },
6441         { &hf_cigi_packet_size,
6442             { "Packet Size (bytes)", "cigi.packet_size",
6443                 FT_UINT8, BASE_DEC, NULL, 0x0,
6444                 "Identifies the number of bytes in this type of packet", HFILL }
6445         },
6446         { &hf_cigi_version,
6447             { "CIGI Version", "cigi.version",
6448                 FT_UINT8, BASE_DEC, NULL, 0x0,
6449                 "Identifies the version of CIGI interface that is currently running on the host", HFILL }
6450         },
6451
6452         { &hf_cigi_unknown,
6453             { "Unknown", "cigi.unknown",
6454                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6455                 "Unknown Packet", HFILL }
6456         },
6457
6458         /* CIGI2 */
6459         { &hf_cigi2_packet_id,
6460             { "Packet ID", "cigi.packet_id",
6461                 FT_UINT8, BASE_DEC, VALS(cigi2_packet_id_vals), 0x0,
6462                 "Identifies the packet's ID", HFILL }
6463         },
6464
6465         /* CIGI3 */
6466         { &hf_cigi3_packet_id,
6467             { "Packet ID", "cigi.packet_id",
6468                 FT_UINT8, BASE_DEC, VALS(cigi3_packet_id_vals), 0x0,
6469                 "Identifies the packet's ID", HFILL }
6470         },
6471         { &hf_cigi3_byte_swap,
6472             { "Byte Swap", "cigi.byte_swap",
6473                 FT_UINT16, BASE_HEX, VALS(cigi3_byte_swap_vals), 0x0,
6474                 "Used to determine whether the incoming data should be byte-swapped", HFILL }
6475         },
6476
6477         /* CIGI2 IG Control */
6478         { &hf_cigi2_ig_control,
6479             { "IG Control", "cigi.ig_control",
6480                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6481                 "IG Control Packet", HFILL }
6482         },
6483         { &hf_cigi2_ig_control_db_number,
6484             { "Database Number", "cigi.ig_control.db_number",
6485                 FT_INT8, BASE_DEC, NULL, 0x0,
6486                 "Identifies the number associated with the database requiring loading", HFILL }
6487         },
6488         { &hf_cigi2_ig_control_ig_mode,
6489             { "IG Mode Change Request", "cigi.ig_control.ig_mode",
6490                 FT_UINT8, BASE_DEC, VALS(cigi2_ig_control_ig_mode_vals), 0xc0,
6491                 "Commands the IG to enter its various modes", HFILL }
6492         },
6493         { &hf_cigi2_ig_control_tracking_enable,
6494             { "Tracking Device Enable", "cigi.ig_control.tracking_enable",
6495                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x20,
6496                 "Identifies the state of an external tracking device", HFILL }
6497         },
6498         { &hf_cigi2_ig_control_boresight,
6499             { "Tracking Device Boresight", "cigi.ig_control.boresight",
6500                 FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x10,
6501                 "Used by the host to enable boresight mode", HFILL }
6502         },
6503         { &hf_cigi2_ig_control_frame_ctr,
6504             { "Frame Counter", "cigi.ig_control.frame_ctr",
6505                 FT_UINT32, BASE_DEC, NULL, 0x0,
6506                 "Identifies a particular frame", HFILL }
6507         },
6508         { &hf_cigi2_ig_control_time_tag,
6509             { "Timing Value (microseconds)", "cigi.ig_control.time_tag",
6510                 FT_FLOAT, BASE_DEC, NULL, 0x0,
6511                 "Identifies synchronous operation", HFILL }
6512         },
6513
6514         /* CIGI3 IG Control */
6515         { &hf_cigi3_ig_control,
6516             { "IG Control", "cigi.ig_control",
6517                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6518                 "IG Control Packet", HFILL }
6519         },
6520         { &hf_cigi3_ig_control_db_number,
6521             { "Database Number", "cigi.ig_control.db_number",
6522                 FT_INT8, BASE_DEC, NULL, 0x0,
6523                 "Used to initiate a database load on the IG", HFILL }
6524         },
6525         { &hf_cigi3_ig_control_ig_mode,
6526             { "IG Mode", "cigi.ig_control.ig_mode",
6527                 FT_UINT8, BASE_DEC, VALS(cigi3_ig_control_ig_mode_vals), 0x03,
6528                 "Dictates the IG's operational mode", HFILL }
6529         },
6530         { &hf_cigi3_ig_control_timestamp_valid,
6531             { "Timestamp Valid", "cigi.ig_control.timestamp_valid",
6532                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x04,
6533                 "Indicates whether the timestamp contains a valid value", HFILL }
6534         },
6535         { &hf_cigi3_ig_control_frame_ctr,
6536             { "Frame Counter", "cigi.ig_control.frame_ctr",
6537                 FT_UINT32, BASE_DEC, NULL, 0x0,
6538                 "Contains a number that identifying the frame", HFILL }
6539         },
6540         { &hf_cigi3_ig_control_timestamp,
6541             { "Timestamp (microseconds)", "cigi.ig_control.timestamp",
6542                 FT_UINT32, BASE_DEC, NULL, 0x0,
6543                 "Indicates the number of 10 microsecond \"ticks\" since some initial reference time", HFILL }
6544         },
6545
6546         /* CIGI3_2 IG Control */
6547         { &hf_cigi3_2_ig_control,
6548             { "IG Control", "cigi.ig_control",
6549                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6550                 "IG Control Packet", HFILL }
6551         },
6552         { &hf_cigi3_2_ig_control_db_number,
6553             { "Database Number", "cigi.ig_control.db_number",
6554                 FT_INT8, BASE_DEC, NULL, 0x0,
6555                 "Used to initiate a database load on the IG", HFILL }
6556         },
6557         { &hf_cigi3_2_ig_control_ig_mode,
6558             { "IG Mode", "cigi.ig_control.ig_mode",
6559                 FT_UINT8, BASE_DEC, VALS(cigi3_2_ig_control_ig_mode_vals), 0x03,
6560                 "Dictates the IG's operational mode", HFILL }
6561         },
6562         { &hf_cigi3_2_ig_control_timestamp_valid,
6563             { "Timestamp Valid", "cigi.ig_control.timestamp_valid",
6564                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x04,
6565                 "Indicates whether the timestamp contains a valid value", HFILL }
6566         },
6567         { &hf_cigi3_2_ig_control_host_frame_number,
6568             { "Host Frame Number", "cigi.ig_control.host_frame_number",
6569                 FT_UINT32, BASE_DEC, NULL, 0x0,
6570                 "Uniquely identifies a data frame on the host", HFILL }
6571         },
6572         { &hf_cigi3_2_ig_control_timestamp,
6573             { "Timestamp (microseconds)", "cigi.ig_control.timestamp",
6574                 FT_UINT32, BASE_DEC, NULL, 0x0,
6575                 "Indicates the number of 10 microsecond \"ticks\" since some initial reference time", HFILL }
6576         },
6577         { &hf_cigi3_2_ig_control_last_ig_frame_number,
6578             { "IG Frame Number", "cigi.ig_control.last_ig_frame_number",
6579                 FT_UINT32, BASE_DEC, NULL, 0x0,
6580                 "Contains the value of the IG Frame Number parameter in the last Start of Frame packet received from the IG", HFILL }
6581         },
6582
6583         /* CIGI3_3 IG Control */
6584         { &hf_cigi3_3_ig_control,
6585             { "IG Control", "cigi.ig_control",
6586                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6587                 "IG Control Packet", HFILL }
6588         },
6589         { &hf_cigi3_3_ig_control_db_number,
6590             { "Database Number", "cigi.ig_control.db_number",
6591                 FT_INT8, BASE_DEC, NULL, 0x0,
6592                 "Used to initiate a database load on the IG", HFILL }
6593         },
6594         { &hf_cigi3_3_ig_control_ig_mode,
6595             { "IG Mode", "cigi.ig_control.ig_mode",
6596                 FT_UINT8, BASE_DEC, VALS(cigi3_3_ig_control_ig_mode_vals), 0x03,
6597                 "Dictates the IG's operational mode", HFILL }
6598         },
6599         { &hf_cigi3_3_ig_control_timestamp_valid,
6600             { "Timestamp Valid", "cigi.ig_control.timestamp_valid",
6601                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x04,
6602                 "Indicates whether the timestamp contains a valid value", HFILL }
6603         },
6604         { &hf_cigi3_3_ig_control_extrapolation_enable,
6605             { "Extrapolation/Interpolation Enable", "cigi.ig_control.extrapolation_enable",
6606                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
6607                 "Indicates whether any dead reckoning is enabled.", HFILL }
6608         },
6609         { &hf_cigi3_3_ig_control_minor_version,
6610             { "Minor Version", "cigi.ig_control.extrapolation_enable",
6611                 FT_UINT8, BASE_DEC, NULL, 0xF0,
6612                 "Indicates the minor version of the CIGI interface", HFILL }
6613         },
6614         { &hf_cigi3_3_ig_control_host_frame_number,
6615             { "Host Frame Number", "cigi.ig_control.host_frame_number",
6616                 FT_UINT32, BASE_DEC, NULL, 0x0,
6617                 "Uniquely identifies a data frame on the host", HFILL }
6618         },
6619         { &hf_cigi3_3_ig_control_timestamp,
6620             { "Timestamp (microseconds)", "cigi.ig_control.timestamp",
6621                 FT_UINT32, BASE_DEC, NULL, 0x0,
6622                 "Indicates the number of 10 microsecond \"ticks\" since some initial reference time", HFILL }
6623         },
6624         { &hf_cigi3_3_ig_control_last_ig_frame_number,
6625             { "IG Frame Number", "cigi.ig_control.last_ig_frame_number",
6626                 FT_UINT32, BASE_DEC, NULL, 0x0,
6627                 "Contains the value of the IG Frame Number parameter in the last Start of Frame packet received from the IG", HFILL }
6628         },
6629
6630            /* CIGI2 Entity Control */
6631         { &hf_cigi2_entity_control,
6632             { "Entity Control", "cigi.entity_control",
6633                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6634                 "Entity Control Packet", HFILL }
6635         },
6636         { &hf_cigi2_entity_control_entity_id,
6637             { "Entity ID", "cigi.entity_control.entity_id",
6638                 FT_UINT16, BASE_DEC, NULL, 0x0,
6639                 "Identifies the entity motion system", HFILL }
6640         },
6641         { &hf_cigi2_entity_control_entity_state,
6642             { "Entity State", "cigi.entity_control.entity_state",
6643                 FT_UINT8, BASE_DEC, VALS(cigi2_entity_control_entity_state_vals), 0xc0,
6644                 "Identifies the entity's geometry state", HFILL }
6645         },
6646         { &hf_cigi2_entity_control_attach_state,
6647             { "Attach State", "cigi.entity_control.attach_state",
6648                 FT_BOOLEAN, 8, TFS(&cigi2_entity_control_attach_state_tfs), 0x20,
6649                 "Identifies whether the entity should be attach as a child to a parent", HFILL }
6650         },
6651         { &hf_cigi2_entity_control_collision_detect,
6652             { "Collision Detection Request", "cigi.entity_control.collision_detect",
6653                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x10,
6654                 "Identifies if collision detection is enabled for the entity", HFILL }
6655         },
6656         { &hf_cigi2_entity_control_effect_state,
6657             { "Effect Animation State", "cigi.entity_control.effect_state",
6658                 FT_UINT8, BASE_DEC, VALS(cigi2_entity_control_effect_state_vals), 0x0c,
6659                 "Identifies the animation state of a special effect", HFILL }
6660         },
6661         { &hf_cigi2_entity_control_type,
6662             { "Entity Type", "cigi.entity_control.type",
6663                 FT_UINT16, BASE_DEC, NULL, 0x0,
6664                 "Identifies the type of the entity", HFILL }
6665         },
6666         { &hf_cigi2_entity_control_parent_id,
6667             { "Parent Entity ID", "cigi.entity_control.parent_id",
6668                 FT_UINT16, BASE_DEC, NULL, 0x0,
6669                 "Identifies the parent to which the entity should be attached", HFILL }
6670         },
6671         { &hf_cigi2_entity_control_opacity,
6672             { "Percent Opacity", "cigi.entity_control.opacity",
6673                 FT_FLOAT, BASE_DEC, NULL, 0x0,
6674                 "Specifies the degree of opacity of the entity", HFILL }
6675         },
6676         { &hf_cigi2_entity_control_internal_temp,
6677             { "Internal Temperature (degrees C)", "cigi.entity_control.internal_temp",
6678                 FT_FLOAT, BASE_DEC, NULL, 0x0,
6679                 "Specifies the internal temperature of the entity in degrees Celsius", HFILL }
6680         },
6681         { &hf_cigi2_entity_control_roll,
6682             { "Roll (degrees)", "cigi.entity_control.roll",
6683                 FT_FLOAT, BASE_DEC, NULL, 0x0,
6684                 "Identifies the roll angle of the entity in degrees", HFILL }
6685         },
6686         { &hf_cigi2_entity_control_pitch,
6687             { "Pitch (degrees)", "cigi.entity_control",
6688                 FT_FLOAT, BASE_DEC, NULL, 0x0,
6689                 "Identifies the pitch of the entity in degrees", HFILL }
6690         },
6691         { &hf_cigi2_entity_control_heading,
6692             { "Heading (degrees)", "cigi.entity_control",
6693                 FT_FLOAT, BASE_DEC, NULL, 0x0,
6694                 "Identifies the heading of the entity in degrees", HFILL }
6695         },
6696         { &hf_cigi2_entity_control_alt,
6697             { "Altitude (m)", "cigi.entity_control.alt",
6698                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
6699                 "Identifies the altitude position of the reference point of the entity in meters", HFILL }
6700         },
6701         { &hf_cigi2_entity_control_lat,
6702             { "Latitude (degrees)", "cigi.entity_control.lat",
6703                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
6704                 "Identifies the latitude position of the reference point of the entity in degrees", HFILL }
6705         },
6706         { &hf_cigi2_entity_control_lon,
6707             { "Longitude (degrees)", "cigi.entity_control.lon",
6708                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
6709                 "Identifies the longitude position of the reference point of the entity in degrees", HFILL }
6710         },
6711
6712         /* CIGI3 Entity Control */
6713         { &hf_cigi3_entity_control,
6714             { "Entity Control", "cigi.entity_control",
6715                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6716                 "Entity Control Packet", HFILL }
6717         },
6718         { &hf_cigi3_entity_control_entity_id,
6719             { "Entity ID", "cigi.entity_control.entity_id",
6720                 FT_UINT16, BASE_DEC, NULL, 0x0,
6721                 "Specifies the entity to which this packet is applied", HFILL }
6722         },
6723         { &hf_cigi3_entity_control_entity_state,
6724             { "Entity State", "cigi.entity_control.entity_state",
6725                 FT_UINT8, BASE_DEC, VALS(cigi3_entity_control_entity_state_vals), 0x03,
6726                 "Specifies whether the entity should be active or destroyed", HFILL }
6727         },
6728         { &hf_cigi3_entity_control_attach_state,
6729             { "Attach State", "cigi.entity_control.attach_state",
6730                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_attach_state_tfs), 0x04,
6731                 "Specifies whether the entity should be attached as a child to a parent", HFILL }
6732         },
6733         { &hf_cigi3_entity_control_collision_detection_request,
6734             { "Collision Detection Request", "cigi.entity_control.coll_det_request",
6735                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_collision_detection_request_tfs), 0x08,
6736                 "Determines whether any collision detection segments and volumes associated with this entity are used as the source in collision testing", HFILL }
6737         },
6738         { &hf_cigi3_entity_control_inherit_alpha,
6739             { "Inherit Alpha", "cigi.entity_control.inherit_alpha",
6740                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_inherit_alpha_tfs), 0x10,
6741                 "Specifies whether the entity's alpha is combined with the apparent alpha of its parent", HFILL }
6742         },
6743         { &hf_cigi3_entity_control_ground_ocean_clamp,
6744             { "Ground/Ocean Clamp", "cigi.entity_control.ground_ocean_clamp",
6745                 FT_UINT8, BASE_DEC, VALS(cigi3_entity_control_ground_ocean_clamp_vals), 0x60,
6746                 "Specifies whether the entity should be clamped to the ground or water surface", HFILL }
6747         },
6748         { &hf_cigi3_entity_control_animation_direction,
6749             { "Animation Direction", "cigi.entity_control.animation_dir",
6750                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_animation_direction_tfs), 0x01,
6751                 "Specifies the direction in which an animation plays", HFILL }
6752         },
6753         { &hf_cigi3_entity_control_animation_loop_mode,
6754             { "Animation Loop Mode", "cigi.entity_control.animation_loop_mode",
6755                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_animation_loop_mode_tfs), 0x02,
6756                 "Specifies whether an animation should be a one-shot", HFILL }
6757         },
6758         { &hf_cigi3_entity_control_animation_state,
6759             { "Animation State", "cigi.entity_control.animation_state",
6760                 FT_UINT8, BASE_DEC, VALS(cigi3_entity_control_animation_state_vals), 0x0c,
6761                 "Specifies the state of an animation", HFILL }
6762         },
6763         { &hf_cigi3_entity_control_alpha,
6764             { "Alpha", "cigi.entity_control.alpha",
6765                 FT_UINT8, BASE_DEC, NULL, 0x0,
6766                 "Specifies the explicit alpha to be applied to the entity's geometry", HFILL }
6767         },
6768         { &hf_cigi3_entity_control_entity_type,
6769             { "Entity Type", "cigi.entity_control.entity_type",
6770                 FT_UINT16, BASE_DEC, NULL, 0x0,
6771                 "Specifies the type for the entity", HFILL }
6772         },
6773         { &hf_cigi3_entity_control_parent_id,
6774             { "Parent ID", "cigi.entity_control.parent_id",
6775                 FT_UINT16, BASE_DEC, NULL, 0x0,
6776                 "Specifies the parent for the entity", HFILL }
6777         },
6778         { &hf_cigi3_entity_control_roll,
6779             { "Roll (degrees)", "cigi.entity_control.roll",
6780                 FT_FLOAT, BASE_DEC, NULL, 0x0,
6781                 "Specifies the roll angle of the entity", HFILL }
6782         },
6783         { &hf_cigi3_entity_control_pitch,
6784             { "Pitch (degrees)", "cigi.entity_control.pitch",
6785                 FT_FLOAT, BASE_DEC, NULL, 0x0,
6786                 "Specifies the pitch angle of the entity", HFILL }
6787         },
6788         { &hf_cigi3_entity_control_yaw,
6789             { "Yaw (degrees)", "cigi.entity_control.yaw",
6790                 FT_FLOAT, BASE_DEC, NULL, 0x0,
6791                 "Specifies the instantaneous heading of the entity", HFILL }
6792         },
6793         { &hf_cigi3_entity_control_lat_xoff,
6794             { "Latitude (degrees)/X Offset (m)", "cigi.entity_control.lat_xoff",
6795                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
6796                 "Specifies the entity's geodetic latitude or the distance from the parent's reference point along its parent's X axis", HFILL }
6797         },
6798         { &hf_cigi3_entity_control_lon_yoff,
6799             { "Longitude (degrees)/Y Offset (m)", "cigi.entity_control.lon_yoff",
6800                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
6801                 "Specifies the entity's geodetic longitude or the distance from the parent's reference point along its parent's Y axis", HFILL }
6802         },
6803         { &hf_cigi3_entity_control_alt_zoff,
6804             { "Altitude (m)/Z Offset (m)", "cigi.entity_control.alt_zoff",
6805                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
6806                 "Specifies the entity's altitude or the distance from the parent's reference point along its parent's Z axis", HFILL }
6807         },
6808
6809         /* CIGI3_3 Entity Control */
6810         { &hf_cigi3_3_entity_control,
6811             { "Entity Control", "cigi.entity_control",
6812                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6813                 "Entity Control Packet", HFILL }
6814         },
6815         { &hf_cigi3_3_entity_control_entity_id,
6816             { "Entity ID", "cigi.entity_control.entity_id",
6817                 FT_UINT16, BASE_DEC, NULL, 0x0,
6818                 "Specifies the entity to which this packet is applied", HFILL }
6819         },
6820         { &hf_cigi3_3_entity_control_entity_state,
6821             { "Entity State", "cigi.entity_control.entity_state",
6822                 FT_UINT8, BASE_DEC, VALS(cigi3_entity_control_entity_state_vals), 0x03,
6823                 "Specifies whether the entity should be active or destroyed", HFILL }
6824         },
6825         { &hf_cigi3_3_entity_control_attach_state,
6826             { "Attach State", "cigi.entity_control.attach_state",
6827                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_attach_state_tfs), 0x04,
6828                 "Specifies whether the entity should be attached as a child to a parent", HFILL }
6829         },
6830         { &hf_cigi3_3_entity_control_collision_detection_request,
6831             { "Collision Detection Request", "cigi.entity_control.coll_det_request",
6832                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_collision_detection_request_tfs), 0x08,
6833                 "Determines whether any collision detection segments and volumes associated with this entity are used as the source in collision testing", HFILL }
6834         },
6835         { &hf_cigi3_3_entity_control_inherit_alpha,
6836             { "Inherit Alpha", "cigi.entity_control.inherit_alpha",
6837                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_inherit_alpha_tfs), 0x10,
6838                 "Specifies whether the entity's alpha is combined with the apparent alpha of its parent", HFILL }
6839         },
6840         { &hf_cigi3_3_entity_control_ground_ocean_clamp,
6841             { "Ground/Ocean Clamp", "cigi.entity_control.ground_ocean_clamp",
6842                 FT_UINT8, BASE_DEC, VALS(cigi3_entity_control_ground_ocean_clamp_vals), 0x60,
6843                 "Specifies whether the entity should be clamped to the ground or water surface", HFILL }
6844         },
6845         { &hf_cigi3_3_entity_control_animation_direction,
6846             { "Animation Direction", "cigi.entity_control.animation_dir",
6847                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_animation_direction_tfs), 0x01,
6848                 "Specifies the direction in which an animation plays", HFILL }
6849         },
6850         { &hf_cigi3_3_entity_control_animation_loop_mode,
6851             { "Animation Loop Mode", "cigi.entity_control.animation_loop_mode",
6852                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_animation_loop_mode_tfs), 0x02,
6853                 "Specifies whether an animation should be a one-shot", HFILL }
6854         },
6855         { &hf_cigi3_3_entity_control_animation_state,
6856             { "Animation State", "cigi.entity_control.animation_state",
6857                 FT_UINT8, BASE_DEC, VALS(cigi3_entity_control_animation_state_vals), 0x0c,
6858                 "Specifies the state of an animation", HFILL }
6859         },
6860         { &hf_cigi3_3_entity_control_extrapolation_enable,
6861             { "Linear Extrapolation/Interpolation Enable", "cigi.entity_control.extrapolation_enable",
6862                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x10,
6863                 "Indicates whether the entity's motion may be smoothed by extrapolation or interpolation.", HFILL }
6864         },
6865         { &hf_cigi3_3_entity_control_alpha,
6866             { "Alpha", "cigi.entity_control.alpha",
6867                 FT_UINT8, BASE_DEC, NULL, 0x0,
6868                 "Specifies the explicit alpha to be applied to the entity's geometry", HFILL }
6869         },
6870         { &hf_cigi3_3_entity_control_entity_type,
6871             { "Entity Type", "cigi.entity_control.entity_type",
6872                 FT_UINT16, BASE_DEC, NULL, 0x0,
6873                 "Specifies the type for the entity", HFILL }
6874         },
6875         { &hf_cigi3_3_entity_control_parent_id,
6876             { "Parent ID", "cigi.entity_control.parent_id",
6877                 FT_UINT16, BASE_DEC, NULL, 0x0,
6878                 "Specifies the parent for the entity", HFILL }
6879         },
6880         { &hf_cigi3_3_entity_control_roll,
6881             { "Roll (degrees)", "cigi.entity_control.roll",
6882                 FT_FLOAT, BASE_DEC, NULL, 0x0,
6883                 "Specifies the roll angle of the entity", HFILL }
6884         },
6885         { &hf_cigi3_3_entity_control_pitch,
6886             { "Pitch (degrees)", "cigi.entity_control.pitch",
6887                 FT_FLOAT, BASE_DEC, NULL, 0x0,
6888                 "Specifies the pitch angle of the entity", HFILL }
6889         },
6890         { &hf_cigi3_3_entity_control_yaw,
6891             { "Yaw (degrees)", "cigi.entity_control.yaw",
6892                 FT_FLOAT, BASE_DEC, NULL, 0x0,
6893                 "Specifies the instantaneous heading of the entity", HFILL }
6894         },
6895         { &hf_cigi3_3_entity_control_lat_xoff,
6896             { "Latitude (degrees)/X Offset (m)", "cigi.entity_control.lat_xoff",
6897                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
6898                 "Specifies the entity's geodetic latitude or the distance from the parent's reference point along its parent's X axis", HFILL }
6899         },
6900         { &hf_cigi3_3_entity_control_lon_yoff,
6901             { "Longitude (degrees)/Y Offset (m)", "cigi.entity_control.lon_yoff",
6902                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
6903                 "Specifies the entity's geodetic longitude or the distance from the parent's reference point along its parent's Y axis", HFILL }
6904         },
6905         { &hf_cigi3_3_entity_control_alt_zoff,
6906             { "Altitude (m)/Z Offset (m)", "cigi.entity_control.alt_zoff",
6907                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
6908                 "Specifies the entity's altitude or the distance from the parent's reference point along its parent's Z axis", HFILL }
6909         },
6910
6911         /* CIGI3 Conformal Clamped Entity Control */
6912         { &hf_cigi3_conformal_clamped_entity_control,
6913             { "Conformal Clamped Entity Control", "cigi.conformal_clamped_entity_control",
6914                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6915                 "Conformal Clamped Entity Control Packet", HFILL }
6916         },
6917         { &hf_cigi3_conformal_clamped_entity_control_entity_id,
6918             { "Entity ID", "cigi.conformal_clamped_entity_control.entity_id",
6919                 FT_UINT16, BASE_DEC, NULL, 0x0,
6920                 "Specifies the entity to which this packet is applied", HFILL }
6921         },
6922         { &hf_cigi3_conformal_clamped_entity_control_yaw,
6923             { "Yaw (degrees)", "cigi.conformal_clamped_entity_control.yaw",
6924                 FT_FLOAT, BASE_DEC, NULL, 0x0,
6925                 "Specifies the instantaneous heading of the entity", HFILL }
6926         },
6927         { &hf_cigi3_conformal_clamped_entity_control_lat,
6928             { "Latitude (degrees)", "cigi.conformal_clamped_entity_control.lat",
6929                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
6930                 "Specifies the entity's geodetic latitude", HFILL }
6931         },
6932         { &hf_cigi3_conformal_clamped_entity_control_lon,
6933             { "Longitude (degrees)", "cigi.conformal_clamped_entity_control.lon",
6934                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
6935                 "Specifies the entity's geodetic longitude", HFILL }
6936         },
6937
6938         /* CIGI2 Component Control */
6939         { &hf_cigi2_component_control,
6940             { "Component Control", "cigi.component_control",
6941                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6942                 "Component Control Packet", HFILL }
6943         },
6944         { &hf_cigi2_component_control_instance_id,
6945             { "Instance ID", "cigi.component_control.instance_id",
6946                 FT_UINT16, BASE_DEC, NULL, 0x0,
6947                 "Identifies the instance of the a class the component being controlled belongs to", HFILL }
6948         },
6949         { &hf_cigi2_component_control_component_class,
6950             { "Component Class", "cigi.component_control.component_class",
6951                 FT_UINT8, BASE_DEC, VALS(cigi2_component_control_component_class_vals), 0x0,
6952                 "Identifies the class the component being controlled is in", HFILL }
6953         },
6954         { &hf_cigi2_component_control_component_id,
6955             { "Component ID", "cigi.component_control.component_id",
6956                 FT_UINT16, BASE_DEC, NULL, 0x0,
6957                 "Identifies the component of a component class and instance ID this packet will be applied to", HFILL }
6958         },
6959         { &hf_cigi2_component_control_component_state,
6960             { "Component State", "cigi.component_control.component_state",
6961                 FT_UINT16, BASE_DEC, NULL, 0x0,
6962                 "Identifies the commanded state of a component", HFILL }
6963         },
6964         { &hf_cigi2_component_control_component_val1,
6965             { "Component Value 1", "cigi.component_control.component_val1",
6966                 FT_FLOAT, BASE_DEC, NULL, 0x0,
6967                 "Identifies a continuous value to be applied to a component", HFILL }
6968         },
6969         { &hf_cigi2_component_control_component_val2,
6970             { "Component Value 2", "cigi.component_control.component_val2",
6971                 FT_FLOAT, BASE_DEC, NULL, 0x0,
6972                 "Identifies a continuous value to be applied to a component", HFILL }
6973         },
6974
6975         /* CIGI3 Component Control */
6976         { &hf_cigi3_component_control,
6977             { "Component Control", "cigi.component_control",
6978                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6979                 "Component Control Packet", HFILL }
6980         },
6981         { &hf_cigi3_component_control_component_id,
6982             { "Component ID", "cigi.component_control.component_id",
6983                 FT_UINT16, BASE_DEC, NULL, 0x0,
6984                 "Identifies the component to which the data in this packet should be applied", HFILL }
6985         },
6986         { &hf_cigi3_component_control_instance_id,
6987             { "Instance ID", "cigi.component_control.instance_id",
6988                 FT_UINT16, BASE_DEC, NULL, 0x0,
6989                 "Identifies the object to which the component belongs", HFILL }
6990         },
6991         { &hf_cigi3_component_control_component_class,
6992             { "Component Class", "cigi.component_control.component_class",
6993                 FT_UINT8, BASE_DEC, VALS(cigi3_component_control_component_class_vals), 0x0f,
6994                 "Identifies the type of object to which the Instance ID parameter refers", HFILL }
6995         },
6996         { &hf_cigi3_component_control_component_state,
6997             { "Component State", "cigi.component_control.component_state",
6998                 FT_UINT8, BASE_DEC, NULL, 0x0,
6999                 "Specifies a discrete state for the component", HFILL }
7000         },
7001         { &hf_cigi3_component_control_data_1,
7002             { "Component Data 1", "cigi.component_control.data_1",
7003                 FT_BYTES, BASE_NONE, NULL, 0x0,
7004                 "User-defined component data", HFILL }
7005         },
7006         { &hf_cigi3_component_control_data_2,
7007             { "Component Data 2", "cigi.component_control.data_2",
7008                 FT_BYTES, BASE_NONE, NULL, 0x0,
7009                 "User-defined component data", HFILL }
7010         },
7011         { &hf_cigi3_component_control_data_3,
7012             { "Component Data 3", "cigi.component_control.data_3",
7013                 FT_BYTES, BASE_NONE, NULL, 0x0,
7014                 "User-defined component data", HFILL }
7015         },
7016         { &hf_cigi3_component_control_data_4,
7017             { "Component Data 4", "cigi.component_control.data_4",
7018                 FT_BYTES, BASE_NONE, NULL, 0x0,
7019                 "User-defined component data", HFILL }
7020         },
7021         { &hf_cigi3_component_control_data_5,
7022             { "Component Data 5", "cigi.component_control.data_5",
7023                 FT_BYTES, BASE_NONE, NULL, 0x0,
7024                 "User-defined component data", HFILL }
7025         },
7026         { &hf_cigi3_component_control_data_6,
7027             { "Component Data 6", "cigi.component_control.data_6",
7028                 FT_BYTES, BASE_NONE, NULL, 0x0,
7029                 "User-defined component data", HFILL }
7030         },
7031
7032         /* CIGI3_3 Component Control */
7033         { &hf_cigi3_3_component_control,
7034             { "Component Control", "cigi.component_control",
7035                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7036                 "Component Control Packet", HFILL }
7037         },
7038         { &hf_cigi3_3_component_control_component_id,
7039             { "Component ID", "cigi.component_control.component_id",
7040                 FT_UINT16, BASE_DEC, NULL, 0x0,
7041                 "Identifies the component to which the data in this packet should be applied", HFILL }
7042         },
7043         { &hf_cigi3_3_component_control_instance_id,
7044             { "Instance ID", "cigi.component_control.instance_id",
7045                 FT_UINT16, BASE_DEC, NULL, 0x0,
7046                 "Identifies the object to which the component belongs", HFILL }
7047         },
7048         { &hf_cigi3_3_component_control_component_class,
7049             { "Component Class", "cigi.component_control.component_class",
7050                 FT_UINT8, BASE_DEC, VALS(cigi3_3_component_control_component_class_vals), 0x3f,
7051                 "Identifies the type of object to which the Instance ID parameter refers", HFILL }
7052         },
7053         { &hf_cigi3_3_component_control_component_state,
7054             { "Component State", "cigi.component_control.component_state",
7055                 FT_UINT8, BASE_DEC, NULL, 0x0,
7056                 "Specifies a discrete state for the component", HFILL }
7057         },
7058         { &hf_cigi3_3_component_control_data_1,
7059             { "Component Data 1", "cigi.component_control.data_1",
7060                 FT_BYTES, BASE_NONE, NULL, 0x0,
7061                 "User-defined component data", HFILL }
7062         },
7063         { &hf_cigi3_3_component_control_data_2,
7064             { "Component Data 2", "cigi.component_control.data_2",
7065                 FT_BYTES, BASE_NONE, NULL, 0x0,
7066                 "User-defined component data", HFILL }
7067         },
7068         { &hf_cigi3_3_component_control_data_3,
7069             { "Component Data 3", "cigi.component_control.data_3",
7070                 FT_BYTES, BASE_NONE, NULL, 0x0,
7071                 "User-defined component data", HFILL }
7072         },
7073         { &hf_cigi3_3_component_control_data_4,
7074             { "Component Data 4", "cigi.component_control.data_4",
7075                 FT_BYTES, BASE_NONE, NULL, 0x0,
7076                 "User-defined component data", HFILL }
7077         },
7078         { &hf_cigi3_3_component_control_data_5,
7079             { "Component Data 5", "cigi.component_control.data_5",
7080                 FT_BYTES, BASE_NONE, NULL, 0x0,
7081                 "User-defined component data", HFILL }
7082         },
7083         { &hf_cigi3_3_component_control_data_6,
7084             { "Component Data 6", "cigi.component_control.data_6",
7085                 FT_BYTES, BASE_NONE, NULL, 0x0,
7086                 "User-defined component data", HFILL }
7087         },
7088
7089         /* CIGI3 Short Component Control */
7090         { &hf_cigi3_short_component_control,
7091             { "Short Component Control", "cigi.short_component_control",
7092                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7093                 "Short Component Control Packet", HFILL }
7094         },
7095         { &hf_cigi3_short_component_control_component_id,
7096             { "Component ID", "cigi.short_component_control.component_id",
7097                 FT_UINT16, BASE_DEC, NULL, 0x0,
7098                 "Identifies the component to which the data in this packet should be applied", HFILL }
7099         },
7100         { &hf_cigi3_short_component_control_instance_id,
7101             { "Instance ID", "cigi.short_component_control.instance_id",
7102                 FT_UINT16, BASE_DEC, NULL, 0x0,
7103                 "Identifies the object to which the component belongs", HFILL }
7104         },
7105         { &hf_cigi3_short_component_control_component_class,
7106             { "Component Class", "cigi.short_component_control.component_class",
7107                 FT_UINT8, BASE_DEC, VALS(cigi3_short_component_control_component_class_vals), 0x0f,
7108                 "Identifies the type of object to which the Instance ID parameter refers", HFILL }
7109         },
7110         { &hf_cigi3_short_component_control_component_state,
7111             { "Component State", "cigi.short_component_control.component_state",
7112                 FT_UINT8, BASE_DEC, NULL, 0x0,
7113                 "Specifies a discrete state for the component", HFILL }
7114         },
7115         { &hf_cigi3_short_component_control_data_1,
7116             { "Component Data 1", "cigi.short_component_control.data_1",
7117                 FT_BYTES, BASE_NONE, NULL, 0x0,
7118                 "User-defined component data", HFILL }
7119         },
7120         { &hf_cigi3_short_component_control_data_2,
7121             { "Component Data 2", "cigi.short_component_control.data_2",
7122                 FT_BYTES, BASE_NONE, NULL, 0x0,
7123                 "User-defined component data", HFILL }
7124         },
7125
7126         /* CIGI3_3 Short Component Control */
7127         { &hf_cigi3_3_short_component_control,
7128             { "Short Component Control", "cigi.short_component_control",
7129                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7130                 "Short Component Control Packet", HFILL }
7131         },
7132         { &hf_cigi3_3_short_component_control_component_id,
7133             { "Component ID", "cigi.short_component_control.component_id",
7134                 FT_UINT16, BASE_DEC, NULL, 0x0,
7135                 "Identifies the component to which the data in this packet should be applied", HFILL }
7136         },
7137         { &hf_cigi3_3_short_component_control_instance_id,
7138             { "Instance ID", "cigi.short_component_control.instance_id",
7139                 FT_UINT16, BASE_DEC, NULL, 0x0,
7140                 "Identifies the object to which the component belongs", HFILL }
7141         },
7142         { &hf_cigi3_3_short_component_control_component_class,
7143             { "Component Class", "cigi.short_component_control.component_class",
7144                 FT_UINT8, BASE_DEC, VALS(cigi3_3_short_component_control_component_class_vals), 0x3f,
7145                 "Identifies the type of object to which the Instance ID parameter refers", HFILL }
7146         },
7147         { &hf_cigi3_3_short_component_control_component_state,
7148             { "Component State", "cigi.short_component_control.component_state",
7149                 FT_UINT8, BASE_DEC, NULL, 0x0,
7150                 "Specifies a discrete state for the component", HFILL }
7151         },
7152         { &hf_cigi3_3_short_component_control_data_1,
7153             { "Component Data 1", "cigi.short_component_control.data_1",
7154                 FT_BYTES, BASE_NONE, NULL, 0x0,
7155                 "User-defined component data", HFILL }
7156         },
7157         { &hf_cigi3_3_short_component_control_data_2,
7158             { "Component Data 2", "cigi.short_component_control.data_2",
7159                 FT_BYTES, BASE_NONE, NULL, 0x0,
7160                 "User-defined component data", HFILL }
7161         },
7162
7163         /* CIGI2 Articulated Parts Control */
7164         { &hf_cigi2_articulated_parts_control,
7165             { "Articulated Parts Control", "cigi.art_part_control",
7166                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7167                 "Articulated Parts Control Packet", HFILL }
7168         },
7169         { &hf_cigi2_articulated_parts_control_entity_id,
7170             { "Entity ID", "cigi.art_part_control.entity_id",
7171                 FT_UINT16, BASE_DEC, NULL, 0x0,
7172                 "Identifies the entity to which this data packet will be applied", HFILL }
7173         },
7174         { &hf_cigi2_articulated_parts_control_part_id,
7175             { "Articulated Part ID", "cigi.art_part_control.part_id",
7176                 FT_UINT8, BASE_DEC, NULL, 0x0,
7177                 "Identifies which articulated part is controlled with this data packet", HFILL }
7178         },
7179         { &hf_cigi2_articulated_parts_control_part_state,
7180             { "Articulated Part State", "cigi.art_part_control.part_state",
7181                 FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x80,
7182                 "Indicates whether an articulated part is to be shown in the display", HFILL }
7183         },
7184         { &hf_cigi2_articulated_parts_control_xoff_enable,
7185             { "X Offset Enable", "cigi.art_part_control.xoff_enable",
7186                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x40,
7187                 "Identifies whether the articulated part x offset in this data packet is manipulated from the host", HFILL }
7188         },
7189         { &hf_cigi2_articulated_parts_control_yoff_enable,
7190             { "Y Offset Enable", "cigi.art_part_control.yoff_enable",
7191                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x20,
7192                 "Identifies whether the articulated part y offset in this data packet is manipulated from the host", HFILL }
7193         },
7194         { &hf_cigi2_articulated_parts_control_zoff_enable,
7195             { "Z Offset Enable", "cigi.art_part_control.zoff_enable",
7196                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x10,
7197                 "Identifies whether the articulated part z offset in this data packet is manipulated from the host", HFILL }
7198         },
7199         { &hf_cigi2_articulated_parts_control_roll_enable,
7200             { "Roll Enable", "cigi.art_part_control.roll_enable",
7201                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
7202                 "Identifies whether the articulated part roll enable in this data packet is manipulated from the host", HFILL }
7203         },
7204         { &hf_cigi2_articulated_parts_control_pitch_enable,
7205             { "Pitch Enable", "cigi.art_part_control.pitch_enable",
7206                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x04,
7207                 "Identifies whether the articulated part pitch enable in this data packet is manipulated from the host", HFILL }
7208         },
7209         { &hf_cigi2_articulated_parts_control_yaw_enable,
7210             { "Yaw Enable", "cigi.art_part_control.yaw_enable",
7211                 FT_UINT8, BASE_DEC, NULL, 0x02,
7212                 "Identifies whether the articulated part yaw enable in this data packet is manipulated from the host", HFILL }
7213         },
7214         { &hf_cigi2_articulated_parts_control_x_offset,
7215             { "X Offset (m)", "cigi.art_part_control.x_offset",
7216                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7217                 "Identifies the distance along the X axis by which the articulated part should be moved", HFILL }
7218         },
7219         { &hf_cigi2_articulated_parts_control_y_offset,
7220             { "Y Offset (m)", "cigi.art_part_control.y_offset",
7221                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7222                 "Identifies the distance along the Y axis by which the articulated part should be moved", HFILL }
7223         },
7224         { &hf_cigi2_articulated_parts_control_z_offset,
7225             { "Z Offset (m)", "cigi.art_part_control.z_offset",
7226                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7227                 "Identifies the distance along the Z axis by which the articulated part should be moved", HFILL }
7228         },
7229         { &hf_cigi2_articulated_parts_control_roll,
7230             { "Roll (degrees)", "cigi.art_part_control.roll",
7231                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7232                 "Specifies the roll of this part with respect to the submodel coordinate system", HFILL }
7233         },
7234         { &hf_cigi2_articulated_parts_control_pitch,
7235             { "Pitch (degrees)", "cigi.art_part_control.pitch",
7236                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7237                 "Specifies the pitch of this part with respect to the submodel coordinate system", HFILL }
7238         },
7239         { &hf_cigi2_articulated_parts_control_yaw,
7240             { "Yaw (degrees)", "cigi.art_part_control.yaw",
7241                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7242                 "Specifies the yaw of this part with respect to the submodel coordinate system", HFILL }
7243         },
7244
7245         /* CIGI3 Articulated Part Control */
7246         { &hf_cigi3_articulated_part_control,
7247             { "Articulated Part Control", "cigi.art_part_control",
7248                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7249                 "Articulated Part Control Packet", HFILL }
7250         },
7251         { &hf_cigi3_articulated_part_control_entity_id,
7252             { "Entity ID", "cigi.art_part_control.entity_id",
7253                 FT_UINT16, BASE_DEC, NULL, 0x0,
7254                 "Specifies the entity to which the articulated part belongs", HFILL }
7255         },
7256         { &hf_cigi3_articulated_part_control_part_id,
7257             { "Articulated Part ID", "cigi.art_part_control.part_id",
7258                 FT_UINT8, BASE_DEC, NULL, 0x0,
7259                 "Specifies the articulated part to which the data in this packet should be applied", HFILL }
7260         },
7261         { &hf_cigi3_articulated_part_control_part_enable,
7262             { "Articulated Part Enable", "cigi.art_part_control.part_enable",
7263                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
7264                 "Determines whether the articulated part submodel should be enabled or disabled within the scene graph", HFILL }
7265         },
7266         { &hf_cigi3_articulated_part_control_xoff_enable,
7267             { "X Offset Enable", "cigi.art_part_control.xoff_enable",
7268                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x02,
7269                 "Determines whether the X Offset parameter of the current packet should be applied to the articulated part", HFILL }
7270         },
7271         { &hf_cigi3_articulated_part_control_yoff_enable,
7272             { "Y Offset Enable", "cigi.art_part_control.yoff_enable",
7273                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x04,
7274                 "Determines whether the Y Offset parameter of the current packet should be applied to the articulated part", HFILL }
7275         },
7276         { &hf_cigi3_articulated_part_control_zoff_enable,
7277             { "Z Offset Enable", "cigi.art_part_control.zoff_enable",
7278                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
7279                 "Determines whether the Z Offset parameter of the current packet should be applied to the articulated part", HFILL }
7280         },
7281         { &hf_cigi3_articulated_part_control_roll_enable,
7282             { "Roll Enable", "cigi.art_part_control.roll_enable",
7283                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x10,
7284                 "Determines whether the Roll parameter of the current packet should be applied to the articulated part", HFILL }
7285         },
7286         { &hf_cigi3_articulated_part_control_pitch_enable,
7287             { "Pitch Enable", "cigi.art_part_control.pitch_enable",
7288                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x20,
7289                 "Determines whether the Pitch parameter of the current packet should be applied to the articulated part", HFILL }
7290         },
7291         { &hf_cigi3_articulated_part_control_yaw_enable,
7292             { "Yaw Enable", "cigi.art_part_control.yaw_enable",
7293                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x40,
7294                 "Determines whether the Yaw parameter of the current packet should be applied to the articulated part", HFILL }
7295         },
7296         { &hf_cigi3_articulated_part_control_xoff,
7297             { "X Offset (m)", "cigi.art_part_control.xoff",
7298                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7299                 "Specifies the distance of the articulated part along its X axis", HFILL }
7300         },
7301         { &hf_cigi3_articulated_part_control_yoff,
7302             { "Y Offset (m)", "cigi.art_part_control.yoff",
7303                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7304                 "Specifies the distance of the articulated part along its Y axis", HFILL }
7305         },
7306         { &hf_cigi3_articulated_part_control_zoff,
7307             { "Z Offset (m)", "cigi.art_part_control.zoff",
7308                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7309                 "Specifies the distance of the articulated part along its Z axis", HFILL }
7310         },
7311         { &hf_cigi3_articulated_part_control_roll,
7312             { "Roll (degrees)", "cigi.art_part_control.roll",
7313                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7314                 "Specifies the angle of rotation of the articulated part submodel about its X axis after yaw and pitch have been applied", HFILL }
7315         },
7316         { &hf_cigi3_articulated_part_control_pitch,
7317             { "Pitch (degrees)", "cigi.art_part_control.pitch",
7318                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7319                 "Specifies the angle of rotation of the articulated part submodel about its Y axis after yaw has been applied", HFILL }
7320         },
7321         { &hf_cigi3_articulated_part_control_yaw,
7322             { "Yaw (degrees)", "cigi.art_part_control.yaw",
7323                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7324                 "Specifies the angle of rotation of the articulated part about its Z axis", HFILL }
7325         },
7326
7327         /* CIGI3 Short Articulated Part Control */
7328         { &hf_cigi3_short_articulated_part_control,
7329             { "Short Articulated Part Control", "cigi.short_art_part_control",
7330                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7331                 "Short Articulated Part Control Packet", HFILL }
7332         },
7333         { &hf_cigi3_short_articulated_part_control_entity_id,
7334             { "Entity ID", "cigi.short_art_part_control.entity_id",
7335                 FT_UINT16, BASE_DEC, NULL, 0x0,
7336                 "Specifies the entity to which the articulated part(s) belongs", HFILL }
7337         },
7338         { &hf_cigi3_short_articulated_part_control_part_id_1,
7339             { "Articulated Part ID 1", "cigi.short_art_part_control.part_id_1",
7340                 FT_UINT8, BASE_DEC, NULL, 0x0,
7341                 "Specifies an articulated part to which the data in this packet should be applied", HFILL }
7342         },
7343         { &hf_cigi3_short_articulated_part_control_part_id_2,
7344             { "Articulated Part ID 2", "cigi.short_art_part_control.part_id_2",
7345                 FT_UINT8, BASE_DEC, NULL, 0x0,
7346                 "Specifies an articulated part to which the data in this packet should be applied", HFILL }
7347         },
7348         { &hf_cigi3_short_articulated_part_control_dof_select_1,
7349             { "DOF Select 1", "cigi.short_art_part_control.dof_select_1",
7350                 FT_UINT8, BASE_DEC, VALS(cigi3_short_articulated_part_control_dof_select_vals), 0x07,
7351                 "Specifies the degree of freedom to which the value of DOF 1 is applied", HFILL }
7352         },
7353         { &hf_cigi3_short_articulated_part_control_dof_select_2,
7354             { "DOF Select 2", "cigi.short_art_part_control.dof_select_2",
7355                 FT_UINT8, BASE_DEC, VALS(cigi3_short_articulated_part_control_dof_select_vals), 0x38,
7356                 "Specifies the degree of freedom to which the value of DOF 2 is applied", HFILL }
7357         },
7358         { &hf_cigi3_short_articulated_part_control_part_enable_1,
7359             { "Articulated Part Enable 1", "cigi.short_art_part_control.part_enable_1",
7360                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x40,
7361                 "Determines whether the articulated part submodel specified by Articulated Part ID 1 should be enabled or disabled within the scene graph", HFILL }
7362         },
7363         { &hf_cigi3_short_articulated_part_control_part_enable_2,
7364             { "Articulated Part Enable 2", "cigi.short_art_part_control.part_enable_2",
7365                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x80,
7366                 "Determines whether the articulated part submodel specified by Articulated Part ID 2 should be enabled or disabled within the scene graph", HFILL }
7367         },
7368         { &hf_cigi3_short_articulated_part_control_dof_1,
7369             { "DOF 1", "cigi.short_art_part_control.dof_1",
7370                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7371                 "Specifies either an offset or an angular position for the part identified by Articulated Part ID 1", HFILL }
7372         },
7373         { &hf_cigi3_short_articulated_part_control_dof_2,
7374             { "DOF 2", "cigi.short_art_part_control.dof_2",
7375                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7376                 "Specifies either an offset or an angular position for the part identified by Articulated Part ID 2", HFILL }
7377         },
7378
7379         /* CIGI2 Rate Control */
7380         { &hf_cigi2_rate_control,
7381             { "Rate Control", "cigi.rate_control",
7382                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7383                 "Rate Control Packet", HFILL }
7384         },
7385         { &hf_cigi2_rate_control_entity_id,
7386             { "Entity ID", "cigi.rate_control.entity_id",
7387                 FT_UINT16, BASE_DEC, NULL, 0x0,
7388                 "Specifies the entity to which this data packet will be applied", HFILL }
7389         },
7390         { &hf_cigi2_rate_control_part_id,
7391             { "Articulated Part ID", "cigi.rate_control.part_id",
7392                 FT_INT8, BASE_DEC, NULL, 0x0,
7393                 "Identifies which articulated part is controlled with this data packet", HFILL }
7394         },
7395         { &hf_cigi2_rate_control_x_rate,
7396             { "X Linear Rate (m/s)", "cigi.rate_control.x_rate",
7397                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7398                 "Specifies the x component of the velocity vector for the entity being represented", HFILL }
7399         },
7400         { &hf_cigi2_rate_control_y_rate,
7401             { "Y Linear Rate (m/s)", "cigi.rate_control.y_rate",
7402                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7403                 "Specifies the y component of the velocity vector for the entity being represented", HFILL }
7404         },
7405         { &hf_cigi2_rate_control_z_rate,
7406             { "Z Linear Rate (m/s)", "cigi.rate_control.z_rate",
7407                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7408                 "Specifies the z component of the velocity vector for the entity being represented", HFILL }
7409         },
7410         { &hf_cigi2_rate_control_roll_rate,
7411             { "Roll Angular Rate (degrees/s)", "cigi.rate_control.roll_rate",
7412                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7413                 "Specifies the roll angular rate for the entity being represented", HFILL }
7414         },
7415         { &hf_cigi2_rate_control_pitch_rate,
7416             { "Pitch Angular Rate (degrees/s)", "cigi.rate_control.pitch_rate",
7417                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7418                 "Specifies the pitch angular rate for the entity being represented", HFILL }
7419         },
7420         { &hf_cigi2_rate_control_yaw_rate,
7421             { "Yaw Angular Rate (degrees/s)", "cigi.rate_control.yaw_rate",
7422                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7423                 "Specifies the yaw angular rate for the entity being represented", HFILL }
7424         },
7425
7426         /* CIGI3 Rate Control */
7427         { &hf_cigi3_rate_control,
7428             { "Rate Control", "cigi.rate_control",
7429                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7430                 "Rate Control Packet", HFILL }
7431         },
7432         { &hf_cigi3_rate_control_entity_id,
7433             { "Entity ID", "cigi.rate_control.entity_id",
7434                 FT_UINT16, BASE_DEC, NULL, 0x0,
7435                 "Specifies the entity to which the rate should be applied", HFILL }
7436         },
7437         { &hf_cigi3_rate_control_part_id,
7438             { "Articulated Part ID", "cigi.rate_control.part_id",
7439                 FT_UINT8, BASE_DEC, NULL, 0x0,
7440                 "Specifies the articulated part to which the rate should be applied", HFILL }
7441         },
7442         { &hf_cigi3_rate_control_apply_to_part,
7443             { "Apply to Articulated Part", "cigi.rate_control.apply_to_part",
7444                 FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x01,
7445                 "Determines whether the rate is applied to the articulated part specified by the Articulated Part ID parameter", HFILL }
7446         },
7447         { &hf_cigi3_rate_control_x_rate,
7448             { "X Linear Rate (m/s)", "cigi.rate_control.x_rate",
7449                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7450                 "Specifies the X component of a linear velocity vector", HFILL }
7451         },
7452         { &hf_cigi3_rate_control_y_rate,
7453             { "Y Linear Rate (m/s)", "cigi.rate_control.y_rate",
7454                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7455                 "Specifies the Y component of a linear velocity vector", HFILL }
7456         },
7457         { &hf_cigi3_rate_control_z_rate,
7458             { "Z Linear Rate (m/s)", "cigi.rate_control.z_rate",
7459                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7460                 "Specifies the Z component of a linear velocity vector", HFILL }
7461         },
7462         { &hf_cigi3_rate_control_roll_rate,
7463             { "Roll Angular Rate (degrees/s)", "cigi.rate_control.roll_rate",
7464                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7465                 "Specifies the angle of rotation of the articulated part submodel about its X axis after yaw and pitch have been applied", HFILL }
7466         },
7467         { &hf_cigi3_rate_control_pitch_rate,
7468             { "Pitch Angular Rate (degrees/s)", "cigi.rate_control.pitch_rate",
7469                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7470                 "Specifies the angle of rotation of the articulated part submodel about its Y axis after yaw has been applied", HFILL }
7471         },
7472         { &hf_cigi3_rate_control_yaw_rate,
7473             { "Yaw Angular Rate (degrees/s)", "cigi.rate_control.yaw_rate",
7474                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7475                 "Specifies the angle of rotation of the articulated part about its Z axis when its X axis is parallel to that of the entity", HFILL }
7476         },
7477
7478         /* CIGI3_2 Rate Control */
7479         { &hf_cigi3_2_rate_control,
7480             { "Rate Control", "cigi.rate_control",
7481                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7482                 "Rate Control Packet", HFILL }
7483         },
7484         { &hf_cigi3_2_rate_control_entity_id,
7485             { "Entity ID", "cigi.rate_control.entity_id",
7486                 FT_UINT16, BASE_DEC, NULL, 0x0,
7487                 "Specifies the entity to which the rate should be applied", HFILL }
7488         },
7489         { &hf_cigi3_2_rate_control_part_id,
7490             { "Articulated Part ID", "cigi.rate_control.part_id",
7491                 FT_UINT8, BASE_DEC, NULL, 0x0,
7492                 "Specifies the articulated part to which the rate should be applied", HFILL }
7493         },
7494         { &hf_cigi3_2_rate_control_apply_to_part,
7495             { "Apply to Articulated Part", "cigi.rate_control.apply_to_part",
7496                 FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x01,
7497                 "Determines whether the rate is applied to the articulated part specified by the Articulated Part ID parameter", HFILL }
7498         },
7499         { &hf_cigi3_2_rate_control_coordinate_system,
7500             { "Coordinate System", "cigi.rate_control.coordinate_system",
7501                 FT_BOOLEAN, 8, TFS(&cigi3_2_rate_control_coord_sys_select_vals), 0x02,
7502                 "Specifies the reference coordinate system to which the linear and angular rates are applied", HFILL }
7503         },
7504         { &hf_cigi3_2_rate_control_x_rate,
7505             { "X Linear Rate (m/s)", "cigi.rate_control.x_rate",
7506                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7507                 "Specifies the X component of a linear velocity vector", HFILL }
7508         },
7509         { &hf_cigi3_2_rate_control_y_rate,
7510             { "Y Linear Rate (m/s)", "cigi.rate_control.y_rate",
7511                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7512                 "Specifies the Y component of a linear velocity vector", HFILL }
7513         },
7514         { &hf_cigi3_2_rate_control_z_rate,
7515             { "Z Linear Rate (m/s)", "cigi.rate_control.z_rate",
7516                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7517                 "Specifies the Z component of a linear velocity vector", HFILL }
7518         },
7519         { &hf_cigi3_2_rate_control_roll_rate,
7520             { "Roll Angular Rate (degrees/s)", "cigi.rate_control.roll_rate",
7521                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7522                 "Specifies the angle of rotation of the articulated part submodel about its X axis after yaw and pitch have been applied", HFILL }
7523         },
7524         { &hf_cigi3_2_rate_control_pitch_rate,
7525             { "Pitch Angular Rate (degrees/s)", "cigi.rate_control.pitch_rate",
7526                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7527                 "Specifies the angle of rotation of the articulated part submodel about its Y axis after yaw has been applied", HFILL }
7528         },
7529         { &hf_cigi3_2_rate_control_yaw_rate,
7530             { "Yaw Angular Rate (degrees/s)", "cigi.rate_control.yaw_rate",
7531                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7532                 "Specifies the angle of rotation of the articulated part about its Z axis when its X axis is parallel to that of the entity", HFILL }
7533         },
7534
7535         /* CIGI3 Celestial Sphere Control */
7536         { &hf_cigi3_celestial_sphere_control,
7537             { "Celestial Sphere Control", "cigi.celestial_sphere_control",
7538                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7539                 "Celestial Sphere Control Packet", HFILL }
7540         },
7541         { &hf_cigi3_celestial_sphere_control_hour,
7542             { "Hour (h)", "cigi.celestial_sphere_control.hour",
7543                 FT_UINT8, BASE_DEC, NULL, 0x0,
7544                 "Specifies the current hour of the day within the simulation", HFILL }
7545         },
7546         { &hf_cigi3_celestial_sphere_control_minute,
7547             { "Minute (min)", "cigi.celestial_sphere_control.minute",
7548                 FT_UINT8, BASE_DEC, NULL, 0x0,
7549                 "Specifies the current minute of the day within the simulation", HFILL }
7550         },
7551         { &hf_cigi3_celestial_sphere_control_ephemeris_enable,
7552             { "Ephemeris Model Enable", "cigi.celestial_sphere_control.ephemeris_enable",
7553                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
7554                 "Controls whether the time of day is static or continuous", HFILL }
7555         },
7556         { &hf_cigi3_celestial_sphere_control_sun_enable,
7557             { "Sun Enable", "cigi.celestial_sphere_control.sun_enable",
7558                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x02,
7559                 "Specifies whether the sun is enabled in the sky model", HFILL }
7560         },
7561         { &hf_cigi3_celestial_sphere_control_moon_enable,
7562             { "Moon Enable", "cigi.celestial_sphere_control.moon_enable",
7563                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x04,
7564                 "Specifies whether the moon is enabled in the sky model", HFILL }
7565         },
7566         { &hf_cigi3_celestial_sphere_control_star_enable,
7567             { "Star Field Enable", "cigi.celestial_sphere_control.star_enable",
7568                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
7569                 "Specifies whether the start field is enabled in the sky model", HFILL }
7570         },
7571         { &hf_cigi3_celestial_sphere_control_date_time_valid,
7572             { "Date/Time Valid", "cigi.celestial_sphere_control.date_time_valid",
7573                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x10,
7574                 "Specifies whether the Hour, Minute, and Date parameters are valid", HFILL }
7575         },
7576         { &hf_cigi3_celestial_sphere_control_date,
7577             { "Date (MMDDYYYY)", "cigi.celestial_sphere_control.date",
7578                 FT_UINT32, BASE_DEC, NULL, 0x0,
7579                 "Specifies the current date within the simulation", HFILL }
7580         },
7581         { &hf_cigi3_celestial_sphere_control_star_intensity,
7582             { "Star Field Intensity (%)", "cigi.celestial_sphere_control.star_intensity",
7583                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7584                 "Specifies the intensity of the star field within the sky model", HFILL }
7585         },
7586
7587         /* CIGI3 Atmosphere Control */
7588         { &hf_cigi3_atmosphere_control,
7589             { "Atmosphere Control", "cigi.atmosphere_control",
7590                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7591                 "Atmosphere Control Packet", HFILL }
7592         },
7593         { &hf_cigi3_atmosphere_control_atmospheric_model_enable,
7594             { "Atmospheric Model Enable", "cigi.atmosphere_control.atmospheric_model_enable",
7595                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
7596                 "Specifies whether the IG should use an atmospheric model to determine spectral radiances for sensor applications", HFILL }
7597         },
7598         { &hf_cigi3_atmosphere_control_humidity,
7599             { "Global Humidity (%)", "cigi.atmosphere_control.humidity",
7600                 FT_UINT8, BASE_DEC, NULL, 0x0,
7601                 "Specifies the global humidity of the environment", HFILL }
7602         },
7603         { &hf_cigi3_atmosphere_control_air_temp,
7604             { "Global Air Temperature (degrees C)", "cigi.atmosphere_control.air_temp",
7605                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7606                 "Specifies the global air temperature of the environment", HFILL }
7607         },
7608         { &hf_cigi3_atmosphere_control_visibility_range,
7609             { "Global Visibility Range (m)", "cigi.atmosphere_control.visibility_range",
7610                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7611                 "Specifies the global visibility range through the atmosphere", HFILL }
7612         },
7613         { &hf_cigi3_atmosphere_control_horiz_wind,
7614             { "Global Horizontal Wind Speed (m/s)", "cigi.atmosphere_control.horiz_wind",
7615                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7616                 "Specifies the global wind speed parallel to the ellipsoid-tangential reference plane", HFILL }
7617         },
7618         { &hf_cigi3_atmosphere_control_vert_wind,
7619             { "Global Vertical Wind Speed (m/s)", "cigi.atmosphere_control.vert_wind",
7620                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7621                 "Specifies the global vertical wind speed", HFILL }
7622         },
7623         { &hf_cigi3_atmosphere_control_wind_direction,
7624             { "Global Wind Direction (degrees)", "cigi.atmosphere_control.wind_direction",
7625                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7626                 "Specifies the global wind direction", HFILL }
7627         },
7628         { &hf_cigi3_atmosphere_control_barometric_pressure,
7629             { "Global Barometric Pressure (mb or hPa)", "cigi.atmosphere_control.barometric_pressure",
7630                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7631                 "Specifies the global atmospheric pressure", HFILL }
7632         },
7633
7634         /* CIGI2 Environmental Control */
7635         { &hf_cigi2_environment_control,
7636             { "Environment Control", "cigi.env_control",
7637                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7638                 "Environment Control Packet", HFILL }
7639         },
7640         { &hf_cigi2_environment_control_hour,
7641             { "Hour (h)", "cigi.env_control.hour",
7642                 FT_UINT8, BASE_DEC, NULL, 0x0,
7643                 "Identifies the hour of the day for the ephemeris program within the image generator", HFILL }
7644         },
7645         { &hf_cigi2_environment_control_minute,
7646             { "Minute (min)", "cigi.env_control.minute",
7647                 FT_UINT8, BASE_DEC, NULL, 0x0,
7648                 "Identifies the minute of the hour for the ephemeris program within the image generator", HFILL }
7649         },
7650         { &hf_cigi2_environment_control_ephemeris_enable,
7651             { "Ephemeris Enable", "cigi.env_control.ephemeris_enable",
7652                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x80,
7653                 "Identifies whether a continuous time of day or static time of day is used", HFILL }
7654         },
7655         { &hf_cigi2_environment_control_humidity,
7656             { "Humidity (%)", "cigi.env_control.humidity",
7657                 FT_UINT8, BASE_DEC, NULL, 0x7f,
7658                 "Specifies the global humidity of the environment", HFILL }
7659         },
7660         { &hf_cigi2_environment_control_modtran_enable,
7661             { "MODTRAN", "cigi.env_control.modtran_enable",
7662                 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x80,
7663                 "Identifies whether atmospherics will be included in the calculations", HFILL }
7664         },
7665         { &hf_cigi2_environment_control_date,
7666             { "Date (MMDDYYYY)", "cigi.env_control.date",
7667                 FT_INT32, BASE_DEC, NULL, 0x0,
7668                 "Specifies the desired date for use by the ephemeris program within the image generator", HFILL }
7669         },
7670         { &hf_cigi2_environment_control_air_temp,
7671             { "Air Temperature (degrees C)", "cigi.env_control.air_temp",
7672                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7673                 "Identifies the global temperature of the environment", HFILL }
7674         },
7675         { &hf_cigi2_environment_control_global_visibility,
7676             { "Global Visibility (m)", "cigi.env_control.global_visibility",
7677                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7678                 "Identifies the global visibility", HFILL }
7679         },
7680         { &hf_cigi2_environment_control_wind_speed,
7681             { "Wind Speed (m/s)", "cigi.env_control.wind_speed",
7682                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7683                 "Identifies the global wind speed", HFILL }
7684         },
7685         { &hf_cigi2_environment_control_wind_direction,
7686             { "Wind Direction (degrees)", "cigi.env_control.wind_direction",
7687                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7688                 "Identifies the global wind direction", HFILL }
7689         },
7690         { &hf_cigi2_environment_control_pressure,
7691             { "Barometric Pressure (mb)", "cigi.env_control.pressure",
7692                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7693                 "Controls the atmospheric pressure input into MODTRAN", HFILL }
7694         },
7695         { &hf_cigi2_environment_control_aerosol,
7696             { "Aerosol (gm/m^3)", "cigi.env_control.aerosol",
7697                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7698                 "Controls the liquid water content for the defined atmosphere", HFILL }
7699         },
7700
7701         /* CIGI3 Environmental Region Control */
7702         { &hf_cigi3_environmental_region_control,
7703             { "Environmental Region Control", "cigi.env_region_control",
7704                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7705                 "Environmental Region Control Packet", HFILL }
7706         },
7707         { &hf_cigi3_environmental_region_control_region_id,
7708             { "Region ID", "cigi.env_region_control.region_id",
7709                 FT_UINT16, BASE_DEC, NULL, 0x0,
7710                 "Specifies the environmental region to which the data in this packet will be applied", HFILL }
7711         },
7712         { &hf_cigi3_environmental_region_control_region_state,
7713             { "Region State", "cigi.env_region_control.region_state",
7714                 FT_UINT8, BASE_DEC, VALS(cigi3_environmental_region_control_region_state_vals), 0x03,
7715                 "Specifies whether the region should be active or destroyed", HFILL }
7716         },
7717         { &hf_cigi3_environmental_region_control_merge_weather,
7718             { "Merge Weather Properties", "cigi.env_region_control.merge_weather",
7719                 FT_BOOLEAN, 8, TFS(&cigi3_environmental_region_control_merge_properties_tfs), 0x04,
7720                 "Specifies whether atmospheric conditions within this region should be merged with those of other regions within areas of overlap", HFILL }
7721         },
7722         { &hf_cigi3_environmental_region_control_merge_aerosol,
7723             { "Merge Aerosol Concentrations", "cigi.env_region_control.merge_aerosol",
7724                 FT_BOOLEAN, 8, TFS(&cigi3_environmental_region_control_merge_properties_tfs), 0x08,
7725                 "Specifies whether the concentrations of aerosols found within this region should be merged with those of other regions within areas of overlap", HFILL }
7726         },
7727         { &hf_cigi3_environmental_region_control_merge_maritime,
7728             { "Merge Maritime Surface Conditions", "cigi.env_region_control.merge_maritime",
7729                 FT_BOOLEAN, 8, TFS(&cigi3_environmental_region_control_merge_properties_tfs), 0x10,
7730                 "Specifies whether the maritime surface conditions found within this region should be merged with those of other regions within areas of overlap", HFILL }
7731         },
7732         { &hf_cigi3_environmental_region_control_merge_terrestrial,
7733             { "Merge Terrestrial Surface Conditions", "cigi.env_region_control.merge_terrestrial",
7734                 FT_BOOLEAN, 8, TFS(&cigi3_environmental_region_control_merge_properties_tfs), 0x20,
7735                 "Specifies whether the terrestrial surface conditions found within this region should be merged with those of other regions within areas of overlap", HFILL }
7736         },
7737         { &hf_cigi3_environmental_region_control_lat,
7738             { "Latitude (degrees)", "cigi.env_region_control.lat",
7739                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
7740                 "Specifies the geodetic latitude of the center of the rounded rectangle", HFILL }
7741         },
7742         { &hf_cigi3_environmental_region_control_lon,
7743             { "Longitude (degrees)", "cigi.env_region_control.lon",
7744                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
7745                 "Specifies the geodetic longitude of the center of the rounded rectangle", HFILL }
7746         },
7747         { &hf_cigi3_environmental_region_control_size_x,
7748             { "Size X (m)", "cigi.env_region_control.size_x",
7749                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7750                 "Specifies the length of the environmental region along its X axis at the geoid surface", HFILL }
7751         },
7752         { &hf_cigi3_environmental_region_control_size_y,
7753             { "Size Y (m)", "cigi.env_region_control.size_y",
7754                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7755                 "Specifies the length of the environmental region along its Y axis at the geoid surface", HFILL }
7756         },
7757         { &hf_cigi3_environmental_region_control_corner_radius,
7758             { "Corner Radius (m)", "cigi.env_region_control.corner_radius",
7759                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7760                 "Specifies the radius of the corner of the rounded rectangle", HFILL }
7761         },
7762         { &hf_cigi3_environmental_region_control_rotation,
7763             { "Rotation (degrees)", "cigi.env_region_control.rotation",
7764                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7765                 "Specifies the yaw angle of the rounded rectangle", HFILL }
7766         },
7767         { &hf_cigi3_environmental_region_control_transition_perimeter,
7768             { "Transition Perimeter (m)", "cigi.env_region_control.transition_perimeter",
7769                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7770                 "Specifies the width of the transition perimeter around the environmental region", HFILL }
7771         },
7772
7773         /* CIGI2 Weather Control */
7774         { &hf_cigi2_weather_control,
7775             { "Weather Control", "cigi.weather_control",
7776                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7777                 "Weather Control Packet", HFILL }
7778         },
7779         { &hf_cigi2_weather_control_entity_id,
7780             { "Entity ID", "cigi.weather_control.entity_id",
7781                 FT_UINT16, BASE_DEC, NULL, 0x0,
7782                 "Identifies the entity's ID", HFILL }
7783         },
7784         { &hf_cigi2_weather_control_weather_enable,
7785             { "Weather Enable", "cigi.weather_control.weather_enable",
7786                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x80,
7787                 "Indicates whether the phenomena specified by this data packet is visible", HFILL }
7788         },
7789         { &hf_cigi2_weather_control_scud_enable,
7790             { "Scud Enable", "cigi.weather_control.scud_enable",
7791                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x40,
7792                 "Indicates whether there will be scud effects applied to the phenomenon specified by this data packet", HFILL }
7793         },
7794         { &hf_cigi2_weather_control_random_winds,
7795             { "Random Winds Aloft", "cigi.weather_control.random_winds",
7796                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x20,
7797                 "Indicates whether a random frequency and duration should be applied to the winds aloft value", HFILL }
7798         },
7799         { &hf_cigi2_weather_control_severity,
7800             { "Severity", "cigi.weather_control.severity",
7801                 FT_UINT8, BASE_DEC, NULL, 0x1c,
7802                 "Indicates the severity of the weather phenomenon", HFILL }
7803         },
7804         { &hf_cigi2_weather_control_phenomenon_type,
7805             { "Phenomenon Type", "cigi.weather_control.phenomenon_type",
7806                 FT_UINT16, BASE_DEC, VALS(cigi2_weather_control_phenomenon_type_vals), 0x0,
7807                 "Identifies the type of weather described by this data packet", HFILL }
7808         },
7809         { &hf_cigi2_weather_control_air_temp,
7810             { "Air Temperature (degrees C)", "cigi.weather_control.air_temp",
7811                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7812                 "Identifies the local temperature inside the weather phenomenon", HFILL }
7813         },
7814         { &hf_cigi2_weather_control_opacity,
7815             { "Opacity (%)", "cigi.weather_control.opacity",
7816                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7817                 "Identifies the opacity of the weather phenomenon", HFILL }
7818         },
7819         { &hf_cigi2_weather_control_scud_frequency,
7820             { "Scud Frequency (%)", "cigi.weather_control.scud_frequency",
7821                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7822                 "Identifies the frequency for the scud effect", HFILL }
7823         },
7824         { &hf_cigi2_weather_control_coverage,
7825             { "Coverage (%)", "cigi.weather_control.coverage",
7826                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7827                 "Indicates the amount of area coverage a particular phenomenon has over the specified global visibility range given in the environment control data packet", HFILL }
7828         },
7829         { &hf_cigi2_weather_control_elevation,
7830             { "Elevation (m)", "cigi.weather_control.elevation",
7831                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7832                 "Indicates the base altitude of the weather phenomenon", HFILL }
7833         },
7834         { &hf_cigi2_weather_control_thickness,
7835             { "Thickness (m)", "cigi.weather_control.thickness",
7836                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7837                 "Indicates the vertical thickness of the weather phenomenon", HFILL }
7838         },
7839         { &hf_cigi2_weather_control_transition_band,
7840             { "Transition Band (m)", "cigi.weather_control.transition_band",
7841                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7842                 "Indicates a vertical transition band both above and below a phenomenon", HFILL }
7843         },
7844         { &hf_cigi2_weather_control_wind_speed,
7845             { "Winds Aloft Speed", "cigi.weather_control.wind_speed",
7846                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7847                 "Identifies the local wind speed applied to the phenomenon", HFILL }
7848         },
7849         { &hf_cigi2_weather_control_wind_direction,
7850             { "Winds Aloft Direction (degrees)", "cigi.weather_control.wind_direction",
7851                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7852                 "Indicates local direction of the wind applied to the phenomenon", HFILL }
7853         },
7854
7855         /* CIGI3 Weather Control */
7856         { &hf_cigi3_weather_control,
7857             { "Weather Control", "cigi.weather_control",
7858                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7859                 "Weather Control Packet", HFILL }
7860         },
7861         { &hf_cigi3_weather_control_entity_region_id,
7862             { "Entity ID/Region ID", "cigi.weather_control.entity_region_id",
7863                 FT_UINT16, BASE_DEC, NULL, 0x0,
7864                 "Specifies the entity to which the weather attributes in this packet are applied", HFILL }
7865         },
7866         { &hf_cigi3_weather_control_layer_id,
7867             { "Layer ID", "cigi.weather_control.layer_id",
7868                 FT_UINT8, BASE_DEC, VALS(cigi3_weather_control_layer_id_vals), 0x0,
7869                 "Specifies the weather layer to which the data in this packet are applied", HFILL }
7870         },
7871         { &hf_cigi3_weather_control_humidity,
7872             { "Humidity (%)", "cigi.weather_control.humidity",
7873                 FT_UINT8, BASE_DEC, NULL, 0x0,
7874                 "Specifies the humidity within the weather layer", HFILL }
7875         },
7876         { &hf_cigi3_weather_control_weather_enable,
7877             { "Weather Enable", "cigi.weather_control.weather_enable",
7878                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
7879                 "Specifies whether a weather layer and its atmospheric effects are enabled", HFILL }
7880         },
7881         { &hf_cigi3_weather_control_scud_enable,
7882             { "Scud Enable", "cigi.weather_control.scud_enable",
7883                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x02,
7884                 "Specifies whether weather layer produces scud effects within its transition bands", HFILL }
7885         },
7886         { &hf_cigi3_weather_control_random_winds_enable,
7887             { "Random Winds Enable", "cigi.weather_control.random_winds_enable",
7888                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x04,
7889                 "Specifies whether a random frequency and duration should be applied to the local wind effects", HFILL }
7890         },
7891         { &hf_cigi3_weather_control_random_lightning_enable,
7892             { "Random Lightning Enable", "cigi.weather_control.random_lightning_enable",
7893                 FT_UINT8, BASE_DEC, NULL, 0x08,
7894                 "Specifies whether the weather layer exhibits random lightning effects", HFILL }
7895         },
7896         { &hf_cigi3_weather_control_cloud_type,
7897             { "Cloud Type", "cigi.weather_control.cloud_type",
7898                 FT_UINT8, BASE_DEC, VALS(cigi3_weather_control_cloud_type_vals), 0xf0,
7899                 "Specifies the type of clouds contained within the weather layer", HFILL }
7900         },
7901         { &hf_cigi3_weather_control_scope,
7902             { "Scope", "cigi.weather_control.scope",
7903                 FT_UINT8, BASE_DEC, VALS(cigi3_weather_control_scope_vals), 0x03,
7904                 "Specifies whether the weather is global, regional, or assigned to an entity", HFILL }
7905         },
7906         { &hf_cigi3_weather_control_severity,
7907             { "Severity", "cigi.weather_control.severity",
7908                 FT_UINT8, BASE_DEC, NULL, 0x1c,
7909                 "Specifies the severity of the weather layer", HFILL }
7910         },
7911         { &hf_cigi3_weather_control_air_temp,
7912             { "Air Temperature (degrees C)", "cigi.weather_control.air_temp",
7913                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7914                 "Specifies the temperature within the weather layer", HFILL }
7915         },
7916         { &hf_cigi3_weather_control_visibility_range,
7917             { "Visibility Range (m)", "cigi.weather_control.visibility_range",
7918                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7919                 "Specifies the visibility range through the weather layer", HFILL }
7920         },
7921         { &hf_cigi3_weather_control_scud_frequency,
7922             { "Scud Frequency (%)", "cigi.weather_control.scud_frequency",
7923                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7924                 "Specifies the frequency of scud within the transition bands above and/or below a cloud or fog layer", HFILL }
7925         },
7926         { &hf_cigi3_weather_control_coverage,
7927             { "Coverage (%)", "cigi.weather_control.coverage",
7928                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7929                 "Specifies the amount of area coverage for the weather layer", HFILL }
7930         },
7931         { &hf_cigi3_weather_control_base_elevation,
7932             { "Base Elevation (m)", "cigi.weather_control.base_elevation",
7933                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7934                 "Specifies the altitude of the base of the weather layer", HFILL }
7935         },
7936         { &hf_cigi3_weather_control_thickness,
7937             { "Thickness (m)", "cigi.weather_control.thickness",
7938                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7939                 "Specifies the vertical thickness of the weather layer", HFILL }
7940         },
7941         { &hf_cigi3_weather_control_transition_band,
7942             { "Transition Band (m)", "cigi.weather_control.transition_band",
7943                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7944                 "Specifies the height of a vertical transition band both above and below the weather layer", HFILL }
7945         },
7946         { &hf_cigi3_weather_control_horiz_wind,
7947             { "Horizontal Wind Speed (m/s)", "cigi.weather_control.horiz_wind",
7948                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7949                 "Specifies the local wind speed parallel to the ellipsoid-tangential reference plane", HFILL }
7950         },
7951         { &hf_cigi3_weather_control_vert_wind,
7952             { "Vertical Wind Speed (m/s)", "cigi.weather_control.vert_wind",
7953                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7954                 "Specifies the local vertical wind speed", HFILL }
7955         },
7956         { &hf_cigi3_weather_control_wind_direction,
7957             { "Wind Direction (degrees)", "cigi.weather_control.wind_direction",
7958                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7959                 "Specifies the local wind direction", HFILL }
7960         },
7961         { &hf_cigi3_weather_control_barometric_pressure,
7962             { "Barometric Pressure (mb or hPa)", "cigi.weather_control.barometric_pressure",
7963                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7964                 "Specifies the atmospheric pressure within the weather layer", HFILL }
7965         },
7966         { &hf_cigi3_weather_control_aerosol_concentration,
7967             { "Aerosol Concentration (g/m^3)", "cigi.weather_control.aerosol_concentration",
7968                 FT_FLOAT, BASE_DEC, NULL, 0x0,
7969                 "Specifies the concentration of water, smoke, dust, or other particles suspended in the air", HFILL }
7970         },
7971
7972         /* CIGI3 Maritime Surface Conditions Control */
7973         { &hf_cigi3_maritime_surface_conditions_control,
7974             { "Maritime Surface Conditions Control", "cigi.maritime_surface_conditions_control",
7975                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7976                 "Maritime Surface Conditions Control Packet", HFILL }
7977         },
7978         { &hf_cigi3_maritime_surface_conditions_control_entity_region_id,
7979             { "Entity ID/Region ID", "cigi.maritime_surface_conditions_control.entity_region_id",
7980                 FT_UINT16, BASE_DEC, NULL, 0x0,
7981                 "Specifies the entity to which the surface attributes in this packet are applied or specifies the region to which the surface attributes are confined", HFILL }
7982         },
7983         { &hf_cigi3_maritime_surface_conditions_control_surface_conditions_enable,
7984             { "Surface Conditions Enable", "cigi.maritime_surface_conditions_control.surface_conditions_enable",
7985                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
7986                 "Determines the state of the specified surface conditions", HFILL }
7987         },
7988         { &hf_cigi3_maritime_surface_conditions_control_whitecap_enable,
7989             { "Whitecap Enable", "cigi.maritime_surface_conditions_control.whitecap_enable",
7990                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x02,
7991                 "Determines whether whitecaps are enabled", HFILL }
7992         },
7993         { &hf_cigi3_maritime_surface_conditions_control_scope,
7994             { "Scope", "cigi.maritime_surface_conditions_control.scope",
7995                 FT_UINT8, BASE_DEC, VALS(cigi3_maritime_surface_conditions_control_scope_vals), 0x0c,
7996                 "Specifies whether this packet is applied globally, applied to region, or assigned to an entity", HFILL }
7997         },
7998         { &hf_cigi3_maritime_surface_conditions_control_sea_surface_height,
7999             { "Sea Surface Height (m)", "cigi.maritime_surface_conditions_control.sea_surface_height",
8000                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8001                 "Specifies the height of the water above MSL at equilibrium", HFILL }
8002         },
8003         { &hf_cigi3_maritime_surface_conditions_control_surface_water_temp,
8004             { "Surface Water Temperature (degrees C)", "cigi.maritime_surface_conditions_control.surface_water_temp",
8005                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8006                 "Specifies the water temperature at the surface", HFILL }
8007         },
8008         { &hf_cigi3_maritime_surface_conditions_control_surface_clarity,
8009             { "Surface Clarity (%)", "cigi.maritime_surface_conditions_control.surface_clarity",
8010                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8011                 "Specifies the clarity of the water at its surface", HFILL }
8012         },
8013
8014         /* CIGI3 Wave Control */
8015         { &hf_cigi3_wave_control,
8016             { "Wave Control", "cigi.wave_control",
8017                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8018                 "Wave Control Packet", HFILL }
8019         },
8020         { &hf_cigi3_wave_control_entity_region_id,
8021             { "Entity ID/Region ID", "cigi.wave_control.entity_region_id",
8022                 FT_UINT16, BASE_DEC, NULL, 0x0,
8023                 "Specifies the surface entity for which the wave is defined or specifies the environmental region for which the wave is defined", HFILL }
8024         },
8025         { &hf_cigi3_wave_control_wave_id,
8026             { "Wave ID", "cigi.wave_control.wave_id",
8027                 FT_UINT8, BASE_DEC, NULL, 0x0,
8028                 "Specifies the wave to which the attributes in this packet are applied", HFILL }
8029         },
8030         { &hf_cigi3_wave_control_wave_enable,
8031             { "Wave Enable", "cigi.wave_control.wave_enable",
8032                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
8033                 "Determines whether the wave is enabled or disabled", HFILL }
8034         },
8035         { &hf_cigi3_wave_control_scope,
8036             { "Scope", "cigi.wave_control.scope",
8037                 FT_UINT8, BASE_DEC, VALS(cigi3_wave_control_scope_vals), 0x06,
8038                 "Specifies whether the wave is defined for global, regional, or entity-controlled maritime surface conditions", HFILL }
8039         },
8040         { &hf_cigi3_wave_control_breaker_type,
8041             { "Breaker Type", "cigi.wave_control.breaker_type",
8042                 FT_UINT8, BASE_DEC, VALS(cigi3_wave_control_breaker_type_vals), 0x18,
8043                 "Specifies the type of breaker within the surf zone", HFILL }
8044         },
8045         { &hf_cigi3_wave_control_height,
8046             { "Wave Height (m)", "cigi.wave_control.height",
8047                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8048                 "Specifies the average vertical distance from trough to crest produced by the wave", HFILL }
8049         },
8050         { &hf_cigi3_wave_control_wavelength,
8051             { "Wavelength (m)", "cigi.wave_control.wavelength",
8052                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8053                 "Specifies the distance from a particular phase on a wave to the same phase on an adjacent wave", HFILL }
8054         },
8055         { &hf_cigi3_wave_control_period,
8056             { "Period (s)", "cigi.wave_control.period",
8057                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8058                 "Specifies the time required for one complete oscillation of the wave", HFILL }
8059         },
8060         { &hf_cigi3_wave_control_direction,
8061             { "Direction (degrees)", "cigi.wave_control.direction",
8062                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8063                 "Specifies the direction in which the wave propagates", HFILL }
8064         },
8065         { &hf_cigi3_wave_control_phase_offset,
8066             { "Phase Offset (degrees)", "cigi.wave_control.phase_offset",
8067                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8068                 "Specifies a phase offset for the wave", HFILL }
8069         },
8070         { &hf_cigi3_wave_control_leading,
8071             { "Leading (degrees)", "cigi.wave_control.leading",
8072                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8073                 "Specifies the phase angle at which the crest occurs", HFILL }
8074         },
8075
8076         /* Terrestrial Surface Conditions Control */
8077         { &hf_cigi3_terrestrial_surface_conditions_control,
8078             { "Terrestrial Surface Conditions Control", "cigi.terrestrial_surface_conditions_control",
8079                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8080                 "Terrestrial Surface Conditions Control Packet", HFILL }
8081         },
8082         { &hf_cigi3_terrestrial_surface_conditions_control_entity_region_id,
8083             { "Entity ID/Region ID", "cigi.terrestrial_surface_conditions_control.entity_region_id",
8084                 FT_UINT16, BASE_DEC, NULL, 0x0,
8085                 "Specifies the environmental entity to which the surface condition attributes in this packet are applied", HFILL }
8086         },
8087         { &hf_cigi3_terrestrial_surface_conditions_control_surface_condition_id,
8088             { "Surface Condition ID", "cigi.terrestrial_surface_conditions_control.surface_condition_id",
8089                 FT_UINT16, BASE_DEC, NULL, 0x0,
8090                 "Identifies a surface condition or contaminant", HFILL }
8091         },
8092         { &hf_cigi3_terrestrial_surface_conditions_control_surface_condition_enable,
8093             { "Surface Condition Enable", "cigi.terrestrial_surface_conditions_control.surface_condition_enable",
8094                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
8095                 "Specifies whether the surface condition attribute identified by the Surface Condition ID parameter should be enabled", HFILL }
8096         },
8097         { &hf_cigi3_terrestrial_surface_conditions_control_scope,
8098             { "Scope", "cigi.terrestrial_surface_conditions_control.scope",
8099                 FT_UINT8, BASE_DEC, VALS(cigi3_terrestrial_surface_conditions_control_scope_vals), 0x06,
8100                 "Determines whether the specified surface conditions are applied globally, regionally, or to an environmental entity", HFILL }
8101         },
8102         { &hf_cigi3_terrestrial_surface_conditions_control_severity,
8103             { "Severity", "cigi.terrestrial_surface_conditions_control.severity",
8104                 FT_UINT8, BASE_DEC, NULL, 0xf8,
8105                 "Determines the degree of severity for the specified surface contaminant(s)", HFILL }
8106         },
8107         { &hf_cigi3_terrestrial_surface_conditions_control_coverage,
8108             { "Coverage (%)", "cigi.terrestrial_surface_conditions_control.coverage",
8109                 FT_UINT8, BASE_DEC, NULL, 0x0,
8110                 "Determines the degree of coverage of the specified surface contaminant", HFILL }
8111         },
8112
8113         /* CIGI2 View Control */
8114         { &hf_cigi2_view_control,
8115             { "View Control", "cigi.view_control",
8116                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8117                 "View Control Packet", HFILL }
8118         },
8119         { &hf_cigi2_view_control_entity_id,
8120             { "Entity ID", "cigi.view_control.entity_id",
8121                 FT_UINT16, BASE_DEC, NULL, 0x0,
8122                 "Indicates the entity to which this view should be attached", HFILL }
8123         },
8124         { &hf_cigi2_view_control_view_id,
8125             { "View ID", "cigi.view_control.view_id",
8126                 FT_UINT8, BASE_DEC, NULL, 0xf8,
8127                 "Specifies which view position is associated with offsets and rotation specified by this data packet", HFILL }
8128         },
8129         { &hf_cigi2_view_control_view_group,
8130             { "View Group Select", "cigi.view_control.view_group",
8131                 FT_UINT8, BASE_DEC, NULL, 0x07,
8132                 "Specifies which view group is to be controlled by the offsets", HFILL }
8133         },
8134         { &hf_cigi2_view_control_xoff_enable,
8135             { "X Offset Enable", "cigi.view_control.xoff_enable",
8136                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x80,
8137                 "Identifies whether the x offset parameter should be applied to the specified view or view group", HFILL }
8138         },
8139         { &hf_cigi2_view_control_yoff_enable,
8140             { "Y Offset Enable", "cigi.view_control.yoff_enable",
8141                 FT_UINT8, BASE_DEC, NULL, 0x40,
8142                 "Identifies whether the y offset parameter should be applied to the specified view or view group", HFILL }
8143         },
8144         { &hf_cigi2_view_control_zoff_enable,
8145             { "Z Offset Enable", "cigi.view_control.zoff_enable",
8146                 FT_UINT8, BASE_DEC, NULL, 0x20,
8147                 "Identifies whether the z offset parameter should be applied to the specified view or view group", HFILL }
8148         },
8149         { &hf_cigi2_view_control_roll_enable,
8150             { "Roll Enable", "cigi.view_control.roll_enable",
8151                 FT_UINT8, BASE_DEC, NULL, 0x10,
8152                 "Identifies whether the roll parameter should be applied to the specified view or view group", HFILL }
8153         },
8154         { &hf_cigi2_view_control_pitch_enable,
8155             { "Pitch Enable", "cigi.view_control.pitch_enable",
8156                 FT_UINT8, BASE_DEC, NULL, 0x08,
8157                 "Identifies whether the pitch parameter should be applied to the specified view or view group", HFILL }
8158         },
8159         { &hf_cigi2_view_control_yaw_enable,
8160             { "Yaw Enable", "cigi.view_control.yaw_enable",
8161                 FT_UINT8, BASE_DEC, NULL, 0x04,
8162                 "Identifies whether the yaw parameter should be applied to the specified view or view group", HFILL }
8163         },
8164         { &hf_cigi2_view_control_x_offset,
8165             { "X Offset (m)", "cigi.view_control.x_offset",
8166                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8167                 "Defines the X component of the view offset vector along the entity's longitudinal axis", HFILL }
8168         },
8169         { &hf_cigi2_view_control_y_offset,
8170             { "Y Offset", "cigi.view_control.y_offset",
8171                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8172                 "Defines the Y component of the view offset vector along the entity's lateral axis", HFILL }
8173         },
8174         { &hf_cigi2_view_control_z_offset,
8175             { "Z Offset", "cigi.view_control.z_offset",
8176                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8177                 "Defines the Z component of the view offset vector along the entity's vertical axis", HFILL }
8178         },
8179         { &hf_cigi2_view_control_roll,
8180             { "Roll (degrees)", "cigi.view_control.roll",
8181                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8182                 "The rotation about the view's X axis", HFILL }
8183         },
8184         { &hf_cigi2_view_control_pitch,
8185             { "Pitch (degrees)", "cigi.view_control.pitch",
8186                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8187                 "The rotation about the view's Y axis", HFILL }
8188         },
8189         { &hf_cigi2_view_control_yaw,
8190             { "Yaw (degrees)", "cigi.view_control.yaw",
8191                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8192                 "The rotation about the view's Z axis", HFILL }
8193         },
8194
8195         /* CIGI3 View Control */
8196         { &hf_cigi3_view_control,
8197             { "View Control", "cigi.view_control",
8198                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8199                 "View Control Packet", HFILL }
8200         },
8201         { &hf_cigi3_view_control_view_id,
8202             { "View ID", "cigi.view_control.view_id",
8203                 FT_UINT16, BASE_DEC, NULL, 0x0,
8204                 "Specifies the view to which the contents of this packet should be applied", HFILL }
8205         },
8206         { &hf_cigi3_view_control_group_id,
8207             { "Group ID", "cigi.view_control.group_id",
8208                 FT_UINT8, BASE_DEC, NULL, 0x0,
8209                 "Specifies the view group to which the contents of this packet are applied", HFILL }
8210         },
8211         { &hf_cigi3_view_control_xoff_enable,
8212             { "X Offset Enable", "cigi.view_control.xoff_enable",
8213                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
8214                 "Determines whether the X Offset parameter should be applied to the specified view or view group", HFILL }
8215         },
8216         { &hf_cigi3_view_control_yoff_enable,
8217             { "Y Offset Enable", "cigi.view_control.yoff_enable",
8218                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x02,
8219                 "Determines whether the Y Offset parameter should be applied to the specified view or view group", HFILL }
8220         },
8221         { &hf_cigi3_view_control_zoff_enable,
8222             { "Z Offset Enable", "cigi.view_control.zoff_enable",
8223                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x04,
8224                 "Determines whether the Z Offset parameter should be applied to the specified view or view group", HFILL }
8225         },
8226         { &hf_cigi3_view_control_roll_enable,
8227             { "Roll Enable", "cigi.view_control.roll_enable",
8228                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
8229                 "Determines whether the Roll parameter should be applied to the specified view or view group", HFILL }
8230         },
8231         { &hf_cigi3_view_control_pitch_enable,
8232             { "Pitch Enable", "cigi.view_control.pitch_enable",
8233                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x10,
8234                 "Determines whether the Pitch parameter should be applied to the specified view or view group", HFILL }
8235         },
8236         { &hf_cigi3_view_control_yaw_enable,
8237             { "Yaw Enable", "cigi.view_control.yaw_enable",
8238                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x20,
8239                 "Determines whether the Yaw parameter should be applied to the specified view or view group", HFILL }
8240         },
8241         { &hf_cigi3_view_control_entity_id,
8242             { "Entity ID", "cigi.view_control.entity_id",
8243                 FT_UINT16, BASE_DEC, NULL, 0x0,
8244                 "Specifies the entity to which the view or view group should be attached", HFILL }
8245         },
8246         { &hf_cigi3_view_control_xoff,
8247             { "X Offset (m)", "cigi.view_control.xoff",
8248                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8249                 "Specifies the position of the view eyepoint along the X axis of the entity specified by the Entity ID parameter", HFILL }
8250         },
8251         { &hf_cigi3_view_control_yoff,
8252             { "Y Offset (m)", "cigi.view_control.yoff",
8253                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8254                 "Specifies the position of the view eyepoint along the Y axis of the entity specified by the Entity ID parameter", HFILL }
8255         },
8256         { &hf_cigi3_view_control_zoff,
8257             { "Z Offset (m)", "cigi.view_control.zoff",
8258                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8259                 "Specifies the position of the view eyepoint along the Z axis of the entity specified by the Entity ID parameter", HFILL }
8260         },
8261         { &hf_cigi3_view_control_roll,
8262             { "Roll (degrees)", "cigi.view_control.roll",
8263                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8264                 "Specifies the angle of rotation of the view or view group about its X axis after yaw and pitch have been applied", HFILL }
8265         },
8266         { &hf_cigi3_view_control_pitch,
8267             { "Pitch (degrees)", "cigi.view_control.pitch",
8268                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8269                 "Specifies the angle of rotation of the view or view group about its Y axis after yaw has been applied", HFILL }
8270         },
8271         { &hf_cigi3_view_control_yaw,
8272             { "Yaw (degrees)", "cigi.view_control.yaw",
8273                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8274                 "Specifies the angle of rotation of the view or view group about its Z axis", HFILL }
8275         },
8276
8277         /* CIGI2 Sensor Control */
8278         { &hf_cigi2_sensor_control,
8279             { "Sensor Control", "cigi.sensor_control",
8280                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8281                 "Sensor Control Packet", HFILL }
8282         },
8283         { &hf_cigi2_sensor_control_view_id,
8284             { "View ID", "cigi.sensor_control.view_id",
8285                 FT_UINT8, BASE_DEC, NULL, 0xf8,
8286                 "Dictates to which view the corresponding sensor is assigned, regardless of the view group", HFILL }
8287         },
8288         { &hf_cigi2_sensor_control_sensor_enable,
8289             { "Sensor On/Off", "cigi.sensor_control.sensor_enable",
8290                 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x04,
8291                 "Indicates whether the sensor is turned on or off", HFILL }
8292         },
8293         { &hf_cigi2_sensor_control_polarity,
8294             { "Polarity", "cigi.sensor_control.polarity",
8295                 FT_BOOLEAN, 8, TFS(&cigi2_sensor_control_polarity_tfs), 0x02,
8296                 "Indicates whether this sensor is showing white hot or black hot", HFILL }
8297         },
8298         { &hf_cigi2_sensor_control_line_dropout,
8299             { "Line-by-Line Dropout", "cigi.sensor_control.line_dropout",
8300                 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x01,
8301                 "Indicates whether the line-by-line dropout feature is enabled", HFILL }
8302         },
8303         { &hf_cigi2_sensor_control_sensor_id,
8304             { "Sensor ID", "cigi.sensor_control.sensor_id",
8305                 FT_UINT8, BASE_DEC, NULL, 0x0,
8306                 "Identifies the sensor to which this packet should be applied", HFILL }
8307         },
8308         { &hf_cigi2_sensor_control_track_mode,
8309             { "Track Mode", "cigi.sensor_control.track_mode",
8310                 FT_UINT8, BASE_DEC, VALS(cigi2_sensor_control_track_mode_vals), 0xf0,
8311                 "Indicates which track mode the sensor should be", HFILL }
8312         },
8313         { &hf_cigi2_sensor_control_auto_gain,
8314             { "Automatic Gain", "cigi.sensor_control.auto_gain",
8315                 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x08,
8316                 "When set to \"on,\" cause the weapons sensor to automatically adjust the gain value to optimize the brightness and contrast of the sensor display", HFILL }
8317         },
8318         { &hf_cigi2_sensor_control_track_polarity,
8319             { "Track White/Black", "cigi.sensor_control.track_polarity",
8320                 FT_BOOLEAN, 8, TFS(&cigi2_sensor_control_polarity_tfs), 0x04,
8321                 "Identifies whether the weapons sensor will track wither white or black", HFILL }
8322         },
8323         { &hf_cigi2_sensor_control_gain,
8324             { "Gain", "cigi.sensor_control.gain",
8325                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8326                 "Indicates the gain value for the weapon sensor option", HFILL }
8327         },
8328         { &hf_cigi2_sensor_control_level,
8329             { "Level", "cigi.sensor_control.level",
8330                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8331                 "Indicates the level value for the weapon sensor option", HFILL }
8332         },
8333         { &hf_cigi2_sensor_control_ac_coupling,
8334             { "AC Coupling", "cigi.sensor_control.ac_coupling",
8335                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8336                 "Indicates the AC Coupling decay rate for the weapon sensor option", HFILL }
8337         },
8338         { &hf_cigi2_sensor_control_noise,
8339             { "Noise", "cigi.sensor_control.noise",
8340                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8341                 "Indicates the detector-noise gain for the weapon sensor option", HFILL }
8342         },
8343
8344         /* CIGI3 Sensor Control */
8345         { &hf_cigi3_sensor_control,
8346             { "Sensor Control", "cigi.sensor_control",
8347                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8348                 "Sensor Control Packet", HFILL }
8349         },
8350         { &hf_cigi3_sensor_control_view_id,
8351             { "View ID", "cigi.sensor_control.view_id",
8352                 FT_UINT16, BASE_DEC, NULL, 0x0,
8353                 "Identifies the view to which the specified sensor is assigned", HFILL }
8354         },
8355         { &hf_cigi3_sensor_control_sensor_id,
8356             { "Sensor ID", "cigi.sensor_control.sensor_id",
8357                 FT_UINT8, BASE_DEC, NULL, 0x0,
8358                 "Specifies the sensor to which the data in this packet are applied", HFILL }
8359         },
8360         { &hf_cigi3_sensor_control_sensor_on_off,
8361             { "Sensor On/Off", "cigi.sensor_control.sensor_on_off",
8362                 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x01,
8363                 "Specifies whether the sensor is turned on or off", HFILL }
8364         },
8365         { &hf_cigi3_sensor_control_polarity,
8366             { "Polarity", "cigi.sensor_control.polarity",
8367                 FT_BOOLEAN, 8, TFS(&cigi3_sensor_control_polarity_tfs), 0x02,
8368                 "Specifies whether the sensor shows white hot or black hot", HFILL }
8369         },
8370         { &hf_cigi3_sensor_control_line_dropout_enable,
8371             { "Line-by-Line Dropout Enable", "cigi.sensor_control.line_dropout_enable",
8372                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x04,
8373                 "Specifies whether line-by-line dropout is enabled", HFILL }
8374         },
8375         { &hf_cigi3_sensor_control_auto_gain,
8376             { "Automatic Gain", "cigi.sensor_control.auto_gain",
8377                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
8378                 "Specifies whether the sensor automatically adjusts the gain value to optimize the brightness and contrast of the sensor display", HFILL }
8379         },
8380         { &hf_cigi3_sensor_control_track_white_black,
8381             { "Track White/Black", "cigi.sensor_control.track_white_black",
8382                 FT_BOOLEAN, 8, TFS(&cigi3_sensor_control_track_white_black_tfs), 0x10,
8383                 "Specifies whether the sensor tracks white or black", HFILL }
8384         },
8385         { &hf_cigi3_sensor_control_track_mode,
8386             { "Track Mode", "cigi.sensor_control.track_mode",
8387                 FT_UINT8, BASE_DEC, VALS(cigi3_sensor_control_track_mode_vals), 0xe0,
8388                 "Specifies which track mode the sensor should use", HFILL }
8389         },
8390         { &hf_cigi3_sensor_control_response_type,
8391             { "Response Type", "cigi.sensor_control.response_type",
8392                 FT_BOOLEAN, 8, TFS(&cigi3_sensor_control_response_type_tfs), 0x01,
8393                 "Specifies whether the IG should return a Sensor Response packet or a Sensor Extended Response packet", HFILL }
8394         },
8395         { &hf_cigi3_sensor_control_gain,
8396             { "Gain", "cigi.sensor_control.gain",
8397                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8398                 "Specifies the contrast for the sensor display", HFILL }
8399         },
8400         { &hf_cigi3_sensor_control_level,
8401             { "Level", "cigi.sensor_control.level",
8402                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8403                 "Specifies the brightness for the sensor display", HFILL }
8404         },
8405         { &hf_cigi3_sensor_control_ac_coupling,
8406             { "AC Coupling (microseconds)", "cigi.sensor_control.ac_coupling",
8407                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8408                 "Specifies the AC coupling decay constant for the sensor display", HFILL }
8409         },
8410         { &hf_cigi3_sensor_control_noise,
8411             { "Noise", "cigi.sensor_control.noise",
8412                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8413                 "Specifies the amount of detector noise for the sensor", HFILL }
8414         },
8415
8416         /* Motion Tracker Control */
8417         { &hf_cigi3_motion_tracker_control,
8418             { "Motion Tracker Control", "cigi.motion_tracker_control",
8419                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8420                 "Motion Tracker Control Packet", HFILL }
8421         },
8422         { &hf_cigi3_motion_tracker_control_view_group_id,
8423             { "View/View Group ID", "cigi.motion_tracker_control.view_group_id",
8424                 FT_UINT16, BASE_DEC, NULL, 0x0,
8425                 "Specifies the view or view group to which the tracking device is attached", HFILL }
8426         },
8427         { &hf_cigi3_motion_tracker_control_tracker_id,
8428             { "Tracker ID", "cigi.motion_tracker_control.tracker_id",
8429                 FT_UINT8, BASE_DEC, NULL, 0x0,
8430                 "Specifies the tracker whose state the data in this packet represents", HFILL }
8431         },
8432         { &hf_cigi3_motion_tracker_control_tracker_enable,
8433             { "Tracker Enable", "cigi.motion_tracker_control.tracker_enable",
8434                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
8435                 "Specifies whether the tracking device is enabled", HFILL }
8436         },
8437         { &hf_cigi3_motion_tracker_control_boresight_enable,
8438             { "Boresight Enable", "cigi.motion_tracker_control.boresight_enable",
8439                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x02,
8440                 "Sets the boresight state of the external tracking device", HFILL }
8441         },
8442         { &hf_cigi3_motion_tracker_control_x_enable,
8443             { "X Enable", "cigi.motion_tracker_control.x_enable",
8444                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x04,
8445                 "Used to enable or disable the X-axis position of the motion tracker", HFILL }
8446         },
8447         { &hf_cigi3_motion_tracker_control_y_enable,
8448             { "Y Enable", "cigi.motion_tracker_control.y_enable",
8449                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
8450                 "Used to enable or disable the Y-axis position of the motion tracker", HFILL }
8451         },
8452         { &hf_cigi3_motion_tracker_control_z_enable,
8453             { "Z Enable", "cigi.motion_tracker_control.z_enable",
8454                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x10,
8455                 "Used to enable or disable the Z-axis position of the motion tracker", HFILL }
8456         },
8457         { &hf_cigi3_motion_tracker_control_roll_enable,
8458             { "Roll Enable", "cigi.motion_tracker_control.roll_enable",
8459                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x20,
8460                 "Used to enable or disable the roll of the motion tracker", HFILL }
8461         },
8462         { &hf_cigi3_motion_tracker_control_pitch_enable,
8463             { "Pitch Enable", "cigi.motion_tracker_control.pitch_enable",
8464                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x40,
8465                 "Used to enable or disable the pitch of the motion tracker", HFILL }
8466         },
8467         { &hf_cigi3_motion_tracker_control_yaw_enable,
8468             { "Yaw Enable", "cigi.motion_tracker_control.yaw_enable",
8469                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x80,
8470                 "Used to enable or disable the yaw of the motion tracker", HFILL }
8471         },
8472         { &hf_cigi3_motion_tracker_control_view_group_select,
8473             { "View/View Group Select", "cigi.motion_tracker_control.view_group_select",
8474                 FT_BOOLEAN, 8, TFS(&cigi3_motion_tracker_control_view_group_select_tfs), 0x01,
8475                 "Specifies whether the tracking device is attached to a single view or a view group", HFILL }
8476         },
8477
8478         /* CIGI3 Earth Reference Model Definition */
8479         { &hf_cigi3_earth_reference_model_definition,
8480             { "Earth Reference Model Definition", "cigi.earth_ref_model_def",
8481                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8482                 "Earth Reference Model Definition Packet", HFILL }
8483         },
8484         { &hf_cigi3_earth_reference_model_definition_erm_enable,
8485             { "Custom ERM Enable", "cigi.earth_ref_model_def.erm_enable",
8486                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
8487                 "Specifies whether the IG should use the Earth Reference Model defined by this packet", HFILL }
8488         },
8489         { &hf_cigi3_earth_reference_model_definition_equatorial_radius,
8490             { "Equatorial Radius (m)", "cigi.earth_ref_model_def.equatorial_radius",
8491                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
8492                 "Specifies the semi-major axis of the ellipsoid", HFILL }
8493         },
8494         { &hf_cigi3_earth_reference_model_definition_flattening,
8495             { "Flattening (m)", "cigi.earth_ref_model_def.flattening",
8496                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
8497                 "Specifies the flattening of the ellipsoid", HFILL }
8498         },
8499
8500         /* CIGI2 Trajectory Definition */
8501         { &hf_cigi2_trajectory_definition,
8502             { "Trajectory Definition", "cigi.trajectory_def",
8503                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8504                 "Trajectory Definition Packet", HFILL }
8505         },
8506         { &hf_cigi2_trajectory_definition_entity_id,
8507             { "Entity ID", "cigi.trajectory_def.entity_id",
8508                 FT_UINT16, BASE_DEC, NULL, 0x0,
8509                 "Indicates which entity is being influenced by this trajectory behavior", HFILL }
8510         },
8511         { &hf_cigi2_trajectory_definition_acceleration,
8512             { "Acceleration Factor (m/s^2)", "cigi.trajectory_def.acceleration",
8513                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8514                 "Indicates the acceleration factor that will be applied to the Vz component of the velocity vector over time to simulate the effects of gravity on the object", HFILL }
8515         },
8516         { &hf_cigi2_trajectory_definition_retardation,
8517             { "Retardation Rate (m/s)", "cigi.trajectory_def.retardation",
8518                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8519                 "Indicates what retardation factor will be applied to the object's motion", HFILL }
8520         },
8521         { &hf_cigi2_trajectory_definition_terminal_velocity,
8522             { "Terminal Velocity (m/s)", "cigi.trajectory_def.terminal_velocity",
8523                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8524                 "Indicates what final velocity the object will be allowed to obtain", HFILL }
8525         },
8526
8527         /* CIGI3 Trajectory Definition */
8528         { &hf_cigi3_trajectory_definition,
8529             { "Trajectory Definition", "cigi.trajectory_def",
8530                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8531                 "Trajectory Definition Packet", HFILL }
8532         },
8533         { &hf_cigi3_trajectory_definition_entity_id,
8534             { "Entity ID", "cigi.trajectory_def.entity_id",
8535                 FT_UINT16, BASE_DEC, NULL, 0x0,
8536                 "Identifies the entity for which the trajectory is defined", HFILL }
8537         },
8538         { &hf_cigi3_trajectory_definition_acceleration_x,
8539             { "Acceleration X (m/s^2)", "cigi.trajectory_def.acceleration_x",
8540                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8541                 "Specifies the X component of the acceleration vector", HFILL }
8542         },
8543         { &hf_cigi3_trajectory_definition_acceleration_y,
8544             { "Acceleration Y (m/s^2)", "cigi.trajectory_def.acceleration_y",
8545                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8546                 "Specifies the Y component of the acceleration vector", HFILL }
8547         },
8548         { &hf_cigi3_trajectory_definition_acceleration_z,
8549             { "Acceleration Z (m/s^2)", "cigi.trajectory_def.acceleration_z",
8550                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8551                 "Specifies the Z component of the acceleration vector", HFILL }
8552         },
8553         { &hf_cigi3_trajectory_definition_retardation_rate,
8554             { "Retardation Rate (m/s^2)", "cigi.trajectory_def.retardation_rate",
8555                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8556                 "Specifies the magnitude of an acceleration applied against the entity's instantaneous linear velocity vector", HFILL }
8557         },
8558         { &hf_cigi3_trajectory_definition_terminal_velocity,
8559             { "Terminal Velocity (m/s)", "cigi.trajectory_def.terminal_velocity",
8560                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8561                 "Specifies the maximum velocity the entity can sustain", HFILL }
8562         },
8563
8564         /* CIGI2 Special Effect Definition */
8565         { &hf_cigi2_special_effect_definition,
8566             { "Special Effect Definition", "cigi.special_effect_def",
8567                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8568                 "Special Effect Definition Packet", HFILL }
8569         },
8570         { &hf_cigi2_special_effect_definition_entity_id,
8571             { "Entity ID", "cigi.special_effect_def.entity_id",
8572                 FT_UINT16, BASE_DEC, NULL, 0x0,
8573                 "Indicates which effect is being modified", HFILL }
8574         },
8575         { &hf_cigi2_special_effect_definition_seq_direction,
8576             { "Sequence Direction", "cigi.special_effect_def.seq_direction",
8577                 FT_BOOLEAN, 8, TFS(&cigi2_special_effect_definition_seq_direction_tfs), 0x80,
8578                 "Indicates whether the effect animation sequence should be sequence from beginning to end or vice versa", HFILL }
8579         },
8580         { &hf_cigi2_special_effect_definition_color_enable,
8581             { "Color Enable", "cigi.special_effect_def.color_enable",
8582                 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x40,
8583                 "Indicates whether the red, green, and blue color values will be applied to the special effect", HFILL }
8584         },
8585         { &hf_cigi2_special_effect_definition_red,
8586             { "Red Color Value", "cigi.special_effect_def.red",
8587                 FT_UINT8, BASE_DEC, NULL, 0x0,
8588                 "Specifies the red component of a color to be applied to the effect", HFILL }
8589         },
8590         { &hf_cigi2_special_effect_definition_green,
8591             { "Green Color Value", "cigi.special_effect_def.green",
8592                 FT_UINT8, BASE_DEC, NULL, 0x0,
8593                 "Specifies the green component of a color to be applied to the effect", HFILL }
8594         },
8595         { &hf_cigi2_special_effect_definition_blue,
8596             { "Blue Color Value", "cigi.special_effect_def.blue",
8597                 FT_UINT8, BASE_DEC, NULL, 0x0,
8598                 "Specifies the blue component of a color to be applied to the effect", HFILL }
8599         },
8600         { &hf_cigi2_special_effect_definition_x_scale,
8601             { "X Scale", "cigi.special_effect_def.x_scale",
8602                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8603                 "Specifies a scale factor to apply along the effect's X axis", HFILL }
8604         },
8605         { &hf_cigi2_special_effect_definition_y_scale,
8606             { "Y Scale", "cigi.special_effect_def.y_scale",
8607                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8608                 "Specifies a scale factor to apply along the effect's Y axis", HFILL }
8609         },
8610         { &hf_cigi2_special_effect_definition_z_scale,
8611             { "Z Scale", "cigi.special_effect_def.z_scale",
8612                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8613                 "Specifies a scale factor to apply along the effect's Z axis", HFILL }
8614         },
8615         { &hf_cigi2_special_effect_definition_time_scale,
8616             { "Time Scale", "cigi.special_effect_def.time_scale",
8617                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8618                 "Specifies a scale factor to apply to the time period for the effect's animation sequence", HFILL }
8619         },
8620         { &hf_cigi2_special_effect_definition_effect_count,
8621             { "Effect Count", "cigi.special_effect_def.effect_count",
8622                 FT_UINT16, BASE_DEC, NULL, 0x0,
8623                 "Indicates how many effects are contained within a single burst", HFILL }
8624         },
8625         { &hf_cigi2_special_effect_definition_separation,
8626             { "Separation (m)", "cigi.special_effect_def.separation",
8627                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8628                 "Indicates the distance between particles within a burst", HFILL }
8629         },
8630         { &hf_cigi2_special_effect_definition_burst_interval,
8631             { "Burst Interval (s)", "cigi.special_effect_def.burst_interval",
8632                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8633                 "Indicates the time between successive bursts", HFILL }
8634         },
8635         { &hf_cigi2_special_effect_definition_duration,
8636             { "Duration (s)", "cigi.special_effect_def.duration",
8637                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8638                 "Indicates how long an effect or sequence of burst will be active", HFILL }
8639         },
8640
8641         /* CIGI2 View Definition */
8642         { &hf_cigi2_view_definition,
8643             { "View Definition", "cigi.view_def",
8644                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8645                 "View Definition Packet", HFILL }
8646         },
8647         { &hf_cigi2_view_definition_view_id,
8648             { "View ID", "cigi.view_def.view_id",
8649                 FT_UINT8, BASE_DEC, NULL, 0xf8,
8650                 "Specifies the view to which this packet should be applied", HFILL }
8651         },
8652         { &hf_cigi2_view_definition_view_group,
8653             { "View Group", "cigi.view_def.view_group",
8654                 FT_UINT8, BASE_DEC, NULL, 0x07,
8655                 "Specifies the view group to which the view is to be assigned", HFILL }
8656         },
8657         { &hf_cigi2_view_definition_view_type,
8658             { "View Type", "cigi.view_def.view_type",
8659                 FT_UINT8, BASE_DEC, NULL, 0xe0,
8660                 "Specifies the view type", HFILL }
8661         },
8662         { &hf_cigi2_view_definition_pixel_rep,
8663             { "Pixel Replication", "cigi.view_def.pixel_rep",
8664                 FT_UINT8, BASE_DEC, VALS(cigi2_view_definition_pixel_rep_vals), 0x1c,
8665                 "Specifies what pixel replication function should be applied to the view", HFILL }
8666         },
8667         { &hf_cigi2_view_definition_mirror,
8668             { "View Mirror", "cigi.view_def.mirror",
8669                 FT_UINT8, BASE_DEC, VALS(cigi2_view_definition_mirror_vals), 0x03,
8670                 "Specifies what mirroring function should be applied to the view", HFILL }
8671         },
8672         { &hf_cigi2_view_definition_tracker_assign,
8673             { "Tracker Assign", "cigi.view_def.tracker_assign",
8674                 FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x80,
8675                 "Specifies whether the view should be controlled by an external tracking device", HFILL }
8676         },
8677         { &hf_cigi2_view_definition_near_enable,
8678             { "Field of View Near Enable", "cigi.view_def.near_enable",
8679                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x40,
8680                 "Identifies whether the field of view near value is manipulated from the Host", HFILL }
8681         },
8682         { &hf_cigi2_view_definition_far_enable,
8683             { "Field of View Far Enable", "cigi.view_def.far_enable",
8684                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x20,
8685                 "Identifies whether the field of view far value is manipulated from the Host", HFILL }
8686         },
8687         { &hf_cigi2_view_definition_left_enable,
8688             { "Field of View Left Enable", "cigi.view_def.left_enable",
8689                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x10,
8690                 "Identifies whether the field of view left value is manipulated from the Host", HFILL }
8691         },
8692         { &hf_cigi2_view_definition_right_enable,
8693             { "Field of View Right Enable", "cigi.view_def.right_enable",
8694                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
8695                 "Identifies whether the field of view right value is manipulated from the Host", HFILL }
8696         },
8697         { &hf_cigi2_view_definition_top_enable,
8698             { "Field of View Top Enable", "cigi.view_def.top_enable",
8699                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x04,
8700                 "Identifies whether the field of view top value is manipulated from the Host", HFILL }
8701         },
8702         { &hf_cigi2_view_definition_bottom_enable,
8703             { "Field of View Bottom Enable", "cigi.view_def.bottom_enable",
8704                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x02,
8705                 "Identifies whether the field of view bottom value is manipulated from the Host", HFILL }
8706         },
8707         { &hf_cigi2_view_definition_fov_near,
8708             { "Field of View Near (m)", "cigi.view_def.fov_near",
8709                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8710                 "Defines the near clipping plane for the view", HFILL }
8711         },
8712         { &hf_cigi2_view_definition_fov_far,
8713             { "Field of View Far (m)", "cigi.view_def.fov_far",
8714                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8715                 "Defines the far clipping plane for the view", HFILL }
8716         },
8717         { &hf_cigi2_view_definition_fov_left,
8718             { "Field of View Left (degrees)", "cigi.view_def.fov_left",
8719                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8720                 "Defines the left clipping plane for the view", HFILL }
8721         },
8722         { &hf_cigi2_view_definition_fov_right,
8723             { "Field of View Right (degrees)", "cigi.view_def.fov_right",
8724                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8725                 "Defines the right clipping plane for the view", HFILL }
8726         },
8727         { &hf_cigi2_view_definition_fov_top,
8728             { "Field of View Top (degrees)", "cigi.view_def.fov_top",
8729                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8730                 "Defines the top clipping plane for the view", HFILL }
8731         },
8732         { &hf_cigi2_view_definition_fov_bottom,
8733             { "Field of View Bottom (degrees)", "cigi.view_def.fov_bottom",
8734                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8735                 "Defines the bottom clipping plane for the view", HFILL }
8736         },
8737
8738         /* CIGI3 View Definition */
8739         { &hf_cigi3_view_definition,
8740             { "View Definition", "cigi.view_def",
8741                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8742                 "View Definition Packet", HFILL }
8743         },
8744         { &hf_cigi3_view_definition_view_id,
8745             { "View ID", "cigi.view_def.view_id",
8746                 FT_UINT16, BASE_DEC, NULL, 0x0,
8747                 "Specifies the view to which the data in this packet will be applied", HFILL }
8748         },
8749         { &hf_cigi3_view_definition_group_id,
8750             { "Group ID", "cigi.view_def.group_id",
8751                 FT_UINT8, BASE_DEC, NULL, 0x0,
8752                 "Specifies the group to which the view is to be assigned", HFILL }
8753         },
8754         { &hf_cigi3_view_definition_near_enable,
8755             { "Near Enable", "cigi.view_def.near_enable",
8756                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
8757                 "Specifies whether the near clipping plane will be set to the value of the Near parameter within this packet", HFILL }
8758         },
8759         { &hf_cigi3_view_definition_far_enable,
8760             { "Far Enable", "cigi.view_def.far_enable",
8761                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x02,
8762                 "Specifies whether the far clipping plane will be set to the value of the Far parameter within this packet", HFILL }
8763         },
8764         { &hf_cigi3_view_definition_left_enable,
8765             { "Left Enable", "cigi.view_def.left_enable",
8766                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x04,
8767                 "Specifies whether the left half-angle of the view frustum will be set according to the value of the Left parameter within this packet", HFILL }
8768         },
8769         { &hf_cigi3_view_definition_right_enable,
8770             { "Right Enable", "cigi.view_def.right_enable",
8771                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
8772                 "Specifies whether the right half-angle of the view frustum will be set according to the value of the Right parameter within this packet", HFILL }
8773         },
8774         { &hf_cigi3_view_definition_top_enable,
8775             { "Top Enable", "cigi.view_def.top_enable",
8776                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x10,
8777                 "Specifies whether the top half-angle of the view frustum will be set according to the value of the Top parameter within this packet", HFILL }
8778         },
8779         { &hf_cigi3_view_definition_bottom_enable,
8780             { "Bottom Enable", "cigi.view_def.bottom_enable",
8781                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x20,
8782                 "Specifies whether the bottom half-angle of the view frustum will be set according to the value of the Bottom parameter within this packet", HFILL }
8783         },
8784         { &hf_cigi3_view_definition_mirror_mode,
8785             { "Mirror Mode", "cigi.view_def.mirror_mode",
8786                 FT_UINT8, BASE_DEC, VALS(cigi3_view_definition_mirror_mode_vals), 0xc0,
8787                 "Specifies the mirroring function to be performed on the view", HFILL }
8788         },
8789         { &hf_cigi3_view_definition_pixel_replication,
8790             { "Pixel Replication Mode", "cigi.view_def.pixel_replication",
8791                 FT_UINT8, BASE_DEC, VALS(cigi3_view_definition_pixel_replication_vals), 0x07,
8792                 "Specifies the pixel replication function to be performed on the view", HFILL }
8793         },
8794         { &hf_cigi3_view_definition_projection_type,
8795             { "Projection Type", "cigi.view_def.projection_type",
8796                 FT_BOOLEAN, 8, TFS(&cigi3_view_definition_projection_type_tfs), 0x08,
8797                 "Specifies whether the view projection should be perspective or orthographic parallel", HFILL }
8798         },
8799         { &hf_cigi3_view_definition_reorder,
8800             { "Reorder", "cigi.view_def.reorder",
8801                 FT_BOOLEAN, 8, TFS(&cigi3_view_definition_reorder_tfs), 0x10,
8802                 "Specifies whether the view should be moved to the top of any overlapping views", HFILL }
8803         },
8804         { &hf_cigi3_view_definition_view_type,
8805             { "View Type", "cigi.view_def.view_type",
8806                 FT_UINT8, BASE_DEC, NULL, 0xe0,
8807                 "Specifies an IG-defined type for the indicated view", HFILL }
8808         },
8809         { &hf_cigi3_view_definition_near,
8810             { "Near (m)", "cigi.view_def.near",
8811                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8812                 "Specifies the position of the view's near clipping plane", HFILL }
8813         },
8814         { &hf_cigi3_view_definition_far,
8815             { "Far (m)", "cigi.view_def.far",
8816                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8817                 "Specifies the position of the view's far clipping plane", HFILL }
8818         },
8819         { &hf_cigi3_view_definition_left,
8820             { "Left (degrees)", "cigi.view_def.left",
8821                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8822                 "Specifies the left half-angle of the view frustum", HFILL }
8823         },
8824         { &hf_cigi3_view_definition_right,
8825             { "Right (degrees)", "cigi.view_def.right",
8826                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8827                 "Specifies the right half-angle of the view frustum", HFILL }
8828         },
8829         { &hf_cigi3_view_definition_top,
8830             { "Top (degrees)", "cigi.view_def.top",
8831                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8832                 "Specifies the top half-angle of the view frustum", HFILL }
8833         },
8834         { &hf_cigi3_view_definition_bottom,
8835             { "Bottom (degrees)", "cigi.view_def.bottom",
8836                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8837                 "Specifies the bottom half-angle of the view frustum", HFILL }
8838         },
8839
8840         /* CIGI2 Collision Detection Segment Definition */
8841         { &hf_cigi2_collision_detection_segment_definition,
8842             { "Collision Detection Segment Definition", "cigi.coll_det_seg_def",
8843                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8844                 "Collision Detection Segment Definition Packet", HFILL }
8845         },
8846         { &hf_cigi2_collision_detection_segment_definition_entity_id,
8847             { "Entity ID", "cigi.coll_det_seg_def.entity_id",
8848                 FT_UINT16, BASE_DEC, NULL, 0x0,
8849                 "Indicates the entity to which this collision detection definition is assigned", HFILL }
8850         },
8851         { &hf_cigi2_collision_detection_segment_definition_segment_enable,
8852             { "Segment Enable", "cigi.coll_det_seg_def.segment_enable",
8853                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x80,
8854                 "Indicates whether the defined segment is enabled for collision testing", HFILL }
8855         },
8856         { &hf_cigi2_collision_detection_segment_definition_segment_id,
8857             { "Segment ID", "cigi.coll_det_seg_def.segment_id",
8858                 FT_UINT8, BASE_DEC, NULL, 0x7f,
8859                 "Indicates which segment is being uniquely defined for the given entity", HFILL }
8860         },
8861         { &hf_cigi2_collision_detection_segment_definition_collision_mask,
8862             { "Collision Mask", "cigi.coll_det_seg_def.collision_mask",
8863                 FT_BYTES, BASE_NONE, NULL, 0x0,
8864                 "Indicates which environment features will be included in or excluded from consideration for collision detection testing", HFILL }
8865         },
8866         { &hf_cigi2_collision_detection_segment_definition_x_start,
8867             { "Segment X Start (m)", "cigi.coll_det_seg_def.x_start",
8868                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8869                 "Specifies the starting point of the collision segment in the X-axis with respect to the entity's reference point", HFILL }
8870         },
8871         { &hf_cigi2_collision_detection_segment_definition_y_start,
8872             { "Segment Y Start (m)", "cigi.coll_det_seg_def.y_start",
8873                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8874                 "Specifies the starting point of the collision segment in the Y-axis with respect to the entity's reference point", HFILL }
8875         },
8876         { &hf_cigi2_collision_detection_segment_definition_z_start,
8877             { "Segment Z Start (m)", "cigi.coll_det_seg_def.z_start",
8878                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8879                 "Specifies the starting point of the collision segment in the Z-axis with respect to the entity's reference point", HFILL }
8880         },
8881         { &hf_cigi2_collision_detection_segment_definition_x_end,
8882             { "Segment X End (m)", "cigi.coll_det_seg_def.x_end",
8883                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8884                 "Specifies the ending point of the collision segment in the X-axis with respect to the entity's reference point", HFILL }
8885         },
8886         { &hf_cigi2_collision_detection_segment_definition_y_end,
8887             { "Segment Y End (m)", "cigi.coll_det_seg_def.y_end",
8888                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8889                 "Specifies the ending point of the collision segment in the Y-axis with respect to the entity's reference point", HFILL }
8890         },
8891         { &hf_cigi2_collision_detection_segment_definition_z_end,
8892             { "Segment Z End (m)", "cigi.coll_det_seg_def.z_end",
8893                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8894                 "Specifies the ending point of the collision segment in the Z-axis with respect to the entity's reference point", HFILL }
8895         },
8896
8897         /* CIGI3 Collision Detection Segment Definition */
8898         { &hf_cigi3_collision_detection_segment_definition,
8899             { "Collision Detection Segment Definition", "cigi.coll_det_seg_def",
8900                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8901                 "Collision Detection Segment Definition Packet", HFILL }
8902         },
8903         { &hf_cigi3_collision_detection_segment_definition_entity_id,
8904             { "Entity ID", "cigi.coll_det_seg_def.entity_id",
8905                 FT_UINT16, BASE_DEC, NULL, 0x0,
8906                 "Specifies the entity for which the segment is defined", HFILL }
8907         },
8908         { &hf_cigi3_collision_detection_segment_definition_segment_id,
8909             { "Segment ID", "cigi.coll_det_seg_def.segment_id",
8910                 FT_UINT8, BASE_DEC, NULL, 0x0,
8911                 "Specifies the ID of the segment", HFILL }
8912         },
8913         { &hf_cigi3_collision_detection_segment_definition_segment_enable,
8914             { "Segment Enable", "cigi.coll_det_seg_def.segment_enable",
8915                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
8916                 "Specifies whether the segment is enabled or disabled", HFILL }
8917         },
8918         { &hf_cigi3_collision_detection_segment_definition_x1,
8919             { "X1 (m)", "cigi.coll_det_seg_def.x1",
8920                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8921                 "Specifies the X offset of one endpoint of the collision segment", HFILL }
8922         },
8923         { &hf_cigi3_collision_detection_segment_definition_y1,
8924             { "Y1 (m)", "cigi.coll_det_seg_def.y1",
8925                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8926                 "Specifies the Y offset of one endpoint of the collision segment", HFILL }
8927         },
8928         { &hf_cigi3_collision_detection_segment_definition_z1,
8929             { "Z1 (m)", "cigi.coll_det_seg_def.z1",
8930                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8931                 "Specifies the Z offset of one endpoint of the collision segment", HFILL }
8932         },
8933         { &hf_cigi3_collision_detection_segment_definition_x2,
8934             { "X2 (m)", "cigi.coll_det_seg_def.x2",
8935                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8936                 "Specifies the X offset of one endpoint of the collision segment", HFILL }
8937         },
8938         { &hf_cigi3_collision_detection_segment_definition_y2,
8939             { "Y2 (m)", "cigi.coll_det_seg_def.y2",
8940                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8941                 "Specifies the Y offset of one endpoint of the collision segment", HFILL }
8942         },
8943         { &hf_cigi3_collision_detection_segment_definition_z2,
8944             { "Z2 (m)", "cigi.coll_det_seg_def.z2",
8945                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8946                 "Specifies the Z offset of one endpoint of the collision segment", HFILL }
8947         },
8948         { &hf_cigi3_collision_detection_segment_definition_material_mask,
8949             { "Material Mask", "cigi.coll_det_seg_def.material_mask",
8950                 FT_UINT32, BASE_DEC, NULL, 0x0,
8951                 "Specifies the environmental and cultural features to be included in or excluded from consideration for collision testing", HFILL }
8952         },
8953
8954         /* CIGI2 Collision Detection Volume Definition */
8955         { &hf_cigi2_collision_detection_volume_definition,
8956             { "Collision Detection Volume Definition", "cigi.coll_det_vol_def",
8957                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8958                 "Collision Detection Volume Definition Packet", HFILL }
8959         },
8960         { &hf_cigi2_collision_detection_volume_definition_entity_id,
8961             { "Entity ID", "cigi.coll_det_vol_def.entity_id",
8962                 FT_UINT16, BASE_DEC, NULL, 0x0,
8963                 "Indicates the entity to which this collision detection definition is assigned", HFILL }
8964         },
8965         { &hf_cigi2_collision_detection_volume_definition_volume_enable,
8966             { "Volume Enable", "cigi.coll_det_vol_def.volume_enable",
8967                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x80,
8968                 "Indicates whether the defined volume is enabled for collision testing", HFILL }
8969         },
8970         { &hf_cigi2_collision_detection_volume_definition_volume_id,
8971             { "Volume ID", "cigi.coll_det_vol_def.volume_id",
8972                 FT_UINT8, BASE_DEC, NULL, 0x7f,
8973                 "Indicates which volume is being uniquely defined for a given entity", HFILL }
8974         },
8975         { &hf_cigi2_collision_detection_volume_definition_x_offset,
8976             { "Centroid X Offset (m)", "cigi.coll_det_vol_def.x_offset",
8977                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8978                 "Specifies the offset of the volume's centroid along the X axis with respect to the entity's reference point", HFILL }
8979         },
8980         { &hf_cigi2_collision_detection_volume_definition_y_offset,
8981             { "Centroid Y Offset (m)", "cigi.coll_det_vol_def.y_offset",
8982                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8983                 "Specifies the offset of the volume's centroid along the Y axis with respect to the entity's reference point", HFILL }
8984         },
8985         { &hf_cigi2_collision_detection_volume_definition_z_offset,
8986             { "Centroid Z Offset (m)", "cigi.coll_det_vol_def.z_offset",
8987                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8988                 "Specifies the offset of the volume's centroid along the Z axis with respect to the entity's reference point", HFILL }
8989         },
8990         { &hf_cigi2_collision_detection_volume_definition_height,
8991             { "Height (m)", "cigi.coll_det_vol_def.height",
8992                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8993                 "Specifies the height of the volume", HFILL }
8994         },
8995         { &hf_cigi2_collision_detection_volume_definition_width,
8996             { "Width (m)", "cigi.coll_det_vol_def.width",
8997                 FT_FLOAT, BASE_DEC, NULL, 0x0,
8998                 "Specifies the width of the volume", HFILL }
8999         },
9000         { &hf_cigi2_collision_detection_volume_definition_depth,
9001             { "Depth (m)", "cigi.coll_det_vol_def.depth",
9002                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9003                 "Specifies the depth of the volume", HFILL }
9004         },
9005
9006         /* CIGI3 Collision Detection Volume Definition */
9007         { &hf_cigi3_collision_detection_volume_definition,
9008             { "Collision Detection Volume Definition", "cigi.coll_det_vol_def",
9009                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9010                 "Collision Detection Volume Definition Packet", HFILL }
9011         },
9012         { &hf_cigi3_collision_detection_volume_definition_entity_id,
9013             { "Entity ID", "cigi.coll_det_vol_def.entity_id",
9014                 FT_UINT16, BASE_DEC, NULL, 0x0,
9015                 "Specifies the entity for which the volume is defined", HFILL }
9016         },
9017         { &hf_cigi3_collision_detection_volume_definition_volume_id,
9018             { "Volume ID", "cigi.coll_det_vol_def.volume_id",
9019                 FT_UINT8, BASE_DEC, NULL, 0x0,
9020                 "Specifies the ID of the volume", HFILL }
9021         },
9022         { &hf_cigi3_collision_detection_volume_definition_volume_enable,
9023             { "Volume Enable", "cigi.coll_det_vol_def.volume_enable",
9024                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
9025                 "Specifies whether the volume is enabled or disabled", HFILL }
9026         },
9027         { &hf_cigi3_collision_detection_volume_definition_volume_type,
9028             { "Volume Type", "cigi.coll_det_vol_def.volume_type",
9029                 FT_BOOLEAN, 8, TFS(&cigi3_collision_detection_volume_definition_volume_type_tfs), 0x02,
9030                 "Specified whether the volume is spherical or cuboid", HFILL }
9031         },
9032         { &hf_cigi3_collision_detection_volume_definition_x,
9033             { "X (m)", "cigi.coll_det_vol_def.x",
9034                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9035                 "Specifies the X offset of the center of the volume", HFILL }
9036         },
9037         { &hf_cigi3_collision_detection_volume_definition_y,
9038             { "Y (m)", "cigi.coll_det_vol_def.y",
9039                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9040                 "Specifies the Y offset of the center of the volume", HFILL }
9041         },
9042         { &hf_cigi3_collision_detection_volume_definition_z,
9043             { "Z (m)", "cigi.coll_det_vol_def.z",
9044                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9045                 "Specifies the Z offset of the center of the volume", HFILL }
9046         },
9047         { &hf_cigi3_collision_detection_volume_definition_radius_height,
9048             { "Radius (m)/Height (m)", "cigi.coll_det_vol_def.radius_height",
9049                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9050                 "Specifies the radius of the sphere or specifies the length of the cuboid along its Z axis", HFILL }
9051         },
9052         { &hf_cigi3_collision_detection_volume_definition_width,
9053             { "Width (m)", "cigi.coll_det_vol_def.width",
9054                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9055                 "Specifies the length of the cuboid along its Y axis", HFILL }
9056         },
9057         { &hf_cigi3_collision_detection_volume_definition_depth,
9058             { "Depth (m)", "cigi.coll_det_vol_def.depth",
9059                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9060                 "Specifies the length of the cuboid along its X axis", HFILL }
9061         },
9062         { &hf_cigi3_collision_detection_volume_definition_roll,
9063             { "Roll (degrees)", "cigi.coll_det_vol_def.roll",
9064                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9065                 "Specifies the roll of the cuboid with respect to the entity's coordinate system", HFILL }
9066         },
9067         { &hf_cigi3_collision_detection_volume_definition_pitch,
9068             { "Pitch (degrees)", "cigi.coll_det_vol_def.pitch",
9069                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9070                 "Specifies the pitch of the cuboid with respect to the entity's coordinate system", HFILL }
9071         },
9072         { &hf_cigi3_collision_detection_volume_definition_yaw,
9073             { "Yaw (degrees)", "cigi.coll_det_vol_def.yaw",
9074                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9075                 "Specifies the yaw of the cuboid with respect to the entity's coordinate system", HFILL }
9076         },
9077
9078         /* CIGI2 Height Above Terrain Request */
9079         { &hf_cigi2_height_above_terrain_request,
9080             { "Height Above Terrain Request", "cigi.hat_request",
9081                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9082                 "Height Above Terrain Request Packet", HFILL }
9083         },
9084         { &hf_cigi2_height_above_terrain_request_hat_id,
9085             { "HAT ID", "cigi.hat_request.hat_id",
9086                 FT_UINT16, BASE_DEC, NULL, 0x0,
9087                 "Identifies the HAT request", HFILL }
9088         },
9089         { &hf_cigi2_height_above_terrain_request_alt,
9090             { "Altitude (m)", "cigi.hat_request.alt",
9091                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9092                 "Specifies the altitude from which the HAT request is being made", HFILL }
9093         },
9094         { &hf_cigi2_height_above_terrain_request_lat,
9095             { "Latitude (degrees)", "cigi.hat_request.lat",
9096                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9097                 "Specifies the latitudinal position from which the HAT request is being made", HFILL }
9098         },
9099         { &hf_cigi2_height_above_terrain_request_lon,
9100             { "Longitude (degrees)", "cigi.hat_request.lon",
9101                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9102                 "Specifies the longitudinal position from which the HAT request is being made", HFILL }
9103         },
9104
9105         /* CIGI2 Line of Sight Occult Request */
9106         { &hf_cigi2_line_of_sight_occult_request,
9107             { "Line of Sight Occult Request", "cigi.los_occult_request",
9108                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9109                 "Line of Sight Occult Request Packet", HFILL }
9110         },
9111         { &hf_cigi2_line_of_sight_occult_request_los_id,
9112             { "LOS ID", "cigi.los_occult_request.los_id",
9113                 FT_UINT16, BASE_DEC, NULL, 0x0,
9114                 "Identifies the LOS request", HFILL }
9115         },
9116         { &hf_cigi2_line_of_sight_occult_request_source_alt,
9117             { "Source Altitude (m)", "cigi.los_occult_request.source_alt",
9118                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9119                 "Specifies the altitude of the source point for the LOS request segment", HFILL }
9120         },
9121         { &hf_cigi2_line_of_sight_occult_request_source_lat,
9122             { "Source Latitude (degrees)", "cigi.los_occult_request.source_lat",
9123                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9124                 "Specifies the latitudinal position of the source point for the LOS request segment", HFILL }
9125         },
9126         { &hf_cigi2_line_of_sight_occult_request_source_lon,
9127             { "Source Longitude (degrees)", "cigi.los_occult_request.source_lon",
9128                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9129                 "Specifies the longitudinal position of the source point for the LOS request segment", HFILL }
9130         },
9131         { &hf_cigi2_line_of_sight_occult_request_dest_alt,
9132             { "Destination Altitude (m)", "cigi.los_occult_request.dest_alt",
9133                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9134                 "Specifies the altitude of the destination point for the LOS request segment", HFILL }
9135         },
9136         { &hf_cigi2_line_of_sight_occult_request_dest_lat,
9137             { "Destination Latitude (degrees)", "cigi.los_occult_request.dest_lat",
9138                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9139                 "Specifies the latitudinal position for the destination point for the LOS request segment", HFILL }
9140         },
9141         { &hf_cigi2_line_of_sight_occult_request_dest_lon,
9142             { "Destination Longitude (degrees)", "cigi.los_occult_request.dest_lon",
9143                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9144                 "Specifies the longitudinal position of the destination point for the LOS request segment", HFILL }
9145         },
9146
9147         /* CIGI2 Line of Sight Range Request */
9148         { &hf_cigi2_line_of_sight_range_request,
9149             { "Line of Sight Range Request", "cigi.los_range_request",
9150                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9151                 "Line of Sight Range Request Packet", HFILL }
9152         },
9153         { &hf_cigi2_line_of_sight_range_request_los_id,
9154             { "LOS ID", "cigi.los_range_request.los_id",
9155                 FT_UINT16, BASE_DEC, NULL, 0x0,
9156                 "Identifies the LOS request", HFILL }
9157         },
9158         { &hf_cigi2_line_of_sight_range_request_azimuth,
9159             { "Azimuth (degrees)", "cigi.los_range_request.azimuth",
9160                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9161                 "Specifies the azimuth of the LOS vector", HFILL }
9162         },
9163         { &hf_cigi2_line_of_sight_range_request_elevation,
9164             { "Elevation (degrees)", "cigi.los_range_request.elevation",
9165                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9166                 "Specifies the elevation for the LOS vector", HFILL }
9167         },
9168         { &hf_cigi2_line_of_sight_range_request_min_range,
9169             { "Minimum Range (m)", "cigi.los_range_request.min_range",
9170                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9171                 "Specifies the distance from the source position specified in this data packet to a point along the LOS vector where intersection testing will begin", HFILL }
9172         },
9173         { &hf_cigi2_line_of_sight_range_request_max_range,
9174             { "Maximum Range (m)", "cigi.los_range_request.max_range",
9175                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9176                 "Specifies the maximum extent from the source position specified in this data packet to a point along the LOS vector where intersection testing will end", HFILL }
9177         },
9178         { &hf_cigi2_line_of_sight_range_request_source_alt,
9179             { "Source Altitude (m)", "cigi.los_range_request.source_alt",
9180                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9181                 "Specifies the altitude of the source point of the LOS request vector", HFILL }
9182         },
9183         { &hf_cigi2_line_of_sight_range_request_source_lat,
9184             { "Source Latitude (degrees)", "cigi.los_range_request.source_lat",
9185                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9186                 "Specifies the latitudinal position of the source point of the LOS request vector", HFILL }
9187         },
9188         { &hf_cigi2_line_of_sight_range_request_source_lon,
9189             { "Source Longitude (degrees)", "cigi.los_range_request.source_lon",
9190                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9191                 "Specifies the longitudinal position of the source point of the LOS request vector", HFILL }
9192         },
9193
9194         /* CIGI2 Height of Terrain Request */
9195         { &hf_cigi2_height_of_terrain_request,
9196             { "Height of Terrain Request", "cigi.hot_request",
9197                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9198                 "Height of Terrain Request Packet", HFILL }
9199         },
9200         { &hf_cigi2_height_of_terrain_request_hot_id,
9201             { "HOT ID", "cigi.hot_request.hot_id",
9202                 FT_UINT16, BASE_DEC, NULL, 0x0,
9203                 "Identifies the HOT request", HFILL }
9204         },
9205         { &hf_cigi2_height_of_terrain_request_lat,
9206             { "Latitude (degrees)", "cigi.hot_request.lat",
9207                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9208                 "Specifies the latitudinal position from which the HOT request is made", HFILL }
9209         },
9210         { &hf_cigi2_height_of_terrain_request_lon,
9211             { "Longitude (degrees)", "cigi.hot_request.lon",
9212                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9213                 "Specifies the longitudinal position from which the HOT request is made", HFILL }
9214         },
9215
9216         /* CIGI3 HAT/HOT Request */
9217         { &hf_cigi3_hat_hot_request,
9218             { "HAT/HOT Request", "cigi.hat_hot_request",
9219                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9220                 "HAT/HOT Request Packet", HFILL }
9221         },
9222         { &hf_cigi3_hat_hot_request_hat_hot_id,
9223             { "HAT/HOT ID", "cigi.hat_hot_request.hat_hot_id",
9224                 FT_UINT16, BASE_DEC, NULL, 0x0,
9225                 "Identifies the HAT/HOT request", HFILL }
9226         },
9227         { &hf_cigi3_hat_hot_request_type,
9228             { "Request Type", "cigi.hat_hot_request.type",
9229                 FT_UINT8, BASE_DEC, VALS(cigi3_hat_hot_request_type_vals), 0x03,
9230                 "Determines the type of response packet the IG should return for this packet", HFILL }
9231         },
9232         { &hf_cigi3_hat_hot_request_coordinate_system,
9233             { "Coordinate System", "cigi.hat_hot_request.coordinate_system",
9234                 FT_BOOLEAN, 8, TFS(&cigi3_hat_hot_request_coordinate_system_tfs), 0x04,
9235                 "Specifies the coordinate system within which the test point is defined", HFILL }
9236         },
9237         { &hf_cigi3_hat_hot_request_entity_id,
9238             { "Entity ID", "cigi.hat_hot_request.entity_id",
9239                 FT_UINT16, BASE_DEC, NULL, 0x0,
9240                 "Specifies the entity relative to which the test point is defined", HFILL }
9241         },
9242         { &hf_cigi3_hat_hot_request_lat_xoff,
9243             { "Latitude (degrees)/X Offset (m)", "cigi.hat_hot_request.lat_xoff",
9244                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9245                 "Specifies the latitude from which the HAT/HOT request is being made or specifies the X offset of the point from which the HAT/HOT request is being made", HFILL }
9246         },
9247         { &hf_cigi3_hat_hot_request_lon_yoff,
9248             { "Longitude (degrees)/Y Offset (m)", "cigi.hat_hot_request.lon_yoff",
9249                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9250                 "Specifies the longitude from which the HAT/HOT request is being made or specifies the Y offset of the point from which the HAT/HOT request is being made", HFILL }
9251         },
9252         { &hf_cigi3_hat_hot_request_alt_zoff,
9253             { "Altitude (m)/Z Offset (m)", "cigi.hat_hot_request.alt_zoff",
9254                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9255                 "Specifies the altitude from which the HAT/HOT request is being made or specifies the Z offset of the point from which the HAT/HOT request is being made", HFILL }
9256         },
9257
9258         /* CIGI3_2 HAT/HOT Request */
9259         { &hf_cigi3_2_hat_hot_request,
9260             { "HAT/HOT Request", "cigi.hat_hot_request",
9261                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9262                 "HAT/HOT Request Packet", HFILL }
9263         },
9264         { &hf_cigi3_2_hat_hot_request_hat_hot_id,
9265             { "HAT/HOT ID", "cigi.hat_hot_request.hat_hot_id",
9266                 FT_UINT16, BASE_DEC, NULL, 0x0,
9267                 "Identifies the HAT/HOT request", HFILL }
9268         },
9269         { &hf_cigi3_2_hat_hot_request_type,
9270             { "Request Type", "cigi.hat_hot_request.type",
9271                 FT_UINT8, BASE_DEC, VALS(cigi3_2_hat_hot_request_type_vals), 0x03,
9272                 "Determines the type of response packet the IG should return for this packet", HFILL }
9273         },
9274         { &hf_cigi3_2_hat_hot_request_coordinate_system,
9275             { "Coordinate System", "cigi.hat_hot_request.coordinate_system",
9276                 FT_BOOLEAN, 8, TFS(&cigi3_2_hat_hot_request_coordinate_system_tfs), 0x04,
9277                 "Specifies the coordinate system within which the test point is defined", HFILL }
9278         },
9279         { &hf_cigi3_2_hat_hot_request_update_period,
9280             { "Update Period", "cigi.hat_hot_request.update_period",
9281                 FT_UINT8, BASE_DEC, NULL, 0x0,
9282                 "Specifies interval between successive responses to this request. A zero indicates one responses a value n > 0 the IG should respond every nth frame", HFILL }
9283         },
9284         { &hf_cigi3_2_hat_hot_request_entity_id,
9285             { "Entity ID", "cigi.hat_hot_request.entity_id",
9286                 FT_UINT16, BASE_DEC, NULL, 0x0,
9287                 "Specifies the entity relative to which the test point is defined", HFILL }
9288         },
9289         { &hf_cigi3_2_hat_hot_request_lat_xoff,
9290             { "Latitude (degrees)/X Offset (m)", "cigi.hat_hot_request.lat_xoff",
9291                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9292                 "Specifies the latitude from which the HAT/HOT request is being made or specifies the X offset of the point from which the HAT/HOT request is being made", HFILL }
9293         },
9294         { &hf_cigi3_2_hat_hot_request_lon_yoff,
9295             { "Longitude (degrees)/Y Offset (m)", "cigi.hat_hot_request.lon_yoff",
9296                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9297                 "Specifies the longitude from which the HAT/HOT request is being made or specifies the Y offset of the point from which the HAT/HOT request is being made", HFILL }
9298         },
9299         { &hf_cigi3_2_hat_hot_request_alt_zoff,
9300             { "Altitude (m)/Z Offset (m)", "cigi.hat_hot_request.alt_zoff",
9301                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9302                 "Specifies the altitude from which the HAT/HOT request is being made or specifies the Z offset of the point from which the HAT/HOT request is being made", HFILL }
9303         },
9304
9305         /* CIGI3 Line of Sight Segment Request */
9306         { &hf_cigi3_line_of_sight_segment_request,
9307             { "Line of Sight Segment Request", "cigi.los_segment_request",
9308                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9309                 "Line of Sight Segment Request Packet", HFILL }
9310         },
9311         { &hf_cigi3_line_of_sight_segment_request_los_id,
9312             { "LOS ID", "cigi.los_segment_request.los_id",
9313                 FT_UINT16, BASE_DEC, NULL, 0x0,
9314                 "Identifies the LOS request", HFILL }
9315         },
9316         { &hf_cigi3_line_of_sight_segment_request_type,
9317             { "Request Type", "cigi.los_segment_request.type",
9318                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_segment_request_type_tfs), 0x01,
9319                 "Determines what type of response the IG should return for this request", HFILL }
9320         },
9321         { &hf_cigi3_line_of_sight_segment_request_source_coord,
9322             { "Source Point Coordinate System", "cigi.los_segment_request.source_coord",
9323                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_segment_request_coord_tfs), 0x02,
9324                 "Indicates the coordinate system relative to which the test segment source endpoint is specified", HFILL }
9325         },
9326         { &hf_cigi3_line_of_sight_segment_request_destination_coord,
9327             { "Destination Point Coordinate System", "cigi.los_segment_request.destination_coord",
9328                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_segment_request_coord_tfs), 0x04,
9329                 "Indicates the coordinate system relative to which the test segment destination endpoint is specified", HFILL }
9330         },
9331         { &hf_cigi3_line_of_sight_segment_request_response_coord,
9332             { "Response Coordinate System", "cigi.los_segment_request.response_coord",
9333                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_segment_request_coord_tfs), 0x08,
9334                 "Specifies the coordinate system to be used in the response", HFILL }
9335         },
9336         { &hf_cigi3_line_of_sight_segment_request_alpha_threshold,
9337             { "Alpha Threshold", "cigi.los_segment_request.alpha_threshold",
9338                 FT_UINT8, BASE_DEC, NULL, 0x0,
9339                 "Specifies the minimum alpha value a surface may have for an LOS response to be generated", HFILL }
9340         },
9341         { &hf_cigi3_line_of_sight_segment_request_entity_id,
9342             { "Entity ID", "cigi.los_segment_request.entity_id",
9343                 FT_UINT16, BASE_DEC, NULL, 0x0,
9344                 "Specifies the entity relative to which the test segment endpoints are defined", HFILL }
9345         },
9346         { &hf_cigi3_line_of_sight_segment_request_source_lat_xoff,
9347             { "Source Latitude (degrees)/Source X Offset (m)", "cigi.los_segment_request.source_lat_xoff",
9348                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9349                 "Specifies the latitude of the source endpoint of the LOS test segment or specifies the X offset of the source endpoint of the LOS test segment", HFILL }
9350         },
9351         { &hf_cigi3_line_of_sight_segment_request_source_lon_yoff,
9352             { "Source Longitude (degrees)/Source Y Offset (m)", "cigi.los_segment_request.source_lon_yoff",
9353                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9354                 "Specifies the longitude of the source endpoint of the LOS test segment or specifies the Y offset of the source endpoint of the LOS test segment", HFILL }
9355         },
9356         { &hf_cigi3_line_of_sight_segment_request_source_alt_zoff,
9357             { "Source Altitude (m)/Source Z Offset (m)", "cigi.los_segment_request.source_alt_zoff",
9358                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9359                 "Specifies the altitude of the source endpoint of the LOS test segment or specifies the Z offset of the source endpoint of the LOS test segment", HFILL }
9360         },
9361         { &hf_cigi3_line_of_sight_segment_request_destination_lat_xoff,
9362             { "Destination Latitude (degrees)/ Destination X Offset (m)", "cigi.los_segment_request.destination_lat_xoff",
9363                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9364                 "Specifies the latitude of the destination endpoint of the LOS test segment or specifies the X offset of the destination endpoint of the LOS test segment", HFILL }
9365         },
9366         { &hf_cigi3_line_of_sight_segment_request_destination_lon_yoff,
9367             { "Destination Longitude (degrees)/Destination Y Offset (m)", "cigi.los_segment_request.destination_lon_yoff",
9368                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9369                 "Specifies the longitude of the destination endpoint of the LOS test segment or specifies the Y offset of the destination endpoint of the LOS test segment", HFILL }
9370         },
9371         { &hf_cigi3_line_of_sight_segment_request_destination_alt_zoff,
9372             { "Destination Altitude (m)/ Destination Z Offset (m)", "cigi.los_segment_request.destination_alt_zoff",
9373                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9374                 "Specifies the altitude of the destination endpoint of the LOS test segment or specifies the Z offset of the destination endpoint of the LOS test segment", HFILL }
9375         },
9376         { &hf_cigi3_line_of_sight_segment_request_material_mask,
9377             { "Material Mask", "cigi.los_segment_request.material_mask",
9378                 FT_UINT32, BASE_DEC, NULL, 0x0,
9379                 "Specifies the environmental and cultural features to be included in or excluded from consideration for the LOS segment testing", HFILL }
9380         },
9381
9382         /* CIGI3_2 Line of Sight Segment Request */
9383         { &hf_cigi3_2_line_of_sight_segment_request,
9384             { "Line of Sight Segment Request", "cigi.los_segment_request",
9385                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9386                 "Line of Sight Segment Request Packet", HFILL }
9387         },
9388         { &hf_cigi3_2_line_of_sight_segment_request_los_id,
9389             { "LOS ID", "cigi.los_segment_request.los_id",
9390                 FT_UINT16, BASE_DEC, NULL, 0x0,
9391                 "Identifies the LOS request", HFILL }
9392         },
9393         { &hf_cigi3_2_line_of_sight_segment_request_type,
9394             { "Request Type", "cigi.los_segment_request.type",
9395                 FT_BOOLEAN, 8, TFS(&cigi3_2_line_of_sight_segment_request_type_tfs), 0x01,
9396                 "Determines what type of response the IG should return for this request", HFILL }
9397         },
9398         { &hf_cigi3_2_line_of_sight_segment_request_source_coord,
9399             { "Source Point Coordinate System", "cigi.los_segment_request.source_coord",
9400                 FT_BOOLEAN, 8, TFS(&cigi3_2_line_of_sight_segment_request_coord_tfs), 0x02,
9401                 "Indicates the coordinate system relative to which the test segment source endpoint is specified", HFILL }
9402         },
9403         { &hf_cigi3_2_line_of_sight_segment_request_destination_coord,
9404             { "Destination Point Coordinate System", "cigi.los_segment_request.destination_coord",
9405                 FT_BOOLEAN, 8, TFS(&cigi3_2_line_of_sight_segment_request_coord_tfs), 0x04,
9406                 "Indicates the coordinate system relative to which the test segment destination endpoint is specified", HFILL }
9407         },
9408         { &hf_cigi3_2_line_of_sight_segment_request_response_coord,
9409             { "Response Coordinate System", "cigi.los_segment_request.response_coord",
9410                 FT_BOOLEAN, 8, TFS(&cigi3_2_line_of_sight_segment_request_coord_tfs), 0x08,
9411                 "Specifies the coordinate system to be used in the response", HFILL }
9412         },
9413         { &hf_cigi3_2_line_of_sight_segment_request_destination_entity_id_valid,
9414             { "Destination Entity ID Valid", "cigi.los_segment_request.destination_entity_id_valid",
9415                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x10,
9416                 "Destination Entity ID is valid.", HFILL }
9417         },
9418         { &hf_cigi3_2_line_of_sight_segment_request_alpha_threshold,
9419             { "Alpha Threshold", "cigi.los_segment_request.alpha_threshold",
9420                 FT_UINT8, BASE_DEC, NULL, 0x0,
9421                 "Specifies the minimum alpha value a surface may have for an LOS response to be generated", HFILL }
9422         },
9423         { &hf_cigi3_2_line_of_sight_segment_request_entity_id,
9424             { "Entity ID", "cigi.los_segment_request.entity_id",
9425                 FT_UINT16, BASE_DEC, NULL, 0x0,
9426                 "Specifies the entity relative to which the test segment endpoints are defined", HFILL }
9427         },
9428         { &hf_cigi3_2_line_of_sight_segment_request_source_lat_xoff,
9429             { "Source Latitude (degrees)/Source X Offset (m)", "cigi.los_segment_request.source_lat_xoff",
9430                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9431                 "Specifies the latitude of the source endpoint of the LOS test segment or specifies the X offset of the source endpoint of the LOS test segment", HFILL }
9432         },
9433         { &hf_cigi3_2_line_of_sight_segment_request_source_lon_yoff,
9434             { "Source Longitude (degrees)/Source Y Offset (m)", "cigi.los_segment_request.source_lon_yoff",
9435                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9436                 "Specifies the longitude of the source endpoint of the LOS test segment or specifies the Y offset of the source endpoint of the LOS test segment", HFILL }
9437         },
9438         { &hf_cigi3_2_line_of_sight_segment_request_source_alt_zoff,
9439             { "Source Altitude (m)/Source Z Offset (m)", "cigi.los_segment_request.source_alt_zoff",
9440                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9441                 "Specifies the altitude of the source endpoint of the LOS test segment or specifies the Z offset of the source endpoint of the LOS test segment", HFILL }
9442         },
9443         { &hf_cigi3_2_line_of_sight_segment_request_destination_lat_xoff,
9444             { "Destination Latitude (degrees)/ Destination X Offset (m)", "cigi.los_segment_request.destination_lat_xoff",
9445                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9446                 "Specifies the latitude of the destination endpoint of the LOS test segment or specifies the X offset of the destination endpoint of the LOS test segment", HFILL }
9447         },
9448         { &hf_cigi3_2_line_of_sight_segment_request_destination_lon_yoff,
9449             { "Destination Longitude (degrees)/Destination Y Offset (m)", "cigi.los_segment_request.destination_lon_yoff",
9450                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9451                 "Specifies the longitude of the destination endpoint of the LOS test segment or specifies the Y offset of the destination endpoint of the LOS test segment", HFILL }
9452         },
9453         { &hf_cigi3_2_line_of_sight_segment_request_destination_alt_zoff,
9454             { "Destination Altitude (m)/ Destination Z Offset (m)", "cigi.los_segment_request.destination_alt_zoff",
9455                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9456                 "Specifies the altitude of the destination endpoint of the LOS test segment or specifies the Z offset of the destination endpoint of the LOS test segment", HFILL }
9457         },
9458         { &hf_cigi3_2_line_of_sight_segment_request_material_mask,
9459             { "Material Mask", "cigi.los_segment_request.material_mask",
9460                 FT_UINT32, BASE_DEC, NULL, 0x0,
9461                 "Specifies the environmental and cultural features to be included in or excluded from consideration for the LOS segment testing", HFILL }
9462         },
9463         { &hf_cigi3_2_line_of_sight_segment_request_update_period,
9464             { "Update Period", "cigi.los_segment_request.update_period",
9465                 FT_UINT8, BASE_DEC, NULL, 0x0,
9466                 "Specifies interval between successive responses to this request. A zero indicates one responses a value n > 0 the IG should respond every nth frame", HFILL }
9467         },
9468         { &hf_cigi3_2_line_of_sight_segment_request_destination_entity_id,
9469             { "Destination Entity ID", "cigi.los_segment_request.destination_entity_id",
9470                 FT_UINT16, BASE_DEC, NULL, 0x0,
9471                 "Indicates the entity with respect to which the Destination X Offset, Y Offset, and Destination Z Offset parameters are specified", HFILL }
9472         },
9473
9474         /* CIGI3 Line of Sight Vector Request */
9475         { &hf_cigi3_line_of_sight_vector_request,
9476             { "Line of Sight Vector Request", "cigi.los_vector_request",
9477                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9478                 "Line of Sight Vector Request Packet", HFILL }
9479         },
9480         { &hf_cigi3_line_of_sight_vector_request_los_id,
9481             { "LOS ID", "cigi.los_vector_request.los_id",
9482                 FT_UINT16, BASE_DEC, NULL, 0x0,
9483                 "Identifies the LOS request", HFILL }
9484         },
9485         { &hf_cigi3_line_of_sight_vector_request_type,
9486             { "Request Type", "cigi.los_vector_request.type",
9487                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_vector_request_type_tfs), 0x01,
9488                 "Determines what type of response the IG should return for this request", HFILL }
9489         },
9490         { &hf_cigi3_line_of_sight_vector_request_source_coord,
9491             { "Source Point Coordinate System", "cigi.los_vector_request.source_coord",
9492                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_vector_request_coord_tfs), 0x02,
9493                 "Indicates the coordinate system relative to which the test vector source point is specified", HFILL }
9494         },
9495         { &hf_cigi3_line_of_sight_vector_request_response_coord,
9496             { "Response Coordinate System", "cigi.los_vector_request.response_coord",
9497                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_vector_request_coord_tfs), 0x04,
9498                 "Specifies the coordinate system to be used in the response", HFILL }
9499         },
9500         { &hf_cigi3_line_of_sight_vector_request_alpha,
9501             { "Alpha Threshold", "cigi.los_vector_request.alpha",
9502                 FT_UINT8, BASE_DEC, NULL, 0x0,
9503                 "Specifies the minimum alpha value a surface may have for an LOS response to be generated", HFILL }
9504         },
9505         { &hf_cigi3_line_of_sight_vector_request_entity_id,
9506             { "Entity ID", "cigi.los_vector_request.entity_id",
9507                 FT_UINT16, BASE_DEC, NULL, 0x0,
9508                 "Specifies the entity relative to which the test segment endpoints are defined", HFILL }
9509         },
9510         { &hf_cigi3_line_of_sight_vector_request_azimuth,
9511             { "Azimuth (degrees)", "cigi.los_vector_request.azimuth",
9512                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9513                 "Specifies the horizontal angle of the LOS test vector", HFILL }
9514         },
9515         { &hf_cigi3_line_of_sight_vector_request_elevation,
9516             { "Elevation (degrees)", "cigi.los_vector_request.elevation",
9517                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9518                 "Specifies the vertical angle of the LOS test vector", HFILL }
9519         },
9520         { &hf_cigi3_line_of_sight_vector_request_min_range,
9521             { "Minimum Range (m)", "cigi.los_vector_request.min_range",
9522                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9523                 "Specifies the minimum range along the LOS test vector at which intersection testing should occur", HFILL }
9524         },
9525         { &hf_cigi3_line_of_sight_vector_request_max_range,
9526             { "Maximum Range (m)", "cigi.los_vector_request.max_range",
9527                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9528                 "Specifies the maximum range along the LOS test vector at which intersection testing should occur", HFILL }
9529         },
9530         { &hf_cigi3_line_of_sight_vector_request_source_lat_xoff,
9531             { "Source Latitude (degrees)/Source X Offset (m)", "cigi.los_vector_request.source_lat_xoff",
9532                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9533                 "Specifies the latitude of the source point of the LOS test vector", HFILL }
9534         },
9535         { &hf_cigi3_line_of_sight_vector_request_source_lon_yoff,
9536             { "Source Longitude (degrees)/Source Y Offset (m)", "cigi.los_vector_request.source_lon_yoff",
9537                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9538                 "Specifies the longitude of the source point of the LOS test vector", HFILL }
9539         },
9540         { &hf_cigi3_line_of_sight_vector_request_source_alt_zoff,
9541             { "Source Altitude (m)/Source Z Offset (m)", "cigi.los_vector_request.source_alt_zoff",
9542                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9543                 "Specifies the altitude of the source point of the LOS test vector or specifies the Z offset of the source point of the LOS test vector", HFILL }
9544         },
9545         { &hf_cigi3_line_of_sight_vector_request_material_mask,
9546             { "Material Mask", "cigi.los_vector_request.material_mask",
9547                 FT_UINT32, BASE_DEC, NULL, 0x0,
9548                 "Specifies the environmental and cultural features to be included in LOS segment testing", HFILL }
9549         },
9550
9551         /* CIGI3_2 Line of Sight Vector Request */
9552         { &hf_cigi3_2_line_of_sight_vector_request,
9553             { "Line of Sight Vector Request", "cigi.los_vector_request",
9554                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9555                 "Line of Sight Vector Request Packet", HFILL }
9556         },
9557         { &hf_cigi3_2_line_of_sight_vector_request_los_id,
9558             { "LOS ID", "cigi.los_vector_request.los_id",
9559                 FT_UINT16, BASE_DEC, NULL, 0x0,
9560                 "Identifies the LOS request", HFILL }
9561         },
9562         { &hf_cigi3_2_line_of_sight_vector_request_type,
9563             { "Request Type", "cigi.los_vector_request.type",
9564                 FT_BOOLEAN, 8, TFS(&cigi3_2_line_of_sight_vector_request_type_tfs), 0x01,
9565                 "Determines what type of response the IG should return for this request", HFILL }
9566         },
9567         { &hf_cigi3_2_line_of_sight_vector_request_source_coord,
9568             { "Source Point Coordinate System", "cigi.los_vector_request.source_coord",
9569                 FT_BOOLEAN, 8, TFS(&cigi3_2_line_of_sight_vector_request_coord_tfs), 0x02,
9570                 "Indicates the coordinate system relative to which the test vector source point is specified", HFILL }
9571         },
9572         { &hf_cigi3_2_line_of_sight_vector_request_response_coord,
9573             { "Response Coordinate System", "cigi.los_vector_request.response_coord",
9574                 FT_BOOLEAN, 8, TFS(&cigi3_2_line_of_sight_vector_request_coord_tfs), 0x04,
9575                 "Specifies the coordinate system to be used in the response", HFILL }
9576         },
9577         { &hf_cigi3_2_line_of_sight_vector_request_alpha,
9578             { "Alpha Threshold", "cigi.los_vector_request.alpha",
9579                 FT_UINT8, BASE_DEC, NULL, 0x0,
9580                 "Specifies the minimum alpha value a surface may have for an LOS response to be generated", HFILL }
9581         },
9582         { &hf_cigi3_2_line_of_sight_vector_request_entity_id,
9583             { "Entity ID", "cigi.los_vector_request.entity_id",
9584                 FT_UINT16, BASE_DEC, NULL, 0x0,
9585                 "Specifies the entity relative to which the test segment endpoints are defined", HFILL }
9586         },
9587         { &hf_cigi3_2_line_of_sight_vector_request_azimuth,
9588             { "Azimuth (degrees)", "cigi.los_vector_request.azimuth",
9589                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9590                 "Specifies the horizontal angle of the LOS test vector", HFILL }
9591         },
9592         { &hf_cigi3_2_line_of_sight_vector_request_elevation,
9593             { "Elevation (degrees)", "cigi.los_vector_request.elevation",
9594                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9595                 "Specifies the vertical angle of the LOS test vector", HFILL }
9596         },
9597         { &hf_cigi3_2_line_of_sight_vector_request_min_range,
9598             { "Minimum Range (m)", "cigi.los_vector_request.min_range",
9599                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9600                 "Specifies the minimum range along the LOS test vector at which intersection testing should occur", HFILL }
9601         },
9602         { &hf_cigi3_2_line_of_sight_vector_request_max_range,
9603             { "Maximum Range (m)", "cigi.los_vector_request.max_range",
9604                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9605                 "Specifies the maximum range along the LOS test vector at which intersection testing should occur", HFILL }
9606         },
9607         { &hf_cigi3_2_line_of_sight_vector_request_source_lat_xoff,
9608             { "Source Latitude (degrees)/Source X Offset (m)", "cigi.los_vector_request.source_lat_xoff",
9609                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9610                 "Specifies the latitude of the source point of the LOS test vector", HFILL }
9611         },
9612         { &hf_cigi3_2_line_of_sight_vector_request_source_lon_yoff,
9613             { "Source Longitude (degrees)/Source Y Offset (m)", "cigi.los_vector_request.source_lon_yoff",
9614                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9615                 "Specifies the longitude of the source point of the LOS test vector", HFILL }
9616         },
9617         { &hf_cigi3_2_line_of_sight_vector_request_source_alt_zoff,
9618             { "Source Altitude (m)/Source Z Offset (m)", "cigi.los_vector_request.source_alt_zoff",
9619                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9620                 "Specifies the altitude of the source point of the LOS test vector or specifies the Z offset of the source point of the LOS test vector", HFILL }
9621         },
9622         { &hf_cigi3_2_line_of_sight_vector_request_material_mask,
9623             { "Material Mask", "cigi.los_vector_request.material_mask",
9624                 FT_UINT32, BASE_DEC, NULL, 0x0,
9625                 "Specifies the environmental and cultural features to be included in LOS segment testing", HFILL }
9626         },
9627         { &hf_cigi3_2_line_of_sight_vector_request_update_period,
9628             { "Update Period", "cigi.los_vector_request.update_period",
9629                 FT_UINT8, BASE_DEC, NULL, 0x0,
9630                 "Specifies interval between successive responses to this request. A zero indicates one responses a value n > 0 the IG should respond every nth frame", HFILL }
9631         },
9632
9633         /* CIGI3 Position Request */
9634         { &hf_cigi3_position_request,
9635             { "Position Request", "cigi.pos_request",
9636                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9637                 "Position Request Packet", HFILL }
9638         },
9639         { &hf_cigi3_position_request_object_id,
9640             { "Object ID", "cigi.pos_request.object_id",
9641                 FT_UINT16, BASE_DEC, NULL, 0x0,
9642                 "Identifies the entity, view, view group, or motion tracking device whose position is being requested", HFILL }
9643         },
9644         { &hf_cigi3_position_request_part_id,
9645             { "Articulated Part ID", "cigi.pos_request.part_id",
9646                 FT_UINT8, BASE_DEC, NULL, 0x0,
9647                 "Identifies the articulated part whose position is being requested", HFILL }
9648         },
9649         { &hf_cigi3_position_request_update_mode,
9650             { "Update Mode", "cigi.pos_request.update_mode",
9651                 FT_BOOLEAN, 8, TFS(&cigi3_position_request_update_mode_tfs), 0x01,
9652                 "Specifies whether the IG should report the position of the requested object each frame", HFILL }
9653         },
9654         { &hf_cigi3_position_request_object_class,
9655             { "Object Class", "cigi.pos_request.object_class",
9656                 FT_UINT8, BASE_DEC, VALS(cigi3_position_request_object_class_vals), 0x0e,
9657                 "Specifies the type of object whose position is being requested", HFILL }
9658         },
9659         { &hf_cigi3_position_request_coord_system,
9660             { "Coordinate System", "cigi.pos_request.coord_system",
9661                 FT_UINT8, BASE_DEC, VALS(cigi3_position_request_coord_system_vals), 0x30,
9662                 "Specifies the desired coordinate system relative to which the position and orientation should be given", HFILL }
9663         },
9664
9665         /* CIGI3 Environmental Conditions Request */
9666         { &hf_cigi3_environmental_conditions_request,
9667             { "Environmental Conditions Request", "cigi.env_cond_request",
9668                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9669                 "Environmental Conditions Request Packet", HFILL }
9670         },
9671         { &hf_cigi3_environmental_conditions_request_type,
9672             { "Request Type", "cigi.env_cond_request.type",
9673                 FT_UINT8, BASE_DEC, VALS(cigi3_environmental_conditions_request_type_vals), 0x0f,
9674                 "Specifies the desired response type for the request", HFILL }
9675         },
9676         { &hf_cigi3_environmental_conditions_request_id,
9677             { "Request ID", "cigi.env_cond_request.id",
9678                 FT_UINT8, BASE_DEC, NULL, 0x0,
9679                 "Identifies the environmental conditions request", HFILL }
9680         },
9681         { &hf_cigi3_environmental_conditions_request_lat,
9682             { "Latitude (degrees)", "cigi.env_cond_request.lat",
9683                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9684                 "Specifies the geodetic latitude at which the environmental state is requested", HFILL }
9685         },
9686         { &hf_cigi3_environmental_conditions_request_lon,
9687             { "Longitude (degrees)", "cigi.env_cond_request.lon",
9688                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9689                 "Specifies the geodetic longitude at which the environmental state is requested", HFILL }
9690         },
9691         { &hf_cigi3_environmental_conditions_request_alt,
9692             { "Altitude (m)", "cigi.env_cond_request.alt",
9693                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
9694                 "Specifies the geodetic altitude at which the environmental state is requested", HFILL }
9695         },
9696
9697         /* CIGI3_3 Symbol Surface Definition */
9698         { &hf_cigi3_3_symbol_surface_definition,
9699             { "Symbol Surface Definition", "cigi.symbl_srfc_def",
9700                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9701                 "Symbol Surface Definition Packet", HFILL }
9702         },
9703         { &hf_cigi3_3_symbol_surface_definition_surface_id,
9704             { "Surface ID", "cigi.symbl_srfc_def.surface_id",
9705                 FT_UINT16, BASE_DEC, NULL, 0x0,
9706                 "Identifies the symbol surface to which this packet is applied", HFILL }
9707         },
9708         { &hf_cigi3_3_symbol_surface_definition_surface_state,
9709             { "Surface State", "cigi.symbl_srfc_def.surface_state",
9710                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_surface_definition_surface_state_tfs), 0x01,
9711                 "Specifies whether the symbol surface should be active or destroyed", HFILL }
9712         },
9713         { &hf_cigi3_3_symbol_surface_definition_attach_type,
9714             { "Attach Type", "cigi.symbl_srfc_def.attach_type",
9715                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_surface_definition_attach_type_tfs), 0x02,
9716                 "Specifies whether the surface should be attached to an entity or view", HFILL }
9717         },
9718         { &hf_cigi3_3_symbol_surface_definition_billboard,
9719             { "Billboard", "cigi.symbl_srfc_def.billboard",
9720                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_surface_definition_billboard_tfs), 0x04,
9721                 "Specifies whether the surface is treated as a billboard", HFILL }
9722         },
9723         { &hf_cigi3_3_symbol_surface_definition_perspective_growth_enable,
9724             { "Perspective Growth Enable", "cigi.symbl_srfc_def.perspective_growth_enable",
9725                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
9726                 "Specifies whether the surface appears to maintain a constant size or has perspective growth", HFILL }
9727         },
9728         { &hf_cigi3_3_symbol_surface_definition_entity_view_id,
9729             { "Entity ID/View ID", "cigi.symbl_srfc_def.entity_view_id",
9730                 FT_UINT16, BASE_DEC, NULL, 0x0,
9731                 "Specifies the entity or view to which this symbol surface is attached", HFILL }
9732         },
9733         { &hf_cigi3_3_symbol_surface_definition_xoff_left,
9734             { "X Offset (m)/Left", "cigi.symbl_srfc_def.xoff_left",
9735                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9736                 "Specifies the x offset or leftmost boundary for the symbol surface", HFILL }
9737         },
9738         { &hf_cigi3_3_symbol_surface_definition_yoff_right,
9739             { "Y Offset (m)/Right", "cigi.symbl_srfc_def.yoff_right",
9740                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9741                 "Specifies the y offset or rightmost boundary for the symbol surface", HFILL }
9742         },
9743         { &hf_cigi3_3_symbol_surface_definition_zoff_top,
9744             { "Z Offset (m)/Top", "cigi.symbl_srfc_def.zoff_top",
9745                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9746                 "Specifies the z offset or topmost boundary for the symbol surface", HFILL }
9747         },
9748         { &hf_cigi3_3_symbol_surface_definition_yaw_bottom,
9749             { "Yaw (degrees)/Bottom", "cigi.symbl_srfc_def.yaw_bottom",
9750                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9751                 "Specifies the rotation about the surface's Z axis or bottommost boundary for the symbol surface", HFILL }
9752         },
9753         { &hf_cigi3_3_symbol_surface_definition_pitch,
9754             { "Pitch (degrees)", "cigi.symbl_srfc_def.pitch",
9755                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9756                 "Specifies the rotation about the surface's Y axis", HFILL }
9757         },
9758         { &hf_cigi3_3_symbol_surface_definition_roll,
9759             { "Roll (degrees)", "cigi.symbl_srfc_def.roll",
9760                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9761                 "Specifies the rotation about the surface's X axis", HFILL }
9762         },
9763         { &hf_cigi3_3_symbol_surface_definition_width,
9764             { "Width (m/degrees)", "cigi.symbl_srfc_def.width",
9765                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9766                 "Specifies the width of the symbol surface", HFILL }
9767         },
9768         { &hf_cigi3_3_symbol_surface_definition_height,
9769             { "Height (m/degrees)", "cigi.symbl_srfc_def.height",
9770                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9771                 "Specifies the height of the symbol surface", HFILL }
9772         },
9773         { &hf_cigi3_3_symbol_surface_definition_min_u,
9774             { "Min U (surface horizontal units)", "cigi.symbl_srfc_def.min_u",
9775                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9776                 "Specifies the minimum U coordinate of the symbol surface's viewable area", HFILL }
9777         },
9778         { &hf_cigi3_3_symbol_surface_definition_max_u,
9779             { "Max U (surface horizontal units)", "cigi.symbl_srfc_def.max_u",
9780                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9781                 "Specifies the maximum U coordinate of the symbol surface's viewable area", HFILL }
9782         },
9783         { &hf_cigi3_3_symbol_surface_definition_min_v,
9784             { "Min V (surface vertical units)", "cigi.symbl_srfc_def.min_v",
9785                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9786                 "Specifies the minimum V coordinate of the symbol surface's viewable area", HFILL }
9787         },
9788         { &hf_cigi3_3_symbol_surface_definition_max_v,
9789             { "Max V (surface vertical units)", "cigi.symbl_srfc_def.max_v",
9790                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9791                 "Specifies the maximum V coordinate of the symbol surface's viewable area", HFILL }
9792         },
9793
9794         /* CIGI3_3 Symbol Text Definition */
9795         { &hf_cigi3_3_symbol_text_definition,
9796             { "Symbol Text Definition", "cigi.symbol_text_def",
9797                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9798                 "Symbol Text Definition Packet", HFILL }
9799         },
9800         { &hf_cigi3_3_symbol_text_definition_symbol_id,
9801             { "Symbol ID", "cigi.symbol_text_def.symbol_id",
9802                 FT_UINT16, BASE_DEC, NULL, 0x0,
9803                 "Specifies the identifier of the symbol that is being defined", HFILL }
9804         },
9805         { &hf_cigi3_3_symbol_text_definition_alignment,
9806             { "Alignment", "cigi.symbol_text_def.alignment",
9807                 FT_UINT8, BASE_DEC, VALS(cigi3_3_symbol_text_definition_alignment_vals), 0x0f,
9808                 "Specifies the position of the symbol's reference point", HFILL }
9809         },
9810         { &hf_cigi3_3_symbol_text_definition_orientation,
9811             { "Orientation", "cigi.symbol_text_def.orientation",
9812                 FT_UINT8, BASE_DEC, VALS(cigi3_3_symbol_text_definition_orientation_vals), 0x30,
9813                 "Specifies the orientation of the text", HFILL }
9814         },
9815         { &hf_cigi3_3_symbol_text_definition_font_ident,
9816             { "Font ID", "cigi.symbol_text_def.font_ident",
9817                 FT_UINT8, BASE_DEC, VALS(cigi3_3_symbol_text_definition_font_ident_vals), 0x0,
9818                 "Specifies the font to be used", HFILL }
9819         },
9820         { &hf_cigi3_3_symbol_text_definition_font_size,
9821             { "Font Size", "cigi.symbol_text_def.font_size",
9822                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9823                 "Specifies the font size", HFILL }
9824         },
9825         { &hf_cigi3_3_symbol_text_definition_text,
9826             { "Text", "cigi.symbol_text_def.text",
9827                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9828                 "Symbol text", HFILL }
9829         },
9830
9831         /* CIGI3_3 Symbol Circle Definition */
9832         { &hf_cigi3_3_symbol_circle_definition,
9833             { "Symbol Circle Definition", "cigi.symbol_circle_def",
9834                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9835                 "Symbol Circle Definition Packet", HFILL }
9836         },
9837         { &hf_cigi3_3_symbol_circle_definition_symbol_id,
9838             { "Symbol ID", "cigi.symbol_circle_def.symbol_id",
9839                 FT_UINT16, BASE_DEC, NULL, 0x0,
9840                 "Specifies the identifier of the symbol that is being defined", HFILL }
9841         },
9842         { &hf_cigi3_3_symbol_circle_definition_drawing_style,
9843             { "Drawing Style", "cigi.symbl_circle_def.drawing_style",
9844                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_circle_definition_drawing_style_tfs), 0x01,
9845                 "Specifies whether the circles and arcs are curved lines or filled areas", HFILL }
9846         },
9847         { &hf_cigi3_3_symbol_circle_definition_stipple_pattern,
9848             { "Stipple Pattern", "cigi.symbol_circle_def.stipple_pattern",
9849                 FT_UINT16, BASE_HEX, NULL, 0x0,
9850                 "Specifies the dash pattern used", HFILL }
9851         },
9852         { &hf_cigi3_3_symbol_circle_definition_line_width,
9853             { "Line Width (scaled symbol surface units)", "cigi.symbol_circle_def.line_width",
9854                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9855                 "Specifies the thickness of the line", HFILL }
9856         },
9857         { &hf_cigi3_3_symbol_circle_definition_stipple_pattern_length,
9858             { "Stipple Pattern Length (scaled symbol surface units)", "cigi.symbol_circle_def.stipple_pattern_length",
9859                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9860                 "Specifies the length of one complete repetition of the stipple pattern", HFILL }
9861         },
9862         { &hf_cigi3_3_symbol_circle_definition_center_u[0],
9863             { "Center U 1 (scaled symbol surface units)", "cigi.symbol_circle_def.center_u1",
9864                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9865                 "Specifies the u position of the center", HFILL }
9866         },
9867         { &hf_cigi3_3_symbol_circle_definition_center_v[0],
9868             { "Center V 1 (scaled symbol surface units)", "cigi.symbol_circle_def.center_v1",
9869                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9870                 "Specifies the v position of the center", HFILL }
9871         },
9872         { &hf_cigi3_3_symbol_circle_definition_radius[0],
9873             { "Radius 1 (scaled symbol surface units)", "cigi.symbol_circle_def.radius1",
9874                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9875                 "Specifies the radius", HFILL }
9876         },
9877         { &hf_cigi3_3_symbol_circle_definition_inner_radius[0],
9878             { "Inner Radius 1 (scaled symbol surface units)", "cigi.symbol_circle_def.inner_radius1",
9879                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9880                 "Specifies the inner radius", HFILL }
9881         },
9882         { &hf_cigi3_3_symbol_circle_definition_start_angle[0],
9883             { "Start Angle 1 (degrees)", "cigi.symbol_circle_def.start_angle1",
9884                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9885                 "Specifies the start angle", HFILL }
9886         },
9887         { &hf_cigi3_3_symbol_circle_definition_end_angle[0],
9888             { "End Angle 1 (degrees)", "cigi.symbol_circle_def.end_angle1",
9889                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9890                 "Specifies the end angle", HFILL }
9891         },
9892         { &hf_cigi3_3_symbol_circle_definition_center_u[1],
9893             { "Center U 2 (scaled symbol surface units)", "cigi.symbol_circle_def.center_u2",
9894                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9895                 "Specifies the u position of the center", HFILL }
9896         },
9897         { &hf_cigi3_3_symbol_circle_definition_center_v[1],
9898             { "Center V 2 (scaled symbol surface units)", "cigi.symbol_circle_def.center_v2",
9899                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9900                 "Specifies the v position of the center", HFILL }
9901         },
9902         { &hf_cigi3_3_symbol_circle_definition_radius[1],
9903             { "Radius 2 (scaled symbol surface units)", "cigi.symbol_circle_def.radius2",
9904                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9905                 "Specifies the radius", HFILL }
9906         },
9907         { &hf_cigi3_3_symbol_circle_definition_inner_radius[1],
9908             { "Inner Radius 2 (scaled symbol surface units)", "cigi.symbol_circle_def.inner_radius2",
9909                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9910                 "Specifies the inner radius", HFILL }
9911         },
9912         { &hf_cigi3_3_symbol_circle_definition_start_angle[1],
9913             { "Start Angle 2 (degrees)", "cigi.symbol_circle_def.start_angle2",
9914                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9915                 "Specifies the start angle", HFILL }
9916         },
9917         { &hf_cigi3_3_symbol_circle_definition_end_angle[1],
9918             { "End Angle 2 (degrees)", "cigi.symbol_circle_def.end_angle2",
9919                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9920                 "Specifies the end angle", HFILL }
9921         },
9922         { &hf_cigi3_3_symbol_circle_definition_center_u[2],
9923             { "Center U 3 (scaled symbol surface units)", "cigi.symbol_circle_def.center_u3",
9924                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9925                 "Specifies the u position of the center", HFILL }
9926         },
9927         { &hf_cigi3_3_symbol_circle_definition_center_v[2],
9928             { "Center V 3 (scaled symbol surface units)", "cigi.symbol_circle_def.center_v3",
9929                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9930                 "Specifies the v position of the center", HFILL }
9931         },
9932         { &hf_cigi3_3_symbol_circle_definition_radius[2],
9933             { "Radius 3 (scaled symbol surface units)", "cigi.symbol_circle_def.radius3",
9934                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9935                 "Specifies the radius", HFILL }
9936         },
9937         { &hf_cigi3_3_symbol_circle_definition_inner_radius[2],
9938             { "Inner Radius 3 (scaled symbol surface units)", "cigi.symbol_circle_def.inner_radius3",
9939                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9940                 "Specifies the inner radius", HFILL }
9941         },
9942         { &hf_cigi3_3_symbol_circle_definition_start_angle[2],
9943             { "Start Angle 3 (degrees)", "cigi.symbol_circle_def.start_angle3",
9944                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9945                 "Specifies the start angle", HFILL }
9946         },
9947         { &hf_cigi3_3_symbol_circle_definition_end_angle[2],
9948             { "End Angle 3 (degrees)", "cigi.symbol_circle_def.end_angle3",
9949                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9950                 "Specifies the end angle", HFILL }
9951         },
9952         { &hf_cigi3_3_symbol_circle_definition_center_u[3],
9953             { "Center U 4 (scaled symbol surface units)", "cigi.symbol_circle_def.center_u4",
9954                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9955                 "Specifies the u position of the center", HFILL }
9956         },
9957         { &hf_cigi3_3_symbol_circle_definition_center_v[3],
9958             { "Center V 4 (scaled symbol surface units)", "cigi.symbol_circle_def.center_v4",
9959                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9960                 "Specifies the v position of the center", HFILL }
9961         },
9962         { &hf_cigi3_3_symbol_circle_definition_radius[3],
9963             { "Radius 4 (scaled symbol surface units)", "cigi.symbol_circle_def.radius4",
9964                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9965                 "Specifies the radius", HFILL }
9966         },
9967         { &hf_cigi3_3_symbol_circle_definition_inner_radius[3],
9968             { "Inner Radius 4 (scaled symbol surface units)", "cigi.symbol_circle_def.inner_radius4",
9969                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9970                 "Specifies the inner radius", HFILL }
9971         },
9972         { &hf_cigi3_3_symbol_circle_definition_start_angle[3],
9973             { "Start Angle 4 (degrees)", "cigi.symbol_circle_def.start_angle4",
9974                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9975                 "Specifies the start angle", HFILL }
9976         },
9977         { &hf_cigi3_3_symbol_circle_definition_end_angle[3],
9978             { "End Angle 4 (degrees)", "cigi.symbol_circle_def.end_angle4",
9979                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9980                 "Specifies the end angle", HFILL }
9981         },
9982         { &hf_cigi3_3_symbol_circle_definition_center_u[4],
9983             { "Center U 5 (scaled symbol surface units)", "cigi.symbol_circle_def.center_u5",
9984                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9985                 "Specifies the u position of the center", HFILL }
9986         },
9987         { &hf_cigi3_3_symbol_circle_definition_center_v[4],
9988             { "Center V 5 (scaled symbol surface units)", "cigi.symbol_circle_def.center_v5",
9989                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9990                 "Specifies the v position of the center", HFILL }
9991         },
9992         { &hf_cigi3_3_symbol_circle_definition_radius[4],
9993             { "Radius 5 (scaled symbol surface units)", "cigi.symbol_circle_def.radius5",
9994                 FT_FLOAT, BASE_DEC, NULL, 0x0,
9995                 "Specifies the radius", HFILL }
9996         },
9997         { &hf_cigi3_3_symbol_circle_definition_inner_radius[4],
9998             { "Inner Radius 5 (scaled symbol surface units)", "cigi.symbol_circle_def.inner_radius5",
9999                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10000                 "Specifies the inner radius", HFILL }
10001         },
10002         { &hf_cigi3_3_symbol_circle_definition_start_angle[4],
10003             { "Start Angle 5 (degrees)", "cigi.symbol_circle_def.start_angle5",
10004                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10005                 "Specifies the start angle", HFILL }
10006         },
10007         { &hf_cigi3_3_symbol_circle_definition_end_angle[4],
10008             { "End Angle 5 (degrees)", "cigi.symbol_circle_def.end_angle5",
10009                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10010                 "Specifies the end angle", HFILL }
10011         },
10012         { &hf_cigi3_3_symbol_circle_definition_center_u[5],
10013             { "Center U 6 (scaled symbol surface units)", "cigi.symbol_circle_def.center_u6",
10014                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10015                 "Specifies the u position of the center", HFILL }
10016         },
10017         { &hf_cigi3_3_symbol_circle_definition_center_v[5],
10018             { "Center V 6 (scaled symbol surface units)", "cigi.symbol_circle_def.center_v6",
10019                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10020                 "Specifies the v position of the center", HFILL }
10021         },
10022         { &hf_cigi3_3_symbol_circle_definition_radius[5],
10023             { "Radius 6 (scaled symbol surface units)", "cigi.symbol_circle_def.radius6",
10024                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10025                 "Specifies the radius", HFILL }
10026         },
10027         { &hf_cigi3_3_symbol_circle_definition_inner_radius[5],
10028             { "Inner Radius 6 (scaled symbol surface units)", "cigi.symbol_circle_def.inner_radius6",
10029                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10030                 "Specifies the inner radius", HFILL }
10031         },
10032         { &hf_cigi3_3_symbol_circle_definition_start_angle[5],
10033             { "Start Angle 6 (degrees)", "cigi.symbol_circle_def.start_angle6",
10034                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10035                 "Specifies the start angle", HFILL }
10036         },
10037         { &hf_cigi3_3_symbol_circle_definition_end_angle[5],
10038             { "End Angle 6 (degrees)", "cigi.symbol_circle_def.end_angle6",
10039                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10040                 "Specifies the end angle", HFILL }
10041         },
10042         { &hf_cigi3_3_symbol_circle_definition_center_u[6],
10043             { "Center U 7 (scaled symbol surface units)", "cigi.symbol_circle_def.center_u7",
10044                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10045                 "Specifies the u position of the center", HFILL }
10046         },
10047         { &hf_cigi3_3_symbol_circle_definition_center_v[6],
10048             { "Center V 7 (scaled symbol surface units)", "cigi.symbol_circle_def.center_v7",
10049                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10050                 "Specifies the v position of the center", HFILL }
10051         },
10052         { &hf_cigi3_3_symbol_circle_definition_radius[6],
10053             { "Radius 7 (scaled symbol surface units)", "cigi.symbol_circle_def.radius7",
10054                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10055                 "Specifies the radius", HFILL }
10056         },
10057         { &hf_cigi3_3_symbol_circle_definition_inner_radius[6],
10058             { "Inner Radius 7 (scaled symbol surface units)", "cigi.symbol_circle_def.inner_radius7",
10059                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10060                 "Specifies the inner radius", HFILL }
10061         },
10062         { &hf_cigi3_3_symbol_circle_definition_start_angle[6],
10063             { "Start Angle 7 (degrees)", "cigi.symbol_circle_def.start_angle7",
10064                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10065                 "Specifies the start angle", HFILL }
10066         },
10067         { &hf_cigi3_3_symbol_circle_definition_end_angle[6],
10068             { "End Angle 7 (degrees)", "cigi.symbol_circle_def.end_angle7",
10069                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10070                 "Specifies the end angle", HFILL }
10071         },
10072         { &hf_cigi3_3_symbol_circle_definition_center_u[7],
10073             { "Center U 8 (scaled symbol surface units)", "cigi.symbol_circle_def.center_u8",
10074                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10075                 "Specifies the u position of the center", HFILL }
10076         },
10077         { &hf_cigi3_3_symbol_circle_definition_center_v[7],
10078             { "Center V 8 (scaled symbol surface units)", "cigi.symbol_circle_def.center_v8",
10079                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10080                 "Specifies the v position of the center", HFILL }
10081         },
10082         { &hf_cigi3_3_symbol_circle_definition_radius[7],
10083             { "Radius 8 (scaled symbol surface units)", "cigi.symbol_circle_def.radius8",
10084                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10085                 "Specifies the radius", HFILL }
10086         },
10087         { &hf_cigi3_3_symbol_circle_definition_inner_radius[7],
10088             { "Inner Radius 8 (scaled symbol surface units)", "cigi.symbol_circle_def.inner_radius8",
10089                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10090                 "Specifies the inner radius", HFILL }
10091         },
10092         { &hf_cigi3_3_symbol_circle_definition_start_angle[7],
10093             { "Start Angle 8 (degrees)", "cigi.symbol_circle_def.start_angle8",
10094                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10095                 "Specifies the start angle", HFILL }
10096         },
10097         { &hf_cigi3_3_symbol_circle_definition_end_angle[7],
10098             { "End Angle 8 (degrees)", "cigi.symbol_circle_def.end_angle8",
10099                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10100                 "Specifies the end angle", HFILL }
10101         },
10102         { &hf_cigi3_3_symbol_circle_definition_center_u[8],
10103             { "Center U 9 (scaled symbol surface units)", "cigi.symbol_circle_def.center_u9",
10104                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10105                 "Specifies the u position of the center", HFILL }
10106         },
10107         { &hf_cigi3_3_symbol_circle_definition_center_v[8],
10108             { "Center V 9 (scaled symbol surface units)", "cigi.symbol_circle_def.center_v9",
10109                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10110                 "Specifies the v position of the center", HFILL }
10111         },
10112         { &hf_cigi3_3_symbol_circle_definition_radius[8],
10113             { "Radius 9 (scaled symbol surface units)", "cigi.symbol_circle_def.radius9",
10114                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10115                 "Specifies the radius", HFILL }
10116         },
10117         { &hf_cigi3_3_symbol_circle_definition_inner_radius[8],
10118             { "Inner Radius 9 (scaled symbol surface units)", "cigi.symbol_circle_def.inner_radius9",
10119                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10120                 "Specifies the inner radius", HFILL }
10121         },
10122         { &hf_cigi3_3_symbol_circle_definition_start_angle[8],
10123             { "Start Angle 9 (degrees)", "cigi.symbol_circle_def.start_angle9",
10124                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10125                 "Specifies the start angle", HFILL }
10126         },
10127         { &hf_cigi3_3_symbol_circle_definition_end_angle[8],
10128             { "End Angle 9 (degrees)", "cigi.symbol_circle_def.end_angle9",
10129                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10130                 "Specifies the end angle", HFILL }
10131         },
10132
10133         /* CIGI3_3 Symbol Line Definition */
10134         { &hf_cigi3_3_symbol_line_definition,
10135             { "Symbol Line Definition", "cigi.symbol_line_def",
10136                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10137                 "Symbol Line Definition Packet", HFILL }
10138         },
10139         { &hf_cigi3_3_symbol_line_definition_symbol_id,
10140             { "Symbol ID", "cigi.symbol_line_def.symbol_id",
10141                 FT_UINT16, BASE_DEC, NULL, 0x0,
10142                 "Specifies the identifier of the symbol that is being defined", HFILL }
10143         },
10144         { &hf_cigi3_3_symbol_line_definition_primitive_type,
10145             { "Drawing Style", "cigi.symbl_line_def.primitive_type",
10146                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_circle_definition_drawing_style_tfs), 0x01,
10147                 "Specifies the type of point or line primitive used", HFILL }
10148         },
10149         { &hf_cigi3_3_symbol_line_definition_stipple_pattern,
10150             { "Stipple Pattern", "cigi.symbol_line_def.stipple_pattern",
10151                 FT_UINT16, BASE_HEX, NULL, 0x0,
10152                 "Specifies the dash pattern used", HFILL }
10153         },
10154         { &hf_cigi3_3_symbol_line_definition_line_width,
10155             { "Line Width (scaled symbol surface units)", "cigi.symbol_line_def.line_width",
10156                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10157                 "Specifies the thickness of the line", HFILL }
10158         },
10159         { &hf_cigi3_3_symbol_line_definition_stipple_pattern_length,
10160             { "Stipple Pattern Length (scaled symbol surface units)", "cigi.symbol_line_def.stipple_pattern_length",
10161                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10162                 "Specifies the length of one complete repetition of the stipple pattern", HFILL }
10163         },
10164         { &hf_cigi3_3_symbol_line_definition_vertex_u[0],
10165             { "Vertex U 1 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u1",
10166                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10167                 "Specifies the u position of the vertex", HFILL }
10168         },
10169         { &hf_cigi3_3_symbol_line_definition_vertex_v[0],
10170             { "Vertex V 1 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v1",
10171                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10172                 "Specifies the v position of the vertex", HFILL }
10173         },
10174         { &hf_cigi3_3_symbol_line_definition_vertex_u[1],
10175             { "Vertex U 2 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u2",
10176                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10177                 "Specifies the u position of the vertex", HFILL }
10178         },
10179         { &hf_cigi3_3_symbol_line_definition_vertex_v[1],
10180             { "Vertex V 2 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v2",
10181                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10182                 "Specifies the v position of the vertex", HFILL }
10183         },
10184         { &hf_cigi3_3_symbol_line_definition_vertex_u[2],
10185             { "Vertex U 3 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u3",
10186                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10187                 "Specifies the u position of the vertex", HFILL }
10188         },
10189         { &hf_cigi3_3_symbol_line_definition_vertex_v[2],
10190             { "Vertex V 3 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v3",
10191                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10192                 "Specifies the v position of the vertex", HFILL }
10193         },
10194         { &hf_cigi3_3_symbol_line_definition_vertex_u[3],
10195             { "Vertex U 4 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u4",
10196                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10197                 "Specifies the u position of the vertex", HFILL }
10198         },
10199         { &hf_cigi3_3_symbol_line_definition_vertex_v[3],
10200             { "Vertex V 4 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v4",
10201                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10202                 "Specifies the v position of the vertex", HFILL }
10203         },
10204         { &hf_cigi3_3_symbol_line_definition_vertex_u[4],
10205             { "Vertex U 5 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u5",
10206                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10207                 "Specifies the u position of the vertex", HFILL }
10208         },
10209         { &hf_cigi3_3_symbol_line_definition_vertex_v[4],
10210             { "Vertex V 5 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v5",
10211                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10212                 "Specifies the v position of the vertex", HFILL }
10213         },
10214         { &hf_cigi3_3_symbol_line_definition_vertex_u[5],
10215             { "Vertex U 6 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u6",
10216                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10217                 "Specifies the u position of the vertex", HFILL }
10218         },
10219         { &hf_cigi3_3_symbol_line_definition_vertex_v[5],
10220             { "Vertex V 6 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v6",
10221                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10222                 "Specifies the v position of the vertex", HFILL }
10223         },
10224         { &hf_cigi3_3_symbol_line_definition_vertex_u[6],
10225             { "Vertex U 7 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u7",
10226                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10227                 "Specifies the u position of the vertex", HFILL }
10228         },
10229         { &hf_cigi3_3_symbol_line_definition_vertex_v[6],
10230             { "Vertex V 7 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v7",
10231                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10232                 "Specifies the v position of the vertex", HFILL }
10233         },
10234         { &hf_cigi3_3_symbol_line_definition_vertex_u[7],
10235             { "Vertex U 8 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u8",
10236                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10237                 "Specifies the u position of the vertex", HFILL }
10238         },
10239         { &hf_cigi3_3_symbol_line_definition_vertex_v[7],
10240             { "Vertex V 8 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v8",
10241                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10242                 "Specifies the v position of the vertex", HFILL }
10243         },
10244         { &hf_cigi3_3_symbol_line_definition_vertex_u[8],
10245             { "Vertex U 9 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u9",
10246                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10247                 "Specifies the u position of the vertex", HFILL }
10248         },
10249         { &hf_cigi3_3_symbol_line_definition_vertex_v[8],
10250             { "Vertex V 9 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v9",
10251                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10252                 "Specifies the v position of the vertex", HFILL }
10253         },
10254         { &hf_cigi3_3_symbol_line_definition_vertex_u[9],
10255             { "Vertex U 10 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u10",
10256                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10257                 "Specifies the u position of the vertex", HFILL }
10258         },
10259         { &hf_cigi3_3_symbol_line_definition_vertex_v[9],
10260             { "Vertex V 10 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v10",
10261                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10262                 "Specifies the v position of the vertex", HFILL }
10263         },
10264         { &hf_cigi3_3_symbol_line_definition_vertex_u[10],
10265             { "Vertex U 11 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u11",
10266                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10267                 "Specifies the u position of the vertex", HFILL }
10268         },
10269         { &hf_cigi3_3_symbol_line_definition_vertex_v[10],
10270             { "Vertex V 11 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v11",
10271                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10272                 "Specifies the v position of the vertex", HFILL }
10273         },
10274         { &hf_cigi3_3_symbol_line_definition_vertex_u[11],
10275             { "Vertex U 12 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u12",
10276                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10277                 "Specifies the u position of the vertex", HFILL }
10278         },
10279         { &hf_cigi3_3_symbol_line_definition_vertex_v[11],
10280             { "Vertex V 12 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v12",
10281                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10282                 "Specifies the v position of the vertex", HFILL }
10283         },
10284         { &hf_cigi3_3_symbol_line_definition_vertex_u[12],
10285             { "Vertex U 13 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u13",
10286                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10287                 "Specifies the u position of the vertex", HFILL }
10288         },
10289         { &hf_cigi3_3_symbol_line_definition_vertex_v[12],
10290             { "Vertex V 13 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v13",
10291                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10292                 "Specifies the v position of the vertex", HFILL }
10293         },
10294         { &hf_cigi3_3_symbol_line_definition_vertex_u[13],
10295             { "Vertex U 14 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u14",
10296                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10297                 "Specifies the u position of the vertex", HFILL }
10298         },
10299         { &hf_cigi3_3_symbol_line_definition_vertex_v[13],
10300             { "Vertex V 14 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v14",
10301                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10302                 "Specifies the v position of the vertex", HFILL }
10303         },
10304         { &hf_cigi3_3_symbol_line_definition_vertex_u[14],
10305             { "Vertex U 15 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u15",
10306                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10307                 "Specifies the u position of the vertex", HFILL }
10308         },
10309         { &hf_cigi3_3_symbol_line_definition_vertex_v[14],
10310             { "Vertex V 15 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v15",
10311                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10312                 "Specifies the v position of the vertex", HFILL }
10313         },
10314         { &hf_cigi3_3_symbol_line_definition_vertex_u[15],
10315             { "Vertex U 16 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u16",
10316                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10317                 "Specifies the u position of the vertex", HFILL }
10318         },
10319         { &hf_cigi3_3_symbol_line_definition_vertex_v[15],
10320             { "Vertex V 16 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v16",
10321                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10322                 "Specifies the v position of the vertex", HFILL }
10323         },
10324         { &hf_cigi3_3_symbol_line_definition_vertex_u[16],
10325             { "Vertex U 17 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u17",
10326                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10327                 "Specifies the u position of the vertex", HFILL }
10328         },
10329         { &hf_cigi3_3_symbol_line_definition_vertex_v[16],
10330             { "Vertex V 17 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v17",
10331                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10332                 "Specifies the v position of the vertex", HFILL }
10333         },
10334         { &hf_cigi3_3_symbol_line_definition_vertex_u[17],
10335             { "Vertex U 18 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u18",
10336                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10337                 "Specifies the u position of the vertex", HFILL }
10338         },
10339         { &hf_cigi3_3_symbol_line_definition_vertex_v[17],
10340             { "Vertex V 18 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v18",
10341                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10342                 "Specifies the v position of the vertex", HFILL }
10343         },
10344         { &hf_cigi3_3_symbol_line_definition_vertex_u[18],
10345             { "Vertex U 19 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u19",
10346                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10347                 "Specifies the u position of the vertex", HFILL }
10348         },
10349         { &hf_cigi3_3_symbol_line_definition_vertex_v[18],
10350             { "Vertex V 19 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v19",
10351                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10352                 "Specifies the v position of the vertex", HFILL }
10353         },
10354         { &hf_cigi3_3_symbol_line_definition_vertex_u[19],
10355             { "Vertex U 20 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u20",
10356                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10357                 "Specifies the u position of the vertex", HFILL }
10358         },
10359         { &hf_cigi3_3_symbol_line_definition_vertex_v[19],
10360             { "Vertex V 20 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v20",
10361                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10362                 "Specifies the v position of the vertex", HFILL }
10363         },
10364         { &hf_cigi3_3_symbol_line_definition_vertex_u[20],
10365             { "Vertex U 21 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u21",
10366                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10367                 "Specifies the u position of the vertex", HFILL }
10368         },
10369         { &hf_cigi3_3_symbol_line_definition_vertex_v[20],
10370             { "Vertex V 21 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v21",
10371                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10372                 "Specifies the v position of the vertex", HFILL }
10373         },
10374         { &hf_cigi3_3_symbol_line_definition_vertex_u[21],
10375             { "Vertex U 22 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u22",
10376                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10377                 "Specifies the u position of the vertex", HFILL }
10378         },
10379         { &hf_cigi3_3_symbol_line_definition_vertex_v[21],
10380             { "Vertex V 22 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v22",
10381                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10382                 "Specifies the v position of the vertex", HFILL }
10383         },
10384         { &hf_cigi3_3_symbol_line_definition_vertex_u[22],
10385             { "Vertex U 23 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u23",
10386                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10387                 "Specifies the u position of the vertex", HFILL }
10388         },
10389         { &hf_cigi3_3_symbol_line_definition_vertex_v[22],
10390             { "Vertex V 23 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v23",
10391                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10392                 "Specifies the v position of the vertex", HFILL }
10393         },
10394         { &hf_cigi3_3_symbol_line_definition_vertex_u[23],
10395             { "Vertex U 24 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u24",
10396                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10397                 "Specifies the u position of the vertex", HFILL }
10398         },
10399         { &hf_cigi3_3_symbol_line_definition_vertex_v[23],
10400             { "Vertex V 24 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v24",
10401                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10402                 "Specifies the v position of the vertex", HFILL }
10403         },
10404         { &hf_cigi3_3_symbol_line_definition_vertex_u[24],
10405             { "Vertex U 25 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u25",
10406                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10407                 "Specifies the u position of the vertex", HFILL }
10408         },
10409         { &hf_cigi3_3_symbol_line_definition_vertex_v[24],
10410             { "Vertex V 25 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v25",
10411                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10412                 "Specifies the v position of the vertex", HFILL }
10413         },
10414         { &hf_cigi3_3_symbol_line_definition_vertex_u[25],
10415             { "Vertex U 26 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u26",
10416                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10417                 "Specifies the u position of the vertex", HFILL }
10418         },
10419         { &hf_cigi3_3_symbol_line_definition_vertex_v[25],
10420             { "Vertex V 26 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v26",
10421                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10422                 "Specifies the v position of the vertex", HFILL }
10423         },
10424         { &hf_cigi3_3_symbol_line_definition_vertex_u[26],
10425             { "Vertex U 27 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u27",
10426                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10427                 "Specifies the u position of the vertex", HFILL }
10428         },
10429         { &hf_cigi3_3_symbol_line_definition_vertex_v[26],
10430             { "Vertex V 27 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v27",
10431                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10432                 "Specifies the v position of the vertex", HFILL }
10433         },
10434         { &hf_cigi3_3_symbol_line_definition_vertex_u[27],
10435             { "Vertex U 28 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u28",
10436                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10437                 "Specifies the u position of the vertex", HFILL }
10438         },
10439         { &hf_cigi3_3_symbol_line_definition_vertex_v[27],
10440             { "Vertex V 28 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v28",
10441                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10442                 "Specifies the v position of the vertex", HFILL }
10443         },
10444         { &hf_cigi3_3_symbol_line_definition_vertex_u[28],
10445             { "Vertex U 29 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u29",
10446                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10447                 "Specifies the u position of the vertex", HFILL }
10448         },
10449         { &hf_cigi3_3_symbol_line_definition_vertex_v[28],
10450             { "Vertex V 29 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v29",
10451                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10452                 "Specifies the v position of the vertex", HFILL }
10453         },
10454
10455         /* CIGI3_3 Symbol Clone */
10456         { &hf_cigi3_3_symbol_clone,
10457             { "Symbol Surface Definition", "cigi.symbol_clone",
10458                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10459                 "Symbol Clone Packet", HFILL }
10460         },
10461         { &hf_cigi3_3_symbol_clone_symbol_id,
10462             { "Symbol ID", "cigi.symbol_clone.symbol_id",
10463                 FT_UINT16, BASE_DEC, NULL, 0x0,
10464                 "Specifies the identifier of the symbol that is being defined", HFILL }
10465         },
10466         { &hf_cigi3_3_symbol_clone_source_type,
10467             { "Source Type", "cigi.symbol_clone.source_type",
10468                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_clone_source_type_tfs), 0x04,
10469                 "Identifies the source as an existing symbol or symbol template", HFILL }
10470         },
10471         { &hf_cigi3_3_symbol_clone_source_id,
10472             { "Source ID", "cigi.symbol_clone.source_id",
10473                 FT_UINT16, BASE_DEC, NULL, 0x0,
10474                 "Identifies the symbol to copy or template to instantiate", HFILL }
10475         },
10476
10477         /* CIGI3_3 Symbol Control */
10478         { &hf_cigi3_3_symbol_control,
10479             { "Symbol Control", "cigi.symbol_control",
10480                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10481                 "Symbol Control Packet", HFILL }
10482         },
10483         { &hf_cigi3_3_symbol_control_symbol_id,
10484             { "Symbol ID", "cigi.symbol_control.symbol_id",
10485                 FT_UINT16, BASE_DEC, NULL, 0x0,
10486                 "Specifies the symbol to which this packet is applied", HFILL }
10487         },
10488         { &hf_cigi3_3_symbol_control_symbol_state,
10489             { "Symbol State", "cigi.symbol_control.symbol_state",
10490                 FT_UINT8, BASE_DEC, VALS(cigi3_3_symbol_control_symbol_state_vals), 0x03,
10491                 "Specifies whether the symbol should be hidden, visible, or destroyed", HFILL }
10492         },
10493         { &hf_cigi3_3_symbol_control_attach_state,
10494             { "Attach State", "cigi.symbol_control.attach_state",
10495                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_control_attach_state_tfs), 0x04,
10496                 "Specifies whether this symbol should be attached to another", HFILL }
10497         },
10498         { &hf_cigi3_3_symbol_control_flash_control,
10499             { "Flash Control", "cigi.symbol_control.flash_control",
10500                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_control_flash_control_tfs), 0x08,
10501                 "Specifies whether the flash cycle is continued or restarted", HFILL }
10502         },
10503         { &hf_cigi3_3_symbol_control_inherit_color,
10504             { "Inherit Color", "cigi.symbol_control.inherit_color",
10505                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_control_inherit_color_tfs), 0x10,
10506                 "Specifies whether the symbol inherits color from a parent symbol", HFILL }
10507         },
10508         { &hf_cigi3_3_symbol_control_parent_symbol_ident,
10509             { "Parent Symbol ID", "cigi.symbol_control.parent_symbol_id",
10510                 FT_UINT16, BASE_DEC, NULL, 0x0,
10511                 "Specifies the parent for the symbol", HFILL }
10512         },
10513         { &hf_cigi3_3_symbol_control_surface_ident,
10514             { "Surface ID", "cigi.symbol_control.surface_id",
10515                 FT_UINT16, BASE_DEC, NULL, 0x0,
10516                 "Specifies the symbol surface for the symbol", HFILL }
10517         },
10518         { &hf_cigi3_3_symbol_control_layer,
10519             { "Layer", "cigi.symbol_control.layer",
10520                 FT_UINT8, BASE_DEC, NULL, 0x0,
10521                 "Specifies the layer for the symbol", HFILL }
10522         },
10523         { &hf_cigi3_3_symbol_control_flash_duty_cycle,
10524             { "Flash Duty Cycle (%)", "cigi.symbol_control.flash_duty_cycle",
10525                 FT_UINT8, BASE_DEC, NULL, 0x0,
10526                 "Specifies the duty cycle for a flashing symbol", HFILL }
10527         },
10528         { &hf_cigi3_3_symbol_control_flash_period,
10529             { "Flash Period (seconds)", "cigi.symbol_control.flash_period",
10530                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10531                 "Specifies the duration of a single flash cycle", HFILL }
10532         },
10533         { &hf_cigi3_3_symbol_control_position_u,
10534             { "Position U (scaled symbol surface units)", "cigi.symbol_control.position_u",
10535                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10536                 "Specifies the u position", HFILL }
10537         },
10538         { &hf_cigi3_3_symbol_control_position_v,
10539             { "Position V (scaled symbol surface units)", "cigi.symbol_control.position_v",
10540                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10541                 "Specifies the v position", HFILL }
10542         },
10543         { &hf_cigi3_3_symbol_control_rotation,
10544             { "Rotation (degrees)", "cigi.symbol_control.rotation",
10545                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10546                 "Specifies the rotation", HFILL }
10547         },
10548         { &hf_cigi3_3_symbol_control_red,
10549             { "Red", "cigi.symbol_control.red",
10550                 FT_UINT8, BASE_DEC, NULL, 0x0,
10551                 "Specifies the red color component", HFILL }
10552         },
10553         { &hf_cigi3_3_symbol_control_green,
10554             { "Green", "cigi.symbol_control.green",
10555                 FT_UINT8, BASE_DEC, NULL, 0x0,
10556                 "Specifies the green color component", HFILL }
10557         },
10558         { &hf_cigi3_3_symbol_control_blue,
10559             { "Blue", "cigi.symbol_control.blue",
10560                 FT_UINT8, BASE_DEC, NULL, 0x0,
10561                 "Specifies the blue color component", HFILL }
10562         },
10563         { &hf_cigi3_3_symbol_control_alpha,
10564             { "Alpha", "cigi.symbol_control.alpha",
10565                 FT_UINT8, BASE_DEC, NULL, 0x0,
10566                 "Specifies the alpha color component", HFILL }
10567         },
10568         { &hf_cigi3_3_symbol_control_scale_u,
10569             { "Scale U", "cigi.symbol_control.scale_u",
10570                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10571                 "Specifies the u scaling factor", HFILL }
10572         },
10573         { &hf_cigi3_3_symbol_control_scale_v,
10574             { "Scale V", "cigi.symbol_control.scale_v",
10575                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10576                 "Specifies the v scaling factor", HFILL }
10577         },
10578
10579         /* CIGI3_3 Short Symbol Control */
10580         { &hf_cigi3_3_short_symbol_control,
10581             { "Short Symbol Control", "cigi.short_symbol_control",
10582                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10583                 "Short Symbol Control Packet", HFILL }
10584         },
10585         { &hf_cigi3_3_short_symbol_control_symbol_id,
10586             { "Symbol ID", "cigi.short_symbol_control.symbol_id",
10587                 FT_UINT16, BASE_DEC, NULL, 0x0,
10588                 "Specifies the symbol to which this packet is applied", HFILL }
10589         },
10590         { &hf_cigi3_3_short_symbol_control_symbol_state,
10591             { "Symbol State", "cigi.short_symbol_control.symbol_state",
10592                 FT_UINT8, BASE_DEC, VALS(cigi3_3_symbol_control_symbol_state_vals), 0x03,
10593                 "Specifies whether the symbol should be hidden, visible, or destroyed", HFILL }
10594         },
10595         { &hf_cigi3_3_short_symbol_control_attach_state,
10596             { "Atach State", "cigi.short_symbol_control.attach_state",
10597                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_control_attach_state_tfs), 0x04,
10598                 "Specifies whether this symbol should be attached to another", HFILL }
10599         },
10600         { &hf_cigi3_3_short_symbol_control_flash_control,
10601             { "Flash Control", "cigi.short_symbol_control.flash_control",
10602                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_control_flash_control_tfs), 0x08,
10603                 "Specifies whether the flash cycle is continued or restarted", HFILL }
10604         },
10605         { &hf_cigi3_3_short_symbol_control_inherit_color,
10606             { "Inherit Color", "cigi.short_symbol_control.inherit_color",
10607                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_control_inherit_color_tfs), 0x10,
10608                 "Specifies whether the symbol inherits color from a parent symbol", HFILL }
10609         },
10610         { &hf_cigi3_3_short_symbol_control_attribute_select1,
10611             { "Attribute Select 1", "cigi.short_symbol_control.attribute_select1",
10612                 FT_UINT8, BASE_DEC, VALS(cigi3_3_short_symbol_control_attribute_select_vals), 0x0,
10613                 "Identifies the attribute whose value is specified in Attribute Value 1", HFILL }
10614         },
10615         { &hf_cigi3_3_short_symbol_control_attribute_select2,
10616             { "Attribute Select 2", "cigi.short_symbol_control.attribute_select2",
10617                 FT_UINT8, BASE_DEC, VALS(cigi3_3_short_symbol_control_attribute_select_vals), 0x0,
10618                 "Identifies the attribute whose value is specified in Attribute Value 2", HFILL }
10619         },
10620         { &hf_cigi3_3_short_symbol_control_attribute_value1,
10621             { "Value 1", "cigi.short_symbol_control.value1",
10622                 FT_UINT32, BASE_DEC, NULL, 0x0,
10623                 "Specifies the value for attribute 1", HFILL }
10624         },
10625         { &hf_cigi3_3_short_symbol_control_attribute_value2,
10626             { "Value 2", "cigi.short_symbol_control.value2",
10627                 FT_UINT32, BASE_DEC, NULL, 0x0,
10628                 "Specifies the value for attribute 2", HFILL }
10629         },
10630         { &hf_cigi3_3_short_symbol_control_attribute_value1f,
10631             { "Value 1", "cigi.short_symbol_control.value1",
10632                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10633                 "Specifies the value for attribute 1", HFILL }
10634         },
10635         { &hf_cigi3_3_short_symbol_control_attribute_value2f,
10636             { "Value 2", "cigi.short_symbol_control.value2",
10637                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10638                 "Specifies the value for attribute 2", HFILL }
10639         },
10640         { &hf_cigi3_3_short_symbol_control_red1,
10641             { "Red 1", "cigi.short_symbol_control.red1",
10642                 FT_UINT8, BASE_DEC, NULL, 0x0,
10643                 "Specifies the red color component", HFILL }
10644         },
10645         { &hf_cigi3_3_short_symbol_control_green1,
10646             { "Green 1", "cigi.short_symbol_control.green1",
10647                 FT_UINT8, BASE_DEC, NULL, 0x0,
10648                 "Specifies the green color component", HFILL }
10649         },
10650         { &hf_cigi3_3_short_symbol_control_blue1,
10651             { "Blue 1", "cigi.short_symbol_control.blue1",
10652                 FT_UINT8, BASE_DEC, NULL, 0x0,
10653                 "Specifies the blue color component", HFILL }
10654         },
10655         { &hf_cigi3_3_short_symbol_control_alpha1,
10656             { "Alpha 1", "cigi.short_symbol_control.alpha1",
10657                 FT_UINT8, BASE_DEC, NULL, 0x0,
10658                 "Specifies the alpha color component", HFILL }
10659         },
10660         { &hf_cigi3_3_short_symbol_control_red2,
10661             { "Red 2", "cigi.short_symbol_control.red2",
10662                 FT_UINT8, BASE_DEC, NULL, 0x0,
10663                 "Specifies the red color component", HFILL }
10664         },
10665         { &hf_cigi3_3_short_symbol_control_green2,
10666             { "Green 2", "cigi.short_symbol_control.green2",
10667                 FT_UINT8, BASE_DEC, NULL, 0x0,
10668                 "Specifies the green color component", HFILL }
10669         },
10670         { &hf_cigi3_3_short_symbol_control_blue2,
10671             { "Blue 2", "cigi.short_symbol_control.blue2",
10672                 FT_UINT8, BASE_DEC, NULL, 0x0,
10673                 "Specifies the blue color component", HFILL }
10674         },
10675         { &hf_cigi3_3_short_symbol_control_alpha2,
10676             { "Alpha 2", "cigi.short_symbol_control.alpha2",
10677                 FT_UINT8, BASE_DEC, NULL, 0x0,
10678                 "Specifies the alpha color component", HFILL }
10679         },
10680
10681         /* CIGI2 Start of Frame */
10682         { &hf_cigi2_start_of_frame,
10683             { "Start of Frame", "cigi.sof",
10684                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10685                 "Start of Frame Packet", HFILL }
10686         },
10687         { &hf_cigi2_start_of_frame_db_number,
10688             { "Database Number", "cigi.sof.db_number",
10689                 FT_INT8, BASE_DEC, NULL, 0x0,
10690                 "Indicates load status of the requested database", HFILL }
10691         },
10692         { &hf_cigi2_start_of_frame_ig_status_code,
10693             { "IG Status Code", "cigi.sof.ig_status_code",
10694                 FT_UINT8, BASE_DEC, NULL, 0x0,
10695                 "Indicates the operational status of the IG", HFILL }
10696         },
10697         { &hf_cigi2_start_of_frame_ig_mode,
10698             { "IG Mode", "cigi.sof.ig_mode",
10699                 FT_UINT8, BASE_DEC, VALS(cigi2_start_of_frame_ig_mode_vals), 0xc0,
10700                 "Identifies to the host the current operating mode of the IG", HFILL }
10701         },
10702         { &hf_cigi2_start_of_frame_frame_ctr,
10703             { "IG to Host Frame Counter", "cigi.sof.frame_ctr",
10704                 FT_UINT32, BASE_DEC, NULL, 0x0,
10705                 "Contains a number representing a particular frame", HFILL }
10706         },
10707         { &hf_cigi2_start_of_frame_time_tag,
10708             { "Timing Value (microseconds)", "cigi.sof.time_tag",
10709                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10710                 "Contains a timing value that is used to time-tag the ethernet message during asynchronous operation", HFILL }
10711         },
10712
10713         /* CIGI3 Start of Frame */
10714         { &hf_cigi3_start_of_frame,
10715             { "Start of Frame", "cigi.sof",
10716                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10717                 "Start of Frame Packet", HFILL }
10718         },
10719         { &hf_cigi3_start_of_frame_db_number,
10720             { "Database Number", "cigi.sof.db_number",
10721                 FT_INT8, BASE_DEC, NULL, 0x0,
10722                 "Indicates to the Host which database is currently in use and if that database is being loaded into primary memory", HFILL }
10723         },
10724         { &hf_cigi3_start_of_frame_ig_status,
10725             { "IG Status Code", "cigi.sof.ig_status",
10726                 FT_UINT8, BASE_DEC, NULL, 0x0,
10727                 "Indicates the error status of the IG", HFILL }
10728         },
10729         { &hf_cigi3_start_of_frame_ig_mode,
10730             { "IG Mode", "cigi.sof.ig_mode",
10731                 FT_UINT8, BASE_DEC, VALS(cigi3_start_of_frame_ig_mode_vals), 0x03,
10732                 "Indicates the current IG mode", HFILL }
10733         },
10734         { &hf_cigi3_start_of_frame_timestamp_valid,
10735             { "Timestamp Valid", "cigi.sof.timestamp_valid",
10736                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x04,
10737                 "Indicates whether the Timestamp parameter contains a valid value", HFILL }
10738         },
10739         { &hf_cigi3_start_of_frame_earth_reference_model,
10740             { "Earth Reference Model", "cigi.sof.earth_reference_model",
10741                 FT_BOOLEAN, 8, TFS(&cigi3_start_of_frame_earth_reference_model_tfs), 0x08,
10742                 "Indicates whether the IG is using a custom Earth Reference Model or the default WGS 84 reference ellipsoid for coordinate conversion calculations", HFILL }
10743         },
10744         { &hf_cigi3_start_of_frame_frame_ctr,
10745             { "Frame Counter", "cigi.sof.frame_ctr",
10746                 FT_UINT32, BASE_DEC, NULL, 0x0,
10747                 "Contains a number that identifies the frame", HFILL }
10748         },
10749         { &hf_cigi3_start_of_frame_timestamp,
10750             { "Timestamp (microseconds)", "cigi.sof.timestamp",
10751                 FT_UINT32, BASE_DEC, NULL, 0x0,
10752                 "Indicates the number of 10 microsecond \"ticks\" since some initial reference time", HFILL }
10753         },
10754
10755         /* CIGI3_2 Start of Frame */
10756         { &hf_cigi3_2_start_of_frame,
10757             { "Start of Frame", "cigi.sof",
10758                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10759                 "Start of Frame Packet", HFILL }
10760         },
10761         { &hf_cigi3_2_start_of_frame_db_number,
10762             { "Database Number", "cigi.sof.db_number",
10763                 FT_INT8, BASE_DEC, NULL, 0x0,
10764                 "Indicates to the Host which database is currently in use and if that database is being loaded into primary memory", HFILL }
10765         },
10766         { &hf_cigi3_2_start_of_frame_ig_status,
10767             { "IG Status Code", "cigi.sof.ig_status",
10768                 FT_UINT8, BASE_DEC, NULL, 0x0,
10769                 "Indicates the error status of the IG", HFILL }
10770         },
10771         { &hf_cigi3_2_start_of_frame_ig_mode,
10772             { "IG Mode", "cigi.sof.ig_mode",
10773                 FT_UINT8, BASE_DEC, VALS(cigi3_2_start_of_frame_ig_mode_vals), 0x03,
10774                 "Indicates the current IG mode", HFILL }
10775         },
10776         { &hf_cigi3_2_start_of_frame_timestamp_valid,
10777             { "Timestamp Valid", "cigi.sof.timestamp_valid",
10778                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x04,
10779                 "Indicates whether the Timestamp parameter contains a valid value", HFILL }
10780         },
10781         { &hf_cigi3_2_start_of_frame_earth_reference_model,
10782             { "Earth Reference Model", "cigi.sof.earth_reference_model",
10783                 FT_BOOLEAN, 8, TFS(&cigi3_2_start_of_frame_earth_reference_model_tfs), 0x08,
10784                 "Indicates whether the IG is using a custom Earth Reference Model or the default WGS 84 reference ellipsoid for coordinate conversion calculations", HFILL }
10785         },
10786         { &hf_cigi3_2_start_of_frame_ig_frame_number,
10787             { "IG Frame Number", "cigi.sof.ig_frame_number",
10788                 FT_UINT32, BASE_DEC, NULL, 0x0,
10789                 "Uniquely identifies the IG data frame", HFILL }
10790         },
10791         { &hf_cigi3_2_start_of_frame_timestamp,
10792             { "Timestamp (microseconds)", "cigi.sof.timestamp",
10793                 FT_UINT32, BASE_DEC, NULL, 0x0,
10794                 "Indicates the number of 10 microsecond \"ticks\" since some initial reference time", HFILL }
10795         },
10796         { &hf_cigi3_2_start_of_frame_last_host_frame_number,
10797             { "Last Host Frane Number", "cigi.sof.last_host_frame_number",
10798                 FT_UINT32, BASE_DEC, NULL, 0x0,
10799                 "Contains the value of the Host Frame parameter in the last IG Control packet received from the Host.", HFILL }
10800         },
10801
10802         /* CIGI2 Height Above Terrain Response */
10803         { &hf_cigi2_height_above_terrain_response,
10804             { "Height Above Terrain Response", "cigi.hat_response",
10805                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10806                 "Height Above Terrain Response Packet", HFILL }
10807         },
10808         { &hf_cigi2_height_above_terrain_response_hat_id,
10809             { "HAT ID", "cigi.hat_response.hat_id",
10810                 FT_UINT16, BASE_DEC, NULL, 0x0,
10811                 "Identifies the HAT response", HFILL }
10812         },
10813         { &hf_cigi2_height_above_terrain_response_valid,
10814             { "Valid", "cigi.hat_response.valid",
10815                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x80,
10816                 "Indicates whether the response is valid or invalid", HFILL }
10817         },
10818         { &hf_cigi2_height_above_terrain_response_material_type,
10819             { "Material Type", "cigi.hat_response.material_type",
10820                 FT_INT32, BASE_DEC, NULL, 0x0,
10821                 "Specifies the material type of the object intersected by the HAT test vector", HFILL }
10822         },
10823         { &hf_cigi2_height_above_terrain_response_alt,
10824             { "Altitude (m)", "cigi.hat_response.alt",
10825                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
10826                 "Represents the altitude above or below the terrain for the position requested", HFILL }
10827         },
10828
10829         /* CIGI3 HAT/HOT Response */
10830         { &hf_cigi3_hat_hot_response,
10831             { "HAT/HOT Response", "cigi.hat_hot_response",
10832                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10833                 "HAT/HOT Response Packet", HFILL }
10834         },
10835         { &hf_cigi3_hat_hot_response_hat_hot_id,
10836             { "HAT/HOT ID", "cigi.hat_hot_response.hat_hot_id",
10837                 FT_UINT16, BASE_DEC, NULL, 0x0,
10838                 "Identifies the HAT or HOT response", HFILL }
10839         },
10840         { &hf_cigi3_hat_hot_response_valid,
10841             { "Valid", "cigi.hat_hot_response.valid",
10842                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x01,
10843                 "Indicates whether the Height parameter contains a valid number", HFILL }
10844         },
10845         { &hf_cigi3_hat_hot_response_type,
10846             { "Response Type", "cigi.hat_hot_response.type",
10847                 FT_BOOLEAN, 8, TFS(&cigi3_hat_hot_response_type_tfs), 0x02,
10848                 "Indicates whether the Height parameter represent Height Above Terrain or Height Of Terrain", HFILL }
10849         },
10850         { &hf_cigi3_hat_hot_response_height,
10851             { "Height", "cigi.hat_hot_response.height",
10852                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
10853                 "Contains the requested height", HFILL }
10854         },
10855
10856         /* CIGI3_2 HAT/HOT Response */
10857         { &hf_cigi3_2_hat_hot_response,
10858             { "HAT/HOT Response", "cigi.hat_hot_response",
10859                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10860                 "HAT/HOT Response Packet", HFILL }
10861         },
10862         { &hf_cigi3_2_hat_hot_response_hat_hot_id,
10863             { "HAT/HOT ID", "cigi.hat_hot_response.hat_hot_id",
10864                 FT_UINT16, BASE_DEC, NULL, 0x0,
10865                 "Identifies the HAT or HOT response", HFILL }
10866         },
10867         { &hf_cigi3_2_hat_hot_response_valid,
10868             { "Valid", "cigi.hat_hot_response.valid",
10869                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x01,
10870                 "Indicates whether the Height parameter contains a valid number", HFILL }
10871         },
10872         { &hf_cigi3_2_hat_hot_response_type,
10873             { "Response Type", "cigi.hat_hot_response.type",
10874                 FT_BOOLEAN, 8, TFS(&cigi3_2_hat_hot_response_type_tfs), 0x02,
10875                 "Indicates whether the Height parameter represent Height Above Terrain or Height Of Terrain", HFILL }
10876         },
10877         { &hf_cigi3_2_hat_hot_response_host_frame_number_lsn,
10878             { "Host Frame Number LSN", "cigi.hat_hot_response.host_frame_number_lsn",
10879                 FT_UINT8, BASE_DEC, NULL, 0xf0,
10880                 "Least significant nibble of the host frame number parameter of the last IG Control packet received before the HAT or HOT is calculated", HFILL }
10881         },
10882         { &hf_cigi3_2_hat_hot_response_height,
10883             { "Height", "cigi.hat_hot_response.height",
10884                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
10885                 "Contains the requested height", HFILL }
10886         },
10887
10888         /* CIGI3 HAT/HOT Extended Response */
10889         { &hf_cigi3_hat_hot_extended_response,
10890             { "HAT/HOT Extended Response", "cigi.hat_hot_ext_response",
10891                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10892                 "HAT/HOT Extended Response Packet", HFILL }
10893         },
10894         { &hf_cigi3_hat_hot_extended_response_hat_hot_id,
10895             { "HAT/HOT ID", "cigi.hat_hot_ext_response.hat_hot_id",
10896                 FT_UINT16, BASE_DEC, NULL, 0x0,
10897                 "Identifies the HAT/HOT response", HFILL }
10898         },
10899         { &hf_cigi3_hat_hot_extended_response_valid,
10900             { "Valid", "cigi.hat_hot_ext_response.valid",
10901                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x01,
10902                 "Indicates whether the remaining parameters in this packet contain valid numbers", HFILL }
10903         },
10904         { &hf_cigi3_hat_hot_extended_response_hat,
10905             { "HAT", "cigi.hat_hot_ext_response.hat",
10906                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
10907                 "Indicates the height of the test point above the terrain", HFILL }
10908         },
10909         { &hf_cigi3_hat_hot_extended_response_hot,
10910             { "HOT", "cigi.hat_hot_ext_response.hot",
10911                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
10912                 "Indicates the height of terrain above or below the test point", HFILL }
10913         },
10914         { &hf_cigi3_hat_hot_extended_response_material_code,
10915             { "Material Code", "cigi.hat_hot_ext_response.material_code",
10916                 FT_UINT32, BASE_DEC, NULL, 0x0,
10917                 "Indicates the material code of the terrain surface at the point of intersection with the HAT/HOT test vector", HFILL }
10918         },
10919         { &hf_cigi3_hat_hot_extended_response_normal_vector_azimuth,
10920             { "Normal Vector Azimuth (degrees)", "cigi.hat_hot_ext_response.normal_vector_azimuth",
10921                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10922                 "Indicates the azimuth of the normal unit vector of the surface intersected by the HAT/HOT test vector", HFILL }
10923         },
10924         { &hf_cigi3_hat_hot_extended_response_normal_vector_elevation,
10925             { "Normal Vector Elevation (degrees)", "cigi.hat_hot_ext_response.normal_vector_elevation",
10926                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10927                 "Indicates the elevation of the normal unit vector of the surface intersected by the HAT/HOT test vector", HFILL }
10928         },
10929
10930         /* CIGI3_2 HAT/HOT Extended Response */
10931         { &hf_cigi3_2_hat_hot_extended_response,
10932             { "HAT/HOT Extended Response", "cigi.hat_hot_ext_response",
10933                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10934                 "HAT/HOT Extended Response Packet", HFILL }
10935         },
10936         { &hf_cigi3_2_hat_hot_extended_response_hat_hot_id,
10937             { "HAT/HOT ID", "cigi.hat_hot_ext_response.hat_hot_id",
10938                 FT_UINT16, BASE_DEC, NULL, 0x0,
10939                 "Identifies the HAT/HOT response", HFILL }
10940         },
10941         { &hf_cigi3_2_hat_hot_extended_response_valid,
10942             { "Valid", "cigi.hat_hot_ext_response.valid",
10943                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x01,
10944                 "Indicates whether the remaining parameters in this packet contain valid numbers", HFILL }
10945         },
10946         { &hf_cigi3_2_hat_hot_extended_response_host_frame_number_lsn,
10947             { "Host Frame Number LSN", "cigi.hat_hot_ext_response.host_frame_number_lsn",
10948                 FT_UINT8, BASE_DEC, NULL, 0xf0,
10949                 "Least significant nibble of the host frame number parameter of the last IG Control packet received before the HAT or HOT is calculated", HFILL }
10950         },
10951         { &hf_cigi3_2_hat_hot_extended_response_hat,
10952             { "HAT", "cigi.hat_hot_ext_response.hat",
10953                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
10954                 "Indicates the height of the test point above the terrain", HFILL }
10955         },
10956         { &hf_cigi3_2_hat_hot_extended_response_hot,
10957             { "HOT", "cigi.hat_hot_ext_response.hot",
10958                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
10959                 "Indicates the height of terrain above or below the test point", HFILL }
10960         },
10961         { &hf_cigi3_2_hat_hot_extended_response_material_code,
10962             { "Material Code", "cigi.hat_hot_ext_response.material_code",
10963                 FT_UINT32, BASE_DEC, NULL, 0x0,
10964                 "Indicates the material code of the terrain surface at the point of intersection with the HAT/HOT test vector", HFILL }
10965         },
10966         { &hf_cigi3_2_hat_hot_extended_response_normal_vector_azimuth,
10967             { "Normal Vector Azimuth (degrees)", "cigi.hat_hot_ext_response.normal_vector_azimuth",
10968                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10969                 "Indicates the azimuth of the normal unit vector of the surface intersected by the HAT/HOT test vector", HFILL }
10970         },
10971         { &hf_cigi3_2_hat_hot_extended_response_normal_vector_elevation,
10972             { "Normal Vector Elevation (degrees)", "cigi.hat_hot_ext_response.normal_vector_elevation",
10973                 FT_FLOAT, BASE_DEC, NULL, 0x0,
10974                 "Indicates the elevation of the normal unit vector of the surface intersected by the HAT/HOT test vector", HFILL }
10975         },
10976
10977         /* CIGI2 Line of Sight Response */
10978         { &hf_cigi2_line_of_sight_response,
10979             { "Line of Sight Response", "cigi.los_response",
10980                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10981                 "Line of Sight Response Packet", HFILL }
10982         },
10983         { &hf_cigi2_line_of_sight_response_los_id,
10984             { "LOS ID", "cigi.los_response.los_id",
10985                 FT_UINT16, BASE_DEC, NULL, 0x0,
10986                 "Identifies the LOS response corresponding tot he associated LOS request", HFILL }
10987         },
10988         { &hf_cigi2_line_of_sight_response_valid,
10989             { "Valid", "cigi.los_response.valid",
10990                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x80,
10991                 "Indicates whether the response is valid or invalid", HFILL }
10992         },
10993         { &hf_cigi2_line_of_sight_response_occult_response,
10994             { "Occult Response", "cigi.los_response.occult_response",
10995                 FT_BOOLEAN, 8, TFS(&cigi2_line_of_sight_occult_response_tfs), 0x40,
10996                 "Used to respond to the LOS occult request data packet", HFILL }
10997         },
10998         { &hf_cigi2_line_of_sight_response_material_type,
10999             { "Material Type", "cigi.los_response.material_type",
11000                 FT_INT32, BASE_DEC, NULL, 0x0,
11001                 "Specifies the material type of the object intersected by the LOS test segment", HFILL }
11002         },
11003         { &hf_cigi2_line_of_sight_response_range,
11004             { "Range (m)", "cigi.los_response.range",
11005                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11006                 "Used to respond to the Line of Sight Range Request data packet", HFILL }
11007         },
11008         { &hf_cigi2_line_of_sight_response_alt,
11009             { "Intersection Altitude (m)", "cigi.los_response.alt",
11010                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11011                 "Specifies the altitude of the point of intersection of the LOS request vector with an object", HFILL }
11012         },
11013         { &hf_cigi2_line_of_sight_response_lat,
11014             { "Intersection Latitude (degrees)", "cigi.los_response.lat",
11015                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11016                 "Specifies the latitudinal position of the intersection point of the LOS request vector with an object", HFILL }
11017         },
11018         { &hf_cigi2_line_of_sight_response_lon,
11019             { "Intersection Longitude (degrees)", "cigi.los_response.lon",
11020                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11021                 "Specifies the longitudinal position of the intersection point of the LOS request vector with an object", HFILL }
11022         },
11023
11024         /* CIGI3 Line of Sight Response */
11025         { &hf_cigi3_line_of_sight_response,
11026             { "Line of Sight Response", "cigi.los_response",
11027                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11028                 "Line of Sight Response Packet", HFILL }
11029         },
11030         { &hf_cigi3_line_of_sight_response_los_id,
11031             { "LOS ID", "cigi.los_response.los_id",
11032                 FT_UINT16, BASE_DEC, NULL, 0x0,
11033                 "Identifies the LOS response", HFILL }
11034         },
11035         { &hf_cigi3_line_of_sight_response_valid,
11036             { "Valid", "cigi.los_response.valid",
11037                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x01,
11038                 "Indicates whether the Range parameter is valid", HFILL }
11039         },
11040         { &hf_cigi3_line_of_sight_response_entity_id_valid,
11041             { "Entity ID Valid", "cigi.los_response.entity_id_valid",
11042                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x02,
11043                 "Indicates whether the LOS test vector or segment intersects with an entity or a non-entity", HFILL }
11044         },
11045         { &hf_cigi3_line_of_sight_response_visible,
11046             { "Visible", "cigi.los_response.visible",
11047                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_response_visible_tfs), 0x04,
11048                 "Indicates whether the destination point is visible from the source point", HFILL }
11049         },
11050         { &hf_cigi3_line_of_sight_response_count,
11051             { "Response Count", "cigi.los_response.count",
11052                 FT_UINT8, BASE_DEC, NULL, 0x0,
11053                 "Indicates the total number of Line of Sight Response packets the IG will return for the corresponding request", HFILL }
11054         },
11055         { &hf_cigi3_line_of_sight_response_entity_id,
11056             { "Entity ID", "cigi.los_response.entity_id",
11057                 FT_UINT16, BASE_DEC, NULL, 0x0,
11058                 "Indicates the entity with which an LOS test vector or segment intersects", HFILL }
11059         },
11060         { &hf_cigi3_line_of_sight_response_range,
11061             { "Range (m)", "cigi.los_response.range",
11062                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11063                 "Indicates the distance along the LOS test segment or vector from the source point to the point of intersection with a polygon surface", HFILL }
11064         },
11065
11066         /* CIGI3_2 Line of Sight Response */
11067         { &hf_cigi3_2_line_of_sight_response,
11068             { "Line of Sight Response", "cigi.los_response",
11069                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11070                 "Line of Sight Response Packet", HFILL }
11071         },
11072         { &hf_cigi3_2_line_of_sight_response_los_id,
11073             { "LOS ID", "cigi.los_response.los_id",
11074                 FT_UINT16, BASE_DEC, NULL, 0x0,
11075                 "Identifies the LOS response", HFILL }
11076         },
11077         { &hf_cigi3_2_line_of_sight_response_valid,
11078             { "Valid", "cigi.los_response.valid",
11079                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x01,
11080                 "Indicates whether the Range parameter is valid", HFILL }
11081         },
11082         { &hf_cigi3_2_line_of_sight_response_entity_id_valid,
11083             { "Entity ID Valid", "cigi.los_response.entity_id_valid",
11084                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x02,
11085                 "Indicates whether the LOS test vector or segment intersects with an entity or a non-entity", HFILL }
11086         },
11087         { &hf_cigi3_2_line_of_sight_response_visible,
11088             { "Visible", "cigi.los_response.visible",
11089                 FT_BOOLEAN, 8, TFS(&cigi3_2_line_of_sight_response_visible_tfs), 0x04,
11090                 "Indicates whether the destination point is visible from the source point", HFILL }
11091         },
11092         { &hf_cigi3_2_line_of_sight_response_host_frame_number_lsn,
11093             { "Host Frame Number LSN", "cigi.los_response.host_frame_number_lsn",
11094                 FT_UINT8, BASE_DEC, NULL, 0xf0,
11095                 "Least significant nibble of the host frame number parameter of the last IG Control packet received before the HAT or HOT is calculated", HFILL }
11096         },
11097         { &hf_cigi3_2_line_of_sight_response_count,
11098             { "Response Count", "cigi.los_response.count",
11099                 FT_UINT8, BASE_DEC, NULL, 0x0,
11100                 "Indicates the total number of Line of Sight Response packets the IG will return for the corresponding request", HFILL }
11101         },
11102         { &hf_cigi3_2_line_of_sight_response_entity_id,
11103             { "Entity ID", "cigi.los_response.entity_id",
11104                 FT_UINT16, BASE_DEC, NULL, 0x0,
11105                 "Indicates the entity with which an LOS test vector or segment intersects", HFILL }
11106         },
11107         { &hf_cigi3_2_line_of_sight_response_range,
11108             { "Range (m)", "cigi.los_response.range",
11109                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11110                 "Indicates the distance along the LOS test segment or vector from the source point to the point of intersection with a polygon surface", HFILL }
11111         },
11112
11113         /* CIGI3 Line of Sight Extended Response */
11114         { &hf_cigi3_line_of_sight_extended_response,
11115             { "Line of Sight Extended Response", "cigi.los_ext_response",
11116                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11117                 "Line of Sight Extended Response Packet", HFILL }
11118         },
11119         { &hf_cigi3_line_of_sight_extended_response_los_id,
11120             { "LOS ID", "cigi.los_ext_response.los_id",
11121                 FT_UINT16, BASE_DEC, NULL, 0x0,
11122                 "Identifies the LOS response", HFILL }
11123         },
11124         { &hf_cigi3_line_of_sight_extended_response_valid,
11125             { "Valid", "cigi.los_ext_response.valid",
11126                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x01,
11127                 "Indicates whether this packet contains valid data", HFILL }
11128         },
11129         { &hf_cigi3_line_of_sight_extended_response_entity_id_valid,
11130             { "Entity ID Valid", "cigi.los_ext_response.entity_id_valid",
11131                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x02,
11132                 "Indicates whether the LOS test vector or segment intersects with an entity", HFILL }
11133         },
11134         { &hf_cigi3_line_of_sight_extended_response_range_valid,
11135             { "Range Valid", "cigi.los_ext_response.range_valid",
11136                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x04,
11137                 "Indicates whether the Range parameter is valid", HFILL }
11138         },
11139         { &hf_cigi3_line_of_sight_extended_response_visible,
11140             { "Visible", "cigi.los_ext_response.visible",
11141                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_extended_response_visible_tfs), 0x08,
11142                 "Indicates whether the destination point is visible from the source point", HFILL }
11143         },
11144         { &hf_cigi3_line_of_sight_extended_response_intersection_coord,
11145             { "Intersection Point Coordinate System", "cigi.los_ext_response.intersection_coord",
11146                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_extended_response_intersection_coord_tfs), 0x10,
11147                 "Indicates the coordinate system relative to which the intersection point is specified", HFILL }
11148         },
11149         { &hf_cigi3_line_of_sight_extended_response_response_count,
11150             { "Response Count", "cigi.los_ext_response.response_count",
11151                 FT_UINT8, BASE_DEC, NULL, 0x0,
11152                 "Indicates the total number of Line of Sight Extended Response packets the IG will return for the corresponding request", HFILL }
11153         },
11154         { &hf_cigi3_line_of_sight_extended_response_entity_id,
11155             { "Entity ID", "cigi.los_ext_response.entity_id",
11156                 FT_UINT16, BASE_DEC, NULL, 0x0,
11157                 "Indicates the entity with which a LOS test vector or segment intersects", HFILL }
11158         },
11159         { &hf_cigi3_line_of_sight_extended_response_range,
11160             { "Range (m)", "cigi.los_ext_response.range",
11161                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11162                 "Indicates the distance along the LOS test segment or vector from the source point to the point of intersection with an object", HFILL }
11163         },
11164         { &hf_cigi3_line_of_sight_extended_response_lat_xoff,
11165             { "Latitude (degrees)/X Offset (m)", "cigi.los_ext_response.lat_xoff",
11166                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11167                 "Indicates the geodetic latitude of the point of intersection along the LOS test segment or vector or specifies the offset of the point of intersection of the LOS test segment or vector along the intersected entity's X axis", HFILL }
11168         },
11169         { &hf_cigi3_line_of_sight_extended_response_lon_yoff,
11170             { "Longitude (degrees)/Y Offset (m)", "cigi.los_ext_response.lon_yoff",
11171                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11172                 "Indicates the geodetic longitude of the point of intersection along the LOS test segment or vector or specifies the offset of the point of intersection of the LOS test segment or vector along the intersected entity's Y axis", HFILL }
11173         },
11174         { &hf_cigi3_line_of_sight_extended_response_alt_zoff,
11175             { "Altitude (m)/Z Offset(m)", "cigi.los_ext_response.alt_zoff",
11176                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11177                 "Indicates the geodetic altitude of the point of intersection along the LOS test segment or vector or specifies the offset of the point of intersection of the LOS test segment or vector along the intersected entity's Z axis", HFILL }
11178         },
11179         { &hf_cigi3_line_of_sight_extended_response_red,
11180             { "Red", "cigi.los_ext_response.red",
11181                 FT_UINT8, BASE_DEC, NULL, 0x0,
11182                 "Indicates the red color component of the surface at the point of intersection", HFILL }
11183         },
11184         { &hf_cigi3_line_of_sight_extended_response_green,
11185             { "Green", "cigi.los_ext_response.green",
11186                 FT_UINT8, BASE_DEC, NULL, 0x0,
11187                 "Indicates the green color component of the surface at the point of intersection", HFILL }
11188         },
11189         { &hf_cigi3_line_of_sight_extended_response_blue,
11190             { "Blue", "cigi.los_ext_response.blue",
11191                 FT_UINT8, BASE_DEC, NULL, 0x0,
11192                 "Indicates the blue color component of the surface at the point of intersection", HFILL }
11193         },
11194         { &hf_cigi3_line_of_sight_extended_response_alpha,
11195             { "Alpha", "cigi.los_ext_response.alpha",
11196                 FT_UINT8, BASE_DEC, NULL, 0x0,
11197                 "Indicates the alpha component of the surface at the point of intersection", HFILL }
11198         },
11199         { &hf_cigi3_line_of_sight_extended_response_material_code,
11200             { "Material Code", "cigi.los_ext_response.material_code",
11201                 FT_UINT32, BASE_DEC, NULL, 0x0,
11202                 "Indicates the material code of the surface intersected by the LOS test segment of vector", HFILL }
11203         },
11204         { &hf_cigi3_line_of_sight_extended_response_normal_vector_azimuth,
11205             { "Normal Vector Azimuth (degrees)", "cigi.los_ext_response.normal_vector_azimuth",
11206                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11207                 "Indicates the azimuth of a unit vector normal to the surface intersected by the LOS test segment or vector", HFILL }
11208         },
11209         { &hf_cigi3_line_of_sight_extended_response_normal_vector_elevation,
11210             { "Normal Vector Elevation (degrees)", "cigi.los_ext_response.normal_vector_elevation",
11211                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11212                 "Indicates the elevation of a unit vector normal to the surface intersected by the LOS test segment or vector", HFILL }
11213         },
11214
11215         /* CIGI3_2 Line of Sight Extended Response */
11216         { &hf_cigi3_2_line_of_sight_extended_response,
11217             { "Line of Sight Extended Response", "cigi.3_2_los_ext_response",
11218                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11219                 "Line of Sight Extended Response Packet", HFILL }
11220         },
11221         { &hf_cigi3_2_line_of_sight_extended_response_los_id,
11222             { "LOS ID", "cigi.3_2_los_ext_response.los_id",
11223                 FT_UINT16, BASE_DEC, NULL, 0x0,
11224                 "Identifies the LOS response", HFILL }
11225         },
11226         { &hf_cigi3_2_line_of_sight_extended_response_valid,
11227             { "Valid", "cigi.3_2_los_ext_response.valid",
11228                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x01,
11229                 "Indicates whether this packet contains valid data", HFILL }
11230         },
11231         { &hf_cigi3_2_line_of_sight_extended_response_entity_id_valid,
11232             { "Entity ID Valid", "cigi.3_2_los_ext_response.entity_id_valid",
11233                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x02,
11234                 "Indicates whether the LOS test vector or segment intersects with an entity", HFILL }
11235         },
11236         { &hf_cigi3_2_line_of_sight_extended_response_range_valid,
11237             { "Range Valid", "cigi.3_2_los_ext_response.range_valid",
11238                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x04,
11239                 "Indicates whether the Range parameter is valid", HFILL }
11240         },
11241         { &hf_cigi3_2_line_of_sight_extended_response_visible,
11242             { "Visible", "cigi.3_2_los_ext_response.visible",
11243                 FT_BOOLEAN, 8, TFS(&cigi3_2_line_of_sight_extended_response_visible_tfs), 0x08,
11244                 "Indicates whether the destination point is visible from the source point", HFILL }
11245         },
11246         { &hf_cigi3_2_line_of_sight_extended_response_host_frame_number_lsn,
11247             { "Host Frame Number LSN", "cigi.3_2_los_ext_response.host_frame_number_lsn",
11248                 FT_UINT8, BASE_DEC, NULL, 0xf0,
11249                 "Least significant nibble of the host frame number parameter of the last IG Control packet received before the HAT or HOT is calculated", HFILL }
11250         },
11251         { &hf_cigi3_2_line_of_sight_extended_response_response_count,
11252             { "Response Count", "cigi.3_2_los_ext_response.response_count",
11253                 FT_UINT8, BASE_DEC, NULL, 0x0,
11254                 "Indicates the total number of Line of Sight Extended Response packets the IG will return for the corresponding request", HFILL }
11255         },
11256         { &hf_cigi3_2_line_of_sight_extended_response_entity_id,
11257             { "Entity ID", "cigi.3_2_los_ext_response.entity_id",
11258                 FT_UINT16, BASE_DEC, NULL, 0x0,
11259                 "Indicates the entity with which a LOS test vector or segment intersects", HFILL }
11260         },
11261         { &hf_cigi3_2_line_of_sight_extended_response_range,
11262             { "Range (m)", "cigi.3_2_los_ext_response.range",
11263                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11264                 "Indicates the distance along the LOS test segment or vector from the source point to the point of intersection with an object", HFILL }
11265         },
11266         { &hf_cigi3_2_line_of_sight_extended_response_lat_xoff,
11267             { "Latitude (degrees)/X Offset (m)", "cigi.3_2_los_ext_response.lat_xoff",
11268                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11269                 "Indicates the geodetic latitude of the point of intersection along the LOS test segment or vector or specifies the offset of the point of intersection of the LOS test segment or vector along the intersected entity's X axis", HFILL }
11270         },
11271         { &hf_cigi3_2_line_of_sight_extended_response_lon_yoff,
11272             { "Longitude (degrees)/Y Offset (m)", "cigi.3_2_los_ext_response.lon_yoff",
11273                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11274                 "Indicates the geodetic longitude of the point of intersection along the LOS test segment or vector or specifies the offset of the point of intersection of the LOS test segment or vector along the intersected entity's Y axis", HFILL }
11275         },
11276         { &hf_cigi3_2_line_of_sight_extended_response_alt_zoff,
11277             { "Altitude (m)/Z Offset(m)", "cigi.3_2_los_ext_response.alt_zoff",
11278                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11279                 "Indicates the geodetic altitude of the point of intersection along the LOS test segment or vector or specifies the offset of the point of intersection of the LOS test segment or vector along the intersected entity's Z axis", HFILL }
11280         },
11281         { &hf_cigi3_2_line_of_sight_extended_response_red,
11282             { "Red", "cigi.3_2_los_ext_response.red",
11283                 FT_UINT8, BASE_DEC, NULL, 0x0,
11284                 "Indicates the red color component of the surface at the point of intersection", HFILL }
11285         },
11286         { &hf_cigi3_2_line_of_sight_extended_response_green,
11287             { "Green", "cigi.3_2_los_ext_response.green",
11288                 FT_UINT8, BASE_DEC, NULL, 0x0,
11289                 "Indicates the green color component of the surface at the point of intersection", HFILL }
11290         },
11291         { &hf_cigi3_2_line_of_sight_extended_response_blue,
11292             { "Blue", "cigi.3_2_los_ext_response.blue",
11293                 FT_UINT8, BASE_DEC, NULL, 0x0,
11294                 "Indicates the blue color component of the surface at the point of intersection", HFILL }
11295         },
11296         { &hf_cigi3_2_line_of_sight_extended_response_alpha,
11297             { "Alpha", "cigi.3_2_los_ext_response.alpha",
11298                 FT_UINT8, BASE_DEC, NULL, 0x0,
11299                 "Indicates the alpha component of the surface at the point of intersection", HFILL }
11300         },
11301         { &hf_cigi3_2_line_of_sight_extended_response_material_code,
11302             { "Material Code", "cigi.3_2_los_ext_response.material_code",
11303                 FT_UINT32, BASE_DEC, NULL, 0x0,
11304                 "Indicates the material code of the surface intersected by the LOS test segment of vector", HFILL }
11305         },
11306         { &hf_cigi3_2_line_of_sight_extended_response_normal_vector_azimuth,
11307             { "Normal Vector Azimuth (degrees)", "cigi.3_2_los_ext_response.normal_vector_azimuth",
11308                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11309                 "Indicates the azimuth of a unit vector normal to the surface intersected by the LOS test segment or vector", HFILL }
11310         },
11311         { &hf_cigi3_2_line_of_sight_extended_response_normal_vector_elevation,
11312             { "Normal Vector Elevation (degrees)", "cigi.3_2_los_ext_response.normal_vector_elevation",
11313                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11314                 "Indicates the elevation of a unit vector normal to the surface intersected by the LOS test segment or vector", HFILL }
11315         },
11316
11317         /* CIGI2 Collision Detection Segment Response */
11318         { &hf_cigi2_collision_detection_segment_response,
11319             { "Collision Detection Segment Response", "cigi.coll_det_seg_response",
11320                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11321                 "Collision Detection Segment Response Packet", HFILL }
11322         },
11323         { &hf_cigi2_collision_detection_segment_response_entity_id,
11324             { "Entity ID", "cigi.coll_det_seg_response.entity_id",
11325                 FT_UINT16, BASE_DEC, NULL, 0x0,
11326                 "Indicates which entity experienced a collision", HFILL }
11327         },
11328         { &hf_cigi2_collision_detection_segment_response_segment_id,
11329             { "Segment ID", "cigi.coll_det_seg_response.segment_id",
11330                 FT_UINT8, BASE_DEC, NULL, 0xfe,
11331                 "Identifies the collision segment", HFILL }
11332         },
11333         { &hf_cigi2_collision_detection_segment_response_contact,
11334             { "Entity/Non-Entity Contact", "cigi.coll_det_seg_response.contact",
11335                 FT_BOOLEAN, 8, TFS(&cigi2_collision_detection_segment_response_contact_tfs), 0x01,
11336                 "Indicates whether another entity was contacted during this collision", HFILL }
11337         },
11338         { &hf_cigi2_collision_detection_segment_response_contacted_entity,
11339             { "Contacted Entity ID", "cigi.coll_det_seg_response.contacted_entity",
11340                 FT_UINT16, BASE_DEC, NULL, 0x0,
11341                 "Indicates which entity was contacted during the collision", HFILL }
11342         },
11343         { &hf_cigi2_collision_detection_segment_response_material_type,
11344             { "Material Type", "cigi.coll_det_seg_response.material_type",
11345                 FT_INT32, BASE_DEC, NULL, 0x0,
11346                 "Specifies the material type of the surface that this collision test segment contacted", HFILL }
11347         },
11348         { &hf_cigi2_collision_detection_segment_response_collision_x,
11349             { "Collision Point X (m)", "cigi.coll_det_seg_response.collision_x",
11350                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11351                 "Specifies the X component of a vector, which lies along the defined segment where the segment intersected a surface", HFILL }
11352         },
11353         { &hf_cigi2_collision_detection_segment_response_collision_y,
11354             { "Collision Point Y (m)", "cigi.coll_det_seg_response.collision_y",
11355                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11356                 "Specifies the Y component of a vector, which lies along the defined segment where the segment intersected a surface", HFILL }
11357         },
11358         { &hf_cigi2_collision_detection_segment_response_collision_z,
11359             { "Collision Point Z (m)", "cigi.coll_det_seg_response.collision_z",
11360                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11361                 "Specifies the Z component of a vector, which lies along the defined segment where the segment intersected a surface", HFILL }
11362         },
11363
11364         /* CIGI2 Sensor Response */
11365         { &hf_cigi2_sensor_response,
11366             { "Sensor Response", "cigi.sensor_response",
11367                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11368                 "Sensor Response Packet", HFILL }
11369         },
11370         { &hf_cigi2_sensor_response_view_id,
11371             { "View ID", "cigi.sensor_response.view_id",
11372                 FT_UINT8, BASE_DEC, NULL, 0xf8,
11373                 "Indicates the sensor view", HFILL }
11374         },
11375         { &hf_cigi2_sensor_response_status,
11376             { "Sensor Status", "cigi.sensor_response.status",
11377                 FT_UINT8, BASE_DEC, VALS(cigi2_sensor_response_status_vals), 0x06,
11378                 "Indicates the current sensor mode", HFILL }
11379         },
11380         { &hf_cigi2_sensor_response_sensor_id,
11381             { "Sensor ID", "cigi.sensor_response.sensor_id",
11382                 FT_UINT8, BASE_DEC, NULL, 0x0,
11383                 "Identifies the sensor response corresponding to the associated sensor control data packet", HFILL }
11384         },
11385         { &hf_cigi2_sensor_response_x_offset,
11386             { "Gate X Offset (degrees)", "cigi.sensor_response.x_offset",
11387                 FT_UINT16, BASE_DEC, NULL, 0x0,
11388                 "Specifies the target's horizontal offset from the view plane normal", HFILL }
11389         },
11390         { &hf_cigi2_sensor_response_y_offset,
11391             { "Gate Y Offset (degrees)", "cigi.sensor_response.y_offset",
11392                 FT_UINT16, BASE_DEC, NULL, 0x0,
11393                 "Specifies the target's vertical offset from the view plane normal", HFILL }
11394         },
11395         { &hf_cigi2_sensor_response_x_size,
11396             { "Gate X Size", "cigi.sensor_response.x_size",
11397                 FT_UINT16, BASE_DEC, NULL, 0x0,
11398                 "Specifies the target size in the X direction (horizontal) in pixels", HFILL }
11399         },
11400         { &hf_cigi2_sensor_response_y_size,
11401             { "Gate Y Size", "cigi.sensor_response.y_size",
11402                 FT_UINT16, BASE_DEC, NULL, 0x0,
11403                 "Specifies the target size in the Y direction (vertical) in pixels", HFILL }
11404         },
11405
11406         /* CIGI3 Sensor Response */
11407         { &hf_cigi3_sensor_response,
11408             { "Sensor Response", "cigi.sensor_response",
11409                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11410                 "Sensor Response Packet", HFILL }
11411         },
11412         { &hf_cigi3_sensor_response_view_id,
11413             { "View ID", "cigi.sensor_response.view_id",
11414                 FT_UINT16, BASE_DEC, NULL, 0x0,
11415                 "Specifies the view that represents the sensor display", HFILL }
11416         },
11417         { &hf_cigi3_sensor_response_sensor_id,
11418             { "Sensor ID", "cigi.sensor_response.sensor_id",
11419                 FT_UINT8, BASE_DEC, NULL, 0x0,
11420                 "Specifies the sensor to which the data in this packet apply", HFILL }
11421         },
11422         { &hf_cigi3_sensor_response_sensor_status,
11423             { "Sensor Status", "cigi.sensor_response.sensor_status",
11424                 FT_UINT8, BASE_DEC, VALS(cigi3_sensor_response_sensor_status_vals), 0x03,
11425                 "Indicates the current tracking state of the sensor", HFILL }
11426         },
11427         { &hf_cigi3_sensor_response_gate_x_size,
11428             { "Gate X Size (pixels or raster lines)", "cigi.sensor_response.gate_x_size",
11429                 FT_UINT16, BASE_DEC, NULL, 0x0,
11430                 "Specifies the gate symbol size along the view's X axis", HFILL }
11431         },
11432         { &hf_cigi3_sensor_response_gate_y_size,
11433             { "Gate Y Size (pixels or raster lines)", "cigi.sensor_response.gate_y_size",
11434                 FT_UINT16, BASE_DEC, NULL, 0x0,
11435                 "Specifies the gate symbol size along the view's Y axis", HFILL }
11436         },
11437         { &hf_cigi3_sensor_response_gate_x_pos,
11438             { "Gate X Position (degrees)", "cigi.sensor_response.gate_x_pos",
11439                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11440                 "Specifies the gate symbol's position along the view's X axis", HFILL }
11441         },
11442         { &hf_cigi3_sensor_response_gate_y_pos,
11443             { "Gate Y Position (degrees)", "cigi.sensor_response.gate_y_pos",
11444                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11445                 "Specifies the gate symbol's position along the view's Y axis", HFILL }
11446         },
11447         { &hf_cigi3_sensor_response_frame_ctr,
11448             { "Frame Counter", "cigi.sensor_response.frame_ctr",
11449                 FT_UINT32, BASE_DEC, NULL, 0x0,
11450                 "Indicates the IG's frame counter at the time that the IG calculates the gate and line-of-sight intersection data", HFILL }
11451         },
11452
11453         /* CIGI3 Sensor Extended Response */
11454         { &hf_cigi3_sensor_extended_response,
11455             { "Sensor Extended Response", "cigi.sensor_ext_response",
11456                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11457                 "Sensor Extended Response Packet", HFILL }
11458         },
11459         { &hf_cigi3_sensor_extended_response_view_id,
11460             { "View ID", "cigi.sensor_ext_response.view_id",
11461                 FT_UINT16, BASE_DEC, NULL, 0x0,
11462                 "Specifies the view that represents the sensor display", HFILL }
11463         },
11464         { &hf_cigi3_sensor_extended_response_sensor_id,
11465             { "Sensor ID", "cigi.sensor_ext_response.sensor_id",
11466                 FT_UINT8, BASE_DEC, NULL, 0x0,
11467                 "Specifies the sensor to which the data in this packet apply", HFILL }
11468         },
11469         { &hf_cigi3_sensor_extended_response_sensor_status,
11470             { "Sensor Status", "cigi.sensor_ext_response.sensor_status",
11471                 FT_UINT8, BASE_DEC, VALS(cigi3_sensor_extended_response_sensor_status_vals), 0x03,
11472                 "Indicates the current tracking state of the sensor", HFILL }
11473         },
11474         { &hf_cigi3_sensor_extended_response_entity_id_valid,
11475             { "Entity ID Valid", "cigi.sensor_ext_response.entity_id_valid",
11476                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x04,
11477                 "Indicates whether the target is an entity or a non-entity object", HFILL }
11478         },
11479         { &hf_cigi3_sensor_extended_response_entity_id,
11480             { "Entity ID", "cigi.sensor_ext_response.entity_id",
11481                 FT_UINT16, BASE_DEC, NULL, 0x0,
11482                 "Indicates the entity ID of the target", HFILL }
11483         },
11484         { &hf_cigi3_sensor_extended_response_gate_x_size,
11485             { "Gate X Size (pixels or raster lines)", "cigi.sensor_ext_response.gate_x_size",
11486                 FT_UINT16, BASE_DEC, NULL, 0x0,
11487                 "Specifies the gate symbol size along the view's X axis", HFILL }
11488         },
11489         { &hf_cigi3_sensor_extended_response_gate_y_size,
11490             { "Gate Y Size (pixels or raster lines)", "cigi.sensor_ext_response.gate_y_size",
11491                 FT_UINT16, BASE_DEC, NULL, 0x0,
11492                 "Specifies the gate symbol size along the view's Y axis", HFILL }
11493         },
11494         { &hf_cigi3_sensor_extended_response_gate_x_pos,
11495             { "Gate X Position (degrees)", "cigi.sensor_ext_response.gate_x_pos",
11496                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11497                 "Specifies the gate symbol's position along the view's X axis", HFILL }
11498         },
11499         { &hf_cigi3_sensor_extended_response_gate_y_pos,
11500             { "Gate Y Position (degrees)", "cigi.sensor_ext_response.gate_y_pos",
11501                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11502                 "Specifies the gate symbol's position along the view's Y axis", HFILL }
11503         },
11504         { &hf_cigi3_sensor_extended_response_frame_ctr,
11505             { "Frame Counter", "cigi.sensor_ext_response.frame_ctr",
11506                 FT_UINT32, BASE_DEC, NULL, 0x0,
11507                 "Indicates the IG's frame counter at the time that the IG calculates the gate and line-of-sight intersection data", HFILL }
11508         },
11509         { &hf_cigi3_sensor_extended_response_track_lat,
11510             { "Track Point Latitude (degrees)", "cigi.sensor_ext_response.track_lat",
11511                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11512                 "Indicates the geodetic latitude of the point being tracked by the sensor", HFILL }
11513         },
11514         { &hf_cigi3_sensor_extended_response_track_lon,
11515             { "Track Point Longitude (degrees)", "cigi.sensor_ext_response.track_lon",
11516                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11517                 "Indicates the geodetic longitude of the point being tracked by the sensor", HFILL }
11518         },
11519         { &hf_cigi3_sensor_extended_response_track_alt,
11520             { "Track Point Altitude (m)", "cigi.sensor_ext_response.track_alt",
11521                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11522                 "Indicates the geodetic altitude of the point being tracked by the sensor", HFILL }
11523         },
11524
11525         /* CIGI2 Height of Terrain Response */
11526         { &hf_cigi2_height_of_terrain_response,
11527             { "Height of Terrain Response", "cigi.hot_response",
11528                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11529                 "Height of Terrain Response Packet", HFILL }
11530         },
11531         { &hf_cigi2_height_of_terrain_response_hot_id,
11532             { "HOT ID", "cigi.hot_response.hot_id",
11533                 FT_UINT16, BASE_DEC, NULL, 0x0,
11534                 "Identifies the HOT response corresponding to the associated HOT request", HFILL }
11535         },
11536         { &hf_cigi2_height_of_terrain_response_valid,
11537             { "Valid", "cigi.hot_response.valid",
11538                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x80,
11539                 "Indicates whether the response is valid or invalid", HFILL }
11540         },
11541         { &hf_cigi2_height_of_terrain_response_material_type,
11542             { "Material Type", "cigi.hot_response.material_type",
11543                 FT_INT32, BASE_DEC, NULL, 0x0,
11544                 "Specifies the material type of the object intersected by the HOT test segment", HFILL }
11545         },
11546         { &hf_cigi2_height_of_terrain_response_alt,
11547             { "Altitude (m)", "cigi.hot_response.alt",
11548                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11549                 "Represents the altitude of the terrain for the position requested in the HOT request data packet", HFILL }
11550         },
11551
11552         /* CIGI2 Collision Detection Volume Response */
11553         { &hf_cigi2_collision_detection_volume_response,
11554             { "Collision Detection Volume Response", "cigi.coll_det_vol_response",
11555                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11556                 "Collision Detection Volume Response Packet", HFILL }
11557         },
11558         { &hf_cigi2_collision_detection_volume_response_entity_id,
11559             { "Entity ID", "cigi.coll_det_vol_response.entity_id",
11560                 FT_UINT16, BASE_DEC, NULL, 0x0,
11561                 "Indicates which entity experienced a collision", HFILL }
11562         },
11563         { &hf_cigi2_collision_detection_volume_response_volume_id,
11564             { "Volume ID", "cigi.coll_det_vol_response.volume_id",
11565                 FT_UINT8, BASE_DEC, NULL, 0xfe,
11566                 "Identifies the collision volume corresponding to the associated Collision Detection Volume Request", HFILL }
11567         },
11568         { &hf_cigi2_collision_detection_volume_response_contact,
11569             { "Entity/Non-Entity Contact", "cigi.coll_det_vol_response.contact",
11570                 FT_BOOLEAN, 8, TFS(&cigi2_collision_detection_volume_response_contact_tfs), 0x01,
11571                 "Indicates whether another entity was contacted during this collision", HFILL }
11572         },
11573         { &hf_cigi2_collision_detection_volume_response_contact_entity,
11574             { "Contacted Entity ID", "cigi.coll_det_vol_response.contact_entity",
11575                 FT_UINT16, BASE_DEC, NULL, 0x0,
11576                 "Indicates which entity was contacted with during the collision", HFILL }
11577         },
11578
11579         /* CIGI3 Position Response */
11580         { &hf_cigi3_position_response,
11581             { "Position Response", "cigi.pos_response",
11582                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11583                 "Position Response Packet", HFILL }
11584         },
11585         { &hf_cigi3_position_response_object_id,
11586             { "Object ID", "cigi.pos_response.object_id",
11587                 FT_UINT16, BASE_DEC, NULL, 0x0,
11588                 "Identifies the entity, view, view group, or motion tracking device whose position is being reported", HFILL }
11589         },
11590         { &hf_cigi3_position_response_part_id,
11591             { "Articulated Part ID", "cigi.pos_response.part_id",
11592                 FT_UINT8, BASE_DEC, NULL, 0x0,
11593                 "Identifies the articulated part whose position is being reported", HFILL }
11594         },
11595         { &hf_cigi3_position_response_object_class,
11596             { "Object Class", "cigi.pos_response.object_class",
11597                 FT_UINT8, BASE_DEC, VALS(cigi3_position_response_object_class_vals), 0x07,
11598                 "Indicates the type of object whose position is being reported", HFILL }
11599         },
11600         { &hf_cigi3_position_response_coord_system,
11601             { "Coordinate System", "cigi.pos_response.coord_system",
11602                 FT_UINT8, BASE_DEC, VALS(cigi3_position_response_coord_system_vals), 0x18,
11603                 "Indicates the coordinate system in which the position and orientation are specified", HFILL }
11604         },
11605         { &hf_cigi3_position_response_lat_xoff,
11606             { "Latitude (degrees)/X Offset (m)", "cigi.pos_response.lat_xoff",
11607                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11608                 "Indicates the geodetic latitude of the entity, articulated part, view, or view group or indicates the X offset from the parent entity's origin to the child entity, articulated part, view or view group", HFILL }
11609         },
11610         { &hf_cigi3_position_response_lon_yoff,
11611             { "Longitude (degrees)/Y Offset (m)", "cigi.pos_response.lon_yoff",
11612                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11613                 "Indicates the geodetic longitude of the entity, articulated part, view, or view group or indicates the Y offset from the parent entity's origin to the child entity, articulated part, view, or view group", HFILL }
11614         },
11615         { &hf_cigi3_position_response_alt_zoff,
11616             { "Altitude (m)/Z Offset (m)", "cigi.pos_response.alt_zoff",
11617                 FT_DOUBLE, BASE_DEC, NULL, 0x0,
11618                 "Indicates the geodetic altitude of the entity, articulated part, view, or view group or indicates the Z offset from the parent entity's origin to the child entity, articulated part, view, or view group", HFILL }
11619         },
11620         { &hf_cigi3_position_response_roll,
11621             { "Roll (degrees)", "cigi.pos_response.roll",
11622                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11623                 "Indicates the roll angle of the specified entity, articulated part, view, or view group", HFILL }
11624         },
11625         { &hf_cigi3_position_response_pitch,
11626             { "Pitch (degrees)", "cigi.pos_response.pitch",
11627                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11628                 "Indicates the pitch angle of the specified entity, articulated part, view, or view group", HFILL }
11629         },
11630         { &hf_cigi3_position_response_yaw,
11631             { "Yaw (degrees)", "cigi.pos_response.yaw",
11632                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11633                 "Indicates the yaw angle of the specified entity, articulated part, view, or view group", HFILL }
11634         },
11635
11636         /* CIGI3 Weather Conditions Response */
11637         { &hf_cigi3_weather_conditions_response,
11638             { "Weather Conditions Response", "cigi.wea_cond_response",
11639                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11640                 "Weather Conditions Response Packet", HFILL }
11641         },
11642         { &hf_cigi3_weather_conditions_response_request_id,
11643             { "Request ID", "cigi.wea_cond_response.request_id",
11644                 FT_UINT8, BASE_DEC, NULL, 0x0,
11645                 "Identifies the environmental conditions request to which this response packet corresponds", HFILL }
11646         },
11647         { &hf_cigi3_weather_conditions_response_humidity,
11648             { "Humidity (%)", "cigi.wea_cond_response.humidity",
11649                 FT_UINT8, BASE_DEC, NULL, 0x0,
11650                 "Indicates the humidity at the request location", HFILL }
11651         },
11652         { &hf_cigi3_weather_conditions_response_air_temp,
11653             { "Air Temperature (degrees C)", "cigi.wea_cond_response.air_temp",
11654                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11655                 "Indicates the air temperature at the requested location", HFILL }
11656         },
11657         { &hf_cigi3_weather_conditions_response_visibility_range,
11658             { "Visibility Range (m)", "cigi.wea_cond_response.visibility_range",
11659                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11660                 "Indicates the visibility range at the requested location", HFILL }
11661         },
11662         { &hf_cigi3_weather_conditions_response_horiz_speed,
11663             { "Horizontal Wind Speed (m/s)", "cigi.wea_cond_response.horiz_speed",
11664                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11665                 "Indicates the local wind speed parallel to the ellipsoid-tangential reference plane", HFILL }
11666         },
11667         { &hf_cigi3_weather_conditions_response_vert_speed,
11668             { "Vertical Wind Speed (m/s)", "cigi.wea_cond_response.vert_speed",
11669                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11670                 "Indicates the local vertical wind speed", HFILL }
11671         },
11672         { &hf_cigi3_weather_conditions_response_wind_direction,
11673             { "Wind Direction (degrees)", "cigi.wea_cond_response.wind_direction",
11674                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11675                 "Indicates the local wind direction", HFILL }
11676         },
11677         { &hf_cigi3_weather_conditions_response_barometric_pressure,
11678             { "Barometric Pressure (mb or hPa)", "cigi.wea_cond_response.barometric_pressure",
11679                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11680                 "Indicates the atmospheric pressure at the requested location", HFILL }
11681         },
11682
11683         /* CIGI3 Aerosol Concentration Response */
11684         { &hf_cigi3_aerosol_concentration_response,
11685             { "Aerosol Concentration Response", "cigi.aerosol_concentration_response",
11686                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11687                 "Aerosol Concentration Response Packet", HFILL }
11688         },
11689         { &hf_cigi3_aerosol_concentration_response_request_id,
11690             { "Request ID", "cigi.aerosol_concentration_response.request_id",
11691                 FT_UINT8, BASE_DEC, NULL, 0x0,
11692                 "Identifies the environmental conditions request to which this response packet corresponds", HFILL }
11693         },
11694         { &hf_cigi3_aerosol_concentration_response_layer_id,
11695             { "Layer ID", "cigi.aerosol_concentration_response.layer_id",
11696                 FT_UINT8, BASE_DEC, NULL, 0x0,
11697                 "Identifies the weather layer whose aerosol concentration is being described", HFILL }
11698         },
11699         { &hf_cigi3_aerosol_concentration_response_aerosol_concentration,
11700             { "Aerosol Concentration (g/m^3)", "cigi.aerosol_concentration_response.aerosol_concentration",
11701                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11702                 "Identifies the concentration of airborne particles", HFILL }
11703         },
11704
11705         /* CIGI3 Maritime Surface Conditions Response */
11706         { &hf_cigi3_maritime_surface_conditions_response,
11707             { "Maritime Surface Conditions Response", "cigi.maritime_surface_conditions_response",
11708                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11709                 "Maritime Surface Conditions Response Packet", HFILL }
11710         },
11711         { &hf_cigi3_maritime_surface_conditions_response_request_id,
11712             { "Request ID", "cigi.maritime_surface_conditions_response.request_id",
11713                 FT_UINT8, BASE_DEC, NULL, 0x0,
11714                 "Identifies the environmental conditions request to which this response packet corresponds", HFILL }
11715         },
11716         { &hf_cigi3_maritime_surface_conditions_response_sea_surface_height,
11717             { "Sea Surface Height (m)", "cigi.maritime_surface_conditions_response.sea_surface_height",
11718                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11719                 "Indicates the height of the sea surface at equilibrium", HFILL }
11720         },
11721         { &hf_cigi3_maritime_surface_conditions_response_surface_water_temp,
11722             { "Surface Water Temperature (degrees C)", "cigi.maritime_surface_conditions_response.surface_water_temp",
11723                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11724                 "Indicates the water temperature at the sea surface", HFILL }
11725         },
11726         { &hf_cigi3_maritime_surface_conditions_response_surface_clarity,
11727             { "Surface Clarity (%)", "cigi.maritime_surface_conditions_response.surface_clarity",
11728                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11729                 "Indicates the clarity of the water at its surface", HFILL }
11730         },
11731
11732         /* CIGI3 Terrestrial Surface Conditions Response */
11733         { &hf_cigi3_terrestrial_surface_conditions_response,
11734             { "Terrestrial Surface Conditions Response", "cigi.terr_surface_cond_response",
11735                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11736                 "Terrestrial Surface Conditions Response Packet", HFILL }
11737         },
11738         { &hf_cigi3_terrestrial_surface_conditions_response_request_id,
11739             { "Request ID", "cigi.terr_surface_cond_response.request_id",
11740                 FT_UINT8, BASE_DEC, NULL, 0x0,
11741                 "Identifies the environmental conditions request to which this response packet corresponds", HFILL }
11742         },
11743         { &hf_cigi3_terrestrial_surface_conditions_response_surface_id,
11744             { "Surface Condition ID", "cigi.terr_surface_cond_response.surface_id",
11745                 FT_UINT32, BASE_DEC, NULL, 0x0,
11746                 "Indicates the presence of a specific surface condition or contaminant at the test point", HFILL }
11747         },
11748
11749         /* CIGI3 Collision Detection Segment Notification */
11750         { &hf_cigi3_collision_detection_segment_notification,
11751             { "Collision Detection Segment Notification", "cigi.coll_det_seg_notification",
11752                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11753                 "Collision Detection Segment Notification Packet", HFILL }
11754         },
11755         { &hf_cigi3_collision_detection_segment_notification_entity_id,
11756             { "Entity ID", "cigi.coll_det_seg_notification.entity_id",
11757                 FT_UINT16, BASE_DEC, NULL, 0x0,
11758                 "Indicates the entity to which the collision detection segment belongs", HFILL }
11759         },
11760         { &hf_cigi3_collision_detection_segment_notification_segment_id,
11761             { "Segment ID", "cigi.coll_det_seg_notification.segment_id",
11762                 FT_UINT8, BASE_DEC, NULL, 0x0,
11763                 "Indicates the ID of the collision detection segment along which the collision occurred", HFILL }
11764         },
11765         { &hf_cigi3_collision_detection_segment_notification_type,
11766             { "Collision Type", "cigi.coll_det_seg_notification.type",
11767                 FT_BOOLEAN, 8, TFS(&cigi3_collision_detection_segment_notification_type_tfs), 0x01,
11768                 "Indicates whether the collision occurred with another entity or with a non-entity object", HFILL }
11769         },
11770         { &hf_cigi3_collision_detection_segment_notification_contacted_entity_id,
11771             { "Contacted Entity ID", "cigi.coll_det_seg_notification.contacted_entity_id",
11772                 FT_UINT16, BASE_DEC, NULL, 0x0,
11773                 "Indicates the entity with which the collision occurred", HFILL }
11774         },
11775         { &hf_cigi3_collision_detection_segment_notification_material_code,
11776             { "Material Code", "cigi.coll_det_seg_notification.material_code",
11777                 FT_UINT32, BASE_DEC, NULL, 0x0,
11778                 "Indicates the material code of the surface at the point of collision", HFILL }
11779         },
11780         { &hf_cigi3_collision_detection_segment_notification_intersection_distance,
11781             { "Intersection Distance (m)", "cigi.coll_det_seg_notification.intersection_distance",
11782                 FT_FLOAT, BASE_DEC, NULL, 0x0,
11783                 "Indicates the distance along the collision test vector from the source endpoint to the point of intersection", HFILL }
11784         },
11785
11786         /* CIGI3 Collision Detection Volume Notification */
11787         { &hf_cigi3_collision_detection_volume_notification,
11788             { "Collision Detection Volume Notification", "cigi.coll_det_vol_notification",
11789                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11790                 "Collision Detection Volume Notification Packet", HFILL }
11791         },
11792         { &hf_cigi3_collision_detection_volume_notification_entity_id,
11793             { "Entity ID", "cigi.coll_det_vol_notification.entity_id",
11794                 FT_UINT16, BASE_DEC, NULL, 0x0,
11795                 "Indicates the entity to which the collision detection volume belongs", HFILL }
11796         },
11797         { &hf_cigi3_collision_detection_volume_notification_volume_id,
11798             { "Volume ID", "cigi.coll_det_vol_notification.volume_id",
11799                 FT_UINT8, BASE_DEC, NULL, 0x0,
11800                 "Indicates the ID of the collision detection volume within which the collision occurred", HFILL }
11801         },
11802         { &hf_cigi3_collision_detection_volume_notification_type,
11803             { "Collision Type", "cigi.coll_det_vol_notification.type",
11804                 FT_BOOLEAN, 8, TFS(&cigi3_collision_detection_volume_notification_type_tfs), 0x01,
11805                 "Indicates whether the collision occurred with another entity or with a non-entity object", HFILL }
11806         },
11807         { &hf_cigi3_collision_detection_volume_notification_contacted_entity_id,
11808             { "Contacted Entity ID", "cigi.coll_det_vol_notification.contacted_entity_id",
11809                 FT_UINT16, BASE_DEC, NULL, 0x0,
11810                 "Indicates the entity with which the collision occurred", HFILL }
11811         },
11812         { &hf_cigi3_collision_detection_volume_notification_contacted_volume_id,
11813             { "Contacted Volume ID", "cigi.coll_det_vol_notification.contacted_volume_id",
11814                 FT_UINT8, BASE_DEC, NULL, 0x0,
11815                 "Indicates the ID of the collision detection volume with which the collision occurred", HFILL }
11816         },
11817
11818         /* CIGI3 Animation Stop Notification */
11819         { &hf_cigi3_animation_stop_notification,
11820             { "Animation Stop Notification", "cigi.animation_stop_notification",
11821                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11822                 "Animation Stop Notification Packet", HFILL }
11823         },
11824         { &hf_cigi3_animation_stop_notification_entity_id,
11825             { "Entity ID", "cigi.animation_stop_notification.entity_id",
11826                 FT_UINT16, BASE_DEC, NULL, 0x0,
11827                 "Indicates the entity ID of the animation that has stopped", HFILL }
11828         },
11829
11830         /* CIGI3 Event Notification */
11831         { &hf_cigi3_event_notification,
11832             { "Event Notification", "cigi.event_notification",
11833                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11834                 "Event Notification Packet", HFILL }
11835         },
11836         { &hf_cigi3_event_notification_event_id,
11837             { "Event ID", "cigi.event_notification.event_id",
11838                 FT_UINT16, BASE_DEC, NULL, 0x0,
11839                 "Indicates which event has occurred", HFILL }
11840         },
11841         { &hf_cigi3_event_notification_data_1,
11842             { "Event Data 1", "cigi.event_notification.data_1",
11843                 FT_BYTES, BASE_NONE, NULL, 0x0,
11844                 "Used for user-defined event data", HFILL }
11845         },
11846         { &hf_cigi3_event_notification_data_2,
11847             { "Event Data 2", "cigi.event_notification.data_2",
11848                 FT_BYTES, BASE_NONE, NULL, 0x0,
11849                 "Used for user-defined event data", HFILL }
11850         },
11851         { &hf_cigi3_event_notification_data_3,
11852             { "Event Data 3", "cigi.event_notification.data_3",
11853                 FT_BYTES, BASE_NONE, NULL, 0x0,
11854                 "Used for user-defined event data", HFILL }
11855         },
11856
11857         /* CIGI2 Image Generator Message */
11858         { &hf_cigi2_image_generator_message,
11859             { "Image Generator Message", "cigi.image_generator_message",
11860                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11861                 "Image Generator Message Packet", HFILL }
11862         },
11863         { &hf_cigi2_image_generator_message_id,
11864             { "Message ID", "cigi.image_generator_message.message_id",
11865                 FT_UINT16, BASE_DEC, NULL, 0x0,
11866                 "Uniquely identifies an instance of an Image Generator Response Message", HFILL }
11867         },
11868         { &hf_cigi2_image_generator_message_message,
11869             { "Message", "cigi.image_generator_message.message",
11870                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11871                 "Image generator message", HFILL }
11872         },
11873
11874         /* CIGI3 Image Generator Message */
11875         { &hf_cigi3_image_generator_message,
11876             { "Image Generator Message", "cigi.image_generator_message",
11877                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11878                 "Image Generator Message Packet", HFILL }
11879         },
11880         { &hf_cigi3_image_generator_message_id,
11881             { "Message ID", "cigi.image_generator_message.message_id",
11882                 FT_UINT16, BASE_DEC, NULL, 0x0,
11883                 "Specifies a numerical identifier for the message", HFILL }
11884         },
11885         { &hf_cigi3_image_generator_message_message,
11886             { "Message", "cigi.image_generator_message.message",
11887                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11888                 "Message string", HFILL }
11889         },
11890
11891         /* CIGI2 User Definable */
11892         { &hf_cigi2_user_definable,
11893             { "User Definable", "cigi.user_definable",
11894                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11895                 "User definable packet", HFILL }
11896         },
11897
11898         /* CIGI3 User-Defined Packets */
11899         { &hf_cigi3_user_defined,
11900             { "User-Defined", "cigi.user_defined",
11901                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11902                 "User-Defined Packet", HFILL }
11903         },
11904     };
11905
11906     /* CIGI preferences */
11907     static enum_val_t cigi_versions[] = {
11908         { "from_packet", "From Packet", CIGI_VERSION_FROM_PACKET },
11909         { "cigi2", "CIGI 2", CIGI_VERSION_2 },
11910         { "cigi3", "CIGI 3", CIGI_VERSION_3 },
11911         { NULL, NULL, 0 }
11912     };
11913
11914     static enum_val_t cigi_byte_orders[] = {
11915         { "from_packet", "From Packet", CIGI_BYTE_ORDER_FROM_PACKET },
11916         { "big_endian", "Big-Endian", CIGI_BYTE_ORDER_BIG_ENDIAN },
11917         { "little_endian", "Little-Endian", CIGI_BYTE_ORDER_LITTLE_ENDIAN },
11918         { NULL, NULL, 0 }
11919     };
11920
11921     /* Setup protocol subtree array */
11922     static gint *ett[] = {
11923         &ett_cigi,
11924     };
11925
11926     /* Register the protocol name and description */
11927     proto_cigi = proto_register_protocol("Common Image Generator Interface",
11928             "CIGI", "cigi");
11929
11930     /* Required function calls to register the header fields and subtrees used */
11931     proto_register_field_array(proto_cigi, hf, array_length(hf));
11932     proto_register_subtree_array(ett, array_length(ett));
11933
11934     /* Register preferences module */
11935     cigi_module = prefs_register_protocol(proto_cigi, proto_reg_handoff_cigi);
11936
11937     /* Register preferences */
11938     prefs_register_enum_preference(cigi_module, "version", "CIGI version", "The version of CIGI with which to dissect packets", &global_cigi_version, cigi_versions, FALSE);
11939     prefs_register_enum_preference(cigi_module, "byte_order", "Byte Order", "The byte order with which to dissect CIGI packets (CIGI3)", &global_cigi_byte_order, cigi_byte_orders, FALSE);
11940     prefs_register_string_preference(cigi_module, "host", "Host IP", "IPv4 address or hostname of the host", &global_host_ip);
11941     prefs_register_string_preference(cigi_module, "ig", "Image Generator IP", "IPv4 address or hostname of the image generator", &global_ig_ip);
11942
11943 }
11944
11945 /* This function is also called by preferences whenever "Apply" is pressed
11946    (see prefs_register_protocol above) so it should accommodate being called
11947    more than once.
11948 */
11949 void
11950 proto_reg_handoff_cigi(void)
11951 {
11952     static gboolean inited = FALSE;
11953
11954     /* If the CIGI version preference was changed update the cigi version
11955      * information for all packets */
11956     if ( global_cigi_version != CIGI_VERSION_FROM_PACKET ) {
11957         cigi_version = global_cigi_version;
11958     }
11959
11960     /* If the CIGI byte order preference was changed update the cigi byte
11961      * order information for all packets */
11962     if ( global_cigi_byte_order != CIGI_BYTE_ORDER_FROM_PACKET ) {
11963         cigi_byte_order = global_cigi_byte_order;
11964     }
11965
11966     if( !inited ) {
11967
11968         cigi_handle = new_create_dissector_handle(dissect_cigi, proto_cigi);
11969         dissector_add_handle("udp.port", cigi_handle);
11970         dissector_add_handle("tcp.port", cigi_handle);
11971         heur_dissector_add("udp", dissect_cigi_heur, proto_cigi);
11972
11973         inited = TRUE;
11974     }
11975 }