#include <string.h> and/or #include <stdio.h> not needed.
[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 <stdlib.h>
37
38 #include <glib.h>
39
40 #include <epan/packet.h>
41 #include <epan/prefs.h>
42
43 /* Forward declaration */
44 void proto_reg_handoff_cigi(void);
45 static gboolean packet_is_cigi(tvbuff_t*);
46 static gboolean dissect_cigi_heur(tvbuff_t*, packet_info*, proto_tree*);
47 static int dissect_cigi(tvbuff_t*, packet_info*, proto_tree*);
48 static void dissect_cigi_pdu(tvbuff_t*, packet_info*, proto_tree*);
49 static void cigi_add_tree(tvbuff_t*, proto_tree*);
50 static gint cigi_add_data(tvbuff_t*, proto_tree*, gint);
51
52 static void cigi2_add_tree(tvbuff_t*, proto_tree*);
53 static gint cigi2_add_ig_control(tvbuff_t*, proto_tree*, gint);
54 static gint cigi2_add_entity_control(tvbuff_t*, proto_tree*, gint);
55 static gint cigi2_add_component_control(tvbuff_t*, proto_tree*, gint);
56 static gint cigi2_add_articulated_parts_control(tvbuff_t*, proto_tree*, gint);
57 static gint cigi2_add_rate_control(tvbuff_t*, proto_tree*, gint);
58 static gint cigi2_add_environment_control(tvbuff_t*, proto_tree*, gint);
59 static gint cigi2_add_weather_control(tvbuff_t*, proto_tree*, gint);
60 static gint cigi2_add_view_control(tvbuff_t*, proto_tree*, gint);
61 static gint cigi2_add_sensor_control(tvbuff_t*, proto_tree*, gint);
62 static gint cigi2_add_trajectory_definition(tvbuff_t*, proto_tree*, gint);
63 static gint cigi2_add_special_effect_definition(tvbuff_t*, proto_tree*, gint);
64 static gint cigi2_add_view_definition(tvbuff_t*, proto_tree*, gint);
65 static gint cigi2_add_collision_detection_segment_definition(tvbuff_t*, proto_tree*, gint);
66 static gint cigi2_add_collision_detection_volume_definition(tvbuff_t*, proto_tree*, gint);
67 static gint cigi2_add_height_above_terrain_request(tvbuff_t*, proto_tree*, gint);
68 static gint cigi2_add_line_of_sight_occult_request(tvbuff_t*, proto_tree*, gint);
69 static gint cigi2_add_line_of_sight_range_request(tvbuff_t*, proto_tree*, gint);
70 static gint cigi2_add_height_of_terrain_request(tvbuff_t*, proto_tree*, gint);
71 static gint cigi2_add_start_of_frame(tvbuff_t*, proto_tree*, gint);
72 static gint cigi2_add_height_above_terrain_response(tvbuff_t*, proto_tree*, gint);
73 static gint cigi2_add_line_of_sight_response(tvbuff_t*, proto_tree*, gint);
74 static gint cigi2_add_collision_detection_segment_response(tvbuff_t*, proto_tree*, gint);
75 static gint cigi2_add_sensor_response(tvbuff_t*, proto_tree*, gint);
76 static gint cigi2_add_height_of_terrain_response(tvbuff_t*, proto_tree*, gint);
77 static gint cigi2_add_collision_detection_volume_response(tvbuff_t*, proto_tree*, gint);
78 static gint cigi2_add_image_generator_message(tvbuff_t*, proto_tree*, gint);
79
80 static void cigi3_add_tree(tvbuff_t*, proto_tree*);
81 static gint cigi3_add_ig_control(tvbuff_t*, proto_tree*, gint);
82 static gint cigi3_add_entity_control(tvbuff_t*, proto_tree*, gint);
83 static gint cigi3_add_conformal_clamped_entity_control(tvbuff_t*, proto_tree*, gint);
84 static gint cigi3_add_component_control(tvbuff_t*, proto_tree*, gint);
85 static gint cigi3_add_short_component_control(tvbuff_t*, proto_tree*, gint);
86 static gint cigi3_add_articulated_part_control(tvbuff_t*, proto_tree*, gint);
87 static gint cigi3_add_short_articulated_part_control(tvbuff_t*, proto_tree*, gint);
88 static gint cigi3_add_rate_control(tvbuff_t*, proto_tree*, gint);
89 static gint cigi3_add_celestial_sphere_control(tvbuff_t*, proto_tree*, gint);
90 static gint cigi3_add_atmosphere_control(tvbuff_t*, proto_tree*, gint);
91 static gint cigi3_add_environmental_region_control(tvbuff_t*, proto_tree*, gint);
92 static gint cigi3_add_weather_control(tvbuff_t*, proto_tree*, gint);
93 static gint cigi3_add_maritime_surface_conditions_control(tvbuff_t*, proto_tree*, gint);
94 static gint cigi3_add_wave_control(tvbuff_t*, proto_tree*, gint);
95 static gint cigi3_add_terrestrial_surface_conditions_control(tvbuff_t*, proto_tree*, gint);
96 static gint cigi3_add_view_control(tvbuff_t*, proto_tree*, gint);
97 static gint cigi3_add_sensor_control(tvbuff_t*, proto_tree*, gint);
98 static gint cigi3_add_motion_tracker_control(tvbuff_t*, proto_tree*, gint);
99 static gint cigi3_add_earth_reference_model_definition(tvbuff_t*, proto_tree*, gint);
100 static gint cigi3_add_trajectory_definition(tvbuff_t*, proto_tree*, gint);
101 static gint cigi3_add_view_definition(tvbuff_t*, proto_tree*, gint);
102 static gint cigi3_add_collision_detection_segment_definition(tvbuff_t*, proto_tree*, gint);
103 static gint cigi3_add_collision_detection_volume_definition(tvbuff_t*, proto_tree*, gint);
104 static gint cigi3_add_hat_hot_request(tvbuff_t*, proto_tree*, gint);
105 static gint cigi3_add_line_of_sight_segment_request(tvbuff_t*, proto_tree*, gint);
106 static gint cigi3_add_line_of_sight_vector_request(tvbuff_t*, proto_tree*, gint);
107 static gint cigi3_add_position_request(tvbuff_t*, proto_tree*, gint);
108 static gint cigi3_add_environmental_conditions_request(tvbuff_t*, proto_tree*, gint);
109 static gint cigi3_add_start_of_frame(tvbuff_t*, proto_tree*, gint);
110 static gint cigi3_add_hat_hot_response(tvbuff_t*, proto_tree*, gint);
111 static gint cigi3_add_hat_hot_extended_response(tvbuff_t*, proto_tree*, gint);
112 static gint cigi3_add_line_of_sight_response(tvbuff_t*, proto_tree*, gint);
113 static gint cigi3_add_line_of_sight_extended_response(tvbuff_t*, proto_tree*, gint);
114 static gint cigi3_add_sensor_response(tvbuff_t*, proto_tree*, gint);
115 static gint cigi3_add_sensor_extended_response(tvbuff_t*, proto_tree*, gint);
116 static gint cigi3_add_position_response(tvbuff_t*, proto_tree*, gint);
117 static gint cigi3_add_weather_conditions_response(tvbuff_t*, proto_tree*, gint);
118 static gint cigi3_add_aerosol_concentration_response(tvbuff_t*, proto_tree*, gint);
119 static gint cigi3_add_maritime_surface_conditions_response(tvbuff_t*, proto_tree*, gint);
120 static gint cigi3_add_terrestrial_surface_conditions_response(tvbuff_t*, proto_tree*, gint);
121 static gint cigi3_add_collision_detection_segment_notification(tvbuff_t*, proto_tree*, gint);
122 static gint cigi3_add_collision_detection_volume_notification(tvbuff_t*, proto_tree*, gint);
123 static gint cigi3_add_animation_stop_notification(tvbuff_t*, proto_tree*, gint);
124 static gint cigi3_add_event_notification(tvbuff_t*, proto_tree*, gint);
125 static gint cigi3_add_image_generator_message(tvbuff_t*, proto_tree*, gint);
126
127 static gint cigi3_2_add_ig_control(tvbuff_t*, proto_tree*, gint);
128 static gint cigi3_2_add_rate_control(tvbuff_t*, proto_tree*, gint);
129 static gint cigi3_2_add_hat_hot_request(tvbuff_t*, proto_tree*, gint);
130 static gint cigi3_2_add_line_of_sight_segment_request(tvbuff_t*, proto_tree*, gint);
131 static gint cigi3_2_add_line_of_sight_vector_request(tvbuff_t*, proto_tree*, gint);
132 static gint cigi3_2_add_start_of_frame(tvbuff_t*, proto_tree*, gint);
133 static gint cigi3_2_add_hat_hot_response(tvbuff_t*, proto_tree*, gint);
134 static gint cigi3_2_add_hat_hot_extended_response(tvbuff_t*, proto_tree*, gint);
135 static gint cigi3_2_add_line_of_sight_response(tvbuff_t*, proto_tree*, gint);
136 static gint cigi3_2_add_line_of_sight_extended_response(tvbuff_t*, proto_tree*, gint);
137
138 static gint cigi3_3_add_ig_control(tvbuff_t*, proto_tree*, gint);
139 static gint cigi3_3_add_entity_control(tvbuff_t*, proto_tree*, gint);
140 static gint cigi3_3_add_component_control(tvbuff_t*, proto_tree*, gint);
141 static gint cigi3_3_add_short_component_control(tvbuff_t*, proto_tree*, gint);
142 static gint cigi3_3_add_symbol_surface_definition(tvbuff_t*, proto_tree*, gint);
143 static gint cigi3_3_add_symbol_text_definition(tvbuff_t*, proto_tree*, gint);
144 static gint cigi3_3_add_symbol_circle_definition(tvbuff_t*, proto_tree*, gint);
145 static gint cigi3_3_add_symbol_line_definition(tvbuff_t*, proto_tree*, gint);
146 static gint cigi3_3_add_symbol_clone(tvbuff_t*, proto_tree*, gint);
147 static gint cigi3_3_add_symbol_control(tvbuff_t*, proto_tree*, gint);
148 static gint cigi3_3_add_short_symbol_control(tvbuff_t*, proto_tree*, gint);
149
150
151 static gfloat tvb_get_fixed_point(tvbuff_t*, int, gint);
152
153 /* CIGI Handle */
154 static dissector_handle_t cigi_handle;
155
156 /* Initialize the protocol and registered fields */
157 static int proto_cigi = -1;
158
159 static const true_false_string cigi_enable_tfs = {
160     "Enable",
161     "Disable"
162 };
163
164 static const true_false_string cigi_valid_tfs = {
165     "Valid",
166     "Invalid"
167 };
168
169
170 /* All CIGI Versions */
171 static int hf_cigi_src_port = -1;
172 static int hf_cigi_dest_port = -1;
173 static int hf_cigi_port = -1;
174
175 static int hf_cigi_packet_id = -1;
176 static int hf_cigi_packet_size = -1;
177 static int hf_cigi_version = -1;
178
179 static int hf_cigi_frame_size = -1;
180
181 static int hf_cigi_unknown = -1;
182
183
184 /*** Fields for CIGI2 ***/
185
186 /* CIGI2 Packet ID */
187 static int hf_cigi2_packet_id = -1;
188 #define CIGI2_PACKET_ID_IG_CONTROL                               1
189 #define CIGI2_PACKET_ID_ENTITY_CONTROL                           2
190 #define CIGI2_PACKET_ID_COMPONENT_CONTROL                        3
191 #define CIGI2_PACKET_ID_ARTICULATED_PARTS_CONTROL                4
192 #define CIGI2_PACKET_ID_RATE_CONTROL                             5
193 #define CIGI2_PACKET_ID_ENVIRONMENT_CONTROL                      6
194 #define CIGI2_PACKET_ID_WEATHER_CONTROL                          7
195 #define CIGI2_PACKET_ID_VIEW_CONTROL                             8
196 #define CIGI2_PACKET_ID_SENSOR_CONTROL                           9
197 #define CIGI2_PACKET_ID_TRAJECTORY_DEFINITION                   21
198 #define CIGI2_PACKET_ID_SPECIAL_EFFECT_DEFINITION               22
199 #define CIGI2_PACKET_ID_VIEW_DEFINITION                         23
200 #define CIGI2_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION  24
201 #define CIGI2_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION   25
202 #define CIGI2_PACKET_ID_HEIGHT_ABOVE_TERRAIN_REQUEST            41
203 #define CIGI2_PACKET_ID_LINE_OF_SIGHT_OCCULT_REQUEST            42
204 #define CIGI2_PACKET_ID_LINE_OF_SIGHT_RANGE_REQUEST             43
205 #define CIGI2_PACKET_ID_HEIGHT_OF_TERRAIN_REQUEST               44
206 #define CIGI2_PACKET_ID_START_OF_FRAME                         101
207 #define CIGI2_PACKET_ID_HEIGHT_ABOVE_TERRAIN_RESPONSE          102
208 #define CIGI2_PACKET_ID_LINE_OF_SIGHT_RESPONSE                 103
209 #define CIGI2_PACKET_ID_COLLISION_DETECTION_SEGMENT_RESPONSE   104
210 #define CIGI2_PACKET_ID_SENSOR_RESPONSE                        105
211 #define CIGI2_PACKET_ID_HEIGHT_OF_TERRAIN_RESPONSE             106
212 #define CIGI2_PACKET_ID_COLLISION_DETECTION_VOLUME_RESPONSE    107
213 #define CIGI2_PACKET_ID_IMAGE_GENERATOR_MESSAGE                108
214 #define CIGI2_PACKET_ID_USER_DEFINABLE_MIN                     236
215 #define CIGI2_PACKET_ID_USER_DEFINABLE_MAX                     255
216 static const value_string cigi2_packet_id_vals[] = {
217     {CIGI2_PACKET_ID_IG_CONTROL, "IG Control"},
218     {CIGI2_PACKET_ID_ENTITY_CONTROL, "Entity Control"},
219     {CIGI2_PACKET_ID_COMPONENT_CONTROL, "Component Control"},
220     {CIGI2_PACKET_ID_ARTICULATED_PARTS_CONTROL, "Articulated Parts Control"},
221     {CIGI2_PACKET_ID_RATE_CONTROL, "Rate Control"},
222     {CIGI2_PACKET_ID_ENVIRONMENT_CONTROL, "Environment Control"},
223     {CIGI2_PACKET_ID_WEATHER_CONTROL, "Weather Control"},
224     {CIGI2_PACKET_ID_VIEW_CONTROL, "View Control"},
225     {CIGI2_PACKET_ID_SENSOR_CONTROL, "Sensor Control"},
226     {CIGI2_PACKET_ID_TRAJECTORY_DEFINITION, "Trajectory Definition"},
227     {CIGI2_PACKET_ID_SPECIAL_EFFECT_DEFINITION, "Special Effect Definition"},
228     {CIGI2_PACKET_ID_VIEW_DEFINITION, "View Definition"},
229     {CIGI2_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION, "Collision Detection Segment Definition"},
230     {CIGI2_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION, "Collision Detection Volume Definition"},
231     {CIGI2_PACKET_ID_HEIGHT_ABOVE_TERRAIN_REQUEST, "Height Above Terrain Request"},
232     {CIGI2_PACKET_ID_LINE_OF_SIGHT_OCCULT_REQUEST, "Line of Sight Occult Request"},
233     {CIGI2_PACKET_ID_LINE_OF_SIGHT_RANGE_REQUEST, "Line of Sight Range Request"},
234     {CIGI2_PACKET_ID_HEIGHT_OF_TERRAIN_REQUEST, "Height of Terrain Request"},
235     {CIGI2_PACKET_ID_START_OF_FRAME, "Start of Frame"},
236     {CIGI2_PACKET_ID_HEIGHT_ABOVE_TERRAIN_RESPONSE, "Height Above Terrain Response"},
237     {CIGI2_PACKET_ID_LINE_OF_SIGHT_RESPONSE, "Line of Sight Response"},
238     {CIGI2_PACKET_ID_COLLISION_DETECTION_SEGMENT_RESPONSE, "Collision Detection Segment Response"},
239     {CIGI2_PACKET_ID_SENSOR_RESPONSE, "Sensor Response"},
240     {CIGI2_PACKET_ID_HEIGHT_OF_TERRAIN_RESPONSE, "Height of Terrain Response"},
241     {CIGI2_PACKET_ID_COLLISION_DETECTION_VOLUME_RESPONSE, "Collision Detection Volume Response"},
242     {CIGI2_PACKET_ID_IMAGE_GENERATOR_MESSAGE, "Image Generator Message"},
243     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN, "User Definable"},
244     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+1, "User Definable"},
245     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+2, "User Definable"},
246     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+3, "User Definable"},
247     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+4, "User Definable"},
248     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+5, "User Definable"},
249     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+6, "User Definable"},
250     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+7, "User Definable"},
251     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+8, "User Definable"},
252     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+9, "User Definable"},
253     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+10, "User Definable"},
254     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+11, "User Definable"},
255     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+12, "User Definable"},
256     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+13, "User Definable"},
257     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+14, "User Definable"},
258     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+15, "User Definable"},
259     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+16, "User Definable"},
260     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+17, "User Definable"},
261     {CIGI2_PACKET_ID_USER_DEFINABLE_MIN+18, "User Definable"},
262     {CIGI2_PACKET_ID_USER_DEFINABLE_MAX, "User Definable"},
263     {0, NULL},
264 };
265
266 /* CIGI2 IG Control */
267 #define CIGI2_PACKET_SIZE_IG_CONTROL 16
268 static int hf_cigi2_ig_control = -1;
269 static int hf_cigi2_ig_control_db_number = -1;
270 static int hf_cigi2_ig_control_ig_mode = -1;
271 static int hf_cigi2_ig_control_tracking_enable = -1;
272 static int hf_cigi2_ig_control_boresight = -1;
273 static int hf_cigi2_ig_control_frame_ctr = -1;
274 static int hf_cigi2_ig_control_time_tag = -1;
275
276 static const value_string cigi2_ig_control_ig_mode_vals[] = {
277     {0, "Standby/Reset"},
278     {1, "Operate"},
279     {2, "Debug"},
280     {0, NULL},
281 };
282
283 /* CIGI2 Entity Control */
284 #define CIGI2_PACKET_SIZE_ENTITY_CONTROL 56
285 static int hf_cigi2_entity_control = -1;
286 static int hf_cigi2_entity_control_entity_id = -1;
287 static int hf_cigi2_entity_control_entity_state = -1;
288 static int hf_cigi2_entity_control_attach_state = -1;
289 static int hf_cigi2_entity_control_collision_detect = -1;
290 static int hf_cigi2_entity_control_effect_state = -1;
291 static int hf_cigi2_entity_control_type = -1;
292 static int hf_cigi2_entity_control_parent_id = -1;
293 static int hf_cigi2_entity_control_opacity = -1;
294 static int hf_cigi2_entity_control_internal_temp = -1;
295 static int hf_cigi2_entity_control_roll = -1;
296 static int hf_cigi2_entity_control_pitch = -1;
297 static int hf_cigi2_entity_control_heading = -1;
298 static int hf_cigi2_entity_control_alt = -1;
299 static int hf_cigi2_entity_control_lat = -1;
300 static int hf_cigi2_entity_control_lon = -1;
301
302 static const value_string cigi2_entity_control_entity_state_vals[] = {
303     {0, "Load/Hide"},
304     {1, "Load/Show"},
305     {2, "Unload"},
306     {0, NULL},
307 };
308
309 static const true_false_string cigi2_entity_control_attach_state_tfs = {
310     "Attach",
311     "Detach"
312 };
313
314 static const value_string cigi2_entity_control_effect_state_vals[] = {
315     {0, "Stop"},
316     {1, "Play"},
317     {2, "Restart"},
318     {0, NULL},
319 };
320
321 /* CIGI2 Component Control */
322 #define CIGI2_PACKET_SIZE_COMPONENT_CONTROL 20
323 static int hf_cigi2_component_control = -1;
324 static int hf_cigi2_component_control_instance_id = -1;
325 static int hf_cigi2_component_control_component_class = -1;
326 static int hf_cigi2_component_control_component_id = -1;
327 static int hf_cigi2_component_control_component_state = -1;
328 static int hf_cigi2_component_control_component_val1 = -1;
329 static int hf_cigi2_component_control_component_val2 = -1;
330
331 static const value_string cigi2_component_control_component_class_vals[] = {
332     {0, "Entity"},
333     {1, "Environment"},
334     {2, "View"},
335     {3, "View Group"},
336     {4, "Sensor"},
337     {5, "System"},
338     {0, NULL},
339 };
340
341 /* CIGI2 Articulated Parts Control */
342 #define CIGI2_PACKET_SIZE_ARTICULATED_PARTS_CONTROL 32
343 static int hf_cigi2_articulated_parts_control = -1;
344 static int hf_cigi2_articulated_parts_control_entity_id = -1;
345 static int hf_cigi2_articulated_parts_control_part_id = -1;
346 static int hf_cigi2_articulated_parts_control_part_state = -1;
347 static int hf_cigi2_articulated_parts_control_xoff_enable = -1;
348 static int hf_cigi2_articulated_parts_control_yoff_enable = -1;
349 static int hf_cigi2_articulated_parts_control_zoff_enable = -1;
350 static int hf_cigi2_articulated_parts_control_roll_enable = -1;
351 static int hf_cigi2_articulated_parts_control_pitch_enable = -1;
352 static int hf_cigi2_articulated_parts_control_yaw_enable = -1;
353 static int hf_cigi2_articulated_parts_control_x_offset = -1;
354 static int hf_cigi2_articulated_parts_control_y_offset = -1;
355 static int hf_cigi2_articulated_parts_control_z_offset = -1;
356 static int hf_cigi2_articulated_parts_control_roll = -1;
357 static int hf_cigi2_articulated_parts_control_pitch = -1;
358 static int hf_cigi2_articulated_parts_control_yaw = -1;
359
360 /* CIGI2 Rate Control */
361 #define CIGI2_PACKET_SIZE_RATE_CONTROL 32
362 static int hf_cigi2_rate_control = -1;
363 static int hf_cigi2_rate_control_entity_id = -1;
364 static int hf_cigi2_rate_control_part_id = -1;
365 static int hf_cigi2_rate_control_x_rate = -1;
366 static int hf_cigi2_rate_control_y_rate = -1;
367 static int hf_cigi2_rate_control_z_rate = -1;
368 static int hf_cigi2_rate_control_roll_rate = -1;
369 static int hf_cigi2_rate_control_pitch_rate = -1;
370 static int hf_cigi2_rate_control_yaw_rate = -1;
371
372 /* CIGI2 Environmental Control */
373 #define CIGI2_PACKET_SIZE_ENVIRONMENT_CONTROL 36
374 static int hf_cigi2_environment_control = -1;
375 static int hf_cigi2_environment_control_hour = -1;
376 static int hf_cigi2_environment_control_minute = -1;
377 static int hf_cigi2_environment_control_ephemeris_enable = -1;
378 static int hf_cigi2_environment_control_humidity = -1;
379 static int hf_cigi2_environment_control_modtran_enable = -1;
380 static int hf_cigi2_environment_control_date = -1;
381 static int hf_cigi2_environment_control_air_temp = -1;
382 static int hf_cigi2_environment_control_global_visibility = -1;
383 static int hf_cigi2_environment_control_wind_speed = -1;
384 static int hf_cigi2_environment_control_wind_direction = -1;
385 static int hf_cigi2_environment_control_pressure = -1;
386 static int hf_cigi2_environment_control_aerosol = -1;
387
388 /* CIGI2 Weather Control */
389 #define CIGI2_PACKET_SIZE_WEATHER_CONTROL 44
390 static int hf_cigi2_weather_control = -1;
391 static int hf_cigi2_weather_control_entity_id = -1;
392 static int hf_cigi2_weather_control_weather_enable = -1;
393 static int hf_cigi2_weather_control_scud_enable = -1;
394 static int hf_cigi2_weather_control_random_winds = -1;
395 static int hf_cigi2_weather_control_severity = -1;
396 static int hf_cigi2_weather_control_phenomenon_type = -1;
397 static int hf_cigi2_weather_control_air_temp = -1;
398 static int hf_cigi2_weather_control_opacity = -1;
399 static int hf_cigi2_weather_control_scud_frequency = -1;
400 static int hf_cigi2_weather_control_coverage = -1;
401 static int hf_cigi2_weather_control_elevation = -1;
402 static int hf_cigi2_weather_control_thickness = -1;
403 static int hf_cigi2_weather_control_transition_band = -1;
404 static int hf_cigi2_weather_control_wind_speed = -1;
405 static int hf_cigi2_weather_control_wind_direction = -1;
406
407 static const value_string cigi2_weather_control_phenomenon_type_vals[] = {
408     {0, "Use Entity ID"},
409     {1, "Cloud Layer 1"},
410     {2, "Cloud Layer 2"},
411     {3, "Ground Fog"},
412     {4, "Rain"},
413     {5, "Snow"},
414     {6, "Sand"},
415     {0, NULL},
416 };
417
418 /* CIGI2 View Control */
419 #define CIGI2_PACKET_SIZE_VIEW_CONTROL 32
420 static int hf_cigi2_view_control = -1;
421 static int hf_cigi2_view_control_entity_id = -1;
422 static int hf_cigi2_view_control_view_id = -1;
423 static int hf_cigi2_view_control_view_group = -1;
424 static int hf_cigi2_view_control_xoff_enable = -1;
425 static int hf_cigi2_view_control_yoff_enable = -1;
426 static int hf_cigi2_view_control_zoff_enable = -1;
427 static int hf_cigi2_view_control_roll_enable = -1;
428 static int hf_cigi2_view_control_pitch_enable = -1;
429 static int hf_cigi2_view_control_yaw_enable = -1;
430 static int hf_cigi2_view_control_x_offset = -1;
431 static int hf_cigi2_view_control_y_offset = -1;
432 static int hf_cigi2_view_control_z_offset = -1;
433 static int hf_cigi2_view_control_roll = -1;
434 static int hf_cigi2_view_control_pitch = -1;
435 static int hf_cigi2_view_control_yaw = -1;
436
437 /* CIGI2 Sensor Control */
438 #define CIGI2_PACKET_SIZE_SENSOR_CONTROL 24
439 static int hf_cigi2_sensor_control = -1;
440 static int hf_cigi2_sensor_control_view_id = -1;
441 static int hf_cigi2_sensor_control_sensor_enable = -1;
442 static int hf_cigi2_sensor_control_polarity = -1;
443 static int hf_cigi2_sensor_control_line_dropout = -1;
444 static int hf_cigi2_sensor_control_sensor_id = -1;
445 static int hf_cigi2_sensor_control_track_mode = -1;
446 static int hf_cigi2_sensor_control_auto_gain = -1;
447 static int hf_cigi2_sensor_control_track_polarity = -1;
448 static int hf_cigi2_sensor_control_gain = -1;
449 static int hf_cigi2_sensor_control_level = -1;
450 static int hf_cigi2_sensor_control_ac_coupling = -1;
451 static int hf_cigi2_sensor_control_noise = -1;
452
453 static const true_false_string cigi2_sensor_control_polarity_tfs = {
454     "Black",
455     "White"
456 };
457
458 static const value_string cigi2_sensor_control_track_mode_vals[] = {
459     {0, "Off"},
460     {1, "Force Correlate"},
461     {2, "Scene"},
462     {3, "Target"},
463     {4, "Ship"},
464     {0, NULL},
465 };
466
467 /* CIGI2 Trajectory Definition */
468 #define CIGI2_PACKET_SIZE_TRAJECTORY_DEFINITION 16
469 static int hf_cigi2_trajectory_definition = -1;
470 static int hf_cigi2_trajectory_definition_entity_id = -1;
471 static int hf_cigi2_trajectory_definition_acceleration = -1;
472 static int hf_cigi2_trajectory_definition_retardation = -1;
473 static int hf_cigi2_trajectory_definition_terminal_velocity = -1;
474
475 /* CIGI2 Special Effect Definition */
476 #define CIGI2_PACKET_SIZE_SPECIAL_EFFECT_DEFINITION 32
477 static int hf_cigi2_special_effect_definition = -1;
478 static int hf_cigi2_special_effect_definition_entity_id = -1;
479 static int hf_cigi2_special_effect_definition_seq_direction = -1;
480 static int hf_cigi2_special_effect_definition_color_enable = -1;
481 static int hf_cigi2_special_effect_definition_red = -1;
482 static int hf_cigi2_special_effect_definition_green = -1;
483 static int hf_cigi2_special_effect_definition_blue = -1;
484 static int hf_cigi2_special_effect_definition_x_scale = -1;
485 static int hf_cigi2_special_effect_definition_y_scale = -1;
486 static int hf_cigi2_special_effect_definition_z_scale = -1;
487 static int hf_cigi2_special_effect_definition_time_scale = -1;
488 static int hf_cigi2_special_effect_definition_effect_count = -1;
489 static int hf_cigi2_special_effect_definition_separation = -1;
490 static int hf_cigi2_special_effect_definition_burst_interval = -1;
491 static int hf_cigi2_special_effect_definition_duration = -1;
492
493 static const true_false_string cigi2_special_effect_definition_seq_direction_tfs = {
494     "Backward",
495     "Forward"
496 };
497
498 /* CIGI2 View Definition */
499 #define CIGI2_PACKET_SIZE_VIEW_DEFINITION 32
500 static int hf_cigi2_view_definition = -1;
501 static int hf_cigi2_view_definition_view_id = -1;
502 static int hf_cigi2_view_definition_view_group = -1;
503 static int hf_cigi2_view_definition_view_type = -1;
504 static int hf_cigi2_view_definition_pixel_rep = -1;
505 static int hf_cigi2_view_definition_mirror = -1;
506 static int hf_cigi2_view_definition_tracker_assign = -1;
507 static int hf_cigi2_view_definition_near_enable = -1;
508 static int hf_cigi2_view_definition_far_enable = -1;
509 static int hf_cigi2_view_definition_left_enable = -1;
510 static int hf_cigi2_view_definition_right_enable = -1;
511 static int hf_cigi2_view_definition_top_enable = -1;
512 static int hf_cigi2_view_definition_bottom_enable = -1;
513 static int hf_cigi2_view_definition_fov_near = -1;
514 static int hf_cigi2_view_definition_fov_far = -1;
515 static int hf_cigi2_view_definition_fov_left = -1;
516 static int hf_cigi2_view_definition_fov_right = -1;
517 static int hf_cigi2_view_definition_fov_top = -1;
518 static int hf_cigi2_view_definition_fov_bottom = -1;
519
520 static const value_string cigi2_view_definition_pixel_rep_vals[] = {
521     {0, "No Replicate"},
522     {1, "1x2 Pixel Replicate"},
523     {2, "2x1 Pixel Replicate"},
524     {3, "2x2 Pixel Replicate"},
525     {4, "TBD"},
526     {5, "TBD"},
527     {6, "TBD"},
528     {0, NULL},
529 };
530
531 static const value_string cigi2_view_definition_mirror_vals[] = {
532     {0, "None"},
533     {1, "Horizontal"},
534     {2, "Vertical"},
535     {3, "Horizontal and Vertical"},
536     {0, NULL},
537 };
538
539 /* CIGI2 Collision Detection Segment Definition */
540 #define CIGI2_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_DEFINITION 24
541 static int hf_cigi2_collision_detection_segment_definition = -1;
542 static int hf_cigi2_collision_detection_segment_definition_entity_id = -1;
543 static int hf_cigi2_collision_detection_segment_definition_segment_enable = -1;
544 static int hf_cigi2_collision_detection_segment_definition_segment_id = -1;
545 static int hf_cigi2_collision_detection_segment_definition_collision_mask = -1;
546 static int hf_cigi2_collision_detection_segment_definition_x_start = -1;
547 static int hf_cigi2_collision_detection_segment_definition_y_start = -1;
548 static int hf_cigi2_collision_detection_segment_definition_z_start = -1;
549 static int hf_cigi2_collision_detection_segment_definition_x_end = -1;
550 static int hf_cigi2_collision_detection_segment_definition_y_end = -1;
551 static int hf_cigi2_collision_detection_segment_definition_z_end = -1;
552
553 /* CIGI2 Collision Detection Volume Definition */
554 #define CIGI2_PACKET_SIZE_COLLISION_DETECTION_VOLUME_DEFINITION 20
555 static int hf_cigi2_collision_detection_volume_definition = -1;
556 static int hf_cigi2_collision_detection_volume_definition_entity_id = -1;
557 static int hf_cigi2_collision_detection_volume_definition_volume_enable = -1;
558 static int hf_cigi2_collision_detection_volume_definition_volume_id = -1;
559 static int hf_cigi2_collision_detection_volume_definition_x_offset = -1;
560 static int hf_cigi2_collision_detection_volume_definition_y_offset = -1;
561 static int hf_cigi2_collision_detection_volume_definition_z_offset = -1;
562 static int hf_cigi2_collision_detection_volume_definition_height = -1;
563 static int hf_cigi2_collision_detection_volume_definition_width = -1;
564 static int hf_cigi2_collision_detection_volume_definition_depth = -1;
565
566 /* CIGI2 Height Above Terrain Request */
567 #define CIGI2_PACKET_SIZE_HEIGHT_ABOVE_TERRAIN_REQUEST 32
568 static int hf_cigi2_height_above_terrain_request = -1;
569 static int hf_cigi2_height_above_terrain_request_hat_id = -1;
570 static int hf_cigi2_height_above_terrain_request_alt = -1;
571 static int hf_cigi2_height_above_terrain_request_lat = -1;
572 static int hf_cigi2_height_above_terrain_request_lon = -1;
573
574 /* CIGI2 Line of Sight Occult Request */
575 #define CIGI2_PACKET_SIZE_LINE_OF_SIGHT_OCCULT_REQUEST 56
576 static int hf_cigi2_line_of_sight_occult_request = -1;
577 static int hf_cigi2_line_of_sight_occult_request_los_id = -1;
578 static int hf_cigi2_line_of_sight_occult_request_source_alt = -1;
579 static int hf_cigi2_line_of_sight_occult_request_source_lat = -1;
580 static int hf_cigi2_line_of_sight_occult_request_source_lon = -1;
581 static int hf_cigi2_line_of_sight_occult_request_dest_alt = -1;
582 static int hf_cigi2_line_of_sight_occult_request_dest_lat = -1;
583 static int hf_cigi2_line_of_sight_occult_request_dest_lon = -1;
584
585 /* CIGI2 Line of Sight Range Request */
586 #define CIGI2_PACKET_SIZE_LINE_OF_SIGHT_RANGE_REQUEST 48
587 static int hf_cigi2_line_of_sight_range_request = -1;
588 static int hf_cigi2_line_of_sight_range_request_los_id = -1;
589 static int hf_cigi2_line_of_sight_range_request_azimuth = -1;
590 static int hf_cigi2_line_of_sight_range_request_elevation = -1;
591 static int hf_cigi2_line_of_sight_range_request_min_range = -1;
592 static int hf_cigi2_line_of_sight_range_request_max_range = -1;
593 static int hf_cigi2_line_of_sight_range_request_source_alt = -1;
594 static int hf_cigi2_line_of_sight_range_request_source_lat = -1;
595 static int hf_cigi2_line_of_sight_range_request_source_lon = -1;
596
597 /* CIGI2 Height of Terrain Request */
598 #define CIGI2_PACKET_SIZE_HEIGHT_OF_TERRAIN_REQUEST 24
599 static int hf_cigi2_height_of_terrain_request = -1;
600 static int hf_cigi2_height_of_terrain_request_hot_id = -1;
601 static int hf_cigi2_height_of_terrain_request_lat = -1;
602 static int hf_cigi2_height_of_terrain_request_lon = -1;
603
604 /* CIGI2 Start of Frame */
605 #define CIGI2_PACKET_SIZE_START_OF_FRAME 16
606 static int hf_cigi2_start_of_frame = -1;
607 static int hf_cigi2_start_of_frame_db_number = -1;
608 static int hf_cigi2_start_of_frame_ig_status_code = -1;
609 static int hf_cigi2_start_of_frame_ig_mode = -1;
610 static int hf_cigi2_start_of_frame_frame_ctr = -1;
611 static int hf_cigi2_start_of_frame_time_tag = -1;
612
613 static const value_string cigi2_start_of_frame_ig_mode_vals[] = {
614     {0, "Standby/Reset"},
615     {1, "Operate"},
616     {2, "Debug"},
617     {3, "Off-Line Maintenance"},
618     {0, NULL},
619 };
620
621 /* CIGI2 Height Above Terrain Response */
622 #define CIGI2_PACKET_SIZE_HEIGHT_ABOVE_TERRAIN_RESPONSE 24
623 static int hf_cigi2_height_above_terrain_response = -1;
624 static int hf_cigi2_height_above_terrain_response_hat_id = -1;
625 static int hf_cigi2_height_above_terrain_response_valid = -1;
626 static int hf_cigi2_height_above_terrain_response_material_type = -1;
627 static int hf_cigi2_height_above_terrain_response_alt = -1;
628
629 /* CIGI2 Line of Sight Response */
630 #define CIGI2_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE 40
631 static int hf_cigi2_line_of_sight_response = -1;
632 static int hf_cigi2_line_of_sight_response_los_id = -1;
633 static int hf_cigi2_line_of_sight_response_valid = -1;
634 static int hf_cigi2_line_of_sight_response_occult_response = -1;
635 static int hf_cigi2_line_of_sight_response_material_type = -1;
636 static int hf_cigi2_line_of_sight_response_range = -1;
637 static int hf_cigi2_line_of_sight_response_alt = -1;
638 static int hf_cigi2_line_of_sight_response_lat = -1;
639 static int hf_cigi2_line_of_sight_response_lon = -1;
640
641 static const true_false_string cigi2_line_of_sight_occult_response_tfs = {
642     "Visible",
643     "Occulted"
644 };
645
646 /* CIGI2 Collision Detection Segment Response */
647 #define CIGI2_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_RESPONSE 24
648 static int hf_cigi2_collision_detection_segment_response = -1;
649 static int hf_cigi2_collision_detection_segment_response_entity_id = -1;
650 static int hf_cigi2_collision_detection_segment_response_segment_id = -1;
651 static int hf_cigi2_collision_detection_segment_response_contact = -1;
652 static int hf_cigi2_collision_detection_segment_response_contacted_entity = -1;
653 static int hf_cigi2_collision_detection_segment_response_material_type = -1;
654 static int hf_cigi2_collision_detection_segment_response_collision_x = -1;
655 static int hf_cigi2_collision_detection_segment_response_collision_y = -1;
656 static int hf_cigi2_collision_detection_segment_response_collision_z = -1;
657
658 static const true_false_string cigi2_collision_detection_segment_response_contact_tfs = {
659     "Contact with a defined entity",
660     "Contact with a non-entity surface"
661 };
662
663 /* CIGI2 Sensor Response */
664 #define CIGI2_PACKET_SIZE_SENSOR_RESPONSE 12
665 static int hf_cigi2_sensor_response = -1;
666 static int hf_cigi2_sensor_response_view_id = -1;
667 static int hf_cigi2_sensor_response_status = -1;
668 static int hf_cigi2_sensor_response_sensor_id = -1;
669 static int hf_cigi2_sensor_response_x_offset = -1;
670 static int hf_cigi2_sensor_response_y_offset = -1;
671 static int hf_cigi2_sensor_response_x_size = -1;
672 static int hf_cigi2_sensor_response_y_size = -1;
673
674 static const value_string cigi2_sensor_response_status_vals[] = {
675     {0, "Searching for Target"},
676     {1, "Tracking"},
677     {2, "Impending Breaklock"},
678     {3, "Breaklock"},
679     {0, NULL},
680 };
681
682 /* CIGI2 Height of Terrain Response */
683 #define CIGI2_PACKET_SIZE_HEIGHT_OF_TERRAIN_RESPONSE 24
684 static int hf_cigi2_height_of_terrain_response = -1;
685 static int hf_cigi2_height_of_terrain_response_hot_id = -1;
686 static int hf_cigi2_height_of_terrain_response_valid = -1;
687 static int hf_cigi2_height_of_terrain_response_material_type = -1;
688 static int hf_cigi2_height_of_terrain_response_alt = -1;
689
690 /* CIGI2 Collision Detection Volume Response */
691 #define CIGI2_PACKET_SIZE_COLLISION_DETECTION_VOLUME_RESPONSE 8
692 static int hf_cigi2_collision_detection_volume_response = -1;
693 static int hf_cigi2_collision_detection_volume_response_entity_id = -1;
694 static int hf_cigi2_collision_detection_volume_response_volume_id = -1;
695 static int hf_cigi2_collision_detection_volume_response_contact = -1;
696 static int hf_cigi2_collision_detection_volume_response_contact_entity = -1;
697
698 static const true_false_string cigi2_collision_detection_volume_response_contact_tfs = {
699     "Contact with a defined entity",
700     "Contact with a non-entity surface"
701 };
702
703 /* CIGI2 Image Generator Message */
704 static int hf_cigi2_image_generator_message = -1;
705 static int hf_cigi2_image_generator_message_id = -1;
706 static int hf_cigi2_image_generator_message_message = -1;
707
708 /* CIGI2 User Definable */
709 static int hf_cigi2_user_definable = -1;
710
711
712 /*** Fields for CIGI3 ***/
713
714 static int hf_cigi3_byte_swap = -1;
715
716 #define CIGI3_BYTE_SWAP_BIG_ENDIAN    0x8000
717 #define CIGI3_BYTE_SWAP_LITTLE_ENDIAN 0x0080
718 static const value_string cigi3_byte_swap_vals[] = {
719     {CIGI3_BYTE_SWAP_BIG_ENDIAN, "Big-Endian"},
720     {CIGI3_BYTE_SWAP_LITTLE_ENDIAN, "Little-Endian"},
721     {0, NULL},
722 };
723
724 /* CIGI3 Packet ID */
725 static int hf_cigi3_packet_id = -1;
726 #define CIGI3_PACKET_ID_IG_CONTROL                                 1
727 #define CIGI3_PACKET_ID_ENTITY_CONTROL                             2
728 #define CIGI3_PACKET_ID_CONFORMAL_CLAMPED_ENTITY_CONTROL           3
729 #define CIGI3_PACKET_ID_COMPONENT_CONTROL                          4
730 #define CIGI3_PACKET_ID_SHORT_COMPONENT_CONTROL                    5
731 #define CIGI3_PACKET_ID_ARTICULATED_PART_CONTROL                   6
732 #define CIGI3_PACKET_ID_SHORT_ARTICULATED_PART_CONTROL             7
733 #define CIGI3_PACKET_ID_RATE_CONTROL                               8
734 #define CIGI3_PACKET_ID_CELESTIAL_SPHERE_CONTROL                   9
735 #define CIGI3_PACKET_ID_ATMOSPHERE_CONTROL                        10
736 #define CIGI3_PACKET_ID_ENVIRONMENTAL_REGION_CONTROL              11
737 #define CIGI3_PACKET_ID_WEATHER_CONTROL                           12
738 #define CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_CONTROL       13
739 #define CIGI3_PACKET_ID_WAVE_CONTROL                              14
740 #define CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL    15
741 #define CIGI3_PACKET_ID_VIEW_CONTROL                              16
742 #define CIGI3_PACKET_ID_SENSOR_CONTROL                            17
743 #define CIGI3_PACKET_ID_MOTION_TRACKER_CONTROL                    18
744 #define CIGI3_PACKET_ID_EARTH_REFERENCE_MODEL_DEFINITION          19
745 #define CIGI3_PACKET_ID_TRAJECTORY_DEFINITION                     20
746 #define CIGI3_PACKET_ID_VIEW_DEFINITION                           21
747 #define CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION    22
748 #define CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION     23
749 #define CIGI3_PACKET_ID_HAT_HOT_REQUEST                           24
750 #define CIGI3_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST             25
751 #define CIGI3_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST              26
752 #define CIGI3_PACKET_ID_POSITION_REQUEST                          27
753 #define CIGI3_PACKET_ID_ENVIRONMENTAL_CONDITIONS_REQUEST          28
754 #define CIGI3_PACKET_ID_SYMBOL_SURFACE_DEFINITION                 29
755 #define CIGI3_PACKET_ID_SYMBOL_TEXT_DEFINITION                    30
756 #define CIGI3_PACKET_ID_SYMBOL_CIRCLE_DEFINITION                  31
757 #define CIGI3_PACKET_ID_SYMBOL_LINE_DEFINITION                    32
758 #define CIGI3_PACKET_ID_SYMBOL_CLONE                              33
759 #define CIGI3_PACKET_ID_SYMBOL_CONTROL                            34
760 #define CIGI3_PACKET_ID_SHORT_SYMBOL_CONTROL                      35
761 #define CIGI3_PACKET_ID_START_OF_FRAME                           101
762 #define CIGI3_PACKET_ID_HAT_HOT_RESPONSE                         102
763 #define CIGI3_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE                103
764 #define CIGI3_PACKET_ID_LINE_OF_SIGHT_RESPONSE                   104
765 #define CIGI3_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE          105
766 #define CIGI3_PACKET_ID_SENSOR_RESPONSE                          106
767 #define CIGI3_PACKET_ID_SENSOR_EXTENDED_RESPONSE                 107
768 #define CIGI3_PACKET_ID_POSITION_RESPONSE                        108
769 #define CIGI3_PACKET_ID_WEATHER_CONDITIONS_RESPONSE              109
770 #define CIGI3_PACKET_ID_AEROSOL_CONCENTRATION_RESPONSE           110
771 #define CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_RESPONSE     111
772 #define CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE  112
773 #define CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_NOTIFICATION 113
774 #define CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_NOTIFICATION  114
775 #define CIGI3_PACKET_ID_ANIMATION_STOP_NOTIFICATION              115
776 #define CIGI3_PACKET_ID_EVENT_NOTIFICATION                       116
777 #define CIGI3_PACKET_ID_IMAGE_GENERATOR_MESSAGE                  117
778 #define CIGI3_PACKET_ID_USER_DEFINED_MIN                         201
779 #define CIGI3_PACKET_ID_USER_DEFINED_MAX                         255
780 static const value_string cigi3_packet_id_vals[] = {
781     {CIGI3_PACKET_ID_IG_CONTROL, "IG Control"},
782     {CIGI3_PACKET_ID_ENTITY_CONTROL, "Entity Control"},
783     {CIGI3_PACKET_ID_CONFORMAL_CLAMPED_ENTITY_CONTROL, "Conformal Clamped Entity Control"},
784     {CIGI3_PACKET_ID_COMPONENT_CONTROL, "Component Control"},
785     {CIGI3_PACKET_ID_SHORT_COMPONENT_CONTROL, "Short Component Control"},
786     {CIGI3_PACKET_ID_ARTICULATED_PART_CONTROL, "Articulated Part Control"},
787     {CIGI3_PACKET_ID_SHORT_ARTICULATED_PART_CONTROL, "Short Articulated Part Control"},
788     {CIGI3_PACKET_ID_RATE_CONTROL, "Rate Control"},
789     {CIGI3_PACKET_ID_CELESTIAL_SPHERE_CONTROL, "Celestial Sphere Control"},
790     {CIGI3_PACKET_ID_ATMOSPHERE_CONTROL, "Atmosphere Control"},
791     {CIGI3_PACKET_ID_ENVIRONMENTAL_REGION_CONTROL, "Environmental Region Control"},
792     {CIGI3_PACKET_ID_WEATHER_CONTROL, "Weather Control"},
793     {CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_CONTROL, "Maritime Surface Conditions Control"},
794     {CIGI3_PACKET_ID_WAVE_CONTROL, "Wave Control"},
795     {CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL, "Terrestrial Surface Conditions Control"},
796     {CIGI3_PACKET_ID_VIEW_CONTROL, "View Control"},
797     {CIGI3_PACKET_ID_SENSOR_CONTROL, "Sensor Control"},
798     {CIGI3_PACKET_ID_MOTION_TRACKER_CONTROL, "Motion Tracker Control"},
799     {CIGI3_PACKET_ID_EARTH_REFERENCE_MODEL_DEFINITION, "Earth Reference Model Definition"},
800     {CIGI3_PACKET_ID_TRAJECTORY_DEFINITION, "Trajectory Definition"},
801     {CIGI3_PACKET_ID_VIEW_DEFINITION, "View Definition"},
802     {CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION, "Collision Detection Segment Definition"},
803     {CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION, "Collision Detection Volume Definition"},
804     {CIGI3_PACKET_ID_HAT_HOT_REQUEST, "HAT/HOT Request"},
805     {CIGI3_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST, "Line of Sight Segment Request"},
806     {CIGI3_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST, "Line of Sight Vector Request"},
807     {CIGI3_PACKET_ID_POSITION_REQUEST, "Position Request"},
808     {CIGI3_PACKET_ID_ENVIRONMENTAL_CONDITIONS_REQUEST, "Environmental Conditions Request"},
809     {CIGI3_PACKET_ID_SYMBOL_SURFACE_DEFINITION, "Symbol Surface Definition"},
810     {CIGI3_PACKET_ID_SYMBOL_TEXT_DEFINITION, "Symbol Text Definition"},
811     {CIGI3_PACKET_ID_SYMBOL_CIRCLE_DEFINITION, "Symbol Circle Definition"},
812     {CIGI3_PACKET_ID_SYMBOL_LINE_DEFINITION, "Symbol Line Definition"},
813     {CIGI3_PACKET_ID_SYMBOL_CLONE, "Symbol Clone"},
814     {CIGI3_PACKET_ID_SYMBOL_CONTROL, "Symbol Control"},
815     {CIGI3_PACKET_ID_SHORT_SYMBOL_CONTROL, "Short Symbol Control"},
816     {CIGI3_PACKET_ID_START_OF_FRAME, "Start of Frame"},
817     {CIGI3_PACKET_ID_HAT_HOT_RESPONSE, "HAT/HOT Response"},
818     {CIGI3_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE, "HAT/HOT Extended Response"},
819     {CIGI3_PACKET_ID_LINE_OF_SIGHT_RESPONSE, "Line of Sight Response"},
820     {CIGI3_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE, "Line of Sight Extended Response"},
821     {CIGI3_PACKET_ID_SENSOR_RESPONSE, "Sensor Response"},
822     {CIGI3_PACKET_ID_SENSOR_EXTENDED_RESPONSE, "Sensor Extended Response"},
823     {CIGI3_PACKET_ID_POSITION_RESPONSE, "Position Response"},
824     {CIGI3_PACKET_ID_WEATHER_CONDITIONS_RESPONSE, "Weather Conditions Response"},
825     {CIGI3_PACKET_ID_AEROSOL_CONCENTRATION_RESPONSE, "Aerosol Concentration Response"},
826     {CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_RESPONSE, "Maritime Surface Conditions Response"},
827     {CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE, "Terrestrial Surface Conditions Response"},
828     {CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_NOTIFICATION, "Collision Detection Segment Notification"},
829     {CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_NOTIFICATION, "Collision Detection Volume Notification"},
830     {CIGI3_PACKET_ID_ANIMATION_STOP_NOTIFICATION, "Animation Stop Notification"},
831     {CIGI3_PACKET_ID_EVENT_NOTIFICATION, "Event Notification"},
832     {CIGI3_PACKET_ID_IMAGE_GENERATOR_MESSAGE, "Image Generator Message"},
833     {CIGI3_PACKET_ID_USER_DEFINED_MIN, "User-Defined Data"},
834     {CIGI3_PACKET_ID_USER_DEFINED_MIN+1, "User-Defined Data"},
835     {CIGI3_PACKET_ID_USER_DEFINED_MIN+2, "User-Defined Data"},
836     {CIGI3_PACKET_ID_USER_DEFINED_MIN+3, "User-Defined Data"},
837     {CIGI3_PACKET_ID_USER_DEFINED_MIN+4, "User-Defined Data"},
838     {CIGI3_PACKET_ID_USER_DEFINED_MIN+5, "User-Defined Data"},
839     {CIGI3_PACKET_ID_USER_DEFINED_MIN+6, "User-Defined Data"},
840     {CIGI3_PACKET_ID_USER_DEFINED_MIN+7, "User-Defined Data"},
841     {CIGI3_PACKET_ID_USER_DEFINED_MIN+8, "User-Defined Data"},
842     {CIGI3_PACKET_ID_USER_DEFINED_MIN+9, "User-Defined Data"},
843     {CIGI3_PACKET_ID_USER_DEFINED_MIN+10, "User-Defined Data"},
844     {CIGI3_PACKET_ID_USER_DEFINED_MIN+11, "User-Defined Data"},
845     {CIGI3_PACKET_ID_USER_DEFINED_MIN+12, "User-Defined Data"},
846     {CIGI3_PACKET_ID_USER_DEFINED_MIN+13, "User-Defined Data"},
847     {CIGI3_PACKET_ID_USER_DEFINED_MIN+14, "User-Defined Data"},
848     {CIGI3_PACKET_ID_USER_DEFINED_MIN+15, "User-Defined Data"},
849     {CIGI3_PACKET_ID_USER_DEFINED_MIN+16, "User-Defined Data"},
850     {CIGI3_PACKET_ID_USER_DEFINED_MIN+17, "User-Defined Data"},
851     {CIGI3_PACKET_ID_USER_DEFINED_MIN+18, "User-Defined Data"},
852     {CIGI3_PACKET_ID_USER_DEFINED_MIN+19, "User-Defined Data"},
853     {CIGI3_PACKET_ID_USER_DEFINED_MIN+20, "User-Defined Data"},
854     {CIGI3_PACKET_ID_USER_DEFINED_MIN+21, "User-Defined Data"},
855     {CIGI3_PACKET_ID_USER_DEFINED_MIN+22, "User-Defined Data"},
856     {CIGI3_PACKET_ID_USER_DEFINED_MIN+23, "User-Defined Data"},
857     {CIGI3_PACKET_ID_USER_DEFINED_MIN+24, "User-Defined Data"},
858     {CIGI3_PACKET_ID_USER_DEFINED_MIN+25, "User-Defined Data"},
859     {CIGI3_PACKET_ID_USER_DEFINED_MIN+26, "User-Defined Data"},
860     {CIGI3_PACKET_ID_USER_DEFINED_MIN+27, "User-Defined Data"},
861     {CIGI3_PACKET_ID_USER_DEFINED_MIN+28, "User-Defined Data"},
862     {CIGI3_PACKET_ID_USER_DEFINED_MIN+29, "User-Defined Data"},
863     {CIGI3_PACKET_ID_USER_DEFINED_MIN+30, "User-Defined Data"},
864     {CIGI3_PACKET_ID_USER_DEFINED_MIN+31, "User-Defined Data"},
865     {CIGI3_PACKET_ID_USER_DEFINED_MIN+32, "User-Defined Data"},
866     {CIGI3_PACKET_ID_USER_DEFINED_MIN+33, "User-Defined Data"},
867     {CIGI3_PACKET_ID_USER_DEFINED_MIN+34, "User-Defined Data"},
868     {CIGI3_PACKET_ID_USER_DEFINED_MIN+35, "User-Defined Data"},
869     {CIGI3_PACKET_ID_USER_DEFINED_MIN+36, "User-Defined Data"},
870     {CIGI3_PACKET_ID_USER_DEFINED_MIN+37, "User-Defined Data"},
871     {CIGI3_PACKET_ID_USER_DEFINED_MIN+38, "User-Defined Data"},
872     {CIGI3_PACKET_ID_USER_DEFINED_MIN+39, "User-Defined Data"},
873     {CIGI3_PACKET_ID_USER_DEFINED_MIN+40, "User-Defined Data"},
874     {CIGI3_PACKET_ID_USER_DEFINED_MIN+41, "User-Defined Data"},
875     {CIGI3_PACKET_ID_USER_DEFINED_MIN+42, "User-Defined Data"},
876     {CIGI3_PACKET_ID_USER_DEFINED_MIN+43, "User-Defined Data"},
877     {CIGI3_PACKET_ID_USER_DEFINED_MIN+44, "User-Defined Data"},
878     {CIGI3_PACKET_ID_USER_DEFINED_MIN+45, "User-Defined Data"},
879     {CIGI3_PACKET_ID_USER_DEFINED_MIN+46, "User-Defined Data"},
880     {CIGI3_PACKET_ID_USER_DEFINED_MIN+47, "User-Defined Data"},
881     {CIGI3_PACKET_ID_USER_DEFINED_MIN+48, "User-Defined Data"},
882     {CIGI3_PACKET_ID_USER_DEFINED_MIN+49, "User-Defined Data"},
883     {CIGI3_PACKET_ID_USER_DEFINED_MIN+50, "User-Defined Data"},
884     {CIGI3_PACKET_ID_USER_DEFINED_MIN+51, "User-Defined Data"},
885     {CIGI3_PACKET_ID_USER_DEFINED_MIN+52, "User-Defined Data"},
886     {CIGI3_PACKET_ID_USER_DEFINED_MIN+53, "User-Defined Data"},
887     {CIGI3_PACKET_ID_USER_DEFINED_MAX, "User-Defined Data"},
888     {0, NULL},
889 };
890
891 /* CIGI3 IG Control */
892 #define CIGI3_PACKET_SIZE_IG_CONTROL 16
893 static int hf_cigi3_ig_control = -1;
894 static int hf_cigi3_ig_control_db_number = -1;
895 static int hf_cigi3_ig_control_ig_mode = -1;
896 static int hf_cigi3_ig_control_timestamp_valid = -1;
897 static int hf_cigi3_ig_control_frame_ctr = -1;
898 static int hf_cigi3_ig_control_timestamp = -1;
899
900 static const value_string cigi3_ig_control_ig_mode_vals[] = {
901     {0, "Reset/Standby"},
902     {1, "Operate"},
903     {2, "Debug"},
904     {0, NULL},
905 };
906
907 /* CIGI3_2 IG Control */
908 #define CIGI3_2_PACKET_SIZE_IG_CONTROL 24
909 static int hf_cigi3_2_ig_control = -1;
910 static int hf_cigi3_2_ig_control_db_number = -1;
911 static int hf_cigi3_2_ig_control_ig_mode = -1;
912 static int hf_cigi3_2_ig_control_timestamp_valid = -1;
913 static int hf_cigi3_2_ig_control_host_frame_number = -1;
914 static int hf_cigi3_2_ig_control_timestamp = -1;
915 static int hf_cigi3_2_ig_control_last_ig_frame_number = -1;
916
917 static const value_string cigi3_2_ig_control_ig_mode_vals[] = {
918     {0, "Reset/Standby"},
919     {1, "Operate"},
920     {2, "Debug"},
921     {0, NULL},
922 };
923
924 /* CIGI3_3 IG Control */
925 #define CIGI3_3_PACKET_SIZE_IG_CONTROL 24
926 static int hf_cigi3_3_ig_control = -1;
927 static int hf_cigi3_3_ig_control_db_number = -1;
928 static int hf_cigi3_3_ig_control_ig_mode = -1;
929 static int hf_cigi3_3_ig_control_timestamp_valid = -1;
930 static int hf_cigi3_3_ig_control_extrapolation_enable = -1;
931 static int hf_cigi3_3_ig_control_minor_version = -1;
932 static int hf_cigi3_3_ig_control_host_frame_number = -1;
933 static int hf_cigi3_3_ig_control_timestamp = -1;
934 static int hf_cigi3_3_ig_control_last_ig_frame_number = -1;
935
936 static const value_string cigi3_3_ig_control_ig_mode_vals[] = {
937     {0, "Reset/Standby"},
938     {1, "Operate"},
939     {2, "Debug"},
940     {0, NULL},
941 };
942
943 /* CIGI3 Entity Control */
944 #define CIGI3_PACKET_SIZE_ENTITY_CONTROL 48
945 static int hf_cigi3_entity_control = -1;
946 static int hf_cigi3_entity_control_entity_id = -1;
947 static int hf_cigi3_entity_control_entity_state = -1;
948 static int hf_cigi3_entity_control_attach_state = -1;
949 static int hf_cigi3_entity_control_collision_detection_request = -1;
950 static int hf_cigi3_entity_control_inherit_alpha = -1;
951 static int hf_cigi3_entity_control_ground_ocean_clamp = -1;
952 static int hf_cigi3_entity_control_animation_direction = -1;
953 static int hf_cigi3_entity_control_animation_loop_mode = -1;
954 static int hf_cigi3_entity_control_animation_state = -1;
955 static int hf_cigi3_entity_control_alpha = -1;
956 static int hf_cigi3_entity_control_entity_type = -1;
957 static int hf_cigi3_entity_control_parent_id = -1;
958 static int hf_cigi3_entity_control_roll = -1;
959 static int hf_cigi3_entity_control_pitch = -1;
960 static int hf_cigi3_entity_control_yaw = -1;
961 static int hf_cigi3_entity_control_lat_xoff = -1;
962 static int hf_cigi3_entity_control_lon_yoff = -1;
963 static int hf_cigi3_entity_control_alt_zoff = -1;
964
965 static const value_string cigi3_entity_control_entity_state_vals[] = {
966     {0, "Inactive/Standby"},
967     {1, "Active"},
968     {2, "Destroyed"},
969     {0, NULL},
970 };
971
972 static const true_false_string cigi3_entity_control_attach_state_tfs = {
973     "Attach",
974     "Detach"
975 };
976
977 static const true_false_string cigi3_entity_control_collision_detection_request_tfs = {
978     "Request",
979     "No Request"
980 };
981
982 static const true_false_string cigi3_entity_control_inherit_alpha_tfs = {
983     "Inherited",
984     "Not Inherited"
985 };
986
987 static const value_string cigi3_entity_control_ground_ocean_clamp_vals[] = {
988     {0, "No Clamp"},
989     {1, "Non-Conformal"},
990     {2, "Conformal"},
991     {0, NULL},
992 };
993
994 static const true_false_string cigi3_entity_control_animation_direction_tfs = {
995     "Backward",
996     "Forward"
997 };
998
999 static const true_false_string cigi3_entity_control_animation_loop_mode_tfs = {
1000     "Continuous",
1001     "One-Shot"
1002 };
1003
1004 static const value_string cigi3_entity_control_animation_state_vals[] = {
1005     {0, "Stop"},
1006     {1, "Pause"},
1007     {2, "Play"},
1008     {3, "Continue"},
1009     {0, NULL},
1010 };
1011
1012 /* CIGI3_3 Entity Control */
1013 static int hf_cigi3_3_entity_control = -1;
1014 static int hf_cigi3_3_entity_control_entity_id = -1;
1015 static int hf_cigi3_3_entity_control_entity_state = -1;
1016 static int hf_cigi3_3_entity_control_attach_state = -1;
1017 static int hf_cigi3_3_entity_control_collision_detection_request = -1;
1018 static int hf_cigi3_3_entity_control_inherit_alpha = -1;
1019 static int hf_cigi3_3_entity_control_ground_ocean_clamp = -1;
1020 static int hf_cigi3_3_entity_control_animation_direction = -1;
1021 static int hf_cigi3_3_entity_control_animation_loop_mode = -1;
1022 static int hf_cigi3_3_entity_control_animation_state = -1;
1023 static int hf_cigi3_3_entity_control_extrapolation_enable = -1;
1024 static int hf_cigi3_3_entity_control_alpha = -1;
1025 static int hf_cigi3_3_entity_control_entity_type = -1;
1026 static int hf_cigi3_3_entity_control_parent_id = -1;
1027 static int hf_cigi3_3_entity_control_roll = -1;
1028 static int hf_cigi3_3_entity_control_pitch = -1;
1029 static int hf_cigi3_3_entity_control_yaw = -1;
1030 static int hf_cigi3_3_entity_control_lat_xoff = -1;
1031 static int hf_cigi3_3_entity_control_lon_yoff = -1;
1032 static int hf_cigi3_3_entity_control_alt_zoff = -1;
1033
1034 /* CIGI3 Conformal Clamped Entity Control */
1035 #define CIGI3_PACKET_SIZE_CONFORMAL_CLAMPED_ENTITY_CONTROL 24
1036 static int hf_cigi3_conformal_clamped_entity_control = -1;
1037 static int hf_cigi3_conformal_clamped_entity_control_entity_id = -1;
1038 static int hf_cigi3_conformal_clamped_entity_control_yaw = -1;
1039 static int hf_cigi3_conformal_clamped_entity_control_lat = -1;
1040 static int hf_cigi3_conformal_clamped_entity_control_lon = -1;
1041
1042 /* CIGI3 Component Control */
1043 #define CIGI3_PACKET_SIZE_COMPONENT_CONTROL 32
1044 static int hf_cigi3_component_control = -1;
1045 static int hf_cigi3_component_control_component_id = -1;
1046 static int hf_cigi3_component_control_instance_id = -1;
1047 static int hf_cigi3_component_control_component_class = -1;
1048 static int hf_cigi3_component_control_component_state = -1;
1049 static int hf_cigi3_component_control_data_1 = -1;
1050 static int hf_cigi3_component_control_data_2 = -1;
1051 static int hf_cigi3_component_control_data_3 = -1;
1052 static int hf_cigi3_component_control_data_4 = -1;
1053 static int hf_cigi3_component_control_data_5 = -1;
1054 static int hf_cigi3_component_control_data_6 = -1;
1055
1056 static const value_string cigi3_component_control_component_class_vals[] = {
1057     {0, "Entity"},
1058     {1, "View"},
1059     {2, "View Group"},
1060     {3, "Sensor"},
1061     {4, "Regional Sea Surface"},
1062     {5, "Regional Terrain Surface"},
1063     {6, "Regional Layered Weather"},
1064     {7, "Global Sea Surface"},
1065     {8, "Global Terrain Surface"},
1066     {9, "Global Layered Weather"},
1067     {10, "Atmosphere"},
1068     {11, "Celestial Sphere"},
1069     {12, "Event"},
1070     {13, "System"},
1071     {0, NULL},
1072 };
1073
1074 /* CIGI3_3 Component Control */
1075 static int hf_cigi3_3_component_control = -1;
1076 static int hf_cigi3_3_component_control_component_id = -1;
1077 static int hf_cigi3_3_component_control_instance_id = -1;
1078 static int hf_cigi3_3_component_control_component_class = -1;
1079 static int hf_cigi3_3_component_control_component_state = -1;
1080 static int hf_cigi3_3_component_control_data_1 = -1;
1081 static int hf_cigi3_3_component_control_data_2 = -1;
1082 static int hf_cigi3_3_component_control_data_3 = -1;
1083 static int hf_cigi3_3_component_control_data_4 = -1;
1084 static int hf_cigi3_3_component_control_data_5 = -1;
1085 static int hf_cigi3_3_component_control_data_6 = -1;
1086
1087 static const value_string cigi3_3_component_control_component_class_vals[] = {
1088     {0, "Entity"},
1089     {1, "View"},
1090     {2, "View Group"},
1091     {3, "Sensor"},
1092     {4, "Regional Sea Surface"},
1093     {5, "Regional Terrain Surface"},
1094     {6, "Regional Layered Weather"},
1095     {7, "Global Sea Surface"},
1096     {8, "Global Terrain Surface"},
1097     {9, "Global Layered Weather"},
1098     {10, "Atmosphere"},
1099     {11, "Celestial Sphere"},
1100     {12, "Event"},
1101     {13, "System"},
1102     {14, "Symbol Surface"},
1103     {15, "Symbol"},
1104     {0, NULL},
1105 };
1106
1107 /* CIGI3 Short Component Control */
1108 #define CIGI3_PACKET_SIZE_SHORT_COMPONENT_CONTROL 16
1109 static int hf_cigi3_short_component_control = -1;
1110 static int hf_cigi3_short_component_control_component_id = -1;
1111 static int hf_cigi3_short_component_control_instance_id = -1;
1112 static int hf_cigi3_short_component_control_component_class = -1;
1113 static int hf_cigi3_short_component_control_component_state = -1;
1114 static int hf_cigi3_short_component_control_data_1 = -1;
1115 static int hf_cigi3_short_component_control_data_2 = -1;
1116
1117 static const value_string cigi3_short_component_control_component_class_vals[] = {
1118     {0, "Entity"},
1119     {1, "View"},
1120     {2, "View Group"},
1121     {3, "Sensor"},
1122     {4, "Regional Sea Surface"},
1123     {5, "Regional Terrain Surface"},
1124     {6, "Regional Layered Weather"},
1125     {7, "Global Sea Surface"},
1126     {8, "Global Terrain Surface"},
1127     {9, "Global Layered Weather"},
1128     {10, "Atmosphere"},
1129     {11, "Celestial Sphere"},
1130     {12, "Event"},
1131     {13, "System"},
1132     {0, NULL},
1133 };
1134
1135 /* CIGI3_3 Short Component Control */
1136 static int hf_cigi3_3_short_component_control = -1;
1137 static int hf_cigi3_3_short_component_control_component_id = -1;
1138 static int hf_cigi3_3_short_component_control_instance_id = -1;
1139 static int hf_cigi3_3_short_component_control_component_class = -1;
1140 static int hf_cigi3_3_short_component_control_component_state = -1;
1141 static int hf_cigi3_3_short_component_control_data_1 = -1;
1142 static int hf_cigi3_3_short_component_control_data_2 = -1;
1143
1144 static const value_string cigi3_3_short_component_control_component_class_vals[] = {
1145     {0, "Entity"},
1146     {1, "View"},
1147     {2, "View Group"},
1148     {3, "Sensor"},
1149     {4, "Regional Sea Surface"},
1150     {5, "Regional Terrain Surface"},
1151     {6, "Regional Layered Weather"},
1152     {7, "Global Sea Surface"},
1153     {8, "Global Terrain Surface"},
1154     {9, "Global Layered Weather"},
1155     {10, "Atmosphere"},
1156     {11, "Celestial Sphere"},
1157     {12, "Event"},
1158     {13, "System"},
1159     {14, "Symbol Surface"},
1160     {15, "Symbol"},
1161     {0, NULL},
1162 };
1163
1164 /* CIGI3 Articulated Part Control */
1165 #define CIGI3_PACKET_SIZE_ARTICULATED_PART_CONTROL 32
1166 static int hf_cigi3_articulated_part_control = -1;
1167 static int hf_cigi3_articulated_part_control_entity_id = -1;
1168 static int hf_cigi3_articulated_part_control_part_id = -1;
1169 static int hf_cigi3_articulated_part_control_part_enable = -1;
1170 static int hf_cigi3_articulated_part_control_xoff_enable = -1;
1171 static int hf_cigi3_articulated_part_control_yoff_enable = -1;
1172 static int hf_cigi3_articulated_part_control_zoff_enable = -1;
1173 static int hf_cigi3_articulated_part_control_roll_enable = -1;
1174 static int hf_cigi3_articulated_part_control_pitch_enable = -1;
1175 static int hf_cigi3_articulated_part_control_yaw_enable = -1;
1176 static int hf_cigi3_articulated_part_control_xoff = -1;
1177 static int hf_cigi3_articulated_part_control_yoff = -1;
1178 static int hf_cigi3_articulated_part_control_zoff = -1;
1179 static int hf_cigi3_articulated_part_control_roll = -1;
1180 static int hf_cigi3_articulated_part_control_pitch = -1;
1181 static int hf_cigi3_articulated_part_control_yaw = -1;
1182
1183 /* CIGI3 Short Articulated Part Control */
1184 #define CIGI3_PACKET_SIZE_SHORT_ARTICULATED_PART_CONTROL 16
1185 static int hf_cigi3_short_articulated_part_control = -1;
1186 static int hf_cigi3_short_articulated_part_control_entity_id = -1;
1187 static int hf_cigi3_short_articulated_part_control_part_id_1 = -1;
1188 static int hf_cigi3_short_articulated_part_control_part_id_2 = -1;
1189 static int hf_cigi3_short_articulated_part_control_dof_select_1 = -1;
1190 static int hf_cigi3_short_articulated_part_control_dof_select_2 = -1;
1191 static int hf_cigi3_short_articulated_part_control_part_enable_1 = -1;
1192 static int hf_cigi3_short_articulated_part_control_part_enable_2 = -1;
1193 static int hf_cigi3_short_articulated_part_control_dof_1 = -1;
1194 static int hf_cigi3_short_articulated_part_control_dof_2 = -1;
1195
1196 static const value_string cigi3_short_articulated_part_control_dof_select_vals[] = {
1197     {0, "Not Used"},
1198     {1, "X Offset"},
1199     {2, "Y Offset"},
1200     {3, "Z Offset"},
1201     {4, "Yaw"},
1202     {5, "Pitch"},
1203     {6, "Roll"},
1204     {0, NULL},
1205 };
1206
1207 /* CIGI3 Rate Control */
1208 #define CIGI3_PACKET_SIZE_RATE_CONTROL 32
1209 static int hf_cigi3_rate_control = -1;
1210 static int hf_cigi3_rate_control_entity_id = -1;
1211 static int hf_cigi3_rate_control_part_id = -1;
1212 static int hf_cigi3_rate_control_apply_to_part = -1;
1213 static int hf_cigi3_rate_control_x_rate = -1;
1214 static int hf_cigi3_rate_control_y_rate = -1;
1215 static int hf_cigi3_rate_control_z_rate = -1;
1216 static int hf_cigi3_rate_control_roll_rate = -1;
1217 static int hf_cigi3_rate_control_pitch_rate = -1;
1218 static int hf_cigi3_rate_control_yaw_rate = -1;
1219
1220 /* CIGI3_2 Rate Control */
1221 #define CIGI3_2_PACKET_SIZE_RATE_CONTROL 32
1222 static int hf_cigi3_2_rate_control = -1;
1223 static int hf_cigi3_2_rate_control_entity_id = -1;
1224 static int hf_cigi3_2_rate_control_part_id = -1;
1225 static int hf_cigi3_2_rate_control_apply_to_part = -1;
1226 static int hf_cigi3_2_rate_control_coordinate_system = -1;
1227 static int hf_cigi3_2_rate_control_x_rate = -1;
1228 static int hf_cigi3_2_rate_control_y_rate = -1;
1229 static int hf_cigi3_2_rate_control_z_rate = -1;
1230 static int hf_cigi3_2_rate_control_roll_rate = -1;
1231 static int hf_cigi3_2_rate_control_pitch_rate = -1;
1232 static int hf_cigi3_2_rate_control_yaw_rate = -1;
1233
1234 static const true_false_string cigi3_2_rate_control_coord_sys_select_vals = {
1235     "Local",
1236     "World/Parent"
1237 };
1238
1239 /* CIGI3 Celestial Sphere Control */
1240 #define CIGI3_PACKET_SIZE_CELESTIAL_SPHERE_CONTROL 16
1241 static int hf_cigi3_celestial_sphere_control = -1;
1242 static int hf_cigi3_celestial_sphere_control_hour = -1;
1243 static int hf_cigi3_celestial_sphere_control_minute = -1;
1244 static int hf_cigi3_celestial_sphere_control_ephemeris_enable = -1;
1245 static int hf_cigi3_celestial_sphere_control_sun_enable = -1;
1246 static int hf_cigi3_celestial_sphere_control_moon_enable = -1;
1247 static int hf_cigi3_celestial_sphere_control_star_enable = -1;
1248 static int hf_cigi3_celestial_sphere_control_date_time_valid = -1;
1249 static int hf_cigi3_celestial_sphere_control_date = -1;
1250 static int hf_cigi3_celestial_sphere_control_star_intensity = -1;
1251
1252 /* CIGI3 Atmosphere Control */
1253 #define CIGI3_PACKET_SIZE_ATMOSPHERE_CONTROL 32
1254 static int hf_cigi3_atmosphere_control = -1;
1255 static int hf_cigi3_atmosphere_control_atmospheric_model_enable = -1;
1256 static int hf_cigi3_atmosphere_control_humidity = -1;
1257 static int hf_cigi3_atmosphere_control_air_temp = -1;
1258 static int hf_cigi3_atmosphere_control_visibility_range = -1;
1259 static int hf_cigi3_atmosphere_control_horiz_wind = -1;
1260 static int hf_cigi3_atmosphere_control_vert_wind = -1;
1261 static int hf_cigi3_atmosphere_control_wind_direction = -1;
1262 static int hf_cigi3_atmosphere_control_barometric_pressure = -1;
1263
1264 /* CIGI3 Environmental Region Control */
1265 #define CIGI3_PACKET_SIZE_ENVIRONMENTAL_REGION_CONTROL 48
1266 static int hf_cigi3_environmental_region_control = -1;
1267 static int hf_cigi3_environmental_region_control_region_id = -1;
1268 static int hf_cigi3_environmental_region_control_region_state = -1;
1269 static int hf_cigi3_environmental_region_control_merge_weather = -1;
1270 static int hf_cigi3_environmental_region_control_merge_aerosol = -1;
1271 static int hf_cigi3_environmental_region_control_merge_maritime = -1;
1272 static int hf_cigi3_environmental_region_control_merge_terrestrial = -1;
1273 static int hf_cigi3_environmental_region_control_lat = -1;
1274 static int hf_cigi3_environmental_region_control_lon = -1;
1275 static int hf_cigi3_environmental_region_control_size_x = -1;
1276 static int hf_cigi3_environmental_region_control_size_y = -1;
1277 static int hf_cigi3_environmental_region_control_corner_radius = -1;
1278 static int hf_cigi3_environmental_region_control_rotation = -1;
1279 static int hf_cigi3_environmental_region_control_transition_perimeter = -1;
1280
1281 static const value_string cigi3_environmental_region_control_region_state_vals[] = {
1282     {0, "Inactive"},
1283     {1, "Active"},
1284     {2, "Destroyed"},
1285     {0, NULL},
1286 };
1287
1288 static const true_false_string cigi3_environmental_region_control_merge_properties_tfs = {
1289     "Merge",
1290     "Use Last"
1291 };
1292
1293 /* CIGI3 Weather Control */
1294 #define CIGI3_PACKET_SIZE_WEATHER_CONTROL 56
1295 static int hf_cigi3_weather_control = -1;
1296 static int hf_cigi3_weather_control_entity_region_id = -1;
1297 static int hf_cigi3_weather_control_layer_id = -1;
1298 static int hf_cigi3_weather_control_humidity = -1;
1299 static int hf_cigi3_weather_control_weather_enable = -1;
1300 static int hf_cigi3_weather_control_scud_enable = -1;
1301 static int hf_cigi3_weather_control_random_winds_enable = -1;
1302 static int hf_cigi3_weather_control_random_lightning_enable = -1;
1303 static int hf_cigi3_weather_control_cloud_type = -1;
1304 static int hf_cigi3_weather_control_scope = -1;
1305 static int hf_cigi3_weather_control_severity = -1;
1306 static int hf_cigi3_weather_control_air_temp = -1;
1307 static int hf_cigi3_weather_control_visibility_range = -1;
1308 static int hf_cigi3_weather_control_scud_frequency = -1;
1309 static int hf_cigi3_weather_control_coverage = -1;
1310 static int hf_cigi3_weather_control_base_elevation = -1;
1311 static int hf_cigi3_weather_control_thickness = -1;
1312 static int hf_cigi3_weather_control_transition_band = -1;
1313 static int hf_cigi3_weather_control_horiz_wind = -1;
1314 static int hf_cigi3_weather_control_vert_wind = -1;
1315 static int hf_cigi3_weather_control_wind_direction = -1;
1316 static int hf_cigi3_weather_control_barometric_pressure = -1;
1317 static int hf_cigi3_weather_control_aerosol_concentration = -1;
1318
1319 static const value_string cigi3_weather_control_layer_id_vals[] = {
1320     {0, "Ground Fog"},
1321     {1, "Cloud Layer 1"},
1322     {2, "Cloud Layer 2"},
1323     {3, "Cloud Layer 3"},
1324     {4, "Rain"},
1325     {5, "Snow"},
1326     {6, "Sleet"},
1327     {7, "Hail"},
1328     {8, "Sand"},
1329     {9, "Dust"},
1330     {0, NULL},
1331 };
1332
1333 static const value_string cigi3_weather_control_cloud_type_vals[] = {
1334     {0, "None"},
1335     {1, "Altocumulus"},
1336     {2, "Altostratus"},
1337     {3, "Cirrocumulus"},
1338     {4, "Cirrostratus"},
1339     {5, "Cirrus"},
1340     {6, "Cumulonimbus"},
1341     {7, "Cumulus"},
1342     {8, "Nimbostratus"},
1343     {9, "Stratocumulus"},
1344     {10, "Stratus"},
1345     {11, "Other"},
1346     {12, "Other"},
1347     {13, "Other"},
1348     {14, "Other"},
1349     {15, "Other"},
1350     {0, NULL},
1351 };
1352
1353 static const value_string cigi3_weather_control_scope_vals[] = {
1354     {0, "Global"},
1355     {1, "Regional"},
1356     {2, "Entity"},
1357     {0, NULL},
1358 };
1359
1360 /* CIGI3 Maritime Surface Conditions Control */
1361 #define CIGI3_PACKET_SIZE_MARITIME_SURFACE_CONDITIONS_CONTROL 24
1362 static int hf_cigi3_maritime_surface_conditions_control = -1;
1363 static int hf_cigi3_maritime_surface_conditions_control_entity_region_id = -1;
1364 static int hf_cigi3_maritime_surface_conditions_control_surface_conditions_enable = -1;
1365 static int hf_cigi3_maritime_surface_conditions_control_whitecap_enable = -1;
1366 static int hf_cigi3_maritime_surface_conditions_control_scope = -1;
1367 static int hf_cigi3_maritime_surface_conditions_control_sea_surface_height = -1;
1368 static int hf_cigi3_maritime_surface_conditions_control_surface_water_temp = -1;
1369 static int hf_cigi3_maritime_surface_conditions_control_surface_clarity = -1;
1370
1371 static const value_string cigi3_maritime_surface_conditions_control_scope_vals[] = {
1372     {0, "Global"},
1373     {1, "Regional"},
1374     {2, "Entity"},
1375     {0, NULL},
1376 };
1377
1378 /* CIGI3 Wave Control */
1379 #define CIGI3_PACKET_SIZE_WAVE_CONTROL 32
1380 static int hf_cigi3_wave_control = -1;
1381 static int hf_cigi3_wave_control_entity_region_id = -1;
1382 static int hf_cigi3_wave_control_wave_id = -1;
1383 static int hf_cigi3_wave_control_wave_enable = -1;
1384 static int hf_cigi3_wave_control_scope = -1;
1385 static int hf_cigi3_wave_control_breaker_type = -1;
1386 static int hf_cigi3_wave_control_height = -1;
1387 static int hf_cigi3_wave_control_wavelength = -1;
1388 static int hf_cigi3_wave_control_period = -1;
1389 static int hf_cigi3_wave_control_direction = -1;
1390 static int hf_cigi3_wave_control_phase_offset = -1;
1391 static int hf_cigi3_wave_control_leading = -1;
1392
1393 static const value_string cigi3_wave_control_scope_vals[] = {
1394     {0, "Global"},
1395     {1, "Regional"},
1396     {2, "Entity"},
1397     {0, NULL},
1398 };
1399
1400 static const value_string cigi3_wave_control_breaker_type_vals[] = {
1401     {0, "Plunging"},
1402     {1, "Spilling"},
1403     {2, "Surging"},
1404     {0, NULL},
1405 };
1406
1407 /* CIGI3 Terrestrial Surface Conditions Control */
1408 #define CIGI3_PACKET_SIZE_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL 8
1409 static int hf_cigi3_terrestrial_surface_conditions_control = -1;
1410 static int hf_cigi3_terrestrial_surface_conditions_control_entity_region_id = -1;
1411 static int hf_cigi3_terrestrial_surface_conditions_control_surface_condition_id = -1;
1412 static int hf_cigi3_terrestrial_surface_conditions_control_surface_condition_enable = -1;
1413 static int hf_cigi3_terrestrial_surface_conditions_control_scope = -1;
1414 static int hf_cigi3_terrestrial_surface_conditions_control_severity = -1;
1415 static int hf_cigi3_terrestrial_surface_conditions_control_coverage = -1;
1416
1417 static const value_string cigi3_terrestrial_surface_conditions_control_scope_vals[] = {
1418     {0, "Global"},
1419     {1, "Regional"},
1420     {2, "Entity"},
1421     {0, NULL},
1422 };
1423
1424 /* CIGI3 View Control */
1425 #define CIGI3_PACKET_SIZE_VIEW_CONTROL 32
1426 static int hf_cigi3_view_control = -1;
1427 static int hf_cigi3_view_control_view_id = -1;
1428 static int hf_cigi3_view_control_group_id = -1;
1429 static int hf_cigi3_view_control_xoff_enable = -1;
1430 static int hf_cigi3_view_control_yoff_enable = -1;
1431 static int hf_cigi3_view_control_zoff_enable = -1;
1432 static int hf_cigi3_view_control_roll_enable = -1;
1433 static int hf_cigi3_view_control_pitch_enable = -1;
1434 static int hf_cigi3_view_control_yaw_enable = -1;
1435 static int hf_cigi3_view_control_entity_id = -1;
1436 static int hf_cigi3_view_control_xoff = -1;
1437 static int hf_cigi3_view_control_yoff = -1;
1438 static int hf_cigi3_view_control_zoff = -1;
1439 static int hf_cigi3_view_control_roll = -1;
1440 static int hf_cigi3_view_control_pitch = -1;
1441 static int hf_cigi3_view_control_yaw = -1;
1442
1443 /* CIGI3 Sensor Control */
1444 #define CIGI3_PACKET_SIZE_SENSOR_CONTROL 24
1445 static int hf_cigi3_sensor_control = -1;
1446 static int hf_cigi3_sensor_control_view_id = -1;
1447 static int hf_cigi3_sensor_control_sensor_id = -1;
1448 static int hf_cigi3_sensor_control_sensor_on_off = -1;
1449 static int hf_cigi3_sensor_control_polarity = -1;
1450 static int hf_cigi3_sensor_control_line_dropout_enable = -1;
1451 static int hf_cigi3_sensor_control_auto_gain = -1;
1452 static int hf_cigi3_sensor_control_track_white_black = -1;
1453 static int hf_cigi3_sensor_control_track_mode = -1;
1454 static int hf_cigi3_sensor_control_response_type = -1;
1455 static int hf_cigi3_sensor_control_gain = -1;
1456 static int hf_cigi3_sensor_control_level = -1;
1457 static int hf_cigi3_sensor_control_ac_coupling = -1;
1458 static int hf_cigi3_sensor_control_noise = -1;
1459
1460 static const value_string cigi3_sensor_control_track_mode_vals[] = {
1461     {0, "Off"},
1462     {1, "Force Correlate"},
1463     {2, "Scene"},
1464     {3, "Target"},
1465     {4, "Ship"},
1466     {5, "Defined by IG"},
1467     {6, "Defined by IG"},
1468     {7, "Defined by IG"},
1469     {0, NULL},
1470 };
1471
1472 static const true_false_string cigi3_sensor_control_polarity_tfs = {
1473     "Black hot",
1474     "White hot"
1475 };
1476
1477 static const true_false_string cigi3_sensor_control_track_white_black_tfs = {
1478     "Black",
1479     "White"
1480 };
1481
1482 static const true_false_string cigi3_sensor_control_response_type_tfs = {
1483     "Extended",
1484     "Normal"
1485 };
1486
1487 /* CIGI3 Motion Tracker Control */
1488 #define CIGI3_PACKET_SIZE_MOTION_TRACKER_CONTROL 8
1489 static int hf_cigi3_motion_tracker_control = -1;
1490 static int hf_cigi3_motion_tracker_control_view_group_id = -1;
1491 static int hf_cigi3_motion_tracker_control_tracker_id = -1;
1492 static int hf_cigi3_motion_tracker_control_tracker_enable = -1;
1493 static int hf_cigi3_motion_tracker_control_boresight_enable = -1;
1494 static int hf_cigi3_motion_tracker_control_x_enable = -1;
1495 static int hf_cigi3_motion_tracker_control_y_enable = -1;
1496 static int hf_cigi3_motion_tracker_control_z_enable = -1;
1497 static int hf_cigi3_motion_tracker_control_roll_enable = -1;
1498 static int hf_cigi3_motion_tracker_control_pitch_enable = -1;
1499 static int hf_cigi3_motion_tracker_control_yaw_enable = -1;
1500 static int hf_cigi3_motion_tracker_control_view_group_select = -1;
1501
1502 static const true_false_string cigi3_motion_tracker_control_view_group_select_tfs = {
1503     "View Group",
1504     "View"
1505 };
1506
1507 /* CIGI3 Earth Reference Model Definition */
1508 #define CIGI3_PACKET_SIZE_EARTH_REFERENCE_MODEL_DEFINITION 24
1509 static int hf_cigi3_earth_reference_model_definition = -1;
1510 static int hf_cigi3_earth_reference_model_definition_erm_enable = -1;
1511 static int hf_cigi3_earth_reference_model_definition_equatorial_radius = -1;
1512 static int hf_cigi3_earth_reference_model_definition_flattening = -1;
1513
1514 /* CIGI3 Trajectory Definition */
1515 #define CIGI3_PACKET_SIZE_TRAJECTORY_DEFINITION 24
1516 static int hf_cigi3_trajectory_definition = -1;
1517 static int hf_cigi3_trajectory_definition_entity_id = -1;
1518 static int hf_cigi3_trajectory_definition_acceleration_x = -1;
1519 static int hf_cigi3_trajectory_definition_acceleration_y = -1;
1520 static int hf_cigi3_trajectory_definition_acceleration_z = -1;
1521 static int hf_cigi3_trajectory_definition_retardation_rate = -1;
1522 static int hf_cigi3_trajectory_definition_terminal_velocity = -1;
1523
1524 /* CIGI3 View Definition */
1525 #define CIGI3_PACKET_SIZE_VIEW_DEFINITION 32
1526 static int hf_cigi3_view_definition = -1;
1527 static int hf_cigi3_view_definition_view_id = -1;
1528 static int hf_cigi3_view_definition_group_id = -1;
1529 static int hf_cigi3_view_definition_near_enable = -1;
1530 static int hf_cigi3_view_definition_far_enable = -1;
1531 static int hf_cigi3_view_definition_left_enable = -1;
1532 static int hf_cigi3_view_definition_right_enable = -1;
1533 static int hf_cigi3_view_definition_top_enable = -1;
1534 static int hf_cigi3_view_definition_bottom_enable = -1;
1535 static int hf_cigi3_view_definition_mirror_mode = -1;
1536 static int hf_cigi3_view_definition_pixel_replication = -1;
1537 static int hf_cigi3_view_definition_projection_type = -1;
1538 static int hf_cigi3_view_definition_reorder = -1;
1539 static int hf_cigi3_view_definition_view_type = -1;
1540 static int hf_cigi3_view_definition_near = -1;
1541 static int hf_cigi3_view_definition_far = -1;
1542 static int hf_cigi3_view_definition_left = -1;
1543 static int hf_cigi3_view_definition_right = -1;
1544 static int hf_cigi3_view_definition_top = -1;
1545 static int hf_cigi3_view_definition_bottom = -1;
1546
1547 static const value_string cigi3_view_definition_mirror_mode_vals[] = {
1548     {0, "None"},
1549     {1, "Horizontal"},
1550     {2, "Vertical"},
1551     {3, "Horizontal and Vertical"},
1552     {0, NULL},
1553 };
1554
1555 static const value_string cigi3_view_definition_pixel_replication_vals[] = {
1556     {0, "None"},
1557     {1, "1x2"},
1558     {2, "2x1"},
1559     {3, "2x2"},
1560     {4, "Defined by IG"},
1561     {5, "Defined by IG"},
1562     {6, "Defined by IG"},
1563     {7, "Defined by IG"},
1564     {0, NULL},
1565 };
1566
1567 static const true_false_string cigi3_view_definition_projection_type_tfs = {
1568     "Orthographic Parallel",
1569     "Perspective"
1570 };
1571
1572 static const true_false_string cigi3_view_definition_reorder_tfs = {
1573     "Bring to Top",
1574     "No Reorder"
1575 };
1576
1577 /* CIGI3 Collision Detection Segment Definition */
1578 #define CIGI3_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_DEFINITION 40
1579 static int hf_cigi3_collision_detection_segment_definition = -1;
1580 static int hf_cigi3_collision_detection_segment_definition_entity_id = -1;
1581 static int hf_cigi3_collision_detection_segment_definition_segment_id = -1;
1582 static int hf_cigi3_collision_detection_segment_definition_segment_enable = -1;
1583 static int hf_cigi3_collision_detection_segment_definition_x1 = -1;
1584 static int hf_cigi3_collision_detection_segment_definition_y1 = -1;
1585 static int hf_cigi3_collision_detection_segment_definition_z1 = -1;
1586 static int hf_cigi3_collision_detection_segment_definition_x2 = -1;
1587 static int hf_cigi3_collision_detection_segment_definition_y2 = -1;
1588 static int hf_cigi3_collision_detection_segment_definition_z2 = -1;
1589 static int hf_cigi3_collision_detection_segment_definition_material_mask = -1;
1590
1591 /* CIGI3 Collision Detection Volume Definition */
1592 #define CIGI3_PACKET_SIZE_COLLISION_DETECTION_VOLUME_DEFINITION 48
1593 static int hf_cigi3_collision_detection_volume_definition = -1;
1594 static int hf_cigi3_collision_detection_volume_definition_entity_id = -1;
1595 static int hf_cigi3_collision_detection_volume_definition_volume_id = -1;
1596 static int hf_cigi3_collision_detection_volume_definition_volume_enable = -1;
1597 static int hf_cigi3_collision_detection_volume_definition_volume_type = -1;
1598 static int hf_cigi3_collision_detection_volume_definition_x = -1;
1599 static int hf_cigi3_collision_detection_volume_definition_y = -1;
1600 static int hf_cigi3_collision_detection_volume_definition_z = -1;
1601 static int hf_cigi3_collision_detection_volume_definition_radius_height = -1;
1602 static int hf_cigi3_collision_detection_volume_definition_width = -1;
1603 static int hf_cigi3_collision_detection_volume_definition_depth = -1;
1604 static int hf_cigi3_collision_detection_volume_definition_roll = -1;
1605 static int hf_cigi3_collision_detection_volume_definition_pitch = -1;
1606 static int hf_cigi3_collision_detection_volume_definition_yaw = -1;
1607
1608 static const true_false_string cigi3_collision_detection_volume_definition_volume_type_tfs = {
1609     "Cuboid",
1610     "Sphere"
1611 };
1612
1613 /* CIGI3 HAT/HOT Request */
1614 #define CIGI3_PACKET_SIZE_HAT_HOT_REQUEST 32
1615 static int hf_cigi3_hat_hot_request = -1;
1616 static int hf_cigi3_hat_hot_request_hat_hot_id = -1;
1617 static int hf_cigi3_hat_hot_request_type = -1;
1618 static int hf_cigi3_hat_hot_request_coordinate_system = -1;
1619 static int hf_cigi3_hat_hot_request_entity_id = -1;
1620 static int hf_cigi3_hat_hot_request_lat_xoff = -1;
1621 static int hf_cigi3_hat_hot_request_lon_yoff = -1;
1622 static int hf_cigi3_hat_hot_request_alt_zoff = -1;
1623
1624 static const value_string cigi3_hat_hot_request_type_vals[] = {
1625     {0, "HAT"},
1626     {1, "HOT"},
1627     {2, "Extended"},
1628     {0, NULL},
1629 };
1630
1631 static const true_false_string cigi3_hat_hot_request_coordinate_system_tfs = {
1632     "Entity",
1633     "Geodetic"
1634 };
1635
1636 /* CIGI3_2 HAT/HOT Request */
1637 #define CIGI3_2_PACKET_SIZE_HAT_HOT_REQUEST 32
1638 static int hf_cigi3_2_hat_hot_request = -1;
1639 static int hf_cigi3_2_hat_hot_request_hat_hot_id = -1;
1640 static int hf_cigi3_2_hat_hot_request_type = -1;
1641 static int hf_cigi3_2_hat_hot_request_coordinate_system = -1;
1642 static int hf_cigi3_2_hat_hot_request_update_period = -1;
1643 static int hf_cigi3_2_hat_hot_request_entity_id = -1;
1644 static int hf_cigi3_2_hat_hot_request_lat_xoff = -1;
1645 static int hf_cigi3_2_hat_hot_request_lon_yoff = -1;
1646 static int hf_cigi3_2_hat_hot_request_alt_zoff = -1;
1647
1648 static const value_string cigi3_2_hat_hot_request_type_vals[] = {
1649     {0, "HAT"},
1650     {1, "HOT"},
1651     {2, "Extended"},
1652     {0, NULL},
1653 };
1654
1655 static const true_false_string cigi3_2_hat_hot_request_coordinate_system_tfs = {
1656     "Entity",
1657     "Geodetic"
1658 };
1659
1660 /* CIGI3 Line of Sight Segment Request */
1661 #define CIGI3_PACKET_SIZE_LINE_OF_SIGHT_SEGMENT_REQUEST 64
1662 static int hf_cigi3_line_of_sight_segment_request = -1;
1663 static int hf_cigi3_line_of_sight_segment_request_los_id = -1;
1664 static int hf_cigi3_line_of_sight_segment_request_type = -1;
1665 static int hf_cigi3_line_of_sight_segment_request_source_coord = -1;
1666 static int hf_cigi3_line_of_sight_segment_request_destination_coord = -1;
1667 static int hf_cigi3_line_of_sight_segment_request_response_coord = -1;
1668 static int hf_cigi3_line_of_sight_segment_request_alpha_threshold = -1;
1669 static int hf_cigi3_line_of_sight_segment_request_entity_id = -1;
1670 static int hf_cigi3_line_of_sight_segment_request_source_lat_xoff = -1;
1671 static int hf_cigi3_line_of_sight_segment_request_source_lon_yoff = -1;
1672 static int hf_cigi3_line_of_sight_segment_request_source_alt_zoff = -1;
1673 static int hf_cigi3_line_of_sight_segment_request_destination_lat_xoff = -1;
1674 static int hf_cigi3_line_of_sight_segment_request_destination_lon_yoff = -1;
1675 static int hf_cigi3_line_of_sight_segment_request_destination_alt_zoff = -1;
1676 static int hf_cigi3_line_of_sight_segment_request_material_mask = -1;
1677
1678 static const true_false_string cigi3_line_of_sight_segment_request_type_tfs = {
1679     "Extended",
1680     "Basic"
1681 };
1682
1683 static const true_false_string cigi3_line_of_sight_segment_request_coord_tfs = {
1684     "Entity",
1685     "Geodetic"
1686 };
1687
1688 /* CIGI3_2 Line of Sight Segment Request */
1689 #define CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_SEGMENT_REQUEST 64
1690 static int hf_cigi3_2_line_of_sight_segment_request = -1;
1691 static int hf_cigi3_2_line_of_sight_segment_request_los_id = -1;
1692 static int hf_cigi3_2_line_of_sight_segment_request_type = -1;
1693 static int hf_cigi3_2_line_of_sight_segment_request_source_coord = -1;
1694 static int hf_cigi3_2_line_of_sight_segment_request_destination_coord = -1;
1695 static int hf_cigi3_2_line_of_sight_segment_request_response_coord = -1;
1696 static int hf_cigi3_2_line_of_sight_segment_request_destination_entity_id_valid = -1;
1697 static int hf_cigi3_2_line_of_sight_segment_request_alpha_threshold = -1;
1698 static int hf_cigi3_2_line_of_sight_segment_request_entity_id = -1;
1699 static int hf_cigi3_2_line_of_sight_segment_request_source_lat_xoff = -1;
1700 static int hf_cigi3_2_line_of_sight_segment_request_source_lon_yoff = -1;
1701 static int hf_cigi3_2_line_of_sight_segment_request_source_alt_zoff = -1;
1702 static int hf_cigi3_2_line_of_sight_segment_request_destination_lat_xoff = -1;
1703 static int hf_cigi3_2_line_of_sight_segment_request_destination_lon_yoff = -1;
1704 static int hf_cigi3_2_line_of_sight_segment_request_destination_alt_zoff = -1;
1705 static int hf_cigi3_2_line_of_sight_segment_request_material_mask = -1;
1706 static int hf_cigi3_2_line_of_sight_segment_request_update_period = -1;
1707 static int hf_cigi3_2_line_of_sight_segment_request_destination_entity_id = -1;
1708
1709 static const true_false_string cigi3_2_line_of_sight_segment_request_type_tfs = {
1710     "Extended",
1711     "Basic"
1712 };
1713
1714 static const true_false_string cigi3_2_line_of_sight_segment_request_coord_tfs = {
1715     "Entity",
1716     "Geodetic"
1717 };
1718
1719 /* CIGI3 Line of Sight Vector Request */
1720 #define CIGI3_PACKET_SIZE_LINE_OF_SIGHT_VECTOR_REQUEST 56
1721 static int hf_cigi3_line_of_sight_vector_request = -1;
1722 static int hf_cigi3_line_of_sight_vector_request_los_id = -1;
1723 static int hf_cigi3_line_of_sight_vector_request_type = -1;
1724 static int hf_cigi3_line_of_sight_vector_request_source_coord = -1;
1725 static int hf_cigi3_line_of_sight_vector_request_response_coord = -1;
1726 static int hf_cigi3_line_of_sight_vector_request_alpha = -1;
1727 static int hf_cigi3_line_of_sight_vector_request_entity_id = -1;
1728 static int hf_cigi3_line_of_sight_vector_request_azimuth = -1;
1729 static int hf_cigi3_line_of_sight_vector_request_elevation = -1;
1730 static int hf_cigi3_line_of_sight_vector_request_min_range = -1;
1731 static int hf_cigi3_line_of_sight_vector_request_max_range = -1;
1732 static int hf_cigi3_line_of_sight_vector_request_source_lat_xoff = -1;
1733 static int hf_cigi3_line_of_sight_vector_request_source_lon_yoff = -1;
1734 static int hf_cigi3_line_of_sight_vector_request_source_alt_zoff = -1;
1735 static int hf_cigi3_line_of_sight_vector_request_material_mask = -1;
1736
1737 static const true_false_string cigi3_line_of_sight_vector_request_type_tfs = {
1738     "Extended",
1739     "Basic"
1740 };
1741
1742 static const true_false_string cigi3_line_of_sight_vector_request_coord_tfs = {
1743     "Entity",
1744     "Geodetic"
1745 };
1746
1747 /* CIGI3_2 Line of Sight Vector Request */
1748 #define CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_VECTOR_REQUEST 56
1749 static int hf_cigi3_2_line_of_sight_vector_request = -1;
1750 static int hf_cigi3_2_line_of_sight_vector_request_los_id = -1;
1751 static int hf_cigi3_2_line_of_sight_vector_request_type = -1;
1752 static int hf_cigi3_2_line_of_sight_vector_request_source_coord = -1;
1753 static int hf_cigi3_2_line_of_sight_vector_request_response_coord = -1;
1754 static int hf_cigi3_2_line_of_sight_vector_request_alpha = -1;
1755 static int hf_cigi3_2_line_of_sight_vector_request_entity_id = -1;
1756 static int hf_cigi3_2_line_of_sight_vector_request_azimuth = -1;
1757 static int hf_cigi3_2_line_of_sight_vector_request_elevation = -1;
1758 static int hf_cigi3_2_line_of_sight_vector_request_min_range = -1;
1759 static int hf_cigi3_2_line_of_sight_vector_request_max_range = -1;
1760 static int hf_cigi3_2_line_of_sight_vector_request_source_lat_xoff = -1;
1761 static int hf_cigi3_2_line_of_sight_vector_request_source_lon_yoff = -1;
1762 static int hf_cigi3_2_line_of_sight_vector_request_source_alt_zoff = -1;
1763 static int hf_cigi3_2_line_of_sight_vector_request_material_mask = -1;
1764 static int hf_cigi3_2_line_of_sight_vector_request_update_period = -1;
1765
1766 static const true_false_string cigi3_2_line_of_sight_vector_request_type_tfs = {
1767     "Extended",
1768     "Basic"
1769 };
1770
1771 static const true_false_string cigi3_2_line_of_sight_vector_request_coord_tfs = {
1772     "Entity",
1773     "Geodetic"
1774 };
1775
1776 /* CIGI3 Position Request */
1777 #define CIGI3_PACKET_SIZE_POSITION_REQUEST 8
1778 static int hf_cigi3_position_request = -1;
1779 static int hf_cigi3_position_request_object_id = -1;
1780 static int hf_cigi3_position_request_part_id = -1;
1781 static int hf_cigi3_position_request_update_mode = -1;
1782 static int hf_cigi3_position_request_object_class = -1;
1783 static int hf_cigi3_position_request_coord_system = -1;
1784
1785 static const true_false_string cigi3_position_request_update_mode_tfs = {
1786     "Continuous",
1787     "One-Shot"
1788 };
1789
1790 static const value_string cigi3_position_request_object_class_vals[] = {
1791     {0, "Entity"},
1792     {1, "Articulated Part"},
1793     {2, "View"},
1794     {3, "View Group"},
1795     {4, "Motion Tracker"},
1796     {0, NULL},
1797 };
1798
1799 static const value_string cigi3_position_request_coord_system_vals[] = {
1800     {0, "Geodetic"},
1801     {1, "Parent Entity"},
1802     {2, "Submodel"},
1803     {0, NULL},
1804 };
1805
1806 /* CIGI3 Environmental Conditions Request */
1807 #define CIGI3_PACKET_SIZE_ENVIRONMENTAL_CONDITIONS_REQUEST 32
1808 static int hf_cigi3_environmental_conditions_request = -1;
1809 static int hf_cigi3_environmental_conditions_request_type = -1;
1810 static int hf_cigi3_environmental_conditions_request_id = -1;
1811 static int hf_cigi3_environmental_conditions_request_lat = -1;
1812 static int hf_cigi3_environmental_conditions_request_lon = -1;
1813 static int hf_cigi3_environmental_conditions_request_alt = -1;
1814
1815 static const value_string cigi3_environmental_conditions_request_type_vals[] = {
1816     {1, "Maritime Surface Conditions"},
1817     {2, "Terrestrial Surface Conditions"},
1818     {3, "Maritime+Terrestrial Surface Conditions"},
1819     {4, "Weather Conditions"},
1820     {5, "Maritime+Weather Surface Conditions"},
1821     {6, "Terrestrial+Weather Surface Conditions"},
1822     {7, "Maritime+Terrestrial+Weather Surface Conditions"},
1823     {8, "Aerosol Concentrations"},
1824     {9, "Maritime Surface Conditions+Aerosol Concentrations"},
1825     {10, "Terrestrial Surface Conditions+Aerosol Concentrations"},
1826     {11, "Maritime+Terrestrial Surface Conditions+Aerosol Concentrations"},
1827     {12, "Weather Conditions+Aerosol Concentrations"},
1828     {13, "Maritime+Weather Surface Conditions+Aerosol Concentrations"},
1829     {14, "Terrestrial+Weather Surface Conditions+Aerosol Concentrations"},
1830     {15, "Maritime+Terrestrial+Weather Surface Conditions+Aerosol Concentrations"},
1831     {0, NULL},
1832 };
1833
1834 /* CIGI3_3 Symbol Surface Definition */
1835 #define CIGI3_PACKET_SIZE_SYMBOL_SURFACE_DEFINITION 56
1836 static int hf_cigi3_3_symbol_surface_definition = -1;
1837 static int hf_cigi3_3_symbol_surface_definition_surface_id = -1;
1838 static int hf_cigi3_3_symbol_surface_definition_surface_state = -1;
1839 static int hf_cigi3_3_symbol_surface_definition_attach_type = -1;
1840 static int hf_cigi3_3_symbol_surface_definition_billboard = -1;
1841 static int hf_cigi3_3_symbol_surface_definition_perspective_growth_enable = -1;
1842 static int hf_cigi3_3_symbol_surface_definition_entity_view_id = -1;
1843 static int hf_cigi3_3_symbol_surface_definition_xoff_left = -1;
1844 static int hf_cigi3_3_symbol_surface_definition_yoff_right = -1;
1845 static int hf_cigi3_3_symbol_surface_definition_zoff_top = -1;
1846 static int hf_cigi3_3_symbol_surface_definition_yaw_bottom = -1;
1847 static int hf_cigi3_3_symbol_surface_definition_pitch = -1;
1848 static int hf_cigi3_3_symbol_surface_definition_roll = -1;
1849 static int hf_cigi3_3_symbol_surface_definition_width = -1;
1850 static int hf_cigi3_3_symbol_surface_definition_height = -1;
1851 static int hf_cigi3_3_symbol_surface_definition_min_u = -1;
1852 static int hf_cigi3_3_symbol_surface_definition_max_u = -1;
1853 static int hf_cigi3_3_symbol_surface_definition_min_v = -1;
1854 static int hf_cigi3_3_symbol_surface_definition_max_v = -1;
1855
1856 static const true_false_string cigi3_3_symbol_surface_definition_surface_state_tfs = {
1857     "Destroyed",
1858     "Active"
1859 };
1860
1861 static const true_false_string cigi3_3_symbol_surface_definition_attach_type_tfs = {
1862     "View",
1863     "Entity"
1864 };
1865
1866 static const true_false_string cigi3_3_symbol_surface_definition_billboard_tfs = {
1867     "Billboard",
1868     "Non-Billboard"
1869 };
1870
1871 /* CIGI3_3 Symbol Text Definition */
1872 #define CIGI3_PACKET_SIZE_SYMBOL_TEXT_DEFINITION 56
1873 static int hf_cigi3_3_symbol_text_definition = -1;
1874 static int hf_cigi3_3_symbol_text_definition_symbol_id = -1;
1875 static int hf_cigi3_3_symbol_text_definition_orientation = -1;
1876 static int hf_cigi3_3_symbol_text_definition_alignment = -1;
1877 static int hf_cigi3_3_symbol_text_definition_font_ident = -1;
1878 static int hf_cigi3_3_symbol_text_definition_font_size = -1;
1879 static int hf_cigi3_3_symbol_text_definition_text = -1;
1880
1881 static const value_string cigi3_3_symbol_text_definition_alignment_vals[] = {
1882     {0, "Top Left"},
1883     {1, "Top Center"},
1884     {2, "Top Right"},
1885     {3, "Center Left"},
1886     {4, "Center"},
1887     {5, "Center Right"},
1888     {6, "Bottom Left"},
1889     {7, "Bottom Center"},
1890     {8, "Bottom Right"},
1891     {0, NULL}
1892 };
1893
1894 static const value_string cigi3_3_symbol_text_definition_orientation_vals[] = {
1895     {0, "Left To Right"},
1896     {1, "Top To Bottom"},
1897     {2, "Right To Left"},
1898     {3, "Bottom To Top"},
1899     {0, NULL}
1900 };
1901
1902 static const value_string cigi3_3_symbol_text_definition_font_ident_vals[] = {
1903     {0, "IG Default"},
1904     {1, "Proportional Sans Serif"},
1905     {2, "Proportional Sans Serif Bold"},
1906     {3, "Proportional Sans Serif Italic"},
1907     {4, "Proportional Sans Serif Bold Italic"},
1908     {5, "Proportional Serif"},
1909     {6, "Proportional Serif Bold"},
1910     {7, "Proportional Serif Italic"},
1911     {8, "Proportional Serif Bold Italic"},
1912     {9, "Monospace Sans Serif"},
1913     {10, "Monospace Sans Serif Bold"},
1914     {11, "Monospace Sans Serif Italic"},
1915     {12, "Monospace Sans Serif Bold Italic"},
1916     {13, "Monospace Serif"},
1917     {14, "Monospace Serif Bold"},
1918     {15, "Monospace Serif Italic"},
1919     {16, "Monospace Serif Bold Italic"},
1920     {0, NULL}
1921 };
1922
1923 /* CIGI3_3 Symbol Circle Definition */
1924 #define CIGI3_PACKET_SIZE_SYMBOL_CIRCLE_DEFINITION 56
1925 static int hf_cigi3_3_symbol_circle_definition = -1;
1926 static int hf_cigi3_3_symbol_circle_definition_symbol_id = -1;
1927 static int hf_cigi3_3_symbol_circle_definition_drawing_style = -1;
1928 static int hf_cigi3_3_symbol_circle_definition_stipple_pattern = -1;
1929 static int hf_cigi3_3_symbol_circle_definition_line_width = -1;
1930 static int hf_cigi3_3_symbol_circle_definition_stipple_pattern_length = -1;
1931 static int hf_cigi3_3_symbol_circle_definition_center_u[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1};
1932 static int hf_cigi3_3_symbol_circle_definition_center_v[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1};
1933 static int hf_cigi3_3_symbol_circle_definition_radius[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1};
1934 static int hf_cigi3_3_symbol_circle_definition_inner_radius[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1};
1935 static int hf_cigi3_3_symbol_circle_definition_start_angle[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1};
1936 static int hf_cigi3_3_symbol_circle_definition_end_angle[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1};
1937
1938 static const true_false_string cigi3_3_symbol_circle_definition_drawing_style_tfs = {
1939     "Fill",
1940     "Line"
1941 };
1942
1943 /* CIGI3_3 Symbol Line Definition */
1944 #define CIGI3_PACKET_SIZE_SYMBOL_LINE_DEFINITION 56
1945 static int hf_cigi3_3_symbol_line_definition = -1;
1946 static int hf_cigi3_3_symbol_line_definition_symbol_id = -1;
1947 static int hf_cigi3_3_symbol_line_definition_primitive_type = -1;
1948 static int hf_cigi3_3_symbol_line_definition_stipple_pattern = -1;
1949 static int hf_cigi3_3_symbol_line_definition_line_width = -1;
1950 static int hf_cigi3_3_symbol_line_definition_stipple_pattern_length = -1;
1951 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};
1952 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};
1953
1954 static const value_string cigi3_3_symbol_line_definition_primitive_type_vals[] = {
1955     {0, "Point"},
1956     {1, "Line"},
1957     {2, "Line Strip"},
1958     {3, "Line Loop"},
1959     {4, "Triangle"},
1960     {5, "Triangle Strip"},
1961     {6, "Triangle Fan"},
1962     {0, NULL}
1963 };
1964
1965 /* CIGI3_3 Symbol Clone */
1966 #define CIGI3_PACKET_SIZE_SYMBOL_CLONE_DEFINITION 8
1967 static int hf_cigi3_3_symbol_clone = -1;
1968 static int hf_cigi3_3_symbol_clone_symbol_id = -1;
1969 static int hf_cigi3_3_symbol_clone_source_type = -1;
1970 static int hf_cigi3_3_symbol_clone_source_id = -1;
1971
1972 static const true_false_string cigi3_3_symbol_clone_source_type_tfs = {
1973     "Symbol Template",
1974     "Symbol"
1975 };
1976
1977 /* CIGI3_3 Symbol Control */
1978 #define CIGI3_PACKET_SIZE_SYMBOL_CONTROL_DEFINITION 40
1979 static int hf_cigi3_3_symbol_control = -1;
1980 static int hf_cigi3_3_symbol_control_symbol_id = -1;
1981 static int hf_cigi3_3_symbol_control_symbol_state = -1;
1982 static int hf_cigi3_3_symbol_control_attach_state = -1;
1983 static int hf_cigi3_3_symbol_control_flash_control = -1;
1984 static int hf_cigi3_3_symbol_control_inherit_color = -1;
1985 static int hf_cigi3_3_symbol_control_parent_symbol_ident = -1;
1986 static int hf_cigi3_3_symbol_control_surface_ident = -1;
1987 static int hf_cigi3_3_symbol_control_layer = -1;
1988 static int hf_cigi3_3_symbol_control_flash_duty_cycle = -1;
1989 static int hf_cigi3_3_symbol_control_flash_period = -1;
1990 static int hf_cigi3_3_symbol_control_position_u = -1;
1991 static int hf_cigi3_3_symbol_control_position_v = -1;
1992 static int hf_cigi3_3_symbol_control_rotation = -1;
1993 static int hf_cigi3_3_symbol_control_red = -1;
1994 static int hf_cigi3_3_symbol_control_green = -1;
1995 static int hf_cigi3_3_symbol_control_blue = -1;
1996 static int hf_cigi3_3_symbol_control_alpha = -1;
1997 static int hf_cigi3_3_symbol_control_scale_u = -1;
1998 static int hf_cigi3_3_symbol_control_scale_v = -1;
1999
2000 static const value_string cigi3_3_symbol_control_symbol_state_vals[] = {
2001     {0, "Hidden"},
2002     {1, "Visible"},
2003     {2, "Destroyed"},
2004     {0, NULL}
2005 };
2006
2007 static const true_false_string cigi3_3_symbol_control_attach_state_tfs = {
2008     "Attach",
2009     "Detach"
2010 };
2011
2012 static const true_false_string cigi3_3_symbol_control_flash_control_tfs = {
2013     "Reset",
2014     "Continue"
2015 };
2016
2017 static const true_false_string cigi3_3_symbol_control_inherit_color_tfs = {
2018     "Inherited",
2019     "Not Inherited"
2020 };
2021
2022 /* CIGI3_3 Short Symbol Control */
2023 #define CIGI3_PACKET_SIZE_SHORT_SYMBOL_CONTROL_DEFINITION 32
2024 static int hf_cigi3_3_short_symbol_control = -1;
2025 static int hf_cigi3_3_short_symbol_control_symbol_id = -1;
2026 static int hf_cigi3_3_short_symbol_control_inherit_color = -1;
2027 static int hf_cigi3_3_short_symbol_control_flash_control = -1;
2028 static int hf_cigi3_3_short_symbol_control_attach_state = -1;
2029 static int hf_cigi3_3_short_symbol_control_symbol_state = -1;
2030 static int hf_cigi3_3_short_symbol_control_attribute_select1 = -1;
2031 static int hf_cigi3_3_short_symbol_control_attribute_select2 = -1;
2032 static int hf_cigi3_3_short_symbol_control_attribute_value1 = -1;
2033 static int hf_cigi3_3_short_symbol_control_attribute_value2 = -1;
2034 static int hf_cigi3_3_short_symbol_control_attribute_value1f = -1;
2035 static int hf_cigi3_3_short_symbol_control_attribute_value2f = -1;
2036 static int hf_cigi3_3_short_symbol_control_red1 = -1;
2037 static int hf_cigi3_3_short_symbol_control_green1 = -1;
2038 static int hf_cigi3_3_short_symbol_control_blue1 = -1;
2039 static int hf_cigi3_3_short_symbol_control_alpha1 = -1;
2040 static int hf_cigi3_3_short_symbol_control_red2 = -1;
2041 static int hf_cigi3_3_short_symbol_control_green2 = -1;
2042 static int hf_cigi3_3_short_symbol_control_blue2 = -1;
2043 static int hf_cigi3_3_short_symbol_control_alpha2 = -1;
2044
2045 static const value_string cigi3_3_short_symbol_control_attribute_select_vals[] = {
2046     {0, "None"},
2047     {1, "Surface ID"},
2048     {2, "Parent Symbol ID"},
2049     {3, "Layer"},
2050     {4, "Flash Duty Cycle Percentage"},
2051     {5, "Flash Period"},
2052     {6, "Position U"},
2053     {7, "Position V"},
2054     {8, "Rotation"},
2055     {9, "Color"},
2056     {10,"Scale U"},
2057     {11,"Scale V"},
2058     {0, NULL}
2059 };
2060
2061 /* CIGI3 Start of Frame */
2062 #define CIGI3_PACKET_SIZE_START_OF_FRAME 16
2063 static int hf_cigi3_start_of_frame = -1;
2064 static int hf_cigi3_start_of_frame_db_number = -1;
2065 static int hf_cigi3_start_of_frame_ig_status = -1;
2066 static int hf_cigi3_start_of_frame_ig_mode = -1;
2067 static int hf_cigi3_start_of_frame_timestamp_valid = -1;
2068 static int hf_cigi3_start_of_frame_earth_reference_model = -1;
2069 static int hf_cigi3_start_of_frame_frame_ctr = -1;
2070 static int hf_cigi3_start_of_frame_timestamp = -1;
2071
2072 static const value_string cigi3_start_of_frame_ig_mode_vals[] = {
2073     {0, "Reset/Standby"},
2074     {1, "Operate"},
2075     {2, "Debug"},
2076     {3, "Offline Maintenance"},
2077     {0, NULL},
2078 };
2079
2080 static const true_false_string cigi3_start_of_frame_earth_reference_model_tfs = {
2081     "Host-Defined",
2082     "WGS 84"
2083 };
2084
2085 /* CIGI3_2 Start of Frame */
2086 #define CIGI3_2_PACKET_SIZE_START_OF_FRAME 24
2087 static int hf_cigi3_2_start_of_frame = -1;
2088 static int hf_cigi3_2_start_of_frame_db_number = -1;
2089 static int hf_cigi3_2_start_of_frame_ig_status = -1;
2090 static int hf_cigi3_2_start_of_frame_ig_mode = -1;
2091 static int hf_cigi3_2_start_of_frame_timestamp_valid = -1;
2092 static int hf_cigi3_2_start_of_frame_earth_reference_model = -1;
2093 static int hf_cigi3_2_start_of_frame_ig_frame_number = -1;
2094 static int hf_cigi3_2_start_of_frame_timestamp = -1;
2095 static int hf_cigi3_2_start_of_frame_last_host_frame_number = -1;
2096
2097 static const value_string cigi3_2_start_of_frame_ig_mode_vals[] = {
2098     {0, "Reset/Standby"},
2099     {1, "Operate"},
2100     {2, "Debug"},
2101     {3, "Offline Maintenance"},
2102     {0, NULL},
2103 };
2104
2105 static const true_false_string cigi3_2_start_of_frame_earth_reference_model_tfs = {
2106     "Host-Defined",
2107     "WGS 84"
2108 };
2109
2110 /* CIGI3 HAT/HOT Response */
2111 #define CIGI3_PACKET_SIZE_HAT_HOT_RESPONSE 16
2112 static int hf_cigi3_hat_hot_response = -1;
2113 static int hf_cigi3_hat_hot_response_hat_hot_id = -1;
2114 static int hf_cigi3_hat_hot_response_valid = -1;
2115 static int hf_cigi3_hat_hot_response_type = -1;
2116 static int hf_cigi3_hat_hot_response_height = -1;
2117
2118 static const true_false_string cigi3_hat_hot_response_type_tfs = {
2119     "HOT",
2120     "HAT"
2121 };
2122
2123 /* CIGI3_2 HAT/HOT Response */
2124 #define CIGI3_2_PACKET_SIZE_HAT_HOT_RESPONSE 16
2125 static int hf_cigi3_2_hat_hot_response = -1;
2126 static int hf_cigi3_2_hat_hot_response_hat_hot_id = -1;
2127 static int hf_cigi3_2_hat_hot_response_valid = -1;
2128 static int hf_cigi3_2_hat_hot_response_type = -1;
2129 static int hf_cigi3_2_hat_hot_response_host_frame_number_lsn = -1;
2130 static int hf_cigi3_2_hat_hot_response_height = -1;
2131
2132 static const true_false_string cigi3_2_hat_hot_response_type_tfs = {
2133     "HOT",
2134     "HAT"
2135 };
2136
2137 /* CIGI3 HAT/HOT Extended Response */
2138 #define CIGI3_PACKET_SIZE_HAT_HOT_EXTENDED_RESPONSE 40
2139 static int hf_cigi3_hat_hot_extended_response = -1;
2140 static int hf_cigi3_hat_hot_extended_response_hat_hot_id = -1;
2141 static int hf_cigi3_hat_hot_extended_response_valid = -1;
2142 static int hf_cigi3_hat_hot_extended_response_hat = -1;
2143 static int hf_cigi3_hat_hot_extended_response_hot = -1;
2144 static int hf_cigi3_hat_hot_extended_response_material_code = -1;
2145 static int hf_cigi3_hat_hot_extended_response_normal_vector_azimuth = -1;
2146 static int hf_cigi3_hat_hot_extended_response_normal_vector_elevation = -1;
2147
2148 /* CIGI3_2 HAT/HOT Extended Response */
2149 #define CIGI3_2_PACKET_SIZE_HAT_HOT_EXTENDED_RESPONSE 40
2150 static int hf_cigi3_2_hat_hot_extended_response = -1;
2151 static int hf_cigi3_2_hat_hot_extended_response_hat_hot_id = -1;
2152 static int hf_cigi3_2_hat_hot_extended_response_valid = -1;
2153 static int hf_cigi3_2_hat_hot_extended_response_host_frame_number_lsn = -1;
2154 static int hf_cigi3_2_hat_hot_extended_response_hat = -1;
2155 static int hf_cigi3_2_hat_hot_extended_response_hot = -1;
2156 static int hf_cigi3_2_hat_hot_extended_response_material_code = -1;
2157 static int hf_cigi3_2_hat_hot_extended_response_normal_vector_azimuth = -1;
2158 static int hf_cigi3_2_hat_hot_extended_response_normal_vector_elevation = -1;
2159
2160 /* CIGI3 Line of Sight Response */
2161 #define CIGI3_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE 16
2162 static int hf_cigi3_line_of_sight_response = -1;
2163 static int hf_cigi3_line_of_sight_response_los_id = -1;
2164 static int hf_cigi3_line_of_sight_response_valid = -1;
2165 static int hf_cigi3_line_of_sight_response_entity_id_valid = -1;
2166 static int hf_cigi3_line_of_sight_response_visible = -1;
2167 static int hf_cigi3_line_of_sight_response_count = -1;
2168 static int hf_cigi3_line_of_sight_response_entity_id = -1;
2169 static int hf_cigi3_line_of_sight_response_range = -1;
2170
2171 static const true_false_string cigi3_line_of_sight_response_visible_tfs = {
2172     "Visible",
2173     "Occluded"
2174 };
2175
2176 /* CIGI3_2 Line of Sight Response */
2177 #define CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE 16
2178 static int hf_cigi3_2_line_of_sight_response = -1;
2179 static int hf_cigi3_2_line_of_sight_response_los_id = -1;
2180 static int hf_cigi3_2_line_of_sight_response_valid = -1;
2181 static int hf_cigi3_2_line_of_sight_response_entity_id_valid = -1;
2182 static int hf_cigi3_2_line_of_sight_response_visible = -1;
2183 static int hf_cigi3_2_line_of_sight_response_host_frame_number_lsn = -1;
2184 static int hf_cigi3_2_line_of_sight_response_count = -1;
2185 static int hf_cigi3_2_line_of_sight_response_entity_id = -1;
2186 static int hf_cigi3_2_line_of_sight_response_range = -1;
2187
2188 static const true_false_string cigi3_2_line_of_sight_response_visible_tfs = {
2189     "Visible",
2190     "Occluded"
2191 };
2192
2193 /* CIGI3 Line of Sight Extended Response */
2194 #define CIGI3_PACKET_SIZE_LINE_OF_SIGHT_EXTENDED_RESPONSE 56
2195 static int hf_cigi3_line_of_sight_extended_response = -1;
2196 static int hf_cigi3_line_of_sight_extended_response_los_id = -1;
2197 static int hf_cigi3_line_of_sight_extended_response_valid = -1;
2198 static int hf_cigi3_line_of_sight_extended_response_entity_id_valid = -1;
2199 static int hf_cigi3_line_of_sight_extended_response_range_valid = -1;
2200 static int hf_cigi3_line_of_sight_extended_response_visible = -1;
2201 static int hf_cigi3_line_of_sight_extended_response_intersection_coord = -1;
2202 static int hf_cigi3_line_of_sight_extended_response_response_count = -1;
2203 static int hf_cigi3_line_of_sight_extended_response_entity_id = -1;
2204 static int hf_cigi3_line_of_sight_extended_response_range = -1;
2205 static int hf_cigi3_line_of_sight_extended_response_lat_xoff = -1;
2206 static int hf_cigi3_line_of_sight_extended_response_lon_yoff = -1;
2207 static int hf_cigi3_line_of_sight_extended_response_alt_zoff = -1;
2208 static int hf_cigi3_line_of_sight_extended_response_red = -1;
2209 static int hf_cigi3_line_of_sight_extended_response_green = -1;
2210 static int hf_cigi3_line_of_sight_extended_response_blue = -1;
2211 static int hf_cigi3_line_of_sight_extended_response_alpha = -1;
2212 static int hf_cigi3_line_of_sight_extended_response_material_code = -1;
2213 static int hf_cigi3_line_of_sight_extended_response_normal_vector_azimuth = -1;
2214 static int hf_cigi3_line_of_sight_extended_response_normal_vector_elevation = -1;
2215
2216 static const true_false_string cigi3_line_of_sight_extended_response_visible_tfs = {
2217     "Visible",
2218     "Occluded"
2219 };
2220
2221 static const true_false_string cigi3_line_of_sight_extended_response_intersection_coord_tfs = {
2222     "Entity",
2223     "Geodetic"
2224 };
2225
2226 /* CIGI3_2 Line of Sight Extended Response */
2227 #define CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_EXTENDED_RESPONSE 56
2228 static int hf_cigi3_2_line_of_sight_extended_response = -1;
2229 static int hf_cigi3_2_line_of_sight_extended_response_los_id = -1;
2230 static int hf_cigi3_2_line_of_sight_extended_response_valid = -1;
2231 static int hf_cigi3_2_line_of_sight_extended_response_entity_id_valid = -1;
2232 static int hf_cigi3_2_line_of_sight_extended_response_range_valid = -1;
2233 static int hf_cigi3_2_line_of_sight_extended_response_visible = -1;
2234 static int hf_cigi3_2_line_of_sight_extended_response_host_frame_number_lsn = -1;
2235 static int hf_cigi3_2_line_of_sight_extended_response_response_count = -1;
2236 static int hf_cigi3_2_line_of_sight_extended_response_entity_id = -1;
2237 static int hf_cigi3_2_line_of_sight_extended_response_range = -1;
2238 static int hf_cigi3_2_line_of_sight_extended_response_lat_xoff = -1;
2239 static int hf_cigi3_2_line_of_sight_extended_response_lon_yoff = -1;
2240 static int hf_cigi3_2_line_of_sight_extended_response_alt_zoff = -1;
2241 static int hf_cigi3_2_line_of_sight_extended_response_red = -1;
2242 static int hf_cigi3_2_line_of_sight_extended_response_green = -1;
2243 static int hf_cigi3_2_line_of_sight_extended_response_blue = -1;
2244 static int hf_cigi3_2_line_of_sight_extended_response_alpha = -1;
2245 static int hf_cigi3_2_line_of_sight_extended_response_material_code = -1;
2246 static int hf_cigi3_2_line_of_sight_extended_response_normal_vector_azimuth = -1;
2247 static int hf_cigi3_2_line_of_sight_extended_response_normal_vector_elevation = -1;
2248
2249 static const true_false_string cigi3_2_line_of_sight_extended_response_visible_tfs = {
2250     "Visible",
2251     "Occluded"
2252 };
2253
2254 /* CIGI3 Sensor Response */
2255 #define CIGI3_PACKET_SIZE_SENSOR_RESPONSE 24
2256 static int hf_cigi3_sensor_response = -1;
2257 static int hf_cigi3_sensor_response_view_id = -1;
2258 static int hf_cigi3_sensor_response_sensor_id = -1;
2259 static int hf_cigi3_sensor_response_sensor_status = -1;
2260 static int hf_cigi3_sensor_response_gate_x_size = -1;
2261 static int hf_cigi3_sensor_response_gate_y_size = -1;
2262 static int hf_cigi3_sensor_response_gate_x_pos = -1;
2263 static int hf_cigi3_sensor_response_gate_y_pos = -1;
2264 static int hf_cigi3_sensor_response_frame_ctr = -1;
2265
2266 static const value_string cigi3_sensor_response_sensor_status_vals[] = {
2267     {0, "Searching for target"},
2268     {1, "Tracking target"},
2269     {2, "Impending breaklock"},
2270     {3, "Breaklock"},
2271     {0, NULL},
2272 };
2273
2274 /* CIGI3 Sensor Extended Response */
2275 #define CIGI3_PACKET_SIZE_SENSOR_EXTENDED_RESPONSE 48
2276 static int hf_cigi3_sensor_extended_response = -1;
2277 static int hf_cigi3_sensor_extended_response_view_id = -1;
2278 static int hf_cigi3_sensor_extended_response_sensor_id = -1;
2279 static int hf_cigi3_sensor_extended_response_sensor_status = -1;
2280 static int hf_cigi3_sensor_extended_response_entity_id_valid = -1;
2281 static int hf_cigi3_sensor_extended_response_entity_id = -1;
2282 static int hf_cigi3_sensor_extended_response_gate_x_size = -1;
2283 static int hf_cigi3_sensor_extended_response_gate_y_size = -1;
2284 static int hf_cigi3_sensor_extended_response_gate_x_pos = -1;
2285 static int hf_cigi3_sensor_extended_response_gate_y_pos = -1;
2286 static int hf_cigi3_sensor_extended_response_frame_ctr = -1;
2287 static int hf_cigi3_sensor_extended_response_track_lat = -1;
2288 static int hf_cigi3_sensor_extended_response_track_lon = -1;
2289 static int hf_cigi3_sensor_extended_response_track_alt = -1;
2290
2291 static const value_string cigi3_sensor_extended_response_sensor_status_vals[] = {
2292     {0, "Searching for target"},
2293     {1, "Tracking target"},
2294     {2, "Impending breaklock"},
2295     {3, "Breaklock"},
2296     {0, NULL},
2297 };
2298
2299 /* CIGI3 Position Response */
2300 #define CIGI3_PACKET_SIZE_POSITION_RESPONSE 48
2301 static int hf_cigi3_position_response = -1;
2302 static int hf_cigi3_position_response_object_id = -1;
2303 static int hf_cigi3_position_response_part_id = -1;
2304 static int hf_cigi3_position_response_object_class = -1;
2305 static int hf_cigi3_position_response_coord_system = -1;
2306 static int hf_cigi3_position_response_lat_xoff = -1;
2307 static int hf_cigi3_position_response_lon_yoff = -1;
2308 static int hf_cigi3_position_response_alt_zoff = -1;
2309 static int hf_cigi3_position_response_roll = -1;
2310 static int hf_cigi3_position_response_pitch = -1;
2311 static int hf_cigi3_position_response_yaw = -1;
2312
2313 static const value_string cigi3_position_response_object_class_vals[] = {
2314     {0, "Entity"},
2315     {1, "Articulated Part"},
2316     {2, "View"},
2317     {3, "View Group"},
2318     {4, "Motion Tracker"},
2319     {0, NULL},
2320 };
2321
2322 static const value_string cigi3_position_response_coord_system_vals[] = {
2323     {0, "Geodetic"},
2324     {1, "Parent Entity"},
2325     {2, "Submodel"},
2326     {0, NULL},
2327 };
2328
2329 /* CIGI3 Weather Conditions Response */
2330 #define CIGI3_PACKET_SIZE_WEATHER_CONDITIONS_RESPONSE 32
2331 static int hf_cigi3_weather_conditions_response = -1;
2332 static int hf_cigi3_weather_conditions_response_request_id = -1;
2333 static int hf_cigi3_weather_conditions_response_humidity = -1;
2334 static int hf_cigi3_weather_conditions_response_air_temp = -1;
2335 static int hf_cigi3_weather_conditions_response_visibility_range = -1;
2336 static int hf_cigi3_weather_conditions_response_horiz_speed = -1;
2337 static int hf_cigi3_weather_conditions_response_vert_speed = -1;
2338 static int hf_cigi3_weather_conditions_response_wind_direction = -1;
2339 static int hf_cigi3_weather_conditions_response_barometric_pressure = -1;
2340
2341 /* CIGI3 Aerosol Concentration Response */
2342 #define CIGI3_PACKET_SIZE_AEROSOL_CONCENTRATION_RESPONSE 8
2343 static int hf_cigi3_aerosol_concentration_response = -1;
2344 static int hf_cigi3_aerosol_concentration_response_request_id = -1;
2345 static int hf_cigi3_aerosol_concentration_response_layer_id = -1;
2346 static int hf_cigi3_aerosol_concentration_response_aerosol_concentration = -1;
2347
2348 /* CIGI3 Maritime Surface Conditions Response */
2349 #define CIGI3_PACKET_SIZE_MARITIME_SURFACE_CONDITIONS_RESPONSE 16
2350 static int hf_cigi3_maritime_surface_conditions_response = -1;
2351 static int hf_cigi3_maritime_surface_conditions_response_request_id = -1;
2352 static int hf_cigi3_maritime_surface_conditions_response_sea_surface_height = -1;
2353 static int hf_cigi3_maritime_surface_conditions_response_surface_water_temp = -1;
2354 static int hf_cigi3_maritime_surface_conditions_response_surface_clarity = -1;
2355
2356 /* CIGI3 Terrestrial Surface Conditions Response */
2357 #define CIGI3_PACKET_SIZE_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE 8
2358 static int hf_cigi3_terrestrial_surface_conditions_response = -1;
2359 static int hf_cigi3_terrestrial_surface_conditions_response_request_id = -1;
2360 static int hf_cigi3_terrestrial_surface_conditions_response_surface_id = -1;
2361
2362 /* CIGI3 Collision Detection Segment Notification */
2363 #define CIGI3_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_NOTIFICATION 16
2364 static int hf_cigi3_collision_detection_segment_notification = -1;
2365 static int hf_cigi3_collision_detection_segment_notification_entity_id = -1;
2366 static int hf_cigi3_collision_detection_segment_notification_segment_id = -1;
2367 static int hf_cigi3_collision_detection_segment_notification_type = -1;
2368 static int hf_cigi3_collision_detection_segment_notification_contacted_entity_id = -1;
2369 static int hf_cigi3_collision_detection_segment_notification_material_code = -1;
2370 static int hf_cigi3_collision_detection_segment_notification_intersection_distance = -1;
2371
2372 static const true_false_string cigi3_collision_detection_segment_notification_type_tfs = {
2373     "Entity",
2374     "Non-entity"
2375 };
2376
2377 /* CIGI3 Collision Detection Volume Notification */
2378 #define CIGI3_PACKET_SIZE_COLLISION_DETECTION_VOLUME_NOTIFICATION 16
2379 static int hf_cigi3_collision_detection_volume_notification = -1;
2380 static int hf_cigi3_collision_detection_volume_notification_entity_id = -1;
2381 static int hf_cigi3_collision_detection_volume_notification_volume_id = -1;
2382 static int hf_cigi3_collision_detection_volume_notification_type = -1;
2383 static int hf_cigi3_collision_detection_volume_notification_contacted_entity_id = -1;
2384 static int hf_cigi3_collision_detection_volume_notification_contacted_volume_id = -1;
2385
2386 static const true_false_string cigi3_collision_detection_volume_notification_type_tfs = {
2387     "Entity",
2388     "Non-entity"
2389 };
2390
2391 /* CIGI3 Animation Stop Notification */
2392 #define CIGI3_PACKET_SIZE_ANIMATION_STOP_NOTIFICATION 8
2393 static int hf_cigi3_animation_stop_notification = -1;
2394 static int hf_cigi3_animation_stop_notification_entity_id = -1;
2395
2396 /* CIGI3 Event Notification */
2397 #define CIGI3_PACKET_SIZE_EVENT_NOTIFICATION 16
2398 static int hf_cigi3_event_notification = -1;
2399 static int hf_cigi3_event_notification_event_id = -1;
2400 static int hf_cigi3_event_notification_data_1 = -1;
2401 static int hf_cigi3_event_notification_data_2 = -1;
2402 static int hf_cigi3_event_notification_data_3 = -1;
2403
2404 /* CIGI3 Image Generator Message */
2405 static int hf_cigi3_image_generator_message = -1;
2406 static int hf_cigi3_image_generator_message_id = -1;
2407 static int hf_cigi3_image_generator_message_message = -1;
2408
2409 /* CIGI3 User-Defined Packets */
2410 static int hf_cigi3_user_defined = -1;
2411
2412
2413 /* Global preferences */
2414 #define CIGI_VERSION_FROM_PACKET 0
2415 #define CIGI_VERSION_1   1
2416 #define CIGI_VERSION_2   2
2417 #define CIGI_VERSION_3   3
2418
2419 static gint global_cigi_version = CIGI_VERSION_FROM_PACKET;
2420
2421 #define CIGI_BYTE_ORDER_FROM_PACKET   -1
2422 #define CIGI_BYTE_ORDER_BIG_ENDIAN    FALSE
2423 #define CIGI_BYTE_ORDER_LITTLE_ENDIAN TRUE
2424
2425 static gint global_cigi_byte_order = CIGI_BYTE_ORDER_FROM_PACKET;
2426
2427 static const char *global_host_ip;
2428 static const char *global_ig_ip;
2429
2430
2431 /* Initialize the subtree pointers */
2432 static gint ett_cigi = -1;
2433
2434 /* The version of cigi to use */
2435 static gint cigi_version = 0;
2436 static gint cigi_minor_version = 0;
2437
2438 /* The byte order of cigi to use; our default is big-endian */
2439 static gint cigi_byte_order = CIGI_BYTE_ORDER_BIG_ENDIAN;
2440
2441 /*
2442  * Check whether this looks like a CIGI packet or not.
2443  */
2444 static gboolean
2445 packet_is_cigi(tvbuff_t *tvb)
2446 {
2447     guint8 packet_id;
2448     guint8 packet_size;
2449     guint8 cigi_version_local;
2450     guint8 ig_mode;
2451
2452     /* CIGI 3 */
2453     guint16 byte_swap;
2454
2455     if (tvb_length(tvb) < 3) {
2456         /* Not enough data available to check */
2457         return FALSE;
2458     }
2459     packet_id = tvb_get_guint8(tvb, 0);
2460     packet_size = tvb_get_guint8(tvb, 1);
2461     cigi_version_local = tvb_get_guint8(tvb, 2);
2462
2463     if ( packet_size > tvb_reported_length(tvb) ) {
2464         return FALSE;
2465     }
2466
2467     /* Currently there are only 3 versions of CIGI */
2468     switch ( cigi_version_local ) {
2469
2470         case CIGI_VERSION_1:
2471             /* CIGI 1 requires that the first packet is always the IG Control or SOF */
2472             switch ( packet_id ) {
2473                 case 1:
2474                     if ( packet_size != 16 ) {
2475                         return FALSE;
2476                     }
2477
2478                     if (!tvb_bytes_exist(tvb, 4, 1)) {
2479                         /* Not enough data available to check */
2480                         return FALSE;
2481                     }
2482                     ig_mode = (tvb_get_guint8(tvb, 4) & 0xc0) >> 6;
2483                     if ( ig_mode > 2 ) {
2484                         return FALSE;
2485                     }
2486                     break;
2487                 case 101:
2488                     if ( packet_size != 12 ) {
2489                         return FALSE;
2490                     }
2491                     break;
2492                 default:
2493                     return FALSE;
2494             }
2495             break;
2496
2497         case CIGI_VERSION_2:
2498             /* CIGI 2 requires that the first packet is always the IG Control or SOF */
2499             switch ( packet_id ) {
2500                 case CIGI2_PACKET_ID_IG_CONTROL:
2501                     if ( packet_size != CIGI2_PACKET_SIZE_IG_CONTROL ) {
2502                         return FALSE;
2503                     }
2504
2505                     if (!tvb_bytes_exist(tvb, 4, 1)) {
2506                         /* Not enough data available to check */
2507                         return FALSE;
2508                     }
2509                     ig_mode = (tvb_get_guint8(tvb, 4) & 0xc0) >> 6;
2510                     if ( ig_mode > 2 ) {
2511                         return FALSE;
2512                     }
2513                     break;
2514                 case CIGI2_PACKET_ID_START_OF_FRAME:
2515                     if ( packet_size != CIGI2_PACKET_SIZE_START_OF_FRAME ) {
2516                         return FALSE;
2517                     }
2518                     break;
2519                 default:
2520                     return FALSE;
2521             }
2522             break;
2523
2524         case CIGI_VERSION_3:
2525             if (!tvb_bytes_exist(tvb, 6, 1)) {
2526                 /* Not enough data available to check */
2527                 return FALSE;
2528             }
2529
2530             /* CIGI 3 requires that the first packet is always the IG Control or SOF */
2531             switch ( packet_id ) {
2532                 case CIGI3_PACKET_ID_IG_CONTROL:
2533                                         if ( packet_size != CIGI3_PACKET_SIZE_IG_CONTROL ) {
2534                                                 if ( packet_size != CIGI3_2_PACKET_SIZE_IG_CONTROL ) {
2535                                                         return FALSE;
2536                                                 }
2537                     }
2538
2539                     if (!tvb_bytes_exist(tvb, 4, 2)) {
2540                         /* Not enough data available to check */
2541                         return FALSE;
2542                     }
2543
2544                     ig_mode = (tvb_get_guint8(tvb, 4) & 0x03);
2545                     if ( ig_mode > 2 ) {
2546                         return FALSE;
2547                     }
2548
2549                     break;
2550                 case CIGI3_PACKET_ID_START_OF_FRAME:
2551                                         if ( packet_size != CIGI3_PACKET_SIZE_START_OF_FRAME ) {
2552                                                 if ( packet_size != CIGI3_2_PACKET_SIZE_START_OF_FRAME) {
2553                                                         return FALSE;
2554                                                 }
2555                     }
2556
2557                     if (!tvb_bytes_exist(tvb, 5, 1)) {
2558                         /* Not enough data available to check */
2559                         return FALSE;
2560                     }
2561
2562                                         break;
2563                 default:
2564                     return FALSE;
2565             }
2566
2567             /* CIGI 3 has the byte swap field which only allows two values. */
2568             byte_swap = tvb_get_ntohs(tvb, 6);
2569
2570             if ( byte_swap != CIGI3_BYTE_SWAP_BIG_ENDIAN && byte_swap != CIGI3_BYTE_SWAP_LITTLE_ENDIAN ) {
2571                 return FALSE;
2572             }
2573             break;
2574
2575         default:
2576             return FALSE;
2577     }
2578
2579     /* If we made it here, then this is probably CIGI */
2580     return TRUE;
2581 }
2582
2583 /*
2584  * The heuristic dissector
2585  */
2586 static gboolean
2587 dissect_cigi_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
2588 {
2589     /* Does this look like CIGI? */
2590     if ( !packet_is_cigi(tvb) ) {
2591         return FALSE;
2592     }
2593     dissect_cigi_pdu(tvb, pinfo, tree);
2594     return TRUE;
2595 }
2596
2597 /*
2598  * The non-heuristic dissector.
2599  */
2600 static int
2601 dissect_cigi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
2602 {
2603     /* Make sure this looks like CIGI */
2604     if ( !packet_is_cigi(tvb) ) {
2605         return 0;
2606     }
2607     dissect_cigi_pdu(tvb, pinfo, tree);
2608     /* We probably ate the entire packet. */
2609     return tvb_length(tvb);
2610 }
2611
2612 /* Code to actually dissect the CIGI packets */
2613 static void
2614 dissect_cigi_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
2615 {
2616     /* Set up structures needed to add the protocol subtree and manage it */
2617     guint8 packet_id = 0;
2618
2619     proto_item *ti, *hidden_item;
2620     proto_tree *cigi_tree;
2621
2622     const char* src_str;
2623     const char* dest_str;
2624     const char* info_str;
2625
2626     packet_id = tvb_get_guint8(tvb, 0);
2627
2628
2629     /* Make entries in Protocol column and Info column on summary display */
2630     col_set_str(pinfo->cinfo, COL_PROTOCOL, "CIGI");
2631
2632     /* If we have the start of frame or IG Control packet set the version
2633      * XXX - If another version of cigi is added to this dissector be sure to
2634      * place the IG Control and SOF packet id's in this comparison. */
2635     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 ) {
2636         cigi_version = tvb_get_guint8(tvb, 2);
2637     }
2638
2639     /* Format the Info String */
2640     src_str = ip_to_str(pinfo->src.data);
2641     if ( !g_ascii_strcasecmp(global_host_ip, src_str) ) {
2642         src_str = "Host";
2643     } else if ( !g_ascii_strcasecmp(global_ig_ip, src_str) ) {
2644         src_str = "IG";
2645     }
2646
2647     dest_str = ip_to_str(pinfo->dst.data);
2648     if ( !g_ascii_strcasecmp(global_host_ip, dest_str) ) {
2649         dest_str = "Host";
2650     } else if ( !g_ascii_strcasecmp(global_ig_ip, dest_str) ) {
2651         dest_str = "IG";
2652     }
2653
2654     info_str = se_strdup_printf("%s => %s (%u bytes)", src_str, dest_str,
2655         tvb_reported_length(tvb));
2656
2657     col_set_str(pinfo->cinfo, COL_INFO, info_str);
2658
2659     if (tree) {
2660
2661         ti = proto_tree_add_protocol_format(tree, proto_cigi, tvb, 0, tvb_length(tvb), "Common Image Generator Interface (%i), %s", cigi_version, info_str);
2662
2663         cigi_tree = proto_item_add_subtree(ti, ett_cigi);
2664
2665         /* Ports */
2666         hidden_item = proto_tree_add_uint(cigi_tree, hf_cigi_src_port, tvb, 0, 0, pinfo->srcport);
2667                 PROTO_ITEM_SET_HIDDEN(hidden_item);
2668         hidden_item = proto_tree_add_uint(cigi_tree, hf_cigi_dest_port, tvb, 0, 0, pinfo->destport);
2669                 PROTO_ITEM_SET_HIDDEN(hidden_item);
2670         hidden_item = proto_tree_add_uint(cigi_tree, hf_cigi_port, tvb, 0, 0, pinfo->srcport);
2671                 PROTO_ITEM_SET_HIDDEN(hidden_item);
2672         hidden_item = proto_tree_add_uint(cigi_tree, hf_cigi_port, tvb, 0, 0, pinfo->destport);
2673                 PROTO_ITEM_SET_HIDDEN(hidden_item);
2674
2675         /* Frame Size */
2676         hidden_item = proto_tree_add_uint(cigi_tree, hf_cigi_frame_size, tvb, 0, 0, tvb_reported_length(tvb));
2677                 PROTO_ITEM_SET_HIDDEN(hidden_item);
2678
2679         /* Since the versions of CIGI are not backwards compatible,
2680          * dissection is different for each version.
2681          * XXX - If another version of cigi is added to this dissector be
2682          * sure to place the version in this statement.*/
2683         if ( cigi_version == CIGI_VERSION_2 ) {
2684             cigi2_add_tree(tvb, cigi_tree);
2685         } else if ( cigi_version == CIGI_VERSION_3 ) {
2686             cigi3_add_tree(tvb, cigi_tree);
2687         } else {
2688             /* Since there exists no dissector to dissect this version
2689              * just put the data into a tree using an unknown version */
2690             cigi_add_tree(tvb, cigi_tree);
2691         }
2692     }
2693 }
2694
2695 /* Create the tree for CIGI (Unknown Version)
2696  * Note: If we have no version then we assume network order bytes (big endian). */
2697 static void
2698 cigi_add_tree(tvbuff_t *tvb, proto_tree *cigi_tree)
2699 {
2700     gint offset = 0;
2701     gint length = 0;
2702     gint packet_id = 0;
2703     gint packet_size = 0;
2704     gint data_size = 0;
2705
2706     proto_tree* cigi_packet_tree = NULL;
2707     proto_item* tipacket;
2708
2709     length = tvb_length(tvb);
2710
2711     /* Each iteration through this loop is meant to be a separate cigi packet
2712      * therefore it is okay to assume that at the top of this look we are given
2713      * a new packet to dissect. */
2714     while ( offset < length ) {
2715
2716         packet_id = tvb_get_guint8(tvb, offset);
2717         packet_size = tvb_get_guint8(tvb, offset + 1);
2718         data_size = packet_size;
2719
2720         /* if the second byte of the packet carries a value that is less than
2721          * then we know we have a malformed packet because every cigi packet
2722          * at minimal must be a least 2 bytes ( 1 - packet_id; 2 - packet_size ). */
2723         if ( packet_size < 2 ) {
2724             THROW(ReportedBoundsError);
2725         }
2726
2727         /* If we have the start of frame or IG Control packet set the version.
2728          * Since we have no cigi version we assume that packet id 1 is the
2729          * IG Control and packet id 101 is the Start of Frame. */
2730         if ( ( packet_id == 1 || packet_id == 101 ) && global_cigi_version == CIGI_VERSION_FROM_PACKET ) {
2731             cigi_version = tvb_get_guint8(tvb, 2);
2732         }
2733
2734         /* Add the subtree for the packet */
2735         tipacket = proto_tree_add_string_format(cigi_tree, hf_cigi_unknown, tvb, offset, packet_size, NULL, "Unknown (%i bytes)", packet_size);
2736
2737         cigi_packet_tree = proto_item_add_subtree(tipacket, ett_cigi);
2738
2739         /* In all CIGI versions the first byte of a packet is the packet ID.
2740          * The second byte is the size of the packet (in bytes). */
2741         proto_tree_add_item(cigi_packet_tree, hf_cigi_packet_id, tvb, offset, 1, cigi_byte_order);
2742         offset++;
2743         data_size--;
2744
2745         proto_tree_add_item(cigi_packet_tree, hf_cigi_packet_size, tvb, offset, 1, cigi_byte_order);
2746         offset++;
2747         data_size--;
2748
2749         /* If the packet ID is for the SOF or IG Control, which are usually 101
2750          * and 1 respectively then also print the version that we are using. */
2751         if ( packet_id == 1 || packet_id == 101 ) {
2752             proto_tree_add_item(cigi_packet_tree, hf_cigi_version, tvb, offset, 1, cigi_byte_order);
2753             offset++;
2754             data_size--;
2755         }
2756
2757         proto_tree_add_text(cigi_packet_tree, tvb, offset, data_size, "Data (%i bytes)", data_size );
2758         offset += data_size;
2759     }
2760 }
2761
2762 /* CIGI Add Data */
2763 /* offset is the position past the packet_id and packet_size */
2764 static gint
2765 cigi_add_data(tvbuff_t *tvb, proto_tree *tree, gint offset)
2766 {
2767     gint8 packet_size = 0;
2768
2769     packet_size = tvb_get_guint8(tvb, offset-1);
2770
2771     /* A cigi packet cannot be less than 2 bytes ( because every cigi packet
2772      * has a packet id (1 byte) and a packet size (1 byte) ). */
2773     if ( packet_size < 2 ) {
2774         THROW(ReportedBoundsError);
2775     }
2776
2777     proto_tree_add_text(tree, tvb, offset, packet_size-2, "Data (%i bytes)", packet_size-2 );
2778     offset += packet_size-2;
2779
2780     return offset;
2781 }
2782
2783 /* Create the tree for CIGI 2
2784  * Note: CIGI 2 guarantee's that the byte order will be big endian. */
2785 static void
2786 cigi2_add_tree(tvbuff_t *tvb, proto_tree *cigi_tree)
2787 {
2788     gint offset = 0;
2789     gint length = 0;
2790     gint init_offset = 0;
2791
2792     gint packet_id = 0;
2793     gint packet_size = 0;
2794     gint packet_length = 0;
2795
2796     proto_tree* cigi_packet_tree = NULL;
2797     proto_item* tipacket;
2798     int hf_cigi2_packet = -1;
2799
2800     length = tvb_length(tvb);
2801
2802     /* Each iteration through this loop is meant to be a separate cigi packet
2803      * therefore it is okay to assume that at the top of this look we are given
2804      * a new packet to dissect. */
2805     while ( offset < length ) {
2806
2807         packet_id = tvb_get_guint8(tvb, offset);
2808         packet_size = tvb_get_guint8(tvb, offset + 1);
2809
2810         /* If we have the start of frame or IG Control packet set the version */
2811         if ( ( packet_id == CIGI2_PACKET_ID_IG_CONTROL || packet_id == CIGI2_PACKET_ID_START_OF_FRAME ) && global_cigi_version == CIGI_VERSION_FROM_PACKET ) {
2812             cigi_version = tvb_get_guint8(tvb, 2);
2813         }
2814
2815         /* Add the subtree for the packet */
2816         if ( packet_id == CIGI2_PACKET_ID_IG_CONTROL ) {
2817             hf_cigi2_packet = hf_cigi2_ig_control;
2818             packet_length = CIGI2_PACKET_SIZE_IG_CONTROL;
2819         } else if ( packet_id == CIGI2_PACKET_ID_ENTITY_CONTROL ) {
2820             hf_cigi2_packet = hf_cigi2_entity_control;
2821             packet_length = CIGI2_PACKET_SIZE_ENTITY_CONTROL;
2822         } else if ( packet_id == CIGI2_PACKET_ID_COMPONENT_CONTROL ) {
2823             hf_cigi2_packet = hf_cigi2_component_control;
2824             packet_length = CIGI2_PACKET_SIZE_COMPONENT_CONTROL;
2825         } else if ( packet_id == CIGI2_PACKET_ID_ARTICULATED_PARTS_CONTROL ) {
2826             hf_cigi2_packet = hf_cigi2_articulated_parts_control;
2827             packet_length = CIGI2_PACKET_SIZE_ARTICULATED_PARTS_CONTROL;
2828         } else if ( packet_id == CIGI2_PACKET_ID_RATE_CONTROL ) {
2829             hf_cigi2_packet = hf_cigi2_rate_control;
2830             packet_length = CIGI2_PACKET_SIZE_RATE_CONTROL;
2831         } else if ( packet_id == CIGI2_PACKET_ID_ENVIRONMENT_CONTROL ) {
2832             hf_cigi2_packet = hf_cigi2_environment_control;
2833             packet_length = CIGI2_PACKET_SIZE_ENVIRONMENT_CONTROL;
2834         } else if ( packet_id == CIGI2_PACKET_ID_WEATHER_CONTROL ) {
2835             hf_cigi2_packet = hf_cigi2_weather_control;
2836             packet_length = CIGI2_PACKET_SIZE_WEATHER_CONTROL;
2837         } else if ( packet_id == CIGI2_PACKET_ID_VIEW_CONTROL ) {
2838             hf_cigi2_packet = hf_cigi2_view_control;
2839             packet_length = CIGI2_PACKET_SIZE_VIEW_CONTROL;
2840         } else if ( packet_id == CIGI2_PACKET_ID_SENSOR_CONTROL ) {
2841             hf_cigi2_packet = hf_cigi2_sensor_control;
2842             packet_length = CIGI2_PACKET_SIZE_SENSOR_CONTROL;
2843         } else if ( packet_id == CIGI2_PACKET_ID_TRAJECTORY_DEFINITION ) {
2844             hf_cigi2_packet = hf_cigi2_trajectory_definition;
2845             packet_length = CIGI2_PACKET_SIZE_TRAJECTORY_DEFINITION;
2846         } else if ( packet_id == CIGI2_PACKET_ID_SPECIAL_EFFECT_DEFINITION ) {
2847             hf_cigi2_packet = hf_cigi2_special_effect_definition;
2848             packet_length = CIGI2_PACKET_SIZE_SPECIAL_EFFECT_DEFINITION;
2849         } else if ( packet_id == CIGI2_PACKET_ID_VIEW_DEFINITION ) {
2850             hf_cigi2_packet = hf_cigi2_view_definition;
2851             packet_length = CIGI2_PACKET_SIZE_VIEW_DEFINITION;
2852         } else if ( packet_id == CIGI2_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION ) {
2853             hf_cigi2_packet = hf_cigi2_collision_detection_segment_definition;
2854             packet_length = CIGI2_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_DEFINITION;
2855         } else if ( packet_id == CIGI2_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION ) {
2856             hf_cigi2_packet = hf_cigi2_collision_detection_volume_definition;
2857             packet_length = CIGI2_PACKET_SIZE_COLLISION_DETECTION_VOLUME_DEFINITION;
2858         } else if ( packet_id == CIGI2_PACKET_ID_HEIGHT_ABOVE_TERRAIN_REQUEST ) {
2859             hf_cigi2_packet = hf_cigi2_height_above_terrain_request;
2860             packet_length = CIGI2_PACKET_SIZE_HEIGHT_ABOVE_TERRAIN_REQUEST;
2861         } else if ( packet_id == CIGI2_PACKET_ID_LINE_OF_SIGHT_OCCULT_REQUEST ) {
2862             hf_cigi2_packet = hf_cigi2_line_of_sight_occult_request;
2863             packet_length = CIGI2_PACKET_SIZE_LINE_OF_SIGHT_OCCULT_REQUEST;
2864         } else if ( packet_id == CIGI2_PACKET_ID_LINE_OF_SIGHT_RANGE_REQUEST ) {
2865             hf_cigi2_packet = hf_cigi2_line_of_sight_range_request;
2866             packet_length = CIGI2_PACKET_SIZE_LINE_OF_SIGHT_RANGE_REQUEST;
2867         } else if ( packet_id == CIGI2_PACKET_ID_HEIGHT_OF_TERRAIN_REQUEST ) {
2868             hf_cigi2_packet = hf_cigi2_height_of_terrain_request;
2869             packet_length = CIGI2_PACKET_SIZE_HEIGHT_OF_TERRAIN_REQUEST;
2870         } else if ( packet_id == CIGI2_PACKET_ID_START_OF_FRAME ) {
2871             hf_cigi2_packet = hf_cigi2_start_of_frame;
2872             packet_length = CIGI2_PACKET_SIZE_START_OF_FRAME;
2873         } else if ( packet_id == CIGI2_PACKET_ID_HEIGHT_ABOVE_TERRAIN_RESPONSE ) {
2874             hf_cigi2_packet = hf_cigi2_height_above_terrain_response;
2875             packet_length = CIGI2_PACKET_SIZE_HEIGHT_ABOVE_TERRAIN_RESPONSE;
2876         } else if ( packet_id == CIGI2_PACKET_ID_LINE_OF_SIGHT_RESPONSE ) {
2877             hf_cigi2_packet = hf_cigi2_line_of_sight_response;
2878             packet_length = CIGI2_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE;
2879         } else if ( packet_id == CIGI2_PACKET_ID_COLLISION_DETECTION_SEGMENT_RESPONSE ) {
2880             hf_cigi2_packet = hf_cigi2_collision_detection_segment_response;
2881             packet_length = CIGI2_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_RESPONSE;
2882         } else if ( packet_id == CIGI2_PACKET_ID_SENSOR_RESPONSE ) {
2883             hf_cigi2_packet = hf_cigi2_sensor_response;
2884             packet_length = CIGI2_PACKET_SIZE_SENSOR_RESPONSE;
2885         } else if ( packet_id == CIGI2_PACKET_ID_HEIGHT_OF_TERRAIN_RESPONSE ) {
2886             hf_cigi2_packet = hf_cigi2_height_of_terrain_response;
2887             packet_length = CIGI2_PACKET_SIZE_HEIGHT_OF_TERRAIN_RESPONSE;
2888         } else if ( packet_id == CIGI2_PACKET_ID_COLLISION_DETECTION_VOLUME_RESPONSE ) {
2889             hf_cigi2_packet = hf_cigi2_collision_detection_volume_response;
2890             packet_length = CIGI2_PACKET_SIZE_COLLISION_DETECTION_VOLUME_RESPONSE;
2891         } else if ( packet_id == CIGI2_PACKET_ID_IMAGE_GENERATOR_MESSAGE ) {
2892             hf_cigi2_packet = hf_cigi2_image_generator_message;
2893             packet_length = packet_size;
2894         } else if ( packet_id >= CIGI2_PACKET_ID_USER_DEFINABLE_MIN && packet_id <= CIGI2_PACKET_ID_USER_DEFINABLE_MAX ) {
2895             hf_cigi2_packet = hf_cigi2_user_definable;
2896             packet_length = packet_size;
2897         } else {
2898             hf_cigi2_packet = hf_cigi_unknown;
2899             packet_length = packet_size;
2900         }
2901         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);
2902
2903         cigi_packet_tree = proto_item_add_subtree(tipacket, ett_cigi);
2904
2905         /* In all CIGI versions the first byte of a packet is the packet ID.
2906          * The second byte is the size of the packet (in bytes). */
2907         init_offset = offset;
2908         proto_tree_add_item(cigi_packet_tree, hf_cigi2_packet_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
2909         offset++;
2910
2911         proto_tree_add_item(cigi_packet_tree, hf_cigi_packet_size, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
2912         offset++;
2913
2914         if ( packet_id == CIGI2_PACKET_ID_IG_CONTROL ) {
2915             offset = cigi2_add_ig_control(tvb, cigi_packet_tree, offset);
2916         } else if ( packet_id == CIGI2_PACKET_ID_ENTITY_CONTROL ) {
2917             offset = cigi2_add_entity_control(tvb, cigi_packet_tree, offset);
2918         } else if ( packet_id == CIGI2_PACKET_ID_COMPONENT_CONTROL ) {
2919             offset = cigi2_add_component_control(tvb, cigi_packet_tree, offset);
2920         } else if ( packet_id == CIGI2_PACKET_ID_ARTICULATED_PARTS_CONTROL ) {
2921             offset = cigi2_add_articulated_parts_control(tvb, cigi_packet_tree, offset);
2922         } else if ( packet_id == CIGI2_PACKET_ID_RATE_CONTROL ) {
2923             offset = cigi2_add_rate_control(tvb, cigi_packet_tree, offset);
2924         } else if ( packet_id == CIGI2_PACKET_ID_ENVIRONMENT_CONTROL ) {
2925             offset = cigi2_add_environment_control(tvb, cigi_packet_tree, offset);
2926         } else if ( packet_id == CIGI2_PACKET_ID_WEATHER_CONTROL ) {
2927             offset = cigi2_add_weather_control(tvb, cigi_packet_tree, offset);
2928         } else if ( packet_id == CIGI2_PACKET_ID_VIEW_CONTROL ) {
2929             offset = cigi2_add_view_control(tvb, cigi_packet_tree, offset);
2930         } else if ( packet_id == CIGI2_PACKET_ID_SENSOR_CONTROL ) {
2931             offset = cigi2_add_sensor_control(tvb, cigi_packet_tree, offset);
2932         } else if ( packet_id == CIGI2_PACKET_ID_TRAJECTORY_DEFINITION ) {
2933             offset = cigi2_add_trajectory_definition(tvb, cigi_packet_tree, offset);
2934         } else if ( packet_id == CIGI2_PACKET_ID_SPECIAL_EFFECT_DEFINITION ) {
2935             offset = cigi2_add_special_effect_definition(tvb, cigi_packet_tree, offset);
2936         } else if ( packet_id == CIGI2_PACKET_ID_VIEW_DEFINITION ) {
2937             offset = cigi2_add_view_definition(tvb, cigi_packet_tree, offset);
2938         } else if ( packet_id == CIGI2_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION ) {
2939             offset = cigi2_add_collision_detection_segment_definition(tvb, cigi_packet_tree, offset);
2940         } else if ( packet_id == CIGI2_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION ) {
2941             offset = cigi2_add_collision_detection_volume_definition(tvb, cigi_packet_tree, offset);
2942         } else if ( packet_id == CIGI2_PACKET_ID_HEIGHT_ABOVE_TERRAIN_REQUEST ) {
2943             offset = cigi2_add_height_above_terrain_request(tvb, cigi_packet_tree, offset);
2944         } else if ( packet_id == CIGI2_PACKET_ID_LINE_OF_SIGHT_OCCULT_REQUEST ) {
2945             offset = cigi2_add_line_of_sight_occult_request(tvb, cigi_packet_tree, offset);
2946         } else if ( packet_id == CIGI2_PACKET_ID_LINE_OF_SIGHT_RANGE_REQUEST ) {
2947             offset = cigi2_add_line_of_sight_range_request(tvb, cigi_packet_tree, offset);
2948         } else if ( packet_id == CIGI2_PACKET_ID_HEIGHT_OF_TERRAIN_REQUEST ) {
2949             offset = cigi2_add_height_of_terrain_request(tvb, cigi_packet_tree, offset);
2950         } else if ( packet_id == CIGI2_PACKET_ID_START_OF_FRAME ) {
2951             offset = cigi2_add_start_of_frame(tvb, cigi_packet_tree, offset);
2952         } else if ( packet_id == CIGI2_PACKET_ID_HEIGHT_ABOVE_TERRAIN_RESPONSE ) {
2953             offset = cigi2_add_height_above_terrain_response(tvb, cigi_packet_tree, offset);
2954         } else if ( packet_id == CIGI2_PACKET_ID_LINE_OF_SIGHT_RESPONSE ) {
2955             offset = cigi2_add_line_of_sight_response(tvb, cigi_packet_tree, offset);
2956         } else if ( packet_id == CIGI2_PACKET_ID_COLLISION_DETECTION_SEGMENT_RESPONSE ) {
2957             offset = cigi2_add_collision_detection_segment_response(tvb, cigi_packet_tree, offset);
2958         } else if ( packet_id == CIGI2_PACKET_ID_SENSOR_RESPONSE ) {
2959             offset = cigi2_add_sensor_response(tvb, cigi_packet_tree, offset);
2960         } else if ( packet_id == CIGI2_PACKET_ID_HEIGHT_OF_TERRAIN_RESPONSE ) {
2961             offset = cigi2_add_height_of_terrain_response(tvb, cigi_packet_tree, offset);
2962         } else if ( packet_id == CIGI2_PACKET_ID_COLLISION_DETECTION_VOLUME_RESPONSE ) {
2963             offset = cigi2_add_collision_detection_volume_response(tvb, cigi_packet_tree, offset);
2964         } else if ( packet_id == CIGI2_PACKET_ID_IMAGE_GENERATOR_MESSAGE ) {
2965             offset = cigi2_add_image_generator_message(tvb, cigi_packet_tree, offset);
2966         } else if ( packet_id >= CIGI2_PACKET_ID_USER_DEFINABLE_MIN && packet_id <= CIGI2_PACKET_ID_USER_DEFINABLE_MAX ) {
2967             offset = cigi_add_data(tvb, cigi_packet_tree, offset);
2968         } else {
2969             offset = cigi_add_data(tvb, cigi_packet_tree, offset);
2970         }
2971
2972         /* Does the packet offset match the supposed length of the packet? */
2973         DISSECTOR_ASSERT((offset - init_offset == packet_length) && "Packet offset does not match packet length");
2974     }
2975 }
2976
2977 /* Create the tree for CIGI 3 */
2978 static void
2979 cigi3_add_tree(tvbuff_t *tvb, proto_tree *cigi_tree)
2980 {
2981     gint offset = 0;
2982     gint length = 0;
2983     gint init_offset = 0;
2984
2985     gint packet_id = 0;
2986     gint packet_size = 0;
2987     gint packet_length = 0;
2988     guint16 byte_swap = 0;
2989
2990     proto_tree* cigi_packet_tree = NULL;
2991     proto_item* tipacket;
2992     int hf_cigi3_packet = -1;
2993
2994     length = tvb_length(tvb);
2995
2996     /* Each iteration through this loop is meant to be a separate cigi packet
2997      * therefore it is okay to assume that at the top of this look we are given
2998      * a new packet to dissect. */
2999     while ( offset < length ) {
3000
3001         packet_id = tvb_get_guint8(tvb, offset);
3002         packet_size = tvb_get_guint8(tvb, offset + 1);
3003         byte_swap = tvb_get_ntohs(tvb, offset + 6);
3004
3005         /* If we have the start of frame or IG Control packet set the version */
3006         if ( ( packet_id == CIGI3_PACKET_ID_IG_CONTROL || packet_id == CIGI3_PACKET_ID_START_OF_FRAME ) && global_cigi_version == CIGI_VERSION_FROM_PACKET ) {
3007             cigi_version = tvb_get_guint8(tvb, 2);
3008             if ( packet_size == CIGI3_2_PACKET_SIZE_IG_CONTROL || packet_size == CIGI3_2_PACKET_SIZE_START_OF_FRAME ) {
3009                cigi_minor_version = tvb_get_guint8(tvb, 4) >> 4;
3010             } else {
3011                cigi_minor_version = 0;
3012             }
3013         }
3014
3015         /* If we have the SOF or IG Control packet set the byte order */
3016         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 ) {
3017             if ( byte_swap == CIGI3_BYTE_SWAP_BIG_ENDIAN ) {
3018                 cigi_byte_order = CIGI_BYTE_ORDER_BIG_ENDIAN;
3019             } else if ( byte_swap == CIGI3_BYTE_SWAP_LITTLE_ENDIAN ) {
3020                 cigi_byte_order = CIGI_BYTE_ORDER_LITTLE_ENDIAN;
3021             } else {
3022                 /* Assume we want Big-Endian byte order */
3023                 cigi_byte_order = CIGI_BYTE_ORDER_BIG_ENDIAN;
3024             }
3025         }
3026
3027         /* Add the subtree for the packet */
3028         if ( packet_id == CIGI3_PACKET_ID_IG_CONTROL && cigi_minor_version == 2 ) {
3029             hf_cigi3_packet = hf_cigi3_2_ig_control;
3030             packet_length = CIGI3_2_PACKET_SIZE_IG_CONTROL;
3031         } else if ( packet_id == CIGI3_PACKET_ID_IG_CONTROL && cigi_minor_version == 3 ) {
3032             hf_cigi3_packet = hf_cigi3_3_ig_control;
3033             packet_length = CIGI3_3_PACKET_SIZE_IG_CONTROL;
3034         } else if ( packet_id == CIGI3_PACKET_ID_IG_CONTROL ) {
3035             hf_cigi3_packet = hf_cigi3_ig_control;
3036             packet_length = CIGI3_PACKET_SIZE_IG_CONTROL;
3037         } else if ( packet_id == CIGI3_PACKET_ID_ENTITY_CONTROL ) {
3038             hf_cigi3_packet = hf_cigi3_entity_control;
3039             packet_length = CIGI3_PACKET_SIZE_ENTITY_CONTROL;
3040         } else if ( packet_id == CIGI3_PACKET_ID_CONFORMAL_CLAMPED_ENTITY_CONTROL ) {
3041             hf_cigi3_packet = hf_cigi3_conformal_clamped_entity_control;
3042             packet_length = CIGI3_PACKET_SIZE_CONFORMAL_CLAMPED_ENTITY_CONTROL;
3043         } else if ( packet_id == CIGI3_PACKET_ID_COMPONENT_CONTROL ) {
3044             hf_cigi3_packet = hf_cigi3_component_control;
3045             packet_length = CIGI3_PACKET_SIZE_COMPONENT_CONTROL;
3046         } else if ( packet_id == CIGI3_PACKET_ID_SHORT_COMPONENT_CONTROL ) {
3047             hf_cigi3_packet = hf_cigi3_short_component_control;
3048             packet_length = CIGI3_PACKET_SIZE_SHORT_COMPONENT_CONTROL;
3049         } else if ( packet_id == CIGI3_PACKET_ID_ARTICULATED_PART_CONTROL ) {
3050             hf_cigi3_packet = hf_cigi3_articulated_part_control;
3051             packet_length = CIGI3_PACKET_SIZE_ARTICULATED_PART_CONTROL;
3052         } else if ( packet_id == CIGI3_PACKET_ID_SHORT_ARTICULATED_PART_CONTROL ) {
3053             hf_cigi3_packet = hf_cigi3_short_articulated_part_control;
3054             packet_length = CIGI3_PACKET_SIZE_SHORT_ARTICULATED_PART_CONTROL;
3055         } else if ( packet_id == CIGI3_PACKET_ID_RATE_CONTROL && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3056             hf_cigi3_packet = hf_cigi3_2_rate_control;
3057             packet_length = CIGI3_2_PACKET_SIZE_RATE_CONTROL;
3058         } else if ( packet_id == CIGI3_PACKET_ID_RATE_CONTROL ) {
3059             hf_cigi3_packet = hf_cigi3_rate_control;
3060             packet_length = CIGI3_PACKET_SIZE_RATE_CONTROL;
3061         } else if ( packet_id == CIGI3_PACKET_ID_CELESTIAL_SPHERE_CONTROL ) {
3062             hf_cigi3_packet = hf_cigi3_celestial_sphere_control;
3063             packet_length = CIGI3_PACKET_SIZE_CELESTIAL_SPHERE_CONTROL;
3064         } else if ( packet_id == CIGI3_PACKET_ID_ATMOSPHERE_CONTROL ) {
3065             hf_cigi3_packet = hf_cigi3_atmosphere_control;
3066             packet_length = CIGI3_PACKET_SIZE_ATMOSPHERE_CONTROL;
3067         } else if ( packet_id == CIGI3_PACKET_ID_ENVIRONMENTAL_REGION_CONTROL ) {
3068             hf_cigi3_packet = hf_cigi3_environmental_region_control;
3069             packet_length = CIGI3_PACKET_SIZE_ENVIRONMENTAL_REGION_CONTROL;
3070         } else if ( packet_id == CIGI3_PACKET_ID_WEATHER_CONTROL ) {
3071             hf_cigi3_packet = hf_cigi3_weather_control;
3072             packet_length = CIGI3_PACKET_SIZE_WEATHER_CONTROL;
3073         } else if ( packet_id == CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_CONTROL ) {
3074             hf_cigi3_packet = hf_cigi3_maritime_surface_conditions_control;
3075             packet_length = CIGI3_PACKET_SIZE_MARITIME_SURFACE_CONDITIONS_CONTROL;
3076         } else if ( packet_id == CIGI3_PACKET_ID_WAVE_CONTROL ) {
3077             hf_cigi3_packet = hf_cigi3_wave_control;
3078             packet_length = CIGI3_PACKET_SIZE_WAVE_CONTROL;
3079         } else if ( packet_id == CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL ) {
3080             hf_cigi3_packet = hf_cigi3_terrestrial_surface_conditions_control;
3081             packet_length = CIGI3_PACKET_SIZE_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL;
3082         } else if ( packet_id == CIGI3_PACKET_ID_VIEW_CONTROL ) {
3083             hf_cigi3_packet = hf_cigi3_view_control;
3084             packet_length = CIGI3_PACKET_SIZE_VIEW_CONTROL;
3085         } else if ( packet_id == CIGI3_PACKET_ID_SENSOR_CONTROL ) {
3086             hf_cigi3_packet = hf_cigi3_sensor_control;
3087             packet_length = CIGI3_PACKET_SIZE_SENSOR_CONTROL;
3088         } else if ( packet_id == CIGI3_PACKET_ID_MOTION_TRACKER_CONTROL ) {
3089             hf_cigi3_packet = hf_cigi3_motion_tracker_control;
3090             packet_length = CIGI3_PACKET_SIZE_MOTION_TRACKER_CONTROL;
3091         } else if ( packet_id == CIGI3_PACKET_ID_EARTH_REFERENCE_MODEL_DEFINITION ) {
3092             hf_cigi3_packet = hf_cigi3_earth_reference_model_definition;
3093             packet_length = CIGI3_PACKET_SIZE_EARTH_REFERENCE_MODEL_DEFINITION;
3094         } else if ( packet_id == CIGI3_PACKET_ID_TRAJECTORY_DEFINITION ) {
3095             hf_cigi3_packet = hf_cigi3_trajectory_definition;
3096             packet_length = CIGI3_PACKET_SIZE_TRAJECTORY_DEFINITION;
3097         } else if ( packet_id == CIGI3_PACKET_ID_VIEW_DEFINITION ) {
3098             hf_cigi3_packet = hf_cigi3_view_definition;
3099             packet_length = CIGI3_PACKET_SIZE_VIEW_DEFINITION;
3100         } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION ) {
3101             hf_cigi3_packet = hf_cigi3_collision_detection_segment_definition;
3102             packet_length = CIGI3_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_DEFINITION;
3103         } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION ) {
3104             hf_cigi3_packet = hf_cigi3_collision_detection_volume_definition;
3105             packet_length = CIGI3_PACKET_SIZE_COLLISION_DETECTION_VOLUME_DEFINITION;
3106         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_REQUEST && (cigi_minor_version == 2 || cigi_minor_version == 3)) {
3107             hf_cigi3_packet = hf_cigi3_2_hat_hot_request;
3108             packet_length = CIGI3_2_PACKET_SIZE_HAT_HOT_REQUEST;
3109         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_REQUEST ) {
3110             hf_cigi3_packet = hf_cigi3_hat_hot_request;
3111             packet_length = CIGI3_PACKET_SIZE_HAT_HOT_REQUEST;
3112         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3113             hf_cigi3_packet = hf_cigi3_2_line_of_sight_segment_request;
3114             packet_length = CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_SEGMENT_REQUEST;
3115         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST ) {
3116             hf_cigi3_packet = hf_cigi3_line_of_sight_segment_request;
3117             packet_length = CIGI3_PACKET_SIZE_LINE_OF_SIGHT_SEGMENT_REQUEST;
3118         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3119             hf_cigi3_packet = hf_cigi3_2_line_of_sight_vector_request;
3120             packet_length = CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_VECTOR_REQUEST;
3121         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST ) {
3122             hf_cigi3_packet = hf_cigi3_line_of_sight_vector_request;
3123             packet_length = CIGI3_PACKET_SIZE_LINE_OF_SIGHT_VECTOR_REQUEST;
3124         } else if ( packet_id == CIGI3_PACKET_ID_POSITION_REQUEST ) {
3125             hf_cigi3_packet = hf_cigi3_position_request;
3126             packet_length = CIGI3_PACKET_SIZE_POSITION_REQUEST;
3127         } else if ( packet_id == CIGI3_PACKET_ID_ENVIRONMENTAL_CONDITIONS_REQUEST ) {
3128             hf_cigi3_packet = hf_cigi3_environmental_conditions_request;
3129             packet_length = CIGI3_PACKET_SIZE_ENVIRONMENTAL_CONDITIONS_REQUEST;
3130         } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_SURFACE_DEFINITION ) {
3131             hf_cigi3_packet = hf_cigi3_3_symbol_surface_definition;
3132             packet_length = CIGI3_PACKET_SIZE_SYMBOL_SURFACE_DEFINITION;
3133         } else if ( packet_id == CIGI3_PACKET_ID_START_OF_FRAME && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3134             hf_cigi3_packet = hf_cigi3_2_start_of_frame;
3135             packet_length = CIGI3_2_PACKET_SIZE_START_OF_FRAME;
3136         } else if ( packet_id == CIGI3_PACKET_ID_START_OF_FRAME ) {
3137             hf_cigi3_packet = hf_cigi3_start_of_frame;
3138             packet_length = CIGI3_PACKET_SIZE_START_OF_FRAME;
3139         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3140             hf_cigi3_packet = hf_cigi3_2_hat_hot_response;
3141             packet_length = CIGI3_2_PACKET_SIZE_HAT_HOT_RESPONSE;
3142         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_RESPONSE ) {
3143             hf_cigi3_packet = hf_cigi3_hat_hot_response;
3144             packet_length = CIGI3_PACKET_SIZE_HAT_HOT_RESPONSE;
3145         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3146             hf_cigi3_packet = hf_cigi3_2_hat_hot_extended_response;
3147             packet_length = CIGI3_2_PACKET_SIZE_HAT_HOT_EXTENDED_RESPONSE;
3148         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE ) {
3149             hf_cigi3_packet = hf_cigi3_hat_hot_extended_response;
3150             packet_length = CIGI3_PACKET_SIZE_HAT_HOT_EXTENDED_RESPONSE;
3151         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3152             hf_cigi3_packet = hf_cigi3_2_line_of_sight_response;
3153             packet_length = CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE;
3154         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_RESPONSE ) {
3155             hf_cigi3_packet = hf_cigi3_line_of_sight_response;
3156             packet_length = CIGI3_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE;
3157         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3158             hf_cigi3_packet = hf_cigi3_2_line_of_sight_extended_response;
3159             packet_length = CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_EXTENDED_RESPONSE;
3160         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE ) {
3161             hf_cigi3_packet = hf_cigi3_line_of_sight_extended_response;
3162             packet_length = CIGI3_PACKET_SIZE_LINE_OF_SIGHT_EXTENDED_RESPONSE;
3163         } else if ( packet_id == CIGI3_PACKET_ID_SENSOR_RESPONSE ) {
3164             hf_cigi3_packet = hf_cigi3_sensor_response;
3165             packet_length = CIGI3_PACKET_SIZE_SENSOR_RESPONSE;
3166         } else if ( packet_id == CIGI3_PACKET_ID_SENSOR_EXTENDED_RESPONSE ) {
3167             hf_cigi3_packet = hf_cigi3_sensor_extended_response;
3168             packet_length = CIGI3_PACKET_SIZE_SENSOR_EXTENDED_RESPONSE;
3169         } else if ( packet_id == CIGI3_PACKET_ID_POSITION_RESPONSE ) {
3170             hf_cigi3_packet = hf_cigi3_position_response;
3171             packet_length = CIGI3_PACKET_SIZE_POSITION_RESPONSE;
3172         } else if ( packet_id == CIGI3_PACKET_ID_WEATHER_CONDITIONS_RESPONSE ) {
3173             hf_cigi3_packet = hf_cigi3_weather_conditions_response;
3174             packet_length = CIGI3_PACKET_SIZE_WEATHER_CONDITIONS_RESPONSE;
3175         } else if ( packet_id == CIGI3_PACKET_ID_AEROSOL_CONCENTRATION_RESPONSE ) {
3176             hf_cigi3_packet = hf_cigi3_aerosol_concentration_response;
3177             packet_length = CIGI3_PACKET_SIZE_AEROSOL_CONCENTRATION_RESPONSE;
3178         } else if ( packet_id == CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_RESPONSE ) {
3179             hf_cigi3_packet = hf_cigi3_maritime_surface_conditions_response;
3180             packet_length = CIGI3_PACKET_SIZE_MARITIME_SURFACE_CONDITIONS_RESPONSE;
3181         } else if ( packet_id == CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE ) {
3182             hf_cigi3_packet = hf_cigi3_terrestrial_surface_conditions_response;
3183             packet_length = CIGI3_PACKET_SIZE_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE;
3184         } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_NOTIFICATION ) {
3185             hf_cigi3_packet = hf_cigi3_collision_detection_segment_notification;
3186             packet_length = CIGI3_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_NOTIFICATION;
3187         } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_NOTIFICATION ) {
3188             hf_cigi3_packet = hf_cigi3_collision_detection_volume_notification;
3189             packet_length = CIGI3_PACKET_SIZE_COLLISION_DETECTION_VOLUME_NOTIFICATION;
3190         } else if ( packet_id == CIGI3_PACKET_ID_ANIMATION_STOP_NOTIFICATION ) {
3191             hf_cigi3_packet = hf_cigi3_animation_stop_notification;
3192             packet_length = CIGI3_PACKET_SIZE_ANIMATION_STOP_NOTIFICATION;
3193         } else if ( packet_id == CIGI3_PACKET_ID_EVENT_NOTIFICATION ) {
3194             hf_cigi3_packet = hf_cigi3_event_notification;
3195             packet_length = CIGI3_PACKET_SIZE_EVENT_NOTIFICATION;
3196         } else if ( packet_id == CIGI3_PACKET_ID_IMAGE_GENERATOR_MESSAGE ) {
3197             hf_cigi3_packet = hf_cigi3_image_generator_message;
3198             packet_length = packet_size;
3199         } else if ( packet_id >= CIGI3_PACKET_ID_USER_DEFINED_MIN && packet_id <= CIGI3_PACKET_ID_USER_DEFINED_MAX ) {
3200             hf_cigi3_packet = hf_cigi3_user_defined;
3201             packet_length = packet_size;
3202         } else {
3203             hf_cigi3_packet = hf_cigi_unknown;
3204             packet_length = packet_size;
3205         }
3206         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);
3207
3208         cigi_packet_tree = proto_item_add_subtree(tipacket, ett_cigi);
3209
3210         /* In all CIGI versions the first byte of a packet is the packet ID.
3211          * The second byte is the size of the packet (in bytes). */
3212         init_offset = offset;
3213         proto_tree_add_item(cigi_packet_tree, hf_cigi3_packet_id, tvb, offset, 1, cigi_byte_order);
3214         offset++;
3215
3216         proto_tree_add_item(cigi_packet_tree, hf_cigi_packet_size, tvb, offset, 1, cigi_byte_order);
3217         offset++;
3218
3219         if ( packet_id == CIGI3_PACKET_ID_IG_CONTROL && cigi_minor_version == 2 ) {
3220             offset = cigi3_2_add_ig_control(tvb, cigi_packet_tree, offset);
3221         } else if ( packet_id == CIGI3_PACKET_ID_IG_CONTROL && cigi_minor_version == 3 ) {
3222             offset = cigi3_3_add_ig_control(tvb, cigi_packet_tree, offset);
3223         } else if ( packet_id == CIGI3_PACKET_ID_IG_CONTROL ) {
3224             offset = cigi3_add_ig_control(tvb, cigi_packet_tree, offset);
3225         } else if ( packet_id == CIGI3_PACKET_ID_ENTITY_CONTROL && cigi_minor_version == 3 ) {
3226             offset = cigi3_3_add_entity_control(tvb, cigi_packet_tree, offset);
3227         } else if ( packet_id == CIGI3_PACKET_ID_ENTITY_CONTROL ) {
3228             offset = cigi3_add_entity_control(tvb, cigi_packet_tree, offset);
3229         } else if ( packet_id == CIGI3_PACKET_ID_CONFORMAL_CLAMPED_ENTITY_CONTROL ) {
3230             offset = cigi3_add_conformal_clamped_entity_control(tvb, cigi_packet_tree, offset);
3231         } else if ( packet_id == CIGI3_PACKET_ID_COMPONENT_CONTROL && cigi_minor_version == 3) {
3232             offset = cigi3_3_add_component_control(tvb, cigi_packet_tree, offset);
3233         } else if ( packet_id == CIGI3_PACKET_ID_COMPONENT_CONTROL ) {
3234             offset = cigi3_add_component_control(tvb, cigi_packet_tree, offset);
3235         } else if ( packet_id == CIGI3_PACKET_ID_SHORT_COMPONENT_CONTROL && cigi_minor_version == 3 ) {
3236             offset = cigi3_3_add_short_component_control(tvb, cigi_packet_tree, offset);
3237         } else if ( packet_id == CIGI3_PACKET_ID_SHORT_COMPONENT_CONTROL ) {
3238             offset = cigi3_add_short_component_control(tvb, cigi_packet_tree, offset);
3239         } else if ( packet_id == CIGI3_PACKET_ID_ARTICULATED_PART_CONTROL ) {
3240             offset = cigi3_add_articulated_part_control(tvb, cigi_packet_tree, offset);
3241         } else if ( packet_id == CIGI3_PACKET_ID_SHORT_ARTICULATED_PART_CONTROL ) {
3242             offset = cigi3_add_short_articulated_part_control(tvb, cigi_packet_tree, offset);
3243         } else if ( packet_id == CIGI3_PACKET_ID_RATE_CONTROL && (cigi_minor_version == 2 || cigi_minor_version == 3)) {
3244             offset = cigi3_2_add_rate_control(tvb, cigi_packet_tree, offset);
3245         } else if ( packet_id == CIGI3_PACKET_ID_RATE_CONTROL ) {
3246             offset = cigi3_add_rate_control(tvb, cigi_packet_tree, offset);
3247         } else if ( packet_id == CIGI3_PACKET_ID_CELESTIAL_SPHERE_CONTROL ) {
3248             offset = cigi3_add_celestial_sphere_control(tvb, cigi_packet_tree, offset);
3249         } else if ( packet_id == CIGI3_PACKET_ID_ATMOSPHERE_CONTROL ) {
3250             offset = cigi3_add_atmosphere_control(tvb, cigi_packet_tree, offset);
3251         } else if ( packet_id == CIGI3_PACKET_ID_ENVIRONMENTAL_REGION_CONTROL ) {
3252             offset = cigi3_add_environmental_region_control(tvb, cigi_packet_tree, offset);
3253         } else if ( packet_id == CIGI3_PACKET_ID_WEATHER_CONTROL ) {
3254             offset = cigi3_add_weather_control(tvb, cigi_packet_tree, offset);
3255         } else if ( packet_id == CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_CONTROL ) {
3256             offset = cigi3_add_maritime_surface_conditions_control(tvb, cigi_packet_tree, offset);
3257         } else if ( packet_id == CIGI3_PACKET_ID_WAVE_CONTROL ) {
3258             offset = cigi3_add_wave_control(tvb, cigi_packet_tree, offset);
3259         } else if ( packet_id == CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL ) {
3260             offset = cigi3_add_terrestrial_surface_conditions_control(tvb, cigi_packet_tree, offset);
3261         } else if ( packet_id == CIGI3_PACKET_ID_VIEW_CONTROL ) {
3262             offset = cigi3_add_view_control(tvb, cigi_packet_tree, offset);
3263         } else if ( packet_id == CIGI3_PACKET_ID_SENSOR_CONTROL ) {
3264             offset = cigi3_add_sensor_control(tvb, cigi_packet_tree, offset);
3265         } else if ( packet_id == CIGI3_PACKET_ID_MOTION_TRACKER_CONTROL ) {
3266             offset = cigi3_add_motion_tracker_control(tvb, cigi_packet_tree, offset);
3267         } else if ( packet_id == CIGI3_PACKET_ID_EARTH_REFERENCE_MODEL_DEFINITION ) {
3268             offset = cigi3_add_earth_reference_model_definition(tvb, cigi_packet_tree, offset);
3269         } else if ( packet_id == CIGI3_PACKET_ID_TRAJECTORY_DEFINITION ) {
3270             offset = cigi3_add_trajectory_definition(tvb, cigi_packet_tree, offset);
3271         } else if ( packet_id == CIGI3_PACKET_ID_VIEW_DEFINITION ) {
3272             offset = cigi3_add_view_definition(tvb, cigi_packet_tree, offset);
3273         } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION ) {
3274             offset = cigi3_add_collision_detection_segment_definition(tvb, cigi_packet_tree, offset);
3275         } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION ) {
3276             offset = cigi3_add_collision_detection_volume_definition(tvb, cigi_packet_tree, offset);
3277         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_REQUEST && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3278             offset = cigi3_2_add_hat_hot_request(tvb, cigi_packet_tree, offset);
3279         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_REQUEST ) {
3280             offset = cigi3_add_hat_hot_request(tvb, cigi_packet_tree, offset);
3281         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3282             offset = cigi3_2_add_line_of_sight_segment_request(tvb, cigi_packet_tree, offset);
3283         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST ) {
3284             offset = cigi3_add_line_of_sight_segment_request(tvb, cigi_packet_tree, offset);
3285         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3286             offset = cigi3_2_add_line_of_sight_vector_request(tvb, cigi_packet_tree, offset);
3287         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST ) {
3288             offset = cigi3_add_line_of_sight_vector_request(tvb, cigi_packet_tree, offset);
3289         } else if ( packet_id == CIGI3_PACKET_ID_POSITION_REQUEST ) {
3290             offset = cigi3_add_position_request(tvb, cigi_packet_tree, offset);
3291         } else if ( packet_id == CIGI3_PACKET_ID_ENVIRONMENTAL_CONDITIONS_REQUEST ) {
3292             offset = cigi3_add_environmental_conditions_request(tvb, cigi_packet_tree, offset);
3293         } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_SURFACE_DEFINITION && cigi_minor_version == 3 ) {
3294             offset = cigi3_3_add_symbol_surface_definition(tvb, cigi_packet_tree, offset);
3295         } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_TEXT_DEFINITION && cigi_minor_version == 3 ) {
3296             offset = cigi3_3_add_symbol_text_definition(tvb, cigi_packet_tree, offset);
3297         } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_CIRCLE_DEFINITION && cigi_minor_version == 3 ) {
3298             offset = cigi3_3_add_symbol_circle_definition(tvb, cigi_packet_tree, offset);
3299         } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_LINE_DEFINITION && cigi_minor_version == 3 ) {
3300             offset = cigi3_3_add_symbol_line_definition(tvb, cigi_packet_tree, offset);
3301         } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_CLONE && cigi_minor_version == 3 ) {
3302             offset = cigi3_3_add_symbol_clone(tvb, cigi_packet_tree, offset);
3303         } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_CONTROL && cigi_minor_version == 3 ) {
3304             offset = cigi3_3_add_symbol_control(tvb, cigi_packet_tree, offset);
3305         } else if ( packet_id == CIGI3_PACKET_ID_SHORT_SYMBOL_CONTROL && cigi_minor_version == 3 ) {
3306             offset = cigi3_3_add_short_symbol_control(tvb, cigi_packet_tree, offset);
3307         } else if ( packet_id == CIGI3_PACKET_ID_START_OF_FRAME && (cigi_minor_version == 2 || cigi_minor_version == 3) ) {
3308             offset = cigi3_2_add_start_of_frame(tvb, cigi_packet_tree, offset);
3309         } else if ( packet_id == CIGI3_PACKET_ID_START_OF_FRAME ) {
3310             offset = cigi3_add_start_of_frame(tvb, cigi_packet_tree, offset);
3311         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3)) {
3312             offset = cigi3_2_add_hat_hot_response(tvb, cigi_packet_tree, offset);
3313         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_RESPONSE ) {
3314             offset = cigi3_add_hat_hot_response(tvb, cigi_packet_tree, offset);
3315         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3)) {
3316             offset = cigi3_2_add_hat_hot_extended_response(tvb, cigi_packet_tree, offset);
3317         } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE ) {
3318             offset = cigi3_add_hat_hot_extended_response(tvb, cigi_packet_tree, offset);
3319         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3)) {
3320             offset = cigi3_2_add_line_of_sight_response(tvb, cigi_packet_tree, offset);
3321         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_RESPONSE ) {
3322             offset = cigi3_add_line_of_sight_response(tvb, cigi_packet_tree, offset);
3323         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3)) {
3324             offset = cigi3_2_add_line_of_sight_extended_response(tvb, cigi_packet_tree, offset);
3325         } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE ) {
3326             offset = cigi3_add_line_of_sight_extended_response(tvb, cigi_packet_tree, offset);
3327         } else if ( packet_id == CIGI3_PACKET_ID_SENSOR_RESPONSE ) {
3328             offset = cigi3_add_sensor_response(tvb, cigi_packet_tree, offset);
3329         } else if ( packet_id == CIGI3_PACKET_ID_SENSOR_EXTENDED_RESPONSE ) {
3330             offset = cigi3_add_sensor_extended_response(tvb, cigi_packet_tree, offset);
3331         } else if ( packet_id == CIGI3_PACKET_ID_POSITION_RESPONSE ) {
3332             offset = cigi3_add_position_response(tvb, cigi_packet_tree, offset);
3333         } else if ( packet_id == CIGI3_PACKET_ID_WEATHER_CONDITIONS_RESPONSE ) {
3334             offset = cigi3_add_weather_conditions_response(tvb, cigi_packet_tree, offset);
3335         } else if ( packet_id == CIGI3_PACKET_ID_AEROSOL_CONCENTRATION_RESPONSE ) {
3336             offset = cigi3_add_aerosol_concentration_response(tvb, cigi_packet_tree, offset);
3337         } else if ( packet_id == CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_RESPONSE ) {
3338             offset = cigi3_add_maritime_surface_conditions_response(tvb, cigi_packet_tree, offset);
3339         } else if ( packet_id == CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE ) {
3340             offset = cigi3_add_terrestrial_surface_conditions_response(tvb, cigi_packet_tree, offset);
3341         } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_NOTIFICATION ) {
3342             offset = cigi3_add_collision_detection_segment_notification(tvb, cigi_packet_tree, offset);
3343         } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_NOTIFICATION ) {
3344             offset = cigi3_add_collision_detection_volume_notification(tvb, cigi_packet_tree, offset);
3345         } else if ( packet_id == CIGI3_PACKET_ID_ANIMATION_STOP_NOTIFICATION ) {
3346             offset = cigi3_add_animation_stop_notification(tvb, cigi_packet_tree, offset);
3347         } else if ( packet_id == CIGI3_PACKET_ID_EVENT_NOTIFICATION ) {
3348             offset = cigi3_add_event_notification(tvb, cigi_packet_tree, offset);
3349         } else if ( packet_id == CIGI3_PACKET_ID_IMAGE_GENERATOR_MESSAGE ) {
3350             offset = cigi3_add_image_generator_message(tvb, cigi_packet_tree, offset);
3351         } else if ( packet_id >= CIGI3_PACKET_ID_USER_DEFINED_MIN && packet_id <= CIGI3_PACKET_ID_USER_DEFINED_MAX ) {
3352             offset = cigi_add_data(tvb, cigi_packet_tree, offset);
3353         } else {
3354             offset = cigi_add_data(tvb, cigi_packet_tree, offset);
3355         }
3356
3357         /* Does the packet offset match the supposed length of the packet? */
3358         DISSECTOR_ASSERT((offset - init_offset == packet_length) && "Packet offset does not match packet length");
3359     }
3360 }
3361
3362 /* CIGI2 IG Control */
3363 static gint
3364 cigi2_add_ig_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
3365 {
3366     proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3367     offset++;
3368
3369     proto_tree_add_item(tree, hf_cigi2_ig_control_db_number, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3370     offset++;
3371
3372     proto_tree_add_item(tree, hf_cigi2_ig_control_ig_mode, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3373     proto_tree_add_item(tree, hf_cigi2_ig_control_tracking_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3374     proto_tree_add_item(tree, hf_cigi2_ig_control_boresight, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3375     offset += 4;
3376
3377     proto_tree_add_item(tree, hf_cigi2_ig_control_frame_ctr, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3378     offset += 4;
3379
3380     proto_tree_add_item(tree, hf_cigi2_ig_control_time_tag, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3381     offset += 4;
3382
3383     return offset;
3384 }
3385
3386 /* CIGI2 Entity Control */
3387 static gint
3388 cigi2_add_entity_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
3389 {
3390     proto_tree_add_item(tree, hf_cigi2_entity_control_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3391     offset += 2;
3392
3393     proto_tree_add_item(tree, hf_cigi2_entity_control_entity_state, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3394     proto_tree_add_item(tree, hf_cigi2_entity_control_attach_state, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3395     proto_tree_add_item(tree, hf_cigi2_entity_control_collision_detect, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3396     proto_tree_add_item(tree, hf_cigi2_entity_control_effect_state, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3397     offset += 4;
3398
3399     proto_tree_add_item(tree, hf_cigi2_entity_control_type, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3400     offset += 2;
3401
3402     proto_tree_add_item(tree, hf_cigi2_entity_control_parent_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3403     offset += 2;
3404
3405     proto_tree_add_item(tree, hf_cigi2_entity_control_opacity, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3406     offset += 4;
3407
3408     proto_tree_add_item(tree, hf_cigi2_entity_control_internal_temp, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3409     offset += 4;
3410
3411     proto_tree_add_item(tree, hf_cigi2_entity_control_roll, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3412     offset += 4;
3413
3414     proto_tree_add_item(tree, hf_cigi2_entity_control_pitch, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3415     offset += 4;
3416
3417     proto_tree_add_item(tree, hf_cigi2_entity_control_heading, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3418     offset += 4;
3419
3420     proto_tree_add_item(tree, hf_cigi2_entity_control_alt, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3421     offset += 8;
3422
3423     proto_tree_add_item(tree, hf_cigi2_entity_control_lat, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3424     offset += 8;
3425
3426     proto_tree_add_item(tree, hf_cigi2_entity_control_lon, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3427     offset += 8;
3428
3429     return offset;
3430 }
3431
3432 /* CIGI2 Component Control */
3433 static gint
3434 cigi2_add_component_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
3435 {
3436     proto_tree_add_item(tree, hf_cigi2_component_control_instance_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3437     offset += 2;
3438
3439     proto_tree_add_item(tree, hf_cigi2_component_control_component_class, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3440     offset += 4;
3441
3442     proto_tree_add_item(tree, hf_cigi2_component_control_component_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3443     offset += 2;
3444
3445     proto_tree_add_item(tree, hf_cigi2_component_control_component_state, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3446     offset += 2;
3447
3448     proto_tree_add_item(tree, hf_cigi2_component_control_component_val1, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3449     offset += 4;
3450
3451     proto_tree_add_item(tree, hf_cigi2_component_control_component_val2, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3452     offset += 4;
3453
3454     return offset;
3455 }
3456
3457 /* CIGI2 Articulated Part Control */
3458 static gint
3459 cigi2_add_articulated_parts_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
3460 {
3461     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3462     offset += 2;
3463
3464     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_part_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3465     offset++;
3466
3467     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_part_state, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3468     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_xoff_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3469     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_yoff_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3470     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_zoff_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3471     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_roll_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3472     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_pitch_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3473     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_yaw_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3474     offset += 3;
3475
3476     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_x_offset, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3477     offset += 4;
3478
3479     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_y_offset, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3480     offset += 4;
3481
3482     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_z_offset, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3483     offset += 4;
3484
3485     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_roll, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3486     offset += 4;
3487
3488     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_pitch, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3489     offset += 4;
3490
3491     proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_yaw, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3492     offset += 4;
3493
3494     return offset;
3495 }
3496
3497 /* CIGI2 Rate Control */
3498 static gint
3499 cigi2_add_rate_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
3500 {
3501     proto_tree_add_item(tree, hf_cigi2_rate_control_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3502     offset += 2;
3503
3504     proto_tree_add_item(tree, hf_cigi2_rate_control_part_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3505     offset += 4;
3506
3507     proto_tree_add_item(tree, hf_cigi2_rate_control_x_rate, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3508     offset += 4;
3509
3510     proto_tree_add_item(tree, hf_cigi2_rate_control_y_rate, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3511     offset += 4;
3512
3513     proto_tree_add_item(tree, hf_cigi2_rate_control_z_rate, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3514     offset += 4;
3515
3516     proto_tree_add_item(tree, hf_cigi2_rate_control_roll_rate, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3517     offset += 4;
3518
3519     proto_tree_add_item(tree, hf_cigi2_rate_control_pitch_rate, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3520     offset += 4;
3521
3522     proto_tree_add_item(tree, hf_cigi2_rate_control_yaw_rate, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3523     offset += 4;
3524
3525     return offset;
3526 }
3527
3528 /* CIGI2 Environment Control */
3529 static gint
3530 cigi2_add_environment_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
3531 {
3532     proto_tree_add_item(tree, hf_cigi2_environment_control_hour, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3533     offset++;
3534
3535     proto_tree_add_item(tree, hf_cigi2_environment_control_minute, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3536     offset++;
3537
3538     proto_tree_add_item(tree, hf_cigi2_environment_control_ephemeris_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3539     proto_tree_add_item(tree, hf_cigi2_environment_control_humidity, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3540     offset++;
3541
3542     proto_tree_add_item(tree, hf_cigi2_environment_control_modtran_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3543     offset += 3;
3544
3545     proto_tree_add_item(tree, hf_cigi2_environment_control_date, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3546     offset += 4;
3547
3548     proto_tree_add_item(tree, hf_cigi2_environment_control_air_temp, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3549     offset += 4;
3550
3551     proto_tree_add_item(tree, hf_cigi2_environment_control_global_visibility, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3552     offset += 4;
3553
3554     proto_tree_add_item(tree, hf_cigi2_environment_control_wind_speed, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3555     offset += 4;
3556
3557     proto_tree_add_item(tree, hf_cigi2_environment_control_wind_direction, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3558     offset += 4;
3559
3560     proto_tree_add_item(tree, hf_cigi2_environment_control_pressure, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3561     offset += 4;
3562
3563     proto_tree_add_item(tree, hf_cigi2_environment_control_aerosol, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3564     offset += 4;
3565
3566     return offset;
3567 }
3568
3569 /* CIGI2 Weather Control */
3570 static gint
3571 cigi2_add_weather_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
3572 {
3573     proto_tree_add_item(tree, hf_cigi2_weather_control_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3574     offset += 2;
3575
3576     proto_tree_add_item(tree, hf_cigi2_weather_control_weather_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3577     proto_tree_add_item(tree, hf_cigi2_weather_control_scud_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3578     proto_tree_add_item(tree, hf_cigi2_weather_control_random_winds, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3579     proto_tree_add_item(tree, hf_cigi2_weather_control_severity, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3580     offset += 2;
3581
3582     proto_tree_add_item(tree, hf_cigi2_weather_control_phenomenon_type, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3583     offset += 2;
3584
3585     proto_tree_add_item(tree, hf_cigi2_weather_control_air_temp, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3586     offset += 4;
3587
3588     proto_tree_add_item(tree, hf_cigi2_weather_control_opacity, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3589     offset += 4;
3590
3591     proto_tree_add_item(tree, hf_cigi2_weather_control_scud_frequency, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3592     offset += 4;
3593
3594     proto_tree_add_item(tree, hf_cigi2_weather_control_coverage, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3595     offset += 4;
3596
3597     proto_tree_add_item(tree, hf_cigi2_weather_control_elevation, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3598     offset += 4;
3599
3600     proto_tree_add_item(tree, hf_cigi2_weather_control_thickness, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3601     offset += 4;
3602
3603     proto_tree_add_item(tree, hf_cigi2_weather_control_transition_band, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3604     offset += 4;
3605
3606     proto_tree_add_item(tree, hf_cigi2_weather_control_wind_speed, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3607     offset += 4;
3608
3609     proto_tree_add_item(tree, hf_cigi2_weather_control_wind_direction, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3610     offset += 4;
3611
3612     return offset;
3613 }
3614
3615 /* CIGI2 View Control */
3616 static gint
3617 cigi2_add_view_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
3618 {
3619     proto_tree_add_item(tree, hf_cigi2_view_control_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3620     offset += 2;
3621
3622     proto_tree_add_item(tree, hf_cigi2_view_control_view_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3623     proto_tree_add_item(tree, hf_cigi2_view_control_view_group, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3624     offset++;
3625
3626     proto_tree_add_item(tree, hf_cigi2_view_control_xoff_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3627     proto_tree_add_item(tree, hf_cigi2_view_control_yoff_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3628     proto_tree_add_item(tree, hf_cigi2_view_control_zoff_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3629     proto_tree_add_item(tree, hf_cigi2_view_control_roll_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3630     proto_tree_add_item(tree, hf_cigi2_view_control_pitch_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3631     proto_tree_add_item(tree, hf_cigi2_view_control_yaw_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3632     offset += 3;
3633
3634     proto_tree_add_item(tree, hf_cigi2_view_control_x_offset, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3635     offset += 4;
3636
3637     proto_tree_add_item(tree, hf_cigi2_view_control_y_offset, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3638     offset += 4;
3639
3640     proto_tree_add_item(tree, hf_cigi2_view_control_z_offset, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3641     offset += 4;
3642
3643     proto_tree_add_item(tree, hf_cigi2_view_control_roll, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3644     offset += 4;
3645
3646     proto_tree_add_item(tree, hf_cigi2_view_control_pitch, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3647     offset += 4;
3648
3649     proto_tree_add_item(tree, hf_cigi2_view_control_yaw, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3650     offset += 4;
3651
3652     return offset;
3653 }
3654
3655 /* CIGI2 Sensor Control */
3656 static gint
3657 cigi2_add_sensor_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
3658 {
3659     proto_tree_add_item(tree, hf_cigi2_sensor_control_view_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3660     proto_tree_add_item(tree, hf_cigi2_sensor_control_sensor_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3661     proto_tree_add_item(tree, hf_cigi2_sensor_control_polarity, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3662     proto_tree_add_item(tree, hf_cigi2_sensor_control_line_dropout, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3663     offset++;
3664
3665     proto_tree_add_item(tree, hf_cigi2_sensor_control_sensor_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3666     offset++;
3667
3668     proto_tree_add_item(tree, hf_cigi2_sensor_control_track_mode, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3669     proto_tree_add_item(tree, hf_cigi2_sensor_control_auto_gain, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3670     proto_tree_add_item(tree, hf_cigi2_sensor_control_track_polarity, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3671     offset += 4;
3672
3673     proto_tree_add_item(tree, hf_cigi2_sensor_control_gain, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3674     offset += 4;
3675
3676     proto_tree_add_item(tree, hf_cigi2_sensor_control_level, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3677     offset += 4;
3678
3679     proto_tree_add_item(tree, hf_cigi2_sensor_control_ac_coupling, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3680     offset += 4;
3681
3682     proto_tree_add_item(tree, hf_cigi2_sensor_control_noise, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3683     offset += 4;
3684
3685     return offset;
3686 }
3687
3688 /* CIGI2 Trajectory Definition */
3689 static gint
3690 cigi2_add_trajectory_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
3691 {
3692     proto_tree_add_item(tree, hf_cigi2_trajectory_definition_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3693     offset += 2;
3694
3695     proto_tree_add_item(tree, hf_cigi2_trajectory_definition_acceleration, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3696     offset += 4;
3697
3698     proto_tree_add_item(tree, hf_cigi2_trajectory_definition_retardation, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3699     offset += 4;
3700
3701     proto_tree_add_item(tree, hf_cigi2_trajectory_definition_terminal_velocity, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3702     offset += 4;
3703
3704     return offset;
3705 }
3706
3707 /* CIGI2 Special Effect Definition */
3708 static gint
3709 cigi2_add_special_effect_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
3710 {
3711     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3712     offset += 2;
3713
3714     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_seq_direction, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3715     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_color_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3716     offset++;
3717
3718     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_red, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3719     offset++;
3720
3721     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_green, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3722     offset++;
3723
3724     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_blue, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3725     offset++;
3726
3727     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));
3728     offset += 2;
3729
3730     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));
3731     offset += 2;
3732
3733     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));
3734     offset += 2;
3735
3736     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));
3737     offset += 2;
3738
3739     proto_tree_add_text(tree, tvb, offset, 2, "Spare");
3740     offset += 2;
3741
3742     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_effect_count, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3743     offset += 2;
3744
3745     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_separation, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3746     offset += 4;
3747
3748     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_burst_interval, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3749     offset += 4;
3750
3751     proto_tree_add_item(tree, hf_cigi2_special_effect_definition_duration, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3752     offset += 4;
3753
3754     return offset;
3755 }
3756
3757 /* CIGI2 View Definition */
3758 static gint
3759 cigi2_add_view_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
3760 {
3761     proto_tree_add_item(tree, hf_cigi2_view_definition_view_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3762     proto_tree_add_item(tree, hf_cigi2_view_definition_view_group, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3763     offset++;
3764
3765     proto_tree_add_item(tree, hf_cigi2_view_definition_view_type, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3766     proto_tree_add_item(tree, hf_cigi2_view_definition_pixel_rep, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3767     proto_tree_add_item(tree, hf_cigi2_view_definition_mirror, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3768     offset++;
3769
3770     proto_tree_add_item(tree, hf_cigi2_view_definition_tracker_assign, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3771     proto_tree_add_item(tree, hf_cigi2_view_definition_near_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3772     proto_tree_add_item(tree, hf_cigi2_view_definition_far_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3773     proto_tree_add_item(tree, hf_cigi2_view_definition_left_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3774     proto_tree_add_item(tree, hf_cigi2_view_definition_right_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3775     proto_tree_add_item(tree, hf_cigi2_view_definition_top_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3776     proto_tree_add_item(tree, hf_cigi2_view_definition_bottom_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3777     offset += 4;
3778
3779     proto_tree_add_item(tree, hf_cigi2_view_definition_fov_near, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3780     offset += 4;
3781
3782     proto_tree_add_item(tree, hf_cigi2_view_definition_fov_far, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3783     offset += 4;
3784
3785     proto_tree_add_item(tree, hf_cigi2_view_definition_fov_left, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3786     offset += 4;
3787
3788     proto_tree_add_item(tree, hf_cigi2_view_definition_fov_right, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3789     offset += 4;
3790
3791     proto_tree_add_item(tree, hf_cigi2_view_definition_fov_top, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3792     offset += 4;
3793
3794     proto_tree_add_item(tree, hf_cigi2_view_definition_fov_bottom, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3795     offset += 4;
3796
3797     return offset;
3798 }
3799
3800 /* CIGI2 Collision Detection Segment Definition */
3801 static gint
3802 cigi2_add_collision_detection_segment_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
3803 {
3804     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_definition_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3805     offset += 2;
3806
3807     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_definition_segment_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3808     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_definition_segment_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3809     offset += 4;
3810
3811     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_definition_collision_mask, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3812     offset += 4;
3813
3814     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));
3815     offset += 2;
3816
3817     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));
3818     offset += 2;
3819
3820     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));
3821     offset += 2;
3822
3823     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));
3824     offset += 2;
3825
3826     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));
3827     offset += 2;
3828
3829     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));
3830     offset += 2;
3831
3832     return offset;
3833 }
3834
3835 /* CIGI2 Collision Detection Volume Definition*/
3836 static gint
3837 cigi2_add_collision_detection_volume_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
3838 {
3839     proto_tree_add_item(tree, hf_cigi2_collision_detection_volume_definition_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3840     offset += 2;
3841
3842     proto_tree_add_item(tree, hf_cigi2_collision_detection_volume_definition_volume_enable, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3843     proto_tree_add_item(tree, hf_cigi2_collision_detection_volume_definition_volume_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3844     offset += 4;
3845
3846     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));
3847     offset += 2;
3848
3849     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));
3850     offset += 2;
3851
3852     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));
3853     offset += 2;
3854
3855     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));
3856     offset += 2;
3857
3858     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));
3859     offset += 2;
3860
3861     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));
3862     offset += 2;
3863
3864     return offset;
3865 }
3866
3867 /* CIGI2 Height Above Terrain Request*/
3868 static gint
3869 cigi2_add_height_above_terrain_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
3870 {
3871     proto_tree_add_item(tree, hf_cigi2_height_above_terrain_request_hat_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3872     offset += 6;
3873
3874     proto_tree_add_item(tree, hf_cigi2_height_above_terrain_request_alt, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3875     offset += 8;
3876
3877     proto_tree_add_item(tree, hf_cigi2_height_above_terrain_request_lat, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3878     offset += 8;
3879
3880     proto_tree_add_item(tree, hf_cigi2_height_above_terrain_request_lon, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3881     offset += 8;
3882
3883     return offset;
3884 }
3885
3886 /* CIGI2 Line of Sight Occult Request */
3887 static gint
3888 cigi2_add_line_of_sight_occult_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
3889 {
3890     proto_tree_add_item(tree, hf_cigi2_line_of_sight_occult_request_los_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3891     offset += 6;
3892
3893     proto_tree_add_item(tree, hf_cigi2_line_of_sight_occult_request_source_alt, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3894     offset += 8;
3895
3896     proto_tree_add_item(tree, hf_cigi2_line_of_sight_occult_request_source_lat, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3897     offset += 8;
3898
3899     proto_tree_add_item(tree, hf_cigi2_line_of_sight_occult_request_source_lon, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3900     offset += 8;
3901
3902     proto_tree_add_item(tree, hf_cigi2_line_of_sight_occult_request_dest_alt, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3903     offset += 8;
3904
3905     proto_tree_add_item(tree, hf_cigi2_line_of_sight_occult_request_dest_lat, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3906     offset += 8;
3907
3908     proto_tree_add_item(tree, hf_cigi2_line_of_sight_occult_request_dest_lon, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3909     offset += 8;
3910
3911     return offset;
3912 }
3913
3914 /* CIGI2 Line of Sight Range Request */
3915 static gint
3916 cigi2_add_line_of_sight_range_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
3917 {
3918     proto_tree_add_item(tree, hf_cigi2_line_of_sight_range_request_los_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3919     offset += 2;
3920
3921     proto_tree_add_item(tree, hf_cigi2_line_of_sight_range_request_azimuth, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3922     offset += 4;
3923
3924     proto_tree_add_item(tree, hf_cigi2_line_of_sight_range_request_elevation, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3925     offset += 8;
3926
3927     proto_tree_add_item(tree, hf_cigi2_line_of_sight_range_request_min_range, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3928     offset += 4;
3929
3930     proto_tree_add_item(tree, hf_cigi2_line_of_sight_range_request_max_range, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3931     offset += 4;
3932
3933     proto_tree_add_item(tree, hf_cigi2_line_of_sight_range_request_source_alt, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3934     offset += 8;
3935
3936     proto_tree_add_item(tree, hf_cigi2_line_of_sight_range_request_source_lat, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3937     offset += 8;
3938
3939     proto_tree_add_item(tree, hf_cigi2_line_of_sight_range_request_source_lon, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3940     offset += 8;
3941
3942     return offset;
3943 }
3944
3945 /* CIGI2 Height of Terrain Request */
3946 static gint
3947 cigi2_add_height_of_terrain_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
3948 {
3949     proto_tree_add_item(tree, hf_cigi2_height_of_terrain_request_hot_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3950     offset += 6;
3951
3952     proto_tree_add_item(tree, hf_cigi2_height_of_terrain_request_lat, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3953     offset += 8;
3954
3955     proto_tree_add_item(tree, hf_cigi2_height_of_terrain_request_lon, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
3956     offset += 8;
3957
3958     return offset;
3959 }
3960
3961 /* CIGI2 Start of Frame */
3962 static gint
3963 cigi2_add_start_of_frame(tvbuff_t *tvb, proto_tree *tree, gint offset)
3964 {
3965     proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3966     offset++;
3967
3968     proto_tree_add_item(tree, hf_cigi2_start_of_frame_db_number, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3969     offset++;
3970
3971     proto_tree_add_item(tree, hf_cigi2_start_of_frame_ig_status_code, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3972     offset++;
3973
3974     proto_tree_add_item(tree, hf_cigi2_start_of_frame_ig_mode, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3975     offset += 3;
3976
3977     proto_tree_add_item(tree, hf_cigi2_start_of_frame_frame_ctr, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3978     offset += 4;
3979
3980     proto_tree_add_item(tree, hf_cigi2_start_of_frame_time_tag, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3981     offset += 4;
3982
3983     return offset;
3984 }
3985
3986 /* CIGI2 Height Above Terrain Response */
3987 static gint
3988 cigi2_add_height_above_terrain_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
3989 {
3990     proto_tree_add_item(tree, hf_cigi2_height_above_terrain_response_hat_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
3991     offset += 2;
3992
3993     proto_tree_add_item(tree, hf_cigi2_height_above_terrain_response_valid, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
3994     offset += 8;
3995
3996     proto_tree_add_item(tree, hf_cigi2_height_above_terrain_response_material_type, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
3997     offset += 4;
3998
3999     proto_tree_add_item(tree, hf_cigi2_height_above_terrain_response_alt, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
4000     offset += 8;
4001
4002     return offset;
4003 }
4004
4005 /* CIGI2 Line of Sight Response */
4006 static gint
4007 cigi2_add_line_of_sight_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
4008 {
4009     proto_tree_add_item(tree, hf_cigi2_line_of_sight_response_los_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4010     offset += 2;
4011
4012     proto_tree_add_item(tree, hf_cigi2_line_of_sight_response_valid, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4013     proto_tree_add_item(tree, hf_cigi2_line_of_sight_response_occult_response, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4014     offset += 4;
4015
4016     proto_tree_add_item(tree, hf_cigi2_line_of_sight_response_material_type, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
4017     offset += 4;
4018
4019     proto_tree_add_item(tree, hf_cigi2_line_of_sight_response_range, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
4020     offset += 4;
4021
4022     proto_tree_add_item(tree, hf_cigi2_line_of_sight_response_alt, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
4023     offset += 8;
4024
4025     proto_tree_add_item(tree, hf_cigi2_line_of_sight_response_lat, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
4026     offset += 8;
4027
4028     proto_tree_add_item(tree, hf_cigi2_line_of_sight_response_lon, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
4029     offset += 8;
4030
4031     return offset;
4032 }
4033
4034 /* CIGI2 Collision Detection Segment Response */
4035 static gint
4036 cigi2_add_collision_detection_segment_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
4037 {
4038     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_response_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4039     offset += 2;
4040
4041     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_response_segment_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4042     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_response_contact, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4043     offset += 2;
4044
4045     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_response_contacted_entity, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4046     offset += 2;
4047
4048     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_response_material_type, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
4049     offset += 4;
4050
4051     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_response_collision_x, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
4052     offset += 4;
4053
4054     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_response_collision_y, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
4055     offset += 4;
4056
4057     proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_response_collision_z, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
4058     offset += 4;
4059
4060     return offset;
4061 }
4062
4063 /* CIGI2 Sensor Response */
4064 static gint
4065 cigi2_add_sensor_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
4066 {
4067     proto_tree_add_item(tree, hf_cigi2_sensor_response_view_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4068     proto_tree_add_item(tree, hf_cigi2_sensor_response_status, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4069     offset++;
4070
4071     proto_tree_add_item(tree, hf_cigi2_sensor_response_sensor_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4072     offset++;
4073
4074     proto_tree_add_item(tree, hf_cigi2_sensor_response_x_offset, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4075     offset += 2;
4076
4077     proto_tree_add_item(tree, hf_cigi2_sensor_response_y_offset, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4078     offset += 2;
4079
4080     proto_tree_add_item(tree, hf_cigi2_sensor_response_x_size, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4081     offset += 2;
4082
4083     proto_tree_add_item(tree, hf_cigi2_sensor_response_y_size, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4084     offset += 2;
4085
4086     return offset;
4087 }
4088
4089 /* CIGI2 Height of Terrain Response */
4090 static gint
4091 cigi2_add_height_of_terrain_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
4092 {
4093     proto_tree_add_item(tree, hf_cigi2_height_of_terrain_response_hot_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4094     offset += 2;
4095
4096     proto_tree_add_item(tree, hf_cigi2_height_of_terrain_response_valid, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4097     offset += 8;
4098
4099     proto_tree_add_item(tree, hf_cigi2_height_of_terrain_response_material_type, tvb, offset, 4, CIGI_BYTE_ORDER_BIG_ENDIAN);
4100     offset += 4;
4101
4102     proto_tree_add_item(tree, hf_cigi2_height_of_terrain_response_alt, tvb, offset, 8, CIGI_BYTE_ORDER_BIG_ENDIAN);
4103     offset += 8;
4104
4105     return offset;
4106 }
4107
4108 /* CIGI2 Collision Detection Volume Response */
4109 static gint
4110 cigi2_add_collision_detection_volume_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
4111 {
4112     proto_tree_add_item(tree, hf_cigi2_collision_detection_volume_response_entity_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4113     offset += 2;
4114
4115     proto_tree_add_item(tree, hf_cigi2_collision_detection_volume_response_volume_id, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4116     proto_tree_add_item(tree, hf_cigi2_collision_detection_volume_response_contact, tvb, offset, 1, CIGI_BYTE_ORDER_BIG_ENDIAN);
4117     offset += 2;
4118
4119     proto_tree_add_item(tree, hf_cigi2_collision_detection_volume_response_contact_entity, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4120     offset += 2;
4121
4122     return offset;
4123 }
4124
4125 /* CIGI2 Image Generator Message */
4126 static gint
4127 cigi2_add_image_generator_message(tvbuff_t *tvb, proto_tree *tree, gint offset)
4128 {
4129     guint8 packet_size = 0;
4130
4131     packet_size = tvb_get_guint8(tvb, offset-1);
4132
4133     /* An image generator packet cannot be less than 4 bytes ( because every cigi packet
4134      * has a packet id (1 byte) and a packet size (1 byte) ). */
4135     if ( packet_size < 4 ) {
4136         THROW(ReportedBoundsError);
4137     }
4138
4139     proto_tree_add_item(tree, hf_cigi2_image_generator_message_id, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4140     offset += 2;
4141
4142     proto_tree_add_item(tree, hf_cigi2_image_generator_message_message, tvb, offset, packet_size-4, CIGI_BYTE_ORDER_BIG_ENDIAN);
4143     offset += packet_size-4;
4144
4145     return offset;
4146 }
4147
4148 /* CIGI3 IG Control */
4149 static gint
4150 cigi3_add_ig_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4151 {
4152     proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, cigi_byte_order);
4153     offset++;
4154
4155     proto_tree_add_item(tree, hf_cigi3_ig_control_db_number, tvb, offset, 1, cigi_byte_order);
4156     offset++;
4157
4158     proto_tree_add_item(tree, hf_cigi3_ig_control_ig_mode, tvb, offset, 1, cigi_byte_order);
4159     proto_tree_add_item(tree, hf_cigi3_ig_control_timestamp_valid, tvb, offset, 1, cigi_byte_order);
4160     offset += 2;
4161
4162     /* Get the Byte Swap in Big-Endian so that we can display whether the value
4163      * is big-endian or little-endian to the user */
4164     proto_tree_add_item(tree, hf_cigi3_byte_swap, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4165     offset += 2;
4166
4167     proto_tree_add_item(tree, hf_cigi3_ig_control_frame_ctr, tvb, offset, 4, cigi_byte_order);
4168     offset += 4;
4169
4170     proto_tree_add_item(tree, hf_cigi3_ig_control_timestamp, tvb, offset, 4, cigi_byte_order);
4171     offset += 4;
4172
4173     return offset;
4174 }
4175
4176 /* CIGI3_2 IG Control */
4177 static gint
4178 cigi3_2_add_ig_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4179 {
4180     proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, cigi_byte_order);
4181     offset++;
4182
4183     proto_tree_add_item(tree, hf_cigi3_2_ig_control_db_number, tvb, offset, 1, cigi_byte_order);
4184     offset++;
4185
4186     proto_tree_add_item(tree, hf_cigi3_2_ig_control_ig_mode, tvb, offset, 1, cigi_byte_order);
4187     proto_tree_add_item(tree, hf_cigi3_2_ig_control_timestamp_valid, tvb, offset, 1, cigi_byte_order);
4188     offset += 2;
4189
4190     /* Get the Byte Swap in Big-Endian so that we can display whether the value
4191      * is big-endian or little-endian to the user */
4192     proto_tree_add_item(tree, hf_cigi3_byte_swap, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4193     offset += 2;
4194
4195     proto_tree_add_item(tree, hf_cigi3_2_ig_control_host_frame_number, tvb, offset, 4, cigi_byte_order);
4196     offset += 4;
4197
4198     proto_tree_add_item(tree, hf_cigi3_2_ig_control_timestamp, tvb, offset, 4, cigi_byte_order);
4199     offset += 4;
4200
4201     proto_tree_add_item(tree, hf_cigi3_2_ig_control_last_ig_frame_number, tvb, offset, 4, cigi_byte_order);
4202     offset += 8;
4203
4204     return offset;
4205 }
4206
4207 /* CIGI3_3 IG Control */
4208 static gint
4209 cigi3_3_add_ig_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4210 {
4211     proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, cigi_byte_order);
4212     offset++;
4213
4214     proto_tree_add_item(tree, hf_cigi3_3_ig_control_db_number, tvb, offset, 1, cigi_byte_order);
4215     offset++;
4216
4217     proto_tree_add_item(tree, hf_cigi3_3_ig_control_ig_mode, tvb, offset, 1, cigi_byte_order);
4218     proto_tree_add_item(tree, hf_cigi3_3_ig_control_timestamp_valid, tvb, offset, 1, cigi_byte_order);
4219     proto_tree_add_item(tree, hf_cigi3_3_ig_control_extrapolation_enable, tvb, offset, 1, cigi_byte_order);
4220     proto_tree_add_item(tree, hf_cigi3_3_ig_control_minor_version, tvb, offset, 1, cigi_byte_order);
4221     offset += 2;
4222
4223     /* Get the Byte Swap in Big-Endian so that we can display whether the value
4224      * is big-endian or little-endian to the user */
4225     proto_tree_add_item(tree, hf_cigi3_byte_swap, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
4226     offset += 2;
4227
4228     proto_tree_add_item(tree, hf_cigi3_2_ig_control_host_frame_number, tvb, offset, 4, cigi_byte_order);
4229     offset += 4;
4230
4231     proto_tree_add_item(tree, hf_cigi3_2_ig_control_timestamp, tvb, offset, 4, cigi_byte_order);
4232     offset += 4;
4233
4234     proto_tree_add_item(tree, hf_cigi3_2_ig_control_last_ig_frame_number, tvb, offset, 4, cigi_byte_order);
4235     offset += 8;
4236
4237     return offset;
4238 }
4239
4240 /* CIGI3 Entity Control */
4241 static gint
4242 cigi3_add_entity_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4243 {
4244     proto_tree_add_item(tree, hf_cigi3_entity_control_entity_id, tvb, offset, 2, cigi_byte_order);
4245     offset += 2;
4246
4247     proto_tree_add_item(tree, hf_cigi3_entity_control_entity_state, tvb, offset, 1, cigi_byte_order);
4248     proto_tree_add_item(tree, hf_cigi3_entity_control_attach_state, tvb, offset, 1, cigi_byte_order);
4249     proto_tree_add_item(tree, hf_cigi3_entity_control_collision_detection_request, tvb, offset, 1, cigi_byte_order);
4250     proto_tree_add_item(tree, hf_cigi3_entity_control_inherit_alpha, tvb, offset, 1, cigi_byte_order);
4251     proto_tree_add_item(tree, hf_cigi3_entity_control_ground_ocean_clamp, tvb, offset, 1, cigi_byte_order);
4252     offset++;
4253
4254     proto_tree_add_item(tree, hf_cigi3_entity_control_animation_direction, tvb, offset, 1, cigi_byte_order);
4255     proto_tree_add_item(tree, hf_cigi3_entity_control_animation_loop_mode, tvb, offset, 1, cigi_byte_order);
4256     proto_tree_add_item(tree, hf_cigi3_entity_control_animation_state, tvb, offset, 1, cigi_byte_order);
4257     offset++;
4258
4259     proto_tree_add_item(tree, hf_cigi3_entity_control_alpha, tvb, offset, 1, cigi_byte_order);
4260     offset += 2;
4261
4262     proto_tree_add_item(tree, hf_cigi3_entity_control_entity_type, tvb, offset, 2, cigi_byte_order);
4263     offset += 2;
4264
4265     proto_tree_add_item(tree, hf_cigi3_entity_control_parent_id, tvb, offset, 2, cigi_byte_order);
4266     offset += 2;
4267
4268     proto_tree_add_item(tree, hf_cigi3_entity_control_roll, tvb, offset, 4, cigi_byte_order);
4269     offset += 4;
4270
4271     proto_tree_add_item(tree, hf_cigi3_entity_control_pitch, tvb, offset, 4, cigi_byte_order);
4272     offset += 4;
4273
4274     proto_tree_add_item(tree, hf_cigi3_entity_control_yaw, tvb, offset, 4, cigi_byte_order);
4275     offset += 4;
4276
4277     proto_tree_add_item(tree, hf_cigi3_entity_control_lat_xoff, tvb, offset, 8, cigi_byte_order);
4278     offset += 8;
4279
4280     proto_tree_add_item(tree, hf_cigi3_entity_control_lon_yoff, tvb, offset, 8, cigi_byte_order);
4281     offset += 8;
4282
4283     proto_tree_add_item(tree, hf_cigi3_entity_control_alt_zoff, tvb, offset, 8, cigi_byte_order);
4284     offset += 8;
4285
4286     return offset;
4287 }
4288
4289 /* CIGI3_3 Entity Control */
4290 static gint
4291 cigi3_3_add_entity_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4292 {
4293     proto_tree_add_item(tree, hf_cigi3_3_entity_control_entity_id, tvb, offset, 2, cigi_byte_order);
4294     offset += 2;
4295
4296     proto_tree_add_item(tree, hf_cigi3_3_entity_control_entity_state, tvb, offset, 1, cigi_byte_order);
4297     proto_tree_add_item(tree, hf_cigi3_3_entity_control_attach_state, tvb, offset, 1, cigi_byte_order);
4298     proto_tree_add_item(tree, hf_cigi3_3_entity_control_collision_detection_request, tvb, offset, 1, cigi_byte_order);
4299     proto_tree_add_item(tree, hf_cigi3_3_entity_control_inherit_alpha, tvb, offset, 1, cigi_byte_order);
4300     proto_tree_add_item(tree, hf_cigi3_3_entity_control_ground_ocean_clamp, tvb, offset, 1, cigi_byte_order);
4301     offset++;
4302
4303     proto_tree_add_item(tree, hf_cigi3_3_entity_control_animation_direction, tvb, offset, 1, cigi_byte_order);
4304     proto_tree_add_item(tree, hf_cigi3_3_entity_control_animation_loop_mode, tvb, offset, 1, cigi_byte_order);
4305     proto_tree_add_item(tree, hf_cigi3_3_entity_control_animation_state, tvb, offset, 1, cigi_byte_order);
4306     proto_tree_add_item(tree, hf_cigi3_3_entity_control_extrapolation_enable, tvb, offset, 1, cigi_byte_order);
4307     offset++;
4308
4309     proto_tree_add_item(tree, hf_cigi3_3_entity_control_alpha, tvb, offset, 1, cigi_byte_order);
4310     offset += 2;
4311
4312     proto_tree_add_item(tree, hf_cigi3_3_entity_control_entity_type, tvb, offset, 2, cigi_byte_order);
4313     offset += 2;
4314
4315     proto_tree_add_item(tree, hf_cigi3_3_entity_control_parent_id, tvb, offset, 2, cigi_byte_order);
4316     offset += 2;
4317
4318     proto_tree_add_item(tree, hf_cigi3_3_entity_control_roll, tvb, offset, 4, cigi_byte_order);
4319     offset += 4;
4320
4321     proto_tree_add_item(tree, hf_cigi3_3_entity_control_pitch, tvb, offset, 4, cigi_byte_order);
4322     offset += 4;
4323
4324     proto_tree_add_item(tree, hf_cigi3_3_entity_control_yaw, tvb, offset, 4, cigi_byte_order);
4325     offset += 4;
4326
4327     proto_tree_add_item(tree, hf_cigi3_3_entity_control_lat_xoff, tvb, offset, 8, cigi_byte_order);
4328     offset += 8;
4329
4330     proto_tree_add_item(tree, hf_cigi3_3_entity_control_lon_yoff, tvb, offset, 8, cigi_byte_order);
4331     offset += 8;
4332
4333     proto_tree_add_item(tree, hf_cigi3_3_entity_control_alt_zoff, tvb, offset, 8, cigi_byte_order);
4334     offset += 8;
4335
4336     return offset;
4337 }
4338
4339 /* CIGI3 Conformal Clamped Entity Control */
4340 static gint
4341 cigi3_add_conformal_clamped_entity_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4342 {
4343     proto_tree_add_item(tree, hf_cigi3_conformal_clamped_entity_control_entity_id, tvb, offset, 2, cigi_byte_order);
4344     offset += 2;
4345
4346     proto_tree_add_item(tree, hf_cigi3_conformal_clamped_entity_control_yaw, tvb, offset, 4, cigi_byte_order);
4347     offset += 4;
4348
4349     proto_tree_add_item(tree, hf_cigi3_conformal_clamped_entity_control_lat, tvb, offset, 8, cigi_byte_order);
4350     offset += 8;
4351
4352     proto_tree_add_item(tree, hf_cigi3_conformal_clamped_entity_control_lon, tvb, offset, 8, cigi_byte_order);
4353     offset += 8;
4354
4355     return offset;
4356 }
4357
4358 /* CIGI3 Component Control */
4359 static gint
4360 cigi3_add_component_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4361 {
4362     proto_tree_add_item(tree, hf_cigi3_component_control_component_id, tvb, offset, 2, cigi_byte_order);
4363     offset += 2;
4364
4365     proto_tree_add_item(tree, hf_cigi3_component_control_instance_id, tvb, offset, 2, cigi_byte_order);
4366     offset += 2;
4367
4368     proto_tree_add_item(tree, hf_cigi3_component_control_component_class, tvb, offset, 1, cigi_byte_order);
4369     offset++;
4370
4371     proto_tree_add_item(tree, hf_cigi3_component_control_component_state, tvb, offset, 1, cigi_byte_order);
4372     offset++;
4373
4374     proto_tree_add_item(tree, hf_cigi3_component_control_data_1, tvb, offset, 4, cigi_byte_order);
4375     offset += 4;
4376
4377     proto_tree_add_item(tree, hf_cigi3_component_control_data_2, tvb, offset, 4, cigi_byte_order);
4378     offset += 4;
4379
4380     proto_tree_add_item(tree, hf_cigi3_component_control_data_3, tvb, offset, 4, cigi_byte_order);
4381     offset += 4;
4382
4383     proto_tree_add_item(tree, hf_cigi3_component_control_data_4, tvb, offset, 4, cigi_byte_order);
4384     offset += 4;
4385
4386     proto_tree_add_item(tree, hf_cigi3_component_control_data_5, tvb, offset, 4, cigi_byte_order);
4387     offset += 4;
4388
4389     proto_tree_add_item(tree, hf_cigi3_component_control_data_6, tvb, offset, 4, cigi_byte_order);
4390     offset += 4;
4391
4392     return offset;
4393 }
4394
4395 /* CIGI3_3 Component Control */
4396 static gint
4397 cigi3_3_add_component_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4398 {
4399     proto_tree_add_item(tree, hf_cigi3_3_component_control_component_id, tvb, offset, 2, cigi_byte_order);
4400     offset += 2;
4401
4402     proto_tree_add_item(tree, hf_cigi3_3_component_control_instance_id, tvb, offset, 2, cigi_byte_order);
4403     offset += 2;
4404
4405     proto_tree_add_item(tree, hf_cigi3_3_component_control_component_class, tvb, offset, 1, cigi_byte_order);
4406     offset++;
4407
4408     proto_tree_add_item(tree, hf_cigi3_3_component_control_component_state, tvb, offset, 1, cigi_byte_order);
4409     offset++;
4410
4411     proto_tree_add_item(tree, hf_cigi3_3_component_control_data_1, tvb, offset, 4, cigi_byte_order);
4412     offset += 4;
4413
4414     proto_tree_add_item(tree, hf_cigi3_3_component_control_data_2, tvb, offset, 4, cigi_byte_order);
4415     offset += 4;
4416
4417     proto_tree_add_item(tree, hf_cigi3_3_component_control_data_3, tvb, offset, 4, cigi_byte_order);
4418     offset += 4;
4419
4420     proto_tree_add_item(tree, hf_cigi3_3_component_control_data_4, tvb, offset, 4, cigi_byte_order);
4421     offset += 4;
4422
4423     proto_tree_add_item(tree, hf_cigi3_3_component_control_data_5, tvb, offset, 4, cigi_byte_order);
4424     offset += 4;
4425
4426     proto_tree_add_item(tree, hf_cigi3_3_component_control_data_6, tvb, offset, 4, cigi_byte_order);
4427     offset += 4;
4428
4429     return offset;
4430 }
4431
4432 /* CIGI3 Short Component Control */
4433 static gint
4434 cigi3_add_short_component_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4435 {
4436     proto_tree_add_item(tree, hf_cigi3_short_component_control_component_id, tvb, offset, 2, cigi_byte_order);
4437     offset += 2;
4438
4439     proto_tree_add_item(tree, hf_cigi3_short_component_control_instance_id, tvb, offset, 2, cigi_byte_order);
4440     offset += 2;
4441
4442     proto_tree_add_item(tree, hf_cigi3_short_component_control_component_class, tvb, offset, 1, cigi_byte_order);
4443     offset++;
4444
4445     proto_tree_add_item(tree, hf_cigi3_short_component_control_component_state, tvb, offset, 1, cigi_byte_order);
4446     offset++;
4447
4448     proto_tree_add_item(tree, hf_cigi3_short_component_control_data_1, tvb, offset, 4, cigi_byte_order);
4449     offset += 4;
4450
4451     proto_tree_add_item(tree, hf_cigi3_short_component_control_data_2, tvb, offset, 4, cigi_byte_order);
4452     offset += 4;
4453
4454     return offset;
4455 }
4456
4457 /* CIGI3_3 Short Component Control */
4458 static gint
4459 cigi3_3_add_short_component_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4460 {
4461     proto_tree_add_item(tree, hf_cigi3_3_short_component_control_component_id, tvb, offset, 2, cigi_byte_order);
4462     offset += 2;
4463
4464     proto_tree_add_item(tree, hf_cigi3_3_short_component_control_instance_id, tvb, offset, 2, cigi_byte_order);
4465     offset += 2;
4466
4467     proto_tree_add_item(tree, hf_cigi3_3_short_component_control_component_class, tvb, offset, 1, cigi_byte_order);
4468     offset++;
4469
4470     proto_tree_add_item(tree, hf_cigi3_3_short_component_control_component_state, tvb, offset, 1, cigi_byte_order);
4471     offset++;
4472
4473     proto_tree_add_item(tree, hf_cigi3_3_short_component_control_data_1, tvb, offset, 4, cigi_byte_order);
4474     offset += 4;
4475
4476     proto_tree_add_item(tree, hf_cigi3_3_short_component_control_data_2, tvb, offset, 4, cigi_byte_order);
4477     offset += 4;
4478
4479     return offset;
4480 }
4481
4482 /* CIGI3 Articulated Part Control */
4483 static gint
4484 cigi3_add_articulated_part_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4485 {
4486     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_entity_id, tvb, offset, 2, cigi_byte_order);
4487     offset += 2;
4488
4489     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_part_id, tvb, offset, 1, cigi_byte_order);
4490     offset++;
4491
4492     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_part_enable, tvb, offset, 1, cigi_byte_order);
4493     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_xoff_enable, tvb, offset, 1, cigi_byte_order);
4494     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_yoff_enable, tvb, offset, 1, cigi_byte_order);
4495     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_zoff_enable, tvb, offset, 1, cigi_byte_order);
4496     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_roll_enable, tvb, offset, 1, cigi_byte_order);
4497     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_pitch_enable, tvb, offset, 1, cigi_byte_order);
4498     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_yaw_enable, tvb, offset, 1, cigi_byte_order);
4499     offset += 3;
4500
4501     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_xoff, tvb, offset, 4, cigi_byte_order);
4502     offset += 4;
4503
4504     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_yoff, tvb, offset, 4, cigi_byte_order);
4505     offset += 4;
4506
4507     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_zoff, tvb, offset, 4, cigi_byte_order);
4508     offset += 4;
4509
4510     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_roll, tvb, offset, 4, cigi_byte_order);
4511     offset += 4;
4512
4513     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_pitch, tvb, offset, 4, cigi_byte_order);
4514     offset += 4;
4515
4516     proto_tree_add_item(tree, hf_cigi3_articulated_part_control_yaw, tvb, offset, 4, cigi_byte_order);
4517     offset += 4;
4518
4519     return offset;
4520 }
4521
4522 /* CIGI3 Short Articulated Part Control */
4523 static gint
4524 cigi3_add_short_articulated_part_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4525 {
4526     proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_entity_id, tvb, offset, 2, cigi_byte_order);
4527     offset += 2;
4528
4529     proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_part_id_1, tvb, offset, 1, cigi_byte_order);
4530     offset++;
4531
4532     proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_part_id_2, tvb, offset, 1, cigi_byte_order);
4533     offset++;
4534
4535     proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_dof_select_1, tvb, offset, 1, cigi_byte_order);
4536     proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_dof_select_2, tvb, offset, 1, cigi_byte_order);
4537     proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_part_enable_1, tvb, offset, 1, cigi_byte_order);
4538     proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_part_enable_2, tvb, offset, 1, cigi_byte_order);
4539     offset += 2;
4540
4541     proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_dof_1, tvb, offset, 4, cigi_byte_order);
4542     offset += 4;
4543
4544     proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_dof_2, tvb, offset, 4, cigi_byte_order);
4545     offset += 4;
4546
4547     return offset;
4548 }
4549
4550 /* CIGI3 Rate Control */
4551 static gint
4552 cigi3_add_rate_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4553 {
4554     proto_tree_add_item(tree, hf_cigi3_rate_control_entity_id, tvb, offset, 2, cigi_byte_order);
4555     offset += 2;
4556
4557     proto_tree_add_item(tree, hf_cigi3_rate_control_part_id, tvb, offset, 1, cigi_byte_order);
4558     offset++;
4559
4560     proto_tree_add_item(tree, hf_cigi3_rate_control_apply_to_part, tvb, offset, 1, cigi_byte_order);
4561     offset += 3;
4562
4563     proto_tree_add_item(tree, hf_cigi3_rate_control_x_rate, tvb, offset, 4, cigi_byte_order);
4564     offset += 4;
4565
4566     proto_tree_add_item(tree, hf_cigi3_rate_control_y_rate, tvb, offset, 4, cigi_byte_order);
4567     offset += 4;
4568
4569     proto_tree_add_item(tree, hf_cigi3_rate_control_z_rate, tvb, offset, 4, cigi_byte_order);
4570     offset += 4;
4571
4572     proto_tree_add_item(tree, hf_cigi3_rate_control_roll_rate, tvb, offset, 4, cigi_byte_order);
4573     offset += 4;
4574
4575     proto_tree_add_item(tree, hf_cigi3_rate_control_pitch_rate, tvb, offset, 4, cigi_byte_order);
4576     offset += 4;
4577
4578     proto_tree_add_item(tree, hf_cigi3_rate_control_yaw_rate, tvb, offset, 4, cigi_byte_order);
4579     offset += 4;
4580
4581     return offset;
4582 }
4583
4584 /* CIGI3_2 Rate Control */
4585 static gint
4586 cigi3_2_add_rate_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4587 {
4588     proto_tree_add_item(tree, hf_cigi3_2_rate_control_entity_id, tvb, offset, 2, cigi_byte_order);
4589     offset += 2;
4590
4591     proto_tree_add_item(tree, hf_cigi3_2_rate_control_part_id, tvb, offset, 1, cigi_byte_order);
4592     offset++;
4593
4594     proto_tree_add_item(tree, hf_cigi3_2_rate_control_apply_to_part, tvb, offset, 1, cigi_byte_order);
4595     proto_tree_add_item(tree, hf_cigi3_2_rate_control_coordinate_system, tvb, offset, 1, cigi_byte_order);
4596     offset += 3;
4597
4598     proto_tree_add_item(tree, hf_cigi3_2_rate_control_x_rate, tvb, offset, 4, cigi_byte_order);
4599     offset += 4;
4600
4601     proto_tree_add_item(tree, hf_cigi3_2_rate_control_y_rate, tvb, offset, 4, cigi_byte_order);
4602     offset += 4;
4603
4604     proto_tree_add_item(tree, hf_cigi3_2_rate_control_z_rate, tvb, offset, 4, cigi_byte_order);
4605     offset += 4;
4606
4607     proto_tree_add_item(tree, hf_cigi3_2_rate_control_roll_rate, tvb, offset, 4, cigi_byte_order);
4608     offset += 4;
4609
4610     proto_tree_add_item(tree, hf_cigi3_2_rate_control_pitch_rate, tvb, offset, 4, cigi_byte_order);
4611     offset += 4;
4612
4613     proto_tree_add_item(tree, hf_cigi3_2_rate_control_yaw_rate, tvb, offset, 4, cigi_byte_order);
4614     offset += 4;
4615
4616     return offset;
4617 }
4618
4619 /* CIGI3 Celestial Sphere Control */
4620 static gint
4621 cigi3_add_celestial_sphere_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4622 {
4623     proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_hour, tvb, offset, 1, cigi_byte_order);
4624     offset++;
4625
4626     proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_minute, tvb, offset, 1, cigi_byte_order);
4627     offset++;
4628
4629     proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_ephemeris_enable, tvb, offset, 1, cigi_byte_order);
4630     proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_sun_enable, tvb, offset, 1, cigi_byte_order);
4631     proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_moon_enable, tvb, offset, 1, cigi_byte_order);
4632     proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_star_enable, tvb, offset, 1, cigi_byte_order);
4633     proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_date_time_valid, tvb, offset, 1, cigi_byte_order);
4634     offset += 4;
4635
4636     proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_date, tvb, offset, 4, cigi_byte_order);
4637     offset += 4;
4638
4639     proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_star_intensity, tvb, offset, 4, cigi_byte_order);
4640     offset += 4;
4641
4642     return offset;
4643 }
4644
4645 /* CIGI3 Atmosphere Control */
4646 static gint
4647 cigi3_add_atmosphere_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4648 {
4649     proto_tree_add_item(tree, hf_cigi3_atmosphere_control_atmospheric_model_enable, tvb, offset, 1, cigi_byte_order);
4650     offset++;
4651
4652     proto_tree_add_item(tree, hf_cigi3_atmosphere_control_humidity, tvb, offset, 1, cigi_byte_order);
4653     offset++;
4654
4655     proto_tree_add_item(tree, hf_cigi3_atmosphere_control_air_temp, tvb, offset, 4, cigi_byte_order);
4656     offset += 4;
4657
4658     proto_tree_add_item(tree, hf_cigi3_atmosphere_control_visibility_range, tvb, offset, 4, cigi_byte_order);
4659     offset += 4;
4660
4661     proto_tree_add_item(tree, hf_cigi3_atmosphere_control_horiz_wind, tvb, offset, 4, cigi_byte_order);
4662     offset += 4;
4663
4664     proto_tree_add_item(tree, hf_cigi3_atmosphere_control_vert_wind, tvb, offset, 4, cigi_byte_order);
4665     offset += 4;
4666
4667     proto_tree_add_item(tree, hf_cigi3_atmosphere_control_wind_direction, tvb, offset, 4, cigi_byte_order);
4668     offset += 4;
4669
4670     proto_tree_add_item(tree, hf_cigi3_atmosphere_control_barometric_pressure, tvb, offset, 4, cigi_byte_order);
4671     offset += 8;
4672
4673     return offset;
4674 }
4675
4676 /* CIGI3 Environmental Region Control */
4677 static gint
4678 cigi3_add_environmental_region_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4679 {
4680     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_region_id, tvb, offset, 2, cigi_byte_order);
4681     offset += 2;
4682
4683     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_region_state, tvb, offset, 1, cigi_byte_order);
4684     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_merge_weather, tvb, offset, 1, cigi_byte_order);
4685     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_merge_aerosol, tvb, offset, 1, cigi_byte_order);
4686     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_merge_maritime, tvb, offset, 1, cigi_byte_order);
4687     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_merge_terrestrial, tvb, offset, 1, cigi_byte_order);
4688     offset += 4;
4689
4690     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_lat, tvb, offset, 8, cigi_byte_order);
4691     offset += 8;
4692
4693     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_lon, tvb, offset, 8, cigi_byte_order);
4694     offset += 8;
4695
4696     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_size_x, tvb, offset, 4, cigi_byte_order);
4697     offset += 4;
4698
4699     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_size_y, tvb, offset, 4, cigi_byte_order);
4700     offset += 4;
4701
4702     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_corner_radius, tvb, offset, 4, cigi_byte_order);
4703     offset += 4;
4704
4705     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_rotation, tvb, offset, 4, cigi_byte_order);
4706     offset += 4;
4707
4708     proto_tree_add_item(tree, hf_cigi3_environmental_region_control_transition_perimeter, tvb, offset, 4, cigi_byte_order);
4709     offset += 8;
4710
4711     return offset;
4712 }
4713
4714 /* CIGI3 Weather Control */
4715 static gint
4716 cigi3_add_weather_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4717 {
4718     proto_tree_add_item(tree, hf_cigi3_weather_control_entity_region_id, tvb, offset, 2, cigi_byte_order);
4719     offset += 2;
4720
4721     proto_tree_add_item(tree, hf_cigi3_weather_control_layer_id, tvb, offset, 1, cigi_byte_order);
4722     offset++;
4723
4724     proto_tree_add_item(tree, hf_cigi3_weather_control_humidity, tvb, offset, 1, cigi_byte_order);
4725     offset++;
4726
4727     proto_tree_add_item(tree, hf_cigi3_weather_control_weather_enable, tvb, offset, 1, cigi_byte_order);
4728     proto_tree_add_item(tree, hf_cigi3_weather_control_scud_enable, tvb, offset, 1, cigi_byte_order);
4729     proto_tree_add_item(tree, hf_cigi3_weather_control_random_winds_enable, tvb, offset, 1, cigi_byte_order);
4730     proto_tree_add_item(tree, hf_cigi3_weather_control_random_lightning_enable, tvb, offset, 1, cigi_byte_order);
4731     proto_tree_add_item(tree, hf_cigi3_weather_control_cloud_type, tvb, offset, 1, cigi_byte_order);
4732     offset++;
4733
4734     proto_tree_add_item(tree, hf_cigi3_weather_control_scope, tvb, offset, 1, cigi_byte_order);
4735     proto_tree_add_item(tree, hf_cigi3_weather_control_severity, tvb, offset, 1, cigi_byte_order);
4736     offset++;
4737
4738     proto_tree_add_item(tree, hf_cigi3_weather_control_air_temp, tvb, offset, 4, cigi_byte_order);
4739     offset += 4;
4740
4741     proto_tree_add_item(tree, hf_cigi3_weather_control_visibility_range, tvb, offset, 4, cigi_byte_order);
4742     offset += 4;
4743
4744     proto_tree_add_item(tree, hf_cigi3_weather_control_scud_frequency, tvb, offset, 4, cigi_byte_order);
4745     offset += 4;
4746
4747     proto_tree_add_item(tree, hf_cigi3_weather_control_coverage, tvb, offset, 4, cigi_byte_order);
4748     offset += 4;
4749
4750     proto_tree_add_item(tree, hf_cigi3_weather_control_base_elevation, tvb, offset, 4, cigi_byte_order);
4751     offset += 4;
4752
4753     proto_tree_add_item(tree, hf_cigi3_weather_control_thickness, tvb, offset, 4, cigi_byte_order);
4754     offset += 4;
4755
4756     proto_tree_add_item(tree, hf_cigi3_weather_control_transition_band, tvb, offset, 4, cigi_byte_order);
4757     offset += 4;
4758
4759     proto_tree_add_item(tree, hf_cigi3_weather_control_horiz_wind, tvb, offset, 4, cigi_byte_order);
4760     offset += 4;
4761
4762     proto_tree_add_item(tree, hf_cigi3_weather_control_vert_wind, tvb, offset, 4, cigi_byte_order);
4763     offset += 4;
4764
4765     proto_tree_add_item(tree, hf_cigi3_weather_control_wind_direction, tvb, offset, 4, cigi_byte_order);
4766     offset += 4;
4767
4768     proto_tree_add_item(tree, hf_cigi3_weather_control_barometric_pressure, tvb, offset, 4, cigi_byte_order);
4769     offset += 4;
4770
4771     proto_tree_add_item(tree, hf_cigi3_weather_control_aerosol_concentration, tvb, offset, 4, cigi_byte_order);
4772     offset += 4;
4773
4774     return offset;
4775 }
4776
4777 /* CIGI3 Maritime Surface Conditions Control */
4778 static gint
4779 cigi3_add_maritime_surface_conditions_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4780 {
4781     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_entity_region_id, tvb, offset, 2, cigi_byte_order);
4782     offset += 2;
4783
4784     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_surface_conditions_enable, tvb, offset, 1, cigi_byte_order);
4785     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_whitecap_enable, tvb, offset, 1, cigi_byte_order);
4786     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_scope, tvb, offset, 1, cigi_byte_order);
4787     offset += 4;
4788
4789     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_sea_surface_height, tvb, offset, 4, cigi_byte_order);
4790     offset += 4;
4791
4792     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_surface_water_temp, tvb, offset, 4, cigi_byte_order);
4793     offset += 4;
4794
4795     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_surface_clarity, tvb, offset, 4, cigi_byte_order);
4796     offset += 8;
4797
4798     return offset;
4799 }
4800
4801 /* CIGI3 Wave Control */
4802 static gint
4803 cigi3_add_wave_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4804 {
4805     proto_tree_add_item(tree, hf_cigi3_wave_control_entity_region_id, tvb, offset, 2, cigi_byte_order);
4806     offset += 2;
4807
4808     proto_tree_add_item(tree, hf_cigi3_wave_control_wave_id, tvb, offset, 1, cigi_byte_order);
4809     offset++;
4810
4811     proto_tree_add_item(tree, hf_cigi3_wave_control_wave_enable, tvb, offset, 1, cigi_byte_order);
4812     proto_tree_add_item(tree, hf_cigi3_wave_control_scope, tvb, offset, 1, cigi_byte_order);
4813     proto_tree_add_item(tree, hf_cigi3_wave_control_breaker_type, tvb, offset, 1, cigi_byte_order);
4814     offset += 3;
4815
4816     proto_tree_add_item(tree, hf_cigi3_wave_control_height, tvb, offset, 4, cigi_byte_order);
4817     offset += 4;
4818
4819     proto_tree_add_item(tree, hf_cigi3_wave_control_wavelength, tvb, offset, 4, cigi_byte_order);
4820     offset += 4;
4821
4822     proto_tree_add_item(tree, hf_cigi3_wave_control_period, tvb, offset, 4, cigi_byte_order);
4823     offset += 4;
4824
4825     proto_tree_add_item(tree, hf_cigi3_wave_control_direction, tvb, offset, 4, cigi_byte_order);
4826     offset += 4;
4827
4828     proto_tree_add_item(tree, hf_cigi3_wave_control_phase_offset, tvb, offset, 4, cigi_byte_order);
4829     offset += 4;
4830
4831     proto_tree_add_item(tree, hf_cigi3_wave_control_leading, tvb, offset, 4, cigi_byte_order);
4832     offset += 4;
4833
4834     return offset;
4835 }
4836
4837 /* CIGI3 Terrestrial Surface Conditions Control */
4838 static gint
4839 cigi3_add_terrestrial_surface_conditions_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4840 {
4841     proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_control_entity_region_id, tvb, offset, 2, cigi_byte_order);
4842     offset += 2;
4843
4844     proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_control_surface_condition_id, tvb, offset, 2, cigi_byte_order);
4845     offset += 2;
4846
4847     proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_control_surface_condition_enable, tvb, offset, 1, cigi_byte_order);
4848     proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_control_scope, tvb, offset, 1, cigi_byte_order);
4849     proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_control_severity, tvb, offset, 1, cigi_byte_order);
4850     offset++;
4851
4852     proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_control_coverage, tvb, offset, 1, cigi_byte_order);
4853     offset++;
4854
4855     return offset;
4856 }
4857
4858 /* CIGI3 View Control */
4859 static gint
4860 cigi3_add_view_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4861 {
4862     proto_tree_add_item(tree, hf_cigi3_view_control_view_id, tvb, offset, 2, cigi_byte_order);
4863     offset += 2;
4864
4865     proto_tree_add_item(tree, hf_cigi3_view_control_group_id, tvb, offset, 1, cigi_byte_order);
4866     offset++;
4867
4868     proto_tree_add_item(tree, hf_cigi3_view_control_xoff_enable, tvb, offset, 1, cigi_byte_order);
4869     proto_tree_add_item(tree, hf_cigi3_view_control_yoff_enable, tvb, offset, 1, cigi_byte_order);
4870     proto_tree_add_item(tree, hf_cigi3_view_control_zoff_enable, tvb, offset, 1, cigi_byte_order);
4871     proto_tree_add_item(tree, hf_cigi3_view_control_roll_enable, tvb, offset, 1, cigi_byte_order);
4872     proto_tree_add_item(tree, hf_cigi3_view_control_pitch_enable, tvb, offset, 1, cigi_byte_order);
4873     proto_tree_add_item(tree, hf_cigi3_view_control_yaw_enable, tvb, offset, 1, cigi_byte_order);
4874     offset++;
4875
4876     proto_tree_add_item(tree, hf_cigi3_view_control_entity_id, tvb, offset, 2, cigi_byte_order);
4877     offset += 2;
4878
4879     proto_tree_add_item(tree, hf_cigi3_view_control_xoff, tvb, offset, 4, cigi_byte_order);
4880     offset += 4;
4881
4882     proto_tree_add_item(tree, hf_cigi3_view_control_yoff, tvb, offset, 4, cigi_byte_order);
4883     offset += 4;
4884
4885     proto_tree_add_item(tree, hf_cigi3_view_control_zoff, tvb, offset, 4, cigi_byte_order);
4886     offset += 4;
4887
4888     proto_tree_add_item(tree, hf_cigi3_view_control_roll, tvb, offset, 4, cigi_byte_order);
4889     offset += 4;
4890
4891     proto_tree_add_item(tree, hf_cigi3_view_control_pitch, tvb, offset, 4, cigi_byte_order);
4892     offset += 4;
4893
4894     proto_tree_add_item(tree, hf_cigi3_view_control_yaw, tvb, offset, 4, cigi_byte_order);
4895     offset += 4;
4896
4897     return offset;
4898 }
4899
4900 /* CIGI3 Sensor Control */
4901 static gint
4902 cigi3_add_sensor_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4903 {
4904     proto_tree_add_item(tree, hf_cigi3_sensor_control_view_id, tvb, offset, 2, cigi_byte_order);
4905     offset += 2;
4906
4907     proto_tree_add_item(tree, hf_cigi3_sensor_control_sensor_id, tvb, offset, 1, cigi_byte_order);
4908     offset++;
4909
4910     proto_tree_add_item(tree, hf_cigi3_sensor_control_sensor_on_off, tvb, offset, 1, cigi_byte_order);
4911     proto_tree_add_item(tree, hf_cigi3_sensor_control_polarity, tvb, offset, 1, cigi_byte_order);
4912     proto_tree_add_item(tree, hf_cigi3_sensor_control_line_dropout_enable, tvb, offset, 1, cigi_byte_order);
4913     proto_tree_add_item(tree, hf_cigi3_sensor_control_auto_gain, tvb, offset, 1, cigi_byte_order);
4914     proto_tree_add_item(tree, hf_cigi3_sensor_control_track_white_black, tvb, offset, 1, cigi_byte_order);
4915     proto_tree_add_item(tree, hf_cigi3_sensor_control_track_mode, tvb, offset, 1, cigi_byte_order);
4916     offset++;
4917
4918     proto_tree_add_item(tree, hf_cigi3_sensor_control_response_type, tvb, offset, 1, cigi_byte_order);
4919     offset += 2;
4920
4921     proto_tree_add_item(tree, hf_cigi3_sensor_control_gain, tvb, offset, 4, cigi_byte_order);
4922     offset += 4;
4923
4924     proto_tree_add_item(tree, hf_cigi3_sensor_control_level, tvb, offset, 4, cigi_byte_order);
4925     offset += 4;
4926
4927     proto_tree_add_item(tree, hf_cigi3_sensor_control_ac_coupling, tvb, offset, 4, cigi_byte_order);
4928     offset += 4;
4929
4930     proto_tree_add_item(tree, hf_cigi3_sensor_control_noise, tvb, offset, 4, cigi_byte_order);
4931     offset += 4;
4932
4933     return offset;
4934 }
4935
4936 /* CIGI3 Motion Tracker Control */
4937 static gint
4938 cigi3_add_motion_tracker_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
4939 {
4940     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_view_group_id, tvb, offset, 2, cigi_byte_order);
4941     offset += 2;
4942
4943     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_tracker_id, tvb, offset, 1, cigi_byte_order);
4944     offset++;
4945
4946     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_tracker_enable, tvb, offset, 1, cigi_byte_order);
4947     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_boresight_enable, tvb, offset, 1, cigi_byte_order);
4948     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_x_enable, tvb, offset, 1, cigi_byte_order);
4949     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_y_enable, tvb, offset, 1, cigi_byte_order);
4950     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_z_enable, tvb, offset, 1, cigi_byte_order);
4951     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_roll_enable, tvb, offset, 1, cigi_byte_order);
4952     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_pitch_enable, tvb, offset, 1, cigi_byte_order);
4953     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_yaw_enable, tvb, offset, 1, cigi_byte_order);
4954     offset++;
4955
4956     proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_view_group_select, tvb, offset, 1, cigi_byte_order);
4957     offset += 2;
4958
4959     return offset;
4960 }
4961
4962 /* CIGI3 Earth Reference Model Definition */
4963 static gint
4964 cigi3_add_earth_reference_model_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
4965 {
4966     proto_tree_add_item(tree, hf_cigi3_earth_reference_model_definition_erm_enable, tvb, offset, 1, cigi_byte_order);
4967     offset += 6;
4968
4969     proto_tree_add_item(tree, hf_cigi3_earth_reference_model_definition_equatorial_radius, tvb, offset, 8, cigi_byte_order);
4970     offset += 8;
4971
4972     proto_tree_add_item(tree, hf_cigi3_earth_reference_model_definition_flattening, tvb, offset, 8, cigi_byte_order);
4973     offset += 8;
4974
4975     return offset;
4976 }
4977
4978 /* CIGI3 Trajectory Definition */
4979 static gint
4980 cigi3_add_trajectory_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
4981 {
4982     proto_tree_add_item(tree, hf_cigi3_trajectory_definition_entity_id, tvb, offset, 2, cigi_byte_order);
4983     offset += 2;
4984
4985     proto_tree_add_item(tree, hf_cigi3_trajectory_definition_acceleration_x, tvb, offset, 4, cigi_byte_order);
4986     offset += 4;
4987
4988     proto_tree_add_item(tree, hf_cigi3_trajectory_definition_acceleration_y, tvb, offset, 4, cigi_byte_order);
4989     offset += 4;
4990
4991     proto_tree_add_item(tree, hf_cigi3_trajectory_definition_acceleration_z, tvb, offset, 4, cigi_byte_order);
4992     offset += 4;
4993
4994     proto_tree_add_item(tree, hf_cigi3_trajectory_definition_retardation_rate, tvb, offset, 4, cigi_byte_order);
4995     offset += 4;
4996
4997     proto_tree_add_item(tree, hf_cigi3_trajectory_definition_terminal_velocity, tvb, offset, 4, cigi_byte_order);
4998     offset += 4;
4999
5000     return offset;
5001 }
5002
5003 /* CIGI3 View Definition */
5004 static gint
5005 cigi3_add_view_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
5006 {
5007     proto_tree_add_item(tree, hf_cigi3_view_definition_view_id, tvb, offset, 2, cigi_byte_order);
5008     offset += 2;
5009
5010     proto_tree_add_item(tree, hf_cigi3_view_definition_group_id, tvb, offset, 1, cigi_byte_order);
5011     offset++;
5012
5013     proto_tree_add_item(tree, hf_cigi3_view_definition_near_enable, tvb, offset, 1, cigi_byte_order);
5014     proto_tree_add_item(tree, hf_cigi3_view_definition_far_enable, tvb, offset, 1, cigi_byte_order);
5015     proto_tree_add_item(tree, hf_cigi3_view_definition_left_enable, tvb, offset, 1, cigi_byte_order);
5016     proto_tree_add_item(tree, hf_cigi3_view_definition_right_enable, tvb, offset, 1, cigi_byte_order);
5017     proto_tree_add_item(tree, hf_cigi3_view_definition_top_enable, tvb, offset, 1, cigi_byte_order);
5018     proto_tree_add_item(tree, hf_cigi3_view_definition_bottom_enable, tvb, offset, 1, cigi_byte_order);
5019     proto_tree_add_item(tree, hf_cigi3_view_definition_mirror_mode, tvb, offset, 1, cigi_byte_order);
5020     offset++;
5021
5022     proto_tree_add_item(tree, hf_cigi3_view_definition_pixel_replication, tvb, offset, 1, cigi_byte_order);
5023     proto_tree_add_item(tree, hf_cigi3_view_definition_projection_type, tvb, offset, 1, cigi_byte_order);
5024     proto_tree_add_item(tree, hf_cigi3_view_definition_reorder, tvb, offset, 1, cigi_byte_order);
5025     proto_tree_add_item(tree, hf_cigi3_view_definition_view_type, tvb, offset, 1, cigi_byte_order);
5026     offset += 2;
5027
5028     proto_tree_add_item(tree, hf_cigi3_view_definition_near, tvb, offset, 4, cigi_byte_order);
5029     offset += 4;
5030
5031     proto_tree_add_item(tree, hf_cigi3_view_definition_far, tvb, offset, 4, cigi_byte_order);
5032     offset += 4;
5033
5034     proto_tree_add_item(tree, hf_cigi3_view_definition_left, tvb, offset, 4, cigi_byte_order);
5035     offset += 4;
5036
5037     proto_tree_add_item(tree, hf_cigi3_view_definition_right, tvb, offset, 4, cigi_byte_order);
5038     offset += 4;
5039
5040     proto_tree_add_item(tree, hf_cigi3_view_definition_top, tvb, offset, 4, cigi_byte_order);
5041     offset += 4;
5042
5043     proto_tree_add_item(tree, hf_cigi3_view_definition_bottom, tvb, offset, 4, cigi_byte_order);
5044     offset += 4;
5045
5046     return offset;
5047 }
5048
5049 /* CIGI3 Collision Detection Segment Definition */
5050 static gint
5051 cigi3_add_collision_detection_segment_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
5052 {
5053     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_entity_id, tvb, offset, 2, cigi_byte_order);
5054     offset += 2;
5055
5056     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_segment_id, tvb, offset, 1, cigi_byte_order);
5057     offset++;
5058
5059     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_segment_enable, tvb, offset, 1, cigi_byte_order);
5060     offset += 3;
5061
5062     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_x1, tvb, offset, 4, cigi_byte_order);
5063     offset += 4;
5064
5065     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_y1, tvb, offset, 4, cigi_byte_order);
5066     offset += 4;
5067
5068     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_z1, tvb, offset, 4, cigi_byte_order);
5069     offset += 4;
5070
5071     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_x2, tvb, offset, 4, cigi_byte_order);
5072     offset += 4;
5073
5074     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_y2, tvb, offset, 4, cigi_byte_order);
5075     offset += 4;
5076
5077     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_z2, tvb, offset, 4, cigi_byte_order);
5078     offset += 4;
5079
5080     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_material_mask, tvb, offset, 4, cigi_byte_order);
5081     offset += 8;
5082
5083     return offset;
5084 }
5085
5086 /* CIGI3 Collision Detection Volume Definition */
5087 static gint
5088 cigi3_add_collision_detection_volume_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
5089 {
5090     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_entity_id, tvb, offset, 2, cigi_byte_order);
5091     offset += 2;
5092
5093     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_volume_id, tvb, offset, 1, cigi_byte_order);
5094     offset++;
5095
5096     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_volume_enable, tvb, offset, 1, cigi_byte_order);
5097     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_volume_type, tvb, offset, 1, cigi_byte_order);
5098     offset += 3;
5099
5100     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_x, tvb, offset, 4, cigi_byte_order);
5101     offset += 4;
5102
5103     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_y, tvb, offset, 4, cigi_byte_order);
5104     offset += 4;
5105
5106     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_z, tvb, offset, 4, cigi_byte_order);
5107     offset += 4;
5108
5109     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_radius_height, tvb, offset, 4, cigi_byte_order);
5110     offset += 4;
5111
5112     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_width, tvb, offset, 4, cigi_byte_order);
5113     offset += 4;
5114
5115     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_depth, tvb, offset, 4, cigi_byte_order);
5116     offset += 4;
5117
5118     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_roll, tvb, offset, 4, cigi_byte_order);
5119     offset += 4;
5120
5121     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_pitch, tvb, offset, 4, cigi_byte_order);
5122     offset += 4;
5123
5124     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_yaw, tvb, offset, 4, cigi_byte_order);
5125     offset += 8;
5126
5127     return offset;
5128 }
5129
5130 /* CIGI3 HAT/HOT Request */
5131 static gint
5132 cigi3_add_hat_hot_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
5133 {
5134     proto_tree_add_item(tree, hf_cigi3_hat_hot_request_hat_hot_id, tvb, offset, 2, cigi_byte_order);
5135     offset += 2;
5136
5137     proto_tree_add_item(tree, hf_cigi3_hat_hot_request_type, tvb, offset, 1, cigi_byte_order);
5138     proto_tree_add_item(tree, hf_cigi3_hat_hot_request_coordinate_system, tvb, offset, 1, cigi_byte_order);
5139     offset += 2;
5140
5141     proto_tree_add_item(tree, hf_cigi3_hat_hot_request_entity_id, tvb, offset, 2, cigi_byte_order);
5142     offset += 2;
5143
5144     proto_tree_add_item(tree, hf_cigi3_hat_hot_request_lat_xoff, tvb, offset, 8, cigi_byte_order);
5145     offset += 8;
5146
5147     proto_tree_add_item(tree, hf_cigi3_hat_hot_request_lon_yoff, tvb, offset, 8, cigi_byte_order);
5148     offset += 8;
5149
5150     proto_tree_add_item(tree, hf_cigi3_hat_hot_request_alt_zoff, tvb, offset, 8, cigi_byte_order);
5151     offset += 8;
5152
5153     return offset;
5154 }
5155
5156 /* CIGI3_2 HAT/HOT Request */
5157 static gint
5158 cigi3_2_add_hat_hot_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
5159 {
5160     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_hat_hot_id, tvb, offset, 2, cigi_byte_order);
5161     offset += 2;
5162
5163     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_type, tvb, offset, 1, cigi_byte_order);
5164     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_coordinate_system, tvb, offset, 1, cigi_byte_order);
5165     offset++;
5166
5167     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_update_period, tvb, offset, 1, cigi_byte_order);
5168     offset++;
5169
5170     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_entity_id, tvb, offset, 2, cigi_byte_order);
5171     offset += 2;
5172
5173     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_lat_xoff, tvb, offset, 8, cigi_byte_order);
5174     offset += 8;
5175
5176     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_lon_yoff, tvb, offset, 8, cigi_byte_order);
5177     offset += 8;
5178
5179     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_alt_zoff, tvb, offset, 8, cigi_byte_order);
5180     offset += 8;
5181
5182     return offset;
5183 }
5184
5185 /* CIGI3 Line of Sight Segment Request */
5186 static gint
5187 cigi3_add_line_of_sight_segment_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
5188 {
5189     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_los_id, tvb, offset, 2, cigi_byte_order);
5190     offset += 2;
5191
5192     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_type, tvb, offset, 1, cigi_byte_order);
5193     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_source_coord, tvb, offset, 1, cigi_byte_order);
5194     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_destination_coord, tvb, offset, 1, cigi_byte_order);
5195     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_response_coord, tvb, offset, 1, cigi_byte_order);
5196     offset++;
5197
5198     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_alpha_threshold, tvb, offset, 1, cigi_byte_order);
5199     offset++;
5200
5201     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_entity_id, tvb, offset, 2, cigi_byte_order);
5202     offset += 2;
5203
5204     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_source_lat_xoff, tvb, offset, 8, cigi_byte_order);
5205     offset += 8;
5206
5207     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_source_lon_yoff, tvb, offset, 8, cigi_byte_order);
5208     offset += 8;
5209
5210     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_source_alt_zoff, tvb, offset, 8, cigi_byte_order);
5211     offset += 8;
5212
5213     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_destination_lat_xoff, tvb, offset, 8, cigi_byte_order);
5214     offset += 8;
5215
5216     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_destination_lon_yoff, tvb, offset, 8, cigi_byte_order);
5217     offset += 8;
5218
5219     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_destination_alt_zoff, tvb, offset, 8, cigi_byte_order);
5220     offset += 8;
5221
5222     proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_material_mask, tvb, offset, 4, cigi_byte_order);
5223     offset += 8;
5224
5225     return offset;
5226 }
5227
5228 /* CIGI3_2 Line of Sight Segment Request */
5229 static gint
5230 cigi3_2_add_line_of_sight_segment_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
5231 {
5232     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_los_id, tvb, offset, 2, cigi_byte_order);
5233     offset += 2;
5234
5235     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_type, tvb, offset, 1, cigi_byte_order);
5236     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_source_coord, tvb, offset, 1, cigi_byte_order);
5237     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_coord, tvb, offset, 1, cigi_byte_order);
5238     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_response_coord, tvb, offset, 1, cigi_byte_order);
5239     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_entity_id_valid, tvb, offset, 1, cigi_byte_order);
5240     offset++;
5241
5242     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_alpha_threshold, tvb, offset, 1, cigi_byte_order);
5243     offset++;
5244
5245     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_entity_id, tvb, offset, 2, cigi_byte_order);
5246     offset += 2;
5247
5248     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_source_lat_xoff, tvb, offset, 8, cigi_byte_order);
5249     offset += 8;
5250
5251     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_source_lon_yoff, tvb, offset, 8, cigi_byte_order);
5252     offset += 8;
5253
5254     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_source_alt_zoff, tvb, offset, 8, cigi_byte_order);
5255     offset += 8;
5256
5257     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_lat_xoff, tvb, offset, 8, cigi_byte_order);
5258     offset += 8;
5259
5260     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_lon_yoff, tvb, offset, 8, cigi_byte_order);
5261     offset += 8;
5262
5263     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_alt_zoff, tvb, offset, 8, cigi_byte_order);
5264     offset += 8;
5265
5266     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_material_mask, tvb, offset, 4, cigi_byte_order);
5267     offset += 4;
5268
5269     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_update_period, tvb, offset, 1, cigi_byte_order);
5270     offset += 2;
5271
5272     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_entity_id, tvb, offset, 2, cigi_byte_order);
5273     offset += 2;
5274
5275     return offset;
5276 }
5277
5278 /* CIGI3 Line of Sight Vector Request */
5279 static gint
5280 cigi3_add_line_of_sight_vector_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
5281 {
5282     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_los_id, tvb, offset, 2, cigi_byte_order);
5283     offset += 2;
5284
5285     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_type, tvb, offset, 1, cigi_byte_order);
5286     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_source_coord, tvb, offset, 1, cigi_byte_order);
5287     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_response_coord, tvb, offset, 1, cigi_byte_order);
5288     offset++;
5289
5290     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_alpha, tvb, offset, 1, cigi_byte_order);
5291     offset++;
5292
5293     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_entity_id, tvb, offset, 2, cigi_byte_order);
5294     offset += 2;
5295
5296     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_azimuth, tvb, offset, 4, cigi_byte_order);
5297     offset += 4;
5298
5299     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_elevation, tvb, offset, 4, cigi_byte_order);
5300     offset += 4;
5301
5302     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_min_range, tvb, offset, 4, cigi_byte_order);
5303     offset += 4;
5304
5305     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_max_range, tvb, offset, 4, cigi_byte_order);
5306     offset += 4;
5307
5308     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_source_lat_xoff, tvb, offset, 8, cigi_byte_order);
5309     offset += 8;
5310
5311     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_source_lon_yoff, tvb, offset, 8, cigi_byte_order);
5312     offset += 8;
5313
5314     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_source_alt_zoff, tvb, offset, 8, cigi_byte_order);
5315     offset += 8;
5316
5317     proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_material_mask, tvb, offset, 4, cigi_byte_order);
5318     offset += 8;
5319
5320     return offset;
5321 }
5322
5323 /* CIGI3_2 Line of Sight Vector Request */
5324 static gint
5325 cigi3_2_add_line_of_sight_vector_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
5326 {
5327     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_los_id, tvb, offset, 2, cigi_byte_order);
5328     offset += 2;
5329
5330     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_type, tvb, offset, 1, cigi_byte_order);
5331     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_source_coord, tvb, offset, 1, cigi_byte_order);
5332     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_response_coord, tvb, offset, 1, cigi_byte_order);
5333     offset++;
5334
5335     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_alpha, tvb, offset, 1, cigi_byte_order);
5336     offset++;
5337
5338     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_entity_id, tvb, offset, 2, cigi_byte_order);
5339     offset += 2;
5340
5341     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_azimuth, tvb, offset, 4, cigi_byte_order);
5342     offset += 4;
5343
5344     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_elevation, tvb, offset, 4, cigi_byte_order);
5345     offset += 4;
5346
5347     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_min_range, tvb, offset, 4, cigi_byte_order);
5348     offset += 4;
5349
5350     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_max_range, tvb, offset, 4, cigi_byte_order);
5351     offset += 4;
5352
5353     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_source_lat_xoff, tvb, offset, 8, cigi_byte_order);
5354     offset += 8;
5355
5356     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_source_lon_yoff, tvb, offset, 8, cigi_byte_order);
5357     offset += 8;
5358
5359     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_source_alt_zoff, tvb, offset, 8, cigi_byte_order);
5360     offset += 8;
5361
5362     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_material_mask, tvb, offset, 4, cigi_byte_order);
5363     offset += 4;
5364
5365     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_update_period, tvb, offset, 1, cigi_byte_order);
5366     offset += 4;
5367
5368     return offset;
5369 }
5370
5371 /* CIGI3 Position Request */
5372 static gint
5373 cigi3_add_position_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
5374 {
5375     proto_tree_add_item(tree, hf_cigi3_position_request_object_id, tvb, offset, 2, cigi_byte_order);
5376     offset += 2;
5377
5378     proto_tree_add_item(tree, hf_cigi3_position_request_part_id, tvb, offset, 1, cigi_byte_order);
5379     offset++;
5380
5381     proto_tree_add_item(tree, hf_cigi3_position_request_update_mode, tvb, offset, 1, cigi_byte_order);
5382     proto_tree_add_item(tree, hf_cigi3_position_request_object_class, tvb, offset, 1, cigi_byte_order);
5383     proto_tree_add_item(tree, hf_cigi3_position_request_coord_system, tvb, offset, 1, cigi_byte_order);
5384     offset += 3;
5385
5386     return offset;
5387 }
5388
5389 /* CIGI3 Environmental Conditions Request */
5390 static gint
5391 cigi3_add_environmental_conditions_request(tvbuff_t *tvb, proto_tree *tree, gint offset)
5392 {
5393     proto_tree_add_item(tree, hf_cigi3_environmental_conditions_request_type, tvb, offset, 1, cigi_byte_order);
5394     offset++;
5395
5396     proto_tree_add_item(tree, hf_cigi3_environmental_conditions_request_id, tvb, offset, 1, cigi_byte_order);
5397     offset += 5;;
5398
5399     proto_tree_add_item(tree, hf_cigi3_environmental_conditions_request_lat, tvb, offset, 8, cigi_byte_order);
5400     offset += 8;
5401
5402     proto_tree_add_item(tree, hf_cigi3_environmental_conditions_request_lon, tvb, offset, 8, cigi_byte_order);
5403     offset += 8;
5404
5405     proto_tree_add_item(tree, hf_cigi3_environmental_conditions_request_alt, tvb, offset, 8, cigi_byte_order);
5406     offset += 8;
5407
5408     return offset;
5409 }
5410
5411 /* CIGI3_3 Symbol Surface Definition */
5412 static gint
5413 cigi3_3_add_symbol_surface_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
5414 {
5415     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_surface_id, tvb, offset, 2, cigi_byte_order);
5416     offset += 2;
5417
5418     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_surface_state, tvb, offset, 1, cigi_byte_order);
5419     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_attach_type, tvb, offset, 1, cigi_byte_order);
5420     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_billboard, tvb, offset, 1, cigi_byte_order);
5421     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_perspective_growth_enable, tvb, offset, 1, cigi_byte_order);
5422     offset += 2;
5423
5424     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_entity_view_id, tvb, offset, 2, cigi_byte_order);
5425     offset += 2;
5426
5427     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_xoff_left, tvb, offset, 4, cigi_byte_order);
5428     offset += 4;
5429
5430     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_yoff_right, tvb, offset, 4, cigi_byte_order);
5431     offset += 4;
5432
5433     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_zoff_top, tvb, offset, 4, cigi_byte_order);
5434     offset += 4;
5435
5436     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_yaw_bottom, tvb, offset, 4, cigi_byte_order);
5437     offset += 4;
5438
5439     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_pitch, tvb, offset, 4, cigi_byte_order);
5440     offset += 4;
5441
5442     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_roll, tvb, offset, 4, cigi_byte_order);
5443     offset += 4;
5444
5445     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_width, tvb, offset, 4, cigi_byte_order);
5446     offset += 4;
5447
5448     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_height, tvb, offset, 4, cigi_byte_order);
5449     offset += 4;
5450
5451     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_min_u, tvb, offset, 4, cigi_byte_order);
5452     offset += 4;
5453
5454     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_max_u, tvb, offset, 4, cigi_byte_order);
5455     offset += 4;
5456
5457     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_min_v, tvb, offset, 4, cigi_byte_order);
5458     offset += 4;
5459
5460     proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_max_v, tvb, offset, 4, cigi_byte_order);
5461     offset += 4;
5462
5463     return offset;
5464 }
5465
5466 /* CIGI3_3 Symbol Text Definition */
5467 static gint
5468 cigi3_3_add_symbol_text_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
5469 {
5470     guint8 packet_size = 0;
5471
5472     packet_size = tvb_get_guint8(tvb, offset-1);
5473
5474     /* A symbol text definition packet cannot be less than 16 bytes. */
5475     if ( packet_size < 16 ) {
5476         THROW(ReportedBoundsError);
5477     }
5478
5479     proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_symbol_id, tvb, offset, 2, cigi_byte_order);
5480     offset += 2;
5481
5482     proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_alignment, tvb, offset, 1, cigi_byte_order);
5483     proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_orientation, tvb, offset, 1, cigi_byte_order);
5484     offset += 1;
5485
5486     proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_font_ident, tvb, offset, 1, cigi_byte_order);
5487     offset += 3;
5488
5489     proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_font_size, tvb, offset, 4, cigi_byte_order);
5490     offset += 4;
5491
5492     proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_text, tvb, offset, packet_size-12, cigi_byte_order);
5493     offset += packet_size-12;
5494
5495     return offset;
5496 }
5497
5498 /* CIGI3_3 Symbol Circle Definition */
5499 static gint
5500 cigi3_3_add_symbol_circle_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
5501 {
5502     guint8 packet_size = 0;
5503     int ncircles,c;
5504
5505     packet_size = tvb_get_guint8(tvb, offset-1);
5506
5507     /* A symbol text definition packet cannot be less than 16 bytes. */
5508     if ( packet_size < 16 ) {
5509         THROW(ReportedBoundsError);
5510     }
5511
5512     ncircles = (packet_size - 16) / 24;
5513
5514     proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_symbol_id, tvb, offset, 2, cigi_byte_order);
5515     offset += 2;
5516
5517     proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_drawing_style, tvb, offset, 1, cigi_byte_order);
5518     offset += 2;
5519
5520     proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_stipple_pattern, tvb, offset, 2, cigi_byte_order);
5521     offset += 2;
5522
5523     proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_line_width, tvb, offset, 4, cigi_byte_order);
5524     offset += 4;
5525
5526     proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_stipple_pattern_length, tvb, offset, 4, cigi_byte_order);
5527     offset += 4;
5528
5529     for (c = 0; c< ncircles; c++) {
5530         proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_center_u[c], tvb, offset, 4, cigi_byte_order);
5531         offset += 4;
5532
5533         proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_center_v[c], tvb, offset, 4, cigi_byte_order);
5534         offset += 4;
5535
5536         proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_radius[c], tvb, offset, 4, cigi_byte_order);
5537         offset += 4;
5538
5539         proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_inner_radius[c], tvb, offset, 4, cigi_byte_order);
5540         offset += 4;
5541
5542         proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_start_angle[c], tvb, offset, 4, cigi_byte_order);
5543         offset += 4;
5544
5545         proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_end_angle[c], tvb, offset, 4, cigi_byte_order);
5546         offset += 4;
5547     }
5548
5549     return offset;
5550 }
5551
5552 /* CIGI3_3 Symbol Line Definition */
5553 static gint
5554 cigi3_3_add_symbol_line_definition(tvbuff_t *tvb, proto_tree *tree, gint offset)
5555 {
5556     guint8 packet_size = 0;
5557     int nvertices,v;
5558
5559     packet_size = tvb_get_guint8(tvb, offset-1);
5560
5561     /* A symbol text definition packet cannot be less than 16 bytes. */
5562     if ( packet_size < 16 ) {
5563         THROW(ReportedBoundsError);
5564     }
5565
5566     nvertices = (packet_size - 16) / 8;
5567
5568     proto_tree_add_item(tree, hf_cigi3_3_symbol_line_definition_symbol_id, tvb, offset, 2, cigi_byte_order);
5569     offset += 2;
5570
5571     proto_tree_add_item(tree, hf_cigi3_3_symbol_line_definition_primitive_type, tvb, offset, 1, cigi_byte_order);
5572     offset += 2;
5573
5574     proto_tree_add_item(tree, hf_cigi3_3_symbol_line_definition_stipple_pattern, tvb, offset, 2, cigi_byte_order);
5575     offset += 2;
5576
5577     proto_tree_add_item(tree, hf_cigi3_3_symbol_line_definition_line_width, tvb, offset, 4, cigi_byte_order);;
5578     offset += 4;
5579
5580     proto_tree_add_item(tree, hf_cigi3_3_symbol_line_definition_stipple_pattern_length, tvb, offset, 4, cigi_byte_order);
5581     offset += 4;
5582
5583     for(v=0; v<nvertices; v++) {
5584         proto_tree_add_item(tree, hf_cigi3_3_symbol_line_definition_vertex_u[v], tvb, offset, 4, cigi_byte_order);
5585         offset += 4;
5586
5587         proto_tree_add_item(tree, hf_cigi3_3_symbol_line_definition_vertex_v[v], tvb, offset, 4, cigi_byte_order);
5588         offset += 4;
5589     }
5590
5591     return offset;
5592 }
5593
5594 /* CIGI3_3 Symbol Clone */
5595 static gint
5596 cigi3_3_add_symbol_clone(tvbuff_t *tvb, proto_tree *tree, gint offset)
5597 {
5598     proto_tree_add_item(tree, hf_cigi3_3_symbol_clone_symbol_id, tvb, offset, 2, cigi_byte_order);
5599     offset += 2;
5600
5601     proto_tree_add_item(tree, hf_cigi3_3_symbol_clone_source_type, tvb, offset, 1, cigi_byte_order);
5602     offset += 2;
5603
5604     proto_tree_add_item(tree, hf_cigi3_3_symbol_clone_source_id, tvb, offset, 2, cigi_byte_order);
5605     offset += 2;
5606
5607     return offset;
5608 }
5609
5610 /* CIGI3_3 Symbol Control */
5611 static gint
5612 cigi3_3_add_symbol_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
5613 {
5614     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_symbol_id, tvb, offset, 2, cigi_byte_order);
5615     offset += 2;
5616
5617     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_symbol_state, tvb, offset, 1, cigi_byte_order);
5618     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_attach_state, tvb, offset, 1, cigi_byte_order);
5619     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_flash_control, tvb, offset, 1, cigi_byte_order);
5620     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_inherit_color, tvb, offset, 1, cigi_byte_order);
5621     offset += 2;
5622
5623     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_parent_symbol_ident, tvb, offset, 2, cigi_byte_order);
5624     offset += 2;
5625
5626     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_surface_ident, tvb, offset, 2, cigi_byte_order);
5627     offset += 2;
5628
5629     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_layer, tvb, offset, 1, cigi_byte_order);
5630     offset += 1;
5631
5632     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_flash_duty_cycle, tvb, offset, 1, cigi_byte_order);
5633     offset += 1;
5634
5635     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_flash_period, tvb, offset, 4, cigi_byte_order);
5636     offset += 4;
5637
5638     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_position_u, tvb, offset, 4, cigi_byte_order);
5639     offset += 4;
5640
5641     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_position_v, tvb, offset, 4, cigi_byte_order);
5642     offset += 4;
5643
5644     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_rotation, tvb, offset, 4, cigi_byte_order);
5645     offset += 4;
5646
5647     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_red, tvb, offset, 1, cigi_byte_order);
5648     offset += 1;
5649
5650     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_green, tvb, offset, 1, cigi_byte_order);
5651     offset += 1;
5652
5653     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_blue, tvb, offset, 1, cigi_byte_order);
5654     offset += 1;
5655
5656     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_alpha, tvb, offset, 1, cigi_byte_order);
5657     offset += 1;
5658
5659     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_scale_u, tvb, offset, 4, cigi_byte_order);
5660     offset += 4;
5661
5662     proto_tree_add_item(tree, hf_cigi3_3_symbol_control_scale_v, tvb, offset, 4, cigi_byte_order);
5663     offset += 4;
5664
5665     return offset;
5666 }
5667
5668 /* CIGI3_3 Short Symbol Control */
5669 static gint
5670 cigi3_3_add_short_symbol_control(tvbuff_t *tvb, proto_tree *tree, gint offset)
5671 {
5672     guint8 select1 = 0;
5673     guint8 select2 = 0;
5674
5675     proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_symbol_id, tvb, offset, 2, cigi_byte_order);
5676     offset += 2;
5677
5678     proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_symbol_state, tvb, offset, 1, cigi_byte_order);
5679     proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attach_state, tvb, offset, 1, cigi_byte_order);
5680     proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_flash_control, tvb, offset, 1, cigi_byte_order);
5681     proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_inherit_color, tvb, offset, 1, cigi_byte_order);
5682     offset += 2;
5683
5684     select1 = tvb_get_guint8(tvb, offset);
5685     proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attribute_select1, tvb, offset, 1, cigi_byte_order);
5686     offset += 1;
5687
5688     select2 = tvb_get_guint8(tvb, offset);
5689     proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attribute_select2, tvb, offset, 1, cigi_byte_order);
5690     offset++;
5691
5692     if (select1 == 9) {
5693         if (cigi_byte_order == CIGI_BYTE_ORDER_BIG_ENDIAN) {
5694             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_red1, tvb, offset, 1, cigi_byte_order);
5695             offset++;
5696
5697             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_green1, tvb, offset, 1, cigi_byte_order);
5698             offset++;
5699
5700             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_blue1, tvb, offset, 1, cigi_byte_order);
5701             offset++;
5702
5703             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_alpha1, tvb, offset, 1, cigi_byte_order);
5704             offset++;
5705         } else {
5706             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_alpha1, tvb, offset, 1, cigi_byte_order);
5707             offset++;
5708
5709             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_blue1, tvb, offset, 1, cigi_byte_order);
5710             offset++;
5711
5712             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_green1, tvb, offset, 1, cigi_byte_order);
5713             offset++;
5714
5715             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_red1, tvb, offset, 1, cigi_byte_order);
5716             offset++;
5717         }
5718     } else {
5719         if (select1 >= 5 && select1 <= 11) {
5720             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attribute_value1f, tvb, offset, 4, cigi_byte_order);
5721         } else {        
5722             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attribute_value1, tvb, offset, 4, cigi_byte_order);
5723         }    
5724         offset += 4;
5725     }
5726
5727     if (select2 == 9) {
5728         if (cigi_byte_order == CIGI_BYTE_ORDER_BIG_ENDIAN) {
5729             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_red2, tvb, offset, 1, cigi_byte_order);
5730             offset++;
5731
5732             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_green2, tvb, offset, 1, cigi_byte_order);
5733             offset++;
5734
5735             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_blue2, tvb, offset, 1, cigi_byte_order);
5736             offset++;
5737
5738             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_alpha2, tvb, offset, 1, cigi_byte_order);
5739             offset++;
5740         } else {
5741             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_alpha2, tvb, offset, 1, cigi_byte_order);
5742             offset++;
5743
5744             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_blue2, tvb, offset, 1, cigi_byte_order);
5745             offset++;
5746
5747             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_green2, tvb, offset, 1, cigi_byte_order);
5748             offset++;
5749
5750             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_red2, tvb, offset, 1, cigi_byte_order);
5751             offset++;
5752         }
5753
5754     } else {
5755         if (select2 >= 5 && select2 <= 11) {
5756             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attribute_value2f, tvb, offset, 4, cigi_byte_order);
5757         } else {        
5758             proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attribute_value2, tvb, offset, 4, cigi_byte_order);
5759         }    
5760         offset += 4;
5761     }
5762
5763     return offset;
5764 }
5765
5766 /* CIGI3 Start of Frame */
5767 static gint
5768 cigi3_add_start_of_frame(tvbuff_t *tvb, proto_tree *tree, gint offset)
5769 {
5770     proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, cigi_byte_order);
5771     offset++;
5772
5773     proto_tree_add_item(tree, hf_cigi3_start_of_frame_db_number, tvb, offset, 1, cigi_byte_order);
5774     offset++;
5775
5776     proto_tree_add_item(tree, hf_cigi3_start_of_frame_ig_status, tvb, offset, 1, cigi_byte_order);
5777     offset++;
5778
5779     proto_tree_add_item(tree, hf_cigi3_start_of_frame_ig_mode, tvb, offset, 1, cigi_byte_order);
5780     proto_tree_add_item(tree, hf_cigi3_start_of_frame_timestamp_valid, tvb, offset, 1, cigi_byte_order);
5781     proto_tree_add_item(tree, hf_cigi3_start_of_frame_earth_reference_model, tvb, offset, 1, cigi_byte_order);
5782     offset++;
5783
5784     /* Get the Byte Swap in Big-Endian so that we can display whether the value
5785      * is big-endian or little-endian to the user */
5786     proto_tree_add_item(tree, hf_cigi3_byte_swap, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
5787     offset += 2;
5788
5789     proto_tree_add_item(tree, hf_cigi3_start_of_frame_frame_ctr, tvb, offset, 4, cigi_byte_order);
5790     offset += 4;
5791
5792     proto_tree_add_item(tree, hf_cigi3_start_of_frame_timestamp, tvb, offset, 4, cigi_byte_order);
5793     offset += 4;
5794
5795     return offset;
5796 }
5797
5798 /* CIGI3_2 Start of Frame */
5799 static gint
5800 cigi3_2_add_start_of_frame(tvbuff_t *tvb, proto_tree *tree, gint offset)
5801 {
5802     proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, cigi_byte_order);
5803     offset++;
5804
5805     proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_db_number, tvb, offset, 1, cigi_byte_order);
5806     offset++;
5807
5808     proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_ig_status, tvb, offset, 1, cigi_byte_order);
5809     offset++;
5810
5811     proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_ig_mode, tvb, offset, 1, cigi_byte_order);
5812     proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_timestamp_valid, tvb, offset, 1, cigi_byte_order);
5813     proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_earth_reference_model, tvb, offset, 1, cigi_byte_order);
5814     offset++;
5815
5816     /* Get the Byte Swap in Big-Endian so that we can display whether the value
5817      * is big-endian or little-endian to the user */
5818     proto_tree_add_item(tree, hf_cigi3_byte_swap, tvb, offset, 2, CIGI_BYTE_ORDER_BIG_ENDIAN);
5819     offset += 2;
5820
5821     proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_ig_frame_number, tvb, offset, 4, cigi_byte_order);
5822     offset += 4;
5823
5824     proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_timestamp, tvb, offset, 4, cigi_byte_order);
5825     offset += 4;
5826
5827     proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_last_host_frame_number, tvb, offset, 4, cigi_byte_order);
5828     offset += 8;
5829
5830     return offset;
5831 }
5832
5833 /* CIGI3 HAT/HOT Response */
5834 static gint
5835 cigi3_add_hat_hot_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
5836 {
5837     proto_tree_add_item(tree, hf_cigi3_hat_hot_response_hat_hot_id, tvb, offset, 2, cigi_byte_order);
5838     offset += 2;
5839
5840     proto_tree_add_item(tree, hf_cigi3_hat_hot_response_valid, tvb, offset, 1, cigi_byte_order);
5841     proto_tree_add_item(tree, hf_cigi3_hat_hot_response_type, tvb, offset, 1, cigi_byte_order);
5842     offset += 4;
5843
5844     proto_tree_add_item(tree, hf_cigi3_hat_hot_response_height, tvb, offset, 8, cigi_byte_order);
5845     offset += 8;
5846
5847     return offset;
5848 }
5849
5850 /* CIGI3_2 HAT/HOT Response */
5851 static gint
5852 cigi3_2_add_hat_hot_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
5853 {
5854     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_response_hat_hot_id, tvb, offset, 2, cigi_byte_order);
5855     offset += 2;
5856
5857     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_response_valid, tvb, offset, 1, cigi_byte_order);
5858     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_response_type, tvb, offset, 1, cigi_byte_order);
5859     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order);
5860     offset += 4;
5861
5862     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_response_height, tvb, offset, 8, cigi_byte_order);
5863     offset += 8;
5864
5865     return offset;
5866 }
5867
5868 /* CIGI3 HAT/HOT Extended Response */
5869 static gint
5870 cigi3_add_hat_hot_extended_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
5871 {
5872     proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_hat_hot_id, tvb, offset, 2, cigi_byte_order);
5873     offset += 2;
5874
5875     proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_valid, tvb, offset, 1, cigi_byte_order);
5876     offset += 4;
5877
5878     proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_hat, tvb, offset, 8, cigi_byte_order);
5879     offset += 8;
5880
5881     proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_hot, tvb, offset, 8, cigi_byte_order);
5882     offset += 8;
5883
5884     proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_material_code, tvb, offset, 4, cigi_byte_order);
5885     offset += 4;
5886
5887     proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_normal_vector_azimuth, tvb, offset, 4, cigi_byte_order);
5888     offset += 4;
5889
5890     proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_normal_vector_elevation, tvb, offset, 4, cigi_byte_order);
5891     offset += 8;
5892
5893     return offset;
5894 }
5895
5896 /* CIGI3_2 HAT/HOT Extended Response */
5897 static gint
5898 cigi3_2_add_hat_hot_extended_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
5899 {
5900     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_hat_hot_id, tvb, offset, 2, cigi_byte_order);
5901     offset += 2;
5902
5903     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_valid, tvb, offset, 1, cigi_byte_order);
5904     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order);
5905     offset += 4;
5906
5907     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_hat, tvb, offset, 8, cigi_byte_order);
5908     offset += 8;
5909
5910     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_hot, tvb, offset, 8, cigi_byte_order);
5911     offset += 8;
5912
5913     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_material_code, tvb, offset, 4, cigi_byte_order);
5914     offset += 4;
5915
5916     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_normal_vector_azimuth, tvb, offset, 4, cigi_byte_order);
5917     offset += 4;
5918
5919     proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_normal_vector_elevation, tvb, offset, 4, cigi_byte_order);
5920     offset += 8;
5921
5922     return offset;
5923 }
5924
5925 /* CIGI3 Line of Sight Response */
5926 static gint
5927 cigi3_add_line_of_sight_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
5928 {
5929     proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_los_id, tvb, offset, 2, cigi_byte_order);
5930     offset += 2;
5931
5932     proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_valid, tvb, offset, 1, cigi_byte_order);
5933     proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_entity_id_valid, tvb, offset, 1, cigi_byte_order);
5934     proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_visible, tvb, offset, 1, cigi_byte_order);
5935     offset++;
5936
5937     proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_count, tvb, offset, 1, cigi_byte_order);
5938     offset++;
5939
5940     proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_entity_id, tvb, offset, 2, cigi_byte_order);
5941     offset += 2;
5942
5943     proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_range, tvb, offset, 8, cigi_byte_order);
5944     offset += 8;
5945
5946     return offset;
5947 }
5948
5949 /* CIGI3_2 Line of Sight Response */
5950 static gint
5951 cigi3_2_add_line_of_sight_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
5952 {
5953     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_los_id, tvb, offset, 2, cigi_byte_order);
5954     offset += 2;
5955
5956     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_valid, tvb, offset, 1, cigi_byte_order);
5957     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_entity_id_valid, tvb, offset, 1, cigi_byte_order);
5958     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_visible, tvb, offset, 1, cigi_byte_order);
5959     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order);
5960     offset++;
5961
5962     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_count, tvb, offset, 1, cigi_byte_order);
5963     offset++;
5964
5965     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_entity_id, tvb, offset, 2, cigi_byte_order);
5966     offset += 2;
5967
5968     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_range, tvb, offset, 8, cigi_byte_order);
5969     offset += 8;
5970
5971     return offset;
5972 }
5973
5974 /* CIGI3 Line of Sight Extended Response */
5975 static gint
5976 cigi3_add_line_of_sight_extended_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
5977 {
5978     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_los_id, tvb, offset, 2, cigi_byte_order);
5979     offset += 2;
5980
5981     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_valid, tvb, offset, 1, cigi_byte_order);
5982     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_entity_id_valid, tvb, offset, 1, cigi_byte_order);
5983     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_range_valid, tvb, offset, 1, cigi_byte_order);
5984     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_visible, tvb, offset, 1, cigi_byte_order);
5985     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_intersection_coord, tvb, offset, 1, cigi_byte_order);
5986     offset++;
5987
5988     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_response_count, tvb, offset, 1, cigi_byte_order);
5989     offset++;
5990
5991     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_entity_id, tvb, offset, 2, cigi_byte_order);
5992     offset += 2;
5993
5994     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_range, tvb, offset, 8, cigi_byte_order);
5995     offset += 8;
5996
5997     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_lat_xoff, tvb, offset, 8, cigi_byte_order);
5998     offset += 8;
5999
6000     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_lon_yoff, tvb, offset, 8, cigi_byte_order);
6001     offset += 8;
6002
6003     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_alt_zoff, tvb, offset, 8, cigi_byte_order);
6004     offset += 8;
6005
6006     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_red, tvb, offset, 1, cigi_byte_order);
6007     offset++;
6008
6009     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_green, tvb, offset, 1, cigi_byte_order);
6010     offset++;
6011
6012     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_blue, tvb, offset, 1, cigi_byte_order);
6013     offset++;
6014
6015     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_alpha, tvb, offset, 1, cigi_byte_order);
6016     offset++;
6017
6018     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_material_code, tvb, offset, 4, cigi_byte_order);
6019     offset += 4;
6020
6021     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_normal_vector_azimuth, tvb, offset, 4, cigi_byte_order);
6022     offset += 4;
6023
6024     proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_normal_vector_elevation, tvb, offset, 4, cigi_byte_order);
6025     offset += 4;
6026
6027     return offset;
6028 }
6029
6030 /* CIGI3_2 Line of Sight Extended Response */
6031 static gint
6032 cigi3_2_add_line_of_sight_extended_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
6033 {
6034     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_los_id, tvb, offset, 2, cigi_byte_order);
6035     offset += 2;
6036
6037     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_valid, tvb, offset, 1, cigi_byte_order);
6038     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_entity_id_valid, tvb, offset, 1, cigi_byte_order);
6039     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_range_valid, tvb, offset, 1, cigi_byte_order);
6040     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_visible, tvb, offset, 1, cigi_byte_order);
6041     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order);
6042     offset++;
6043
6044     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_response_count, tvb, offset, 1, cigi_byte_order);
6045     offset++;
6046
6047     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_entity_id, tvb, offset, 2, cigi_byte_order);
6048     offset += 2;
6049
6050     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_range, tvb, offset, 8, cigi_byte_order);
6051     offset += 8;
6052
6053     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_lat_xoff, tvb, offset, 8, cigi_byte_order);
6054     offset += 8;
6055
6056     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_lon_yoff, tvb, offset, 8, cigi_byte_order);
6057     offset += 8;
6058
6059     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_alt_zoff, tvb, offset, 8, cigi_byte_order);
6060     offset += 8;
6061
6062     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_red, tvb, offset, 1, cigi_byte_order);
6063     offset++;
6064
6065     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_green, tvb, offset, 1, cigi_byte_order);
6066     offset++;
6067
6068     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_blue, tvb, offset, 1, cigi_byte_order);
6069     offset++;
6070
6071     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_alpha, tvb, offset, 1, cigi_byte_order);
6072     offset++;
6073
6074     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_material_code, tvb, offset, 4, cigi_byte_order);
6075     offset += 4;
6076
6077     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_normal_vector_azimuth, tvb, offset, 4, cigi_byte_order);
6078     offset += 4;
6079
6080     proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_normal_vector_elevation, tvb, offset, 4, cigi_byte_order);
6081     offset += 4;
6082
6083     return offset;
6084 }
6085
6086 /* CIGI3 Sensor Response */
6087 static gint
6088 cigi3_add_sensor_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
6089 {
6090     proto_tree_add_item(tree, hf_cigi3_sensor_response_view_id, tvb, offset, 2, cigi_byte_order);
6091     offset += 2;
6092
6093     proto_tree_add_item(tree, hf_cigi3_sensor_response_sensor_id, tvb, offset, 1, cigi_byte_order);
6094     offset++;
6095
6096     proto_tree_add_item(tree, hf_cigi3_sensor_response_sensor_status, tvb, offset, 1, cigi_byte_order);
6097     offset += 3;
6098
6099     proto_tree_add_item(tree, hf_cigi3_sensor_response_gate_x_size, tvb, offset, 2, cigi_byte_order);
6100     offset += 2;
6101
6102     proto_tree_add_item(tree, hf_cigi3_sensor_response_gate_y_size, tvb, offset, 2, cigi_byte_order);
6103     offset += 2;
6104
6105     proto_tree_add_item(tree, hf_cigi3_sensor_response_gate_x_pos, tvb, offset, 4, cigi_byte_order);
6106     offset += 4;
6107
6108     proto_tree_add_item(tree, hf_cigi3_sensor_response_gate_y_pos, tvb, offset, 4, cigi_byte_order);
6109     offset += 4;
6110
6111     proto_tree_add_item(tree, hf_cigi3_sensor_response_frame_ctr, tvb, offset, 4, cigi_byte_order);
6112     offset += 4;
6113
6114     return offset;
6115 }
6116
6117 /* CIGI3 Sensor Extended Response */
6118 static gint
6119 cigi3_add_sensor_extended_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
6120 {
6121     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_view_id, tvb, offset, 2, cigi_byte_order);
6122     offset += 2;
6123
6124     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_sensor_id, tvb, offset, 1, cigi_byte_order);
6125     offset++;
6126
6127     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_sensor_status, tvb, offset, 1, cigi_byte_order);
6128     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_entity_id_valid, tvb, offset, 1, cigi_byte_order);
6129     offset++;
6130
6131     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_entity_id, tvb, offset, 2, cigi_byte_order);
6132     offset += 2;
6133
6134     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_gate_x_size, tvb, offset, 2, cigi_byte_order);
6135     offset += 2;
6136
6137     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_gate_y_size, tvb, offset, 2, cigi_byte_order);
6138     offset += 2;
6139
6140     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_gate_x_pos, tvb, offset, 4, cigi_byte_order);
6141     offset += 4;
6142
6143     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_gate_y_pos, tvb, offset, 4, cigi_byte_order);
6144     offset += 4;
6145
6146     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_frame_ctr, tvb, offset, 4, cigi_byte_order);
6147     offset += 4;
6148
6149     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_track_lat, tvb, offset, 8, cigi_byte_order);
6150     offset += 8;
6151
6152     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_track_lon, tvb, offset, 8, cigi_byte_order);
6153     offset += 8;
6154
6155     proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_track_alt, tvb, offset, 8, cigi_byte_order);
6156     offset += 8;
6157
6158     return offset;
6159 }
6160
6161 /* CIGI3 Position Response */
6162 static gint
6163 cigi3_add_position_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
6164 {
6165     proto_tree_add_item(tree, hf_cigi3_position_response_object_id, tvb, offset, 2, cigi_byte_order);
6166     offset += 2;
6167
6168     proto_tree_add_item(tree, hf_cigi3_position_response_part_id, tvb, offset, 1, cigi_byte_order);
6169     offset++;
6170
6171     proto_tree_add_item(tree, hf_cigi3_position_response_object_class, tvb, offset, 1, cigi_byte_order);
6172     proto_tree_add_item(tree, hf_cigi3_position_response_coord_system, tvb, offset, 1, cigi_byte_order);
6173     offset += 3;
6174
6175     proto_tree_add_item(tree, hf_cigi3_position_response_lat_xoff, tvb, offset, 8, cigi_byte_order);
6176     offset += 8;
6177
6178     proto_tree_add_item(tree, hf_cigi3_position_response_lon_yoff, tvb, offset, 8, cigi_byte_order);
6179     offset += 8;
6180
6181     proto_tree_add_item(tree, hf_cigi3_position_response_alt_zoff, tvb, offset, 8, cigi_byte_order);
6182     offset += 8;
6183
6184     proto_tree_add_item(tree, hf_cigi3_position_response_roll, tvb, offset, 4, cigi_byte_order);
6185     offset += 4;
6186
6187     proto_tree_add_item(tree, hf_cigi3_position_response_pitch, tvb, offset, 4, cigi_byte_order);
6188     offset += 4;
6189
6190     proto_tree_add_item(tree, hf_cigi3_position_response_yaw, tvb, offset, 4, cigi_byte_order);
6191     offset += 8;
6192
6193     return offset;
6194 }
6195
6196 /* CIGI3 Weather Conditions Response */
6197 static gint
6198 cigi3_add_weather_conditions_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
6199 {
6200     proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_request_id, tvb, offset, 1, cigi_byte_order);
6201     offset++;
6202
6203     proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_humidity, tvb, offset, 1, cigi_byte_order);
6204     offset++;
6205
6206     proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_air_temp, tvb, offset, 4, cigi_byte_order);
6207     offset += 4;
6208
6209     proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_visibility_range, tvb, offset, 4, cigi_byte_order);
6210     offset += 4;
6211
6212     proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_horiz_speed, tvb, offset, 4, cigi_byte_order);
6213     offset += 4;
6214
6215     proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_vert_speed, tvb, offset, 4, cigi_byte_order);
6216     offset += 4;
6217
6218     proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_wind_direction, tvb, offset, 4, cigi_byte_order);
6219     offset += 4;
6220
6221     proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_barometric_pressure, tvb, offset, 4, cigi_byte_order);
6222     offset += 8;
6223
6224     return offset;
6225 }
6226
6227 /* CIGI3 Aerosol Concentration Response */
6228 static gint
6229 cigi3_add_aerosol_concentration_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
6230 {
6231     proto_tree_add_item(tree, hf_cigi3_aerosol_concentration_response_request_id, tvb, offset, 1, cigi_byte_order);
6232     offset++;
6233
6234     proto_tree_add_item(tree, hf_cigi3_aerosol_concentration_response_layer_id, tvb, offset, 1, cigi_byte_order);
6235     offset++;
6236
6237     proto_tree_add_item(tree, hf_cigi3_aerosol_concentration_response_aerosol_concentration, tvb, offset, 4, cigi_byte_order);
6238     offset += 4;
6239
6240     return offset;
6241 }
6242
6243 /* CIGI3 Maritime Surface Conditions Response */
6244 static gint
6245 cigi3_add_maritime_surface_conditions_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
6246 {
6247     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_response_request_id, tvb, offset, 1, cigi_byte_order);
6248     offset += 2;
6249
6250     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_response_sea_surface_height, tvb, offset, 4, cigi_byte_order);
6251     offset += 4;
6252
6253     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_response_surface_water_temp, tvb, offset, 4, cigi_byte_order);
6254     offset += 4;
6255
6256     proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_response_surface_clarity, tvb, offset, 4, cigi_byte_order);
6257     offset += 4;
6258
6259     return offset;
6260 }
6261
6262 /* CIGI3 Terrestrial Surface Conditions Response */
6263 static gint
6264 cigi3_add_terrestrial_surface_conditions_response(tvbuff_t *tvb, proto_tree *tree, gint offset)
6265 {
6266     proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_response_request_id, tvb, offset, 1, cigi_byte_order);
6267     offset += 2;
6268
6269     proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_response_surface_id, tvb, offset, 4, cigi_byte_order);
6270     offset += 4;
6271
6272     return offset;
6273 }
6274
6275 /* CIGI3 Collision Detection Segment Notification */
6276 static gint
6277 cigi3_add_collision_detection_segment_notification(tvbuff_t *tvb, proto_tree *tree, gint offset)
6278 {
6279     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_notification_entity_id, tvb, offset, 2, cigi_byte_order);
6280     offset += 2;
6281
6282     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_notification_segment_id, tvb, offset, 1, cigi_byte_order);
6283     offset++;
6284
6285     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_notification_type, tvb, offset, 1, cigi_byte_order);
6286     offset++;
6287
6288     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_notification_contacted_entity_id, tvb, offset, 2, cigi_byte_order);
6289     offset += 2;
6290
6291     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_notification_material_code, tvb, offset, 4, cigi_byte_order);
6292     offset += 4;
6293
6294     proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_notification_intersection_distance, tvb, offset, 4, cigi_byte_order);
6295     offset += 4;
6296
6297     return offset;
6298 }
6299
6300 /* CIGI3 Collision Detection Volume Notification */
6301 static gint
6302 cigi3_add_collision_detection_volume_notification(tvbuff_t *tvb, proto_tree *tree, gint offset)
6303 {
6304     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_notification_entity_id, tvb, offset, 2, cigi_byte_order);
6305     offset += 2;
6306
6307     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_notification_volume_id, tvb, offset, 1, cigi_byte_order);
6308     offset++;
6309
6310     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_notification_type, tvb, offset, 1, cigi_byte_order);
6311     offset++;
6312
6313     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_notification_contacted_entity_id, tvb, offset, 2, cigi_byte_order);
6314     offset += 2;
6315
6316     proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_notification_contacted_volume_id, tvb, offset, 1, cigi_byte_order);
6317     offset += 8;
6318
6319     return offset;
6320 }
6321
6322 /* CIGI3 Animation Stop Notification */
6323 static gint
6324 cigi3_add_animation_stop_notification(tvbuff_t *tvb, proto_tree *tree, gint offset)
6325 {
6326     proto_tree_add_item(tree, hf_cigi3_animation_stop_notification_entity_id, tvb, offset, 2, cigi_byte_order);
6327     offset += 6;
6328
6329     return offset;
6330 }
6331
6332 /* CIGI3 Event Notification */
6333 static gint
6334 cigi3_add_event_notification(tvbuff_t *tvb, proto_tree *tree, gint offset)
6335 {
6336     proto_tree_add_item(tree, hf_cigi3_event_notification_event_id, tvb, offset, 2, cigi_byte_order);
6337     offset += 2;
6338
6339     proto_tree_add_item(tree, hf_cigi3_event_notification_data_1, tvb, offset, 4, cigi_byte_order);
6340     offset += 4;
6341
6342     proto_tree_add_item(tree, hf_cigi3_event_notification_data_2, tvb, offset, 4, cigi_byte_order);
6343     offset += 4;
6344
6345     proto_tree_add_item(tree, hf_cigi3_event_notification_data_3, tvb, offset, 4, cigi_byte_order);
6346     offset += 4;
6347
6348     return offset;
6349 }
6350
6351 /* CIGI3 Image Generator Message */
6352 static gint
6353 cigi3_add_image_generator_message(tvbuff_t *tvb, proto_tree *tree, gint offset)
6354 {
6355     guint8 packet_size = 0;
6356
6357     packet_size = tvb_get_guint8(tvb, offset-1);
6358
6359     /* An image generator packet cannot be less than 4 bytes ( because every cigi packet
6360      * has a packet id (1 byte) and a packet size (1 byte) ). */
6361     if ( packet_size < 4 ) {
6362         THROW(ReportedBoundsError);
6363     }
6364
6365     proto_tree_add_item(tree, hf_cigi3_image_generator_message_id, tvb, offset, 2, cigi_byte_order);
6366     offset += 2;
6367
6368     proto_tree_add_item(tree, hf_cigi3_image_generator_message_message, tvb, offset, packet_size-4, cigi_byte_order);
6369     offset += packet_size-4;
6370
6371     return offset;
6372 }
6373
6374 /*
6375  * Extract a 16-bit fixed-point value and convert it to a float.
6376  */
6377 static gfloat
6378 tvb_get_fixed_point(tvbuff_t *tvb, int offset, gint byte_order)
6379 {
6380     gint16 fixed;
6381
6382     switch (byte_order) {
6383
6384         case CIGI_BYTE_ORDER_BIG_ENDIAN:
6385             fixed = tvb_get_ntohs(tvb, offset);
6386             break;
6387
6388         case CIGI_BYTE_ORDER_LITTLE_ENDIAN:
6389             fixed = tvb_get_letohs(tvb, offset);
6390             break;
6391
6392         default:
6393             DISSECTOR_ASSERT_NOT_REACHED();
6394             fixed = 0;
6395     }
6396     return fixed / 128.0F;
6397 }
6398
6399 /* Register the protocol with Wireshark */
6400 void
6401 proto_register_cigi(void)
6402 {
6403     module_t *cigi_module;
6404
6405     static hf_register_info hf[] = {
6406         /* All Versions of CIGI */
6407         { &hf_cigi_src_port,
6408             { "Source Port", "cigi.srcport",
6409                 FT_UINT16, BASE_DEC, NULL, 0x0,
6410                 NULL, HFILL }
6411         },
6412         { &hf_cigi_dest_port,
6413             { "Destination Port", "cigi.destport",
6414                 FT_UINT16, BASE_DEC, NULL, 0x0,
6415                 NULL, HFILL }
6416         },
6417         { &hf_cigi_port,
6418             { "Source or Destination Port", "cigi.port",
6419                 FT_UINT16, BASE_DEC, NULL, 0x0,
6420                 NULL, HFILL }
6421         },
6422
6423         { &hf_cigi_frame_size,
6424             { "Frame Size (bytes)", "cigi.frame_size",
6425                 FT_UINT8, BASE_DEC, NULL, 0x0,
6426                 "Number of bytes sent with all cigi packets in this frame", HFILL }
6427         },
6428
6429         { &hf_cigi_packet_id,
6430             { "Packet ID", "cigi.packet_id",
6431                 FT_UINT8, BASE_DEC, NULL, 0x0,
6432                 "Identifies the packet's id", HFILL }
6433         },
6434         { &hf_cigi_packet_size,
6435             { "Packet Size (bytes)", "cigi.packet_size",
6436                 FT_UINT8, BASE_DEC, NULL, 0x0,
6437                 "Identifies the number of bytes in this type of packet", HFILL }
6438         },
6439         { &hf_cigi_version,
6440             { "CIGI Version", "cigi.version",
6441                 FT_UINT8, BASE_DEC, NULL, 0x0,
6442                 "Identifies the version of CIGI interface that is currently running on the host", HFILL }
6443         },
6444
6445         { &hf_cigi_unknown,
6446             { "Unknown", "cigi.unknown",
6447                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6448                 "Unknown Packet", HFILL }
6449         },
6450
6451         /* CIGI2 */
6452         { &hf_cigi2_packet_id,
6453             { "Packet ID", "cigi.packet_id",
6454                 FT_UINT8, BASE_DEC, VALS(cigi2_packet_id_vals), 0x0,
6455                 "Identifies the packet's ID", HFILL }
6456         },
6457
6458         /* CIGI3 */
6459         { &hf_cigi3_packet_id,
6460             { "Packet ID", "cigi.packet_id",
6461                 FT_UINT8, BASE_DEC, VALS(cigi3_packet_id_vals), 0x0,
6462                 "Identifies the packet's ID", HFILL }
6463         },
6464         { &hf_cigi3_byte_swap,
6465             { "Byte Swap", "cigi.byte_swap",
6466                 FT_UINT16, BASE_HEX, VALS(cigi3_byte_swap_vals), 0x0,
6467                 "Used to determine whether the incoming data should be byte-swapped", HFILL }
6468         },
6469
6470         /* CIGI2 IG Control */
6471         { &hf_cigi2_ig_control,
6472             { "IG Control", "cigi.ig_control",
6473                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6474                 "IG Control Packet", HFILL }
6475         },
6476         { &hf_cigi2_ig_control_db_number,
6477             { "Database Number", "cigi.ig_control.db_number",
6478                 FT_INT8, BASE_DEC, NULL, 0x0,
6479                 "Identifies the number associated with the database requiring loading", HFILL }
6480         },
6481         { &hf_cigi2_ig_control_ig_mode,
6482             { "IG Mode Change Request", "cigi.ig_control.ig_mode",
6483                 FT_UINT8, BASE_DEC, VALS(cigi2_ig_control_ig_mode_vals), 0xc0,
6484                 "Commands the IG to enter its various modes", HFILL }
6485         },
6486         { &hf_cigi2_ig_control_tracking_enable,
6487             { "Tracking Device Enable", "cigi.ig_control.tracking_enable",
6488                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x20,
6489                 "Identifies the state of an external tracking device", HFILL }
6490         },
6491         { &hf_cigi2_ig_control_boresight,
6492             { "Tracking Device Boresight", "cigi.ig_control.boresight",
6493                 FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x10,
6494                 "Used by the host to enable boresight mode", HFILL }
6495         },
6496         { &hf_cigi2_ig_control_frame_ctr,
6497             { "Frame Counter", "cigi.ig_control.frame_ctr",
6498                 FT_UINT32, BASE_DEC, NULL, 0x0,
6499                 "Identifies a particular frame", HFILL }
6500         },
6501         { &hf_cigi2_ig_control_time_tag,
6502             { "Timing Value (microseconds)", "cigi.ig_control.time_tag",
6503                 FT_FLOAT, BASE_NONE, NULL, 0x0,
6504                 "Identifies synchronous operation", HFILL }
6505         },
6506
6507         /* CIGI3 IG Control */
6508         { &hf_cigi3_ig_control,
6509             { "IG Control", "cigi.ig_control",
6510                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6511                 "IG Control Packet", HFILL }
6512         },
6513         { &hf_cigi3_ig_control_db_number,
6514             { "Database Number", "cigi.ig_control.db_number",
6515                 FT_INT8, BASE_DEC, NULL, 0x0,
6516                 "Used to initiate a database load on the IG", HFILL }
6517         },
6518         { &hf_cigi3_ig_control_ig_mode,
6519             { "IG Mode", "cigi.ig_control.ig_mode",
6520                 FT_UINT8, BASE_DEC, VALS(cigi3_ig_control_ig_mode_vals), 0x03,
6521                 "Dictates the IG's operational mode", HFILL }
6522         },
6523         { &hf_cigi3_ig_control_timestamp_valid,
6524             { "Timestamp Valid", "cigi.ig_control.timestamp_valid",
6525                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x04,
6526                 "Indicates whether the timestamp contains a valid value", HFILL }
6527         },
6528         { &hf_cigi3_ig_control_frame_ctr,
6529             { "Frame Counter", "cigi.ig_control.frame_ctr",
6530                 FT_UINT32, BASE_DEC, NULL, 0x0,
6531                 "Contains a number that identifying the frame", HFILL }
6532         },
6533         { &hf_cigi3_ig_control_timestamp,
6534             { "Timestamp (microseconds)", "cigi.ig_control.timestamp",
6535                 FT_UINT32, BASE_DEC, NULL, 0x0,
6536                 "Indicates the number of 10 microsecond \"ticks\" since some initial reference time", HFILL }
6537         },
6538
6539         /* CIGI3_2 IG Control */
6540         { &hf_cigi3_2_ig_control,
6541             { "IG Control", "cigi.ig_control",
6542                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6543                 "IG Control Packet", HFILL }
6544         },
6545         { &hf_cigi3_2_ig_control_db_number,
6546             { "Database Number", "cigi.ig_control.db_number",
6547                 FT_INT8, BASE_DEC, NULL, 0x0,
6548                 "Used to initiate a database load on the IG", HFILL }
6549         },
6550         { &hf_cigi3_2_ig_control_ig_mode,
6551             { "IG Mode", "cigi.ig_control.ig_mode",
6552                 FT_UINT8, BASE_DEC, VALS(cigi3_2_ig_control_ig_mode_vals), 0x03,
6553                 "Dictates the IG's operational mode", HFILL }
6554         },
6555         { &hf_cigi3_2_ig_control_timestamp_valid,
6556             { "Timestamp Valid", "cigi.ig_control.timestamp_valid",
6557                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x04,
6558                 "Indicates whether the timestamp contains a valid value", HFILL }
6559         },
6560         { &hf_cigi3_2_ig_control_host_frame_number,
6561             { "Host Frame Number", "cigi.ig_control.host_frame_number",
6562                 FT_UINT32, BASE_DEC, NULL, 0x0,
6563                 "Uniquely identifies a data frame on the host", HFILL }
6564         },
6565         { &hf_cigi3_2_ig_control_timestamp,
6566             { "Timestamp (microseconds)", "cigi.ig_control.timestamp",
6567                 FT_UINT32, BASE_DEC, NULL, 0x0,
6568                 "Indicates the number of 10 microsecond \"ticks\" since some initial reference time", HFILL }
6569         },
6570         { &hf_cigi3_2_ig_control_last_ig_frame_number,
6571             { "IG Frame Number", "cigi.ig_control.last_ig_frame_number",
6572                 FT_UINT32, BASE_DEC, NULL, 0x0,
6573                 "Contains the value of the IG Frame Number parameter in the last Start of Frame packet received from the IG", HFILL }
6574         },
6575
6576         /* CIGI3_3 IG Control */
6577         { &hf_cigi3_3_ig_control,
6578             { "IG Control", "cigi.ig_control",
6579                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6580                 "IG Control Packet", HFILL }
6581         },
6582         { &hf_cigi3_3_ig_control_db_number,
6583             { "Database Number", "cigi.ig_control.db_number",
6584                 FT_INT8, BASE_DEC, NULL, 0x0,
6585                 "Used to initiate a database load on the IG", HFILL }
6586         },
6587         { &hf_cigi3_3_ig_control_ig_mode,
6588             { "IG Mode", "cigi.ig_control.ig_mode",
6589                 FT_UINT8, BASE_DEC, VALS(cigi3_3_ig_control_ig_mode_vals), 0x03,
6590                 "Dictates the IG's operational mode", HFILL }
6591         },
6592         { &hf_cigi3_3_ig_control_timestamp_valid,
6593             { "Timestamp Valid", "cigi.ig_control.timestamp_valid",
6594                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x04,
6595                 "Indicates whether the timestamp contains a valid value", HFILL }
6596         },
6597         { &hf_cigi3_3_ig_control_extrapolation_enable,
6598             { "Extrapolation/Interpolation Enable", "cigi.ig_control.extrapolation_enable",
6599                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
6600                 "Indicates whether any dead reckoning is enabled.", HFILL }
6601         },
6602         { &hf_cigi3_3_ig_control_minor_version,
6603             { "Minor Version", "cigi.ig_control.extrapolation_enable",
6604                 FT_UINT8, BASE_DEC, NULL, 0xF0,
6605                 "Indicates the minor version of the CIGI interface", HFILL }
6606         },
6607         { &hf_cigi3_3_ig_control_host_frame_number,
6608             { "Host Frame Number", "cigi.ig_control.host_frame_number",
6609                 FT_UINT32, BASE_DEC, NULL, 0x0,
6610                 "Uniquely identifies a data frame on the host", HFILL }
6611         },
6612         { &hf_cigi3_3_ig_control_timestamp,
6613             { "Timestamp (microseconds)", "cigi.ig_control.timestamp",
6614                 FT_UINT32, BASE_DEC, NULL, 0x0,
6615                 "Indicates the number of 10 microsecond \"ticks\" since some initial reference time", HFILL }
6616         },
6617         { &hf_cigi3_3_ig_control_last_ig_frame_number,
6618             { "IG Frame Number", "cigi.ig_control.last_ig_frame_number",
6619                 FT_UINT32, BASE_DEC, NULL, 0x0,
6620                 "Contains the value of the IG Frame Number parameter in the last Start of Frame packet received from the IG", HFILL }
6621         },
6622
6623            /* CIGI2 Entity Control */
6624         { &hf_cigi2_entity_control,
6625             { "Entity Control", "cigi.entity_control",
6626                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6627                 "Entity Control Packet", HFILL }
6628         },
6629         { &hf_cigi2_entity_control_entity_id,
6630             { "Entity ID", "cigi.entity_control.entity_id",
6631                 FT_UINT16, BASE_DEC, NULL, 0x0,
6632                 "Identifies the entity motion system", HFILL }
6633         },
6634         { &hf_cigi2_entity_control_entity_state,
6635             { "Entity State", "cigi.entity_control.entity_state",
6636                 FT_UINT8, BASE_DEC, VALS(cigi2_entity_control_entity_state_vals), 0xc0,
6637                 "Identifies the entity's geometry state", HFILL }
6638         },
6639         { &hf_cigi2_entity_control_attach_state,
6640             { "Attach State", "cigi.entity_control.attach_state",
6641                 FT_BOOLEAN, 8, TFS(&cigi2_entity_control_attach_state_tfs), 0x20,
6642                 "Identifies whether the entity should be attach as a child to a parent", HFILL }
6643         },
6644         { &hf_cigi2_entity_control_collision_detect,
6645             { "Collision Detection Request", "cigi.entity_control.collision_detect",
6646                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x10,
6647                 "Identifies if collision detection is enabled for the entity", HFILL }
6648         },
6649         { &hf_cigi2_entity_control_effect_state,
6650             { "Effect Animation State", "cigi.entity_control.effect_state",
6651                 FT_UINT8, BASE_DEC, VALS(cigi2_entity_control_effect_state_vals), 0x0c,
6652                 "Identifies the animation state of a special effect", HFILL }
6653         },
6654         { &hf_cigi2_entity_control_type,
6655             { "Entity Type", "cigi.entity_control.type",
6656                 FT_UINT16, BASE_DEC, NULL, 0x0,
6657                 "Identifies the type of the entity", HFILL }
6658         },
6659         { &hf_cigi2_entity_control_parent_id,
6660             { "Parent Entity ID", "cigi.entity_control.parent_id",
6661                 FT_UINT16, BASE_DEC, NULL, 0x0,
6662                 "Identifies the parent to which the entity should be attached", HFILL }
6663         },
6664         { &hf_cigi2_entity_control_opacity,
6665             { "Percent Opacity", "cigi.entity_control.opacity",
6666                 FT_FLOAT, BASE_NONE, NULL, 0x0,
6667                 "Specifies the degree of opacity of the entity", HFILL }
6668         },
6669         { &hf_cigi2_entity_control_internal_temp,
6670             { "Internal Temperature (degrees C)", "cigi.entity_control.internal_temp",
6671                 FT_FLOAT, BASE_NONE, NULL, 0x0,
6672                 "Specifies the internal temperature of the entity in degrees Celsius", HFILL }
6673         },
6674         { &hf_cigi2_entity_control_roll,
6675             { "Roll (degrees)", "cigi.entity_control.roll",
6676                 FT_FLOAT, BASE_NONE, NULL, 0x0,
6677                 "Identifies the roll angle of the entity in degrees", HFILL }
6678         },
6679         { &hf_cigi2_entity_control_pitch,
6680             { "Pitch (degrees)", "cigi.entity_control",
6681                 FT_FLOAT, BASE_NONE, NULL, 0x0,
6682                 "Identifies the pitch of the entity in degrees", HFILL }
6683         },
6684         { &hf_cigi2_entity_control_heading,
6685             { "Heading (degrees)", "cigi.entity_control",
6686                 FT_FLOAT, BASE_NONE, NULL, 0x0,
6687                 "Identifies the heading of the entity in degrees", HFILL }
6688         },
6689         { &hf_cigi2_entity_control_alt,
6690             { "Altitude (m)", "cigi.entity_control.alt",
6691                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
6692                 "Identifies the altitude position of the reference point of the entity in meters", HFILL }
6693         },
6694         { &hf_cigi2_entity_control_lat,
6695             { "Latitude (degrees)", "cigi.entity_control.lat",
6696                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
6697                 "Identifies the latitude position of the reference point of the entity in degrees", HFILL }
6698         },
6699         { &hf_cigi2_entity_control_lon,
6700             { "Longitude (degrees)", "cigi.entity_control.lon",
6701                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
6702                 "Identifies the longitude position of the reference point of the entity in degrees", HFILL }
6703         },
6704
6705         /* CIGI3 Entity Control */
6706         { &hf_cigi3_entity_control,
6707             { "Entity Control", "cigi.entity_control",
6708                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6709                 "Entity Control Packet", HFILL }
6710         },
6711         { &hf_cigi3_entity_control_entity_id,
6712             { "Entity ID", "cigi.entity_control.entity_id",
6713                 FT_UINT16, BASE_DEC, NULL, 0x0,
6714                 "Specifies the entity to which this packet is applied", HFILL }
6715         },
6716         { &hf_cigi3_entity_control_entity_state,
6717             { "Entity State", "cigi.entity_control.entity_state",
6718                 FT_UINT8, BASE_DEC, VALS(cigi3_entity_control_entity_state_vals), 0x03,
6719                 "Specifies whether the entity should be active or destroyed", HFILL }
6720         },
6721         { &hf_cigi3_entity_control_attach_state,
6722             { "Attach State", "cigi.entity_control.attach_state",
6723                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_attach_state_tfs), 0x04,
6724                 "Specifies whether the entity should be attached as a child to a parent", HFILL }
6725         },
6726         { &hf_cigi3_entity_control_collision_detection_request,
6727             { "Collision Detection Request", "cigi.entity_control.coll_det_request",
6728                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_collision_detection_request_tfs), 0x08,
6729                 "Determines whether any collision detection segments and volumes associated with this entity are used as the source in collision testing", HFILL }
6730         },
6731         { &hf_cigi3_entity_control_inherit_alpha,
6732             { "Inherit Alpha", "cigi.entity_control.inherit_alpha",
6733                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_inherit_alpha_tfs), 0x10,
6734                 "Specifies whether the entity's alpha is combined with the apparent alpha of its parent", HFILL }
6735         },
6736         { &hf_cigi3_entity_control_ground_ocean_clamp,
6737             { "Ground/Ocean Clamp", "cigi.entity_control.ground_ocean_clamp",
6738                 FT_UINT8, BASE_DEC, VALS(cigi3_entity_control_ground_ocean_clamp_vals), 0x60,
6739                 "Specifies whether the entity should be clamped to the ground or water surface", HFILL }
6740         },
6741         { &hf_cigi3_entity_control_animation_direction,
6742             { "Animation Direction", "cigi.entity_control.animation_dir",
6743                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_animation_direction_tfs), 0x01,
6744                 "Specifies the direction in which an animation plays", HFILL }
6745         },
6746         { &hf_cigi3_entity_control_animation_loop_mode,
6747             { "Animation Loop Mode", "cigi.entity_control.animation_loop_mode",
6748                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_animation_loop_mode_tfs), 0x02,
6749                 "Specifies whether an animation should be a one-shot", HFILL }
6750         },
6751         { &hf_cigi3_entity_control_animation_state,
6752             { "Animation State", "cigi.entity_control.animation_state",
6753                 FT_UINT8, BASE_DEC, VALS(cigi3_entity_control_animation_state_vals), 0x0c,
6754                 "Specifies the state of an animation", HFILL }
6755         },
6756         { &hf_cigi3_entity_control_alpha,
6757             { "Alpha", "cigi.entity_control.alpha",
6758                 FT_UINT8, BASE_DEC, NULL, 0x0,
6759                 "Specifies the explicit alpha to be applied to the entity's geometry", HFILL }
6760         },
6761         { &hf_cigi3_entity_control_entity_type,
6762             { "Entity Type", "cigi.entity_control.entity_type",
6763                 FT_UINT16, BASE_DEC, NULL, 0x0,
6764                 "Specifies the type for the entity", HFILL }
6765         },
6766         { &hf_cigi3_entity_control_parent_id,
6767             { "Parent ID", "cigi.entity_control.parent_id",
6768                 FT_UINT16, BASE_DEC, NULL, 0x0,
6769                 "Specifies the parent for the entity", HFILL }
6770         },
6771         { &hf_cigi3_entity_control_roll,
6772             { "Roll (degrees)", "cigi.entity_control.roll",
6773                 FT_FLOAT, BASE_NONE, NULL, 0x0,
6774                 "Specifies the roll angle of the entity", HFILL }
6775         },
6776         { &hf_cigi3_entity_control_pitch,
6777             { "Pitch (degrees)", "cigi.entity_control.pitch",
6778                 FT_FLOAT, BASE_NONE, NULL, 0x0,
6779                 "Specifies the pitch angle of the entity", HFILL }
6780         },
6781         { &hf_cigi3_entity_control_yaw,
6782             { "Yaw (degrees)", "cigi.entity_control.yaw",
6783                 FT_FLOAT, BASE_NONE, NULL, 0x0,
6784                 "Specifies the instantaneous heading of the entity", HFILL }
6785         },
6786         { &hf_cigi3_entity_control_lat_xoff,
6787             { "Latitude (degrees)/X Offset (m)", "cigi.entity_control.lat_xoff",
6788                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
6789                 "Specifies the entity's geodetic latitude or the distance from the parent's reference point along its parent's X axis", HFILL }
6790         },
6791         { &hf_cigi3_entity_control_lon_yoff,
6792             { "Longitude (degrees)/Y Offset (m)", "cigi.entity_control.lon_yoff",
6793                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
6794                 "Specifies the entity's geodetic longitude or the distance from the parent's reference point along its parent's Y axis", HFILL }
6795         },
6796         { &hf_cigi3_entity_control_alt_zoff,
6797             { "Altitude (m)/Z Offset (m)", "cigi.entity_control.alt_zoff",
6798                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
6799                 "Specifies the entity's altitude or the distance from the parent's reference point along its parent's Z axis", HFILL }
6800         },
6801
6802         /* CIGI3_3 Entity Control */
6803         { &hf_cigi3_3_entity_control,
6804             { "Entity Control", "cigi.entity_control",
6805                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6806                 "Entity Control Packet", HFILL }
6807         },
6808         { &hf_cigi3_3_entity_control_entity_id,
6809             { "Entity ID", "cigi.entity_control.entity_id",
6810                 FT_UINT16, BASE_DEC, NULL, 0x0,
6811                 "Specifies the entity to which this packet is applied", HFILL }
6812         },
6813         { &hf_cigi3_3_entity_control_entity_state,
6814             { "Entity State", "cigi.entity_control.entity_state",
6815                 FT_UINT8, BASE_DEC, VALS(cigi3_entity_control_entity_state_vals), 0x03,
6816                 "Specifies whether the entity should be active or destroyed", HFILL }
6817         },
6818         { &hf_cigi3_3_entity_control_attach_state,
6819             { "Attach State", "cigi.entity_control.attach_state",
6820                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_attach_state_tfs), 0x04,
6821                 "Specifies whether the entity should be attached as a child to a parent", HFILL }
6822         },
6823         { &hf_cigi3_3_entity_control_collision_detection_request,
6824             { "Collision Detection Request", "cigi.entity_control.coll_det_request",
6825                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_collision_detection_request_tfs), 0x08,
6826                 "Determines whether any collision detection segments and volumes associated with this entity are used as the source in collision testing", HFILL }
6827         },
6828         { &hf_cigi3_3_entity_control_inherit_alpha,
6829             { "Inherit Alpha", "cigi.entity_control.inherit_alpha",
6830                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_inherit_alpha_tfs), 0x10,
6831                 "Specifies whether the entity's alpha is combined with the apparent alpha of its parent", HFILL }
6832         },
6833         { &hf_cigi3_3_entity_control_ground_ocean_clamp,
6834             { "Ground/Ocean Clamp", "cigi.entity_control.ground_ocean_clamp",
6835                 FT_UINT8, BASE_DEC, VALS(cigi3_entity_control_ground_ocean_clamp_vals), 0x60,
6836                 "Specifies whether the entity should be clamped to the ground or water surface", HFILL }
6837         },
6838         { &hf_cigi3_3_entity_control_animation_direction,
6839             { "Animation Direction", "cigi.entity_control.animation_dir",
6840                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_animation_direction_tfs), 0x01,
6841                 "Specifies the direction in which an animation plays", HFILL }
6842         },
6843         { &hf_cigi3_3_entity_control_animation_loop_mode,
6844             { "Animation Loop Mode", "cigi.entity_control.animation_loop_mode",
6845                 FT_BOOLEAN, 8, TFS(&cigi3_entity_control_animation_loop_mode_tfs), 0x02,
6846                 "Specifies whether an animation should be a one-shot", HFILL }
6847         },
6848         { &hf_cigi3_3_entity_control_animation_state,
6849             { "Animation State", "cigi.entity_control.animation_state",
6850                 FT_UINT8, BASE_DEC, VALS(cigi3_entity_control_animation_state_vals), 0x0c,
6851                 "Specifies the state of an animation", HFILL }
6852         },
6853         { &hf_cigi3_3_entity_control_extrapolation_enable,
6854             { "Linear Extrapolation/Interpolation Enable", "cigi.entity_control.extrapolation_enable",
6855                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x10,
6856                 "Indicates whether the entity's motion may be smoothed by extrapolation or interpolation.", HFILL }
6857         },
6858         { &hf_cigi3_3_entity_control_alpha,
6859             { "Alpha", "cigi.entity_control.alpha",
6860                 FT_UINT8, BASE_DEC, NULL, 0x0,
6861                 "Specifies the explicit alpha to be applied to the entity's geometry", HFILL }
6862         },
6863         { &hf_cigi3_3_entity_control_entity_type,
6864             { "Entity Type", "cigi.entity_control.entity_type",
6865                 FT_UINT16, BASE_DEC, NULL, 0x0,
6866                 "Specifies the type for the entity", HFILL }
6867         },
6868         { &hf_cigi3_3_entity_control_parent_id,
6869             { "Parent ID", "cigi.entity_control.parent_id",
6870                 FT_UINT16, BASE_DEC, NULL, 0x0,
6871                 "Specifies the parent for the entity", HFILL }
6872         },
6873         { &hf_cigi3_3_entity_control_roll,
6874             { "Roll (degrees)", "cigi.entity_control.roll",
6875                 FT_FLOAT, BASE_NONE, NULL, 0x0,
6876                 "Specifies the roll angle of the entity", HFILL }
6877         },
6878         { &hf_cigi3_3_entity_control_pitch,
6879             { "Pitch (degrees)", "cigi.entity_control.pitch",
6880                 FT_FLOAT, BASE_NONE, NULL, 0x0,
6881                 "Specifies the pitch angle of the entity", HFILL }
6882         },
6883         { &hf_cigi3_3_entity_control_yaw,
6884             { "Yaw (degrees)", "cigi.entity_control.yaw",
6885                 FT_FLOAT, BASE_NONE, NULL, 0x0,
6886                 "Specifies the instantaneous heading of the entity", HFILL }
6887         },
6888         { &hf_cigi3_3_entity_control_lat_xoff,
6889             { "Latitude (degrees)/X Offset (m)", "cigi.entity_control.lat_xoff",
6890                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
6891                 "Specifies the entity's geodetic latitude or the distance from the parent's reference point along its parent's X axis", HFILL }
6892         },
6893         { &hf_cigi3_3_entity_control_lon_yoff,
6894             { "Longitude (degrees)/Y Offset (m)", "cigi.entity_control.lon_yoff",
6895                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
6896                 "Specifies the entity's geodetic longitude or the distance from the parent's reference point along its parent's Y axis", HFILL }
6897         },
6898         { &hf_cigi3_3_entity_control_alt_zoff,
6899             { "Altitude (m)/Z Offset (m)", "cigi.entity_control.alt_zoff",
6900                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
6901                 "Specifies the entity's altitude or the distance from the parent's reference point along its parent's Z axis", HFILL }
6902         },
6903
6904         /* CIGI3 Conformal Clamped Entity Control */
6905         { &hf_cigi3_conformal_clamped_entity_control,
6906             { "Conformal Clamped Entity Control", "cigi.conformal_clamped_entity_control",
6907                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6908                 "Conformal Clamped Entity Control Packet", HFILL }
6909         },
6910         { &hf_cigi3_conformal_clamped_entity_control_entity_id,
6911             { "Entity ID", "cigi.conformal_clamped_entity_control.entity_id",
6912                 FT_UINT16, BASE_DEC, NULL, 0x0,
6913                 "Specifies the entity to which this packet is applied", HFILL }
6914         },
6915         { &hf_cigi3_conformal_clamped_entity_control_yaw,
6916             { "Yaw (degrees)", "cigi.conformal_clamped_entity_control.yaw",
6917                 FT_FLOAT, BASE_NONE, NULL, 0x0,
6918                 "Specifies the instantaneous heading of the entity", HFILL }
6919         },
6920         { &hf_cigi3_conformal_clamped_entity_control_lat,
6921             { "Latitude (degrees)", "cigi.conformal_clamped_entity_control.lat",
6922                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
6923                 "Specifies the entity's geodetic latitude", HFILL }
6924         },
6925         { &hf_cigi3_conformal_clamped_entity_control_lon,
6926             { "Longitude (degrees)", "cigi.conformal_clamped_entity_control.lon",
6927                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
6928                 "Specifies the entity's geodetic longitude", HFILL }
6929         },
6930
6931         /* CIGI2 Component Control */
6932         { &hf_cigi2_component_control,
6933             { "Component Control", "cigi.component_control",
6934                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6935                 "Component Control Packet", HFILL }
6936         },
6937         { &hf_cigi2_component_control_instance_id,
6938             { "Instance ID", "cigi.component_control.instance_id",
6939                 FT_UINT16, BASE_DEC, NULL, 0x0,
6940                 "Identifies the instance of the a class the component being controlled belongs to", HFILL }
6941         },
6942         { &hf_cigi2_component_control_component_class,
6943             { "Component Class", "cigi.component_control.component_class",
6944                 FT_UINT8, BASE_DEC, VALS(cigi2_component_control_component_class_vals), 0x0,
6945                 "Identifies the class the component being controlled is in", HFILL }
6946         },
6947         { &hf_cigi2_component_control_component_id,
6948             { "Component ID", "cigi.component_control.component_id",
6949                 FT_UINT16, BASE_DEC, NULL, 0x0,
6950                 "Identifies the component of a component class and instance ID this packet will be applied to", HFILL }
6951         },
6952         { &hf_cigi2_component_control_component_state,
6953             { "Component State", "cigi.component_control.component_state",
6954                 FT_UINT16, BASE_DEC, NULL, 0x0,
6955                 "Identifies the commanded state of a component", HFILL }
6956         },
6957         { &hf_cigi2_component_control_component_val1,
6958             { "Component Value 1", "cigi.component_control.component_val1",
6959                 FT_FLOAT, BASE_NONE, NULL, 0x0,
6960                 "Identifies a continuous value to be applied to a component", HFILL }
6961         },
6962         { &hf_cigi2_component_control_component_val2,
6963             { "Component Value 2", "cigi.component_control.component_val2",
6964                 FT_FLOAT, BASE_NONE, NULL, 0x0,
6965                 "Identifies a continuous value to be applied to a component", HFILL }
6966         },
6967
6968         /* CIGI3 Component Control */
6969         { &hf_cigi3_component_control,
6970             { "Component Control", "cigi.component_control",
6971                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6972                 "Component Control Packet", HFILL }
6973         },
6974         { &hf_cigi3_component_control_component_id,
6975             { "Component ID", "cigi.component_control.component_id",
6976                 FT_UINT16, BASE_DEC, NULL, 0x0,
6977                 "Identifies the component to which the data in this packet should be applied", HFILL }
6978         },
6979         { &hf_cigi3_component_control_instance_id,
6980             { "Instance ID", "cigi.component_control.instance_id",
6981                 FT_UINT16, BASE_DEC, NULL, 0x0,
6982                 "Identifies the object to which the component belongs", HFILL }
6983         },
6984         { &hf_cigi3_component_control_component_class,
6985             { "Component Class", "cigi.component_control.component_class",
6986                 FT_UINT8, BASE_DEC, VALS(cigi3_component_control_component_class_vals), 0x0f,
6987                 "Identifies the type of object to which the Instance ID parameter refers", HFILL }
6988         },
6989         { &hf_cigi3_component_control_component_state,
6990             { "Component State", "cigi.component_control.component_state",
6991                 FT_UINT8, BASE_DEC, NULL, 0x0,
6992                 "Specifies a discrete state for the component", HFILL }
6993         },
6994         { &hf_cigi3_component_control_data_1,
6995             { "Component Data 1", "cigi.component_control.data_1",
6996                 FT_BYTES, BASE_NONE, NULL, 0x0,
6997                 "User-defined component data", HFILL }
6998         },
6999         { &hf_cigi3_component_control_data_2,
7000             { "Component Data 2", "cigi.component_control.data_2",
7001                 FT_BYTES, BASE_NONE, NULL, 0x0,
7002                 "User-defined component data", HFILL }
7003         },
7004         { &hf_cigi3_component_control_data_3,
7005             { "Component Data 3", "cigi.component_control.data_3",
7006                 FT_BYTES, BASE_NONE, NULL, 0x0,
7007                 "User-defined component data", HFILL }
7008         },
7009         { &hf_cigi3_component_control_data_4,
7010             { "Component Data 4", "cigi.component_control.data_4",
7011                 FT_BYTES, BASE_NONE, NULL, 0x0,
7012                 "User-defined component data", HFILL }
7013         },
7014         { &hf_cigi3_component_control_data_5,
7015             { "Component Data 5", "cigi.component_control.data_5",
7016                 FT_BYTES, BASE_NONE, NULL, 0x0,
7017                 "User-defined component data", HFILL }
7018         },
7019         { &hf_cigi3_component_control_data_6,
7020             { "Component Data 6", "cigi.component_control.data_6",
7021                 FT_BYTES, BASE_NONE, NULL, 0x0,
7022                 "User-defined component data", HFILL }
7023         },
7024
7025         /* CIGI3_3 Component Control */
7026         { &hf_cigi3_3_component_control,
7027             { "Component Control", "cigi.component_control",
7028                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7029                 "Component Control Packet", HFILL }
7030         },
7031         { &hf_cigi3_3_component_control_component_id,
7032             { "Component ID", "cigi.component_control.component_id",
7033                 FT_UINT16, BASE_DEC, NULL, 0x0,
7034                 "Identifies the component to which the data in this packet should be applied", HFILL }
7035         },
7036         { &hf_cigi3_3_component_control_instance_id,
7037             { "Instance ID", "cigi.component_control.instance_id",
7038                 FT_UINT16, BASE_DEC, NULL, 0x0,
7039                 "Identifies the object to which the component belongs", HFILL }
7040         },
7041         { &hf_cigi3_3_component_control_component_class,
7042             { "Component Class", "cigi.component_control.component_class",
7043                 FT_UINT8, BASE_DEC, VALS(cigi3_3_component_control_component_class_vals), 0x3f,
7044                 "Identifies the type of object to which the Instance ID parameter refers", HFILL }
7045         },
7046         { &hf_cigi3_3_component_control_component_state,
7047             { "Component State", "cigi.component_control.component_state",
7048                 FT_UINT8, BASE_DEC, NULL, 0x0,
7049                 "Specifies a discrete state for the component", HFILL }
7050         },
7051         { &hf_cigi3_3_component_control_data_1,
7052             { "Component Data 1", "cigi.component_control.data_1",
7053                 FT_BYTES, BASE_NONE, NULL, 0x0,
7054                 "User-defined component data", HFILL }
7055         },
7056         { &hf_cigi3_3_component_control_data_2,
7057             { "Component Data 2", "cigi.component_control.data_2",
7058                 FT_BYTES, BASE_NONE, NULL, 0x0,
7059                 "User-defined component data", HFILL }
7060         },
7061         { &hf_cigi3_3_component_control_data_3,
7062             { "Component Data 3", "cigi.component_control.data_3",
7063                 FT_BYTES, BASE_NONE, NULL, 0x0,
7064                 "User-defined component data", HFILL }
7065         },
7066         { &hf_cigi3_3_component_control_data_4,
7067             { "Component Data 4", "cigi.component_control.data_4",
7068                 FT_BYTES, BASE_NONE, NULL, 0x0,
7069                 "User-defined component data", HFILL }
7070         },
7071         { &hf_cigi3_3_component_control_data_5,
7072             { "Component Data 5", "cigi.component_control.data_5",
7073                 FT_BYTES, BASE_NONE, NULL, 0x0,
7074                 "User-defined component data", HFILL }
7075         },
7076         { &hf_cigi3_3_component_control_data_6,
7077             { "Component Data 6", "cigi.component_control.data_6",
7078                 FT_BYTES, BASE_NONE, NULL, 0x0,
7079                 "User-defined component data", HFILL }
7080         },
7081
7082         /* CIGI3 Short Component Control */
7083         { &hf_cigi3_short_component_control,
7084             { "Short Component Control", "cigi.short_component_control",
7085                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7086                 "Short Component Control Packet", HFILL }
7087         },
7088         { &hf_cigi3_short_component_control_component_id,
7089             { "Component ID", "cigi.short_component_control.component_id",
7090                 FT_UINT16, BASE_DEC, NULL, 0x0,
7091                 "Identifies the component to which the data in this packet should be applied", HFILL }
7092         },
7093         { &hf_cigi3_short_component_control_instance_id,
7094             { "Instance ID", "cigi.short_component_control.instance_id",
7095                 FT_UINT16, BASE_DEC, NULL, 0x0,
7096                 "Identifies the object to which the component belongs", HFILL }
7097         },
7098         { &hf_cigi3_short_component_control_component_class,
7099             { "Component Class", "cigi.short_component_control.component_class",
7100                 FT_UINT8, BASE_DEC, VALS(cigi3_short_component_control_component_class_vals), 0x0f,
7101                 "Identifies the type of object to which the Instance ID parameter refers", HFILL }
7102         },
7103         { &hf_cigi3_short_component_control_component_state,
7104             { "Component State", "cigi.short_component_control.component_state",
7105                 FT_UINT8, BASE_DEC, NULL, 0x0,
7106                 "Specifies a discrete state for the component", HFILL }
7107         },
7108         { &hf_cigi3_short_component_control_data_1,
7109             { "Component Data 1", "cigi.short_component_control.data_1",
7110                 FT_BYTES, BASE_NONE, NULL, 0x0,
7111                 "User-defined component data", HFILL }
7112         },
7113         { &hf_cigi3_short_component_control_data_2,
7114             { "Component Data 2", "cigi.short_component_control.data_2",
7115                 FT_BYTES, BASE_NONE, NULL, 0x0,
7116                 "User-defined component data", HFILL }
7117         },
7118
7119         /* CIGI3_3 Short Component Control */
7120         { &hf_cigi3_3_short_component_control,
7121             { "Short Component Control", "cigi.short_component_control",
7122                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7123                 "Short Component Control Packet", HFILL }
7124         },
7125         { &hf_cigi3_3_short_component_control_component_id,
7126             { "Component ID", "cigi.short_component_control.component_id",
7127                 FT_UINT16, BASE_DEC, NULL, 0x0,
7128                 "Identifies the component to which the data in this packet should be applied", HFILL }
7129         },
7130         { &hf_cigi3_3_short_component_control_instance_id,
7131             { "Instance ID", "cigi.short_component_control.instance_id",
7132                 FT_UINT16, BASE_DEC, NULL, 0x0,
7133                 "Identifies the object to which the component belongs", HFILL }
7134         },
7135         { &hf_cigi3_3_short_component_control_component_class,
7136             { "Component Class", "cigi.short_component_control.component_class",
7137                 FT_UINT8, BASE_DEC, VALS(cigi3_3_short_component_control_component_class_vals), 0x3f,
7138                 "Identifies the type of object to which the Instance ID parameter refers", HFILL }
7139         },
7140         { &hf_cigi3_3_short_component_control_component_state,
7141             { "Component State", "cigi.short_component_control.component_state",
7142                 FT_UINT8, BASE_DEC, NULL, 0x0,
7143                 "Specifies a discrete state for the component", HFILL }
7144         },
7145         { &hf_cigi3_3_short_component_control_data_1,
7146             { "Component Data 1", "cigi.short_component_control.data_1",
7147                 FT_BYTES, BASE_NONE, NULL, 0x0,
7148                 "User-defined component data", HFILL }
7149         },
7150         { &hf_cigi3_3_short_component_control_data_2,
7151             { "Component Data 2", "cigi.short_component_control.data_2",
7152                 FT_BYTES, BASE_NONE, NULL, 0x0,
7153                 "User-defined component data", HFILL }
7154         },
7155
7156         /* CIGI2 Articulated Parts Control */
7157         { &hf_cigi2_articulated_parts_control,
7158             { "Articulated Parts Control", "cigi.art_part_control",
7159                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7160                 "Articulated Parts Control Packet", HFILL }
7161         },
7162         { &hf_cigi2_articulated_parts_control_entity_id,
7163             { "Entity ID", "cigi.art_part_control.entity_id",
7164                 FT_UINT16, BASE_DEC, NULL, 0x0,
7165                 "Identifies the entity to which this data packet will be applied", HFILL }
7166         },
7167         { &hf_cigi2_articulated_parts_control_part_id,
7168             { "Articulated Part ID", "cigi.art_part_control.part_id",
7169                 FT_UINT8, BASE_DEC, NULL, 0x0,
7170                 "Identifies which articulated part is controlled with this data packet", HFILL }
7171         },
7172         { &hf_cigi2_articulated_parts_control_part_state,
7173             { "Articulated Part State", "cigi.art_part_control.part_state",
7174                 FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x80,
7175                 "Indicates whether an articulated part is to be shown in the display", HFILL }
7176         },
7177         { &hf_cigi2_articulated_parts_control_xoff_enable,
7178             { "X Offset Enable", "cigi.art_part_control.xoff_enable",
7179                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x40,
7180                 "Identifies whether the articulated part x offset in this data packet is manipulated from the host", HFILL }
7181         },
7182         { &hf_cigi2_articulated_parts_control_yoff_enable,
7183             { "Y Offset Enable", "cigi.art_part_control.yoff_enable",
7184                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x20,
7185                 "Identifies whether the articulated part y offset in this data packet is manipulated from the host", HFILL }
7186         },
7187         { &hf_cigi2_articulated_parts_control_zoff_enable,
7188             { "Z Offset Enable", "cigi.art_part_control.zoff_enable",
7189                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x10,
7190                 "Identifies whether the articulated part z offset in this data packet is manipulated from the host", HFILL }
7191         },
7192         { &hf_cigi2_articulated_parts_control_roll_enable,
7193             { "Roll Enable", "cigi.art_part_control.roll_enable",
7194                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
7195                 "Identifies whether the articulated part roll enable in this data packet is manipulated from the host", HFILL }
7196         },
7197         { &hf_cigi2_articulated_parts_control_pitch_enable,
7198             { "Pitch Enable", "cigi.art_part_control.pitch_enable",
7199                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x04,
7200                 "Identifies whether the articulated part pitch enable in this data packet is manipulated from the host", HFILL }
7201         },
7202         { &hf_cigi2_articulated_parts_control_yaw_enable,
7203             { "Yaw Enable", "cigi.art_part_control.yaw_enable",
7204                 FT_UINT8, BASE_DEC, NULL, 0x02,
7205                 "Identifies whether the articulated part yaw enable in this data packet is manipulated from the host", HFILL }
7206         },
7207         { &hf_cigi2_articulated_parts_control_x_offset,
7208             { "X Offset (m)", "cigi.art_part_control.x_offset",
7209                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7210                 "Identifies the distance along the X axis by which the articulated part should be moved", HFILL }
7211         },
7212         { &hf_cigi2_articulated_parts_control_y_offset,
7213             { "Y Offset (m)", "cigi.art_part_control.y_offset",
7214                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7215                 "Identifies the distance along the Y axis by which the articulated part should be moved", HFILL }
7216         },
7217         { &hf_cigi2_articulated_parts_control_z_offset,
7218             { "Z Offset (m)", "cigi.art_part_control.z_offset",
7219                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7220                 "Identifies the distance along the Z axis by which the articulated part should be moved", HFILL }
7221         },
7222         { &hf_cigi2_articulated_parts_control_roll,
7223             { "Roll (degrees)", "cigi.art_part_control.roll",
7224                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7225                 "Specifies the roll of this part with respect to the submodel coordinate system", HFILL }
7226         },
7227         { &hf_cigi2_articulated_parts_control_pitch,
7228             { "Pitch (degrees)", "cigi.art_part_control.pitch",
7229                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7230                 "Specifies the pitch of this part with respect to the submodel coordinate system", HFILL }
7231         },
7232         { &hf_cigi2_articulated_parts_control_yaw,
7233             { "Yaw (degrees)", "cigi.art_part_control.yaw",
7234                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7235                 "Specifies the yaw of this part with respect to the submodel coordinate system", HFILL }
7236         },
7237
7238         /* CIGI3 Articulated Part Control */
7239         { &hf_cigi3_articulated_part_control,
7240             { "Articulated Part Control", "cigi.art_part_control",
7241                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7242                 "Articulated Part Control Packet", HFILL }
7243         },
7244         { &hf_cigi3_articulated_part_control_entity_id,
7245             { "Entity ID", "cigi.art_part_control.entity_id",
7246                 FT_UINT16, BASE_DEC, NULL, 0x0,
7247                 "Specifies the entity to which the articulated part belongs", HFILL }
7248         },
7249         { &hf_cigi3_articulated_part_control_part_id,
7250             { "Articulated Part ID", "cigi.art_part_control.part_id",
7251                 FT_UINT8, BASE_DEC, NULL, 0x0,
7252                 "Specifies the articulated part to which the data in this packet should be applied", HFILL }
7253         },
7254         { &hf_cigi3_articulated_part_control_part_enable,
7255             { "Articulated Part Enable", "cigi.art_part_control.part_enable",
7256                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
7257                 "Determines whether the articulated part submodel should be enabled or disabled within the scene graph", HFILL }
7258         },
7259         { &hf_cigi3_articulated_part_control_xoff_enable,
7260             { "X Offset Enable", "cigi.art_part_control.xoff_enable",
7261                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x02,
7262                 "Determines whether the X Offset parameter of the current packet should be applied to the articulated part", HFILL }
7263         },
7264         { &hf_cigi3_articulated_part_control_yoff_enable,
7265             { "Y Offset Enable", "cigi.art_part_control.yoff_enable",
7266                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x04,
7267                 "Determines whether the Y Offset parameter of the current packet should be applied to the articulated part", HFILL }
7268         },
7269         { &hf_cigi3_articulated_part_control_zoff_enable,
7270             { "Z Offset Enable", "cigi.art_part_control.zoff_enable",
7271                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
7272                 "Determines whether the Z Offset parameter of the current packet should be applied to the articulated part", HFILL }
7273         },
7274         { &hf_cigi3_articulated_part_control_roll_enable,
7275             { "Roll Enable", "cigi.art_part_control.roll_enable",
7276                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x10,
7277                 "Determines whether the Roll parameter of the current packet should be applied to the articulated part", HFILL }
7278         },
7279         { &hf_cigi3_articulated_part_control_pitch_enable,
7280             { "Pitch Enable", "cigi.art_part_control.pitch_enable",
7281                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x20,
7282                 "Determines whether the Pitch parameter of the current packet should be applied to the articulated part", HFILL }
7283         },
7284         { &hf_cigi3_articulated_part_control_yaw_enable,
7285             { "Yaw Enable", "cigi.art_part_control.yaw_enable",
7286                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x40,
7287                 "Determines whether the Yaw parameter of the current packet should be applied to the articulated part", HFILL }
7288         },
7289         { &hf_cigi3_articulated_part_control_xoff,
7290             { "X Offset (m)", "cigi.art_part_control.xoff",
7291                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7292                 "Specifies the distance of the articulated part along its X axis", HFILL }
7293         },
7294         { &hf_cigi3_articulated_part_control_yoff,
7295             { "Y Offset (m)", "cigi.art_part_control.yoff",
7296                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7297                 "Specifies the distance of the articulated part along its Y axis", HFILL }
7298         },
7299         { &hf_cigi3_articulated_part_control_zoff,
7300             { "Z Offset (m)", "cigi.art_part_control.zoff",
7301                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7302                 "Specifies the distance of the articulated part along its Z axis", HFILL }
7303         },
7304         { &hf_cigi3_articulated_part_control_roll,
7305             { "Roll (degrees)", "cigi.art_part_control.roll",
7306                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7307                 "Specifies the angle of rotation of the articulated part submodel about its X axis after yaw and pitch have been applied", HFILL }
7308         },
7309         { &hf_cigi3_articulated_part_control_pitch,
7310             { "Pitch (degrees)", "cigi.art_part_control.pitch",
7311                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7312                 "Specifies the angle of rotation of the articulated part submodel about its Y axis after yaw has been applied", HFILL }
7313         },
7314         { &hf_cigi3_articulated_part_control_yaw,
7315             { "Yaw (degrees)", "cigi.art_part_control.yaw",
7316                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7317                 "Specifies the angle of rotation of the articulated part about its Z axis", HFILL }
7318         },
7319
7320         /* CIGI3 Short Articulated Part Control */
7321         { &hf_cigi3_short_articulated_part_control,
7322             { "Short Articulated Part Control", "cigi.short_art_part_control",
7323                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7324                 "Short Articulated Part Control Packet", HFILL }
7325         },
7326         { &hf_cigi3_short_articulated_part_control_entity_id,
7327             { "Entity ID", "cigi.short_art_part_control.entity_id",
7328                 FT_UINT16, BASE_DEC, NULL, 0x0,
7329                 "Specifies the entity to which the articulated part(s) belongs", HFILL }
7330         },
7331         { &hf_cigi3_short_articulated_part_control_part_id_1,
7332             { "Articulated Part ID 1", "cigi.short_art_part_control.part_id_1",
7333                 FT_UINT8, BASE_DEC, NULL, 0x0,
7334                 "Specifies an articulated part to which the data in this packet should be applied", HFILL }
7335         },
7336         { &hf_cigi3_short_articulated_part_control_part_id_2,
7337             { "Articulated Part ID 2", "cigi.short_art_part_control.part_id_2",
7338                 FT_UINT8, BASE_DEC, NULL, 0x0,
7339                 "Specifies an articulated part to which the data in this packet should be applied", HFILL }
7340         },
7341         { &hf_cigi3_short_articulated_part_control_dof_select_1,
7342             { "DOF Select 1", "cigi.short_art_part_control.dof_select_1",
7343                 FT_UINT8, BASE_DEC, VALS(cigi3_short_articulated_part_control_dof_select_vals), 0x07,
7344                 "Specifies the degree of freedom to which the value of DOF 1 is applied", HFILL }
7345         },
7346         { &hf_cigi3_short_articulated_part_control_dof_select_2,
7347             { "DOF Select 2", "cigi.short_art_part_control.dof_select_2",
7348                 FT_UINT8, BASE_DEC, VALS(cigi3_short_articulated_part_control_dof_select_vals), 0x38,
7349                 "Specifies the degree of freedom to which the value of DOF 2 is applied", HFILL }
7350         },
7351         { &hf_cigi3_short_articulated_part_control_part_enable_1,
7352             { "Articulated Part Enable 1", "cigi.short_art_part_control.part_enable_1",
7353                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x40,
7354                 "Determines whether the articulated part submodel specified by Articulated Part ID 1 should be enabled or disabled within the scene graph", HFILL }
7355         },
7356         { &hf_cigi3_short_articulated_part_control_part_enable_2,
7357             { "Articulated Part Enable 2", "cigi.short_art_part_control.part_enable_2",
7358                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x80,
7359                 "Determines whether the articulated part submodel specified by Articulated Part ID 2 should be enabled or disabled within the scene graph", HFILL }
7360         },
7361         { &hf_cigi3_short_articulated_part_control_dof_1,
7362             { "DOF 1", "cigi.short_art_part_control.dof_1",
7363                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7364                 "Specifies either an offset or an angular position for the part identified by Articulated Part ID 1", HFILL }
7365         },
7366         { &hf_cigi3_short_articulated_part_control_dof_2,
7367             { "DOF 2", "cigi.short_art_part_control.dof_2",
7368                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7369                 "Specifies either an offset or an angular position for the part identified by Articulated Part ID 2", HFILL }
7370         },
7371
7372         /* CIGI2 Rate Control */
7373         { &hf_cigi2_rate_control,
7374             { "Rate Control", "cigi.rate_control",
7375                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7376                 "Rate Control Packet", HFILL }
7377         },
7378         { &hf_cigi2_rate_control_entity_id,
7379             { "Entity ID", "cigi.rate_control.entity_id",
7380                 FT_UINT16, BASE_DEC, NULL, 0x0,
7381                 "Specifies the entity to which this data packet will be applied", HFILL }
7382         },
7383         { &hf_cigi2_rate_control_part_id,
7384             { "Articulated Part ID", "cigi.rate_control.part_id",
7385                 FT_INT8, BASE_DEC, NULL, 0x0,
7386                 "Identifies which articulated part is controlled with this data packet", HFILL }
7387         },
7388         { &hf_cigi2_rate_control_x_rate,
7389             { "X Linear Rate (m/s)", "cigi.rate_control.x_rate",
7390                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7391                 "Specifies the x component of the velocity vector for the entity being represented", HFILL }
7392         },
7393         { &hf_cigi2_rate_control_y_rate,
7394             { "Y Linear Rate (m/s)", "cigi.rate_control.y_rate",
7395                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7396                 "Specifies the y component of the velocity vector for the entity being represented", HFILL }
7397         },
7398         { &hf_cigi2_rate_control_z_rate,
7399             { "Z Linear Rate (m/s)", "cigi.rate_control.z_rate",
7400                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7401                 "Specifies the z component of the velocity vector for the entity being represented", HFILL }
7402         },
7403         { &hf_cigi2_rate_control_roll_rate,
7404             { "Roll Angular Rate (degrees/s)", "cigi.rate_control.roll_rate",
7405                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7406                 "Specifies the roll angular rate for the entity being represented", HFILL }
7407         },
7408         { &hf_cigi2_rate_control_pitch_rate,
7409             { "Pitch Angular Rate (degrees/s)", "cigi.rate_control.pitch_rate",
7410                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7411                 "Specifies the pitch angular rate for the entity being represented", HFILL }
7412         },
7413         { &hf_cigi2_rate_control_yaw_rate,
7414             { "Yaw Angular Rate (degrees/s)", "cigi.rate_control.yaw_rate",
7415                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7416                 "Specifies the yaw angular rate for the entity being represented", HFILL }
7417         },
7418
7419         /* CIGI3 Rate Control */
7420         { &hf_cigi3_rate_control,
7421             { "Rate Control", "cigi.rate_control",
7422                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7423                 "Rate Control Packet", HFILL }
7424         },
7425         { &hf_cigi3_rate_control_entity_id,
7426             { "Entity ID", "cigi.rate_control.entity_id",
7427                 FT_UINT16, BASE_DEC, NULL, 0x0,
7428                 "Specifies the entity to which the rate should be applied", HFILL }
7429         },
7430         { &hf_cigi3_rate_control_part_id,
7431             { "Articulated Part ID", "cigi.rate_control.part_id",
7432                 FT_UINT8, BASE_DEC, NULL, 0x0,
7433                 "Specifies the articulated part to which the rate should be applied", HFILL }
7434         },
7435         { &hf_cigi3_rate_control_apply_to_part,
7436             { "Apply to Articulated Part", "cigi.rate_control.apply_to_part",
7437                 FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x01,
7438                 "Determines whether the rate is applied to the articulated part specified by the Articulated Part ID parameter", HFILL }
7439         },
7440         { &hf_cigi3_rate_control_x_rate,
7441             { "X Linear Rate (m/s)", "cigi.rate_control.x_rate",
7442                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7443                 "Specifies the X component of a linear velocity vector", HFILL }
7444         },
7445         { &hf_cigi3_rate_control_y_rate,
7446             { "Y Linear Rate (m/s)", "cigi.rate_control.y_rate",
7447                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7448                 "Specifies the Y component of a linear velocity vector", HFILL }
7449         },
7450         { &hf_cigi3_rate_control_z_rate,
7451             { "Z Linear Rate (m/s)", "cigi.rate_control.z_rate",
7452                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7453                 "Specifies the Z component of a linear velocity vector", HFILL }
7454         },
7455         { &hf_cigi3_rate_control_roll_rate,
7456             { "Roll Angular Rate (degrees/s)", "cigi.rate_control.roll_rate",
7457                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7458                 "Specifies the angle of rotation of the articulated part submodel about its X axis after yaw and pitch have been applied", HFILL }
7459         },
7460         { &hf_cigi3_rate_control_pitch_rate,
7461             { "Pitch Angular Rate (degrees/s)", "cigi.rate_control.pitch_rate",
7462                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7463                 "Specifies the angle of rotation of the articulated part submodel about its Y axis after yaw has been applied", HFILL }
7464         },
7465         { &hf_cigi3_rate_control_yaw_rate,
7466             { "Yaw Angular Rate (degrees/s)", "cigi.rate_control.yaw_rate",
7467                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7468                 "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 }
7469         },
7470
7471         /* CIGI3_2 Rate Control */
7472         { &hf_cigi3_2_rate_control,
7473             { "Rate Control", "cigi.rate_control",
7474                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7475                 "Rate Control Packet", HFILL }
7476         },
7477         { &hf_cigi3_2_rate_control_entity_id,
7478             { "Entity ID", "cigi.rate_control.entity_id",
7479                 FT_UINT16, BASE_DEC, NULL, 0x0,
7480                 "Specifies the entity to which the rate should be applied", HFILL }
7481         },
7482         { &hf_cigi3_2_rate_control_part_id,
7483             { "Articulated Part ID", "cigi.rate_control.part_id",
7484                 FT_UINT8, BASE_DEC, NULL, 0x0,
7485                 "Specifies the articulated part to which the rate should be applied", HFILL }
7486         },
7487         { &hf_cigi3_2_rate_control_apply_to_part,
7488             { "Apply to Articulated Part", "cigi.rate_control.apply_to_part",
7489                 FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x01,
7490                 "Determines whether the rate is applied to the articulated part specified by the Articulated Part ID parameter", HFILL }
7491         },
7492         { &hf_cigi3_2_rate_control_coordinate_system,
7493             { "Coordinate System", "cigi.rate_control.coordinate_system",
7494                 FT_BOOLEAN, 8, TFS(&cigi3_2_rate_control_coord_sys_select_vals), 0x02,
7495                 "Specifies the reference coordinate system to which the linear and angular rates are applied", HFILL }
7496         },
7497         { &hf_cigi3_2_rate_control_x_rate,
7498             { "X Linear Rate (m/s)", "cigi.rate_control.x_rate",
7499                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7500                 "Specifies the X component of a linear velocity vector", HFILL }
7501         },
7502         { &hf_cigi3_2_rate_control_y_rate,
7503             { "Y Linear Rate (m/s)", "cigi.rate_control.y_rate",
7504                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7505                 "Specifies the Y component of a linear velocity vector", HFILL }
7506         },
7507         { &hf_cigi3_2_rate_control_z_rate,
7508             { "Z Linear Rate (m/s)", "cigi.rate_control.z_rate",
7509                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7510                 "Specifies the Z component of a linear velocity vector", HFILL }
7511         },
7512         { &hf_cigi3_2_rate_control_roll_rate,
7513             { "Roll Angular Rate (degrees/s)", "cigi.rate_control.roll_rate",
7514                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7515                 "Specifies the angle of rotation of the articulated part submodel about its X axis after yaw and pitch have been applied", HFILL }
7516         },
7517         { &hf_cigi3_2_rate_control_pitch_rate,
7518             { "Pitch Angular Rate (degrees/s)", "cigi.rate_control.pitch_rate",
7519                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7520                 "Specifies the angle of rotation of the articulated part submodel about its Y axis after yaw has been applied", HFILL }
7521         },
7522         { &hf_cigi3_2_rate_control_yaw_rate,
7523             { "Yaw Angular Rate (degrees/s)", "cigi.rate_control.yaw_rate",
7524                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7525                 "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 }
7526         },
7527
7528         /* CIGI3 Celestial Sphere Control */
7529         { &hf_cigi3_celestial_sphere_control,
7530             { "Celestial Sphere Control", "cigi.celestial_sphere_control",
7531                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7532                 "Celestial Sphere Control Packet", HFILL }
7533         },
7534         { &hf_cigi3_celestial_sphere_control_hour,
7535             { "Hour (h)", "cigi.celestial_sphere_control.hour",
7536                 FT_UINT8, BASE_DEC, NULL, 0x0,
7537                 "Specifies the current hour of the day within the simulation", HFILL }
7538         },
7539         { &hf_cigi3_celestial_sphere_control_minute,
7540             { "Minute (min)", "cigi.celestial_sphere_control.minute",
7541                 FT_UINT8, BASE_DEC, NULL, 0x0,
7542                 "Specifies the current minute of the day within the simulation", HFILL }
7543         },
7544         { &hf_cigi3_celestial_sphere_control_ephemeris_enable,
7545             { "Ephemeris Model Enable", "cigi.celestial_sphere_control.ephemeris_enable",
7546                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
7547                 "Controls whether the time of day is static or continuous", HFILL }
7548         },
7549         { &hf_cigi3_celestial_sphere_control_sun_enable,
7550             { "Sun Enable", "cigi.celestial_sphere_control.sun_enable",
7551                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x02,
7552                 "Specifies whether the sun is enabled in the sky model", HFILL }
7553         },
7554         { &hf_cigi3_celestial_sphere_control_moon_enable,
7555             { "Moon Enable", "cigi.celestial_sphere_control.moon_enable",
7556                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x04,
7557                 "Specifies whether the moon is enabled in the sky model", HFILL }
7558         },
7559         { &hf_cigi3_celestial_sphere_control_star_enable,
7560             { "Star Field Enable", "cigi.celestial_sphere_control.star_enable",
7561                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
7562                 "Specifies whether the start field is enabled in the sky model", HFILL }
7563         },
7564         { &hf_cigi3_celestial_sphere_control_date_time_valid,
7565             { "Date/Time Valid", "cigi.celestial_sphere_control.date_time_valid",
7566                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x10,
7567                 "Specifies whether the Hour, Minute, and Date parameters are valid", HFILL }
7568         },
7569         { &hf_cigi3_celestial_sphere_control_date,
7570             { "Date (MMDDYYYY)", "cigi.celestial_sphere_control.date",
7571                 FT_UINT32, BASE_DEC, NULL, 0x0,
7572                 "Specifies the current date within the simulation", HFILL }
7573         },
7574         { &hf_cigi3_celestial_sphere_control_star_intensity,
7575             { "Star Field Intensity (%)", "cigi.celestial_sphere_control.star_intensity",
7576                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7577                 "Specifies the intensity of the star field within the sky model", HFILL }
7578         },
7579
7580         /* CIGI3 Atmosphere Control */
7581         { &hf_cigi3_atmosphere_control,
7582             { "Atmosphere Control", "cigi.atmosphere_control",
7583                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7584                 "Atmosphere Control Packet", HFILL }
7585         },
7586         { &hf_cigi3_atmosphere_control_atmospheric_model_enable,
7587             { "Atmospheric Model Enable", "cigi.atmosphere_control.atmospheric_model_enable",
7588                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
7589                 "Specifies whether the IG should use an atmospheric model to determine spectral radiances for sensor applications", HFILL }
7590         },
7591         { &hf_cigi3_atmosphere_control_humidity,
7592             { "Global Humidity (%)", "cigi.atmosphere_control.humidity",
7593                 FT_UINT8, BASE_DEC, NULL, 0x0,
7594                 "Specifies the global humidity of the environment", HFILL }
7595         },
7596         { &hf_cigi3_atmosphere_control_air_temp,
7597             { "Global Air Temperature (degrees C)", "cigi.atmosphere_control.air_temp",
7598                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7599                 "Specifies the global air temperature of the environment", HFILL }
7600         },
7601         { &hf_cigi3_atmosphere_control_visibility_range,
7602             { "Global Visibility Range (m)", "cigi.atmosphere_control.visibility_range",
7603                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7604                 "Specifies the global visibility range through the atmosphere", HFILL }
7605         },
7606         { &hf_cigi3_atmosphere_control_horiz_wind,
7607             { "Global Horizontal Wind Speed (m/s)", "cigi.atmosphere_control.horiz_wind",
7608                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7609                 "Specifies the global wind speed parallel to the ellipsoid-tangential reference plane", HFILL }
7610         },
7611         { &hf_cigi3_atmosphere_control_vert_wind,
7612             { "Global Vertical Wind Speed (m/s)", "cigi.atmosphere_control.vert_wind",
7613                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7614                 "Specifies the global vertical wind speed", HFILL }
7615         },
7616         { &hf_cigi3_atmosphere_control_wind_direction,
7617             { "Global Wind Direction (degrees)", "cigi.atmosphere_control.wind_direction",
7618                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7619                 "Specifies the global wind direction", HFILL }
7620         },
7621         { &hf_cigi3_atmosphere_control_barometric_pressure,
7622             { "Global Barometric Pressure (mb or hPa)", "cigi.atmosphere_control.barometric_pressure",
7623                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7624                 "Specifies the global atmospheric pressure", HFILL }
7625         },
7626
7627         /* CIGI2 Environmental Control */
7628         { &hf_cigi2_environment_control,
7629             { "Environment Control", "cigi.env_control",
7630                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7631                 "Environment Control Packet", HFILL }
7632         },
7633         { &hf_cigi2_environment_control_hour,
7634             { "Hour (h)", "cigi.env_control.hour",
7635                 FT_UINT8, BASE_DEC, NULL, 0x0,
7636                 "Identifies the hour of the day for the ephemeris program within the image generator", HFILL }
7637         },
7638         { &hf_cigi2_environment_control_minute,
7639             { "Minute (min)", "cigi.env_control.minute",
7640                 FT_UINT8, BASE_DEC, NULL, 0x0,
7641                 "Identifies the minute of the hour for the ephemeris program within the image generator", HFILL }
7642         },
7643         { &hf_cigi2_environment_control_ephemeris_enable,
7644             { "Ephemeris Enable", "cigi.env_control.ephemeris_enable",
7645                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x80,
7646                 "Identifies whether a continuous time of day or static time of day is used", HFILL }
7647         },
7648         { &hf_cigi2_environment_control_humidity,
7649             { "Humidity (%)", "cigi.env_control.humidity",
7650                 FT_UINT8, BASE_DEC, NULL, 0x7f,
7651                 "Specifies the global humidity of the environment", HFILL }
7652         },
7653         { &hf_cigi2_environment_control_modtran_enable,
7654             { "MODTRAN", "cigi.env_control.modtran_enable",
7655                 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x80,
7656                 "Identifies whether atmospherics will be included in the calculations", HFILL }
7657         },
7658         { &hf_cigi2_environment_control_date,
7659             { "Date (MMDDYYYY)", "cigi.env_control.date",
7660                 FT_INT32, BASE_DEC, NULL, 0x0,
7661                 "Specifies the desired date for use by the ephemeris program within the image generator", HFILL }
7662         },
7663         { &hf_cigi2_environment_control_air_temp,
7664             { "Air Temperature (degrees C)", "cigi.env_control.air_temp",
7665                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7666                 "Identifies the global temperature of the environment", HFILL }
7667         },
7668         { &hf_cigi2_environment_control_global_visibility,
7669             { "Global Visibility (m)", "cigi.env_control.global_visibility",
7670                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7671                 "Identifies the global visibility", HFILL }
7672         },
7673         { &hf_cigi2_environment_control_wind_speed,
7674             { "Wind Speed (m/s)", "cigi.env_control.wind_speed",
7675                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7676                 "Identifies the global wind speed", HFILL }
7677         },
7678         { &hf_cigi2_environment_control_wind_direction,
7679             { "Wind Direction (degrees)", "cigi.env_control.wind_direction",
7680                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7681                 "Identifies the global wind direction", HFILL }
7682         },
7683         { &hf_cigi2_environment_control_pressure,
7684             { "Barometric Pressure (mb)", "cigi.env_control.pressure",
7685                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7686                 "Controls the atmospheric pressure input into MODTRAN", HFILL }
7687         },
7688         { &hf_cigi2_environment_control_aerosol,
7689             { "Aerosol (gm/m^3)", "cigi.env_control.aerosol",
7690                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7691                 "Controls the liquid water content for the defined atmosphere", HFILL }
7692         },
7693
7694         /* CIGI3 Environmental Region Control */
7695         { &hf_cigi3_environmental_region_control,
7696             { "Environmental Region Control", "cigi.env_region_control",
7697                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7698                 "Environmental Region Control Packet", HFILL }
7699         },
7700         { &hf_cigi3_environmental_region_control_region_id,
7701             { "Region ID", "cigi.env_region_control.region_id",
7702                 FT_UINT16, BASE_DEC, NULL, 0x0,
7703                 "Specifies the environmental region to which the data in this packet will be applied", HFILL }
7704         },
7705         { &hf_cigi3_environmental_region_control_region_state,
7706             { "Region State", "cigi.env_region_control.region_state",
7707                 FT_UINT8, BASE_DEC, VALS(cigi3_environmental_region_control_region_state_vals), 0x03,
7708                 "Specifies whether the region should be active or destroyed", HFILL }
7709         },
7710         { &hf_cigi3_environmental_region_control_merge_weather,
7711             { "Merge Weather Properties", "cigi.env_region_control.merge_weather",
7712                 FT_BOOLEAN, 8, TFS(&cigi3_environmental_region_control_merge_properties_tfs), 0x04,
7713                 "Specifies whether atmospheric conditions within this region should be merged with those of other regions within areas of overlap", HFILL }
7714         },
7715         { &hf_cigi3_environmental_region_control_merge_aerosol,
7716             { "Merge Aerosol Concentrations", "cigi.env_region_control.merge_aerosol",
7717                 FT_BOOLEAN, 8, TFS(&cigi3_environmental_region_control_merge_properties_tfs), 0x08,
7718                 "Specifies whether the concentrations of aerosols found within this region should be merged with those of other regions within areas of overlap", HFILL }
7719         },
7720         { &hf_cigi3_environmental_region_control_merge_maritime,
7721             { "Merge Maritime Surface Conditions", "cigi.env_region_control.merge_maritime",
7722                 FT_BOOLEAN, 8, TFS(&cigi3_environmental_region_control_merge_properties_tfs), 0x10,
7723                 "Specifies whether the maritime surface conditions found within this region should be merged with those of other regions within areas of overlap", HFILL }
7724         },
7725         { &hf_cigi3_environmental_region_control_merge_terrestrial,
7726             { "Merge Terrestrial Surface Conditions", "cigi.env_region_control.merge_terrestrial",
7727                 FT_BOOLEAN, 8, TFS(&cigi3_environmental_region_control_merge_properties_tfs), 0x20,
7728                 "Specifies whether the terrestrial surface conditions found within this region should be merged with those of other regions within areas of overlap", HFILL }
7729         },
7730         { &hf_cigi3_environmental_region_control_lat,
7731             { "Latitude (degrees)", "cigi.env_region_control.lat",
7732                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
7733                 "Specifies the geodetic latitude of the center of the rounded rectangle", HFILL }
7734         },
7735         { &hf_cigi3_environmental_region_control_lon,
7736             { "Longitude (degrees)", "cigi.env_region_control.lon",
7737                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
7738                 "Specifies the geodetic longitude of the center of the rounded rectangle", HFILL }
7739         },
7740         { &hf_cigi3_environmental_region_control_size_x,
7741             { "Size X (m)", "cigi.env_region_control.size_x",
7742                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7743                 "Specifies the length of the environmental region along its X axis at the geoid surface", HFILL }
7744         },
7745         { &hf_cigi3_environmental_region_control_size_y,
7746             { "Size Y (m)", "cigi.env_region_control.size_y",
7747                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7748                 "Specifies the length of the environmental region along its Y axis at the geoid surface", HFILL }
7749         },
7750         { &hf_cigi3_environmental_region_control_corner_radius,
7751             { "Corner Radius (m)", "cigi.env_region_control.corner_radius",
7752                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7753                 "Specifies the radius of the corner of the rounded rectangle", HFILL }
7754         },
7755         { &hf_cigi3_environmental_region_control_rotation,
7756             { "Rotation (degrees)", "cigi.env_region_control.rotation",
7757                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7758                 "Specifies the yaw angle of the rounded rectangle", HFILL }
7759         },
7760         { &hf_cigi3_environmental_region_control_transition_perimeter,
7761             { "Transition Perimeter (m)", "cigi.env_region_control.transition_perimeter",
7762                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7763                 "Specifies the width of the transition perimeter around the environmental region", HFILL }
7764         },
7765
7766         /* CIGI2 Weather Control */
7767         { &hf_cigi2_weather_control,
7768             { "Weather Control", "cigi.weather_control",
7769                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7770                 "Weather Control Packet", HFILL }
7771         },
7772         { &hf_cigi2_weather_control_entity_id,
7773             { "Entity ID", "cigi.weather_control.entity_id",
7774                 FT_UINT16, BASE_DEC, NULL, 0x0,
7775                 "Identifies the entity's ID", HFILL }
7776         },
7777         { &hf_cigi2_weather_control_weather_enable,
7778             { "Weather Enable", "cigi.weather_control.weather_enable",
7779                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x80,
7780                 "Indicates whether the phenomena specified by this data packet is visible", HFILL }
7781         },
7782         { &hf_cigi2_weather_control_scud_enable,
7783             { "Scud Enable", "cigi.weather_control.scud_enable",
7784                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x40,
7785                 "Indicates whether there will be scud effects applied to the phenomenon specified by this data packet", HFILL }
7786         },
7787         { &hf_cigi2_weather_control_random_winds,
7788             { "Random Winds Aloft", "cigi.weather_control.random_winds",
7789                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x20,
7790                 "Indicates whether a random frequency and duration should be applied to the winds aloft value", HFILL }
7791         },
7792         { &hf_cigi2_weather_control_severity,
7793             { "Severity", "cigi.weather_control.severity",
7794                 FT_UINT8, BASE_DEC, NULL, 0x1c,
7795                 "Indicates the severity of the weather phenomenon", HFILL }
7796         },
7797         { &hf_cigi2_weather_control_phenomenon_type,
7798             { "Phenomenon Type", "cigi.weather_control.phenomenon_type",
7799                 FT_UINT16, BASE_DEC, VALS(cigi2_weather_control_phenomenon_type_vals), 0x0,
7800                 "Identifies the type of weather described by this data packet", HFILL }
7801         },
7802         { &hf_cigi2_weather_control_air_temp,
7803             { "Air Temperature (degrees C)", "cigi.weather_control.air_temp",
7804                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7805                 "Identifies the local temperature inside the weather phenomenon", HFILL }
7806         },
7807         { &hf_cigi2_weather_control_opacity,
7808             { "Opacity (%)", "cigi.weather_control.opacity",
7809                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7810                 "Identifies the opacity of the weather phenomenon", HFILL }
7811         },
7812         { &hf_cigi2_weather_control_scud_frequency,
7813             { "Scud Frequency (%)", "cigi.weather_control.scud_frequency",
7814                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7815                 "Identifies the frequency for the scud effect", HFILL }
7816         },
7817         { &hf_cigi2_weather_control_coverage,
7818             { "Coverage (%)", "cigi.weather_control.coverage",
7819                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7820                 "Indicates the amount of area coverage a particular phenomenon has over the specified global visibility range given in the environment control data packet", HFILL }
7821         },
7822         { &hf_cigi2_weather_control_elevation,
7823             { "Elevation (m)", "cigi.weather_control.elevation",
7824                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7825                 "Indicates the base altitude of the weather phenomenon", HFILL }
7826         },
7827         { &hf_cigi2_weather_control_thickness,
7828             { "Thickness (m)", "cigi.weather_control.thickness",
7829                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7830                 "Indicates the vertical thickness of the weather phenomenon", HFILL }
7831         },
7832         { &hf_cigi2_weather_control_transition_band,
7833             { "Transition Band (m)", "cigi.weather_control.transition_band",
7834                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7835                 "Indicates a vertical transition band both above and below a phenomenon", HFILL }
7836         },
7837         { &hf_cigi2_weather_control_wind_speed,
7838             { "Winds Aloft Speed", "cigi.weather_control.wind_speed",
7839                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7840                 "Identifies the local wind speed applied to the phenomenon", HFILL }
7841         },
7842         { &hf_cigi2_weather_control_wind_direction,
7843             { "Winds Aloft Direction (degrees)", "cigi.weather_control.wind_direction",
7844                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7845                 "Indicates local direction of the wind applied to the phenomenon", HFILL }
7846         },
7847
7848         /* CIGI3 Weather Control */
7849         { &hf_cigi3_weather_control,
7850             { "Weather Control", "cigi.weather_control",
7851                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7852                 "Weather Control Packet", HFILL }
7853         },
7854         { &hf_cigi3_weather_control_entity_region_id,
7855             { "Entity ID/Region ID", "cigi.weather_control.entity_region_id",
7856                 FT_UINT16, BASE_DEC, NULL, 0x0,
7857                 "Specifies the entity to which the weather attributes in this packet are applied", HFILL }
7858         },
7859         { &hf_cigi3_weather_control_layer_id,
7860             { "Layer ID", "cigi.weather_control.layer_id",
7861                 FT_UINT8, BASE_DEC, VALS(cigi3_weather_control_layer_id_vals), 0x0,
7862                 "Specifies the weather layer to which the data in this packet are applied", HFILL }
7863         },
7864         { &hf_cigi3_weather_control_humidity,
7865             { "Humidity (%)", "cigi.weather_control.humidity",
7866                 FT_UINT8, BASE_DEC, NULL, 0x0,
7867                 "Specifies the humidity within the weather layer", HFILL }
7868         },
7869         { &hf_cigi3_weather_control_weather_enable,
7870             { "Weather Enable", "cigi.weather_control.weather_enable",
7871                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
7872                 "Specifies whether a weather layer and its atmospheric effects are enabled", HFILL }
7873         },
7874         { &hf_cigi3_weather_control_scud_enable,
7875             { "Scud Enable", "cigi.weather_control.scud_enable",
7876                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x02,
7877                 "Specifies whether weather layer produces scud effects within its transition bands", HFILL }
7878         },
7879         { &hf_cigi3_weather_control_random_winds_enable,
7880             { "Random Winds Enable", "cigi.weather_control.random_winds_enable",
7881                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x04,
7882                 "Specifies whether a random frequency and duration should be applied to the local wind effects", HFILL }
7883         },
7884         { &hf_cigi3_weather_control_random_lightning_enable,
7885             { "Random Lightning Enable", "cigi.weather_control.random_lightning_enable",
7886                 FT_UINT8, BASE_DEC, NULL, 0x08,
7887                 "Specifies whether the weather layer exhibits random lightning effects", HFILL }
7888         },
7889         { &hf_cigi3_weather_control_cloud_type,
7890             { "Cloud Type", "cigi.weather_control.cloud_type",
7891                 FT_UINT8, BASE_DEC, VALS(cigi3_weather_control_cloud_type_vals), 0xf0,
7892                 "Specifies the type of clouds contained within the weather layer", HFILL }
7893         },
7894         { &hf_cigi3_weather_control_scope,
7895             { "Scope", "cigi.weather_control.scope",
7896                 FT_UINT8, BASE_DEC, VALS(cigi3_weather_control_scope_vals), 0x03,
7897                 "Specifies whether the weather is global, regional, or assigned to an entity", HFILL }
7898         },
7899         { &hf_cigi3_weather_control_severity,
7900             { "Severity", "cigi.weather_control.severity",
7901                 FT_UINT8, BASE_DEC, NULL, 0x1c,
7902                 "Specifies the severity of the weather layer", HFILL }
7903         },
7904         { &hf_cigi3_weather_control_air_temp,
7905             { "Air Temperature (degrees C)", "cigi.weather_control.air_temp",
7906                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7907                 "Specifies the temperature within the weather layer", HFILL }
7908         },
7909         { &hf_cigi3_weather_control_visibility_range,
7910             { "Visibility Range (m)", "cigi.weather_control.visibility_range",
7911                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7912                 "Specifies the visibility range through the weather layer", HFILL }
7913         },
7914         { &hf_cigi3_weather_control_scud_frequency,
7915             { "Scud Frequency (%)", "cigi.weather_control.scud_frequency",
7916                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7917                 "Specifies the frequency of scud within the transition bands above and/or below a cloud or fog layer", HFILL }
7918         },
7919         { &hf_cigi3_weather_control_coverage,
7920             { "Coverage (%)", "cigi.weather_control.coverage",
7921                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7922                 "Specifies the amount of area coverage for the weather layer", HFILL }
7923         },
7924         { &hf_cigi3_weather_control_base_elevation,
7925             { "Base Elevation (m)", "cigi.weather_control.base_elevation",
7926                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7927                 "Specifies the altitude of the base of the weather layer", HFILL }
7928         },
7929         { &hf_cigi3_weather_control_thickness,
7930             { "Thickness (m)", "cigi.weather_control.thickness",
7931                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7932                 "Specifies the vertical thickness of the weather layer", HFILL }
7933         },
7934         { &hf_cigi3_weather_control_transition_band,
7935             { "Transition Band (m)", "cigi.weather_control.transition_band",
7936                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7937                 "Specifies the height of a vertical transition band both above and below the weather layer", HFILL }
7938         },
7939         { &hf_cigi3_weather_control_horiz_wind,
7940             { "Horizontal Wind Speed (m/s)", "cigi.weather_control.horiz_wind",
7941                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7942                 "Specifies the local wind speed parallel to the ellipsoid-tangential reference plane", HFILL }
7943         },
7944         { &hf_cigi3_weather_control_vert_wind,
7945             { "Vertical Wind Speed (m/s)", "cigi.weather_control.vert_wind",
7946                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7947                 "Specifies the local vertical wind speed", HFILL }
7948         },
7949         { &hf_cigi3_weather_control_wind_direction,
7950             { "Wind Direction (degrees)", "cigi.weather_control.wind_direction",
7951                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7952                 "Specifies the local wind direction", HFILL }
7953         },
7954         { &hf_cigi3_weather_control_barometric_pressure,
7955             { "Barometric Pressure (mb or hPa)", "cigi.weather_control.barometric_pressure",
7956                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7957                 "Specifies the atmospheric pressure within the weather layer", HFILL }
7958         },
7959         { &hf_cigi3_weather_control_aerosol_concentration,
7960             { "Aerosol Concentration (g/m^3)", "cigi.weather_control.aerosol_concentration",
7961                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7962                 "Specifies the concentration of water, smoke, dust, or other particles suspended in the air", HFILL }
7963         },
7964
7965         /* CIGI3 Maritime Surface Conditions Control */
7966         { &hf_cigi3_maritime_surface_conditions_control,
7967             { "Maritime Surface Conditions Control", "cigi.maritime_surface_conditions_control",
7968                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7969                 "Maritime Surface Conditions Control Packet", HFILL }
7970         },
7971         { &hf_cigi3_maritime_surface_conditions_control_entity_region_id,
7972             { "Entity ID/Region ID", "cigi.maritime_surface_conditions_control.entity_region_id",
7973                 FT_UINT16, BASE_DEC, NULL, 0x0,
7974                 "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 }
7975         },
7976         { &hf_cigi3_maritime_surface_conditions_control_surface_conditions_enable,
7977             { "Surface Conditions Enable", "cigi.maritime_surface_conditions_control.surface_conditions_enable",
7978                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
7979                 "Determines the state of the specified surface conditions", HFILL }
7980         },
7981         { &hf_cigi3_maritime_surface_conditions_control_whitecap_enable,
7982             { "Whitecap Enable", "cigi.maritime_surface_conditions_control.whitecap_enable",
7983                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x02,
7984                 "Determines whether whitecaps are enabled", HFILL }
7985         },
7986         { &hf_cigi3_maritime_surface_conditions_control_scope,
7987             { "Scope", "cigi.maritime_surface_conditions_control.scope",
7988                 FT_UINT8, BASE_DEC, VALS(cigi3_maritime_surface_conditions_control_scope_vals), 0x0c,
7989                 "Specifies whether this packet is applied globally, applied to region, or assigned to an entity", HFILL }
7990         },
7991         { &hf_cigi3_maritime_surface_conditions_control_sea_surface_height,
7992             { "Sea Surface Height (m)", "cigi.maritime_surface_conditions_control.sea_surface_height",
7993                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7994                 "Specifies the height of the water above MSL at equilibrium", HFILL }
7995         },
7996         { &hf_cigi3_maritime_surface_conditions_control_surface_water_temp,
7997             { "Surface Water Temperature (degrees C)", "cigi.maritime_surface_conditions_control.surface_water_temp",
7998                 FT_FLOAT, BASE_NONE, NULL, 0x0,
7999                 "Specifies the water temperature at the surface", HFILL }
8000         },
8001         { &hf_cigi3_maritime_surface_conditions_control_surface_clarity,
8002             { "Surface Clarity (%)", "cigi.maritime_surface_conditions_control.surface_clarity",
8003                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8004                 "Specifies the clarity of the water at its surface", HFILL }
8005         },
8006
8007         /* CIGI3 Wave Control */
8008         { &hf_cigi3_wave_control,
8009             { "Wave Control", "cigi.wave_control",
8010                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8011                 "Wave Control Packet", HFILL }
8012         },
8013         { &hf_cigi3_wave_control_entity_region_id,
8014             { "Entity ID/Region ID", "cigi.wave_control.entity_region_id",
8015                 FT_UINT16, BASE_DEC, NULL, 0x0,
8016                 "Specifies the surface entity for which the wave is defined or specifies the environmental region for which the wave is defined", HFILL }
8017         },
8018         { &hf_cigi3_wave_control_wave_id,
8019             { "Wave ID", "cigi.wave_control.wave_id",
8020                 FT_UINT8, BASE_DEC, NULL, 0x0,
8021                 "Specifies the wave to which the attributes in this packet are applied", HFILL }
8022         },
8023         { &hf_cigi3_wave_control_wave_enable,
8024             { "Wave Enable", "cigi.wave_control.wave_enable",
8025                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
8026                 "Determines whether the wave is enabled or disabled", HFILL }
8027         },
8028         { &hf_cigi3_wave_control_scope,
8029             { "Scope", "cigi.wave_control.scope",
8030                 FT_UINT8, BASE_DEC, VALS(cigi3_wave_control_scope_vals), 0x06,
8031                 "Specifies whether the wave is defined for global, regional, or entity-controlled maritime surface conditions", HFILL }
8032         },
8033         { &hf_cigi3_wave_control_breaker_type,
8034             { "Breaker Type", "cigi.wave_control.breaker_type",
8035                 FT_UINT8, BASE_DEC, VALS(cigi3_wave_control_breaker_type_vals), 0x18,
8036                 "Specifies the type of breaker within the surf zone", HFILL }
8037         },
8038         { &hf_cigi3_wave_control_height,
8039             { "Wave Height (m)", "cigi.wave_control.height",
8040                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8041                 "Specifies the average vertical distance from trough to crest produced by the wave", HFILL }
8042         },
8043         { &hf_cigi3_wave_control_wavelength,
8044             { "Wavelength (m)", "cigi.wave_control.wavelength",
8045                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8046                 "Specifies the distance from a particular phase on a wave to the same phase on an adjacent wave", HFILL }
8047         },
8048         { &hf_cigi3_wave_control_period,
8049             { "Period (s)", "cigi.wave_control.period",
8050                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8051                 "Specifies the time required for one complete oscillation of the wave", HFILL }
8052         },
8053         { &hf_cigi3_wave_control_direction,
8054             { "Direction (degrees)", "cigi.wave_control.direction",
8055                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8056                 "Specifies the direction in which the wave propagates", HFILL }
8057         },
8058         { &hf_cigi3_wave_control_phase_offset,
8059             { "Phase Offset (degrees)", "cigi.wave_control.phase_offset",
8060                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8061                 "Specifies a phase offset for the wave", HFILL }
8062         },
8063         { &hf_cigi3_wave_control_leading,
8064             { "Leading (degrees)", "cigi.wave_control.leading",
8065                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8066                 "Specifies the phase angle at which the crest occurs", HFILL }
8067         },
8068
8069         /* Terrestrial Surface Conditions Control */
8070         { &hf_cigi3_terrestrial_surface_conditions_control,
8071             { "Terrestrial Surface Conditions Control", "cigi.terrestrial_surface_conditions_control",
8072                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8073                 "Terrestrial Surface Conditions Control Packet", HFILL }
8074         },
8075         { &hf_cigi3_terrestrial_surface_conditions_control_entity_region_id,
8076             { "Entity ID/Region ID", "cigi.terrestrial_surface_conditions_control.entity_region_id",
8077                 FT_UINT16, BASE_DEC, NULL, 0x0,
8078                 "Specifies the environmental entity to which the surface condition attributes in this packet are applied", HFILL }
8079         },
8080         { &hf_cigi3_terrestrial_surface_conditions_control_surface_condition_id,
8081             { "Surface Condition ID", "cigi.terrestrial_surface_conditions_control.surface_condition_id",
8082                 FT_UINT16, BASE_DEC, NULL, 0x0,
8083                 "Identifies a surface condition or contaminant", HFILL }
8084         },
8085         { &hf_cigi3_terrestrial_surface_conditions_control_surface_condition_enable,
8086             { "Surface Condition Enable", "cigi.terrestrial_surface_conditions_control.surface_condition_enable",
8087                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
8088                 "Specifies whether the surface condition attribute identified by the Surface Condition ID parameter should be enabled", HFILL }
8089         },
8090         { &hf_cigi3_terrestrial_surface_conditions_control_scope,
8091             { "Scope", "cigi.terrestrial_surface_conditions_control.scope",
8092                 FT_UINT8, BASE_DEC, VALS(cigi3_terrestrial_surface_conditions_control_scope_vals), 0x06,
8093                 "Determines whether the specified surface conditions are applied globally, regionally, or to an environmental entity", HFILL }
8094         },
8095         { &hf_cigi3_terrestrial_surface_conditions_control_severity,
8096             { "Severity", "cigi.terrestrial_surface_conditions_control.severity",
8097                 FT_UINT8, BASE_DEC, NULL, 0xf8,
8098                 "Determines the degree of severity for the specified surface contaminant(s)", HFILL }
8099         },
8100         { &hf_cigi3_terrestrial_surface_conditions_control_coverage,
8101             { "Coverage (%)", "cigi.terrestrial_surface_conditions_control.coverage",
8102                 FT_UINT8, BASE_DEC, NULL, 0x0,
8103                 "Determines the degree of coverage of the specified surface contaminant", HFILL }
8104         },
8105
8106         /* CIGI2 View Control */
8107         { &hf_cigi2_view_control,
8108             { "View Control", "cigi.view_control",
8109                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8110                 "View Control Packet", HFILL }
8111         },
8112         { &hf_cigi2_view_control_entity_id,
8113             { "Entity ID", "cigi.view_control.entity_id",
8114                 FT_UINT16, BASE_DEC, NULL, 0x0,
8115                 "Indicates the entity to which this view should be attached", HFILL }
8116         },
8117         { &hf_cigi2_view_control_view_id,
8118             { "View ID", "cigi.view_control.view_id",
8119                 FT_UINT8, BASE_DEC, NULL, 0xf8,
8120                 "Specifies which view position is associated with offsets and rotation specified by this data packet", HFILL }
8121         },
8122         { &hf_cigi2_view_control_view_group,
8123             { "View Group Select", "cigi.view_control.view_group",
8124                 FT_UINT8, BASE_DEC, NULL, 0x07,
8125                 "Specifies which view group is to be controlled by the offsets", HFILL }
8126         },
8127         { &hf_cigi2_view_control_xoff_enable,
8128             { "X Offset Enable", "cigi.view_control.xoff_enable",
8129                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x80,
8130                 "Identifies whether the x offset parameter should be applied to the specified view or view group", HFILL }
8131         },
8132         { &hf_cigi2_view_control_yoff_enable,
8133             { "Y Offset Enable", "cigi.view_control.yoff_enable",
8134                 FT_UINT8, BASE_DEC, NULL, 0x40,
8135                 "Identifies whether the y offset parameter should be applied to the specified view or view group", HFILL }
8136         },
8137         { &hf_cigi2_view_control_zoff_enable,
8138             { "Z Offset Enable", "cigi.view_control.zoff_enable",
8139                 FT_UINT8, BASE_DEC, NULL, 0x20,
8140                 "Identifies whether the z offset parameter should be applied to the specified view or view group", HFILL }
8141         },
8142         { &hf_cigi2_view_control_roll_enable,
8143             { "Roll Enable", "cigi.view_control.roll_enable",
8144                 FT_UINT8, BASE_DEC, NULL, 0x10,
8145                 "Identifies whether the roll parameter should be applied to the specified view or view group", HFILL }
8146         },
8147         { &hf_cigi2_view_control_pitch_enable,
8148             { "Pitch Enable", "cigi.view_control.pitch_enable",
8149                 FT_UINT8, BASE_DEC, NULL, 0x08,
8150                 "Identifies whether the pitch parameter should be applied to the specified view or view group", HFILL }
8151         },
8152         { &hf_cigi2_view_control_yaw_enable,
8153             { "Yaw Enable", "cigi.view_control.yaw_enable",
8154                 FT_UINT8, BASE_DEC, NULL, 0x04,
8155                 "Identifies whether the yaw parameter should be applied to the specified view or view group", HFILL }
8156         },
8157         { &hf_cigi2_view_control_x_offset,
8158             { "X Offset (m)", "cigi.view_control.x_offset",
8159                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8160                 "Defines the X component of the view offset vector along the entity's longitudinal axis", HFILL }
8161         },
8162         { &hf_cigi2_view_control_y_offset,
8163             { "Y Offset", "cigi.view_control.y_offset",
8164                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8165                 "Defines the Y component of the view offset vector along the entity's lateral axis", HFILL }
8166         },
8167         { &hf_cigi2_view_control_z_offset,
8168             { "Z Offset", "cigi.view_control.z_offset",
8169                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8170                 "Defines the Z component of the view offset vector along the entity's vertical axis", HFILL }
8171         },
8172         { &hf_cigi2_view_control_roll,
8173             { "Roll (degrees)", "cigi.view_control.roll",
8174                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8175                 "The rotation about the view's X axis", HFILL }
8176         },
8177         { &hf_cigi2_view_control_pitch,
8178             { "Pitch (degrees)", "cigi.view_control.pitch",
8179                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8180                 "The rotation about the view's Y axis", HFILL }
8181         },
8182         { &hf_cigi2_view_control_yaw,
8183             { "Yaw (degrees)", "cigi.view_control.yaw",
8184                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8185                 "The rotation about the view's Z axis", HFILL }
8186         },
8187
8188         /* CIGI3 View Control */
8189         { &hf_cigi3_view_control,
8190             { "View Control", "cigi.view_control",
8191                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8192                 "View Control Packet", HFILL }
8193         },
8194         { &hf_cigi3_view_control_view_id,
8195             { "View ID", "cigi.view_control.view_id",
8196                 FT_UINT16, BASE_DEC, NULL, 0x0,
8197                 "Specifies the view to which the contents of this packet should be applied", HFILL }
8198         },
8199         { &hf_cigi3_view_control_group_id,
8200             { "Group ID", "cigi.view_control.group_id",
8201                 FT_UINT8, BASE_DEC, NULL, 0x0,
8202                 "Specifies the view group to which the contents of this packet are applied", HFILL }
8203         },
8204         { &hf_cigi3_view_control_xoff_enable,
8205             { "X Offset Enable", "cigi.view_control.xoff_enable",
8206                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
8207                 "Determines whether the X Offset parameter should be applied to the specified view or view group", HFILL }
8208         },
8209         { &hf_cigi3_view_control_yoff_enable,
8210             { "Y Offset Enable", "cigi.view_control.yoff_enable",
8211                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x02,
8212                 "Determines whether the Y Offset parameter should be applied to the specified view or view group", HFILL }
8213         },
8214         { &hf_cigi3_view_control_zoff_enable,
8215             { "Z Offset Enable", "cigi.view_control.zoff_enable",
8216                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x04,
8217                 "Determines whether the Z Offset parameter should be applied to the specified view or view group", HFILL }
8218         },
8219         { &hf_cigi3_view_control_roll_enable,
8220             { "Roll Enable", "cigi.view_control.roll_enable",
8221                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
8222                 "Determines whether the Roll parameter should be applied to the specified view or view group", HFILL }
8223         },
8224         { &hf_cigi3_view_control_pitch_enable,
8225             { "Pitch Enable", "cigi.view_control.pitch_enable",
8226                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x10,
8227                 "Determines whether the Pitch parameter should be applied to the specified view or view group", HFILL }
8228         },
8229         { &hf_cigi3_view_control_yaw_enable,
8230             { "Yaw Enable", "cigi.view_control.yaw_enable",
8231                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x20,
8232                 "Determines whether the Yaw parameter should be applied to the specified view or view group", HFILL }
8233         },
8234         { &hf_cigi3_view_control_entity_id,
8235             { "Entity ID", "cigi.view_control.entity_id",
8236                 FT_UINT16, BASE_DEC, NULL, 0x0,
8237                 "Specifies the entity to which the view or view group should be attached", HFILL }
8238         },
8239         { &hf_cigi3_view_control_xoff,
8240             { "X Offset (m)", "cigi.view_control.xoff",
8241                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8242                 "Specifies the position of the view eyepoint along the X axis of the entity specified by the Entity ID parameter", HFILL }
8243         },
8244         { &hf_cigi3_view_control_yoff,
8245             { "Y Offset (m)", "cigi.view_control.yoff",
8246                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8247                 "Specifies the position of the view eyepoint along the Y axis of the entity specified by the Entity ID parameter", HFILL }
8248         },
8249         { &hf_cigi3_view_control_zoff,
8250             { "Z Offset (m)", "cigi.view_control.zoff",
8251                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8252                 "Specifies the position of the view eyepoint along the Z axis of the entity specified by the Entity ID parameter", HFILL }
8253         },
8254         { &hf_cigi3_view_control_roll,
8255             { "Roll (degrees)", "cigi.view_control.roll",
8256                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8257                 "Specifies the angle of rotation of the view or view group about its X axis after yaw and pitch have been applied", HFILL }
8258         },
8259         { &hf_cigi3_view_control_pitch,
8260             { "Pitch (degrees)", "cigi.view_control.pitch",
8261                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8262                 "Specifies the angle of rotation of the view or view group about its Y axis after yaw has been applied", HFILL }
8263         },
8264         { &hf_cigi3_view_control_yaw,
8265             { "Yaw (degrees)", "cigi.view_control.yaw",
8266                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8267                 "Specifies the angle of rotation of the view or view group about its Z axis", HFILL }
8268         },
8269
8270         /* CIGI2 Sensor Control */
8271         { &hf_cigi2_sensor_control,
8272             { "Sensor Control", "cigi.sensor_control",
8273                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8274                 "Sensor Control Packet", HFILL }
8275         },
8276         { &hf_cigi2_sensor_control_view_id,
8277             { "View ID", "cigi.sensor_control.view_id",
8278                 FT_UINT8, BASE_DEC, NULL, 0xf8,
8279                 "Dictates to which view the corresponding sensor is assigned, regardless of the view group", HFILL }
8280         },
8281         { &hf_cigi2_sensor_control_sensor_enable,
8282             { "Sensor On/Off", "cigi.sensor_control.sensor_enable",
8283                 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x04,
8284                 "Indicates whether the sensor is turned on or off", HFILL }
8285         },
8286         { &hf_cigi2_sensor_control_polarity,
8287             { "Polarity", "cigi.sensor_control.polarity",
8288                 FT_BOOLEAN, 8, TFS(&cigi2_sensor_control_polarity_tfs), 0x02,
8289                 "Indicates whether this sensor is showing white hot or black hot", HFILL }
8290         },
8291         { &hf_cigi2_sensor_control_line_dropout,
8292             { "Line-by-Line Dropout", "cigi.sensor_control.line_dropout",
8293                 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x01,
8294                 "Indicates whether the line-by-line dropout feature is enabled", HFILL }
8295         },
8296         { &hf_cigi2_sensor_control_sensor_id,
8297             { "Sensor ID", "cigi.sensor_control.sensor_id",
8298                 FT_UINT8, BASE_DEC, NULL, 0x0,
8299                 "Identifies the sensor to which this packet should be applied", HFILL }
8300         },
8301         { &hf_cigi2_sensor_control_track_mode,
8302             { "Track Mode", "cigi.sensor_control.track_mode",
8303                 FT_UINT8, BASE_DEC, VALS(cigi2_sensor_control_track_mode_vals), 0xf0,
8304                 "Indicates which track mode the sensor should be", HFILL }
8305         },
8306         { &hf_cigi2_sensor_control_auto_gain,
8307             { "Automatic Gain", "cigi.sensor_control.auto_gain",
8308                 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x08,
8309                 "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 }
8310         },
8311         { &hf_cigi2_sensor_control_track_polarity,
8312             { "Track White/Black", "cigi.sensor_control.track_polarity",
8313                 FT_BOOLEAN, 8, TFS(&cigi2_sensor_control_polarity_tfs), 0x04,
8314                 "Identifies whether the weapons sensor will track wither white or black", HFILL }
8315         },
8316         { &hf_cigi2_sensor_control_gain,
8317             { "Gain", "cigi.sensor_control.gain",
8318                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8319                 "Indicates the gain value for the weapon sensor option", HFILL }
8320         },
8321         { &hf_cigi2_sensor_control_level,
8322             { "Level", "cigi.sensor_control.level",
8323                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8324                 "Indicates the level value for the weapon sensor option", HFILL }
8325         },
8326         { &hf_cigi2_sensor_control_ac_coupling,
8327             { "AC Coupling", "cigi.sensor_control.ac_coupling",
8328                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8329                 "Indicates the AC Coupling decay rate for the weapon sensor option", HFILL }
8330         },
8331         { &hf_cigi2_sensor_control_noise,
8332             { "Noise", "cigi.sensor_control.noise",
8333                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8334                 "Indicates the detector-noise gain for the weapon sensor option", HFILL }
8335         },
8336
8337         /* CIGI3 Sensor Control */
8338         { &hf_cigi3_sensor_control,
8339             { "Sensor Control", "cigi.sensor_control",
8340                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8341                 "Sensor Control Packet", HFILL }
8342         },
8343         { &hf_cigi3_sensor_control_view_id,
8344             { "View ID", "cigi.sensor_control.view_id",
8345                 FT_UINT16, BASE_DEC, NULL, 0x0,
8346                 "Identifies the view to which the specified sensor is assigned", HFILL }
8347         },
8348         { &hf_cigi3_sensor_control_sensor_id,
8349             { "Sensor ID", "cigi.sensor_control.sensor_id",
8350                 FT_UINT8, BASE_DEC, NULL, 0x0,
8351                 "Specifies the sensor to which the data in this packet are applied", HFILL }
8352         },
8353         { &hf_cigi3_sensor_control_sensor_on_off,
8354             { "Sensor On/Off", "cigi.sensor_control.sensor_on_off",
8355                 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x01,
8356                 "Specifies whether the sensor is turned on or off", HFILL }
8357         },
8358         { &hf_cigi3_sensor_control_polarity,
8359             { "Polarity", "cigi.sensor_control.polarity",
8360                 FT_BOOLEAN, 8, TFS(&cigi3_sensor_control_polarity_tfs), 0x02,
8361                 "Specifies whether the sensor shows white hot or black hot", HFILL }
8362         },
8363         { &hf_cigi3_sensor_control_line_dropout_enable,
8364             { "Line-by-Line Dropout Enable", "cigi.sensor_control.line_dropout_enable",
8365                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x04,
8366                 "Specifies whether line-by-line dropout is enabled", HFILL }
8367         },
8368         { &hf_cigi3_sensor_control_auto_gain,
8369             { "Automatic Gain", "cigi.sensor_control.auto_gain",
8370                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
8371                 "Specifies whether the sensor automatically adjusts the gain value to optimize the brightness and contrast of the sensor display", HFILL }
8372         },
8373         { &hf_cigi3_sensor_control_track_white_black,
8374             { "Track White/Black", "cigi.sensor_control.track_white_black",
8375                 FT_BOOLEAN, 8, TFS(&cigi3_sensor_control_track_white_black_tfs), 0x10,
8376                 "Specifies whether the sensor tracks white or black", HFILL }
8377         },
8378         { &hf_cigi3_sensor_control_track_mode,
8379             { "Track Mode", "cigi.sensor_control.track_mode",
8380                 FT_UINT8, BASE_DEC, VALS(cigi3_sensor_control_track_mode_vals), 0xe0,
8381                 "Specifies which track mode the sensor should use", HFILL }
8382         },
8383         { &hf_cigi3_sensor_control_response_type,
8384             { "Response Type", "cigi.sensor_control.response_type",
8385                 FT_BOOLEAN, 8, TFS(&cigi3_sensor_control_response_type_tfs), 0x01,
8386                 "Specifies whether the IG should return a Sensor Response packet or a Sensor Extended Response packet", HFILL }
8387         },
8388         { &hf_cigi3_sensor_control_gain,
8389             { "Gain", "cigi.sensor_control.gain",
8390                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8391                 "Specifies the contrast for the sensor display", HFILL }
8392         },
8393         { &hf_cigi3_sensor_control_level,
8394             { "Level", "cigi.sensor_control.level",
8395                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8396                 "Specifies the brightness for the sensor display", HFILL }
8397         },
8398         { &hf_cigi3_sensor_control_ac_coupling,
8399             { "AC Coupling (microseconds)", "cigi.sensor_control.ac_coupling",
8400                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8401                 "Specifies the AC coupling decay constant for the sensor display", HFILL }
8402         },
8403         { &hf_cigi3_sensor_control_noise,
8404             { "Noise", "cigi.sensor_control.noise",
8405                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8406                 "Specifies the amount of detector noise for the sensor", HFILL }
8407         },
8408
8409         /* Motion Tracker Control */
8410         { &hf_cigi3_motion_tracker_control,
8411             { "Motion Tracker Control", "cigi.motion_tracker_control",
8412                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8413                 "Motion Tracker Control Packet", HFILL }
8414         },
8415         { &hf_cigi3_motion_tracker_control_view_group_id,
8416             { "View/View Group ID", "cigi.motion_tracker_control.view_group_id",
8417                 FT_UINT16, BASE_DEC, NULL, 0x0,
8418                 "Specifies the view or view group to which the tracking device is attached", HFILL }
8419         },
8420         { &hf_cigi3_motion_tracker_control_tracker_id,
8421             { "Tracker ID", "cigi.motion_tracker_control.tracker_id",
8422                 FT_UINT8, BASE_DEC, NULL, 0x0,
8423                 "Specifies the tracker whose state the data in this packet represents", HFILL }
8424         },
8425         { &hf_cigi3_motion_tracker_control_tracker_enable,
8426             { "Tracker Enable", "cigi.motion_tracker_control.tracker_enable",
8427                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
8428                 "Specifies whether the tracking device is enabled", HFILL }
8429         },
8430         { &hf_cigi3_motion_tracker_control_boresight_enable,
8431             { "Boresight Enable", "cigi.motion_tracker_control.boresight_enable",
8432                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x02,
8433                 "Sets the boresight state of the external tracking device", HFILL }
8434         },
8435         { &hf_cigi3_motion_tracker_control_x_enable,
8436             { "X Enable", "cigi.motion_tracker_control.x_enable",
8437                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x04,
8438                 "Used to enable or disable the X-axis position of the motion tracker", HFILL }
8439         },
8440         { &hf_cigi3_motion_tracker_control_y_enable,
8441             { "Y Enable", "cigi.motion_tracker_control.y_enable",
8442                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
8443                 "Used to enable or disable the Y-axis position of the motion tracker", HFILL }
8444         },
8445         { &hf_cigi3_motion_tracker_control_z_enable,
8446             { "Z Enable", "cigi.motion_tracker_control.z_enable",
8447                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x10,
8448                 "Used to enable or disable the Z-axis position of the motion tracker", HFILL }
8449         },
8450         { &hf_cigi3_motion_tracker_control_roll_enable,
8451             { "Roll Enable", "cigi.motion_tracker_control.roll_enable",
8452                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x20,
8453                 "Used to enable or disable the roll of the motion tracker", HFILL }
8454         },
8455         { &hf_cigi3_motion_tracker_control_pitch_enable,
8456             { "Pitch Enable", "cigi.motion_tracker_control.pitch_enable",
8457                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x40,
8458                 "Used to enable or disable the pitch of the motion tracker", HFILL }
8459         },
8460         { &hf_cigi3_motion_tracker_control_yaw_enable,
8461             { "Yaw Enable", "cigi.motion_tracker_control.yaw_enable",
8462                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x80,
8463                 "Used to enable or disable the yaw of the motion tracker", HFILL }
8464         },
8465         { &hf_cigi3_motion_tracker_control_view_group_select,
8466             { "View/View Group Select", "cigi.motion_tracker_control.view_group_select",
8467                 FT_BOOLEAN, 8, TFS(&cigi3_motion_tracker_control_view_group_select_tfs), 0x01,
8468                 "Specifies whether the tracking device is attached to a single view or a view group", HFILL }
8469         },
8470
8471         /* CIGI3 Earth Reference Model Definition */
8472         { &hf_cigi3_earth_reference_model_definition,
8473             { "Earth Reference Model Definition", "cigi.earth_ref_model_def",
8474                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8475                 "Earth Reference Model Definition Packet", HFILL }
8476         },
8477         { &hf_cigi3_earth_reference_model_definition_erm_enable,
8478             { "Custom ERM Enable", "cigi.earth_ref_model_def.erm_enable",
8479                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
8480                 "Specifies whether the IG should use the Earth Reference Model defined by this packet", HFILL }
8481         },
8482         { &hf_cigi3_earth_reference_model_definition_equatorial_radius,
8483             { "Equatorial Radius (m)", "cigi.earth_ref_model_def.equatorial_radius",
8484                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
8485                 "Specifies the semi-major axis of the ellipsoid", HFILL }
8486         },
8487         { &hf_cigi3_earth_reference_model_definition_flattening,
8488             { "Flattening (m)", "cigi.earth_ref_model_def.flattening",
8489                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
8490                 "Specifies the flattening of the ellipsoid", HFILL }
8491         },
8492
8493         /* CIGI2 Trajectory Definition */
8494         { &hf_cigi2_trajectory_definition,
8495             { "Trajectory Definition", "cigi.trajectory_def",
8496                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8497                 "Trajectory Definition Packet", HFILL }
8498         },
8499         { &hf_cigi2_trajectory_definition_entity_id,
8500             { "Entity ID", "cigi.trajectory_def.entity_id",
8501                 FT_UINT16, BASE_DEC, NULL, 0x0,
8502                 "Indicates which entity is being influenced by this trajectory behavior", HFILL }
8503         },
8504         { &hf_cigi2_trajectory_definition_acceleration,
8505             { "Acceleration Factor (m/s^2)", "cigi.trajectory_def.acceleration",
8506                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8507                 "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 }
8508         },
8509         { &hf_cigi2_trajectory_definition_retardation,
8510             { "Retardation Rate (m/s)", "cigi.trajectory_def.retardation",
8511                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8512                 "Indicates what retardation factor will be applied to the object's motion", HFILL }
8513         },
8514         { &hf_cigi2_trajectory_definition_terminal_velocity,
8515             { "Terminal Velocity (m/s)", "cigi.trajectory_def.terminal_velocity",
8516                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8517                 "Indicates what final velocity the object will be allowed to obtain", HFILL }
8518         },
8519
8520         /* CIGI3 Trajectory Definition */
8521         { &hf_cigi3_trajectory_definition,
8522             { "Trajectory Definition", "cigi.trajectory_def",
8523                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8524                 "Trajectory Definition Packet", HFILL }
8525         },
8526         { &hf_cigi3_trajectory_definition_entity_id,
8527             { "Entity ID", "cigi.trajectory_def.entity_id",
8528                 FT_UINT16, BASE_DEC, NULL, 0x0,
8529                 "Identifies the entity for which the trajectory is defined", HFILL }
8530         },
8531         { &hf_cigi3_trajectory_definition_acceleration_x,
8532             { "Acceleration X (m/s^2)", "cigi.trajectory_def.acceleration_x",
8533                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8534                 "Specifies the X component of the acceleration vector", HFILL }
8535         },
8536         { &hf_cigi3_trajectory_definition_acceleration_y,
8537             { "Acceleration Y (m/s^2)", "cigi.trajectory_def.acceleration_y",
8538                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8539                 "Specifies the Y component of the acceleration vector", HFILL }
8540         },
8541         { &hf_cigi3_trajectory_definition_acceleration_z,
8542             { "Acceleration Z (m/s^2)", "cigi.trajectory_def.acceleration_z",
8543                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8544                 "Specifies the Z component of the acceleration vector", HFILL }
8545         },
8546         { &hf_cigi3_trajectory_definition_retardation_rate,
8547             { "Retardation Rate (m/s^2)", "cigi.trajectory_def.retardation_rate",
8548                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8549                 "Specifies the magnitude of an acceleration applied against the entity's instantaneous linear velocity vector", HFILL }
8550         },
8551         { &hf_cigi3_trajectory_definition_terminal_velocity,
8552             { "Terminal Velocity (m/s)", "cigi.trajectory_def.terminal_velocity",
8553                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8554                 "Specifies the maximum velocity the entity can sustain", HFILL }
8555         },
8556
8557         /* CIGI2 Special Effect Definition */
8558         { &hf_cigi2_special_effect_definition,
8559             { "Special Effect Definition", "cigi.special_effect_def",
8560                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8561                 "Special Effect Definition Packet", HFILL }
8562         },
8563         { &hf_cigi2_special_effect_definition_entity_id,
8564             { "Entity ID", "cigi.special_effect_def.entity_id",
8565                 FT_UINT16, BASE_DEC, NULL, 0x0,
8566                 "Indicates which effect is being modified", HFILL }
8567         },
8568         { &hf_cigi2_special_effect_definition_seq_direction,
8569             { "Sequence Direction", "cigi.special_effect_def.seq_direction",
8570                 FT_BOOLEAN, 8, TFS(&cigi2_special_effect_definition_seq_direction_tfs), 0x80,
8571                 "Indicates whether the effect animation sequence should be sequence from beginning to end or vice versa", HFILL }
8572         },
8573         { &hf_cigi2_special_effect_definition_color_enable,
8574             { "Color Enable", "cigi.special_effect_def.color_enable",
8575                 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x40,
8576                 "Indicates whether the red, green, and blue color values will be applied to the special effect", HFILL }
8577         },
8578         { &hf_cigi2_special_effect_definition_red,
8579             { "Red Color Value", "cigi.special_effect_def.red",
8580                 FT_UINT8, BASE_DEC, NULL, 0x0,
8581                 "Specifies the red component of a color to be applied to the effect", HFILL }
8582         },
8583         { &hf_cigi2_special_effect_definition_green,
8584             { "Green Color Value", "cigi.special_effect_def.green",
8585                 FT_UINT8, BASE_DEC, NULL, 0x0,
8586                 "Specifies the green component of a color to be applied to the effect", HFILL }
8587         },
8588         { &hf_cigi2_special_effect_definition_blue,
8589             { "Blue Color Value", "cigi.special_effect_def.blue",
8590                 FT_UINT8, BASE_DEC, NULL, 0x0,
8591                 "Specifies the blue component of a color to be applied to the effect", HFILL }
8592         },
8593         { &hf_cigi2_special_effect_definition_x_scale,
8594             { "X Scale", "cigi.special_effect_def.x_scale",
8595                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8596                 "Specifies a scale factor to apply along the effect's X axis", HFILL }
8597         },
8598         { &hf_cigi2_special_effect_definition_y_scale,
8599             { "Y Scale", "cigi.special_effect_def.y_scale",
8600                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8601                 "Specifies a scale factor to apply along the effect's Y axis", HFILL }
8602         },
8603         { &hf_cigi2_special_effect_definition_z_scale,
8604             { "Z Scale", "cigi.special_effect_def.z_scale",
8605                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8606                 "Specifies a scale factor to apply along the effect's Z axis", HFILL }
8607         },
8608         { &hf_cigi2_special_effect_definition_time_scale,
8609             { "Time Scale", "cigi.special_effect_def.time_scale",
8610                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8611                 "Specifies a scale factor to apply to the time period for the effect's animation sequence", HFILL }
8612         },
8613         { &hf_cigi2_special_effect_definition_effect_count,
8614             { "Effect Count", "cigi.special_effect_def.effect_count",
8615                 FT_UINT16, BASE_DEC, NULL, 0x0,
8616                 "Indicates how many effects are contained within a single burst", HFILL }
8617         },
8618         { &hf_cigi2_special_effect_definition_separation,
8619             { "Separation (m)", "cigi.special_effect_def.separation",
8620                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8621                 "Indicates the distance between particles within a burst", HFILL }
8622         },
8623         { &hf_cigi2_special_effect_definition_burst_interval,
8624             { "Burst Interval (s)", "cigi.special_effect_def.burst_interval",
8625                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8626                 "Indicates the time between successive bursts", HFILL }
8627         },
8628         { &hf_cigi2_special_effect_definition_duration,
8629             { "Duration (s)", "cigi.special_effect_def.duration",
8630                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8631                 "Indicates how long an effect or sequence of burst will be active", HFILL }
8632         },
8633
8634         /* CIGI2 View Definition */
8635         { &hf_cigi2_view_definition,
8636             { "View Definition", "cigi.view_def",
8637                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8638                 "View Definition Packet", HFILL }
8639         },
8640         { &hf_cigi2_view_definition_view_id,
8641             { "View ID", "cigi.view_def.view_id",
8642                 FT_UINT8, BASE_DEC, NULL, 0xf8,
8643                 "Specifies the view to which this packet should be applied", HFILL }
8644         },
8645         { &hf_cigi2_view_definition_view_group,
8646             { "View Group", "cigi.view_def.view_group",
8647                 FT_UINT8, BASE_DEC, NULL, 0x07,
8648                 "Specifies the view group to which the view is to be assigned", HFILL }
8649         },
8650         { &hf_cigi2_view_definition_view_type,
8651             { "View Type", "cigi.view_def.view_type",
8652                 FT_UINT8, BASE_DEC, NULL, 0xe0,
8653                 "Specifies the view type", HFILL }
8654         },
8655         { &hf_cigi2_view_definition_pixel_rep,
8656             { "Pixel Replication", "cigi.view_def.pixel_rep",
8657                 FT_UINT8, BASE_DEC, VALS(cigi2_view_definition_pixel_rep_vals), 0x1c,
8658                 "Specifies what pixel replication function should be applied to the view", HFILL }
8659         },
8660         { &hf_cigi2_view_definition_mirror,
8661             { "View Mirror", "cigi.view_def.mirror",
8662                 FT_UINT8, BASE_DEC, VALS(cigi2_view_definition_mirror_vals), 0x03,
8663                 "Specifies what mirroring function should be applied to the view", HFILL }
8664         },
8665         { &hf_cigi2_view_definition_tracker_assign,
8666             { "Tracker Assign", "cigi.view_def.tracker_assign",
8667                 FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x80,
8668                 "Specifies whether the view should be controlled by an external tracking device", HFILL }
8669         },
8670         { &hf_cigi2_view_definition_near_enable,
8671             { "Field of View Near Enable", "cigi.view_def.near_enable",
8672                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x40,
8673                 "Identifies whether the field of view near value is manipulated from the Host", HFILL }
8674         },
8675         { &hf_cigi2_view_definition_far_enable,
8676             { "Field of View Far Enable", "cigi.view_def.far_enable",
8677                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x20,
8678                 "Identifies whether the field of view far value is manipulated from the Host", HFILL }
8679         },
8680         { &hf_cigi2_view_definition_left_enable,
8681             { "Field of View Left Enable", "cigi.view_def.left_enable",
8682                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x10,
8683                 "Identifies whether the field of view left value is manipulated from the Host", HFILL }
8684         },
8685         { &hf_cigi2_view_definition_right_enable,
8686             { "Field of View Right Enable", "cigi.view_def.right_enable",
8687                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
8688                 "Identifies whether the field of view right value is manipulated from the Host", HFILL }
8689         },
8690         { &hf_cigi2_view_definition_top_enable,
8691             { "Field of View Top Enable", "cigi.view_def.top_enable",
8692                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x04,
8693                 "Identifies whether the field of view top value is manipulated from the Host", HFILL }
8694         },
8695         { &hf_cigi2_view_definition_bottom_enable,
8696             { "Field of View Bottom Enable", "cigi.view_def.bottom_enable",
8697                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x02,
8698                 "Identifies whether the field of view bottom value is manipulated from the Host", HFILL }
8699         },
8700         { &hf_cigi2_view_definition_fov_near,
8701             { "Field of View Near (m)", "cigi.view_def.fov_near",
8702                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8703                 "Defines the near clipping plane for the view", HFILL }
8704         },
8705         { &hf_cigi2_view_definition_fov_far,
8706             { "Field of View Far (m)", "cigi.view_def.fov_far",
8707                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8708                 "Defines the far clipping plane for the view", HFILL }
8709         },
8710         { &hf_cigi2_view_definition_fov_left,
8711             { "Field of View Left (degrees)", "cigi.view_def.fov_left",
8712                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8713                 "Defines the left clipping plane for the view", HFILL }
8714         },
8715         { &hf_cigi2_view_definition_fov_right,
8716             { "Field of View Right (degrees)", "cigi.view_def.fov_right",
8717                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8718                 "Defines the right clipping plane for the view", HFILL }
8719         },
8720         { &hf_cigi2_view_definition_fov_top,
8721             { "Field of View Top (degrees)", "cigi.view_def.fov_top",
8722                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8723                 "Defines the top clipping plane for the view", HFILL }
8724         },
8725         { &hf_cigi2_view_definition_fov_bottom,
8726             { "Field of View Bottom (degrees)", "cigi.view_def.fov_bottom",
8727                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8728                 "Defines the bottom clipping plane for the view", HFILL }
8729         },
8730
8731         /* CIGI3 View Definition */
8732         { &hf_cigi3_view_definition,
8733             { "View Definition", "cigi.view_def",
8734                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8735                 "View Definition Packet", HFILL }
8736         },
8737         { &hf_cigi3_view_definition_view_id,
8738             { "View ID", "cigi.view_def.view_id",
8739                 FT_UINT16, BASE_DEC, NULL, 0x0,
8740                 "Specifies the view to which the data in this packet will be applied", HFILL }
8741         },
8742         { &hf_cigi3_view_definition_group_id,
8743             { "Group ID", "cigi.view_def.group_id",
8744                 FT_UINT8, BASE_DEC, NULL, 0x0,
8745                 "Specifies the group to which the view is to be assigned", HFILL }
8746         },
8747         { &hf_cigi3_view_definition_near_enable,
8748             { "Near Enable", "cigi.view_def.near_enable",
8749                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
8750                 "Specifies whether the near clipping plane will be set to the value of the Near parameter within this packet", HFILL }
8751         },
8752         { &hf_cigi3_view_definition_far_enable,
8753             { "Far Enable", "cigi.view_def.far_enable",
8754                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x02,
8755                 "Specifies whether the far clipping plane will be set to the value of the Far parameter within this packet", HFILL }
8756         },
8757         { &hf_cigi3_view_definition_left_enable,
8758             { "Left Enable", "cigi.view_def.left_enable",
8759                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x04,
8760                 "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 }
8761         },
8762         { &hf_cigi3_view_definition_right_enable,
8763             { "Right Enable", "cigi.view_def.right_enable",
8764                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
8765                 "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 }
8766         },
8767         { &hf_cigi3_view_definition_top_enable,
8768             { "Top Enable", "cigi.view_def.top_enable",
8769                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x10,
8770                 "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 }
8771         },
8772         { &hf_cigi3_view_definition_bottom_enable,
8773             { "Bottom Enable", "cigi.view_def.bottom_enable",
8774                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x20,
8775                 "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 }
8776         },
8777         { &hf_cigi3_view_definition_mirror_mode,
8778             { "Mirror Mode", "cigi.view_def.mirror_mode",
8779                 FT_UINT8, BASE_DEC, VALS(cigi3_view_definition_mirror_mode_vals), 0xc0,
8780                 "Specifies the mirroring function to be performed on the view", HFILL }
8781         },
8782         { &hf_cigi3_view_definition_pixel_replication,
8783             { "Pixel Replication Mode", "cigi.view_def.pixel_replication",
8784                 FT_UINT8, BASE_DEC, VALS(cigi3_view_definition_pixel_replication_vals), 0x07,
8785                 "Specifies the pixel replication function to be performed on the view", HFILL }
8786         },
8787         { &hf_cigi3_view_definition_projection_type,
8788             { "Projection Type", "cigi.view_def.projection_type",
8789                 FT_BOOLEAN, 8, TFS(&cigi3_view_definition_projection_type_tfs), 0x08,
8790                 "Specifies whether the view projection should be perspective or orthographic parallel", HFILL }
8791         },
8792         { &hf_cigi3_view_definition_reorder,
8793             { "Reorder", "cigi.view_def.reorder",
8794                 FT_BOOLEAN, 8, TFS(&cigi3_view_definition_reorder_tfs), 0x10,
8795                 "Specifies whether the view should be moved to the top of any overlapping views", HFILL }
8796         },
8797         { &hf_cigi3_view_definition_view_type,
8798             { "View Type", "cigi.view_def.view_type",
8799                 FT_UINT8, BASE_DEC, NULL, 0xe0,
8800                 "Specifies an IG-defined type for the indicated view", HFILL }
8801         },
8802         { &hf_cigi3_view_definition_near,
8803             { "Near (m)", "cigi.view_def.near",
8804                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8805                 "Specifies the position of the view's near clipping plane", HFILL }
8806         },
8807         { &hf_cigi3_view_definition_far,
8808             { "Far (m)", "cigi.view_def.far",
8809                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8810                 "Specifies the position of the view's far clipping plane", HFILL }
8811         },
8812         { &hf_cigi3_view_definition_left,
8813             { "Left (degrees)", "cigi.view_def.left",
8814                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8815                 "Specifies the left half-angle of the view frustum", HFILL }
8816         },
8817         { &hf_cigi3_view_definition_right,
8818             { "Right (degrees)", "cigi.view_def.right",
8819                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8820                 "Specifies the right half-angle of the view frustum", HFILL }
8821         },
8822         { &hf_cigi3_view_definition_top,
8823             { "Top (degrees)", "cigi.view_def.top",
8824                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8825                 "Specifies the top half-angle of the view frustum", HFILL }
8826         },
8827         { &hf_cigi3_view_definition_bottom,
8828             { "Bottom (degrees)", "cigi.view_def.bottom",
8829                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8830                 "Specifies the bottom half-angle of the view frustum", HFILL }
8831         },
8832
8833         /* CIGI2 Collision Detection Segment Definition */
8834         { &hf_cigi2_collision_detection_segment_definition,
8835             { "Collision Detection Segment Definition", "cigi.coll_det_seg_def",
8836                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8837                 "Collision Detection Segment Definition Packet", HFILL }
8838         },
8839         { &hf_cigi2_collision_detection_segment_definition_entity_id,
8840             { "Entity ID", "cigi.coll_det_seg_def.entity_id",
8841                 FT_UINT16, BASE_DEC, NULL, 0x0,
8842                 "Indicates the entity to which this collision detection definition is assigned", HFILL }
8843         },
8844         { &hf_cigi2_collision_detection_segment_definition_segment_enable,
8845             { "Segment Enable", "cigi.coll_det_seg_def.segment_enable",
8846                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x80,
8847                 "Indicates whether the defined segment is enabled for collision testing", HFILL }
8848         },
8849         { &hf_cigi2_collision_detection_segment_definition_segment_id,
8850             { "Segment ID", "cigi.coll_det_seg_def.segment_id",
8851                 FT_UINT8, BASE_DEC, NULL, 0x7f,
8852                 "Indicates which segment is being uniquely defined for the given entity", HFILL }
8853         },
8854         { &hf_cigi2_collision_detection_segment_definition_collision_mask,
8855             { "Collision Mask", "cigi.coll_det_seg_def.collision_mask",
8856                 FT_BYTES, BASE_NONE, NULL, 0x0,
8857                 "Indicates which environment features will be included in or excluded from consideration for collision detection testing", HFILL }
8858         },
8859         { &hf_cigi2_collision_detection_segment_definition_x_start,
8860             { "Segment X Start (m)", "cigi.coll_det_seg_def.x_start",
8861                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8862                 "Specifies the starting point of the collision segment in the X-axis with respect to the entity's reference point", HFILL }
8863         },
8864         { &hf_cigi2_collision_detection_segment_definition_y_start,
8865             { "Segment Y Start (m)", "cigi.coll_det_seg_def.y_start",
8866                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8867                 "Specifies the starting point of the collision segment in the Y-axis with respect to the entity's reference point", HFILL }
8868         },
8869         { &hf_cigi2_collision_detection_segment_definition_z_start,
8870             { "Segment Z Start (m)", "cigi.coll_det_seg_def.z_start",
8871                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8872                 "Specifies the starting point of the collision segment in the Z-axis with respect to the entity's reference point", HFILL }
8873         },
8874         { &hf_cigi2_collision_detection_segment_definition_x_end,
8875             { "Segment X End (m)", "cigi.coll_det_seg_def.x_end",
8876                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8877                 "Specifies the ending point of the collision segment in the X-axis with respect to the entity's reference point", HFILL }
8878         },
8879         { &hf_cigi2_collision_detection_segment_definition_y_end,
8880             { "Segment Y End (m)", "cigi.coll_det_seg_def.y_end",
8881                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8882                 "Specifies the ending point of the collision segment in the Y-axis with respect to the entity's reference point", HFILL }
8883         },
8884         { &hf_cigi2_collision_detection_segment_definition_z_end,
8885             { "Segment Z End (m)", "cigi.coll_det_seg_def.z_end",
8886                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8887                 "Specifies the ending point of the collision segment in the Z-axis with respect to the entity's reference point", HFILL }
8888         },
8889
8890         /* CIGI3 Collision Detection Segment Definition */
8891         { &hf_cigi3_collision_detection_segment_definition,
8892             { "Collision Detection Segment Definition", "cigi.coll_det_seg_def",
8893                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8894                 "Collision Detection Segment Definition Packet", HFILL }
8895         },
8896         { &hf_cigi3_collision_detection_segment_definition_entity_id,
8897             { "Entity ID", "cigi.coll_det_seg_def.entity_id",
8898                 FT_UINT16, BASE_DEC, NULL, 0x0,
8899                 "Specifies the entity for which the segment is defined", HFILL }
8900         },
8901         { &hf_cigi3_collision_detection_segment_definition_segment_id,
8902             { "Segment ID", "cigi.coll_det_seg_def.segment_id",
8903                 FT_UINT8, BASE_DEC, NULL, 0x0,
8904                 "Specifies the ID of the segment", HFILL }
8905         },
8906         { &hf_cigi3_collision_detection_segment_definition_segment_enable,
8907             { "Segment Enable", "cigi.coll_det_seg_def.segment_enable",
8908                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
8909                 "Specifies whether the segment is enabled or disabled", HFILL }
8910         },
8911         { &hf_cigi3_collision_detection_segment_definition_x1,
8912             { "X1 (m)", "cigi.coll_det_seg_def.x1",
8913                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8914                 "Specifies the X offset of one endpoint of the collision segment", HFILL }
8915         },
8916         { &hf_cigi3_collision_detection_segment_definition_y1,
8917             { "Y1 (m)", "cigi.coll_det_seg_def.y1",
8918                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8919                 "Specifies the Y offset of one endpoint of the collision segment", HFILL }
8920         },
8921         { &hf_cigi3_collision_detection_segment_definition_z1,
8922             { "Z1 (m)", "cigi.coll_det_seg_def.z1",
8923                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8924                 "Specifies the Z offset of one endpoint of the collision segment", HFILL }
8925         },
8926         { &hf_cigi3_collision_detection_segment_definition_x2,
8927             { "X2 (m)", "cigi.coll_det_seg_def.x2",
8928                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8929                 "Specifies the X offset of one endpoint of the collision segment", HFILL }
8930         },
8931         { &hf_cigi3_collision_detection_segment_definition_y2,
8932             { "Y2 (m)", "cigi.coll_det_seg_def.y2",
8933                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8934                 "Specifies the Y offset of one endpoint of the collision segment", HFILL }
8935         },
8936         { &hf_cigi3_collision_detection_segment_definition_z2,
8937             { "Z2 (m)", "cigi.coll_det_seg_def.z2",
8938                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8939                 "Specifies the Z offset of one endpoint of the collision segment", HFILL }
8940         },
8941         { &hf_cigi3_collision_detection_segment_definition_material_mask,
8942             { "Material Mask", "cigi.coll_det_seg_def.material_mask",
8943                 FT_UINT32, BASE_DEC, NULL, 0x0,
8944                 "Specifies the environmental and cultural features to be included in or excluded from consideration for collision testing", HFILL }
8945         },
8946
8947         /* CIGI2 Collision Detection Volume Definition */
8948         { &hf_cigi2_collision_detection_volume_definition,
8949             { "Collision Detection Volume Definition", "cigi.coll_det_vol_def",
8950                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
8951                 "Collision Detection Volume Definition Packet", HFILL }
8952         },
8953         { &hf_cigi2_collision_detection_volume_definition_entity_id,
8954             { "Entity ID", "cigi.coll_det_vol_def.entity_id",
8955                 FT_UINT16, BASE_DEC, NULL, 0x0,
8956                 "Indicates the entity to which this collision detection definition is assigned", HFILL }
8957         },
8958         { &hf_cigi2_collision_detection_volume_definition_volume_enable,
8959             { "Volume Enable", "cigi.coll_det_vol_def.volume_enable",
8960                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x80,
8961                 "Indicates whether the defined volume is enabled for collision testing", HFILL }
8962         },
8963         { &hf_cigi2_collision_detection_volume_definition_volume_id,
8964             { "Volume ID", "cigi.coll_det_vol_def.volume_id",
8965                 FT_UINT8, BASE_DEC, NULL, 0x7f,
8966                 "Indicates which volume is being uniquely defined for a given entity", HFILL }
8967         },
8968         { &hf_cigi2_collision_detection_volume_definition_x_offset,
8969             { "Centroid X Offset (m)", "cigi.coll_det_vol_def.x_offset",
8970                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8971                 "Specifies the offset of the volume's centroid along the X axis with respect to the entity's reference point", HFILL }
8972         },
8973         { &hf_cigi2_collision_detection_volume_definition_y_offset,
8974             { "Centroid Y Offset (m)", "cigi.coll_det_vol_def.y_offset",
8975                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8976                 "Specifies the offset of the volume's centroid along the Y axis with respect to the entity's reference point", HFILL }
8977         },
8978         { &hf_cigi2_collision_detection_volume_definition_z_offset,
8979             { "Centroid Z Offset (m)", "cigi.coll_det_vol_def.z_offset",
8980                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8981                 "Specifies the offset of the volume's centroid along the Z axis with respect to the entity's reference point", HFILL }
8982         },
8983         { &hf_cigi2_collision_detection_volume_definition_height,
8984             { "Height (m)", "cigi.coll_det_vol_def.height",
8985                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8986                 "Specifies the height of the volume", HFILL }
8987         },
8988         { &hf_cigi2_collision_detection_volume_definition_width,
8989             { "Width (m)", "cigi.coll_det_vol_def.width",
8990                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8991                 "Specifies the width of the volume", HFILL }
8992         },
8993         { &hf_cigi2_collision_detection_volume_definition_depth,
8994             { "Depth (m)", "cigi.coll_det_vol_def.depth",
8995                 FT_FLOAT, BASE_NONE, NULL, 0x0,
8996                 "Specifies the depth of the volume", HFILL }
8997         },
8998
8999         /* CIGI3 Collision Detection Volume Definition */
9000         { &hf_cigi3_collision_detection_volume_definition,
9001             { "Collision Detection Volume Definition", "cigi.coll_det_vol_def",
9002                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9003                 "Collision Detection Volume Definition Packet", HFILL }
9004         },
9005         { &hf_cigi3_collision_detection_volume_definition_entity_id,
9006             { "Entity ID", "cigi.coll_det_vol_def.entity_id",
9007                 FT_UINT16, BASE_DEC, NULL, 0x0,
9008                 "Specifies the entity for which the volume is defined", HFILL }
9009         },
9010         { &hf_cigi3_collision_detection_volume_definition_volume_id,
9011             { "Volume ID", "cigi.coll_det_vol_def.volume_id",
9012                 FT_UINT8, BASE_DEC, NULL, 0x0,
9013                 "Specifies the ID of the volume", HFILL }
9014         },
9015         { &hf_cigi3_collision_detection_volume_definition_volume_enable,
9016             { "Volume Enable", "cigi.coll_det_vol_def.volume_enable",
9017                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x01,
9018                 "Specifies whether the volume is enabled or disabled", HFILL }
9019         },
9020         { &hf_cigi3_collision_detection_volume_definition_volume_type,
9021             { "Volume Type", "cigi.coll_det_vol_def.volume_type",
9022                 FT_BOOLEAN, 8, TFS(&cigi3_collision_detection_volume_definition_volume_type_tfs), 0x02,
9023                 "Specified whether the volume is spherical or cuboid", HFILL }
9024         },
9025         { &hf_cigi3_collision_detection_volume_definition_x,
9026             { "X (m)", "cigi.coll_det_vol_def.x",
9027                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9028                 "Specifies the X offset of the center of the volume", HFILL }
9029         },
9030         { &hf_cigi3_collision_detection_volume_definition_y,
9031             { "Y (m)", "cigi.coll_det_vol_def.y",
9032                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9033                 "Specifies the Y offset of the center of the volume", HFILL }
9034         },
9035         { &hf_cigi3_collision_detection_volume_definition_z,
9036             { "Z (m)", "cigi.coll_det_vol_def.z",
9037                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9038                 "Specifies the Z offset of the center of the volume", HFILL }
9039         },
9040         { &hf_cigi3_collision_detection_volume_definition_radius_height,
9041             { "Radius (m)/Height (m)", "cigi.coll_det_vol_def.radius_height",
9042                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9043                 "Specifies the radius of the sphere or specifies the length of the cuboid along its Z axis", HFILL }
9044         },
9045         { &hf_cigi3_collision_detection_volume_definition_width,
9046             { "Width (m)", "cigi.coll_det_vol_def.width",
9047                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9048                 "Specifies the length of the cuboid along its Y axis", HFILL }
9049         },
9050         { &hf_cigi3_collision_detection_volume_definition_depth,
9051             { "Depth (m)", "cigi.coll_det_vol_def.depth",
9052                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9053                 "Specifies the length of the cuboid along its X axis", HFILL }
9054         },
9055         { &hf_cigi3_collision_detection_volume_definition_roll,
9056             { "Roll (degrees)", "cigi.coll_det_vol_def.roll",
9057                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9058                 "Specifies the roll of the cuboid with respect to the entity's coordinate system", HFILL }
9059         },
9060         { &hf_cigi3_collision_detection_volume_definition_pitch,
9061             { "Pitch (degrees)", "cigi.coll_det_vol_def.pitch",
9062                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9063                 "Specifies the pitch of the cuboid with respect to the entity's coordinate system", HFILL }
9064         },
9065         { &hf_cigi3_collision_detection_volume_definition_yaw,
9066             { "Yaw (degrees)", "cigi.coll_det_vol_def.yaw",
9067                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9068                 "Specifies the yaw of the cuboid with respect to the entity's coordinate system", HFILL }
9069         },
9070
9071         /* CIGI2 Height Above Terrain Request */
9072         { &hf_cigi2_height_above_terrain_request,
9073             { "Height Above Terrain Request", "cigi.hat_request",
9074                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9075                 "Height Above Terrain Request Packet", HFILL }
9076         },
9077         { &hf_cigi2_height_above_terrain_request_hat_id,
9078             { "HAT ID", "cigi.hat_request.hat_id",
9079                 FT_UINT16, BASE_DEC, NULL, 0x0,
9080                 "Identifies the HAT request", HFILL }
9081         },
9082         { &hf_cigi2_height_above_terrain_request_alt,
9083             { "Altitude (m)", "cigi.hat_request.alt",
9084                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9085                 "Specifies the altitude from which the HAT request is being made", HFILL }
9086         },
9087         { &hf_cigi2_height_above_terrain_request_lat,
9088             { "Latitude (degrees)", "cigi.hat_request.lat",
9089                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9090                 "Specifies the latitudinal position from which the HAT request is being made", HFILL }
9091         },
9092         { &hf_cigi2_height_above_terrain_request_lon,
9093             { "Longitude (degrees)", "cigi.hat_request.lon",
9094                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9095                 "Specifies the longitudinal position from which the HAT request is being made", HFILL }
9096         },
9097
9098         /* CIGI2 Line of Sight Occult Request */
9099         { &hf_cigi2_line_of_sight_occult_request,
9100             { "Line of Sight Occult Request", "cigi.los_occult_request",
9101                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9102                 "Line of Sight Occult Request Packet", HFILL }
9103         },
9104         { &hf_cigi2_line_of_sight_occult_request_los_id,
9105             { "LOS ID", "cigi.los_occult_request.los_id",
9106                 FT_UINT16, BASE_DEC, NULL, 0x0,
9107                 "Identifies the LOS request", HFILL }
9108         },
9109         { &hf_cigi2_line_of_sight_occult_request_source_alt,
9110             { "Source Altitude (m)", "cigi.los_occult_request.source_alt",
9111                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9112                 "Specifies the altitude of the source point for the LOS request segment", HFILL }
9113         },
9114         { &hf_cigi2_line_of_sight_occult_request_source_lat,
9115             { "Source Latitude (degrees)", "cigi.los_occult_request.source_lat",
9116                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9117                 "Specifies the latitudinal position of the source point for the LOS request segment", HFILL }
9118         },
9119         { &hf_cigi2_line_of_sight_occult_request_source_lon,
9120             { "Source Longitude (degrees)", "cigi.los_occult_request.source_lon",
9121                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9122                 "Specifies the longitudinal position of the source point for the LOS request segment", HFILL }
9123         },
9124         { &hf_cigi2_line_of_sight_occult_request_dest_alt,
9125             { "Destination Altitude (m)", "cigi.los_occult_request.dest_alt",
9126                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9127                 "Specifies the altitude of the destination point for the LOS request segment", HFILL }
9128         },
9129         { &hf_cigi2_line_of_sight_occult_request_dest_lat,
9130             { "Destination Latitude (degrees)", "cigi.los_occult_request.dest_lat",
9131                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9132                 "Specifies the latitudinal position for the destination point for the LOS request segment", HFILL }
9133         },
9134         { &hf_cigi2_line_of_sight_occult_request_dest_lon,
9135             { "Destination Longitude (degrees)", "cigi.los_occult_request.dest_lon",
9136                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9137                 "Specifies the longitudinal position of the destination point for the LOS request segment", HFILL }
9138         },
9139
9140         /* CIGI2 Line of Sight Range Request */
9141         { &hf_cigi2_line_of_sight_range_request,
9142             { "Line of Sight Range Request", "cigi.los_range_request",
9143                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9144                 "Line of Sight Range Request Packet", HFILL }
9145         },
9146         { &hf_cigi2_line_of_sight_range_request_los_id,
9147             { "LOS ID", "cigi.los_range_request.los_id",
9148                 FT_UINT16, BASE_DEC, NULL, 0x0,
9149                 "Identifies the LOS request", HFILL }
9150         },
9151         { &hf_cigi2_line_of_sight_range_request_azimuth,
9152             { "Azimuth (degrees)", "cigi.los_range_request.azimuth",
9153                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9154                 "Specifies the azimuth of the LOS vector", HFILL }
9155         },
9156         { &hf_cigi2_line_of_sight_range_request_elevation,
9157             { "Elevation (degrees)", "cigi.los_range_request.elevation",
9158                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9159                 "Specifies the elevation for the LOS vector", HFILL }
9160         },
9161         { &hf_cigi2_line_of_sight_range_request_min_range,
9162             { "Minimum Range (m)", "cigi.los_range_request.min_range",
9163                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9164                 "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 }
9165         },
9166         { &hf_cigi2_line_of_sight_range_request_max_range,
9167             { "Maximum Range (m)", "cigi.los_range_request.max_range",
9168                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9169                 "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 }
9170         },
9171         { &hf_cigi2_line_of_sight_range_request_source_alt,
9172             { "Source Altitude (m)", "cigi.los_range_request.source_alt",
9173                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9174                 "Specifies the altitude of the source point of the LOS request vector", HFILL }
9175         },
9176         { &hf_cigi2_line_of_sight_range_request_source_lat,
9177             { "Source Latitude (degrees)", "cigi.los_range_request.source_lat",
9178                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9179                 "Specifies the latitudinal position of the source point of the LOS request vector", HFILL }
9180         },
9181         { &hf_cigi2_line_of_sight_range_request_source_lon,
9182             { "Source Longitude (degrees)", "cigi.los_range_request.source_lon",
9183                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9184                 "Specifies the longitudinal position of the source point of the LOS request vector", HFILL }
9185         },
9186
9187         /* CIGI2 Height of Terrain Request */
9188         { &hf_cigi2_height_of_terrain_request,
9189             { "Height of Terrain Request", "cigi.hot_request",
9190                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9191                 "Height of Terrain Request Packet", HFILL }
9192         },
9193         { &hf_cigi2_height_of_terrain_request_hot_id,
9194             { "HOT ID", "cigi.hot_request.hot_id",
9195                 FT_UINT16, BASE_DEC, NULL, 0x0,
9196                 "Identifies the HOT request", HFILL }
9197         },
9198         { &hf_cigi2_height_of_terrain_request_lat,
9199             { "Latitude (degrees)", "cigi.hot_request.lat",
9200                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9201                 "Specifies the latitudinal position from which the HOT request is made", HFILL }
9202         },
9203         { &hf_cigi2_height_of_terrain_request_lon,
9204             { "Longitude (degrees)", "cigi.hot_request.lon",
9205                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9206                 "Specifies the longitudinal position from which the HOT request is made", HFILL }
9207         },
9208
9209         /* CIGI3 HAT/HOT Request */
9210         { &hf_cigi3_hat_hot_request,
9211             { "HAT/HOT Request", "cigi.hat_hot_request",
9212                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9213                 "HAT/HOT Request Packet", HFILL }
9214         },
9215         { &hf_cigi3_hat_hot_request_hat_hot_id,
9216             { "HAT/HOT ID", "cigi.hat_hot_request.hat_hot_id",
9217                 FT_UINT16, BASE_DEC, NULL, 0x0,
9218                 "Identifies the HAT/HOT request", HFILL }
9219         },
9220         { &hf_cigi3_hat_hot_request_type,
9221             { "Request Type", "cigi.hat_hot_request.type",
9222                 FT_UINT8, BASE_DEC, VALS(cigi3_hat_hot_request_type_vals), 0x03,
9223                 "Determines the type of response packet the IG should return for this packet", HFILL }
9224         },
9225         { &hf_cigi3_hat_hot_request_coordinate_system,
9226             { "Coordinate System", "cigi.hat_hot_request.coordinate_system",
9227                 FT_BOOLEAN, 8, TFS(&cigi3_hat_hot_request_coordinate_system_tfs), 0x04,
9228                 "Specifies the coordinate system within which the test point is defined", HFILL }
9229         },
9230         { &hf_cigi3_hat_hot_request_entity_id,
9231             { "Entity ID", "cigi.hat_hot_request.entity_id",
9232                 FT_UINT16, BASE_DEC, NULL, 0x0,
9233                 "Specifies the entity relative to which the test point is defined", HFILL }
9234         },
9235         { &hf_cigi3_hat_hot_request_lat_xoff,
9236             { "Latitude (degrees)/X Offset (m)", "cigi.hat_hot_request.lat_xoff",
9237                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9238                 "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 }
9239         },
9240         { &hf_cigi3_hat_hot_request_lon_yoff,
9241             { "Longitude (degrees)/Y Offset (m)", "cigi.hat_hot_request.lon_yoff",
9242                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9243                 "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 }
9244         },
9245         { &hf_cigi3_hat_hot_request_alt_zoff,
9246             { "Altitude (m)/Z Offset (m)", "cigi.hat_hot_request.alt_zoff",
9247                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9248                 "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 }
9249         },
9250
9251         /* CIGI3_2 HAT/HOT Request */
9252         { &hf_cigi3_2_hat_hot_request,
9253             { "HAT/HOT Request", "cigi.hat_hot_request",
9254                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9255                 "HAT/HOT Request Packet", HFILL }
9256         },
9257         { &hf_cigi3_2_hat_hot_request_hat_hot_id,
9258             { "HAT/HOT ID", "cigi.hat_hot_request.hat_hot_id",
9259                 FT_UINT16, BASE_DEC, NULL, 0x0,
9260                 "Identifies the HAT/HOT request", HFILL }
9261         },
9262         { &hf_cigi3_2_hat_hot_request_type,
9263             { "Request Type", "cigi.hat_hot_request.type",
9264                 FT_UINT8, BASE_DEC, VALS(cigi3_2_hat_hot_request_type_vals), 0x03,
9265                 "Determines the type of response packet the IG should return for this packet", HFILL }
9266         },
9267         { &hf_cigi3_2_hat_hot_request_coordinate_system,
9268             { "Coordinate System", "cigi.hat_hot_request.coordinate_system",
9269                 FT_BOOLEAN, 8, TFS(&cigi3_2_hat_hot_request_coordinate_system_tfs), 0x04,
9270                 "Specifies the coordinate system within which the test point is defined", HFILL }
9271         },
9272         { &hf_cigi3_2_hat_hot_request_update_period,
9273             { "Update Period", "cigi.hat_hot_request.update_period",
9274                 FT_UINT8, BASE_DEC, NULL, 0x0,
9275                 "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 }
9276         },
9277         { &hf_cigi3_2_hat_hot_request_entity_id,
9278             { "Entity ID", "cigi.hat_hot_request.entity_id",
9279                 FT_UINT16, BASE_DEC, NULL, 0x0,
9280                 "Specifies the entity relative to which the test point is defined", HFILL }
9281         },
9282         { &hf_cigi3_2_hat_hot_request_lat_xoff,
9283             { "Latitude (degrees)/X Offset (m)", "cigi.hat_hot_request.lat_xoff",
9284                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9285                 "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 }
9286         },
9287         { &hf_cigi3_2_hat_hot_request_lon_yoff,
9288             { "Longitude (degrees)/Y Offset (m)", "cigi.hat_hot_request.lon_yoff",
9289                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9290                 "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 }
9291         },
9292         { &hf_cigi3_2_hat_hot_request_alt_zoff,
9293             { "Altitude (m)/Z Offset (m)", "cigi.hat_hot_request.alt_zoff",
9294                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9295                 "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 }
9296         },
9297
9298         /* CIGI3 Line of Sight Segment Request */
9299         { &hf_cigi3_line_of_sight_segment_request,
9300             { "Line of Sight Segment Request", "cigi.los_segment_request",
9301                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9302                 "Line of Sight Segment Request Packet", HFILL }
9303         },
9304         { &hf_cigi3_line_of_sight_segment_request_los_id,
9305             { "LOS ID", "cigi.los_segment_request.los_id",
9306                 FT_UINT16, BASE_DEC, NULL, 0x0,
9307                 "Identifies the LOS request", HFILL }
9308         },
9309         { &hf_cigi3_line_of_sight_segment_request_type,
9310             { "Request Type", "cigi.los_segment_request.type",
9311                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_segment_request_type_tfs), 0x01,
9312                 "Determines what type of response the IG should return for this request", HFILL }
9313         },
9314         { &hf_cigi3_line_of_sight_segment_request_source_coord,
9315             { "Source Point Coordinate System", "cigi.los_segment_request.source_coord",
9316                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_segment_request_coord_tfs), 0x02,
9317                 "Indicates the coordinate system relative to which the test segment source endpoint is specified", HFILL }
9318         },
9319         { &hf_cigi3_line_of_sight_segment_request_destination_coord,
9320             { "Destination Point Coordinate System", "cigi.los_segment_request.destination_coord",
9321                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_segment_request_coord_tfs), 0x04,
9322                 "Indicates the coordinate system relative to which the test segment destination endpoint is specified", HFILL }
9323         },
9324         { &hf_cigi3_line_of_sight_segment_request_response_coord,
9325             { "Response Coordinate System", "cigi.los_segment_request.response_coord",
9326                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_segment_request_coord_tfs), 0x08,
9327                 "Specifies the coordinate system to be used in the response", HFILL }
9328         },
9329         { &hf_cigi3_line_of_sight_segment_request_alpha_threshold,
9330             { "Alpha Threshold", "cigi.los_segment_request.alpha_threshold",
9331                 FT_UINT8, BASE_DEC, NULL, 0x0,
9332                 "Specifies the minimum alpha value a surface may have for an LOS response to be generated", HFILL }
9333         },
9334         { &hf_cigi3_line_of_sight_segment_request_entity_id,
9335             { "Entity ID", "cigi.los_segment_request.entity_id",
9336                 FT_UINT16, BASE_DEC, NULL, 0x0,
9337                 "Specifies the entity relative to which the test segment endpoints are defined", HFILL }
9338         },
9339         { &hf_cigi3_line_of_sight_segment_request_source_lat_xoff,
9340             { "Source Latitude (degrees)/Source X Offset (m)", "cigi.los_segment_request.source_lat_xoff",
9341                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9342                 "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 }
9343         },
9344         { &hf_cigi3_line_of_sight_segment_request_source_lon_yoff,
9345             { "Source Longitude (degrees)/Source Y Offset (m)", "cigi.los_segment_request.source_lon_yoff",
9346                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9347                 "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 }
9348         },
9349         { &hf_cigi3_line_of_sight_segment_request_source_alt_zoff,
9350             { "Source Altitude (m)/Source Z Offset (m)", "cigi.los_segment_request.source_alt_zoff",
9351                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9352                 "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 }
9353         },
9354         { &hf_cigi3_line_of_sight_segment_request_destination_lat_xoff,
9355             { "Destination Latitude (degrees)/ Destination X Offset (m)", "cigi.los_segment_request.destination_lat_xoff",
9356                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9357                 "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 }
9358         },
9359         { &hf_cigi3_line_of_sight_segment_request_destination_lon_yoff,
9360             { "Destination Longitude (degrees)/Destination Y Offset (m)", "cigi.los_segment_request.destination_lon_yoff",
9361                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9362                 "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 }
9363         },
9364         { &hf_cigi3_line_of_sight_segment_request_destination_alt_zoff,
9365             { "Destination Altitude (m)/ Destination Z Offset (m)", "cigi.los_segment_request.destination_alt_zoff",
9366                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9367                 "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 }
9368         },
9369         { &hf_cigi3_line_of_sight_segment_request_material_mask,
9370             { "Material Mask", "cigi.los_segment_request.material_mask",
9371                 FT_UINT32, BASE_DEC, NULL, 0x0,
9372                 "Specifies the environmental and cultural features to be included in or excluded from consideration for the LOS segment testing", HFILL }
9373         },
9374
9375         /* CIGI3_2 Line of Sight Segment Request */
9376         { &hf_cigi3_2_line_of_sight_segment_request,
9377             { "Line of Sight Segment Request", "cigi.los_segment_request",
9378                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9379                 "Line of Sight Segment Request Packet", HFILL }
9380         },
9381         { &hf_cigi3_2_line_of_sight_segment_request_los_id,
9382             { "LOS ID", "cigi.los_segment_request.los_id",
9383                 FT_UINT16, BASE_DEC, NULL, 0x0,
9384                 "Identifies the LOS request", HFILL }
9385         },
9386         { &hf_cigi3_2_line_of_sight_segment_request_type,
9387             { "Request Type", "cigi.los_segment_request.type",
9388                 FT_BOOLEAN, 8, TFS(&cigi3_2_line_of_sight_segment_request_type_tfs), 0x01,
9389                 "Determines what type of response the IG should return for this request", HFILL }
9390         },
9391         { &hf_cigi3_2_line_of_sight_segment_request_source_coord,
9392             { "Source Point Coordinate System", "cigi.los_segment_request.source_coord",
9393                 FT_BOOLEAN, 8, TFS(&cigi3_2_line_of_sight_segment_request_coord_tfs), 0x02,
9394                 "Indicates the coordinate system relative to which the test segment source endpoint is specified", HFILL }
9395         },
9396         { &hf_cigi3_2_line_of_sight_segment_request_destination_coord,
9397             { "Destination Point Coordinate System", "cigi.los_segment_request.destination_coord",
9398                 FT_BOOLEAN, 8, TFS(&cigi3_2_line_of_sight_segment_request_coord_tfs), 0x04,
9399                 "Indicates the coordinate system relative to which the test segment destination endpoint is specified", HFILL }
9400         },
9401         { &hf_cigi3_2_line_of_sight_segment_request_response_coord,
9402             { "Response Coordinate System", "cigi.los_segment_request.response_coord",
9403                 FT_BOOLEAN, 8, TFS(&cigi3_2_line_of_sight_segment_request_coord_tfs), 0x08,
9404                 "Specifies the coordinate system to be used in the response", HFILL }
9405         },
9406         { &hf_cigi3_2_line_of_sight_segment_request_destination_entity_id_valid,
9407             { "Destination Entity ID Valid", "cigi.los_segment_request.destination_entity_id_valid",
9408                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x10,
9409                 "Destination Entity ID is valid.", HFILL }
9410         },
9411         { &hf_cigi3_2_line_of_sight_segment_request_alpha_threshold,
9412             { "Alpha Threshold", "cigi.los_segment_request.alpha_threshold",
9413                 FT_UINT8, BASE_DEC, NULL, 0x0,
9414                 "Specifies the minimum alpha value a surface may have for an LOS response to be generated", HFILL }
9415         },
9416         { &hf_cigi3_2_line_of_sight_segment_request_entity_id,
9417             { "Entity ID", "cigi.los_segment_request.entity_id",
9418                 FT_UINT16, BASE_DEC, NULL, 0x0,
9419                 "Specifies the entity relative to which the test segment endpoints are defined", HFILL }
9420         },
9421         { &hf_cigi3_2_line_of_sight_segment_request_source_lat_xoff,
9422             { "Source Latitude (degrees)/Source X Offset (m)", "cigi.los_segment_request.source_lat_xoff",
9423                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9424                 "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 }
9425         },
9426         { &hf_cigi3_2_line_of_sight_segment_request_source_lon_yoff,
9427             { "Source Longitude (degrees)/Source Y Offset (m)", "cigi.los_segment_request.source_lon_yoff",
9428                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9429                 "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 }
9430         },
9431         { &hf_cigi3_2_line_of_sight_segment_request_source_alt_zoff,
9432             { "Source Altitude (m)/Source Z Offset (m)", "cigi.los_segment_request.source_alt_zoff",
9433                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9434                 "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 }
9435         },
9436         { &hf_cigi3_2_line_of_sight_segment_request_destination_lat_xoff,
9437             { "Destination Latitude (degrees)/ Destination X Offset (m)", "cigi.los_segment_request.destination_lat_xoff",
9438                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9439                 "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 }
9440         },
9441         { &hf_cigi3_2_line_of_sight_segment_request_destination_lon_yoff,
9442             { "Destination Longitude (degrees)/Destination Y Offset (m)", "cigi.los_segment_request.destination_lon_yoff",
9443                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9444                 "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 }
9445         },
9446         { &hf_cigi3_2_line_of_sight_segment_request_destination_alt_zoff,
9447             { "Destination Altitude (m)/ Destination Z Offset (m)", "cigi.los_segment_request.destination_alt_zoff",
9448                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9449                 "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 }
9450         },
9451         { &hf_cigi3_2_line_of_sight_segment_request_material_mask,
9452             { "Material Mask", "cigi.los_segment_request.material_mask",
9453                 FT_UINT32, BASE_DEC, NULL, 0x0,
9454                 "Specifies the environmental and cultural features to be included in or excluded from consideration for the LOS segment testing", HFILL }
9455         },
9456         { &hf_cigi3_2_line_of_sight_segment_request_update_period,
9457             { "Update Period", "cigi.los_segment_request.update_period",
9458                 FT_UINT8, BASE_DEC, NULL, 0x0,
9459                 "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 }
9460         },
9461         { &hf_cigi3_2_line_of_sight_segment_request_destination_entity_id,
9462             { "Destination Entity ID", "cigi.los_segment_request.destination_entity_id",
9463                 FT_UINT16, BASE_DEC, NULL, 0x0,
9464                 "Indicates the entity with respect to which the Destination X Offset, Y Offset, and Destination Z Offset parameters are specified", HFILL }
9465         },
9466
9467         /* CIGI3 Line of Sight Vector Request */
9468         { &hf_cigi3_line_of_sight_vector_request,
9469             { "Line of Sight Vector Request", "cigi.los_vector_request",
9470                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9471                 "Line of Sight Vector Request Packet", HFILL }
9472         },
9473         { &hf_cigi3_line_of_sight_vector_request_los_id,
9474             { "LOS ID", "cigi.los_vector_request.los_id",
9475                 FT_UINT16, BASE_DEC, NULL, 0x0,
9476                 "Identifies the LOS request", HFILL }
9477         },
9478         { &hf_cigi3_line_of_sight_vector_request_type,
9479             { "Request Type", "cigi.los_vector_request.type",
9480                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_vector_request_type_tfs), 0x01,
9481                 "Determines what type of response the IG should return for this request", HFILL }
9482         },
9483         { &hf_cigi3_line_of_sight_vector_request_source_coord,
9484             { "Source Point Coordinate System", "cigi.los_vector_request.source_coord",
9485                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_vector_request_coord_tfs), 0x02,
9486                 "Indicates the coordinate system relative to which the test vector source point is specified", HFILL }
9487         },
9488         { &hf_cigi3_line_of_sight_vector_request_response_coord,
9489             { "Response Coordinate System", "cigi.los_vector_request.response_coord",
9490                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_vector_request_coord_tfs), 0x04,
9491                 "Specifies the coordinate system to be used in the response", HFILL }
9492         },
9493         { &hf_cigi3_line_of_sight_vector_request_alpha,
9494             { "Alpha Threshold", "cigi.los_vector_request.alpha",
9495                 FT_UINT8, BASE_DEC, NULL, 0x0,
9496                 "Specifies the minimum alpha value a surface may have for an LOS response to be generated", HFILL }
9497         },
9498         { &hf_cigi3_line_of_sight_vector_request_entity_id,
9499             { "Entity ID", "cigi.los_vector_request.entity_id",
9500                 FT_UINT16, BASE_DEC, NULL, 0x0,
9501                 "Specifies the entity relative to which the test segment endpoints are defined", HFILL }
9502         },
9503         { &hf_cigi3_line_of_sight_vector_request_azimuth,
9504             { "Azimuth (degrees)", "cigi.los_vector_request.azimuth",
9505                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9506                 "Specifies the horizontal angle of the LOS test vector", HFILL }
9507         },
9508         { &hf_cigi3_line_of_sight_vector_request_elevation,
9509             { "Elevation (degrees)", "cigi.los_vector_request.elevation",
9510                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9511                 "Specifies the vertical angle of the LOS test vector", HFILL }
9512         },
9513         { &hf_cigi3_line_of_sight_vector_request_min_range,
9514             { "Minimum Range (m)", "cigi.los_vector_request.min_range",
9515                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9516                 "Specifies the minimum range along the LOS test vector at which intersection testing should occur", HFILL }
9517         },
9518         { &hf_cigi3_line_of_sight_vector_request_max_range,
9519             { "Maximum Range (m)", "cigi.los_vector_request.max_range",
9520                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9521                 "Specifies the maximum range along the LOS test vector at which intersection testing should occur", HFILL }
9522         },
9523         { &hf_cigi3_line_of_sight_vector_request_source_lat_xoff,
9524             { "Source Latitude (degrees)/Source X Offset (m)", "cigi.los_vector_request.source_lat_xoff",
9525                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9526                 "Specifies the latitude of the source point of the LOS test vector", HFILL }
9527         },
9528         { &hf_cigi3_line_of_sight_vector_request_source_lon_yoff,
9529             { "Source Longitude (degrees)/Source Y Offset (m)", "cigi.los_vector_request.source_lon_yoff",
9530                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9531                 "Specifies the longitude of the source point of the LOS test vector", HFILL }
9532         },
9533         { &hf_cigi3_line_of_sight_vector_request_source_alt_zoff,
9534             { "Source Altitude (m)/Source Z Offset (m)", "cigi.los_vector_request.source_alt_zoff",
9535                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9536                 "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 }
9537         },
9538         { &hf_cigi3_line_of_sight_vector_request_material_mask,
9539             { "Material Mask", "cigi.los_vector_request.material_mask",
9540                 FT_UINT32, BASE_DEC, NULL, 0x0,
9541                 "Specifies the environmental and cultural features to be included in LOS segment testing", HFILL }
9542         },
9543
9544         /* CIGI3_2 Line of Sight Vector Request */
9545         { &hf_cigi3_2_line_of_sight_vector_request,
9546             { "Line of Sight Vector Request", "cigi.los_vector_request",
9547                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9548                 "Line of Sight Vector Request Packet", HFILL }
9549         },
9550         { &hf_cigi3_2_line_of_sight_vector_request_los_id,
9551             { "LOS ID", "cigi.los_vector_request.los_id",
9552                 FT_UINT16, BASE_DEC, NULL, 0x0,
9553                 "Identifies the LOS request", HFILL }
9554         },
9555         { &hf_cigi3_2_line_of_sight_vector_request_type,
9556             { "Request Type", "cigi.los_vector_request.type",
9557                 FT_BOOLEAN, 8, TFS(&cigi3_2_line_of_sight_vector_request_type_tfs), 0x01,
9558                 "Determines what type of response the IG should return for this request", HFILL }
9559         },
9560         { &hf_cigi3_2_line_of_sight_vector_request_source_coord,
9561             { "Source Point Coordinate System", "cigi.los_vector_request.source_coord",
9562                 FT_BOOLEAN, 8, TFS(&cigi3_2_line_of_sight_vector_request_coord_tfs), 0x02,
9563                 "Indicates the coordinate system relative to which the test vector source point is specified", HFILL }
9564         },
9565         { &hf_cigi3_2_line_of_sight_vector_request_response_coord,
9566             { "Response Coordinate System", "cigi.los_vector_request.response_coord",
9567                 FT_BOOLEAN, 8, TFS(&cigi3_2_line_of_sight_vector_request_coord_tfs), 0x04,
9568                 "Specifies the coordinate system to be used in the response", HFILL }
9569         },
9570         { &hf_cigi3_2_line_of_sight_vector_request_alpha,
9571             { "Alpha Threshold", "cigi.los_vector_request.alpha",
9572                 FT_UINT8, BASE_DEC, NULL, 0x0,
9573                 "Specifies the minimum alpha value a surface may have for an LOS response to be generated", HFILL }
9574         },
9575         { &hf_cigi3_2_line_of_sight_vector_request_entity_id,
9576             { "Entity ID", "cigi.los_vector_request.entity_id",
9577                 FT_UINT16, BASE_DEC, NULL, 0x0,
9578                 "Specifies the entity relative to which the test segment endpoints are defined", HFILL }
9579         },
9580         { &hf_cigi3_2_line_of_sight_vector_request_azimuth,
9581             { "Azimuth (degrees)", "cigi.los_vector_request.azimuth",
9582                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9583                 "Specifies the horizontal angle of the LOS test vector", HFILL }
9584         },
9585         { &hf_cigi3_2_line_of_sight_vector_request_elevation,
9586             { "Elevation (degrees)", "cigi.los_vector_request.elevation",
9587                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9588                 "Specifies the vertical angle of the LOS test vector", HFILL }
9589         },
9590         { &hf_cigi3_2_line_of_sight_vector_request_min_range,
9591             { "Minimum Range (m)", "cigi.los_vector_request.min_range",
9592                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9593                 "Specifies the minimum range along the LOS test vector at which intersection testing should occur", HFILL }
9594         },
9595         { &hf_cigi3_2_line_of_sight_vector_request_max_range,
9596             { "Maximum Range (m)", "cigi.los_vector_request.max_range",
9597                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9598                 "Specifies the maximum range along the LOS test vector at which intersection testing should occur", HFILL }
9599         },
9600         { &hf_cigi3_2_line_of_sight_vector_request_source_lat_xoff,
9601             { "Source Latitude (degrees)/Source X Offset (m)", "cigi.los_vector_request.source_lat_xoff",
9602                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9603                 "Specifies the latitude of the source point of the LOS test vector", HFILL }
9604         },
9605         { &hf_cigi3_2_line_of_sight_vector_request_source_lon_yoff,
9606             { "Source Longitude (degrees)/Source Y Offset (m)", "cigi.los_vector_request.source_lon_yoff",
9607                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9608                 "Specifies the longitude of the source point of the LOS test vector", HFILL }
9609         },
9610         { &hf_cigi3_2_line_of_sight_vector_request_source_alt_zoff,
9611             { "Source Altitude (m)/Source Z Offset (m)", "cigi.los_vector_request.source_alt_zoff",
9612                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9613                 "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 }
9614         },
9615         { &hf_cigi3_2_line_of_sight_vector_request_material_mask,
9616             { "Material Mask", "cigi.los_vector_request.material_mask",
9617                 FT_UINT32, BASE_DEC, NULL, 0x0,
9618                 "Specifies the environmental and cultural features to be included in LOS segment testing", HFILL }
9619         },
9620         { &hf_cigi3_2_line_of_sight_vector_request_update_period,
9621             { "Update Period", "cigi.los_vector_request.update_period",
9622                 FT_UINT8, BASE_DEC, NULL, 0x0,
9623                 "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 }
9624         },
9625
9626         /* CIGI3 Position Request */
9627         { &hf_cigi3_position_request,
9628             { "Position Request", "cigi.pos_request",
9629                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9630                 "Position Request Packet", HFILL }
9631         },
9632         { &hf_cigi3_position_request_object_id,
9633             { "Object ID", "cigi.pos_request.object_id",
9634                 FT_UINT16, BASE_DEC, NULL, 0x0,
9635                 "Identifies the entity, view, view group, or motion tracking device whose position is being requested", HFILL }
9636         },
9637         { &hf_cigi3_position_request_part_id,
9638             { "Articulated Part ID", "cigi.pos_request.part_id",
9639                 FT_UINT8, BASE_DEC, NULL, 0x0,
9640                 "Identifies the articulated part whose position is being requested", HFILL }
9641         },
9642         { &hf_cigi3_position_request_update_mode,
9643             { "Update Mode", "cigi.pos_request.update_mode",
9644                 FT_BOOLEAN, 8, TFS(&cigi3_position_request_update_mode_tfs), 0x01,
9645                 "Specifies whether the IG should report the position of the requested object each frame", HFILL }
9646         },
9647         { &hf_cigi3_position_request_object_class,
9648             { "Object Class", "cigi.pos_request.object_class",
9649                 FT_UINT8, BASE_DEC, VALS(cigi3_position_request_object_class_vals), 0x0e,
9650                 "Specifies the type of object whose position is being requested", HFILL }
9651         },
9652         { &hf_cigi3_position_request_coord_system,
9653             { "Coordinate System", "cigi.pos_request.coord_system",
9654                 FT_UINT8, BASE_DEC, VALS(cigi3_position_request_coord_system_vals), 0x30,
9655                 "Specifies the desired coordinate system relative to which the position and orientation should be given", HFILL }
9656         },
9657
9658         /* CIGI3 Environmental Conditions Request */
9659         { &hf_cigi3_environmental_conditions_request,
9660             { "Environmental Conditions Request", "cigi.env_cond_request",
9661                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9662                 "Environmental Conditions Request Packet", HFILL }
9663         },
9664         { &hf_cigi3_environmental_conditions_request_type,
9665             { "Request Type", "cigi.env_cond_request.type",
9666                 FT_UINT8, BASE_DEC, VALS(cigi3_environmental_conditions_request_type_vals), 0x0f,
9667                 "Specifies the desired response type for the request", HFILL }
9668         },
9669         { &hf_cigi3_environmental_conditions_request_id,
9670             { "Request ID", "cigi.env_cond_request.id",
9671                 FT_UINT8, BASE_DEC, NULL, 0x0,
9672                 "Identifies the environmental conditions request", HFILL }
9673         },
9674         { &hf_cigi3_environmental_conditions_request_lat,
9675             { "Latitude (degrees)", "cigi.env_cond_request.lat",
9676                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9677                 "Specifies the geodetic latitude at which the environmental state is requested", HFILL }
9678         },
9679         { &hf_cigi3_environmental_conditions_request_lon,
9680             { "Longitude (degrees)", "cigi.env_cond_request.lon",
9681                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9682                 "Specifies the geodetic longitude at which the environmental state is requested", HFILL }
9683         },
9684         { &hf_cigi3_environmental_conditions_request_alt,
9685             { "Altitude (m)", "cigi.env_cond_request.alt",
9686                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
9687                 "Specifies the geodetic altitude at which the environmental state is requested", HFILL }
9688         },
9689
9690         /* CIGI3_3 Symbol Surface Definition */
9691         { &hf_cigi3_3_symbol_surface_definition,
9692             { "Symbol Surface Definition", "cigi.symbl_srfc_def",
9693                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9694                 "Symbol Surface Definition Packet", HFILL }
9695         },
9696         { &hf_cigi3_3_symbol_surface_definition_surface_id,
9697             { "Surface ID", "cigi.symbl_srfc_def.surface_id",
9698                 FT_UINT16, BASE_DEC, NULL, 0x0,
9699                 "Identifies the symbol surface to which this packet is applied", HFILL }
9700         },
9701         { &hf_cigi3_3_symbol_surface_definition_surface_state,
9702             { "Surface State", "cigi.symbl_srfc_def.surface_state",
9703                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_surface_definition_surface_state_tfs), 0x01,
9704                 "Specifies whether the symbol surface should be active or destroyed", HFILL }
9705         },
9706         { &hf_cigi3_3_symbol_surface_definition_attach_type,
9707             { "Attach Type", "cigi.symbl_srfc_def.attach_type",
9708                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_surface_definition_attach_type_tfs), 0x02,
9709                 "Specifies whether the surface should be attached to an entity or view", HFILL }
9710         },
9711         { &hf_cigi3_3_symbol_surface_definition_billboard,
9712             { "Billboard", "cigi.symbl_srfc_def.billboard",
9713                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_surface_definition_billboard_tfs), 0x04,
9714                 "Specifies whether the surface is treated as a billboard", HFILL }
9715         },
9716         { &hf_cigi3_3_symbol_surface_definition_perspective_growth_enable,
9717             { "Perspective Growth Enable", "cigi.symbl_srfc_def.perspective_growth_enable",
9718                 FT_BOOLEAN, 8, TFS(&cigi_enable_tfs), 0x08,
9719                 "Specifies whether the surface appears to maintain a constant size or has perspective growth", HFILL }
9720         },
9721         { &hf_cigi3_3_symbol_surface_definition_entity_view_id,
9722             { "Entity ID/View ID", "cigi.symbl_srfc_def.entity_view_id",
9723                 FT_UINT16, BASE_DEC, NULL, 0x0,
9724                 "Specifies the entity or view to which this symbol surface is attached", HFILL }
9725         },
9726         { &hf_cigi3_3_symbol_surface_definition_xoff_left,
9727             { "X Offset (m)/Left", "cigi.symbl_srfc_def.xoff_left",
9728                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9729                 "Specifies the x offset or leftmost boundary for the symbol surface", HFILL }
9730         },
9731         { &hf_cigi3_3_symbol_surface_definition_yoff_right,
9732             { "Y Offset (m)/Right", "cigi.symbl_srfc_def.yoff_right",
9733                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9734                 "Specifies the y offset or rightmost boundary for the symbol surface", HFILL }
9735         },
9736         { &hf_cigi3_3_symbol_surface_definition_zoff_top,
9737             { "Z Offset (m)/Top", "cigi.symbl_srfc_def.zoff_top",
9738                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9739                 "Specifies the z offset or topmost boundary for the symbol surface", HFILL }
9740         },
9741         { &hf_cigi3_3_symbol_surface_definition_yaw_bottom,
9742             { "Yaw (degrees)/Bottom", "cigi.symbl_srfc_def.yaw_bottom",
9743                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9744                 "Specifies the rotation about the surface's Z axis or bottommost boundary for the symbol surface", HFILL }
9745         },
9746         { &hf_cigi3_3_symbol_surface_definition_pitch,
9747             { "Pitch (degrees)", "cigi.symbl_srfc_def.pitch",
9748                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9749                 "Specifies the rotation about the surface's Y axis", HFILL }
9750         },
9751         { &hf_cigi3_3_symbol_surface_definition_roll,
9752             { "Roll (degrees)", "cigi.symbl_srfc_def.roll",
9753                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9754                 "Specifies the rotation about the surface's X axis", HFILL }
9755         },
9756         { &hf_cigi3_3_symbol_surface_definition_width,
9757             { "Width (m/degrees)", "cigi.symbl_srfc_def.width",
9758                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9759                 "Specifies the width of the symbol surface", HFILL }
9760         },
9761         { &hf_cigi3_3_symbol_surface_definition_height,
9762             { "Height (m/degrees)", "cigi.symbl_srfc_def.height",
9763                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9764                 "Specifies the height of the symbol surface", HFILL }
9765         },
9766         { &hf_cigi3_3_symbol_surface_definition_min_u,
9767             { "Min U (surface horizontal units)", "cigi.symbl_srfc_def.min_u",
9768                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9769                 "Specifies the minimum U coordinate of the symbol surface's viewable area", HFILL }
9770         },
9771         { &hf_cigi3_3_symbol_surface_definition_max_u,
9772             { "Max U (surface horizontal units)", "cigi.symbl_srfc_def.max_u",
9773                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9774                 "Specifies the maximum U coordinate of the symbol surface's viewable area", HFILL }
9775         },
9776         { &hf_cigi3_3_symbol_surface_definition_min_v,
9777             { "Min V (surface vertical units)", "cigi.symbl_srfc_def.min_v",
9778                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9779                 "Specifies the minimum V coordinate of the symbol surface's viewable area", HFILL }
9780         },
9781         { &hf_cigi3_3_symbol_surface_definition_max_v,
9782             { "Max V (surface vertical units)", "cigi.symbl_srfc_def.max_v",
9783                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9784                 "Specifies the maximum V coordinate of the symbol surface's viewable area", HFILL }
9785         },
9786
9787         /* CIGI3_3 Symbol Text Definition */
9788         { &hf_cigi3_3_symbol_text_definition,
9789             { "Symbol Text Definition", "cigi.symbol_text_def",
9790                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9791                 "Symbol Text Definition Packet", HFILL }
9792         },
9793         { &hf_cigi3_3_symbol_text_definition_symbol_id,
9794             { "Symbol ID", "cigi.symbol_text_def.symbol_id",
9795                 FT_UINT16, BASE_DEC, NULL, 0x0,
9796                 "Specifies the identifier of the symbol that is being defined", HFILL }
9797         },
9798         { &hf_cigi3_3_symbol_text_definition_alignment,
9799             { "Alignment", "cigi.symbol_text_def.alignment",
9800                 FT_UINT8, BASE_DEC, VALS(cigi3_3_symbol_text_definition_alignment_vals), 0x0f,
9801                 "Specifies the position of the symbol's reference point", HFILL }
9802         },
9803         { &hf_cigi3_3_symbol_text_definition_orientation,
9804             { "Orientation", "cigi.symbol_text_def.orientation",
9805                 FT_UINT8, BASE_DEC, VALS(cigi3_3_symbol_text_definition_orientation_vals), 0x30,
9806                 "Specifies the orientation of the text", HFILL }
9807         },
9808         { &hf_cigi3_3_symbol_text_definition_font_ident,
9809             { "Font ID", "cigi.symbol_text_def.font_ident",
9810                 FT_UINT8, BASE_DEC, VALS(cigi3_3_symbol_text_definition_font_ident_vals), 0x0,
9811                 "Specifies the font to be used", HFILL }
9812         },
9813         { &hf_cigi3_3_symbol_text_definition_font_size,
9814             { "Font Size", "cigi.symbol_text_def.font_size",
9815                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9816                 "Specifies the font size", HFILL }
9817         },
9818         { &hf_cigi3_3_symbol_text_definition_text,
9819             { "Text", "cigi.symbol_text_def.text",
9820                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9821                 "Symbol text", HFILL }
9822         },
9823
9824         /* CIGI3_3 Symbol Circle Definition */
9825         { &hf_cigi3_3_symbol_circle_definition,
9826             { "Symbol Circle Definition", "cigi.symbol_circle_def",
9827                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
9828                 "Symbol Circle Definition Packet", HFILL }
9829         },
9830         { &hf_cigi3_3_symbol_circle_definition_symbol_id,
9831             { "Symbol ID", "cigi.symbol_circle_def.symbol_id",
9832                 FT_UINT16, BASE_DEC, NULL, 0x0,
9833                 "Specifies the identifier of the symbol that is being defined", HFILL }
9834         },
9835         { &hf_cigi3_3_symbol_circle_definition_drawing_style,
9836             { "Drawing Style", "cigi.symbl_circle_def.drawing_style",
9837                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_circle_definition_drawing_style_tfs), 0x01,
9838                 "Specifies whether the circles and arcs are curved lines or filled areas", HFILL }
9839         },
9840         { &hf_cigi3_3_symbol_circle_definition_stipple_pattern,
9841             { "Stipple Pattern", "cigi.symbol_circle_def.stipple_pattern",
9842                 FT_UINT16, BASE_HEX, NULL, 0x0,
9843                 "Specifies the dash pattern used", HFILL }
9844         },
9845         { &hf_cigi3_3_symbol_circle_definition_line_width,
9846             { "Line Width (scaled symbol surface units)", "cigi.symbol_circle_def.line_width",
9847                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9848                 "Specifies the thickness of the line", HFILL }
9849         },
9850         { &hf_cigi3_3_symbol_circle_definition_stipple_pattern_length,
9851             { "Stipple Pattern Length (scaled symbol surface units)", "cigi.symbol_circle_def.stipple_pattern_length",
9852                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9853                 "Specifies the length of one complete repetition of the stipple pattern", HFILL }
9854         },
9855         { &hf_cigi3_3_symbol_circle_definition_center_u[0],
9856             { "Center U 1 (scaled symbol surface units)", "cigi.symbol_circle_def.center_u1",
9857                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9858                 "Specifies the u position of the center", HFILL }
9859         },
9860         { &hf_cigi3_3_symbol_circle_definition_center_v[0],
9861             { "Center V 1 (scaled symbol surface units)", "cigi.symbol_circle_def.center_v1",
9862                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9863                 "Specifies the v position of the center", HFILL }
9864         },
9865         { &hf_cigi3_3_symbol_circle_definition_radius[0],
9866             { "Radius 1 (scaled symbol surface units)", "cigi.symbol_circle_def.radius1",
9867                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9868                 "Specifies the radius", HFILL }
9869         },
9870         { &hf_cigi3_3_symbol_circle_definition_inner_radius[0],
9871             { "Inner Radius 1 (scaled symbol surface units)", "cigi.symbol_circle_def.inner_radius1",
9872                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9873                 "Specifies the inner radius", HFILL }
9874         },
9875         { &hf_cigi3_3_symbol_circle_definition_start_angle[0],
9876             { "Start Angle 1 (degrees)", "cigi.symbol_circle_def.start_angle1",
9877                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9878                 "Specifies the start angle", HFILL }
9879         },
9880         { &hf_cigi3_3_symbol_circle_definition_end_angle[0],
9881             { "End Angle 1 (degrees)", "cigi.symbol_circle_def.end_angle1",
9882                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9883                 "Specifies the end angle", HFILL }
9884         },
9885         { &hf_cigi3_3_symbol_circle_definition_center_u[1],
9886             { "Center U 2 (scaled symbol surface units)", "cigi.symbol_circle_def.center_u2",
9887                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9888                 "Specifies the u position of the center", HFILL }
9889         },
9890         { &hf_cigi3_3_symbol_circle_definition_center_v[1],
9891             { "Center V 2 (scaled symbol surface units)", "cigi.symbol_circle_def.center_v2",
9892                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9893                 "Specifies the v position of the center", HFILL }
9894         },
9895         { &hf_cigi3_3_symbol_circle_definition_radius[1],
9896             { "Radius 2 (scaled symbol surface units)", "cigi.symbol_circle_def.radius2",
9897                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9898                 "Specifies the radius", HFILL }
9899         },
9900         { &hf_cigi3_3_symbol_circle_definition_inner_radius[1],
9901             { "Inner Radius 2 (scaled symbol surface units)", "cigi.symbol_circle_def.inner_radius2",
9902                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9903                 "Specifies the inner radius", HFILL }
9904         },
9905         { &hf_cigi3_3_symbol_circle_definition_start_angle[1],
9906             { "Start Angle 2 (degrees)", "cigi.symbol_circle_def.start_angle2",
9907                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9908                 "Specifies the start angle", HFILL }
9909         },
9910         { &hf_cigi3_3_symbol_circle_definition_end_angle[1],
9911             { "End Angle 2 (degrees)", "cigi.symbol_circle_def.end_angle2",
9912                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9913                 "Specifies the end angle", HFILL }
9914         },
9915         { &hf_cigi3_3_symbol_circle_definition_center_u[2],
9916             { "Center U 3 (scaled symbol surface units)", "cigi.symbol_circle_def.center_u3",
9917                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9918                 "Specifies the u position of the center", HFILL }
9919         },
9920         { &hf_cigi3_3_symbol_circle_definition_center_v[2],
9921             { "Center V 3 (scaled symbol surface units)", "cigi.symbol_circle_def.center_v3",
9922                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9923                 "Specifies the v position of the center", HFILL }
9924         },
9925         { &hf_cigi3_3_symbol_circle_definition_radius[2],
9926             { "Radius 3 (scaled symbol surface units)", "cigi.symbol_circle_def.radius3",
9927                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9928                 "Specifies the radius", HFILL }
9929         },
9930         { &hf_cigi3_3_symbol_circle_definition_inner_radius[2],
9931             { "Inner Radius 3 (scaled symbol surface units)", "cigi.symbol_circle_def.inner_radius3",
9932                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9933                 "Specifies the inner radius", HFILL }
9934         },
9935         { &hf_cigi3_3_symbol_circle_definition_start_angle[2],
9936             { "Start Angle 3 (degrees)", "cigi.symbol_circle_def.start_angle3",
9937                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9938                 "Specifies the start angle", HFILL }
9939         },
9940         { &hf_cigi3_3_symbol_circle_definition_end_angle[2],
9941             { "End Angle 3 (degrees)", "cigi.symbol_circle_def.end_angle3",
9942                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9943                 "Specifies the end angle", HFILL }
9944         },
9945         { &hf_cigi3_3_symbol_circle_definition_center_u[3],
9946             { "Center U 4 (scaled symbol surface units)", "cigi.symbol_circle_def.center_u4",
9947                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9948                 "Specifies the u position of the center", HFILL }
9949         },
9950         { &hf_cigi3_3_symbol_circle_definition_center_v[3],
9951             { "Center V 4 (scaled symbol surface units)", "cigi.symbol_circle_def.center_v4",
9952                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9953                 "Specifies the v position of the center", HFILL }
9954         },
9955         { &hf_cigi3_3_symbol_circle_definition_radius[3],
9956             { "Radius 4 (scaled symbol surface units)", "cigi.symbol_circle_def.radius4",
9957                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9958                 "Specifies the radius", HFILL }
9959         },
9960         { &hf_cigi3_3_symbol_circle_definition_inner_radius[3],
9961             { "Inner Radius 4 (scaled symbol surface units)", "cigi.symbol_circle_def.inner_radius4",
9962                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9963                 "Specifies the inner radius", HFILL }
9964         },
9965         { &hf_cigi3_3_symbol_circle_definition_start_angle[3],
9966             { "Start Angle 4 (degrees)", "cigi.symbol_circle_def.start_angle4",
9967                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9968                 "Specifies the start angle", HFILL }
9969         },
9970         { &hf_cigi3_3_symbol_circle_definition_end_angle[3],
9971             { "End Angle 4 (degrees)", "cigi.symbol_circle_def.end_angle4",
9972                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9973                 "Specifies the end angle", HFILL }
9974         },
9975         { &hf_cigi3_3_symbol_circle_definition_center_u[4],
9976             { "Center U 5 (scaled symbol surface units)", "cigi.symbol_circle_def.center_u5",
9977                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9978                 "Specifies the u position of the center", HFILL }
9979         },
9980         { &hf_cigi3_3_symbol_circle_definition_center_v[4],
9981             { "Center V 5 (scaled symbol surface units)", "cigi.symbol_circle_def.center_v5",
9982                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9983                 "Specifies the v position of the center", HFILL }
9984         },
9985         { &hf_cigi3_3_symbol_circle_definition_radius[4],
9986             { "Radius 5 (scaled symbol surface units)", "cigi.symbol_circle_def.radius5",
9987                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9988                 "Specifies the radius", HFILL }
9989         },
9990         { &hf_cigi3_3_symbol_circle_definition_inner_radius[4],
9991             { "Inner Radius 5 (scaled symbol surface units)", "cigi.symbol_circle_def.inner_radius5",
9992                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9993                 "Specifies the inner radius", HFILL }
9994         },
9995         { &hf_cigi3_3_symbol_circle_definition_start_angle[4],
9996             { "Start Angle 5 (degrees)", "cigi.symbol_circle_def.start_angle5",
9997                 FT_FLOAT, BASE_NONE, NULL, 0x0,
9998                 "Specifies the start angle", HFILL }
9999         },
10000         { &hf_cigi3_3_symbol_circle_definition_end_angle[4],
10001             { "End Angle 5 (degrees)", "cigi.symbol_circle_def.end_angle5",
10002                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10003                 "Specifies the end angle", HFILL }
10004         },
10005         { &hf_cigi3_3_symbol_circle_definition_center_u[5],
10006             { "Center U 6 (scaled symbol surface units)", "cigi.symbol_circle_def.center_u6",
10007                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10008                 "Specifies the u position of the center", HFILL }
10009         },
10010         { &hf_cigi3_3_symbol_circle_definition_center_v[5],
10011             { "Center V 6 (scaled symbol surface units)", "cigi.symbol_circle_def.center_v6",
10012                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10013                 "Specifies the v position of the center", HFILL }
10014         },
10015         { &hf_cigi3_3_symbol_circle_definition_radius[5],
10016             { "Radius 6 (scaled symbol surface units)", "cigi.symbol_circle_def.radius6",
10017                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10018                 "Specifies the radius", HFILL }
10019         },
10020         { &hf_cigi3_3_symbol_circle_definition_inner_radius[5],
10021             { "Inner Radius 6 (scaled symbol surface units)", "cigi.symbol_circle_def.inner_radius6",
10022                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10023                 "Specifies the inner radius", HFILL }
10024         },
10025         { &hf_cigi3_3_symbol_circle_definition_start_angle[5],
10026             { "Start Angle 6 (degrees)", "cigi.symbol_circle_def.start_angle6",
10027                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10028                 "Specifies the start angle", HFILL }
10029         },
10030         { &hf_cigi3_3_symbol_circle_definition_end_angle[5],
10031             { "End Angle 6 (degrees)", "cigi.symbol_circle_def.end_angle6",
10032                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10033                 "Specifies the end angle", HFILL }
10034         },
10035         { &hf_cigi3_3_symbol_circle_definition_center_u[6],
10036             { "Center U 7 (scaled symbol surface units)", "cigi.symbol_circle_def.center_u7",
10037                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10038                 "Specifies the u position of the center", HFILL }
10039         },
10040         { &hf_cigi3_3_symbol_circle_definition_center_v[6],
10041             { "Center V 7 (scaled symbol surface units)", "cigi.symbol_circle_def.center_v7",
10042                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10043                 "Specifies the v position of the center", HFILL }
10044         },
10045         { &hf_cigi3_3_symbol_circle_definition_radius[6],
10046             { "Radius 7 (scaled symbol surface units)", "cigi.symbol_circle_def.radius7",
10047                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10048                 "Specifies the radius", HFILL }
10049         },
10050         { &hf_cigi3_3_symbol_circle_definition_inner_radius[6],
10051             { "Inner Radius 7 (scaled symbol surface units)", "cigi.symbol_circle_def.inner_radius7",
10052                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10053                 "Specifies the inner radius", HFILL }
10054         },
10055         { &hf_cigi3_3_symbol_circle_definition_start_angle[6],
10056             { "Start Angle 7 (degrees)", "cigi.symbol_circle_def.start_angle7",
10057                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10058                 "Specifies the start angle", HFILL }
10059         },
10060         { &hf_cigi3_3_symbol_circle_definition_end_angle[6],
10061             { "End Angle 7 (degrees)", "cigi.symbol_circle_def.end_angle7",
10062                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10063                 "Specifies the end angle", HFILL }
10064         },
10065         { &hf_cigi3_3_symbol_circle_definition_center_u[7],
10066             { "Center U 8 (scaled symbol surface units)", "cigi.symbol_circle_def.center_u8",
10067                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10068                 "Specifies the u position of the center", HFILL }
10069         },
10070         { &hf_cigi3_3_symbol_circle_definition_center_v[7],
10071             { "Center V 8 (scaled symbol surface units)", "cigi.symbol_circle_def.center_v8",
10072                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10073                 "Specifies the v position of the center", HFILL }
10074         },
10075         { &hf_cigi3_3_symbol_circle_definition_radius[7],
10076             { "Radius 8 (scaled symbol surface units)", "cigi.symbol_circle_def.radius8",
10077                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10078                 "Specifies the radius", HFILL }
10079         },
10080         { &hf_cigi3_3_symbol_circle_definition_inner_radius[7],
10081             { "Inner Radius 8 (scaled symbol surface units)", "cigi.symbol_circle_def.inner_radius8",
10082                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10083                 "Specifies the inner radius", HFILL }
10084         },
10085         { &hf_cigi3_3_symbol_circle_definition_start_angle[7],
10086             { "Start Angle 8 (degrees)", "cigi.symbol_circle_def.start_angle8",
10087                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10088                 "Specifies the start angle", HFILL }
10089         },
10090         { &hf_cigi3_3_symbol_circle_definition_end_angle[7],
10091             { "End Angle 8 (degrees)", "cigi.symbol_circle_def.end_angle8",
10092                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10093                 "Specifies the end angle", HFILL }
10094         },
10095         { &hf_cigi3_3_symbol_circle_definition_center_u[8],
10096             { "Center U 9 (scaled symbol surface units)", "cigi.symbol_circle_def.center_u9",
10097                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10098                 "Specifies the u position of the center", HFILL }
10099         },
10100         { &hf_cigi3_3_symbol_circle_definition_center_v[8],
10101             { "Center V 9 (scaled symbol surface units)", "cigi.symbol_circle_def.center_v9",
10102                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10103                 "Specifies the v position of the center", HFILL }
10104         },
10105         { &hf_cigi3_3_symbol_circle_definition_radius[8],
10106             { "Radius 9 (scaled symbol surface units)", "cigi.symbol_circle_def.radius9",
10107                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10108                 "Specifies the radius", HFILL }
10109         },
10110         { &hf_cigi3_3_symbol_circle_definition_inner_radius[8],
10111             { "Inner Radius 9 (scaled symbol surface units)", "cigi.symbol_circle_def.inner_radius9",
10112                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10113                 "Specifies the inner radius", HFILL }
10114         },
10115         { &hf_cigi3_3_symbol_circle_definition_start_angle[8],
10116             { "Start Angle 9 (degrees)", "cigi.symbol_circle_def.start_angle9",
10117                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10118                 "Specifies the start angle", HFILL }
10119         },
10120         { &hf_cigi3_3_symbol_circle_definition_end_angle[8],
10121             { "End Angle 9 (degrees)", "cigi.symbol_circle_def.end_angle9",
10122                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10123                 "Specifies the end angle", HFILL }
10124         },
10125
10126         /* CIGI3_3 Symbol Line Definition */
10127         { &hf_cigi3_3_symbol_line_definition,
10128             { "Symbol Line Definition", "cigi.symbol_line_def",
10129                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10130                 "Symbol Line Definition Packet", HFILL }
10131         },
10132         { &hf_cigi3_3_symbol_line_definition_symbol_id,
10133             { "Symbol ID", "cigi.symbol_line_def.symbol_id",
10134                 FT_UINT16, BASE_DEC, NULL, 0x0,
10135                 "Specifies the identifier of the symbol that is being defined", HFILL }
10136         },
10137         { &hf_cigi3_3_symbol_line_definition_primitive_type,
10138             { "Drawing Style", "cigi.symbl_line_def.primitive_type",
10139                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_circle_definition_drawing_style_tfs), 0x01,
10140                 "Specifies the type of point or line primitive used", HFILL }
10141         },
10142         { &hf_cigi3_3_symbol_line_definition_stipple_pattern,
10143             { "Stipple Pattern", "cigi.symbol_line_def.stipple_pattern",
10144                 FT_UINT16, BASE_HEX, NULL, 0x0,
10145                 "Specifies the dash pattern used", HFILL }
10146         },
10147         { &hf_cigi3_3_symbol_line_definition_line_width,
10148             { "Line Width (scaled symbol surface units)", "cigi.symbol_line_def.line_width",
10149                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10150                 "Specifies the thickness of the line", HFILL }
10151         },
10152         { &hf_cigi3_3_symbol_line_definition_stipple_pattern_length,
10153             { "Stipple Pattern Length (scaled symbol surface units)", "cigi.symbol_line_def.stipple_pattern_length",
10154                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10155                 "Specifies the length of one complete repetition of the stipple pattern", HFILL }
10156         },
10157         { &hf_cigi3_3_symbol_line_definition_vertex_u[0],
10158             { "Vertex U 1 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u1",
10159                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10160                 "Specifies the u position of the vertex", HFILL }
10161         },
10162         { &hf_cigi3_3_symbol_line_definition_vertex_v[0],
10163             { "Vertex V 1 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v1",
10164                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10165                 "Specifies the v position of the vertex", HFILL }
10166         },
10167         { &hf_cigi3_3_symbol_line_definition_vertex_u[1],
10168             { "Vertex U 2 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u2",
10169                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10170                 "Specifies the u position of the vertex", HFILL }
10171         },
10172         { &hf_cigi3_3_symbol_line_definition_vertex_v[1],
10173             { "Vertex V 2 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v2",
10174                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10175                 "Specifies the v position of the vertex", HFILL }
10176         },
10177         { &hf_cigi3_3_symbol_line_definition_vertex_u[2],
10178             { "Vertex U 3 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u3",
10179                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10180                 "Specifies the u position of the vertex", HFILL }
10181         },
10182         { &hf_cigi3_3_symbol_line_definition_vertex_v[2],
10183             { "Vertex V 3 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v3",
10184                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10185                 "Specifies the v position of the vertex", HFILL }
10186         },
10187         { &hf_cigi3_3_symbol_line_definition_vertex_u[3],
10188             { "Vertex U 4 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u4",
10189                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10190                 "Specifies the u position of the vertex", HFILL }
10191         },
10192         { &hf_cigi3_3_symbol_line_definition_vertex_v[3],
10193             { "Vertex V 4 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v4",
10194                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10195                 "Specifies the v position of the vertex", HFILL }
10196         },
10197         { &hf_cigi3_3_symbol_line_definition_vertex_u[4],
10198             { "Vertex U 5 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u5",
10199                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10200                 "Specifies the u position of the vertex", HFILL }
10201         },
10202         { &hf_cigi3_3_symbol_line_definition_vertex_v[4],
10203             { "Vertex V 5 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v5",
10204                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10205                 "Specifies the v position of the vertex", HFILL }
10206         },
10207         { &hf_cigi3_3_symbol_line_definition_vertex_u[5],
10208             { "Vertex U 6 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u6",
10209                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10210                 "Specifies the u position of the vertex", HFILL }
10211         },
10212         { &hf_cigi3_3_symbol_line_definition_vertex_v[5],
10213             { "Vertex V 6 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v6",
10214                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10215                 "Specifies the v position of the vertex", HFILL }
10216         },
10217         { &hf_cigi3_3_symbol_line_definition_vertex_u[6],
10218             { "Vertex U 7 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u7",
10219                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10220                 "Specifies the u position of the vertex", HFILL }
10221         },
10222         { &hf_cigi3_3_symbol_line_definition_vertex_v[6],
10223             { "Vertex V 7 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v7",
10224                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10225                 "Specifies the v position of the vertex", HFILL }
10226         },
10227         { &hf_cigi3_3_symbol_line_definition_vertex_u[7],
10228             { "Vertex U 8 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u8",
10229                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10230                 "Specifies the u position of the vertex", HFILL }
10231         },
10232         { &hf_cigi3_3_symbol_line_definition_vertex_v[7],
10233             { "Vertex V 8 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v8",
10234                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10235                 "Specifies the v position of the vertex", HFILL }
10236         },
10237         { &hf_cigi3_3_symbol_line_definition_vertex_u[8],
10238             { "Vertex U 9 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u9",
10239                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10240                 "Specifies the u position of the vertex", HFILL }
10241         },
10242         { &hf_cigi3_3_symbol_line_definition_vertex_v[8],
10243             { "Vertex V 9 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v9",
10244                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10245                 "Specifies the v position of the vertex", HFILL }
10246         },
10247         { &hf_cigi3_3_symbol_line_definition_vertex_u[9],
10248             { "Vertex U 10 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u10",
10249                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10250                 "Specifies the u position of the vertex", HFILL }
10251         },
10252         { &hf_cigi3_3_symbol_line_definition_vertex_v[9],
10253             { "Vertex V 10 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v10",
10254                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10255                 "Specifies the v position of the vertex", HFILL }
10256         },
10257         { &hf_cigi3_3_symbol_line_definition_vertex_u[10],
10258             { "Vertex U 11 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u11",
10259                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10260                 "Specifies the u position of the vertex", HFILL }
10261         },
10262         { &hf_cigi3_3_symbol_line_definition_vertex_v[10],
10263             { "Vertex V 11 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v11",
10264                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10265                 "Specifies the v position of the vertex", HFILL }
10266         },
10267         { &hf_cigi3_3_symbol_line_definition_vertex_u[11],
10268             { "Vertex U 12 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u12",
10269                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10270                 "Specifies the u position of the vertex", HFILL }
10271         },
10272         { &hf_cigi3_3_symbol_line_definition_vertex_v[11],
10273             { "Vertex V 12 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v12",
10274                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10275                 "Specifies the v position of the vertex", HFILL }
10276         },
10277         { &hf_cigi3_3_symbol_line_definition_vertex_u[12],
10278             { "Vertex U 13 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u13",
10279                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10280                 "Specifies the u position of the vertex", HFILL }
10281         },
10282         { &hf_cigi3_3_symbol_line_definition_vertex_v[12],
10283             { "Vertex V 13 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v13",
10284                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10285                 "Specifies the v position of the vertex", HFILL }
10286         },
10287         { &hf_cigi3_3_symbol_line_definition_vertex_u[13],
10288             { "Vertex U 14 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u14",
10289                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10290                 "Specifies the u position of the vertex", HFILL }
10291         },
10292         { &hf_cigi3_3_symbol_line_definition_vertex_v[13],
10293             { "Vertex V 14 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v14",
10294                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10295                 "Specifies the v position of the vertex", HFILL }
10296         },
10297         { &hf_cigi3_3_symbol_line_definition_vertex_u[14],
10298             { "Vertex U 15 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u15",
10299                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10300                 "Specifies the u position of the vertex", HFILL }
10301         },
10302         { &hf_cigi3_3_symbol_line_definition_vertex_v[14],
10303             { "Vertex V 15 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v15",
10304                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10305                 "Specifies the v position of the vertex", HFILL }
10306         },
10307         { &hf_cigi3_3_symbol_line_definition_vertex_u[15],
10308             { "Vertex U 16 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u16",
10309                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10310                 "Specifies the u position of the vertex", HFILL }
10311         },
10312         { &hf_cigi3_3_symbol_line_definition_vertex_v[15],
10313             { "Vertex V 16 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v16",
10314                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10315                 "Specifies the v position of the vertex", HFILL }
10316         },
10317         { &hf_cigi3_3_symbol_line_definition_vertex_u[16],
10318             { "Vertex U 17 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u17",
10319                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10320                 "Specifies the u position of the vertex", HFILL }
10321         },
10322         { &hf_cigi3_3_symbol_line_definition_vertex_v[16],
10323             { "Vertex V 17 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v17",
10324                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10325                 "Specifies the v position of the vertex", HFILL }
10326         },
10327         { &hf_cigi3_3_symbol_line_definition_vertex_u[17],
10328             { "Vertex U 18 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u18",
10329                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10330                 "Specifies the u position of the vertex", HFILL }
10331         },
10332         { &hf_cigi3_3_symbol_line_definition_vertex_v[17],
10333             { "Vertex V 18 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v18",
10334                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10335                 "Specifies the v position of the vertex", HFILL }
10336         },
10337         { &hf_cigi3_3_symbol_line_definition_vertex_u[18],
10338             { "Vertex U 19 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u19",
10339                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10340                 "Specifies the u position of the vertex", HFILL }
10341         },
10342         { &hf_cigi3_3_symbol_line_definition_vertex_v[18],
10343             { "Vertex V 19 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v19",
10344                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10345                 "Specifies the v position of the vertex", HFILL }
10346         },
10347         { &hf_cigi3_3_symbol_line_definition_vertex_u[19],
10348             { "Vertex U 20 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u20",
10349                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10350                 "Specifies the u position of the vertex", HFILL }
10351         },
10352         { &hf_cigi3_3_symbol_line_definition_vertex_v[19],
10353             { "Vertex V 20 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v20",
10354                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10355                 "Specifies the v position of the vertex", HFILL }
10356         },
10357         { &hf_cigi3_3_symbol_line_definition_vertex_u[20],
10358             { "Vertex U 21 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u21",
10359                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10360                 "Specifies the u position of the vertex", HFILL }
10361         },
10362         { &hf_cigi3_3_symbol_line_definition_vertex_v[20],
10363             { "Vertex V 21 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v21",
10364                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10365                 "Specifies the v position of the vertex", HFILL }
10366         },
10367         { &hf_cigi3_3_symbol_line_definition_vertex_u[21],
10368             { "Vertex U 22 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u22",
10369                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10370                 "Specifies the u position of the vertex", HFILL }
10371         },
10372         { &hf_cigi3_3_symbol_line_definition_vertex_v[21],
10373             { "Vertex V 22 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v22",
10374                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10375                 "Specifies the v position of the vertex", HFILL }
10376         },
10377         { &hf_cigi3_3_symbol_line_definition_vertex_u[22],
10378             { "Vertex U 23 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u23",
10379                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10380                 "Specifies the u position of the vertex", HFILL }
10381         },
10382         { &hf_cigi3_3_symbol_line_definition_vertex_v[22],
10383             { "Vertex V 23 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v23",
10384                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10385                 "Specifies the v position of the vertex", HFILL }
10386         },
10387         { &hf_cigi3_3_symbol_line_definition_vertex_u[23],
10388             { "Vertex U 24 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u24",
10389                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10390                 "Specifies the u position of the vertex", HFILL }
10391         },
10392         { &hf_cigi3_3_symbol_line_definition_vertex_v[23],
10393             { "Vertex V 24 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v24",
10394                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10395                 "Specifies the v position of the vertex", HFILL }
10396         },
10397         { &hf_cigi3_3_symbol_line_definition_vertex_u[24],
10398             { "Vertex U 25 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u25",
10399                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10400                 "Specifies the u position of the vertex", HFILL }
10401         },
10402         { &hf_cigi3_3_symbol_line_definition_vertex_v[24],
10403             { "Vertex V 25 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v25",
10404                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10405                 "Specifies the v position of the vertex", HFILL }
10406         },
10407         { &hf_cigi3_3_symbol_line_definition_vertex_u[25],
10408             { "Vertex U 26 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u26",
10409                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10410                 "Specifies the u position of the vertex", HFILL }
10411         },
10412         { &hf_cigi3_3_symbol_line_definition_vertex_v[25],
10413             { "Vertex V 26 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v26",
10414                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10415                 "Specifies the v position of the vertex", HFILL }
10416         },
10417         { &hf_cigi3_3_symbol_line_definition_vertex_u[26],
10418             { "Vertex U 27 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u27",
10419                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10420                 "Specifies the u position of the vertex", HFILL }
10421         },
10422         { &hf_cigi3_3_symbol_line_definition_vertex_v[26],
10423             { "Vertex V 27 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v27",
10424                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10425                 "Specifies the v position of the vertex", HFILL }
10426         },
10427         { &hf_cigi3_3_symbol_line_definition_vertex_u[27],
10428             { "Vertex U 28 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u28",
10429                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10430                 "Specifies the u position of the vertex", HFILL }
10431         },
10432         { &hf_cigi3_3_symbol_line_definition_vertex_v[27],
10433             { "Vertex V 28 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v28",
10434                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10435                 "Specifies the v position of the vertex", HFILL }
10436         },
10437         { &hf_cigi3_3_symbol_line_definition_vertex_u[28],
10438             { "Vertex U 29 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_u29",
10439                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10440                 "Specifies the u position of the vertex", HFILL }
10441         },
10442         { &hf_cigi3_3_symbol_line_definition_vertex_v[28],
10443             { "Vertex V 29 (scaled symbol surface units)", "cigi.symbol_line_def.vertex_v29",
10444                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10445                 "Specifies the v position of the vertex", HFILL }
10446         },
10447
10448         /* CIGI3_3 Symbol Clone */
10449         { &hf_cigi3_3_symbol_clone,
10450             { "Symbol Surface Definition", "cigi.symbol_clone",
10451                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10452                 "Symbol Clone Packet", HFILL }
10453         },
10454         { &hf_cigi3_3_symbol_clone_symbol_id,
10455             { "Symbol ID", "cigi.symbol_clone.symbol_id",
10456                 FT_UINT16, BASE_DEC, NULL, 0x0,
10457                 "Specifies the identifier of the symbol that is being defined", HFILL }
10458         },
10459         { &hf_cigi3_3_symbol_clone_source_type,
10460             { "Source Type", "cigi.symbol_clone.source_type",
10461                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_clone_source_type_tfs), 0x04,
10462                 "Identifies the source as an existing symbol or symbol template", HFILL }
10463         },
10464         { &hf_cigi3_3_symbol_clone_source_id,
10465             { "Source ID", "cigi.symbol_clone.source_id",
10466                 FT_UINT16, BASE_DEC, NULL, 0x0,
10467                 "Identifies the symbol to copy or template to instantiate", HFILL }
10468         },
10469
10470         /* CIGI3_3 Symbol Control */
10471         { &hf_cigi3_3_symbol_control,
10472             { "Symbol Control", "cigi.symbol_control",
10473                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10474                 "Symbol Control Packet", HFILL }
10475         },
10476         { &hf_cigi3_3_symbol_control_symbol_id,
10477             { "Symbol ID", "cigi.symbol_control.symbol_id",
10478                 FT_UINT16, BASE_DEC, NULL, 0x0,
10479                 "Specifies the symbol to which this packet is applied", HFILL }
10480         },
10481         { &hf_cigi3_3_symbol_control_symbol_state,
10482             { "Symbol State", "cigi.symbol_control.symbol_state",
10483                 FT_UINT8, BASE_DEC, VALS(cigi3_3_symbol_control_symbol_state_vals), 0x03,
10484                 "Specifies whether the symbol should be hidden, visible, or destroyed", HFILL }
10485         },
10486         { &hf_cigi3_3_symbol_control_attach_state,
10487             { "Attach State", "cigi.symbol_control.attach_state",
10488                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_control_attach_state_tfs), 0x04,
10489                 "Specifies whether this symbol should be attached to another", HFILL }
10490         },
10491         { &hf_cigi3_3_symbol_control_flash_control,
10492             { "Flash Control", "cigi.symbol_control.flash_control",
10493                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_control_flash_control_tfs), 0x08,
10494                 "Specifies whether the flash cycle is continued or restarted", HFILL }
10495         },
10496         { &hf_cigi3_3_symbol_control_inherit_color,
10497             { "Inherit Color", "cigi.symbol_control.inherit_color",
10498                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_control_inherit_color_tfs), 0x10,
10499                 "Specifies whether the symbol inherits color from a parent symbol", HFILL }
10500         },
10501         { &hf_cigi3_3_symbol_control_parent_symbol_ident,
10502             { "Parent Symbol ID", "cigi.symbol_control.parent_symbol_id",
10503                 FT_UINT16, BASE_DEC, NULL, 0x0,
10504                 "Specifies the parent for the symbol", HFILL }
10505         },
10506         { &hf_cigi3_3_symbol_control_surface_ident,
10507             { "Surface ID", "cigi.symbol_control.surface_id",
10508                 FT_UINT16, BASE_DEC, NULL, 0x0,
10509                 "Specifies the symbol surface for the symbol", HFILL }
10510         },
10511         { &hf_cigi3_3_symbol_control_layer,
10512             { "Layer", "cigi.symbol_control.layer",
10513                 FT_UINT8, BASE_DEC, NULL, 0x0,
10514                 "Specifies the layer for the symbol", HFILL }
10515         },
10516         { &hf_cigi3_3_symbol_control_flash_duty_cycle,
10517             { "Flash Duty Cycle (%)", "cigi.symbol_control.flash_duty_cycle",
10518                 FT_UINT8, BASE_DEC, NULL, 0x0,
10519                 "Specifies the duty cycle for a flashing symbol", HFILL }
10520         },
10521         { &hf_cigi3_3_symbol_control_flash_period,
10522             { "Flash Period (seconds)", "cigi.symbol_control.flash_period",
10523                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10524                 "Specifies the duration of a single flash cycle", HFILL }
10525         },
10526         { &hf_cigi3_3_symbol_control_position_u,
10527             { "Position U (scaled symbol surface units)", "cigi.symbol_control.position_u",
10528                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10529                 "Specifies the u position", HFILL }
10530         },
10531         { &hf_cigi3_3_symbol_control_position_v,
10532             { "Position V (scaled symbol surface units)", "cigi.symbol_control.position_v",
10533                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10534                 "Specifies the v position", HFILL }
10535         },
10536         { &hf_cigi3_3_symbol_control_rotation,
10537             { "Rotation (degrees)", "cigi.symbol_control.rotation",
10538                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10539                 "Specifies the rotation", HFILL }
10540         },
10541         { &hf_cigi3_3_symbol_control_red,
10542             { "Red", "cigi.symbol_control.red",
10543                 FT_UINT8, BASE_DEC, NULL, 0x0,
10544                 "Specifies the red color component", HFILL }
10545         },
10546         { &hf_cigi3_3_symbol_control_green,
10547             { "Green", "cigi.symbol_control.green",
10548                 FT_UINT8, BASE_DEC, NULL, 0x0,
10549                 "Specifies the green color component", HFILL }
10550         },
10551         { &hf_cigi3_3_symbol_control_blue,
10552             { "Blue", "cigi.symbol_control.blue",
10553                 FT_UINT8, BASE_DEC, NULL, 0x0,
10554                 "Specifies the blue color component", HFILL }
10555         },
10556         { &hf_cigi3_3_symbol_control_alpha,
10557             { "Alpha", "cigi.symbol_control.alpha",
10558                 FT_UINT8, BASE_DEC, NULL, 0x0,
10559                 "Specifies the alpha color component", HFILL }
10560         },
10561         { &hf_cigi3_3_symbol_control_scale_u,
10562             { "Scale U", "cigi.symbol_control.scale_u",
10563                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10564                 "Specifies the u scaling factor", HFILL }
10565         },
10566         { &hf_cigi3_3_symbol_control_scale_v,
10567             { "Scale V", "cigi.symbol_control.scale_v",
10568                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10569                 "Specifies the v scaling factor", HFILL }
10570         },
10571
10572         /* CIGI3_3 Short Symbol Control */
10573         { &hf_cigi3_3_short_symbol_control,
10574             { "Short Symbol Control", "cigi.short_symbol_control",
10575                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10576                 "Short Symbol Control Packet", HFILL }
10577         },
10578         { &hf_cigi3_3_short_symbol_control_symbol_id,
10579             { "Symbol ID", "cigi.short_symbol_control.symbol_id",
10580                 FT_UINT16, BASE_DEC, NULL, 0x0,
10581                 "Specifies the symbol to which this packet is applied", HFILL }
10582         },
10583         { &hf_cigi3_3_short_symbol_control_symbol_state,
10584             { "Symbol State", "cigi.short_symbol_control.symbol_state",
10585                 FT_UINT8, BASE_DEC, VALS(cigi3_3_symbol_control_symbol_state_vals), 0x03,
10586                 "Specifies whether the symbol should be hidden, visible, or destroyed", HFILL }
10587         },
10588         { &hf_cigi3_3_short_symbol_control_attach_state,
10589             { "Atach State", "cigi.short_symbol_control.attach_state",
10590                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_control_attach_state_tfs), 0x04,
10591                 "Specifies whether this symbol should be attached to another", HFILL }
10592         },
10593         { &hf_cigi3_3_short_symbol_control_flash_control,
10594             { "Flash Control", "cigi.short_symbol_control.flash_control",
10595                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_control_flash_control_tfs), 0x08,
10596                 "Specifies whether the flash cycle is continued or restarted", HFILL }
10597         },
10598         { &hf_cigi3_3_short_symbol_control_inherit_color,
10599             { "Inherit Color", "cigi.short_symbol_control.inherit_color",
10600                 FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_control_inherit_color_tfs), 0x10,
10601                 "Specifies whether the symbol inherits color from a parent symbol", HFILL }
10602         },
10603         { &hf_cigi3_3_short_symbol_control_attribute_select1,
10604             { "Attribute Select 1", "cigi.short_symbol_control.attribute_select1",
10605                 FT_UINT8, BASE_DEC, VALS(cigi3_3_short_symbol_control_attribute_select_vals), 0x0,
10606                 "Identifies the attribute whose value is specified in Attribute Value 1", HFILL }
10607         },
10608         { &hf_cigi3_3_short_symbol_control_attribute_select2,
10609             { "Attribute Select 2", "cigi.short_symbol_control.attribute_select2",
10610                 FT_UINT8, BASE_DEC, VALS(cigi3_3_short_symbol_control_attribute_select_vals), 0x0,
10611                 "Identifies the attribute whose value is specified in Attribute Value 2", HFILL }
10612         },
10613         { &hf_cigi3_3_short_symbol_control_attribute_value1,
10614             { "Value 1", "cigi.short_symbol_control.value1",
10615                 FT_UINT32, BASE_DEC, NULL, 0x0,
10616                 "Specifies the value for attribute 1", HFILL }
10617         },
10618         { &hf_cigi3_3_short_symbol_control_attribute_value2,
10619             { "Value 2", "cigi.short_symbol_control.value2",
10620                 FT_UINT32, BASE_DEC, NULL, 0x0,
10621                 "Specifies the value for attribute 2", HFILL }
10622         },
10623         { &hf_cigi3_3_short_symbol_control_attribute_value1f,
10624             { "Value 1", "cigi.short_symbol_control.value1",
10625                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10626                 "Specifies the value for attribute 1", HFILL }
10627         },
10628         { &hf_cigi3_3_short_symbol_control_attribute_value2f,
10629             { "Value 2", "cigi.short_symbol_control.value2",
10630                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10631                 "Specifies the value for attribute 2", HFILL }
10632         },
10633         { &hf_cigi3_3_short_symbol_control_red1,
10634             { "Red 1", "cigi.short_symbol_control.red1",
10635                 FT_UINT8, BASE_DEC, NULL, 0x0,
10636                 "Specifies the red color component", HFILL }
10637         },
10638         { &hf_cigi3_3_short_symbol_control_green1,
10639             { "Green 1", "cigi.short_symbol_control.green1",
10640                 FT_UINT8, BASE_DEC, NULL, 0x0,
10641                 "Specifies the green color component", HFILL }
10642         },
10643         { &hf_cigi3_3_short_symbol_control_blue1,
10644             { "Blue 1", "cigi.short_symbol_control.blue1",
10645                 FT_UINT8, BASE_DEC, NULL, 0x0,
10646                 "Specifies the blue color component", HFILL }
10647         },
10648         { &hf_cigi3_3_short_symbol_control_alpha1,
10649             { "Alpha 1", "cigi.short_symbol_control.alpha1",
10650                 FT_UINT8, BASE_DEC, NULL, 0x0,
10651                 "Specifies the alpha color component", HFILL }
10652         },
10653         { &hf_cigi3_3_short_symbol_control_red2,
10654             { "Red 2", "cigi.short_symbol_control.red2",
10655                 FT_UINT8, BASE_DEC, NULL, 0x0,
10656                 "Specifies the red color component", HFILL }
10657         },
10658         { &hf_cigi3_3_short_symbol_control_green2,
10659             { "Green 2", "cigi.short_symbol_control.green2",
10660                 FT_UINT8, BASE_DEC, NULL, 0x0,
10661                 "Specifies the green color component", HFILL }
10662         },
10663         { &hf_cigi3_3_short_symbol_control_blue2,
10664             { "Blue 2", "cigi.short_symbol_control.blue2",
10665                 FT_UINT8, BASE_DEC, NULL, 0x0,
10666                 "Specifies the blue color component", HFILL }
10667         },
10668         { &hf_cigi3_3_short_symbol_control_alpha2,
10669             { "Alpha 2", "cigi.short_symbol_control.alpha2",
10670                 FT_UINT8, BASE_DEC, NULL, 0x0,
10671                 "Specifies the alpha color component", HFILL }
10672         },
10673
10674         /* CIGI2 Start of Frame */
10675         { &hf_cigi2_start_of_frame,
10676             { "Start of Frame", "cigi.sof",
10677                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10678                 "Start of Frame Packet", HFILL }
10679         },
10680         { &hf_cigi2_start_of_frame_db_number,
10681             { "Database Number", "cigi.sof.db_number",
10682                 FT_INT8, BASE_DEC, NULL, 0x0,
10683                 "Indicates load status of the requested database", HFILL }
10684         },
10685         { &hf_cigi2_start_of_frame_ig_status_code,
10686             { "IG Status Code", "cigi.sof.ig_status_code",
10687                 FT_UINT8, BASE_DEC, NULL, 0x0,
10688                 "Indicates the operational status of the IG", HFILL }
10689         },
10690         { &hf_cigi2_start_of_frame_ig_mode,
10691             { "IG Mode", "cigi.sof.ig_mode",
10692                 FT_UINT8, BASE_DEC, VALS(cigi2_start_of_frame_ig_mode_vals), 0xc0,
10693                 "Identifies to the host the current operating mode of the IG", HFILL }
10694         },
10695         { &hf_cigi2_start_of_frame_frame_ctr,
10696             { "IG to Host Frame Counter", "cigi.sof.frame_ctr",
10697                 FT_UINT32, BASE_DEC, NULL, 0x0,
10698                 "Contains a number representing a particular frame", HFILL }
10699         },
10700         { &hf_cigi2_start_of_frame_time_tag,
10701             { "Timing Value (microseconds)", "cigi.sof.time_tag",
10702                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10703                 "Contains a timing value that is used to time-tag the ethernet message during asynchronous operation", HFILL }
10704         },
10705
10706         /* CIGI3 Start of Frame */
10707         { &hf_cigi3_start_of_frame,
10708             { "Start of Frame", "cigi.sof",
10709                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10710                 "Start of Frame Packet", HFILL }
10711         },
10712         { &hf_cigi3_start_of_frame_db_number,
10713             { "Database Number", "cigi.sof.db_number",
10714                 FT_INT8, BASE_DEC, NULL, 0x0,
10715                 "Indicates to the Host which database is currently in use and if that database is being loaded into primary memory", HFILL }
10716         },
10717         { &hf_cigi3_start_of_frame_ig_status,
10718             { "IG Status Code", "cigi.sof.ig_status",
10719                 FT_UINT8, BASE_DEC, NULL, 0x0,
10720                 "Indicates the error status of the IG", HFILL }
10721         },
10722         { &hf_cigi3_start_of_frame_ig_mode,
10723             { "IG Mode", "cigi.sof.ig_mode",
10724                 FT_UINT8, BASE_DEC, VALS(cigi3_start_of_frame_ig_mode_vals), 0x03,
10725                 "Indicates the current IG mode", HFILL }
10726         },
10727         { &hf_cigi3_start_of_frame_timestamp_valid,
10728             { "Timestamp Valid", "cigi.sof.timestamp_valid",
10729                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x04,
10730                 "Indicates whether the Timestamp parameter contains a valid value", HFILL }
10731         },
10732         { &hf_cigi3_start_of_frame_earth_reference_model,
10733             { "Earth Reference Model", "cigi.sof.earth_reference_model",
10734                 FT_BOOLEAN, 8, TFS(&cigi3_start_of_frame_earth_reference_model_tfs), 0x08,
10735                 "Indicates whether the IG is using a custom Earth Reference Model or the default WGS 84 reference ellipsoid for coordinate conversion calculations", HFILL }
10736         },
10737         { &hf_cigi3_start_of_frame_frame_ctr,
10738             { "Frame Counter", "cigi.sof.frame_ctr",
10739                 FT_UINT32, BASE_DEC, NULL, 0x0,
10740                 "Contains a number that identifies the frame", HFILL }
10741         },
10742         { &hf_cigi3_start_of_frame_timestamp,
10743             { "Timestamp (microseconds)", "cigi.sof.timestamp",
10744                 FT_UINT32, BASE_DEC, NULL, 0x0,
10745                 "Indicates the number of 10 microsecond \"ticks\" since some initial reference time", HFILL }
10746         },
10747
10748         /* CIGI3_2 Start of Frame */
10749         { &hf_cigi3_2_start_of_frame,
10750             { "Start of Frame", "cigi.sof",
10751                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10752                 "Start of Frame Packet", HFILL }
10753         },
10754         { &hf_cigi3_2_start_of_frame_db_number,
10755             { "Database Number", "cigi.sof.db_number",
10756                 FT_INT8, BASE_DEC, NULL, 0x0,
10757                 "Indicates to the Host which database is currently in use and if that database is being loaded into primary memory", HFILL }
10758         },
10759         { &hf_cigi3_2_start_of_frame_ig_status,
10760             { "IG Status Code", "cigi.sof.ig_status",
10761                 FT_UINT8, BASE_DEC, NULL, 0x0,
10762                 "Indicates the error status of the IG", HFILL }
10763         },
10764         { &hf_cigi3_2_start_of_frame_ig_mode,
10765             { "IG Mode", "cigi.sof.ig_mode",
10766                 FT_UINT8, BASE_DEC, VALS(cigi3_2_start_of_frame_ig_mode_vals), 0x03,
10767                 "Indicates the current IG mode", HFILL }
10768         },
10769         { &hf_cigi3_2_start_of_frame_timestamp_valid,
10770             { "Timestamp Valid", "cigi.sof.timestamp_valid",
10771                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x04,
10772                 "Indicates whether the Timestamp parameter contains a valid value", HFILL }
10773         },
10774         { &hf_cigi3_2_start_of_frame_earth_reference_model,
10775             { "Earth Reference Model", "cigi.sof.earth_reference_model",
10776                 FT_BOOLEAN, 8, TFS(&cigi3_2_start_of_frame_earth_reference_model_tfs), 0x08,
10777                 "Indicates whether the IG is using a custom Earth Reference Model or the default WGS 84 reference ellipsoid for coordinate conversion calculations", HFILL }
10778         },
10779         { &hf_cigi3_2_start_of_frame_ig_frame_number,
10780             { "IG Frame Number", "cigi.sof.ig_frame_number",
10781                 FT_UINT32, BASE_DEC, NULL, 0x0,
10782                 "Uniquely identifies the IG data frame", HFILL }
10783         },
10784         { &hf_cigi3_2_start_of_frame_timestamp,
10785             { "Timestamp (microseconds)", "cigi.sof.timestamp",
10786                 FT_UINT32, BASE_DEC, NULL, 0x0,
10787                 "Indicates the number of 10 microsecond \"ticks\" since some initial reference time", HFILL }
10788         },
10789         { &hf_cigi3_2_start_of_frame_last_host_frame_number,
10790             { "Last Host Frane Number", "cigi.sof.last_host_frame_number",
10791                 FT_UINT32, BASE_DEC, NULL, 0x0,
10792                 "Contains the value of the Host Frame parameter in the last IG Control packet received from the Host.", HFILL }
10793         },
10794
10795         /* CIGI2 Height Above Terrain Response */
10796         { &hf_cigi2_height_above_terrain_response,
10797             { "Height Above Terrain Response", "cigi.hat_response",
10798                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10799                 "Height Above Terrain Response Packet", HFILL }
10800         },
10801         { &hf_cigi2_height_above_terrain_response_hat_id,
10802             { "HAT ID", "cigi.hat_response.hat_id",
10803                 FT_UINT16, BASE_DEC, NULL, 0x0,
10804                 "Identifies the HAT response", HFILL }
10805         },
10806         { &hf_cigi2_height_above_terrain_response_valid,
10807             { "Valid", "cigi.hat_response.valid",
10808                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x80,
10809                 "Indicates whether the response is valid or invalid", HFILL }
10810         },
10811         { &hf_cigi2_height_above_terrain_response_material_type,
10812             { "Material Type", "cigi.hat_response.material_type",
10813                 FT_INT32, BASE_DEC, NULL, 0x0,
10814                 "Specifies the material type of the object intersected by the HAT test vector", HFILL }
10815         },
10816         { &hf_cigi2_height_above_terrain_response_alt,
10817             { "Altitude (m)", "cigi.hat_response.alt",
10818                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
10819                 "Represents the altitude above or below the terrain for the position requested", HFILL }
10820         },
10821
10822         /* CIGI3 HAT/HOT Response */
10823         { &hf_cigi3_hat_hot_response,
10824             { "HAT/HOT Response", "cigi.hat_hot_response",
10825                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10826                 "HAT/HOT Response Packet", HFILL }
10827         },
10828         { &hf_cigi3_hat_hot_response_hat_hot_id,
10829             { "HAT/HOT ID", "cigi.hat_hot_response.hat_hot_id",
10830                 FT_UINT16, BASE_DEC, NULL, 0x0,
10831                 "Identifies the HAT or HOT response", HFILL }
10832         },
10833         { &hf_cigi3_hat_hot_response_valid,
10834             { "Valid", "cigi.hat_hot_response.valid",
10835                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x01,
10836                 "Indicates whether the Height parameter contains a valid number", HFILL }
10837         },
10838         { &hf_cigi3_hat_hot_response_type,
10839             { "Response Type", "cigi.hat_hot_response.type",
10840                 FT_BOOLEAN, 8, TFS(&cigi3_hat_hot_response_type_tfs), 0x02,
10841                 "Indicates whether the Height parameter represent Height Above Terrain or Height Of Terrain", HFILL }
10842         },
10843         { &hf_cigi3_hat_hot_response_height,
10844             { "Height", "cigi.hat_hot_response.height",
10845                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
10846                 "Contains the requested height", HFILL }
10847         },
10848
10849         /* CIGI3_2 HAT/HOT Response */
10850         { &hf_cigi3_2_hat_hot_response,
10851             { "HAT/HOT Response", "cigi.hat_hot_response",
10852                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10853                 "HAT/HOT Response Packet", HFILL }
10854         },
10855         { &hf_cigi3_2_hat_hot_response_hat_hot_id,
10856             { "HAT/HOT ID", "cigi.hat_hot_response.hat_hot_id",
10857                 FT_UINT16, BASE_DEC, NULL, 0x0,
10858                 "Identifies the HAT or HOT response", HFILL }
10859         },
10860         { &hf_cigi3_2_hat_hot_response_valid,
10861             { "Valid", "cigi.hat_hot_response.valid",
10862                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x01,
10863                 "Indicates whether the Height parameter contains a valid number", HFILL }
10864         },
10865         { &hf_cigi3_2_hat_hot_response_type,
10866             { "Response Type", "cigi.hat_hot_response.type",
10867                 FT_BOOLEAN, 8, TFS(&cigi3_2_hat_hot_response_type_tfs), 0x02,
10868                 "Indicates whether the Height parameter represent Height Above Terrain or Height Of Terrain", HFILL }
10869         },
10870         { &hf_cigi3_2_hat_hot_response_host_frame_number_lsn,
10871             { "Host Frame Number LSN", "cigi.hat_hot_response.host_frame_number_lsn",
10872                 FT_UINT8, BASE_DEC, NULL, 0xf0,
10873                 "Least significant nibble of the host frame number parameter of the last IG Control packet received before the HAT or HOT is calculated", HFILL }
10874         },
10875         { &hf_cigi3_2_hat_hot_response_height,
10876             { "Height", "cigi.hat_hot_response.height",
10877                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
10878                 "Contains the requested height", HFILL }
10879         },
10880
10881         /* CIGI3 HAT/HOT Extended Response */
10882         { &hf_cigi3_hat_hot_extended_response,
10883             { "HAT/HOT Extended Response", "cigi.hat_hot_ext_response",
10884                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10885                 "HAT/HOT Extended Response Packet", HFILL }
10886         },
10887         { &hf_cigi3_hat_hot_extended_response_hat_hot_id,
10888             { "HAT/HOT ID", "cigi.hat_hot_ext_response.hat_hot_id",
10889                 FT_UINT16, BASE_DEC, NULL, 0x0,
10890                 "Identifies the HAT/HOT response", HFILL }
10891         },
10892         { &hf_cigi3_hat_hot_extended_response_valid,
10893             { "Valid", "cigi.hat_hot_ext_response.valid",
10894                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x01,
10895                 "Indicates whether the remaining parameters in this packet contain valid numbers", HFILL }
10896         },
10897         { &hf_cigi3_hat_hot_extended_response_hat,
10898             { "HAT", "cigi.hat_hot_ext_response.hat",
10899                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
10900                 "Indicates the height of the test point above the terrain", HFILL }
10901         },
10902         { &hf_cigi3_hat_hot_extended_response_hot,
10903             { "HOT", "cigi.hat_hot_ext_response.hot",
10904                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
10905                 "Indicates the height of terrain above or below the test point", HFILL }
10906         },
10907         { &hf_cigi3_hat_hot_extended_response_material_code,
10908             { "Material Code", "cigi.hat_hot_ext_response.material_code",
10909                 FT_UINT32, BASE_DEC, NULL, 0x0,
10910                 "Indicates the material code of the terrain surface at the point of intersection with the HAT/HOT test vector", HFILL }
10911         },
10912         { &hf_cigi3_hat_hot_extended_response_normal_vector_azimuth,
10913             { "Normal Vector Azimuth (degrees)", "cigi.hat_hot_ext_response.normal_vector_azimuth",
10914                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10915                 "Indicates the azimuth of the normal unit vector of the surface intersected by the HAT/HOT test vector", HFILL }
10916         },
10917         { &hf_cigi3_hat_hot_extended_response_normal_vector_elevation,
10918             { "Normal Vector Elevation (degrees)", "cigi.hat_hot_ext_response.normal_vector_elevation",
10919                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10920                 "Indicates the elevation of the normal unit vector of the surface intersected by the HAT/HOT test vector", HFILL }
10921         },
10922
10923         /* CIGI3_2 HAT/HOT Extended Response */
10924         { &hf_cigi3_2_hat_hot_extended_response,
10925             { "HAT/HOT Extended Response", "cigi.hat_hot_ext_response",
10926                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10927                 "HAT/HOT Extended Response Packet", HFILL }
10928         },
10929         { &hf_cigi3_2_hat_hot_extended_response_hat_hot_id,
10930             { "HAT/HOT ID", "cigi.hat_hot_ext_response.hat_hot_id",
10931                 FT_UINT16, BASE_DEC, NULL, 0x0,
10932                 "Identifies the HAT/HOT response", HFILL }
10933         },
10934         { &hf_cigi3_2_hat_hot_extended_response_valid,
10935             { "Valid", "cigi.hat_hot_ext_response.valid",
10936                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x01,
10937                 "Indicates whether the remaining parameters in this packet contain valid numbers", HFILL }
10938         },
10939         { &hf_cigi3_2_hat_hot_extended_response_host_frame_number_lsn,
10940             { "Host Frame Number LSN", "cigi.hat_hot_ext_response.host_frame_number_lsn",
10941                 FT_UINT8, BASE_DEC, NULL, 0xf0,
10942                 "Least significant nibble of the host frame number parameter of the last IG Control packet received before the HAT or HOT is calculated", HFILL }
10943         },
10944         { &hf_cigi3_2_hat_hot_extended_response_hat,
10945             { "HAT", "cigi.hat_hot_ext_response.hat",
10946                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
10947                 "Indicates the height of the test point above the terrain", HFILL }
10948         },
10949         { &hf_cigi3_2_hat_hot_extended_response_hot,
10950             { "HOT", "cigi.hat_hot_ext_response.hot",
10951                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
10952                 "Indicates the height of terrain above or below the test point", HFILL }
10953         },
10954         { &hf_cigi3_2_hat_hot_extended_response_material_code,
10955             { "Material Code", "cigi.hat_hot_ext_response.material_code",
10956                 FT_UINT32, BASE_DEC, NULL, 0x0,
10957                 "Indicates the material code of the terrain surface at the point of intersection with the HAT/HOT test vector", HFILL }
10958         },
10959         { &hf_cigi3_2_hat_hot_extended_response_normal_vector_azimuth,
10960             { "Normal Vector Azimuth (degrees)", "cigi.hat_hot_ext_response.normal_vector_azimuth",
10961                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10962                 "Indicates the azimuth of the normal unit vector of the surface intersected by the HAT/HOT test vector", HFILL }
10963         },
10964         { &hf_cigi3_2_hat_hot_extended_response_normal_vector_elevation,
10965             { "Normal Vector Elevation (degrees)", "cigi.hat_hot_ext_response.normal_vector_elevation",
10966                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10967                 "Indicates the elevation of the normal unit vector of the surface intersected by the HAT/HOT test vector", HFILL }
10968         },
10969
10970         /* CIGI2 Line of Sight Response */
10971         { &hf_cigi2_line_of_sight_response,
10972             { "Line of Sight Response", "cigi.los_response",
10973                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
10974                 "Line of Sight Response Packet", HFILL }
10975         },
10976         { &hf_cigi2_line_of_sight_response_los_id,
10977             { "LOS ID", "cigi.los_response.los_id",
10978                 FT_UINT16, BASE_DEC, NULL, 0x0,
10979                 "Identifies the LOS response corresponding tot he associated LOS request", HFILL }
10980         },
10981         { &hf_cigi2_line_of_sight_response_valid,
10982             { "Valid", "cigi.los_response.valid",
10983                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x80,
10984                 "Indicates whether the response is valid or invalid", HFILL }
10985         },
10986         { &hf_cigi2_line_of_sight_response_occult_response,
10987             { "Occult Response", "cigi.los_response.occult_response",
10988                 FT_BOOLEAN, 8, TFS(&cigi2_line_of_sight_occult_response_tfs), 0x40,
10989                 "Used to respond to the LOS occult request data packet", HFILL }
10990         },
10991         { &hf_cigi2_line_of_sight_response_material_type,
10992             { "Material Type", "cigi.los_response.material_type",
10993                 FT_INT32, BASE_DEC, NULL, 0x0,
10994                 "Specifies the material type of the object intersected by the LOS test segment", HFILL }
10995         },
10996         { &hf_cigi2_line_of_sight_response_range,
10997             { "Range (m)", "cigi.los_response.range",
10998                 FT_FLOAT, BASE_NONE, NULL, 0x0,
10999                 "Used to respond to the Line of Sight Range Request data packet", HFILL }
11000         },
11001         { &hf_cigi2_line_of_sight_response_alt,
11002             { "Intersection Altitude (m)", "cigi.los_response.alt",
11003                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11004                 "Specifies the altitude of the point of intersection of the LOS request vector with an object", HFILL }
11005         },
11006         { &hf_cigi2_line_of_sight_response_lat,
11007             { "Intersection Latitude (degrees)", "cigi.los_response.lat",
11008                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11009                 "Specifies the latitudinal position of the intersection point of the LOS request vector with an object", HFILL }
11010         },
11011         { &hf_cigi2_line_of_sight_response_lon,
11012             { "Intersection Longitude (degrees)", "cigi.los_response.lon",
11013                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11014                 "Specifies the longitudinal position of the intersection point of the LOS request vector with an object", HFILL }
11015         },
11016
11017         /* CIGI3 Line of Sight Response */
11018         { &hf_cigi3_line_of_sight_response,
11019             { "Line of Sight Response", "cigi.los_response",
11020                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11021                 "Line of Sight Response Packet", HFILL }
11022         },
11023         { &hf_cigi3_line_of_sight_response_los_id,
11024             { "LOS ID", "cigi.los_response.los_id",
11025                 FT_UINT16, BASE_DEC, NULL, 0x0,
11026                 "Identifies the LOS response", HFILL }
11027         },
11028         { &hf_cigi3_line_of_sight_response_valid,
11029             { "Valid", "cigi.los_response.valid",
11030                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x01,
11031                 "Indicates whether the Range parameter is valid", HFILL }
11032         },
11033         { &hf_cigi3_line_of_sight_response_entity_id_valid,
11034             { "Entity ID Valid", "cigi.los_response.entity_id_valid",
11035                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x02,
11036                 "Indicates whether the LOS test vector or segment intersects with an entity or a non-entity", HFILL }
11037         },
11038         { &hf_cigi3_line_of_sight_response_visible,
11039             { "Visible", "cigi.los_response.visible",
11040                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_response_visible_tfs), 0x04,
11041                 "Indicates whether the destination point is visible from the source point", HFILL }
11042         },
11043         { &hf_cigi3_line_of_sight_response_count,
11044             { "Response Count", "cigi.los_response.count",
11045                 FT_UINT8, BASE_DEC, NULL, 0x0,
11046                 "Indicates the total number of Line of Sight Response packets the IG will return for the corresponding request", HFILL }
11047         },
11048         { &hf_cigi3_line_of_sight_response_entity_id,
11049             { "Entity ID", "cigi.los_response.entity_id",
11050                 FT_UINT16, BASE_DEC, NULL, 0x0,
11051                 "Indicates the entity with which an LOS test vector or segment intersects", HFILL }
11052         },
11053         { &hf_cigi3_line_of_sight_response_range,
11054             { "Range (m)", "cigi.los_response.range",
11055                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11056                 "Indicates the distance along the LOS test segment or vector from the source point to the point of intersection with a polygon surface", HFILL }
11057         },
11058
11059         /* CIGI3_2 Line of Sight Response */
11060         { &hf_cigi3_2_line_of_sight_response,
11061             { "Line of Sight Response", "cigi.los_response",
11062                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11063                 "Line of Sight Response Packet", HFILL }
11064         },
11065         { &hf_cigi3_2_line_of_sight_response_los_id,
11066             { "LOS ID", "cigi.los_response.los_id",
11067                 FT_UINT16, BASE_DEC, NULL, 0x0,
11068                 "Identifies the LOS response", HFILL }
11069         },
11070         { &hf_cigi3_2_line_of_sight_response_valid,
11071             { "Valid", "cigi.los_response.valid",
11072                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x01,
11073                 "Indicates whether the Range parameter is valid", HFILL }
11074         },
11075         { &hf_cigi3_2_line_of_sight_response_entity_id_valid,
11076             { "Entity ID Valid", "cigi.los_response.entity_id_valid",
11077                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x02,
11078                 "Indicates whether the LOS test vector or segment intersects with an entity or a non-entity", HFILL }
11079         },
11080         { &hf_cigi3_2_line_of_sight_response_visible,
11081             { "Visible", "cigi.los_response.visible",
11082                 FT_BOOLEAN, 8, TFS(&cigi3_2_line_of_sight_response_visible_tfs), 0x04,
11083                 "Indicates whether the destination point is visible from the source point", HFILL }
11084         },
11085         { &hf_cigi3_2_line_of_sight_response_host_frame_number_lsn,
11086             { "Host Frame Number LSN", "cigi.los_response.host_frame_number_lsn",
11087                 FT_UINT8, BASE_DEC, NULL, 0xf0,
11088                 "Least significant nibble of the host frame number parameter of the last IG Control packet received before the HAT or HOT is calculated", HFILL }
11089         },
11090         { &hf_cigi3_2_line_of_sight_response_count,
11091             { "Response Count", "cigi.los_response.count",
11092                 FT_UINT8, BASE_DEC, NULL, 0x0,
11093                 "Indicates the total number of Line of Sight Response packets the IG will return for the corresponding request", HFILL }
11094         },
11095         { &hf_cigi3_2_line_of_sight_response_entity_id,
11096             { "Entity ID", "cigi.los_response.entity_id",
11097                 FT_UINT16, BASE_DEC, NULL, 0x0,
11098                 "Indicates the entity with which an LOS test vector or segment intersects", HFILL }
11099         },
11100         { &hf_cigi3_2_line_of_sight_response_range,
11101             { "Range (m)", "cigi.los_response.range",
11102                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11103                 "Indicates the distance along the LOS test segment or vector from the source point to the point of intersection with a polygon surface", HFILL }
11104         },
11105
11106         /* CIGI3 Line of Sight Extended Response */
11107         { &hf_cigi3_line_of_sight_extended_response,
11108             { "Line of Sight Extended Response", "cigi.los_ext_response",
11109                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11110                 "Line of Sight Extended Response Packet", HFILL }
11111         },
11112         { &hf_cigi3_line_of_sight_extended_response_los_id,
11113             { "LOS ID", "cigi.los_ext_response.los_id",
11114                 FT_UINT16, BASE_DEC, NULL, 0x0,
11115                 "Identifies the LOS response", HFILL }
11116         },
11117         { &hf_cigi3_line_of_sight_extended_response_valid,
11118             { "Valid", "cigi.los_ext_response.valid",
11119                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x01,
11120                 "Indicates whether this packet contains valid data", HFILL }
11121         },
11122         { &hf_cigi3_line_of_sight_extended_response_entity_id_valid,
11123             { "Entity ID Valid", "cigi.los_ext_response.entity_id_valid",
11124                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x02,
11125                 "Indicates whether the LOS test vector or segment intersects with an entity", HFILL }
11126         },
11127         { &hf_cigi3_line_of_sight_extended_response_range_valid,
11128             { "Range Valid", "cigi.los_ext_response.range_valid",
11129                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x04,
11130                 "Indicates whether the Range parameter is valid", HFILL }
11131         },
11132         { &hf_cigi3_line_of_sight_extended_response_visible,
11133             { "Visible", "cigi.los_ext_response.visible",
11134                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_extended_response_visible_tfs), 0x08,
11135                 "Indicates whether the destination point is visible from the source point", HFILL }
11136         },
11137         { &hf_cigi3_line_of_sight_extended_response_intersection_coord,
11138             { "Intersection Point Coordinate System", "cigi.los_ext_response.intersection_coord",
11139                 FT_BOOLEAN, 8, TFS(&cigi3_line_of_sight_extended_response_intersection_coord_tfs), 0x10,
11140                 "Indicates the coordinate system relative to which the intersection point is specified", HFILL }
11141         },
11142         { &hf_cigi3_line_of_sight_extended_response_response_count,
11143             { "Response Count", "cigi.los_ext_response.response_count",
11144                 FT_UINT8, BASE_DEC, NULL, 0x0,
11145                 "Indicates the total number of Line of Sight Extended Response packets the IG will return for the corresponding request", HFILL }
11146         },
11147         { &hf_cigi3_line_of_sight_extended_response_entity_id,
11148             { "Entity ID", "cigi.los_ext_response.entity_id",
11149                 FT_UINT16, BASE_DEC, NULL, 0x0,
11150                 "Indicates the entity with which a LOS test vector or segment intersects", HFILL }
11151         },
11152         { &hf_cigi3_line_of_sight_extended_response_range,
11153             { "Range (m)", "cigi.los_ext_response.range",
11154                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11155                 "Indicates the distance along the LOS test segment or vector from the source point to the point of intersection with an object", HFILL }
11156         },
11157         { &hf_cigi3_line_of_sight_extended_response_lat_xoff,
11158             { "Latitude (degrees)/X Offset (m)", "cigi.los_ext_response.lat_xoff",
11159                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11160                 "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 }
11161         },
11162         { &hf_cigi3_line_of_sight_extended_response_lon_yoff,
11163             { "Longitude (degrees)/Y Offset (m)", "cigi.los_ext_response.lon_yoff",
11164                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11165                 "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 }
11166         },
11167         { &hf_cigi3_line_of_sight_extended_response_alt_zoff,
11168             { "Altitude (m)/Z Offset(m)", "cigi.los_ext_response.alt_zoff",
11169                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11170                 "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 }
11171         },
11172         { &hf_cigi3_line_of_sight_extended_response_red,
11173             { "Red", "cigi.los_ext_response.red",
11174                 FT_UINT8, BASE_DEC, NULL, 0x0,
11175                 "Indicates the red color component of the surface at the point of intersection", HFILL }
11176         },
11177         { &hf_cigi3_line_of_sight_extended_response_green,
11178             { "Green", "cigi.los_ext_response.green",
11179                 FT_UINT8, BASE_DEC, NULL, 0x0,
11180                 "Indicates the green color component of the surface at the point of intersection", HFILL }
11181         },
11182         { &hf_cigi3_line_of_sight_extended_response_blue,
11183             { "Blue", "cigi.los_ext_response.blue",
11184                 FT_UINT8, BASE_DEC, NULL, 0x0,
11185                 "Indicates the blue color component of the surface at the point of intersection", HFILL }
11186         },
11187         { &hf_cigi3_line_of_sight_extended_response_alpha,
11188             { "Alpha", "cigi.los_ext_response.alpha",
11189                 FT_UINT8, BASE_DEC, NULL, 0x0,
11190                 "Indicates the alpha component of the surface at the point of intersection", HFILL }
11191         },
11192         { &hf_cigi3_line_of_sight_extended_response_material_code,
11193             { "Material Code", "cigi.los_ext_response.material_code",
11194                 FT_UINT32, BASE_DEC, NULL, 0x0,
11195                 "Indicates the material code of the surface intersected by the LOS test segment of vector", HFILL }
11196         },
11197         { &hf_cigi3_line_of_sight_extended_response_normal_vector_azimuth,
11198             { "Normal Vector Azimuth (degrees)", "cigi.los_ext_response.normal_vector_azimuth",
11199                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11200                 "Indicates the azimuth of a unit vector normal to the surface intersected by the LOS test segment or vector", HFILL }
11201         },
11202         { &hf_cigi3_line_of_sight_extended_response_normal_vector_elevation,
11203             { "Normal Vector Elevation (degrees)", "cigi.los_ext_response.normal_vector_elevation",
11204                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11205                 "Indicates the elevation of a unit vector normal to the surface intersected by the LOS test segment or vector", HFILL }
11206         },
11207
11208         /* CIGI3_2 Line of Sight Extended Response */
11209         { &hf_cigi3_2_line_of_sight_extended_response,
11210             { "Line of Sight Extended Response", "cigi.3_2_los_ext_response",
11211                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11212                 "Line of Sight Extended Response Packet", HFILL }
11213         },
11214         { &hf_cigi3_2_line_of_sight_extended_response_los_id,
11215             { "LOS ID", "cigi.3_2_los_ext_response.los_id",
11216                 FT_UINT16, BASE_DEC, NULL, 0x0,
11217                 "Identifies the LOS response", HFILL }
11218         },
11219         { &hf_cigi3_2_line_of_sight_extended_response_valid,
11220             { "Valid", "cigi.3_2_los_ext_response.valid",
11221                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x01,
11222                 "Indicates whether this packet contains valid data", HFILL }
11223         },
11224         { &hf_cigi3_2_line_of_sight_extended_response_entity_id_valid,
11225             { "Entity ID Valid", "cigi.3_2_los_ext_response.entity_id_valid",
11226                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x02,
11227                 "Indicates whether the LOS test vector or segment intersects with an entity", HFILL }
11228         },
11229         { &hf_cigi3_2_line_of_sight_extended_response_range_valid,
11230             { "Range Valid", "cigi.3_2_los_ext_response.range_valid",
11231                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x04,
11232                 "Indicates whether the Range parameter is valid", HFILL }
11233         },
11234         { &hf_cigi3_2_line_of_sight_extended_response_visible,
11235             { "Visible", "cigi.3_2_los_ext_response.visible",
11236                 FT_BOOLEAN, 8, TFS(&cigi3_2_line_of_sight_extended_response_visible_tfs), 0x08,
11237                 "Indicates whether the destination point is visible from the source point", HFILL }
11238         },
11239         { &hf_cigi3_2_line_of_sight_extended_response_host_frame_number_lsn,
11240             { "Host Frame Number LSN", "cigi.3_2_los_ext_response.host_frame_number_lsn",
11241                 FT_UINT8, BASE_DEC, NULL, 0xf0,
11242                 "Least significant nibble of the host frame number parameter of the last IG Control packet received before the HAT or HOT is calculated", HFILL }
11243         },
11244         { &hf_cigi3_2_line_of_sight_extended_response_response_count,
11245             { "Response Count", "cigi.3_2_los_ext_response.response_count",
11246                 FT_UINT8, BASE_DEC, NULL, 0x0,
11247                 "Indicates the total number of Line of Sight Extended Response packets the IG will return for the corresponding request", HFILL }
11248         },
11249         { &hf_cigi3_2_line_of_sight_extended_response_entity_id,
11250             { "Entity ID", "cigi.3_2_los_ext_response.entity_id",
11251                 FT_UINT16, BASE_DEC, NULL, 0x0,
11252                 "Indicates the entity with which a LOS test vector or segment intersects", HFILL }
11253         },
11254         { &hf_cigi3_2_line_of_sight_extended_response_range,
11255             { "Range (m)", "cigi.3_2_los_ext_response.range",
11256                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11257                 "Indicates the distance along the LOS test segment or vector from the source point to the point of intersection with an object", HFILL }
11258         },
11259         { &hf_cigi3_2_line_of_sight_extended_response_lat_xoff,
11260             { "Latitude (degrees)/X Offset (m)", "cigi.3_2_los_ext_response.lat_xoff",
11261                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11262                 "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 }
11263         },
11264         { &hf_cigi3_2_line_of_sight_extended_response_lon_yoff,
11265             { "Longitude (degrees)/Y Offset (m)", "cigi.3_2_los_ext_response.lon_yoff",
11266                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11267                 "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 }
11268         },
11269         { &hf_cigi3_2_line_of_sight_extended_response_alt_zoff,
11270             { "Altitude (m)/Z Offset(m)", "cigi.3_2_los_ext_response.alt_zoff",
11271                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11272                 "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 }
11273         },
11274         { &hf_cigi3_2_line_of_sight_extended_response_red,
11275             { "Red", "cigi.3_2_los_ext_response.red",
11276                 FT_UINT8, BASE_DEC, NULL, 0x0,
11277                 "Indicates the red color component of the surface at the point of intersection", HFILL }
11278         },
11279         { &hf_cigi3_2_line_of_sight_extended_response_green,
11280             { "Green", "cigi.3_2_los_ext_response.green",
11281                 FT_UINT8, BASE_DEC, NULL, 0x0,
11282                 "Indicates the green color component of the surface at the point of intersection", HFILL }
11283         },
11284         { &hf_cigi3_2_line_of_sight_extended_response_blue,
11285             { "Blue", "cigi.3_2_los_ext_response.blue",
11286                 FT_UINT8, BASE_DEC, NULL, 0x0,
11287                 "Indicates the blue color component of the surface at the point of intersection", HFILL }
11288         },
11289         { &hf_cigi3_2_line_of_sight_extended_response_alpha,
11290             { "Alpha", "cigi.3_2_los_ext_response.alpha",
11291                 FT_UINT8, BASE_DEC, NULL, 0x0,
11292                 "Indicates the alpha component of the surface at the point of intersection", HFILL }
11293         },
11294         { &hf_cigi3_2_line_of_sight_extended_response_material_code,
11295             { "Material Code", "cigi.3_2_los_ext_response.material_code",
11296                 FT_UINT32, BASE_DEC, NULL, 0x0,
11297                 "Indicates the material code of the surface intersected by the LOS test segment of vector", HFILL }
11298         },
11299         { &hf_cigi3_2_line_of_sight_extended_response_normal_vector_azimuth,
11300             { "Normal Vector Azimuth (degrees)", "cigi.3_2_los_ext_response.normal_vector_azimuth",
11301                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11302                 "Indicates the azimuth of a unit vector normal to the surface intersected by the LOS test segment or vector", HFILL }
11303         },
11304         { &hf_cigi3_2_line_of_sight_extended_response_normal_vector_elevation,
11305             { "Normal Vector Elevation (degrees)", "cigi.3_2_los_ext_response.normal_vector_elevation",
11306                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11307                 "Indicates the elevation of a unit vector normal to the surface intersected by the LOS test segment or vector", HFILL }
11308         },
11309
11310         /* CIGI2 Collision Detection Segment Response */
11311         { &hf_cigi2_collision_detection_segment_response,
11312             { "Collision Detection Segment Response", "cigi.coll_det_seg_response",
11313                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11314                 "Collision Detection Segment Response Packet", HFILL }
11315         },
11316         { &hf_cigi2_collision_detection_segment_response_entity_id,
11317             { "Entity ID", "cigi.coll_det_seg_response.entity_id",
11318                 FT_UINT16, BASE_DEC, NULL, 0x0,
11319                 "Indicates which entity experienced a collision", HFILL }
11320         },
11321         { &hf_cigi2_collision_detection_segment_response_segment_id,
11322             { "Segment ID", "cigi.coll_det_seg_response.segment_id",
11323                 FT_UINT8, BASE_DEC, NULL, 0xfe,
11324                 "Identifies the collision segment", HFILL }
11325         },
11326         { &hf_cigi2_collision_detection_segment_response_contact,
11327             { "Entity/Non-Entity Contact", "cigi.coll_det_seg_response.contact",
11328                 FT_BOOLEAN, 8, TFS(&cigi2_collision_detection_segment_response_contact_tfs), 0x01,
11329                 "Indicates whether another entity was contacted during this collision", HFILL }
11330         },
11331         { &hf_cigi2_collision_detection_segment_response_contacted_entity,
11332             { "Contacted Entity ID", "cigi.coll_det_seg_response.contacted_entity",
11333                 FT_UINT16, BASE_DEC, NULL, 0x0,
11334                 "Indicates which entity was contacted during the collision", HFILL }
11335         },
11336         { &hf_cigi2_collision_detection_segment_response_material_type,
11337             { "Material Type", "cigi.coll_det_seg_response.material_type",
11338                 FT_INT32, BASE_DEC, NULL, 0x0,
11339                 "Specifies the material type of the surface that this collision test segment contacted", HFILL }
11340         },
11341         { &hf_cigi2_collision_detection_segment_response_collision_x,
11342             { "Collision Point X (m)", "cigi.coll_det_seg_response.collision_x",
11343                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11344                 "Specifies the X component of a vector, which lies along the defined segment where the segment intersected a surface", HFILL }
11345         },
11346         { &hf_cigi2_collision_detection_segment_response_collision_y,
11347             { "Collision Point Y (m)", "cigi.coll_det_seg_response.collision_y",
11348                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11349                 "Specifies the Y component of a vector, which lies along the defined segment where the segment intersected a surface", HFILL }
11350         },
11351         { &hf_cigi2_collision_detection_segment_response_collision_z,
11352             { "Collision Point Z (m)", "cigi.coll_det_seg_response.collision_z",
11353                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11354                 "Specifies the Z component of a vector, which lies along the defined segment where the segment intersected a surface", HFILL }
11355         },
11356
11357         /* CIGI2 Sensor Response */
11358         { &hf_cigi2_sensor_response,
11359             { "Sensor Response", "cigi.sensor_response",
11360                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11361                 "Sensor Response Packet", HFILL }
11362         },
11363         { &hf_cigi2_sensor_response_view_id,
11364             { "View ID", "cigi.sensor_response.view_id",
11365                 FT_UINT8, BASE_DEC, NULL, 0xf8,
11366                 "Indicates the sensor view", HFILL }
11367         },
11368         { &hf_cigi2_sensor_response_status,
11369             { "Sensor Status", "cigi.sensor_response.status",
11370                 FT_UINT8, BASE_DEC, VALS(cigi2_sensor_response_status_vals), 0x06,
11371                 "Indicates the current sensor mode", HFILL }
11372         },
11373         { &hf_cigi2_sensor_response_sensor_id,
11374             { "Sensor ID", "cigi.sensor_response.sensor_id",
11375                 FT_UINT8, BASE_DEC, NULL, 0x0,
11376                 "Identifies the sensor response corresponding to the associated sensor control data packet", HFILL }
11377         },
11378         { &hf_cigi2_sensor_response_x_offset,
11379             { "Gate X Offset (degrees)", "cigi.sensor_response.x_offset",
11380                 FT_UINT16, BASE_DEC, NULL, 0x0,
11381                 "Specifies the target's horizontal offset from the view plane normal", HFILL }
11382         },
11383         { &hf_cigi2_sensor_response_y_offset,
11384             { "Gate Y Offset (degrees)", "cigi.sensor_response.y_offset",
11385                 FT_UINT16, BASE_DEC, NULL, 0x0,
11386                 "Specifies the target's vertical offset from the view plane normal", HFILL }
11387         },
11388         { &hf_cigi2_sensor_response_x_size,
11389             { "Gate X Size", "cigi.sensor_response.x_size",
11390                 FT_UINT16, BASE_DEC, NULL, 0x0,
11391                 "Specifies the target size in the X direction (horizontal) in pixels", HFILL }
11392         },
11393         { &hf_cigi2_sensor_response_y_size,
11394             { "Gate Y Size", "cigi.sensor_response.y_size",
11395                 FT_UINT16, BASE_DEC, NULL, 0x0,
11396                 "Specifies the target size in the Y direction (vertical) in pixels", HFILL }
11397         },
11398
11399         /* CIGI3 Sensor Response */
11400         { &hf_cigi3_sensor_response,
11401             { "Sensor Response", "cigi.sensor_response",
11402                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11403                 "Sensor Response Packet", HFILL }
11404         },
11405         { &hf_cigi3_sensor_response_view_id,
11406             { "View ID", "cigi.sensor_response.view_id",
11407                 FT_UINT16, BASE_DEC, NULL, 0x0,
11408                 "Specifies the view that represents the sensor display", HFILL }
11409         },
11410         { &hf_cigi3_sensor_response_sensor_id,
11411             { "Sensor ID", "cigi.sensor_response.sensor_id",
11412                 FT_UINT8, BASE_DEC, NULL, 0x0,
11413                 "Specifies the sensor to which the data in this packet apply", HFILL }
11414         },
11415         { &hf_cigi3_sensor_response_sensor_status,
11416             { "Sensor Status", "cigi.sensor_response.sensor_status",
11417                 FT_UINT8, BASE_DEC, VALS(cigi3_sensor_response_sensor_status_vals), 0x03,
11418                 "Indicates the current tracking state of the sensor", HFILL }
11419         },
11420         { &hf_cigi3_sensor_response_gate_x_size,
11421             { "Gate X Size (pixels or raster lines)", "cigi.sensor_response.gate_x_size",
11422                 FT_UINT16, BASE_DEC, NULL, 0x0,
11423                 "Specifies the gate symbol size along the view's X axis", HFILL }
11424         },
11425         { &hf_cigi3_sensor_response_gate_y_size,
11426             { "Gate Y Size (pixels or raster lines)", "cigi.sensor_response.gate_y_size",
11427                 FT_UINT16, BASE_DEC, NULL, 0x0,
11428                 "Specifies the gate symbol size along the view's Y axis", HFILL }
11429         },
11430         { &hf_cigi3_sensor_response_gate_x_pos,
11431             { "Gate X Position (degrees)", "cigi.sensor_response.gate_x_pos",
11432                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11433                 "Specifies the gate symbol's position along the view's X axis", HFILL }
11434         },
11435         { &hf_cigi3_sensor_response_gate_y_pos,
11436             { "Gate Y Position (degrees)", "cigi.sensor_response.gate_y_pos",
11437                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11438                 "Specifies the gate symbol's position along the view's Y axis", HFILL }
11439         },
11440         { &hf_cigi3_sensor_response_frame_ctr,
11441             { "Frame Counter", "cigi.sensor_response.frame_ctr",
11442                 FT_UINT32, BASE_DEC, NULL, 0x0,
11443                 "Indicates the IG's frame counter at the time that the IG calculates the gate and line-of-sight intersection data", HFILL }
11444         },
11445
11446         /* CIGI3 Sensor Extended Response */
11447         { &hf_cigi3_sensor_extended_response,
11448             { "Sensor Extended Response", "cigi.sensor_ext_response",
11449                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11450                 "Sensor Extended Response Packet", HFILL }
11451         },
11452         { &hf_cigi3_sensor_extended_response_view_id,
11453             { "View ID", "cigi.sensor_ext_response.view_id",
11454                 FT_UINT16, BASE_DEC, NULL, 0x0,
11455                 "Specifies the view that represents the sensor display", HFILL }
11456         },
11457         { &hf_cigi3_sensor_extended_response_sensor_id,
11458             { "Sensor ID", "cigi.sensor_ext_response.sensor_id",
11459                 FT_UINT8, BASE_DEC, NULL, 0x0,
11460                 "Specifies the sensor to which the data in this packet apply", HFILL }
11461         },
11462         { &hf_cigi3_sensor_extended_response_sensor_status,
11463             { "Sensor Status", "cigi.sensor_ext_response.sensor_status",
11464                 FT_UINT8, BASE_DEC, VALS(cigi3_sensor_extended_response_sensor_status_vals), 0x03,
11465                 "Indicates the current tracking state of the sensor", HFILL }
11466         },
11467         { &hf_cigi3_sensor_extended_response_entity_id_valid,
11468             { "Entity ID Valid", "cigi.sensor_ext_response.entity_id_valid",
11469                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x04,
11470                 "Indicates whether the target is an entity or a non-entity object", HFILL }
11471         },
11472         { &hf_cigi3_sensor_extended_response_entity_id,
11473             { "Entity ID", "cigi.sensor_ext_response.entity_id",
11474                 FT_UINT16, BASE_DEC, NULL, 0x0,
11475                 "Indicates the entity ID of the target", HFILL }
11476         },
11477         { &hf_cigi3_sensor_extended_response_gate_x_size,
11478             { "Gate X Size (pixels or raster lines)", "cigi.sensor_ext_response.gate_x_size",
11479                 FT_UINT16, BASE_DEC, NULL, 0x0,
11480                 "Specifies the gate symbol size along the view's X axis", HFILL }
11481         },
11482         { &hf_cigi3_sensor_extended_response_gate_y_size,
11483             { "Gate Y Size (pixels or raster lines)", "cigi.sensor_ext_response.gate_y_size",
11484                 FT_UINT16, BASE_DEC, NULL, 0x0,
11485                 "Specifies the gate symbol size along the view's Y axis", HFILL }
11486         },
11487         { &hf_cigi3_sensor_extended_response_gate_x_pos,
11488             { "Gate X Position (degrees)", "cigi.sensor_ext_response.gate_x_pos",
11489                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11490                 "Specifies the gate symbol's position along the view's X axis", HFILL }
11491         },
11492         { &hf_cigi3_sensor_extended_response_gate_y_pos,
11493             { "Gate Y Position (degrees)", "cigi.sensor_ext_response.gate_y_pos",
11494                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11495                 "Specifies the gate symbol's position along the view's Y axis", HFILL }
11496         },
11497         { &hf_cigi3_sensor_extended_response_frame_ctr,
11498             { "Frame Counter", "cigi.sensor_ext_response.frame_ctr",
11499                 FT_UINT32, BASE_DEC, NULL, 0x0,
11500                 "Indicates the IG's frame counter at the time that the IG calculates the gate and line-of-sight intersection data", HFILL }
11501         },
11502         { &hf_cigi3_sensor_extended_response_track_lat,
11503             { "Track Point Latitude (degrees)", "cigi.sensor_ext_response.track_lat",
11504                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11505                 "Indicates the geodetic latitude of the point being tracked by the sensor", HFILL }
11506         },
11507         { &hf_cigi3_sensor_extended_response_track_lon,
11508             { "Track Point Longitude (degrees)", "cigi.sensor_ext_response.track_lon",
11509                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11510                 "Indicates the geodetic longitude of the point being tracked by the sensor", HFILL }
11511         },
11512         { &hf_cigi3_sensor_extended_response_track_alt,
11513             { "Track Point Altitude (m)", "cigi.sensor_ext_response.track_alt",
11514                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11515                 "Indicates the geodetic altitude of the point being tracked by the sensor", HFILL }
11516         },
11517
11518         /* CIGI2 Height of Terrain Response */
11519         { &hf_cigi2_height_of_terrain_response,
11520             { "Height of Terrain Response", "cigi.hot_response",
11521                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11522                 "Height of Terrain Response Packet", HFILL }
11523         },
11524         { &hf_cigi2_height_of_terrain_response_hot_id,
11525             { "HOT ID", "cigi.hot_response.hot_id",
11526                 FT_UINT16, BASE_DEC, NULL, 0x0,
11527                 "Identifies the HOT response corresponding to the associated HOT request", HFILL }
11528         },
11529         { &hf_cigi2_height_of_terrain_response_valid,
11530             { "Valid", "cigi.hot_response.valid",
11531                 FT_BOOLEAN, 8, TFS(&cigi_valid_tfs), 0x80,
11532                 "Indicates whether the response is valid or invalid", HFILL }
11533         },
11534         { &hf_cigi2_height_of_terrain_response_material_type,
11535             { "Material Type", "cigi.hot_response.material_type",
11536                 FT_INT32, BASE_DEC, NULL, 0x0,
11537                 "Specifies the material type of the object intersected by the HOT test segment", HFILL }
11538         },
11539         { &hf_cigi2_height_of_terrain_response_alt,
11540             { "Altitude (m)", "cigi.hot_response.alt",
11541                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11542                 "Represents the altitude of the terrain for the position requested in the HOT request data packet", HFILL }
11543         },
11544
11545         /* CIGI2 Collision Detection Volume Response */
11546         { &hf_cigi2_collision_detection_volume_response,
11547             { "Collision Detection Volume Response", "cigi.coll_det_vol_response",
11548                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11549                 "Collision Detection Volume Response Packet", HFILL }
11550         },
11551         { &hf_cigi2_collision_detection_volume_response_entity_id,
11552             { "Entity ID", "cigi.coll_det_vol_response.entity_id",
11553                 FT_UINT16, BASE_DEC, NULL, 0x0,
11554                 "Indicates which entity experienced a collision", HFILL }
11555         },
11556         { &hf_cigi2_collision_detection_volume_response_volume_id,
11557             { "Volume ID", "cigi.coll_det_vol_response.volume_id",
11558                 FT_UINT8, BASE_DEC, NULL, 0xfe,
11559                 "Identifies the collision volume corresponding to the associated Collision Detection Volume Request", HFILL }
11560         },
11561         { &hf_cigi2_collision_detection_volume_response_contact,
11562             { "Entity/Non-Entity Contact", "cigi.coll_det_vol_response.contact",
11563                 FT_BOOLEAN, 8, TFS(&cigi2_collision_detection_volume_response_contact_tfs), 0x01,
11564                 "Indicates whether another entity was contacted during this collision", HFILL }
11565         },
11566         { &hf_cigi2_collision_detection_volume_response_contact_entity,
11567             { "Contacted Entity ID", "cigi.coll_det_vol_response.contact_entity",
11568                 FT_UINT16, BASE_DEC, NULL, 0x0,
11569                 "Indicates which entity was contacted with during the collision", HFILL }
11570         },
11571
11572         /* CIGI3 Position Response */
11573         { &hf_cigi3_position_response,
11574             { "Position Response", "cigi.pos_response",
11575                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11576                 "Position Response Packet", HFILL }
11577         },
11578         { &hf_cigi3_position_response_object_id,
11579             { "Object ID", "cigi.pos_response.object_id",
11580                 FT_UINT16, BASE_DEC, NULL, 0x0,
11581                 "Identifies the entity, view, view group, or motion tracking device whose position is being reported", HFILL }
11582         },
11583         { &hf_cigi3_position_response_part_id,
11584             { "Articulated Part ID", "cigi.pos_response.part_id",
11585                 FT_UINT8, BASE_DEC, NULL, 0x0,
11586                 "Identifies the articulated part whose position is being reported", HFILL }
11587         },
11588         { &hf_cigi3_position_response_object_class,
11589             { "Object Class", "cigi.pos_response.object_class",
11590                 FT_UINT8, BASE_DEC, VALS(cigi3_position_response_object_class_vals), 0x07,
11591                 "Indicates the type of object whose position is being reported", HFILL }
11592         },
11593         { &hf_cigi3_position_response_coord_system,
11594             { "Coordinate System", "cigi.pos_response.coord_system",
11595                 FT_UINT8, BASE_DEC, VALS(cigi3_position_response_coord_system_vals), 0x18,
11596                 "Indicates the coordinate system in which the position and orientation are specified", HFILL }
11597         },
11598         { &hf_cigi3_position_response_lat_xoff,
11599             { "Latitude (degrees)/X Offset (m)", "cigi.pos_response.lat_xoff",
11600                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11601                 "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 }
11602         },
11603         { &hf_cigi3_position_response_lon_yoff,
11604             { "Longitude (degrees)/Y Offset (m)", "cigi.pos_response.lon_yoff",
11605                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11606                 "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 }
11607         },
11608         { &hf_cigi3_position_response_alt_zoff,
11609             { "Altitude (m)/Z Offset (m)", "cigi.pos_response.alt_zoff",
11610                 FT_DOUBLE, BASE_NONE, NULL, 0x0,
11611                 "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 }
11612         },
11613         { &hf_cigi3_position_response_roll,
11614             { "Roll (degrees)", "cigi.pos_response.roll",
11615                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11616                 "Indicates the roll angle of the specified entity, articulated part, view, or view group", HFILL }
11617         },
11618         { &hf_cigi3_position_response_pitch,
11619             { "Pitch (degrees)", "cigi.pos_response.pitch",
11620                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11621                 "Indicates the pitch angle of the specified entity, articulated part, view, or view group", HFILL }
11622         },
11623         { &hf_cigi3_position_response_yaw,
11624             { "Yaw (degrees)", "cigi.pos_response.yaw",
11625                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11626                 "Indicates the yaw angle of the specified entity, articulated part, view, or view group", HFILL }
11627         },
11628
11629         /* CIGI3 Weather Conditions Response */
11630         { &hf_cigi3_weather_conditions_response,
11631             { "Weather Conditions Response", "cigi.wea_cond_response",
11632                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11633                 "Weather Conditions Response Packet", HFILL }
11634         },
11635         { &hf_cigi3_weather_conditions_response_request_id,
11636             { "Request ID", "cigi.wea_cond_response.request_id",
11637                 FT_UINT8, BASE_DEC, NULL, 0x0,
11638                 "Identifies the environmental conditions request to which this response packet corresponds", HFILL }
11639         },
11640         { &hf_cigi3_weather_conditions_response_humidity,
11641             { "Humidity (%)", "cigi.wea_cond_response.humidity",
11642                 FT_UINT8, BASE_DEC, NULL, 0x0,
11643                 "Indicates the humidity at the request location", HFILL }
11644         },
11645         { &hf_cigi3_weather_conditions_response_air_temp,
11646             { "Air Temperature (degrees C)", "cigi.wea_cond_response.air_temp",
11647                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11648                 "Indicates the air temperature at the requested location", HFILL }
11649         },
11650         { &hf_cigi3_weather_conditions_response_visibility_range,
11651             { "Visibility Range (m)", "cigi.wea_cond_response.visibility_range",
11652                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11653                 "Indicates the visibility range at the requested location", HFILL }
11654         },
11655         { &hf_cigi3_weather_conditions_response_horiz_speed,
11656             { "Horizontal Wind Speed (m/s)", "cigi.wea_cond_response.horiz_speed",
11657                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11658                 "Indicates the local wind speed parallel to the ellipsoid-tangential reference plane", HFILL }
11659         },
11660         { &hf_cigi3_weather_conditions_response_vert_speed,
11661             { "Vertical Wind Speed (m/s)", "cigi.wea_cond_response.vert_speed",
11662                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11663                 "Indicates the local vertical wind speed", HFILL }
11664         },
11665         { &hf_cigi3_weather_conditions_response_wind_direction,
11666             { "Wind Direction (degrees)", "cigi.wea_cond_response.wind_direction",
11667                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11668                 "Indicates the local wind direction", HFILL }
11669         },
11670         { &hf_cigi3_weather_conditions_response_barometric_pressure,
11671             { "Barometric Pressure (mb or hPa)", "cigi.wea_cond_response.barometric_pressure",
11672                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11673                 "Indicates the atmospheric pressure at the requested location", HFILL }
11674         },
11675
11676         /* CIGI3 Aerosol Concentration Response */
11677         { &hf_cigi3_aerosol_concentration_response,
11678             { "Aerosol Concentration Response", "cigi.aerosol_concentration_response",
11679                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11680                 "Aerosol Concentration Response Packet", HFILL }
11681         },
11682         { &hf_cigi3_aerosol_concentration_response_request_id,
11683             { "Request ID", "cigi.aerosol_concentration_response.request_id",
11684                 FT_UINT8, BASE_DEC, NULL, 0x0,
11685                 "Identifies the environmental conditions request to which this response packet corresponds", HFILL }
11686         },
11687         { &hf_cigi3_aerosol_concentration_response_layer_id,
11688             { "Layer ID", "cigi.aerosol_concentration_response.layer_id",
11689                 FT_UINT8, BASE_DEC, NULL, 0x0,
11690                 "Identifies the weather layer whose aerosol concentration is being described", HFILL }
11691         },
11692         { &hf_cigi3_aerosol_concentration_response_aerosol_concentration,
11693             { "Aerosol Concentration (g/m^3)", "cigi.aerosol_concentration_response.aerosol_concentration",
11694                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11695                 "Identifies the concentration of airborne particles", HFILL }
11696         },
11697
11698         /* CIGI3 Maritime Surface Conditions Response */
11699         { &hf_cigi3_maritime_surface_conditions_response,
11700             { "Maritime Surface Conditions Response", "cigi.maritime_surface_conditions_response",
11701                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11702                 "Maritime Surface Conditions Response Packet", HFILL }
11703         },
11704         { &hf_cigi3_maritime_surface_conditions_response_request_id,
11705             { "Request ID", "cigi.maritime_surface_conditions_response.request_id",
11706                 FT_UINT8, BASE_DEC, NULL, 0x0,
11707                 "Identifies the environmental conditions request to which this response packet corresponds", HFILL }
11708         },
11709         { &hf_cigi3_maritime_surface_conditions_response_sea_surface_height,
11710             { "Sea Surface Height (m)", "cigi.maritime_surface_conditions_response.sea_surface_height",
11711                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11712                 "Indicates the height of the sea surface at equilibrium", HFILL }
11713         },
11714         { &hf_cigi3_maritime_surface_conditions_response_surface_water_temp,
11715             { "Surface Water Temperature (degrees C)", "cigi.maritime_surface_conditions_response.surface_water_temp",
11716                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11717                 "Indicates the water temperature at the sea surface", HFILL }
11718         },
11719         { &hf_cigi3_maritime_surface_conditions_response_surface_clarity,
11720             { "Surface Clarity (%)", "cigi.maritime_surface_conditions_response.surface_clarity",
11721                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11722                 "Indicates the clarity of the water at its surface", HFILL }
11723         },
11724
11725         /* CIGI3 Terrestrial Surface Conditions Response */
11726         { &hf_cigi3_terrestrial_surface_conditions_response,
11727             { "Terrestrial Surface Conditions Response", "cigi.terr_surface_cond_response",
11728                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11729                 "Terrestrial Surface Conditions Response Packet", HFILL }
11730         },
11731         { &hf_cigi3_terrestrial_surface_conditions_response_request_id,
11732             { "Request ID", "cigi.terr_surface_cond_response.request_id",
11733                 FT_UINT8, BASE_DEC, NULL, 0x0,
11734                 "Identifies the environmental conditions request to which this response packet corresponds", HFILL }
11735         },
11736         { &hf_cigi3_terrestrial_surface_conditions_response_surface_id,
11737             { "Surface Condition ID", "cigi.terr_surface_cond_response.surface_id",
11738                 FT_UINT32, BASE_DEC, NULL, 0x0,
11739                 "Indicates the presence of a specific surface condition or contaminant at the test point", HFILL }
11740         },
11741
11742         /* CIGI3 Collision Detection Segment Notification */
11743         { &hf_cigi3_collision_detection_segment_notification,
11744             { "Collision Detection Segment Notification", "cigi.coll_det_seg_notification",
11745                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11746                 "Collision Detection Segment Notification Packet", HFILL }
11747         },
11748         { &hf_cigi3_collision_detection_segment_notification_entity_id,
11749             { "Entity ID", "cigi.coll_det_seg_notification.entity_id",
11750                 FT_UINT16, BASE_DEC, NULL, 0x0,
11751                 "Indicates the entity to which the collision detection segment belongs", HFILL }
11752         },
11753         { &hf_cigi3_collision_detection_segment_notification_segment_id,
11754             { "Segment ID", "cigi.coll_det_seg_notification.segment_id",
11755                 FT_UINT8, BASE_DEC, NULL, 0x0,
11756                 "Indicates the ID of the collision detection segment along which the collision occurred", HFILL }
11757         },
11758         { &hf_cigi3_collision_detection_segment_notification_type,
11759             { "Collision Type", "cigi.coll_det_seg_notification.type",
11760                 FT_BOOLEAN, 8, TFS(&cigi3_collision_detection_segment_notification_type_tfs), 0x01,
11761                 "Indicates whether the collision occurred with another entity or with a non-entity object", HFILL }
11762         },
11763         { &hf_cigi3_collision_detection_segment_notification_contacted_entity_id,
11764             { "Contacted Entity ID", "cigi.coll_det_seg_notification.contacted_entity_id",
11765                 FT_UINT16, BASE_DEC, NULL, 0x0,
11766                 "Indicates the entity with which the collision occurred", HFILL }
11767         },
11768         { &hf_cigi3_collision_detection_segment_notification_material_code,
11769             { "Material Code", "cigi.coll_det_seg_notification.material_code",
11770                 FT_UINT32, BASE_DEC, NULL, 0x0,
11771                 "Indicates the material code of the surface at the point of collision", HFILL }
11772         },
11773         { &hf_cigi3_collision_detection_segment_notification_intersection_distance,
11774             { "Intersection Distance (m)", "cigi.coll_det_seg_notification.intersection_distance",
11775                 FT_FLOAT, BASE_NONE, NULL, 0x0,
11776                 "Indicates the distance along the collision test vector from the source endpoint to the point of intersection", HFILL }
11777         },
11778
11779         /* CIGI3 Collision Detection Volume Notification */
11780         { &hf_cigi3_collision_detection_volume_notification,
11781             { "Collision Detection Volume Notification", "cigi.coll_det_vol_notification",
11782                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11783                 "Collision Detection Volume Notification Packet", HFILL }
11784         },
11785         { &hf_cigi3_collision_detection_volume_notification_entity_id,
11786             { "Entity ID", "cigi.coll_det_vol_notification.entity_id",
11787                 FT_UINT16, BASE_DEC, NULL, 0x0,
11788                 "Indicates the entity to which the collision detection volume belongs", HFILL }
11789         },
11790         { &hf_cigi3_collision_detection_volume_notification_volume_id,
11791             { "Volume ID", "cigi.coll_det_vol_notification.volume_id",
11792                 FT_UINT8, BASE_DEC, NULL, 0x0,
11793                 "Indicates the ID of the collision detection volume within which the collision occurred", HFILL }
11794         },
11795         { &hf_cigi3_collision_detection_volume_notification_type,
11796             { "Collision Type", "cigi.coll_det_vol_notification.type",
11797                 FT_BOOLEAN, 8, TFS(&cigi3_collision_detection_volume_notification_type_tfs), 0x01,
11798                 "Indicates whether the collision occurred with another entity or with a non-entity object", HFILL }
11799         },
11800         { &hf_cigi3_collision_detection_volume_notification_contacted_entity_id,
11801             { "Contacted Entity ID", "cigi.coll_det_vol_notification.contacted_entity_id",
11802                 FT_UINT16, BASE_DEC, NULL, 0x0,
11803                 "Indicates the entity with which the collision occurred", HFILL }
11804         },
11805         { &hf_cigi3_collision_detection_volume_notification_contacted_volume_id,
11806             { "Contacted Volume ID", "cigi.coll_det_vol_notification.contacted_volume_id",
11807                 FT_UINT8, BASE_DEC, NULL, 0x0,
11808                 "Indicates the ID of the collision detection volume with which the collision occurred", HFILL }
11809         },
11810
11811         /* CIGI3 Animation Stop Notification */
11812         { &hf_cigi3_animation_stop_notification,
11813             { "Animation Stop Notification", "cigi.animation_stop_notification",
11814                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11815                 "Animation Stop Notification Packet", HFILL }
11816         },
11817         { &hf_cigi3_animation_stop_notification_entity_id,
11818             { "Entity ID", "cigi.animation_stop_notification.entity_id",
11819                 FT_UINT16, BASE_DEC, NULL, 0x0,
11820                 "Indicates the entity ID of the animation that has stopped", HFILL }
11821         },
11822
11823         /* CIGI3 Event Notification */
11824         { &hf_cigi3_event_notification,
11825             { "Event Notification", "cigi.event_notification",
11826                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11827                 "Event Notification Packet", HFILL }
11828         },
11829         { &hf_cigi3_event_notification_event_id,
11830             { "Event ID", "cigi.event_notification.event_id",
11831                 FT_UINT16, BASE_DEC, NULL, 0x0,
11832                 "Indicates which event has occurred", HFILL }
11833         },
11834         { &hf_cigi3_event_notification_data_1,
11835             { "Event Data 1", "cigi.event_notification.data_1",
11836                 FT_BYTES, BASE_NONE, NULL, 0x0,
11837                 "Used for user-defined event data", HFILL }
11838         },
11839         { &hf_cigi3_event_notification_data_2,
11840             { "Event Data 2", "cigi.event_notification.data_2",
11841                 FT_BYTES, BASE_NONE, NULL, 0x0,
11842                 "Used for user-defined event data", HFILL }
11843         },
11844         { &hf_cigi3_event_notification_data_3,
11845             { "Event Data 3", "cigi.event_notification.data_3",
11846                 FT_BYTES, BASE_NONE, NULL, 0x0,
11847                 "Used for user-defined event data", HFILL }
11848         },
11849
11850         /* CIGI2 Image Generator Message */
11851         { &hf_cigi2_image_generator_message,
11852             { "Image Generator Message", "cigi.image_generator_message",
11853                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11854                 "Image Generator Message Packet", HFILL }
11855         },
11856         { &hf_cigi2_image_generator_message_id,
11857             { "Message ID", "cigi.image_generator_message.message_id",
11858                 FT_UINT16, BASE_DEC, NULL, 0x0,
11859                 "Uniquely identifies an instance of an Image Generator Response Message", HFILL }
11860         },
11861         { &hf_cigi2_image_generator_message_message,
11862             { "Message", "cigi.image_generator_message.message",
11863                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11864                 "Image generator message", HFILL }
11865         },
11866
11867         /* CIGI3 Image Generator Message */
11868         { &hf_cigi3_image_generator_message,
11869             { "Image Generator Message", "cigi.image_generator_message",
11870                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11871                 "Image Generator Message Packet", HFILL }
11872         },
11873         { &hf_cigi3_image_generator_message_id,
11874             { "Message ID", "cigi.image_generator_message.message_id",
11875                 FT_UINT16, BASE_DEC, NULL, 0x0,
11876                 "Specifies a numerical identifier for the message", HFILL }
11877         },
11878         { &hf_cigi3_image_generator_message_message,
11879             { "Message", "cigi.image_generator_message.message",
11880                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11881                 "Message string", HFILL }
11882         },
11883
11884         /* CIGI2 User Definable */
11885         { &hf_cigi2_user_definable,
11886             { "User Definable", "cigi.user_definable",
11887                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11888                 "User definable packet", HFILL }
11889         },
11890
11891         /* CIGI3 User-Defined Packets */
11892         { &hf_cigi3_user_defined,
11893             { "User-Defined", "cigi.user_defined",
11894                 FT_STRINGZ, BASE_NONE, NULL, 0x0,
11895                 "User-Defined Packet", HFILL }
11896         },
11897     };
11898
11899     /* CIGI preferences */
11900     static enum_val_t cigi_versions[] = {
11901         { "from_packet", "From Packet", CIGI_VERSION_FROM_PACKET },
11902         { "cigi2", "CIGI 2", CIGI_VERSION_2 },
11903         { "cigi3", "CIGI 3", CIGI_VERSION_3 },
11904         { NULL, NULL, 0 }
11905     };
11906
11907     static enum_val_t cigi_byte_orders[] = {
11908         { "from_packet", "From Packet", CIGI_BYTE_ORDER_FROM_PACKET },
11909         { "big_endian", "Big-Endian", CIGI_BYTE_ORDER_BIG_ENDIAN },
11910         { "little_endian", "Little-Endian", CIGI_BYTE_ORDER_LITTLE_ENDIAN },
11911         { NULL, NULL, 0 }
11912     };
11913
11914     /* Setup protocol subtree array */
11915     static gint *ett[] = {
11916         &ett_cigi,
11917     };
11918
11919     /* Register the protocol name and description */
11920     proto_cigi = proto_register_protocol("Common Image Generator Interface",
11921             "CIGI", "cigi");
11922
11923     /* Required function calls to register the header fields and subtrees used */
11924     proto_register_field_array(proto_cigi, hf, array_length(hf));
11925     proto_register_subtree_array(ett, array_length(ett));
11926
11927     /* Register preferences module */
11928     cigi_module = prefs_register_protocol(proto_cigi, proto_reg_handoff_cigi);
11929
11930     /* Register preferences */
11931     prefs_register_enum_preference(cigi_module, "version", "CIGI version", "The version of CIGI with which to dissect packets", &global_cigi_version, cigi_versions, FALSE);
11932     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);
11933     prefs_register_string_preference(cigi_module, "host", "Host IP", "IPv4 address or hostname of the host", &global_host_ip);
11934     prefs_register_string_preference(cigi_module, "ig", "Image Generator IP", "IPv4 address or hostname of the image generator", &global_ig_ip);
11935
11936 }
11937
11938 /* This function is also called by preferences whenever "Apply" is pressed
11939    (see prefs_register_protocol above) so it should accommodate being called
11940    more than once.
11941 */
11942 void
11943 proto_reg_handoff_cigi(void)
11944 {
11945     static gboolean inited = FALSE;
11946
11947     /* If the CIGI version preference was changed update the cigi version
11948      * information for all packets */
11949     if ( global_cigi_version != CIGI_VERSION_FROM_PACKET ) {
11950         cigi_version = global_cigi_version;
11951     }
11952
11953     /* If the CIGI byte order preference was changed update the cigi byte
11954      * order information for all packets */
11955     if ( global_cigi_byte_order != CIGI_BYTE_ORDER_FROM_PACKET ) {
11956         cigi_byte_order = global_cigi_byte_order;
11957     }
11958
11959     if( !inited ) {
11960
11961         cigi_handle = new_create_dissector_handle(dissect_cigi, proto_cigi);
11962         dissector_add_handle("udp.port", cigi_handle);
11963         dissector_add_handle("tcp.port", cigi_handle);
11964         heur_dissector_add("udp", dissect_cigi_heur, proto_cigi);
11965
11966         inited = TRUE;
11967     }
11968 }