diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-09-19 04:14:26 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-09-19 04:14:26 +0000 |
commit | c4e8a3222648fcf22ca207f1815ebbf7cd144eeb (patch) | |
tree | 93d5c6aa93d9987680dd1adad5685e2ad698f223 /epan/dissectors/packet-cigi.c | |
parent | Adding upstream version 4.2.6. (diff) | |
download | wireshark-upstream.tar.xz wireshark-upstream.zip |
Adding upstream version 4.4.0.upstream/4.4.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'epan/dissectors/packet-cigi.c')
-rw-r--r-- | epan/dissectors/packet-cigi.c | 9150 |
1 files changed, 6565 insertions, 2585 deletions
diff --git a/epan/dissectors/packet-cigi.c b/epan/dissectors/packet-cigi.c index d5549cd5..f5fbefea 100644 --- a/epan/dissectors/packet-cigi.c +++ b/epan/dissectors/packet-cigi.c @@ -1,16 +1,18 @@ /* packet-cigi.c * Routines for Common Image Generator Interface - * (Versions 2 and 3 ) dissection - * CIGI - http://cigi.sourceforge.net/ + * (Versions 2, 3 and 4) dissection + * CIGI 1-3 - http://cigi.sourceforge.net/ * Copyright (c) 2005 The Boeing Company * + * CIGI 4 https://www.sisostandards.org/page/StandardsProducts + * * Wireshark - Network traffic analyzer * By Gerald Combs <gerald@wireshark.org> * Copyright 1998 Gerald Combs * * SPDX-License-Identifier: GPL-2.0-or-later * - * Contributers: + * Contributors: * Kyle J. Harms <kyle.j.harms@boeing.com> * Brian M. Ames <bmames@apk.net> */ @@ -22,132 +24,180 @@ #include <epan/expert.h> #include <epan/prefs.h> #include <epan/to_str.h> +#include <epan/tfs.h> /* Forward declaration */ void proto_register_cigi(void); void proto_reg_handoff_cigi(void); -static gboolean packet_is_cigi(tvbuff_t*); +static bool packet_is_cigi(tvbuff_t*); static void dissect_cigi_pdu(tvbuff_t*, packet_info*, proto_tree*); static void cigi_add_tree(tvbuff_t*, proto_tree*); -static gint cigi_add_data(tvbuff_t*, proto_tree*, gint); +static int cigi_add_data(tvbuff_t*, proto_tree*, int); static void cigi2_add_tree(tvbuff_t*, packet_info*, proto_tree*); -static gint cigi2_add_ig_control(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_entity_control(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_component_control(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_articulated_parts_control(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_rate_control(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_environment_control(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_weather_control(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_view_control(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_sensor_control(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_trajectory_definition(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_special_effect_definition(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_view_definition(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_collision_detection_segment_definition(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_collision_detection_volume_definition(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_height_above_terrain_request(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_line_of_sight_occult_request(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_line_of_sight_range_request(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_height_of_terrain_request(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_start_of_frame(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_height_above_terrain_response(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_line_of_sight_response(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_collision_detection_segment_response(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_sensor_response(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_height_of_terrain_response(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_collision_detection_volume_response(tvbuff_t*, proto_tree*, gint); -static gint cigi2_add_image_generator_message(tvbuff_t*, proto_tree*, gint); +static int cigi2_add_ig_control(tvbuff_t*, proto_tree*, int); +static int cigi2_add_entity_control(tvbuff_t*, proto_tree*, int); +static int cigi2_add_component_control(tvbuff_t*, proto_tree*, int); +static int cigi2_add_articulated_parts_control(tvbuff_t*, proto_tree*, int); +static int cigi2_add_rate_control(tvbuff_t*, proto_tree*, int); +static int cigi2_add_environment_control(tvbuff_t*, proto_tree*, int); +static int cigi2_add_weather_control(tvbuff_t*, proto_tree*, int); +static int cigi2_add_view_control(tvbuff_t*, proto_tree*, int); +static int cigi2_add_sensor_control(tvbuff_t*, proto_tree*, int); +static int cigi2_add_trajectory_definition(tvbuff_t*, proto_tree*, int); +static int cigi2_add_special_effect_definition(tvbuff_t*, proto_tree*, int); +static int cigi2_add_view_definition(tvbuff_t*, proto_tree*, int); +static int cigi2_add_collision_detection_segment_definition(tvbuff_t*, proto_tree*, int); +static int cigi2_add_collision_detection_volume_definition(tvbuff_t*, proto_tree*, int); +static int cigi2_add_height_above_terrain_request(tvbuff_t*, proto_tree*, int); +static int cigi2_add_line_of_sight_occult_request(tvbuff_t*, proto_tree*, int); +static int cigi2_add_line_of_sight_range_request(tvbuff_t*, proto_tree*, int); +static int cigi2_add_height_of_terrain_request(tvbuff_t*, proto_tree*, int); +static int cigi2_add_start_of_frame(tvbuff_t*, proto_tree*, int); +static int cigi2_add_height_above_terrain_response(tvbuff_t*, proto_tree*, int); +static int cigi2_add_line_of_sight_response(tvbuff_t*, proto_tree*, int); +static int cigi2_add_collision_detection_segment_response(tvbuff_t*, proto_tree*, int); +static int cigi2_add_sensor_response(tvbuff_t*, proto_tree*, int); +static int cigi2_add_height_of_terrain_response(tvbuff_t*, proto_tree*, int); +static int cigi2_add_collision_detection_volume_response(tvbuff_t*, proto_tree*, int); +static int cigi2_add_image_generator_message(tvbuff_t*, proto_tree*, int); static void cigi3_add_tree(tvbuff_t*, packet_info*, proto_tree*); -static gint cigi3_add_ig_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_entity_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_conformal_clamped_entity_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_component_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_short_component_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_articulated_part_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_short_articulated_part_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_rate_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_celestial_sphere_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_atmosphere_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_environmental_region_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_weather_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_maritime_surface_conditions_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_wave_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_terrestrial_surface_conditions_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_view_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_sensor_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_motion_tracker_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_earth_reference_model_definition(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_trajectory_definition(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_view_definition(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_collision_detection_segment_definition(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_collision_detection_volume_definition(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_hat_hot_request(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_line_of_sight_segment_request(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_line_of_sight_vector_request(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_position_request(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_environmental_conditions_request(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_start_of_frame(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_hat_hot_response(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_hat_hot_extended_response(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_line_of_sight_response(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_line_of_sight_extended_response(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_sensor_response(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_sensor_extended_response(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_position_response(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_weather_conditions_response(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_aerosol_concentration_response(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_maritime_surface_conditions_response(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_terrestrial_surface_conditions_response(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_collision_detection_segment_notification(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_collision_detection_volume_notification(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_animation_stop_notification(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_event_notification(tvbuff_t*, proto_tree*, gint); -static gint cigi3_add_image_generator_message(tvbuff_t*, proto_tree*, gint); - -static gint cigi3_2_add_ig_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_2_add_rate_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_2_add_hat_hot_request(tvbuff_t*, proto_tree*, gint); -static gint cigi3_2_add_line_of_sight_segment_request(tvbuff_t*, proto_tree*, gint); -static gint cigi3_2_add_line_of_sight_vector_request(tvbuff_t*, proto_tree*, gint); -static gint cigi3_2_add_start_of_frame(tvbuff_t*, proto_tree*, gint); -static gint cigi3_2_add_hat_hot_response(tvbuff_t*, proto_tree*, gint); -static gint cigi3_2_add_hat_hot_extended_response(tvbuff_t*, proto_tree*, gint); -static gint cigi3_2_add_line_of_sight_response(tvbuff_t*, proto_tree*, gint); -static gint cigi3_2_add_line_of_sight_extended_response(tvbuff_t*, proto_tree*, gint); - -static gint cigi3_3_add_ig_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_3_add_entity_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_3_add_component_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_3_add_short_component_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_3_add_symbol_surface_definition(tvbuff_t*, proto_tree*, gint); -static gint cigi3_3_add_symbol_text_definition(tvbuff_t*, proto_tree*, gint); -static gint cigi3_3_add_symbol_circle_definition(tvbuff_t*, proto_tree*, gint); -static gint cigi3_3_add_symbol_line_definition(tvbuff_t*, proto_tree*, gint); -static gint cigi3_3_add_symbol_clone(tvbuff_t*, proto_tree*, gint); -static gint cigi3_3_add_symbol_control(tvbuff_t*, proto_tree*, gint); -static gint cigi3_3_add_short_symbol_control(tvbuff_t*, proto_tree*, gint); +static int cigi3_add_ig_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_entity_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_conformal_clamped_entity_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_component_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_short_component_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_articulated_part_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_short_articulated_part_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_rate_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_celestial_sphere_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_atmosphere_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_environmental_region_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_weather_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_maritime_surface_conditions_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_wave_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_terrestrial_surface_conditions_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_view_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_sensor_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_motion_tracker_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_earth_reference_model_definition(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_trajectory_definition(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_view_definition(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_collision_detection_segment_definition(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_collision_detection_volume_definition(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_hat_hot_request(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_line_of_sight_segment_request(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_line_of_sight_vector_request(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_position_request(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_environmental_conditions_request(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_start_of_frame(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_hat_hot_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_hat_hot_extended_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_line_of_sight_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_line_of_sight_extended_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_sensor_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_sensor_extended_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_position_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_weather_conditions_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_aerosol_concentration_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_maritime_surface_conditions_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_terrestrial_surface_conditions_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_collision_detection_segment_notification(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_collision_detection_volume_notification(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_animation_stop_notification(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_event_notification(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_add_image_generator_message(tvbuff_t*, packet_info*, proto_tree*, void*); + +static int cigi3_3_add_symbol_surface_definition(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_3_add_symbol_text_definition(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_3_add_symbol_circle_definition(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_3_add_symbol_line_definition(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_3_add_symbol_clone(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_3_add_symbol_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi3_3_add_short_symbol_control(tvbuff_t*, packet_info*, proto_tree*, void*); + + +static void cigi4_add_tree(tvbuff_t*, packet_info*, proto_tree*); +static int cigi4_add_ig_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_entity_position(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_conformal_clamped_entity_position(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_component_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_short_component_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_articulated_part_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_short_articulated_part_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_velocity_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_celestial_sphere_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_atmosphere_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_environmental_region_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_weather_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_maritime_surface_conditions_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_wave_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_terrestrial_surface_conditions_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_view_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_sensor_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_motion_tracker_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_earth_reference_model_definition(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_acceleration_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_view_definition(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_collision_detection_segment_definition(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_collision_detection_volume_definition(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_hat_hot_request(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_line_of_sight_segment_request(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_line_of_sight_vector_request(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_position_request(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_environmental_conditions_request(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_symbol_surface_definition(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_symbol_text_definition(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_symbol_circle_definition(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_symbol_polygon_definition(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_symbol_clone(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_symbol_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_short_symbol_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_symbol_circle_textured(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_entity_control(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_animation_control(tvbuff_t*, packet_info*, proto_tree*, void*); + +static int cigi4_add_start_of_frame(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_hat_hot_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_hat_hot_extended_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_line_of_sight_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_line_of_sight_extended_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_sensor_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_sensor_extended_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_position_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_weather_conditions_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_aerosol_concentration_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_maritime_surface_conditions_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_terrestrial_surface_conditions_response(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_collision_detection_segment_notification(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_collision_detection_volume_notification(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_animation_stop_notification(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_event_notification(tvbuff_t*, packet_info*, proto_tree*, void*); +static int cigi4_add_image_generator_message(tvbuff_t*, packet_info*, proto_tree*, void*); /* CIGI Handle */ static dissector_handle_t cigi_handle; +static dissector_table_t cigi3_packet_id_table; +static dissector_table_t cigi4_packet_id_table; + /* Initialize the protocol and registered fields */ -static int proto_cigi = -1; +static int proto_cigi; /* All CIGI Versions */ -static int hf_cigi_src_port = -1; -static int hf_cigi_dest_port = -1; -static int hf_cigi_port = -1; -static int hf_cigi_data = -1; -static int hf_cigi_packet_id = -1; -static int hf_cigi_packet_size = -1; -static int hf_cigi_version = -1; +static int hf_cigi_src_port; +static int hf_cigi_dest_port; +static int hf_cigi_port; +static int hf_cigi_data; +static int hf_cigi_packet_id; +static int hf_cigi_packet_size; +static int hf_cigi_version; -static int hf_cigi_frame_size = -1; +static int hf_cigi_frame_size; -static int hf_cigi_unknown = -1; +static int hf_cigi_unknown; static const true_false_string attach_detach_tfs = { @@ -178,7 +228,7 @@ static const true_false_string visible_occulted_tfs = { /*** Fields for CIGI2 ***/ /* CIGI2 Packet ID */ -static int hf_cigi2_packet_id = -1; +static int hf_cigi2_packet_id; #define CIGI2_PACKET_ID_IG_CONTROL 1 #define CIGI2_PACKET_ID_ENTITY_CONTROL 2 #define CIGI2_PACKET_ID_COMPONENT_CONTROL 3 @@ -260,13 +310,13 @@ static value_string_ext cigi2_packet_id_vals_ext = VALUE_STRING_EXT_INIT(cigi2_p /* CIGI2 IG Control */ #define CIGI2_PACKET_SIZE_IG_CONTROL 16 -static int hf_cigi2_ig_control = -1; -static int hf_cigi2_ig_control_db_number = -1; -static int hf_cigi2_ig_control_ig_mode = -1; -static int hf_cigi2_ig_control_tracking_enable = -1; -static int hf_cigi2_ig_control_boresight = -1; -static int hf_cigi2_ig_control_frame_ctr = -1; -static int hf_cigi2_ig_control_time_tag = -1; +static int hf_cigi2_ig_control; +static int hf_cigi2_ig_control_db_number; +static int hf_cigi2_ig_control_ig_mode; +static int hf_cigi2_ig_control_tracking_enable; +static int hf_cigi2_ig_control_boresight; +static int hf_cigi2_ig_control_frame_ctr; +static int hf_cigi2_ig_control_time_tag; static const value_string cigi2_ig_control_ig_mode_vals[] = { {0, "Standby/Reset"}, @@ -277,22 +327,22 @@ static const value_string cigi2_ig_control_ig_mode_vals[] = { /* CIGI2 Entity Control */ #define CIGI2_PACKET_SIZE_ENTITY_CONTROL 56 -static int hf_cigi2_entity_control = -1; -static int hf_cigi2_entity_control_entity_id = -1; -static int hf_cigi2_entity_control_entity_state = -1; -static int hf_cigi2_entity_control_attach_state = -1; -static int hf_cigi2_entity_control_collision_detect = -1; -static int hf_cigi2_entity_control_effect_state = -1; -static int hf_cigi2_entity_control_type = -1; -static int hf_cigi2_entity_control_parent_id = -1; -static int hf_cigi2_entity_control_opacity = -1; -static int hf_cigi2_entity_control_internal_temp = -1; -static int hf_cigi2_entity_control_roll = -1; -static int hf_cigi2_entity_control_pitch = -1; -static int hf_cigi2_entity_control_heading = -1; -static int hf_cigi2_entity_control_alt = -1; -static int hf_cigi2_entity_control_lat = -1; -static int hf_cigi2_entity_control_lon = -1; +static int hf_cigi2_entity_control; +static int hf_cigi2_entity_control_entity_id; +static int hf_cigi2_entity_control_entity_state; +static int hf_cigi2_entity_control_attach_state; +static int hf_cigi2_entity_control_collision_detect; +static int hf_cigi2_entity_control_effect_state; +static int hf_cigi2_entity_control_type; +static int hf_cigi2_entity_control_parent_id; +static int hf_cigi2_entity_control_opacity; +static int hf_cigi2_entity_control_internal_temp; +static int hf_cigi2_entity_control_roll; +static int hf_cigi2_entity_control_pitch; +static int hf_cigi2_entity_control_heading; +static int hf_cigi2_entity_control_alt; +static int hf_cigi2_entity_control_lat; +static int hf_cigi2_entity_control_lon; static const value_string cigi2_entity_control_entity_state_vals[] = { {0, "Load/Hide"}, @@ -310,13 +360,13 @@ static const value_string cigi2_entity_control_effect_state_vals[] = { /* CIGI2 Component Control */ #define CIGI2_PACKET_SIZE_COMPONENT_CONTROL 20 -static int hf_cigi2_component_control = -1; -static int hf_cigi2_component_control_instance_id = -1; -static int hf_cigi2_component_control_component_class = -1; -static int hf_cigi2_component_control_component_id = -1; -static int hf_cigi2_component_control_component_state = -1; -static int hf_cigi2_component_control_component_val1 = -1; -static int hf_cigi2_component_control_component_val2 = -1; +static int hf_cigi2_component_control; +static int hf_cigi2_component_control_instance_id; +static int hf_cigi2_component_control_component_class; +static int hf_cigi2_component_control_component_id; +static int hf_cigi2_component_control_component_state; +static int hf_cigi2_component_control_component_val1; +static int hf_cigi2_component_control_component_val2; static const value_string cigi2_component_control_component_class_vals[] = { {0, "Entity"}, @@ -330,69 +380,69 @@ static const value_string cigi2_component_control_component_class_vals[] = { /* CIGI2 Articulated Parts Control */ #define CIGI2_PACKET_SIZE_ARTICULATED_PARTS_CONTROL 32 -static int hf_cigi2_articulated_parts_control = -1; -static int hf_cigi2_articulated_parts_control_entity_id = -1; -static int hf_cigi2_articulated_parts_control_part_id = -1; -static int hf_cigi2_articulated_parts_control_part_state = -1; -static int hf_cigi2_articulated_parts_control_xoff_enable = -1; -static int hf_cigi2_articulated_parts_control_yoff_enable = -1; -static int hf_cigi2_articulated_parts_control_zoff_enable = -1; -static int hf_cigi2_articulated_parts_control_roll_enable = -1; -static int hf_cigi2_articulated_parts_control_pitch_enable = -1; -static int hf_cigi2_articulated_parts_control_yaw_enable = -1; -static int hf_cigi2_articulated_parts_control_x_offset = -1; -static int hf_cigi2_articulated_parts_control_y_offset = -1; -static int hf_cigi2_articulated_parts_control_z_offset = -1; -static int hf_cigi2_articulated_parts_control_roll = -1; -static int hf_cigi2_articulated_parts_control_pitch = -1; -static int hf_cigi2_articulated_parts_control_yaw = -1; +static int hf_cigi2_articulated_parts_control; +static int hf_cigi2_articulated_parts_control_entity_id; +static int hf_cigi2_articulated_parts_control_part_id; +static int hf_cigi2_articulated_parts_control_part_state; +static int hf_cigi2_articulated_parts_control_xoff_enable; +static int hf_cigi2_articulated_parts_control_yoff_enable; +static int hf_cigi2_articulated_parts_control_zoff_enable; +static int hf_cigi2_articulated_parts_control_roll_enable; +static int hf_cigi2_articulated_parts_control_pitch_enable; +static int hf_cigi2_articulated_parts_control_yaw_enable; +static int hf_cigi2_articulated_parts_control_x_offset; +static int hf_cigi2_articulated_parts_control_y_offset; +static int hf_cigi2_articulated_parts_control_z_offset; +static int hf_cigi2_articulated_parts_control_roll; +static int hf_cigi2_articulated_parts_control_pitch; +static int hf_cigi2_articulated_parts_control_yaw; /* CIGI2 Rate Control */ #define CIGI2_PACKET_SIZE_RATE_CONTROL 32 -static int hf_cigi2_rate_control = -1; -static int hf_cigi2_rate_control_entity_id = -1; -static int hf_cigi2_rate_control_part_id = -1; -static int hf_cigi2_rate_control_x_rate = -1; -static int hf_cigi2_rate_control_y_rate = -1; -static int hf_cigi2_rate_control_z_rate = -1; -static int hf_cigi2_rate_control_roll_rate = -1; -static int hf_cigi2_rate_control_pitch_rate = -1; -static int hf_cigi2_rate_control_yaw_rate = -1; +static int hf_cigi2_rate_control; +static int hf_cigi2_rate_control_entity_id; +static int hf_cigi2_rate_control_part_id; +static int hf_cigi2_rate_control_x_rate; +static int hf_cigi2_rate_control_y_rate; +static int hf_cigi2_rate_control_z_rate; +static int hf_cigi2_rate_control_roll_rate; +static int hf_cigi2_rate_control_pitch_rate; +static int hf_cigi2_rate_control_yaw_rate; /* CIGI2 Environmental Control */ #define CIGI2_PACKET_SIZE_ENVIRONMENT_CONTROL 36 -static int hf_cigi2_environment_control = -1; -static int hf_cigi2_environment_control_hour = -1; -static int hf_cigi2_environment_control_minute = -1; -static int hf_cigi2_environment_control_ephemeris_enable = -1; -static int hf_cigi2_environment_control_humidity = -1; -static int hf_cigi2_environment_control_modtran_enable = -1; -static int hf_cigi2_environment_control_date = -1; -static int hf_cigi2_environment_control_air_temp = -1; -static int hf_cigi2_environment_control_global_visibility = -1; -static int hf_cigi2_environment_control_wind_speed = -1; -static int hf_cigi2_environment_control_wind_direction = -1; -static int hf_cigi2_environment_control_pressure = -1; -static int hf_cigi2_environment_control_aerosol = -1; +static int hf_cigi2_environment_control; +static int hf_cigi2_environment_control_hour; +static int hf_cigi2_environment_control_minute; +static int hf_cigi2_environment_control_ephemeris_enable; +static int hf_cigi2_environment_control_humidity; +static int hf_cigi2_environment_control_modtran_enable; +static int hf_cigi2_environment_control_date; +static int hf_cigi2_environment_control_air_temp; +static int hf_cigi2_environment_control_global_visibility; +static int hf_cigi2_environment_control_wind_speed; +static int hf_cigi2_environment_control_wind_direction; +static int hf_cigi2_environment_control_pressure; +static int hf_cigi2_environment_control_aerosol; /* CIGI2 Weather Control */ #define CIGI2_PACKET_SIZE_WEATHER_CONTROL 44 -static int hf_cigi2_weather_control = -1; -static int hf_cigi2_weather_control_entity_id = -1; -static int hf_cigi2_weather_control_weather_enable = -1; -static int hf_cigi2_weather_control_scud_enable = -1; -static int hf_cigi2_weather_control_random_winds = -1; -static int hf_cigi2_weather_control_severity = -1; -static int hf_cigi2_weather_control_phenomenon_type = -1; -static int hf_cigi2_weather_control_air_temp = -1; -static int hf_cigi2_weather_control_opacity = -1; -static int hf_cigi2_weather_control_scud_frequency = -1; -static int hf_cigi2_weather_control_coverage = -1; -static int hf_cigi2_weather_control_elevation = -1; -static int hf_cigi2_weather_control_thickness = -1; -static int hf_cigi2_weather_control_transition_band = -1; -static int hf_cigi2_weather_control_wind_speed = -1; -static int hf_cigi2_weather_control_wind_direction = -1; +static int hf_cigi2_weather_control; +static int hf_cigi2_weather_control_entity_id; +static int hf_cigi2_weather_control_weather_enable; +static int hf_cigi2_weather_control_scud_enable; +static int hf_cigi2_weather_control_random_winds; +static int hf_cigi2_weather_control_severity; +static int hf_cigi2_weather_control_phenomenon_type; +static int hf_cigi2_weather_control_air_temp; +static int hf_cigi2_weather_control_opacity; +static int hf_cigi2_weather_control_scud_frequency; +static int hf_cigi2_weather_control_coverage; +static int hf_cigi2_weather_control_elevation; +static int hf_cigi2_weather_control_thickness; +static int hf_cigi2_weather_control_transition_band; +static int hf_cigi2_weather_control_wind_speed; +static int hf_cigi2_weather_control_wind_direction; static const value_string cigi2_weather_control_phenomenon_type_vals[] = { {0, "Use Entity ID"}, @@ -407,40 +457,40 @@ static const value_string cigi2_weather_control_phenomenon_type_vals[] = { /* CIGI2 View Control */ #define CIGI2_PACKET_SIZE_VIEW_CONTROL 32 -static int hf_cigi2_view_control = -1; -static int hf_cigi2_view_control_entity_id = -1; -static int hf_cigi2_view_control_view_id = -1; -static int hf_cigi2_view_control_view_group = -1; -static int hf_cigi2_view_control_xoff_enable = -1; -static int hf_cigi2_view_control_yoff_enable = -1; -static int hf_cigi2_view_control_zoff_enable = -1; -static int hf_cigi2_view_control_roll_enable = -1; -static int hf_cigi2_view_control_pitch_enable = -1; -static int hf_cigi2_view_control_yaw_enable = -1; -static int hf_cigi2_view_control_x_offset = -1; -static int hf_cigi2_view_control_y_offset = -1; -static int hf_cigi2_view_control_z_offset = -1; -static int hf_cigi2_view_control_roll = -1; -static int hf_cigi2_view_control_pitch = -1; -static int hf_cigi2_view_control_yaw = -1; +static int hf_cigi2_view_control; +static int hf_cigi2_view_control_entity_id; +static int hf_cigi2_view_control_view_id; +static int hf_cigi2_view_control_view_group; +static int hf_cigi2_view_control_xoff_enable; +static int hf_cigi2_view_control_yoff_enable; +static int hf_cigi2_view_control_zoff_enable; +static int hf_cigi2_view_control_roll_enable; +static int hf_cigi2_view_control_pitch_enable; +static int hf_cigi2_view_control_yaw_enable; +static int hf_cigi2_view_control_x_offset; +static int hf_cigi2_view_control_y_offset; +static int hf_cigi2_view_control_z_offset; +static int hf_cigi2_view_control_roll; +static int hf_cigi2_view_control_pitch; +static int hf_cigi2_view_control_yaw; /* CIGI2 Sensor Control */ #define CIGI2_PACKET_SIZE_SENSOR_CONTROL 24 -static int hf_cigi2_sensor_control = -1; -static int hf_cigi2_sensor_control_view_id = -1; -static int hf_cigi2_sensor_control_sensor_enable = -1; -static int hf_cigi2_sensor_control_polarity = -1; -static int hf_cigi2_sensor_control_line_dropout = -1; -static int hf_cigi2_sensor_control_sensor_id = -1; -static int hf_cigi2_sensor_control_track_mode = -1; -static int hf_cigi2_sensor_control_auto_gain = -1; -static int hf_cigi2_sensor_control_track_polarity = -1; -static int hf_cigi2_sensor_control_gain = -1; -static int hf_cigi2_sensor_control_level = -1; -static int hf_cigi2_sensor_control_ac_coupling = -1; -static int hf_cigi2_sensor_control_noise = -1; - -static const true_false_string cigi2_sensor_control_polarity_tfs = { +static int hf_cigi2_sensor_control; +static int hf_cigi2_sensor_control_view_id; +static int hf_cigi2_sensor_control_sensor_enable; +static int hf_cigi2_sensor_control_polarity; +static int hf_cigi2_sensor_control_line_dropout; +static int hf_cigi2_sensor_control_sensor_id; +static int hf_cigi2_sensor_control_track_mode; +static int hf_cigi2_sensor_control_auto_gain; +static int hf_cigi2_sensor_control_track_polarity; +static int hf_cigi2_sensor_control_gain; +static int hf_cigi2_sensor_control_level; +static int hf_cigi2_sensor_control_ac_coupling; +static int hf_cigi2_sensor_control_noise; + +static const true_false_string black_white_tfs = { "Black", "White" }; @@ -456,30 +506,30 @@ static const value_string cigi2_sensor_control_track_mode_vals[] = { /* CIGI2 Trajectory Definition */ #define CIGI2_PACKET_SIZE_TRAJECTORY_DEFINITION 16 -static int hf_cigi2_trajectory_definition = -1; -static int hf_cigi2_trajectory_definition_entity_id = -1; -static int hf_cigi2_trajectory_definition_acceleration = -1; -static int hf_cigi2_trajectory_definition_retardation = -1; -static int hf_cigi2_trajectory_definition_terminal_velocity = -1; +static int hf_cigi2_trajectory_definition; +static int hf_cigi2_trajectory_definition_entity_id; +static int hf_cigi2_trajectory_definition_acceleration; +static int hf_cigi2_trajectory_definition_retardation; +static int hf_cigi2_trajectory_definition_terminal_velocity; /* CIGI2 Special Effect Definition */ #define CIGI2_PACKET_SIZE_SPECIAL_EFFECT_DEFINITION 32 -static int hf_cigi2_special_effect_definition = -1; -static int hf_cigi2_special_effect_definition_entity_id = -1; -static int hf_cigi2_special_effect_definition_seq_direction = -1; -static int hf_cigi2_special_effect_definition_color_enable = -1; -static int hf_cigi2_special_effect_definition_red = -1; -static int hf_cigi2_special_effect_definition_green = -1; -static int hf_cigi2_special_effect_definition_blue = -1; -static int hf_cigi2_special_effect_definition_x_scale = -1; -static int hf_cigi2_special_effect_definition_y_scale = -1; -static int hf_cigi2_special_effect_definition_z_scale = -1; -static int hf_cigi2_special_effect_definition_time_scale = -1; -static int hf_cigi2_special_effect_definition_spare = -1; -static int hf_cigi2_special_effect_definition_effect_count = -1; -static int hf_cigi2_special_effect_definition_separation = -1; -static int hf_cigi2_special_effect_definition_burst_interval = -1; -static int hf_cigi2_special_effect_definition_duration = -1; +static int hf_cigi2_special_effect_definition; +static int hf_cigi2_special_effect_definition_entity_id; +static int hf_cigi2_special_effect_definition_seq_direction; +static int hf_cigi2_special_effect_definition_color_enable; +static int hf_cigi2_special_effect_definition_red; +static int hf_cigi2_special_effect_definition_green; +static int hf_cigi2_special_effect_definition_blue; +static int hf_cigi2_special_effect_definition_x_scale; +static int hf_cigi2_special_effect_definition_y_scale; +static int hf_cigi2_special_effect_definition_z_scale; +static int hf_cigi2_special_effect_definition_time_scale; +static int hf_cigi2_special_effect_definition_spare; +static int hf_cigi2_special_effect_definition_effect_count; +static int hf_cigi2_special_effect_definition_separation; +static int hf_cigi2_special_effect_definition_burst_interval; +static int hf_cigi2_special_effect_definition_duration; static const true_false_string cigi2_special_effect_definition_seq_direction_tfs = { "Backward", @@ -488,25 +538,25 @@ static const true_false_string cigi2_special_effect_definition_seq_direction_tfs /* CIGI2 View Definition */ #define CIGI2_PACKET_SIZE_VIEW_DEFINITION 32 -static int hf_cigi2_view_definition = -1; -static int hf_cigi2_view_definition_view_id = -1; -static int hf_cigi2_view_definition_view_group = -1; -static int hf_cigi2_view_definition_view_type = -1; -static int hf_cigi2_view_definition_pixel_rep = -1; -static int hf_cigi2_view_definition_mirror = -1; -static int hf_cigi2_view_definition_tracker_assign = -1; -static int hf_cigi2_view_definition_near_enable = -1; -static int hf_cigi2_view_definition_far_enable = -1; -static int hf_cigi2_view_definition_left_enable = -1; -static int hf_cigi2_view_definition_right_enable = -1; -static int hf_cigi2_view_definition_top_enable = -1; -static int hf_cigi2_view_definition_bottom_enable = -1; -static int hf_cigi2_view_definition_fov_near = -1; -static int hf_cigi2_view_definition_fov_far = -1; -static int hf_cigi2_view_definition_fov_left = -1; -static int hf_cigi2_view_definition_fov_right = -1; -static int hf_cigi2_view_definition_fov_top = -1; -static int hf_cigi2_view_definition_fov_bottom = -1; +static int hf_cigi2_view_definition; +static int hf_cigi2_view_definition_view_id; +static int hf_cigi2_view_definition_view_group; +static int hf_cigi2_view_definition_view_type; +static int hf_cigi2_view_definition_pixel_rep; +static int hf_cigi2_view_definition_mirror; +static int hf_cigi2_view_definition_tracker_assign; +static int hf_cigi2_view_definition_near_enable; +static int hf_cigi2_view_definition_far_enable; +static int hf_cigi2_view_definition_left_enable; +static int hf_cigi2_view_definition_right_enable; +static int hf_cigi2_view_definition_top_enable; +static int hf_cigi2_view_definition_bottom_enable; +static int hf_cigi2_view_definition_fov_near; +static int hf_cigi2_view_definition_fov_far; +static int hf_cigi2_view_definition_fov_left; +static int hf_cigi2_view_definition_fov_right; +static int hf_cigi2_view_definition_fov_top; +static int hf_cigi2_view_definition_fov_bottom; static const value_string cigi2_view_definition_pixel_rep_vals[] = { {0, "No Replicate"}, @@ -529,77 +579,77 @@ static const value_string cigi2_view_definition_mirror_vals[] = { /* CIGI2 Collision Detection Segment Definition */ #define CIGI2_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_DEFINITION 24 -static int hf_cigi2_collision_detection_segment_definition = -1; -static int hf_cigi2_collision_detection_segment_definition_entity_id = -1; -static int hf_cigi2_collision_detection_segment_definition_segment_enable = -1; -static int hf_cigi2_collision_detection_segment_definition_segment_id = -1; -static int hf_cigi2_collision_detection_segment_definition_collision_mask = -1; -static int hf_cigi2_collision_detection_segment_definition_x_start = -1; -static int hf_cigi2_collision_detection_segment_definition_y_start = -1; -static int hf_cigi2_collision_detection_segment_definition_z_start = -1; -static int hf_cigi2_collision_detection_segment_definition_x_end = -1; -static int hf_cigi2_collision_detection_segment_definition_y_end = -1; -static int hf_cigi2_collision_detection_segment_definition_z_end = -1; +static int hf_cigi2_collision_detection_segment_definition; +static int hf_cigi2_collision_detection_segment_definition_entity_id; +static int hf_cigi2_collision_detection_segment_definition_segment_enable; +static int hf_cigi2_collision_detection_segment_definition_segment_id; +static int hf_cigi2_collision_detection_segment_definition_collision_mask; +static int hf_cigi2_collision_detection_segment_definition_x_start; +static int hf_cigi2_collision_detection_segment_definition_y_start; +static int hf_cigi2_collision_detection_segment_definition_z_start; +static int hf_cigi2_collision_detection_segment_definition_x_end; +static int hf_cigi2_collision_detection_segment_definition_y_end; +static int hf_cigi2_collision_detection_segment_definition_z_end; /* CIGI2 Collision Detection Volume Definition */ #define CIGI2_PACKET_SIZE_COLLISION_DETECTION_VOLUME_DEFINITION 20 -static int hf_cigi2_collision_detection_volume_definition = -1; -static int hf_cigi2_collision_detection_volume_definition_entity_id = -1; -static int hf_cigi2_collision_detection_volume_definition_volume_enable = -1; -static int hf_cigi2_collision_detection_volume_definition_volume_id = -1; -static int hf_cigi2_collision_detection_volume_definition_x_offset = -1; -static int hf_cigi2_collision_detection_volume_definition_y_offset = -1; -static int hf_cigi2_collision_detection_volume_definition_z_offset = -1; -static int hf_cigi2_collision_detection_volume_definition_height = -1; -static int hf_cigi2_collision_detection_volume_definition_width = -1; -static int hf_cigi2_collision_detection_volume_definition_depth = -1; +static int hf_cigi2_collision_detection_volume_definition; +static int hf_cigi2_collision_detection_volume_definition_entity_id; +static int hf_cigi2_collision_detection_volume_definition_volume_enable; +static int hf_cigi2_collision_detection_volume_definition_volume_id; +static int hf_cigi2_collision_detection_volume_definition_x_offset; +static int hf_cigi2_collision_detection_volume_definition_y_offset; +static int hf_cigi2_collision_detection_volume_definition_z_offset; +static int hf_cigi2_collision_detection_volume_definition_height; +static int hf_cigi2_collision_detection_volume_definition_width; +static int hf_cigi2_collision_detection_volume_definition_depth; /* CIGI2 Height Above Terrain Request */ #define CIGI2_PACKET_SIZE_HEIGHT_ABOVE_TERRAIN_REQUEST 32 -static int hf_cigi2_height_above_terrain_request = -1; -static int hf_cigi2_height_above_terrain_request_hat_id = -1; -static int hf_cigi2_height_above_terrain_request_alt = -1; -static int hf_cigi2_height_above_terrain_request_lat = -1; -static int hf_cigi2_height_above_terrain_request_lon = -1; +static int hf_cigi2_height_above_terrain_request; +static int hf_cigi2_height_above_terrain_request_hat_id; +static int hf_cigi2_height_above_terrain_request_alt; +static int hf_cigi2_height_above_terrain_request_lat; +static int hf_cigi2_height_above_terrain_request_lon; /* CIGI2 Line of Sight Occult Request */ #define CIGI2_PACKET_SIZE_LINE_OF_SIGHT_OCCULT_REQUEST 56 -static int hf_cigi2_line_of_sight_occult_request = -1; -static int hf_cigi2_line_of_sight_occult_request_los_id = -1; -static int hf_cigi2_line_of_sight_occult_request_source_alt = -1; -static int hf_cigi2_line_of_sight_occult_request_source_lat = -1; -static int hf_cigi2_line_of_sight_occult_request_source_lon = -1; -static int hf_cigi2_line_of_sight_occult_request_dest_alt = -1; -static int hf_cigi2_line_of_sight_occult_request_dest_lat = -1; -static int hf_cigi2_line_of_sight_occult_request_dest_lon = -1; +static int hf_cigi2_line_of_sight_occult_request; +static int hf_cigi2_line_of_sight_occult_request_los_id; +static int hf_cigi2_line_of_sight_occult_request_source_alt; +static int hf_cigi2_line_of_sight_occult_request_source_lat; +static int hf_cigi2_line_of_sight_occult_request_source_lon; +static int hf_cigi2_line_of_sight_occult_request_dest_alt; +static int hf_cigi2_line_of_sight_occult_request_dest_lat; +static int hf_cigi2_line_of_sight_occult_request_dest_lon; /* CIGI2 Line of Sight Range Request */ #define CIGI2_PACKET_SIZE_LINE_OF_SIGHT_RANGE_REQUEST 48 -static int hf_cigi2_line_of_sight_range_request = -1; -static int hf_cigi2_line_of_sight_range_request_los_id = -1; -static int hf_cigi2_line_of_sight_range_request_azimuth = -1; -static int hf_cigi2_line_of_sight_range_request_elevation = -1; -static int hf_cigi2_line_of_sight_range_request_min_range = -1; -static int hf_cigi2_line_of_sight_range_request_max_range = -1; -static int hf_cigi2_line_of_sight_range_request_source_alt = -1; -static int hf_cigi2_line_of_sight_range_request_source_lat = -1; -static int hf_cigi2_line_of_sight_range_request_source_lon = -1; +static int hf_cigi2_line_of_sight_range_request; +static int hf_cigi2_line_of_sight_range_request_los_id; +static int hf_cigi2_line_of_sight_range_request_azimuth; +static int hf_cigi2_line_of_sight_range_request_elevation; +static int hf_cigi2_line_of_sight_range_request_min_range; +static int hf_cigi2_line_of_sight_range_request_max_range; +static int hf_cigi2_line_of_sight_range_request_source_alt; +static int hf_cigi2_line_of_sight_range_request_source_lat; +static int hf_cigi2_line_of_sight_range_request_source_lon; /* CIGI2 Height of Terrain Request */ #define CIGI2_PACKET_SIZE_HEIGHT_OF_TERRAIN_REQUEST 24 -static int hf_cigi2_height_of_terrain_request = -1; -static int hf_cigi2_height_of_terrain_request_hot_id = -1; -static int hf_cigi2_height_of_terrain_request_lat = -1; -static int hf_cigi2_height_of_terrain_request_lon = -1; +static int hf_cigi2_height_of_terrain_request; +static int hf_cigi2_height_of_terrain_request_hot_id; +static int hf_cigi2_height_of_terrain_request_lat; +static int hf_cigi2_height_of_terrain_request_lon; /* CIGI2 Start of Frame */ #define CIGI2_PACKET_SIZE_START_OF_FRAME 16 -static int hf_cigi2_start_of_frame = -1; -static int hf_cigi2_start_of_frame_db_number = -1; -static int hf_cigi2_start_of_frame_ig_status_code = -1; -static int hf_cigi2_start_of_frame_ig_mode = -1; -static int hf_cigi2_start_of_frame_frame_ctr = -1; -static int hf_cigi2_start_of_frame_time_tag = -1; +static int hf_cigi2_start_of_frame; +static int hf_cigi2_start_of_frame_db_number; +static int hf_cigi2_start_of_frame_ig_status_code; +static int hf_cigi2_start_of_frame_ig_mode; +static int hf_cigi2_start_of_frame_frame_ctr; +static int hf_cigi2_start_of_frame_time_tag; static const value_string cigi2_start_of_frame_ig_mode_vals[] = { {0, "Standby/Reset"}, @@ -611,35 +661,35 @@ static const value_string cigi2_start_of_frame_ig_mode_vals[] = { /* CIGI2 Height Above Terrain Response */ #define CIGI2_PACKET_SIZE_HEIGHT_ABOVE_TERRAIN_RESPONSE 24 -static int hf_cigi2_height_above_terrain_response = -1; -static int hf_cigi2_height_above_terrain_response_hat_id = -1; -static int hf_cigi2_height_above_terrain_response_valid = -1; -static int hf_cigi2_height_above_terrain_response_material_type = -1; -static int hf_cigi2_height_above_terrain_response_alt = -1; +static int hf_cigi2_height_above_terrain_response; +static int hf_cigi2_height_above_terrain_response_hat_id; +static int hf_cigi2_height_above_terrain_response_valid; +static int hf_cigi2_height_above_terrain_response_material_type; +static int hf_cigi2_height_above_terrain_response_alt; /* CIGI2 Line of Sight Response */ #define CIGI2_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE 40 -static int hf_cigi2_line_of_sight_response = -1; -static int hf_cigi2_line_of_sight_response_los_id = -1; -static int hf_cigi2_line_of_sight_response_valid = -1; -static int hf_cigi2_line_of_sight_response_occult_response = -1; -static int hf_cigi2_line_of_sight_response_material_type = -1; -static int hf_cigi2_line_of_sight_response_range = -1; -static int hf_cigi2_line_of_sight_response_alt = -1; -static int hf_cigi2_line_of_sight_response_lat = -1; -static int hf_cigi2_line_of_sight_response_lon = -1; +static int hf_cigi2_line_of_sight_response; +static int hf_cigi2_line_of_sight_response_los_id; +static int hf_cigi2_line_of_sight_response_valid; +static int hf_cigi2_line_of_sight_response_occult_response; +static int hf_cigi2_line_of_sight_response_material_type; +static int hf_cigi2_line_of_sight_response_range; +static int hf_cigi2_line_of_sight_response_alt; +static int hf_cigi2_line_of_sight_response_lat; +static int hf_cigi2_line_of_sight_response_lon; /* CIGI2 Collision Detection Segment Response */ #define CIGI2_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_RESPONSE 24 -static int hf_cigi2_collision_detection_segment_response = -1; -static int hf_cigi2_collision_detection_segment_response_entity_id = -1; -static int hf_cigi2_collision_detection_segment_response_segment_id = -1; -static int hf_cigi2_collision_detection_segment_response_contact = -1; -static int hf_cigi2_collision_detection_segment_response_contacted_entity = -1; -static int hf_cigi2_collision_detection_segment_response_material_type = -1; -static int hf_cigi2_collision_detection_segment_response_collision_x = -1; -static int hf_cigi2_collision_detection_segment_response_collision_y = -1; -static int hf_cigi2_collision_detection_segment_response_collision_z = -1; +static int hf_cigi2_collision_detection_segment_response; +static int hf_cigi2_collision_detection_segment_response_entity_id; +static int hf_cigi2_collision_detection_segment_response_segment_id; +static int hf_cigi2_collision_detection_segment_response_contact; +static int hf_cigi2_collision_detection_segment_response_contacted_entity; +static int hf_cigi2_collision_detection_segment_response_material_type; +static int hf_cigi2_collision_detection_segment_response_collision_x; +static int hf_cigi2_collision_detection_segment_response_collision_y; +static int hf_cigi2_collision_detection_segment_response_collision_z; static const true_false_string cigi2_collision_detection_segment_response_contact_tfs = { "Contact with a defined entity", @@ -648,14 +698,14 @@ static const true_false_string cigi2_collision_detection_segment_response_contac /* CIGI2 Sensor Response */ #define CIGI2_PACKET_SIZE_SENSOR_RESPONSE 12 -static int hf_cigi2_sensor_response = -1; -static int hf_cigi2_sensor_response_view_id = -1; -static int hf_cigi2_sensor_response_status = -1; -static int hf_cigi2_sensor_response_sensor_id = -1; -static int hf_cigi2_sensor_response_x_offset = -1; -static int hf_cigi2_sensor_response_y_offset = -1; -static int hf_cigi2_sensor_response_x_size = -1; -static int hf_cigi2_sensor_response_y_size = -1; +static int hf_cigi2_sensor_response; +static int hf_cigi2_sensor_response_view_id; +static int hf_cigi2_sensor_response_status; +static int hf_cigi2_sensor_response_sensor_id; +static int hf_cigi2_sensor_response_x_offset; +static int hf_cigi2_sensor_response_y_offset; +static int hf_cigi2_sensor_response_x_size; +static int hf_cigi2_sensor_response_y_size; static const value_string cigi2_sensor_response_status_vals[] = { {0, "Searching for Target"}, @@ -667,19 +717,19 @@ static const value_string cigi2_sensor_response_status_vals[] = { /* CIGI2 Height of Terrain Response */ #define CIGI2_PACKET_SIZE_HEIGHT_OF_TERRAIN_RESPONSE 24 -static int hf_cigi2_height_of_terrain_response = -1; -static int hf_cigi2_height_of_terrain_response_hot_id = -1; -static int hf_cigi2_height_of_terrain_response_valid = -1; -static int hf_cigi2_height_of_terrain_response_material_type = -1; -static int hf_cigi2_height_of_terrain_response_alt = -1; +static int hf_cigi2_height_of_terrain_response; +static int hf_cigi2_height_of_terrain_response_hot_id; +static int hf_cigi2_height_of_terrain_response_valid; +static int hf_cigi2_height_of_terrain_response_material_type; +static int hf_cigi2_height_of_terrain_response_alt; /* CIGI2 Collision Detection Volume Response */ #define CIGI2_PACKET_SIZE_COLLISION_DETECTION_VOLUME_RESPONSE 8 -static int hf_cigi2_collision_detection_volume_response = -1; -static int hf_cigi2_collision_detection_volume_response_entity_id = -1; -static int hf_cigi2_collision_detection_volume_response_volume_id = -1; -static int hf_cigi2_collision_detection_volume_response_contact = -1; -static int hf_cigi2_collision_detection_volume_response_contact_entity = -1; +static int hf_cigi2_collision_detection_volume_response; +static int hf_cigi2_collision_detection_volume_response_entity_id; +static int hf_cigi2_collision_detection_volume_response_volume_id; +static int hf_cigi2_collision_detection_volume_response_contact; +static int hf_cigi2_collision_detection_volume_response_contact_entity; static const true_false_string cigi2_collision_detection_volume_response_contact_tfs = { "Contact with a defined entity", @@ -687,17 +737,17 @@ static const true_false_string cigi2_collision_detection_volume_response_contact }; /* CIGI2 Image Generator Message */ -static int hf_cigi2_image_generator_message = -1; -static int hf_cigi2_image_generator_message_id = -1; -static int hf_cigi2_image_generator_message_message = -1; +static int hf_cigi2_image_generator_message; +static int hf_cigi2_image_generator_message_id; +static int hf_cigi2_image_generator_message_message; /* CIGI2 User Definable */ -static int hf_cigi2_user_definable = -1; +static int hf_cigi2_user_definable; /*** Fields for CIGI3 ***/ -static int hf_cigi3_byte_swap = -1; +static int hf_cigi3_byte_swap; #define CIGI3_BYTE_SWAP_BIG_ENDIAN 0x8000 #define CIGI3_BYTE_SWAP_LITTLE_ENDIAN 0x0080 @@ -708,7 +758,7 @@ static const value_string cigi3_byte_swap_vals[] = { }; /* CIGI3 Packet ID */ -static int hf_cigi3_packet_id = -1; +static int hf_cigi3_packet_id; #define CIGI3_PACKET_ID_IG_CONTROL 1 #define CIGI3_PACKET_ID_ENTITY_CONTROL 2 #define CIGI3_PACKET_ID_CONFORMAL_CLAMPED_ENTITY_CONTROL 3 @@ -877,12 +927,12 @@ static value_string_ext cigi3_packet_id_vals_ext = VALUE_STRING_EXT_INIT(cigi3_p /* CIGI3 IG Control */ #define CIGI3_PACKET_SIZE_IG_CONTROL 16 -static int hf_cigi3_ig_control = -1; -static int hf_cigi3_ig_control_db_number = -1; -static int hf_cigi3_ig_control_ig_mode = -1; -static int hf_cigi3_ig_control_timestamp_valid = -1; -static int hf_cigi3_ig_control_frame_ctr = -1; -static int hf_cigi3_ig_control_timestamp = -1; +static int hf_cigi3_ig_control; +static int hf_cigi3_ig_control_db_number; +static int hf_cigi3_ig_control_ig_mode; +static int hf_cigi3_ig_control_timestamp_valid; +static int hf_cigi3_ig_control_frame_ctr; +static int hf_cigi3_ig_control_timestamp; static const value_string cigi3_ig_control_ig_mode_vals[] = { {0, "Reset/Standby"}, @@ -893,62 +943,35 @@ static const value_string cigi3_ig_control_ig_mode_vals[] = { /* CIGI3_2 IG Control */ #define CIGI3_2_PACKET_SIZE_IG_CONTROL 24 -static int hf_cigi3_2_ig_control = -1; -static int hf_cigi3_2_ig_control_db_number = -1; -static int hf_cigi3_2_ig_control_ig_mode = -1; -static int hf_cigi3_2_ig_control_timestamp_valid = -1; -static int hf_cigi3_2_ig_control_minor_version = -1; -static int hf_cigi3_2_ig_control_host_frame_number = -1; -static int hf_cigi3_2_ig_control_timestamp = -1; -static int hf_cigi3_2_ig_control_last_ig_frame_number = -1; - -static const value_string cigi3_2_ig_control_ig_mode_vals[] = { - {0, "Reset/Standby"}, - {1, "Operate"}, - {2, "Debug"}, - {0, NULL}, -}; +static int hf_cigi3_2_ig_control_minor_version; +static int hf_cigi3_2_ig_control_host_frame_number; +static int hf_cigi3_2_ig_control_last_ig_frame_number; /* CIGI3_3 IG Control */ #define CIGI3_3_PACKET_SIZE_IG_CONTROL 24 -static int hf_cigi3_3_ig_control = -1; -static int hf_cigi3_3_ig_control_db_number = -1; -static int hf_cigi3_3_ig_control_ig_mode = -1; -static int hf_cigi3_3_ig_control_timestamp_valid = -1; -static int hf_cigi3_3_ig_control_extrapolation_enable = -1; -static int hf_cigi3_3_ig_control_minor_version = -1; -/* static int hf_cigi3_3_ig_control_host_frame_number = -1; */ -/* static int hf_cigi3_3_ig_control_timestamp = -1; */ -/* static int hf_cigi3_3_ig_control_last_ig_frame_number = -1; */ - -static const value_string cigi3_3_ig_control_ig_mode_vals[] = { - {0, "Reset/Standby"}, - {1, "Operate"}, - {2, "Debug"}, - {0, NULL}, -}; +static int hf_cigi3_3_ig_control_extrapolation_enable; /* CIGI3 Entity Control */ #define CIGI3_PACKET_SIZE_ENTITY_CONTROL 48 -static int hf_cigi3_entity_control = -1; -static int hf_cigi3_entity_control_entity_id = -1; -static int hf_cigi3_entity_control_entity_state = -1; -static int hf_cigi3_entity_control_attach_state = -1; -static int hf_cigi3_entity_control_collision_detection_request = -1; -static int hf_cigi3_entity_control_inherit_alpha = -1; -static int hf_cigi3_entity_control_ground_ocean_clamp = -1; -static int hf_cigi3_entity_control_animation_direction = -1; -static int hf_cigi3_entity_control_animation_loop_mode = -1; -static int hf_cigi3_entity_control_animation_state = -1; -static int hf_cigi3_entity_control_alpha = -1; -static int hf_cigi3_entity_control_entity_type = -1; -static int hf_cigi3_entity_control_parent_id = -1; -static int hf_cigi3_entity_control_roll = -1; -static int hf_cigi3_entity_control_pitch = -1; -static int hf_cigi3_entity_control_yaw = -1; -static int hf_cigi3_entity_control_lat_xoff = -1; -static int hf_cigi3_entity_control_lon_yoff = -1; -static int hf_cigi3_entity_control_alt_zoff = -1; +static int hf_cigi3_entity_control; +static int hf_cigi3_entity_control_entity_id; +static int hf_cigi3_entity_control_entity_state; +static int hf_cigi3_entity_control_attach_state; +static int hf_cigi3_entity_control_collision_detection_request; +static int hf_cigi3_entity_control_inherit_alpha; +static int hf_cigi3_entity_control_ground_ocean_clamp; +static int hf_cigi3_entity_control_animation_direction; +static int hf_cigi3_entity_control_animation_loop_mode; +static int hf_cigi3_entity_control_animation_state; +static int hf_cigi3_entity_control_alpha; +static int hf_cigi3_entity_control_entity_type; +static int hf_cigi3_entity_control_parent_id; +static int hf_cigi3_entity_control_roll; +static int hf_cigi3_entity_control_pitch; +static int hf_cigi3_entity_control_yaw; +static int hf_cigi3_entity_control_lat_xoff; +static int hf_cigi3_entity_control_lon_yoff; +static int hf_cigi3_entity_control_alt_zoff; static const value_string cigi3_entity_control_entity_state_vals[] = { {0, "Inactive/Standby"}, @@ -962,7 +985,7 @@ static const true_false_string cigi3_entity_control_collision_detection_request_ "No Request" }; -static const true_false_string cigi3_entity_control_inherit_alpha_tfs = { +static const true_false_string inherited_not_inherited_tfs = { "Inherited", "Not Inherited" }; @@ -993,48 +1016,101 @@ static const value_string cigi3_entity_control_animation_state_vals[] = { }; /* CIGI3_3 Entity Control */ -/* static int hf_cigi3_3_entity_control = -1; */ -static int hf_cigi3_3_entity_control_entity_id = -1; -static int hf_cigi3_3_entity_control_entity_state = -1; -static int hf_cigi3_3_entity_control_attach_state = -1; -static int hf_cigi3_3_entity_control_collision_detection_request = -1; -static int hf_cigi3_3_entity_control_inherit_alpha = -1; -static int hf_cigi3_3_entity_control_ground_ocean_clamp = -1; -static int hf_cigi3_3_entity_control_animation_direction = -1; -static int hf_cigi3_3_entity_control_animation_loop_mode = -1; -static int hf_cigi3_3_entity_control_animation_state = -1; -static int hf_cigi3_3_entity_control_extrapolation_enable = -1; -static int hf_cigi3_3_entity_control_alpha = -1; -static int hf_cigi3_3_entity_control_entity_type = -1; -static int hf_cigi3_3_entity_control_parent_id = -1; -static int hf_cigi3_3_entity_control_roll = -1; -static int hf_cigi3_3_entity_control_pitch = -1; -static int hf_cigi3_3_entity_control_yaw = -1; -static int hf_cigi3_3_entity_control_lat_xoff = -1; -static int hf_cigi3_3_entity_control_lon_yoff = -1; -static int hf_cigi3_3_entity_control_alt_zoff = -1; +static int hf_cigi3_3_entity_control_extrapolation_enable; + +/* CIGI4 Entity Control */ +/* Subset of previous packet by this name containing parameters expected to + * change infrequently.*/ +#define CIGI4_PACKET_SIZE_ENTITY_CONTROL 16 +static int hf_cigi4_entity_control; +static int hf_cigi4_entity_control_entity_state; +static int hf_cigi4_entity_control_collision_reporting_enable; +static int hf_cigi4_entity_control_inherit_alpha; +static int hf_cigi4_entity_control_smooting_enable; +static int hf_cigi4_entity_control_extended_entity_type; +static int hf_cigi4_entity_control_alpha; +static int hf_cigi4_entity_control_entity_id; +static int hf_cigi4_entity_control_entity_kind; +static int hf_cigi4_entity_control_entity_domain; +static int hf_cigi4_entity_control_entity_country; +static int hf_cigi4_entity_control_entity_category; +static int hf_cigi4_entity_control_entity_subcategory; +static int hf_cigi4_entity_control_entity_specific; +static int hf_cigi4_entity_control_entity_extra; + +static const value_string cigi4_entity_control_entity_state_vals[] = { + {0, "Inactive/Standby"}, + {1, "Active"}, + {2, "Destroyed"}, + {0, NULL}, +}; + +static const true_false_string cigi4_entity_control_inherit_alpha_tfs = { + "Not Inherited", + "Inherited" +}; + +static const true_false_string tfs_entity_control_extended_entity_type = { + "Short", + "Extended" +}; + + +#define CIGI4_PACKET_SIZE_ANIMATION_CONTROL 16 +static int hf_cigi4_animation_control; +static int hf_cigi4_animation_control_state; +static int hf_cigi4_animation_control_frame_position_reset; +static int hf_cigi4_animation_control_loop_mode; +static int hf_cigi4_animation_control_inherit_alpha; +static int hf_cigi4_animation_control_alpha; +static int hf_cigi4_animation_control_entity_id; +static int hf_cigi4_animation_control_animation_id; +static int hf_cigi4_animation_control_animation_speed; + +static const true_false_string cigi4_animation_control_state_tfs = { + "Stop", + "Play" +}; + +static const true_false_string cigi4_animation_control_state_positon_reset_tfs = { + "Continue", + "Reset" +}; + +static const true_false_string cigi4_animation_control_state_loop_mode = { + "One-Shot", + "Continuous" +}; + + +static const true_false_string cigi4_animation_control_state_inherit_alpha = { + "Not Inherited", + "Inherited" +}; + + /* CIGI3 Conformal Clamped Entity Control */ #define CIGI3_PACKET_SIZE_CONFORMAL_CLAMPED_ENTITY_CONTROL 24 -static int hf_cigi3_conformal_clamped_entity_control = -1; -static int hf_cigi3_conformal_clamped_entity_control_entity_id = -1; -static int hf_cigi3_conformal_clamped_entity_control_yaw = -1; -static int hf_cigi3_conformal_clamped_entity_control_lat = -1; -static int hf_cigi3_conformal_clamped_entity_control_lon = -1; +static int hf_cigi3_conformal_clamped_entity_control; +static int hf_cigi3_conformal_clamped_entity_control_entity_id; +static int hf_cigi3_conformal_clamped_entity_control_yaw; +static int hf_cigi3_conformal_clamped_entity_control_lat; +static int hf_cigi3_conformal_clamped_entity_control_lon; /* CIGI3 Component Control */ #define CIGI3_PACKET_SIZE_COMPONENT_CONTROL 32 -static int hf_cigi3_component_control = -1; -static int hf_cigi3_component_control_component_id = -1; -static int hf_cigi3_component_control_instance_id = -1; -static int hf_cigi3_component_control_component_class = -1; -static int hf_cigi3_component_control_component_state = -1; -static int hf_cigi3_component_control_data_1 = -1; -static int hf_cigi3_component_control_data_2 = -1; -static int hf_cigi3_component_control_data_3 = -1; -static int hf_cigi3_component_control_data_4 = -1; -static int hf_cigi3_component_control_data_5 = -1; -static int hf_cigi3_component_control_data_6 = -1; +static int hf_cigi3_component_control; +static int hf_cigi3_component_control_component_id; +static int hf_cigi3_component_control_instance_id; +static int hf_cigi3_component_control_component_class; +static int hf_cigi3_component_control_component_state; +static int hf_cigi3_component_control_data_1; +static int hf_cigi3_component_control_data_2; +static int hf_cigi3_component_control_data_3; +static int hf_cigi3_component_control_data_4; +static int hf_cigi3_component_control_data_5; +static int hf_cigi3_component_control_data_6; static const value_string cigi3_component_control_component_class_vals[] = { {0, "Entity"}, @@ -1055,17 +1131,7 @@ static const value_string cigi3_component_control_component_class_vals[] = { }; /* CIGI3_3 Component Control */ -/* static int hf_cigi3_3_component_control = -1; */ -static int hf_cigi3_3_component_control_component_id = -1; -static int hf_cigi3_3_component_control_instance_id = -1; -static int hf_cigi3_3_component_control_component_class = -1; -static int hf_cigi3_3_component_control_component_state = -1; -static int hf_cigi3_3_component_control_data_1 = -1; -static int hf_cigi3_3_component_control_data_2 = -1; -static int hf_cigi3_3_component_control_data_3 = -1; -static int hf_cigi3_3_component_control_data_4 = -1; -static int hf_cigi3_3_component_control_data_5 = -1; -static int hf_cigi3_3_component_control_data_6 = -1; +static int hf_cigi3_3_component_control_component_class; static const value_string cigi3_3_component_control_component_class_vals[] = { {0, "Entity"}, @@ -1089,13 +1155,13 @@ static const value_string cigi3_3_component_control_component_class_vals[] = { /* CIGI3 Short Component Control */ #define CIGI3_PACKET_SIZE_SHORT_COMPONENT_CONTROL 16 -static int hf_cigi3_short_component_control = -1; -static int hf_cigi3_short_component_control_component_id = -1; -static int hf_cigi3_short_component_control_instance_id = -1; -static int hf_cigi3_short_component_control_component_class = -1; -static int hf_cigi3_short_component_control_component_state = -1; -static int hf_cigi3_short_component_control_data_1 = -1; -static int hf_cigi3_short_component_control_data_2 = -1; +static int hf_cigi3_short_component_control; +static int hf_cigi3_short_component_control_component_id; +static int hf_cigi3_short_component_control_instance_id; +static int hf_cigi3_short_component_control_component_class; +static int hf_cigi3_short_component_control_component_state; +static int hf_cigi3_short_component_control_data_1; +static int hf_cigi3_short_component_control_data_2; static const value_string cigi3_short_component_control_component_class_vals[] = { {0, "Entity"}, @@ -1116,13 +1182,7 @@ static const value_string cigi3_short_component_control_component_class_vals[] = }; /* CIGI3_3 Short Component Control */ -/* static int hf_cigi3_3_short_component_control = -1; */ -static int hf_cigi3_3_short_component_control_component_id = -1; -static int hf_cigi3_3_short_component_control_instance_id = -1; -static int hf_cigi3_3_short_component_control_component_class = -1; -static int hf_cigi3_3_short_component_control_component_state = -1; -static int hf_cigi3_3_short_component_control_data_1 = -1; -static int hf_cigi3_3_short_component_control_data_2 = -1; +static int hf_cigi3_3_short_component_control_component_class; static const value_string cigi3_3_short_component_control_component_class_vals[] = { {0, "Entity"}, @@ -1146,35 +1206,42 @@ static const value_string cigi3_3_short_component_control_component_class_vals[] /* CIGI3 Articulated Part Control */ #define CIGI3_PACKET_SIZE_ARTICULATED_PART_CONTROL 32 -static int hf_cigi3_articulated_part_control = -1; -static int hf_cigi3_articulated_part_control_entity_id = -1; -static int hf_cigi3_articulated_part_control_part_id = -1; -static int hf_cigi3_articulated_part_control_part_enable = -1; -static int hf_cigi3_articulated_part_control_xoff_enable = -1; -static int hf_cigi3_articulated_part_control_yoff_enable = -1; -static int hf_cigi3_articulated_part_control_zoff_enable = -1; -static int hf_cigi3_articulated_part_control_roll_enable = -1; -static int hf_cigi3_articulated_part_control_pitch_enable = -1; -static int hf_cigi3_articulated_part_control_yaw_enable = -1; -static int hf_cigi3_articulated_part_control_xoff = -1; -static int hf_cigi3_articulated_part_control_yoff = -1; -static int hf_cigi3_articulated_part_control_zoff = -1; -static int hf_cigi3_articulated_part_control_roll = -1; -static int hf_cigi3_articulated_part_control_pitch = -1; -static int hf_cigi3_articulated_part_control_yaw = -1; +static int hf_cigi3_articulated_part_control; +static int hf_cigi3_articulated_part_control_entity_id; +static int hf_cigi3_articulated_part_control_part_id; +static int hf_cigi3_articulated_part_control_part_enable; +static int hf_cigi3_articulated_part_control_xoff_enable; +static int hf_cigi3_articulated_part_control_yoff_enable; +static int hf_cigi3_articulated_part_control_zoff_enable; +static int hf_cigi3_articulated_part_control_roll_enable; +static int hf_cigi3_articulated_part_control_pitch_enable; +static int hf_cigi3_articulated_part_control_yaw_enable; +static int hf_cigi3_articulated_part_control_xoff; +static int hf_cigi3_articulated_part_control_yoff; +static int hf_cigi3_articulated_part_control_zoff; +static int hf_cigi3_articulated_part_control_roll; +static int hf_cigi3_articulated_part_control_pitch; +static int hf_cigi3_articulated_part_control_yaw; + +/* CIGI4 Articulated Part Control */ +#define CIGI4_PACKET_SIZE_ARTICULATED_PART_CONTROL 32 +static int hf_cigi4_articulated_part_control_part_enable_flags; + +static int ett_cigi4_articulated_part_control_part_enable_flags; + /* CIGI3 Short Articulated Part Control */ #define CIGI3_PACKET_SIZE_SHORT_ARTICULATED_PART_CONTROL 16 -static int hf_cigi3_short_articulated_part_control = -1; -static int hf_cigi3_short_articulated_part_control_entity_id = -1; -static int hf_cigi3_short_articulated_part_control_part_id_1 = -1; -static int hf_cigi3_short_articulated_part_control_part_id_2 = -1; -static int hf_cigi3_short_articulated_part_control_dof_select_1 = -1; -static int hf_cigi3_short_articulated_part_control_dof_select_2 = -1; -static int hf_cigi3_short_articulated_part_control_part_enable_1 = -1; -static int hf_cigi3_short_articulated_part_control_part_enable_2 = -1; -static int hf_cigi3_short_articulated_part_control_dof_1 = -1; -static int hf_cigi3_short_articulated_part_control_dof_2 = -1; +static int hf_cigi3_short_articulated_part_control; +static int hf_cigi3_short_articulated_part_control_entity_id; +static int hf_cigi3_short_articulated_part_control_part_id_1; +static int hf_cigi3_short_articulated_part_control_part_id_2; +static int hf_cigi3_short_articulated_part_control_dof_select_1; +static int hf_cigi3_short_articulated_part_control_dof_select_2; +static int hf_cigi3_short_articulated_part_control_part_enable_1; +static int hf_cigi3_short_articulated_part_control_part_enable_2; +static int hf_cigi3_short_articulated_part_control_dof_1; +static int hf_cigi3_short_articulated_part_control_dof_2; static const value_string cigi3_short_articulated_part_control_dof_select_vals[] = { {0, "Not Used"}, @@ -1187,79 +1254,103 @@ static const value_string cigi3_short_articulated_part_control_dof_select_vals[] {0, NULL}, }; +/* CIGI4 Short Articulated Part Control */ +#define CIGI4_PACKET_SIZE_SHORT_ARTICULATED_PART_CONTROL 24 +static int hf_cigi4_short_articulated_part_control_part_enable_flags; + +static int ett_cigi4_short_articulated_part_control_part_enable_flags; + /* CIGI3 Rate Control */ #define CIGI3_PACKET_SIZE_RATE_CONTROL 32 -static int hf_cigi3_rate_control = -1; -static int hf_cigi3_rate_control_entity_id = -1; -static int hf_cigi3_rate_control_part_id = -1; -static int hf_cigi3_rate_control_apply_to_part = -1; -static int hf_cigi3_rate_control_x_rate = -1; -static int hf_cigi3_rate_control_y_rate = -1; -static int hf_cigi3_rate_control_z_rate = -1; -static int hf_cigi3_rate_control_roll_rate = -1; -static int hf_cigi3_rate_control_pitch_rate = -1; -static int hf_cigi3_rate_control_yaw_rate = -1; - -/* CIGI3_2 Rate Control */ -#define CIGI3_2_PACKET_SIZE_RATE_CONTROL 32 -static int hf_cigi3_2_rate_control = -1; -static int hf_cigi3_2_rate_control_entity_id = -1; -static int hf_cigi3_2_rate_control_part_id = -1; -static int hf_cigi3_2_rate_control_apply_to_part = -1; -static int hf_cigi3_2_rate_control_coordinate_system = -1; -static int hf_cigi3_2_rate_control_x_rate = -1; -static int hf_cigi3_2_rate_control_y_rate = -1; -static int hf_cigi3_2_rate_control_z_rate = -1; -static int hf_cigi3_2_rate_control_roll_rate = -1; -static int hf_cigi3_2_rate_control_pitch_rate = -1; -static int hf_cigi3_2_rate_control_yaw_rate = -1; - -static const true_false_string cigi3_2_rate_control_coord_sys_select_vals = { +static int hf_cigi3_rate_control; +static int hf_cigi3_rate_control_entity_id; +static int hf_cigi3_rate_control_part_id; +static int hf_cigi3_rate_control_apply_to_part; +static int hf_cigi3_2_rate_control_coordinate_system; +static int hf_cigi3_rate_control_x_rate; +static int hf_cigi3_rate_control_y_rate; +static int hf_cigi3_rate_control_z_rate; +static int hf_cigi3_rate_control_roll_rate; +static int hf_cigi3_rate_control_pitch_rate; +static int hf_cigi3_rate_control_yaw_rate; + +static const true_false_string local_worldparent_tfs = { "Local", "World/Parent" }; +/* CIGI4 Velocity Control */ +/* Rate Control packet renamed. */ +#define CIGI4_PACKET_SIZE_VELOCITY_CONTROL 32 + +static int hf_cigi4_velocity_control; +static int hf_cigi4_velocity_control_entity_id; +static int hf_cigi4_velocity_control_part_id; +static int hf_cigi4_velocity_control_flags; +static int hf_cigi4_velocity_control_apply_to_part; +static int hf_cigi4_velocity_control_coordinate_system; +static int hf_cigi4_velocity_control_x_rate; +static int hf_cigi4_velocity_control_y_rate; +static int hf_cigi4_velocity_control_z_rate; +static int hf_cigi4_velocity_control_roll_rate; +static int hf_cigi4_velocity_control_pitch_rate; +static int hf_cigi4_velocity_control_yaw_rate; + +static int ett_cigi4_velocity_control_flags; + + /* CIGI3 Celestial Sphere Control */ #define CIGI3_PACKET_SIZE_CELESTIAL_SPHERE_CONTROL 16 -static int hf_cigi3_celestial_sphere_control = -1; -static int hf_cigi3_celestial_sphere_control_hour = -1; -static int hf_cigi3_celestial_sphere_control_minute = -1; -static int hf_cigi3_celestial_sphere_control_ephemeris_enable = -1; -static int hf_cigi3_celestial_sphere_control_sun_enable = -1; -static int hf_cigi3_celestial_sphere_control_moon_enable = -1; -static int hf_cigi3_celestial_sphere_control_star_enable = -1; -static int hf_cigi3_celestial_sphere_control_date_time_valid = -1; -static int hf_cigi3_celestial_sphere_control_date = -1; -static int hf_cigi3_celestial_sphere_control_star_intensity = -1; +static int hf_cigi3_celestial_sphere_control; +static int hf_cigi3_celestial_sphere_control_hour; +static int hf_cigi3_celestial_sphere_control_minute; +static int hf_cigi3_celestial_sphere_control_ephemeris_enable; +static int hf_cigi3_celestial_sphere_control_sun_enable; +static int hf_cigi3_celestial_sphere_control_moon_enable; +static int hf_cigi3_celestial_sphere_control_star_enable; +static int hf_cigi3_celestial_sphere_control_date_time_valid; +static int hf_cigi3_celestial_sphere_control_date; +static int hf_cigi3_celestial_sphere_control_star_intensity; + +/* CIGI4 Celestial Sphere Control */ +#define CIGI4_PACKET_SIZE_CELESTIAL_SPHERE_CONTROL 24 +static int hf_cigi4_celestial_sphere_control_enable_flags; +static int hf_cigi4_celestial_sphere_control_seconds; +static int hf_cigi4_celestial_sphere_control_date; + +static int ett_cigi4_celestial_sphere_control_flags; /* CIGI3 Atmosphere Control */ #define CIGI3_PACKET_SIZE_ATMOSPHERE_CONTROL 32 -static int hf_cigi3_atmosphere_control = -1; -static int hf_cigi3_atmosphere_control_atmospheric_model_enable = -1; -static int hf_cigi3_atmosphere_control_humidity = -1; -static int hf_cigi3_atmosphere_control_air_temp = -1; -static int hf_cigi3_atmosphere_control_visibility_range = -1; -static int hf_cigi3_atmosphere_control_horiz_wind = -1; -static int hf_cigi3_atmosphere_control_vert_wind = -1; -static int hf_cigi3_atmosphere_control_wind_direction = -1; -static int hf_cigi3_atmosphere_control_barometric_pressure = -1; +static int hf_cigi3_atmosphere_control; +static int hf_cigi3_atmosphere_control_atmospheric_model_enable; +static int hf_cigi3_atmosphere_control_humidity; +static int hf_cigi3_atmosphere_control_air_temp; +static int hf_cigi3_atmosphere_control_visibility_range; +static int hf_cigi3_atmosphere_control_horiz_wind; +static int hf_cigi3_atmosphere_control_vert_wind; +static int hf_cigi3_atmosphere_control_wind_direction; +static int hf_cigi3_atmosphere_control_barometric_pressure; + +/* CIGI4 Atmosphere Control */ +#define CIGI4_PACKET_SIZE_ATMOSPHERE_CONTROL 32 /* CIGI3 Environmental Region Control */ #define CIGI3_PACKET_SIZE_ENVIRONMENTAL_REGION_CONTROL 48 -static int hf_cigi3_environmental_region_control = -1; -static int hf_cigi3_environmental_region_control_region_id = -1; -static int hf_cigi3_environmental_region_control_region_state = -1; -static int hf_cigi3_environmental_region_control_merge_weather = -1; -static int hf_cigi3_environmental_region_control_merge_aerosol = -1; -static int hf_cigi3_environmental_region_control_merge_maritime = -1; -static int hf_cigi3_environmental_region_control_merge_terrestrial = -1; -static int hf_cigi3_environmental_region_control_lat = -1; -static int hf_cigi3_environmental_region_control_lon = -1; -static int hf_cigi3_environmental_region_control_size_x = -1; -static int hf_cigi3_environmental_region_control_size_y = -1; -static int hf_cigi3_environmental_region_control_corner_radius = -1; -static int hf_cigi3_environmental_region_control_rotation = -1; -static int hf_cigi3_environmental_region_control_transition_perimeter = -1; +static int hf_cigi3_environmental_region_control; +static int hf_cigi3_environmental_region_control_region_id; +static int hf_cigi3_environmental_region_control_region_state; +static int hf_cigi3_environmental_region_control_merge_weather; +static int hf_cigi3_environmental_region_control_merge_aerosol; +static int hf_cigi3_environmental_region_control_merge_maritime; +static int hf_cigi3_environmental_region_control_merge_terrestrial; +static int hf_cigi3_environmental_region_control_lat; +static int hf_cigi3_environmental_region_control_lon; +static int hf_cigi3_environmental_region_control_size_x; +static int hf_cigi3_environmental_region_control_size_y; +static int hf_cigi3_environmental_region_control_corner_radius; +static int hf_cigi3_environmental_region_control_rotation; +static int hf_cigi3_environmental_region_control_transition_perimeter; static const value_string cigi3_environmental_region_control_region_state_vals[] = { {0, "Inactive"}, @@ -1273,31 +1364,35 @@ static const true_false_string cigi3_environmental_region_control_merge_properti "Use Last" }; + +/* CIGI4 Environmental Region Control */ +#define CIGI4_PACKET_SIZE_ENVIRONMENTAL_REGION_CONTROL 48 + /* CIGI3 Weather Control */ #define CIGI3_PACKET_SIZE_WEATHER_CONTROL 56 -static int hf_cigi3_weather_control = -1; -static int hf_cigi3_weather_control_entity_region_id = -1; -static int hf_cigi3_weather_control_layer_id = -1; -static int hf_cigi3_weather_control_humidity = -1; -static int hf_cigi3_weather_control_weather_enable = -1; -static int hf_cigi3_weather_control_scud_enable = -1; -static int hf_cigi3_weather_control_random_winds_enable = -1; -static int hf_cigi3_weather_control_random_lightning_enable = -1; -static int hf_cigi3_weather_control_cloud_type = -1; -static int hf_cigi3_weather_control_scope = -1; -static int hf_cigi3_weather_control_severity = -1; -static int hf_cigi3_weather_control_air_temp = -1; -static int hf_cigi3_weather_control_visibility_range = -1; -static int hf_cigi3_weather_control_scud_frequency = -1; -static int hf_cigi3_weather_control_coverage = -1; -static int hf_cigi3_weather_control_base_elevation = -1; -static int hf_cigi3_weather_control_thickness = -1; -static int hf_cigi3_weather_control_transition_band = -1; -static int hf_cigi3_weather_control_horiz_wind = -1; -static int hf_cigi3_weather_control_vert_wind = -1; -static int hf_cigi3_weather_control_wind_direction = -1; -static int hf_cigi3_weather_control_barometric_pressure = -1; -static int hf_cigi3_weather_control_aerosol_concentration = -1; +static int hf_cigi3_weather_control; +static int hf_cigi3_weather_control_entity_region_id; +static int hf_cigi3_weather_control_layer_id; +static int hf_cigi3_weather_control_humidity; +static int hf_cigi3_weather_control_weather_enable; +static int hf_cigi3_weather_control_scud_enable; +static int hf_cigi3_weather_control_random_winds_enable; +static int hf_cigi3_weather_control_random_lightning_enable; +static int hf_cigi3_weather_control_cloud_type; +static int hf_cigi3_weather_control_scope; +static int hf_cigi3_weather_control_severity; +static int hf_cigi3_weather_control_air_temp; +static int hf_cigi3_weather_control_visibility_range; +static int hf_cigi3_weather_control_scud_frequency; +static int hf_cigi3_weather_control_coverage; +static int hf_cigi3_weather_control_base_elevation; +static int hf_cigi3_weather_control_thickness; +static int hf_cigi3_weather_control_transition_band; +static int hf_cigi3_weather_control_horiz_wind; +static int hf_cigi3_weather_control_vert_wind; +static int hf_cigi3_weather_control_wind_direction; +static int hf_cigi3_weather_control_barometric_pressure; +static int hf_cigi3_weather_control_aerosol_concentration; static const value_string cigi3_weather_control_layer_id_vals[] = { {0, "Ground Fog"}, @@ -1340,16 +1435,24 @@ static const value_string cigi3_weather_control_scope_vals[] = { {0, NULL}, }; + +/* CIGI4 Weather Control */ +#define CIGI4_PACKET_SIZE_WEATHER_CONTROL 72 +static int hf_cigi4_weather_control_flags; +static int hf_cigi4_weather_control_top_scud_enable; +static int hf_cigi4_weather_control_top_scud_freq; +static int hf_cigi4_weather_control_top_transition_band; + /* CIGI3 Maritime Surface Conditions Control */ #define CIGI3_PACKET_SIZE_MARITIME_SURFACE_CONDITIONS_CONTROL 24 -static int hf_cigi3_maritime_surface_conditions_control = -1; -static int hf_cigi3_maritime_surface_conditions_control_entity_region_id = -1; -static int hf_cigi3_maritime_surface_conditions_control_surface_conditions_enable = -1; -static int hf_cigi3_maritime_surface_conditions_control_whitecap_enable = -1; -static int hf_cigi3_maritime_surface_conditions_control_scope = -1; -static int hf_cigi3_maritime_surface_conditions_control_sea_surface_height = -1; -static int hf_cigi3_maritime_surface_conditions_control_surface_water_temp = -1; -static int hf_cigi3_maritime_surface_conditions_control_surface_clarity = -1; +static int hf_cigi3_maritime_surface_conditions_control; +static int hf_cigi3_maritime_surface_conditions_control_entity_region_id; +static int hf_cigi3_maritime_surface_conditions_control_surface_conditions_enable; +static int hf_cigi3_maritime_surface_conditions_control_whitecap_enable; +static int hf_cigi3_maritime_surface_conditions_control_scope; +static int hf_cigi3_maritime_surface_conditions_control_sea_surface_height; +static int hf_cigi3_maritime_surface_conditions_control_surface_water_temp; +static int hf_cigi3_maritime_surface_conditions_control_surface_clarity; static const value_string cigi3_maritime_surface_conditions_control_scope_vals[] = { {0, "Global"}, @@ -1358,20 +1461,23 @@ static const value_string cigi3_maritime_surface_conditions_control_scope_vals[] {0, NULL}, }; +/* CIGI4 Maritime Surface Conditions Control */ +#define CIGI4_PACKET_SIZE_MARITIME_SURFACE_CONDITIONS_CONTROL 24 + /* CIGI3 Wave Control */ #define CIGI3_PACKET_SIZE_WAVE_CONTROL 32 -static int hf_cigi3_wave_control = -1; -static int hf_cigi3_wave_control_entity_region_id = -1; -static int hf_cigi3_wave_control_wave_id = -1; -static int hf_cigi3_wave_control_wave_enable = -1; -static int hf_cigi3_wave_control_scope = -1; -static int hf_cigi3_wave_control_breaker_type = -1; -static int hf_cigi3_wave_control_height = -1; -static int hf_cigi3_wave_control_wavelength = -1; -static int hf_cigi3_wave_control_period = -1; -static int hf_cigi3_wave_control_direction = -1; -static int hf_cigi3_wave_control_phase_offset = -1; -static int hf_cigi3_wave_control_leading = -1; +static int hf_cigi3_wave_control; +static int hf_cigi3_wave_control_entity_region_id; +static int hf_cigi3_wave_control_wave_id; +static int hf_cigi3_wave_control_wave_enable; +static int hf_cigi3_wave_control_scope; +static int hf_cigi3_wave_control_breaker_type; +static int hf_cigi3_wave_control_height; +static int hf_cigi3_wave_control_wavelength; +static int hf_cigi3_wave_control_period; +static int hf_cigi3_wave_control_direction; +static int hf_cigi3_wave_control_phase_offset; +static int hf_cigi3_wave_control_leading; static const value_string cigi3_wave_control_scope_vals[] = { {0, "Global"}, @@ -1387,15 +1493,18 @@ static const value_string cigi3_wave_control_breaker_type_vals[] = { {0, NULL}, }; +/* CIGI4 Wave Control */ +#define CIGI4_PACKET_SIZE_WAVE_CONTROL 32 + /* CIGI3 Terrestrial Surface Conditions Control */ #define CIGI3_PACKET_SIZE_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL 8 -static int hf_cigi3_terrestrial_surface_conditions_control = -1; -static int hf_cigi3_terrestrial_surface_conditions_control_entity_region_id = -1; -static int hf_cigi3_terrestrial_surface_conditions_control_surface_condition_id = -1; -static int hf_cigi3_terrestrial_surface_conditions_control_surface_condition_enable = -1; -static int hf_cigi3_terrestrial_surface_conditions_control_scope = -1; -static int hf_cigi3_terrestrial_surface_conditions_control_severity = -1; -static int hf_cigi3_terrestrial_surface_conditions_control_coverage = -1; +static int hf_cigi3_terrestrial_surface_conditions_control; +static int hf_cigi3_terrestrial_surface_conditions_control_entity_region_id; +static int hf_cigi3_terrestrial_surface_conditions_control_surface_condition_id; +static int hf_cigi3_terrestrial_surface_conditions_control_surface_condition_enable; +static int hf_cigi3_terrestrial_surface_conditions_control_scope; +static int hf_cigi3_terrestrial_surface_conditions_control_severity; +static int hf_cigi3_terrestrial_surface_conditions_control_coverage; static const value_string cigi3_terrestrial_surface_conditions_control_scope_vals[] = { {0, "Global"}, @@ -1404,41 +1513,50 @@ static const value_string cigi3_terrestrial_surface_conditions_control_scope_val {0, NULL}, }; +/* CIGI4 Terrestrial Surface Conditions Control */ +#define CIGI4_PACKET_SIZE_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL 16 + /* CIGI3 View Control */ #define CIGI3_PACKET_SIZE_VIEW_CONTROL 32 -static int hf_cigi3_view_control = -1; -static int hf_cigi3_view_control_view_id = -1; -static int hf_cigi3_view_control_group_id = -1; -static int hf_cigi3_view_control_xoff_enable = -1; -static int hf_cigi3_view_control_yoff_enable = -1; -static int hf_cigi3_view_control_zoff_enable = -1; -static int hf_cigi3_view_control_roll_enable = -1; -static int hf_cigi3_view_control_pitch_enable = -1; -static int hf_cigi3_view_control_yaw_enable = -1; -static int hf_cigi3_view_control_entity_id = -1; -static int hf_cigi3_view_control_xoff = -1; -static int hf_cigi3_view_control_yoff = -1; -static int hf_cigi3_view_control_zoff = -1; -static int hf_cigi3_view_control_roll = -1; -static int hf_cigi3_view_control_pitch = -1; -static int hf_cigi3_view_control_yaw = -1; +static int hf_cigi3_view_control; +static int hf_cigi3_view_control_view_id; +static int hf_cigi3_view_control_group_id; +static int hf_cigi3_view_control_xoff_enable; +static int hf_cigi3_view_control_yoff_enable; +static int hf_cigi3_view_control_zoff_enable; +static int hf_cigi3_view_control_roll_enable; +static int hf_cigi3_view_control_pitch_enable; +static int hf_cigi3_view_control_yaw_enable; +static int hf_cigi3_view_control_entity_id; +static int hf_cigi3_view_control_xoff; +static int hf_cigi3_view_control_yoff; +static int hf_cigi3_view_control_zoff; +static int hf_cigi3_view_control_roll; +static int hf_cigi3_view_control_pitch; +static int hf_cigi3_view_control_yaw; + +/* CIGI4 View Control */ +#define CIGI4_PACKET_SIZE_VIEW_CONTROL 40 +static int hf_cigi4_view_control_enable_flags; + +static int ett_cigi4_view_control_enable_flags; /* CIGI3 Sensor Control */ #define CIGI3_PACKET_SIZE_SENSOR_CONTROL 24 -static int hf_cigi3_sensor_control = -1; -static int hf_cigi3_sensor_control_view_id = -1; -static int hf_cigi3_sensor_control_sensor_id = -1; -static int hf_cigi3_sensor_control_sensor_on_off = -1; -static int hf_cigi3_sensor_control_polarity = -1; -static int hf_cigi3_sensor_control_line_dropout_enable = -1; -static int hf_cigi3_sensor_control_auto_gain = -1; -static int hf_cigi3_sensor_control_track_white_black = -1; -static int hf_cigi3_sensor_control_track_mode = -1; -static int hf_cigi3_sensor_control_response_type = -1; -static int hf_cigi3_sensor_control_gain = -1; -static int hf_cigi3_sensor_control_level = -1; -static int hf_cigi3_sensor_control_ac_coupling = -1; -static int hf_cigi3_sensor_control_noise = -1; +static int hf_cigi3_sensor_control; +static int hf_cigi3_sensor_control_view_id; +static int hf_cigi3_sensor_control_sensor_id; +static int hf_cigi3_sensor_control_sensor_on_off; +static int hf_cigi3_sensor_control_polarity; +static int hf_cigi3_sensor_control_line_dropout_enable; +static int hf_cigi3_sensor_control_auto_gain; +static int hf_cigi3_sensor_control_track_white_black; +static int hf_cigi3_sensor_control_track_mode; +static int hf_cigi3_sensor_control_response_type; +static int hf_cigi3_sensor_control_gain; +static int hf_cigi3_sensor_control_level; +static int hf_cigi3_sensor_control_ac_coupling; +static int hf_cigi3_sensor_control_noise; static const value_string cigi3_sensor_control_track_mode_vals[] = { {0, "Off"}, @@ -1457,72 +1575,91 @@ static const true_false_string cigi3_sensor_control_polarity_tfs = { "White hot" }; -static const true_false_string cigi3_sensor_control_track_white_black_tfs = { - "Black", - "White" -}; - +/* CIGI4 Sensor Control */ +#define CIGI4_PACKET_SIZE_SENSOR_CONTROL 32 /* CIGI3 Motion Tracker Control */ #define CIGI3_PACKET_SIZE_MOTION_TRACKER_CONTROL 8 -static int hf_cigi3_motion_tracker_control = -1; -static int hf_cigi3_motion_tracker_control_view_group_id = -1; -static int hf_cigi3_motion_tracker_control_tracker_id = -1; -static int hf_cigi3_motion_tracker_control_tracker_enable = -1; -static int hf_cigi3_motion_tracker_control_boresight_enable = -1; -static int hf_cigi3_motion_tracker_control_x_enable = -1; -static int hf_cigi3_motion_tracker_control_y_enable = -1; -static int hf_cigi3_motion_tracker_control_z_enable = -1; -static int hf_cigi3_motion_tracker_control_roll_enable = -1; -static int hf_cigi3_motion_tracker_control_pitch_enable = -1; -static int hf_cigi3_motion_tracker_control_yaw_enable = -1; -static int hf_cigi3_motion_tracker_control_view_group_select = -1; +static int hf_cigi3_motion_tracker_control; +static int hf_cigi3_motion_tracker_control_view_group_id; +static int hf_cigi3_motion_tracker_control_tracker_id; +static int hf_cigi3_motion_tracker_control_tracker_enable; +static int hf_cigi3_motion_tracker_control_boresight_enable; +static int hf_cigi3_motion_tracker_control_x_enable; +static int hf_cigi3_motion_tracker_control_y_enable; +static int hf_cigi3_motion_tracker_control_z_enable; +static int hf_cigi3_motion_tracker_control_roll_enable; +static int hf_cigi3_motion_tracker_control_pitch_enable; +static int hf_cigi3_motion_tracker_control_yaw_enable; +static int hf_cigi3_motion_tracker_control_view_group_select; static const true_false_string cigi3_motion_tracker_control_view_group_select_tfs = { "View Group", "View" }; +/* CIGI4 Motion Tracker Control */ +#define CIGI4_PACKET_SIZE_MOTION_TRACKER_CONTROL 16 + /* CIGI3 Earth Reference Model Definition */ #define CIGI3_PACKET_SIZE_EARTH_REFERENCE_MODEL_DEFINITION 24 -static int hf_cigi3_earth_reference_model_definition = -1; -static int hf_cigi3_earth_reference_model_definition_erm_enable = -1; -static int hf_cigi3_earth_reference_model_definition_equatorial_radius = -1; -static int hf_cigi3_earth_reference_model_definition_flattening = -1; +static int hf_cigi3_earth_reference_model_definition; +static int hf_cigi3_earth_reference_model_definition_erm_enable; +static int hf_cigi3_earth_reference_model_definition_equatorial_radius; +static int hf_cigi3_earth_reference_model_definition_flattening; + +/* CIGI4 Earth Reference Model Definition */ +#define CIGI4_PACKET_SIZE_EARTH_REFERENCE_MODEL_DEFINITION 24 /* CIGI3 Trajectory Definition */ #define CIGI3_PACKET_SIZE_TRAJECTORY_DEFINITION 24 -static int hf_cigi3_trajectory_definition = -1; -static int hf_cigi3_trajectory_definition_entity_id = -1; -static int hf_cigi3_trajectory_definition_acceleration_x = -1; -static int hf_cigi3_trajectory_definition_acceleration_y = -1; -static int hf_cigi3_trajectory_definition_acceleration_z = -1; -static int hf_cigi3_trajectory_definition_retardation_rate = -1; -static int hf_cigi3_trajectory_definition_terminal_velocity = -1; +static int hf_cigi3_trajectory_definition; +static int hf_cigi3_trajectory_definition_entity_id; +static int hf_cigi3_trajectory_definition_acceleration_x; +static int hf_cigi3_trajectory_definition_acceleration_y; +static int hf_cigi3_trajectory_definition_acceleration_z; +static int hf_cigi3_trajectory_definition_retardation_rate; +static int hf_cigi3_trajectory_definition_terminal_velocity; + + +/* CIGI4 Acceleration Control */ +#define CIGI4_PACKET_SIZE_ACCELERATION_CONTROL 32 +static int hf_cigi4_acceleration_control; +static int hf_cigi4_acceleration_control_entity_id; +static int hf_cigi4_acceleration_control_articulated_part_id; +static int hf_cigi4_acceleration_control_apply_to_part; +static int hf_cigi4_acceleration_control_coord_system; +static int hf_cigi4_acceleration_control_acceleration_x; +static int hf_cigi4_acceleration_control_acceleration_y; +static int hf_cigi4_acceleration_control_acceleration_z; +static int hf_cigi4_acceleration_control_acceleration_roll; +static int hf_cigi4_acceleration_control_acceleration_pitch; +static int hf_cigi4_acceleration_control_acceleration_yaw; + /* CIGI3 View Definition */ #define CIGI3_PACKET_SIZE_VIEW_DEFINITION 32 -static int hf_cigi3_view_definition = -1; -static int hf_cigi3_view_definition_view_id = -1; -static int hf_cigi3_view_definition_group_id = -1; -static int hf_cigi3_view_definition_near_enable = -1; -static int hf_cigi3_view_definition_far_enable = -1; -static int hf_cigi3_view_definition_left_enable = -1; -static int hf_cigi3_view_definition_right_enable = -1; -static int hf_cigi3_view_definition_top_enable = -1; -static int hf_cigi3_view_definition_bottom_enable = -1; -static int hf_cigi3_view_definition_mirror_mode = -1; -static int hf_cigi3_view_definition_pixel_replication = -1; -static int hf_cigi3_view_definition_projection_type = -1; -static int hf_cigi3_view_definition_reorder = -1; -static int hf_cigi3_view_definition_view_type = -1; -static int hf_cigi3_view_definition_near = -1; -static int hf_cigi3_view_definition_far = -1; -static int hf_cigi3_view_definition_left = -1; -static int hf_cigi3_view_definition_right = -1; -static int hf_cigi3_view_definition_top = -1; -static int hf_cigi3_view_definition_bottom = -1; +static int hf_cigi3_view_definition; +static int hf_cigi3_view_definition_view_id; +static int hf_cigi3_view_definition_group_id; +static int hf_cigi3_view_definition_near_enable; +static int hf_cigi3_view_definition_far_enable; +static int hf_cigi3_view_definition_left_enable; +static int hf_cigi3_view_definition_right_enable; +static int hf_cigi3_view_definition_top_enable; +static int hf_cigi3_view_definition_bottom_enable; +static int hf_cigi3_view_definition_mirror_mode; +static int hf_cigi3_view_definition_pixel_replication; +static int hf_cigi3_view_definition_projection_type; +static int hf_cigi3_view_definition_reorder; +static int hf_cigi3_view_definition_view_type; +static int hf_cigi3_view_definition_near; +static int hf_cigi3_view_definition_far; +static int hf_cigi3_view_definition_left; +static int hf_cigi3_view_definition_right; +static int hf_cigi3_view_definition_top; +static int hf_cigi3_view_definition_bottom; static const value_string cigi3_view_definition_mirror_mode_vals[] = { {0, "None"}, @@ -1554,52 +1691,63 @@ static const true_false_string cigi3_view_definition_reorder_tfs = { "No Reorder" }; +/* CIGI4 View Definition */ +#define CIGI4_PACKET_SIZE_VIEW_DEFINITION 40 + /* CIGI3 Collision Detection Segment Definition */ #define CIGI3_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_DEFINITION 40 -static int hf_cigi3_collision_detection_segment_definition = -1; -static int hf_cigi3_collision_detection_segment_definition_entity_id = -1; -static int hf_cigi3_collision_detection_segment_definition_segment_id = -1; -static int hf_cigi3_collision_detection_segment_definition_segment_enable = -1; -static int hf_cigi3_collision_detection_segment_definition_x1 = -1; -static int hf_cigi3_collision_detection_segment_definition_y1 = -1; -static int hf_cigi3_collision_detection_segment_definition_z1 = -1; -static int hf_cigi3_collision_detection_segment_definition_x2 = -1; -static int hf_cigi3_collision_detection_segment_definition_y2 = -1; -static int hf_cigi3_collision_detection_segment_definition_z2 = -1; -static int hf_cigi3_collision_detection_segment_definition_material_mask = -1; +static int hf_cigi3_collision_detection_segment_definition; +static int hf_cigi3_collision_detection_segment_definition_entity_id; +static int hf_cigi3_collision_detection_segment_definition_segment_id; +static int hf_cigi3_collision_detection_segment_definition_segment_enable; +static int hf_cigi3_collision_detection_segment_definition_x1; +static int hf_cigi3_collision_detection_segment_definition_y1; +static int hf_cigi3_collision_detection_segment_definition_z1; +static int hf_cigi3_collision_detection_segment_definition_x2; +static int hf_cigi3_collision_detection_segment_definition_y2; +static int hf_cigi3_collision_detection_segment_definition_z2; +static int hf_cigi3_collision_detection_segment_definition_material_mask; + + +/* CIGI4 Collision Detection Segment Definition */ +#define CIGI4_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_DEFINITION 40 /* CIGI3 Collision Detection Volume Definition */ #define CIGI3_PACKET_SIZE_COLLISION_DETECTION_VOLUME_DEFINITION 48 -static int hf_cigi3_collision_detection_volume_definition = -1; -static int hf_cigi3_collision_detection_volume_definition_entity_id = -1; -static int hf_cigi3_collision_detection_volume_definition_volume_id = -1; -static int hf_cigi3_collision_detection_volume_definition_volume_enable = -1; -static int hf_cigi3_collision_detection_volume_definition_volume_type = -1; -static int hf_cigi3_collision_detection_volume_definition_x = -1; -static int hf_cigi3_collision_detection_volume_definition_y = -1; -static int hf_cigi3_collision_detection_volume_definition_z = -1; -static int hf_cigi3_collision_detection_volume_definition_radius_height = -1; -static int hf_cigi3_collision_detection_volume_definition_width = -1; -static int hf_cigi3_collision_detection_volume_definition_depth = -1; -static int hf_cigi3_collision_detection_volume_definition_roll = -1; -static int hf_cigi3_collision_detection_volume_definition_pitch = -1; -static int hf_cigi3_collision_detection_volume_definition_yaw = -1; +static int hf_cigi3_collision_detection_volume_definition; +static int hf_cigi3_collision_detection_volume_definition_entity_id; +static int hf_cigi3_collision_detection_volume_definition_volume_id; +static int hf_cigi3_collision_detection_volume_definition_volume_enable; +static int hf_cigi3_collision_detection_volume_definition_volume_type; +static int hf_cigi3_collision_detection_volume_definition_x; +static int hf_cigi3_collision_detection_volume_definition_y; +static int hf_cigi3_collision_detection_volume_definition_z; +static int hf_cigi3_collision_detection_volume_definition_radius_height; +static int hf_cigi3_collision_detection_volume_definition_width; +static int hf_cigi3_collision_detection_volume_definition_depth; +static int hf_cigi3_collision_detection_volume_definition_roll; +static int hf_cigi3_collision_detection_volume_definition_pitch; +static int hf_cigi3_collision_detection_volume_definition_yaw; static const true_false_string cigi3_collision_detection_volume_definition_volume_type_tfs = { "Cuboid", "Sphere" }; +/* CIGI4 Collision Detection Volume Definition */ +#define CIGI4_PACKET_SIZE_COLLISION_DETECTION_VOLUME_DEFINITION 48 + /* CIGI3 HAT/HOT Request */ #define CIGI3_PACKET_SIZE_HAT_HOT_REQUEST 32 -static int hf_cigi3_hat_hot_request = -1; -static int hf_cigi3_hat_hot_request_hat_hot_id = -1; -static int hf_cigi3_hat_hot_request_type = -1; -static int hf_cigi3_hat_hot_request_coordinate_system = -1; -static int hf_cigi3_hat_hot_request_entity_id = -1; -static int hf_cigi3_hat_hot_request_lat_xoff = -1; -static int hf_cigi3_hat_hot_request_lon_yoff = -1; -static int hf_cigi3_hat_hot_request_alt_zoff = -1; +static int hf_cigi3_hat_hot_request; +static int hf_cigi3_hat_hot_request_hat_hot_id; +static int hf_cigi3_hat_hot_request_type; +static int hf_cigi3_hat_hot_request_coordinate_system; +static int hf_cigi3_2_hat_hot_request_update_period; +static int hf_cigi3_hat_hot_request_entity_id; +static int hf_cigi3_hat_hot_request_lat_xoff; +static int hf_cigi3_hat_hot_request_lon_yoff; +static int hf_cigi3_hat_hot_request_alt_zoff; static const value_string cigi3_hat_hot_request_type_vals[] = { {0, "HAT"}, @@ -1608,109 +1756,70 @@ static const value_string cigi3_hat_hot_request_type_vals[] = { {0, NULL}, }; -/* CIGI3_2 HAT/HOT Request */ -#define CIGI3_2_PACKET_SIZE_HAT_HOT_REQUEST 32 -static int hf_cigi3_2_hat_hot_request = -1; -static int hf_cigi3_2_hat_hot_request_hat_hot_id = -1; -static int hf_cigi3_2_hat_hot_request_type = -1; -static int hf_cigi3_2_hat_hot_request_coordinate_system = -1; -static int hf_cigi3_2_hat_hot_request_update_period = -1; -static int hf_cigi3_2_hat_hot_request_entity_id = -1; -static int hf_cigi3_2_hat_hot_request_lat_xoff = -1; -static int hf_cigi3_2_hat_hot_request_lon_yoff = -1; -static int hf_cigi3_2_hat_hot_request_alt_zoff = -1; - -static const value_string cigi3_2_hat_hot_request_type_vals[] = { - {0, "HAT"}, - {1, "HOT"}, - {2, "Extended"}, - {0, NULL}, -}; +/* CIGI4 HAT/HOT Request */ +#define CIGI4_PACKET_SIZE_HAT_HOT_REQUEST 40 +static int hf_cigi4_hat_hot_request_flags; + +static int ett_cigi4_hat_hot_request_flags; /* CIGI3 Line of Sight Segment Request */ #define CIGI3_PACKET_SIZE_LINE_OF_SIGHT_SEGMENT_REQUEST 64 -static int hf_cigi3_line_of_sight_segment_request = -1; -static int hf_cigi3_line_of_sight_segment_request_los_id = -1; -static int hf_cigi3_line_of_sight_segment_request_type = -1; -static int hf_cigi3_line_of_sight_segment_request_source_coord = -1; -static int hf_cigi3_line_of_sight_segment_request_destination_coord = -1; -static int hf_cigi3_line_of_sight_segment_request_response_coord = -1; -static int hf_cigi3_line_of_sight_segment_request_alpha_threshold = -1; -static int hf_cigi3_line_of_sight_segment_request_entity_id = -1; -static int hf_cigi3_line_of_sight_segment_request_source_lat_xoff = -1; -static int hf_cigi3_line_of_sight_segment_request_source_lon_yoff = -1; -static int hf_cigi3_line_of_sight_segment_request_source_alt_zoff = -1; -static int hf_cigi3_line_of_sight_segment_request_destination_lat_xoff = -1; -static int hf_cigi3_line_of_sight_segment_request_destination_lon_yoff = -1; -static int hf_cigi3_line_of_sight_segment_request_destination_alt_zoff = -1; -static int hf_cigi3_line_of_sight_segment_request_material_mask = -1; +static int hf_cigi3_line_of_sight_segment_request; +static int hf_cigi3_line_of_sight_segment_request_los_id; +static int hf_cigi3_line_of_sight_segment_request_type; +static int hf_cigi3_line_of_sight_segment_request_source_coord; +static int hf_cigi3_line_of_sight_segment_request_destination_coord; +static int hf_cigi3_line_of_sight_segment_request_response_coord; +static int hf_cigi3_line_of_sight_segment_request_alpha_threshold; +static int hf_cigi3_line_of_sight_segment_request_source_entity_id; +static int hf_cigi3_line_of_sight_segment_request_source_lat_xoff; +static int hf_cigi3_line_of_sight_segment_request_source_lon_yoff; +static int hf_cigi3_line_of_sight_segment_request_source_alt_zoff; +static int hf_cigi3_line_of_sight_segment_request_destination_lat_xoff; +static int hf_cigi3_line_of_sight_segment_request_destination_lon_yoff; +static int hf_cigi3_line_of_sight_segment_request_destination_alt_zoff; +static int hf_cigi3_line_of_sight_segment_request_material_mask; /* CIGI3_2 Line of Sight Segment Request */ -#define CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_SEGMENT_REQUEST 64 -static int hf_cigi3_2_line_of_sight_segment_request = -1; -static int hf_cigi3_2_line_of_sight_segment_request_los_id = -1; -static int hf_cigi3_2_line_of_sight_segment_request_type = -1; -static int hf_cigi3_2_line_of_sight_segment_request_source_coord = -1; -static int hf_cigi3_2_line_of_sight_segment_request_destination_coord = -1; -static int hf_cigi3_2_line_of_sight_segment_request_response_coord = -1; -static int hf_cigi3_2_line_of_sight_segment_request_destination_entity_id_valid = -1; -static int hf_cigi3_2_line_of_sight_segment_request_alpha_threshold = -1; -static int hf_cigi3_2_line_of_sight_segment_request_entity_id = -1; -static int hf_cigi3_2_line_of_sight_segment_request_source_lat_xoff = -1; -static int hf_cigi3_2_line_of_sight_segment_request_source_lon_yoff = -1; -static int hf_cigi3_2_line_of_sight_segment_request_source_alt_zoff = -1; -static int hf_cigi3_2_line_of_sight_segment_request_destination_lat_xoff = -1; -static int hf_cigi3_2_line_of_sight_segment_request_destination_lon_yoff = -1; -static int hf_cigi3_2_line_of_sight_segment_request_destination_alt_zoff = -1; -static int hf_cigi3_2_line_of_sight_segment_request_material_mask = -1; -static int hf_cigi3_2_line_of_sight_segment_request_update_period = -1; -static int hf_cigi3_2_line_of_sight_segment_request_destination_entity_id = -1; +static int hf_cigi3_2_line_of_sight_segment_request_destination_entity_id_valid; +static int hf_cigi3_2_line_of_sight_segment_request_update_period; +static int hf_cigi3_2_line_of_sight_segment_request_destination_entity_id; + +/* CIGI4 Line of Sight Segment Request */ +#define CIGI4_PACKET_SIZE_LINE_OF_SIGHT_SEGMENT_REQUEST 72 /* CIGI3 Line of Sight Vector Request */ #define CIGI3_PACKET_SIZE_LINE_OF_SIGHT_VECTOR_REQUEST 56 -static int hf_cigi3_line_of_sight_vector_request = -1; -static int hf_cigi3_line_of_sight_vector_request_los_id = -1; -static int hf_cigi3_line_of_sight_vector_request_type = -1; -static int hf_cigi3_line_of_sight_vector_request_source_coord = -1; -static int hf_cigi3_line_of_sight_vector_request_response_coord = -1; -static int hf_cigi3_line_of_sight_vector_request_alpha = -1; -static int hf_cigi3_line_of_sight_vector_request_entity_id = -1; -static int hf_cigi3_line_of_sight_vector_request_azimuth = -1; -static int hf_cigi3_line_of_sight_vector_request_elevation = -1; -static int hf_cigi3_line_of_sight_vector_request_min_range = -1; -static int hf_cigi3_line_of_sight_vector_request_max_range = -1; -static int hf_cigi3_line_of_sight_vector_request_source_lat_xoff = -1; -static int hf_cigi3_line_of_sight_vector_request_source_lon_yoff = -1; -static int hf_cigi3_line_of_sight_vector_request_source_alt_zoff = -1; -static int hf_cigi3_line_of_sight_vector_request_material_mask = -1; +static int hf_cigi3_line_of_sight_vector_request; +static int hf_cigi3_line_of_sight_vector_request_los_id; +static int hf_cigi3_line_of_sight_vector_request_type; +static int hf_cigi3_line_of_sight_vector_request_source_coord; +static int hf_cigi3_line_of_sight_vector_request_response_coord; +static int hf_cigi3_line_of_sight_vector_request_alpha; +static int hf_cigi3_line_of_sight_vector_request_entity_id; +static int hf_cigi3_line_of_sight_vector_request_azimuth; +static int hf_cigi3_line_of_sight_vector_request_elevation; +static int hf_cigi3_line_of_sight_vector_request_min_range; +static int hf_cigi3_line_of_sight_vector_request_max_range; +static int hf_cigi3_line_of_sight_vector_request_source_lat_xoff; +static int hf_cigi3_line_of_sight_vector_request_source_lon_yoff; +static int hf_cigi3_line_of_sight_vector_request_source_alt_zoff; +static int hf_cigi3_line_of_sight_vector_request_material_mask; /* CIGI3_2 Line of Sight Vector Request */ -#define CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_VECTOR_REQUEST 56 -static int hf_cigi3_2_line_of_sight_vector_request = -1; -static int hf_cigi3_2_line_of_sight_vector_request_los_id = -1; -static int hf_cigi3_2_line_of_sight_vector_request_type = -1; -static int hf_cigi3_2_line_of_sight_vector_request_source_coord = -1; -static int hf_cigi3_2_line_of_sight_vector_request_response_coord = -1; -static int hf_cigi3_2_line_of_sight_vector_request_alpha = -1; -static int hf_cigi3_2_line_of_sight_vector_request_entity_id = -1; -static int hf_cigi3_2_line_of_sight_vector_request_azimuth = -1; -static int hf_cigi3_2_line_of_sight_vector_request_elevation = -1; -static int hf_cigi3_2_line_of_sight_vector_request_min_range = -1; -static int hf_cigi3_2_line_of_sight_vector_request_max_range = -1; -static int hf_cigi3_2_line_of_sight_vector_request_source_lat_xoff = -1; -static int hf_cigi3_2_line_of_sight_vector_request_source_lon_yoff = -1; -static int hf_cigi3_2_line_of_sight_vector_request_source_alt_zoff = -1; -static int hf_cigi3_2_line_of_sight_vector_request_material_mask = -1; -static int hf_cigi3_2_line_of_sight_vector_request_update_period = -1; +static int hf_cigi3_2_line_of_sight_vector_request_update_period; + +/* CIGI4 Line of Sight Vector Request */ +#define CIGI4_PACKET_SIZE_LINE_OF_SIGHT_VECTOR_REQUEST 64 /* CIGI3 Position Request */ #define CIGI3_PACKET_SIZE_POSITION_REQUEST 8 -static int hf_cigi3_position_request = -1; -static int hf_cigi3_position_request_object_id = -1; -static int hf_cigi3_position_request_part_id = -1; -static int hf_cigi3_position_request_update_mode = -1; -static int hf_cigi3_position_request_object_class = -1; -static int hf_cigi3_position_request_coord_system = -1; +static int hf_cigi3_position_request; +static int hf_cigi3_position_request_object_id; +static int hf_cigi3_position_request_part_id; +static int hf_cigi3_position_request_update_mode; +static int hf_cigi3_position_request_object_class; +static int hf_cigi3_position_request_coord_system; static const true_false_string cigi3_position_request_update_mode_tfs = { "Continuous", @@ -1733,14 +1842,17 @@ static const value_string cigi3_position_request_coord_system_vals[] = { {0, NULL}, }; +/* CIGI4 Position Request */ +#define CIGI4_PACKET_SIZE_POSITION_REQUEST 8 + /* CIGI3 Environmental Conditions Request */ #define CIGI3_PACKET_SIZE_ENVIRONMENTAL_CONDITIONS_REQUEST 32 -static int hf_cigi3_environmental_conditions_request = -1; -static int hf_cigi3_environmental_conditions_request_type = -1; -static int hf_cigi3_environmental_conditions_request_id = -1; -static int hf_cigi3_environmental_conditions_request_lat = -1; -static int hf_cigi3_environmental_conditions_request_lon = -1; -static int hf_cigi3_environmental_conditions_request_alt = -1; +static int hf_cigi3_environmental_conditions_request; +static int hf_cigi3_environmental_conditions_request_type; +static int hf_cigi3_environmental_conditions_request_id; +static int hf_cigi3_environmental_conditions_request_lat; +static int hf_cigi3_environmental_conditions_request_lon; +static int hf_cigi3_environmental_conditions_request_alt; static const value_string cigi3_environmental_conditions_request_type_vals[] = { {1, "Maritime Surface Conditions"}, @@ -1761,27 +1873,30 @@ static const value_string cigi3_environmental_conditions_request_type_vals[] = { {0, NULL}, }; +/* CIGI4 Environmental Conditions Request */ +#define CIGI4_PACKET_SIZE_ENVIRONMENTAL_CONDITIONS_REQUEST 32 + /* CIGI3_3 Symbol Surface Definition */ #define CIGI3_PACKET_SIZE_SYMBOL_SURFACE_DEFINITION 56 -static int hf_cigi3_3_symbol_surface_definition = -1; -static int hf_cigi3_3_symbol_surface_definition_surface_id = -1; -static int hf_cigi3_3_symbol_surface_definition_surface_state = -1; -static int hf_cigi3_3_symbol_surface_definition_attach_type = -1; -static int hf_cigi3_3_symbol_surface_definition_billboard = -1; -static int hf_cigi3_3_symbol_surface_definition_perspective_growth_enable = -1; -static int hf_cigi3_3_symbol_surface_definition_entity_view_id = -1; -static int hf_cigi3_3_symbol_surface_definition_xoff_left = -1; -static int hf_cigi3_3_symbol_surface_definition_yoff_right = -1; -static int hf_cigi3_3_symbol_surface_definition_zoff_top = -1; -static int hf_cigi3_3_symbol_surface_definition_yaw_bottom = -1; -static int hf_cigi3_3_symbol_surface_definition_pitch = -1; -static int hf_cigi3_3_symbol_surface_definition_roll = -1; -static int hf_cigi3_3_symbol_surface_definition_width = -1; -static int hf_cigi3_3_symbol_surface_definition_height = -1; -static int hf_cigi3_3_symbol_surface_definition_min_u = -1; -static int hf_cigi3_3_symbol_surface_definition_max_u = -1; -static int hf_cigi3_3_symbol_surface_definition_min_v = -1; -static int hf_cigi3_3_symbol_surface_definition_max_v = -1; +static int hf_cigi3_3_symbol_surface_definition; +static int hf_cigi3_3_symbol_surface_definition_surface_id; +static int hf_cigi3_3_symbol_surface_definition_surface_state; +static int hf_cigi3_3_symbol_surface_definition_attach_type; +static int hf_cigi3_3_symbol_surface_definition_billboard; +static int hf_cigi3_3_symbol_surface_definition_perspective_growth_enable; +static int hf_cigi3_3_symbol_surface_definition_entity_view_id; +static int hf_cigi3_3_symbol_surface_definition_xoff_left; +static int hf_cigi3_3_symbol_surface_definition_yoff_right; +static int hf_cigi3_3_symbol_surface_definition_zoff_top; +static int hf_cigi3_3_symbol_surface_definition_yaw_bottom; +static int hf_cigi3_3_symbol_surface_definition_pitch; +static int hf_cigi3_3_symbol_surface_definition_roll; +static int hf_cigi3_3_symbol_surface_definition_width; +static int hf_cigi3_3_symbol_surface_definition_height; +static int hf_cigi3_3_symbol_surface_definition_min_u; +static int hf_cigi3_3_symbol_surface_definition_max_u; +static int hf_cigi3_3_symbol_surface_definition_min_v; +static int hf_cigi3_3_symbol_surface_definition_max_v; static const true_false_string cigi3_3_symbol_surface_definition_surface_state_tfs = { "Destroyed", @@ -1798,15 +1913,19 @@ static const true_false_string cigi3_3_symbol_surface_definition_billboard_tfs = "Non-Billboard" }; + +/* CIGI4 Symbol Surface Definition */ +#define CIGI4_PACKET_SIZE_SYMBOL_SURFACE_DEFINITION 64 + /* CIGI3_3 Symbol Text Definition */ -#define CIGI3_PACKET_SIZE_SYMBOL_TEXT_DEFINITION 56 -/* static int hf_cigi3_3_symbol_text_definition = -1; */ -static int hf_cigi3_3_symbol_text_definition_symbol_id = -1; -static int hf_cigi3_3_symbol_text_definition_orientation = -1; -static int hf_cigi3_3_symbol_text_definition_alignment = -1; -static int hf_cigi3_3_symbol_text_definition_font_ident = -1; -static int hf_cigi3_3_symbol_text_definition_font_size = -1; -static int hf_cigi3_3_symbol_text_definition_text = -1; +// Variable Length +static int hf_cigi3_3_symbol_text_definition; +static int hf_cigi3_3_symbol_text_definition_symbol_id; +static int hf_cigi3_3_symbol_text_definition_orientation; +static int hf_cigi3_3_symbol_text_definition_alignment; +static int hf_cigi3_3_symbol_text_definition_font_ident; +static int hf_cigi3_3_symbol_text_definition_font_size; +static int hf_cigi3_3_symbol_text_definition_text; static const value_string cigi3_3_symbol_text_definition_alignment_vals[] = { {0, "Top Left"}, @@ -1850,38 +1969,46 @@ static const value_string cigi3_3_symbol_text_definition_font_ident_vals[] = { {0, NULL} }; +/* CIGI4 Symbol Text Definition */ +//#define CIGI4_PACKET_SIZE_SYMBOL_TEXT_DEFINITION (12 + text_length) + /* CIGI3_3 Symbol Circle Definition */ -#define CIGI3_PACKET_SIZE_SYMBOL_CIRCLE_DEFINITION 56 -/* static int hf_cigi3_3_symbol_circle_definition = -1; */ -static int hf_cigi3_3_symbol_circle_definition_symbol_id = -1; -static int hf_cigi3_3_symbol_circle_definition_drawing_style = -1; -static int hf_cigi3_3_symbol_circle_definition_stipple_pattern = -1; -static int hf_cigi3_3_symbol_circle_definition_line_width = -1; -static int hf_cigi3_3_symbol_circle_definition_stipple_pattern_length = -1; -static int hf_cigi3_3_symbol_circle_definition_center_u[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1}; -static int hf_cigi3_3_symbol_circle_definition_center_v[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1}; -static int hf_cigi3_3_symbol_circle_definition_radius[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1}; -static int hf_cigi3_3_symbol_circle_definition_inner_radius[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1}; -static int hf_cigi3_3_symbol_circle_definition_start_angle[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1}; -static int hf_cigi3_3_symbol_circle_definition_end_angle[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1}; +// Variable length +static int hf_cigi3_3_symbol_circle_definition; +static int hf_cigi3_3_symbol_circle_definition_symbol_id; +static int hf_cigi3_3_symbol_circle_definition_drawing_style; +static int hf_cigi3_3_symbol_circle_definition_stipple_pattern; +static int hf_cigi3_3_symbol_circle_definition_line_width; +static int hf_cigi3_3_symbol_circle_definition_stipple_pattern_length; +static int hf_cigi3_3_symbol_circle_definition_center_u[9]; +static int hf_cigi3_3_symbol_circle_definition_center_v[9]; +static int hf_cigi3_3_symbol_circle_definition_radius[9]; +static int hf_cigi3_3_symbol_circle_definition_inner_radius[9]; +static int hf_cigi3_3_symbol_circle_definition_start_angle[9]; +static int hf_cigi3_3_symbol_circle_definition_end_angle[9]; static const true_false_string cigi3_3_symbol_circle_definition_drawing_style_tfs = { "Fill", "Line" }; +/* CIGI4 Symbol Circle Definition */ +//#define CIGI4_PACKET_SIZE_SYMBOL_CIRCLE_DEFINITION (24 + (8*n)) +static int hf_cigi4_symbol_circle_definition_circles; + +static int ett_cigi4_symbol_circle_definition_circles; + /* CIGI3_3 Symbol Line Definition */ -#define CIGI3_PACKET_SIZE_SYMBOL_LINE_DEFINITION 56 -/* static int hf_cigi3_3_symbol_line_definition = -1; */ -static int hf_cigi3_3_symbol_line_definition_symbol_id = -1; -static int hf_cigi3_3_symbol_line_definition_primitive_type = -1; -static int hf_cigi3_3_symbol_line_definition_stipple_pattern = -1; -static int hf_cigi3_3_symbol_line_definition_line_width = -1; -static int hf_cigi3_3_symbol_line_definition_stipple_pattern_length = -1; -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}; -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}; - -#if 0 +// Variable length +static int hf_cigi3_3_symbol_line_definition; +static int hf_cigi3_3_symbol_line_definition_symbol_id; +static int hf_cigi3_3_symbol_line_definition_primitive_type; +static int hf_cigi3_3_symbol_line_definition_stipple_pattern; +static int hf_cigi3_3_symbol_line_definition_line_width; +static int hf_cigi3_3_symbol_line_definition_stipple_pattern_length; +static int hf_cigi3_3_symbol_line_definition_vertex_u[29]; +static int hf_cigi3_3_symbol_line_definition_vertex_v[29]; + static const value_string cigi3_3_symbol_line_definition_primitive_type_vals[] = { {0, "Point"}, {1, "Line"}, @@ -1892,42 +2019,59 @@ static const value_string cigi3_3_symbol_line_definition_primitive_type_vals[] = {6, "Triangle Fan"}, {0, NULL} }; -#endif + +/* CIGI4 Symbol Polygon Definition */ +/* Symbol Line Definition packet renamed. */ +//#define CIGI4_PACKET_SIZE_SYMBOL_POLYGON_DEFINITION 24 + (8 x n) +static int hf_cigi4_symbol_polygon_definition; +static int hf_cigi4_symbol_polygon_definition_symbol_id; +static int hf_cigi4_symbol_polygon_definition_primitive_type; +static int hf_cigi4_symbol_polygon_definition_stipple_pattern; +static int hf_cigi4_symbol_polygon_definition_line_width; +static int hf_cigi4_symbol_polygon_definition_stipple_pattern_length; +static int hf_cigi4_symbol_polygon_definition_vertex_u[29]; +static int hf_cigi4_symbol_polygon_definition_vertex_v[29]; +static int hf_cigi4_symbol_polygon_definition_vertices; + +static int ett_cigi4_symbol_polygon_definition_vertices; /* CIGI3_3 Symbol Clone */ -#define CIGI3_PACKET_SIZE_SYMBOL_CLONE_DEFINITION 8 -/* static int hf_cigi3_3_symbol_clone = -1; */ -static int hf_cigi3_3_symbol_clone_symbol_id = -1; -static int hf_cigi3_3_symbol_clone_source_type = -1; -static int hf_cigi3_3_symbol_clone_source_id = -1; +#define CIGI3_PACKET_SIZE_SYMBOL_CLONE 8 +static int hf_cigi3_3_symbol_clone; +static int hf_cigi3_3_symbol_clone_symbol_id; +static int hf_cigi3_3_symbol_clone_source_type; +static int hf_cigi3_3_symbol_clone_source_id; static const true_false_string cigi3_3_symbol_clone_source_type_tfs = { "Symbol Template", "Symbol" }; +/* CIG4 Symbol Clone */ +#define CIGI4_PACKET_SIZE_SYMBOL_CLONE 16 + /* CIGI3_3 Symbol Control */ -#define CIGI3_PACKET_SIZE_SYMBOL_CONTROL_DEFINITION 40 -/* static int hf_cigi3_3_symbol_control = -1; */ -static int hf_cigi3_3_symbol_control_symbol_id = -1; -static int hf_cigi3_3_symbol_control_symbol_state = -1; -static int hf_cigi3_3_symbol_control_attach_state = -1; -static int hf_cigi3_3_symbol_control_flash_control = -1; -static int hf_cigi3_3_symbol_control_inherit_color = -1; -static int hf_cigi3_3_symbol_control_parent_symbol_ident = -1; -static int hf_cigi3_3_symbol_control_surface_ident = -1; -static int hf_cigi3_3_symbol_control_layer = -1; -static int hf_cigi3_3_symbol_control_flash_duty_cycle = -1; -static int hf_cigi3_3_symbol_control_flash_period = -1; -static int hf_cigi3_3_symbol_control_position_u = -1; -static int hf_cigi3_3_symbol_control_position_v = -1; -static int hf_cigi3_3_symbol_control_rotation = -1; -static int hf_cigi3_3_symbol_control_red = -1; -static int hf_cigi3_3_symbol_control_green = -1; -static int hf_cigi3_3_symbol_control_blue = -1; -static int hf_cigi3_3_symbol_control_alpha = -1; -static int hf_cigi3_3_symbol_control_scale_u = -1; -static int hf_cigi3_3_symbol_control_scale_v = -1; +#define CIGI3_PACKET_SIZE_SYMBOL_CONTROL 40 +static int hf_cigi3_3_symbol_control; +static int hf_cigi3_3_symbol_control_symbol_id; +static int hf_cigi3_3_symbol_control_symbol_state; +static int hf_cigi3_3_symbol_control_attach_state; +static int hf_cigi3_3_symbol_control_flash_control; +static int hf_cigi3_3_symbol_control_inherit_color; +static int hf_cigi3_3_symbol_control_parent_symbol_ident; +static int hf_cigi3_3_symbol_control_surface_ident; +static int hf_cigi3_3_symbol_control_layer; +static int hf_cigi3_3_symbol_control_flash_duty_cycle; +static int hf_cigi3_3_symbol_control_flash_period; +static int hf_cigi3_3_symbol_control_position_u; +static int hf_cigi3_3_symbol_control_position_v; +static int hf_cigi3_3_symbol_control_rotation; +static int hf_cigi3_3_symbol_control_red; +static int hf_cigi3_3_symbol_control_green; +static int hf_cigi3_3_symbol_control_blue; +static int hf_cigi3_3_symbol_control_alpha; +static int hf_cigi3_3_symbol_control_scale_u; +static int hf_cigi3_3_symbol_control_scale_v; static const value_string cigi3_3_symbol_control_symbol_state_vals[] = { {0, "Hidden"}, @@ -1941,33 +2085,32 @@ static const true_false_string cigi3_3_symbol_control_flash_control_tfs = { "Continue" }; -static const true_false_string cigi3_3_symbol_control_inherit_color_tfs = { - "Inherited", - "Not Inherited" -}; + +/* CIGI4 Symbol Control */ +#define CIGI4_PACKET_SIZE_SYMBOL_CONTROL 48 /* CIGI3_3 Short Symbol Control */ -#define CIGI3_PACKET_SIZE_SHORT_SYMBOL_CONTROL_DEFINITION 32 -/* static int hf_cigi3_3_short_symbol_control = -1; */ -static int hf_cigi3_3_short_symbol_control_symbol_id = -1; -static int hf_cigi3_3_short_symbol_control_inherit_color = -1; -static int hf_cigi3_3_short_symbol_control_flash_control = -1; -static int hf_cigi3_3_short_symbol_control_attach_state = -1; -static int hf_cigi3_3_short_symbol_control_symbol_state = -1; -static int hf_cigi3_3_short_symbol_control_attribute_select1 = -1; -static int hf_cigi3_3_short_symbol_control_attribute_select2 = -1; -static int hf_cigi3_3_short_symbol_control_attribute_value1 = -1; -static int hf_cigi3_3_short_symbol_control_attribute_value2 = -1; -static int hf_cigi3_3_short_symbol_control_attribute_value1f = -1; -static int hf_cigi3_3_short_symbol_control_attribute_value2f = -1; -static int hf_cigi3_3_short_symbol_control_red1 = -1; -static int hf_cigi3_3_short_symbol_control_green1 = -1; -static int hf_cigi3_3_short_symbol_control_blue1 = -1; -static int hf_cigi3_3_short_symbol_control_alpha1 = -1; -static int hf_cigi3_3_short_symbol_control_red2 = -1; -static int hf_cigi3_3_short_symbol_control_green2 = -1; -static int hf_cigi3_3_short_symbol_control_blue2 = -1; -static int hf_cigi3_3_short_symbol_control_alpha2 = -1; +#define CIGI3_PACKET_SIZE_SHORT_SYMBOL_CONTROL 32 +static int hf_cigi3_3_short_symbol_control; +static int hf_cigi3_3_short_symbol_control_symbol_id; +static int hf_cigi3_3_short_symbol_control_inherit_color; +static int hf_cigi3_3_short_symbol_control_flash_control; +static int hf_cigi3_3_short_symbol_control_attach_state; +static int hf_cigi3_3_short_symbol_control_symbol_state; +static int hf_cigi3_3_short_symbol_control_attribute_select1; +static int hf_cigi3_3_short_symbol_control_attribute_select2; +static int hf_cigi3_3_short_symbol_control_attribute_value1; +static int hf_cigi3_3_short_symbol_control_attribute_value2; +static int hf_cigi3_3_short_symbol_control_attribute_value1f; +static int hf_cigi3_3_short_symbol_control_attribute_value2f; +static int hf_cigi3_3_short_symbol_control_red1; +static int hf_cigi3_3_short_symbol_control_green1; +static int hf_cigi3_3_short_symbol_control_blue1; +static int hf_cigi3_3_short_symbol_control_alpha1; +static int hf_cigi3_3_short_symbol_control_red2; +static int hf_cigi3_3_short_symbol_control_green2; +static int hf_cigi3_3_short_symbol_control_blue2; +static int hf_cigi3_3_short_symbol_control_alpha2; static const value_string cigi3_3_short_symbol_control_attribute_select_vals[] = { {0, "None"}, @@ -1985,16 +2128,56 @@ static const value_string cigi3_3_short_symbol_control_attribute_select_vals[] = {0, NULL} }; + +/* CIGI4 Short Symbol Control */ +#define CIGI4_PACKET_SIZE_SHORT_SYMBOL_CONTROL 24 + +/* CIGI4 Symbol Textured Circle */ +//#define CIGI4_PACKET_SIZE_SYMBOL_CIRCLE_TEXTURED_DEFINITION 16 + (40 x n) +static int hf_cigi4_symbol_circle_textured_definition; +static int hf_cigi4_symbol_circle_textured_definition_symbol_id; +static int hf_cigi4_symbol_circle_textured_definition_texture_id; +static int hf_cigi4_symbol_circle_textured_definition_filter_mode; +static int hf_cigi4_symbol_circle_textured_definition_wrap; +static int hf_cigi4_symbol_circle_textured_definition_center_u[9]; +static int hf_cigi4_symbol_circle_textured_definition_center_v[9]; +static int hf_cigi4_symbol_circle_textured_definition_radius[9]; +static int hf_cigi4_symbol_circle_textured_definition_inner_radius[9]; +static int hf_cigi4_symbol_circle_textured_definition_start_angle[9]; +static int hf_cigi4_symbol_circle_textured_definition_end_angle[9]; +static int hf_cigi4_symbol_circle_textured_definition_texture_center_u[9]; +static int hf_cigi4_symbol_circle_textured_definition_texture_center_v[9]; +static int hf_cigi4_symbol_circle_textured_definition_texture_radius[9]; +static int hf_cigi4_symbol_circle_textured_definition_texture_rotation[9]; +static int hf_cigi4_symbol_circle_textured_definition_circles; + +static int ett_cigi4_symbol_circle_textured_definition_circles; + +/* CIGI4 Symbol Textured Polygon */ +//#define CIGI4_PACKET_SIZE_SYMBOL_POLYGON_TEXTURED_DEFINITION 16 + (16 x n) +static int hf_cigi4_symbol_polygon_textured_definition; +static int hf_cigi4_symbol_polygon_textured_definition_symbol_id; +static int hf_cigi4_symbol_polygon_textured_definition_texture_id; +static int hf_cigi4_symbol_polygon_textured_definition_filter_mode; +static int hf_cigi4_symbol_polygon_textured_definition_wrap; +static int hf_cigi4_symbol_polygon_textured_definition_vertices; +static int hf_cigi4_symbol_polygon_textured_definition_vertex_u[29]; +static int hf_cigi4_symbol_polygon_textured_definition_vertex_v[29]; +static int hf_cigi4_symbol_polygon_textured_definition_texture_center_u[29]; +static int hf_cigi4_symbol_polygon_textured_definition_texture_center_v[29]; + +static int ett_cigi4_symbol_polygon_textured_definition_vertices; + /* CIGI3 Start of Frame */ #define CIGI3_PACKET_SIZE_START_OF_FRAME 16 -static int hf_cigi3_start_of_frame = -1; -static int hf_cigi3_start_of_frame_db_number = -1; -static int hf_cigi3_start_of_frame_ig_status = -1; -static int hf_cigi3_start_of_frame_ig_mode = -1; -static int hf_cigi3_start_of_frame_timestamp_valid = -1; -static int hf_cigi3_start_of_frame_earth_reference_model = -1; -static int hf_cigi3_start_of_frame_frame_ctr = -1; -static int hf_cigi3_start_of_frame_timestamp = -1; +static int hf_cigi3_start_of_frame; +static int hf_cigi3_start_of_frame_db_number; +static int hf_cigi3_start_of_frame_ig_status; +static int hf_cigi3_start_of_frame_ig_mode; +static int hf_cigi3_start_of_frame_timestamp_valid; +static int hf_cigi3_start_of_frame_earth_reference_model; +static int hf_cigi3_start_of_frame_frame_ctr; +static int hf_cigi3_start_of_frame_timestamp; static const value_string cigi3_start_of_frame_ig_mode_vals[] = { {0, "Reset/Standby"}, @@ -2011,37 +2194,18 @@ static const true_false_string cigi3_start_of_frame_earth_reference_model_tfs = /* CIGI3_2 Start of Frame */ #define CIGI3_2_PACKET_SIZE_START_OF_FRAME 24 -static int hf_cigi3_2_start_of_frame = -1; -static int hf_cigi3_2_start_of_frame_db_number = -1; -static int hf_cigi3_2_start_of_frame_ig_status = -1; -static int hf_cigi3_2_start_of_frame_ig_mode = -1; -static int hf_cigi3_2_start_of_frame_timestamp_valid = -1; -static int hf_cigi3_2_start_of_frame_earth_reference_model = -1; -static int hf_cigi3_2_start_of_frame_minor_version = -1; -static int hf_cigi3_2_start_of_frame_ig_frame_number = -1; -static int hf_cigi3_2_start_of_frame_timestamp = -1; -static int hf_cigi3_2_start_of_frame_last_host_frame_number = -1; - -static const value_string cigi3_2_start_of_frame_ig_mode_vals[] = { - {0, "Reset/Standby"}, - {1, "Operate"}, - {2, "Debug"}, - {3, "Offline Maintenance"}, - {0, NULL}, -}; - -static const true_false_string cigi3_2_start_of_frame_earth_reference_model_tfs = { - "Host-Defined", - "WGS 84" -}; +static int hf_cigi3_2_start_of_frame; +static int hf_cigi3_2_start_of_frame_minor_version; +static int hf_cigi3_2_start_of_frame_ig_frame_number; +static int hf_cigi3_2_start_of_frame_last_host_frame_number; /* CIGI3 HAT/HOT Response */ #define CIGI3_PACKET_SIZE_HAT_HOT_RESPONSE 16 -static int hf_cigi3_hat_hot_response = -1; -static int hf_cigi3_hat_hot_response_hat_hot_id = -1; -static int hf_cigi3_hat_hot_response_valid = -1; -static int hf_cigi3_hat_hot_response_type = -1; -static int hf_cigi3_hat_hot_response_height = -1; +static int hf_cigi3_hat_hot_response; +static int hf_cigi3_hat_hot_response_hat_hot_id; +static int hf_cigi3_hat_hot_response_valid; +static int hf_cigi3_hat_hot_response_type; +static int hf_cigi3_hat_hot_response_height; static const true_false_string cigi3_hat_hot_response_type_tfs = { "HOT", @@ -2049,122 +2213,91 @@ static const true_false_string cigi3_hat_hot_response_type_tfs = { }; /* CIGI3_2 HAT/HOT Response */ -#define CIGI3_2_PACKET_SIZE_HAT_HOT_RESPONSE 16 -static int hf_cigi3_2_hat_hot_response = -1; -static int hf_cigi3_2_hat_hot_response_hat_hot_id = -1; -static int hf_cigi3_2_hat_hot_response_valid = -1; -static int hf_cigi3_2_hat_hot_response_type = -1; -static int hf_cigi3_2_hat_hot_response_host_frame_number_lsn = -1; -static int hf_cigi3_2_hat_hot_response_height = -1; - -static const true_false_string cigi3_2_hat_hot_response_type_tfs = { - "HOT", - "HAT" -}; +static int hf_cigi3_2_hat_hot_response_host_frame_number_lsn; + +/* CIGI4 HAT/HOT Response */ +#define CIGI4_PACKET_SIZE_HAT_HOT_RESPONSE 16 +static int hf_cigi4_hat_hot_response_flags; + +static int ett_cigi4_hat_hot_response_flags; /* CIGI3 HAT/HOT Extended Response */ #define CIGI3_PACKET_SIZE_HAT_HOT_EXTENDED_RESPONSE 40 -static int hf_cigi3_hat_hot_extended_response = -1; -static int hf_cigi3_hat_hot_extended_response_hat_hot_id = -1; -static int hf_cigi3_hat_hot_extended_response_valid = -1; -static int hf_cigi3_hat_hot_extended_response_hat = -1; -static int hf_cigi3_hat_hot_extended_response_hot = -1; -static int hf_cigi3_hat_hot_extended_response_material_code = -1; -static int hf_cigi3_hat_hot_extended_response_normal_vector_azimuth = -1; -static int hf_cigi3_hat_hot_extended_response_normal_vector_elevation = -1; +static int hf_cigi3_hat_hot_extended_response; +static int hf_cigi3_hat_hot_extended_response_hat_hot_id; +static int hf_cigi3_hat_hot_extended_response_valid; +static int hf_cigi3_hat_hot_extended_response_hat; +static int hf_cigi3_hat_hot_extended_response_hot; +static int hf_cigi3_hat_hot_extended_response_material_code; +static int hf_cigi3_hat_hot_extended_response_normal_vector_azimuth; +static int hf_cigi3_hat_hot_extended_response_normal_vector_elevation; /* CIGI3_2 HAT/HOT Extended Response */ -#define CIGI3_2_PACKET_SIZE_HAT_HOT_EXTENDED_RESPONSE 40 -static int hf_cigi3_2_hat_hot_extended_response = -1; -static int hf_cigi3_2_hat_hot_extended_response_hat_hot_id = -1; -static int hf_cigi3_2_hat_hot_extended_response_valid = -1; -static int hf_cigi3_2_hat_hot_extended_response_host_frame_number_lsn = -1; -static int hf_cigi3_2_hat_hot_extended_response_hat = -1; -static int hf_cigi3_2_hat_hot_extended_response_hot = -1; -static int hf_cigi3_2_hat_hot_extended_response_material_code = -1; -static int hf_cigi3_2_hat_hot_extended_response_normal_vector_azimuth = -1; -static int hf_cigi3_2_hat_hot_extended_response_normal_vector_elevation = -1; +static int hf_cigi3_2_hat_hot_extended_response_host_frame_number_lsn; + +/* CIGI4 HAT/HOT Extended Response */ +#define CIGI4_PACKET_SIZE_HAT_HOT_EXTENDED_RESPONSE 40 +static int hf_cigi4_hat_hot_extended_response_flags; + +static int ett_cigi4_hat_hot_extended_response_flags; /* CIGI3 Line of Sight Response */ #define CIGI3_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE 16 -static int hf_cigi3_line_of_sight_response = -1; -static int hf_cigi3_line_of_sight_response_los_id = -1; -static int hf_cigi3_line_of_sight_response_valid = -1; -static int hf_cigi3_line_of_sight_response_entity_id_valid = -1; -static int hf_cigi3_line_of_sight_response_visible = -1; -static int hf_cigi3_line_of_sight_response_count = -1; -static int hf_cigi3_line_of_sight_response_entity_id = -1; -static int hf_cigi3_line_of_sight_response_range = -1; +static int hf_cigi3_line_of_sight_response; +static int hf_cigi3_line_of_sight_response_los_id; +static int hf_cigi3_line_of_sight_response_valid; +static int hf_cigi3_line_of_sight_response_entity_id_valid; +static int hf_cigi3_line_of_sight_response_visible; +static int hf_cigi3_line_of_sight_response_count; +static int hf_cigi3_line_of_sight_response_entity_id; +static int hf_cigi3_line_of_sight_response_range; /* CIGI3_2 Line of Sight Response */ -#define CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE 16 -static int hf_cigi3_2_line_of_sight_response = -1; -static int hf_cigi3_2_line_of_sight_response_los_id = -1; -static int hf_cigi3_2_line_of_sight_response_valid = -1; -static int hf_cigi3_2_line_of_sight_response_entity_id_valid = -1; -static int hf_cigi3_2_line_of_sight_response_visible = -1; -static int hf_cigi3_2_line_of_sight_response_host_frame_number_lsn = -1; -static int hf_cigi3_2_line_of_sight_response_count = -1; -static int hf_cigi3_2_line_of_sight_response_entity_id = -1; -static int hf_cigi3_2_line_of_sight_response_range = -1; +static int hf_cigi3_2_line_of_sight_response_host_frame_number_lsn; + +/* CIGI4 Line of Sight Response */ +#define CIGI4_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE 24 /* CIGI3 Line of Sight Extended Response */ #define CIGI3_PACKET_SIZE_LINE_OF_SIGHT_EXTENDED_RESPONSE 56 -static int hf_cigi3_line_of_sight_extended_response = -1; -static int hf_cigi3_line_of_sight_extended_response_los_id = -1; -static int hf_cigi3_line_of_sight_extended_response_valid = -1; -static int hf_cigi3_line_of_sight_extended_response_entity_id_valid = -1; -static int hf_cigi3_line_of_sight_extended_response_range_valid = -1; -static int hf_cigi3_line_of_sight_extended_response_visible = -1; -static int hf_cigi3_line_of_sight_extended_response_intersection_coord = -1; -static int hf_cigi3_line_of_sight_extended_response_response_count = -1; -static int hf_cigi3_line_of_sight_extended_response_entity_id = -1; -static int hf_cigi3_line_of_sight_extended_response_range = -1; -static int hf_cigi3_line_of_sight_extended_response_lat_xoff = -1; -static int hf_cigi3_line_of_sight_extended_response_lon_yoff = -1; -static int hf_cigi3_line_of_sight_extended_response_alt_zoff = -1; -static int hf_cigi3_line_of_sight_extended_response_red = -1; -static int hf_cigi3_line_of_sight_extended_response_green = -1; -static int hf_cigi3_line_of_sight_extended_response_blue = -1; -static int hf_cigi3_line_of_sight_extended_response_alpha = -1; -static int hf_cigi3_line_of_sight_extended_response_material_code = -1; -static int hf_cigi3_line_of_sight_extended_response_normal_vector_azimuth = -1; -static int hf_cigi3_line_of_sight_extended_response_normal_vector_elevation = -1; +static int hf_cigi3_line_of_sight_extended_response; +static int hf_cigi3_line_of_sight_extended_response_los_id; +static int hf_cigi3_line_of_sight_extended_response_valid; +static int hf_cigi3_line_of_sight_extended_response_entity_id_valid; +static int hf_cigi3_line_of_sight_extended_response_range_valid; +static int hf_cigi3_line_of_sight_extended_response_visible; +static int hf_cigi3_line_of_sight_extended_response_intersection_coord; +static int hf_cigi3_line_of_sight_extended_response_response_count; +static int hf_cigi3_line_of_sight_extended_response_entity_id; +static int hf_cigi3_line_of_sight_extended_response_range; +static int hf_cigi3_line_of_sight_extended_response_lat_xoff; +static int hf_cigi3_line_of_sight_extended_response_lon_yoff; +static int hf_cigi3_line_of_sight_extended_response_alt_zoff; +static int hf_cigi3_line_of_sight_extended_response_red; +static int hf_cigi3_line_of_sight_extended_response_green; +static int hf_cigi3_line_of_sight_extended_response_blue; +static int hf_cigi3_line_of_sight_extended_response_alpha; +static int hf_cigi3_line_of_sight_extended_response_material_code; +static int hf_cigi3_line_of_sight_extended_response_normal_vector_azimuth; +static int hf_cigi3_line_of_sight_extended_response_normal_vector_elevation; /* CIGI3_2 Line of Sight Extended Response */ -#define CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_EXTENDED_RESPONSE 56 -static int hf_cigi3_2_line_of_sight_extended_response = -1; -static int hf_cigi3_2_line_of_sight_extended_response_los_id = -1; -static int hf_cigi3_2_line_of_sight_extended_response_valid = -1; -static int hf_cigi3_2_line_of_sight_extended_response_entity_id_valid = -1; -static int hf_cigi3_2_line_of_sight_extended_response_range_valid = -1; -static int hf_cigi3_2_line_of_sight_extended_response_visible = -1; -static int hf_cigi3_2_line_of_sight_extended_response_host_frame_number_lsn = -1; -static int hf_cigi3_2_line_of_sight_extended_response_response_count = -1; -static int hf_cigi3_2_line_of_sight_extended_response_entity_id = -1; -static int hf_cigi3_2_line_of_sight_extended_response_range = -1; -static int hf_cigi3_2_line_of_sight_extended_response_lat_xoff = -1; -static int hf_cigi3_2_line_of_sight_extended_response_lon_yoff = -1; -static int hf_cigi3_2_line_of_sight_extended_response_alt_zoff = -1; -static int hf_cigi3_2_line_of_sight_extended_response_red = -1; -static int hf_cigi3_2_line_of_sight_extended_response_green = -1; -static int hf_cigi3_2_line_of_sight_extended_response_blue = -1; -static int hf_cigi3_2_line_of_sight_extended_response_alpha = -1; -static int hf_cigi3_2_line_of_sight_extended_response_material_code = -1; -static int hf_cigi3_2_line_of_sight_extended_response_normal_vector_azimuth = -1; -static int hf_cigi3_2_line_of_sight_extended_response_normal_vector_elevation = -1; +static int hf_cigi3_2_line_of_sight_extended_response_host_frame_number_lsn; + +/* CIGI4 Line of Sight Extended Response */ +#define CIGI4_PACKET_SIZE_LINE_OF_SIGHT_EXTENDED_RESPONSE 64 /* CIGI3 Sensor Response */ #define CIGI3_PACKET_SIZE_SENSOR_RESPONSE 24 -static int hf_cigi3_sensor_response = -1; -static int hf_cigi3_sensor_response_view_id = -1; -static int hf_cigi3_sensor_response_sensor_id = -1; -static int hf_cigi3_sensor_response_sensor_status = -1; -static int hf_cigi3_sensor_response_gate_x_size = -1; -static int hf_cigi3_sensor_response_gate_y_size = -1; -static int hf_cigi3_sensor_response_gate_x_pos = -1; -static int hf_cigi3_sensor_response_gate_y_pos = -1; -static int hf_cigi3_sensor_response_frame_ctr = -1; +static int hf_cigi3_sensor_response; +static int hf_cigi3_sensor_response_view_id; +static int hf_cigi3_sensor_response_sensor_id; +static int hf_cigi3_sensor_response_sensor_status; +static int hf_cigi3_sensor_response_gate_x_size; +static int hf_cigi3_sensor_response_gate_y_size; +static int hf_cigi3_sensor_response_gate_x_pos; +static int hf_cigi3_sensor_response_gate_y_pos; +static int hf_cigi3_sensor_response_frame_ctr; static const value_string cigi3_sensor_response_sensor_status_vals[] = { {0, "Searching for target"}, @@ -2174,22 +2307,25 @@ static const value_string cigi3_sensor_response_sensor_status_vals[] = { {0, NULL}, }; +/* CIGI4 Sensor Response */ +#define CIGI4_PACKET_SIZE_SENSOR_RESPONSE 24 + /* CIGI3 Sensor Extended Response */ #define CIGI3_PACKET_SIZE_SENSOR_EXTENDED_RESPONSE 48 -static int hf_cigi3_sensor_extended_response = -1; -static int hf_cigi3_sensor_extended_response_view_id = -1; -static int hf_cigi3_sensor_extended_response_sensor_id = -1; -static int hf_cigi3_sensor_extended_response_sensor_status = -1; -static int hf_cigi3_sensor_extended_response_entity_id_valid = -1; -static int hf_cigi3_sensor_extended_response_entity_id = -1; -static int hf_cigi3_sensor_extended_response_gate_x_size = -1; -static int hf_cigi3_sensor_extended_response_gate_y_size = -1; -static int hf_cigi3_sensor_extended_response_gate_x_pos = -1; -static int hf_cigi3_sensor_extended_response_gate_y_pos = -1; -static int hf_cigi3_sensor_extended_response_frame_ctr = -1; -static int hf_cigi3_sensor_extended_response_track_lat = -1; -static int hf_cigi3_sensor_extended_response_track_lon = -1; -static int hf_cigi3_sensor_extended_response_track_alt = -1; +static int hf_cigi3_sensor_extended_response; +static int hf_cigi3_sensor_extended_response_view_id; +static int hf_cigi3_sensor_extended_response_sensor_id; +static int hf_cigi3_sensor_extended_response_sensor_status; +static int hf_cigi3_sensor_extended_response_entity_id_valid; +static int hf_cigi3_sensor_extended_response_entity_id; +static int hf_cigi3_sensor_extended_response_gate_x_size; +static int hf_cigi3_sensor_extended_response_gate_y_size; +static int hf_cigi3_sensor_extended_response_gate_x_pos; +static int hf_cigi3_sensor_extended_response_gate_y_pos; +static int hf_cigi3_sensor_extended_response_frame_ctr; +static int hf_cigi3_sensor_extended_response_track_lat; +static int hf_cigi3_sensor_extended_response_track_lon; +static int hf_cigi3_sensor_extended_response_track_alt; static const value_string cigi3_sensor_extended_response_sensor_status_vals[] = { {0, "Searching for target"}, @@ -2199,19 +2335,23 @@ static const value_string cigi3_sensor_extended_response_sensor_status_vals[] = {0, NULL}, }; + +/* CIGI4 Sensor Extended Response */ +#define CIGI4_PACKET_SIZE_SENSOR_EXTENDED_RESPONSE 56 + /* CIGI3 Position Response */ #define CIGI3_PACKET_SIZE_POSITION_RESPONSE 48 -static int hf_cigi3_position_response = -1; -static int hf_cigi3_position_response_object_id = -1; -static int hf_cigi3_position_response_part_id = -1; -static int hf_cigi3_position_response_object_class = -1; -static int hf_cigi3_position_response_coord_system = -1; -static int hf_cigi3_position_response_lat_xoff = -1; -static int hf_cigi3_position_response_lon_yoff = -1; -static int hf_cigi3_position_response_alt_zoff = -1; -static int hf_cigi3_position_response_roll = -1; -static int hf_cigi3_position_response_pitch = -1; -static int hf_cigi3_position_response_yaw = -1; +static int hf_cigi3_position_response; +static int hf_cigi3_position_response_object_id; +static int hf_cigi3_position_response_part_id; +static int hf_cigi3_position_response_object_class; +static int hf_cigi3_position_response_coord_system; +static int hf_cigi3_position_response_lat_xoff; +static int hf_cigi3_position_response_lon_yoff; +static int hf_cigi3_position_response_alt_zoff; +static int hf_cigi3_position_response_roll; +static int hf_cigi3_position_response_pitch; +static int hf_cigi3_position_response_yaw; static const value_string cigi3_position_response_object_class_vals[] = { {0, "Entity"}, @@ -2229,91 +2369,350 @@ static const value_string cigi3_position_response_coord_system_vals[] = { {0, NULL}, }; + +/* CIGI4 Position Response */ +#define CIGI4_PACKET_SIZE_POSITION_RESPONSE 48 + /* CIGI3 Weather Conditions Response */ #define CIGI3_PACKET_SIZE_WEATHER_CONDITIONS_RESPONSE 32 -static int hf_cigi3_weather_conditions_response = -1; -static int hf_cigi3_weather_conditions_response_request_id = -1; -static int hf_cigi3_weather_conditions_response_humidity = -1; -static int hf_cigi3_weather_conditions_response_air_temp = -1; -static int hf_cigi3_weather_conditions_response_visibility_range = -1; -static int hf_cigi3_weather_conditions_response_horiz_speed = -1; -static int hf_cigi3_weather_conditions_response_vert_speed = -1; -static int hf_cigi3_weather_conditions_response_wind_direction = -1; -static int hf_cigi3_weather_conditions_response_barometric_pressure = -1; +static int hf_cigi3_weather_conditions_response; +static int hf_cigi3_weather_conditions_response_request_id; +static int hf_cigi3_weather_conditions_response_humidity; +static int hf_cigi3_weather_conditions_response_air_temp; +static int hf_cigi3_weather_conditions_response_visibility_range; +static int hf_cigi3_weather_conditions_response_horiz_speed; +static int hf_cigi3_weather_conditions_response_vert_speed; +static int hf_cigi3_weather_conditions_response_wind_direction; +static int hf_cigi3_weather_conditions_response_barometric_pressure; + +/* CIGI4 Weather Conditions Response */ +#define CIGI4_PACKET_SIZE_WEATHER_CONDITIONS_RESPONSE 32 /* CIGI3 Aerosol Concentration Response */ #define CIGI3_PACKET_SIZE_AEROSOL_CONCENTRATION_RESPONSE 8 -static int hf_cigi3_aerosol_concentration_response = -1; -static int hf_cigi3_aerosol_concentration_response_request_id = -1; -static int hf_cigi3_aerosol_concentration_response_layer_id = -1; -static int hf_cigi3_aerosol_concentration_response_aerosol_concentration = -1; +static int hf_cigi3_aerosol_concentration_response; +static int hf_cigi3_aerosol_concentration_response_request_id; +static int hf_cigi3_aerosol_concentration_response_layer_id; +static int hf_cigi3_aerosol_concentration_response_aerosol_concentration; + +/* CIGI4 Aerosol Concentration Response */ +#define CIGI4_PACKET_SIZE_AEROSOL_CONCENTRATION_RESPONSE 16 /* CIGI3 Maritime Surface Conditions Response */ #define CIGI3_PACKET_SIZE_MARITIME_SURFACE_CONDITIONS_RESPONSE 16 -static int hf_cigi3_maritime_surface_conditions_response = -1; -static int hf_cigi3_maritime_surface_conditions_response_request_id = -1; -static int hf_cigi3_maritime_surface_conditions_response_sea_surface_height = -1; -static int hf_cigi3_maritime_surface_conditions_response_surface_water_temp = -1; -static int hf_cigi3_maritime_surface_conditions_response_surface_clarity = -1; +static int hf_cigi3_maritime_surface_conditions_response; +static int hf_cigi3_maritime_surface_conditions_response_request_id; +static int hf_cigi3_maritime_surface_conditions_response_sea_surface_height; +static int hf_cigi3_maritime_surface_conditions_response_surface_water_temp; +static int hf_cigi3_maritime_surface_conditions_response_surface_clarity; + +/* CIGI4 Maritime Surface Conditions Response */ +#define CIGI4_PACKET_SIZE_MARITIME_SURFACE_CONDITIONS_RESPONSE 24 /* CIGI3 Terrestrial Surface Conditions Response */ #define CIGI3_PACKET_SIZE_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE 8 -static int hf_cigi3_terrestrial_surface_conditions_response = -1; -static int hf_cigi3_terrestrial_surface_conditions_response_request_id = -1; -static int hf_cigi3_terrestrial_surface_conditions_response_surface_id = -1; +static int hf_cigi3_terrestrial_surface_conditions_response; +static int hf_cigi3_terrestrial_surface_conditions_response_request_id; +static int hf_cigi3_terrestrial_surface_conditions_response_surface_id; + +/* CIGI4 Terrestrial Surface Conditions Response */ +#define CIGI4_PACKET_SIZE_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE 16 /* CIGI3 Collision Detection Segment Notification */ #define CIGI3_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_NOTIFICATION 16 -static int hf_cigi3_collision_detection_segment_notification = -1; -static int hf_cigi3_collision_detection_segment_notification_entity_id = -1; -static int hf_cigi3_collision_detection_segment_notification_segment_id = -1; -static int hf_cigi3_collision_detection_segment_notification_type = -1; -static int hf_cigi3_collision_detection_segment_notification_contacted_entity_id = -1; -static int hf_cigi3_collision_detection_segment_notification_material_code = -1; -static int hf_cigi3_collision_detection_segment_notification_intersection_distance = -1; +static int hf_cigi3_collision_detection_segment_notification; +static int hf_cigi3_collision_detection_segment_notification_entity_id; +static int hf_cigi3_collision_detection_segment_notification_segment_id; +static int hf_cigi3_collision_detection_segment_notification_type; +static int hf_cigi3_collision_detection_segment_notification_contacted_entity_id; +static int hf_cigi3_collision_detection_segment_notification_material_code; +static int hf_cigi3_collision_detection_segment_notification_intersection_distance; static const true_false_string cigi3_collision_detection_segment_notification_type_tfs = { "Entity", "Non-entity" }; +/* CIGI4 Collision Detection Segment Notification */ +#define CIGI4_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_NOTIFICATION 24 + /* CIGI3 Collision Detection Volume Notification */ #define CIGI3_PACKET_SIZE_COLLISION_DETECTION_VOLUME_NOTIFICATION 16 -static int hf_cigi3_collision_detection_volume_notification = -1; -static int hf_cigi3_collision_detection_volume_notification_entity_id = -1; -static int hf_cigi3_collision_detection_volume_notification_volume_id = -1; -static int hf_cigi3_collision_detection_volume_notification_type = -1; -static int hf_cigi3_collision_detection_volume_notification_contacted_entity_id = -1; -static int hf_cigi3_collision_detection_volume_notification_contacted_volume_id = -1; +static int hf_cigi3_collision_detection_volume_notification; +static int hf_cigi3_collision_detection_volume_notification_entity_id; +static int hf_cigi3_collision_detection_volume_notification_volume_id; +static int hf_cigi3_collision_detection_volume_notification_type; +static int hf_cigi3_collision_detection_volume_notification_contacted_entity_id; +static int hf_cigi3_collision_detection_volume_notification_contacted_volume_id; static const true_false_string cigi3_collision_detection_volume_notification_type_tfs = { "Entity", "Non-entity" }; +/* CIGI4 Collision Detection Volume Notification */ +#define CIGI4_PACKET_SIZE_COLLISION_DETECTION_VOLUME_NOTIFICATION 16 + /* CIGI3 Animation Stop Notification */ #define CIGI3_PACKET_SIZE_ANIMATION_STOP_NOTIFICATION 8 -static int hf_cigi3_animation_stop_notification = -1; -static int hf_cigi3_animation_stop_notification_entity_id = -1; +static int hf_cigi3_animation_stop_notification; +static int hf_cigi3_animation_stop_notification_entity_id; + +/* CIGI4 Animation Stop Notification */ +#define CIGI4_PACKET_SIZE_ANIMATION_STOP_NOTIFICATION 8 /* CIGI3 Event Notification */ #define CIGI3_PACKET_SIZE_EVENT_NOTIFICATION 16 -static int hf_cigi3_event_notification = -1; -static int hf_cigi3_event_notification_event_id = -1; -static int hf_cigi3_event_notification_data_1 = -1; -static int hf_cigi3_event_notification_data_2 = -1; -static int hf_cigi3_event_notification_data_3 = -1; +static int hf_cigi3_event_notification; +static int hf_cigi3_event_notification_event_id; +static int hf_cigi3_event_notification_data_1; +static int hf_cigi3_event_notification_data_2; +static int hf_cigi3_event_notification_data_3; + +/* CIGI4 Event Notification */ +#define CIGI4_PACKET_SIZE_EVENT_NOTIFICATION 24 /* CIGI3 Image Generator Message */ -static int hf_cigi3_image_generator_message = -1; -static int hf_cigi3_image_generator_message_id = -1; -static int hf_cigi3_image_generator_message_message = -1; +static int hf_cigi3_image_generator_message; +static int hf_cigi3_image_generator_message_id; +static int hf_cigi3_image_generator_message_message; + +/* CIGI4 Image Generator Message */ /* CIGI3 User-Defined Packets */ -static int hf_cigi3_user_defined = -1; +static int hf_cigi3_user_defined; + +/* CIGI4 Locally Defined Packets */ +static int hf_cigi4_locally_defined; + +/* CIGI4 Registered Packets */ +static int hf_cigi4_registered; + +static expert_field ei_cigi_invalid_len; + + +/* CIGI4 Packet ID */ +static int hf_cigi4_packet_id; +static int hf_cigi4_packet_size; +#define CIGI4_PACKET_ID_IG_CONTROL 0x00 +#define CIGI4_PACKET_ID_ENTITY_POSITION 0x01 +#define CIGI4_PACKET_ID_CONFORMAL_CLAMPED_ENTITY_POSITION 0x02 +#define CIGI4_PACKET_ID_COMPONENT_CONTROL 0x03 +#define CIGI4_PACKET_ID_SHORT_COMPONENT_CONTROL 0x04 +#define CIGI4_PACKET_ID_ARTICULATED_PART_CONTROL 0x05 +#define CIGI4_PACKET_ID_SHORT_ARTICULATED_PART_CONTROL 0x06 +#define CIGI4_PACKET_ID_VELOCITY_CONTROL 0x07 +#define CIGI4_PACKET_ID_CELESTIAL_SPHERE_CONTROL 0x08 +#define CIGI4_PACKET_ID_ATMOSPHERE_CONTROL 0x09 +#define CIGI4_PACKET_ID_ENVIRONMENTAL_REGION_CONTROL 0x0A +#define CIGI4_PACKET_ID_WEATHER_CONTROL 0x0B +#define CIGI4_PACKET_ID_MARITIME_SURFACE_CONDITIONS_CONTROL 0x0C +#define CIGI4_PACKET_ID_WAVE_CONTROL 0x0D +#define CIGI4_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL 0x0E +#define CIGI4_PACKET_ID_VIEW_CONTROL 0x0F +#define CIGI4_PACKET_ID_SENSOR_CONTROL 0x10 +#define CIGI4_PACKET_ID_MOTION_TRACKER_CONTROL 0x11 +#define CIGI4_PACKET_ID_EARTH_REFERENCE_MODEL_DEFINITION 0x12 +#define CIGI4_PACKET_ID_ACCELERATION_CONTROL 0x13 +#define CIGI4_PACKET_ID_VIEW_DEFINITION 0x14 +#define CIGI4_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION 0x15 +#define CIGI4_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION 0x16 +#define CIGI4_PACKET_ID_HAT_HOT_REQUEST 0x17 +#define CIGI4_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST 0x18 +#define CIGI4_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST 0x19 +#define CIGI4_PACKET_ID_POSITION_REQUEST 0x1A +#define CIGI4_PACKET_ID_ENVIRONMENTAL_CONDITIONS_REQUEST 0x1B +#define CIGI4_PACKET_ID_SYMBOL_SURFACE_DEFINITION 0x1C +#define CIGI4_PACKET_ID_SYMBOL_TEXT_DEFINITION 0x1D +#define CIGI4_PACKET_ID_SYMBOL_CIRCLE_DEFINITION 0x1E +#define CIGI4_PACKET_ID_SYMBOL_POLYGON_DEFINITION 0x1F +#define CIGI4_PACKET_ID_SYMBOL_CLONE 0x20 +#define CIGI4_PACKET_ID_SYMBOL_CONTROL 0x21 +#define CIGI4_PACKET_ID_SHORT_SYMBOL_CONTROL 0x22 +#define CIGI4_PACKET_ID_SYMBOL_CIRCLE_TEXTURED_DEFINITION 0x23 +#define CIGI4_PACKET_ID_SYMBOL_POLYGON_TEXTURED_DEFINITION 0x24 +#define CIGI4_PACKET_ID_ENTITY_CONTROL 0x25 +#define CIGI4_PACKET_ID_ANIMATION_CONTROL 0x26 + +#define CIGI4_PACKET_ID_IMAGE_GENERATOR_MESSAGE 0x0FF0 +#define CIGI4_PACKET_ID_EVENT_NOTIFICATION 0x0FF1 +#define CIGI4_PACKET_ID_ANIMATION_STOP_NOTIFICATION 0x0FF2 +#define CIGI4_PACKET_ID_COLLISION_DETECTION_VOLUME_NOTIFICATION 0x0FF3 +#define CIGI4_PACKET_ID_COLLISION_DETECTION_SEGMENT_NOTIFICATION 0x0FF4 +#define CIGI4_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE 0x0FF5 +#define CIGI4_PACKET_ID_MARITIME_SURFACE_CONDITIONS_RESPONSE 0x0FF6 +#define CIGI4_PACKET_ID_AEROSOL_CONCENTRATION_RESPONSE 0x0FF7 +#define CIGI4_PACKET_ID_WEATHER_CONDITIONS_RESPONSE 0x0FF8 +#define CIGI4_PACKET_ID_POSITION_RESPONSE 0x0FF9 +#define CIGI4_PACKET_ID_SENSOR_EXTENDED_RESPONSE 0x0FFA +#define CIGI4_PACKET_ID_SENSOR_RESPONSE 0x0FFB +#define CIGI4_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE 0x0FFC +#define CIGI4_PACKET_ID_LINE_OF_SIGHT_RESPONSE 0x0FFD +#define CIGI4_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE 0x0FFE +#define CIGI4_PACKET_ID_HAT_HOT_RESPONSE 0x0FFF +#define CIGI4_PACKET_ID_START_OF_FRAME 0xFFFF + +/* These locally defined values mean that perhaps a range_string + * is more appropriate than a value_string. + */ +#define CIGI4_PACKET_ID_LOCALLY_DEFINED_MAX 0xFFFE +#define CIGI4_PACKET_ID_LOCALLY_DEFINED_MIN 0x8000 +#define CIGI4_PACKET_ID_REGISTERED_MAX 0x7FFF +#define CIGI4_PACKET_ID_REGISTERED_MIN 0x1000 + +static const value_string cigi4_packet_id_vals[] = { + {CIGI4_PACKET_ID_IG_CONTROL, "IG Control"}, + {CIGI4_PACKET_ID_ENTITY_POSITION, "Entity Position"}, + {CIGI4_PACKET_ID_CONFORMAL_CLAMPED_ENTITY_POSITION, "Conformal Clamped Entity Position"}, + {CIGI4_PACKET_ID_COMPONENT_CONTROL, "Component Control"}, + {CIGI4_PACKET_ID_SHORT_COMPONENT_CONTROL, "Short Component Control"}, + {CIGI4_PACKET_ID_ARTICULATED_PART_CONTROL, "Articulated Part Control"}, + {CIGI4_PACKET_ID_SHORT_ARTICULATED_PART_CONTROL, "Short Articulated Part Control"}, + {CIGI4_PACKET_ID_VELOCITY_CONTROL, "Velocity Control"}, + {CIGI4_PACKET_ID_CELESTIAL_SPHERE_CONTROL, "Celestial Sphere Control"}, + {CIGI4_PACKET_ID_ATMOSPHERE_CONTROL, "Atmosphere Control"}, + {CIGI4_PACKET_ID_ENVIRONMENTAL_REGION_CONTROL, "Environmental Region Control"}, + {CIGI4_PACKET_ID_WEATHER_CONTROL, "Weather Control"}, + {CIGI4_PACKET_ID_MARITIME_SURFACE_CONDITIONS_CONTROL, "Maritime Surface Conditions Control"}, + {CIGI4_PACKET_ID_WAVE_CONTROL, "Wave Control"}, + {CIGI4_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL, "Terrestrial Surface Conditions Control"}, + {CIGI4_PACKET_ID_VIEW_CONTROL, "View Control"}, + {CIGI4_PACKET_ID_SENSOR_CONTROL, "Sensor Control"}, + {CIGI4_PACKET_ID_MOTION_TRACKER_CONTROL, "Motion Tracker Control"}, + {CIGI4_PACKET_ID_EARTH_REFERENCE_MODEL_DEFINITION, "Earth Reference Model Definition"}, + {CIGI4_PACKET_ID_ACCELERATION_CONTROL, "Acceleration Definition"}, + {CIGI4_PACKET_ID_VIEW_DEFINITION, "View Definition"}, + {CIGI4_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION, "Collision Detection Segment Definition"}, + {CIGI4_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION, "Collision Detection Volume Definition"}, + {CIGI4_PACKET_ID_HAT_HOT_REQUEST, "HAT/HOT Request"}, + {CIGI4_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST, "Line of Sight Segment Request"}, + {CIGI4_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST, "Line of Sight Vector Request"}, + {CIGI4_PACKET_ID_POSITION_REQUEST, "Position Request"}, + {CIGI4_PACKET_ID_ENVIRONMENTAL_CONDITIONS_REQUEST, "Environmental Conditions Request"}, + {CIGI4_PACKET_ID_SYMBOL_SURFACE_DEFINITION, "Symbol Surface Definition"}, + {CIGI4_PACKET_ID_SYMBOL_TEXT_DEFINITION, "Symbol Text Definition"}, + {CIGI4_PACKET_ID_SYMBOL_CIRCLE_DEFINITION, "Symbol Circle Definition"}, + {CIGI4_PACKET_ID_SYMBOL_POLYGON_DEFINITION, "Symbol Polygon Definition"}, + {CIGI4_PACKET_ID_SYMBOL_CLONE, "Symbol Clone"}, + {CIGI4_PACKET_ID_SYMBOL_CONTROL, "Symbol Control"}, + {CIGI4_PACKET_ID_SHORT_SYMBOL_CONTROL, "Short Symbol Control"}, + {CIGI4_PACKET_ID_SYMBOL_CIRCLE_TEXTURED_DEFINITION, "Symbol Textured Circle Definition"}, + {CIGI4_PACKET_ID_SYMBOL_POLYGON_TEXTURED_DEFINITION, "Symbol Textured Polygon Definition"}, + {CIGI4_PACKET_ID_ENTITY_CONTROL, "Entity Control"}, + {CIGI4_PACKET_ID_ANIMATION_CONTROL, "Animation Control"}, + + {CIGI4_PACKET_ID_IMAGE_GENERATOR_MESSAGE, "Image Generator Message"}, + {CIGI4_PACKET_ID_EVENT_NOTIFICATION, "Event Notification"}, + {CIGI4_PACKET_ID_ANIMATION_STOP_NOTIFICATION, "Animation Stop Notification"}, + {CIGI4_PACKET_ID_COLLISION_DETECTION_VOLUME_NOTIFICATION, "Collision Detection Volume Notification"}, + {CIGI4_PACKET_ID_COLLISION_DETECTION_SEGMENT_NOTIFICATION, "Collision Detection Segment Notification"}, + {CIGI4_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE, "Terrestrial Surface Conditions Response"}, + {CIGI4_PACKET_ID_MARITIME_SURFACE_CONDITIONS_RESPONSE, "Maritime Surface Conditions Response"}, + {CIGI4_PACKET_ID_AEROSOL_CONCENTRATION_RESPONSE, "Aerosol Concentration Response"}, + {CIGI4_PACKET_ID_WEATHER_CONDITIONS_RESPONSE, "Weather Conditions Response"}, + {CIGI4_PACKET_ID_POSITION_RESPONSE, "Position Response"}, + {CIGI4_PACKET_ID_SENSOR_EXTENDED_RESPONSE, "Sensor Extended Response"}, + {CIGI4_PACKET_ID_SENSOR_RESPONSE, "Sensor Response"}, + {CIGI4_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE, "Line of Sight Extended Response"}, + {CIGI4_PACKET_ID_LINE_OF_SIGHT_RESPONSE, "Line of Sight Response"}, + {CIGI4_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE, "HAT/HOT Extended Response"}, + {CIGI4_PACKET_ID_HAT_HOT_RESPONSE, "HAT/HOT Response"}, + {CIGI4_PACKET_ID_START_OF_FRAME, "Start of Frame"}, + {0, NULL} +}; +static value_string_ext cigi4_packet_id_vals_ext = VALUE_STRING_EXT_INIT(cigi4_packet_id_vals); + + +/* CIGI4 IG Control */ +#define CIGI4_PACKET_SIZE_IG_CONTROL 24 +static int hf_cigi4_ig_control_flags; +static int hf_cigi4_ig_control_smoothing_enable; +static int hf_cigi4_ig_control_entity_substitution; +static int hf_cigi4_ig_control_entity_substitution_enable; + +static int ett_cigi4_ig_control_flags; +static int ett_cigi4_ig_control_entity_substitution; + +/* CIGI4 Entity Position */ +/* Subset of previous (CIGI3) Entity Control packet containing parameters + * for entity position and attitude. */ +#define CIGI4_PACKET_SIZE_ENTITY_POSITION 48 +static int hf_cigi4_entity_position; +static int hf_cigi4_entity_position_entity_id; +static int hf_cigi4_entity_position_flags; +static int hf_cigi4_entity_position_attach_state; +static int hf_cigi4_entity_position_ground_ocean_clamp; +static int hf_cigi4_entity_position_parent_id; +static int hf_cigi4_entity_position_roll; +static int hf_cigi4_entity_position_pitch; +static int hf_cigi4_entity_position_yaw; +static int hf_cigi4_entity_position_lat_xoff; +static int hf_cigi4_entity_position_lon_yoff; +static int hf_cigi4_entity_position_alt_zoff; + +static int ett_cigi4_entity_position_flags; + +/* CIGI Conformal Clamped Entity Position */ +/* Conformal Clamped Entity Control packet renamed. */ +#define CIGI4_PACKET_SIZE_CONFORMAL_CLAMPED_ENTITY_POSITION 32 +static int hf_cigi4_conformal_clamped_entity_position; +static int hf_cigi4_conformal_clamped_entity_position_entity_id; +static int hf_cigi4_conformal_clamped_entity_position_yaw; +static int hf_cigi4_conformal_clamped_entity_position_lat; +static int hf_cigi4_conformal_clamped_entity_position_lon; + +#define CIGI4_PACKET_SIZE_COMPONENT_CONTROL 40 + +#define CIGI4_PACKET_SIZE_SHORT_COMPONENT_CONTROL 24 + +static const value_string cigi4_entity_control_ground_ocean_clamp_vals[] = { + {0, "No Clamp"}, + {1, "Non-Conformal"}, + {2, "Conformal"}, + {0, NULL}, +}; + +/* CIGI4 Start of Frame*/ +#define CIGI4_PACKET_SIZE_START_OF_FRAME 24 +static int hf_cigi4_start_of_frame; +static int hf_cigi4_start_of_frame_db_number; +static int hf_cigi4_start_of_frame_ig_status; +static int hf_cigi4_start_of_frame_flags; +static int hf_cigi4_start_of_frame_ig_mode; +static int hf_cigi4_start_of_frame_timestamp_valid; +static int hf_cigi4_start_of_frame_earth_reference_model; +static int hf_cigi4_start_of_frame_minor_version; +static int hf_cigi4_start_of_frame_ig_frame_number; +static int hf_cigi4_start_of_frame_timestamp; +static int hf_cigi4_start_of_frame_ig_condition_flags; +static int hf_cigi4_start_of_frame_last_host_frame_number; +static int hf_cigi4_start_of_frame_condition_overframing; +static int hf_cigi4_start_of_frame_condition_paging; +static int hf_cigi4_start_of_frame_condition_excessive_variable_length_data; + +static int ett_cigi4_start_of_frame_flags; +static int ett_cigi4_start_of_frame_ig_condition_flags; + + +/* +static const true_false_string cigi4_entity_control_animation_direction_tfs = { + "Backward", + "Forward" +}; + +static const true_false_string cigi4_entity_control_animation_loop_mode_tfs = { + "Continuous", + "One-Shot" +}; +static const value_string cigi4_entity_control_animation_state_vals[] = { + {0, "Stop"}, + {1, "Pause"}, + {2, "Play"}, + {3, "Continue"}, + {0, NULL}, +};*/ -static expert_field ei_cigi_invalid_len = EI_INIT; /* Global preferences */ @@ -2321,66 +2720,70 @@ static expert_field ei_cigi_invalid_len = EI_INIT; #define CIGI_VERSION_1 1 #define CIGI_VERSION_2 2 #define CIGI_VERSION_3 3 +#define CIGI_VERSION_4 4 + +#define CIGI_VERSION_4_IGC 0 +#define CIGI_VERSION_4_SOF 0xFF +/* CIIG Standard Version 4, 4.5 Message Structure: "The special Packet IDs + * assigned to the IG Control and Start of Frame packets permit a multi-version + * CIGI parser to differentiate between the old and new message structure as + * both 0h and FFh are unknown CIGI major version numbers." + */ -static gint global_cigi_version = CIGI_VERSION_FROM_PACKET; +static int global_cigi_version = CIGI_VERSION_FROM_PACKET; #define CIGI_BYTE_ORDER_FROM_PACKET -1 #define CIGI_BYTE_ORDER_BIG_ENDIAN 0 #define CIGI_BYTE_ORDER_LITTLE_ENDIAN 1 -static gint global_cigi_byte_order = CIGI_BYTE_ORDER_FROM_PACKET; +static int global_cigi_byte_order = CIGI_BYTE_ORDER_FROM_PACKET; static const char *global_host_ip; static const char *global_ig_ip; /* Initialize the subtree pointers */ -static gint ett_cigi = -1; +static int ett_cigi; /* The version of cigi to use */ -static gint cigi_version = 0; -static gint cigi_minor_version = 0; +static int cigi_version; +static int cigi_minor_version; /* The byte order of cigi to use; our default is big-endian */ -static gint cigi_byte_order = ENC_BIG_ENDIAN; +static int cigi_byte_order = ENC_BIG_ENDIAN; /* * Extract a 16-bit fixed-point value and convert it to a float. */ -static gfloat -cigi_get_fixed_point(tvbuff_t *tvb, int offset, const guint encoding) +static float +cigi_get_fixed_point(tvbuff_t *tvb, int offset, const unsigned encoding) { - gint16 fixed = tvb_get_guint16(tvb, offset, encoding); + int16_t fixed = tvb_get_uint16(tvb, offset, encoding); return fixed / 128.0F; } /* * Check whether this looks like a CIGI packet or not. */ -static gboolean +static bool packet_is_cigi(tvbuff_t *tvb) { - guint8 packet_id; - guint8 packet_size; - guint8 cigi_version_local; - guint8 ig_mode; + uint16_t packet_id; + uint16_t packet_size; + uint8_t cigi_version_local; + uint8_t ig_mode; /* CIGI 3 */ - guint16 byte_swap; + uint16_t byte_swap; if (tvb_captured_length(tvb) < 3) { /* Not enough data available to check */ - return FALSE; + return false; } - packet_size = tvb_get_guint8(tvb, 1); - if ( packet_size > tvb_reported_length(tvb) ) { - return FALSE; - } - - packet_id = tvb_get_guint8(tvb, 0); - cigi_version_local = tvb_get_guint8(tvb, 2); - /* Currently there are only 3 versions of CIGI */ + packet_id = tvb_get_uint8(tvb, 0); + packet_size = tvb_get_uint8(tvb, 1); + cigi_version_local = tvb_get_uint8(tvb, 2); switch ( cigi_version_local ) { case CIGI_VERSION_1: @@ -2388,25 +2791,25 @@ packet_is_cigi(tvbuff_t *tvb) switch ( packet_id ) { case 1: if ( packet_size != 16 ) { - return FALSE; + return false; } if (!tvb_bytes_exist(tvb, 4, 1)) { /* Not enough data available to check */ - return FALSE; + return false; } - ig_mode = (tvb_get_guint8(tvb, 4) & 0xc0) >> 6; + ig_mode = (tvb_get_uint8(tvb, 4) & 0xc0) >> 6; if ( ig_mode > 2 ) { - return FALSE; + return false; } break; case 101: if ( packet_size != 12 ) { - return FALSE; + return false; } break; default: - return FALSE; + return false; } break; @@ -2415,32 +2818,32 @@ packet_is_cigi(tvbuff_t *tvb) switch ( packet_id ) { case CIGI2_PACKET_ID_IG_CONTROL: if ( packet_size != CIGI2_PACKET_SIZE_IG_CONTROL ) { - return FALSE; + return false; } if (!tvb_bytes_exist(tvb, 4, 1)) { /* Not enough data available to check */ - return FALSE; + return false; } - ig_mode = (tvb_get_guint8(tvb, 4) & 0xc0) >> 6; + ig_mode = (tvb_get_uint8(tvb, 4) & 0xc0) >> 6; if ( ig_mode > 2 ) { - return FALSE; + return false; } break; case CIGI2_PACKET_ID_START_OF_FRAME: if ( packet_size != CIGI2_PACKET_SIZE_START_OF_FRAME ) { - return FALSE; + return false; } break; default: - return FALSE; + return false; } break; case CIGI_VERSION_3: if (!tvb_bytes_exist(tvb, 6, 1)) { - /* Not enough data available to check */ - return FALSE; + /* Not enough data available to check byte swap field */ + return false; } /* CIGI 3 requires that the first packet is always the IG Control or SOF */ @@ -2448,66 +2851,132 @@ packet_is_cigi(tvbuff_t *tvb) case CIGI3_PACKET_ID_IG_CONTROL: if ( packet_size != CIGI3_PACKET_SIZE_IG_CONTROL ) { if ( packet_size != CIGI3_2_PACKET_SIZE_IG_CONTROL ) { - return FALSE; + return false; } } if (!tvb_bytes_exist(tvb, 4, 2)) { /* Not enough data available to check */ - return FALSE; + return false; } - ig_mode = (tvb_get_guint8(tvb, 4) & 0x03); + ig_mode = (tvb_get_uint8(tvb, 4) & 0x03); if ( ig_mode > 2 ) { - return FALSE; + return false; } break; case CIGI3_PACKET_ID_START_OF_FRAME: if ( packet_size != CIGI3_PACKET_SIZE_START_OF_FRAME ) { if ( packet_size != CIGI3_2_PACKET_SIZE_START_OF_FRAME) { - return FALSE; + return false; } } if (!tvb_bytes_exist(tvb, 5, 1)) { /* Not enough data available to check */ - return FALSE; + return false; } break; default: - return FALSE; + return false; } /* CIGI 3 has the byte swap field which only allows two values. */ byte_swap = tvb_get_ntohs(tvb, 6); if ( byte_swap != CIGI3_BYTE_SWAP_BIG_ENDIAN && byte_swap != CIGI3_BYTE_SWAP_LITTLE_ENDIAN ) { - return FALSE; + return false; } break; + case CIGI_VERSION_4_IGC: + case CIGI_VERSION_4_SOF: + /* CIGI 4 introduces a 4 byte header, with 16-bit packet size + * and packet ID (yes, they're in the opposite order of the + * previous versions; now packet size comes first). The version + * number is now located in the fifth byte. Since the first packet + * is required to be the IG Control or SOF, the third byte must be + * 0x00 or 0xFF, regardless of endianness. + */ + if (!tvb_bytes_exist(tvb, 4, 1)) { + /* Not enough data available to check */ + return false; + } + //test if it's CIGI version 4 + if (tvb_get_uint8(tvb, 4) != CIGI_VERSION_4) + return false; + + /* CIGI 4 requires that the first packet is always the IG Control or SOF */ + + //PacketSize If the parser detects a zero in the "leftmost" byte, then the message is in Big Endian byte + if (packet_id == 0) { + /* Big Endian */ + packet_size = tvb_get_uint16(tvb, 0, ENC_BIG_ENDIAN); + packet_id = tvb_get_uint16(tvb, 2, ENC_BIG_ENDIAN); + } else if (packet_size == 0) { + /* Little Endian */ + packet_size = tvb_get_uint16(tvb, 0, ENC_LITTLE_ENDIAN); + packet_id = tvb_get_uint16(tvb, 2, ENC_LITTLE_ENDIAN); + } else { + return false; + } + + switch (packet_id) { + case CIGI4_PACKET_ID_IG_CONTROL: + if (packet_size != CIGI4_PACKET_SIZE_IG_CONTROL) { + return false; + } + + if (!tvb_bytes_exist(tvb, 7, 2)) { + /* Not enough data available to check */ + return false; + } + + ig_mode = (tvb_get_uint8(tvb, 7) & 0x03); + if (ig_mode > 2) { + return false; + } + break; + + case CIGI4_PACKET_ID_START_OF_FRAME: + if (packet_size != CIGI4_PACKET_SIZE_START_OF_FRAME) { + return false; + } + break; + default: + return false; + } + break; default: - return FALSE; + return false; + } + + /* Check that the frame contains at least the first PDU's worth + * of data. (We can't check this until we know the CIGI version + * because CIGI version 4 stores the packet size differently.) + */ + if ( packet_size > tvb_reported_length(tvb) ) { + return false; } /* If we made it here, then this is probably CIGI */ - return TRUE; + return true; } /* * The heuristic dissector */ -static gboolean +static bool dissect_cigi_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { /* Does this look like CIGI? */ if ( !packet_is_cigi(tvb) ) { - return FALSE; + return false; } dissect_cigi_pdu(tvb, pinfo, tree); - return TRUE; + return true; } /* @@ -2530,7 +2999,7 @@ static void dissect_cigi_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { /* Set up structures needed to add the protocol subtree and manage it */ - guint8 packet_id = 0; + uint16_t packet_id = 0; proto_item *ti, *hidden_item; proto_tree *cigi_tree; @@ -2538,8 +3007,13 @@ dissect_cigi_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) const char* src_str; const char* dest_str; - packet_id = tvb_get_guint8(tvb, 0); + if ((tvb_get_ntohs(tvb, 0) & 0xFF00) == 0) { + packet_id = tvb_get_uint16(tvb, 2, ENC_BIG_ENDIAN); //packet_id is not at the same location + } + else { + packet_id = tvb_get_uint16(tvb, 2, ENC_LITTLE_ENDIAN); + } /* Make entries in Protocol column and Info column on summary display */ col_set_str(pinfo->cinfo, COL_PROTOCOL, "CIGI"); @@ -2548,7 +3022,10 @@ dissect_cigi_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) * XXX - If another version of cigi is added to this dissector be sure to * place the IG Control and SOF packet id's in this comparison. */ 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 ) { - cigi_version = tvb_get_guint8(tvb, 2); + cigi_version = tvb_get_uint8(tvb, 2); + } + else if ((packet_id == CIGI4_PACKET_ID_IG_CONTROL || packet_id == CIGI4_PACKET_ID_START_OF_FRAME) && global_cigi_version == CIGI_VERSION_FROM_PACKET) { + cigi_version = tvb_get_uint8(tvb, 4); } /* Format the Info String */ @@ -2598,6 +3075,8 @@ dissect_cigi_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) cigi2_add_tree(tvb, pinfo, cigi_tree); } else if ( cigi_version == CIGI_VERSION_3 ) { cigi3_add_tree(tvb, pinfo, cigi_tree); + } else if ( cigi_version == CIGI_VERSION_4 ) { + cigi4_add_tree(tvb, pinfo, cigi_tree); } else { /* Since there exists no dissector to dissect this version * just put the data into a tree using an unknown version */ @@ -2611,11 +3090,11 @@ dissect_cigi_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) static void cigi_add_tree(tvbuff_t *tvb, proto_tree *cigi_tree) { - gint offset = 0; - gint length = 0; - gint packet_id = 0; - gint packet_size = 0; - gint data_size = 0; + int offset = 0; + int length = 0; + int packet_id = 0; + int packet_size = 0; + int data_size = 0; proto_tree* cigi_packet_tree = NULL; proto_item* tipacket; @@ -2627,8 +3106,8 @@ cigi_add_tree(tvbuff_t *tvb, proto_tree *cigi_tree) * a new packet to dissect. */ while ( offset < length ) { - packet_id = tvb_get_guint8(tvb, offset); - packet_size = tvb_get_guint8(tvb, offset + 1); + packet_id = tvb_get_uint8(tvb, offset); + packet_size = tvb_get_uint8(tvb, offset + 1); data_size = packet_size; /* a cigi packet must be at least 2 bytes long @@ -2640,7 +3119,7 @@ cigi_add_tree(tvbuff_t *tvb, proto_tree *cigi_tree) * Since we have no cigi version we assume that packet id 1 is the * IG Control and packet id 101 is the Start of Frame. */ if ( ( packet_id == 1 || packet_id == 101 ) && global_cigi_version == CIGI_VERSION_FROM_PACKET ) { - cigi_version = tvb_get_guint8(tvb, 2); + cigi_version = tvb_get_uint8(tvb, 2); } /* Add the subtree for the packet */ @@ -2672,21 +3151,18 @@ cigi_add_tree(tvbuff_t *tvb, proto_tree *cigi_tree) } /* CIGI Add Data */ -/* offset is the position past the packet_id and packet_size */ -static gint -cigi_add_data(tvbuff_t *tvb, proto_tree *tree, gint offset) +/* offset is the position past the packet_id and packet_size. + * tvb should be trimmed to the appropriate size with e.g. + * tvb_new_subset_length(). */ +static int +cigi_add_data(tvbuff_t *tvb, proto_tree *tree, int offset) { - guint8 packet_size = 0; - - packet_size = tvb_get_guint8(tvb, offset-1); - - /* A cigi packet cannot be less than 2 bytes ( because every cigi packet - * has a packet id (1 byte) and a packet size (1 byte) ). */ - if ( packet_size < 2 ) - return -1; - - proto_tree_add_item(tree, hf_cigi_data, tvb, offset, packet_size-2, ENC_NA); - offset += packet_size-2; + /* Note: CIGI 4 uses a 4 byte packet header (2 byte packet ID + * and 2 byte packet size), so we cannot inspect previous bytes in + * order to use this as a common function. */ + int packet_size = tvb_reported_length_remaining(tvb, offset); + proto_tree_add_item(tree, hf_cigi_data, tvb, offset, packet_size, ENC_NA); + offset += packet_size; return offset; } @@ -2696,17 +3172,18 @@ cigi_add_data(tvbuff_t *tvb, proto_tree *tree, gint offset) static void cigi2_add_tree(tvbuff_t *tvb, packet_info *pinfo, proto_tree *cigi_tree) { - gint offset = 0; - gint length = 0; - gint init_offset = 0; + int offset = 0; + int length = 0; + int init_offset = 0; - gint packet_id = 0; - gint packet_size = 0; - gint packet_length = 0; + int packet_id = 0; + int packet_size = 0; + int packet_length = 0; proto_tree* cigi_packet_tree = NULL; - proto_item* tipacket; - int hf_cigi2_packet = -1; + proto_item* tipacket, *ti; + tvbuff_t* next_tvb; + int hf_cigi2_packet; length = tvb_reported_length(tvb); @@ -2715,12 +3192,12 @@ cigi2_add_tree(tvbuff_t *tvb, packet_info *pinfo, proto_tree *cigi_tree) * a new packet to dissect. */ while ( offset < length ) { - packet_id = tvb_get_guint8(tvb, offset); - packet_size = tvb_get_guint8(tvb, offset + 1); + packet_id = tvb_get_uint8(tvb, offset); + packet_size = tvb_get_uint8(tvb, offset + 1); /* If we have the start of frame or IG Control packet set the version */ if ( ( packet_id == CIGI2_PACKET_ID_IG_CONTROL || packet_id == CIGI2_PACKET_ID_START_OF_FRAME ) && global_cigi_version == CIGI_VERSION_FROM_PACKET ) { - cigi_version = tvb_get_guint8(tvb, 2); + cigi_version = tvb_get_uint8(tvb, 2); } /* Add the subtree for the packet */ @@ -2816,14 +3293,21 @@ cigi2_add_tree(tvbuff_t *tvb, packet_info *pinfo, proto_tree *cigi_tree) cigi_packet_tree = proto_item_add_subtree(tipacket, ett_cigi); - /* In all CIGI versions the first byte of a packet is the packet ID. + /* In CIGI versions < 4 the first byte of a packet is the packet ID. * The second byte is the size of the packet (in bytes). */ init_offset = offset; proto_tree_add_item(cigi_packet_tree, hf_cigi2_packet_id, tvb, offset, 1, ENC_BIG_ENDIAN); offset++; - proto_tree_add_item(cigi_packet_tree, hf_cigi_packet_size, tvb, offset, 1, ENC_BIG_ENDIAN); + ti = proto_tree_add_item(cigi_packet_tree, hf_cigi_packet_size, tvb, offset, 1, ENC_BIG_ENDIAN); + if (packet_size < 2) { + expert_add_info(pinfo, ti, &ei_cigi_invalid_len); + break; + } offset++; + /* If packet_size != packet_len for the fixed size packet IDs, attempt + * to dissect normally then add an expert info and abort afterwards below. */ + next_tvb = tvb_new_subset_length(tvb, offset, packet_size - 2); switch(packet_id) { @@ -2906,7 +3390,7 @@ cigi2_add_tree(tvbuff_t *tvb, packet_info *pinfo, proto_tree *cigi_tree) offset = cigi2_add_image_generator_message(tvb, cigi_packet_tree, offset); break; default: - offset = cigi_add_data(tvb, cigi_packet_tree, offset); + offset = cigi_add_data(next_tvb, cigi_packet_tree, 0); break; } @@ -2921,18 +3405,19 @@ cigi2_add_tree(tvbuff_t *tvb, packet_info *pinfo, proto_tree *cigi_tree) static void cigi3_add_tree(tvbuff_t *tvb, packet_info *pinfo, proto_tree *cigi_tree) { - gint offset = 0; - gint length = 0; - gint init_offset = 0; + int offset = 0; + int length = 0; + int init_offset = 0; - gint packet_id = 0; - gint packet_size = 0; - gint packet_length = 0; - guint16 byte_swap = 0; + int packet_id = 0; + int packet_size = 0; + int packet_length = 0; + uint16_t byte_swap = 0; proto_tree* cigi_packet_tree = NULL; - proto_item* tipacket; - int hf_cigi3_packet = -1; + proto_item* tipacket, *ti; + tvbuff_t* next_tvb; + int hf_cigi3_packet; length = tvb_reported_length(tvb); @@ -2941,20 +3426,20 @@ cigi3_add_tree(tvbuff_t *tvb, packet_info *pinfo, proto_tree *cigi_tree) * a new packet to dissect. */ while ( offset < length ) { - packet_id = tvb_get_guint8(tvb, offset); - packet_size = tvb_get_guint8(tvb, offset + 1); + packet_id = tvb_get_uint8(tvb, offset); + packet_size = tvb_get_uint8(tvb, offset + 1); byte_swap = tvb_get_ntohs(tvb, offset + 6); /* If we have the start of frame or IG Control packet set the version */ if ( ( packet_id == CIGI3_PACKET_ID_IG_CONTROL || packet_id == CIGI3_PACKET_ID_START_OF_FRAME ) && global_cigi_version == CIGI_VERSION_FROM_PACKET ) { - cigi_version = tvb_get_guint8(tvb, 2); + cigi_version = tvb_get_uint8(tvb, 2); /* CIGI Minor Version first appeared in CIGI 3.2. Note: It is in a * different location in IG Control vs Start of Frame. */ if ( packet_size == CIGI3_2_PACKET_SIZE_IG_CONTROL && packet_id == CIGI3_PACKET_ID_IG_CONTROL ) { - cigi_minor_version = tvb_get_guint8(tvb, 4) >> 4; + cigi_minor_version = tvb_get_uint8(tvb, 4) >> 4; } else if ( packet_size == CIGI3_2_PACKET_SIZE_START_OF_FRAME && packet_id == CIGI3_PACKET_ID_START_OF_FRAME ) { - cigi_minor_version = tvb_get_guint8(tvb, 5) >> 4; + cigi_minor_version = tvb_get_uint8(tvb, 5) >> 4; } else { /* CIGI version prior to 3.2 */ cigi_minor_version = 0; @@ -2975,10 +3460,10 @@ cigi3_add_tree(tvbuff_t *tvb, packet_info *pinfo, proto_tree *cigi_tree) /* Add the subtree for the packet */ if ( packet_id == CIGI3_PACKET_ID_IG_CONTROL && cigi_minor_version == 2 ) { - hf_cigi3_packet = hf_cigi3_2_ig_control; + hf_cigi3_packet = hf_cigi3_ig_control; packet_length = CIGI3_2_PACKET_SIZE_IG_CONTROL; } else if ( packet_id == CIGI3_PACKET_ID_IG_CONTROL && cigi_minor_version == 3 ) { - hf_cigi3_packet = hf_cigi3_3_ig_control; + hf_cigi3_packet = hf_cigi3_ig_control; packet_length = CIGI3_3_PACKET_SIZE_IG_CONTROL; } else if ( packet_id == CIGI3_PACKET_ID_IG_CONTROL ) { hf_cigi3_packet = hf_cigi3_ig_control; @@ -3001,9 +3486,6 @@ cigi3_add_tree(tvbuff_t *tvb, packet_info *pinfo, proto_tree *cigi_tree) } else if ( packet_id == CIGI3_PACKET_ID_SHORT_ARTICULATED_PART_CONTROL ) { hf_cigi3_packet = hf_cigi3_short_articulated_part_control; packet_length = CIGI3_PACKET_SIZE_SHORT_ARTICULATED_PART_CONTROL; - } else if ( packet_id == CIGI3_PACKET_ID_RATE_CONTROL && (cigi_minor_version == 2 || cigi_minor_version == 3) ) { - hf_cigi3_packet = hf_cigi3_2_rate_control; - packet_length = CIGI3_2_PACKET_SIZE_RATE_CONTROL; } else if ( packet_id == CIGI3_PACKET_ID_RATE_CONTROL ) { hf_cigi3_packet = hf_cigi3_rate_control; packet_length = CIGI3_PACKET_SIZE_RATE_CONTROL; @@ -3052,21 +3534,12 @@ cigi3_add_tree(tvbuff_t *tvb, packet_info *pinfo, proto_tree *cigi_tree) } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION ) { hf_cigi3_packet = hf_cigi3_collision_detection_volume_definition; packet_length = CIGI3_PACKET_SIZE_COLLISION_DETECTION_VOLUME_DEFINITION; - } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_REQUEST && (cigi_minor_version == 2 || cigi_minor_version == 3)) { - hf_cigi3_packet = hf_cigi3_2_hat_hot_request; - packet_length = CIGI3_2_PACKET_SIZE_HAT_HOT_REQUEST; } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_REQUEST ) { hf_cigi3_packet = hf_cigi3_hat_hot_request; packet_length = CIGI3_PACKET_SIZE_HAT_HOT_REQUEST; - } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST && (cigi_minor_version == 2 || cigi_minor_version == 3) ) { - hf_cigi3_packet = hf_cigi3_2_line_of_sight_segment_request; - packet_length = CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_SEGMENT_REQUEST; } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST ) { hf_cigi3_packet = hf_cigi3_line_of_sight_segment_request; packet_length = CIGI3_PACKET_SIZE_LINE_OF_SIGHT_SEGMENT_REQUEST; - } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST && (cigi_minor_version == 2 || cigi_minor_version == 3) ) { - hf_cigi3_packet = hf_cigi3_2_line_of_sight_vector_request; - packet_length = CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_VECTOR_REQUEST; } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST ) { hf_cigi3_packet = hf_cigi3_line_of_sight_vector_request; packet_length = CIGI3_PACKET_SIZE_LINE_OF_SIGHT_VECTOR_REQUEST; @@ -3076,36 +3549,42 @@ cigi3_add_tree(tvbuff_t *tvb, packet_info *pinfo, proto_tree *cigi_tree) } else if ( packet_id == CIGI3_PACKET_ID_ENVIRONMENTAL_CONDITIONS_REQUEST ) { hf_cigi3_packet = hf_cigi3_environmental_conditions_request; packet_length = CIGI3_PACKET_SIZE_ENVIRONMENTAL_CONDITIONS_REQUEST; - } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_SURFACE_DEFINITION ) { + } else if (packet_id == CIGI3_PACKET_ID_SYMBOL_SURFACE_DEFINITION) { hf_cigi3_packet = hf_cigi3_3_symbol_surface_definition; packet_length = CIGI3_PACKET_SIZE_SYMBOL_SURFACE_DEFINITION; + } else if (packet_id == CIGI3_PACKET_ID_SYMBOL_TEXT_DEFINITION) { + hf_cigi3_packet = hf_cigi3_3_symbol_text_definition; + packet_length = packet_size; + } else if (packet_id == CIGI3_PACKET_ID_SYMBOL_CIRCLE_DEFINITION) { + hf_cigi3_packet = hf_cigi3_3_symbol_circle_definition; + packet_length = packet_size; + } else if (packet_id == CIGI3_PACKET_ID_SYMBOL_LINE_DEFINITION) { + hf_cigi3_packet = hf_cigi3_3_symbol_line_definition; + packet_length = packet_size; + } else if (packet_id == CIGI3_PACKET_ID_SYMBOL_CLONE) { + hf_cigi3_packet = hf_cigi3_3_symbol_clone; + packet_length = CIGI3_PACKET_SIZE_SYMBOL_CLONE; + } else if (packet_id == CIGI3_PACKET_ID_SYMBOL_CONTROL) { + hf_cigi3_packet = hf_cigi3_3_symbol_control; + packet_length = CIGI3_PACKET_SIZE_SYMBOL_CONTROL; + } else if (packet_id == CIGI3_PACKET_ID_SHORT_SYMBOL_CONTROL) { + hf_cigi3_packet = hf_cigi3_3_short_symbol_control; + packet_length = CIGI3_PACKET_SIZE_SHORT_SYMBOL_CONTROL; } else if ( packet_id == CIGI3_PACKET_ID_START_OF_FRAME && (cigi_minor_version == 2 || cigi_minor_version == 3) ) { hf_cigi3_packet = hf_cigi3_2_start_of_frame; packet_length = CIGI3_2_PACKET_SIZE_START_OF_FRAME; } else if ( packet_id == CIGI3_PACKET_ID_START_OF_FRAME ) { hf_cigi3_packet = hf_cigi3_start_of_frame; packet_length = CIGI3_PACKET_SIZE_START_OF_FRAME; - } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3) ) { - hf_cigi3_packet = hf_cigi3_2_hat_hot_response; - packet_length = CIGI3_2_PACKET_SIZE_HAT_HOT_RESPONSE; } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_RESPONSE ) { hf_cigi3_packet = hf_cigi3_hat_hot_response; packet_length = CIGI3_PACKET_SIZE_HAT_HOT_RESPONSE; - } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3) ) { - hf_cigi3_packet = hf_cigi3_2_hat_hot_extended_response; - packet_length = CIGI3_2_PACKET_SIZE_HAT_HOT_EXTENDED_RESPONSE; } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE ) { hf_cigi3_packet = hf_cigi3_hat_hot_extended_response; packet_length = CIGI3_PACKET_SIZE_HAT_HOT_EXTENDED_RESPONSE; - } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3) ) { - hf_cigi3_packet = hf_cigi3_2_line_of_sight_response; - packet_length = CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE; } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_RESPONSE ) { hf_cigi3_packet = hf_cigi3_line_of_sight_response; packet_length = CIGI3_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE; - } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3) ) { - hf_cigi3_packet = hf_cigi3_2_line_of_sight_extended_response; - packet_length = CIGI3_2_PACKET_SIZE_LINE_OF_SIGHT_EXTENDED_RESPONSE; } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE ) { hf_cigi3_packet = hf_cigi3_line_of_sight_extended_response; packet_length = CIGI3_PACKET_SIZE_LINE_OF_SIGHT_EXTENDED_RESPONSE; @@ -3159,155 +3638,32 @@ cigi3_add_tree(tvbuff_t *tvb, packet_info *pinfo, proto_tree *cigi_tree) cigi_packet_tree = proto_item_add_subtree(tipacket, ett_cigi); - /* In all CIGI versions the first byte of a packet is the packet ID. + /* In all CIGI3 versions the first byte of a packet is the packet ID. * The second byte is the size of the packet (in bytes). */ init_offset = offset; proto_tree_add_item(cigi_packet_tree, hf_cigi3_packet_id, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(cigi_packet_tree, hf_cigi_packet_size, tvb, offset, 1, cigi_byte_order); + ti = proto_tree_add_item(cigi_packet_tree, hf_cigi_packet_size, tvb, offset, 1, cigi_byte_order); + /* packet_size includes the packet id (1 byte) and packet size itself (1 byte) ). */ + if (packet_size < 2) { + expert_add_info(pinfo, ti, &ei_cigi_invalid_len); + break; + } + /* If packet_size != packet_len for the fixed size packet IDs, attempt + * to dissect normally then add an expert info and abort afterwards below. */ offset++; + next_tvb = tvb_new_subset_length(tvb, offset, packet_length - 2); - if ( packet_id == CIGI3_PACKET_ID_IG_CONTROL && cigi_minor_version == 2 ) { - offset = cigi3_2_add_ig_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_IG_CONTROL && cigi_minor_version == 3 ) { - offset = cigi3_3_add_ig_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_IG_CONTROL ) { - offset = cigi3_add_ig_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_ENTITY_CONTROL && cigi_minor_version == 3 ) { - offset = cigi3_3_add_entity_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_ENTITY_CONTROL ) { - offset = cigi3_add_entity_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_CONFORMAL_CLAMPED_ENTITY_CONTROL ) { - offset = cigi3_add_conformal_clamped_entity_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_COMPONENT_CONTROL && cigi_minor_version == 3) { - offset = cigi3_3_add_component_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_COMPONENT_CONTROL ) { - offset = cigi3_add_component_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_SHORT_COMPONENT_CONTROL && cigi_minor_version == 3 ) { - offset = cigi3_3_add_short_component_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_SHORT_COMPONENT_CONTROL ) { - offset = cigi3_add_short_component_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_ARTICULATED_PART_CONTROL ) { - offset = cigi3_add_articulated_part_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_SHORT_ARTICULATED_PART_CONTROL ) { - offset = cigi3_add_short_articulated_part_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_RATE_CONTROL && (cigi_minor_version == 2 || cigi_minor_version == 3)) { - offset = cigi3_2_add_rate_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_RATE_CONTROL ) { - offset = cigi3_add_rate_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_CELESTIAL_SPHERE_CONTROL ) { - offset = cigi3_add_celestial_sphere_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_ATMOSPHERE_CONTROL ) { - offset = cigi3_add_atmosphere_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_ENVIRONMENTAL_REGION_CONTROL ) { - offset = cigi3_add_environmental_region_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_WEATHER_CONTROL ) { - offset = cigi3_add_weather_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_CONTROL ) { - offset = cigi3_add_maritime_surface_conditions_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_WAVE_CONTROL ) { - offset = cigi3_add_wave_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL ) { - offset = cigi3_add_terrestrial_surface_conditions_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_VIEW_CONTROL ) { - offset = cigi3_add_view_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_SENSOR_CONTROL ) { - offset = cigi3_add_sensor_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_MOTION_TRACKER_CONTROL ) { - offset = cigi3_add_motion_tracker_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_EARTH_REFERENCE_MODEL_DEFINITION ) { - offset = cigi3_add_earth_reference_model_definition(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_TRAJECTORY_DEFINITION ) { - offset = cigi3_add_trajectory_definition(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_VIEW_DEFINITION ) { - offset = cigi3_add_view_definition(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION ) { - offset = cigi3_add_collision_detection_segment_definition(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION ) { - offset = cigi3_add_collision_detection_volume_definition(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_REQUEST && (cigi_minor_version == 2 || cigi_minor_version == 3) ) { - offset = cigi3_2_add_hat_hot_request(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_REQUEST ) { - offset = cigi3_add_hat_hot_request(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST && (cigi_minor_version == 2 || cigi_minor_version == 3) ) { - offset = cigi3_2_add_line_of_sight_segment_request(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST ) { - offset = cigi3_add_line_of_sight_segment_request(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST && (cigi_minor_version == 2 || cigi_minor_version == 3) ) { - offset = cigi3_2_add_line_of_sight_vector_request(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST ) { - offset = cigi3_add_line_of_sight_vector_request(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_POSITION_REQUEST ) { - offset = cigi3_add_position_request(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_ENVIRONMENTAL_CONDITIONS_REQUEST ) { - offset = cigi3_add_environmental_conditions_request(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_SURFACE_DEFINITION && cigi_minor_version == 3 ) { - offset = cigi3_3_add_symbol_surface_definition(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_TEXT_DEFINITION && cigi_minor_version == 3 ) { - offset = cigi3_3_add_symbol_text_definition(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_CIRCLE_DEFINITION && cigi_minor_version == 3 ) { - offset = cigi3_3_add_symbol_circle_definition(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_LINE_DEFINITION && cigi_minor_version == 3 ) { - offset = cigi3_3_add_symbol_line_definition(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_CLONE && cigi_minor_version == 3 ) { - offset = cigi3_3_add_symbol_clone(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_SYMBOL_CONTROL && cigi_minor_version == 3 ) { - offset = cigi3_3_add_symbol_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_SHORT_SYMBOL_CONTROL && cigi_minor_version == 3 ) { - offset = cigi3_3_add_short_symbol_control(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_START_OF_FRAME && (cigi_minor_version == 2 || cigi_minor_version == 3) ) { - offset = cigi3_2_add_start_of_frame(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_START_OF_FRAME ) { - offset = cigi3_add_start_of_frame(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3)) { - offset = cigi3_2_add_hat_hot_response(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_RESPONSE ) { - offset = cigi3_add_hat_hot_response(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3)) { - offset = cigi3_2_add_hat_hot_extended_response(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE ) { - offset = cigi3_add_hat_hot_extended_response(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3)) { - offset = cigi3_2_add_line_of_sight_response(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_RESPONSE ) { - offset = cigi3_add_line_of_sight_response(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE && (cigi_minor_version == 2 || cigi_minor_version == 3)) { - offset = cigi3_2_add_line_of_sight_extended_response(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE ) { - offset = cigi3_add_line_of_sight_extended_response(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_SENSOR_RESPONSE ) { - offset = cigi3_add_sensor_response(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_SENSOR_EXTENDED_RESPONSE ) { - offset = cigi3_add_sensor_extended_response(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_POSITION_RESPONSE ) { - offset = cigi3_add_position_response(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_WEATHER_CONDITIONS_RESPONSE ) { - offset = cigi3_add_weather_conditions_response(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_AEROSOL_CONCENTRATION_RESPONSE ) { - offset = cigi3_add_aerosol_concentration_response(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_RESPONSE ) { - offset = cigi3_add_maritime_surface_conditions_response(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE ) { - offset = cigi3_add_terrestrial_surface_conditions_response(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_NOTIFICATION ) { - offset = cigi3_add_collision_detection_segment_notification(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_NOTIFICATION ) { - offset = cigi3_add_collision_detection_volume_notification(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_ANIMATION_STOP_NOTIFICATION ) { - offset = cigi3_add_animation_stop_notification(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_EVENT_NOTIFICATION ) { - offset = cigi3_add_event_notification(tvb, cigi_packet_tree, offset); - } else if ( packet_id == CIGI3_PACKET_ID_IMAGE_GENERATOR_MESSAGE ) { - offset = cigi3_add_image_generator_message(tvb, cigi_packet_tree, offset); -#if 0 /* Fix -Wduplicated-branches */ - } else if ( packet_id >= CIGI3_PACKET_ID_USER_DEFINED_MIN && packet_id <= CIGI3_PACKET_ID_USER_DEFINED_MAX ) { - offset = cigi_add_data(tvb, cigi_packet_tree, offset); -#endif - } else { - offset = cigi_add_data(tvb, cigi_packet_tree, offset); + int dissected = dissector_try_uint_new(cigi3_packet_id_table, packet_id, + next_tvb, pinfo, cigi_packet_tree, false, NULL); + + if (dissected == 0) { + dissected = cigi_add_data(next_tvb, cigi_packet_tree, 0); } + offset += dissected; + if (offset-init_offset != packet_length) { proto_tree_add_expert(cigi_packet_tree, pinfo, &ei_cigi_invalid_len, tvb, init_offset, offset-init_offset); break; @@ -3316,8 +3672,8 @@ cigi3_add_tree(tvbuff_t *tvb, packet_info *pinfo, proto_tree *cigi_tree) } /* CIGI2 IG Control */ -static gint -cigi2_add_ig_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_ig_control(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, ENC_BIG_ENDIAN); offset++; @@ -3340,8 +3696,8 @@ cigi2_add_ig_control(tvbuff_t *tvb, proto_tree *tree, gint offset) } /* CIGI2 Entity Control */ -static gint -cigi2_add_entity_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_entity_control(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_entity_control_entity_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; @@ -3386,8 +3742,8 @@ cigi2_add_entity_control(tvbuff_t *tvb, proto_tree *tree, gint offset) } /* CIGI2 Component Control */ -static gint -cigi2_add_component_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_component_control(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_component_control_instance_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; @@ -3411,8 +3767,8 @@ cigi2_add_component_control(tvbuff_t *tvb, proto_tree *tree, gint offset) } /* CIGI2 Articulated Part Control */ -static gint -cigi2_add_articulated_parts_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_articulated_parts_control(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_articulated_parts_control_entity_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; @@ -3451,8 +3807,8 @@ cigi2_add_articulated_parts_control(tvbuff_t *tvb, proto_tree *tree, gint offset } /* CIGI2 Rate Control */ -static gint -cigi2_add_rate_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_rate_control(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_rate_control_entity_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; @@ -3482,8 +3838,8 @@ cigi2_add_rate_control(tvbuff_t *tvb, proto_tree *tree, gint offset) } /* CIGI2 Environment Control */ -static gint -cigi2_add_environment_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_environment_control(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_environment_control_hour, tvb, offset, 1, ENC_BIG_ENDIAN); offset++; @@ -3523,8 +3879,8 @@ cigi2_add_environment_control(tvbuff_t *tvb, proto_tree *tree, gint offset) } /* CIGI2 Weather Control */ -static gint -cigi2_add_weather_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_weather_control(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_weather_control_entity_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; @@ -3569,8 +3925,8 @@ cigi2_add_weather_control(tvbuff_t *tvb, proto_tree *tree, gint offset) } /* CIGI2 View Control */ -static gint -cigi2_add_view_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_view_control(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_view_control_entity_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; @@ -3609,8 +3965,8 @@ cigi2_add_view_control(tvbuff_t *tvb, proto_tree *tree, gint offset) } /* CIGI2 Sensor Control */ -static gint -cigi2_add_sensor_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_sensor_control(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_sensor_control_view_id, tvb, offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(tree, hf_cigi2_sensor_control_sensor_enable, tvb, offset, 1, ENC_BIG_ENDIAN); @@ -3642,8 +3998,8 @@ cigi2_add_sensor_control(tvbuff_t *tvb, proto_tree *tree, gint offset) } /* CIGI2 Trajectory Definition */ -static gint -cigi2_add_trajectory_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_trajectory_definition(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_trajectory_definition_entity_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; @@ -3661,8 +4017,8 @@ cigi2_add_trajectory_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) } /* CIGI2 Special Effect Definition */ -static gint -cigi2_add_special_effect_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_special_effect_definition(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_special_effect_definition_entity_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; @@ -3711,8 +4067,8 @@ cigi2_add_special_effect_definition(tvbuff_t *tvb, proto_tree *tree, gint offset } /* CIGI2 View Definition */ -static gint -cigi2_add_view_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_view_definition(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_view_definition_view_id, tvb, offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(tree, hf_cigi2_view_definition_view_group, tvb, offset, 1, ENC_BIG_ENDIAN); @@ -3754,8 +4110,8 @@ cigi2_add_view_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) } /* CIGI2 Collision Detection Segment Definition */ -static gint -cigi2_add_collision_detection_segment_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_collision_detection_segment_definition(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_definition_entity_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; @@ -3789,8 +4145,8 @@ cigi2_add_collision_detection_segment_definition(tvbuff_t *tvb, proto_tree *tree } /* CIGI2 Collision Detection Volume Definition*/ -static gint -cigi2_add_collision_detection_volume_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_collision_detection_volume_definition(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_collision_detection_volume_definition_entity_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; @@ -3821,8 +4177,8 @@ cigi2_add_collision_detection_volume_definition(tvbuff_t *tvb, proto_tree *tree, } /* CIGI2 Height Above Terrain Request*/ -static gint -cigi2_add_height_above_terrain_request(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_height_above_terrain_request(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_height_above_terrain_request_hat_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 6; @@ -3840,8 +4196,8 @@ cigi2_add_height_above_terrain_request(tvbuff_t *tvb, proto_tree *tree, gint off } /* CIGI2 Line of Sight Occult Request */ -static gint -cigi2_add_line_of_sight_occult_request(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_line_of_sight_occult_request(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_line_of_sight_occult_request_los_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 6; @@ -3868,8 +4224,8 @@ cigi2_add_line_of_sight_occult_request(tvbuff_t *tvb, proto_tree *tree, gint off } /* CIGI2 Line of Sight Range Request */ -static gint -cigi2_add_line_of_sight_range_request(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_line_of_sight_range_request(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_line_of_sight_range_request_los_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; @@ -3899,8 +4255,8 @@ cigi2_add_line_of_sight_range_request(tvbuff_t *tvb, proto_tree *tree, gint offs } /* CIGI2 Height of Terrain Request */ -static gint -cigi2_add_height_of_terrain_request(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_height_of_terrain_request(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_height_of_terrain_request_hot_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 6; @@ -3915,8 +4271,8 @@ cigi2_add_height_of_terrain_request(tvbuff_t *tvb, proto_tree *tree, gint offset } /* CIGI2 Start of Frame */ -static gint -cigi2_add_start_of_frame(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_start_of_frame(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, ENC_BIG_ENDIAN); offset++; @@ -3940,8 +4296,8 @@ cigi2_add_start_of_frame(tvbuff_t *tvb, proto_tree *tree, gint offset) } /* CIGI2 Height Above Terrain Response */ -static gint -cigi2_add_height_above_terrain_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_height_above_terrain_response(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_height_above_terrain_response_hat_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; @@ -3959,8 +4315,8 @@ cigi2_add_height_above_terrain_response(tvbuff_t *tvb, proto_tree *tree, gint of } /* CIGI2 Line of Sight Response */ -static gint -cigi2_add_line_of_sight_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_line_of_sight_response(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_line_of_sight_response_los_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; @@ -3988,8 +4344,8 @@ cigi2_add_line_of_sight_response(tvbuff_t *tvb, proto_tree *tree, gint offset) } /* CIGI2 Collision Detection Segment Response */ -static gint -cigi2_add_collision_detection_segment_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_collision_detection_segment_response(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_collision_detection_segment_response_entity_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; @@ -4017,8 +4373,8 @@ cigi2_add_collision_detection_segment_response(tvbuff_t *tvb, proto_tree *tree, } /* CIGI2 Sensor Response */ -static gint -cigi2_add_sensor_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_sensor_response(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_sensor_response_view_id, tvb, offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(tree, hf_cigi2_sensor_response_status, tvb, offset, 1, ENC_BIG_ENDIAN); @@ -4043,8 +4399,8 @@ cigi2_add_sensor_response(tvbuff_t *tvb, proto_tree *tree, gint offset) } /* CIGI2 Height of Terrain Response */ -static gint -cigi2_add_height_of_terrain_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_height_of_terrain_response(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_height_of_terrain_response_hot_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; @@ -4062,8 +4418,8 @@ cigi2_add_height_of_terrain_response(tvbuff_t *tvb, proto_tree *tree, gint offse } /* CIGI2 Collision Detection Volume Response */ -static gint -cigi2_add_collision_detection_volume_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_collision_detection_volume_response(tvbuff_t *tvb, proto_tree *tree, int offset) { proto_tree_add_item(tree, hf_cigi2_collision_detection_volume_response_entity_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; @@ -4079,12 +4435,12 @@ cigi2_add_collision_detection_volume_response(tvbuff_t *tvb, proto_tree *tree, g } /* CIGI2 Image Generator Message */ -static gint -cigi2_add_image_generator_message(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi2_add_image_generator_message(tvbuff_t *tvb, proto_tree *tree, int offset) { - guint8 packet_size = 0; + uint8_t packet_size = 0; - packet_size = tvb_get_guint8(tvb, offset-1); + packet_size = tvb_get_uint8(tvb, offset-1); /* An image generator packet cannot be less than 4 bytes ( because every cigi packet * has a packet id (1 byte) and a packet size (1 byte) ). */ @@ -4101,9 +4457,11 @@ cigi2_add_image_generator_message(tvbuff_t *tvb, proto_tree *tree, gint offset) } /* CIGI3 IG Control */ -static gint -cigi3_add_ig_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_ig_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, cigi_byte_order); offset++; @@ -4112,6 +4470,12 @@ cigi3_add_ig_control(tvbuff_t *tvb, proto_tree *tree, gint offset) proto_tree_add_item(tree, hf_cigi3_ig_control_ig_mode, tvb, offset, 1, cigi_byte_order); proto_tree_add_item(tree, hf_cigi3_ig_control_timestamp_valid, tvb, offset, 1, cigi_byte_order); + if (cigi_minor_version >= 3) { + proto_tree_add_item(tree, hf_cigi3_3_ig_control_extrapolation_enable, tvb, offset, 1, cigi_byte_order); + } + if (cigi_minor_version >= 2) { + proto_tree_add_item(tree, hf_cigi3_2_ig_control_minor_version, tvb, offset, 1, cigi_byte_order); + } offset += 2; /* Get the Byte Swap in Big-Endian so that we can display whether the value @@ -4119,84 +4483,31 @@ cigi3_add_ig_control(tvbuff_t *tvb, proto_tree *tree, gint offset) proto_tree_add_item(tree, hf_cigi3_byte_swap, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; - proto_tree_add_item(tree, hf_cigi3_ig_control_frame_ctr, tvb, offset, 4, cigi_byte_order); + if (cigi_minor_version >= 2) { + proto_tree_add_item(tree, hf_cigi3_2_ig_control_host_frame_number, tvb, offset, 4, cigi_byte_order); + } + else { + proto_tree_add_item(tree, hf_cigi3_ig_control_frame_ctr, tvb, offset, 4, cigi_byte_order); + } offset += 4; proto_tree_add_item(tree, hf_cigi3_ig_control_timestamp, tvb, offset, 4, cigi_byte_order); offset += 4; - return offset; -} - -/* CIGI3_2 IG Control */ -static gint -cigi3_2_add_ig_control(tvbuff_t *tvb, proto_tree *tree, gint offset) -{ - proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, cigi_byte_order); - offset++; - - proto_tree_add_item(tree, hf_cigi3_2_ig_control_db_number, tvb, offset, 1, cigi_byte_order); - offset++; - - proto_tree_add_item(tree, hf_cigi3_2_ig_control_ig_mode, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_ig_control_timestamp_valid, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_ig_control_minor_version, tvb, offset, 1, cigi_byte_order); - offset += 2; - - /* Get the Byte Swap in Big-Endian so that we can display whether the value - * is big-endian or little-endian to the user */ - proto_tree_add_item(tree, hf_cigi3_byte_swap, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; - - proto_tree_add_item(tree, hf_cigi3_2_ig_control_host_frame_number, tvb, offset, 4, cigi_byte_order); - offset += 4; - - proto_tree_add_item(tree, hf_cigi3_2_ig_control_timestamp, tvb, offset, 4, cigi_byte_order); - offset += 4; - - proto_tree_add_item(tree, hf_cigi3_2_ig_control_last_ig_frame_number, tvb, offset, 4, cigi_byte_order); - offset += 8; - - return offset; -} - -/* CIGI3_3 IG Control */ -static gint -cigi3_3_add_ig_control(tvbuff_t *tvb, proto_tree *tree, gint offset) -{ - proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, cigi_byte_order); - offset++; - - proto_tree_add_item(tree, hf_cigi3_3_ig_control_db_number, tvb, offset, 1, cigi_byte_order); - offset++; - - proto_tree_add_item(tree, hf_cigi3_3_ig_control_ig_mode, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_3_ig_control_timestamp_valid, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_3_ig_control_extrapolation_enable, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_3_ig_control_minor_version, tvb, offset, 1, cigi_byte_order); - offset += 2; - - /* Get the Byte Swap in Big-Endian so that we can display whether the value - * is big-endian or little-endian to the user */ - proto_tree_add_item(tree, hf_cigi3_byte_swap, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; - - proto_tree_add_item(tree, hf_cigi3_2_ig_control_host_frame_number, tvb, offset, 4, cigi_byte_order); - offset += 4; - - proto_tree_add_item(tree, hf_cigi3_2_ig_control_timestamp, tvb, offset, 4, cigi_byte_order); - offset += 4; - - proto_tree_add_item(tree, hf_cigi3_2_ig_control_last_ig_frame_number, tvb, offset, 4, cigi_byte_order); - offset += 8; + if (cigi_minor_version >= 2) { + proto_tree_add_item(tree, hf_cigi3_2_ig_control_last_ig_frame_number, tvb, offset, 4, cigi_byte_order); + offset += 8; + } return offset; } /* CIGI3 Entity Control */ -static gint -cigi3_add_entity_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_entity_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_entity_control_entity_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -4210,6 +4521,9 @@ cigi3_add_entity_control(tvbuff_t *tvb, proto_tree *tree, gint offset) proto_tree_add_item(tree, hf_cigi3_entity_control_animation_direction, tvb, offset, 1, cigi_byte_order); proto_tree_add_item(tree, hf_cigi3_entity_control_animation_loop_mode, tvb, offset, 1, cigi_byte_order); proto_tree_add_item(tree, hf_cigi3_entity_control_animation_state, tvb, offset, 1, cigi_byte_order); + if (cigi_minor_version >= 3) { + proto_tree_add_item(tree, hf_cigi3_3_entity_control_extrapolation_enable, tvb, offset, 1, cigi_byte_order); + } offset++; proto_tree_add_item(tree, hf_cigi3_entity_control_alpha, tvb, offset, 1, cigi_byte_order); @@ -4242,60 +4556,83 @@ cigi3_add_entity_control(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } -/* CIGI3_3 Entity Control */ -static gint -cigi3_3_add_entity_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +/* CIGI4 Entity Control */ +static int +cigi4_add_entity_control(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) { - proto_tree_add_item(tree, hf_cigi3_3_entity_control_entity_id, tvb, offset, 2, cigi_byte_order); - offset += 2; + int offset = 0; - proto_tree_add_item(tree, hf_cigi3_3_entity_control_entity_state, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_3_entity_control_attach_state, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_3_entity_control_collision_detection_request, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_3_entity_control_inherit_alpha, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_3_entity_control_ground_ocean_clamp, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_entity_control_entity_state, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_entity_control_collision_reporting_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_entity_control_inherit_alpha, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_entity_control_smooting_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_entity_control_extended_entity_type, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_3_entity_control_animation_direction, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_3_entity_control_animation_loop_mode, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_3_entity_control_animation_state, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_3_entity_control_extrapolation_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_entity_control_alpha, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_3_entity_control_alpha, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_entity_control_entity_id, tvb, offset, 2, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_3_entity_control_entity_type, tvb, offset, 2, cigi_byte_order); - offset += 2; + proto_tree_add_item(tree, hf_cigi4_entity_control_entity_kind, tvb, offset, 1, cigi_byte_order); + offset++; - proto_tree_add_item(tree, hf_cigi3_3_entity_control_parent_id, tvb, offset, 2, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_entity_control_entity_domain, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi4_entity_control_entity_country, tvb, offset, 2, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_3_entity_control_roll, tvb, offset, 4, cigi_byte_order); - offset += 4; + proto_tree_add_item(tree, hf_cigi4_entity_control_entity_category, tvb, offset, 1, cigi_byte_order); + offset++; - proto_tree_add_item(tree, hf_cigi3_3_entity_control_pitch, tvb, offset, 4, cigi_byte_order); - offset += 4; + proto_tree_add_item(tree, hf_cigi4_entity_control_entity_subcategory, tvb, offset, 1, cigi_byte_order); + offset++; - proto_tree_add_item(tree, hf_cigi3_3_entity_control_yaw, tvb, offset, 4, cigi_byte_order); - offset += 4; + proto_tree_add_item(tree, hf_cigi4_entity_control_entity_specific, tvb, offset, 1, cigi_byte_order); + offset++; - proto_tree_add_item(tree, hf_cigi3_3_entity_control_lat_xoff, tvb, offset, 8, cigi_byte_order); - offset += 8; + proto_tree_add_item(tree, hf_cigi4_entity_control_entity_extra, tvb, offset, 1, cigi_byte_order); + offset++; - proto_tree_add_item(tree, hf_cigi3_3_entity_control_lon_yoff, tvb, offset, 8, cigi_byte_order); - offset += 8; + return offset; +} - proto_tree_add_item(tree, hf_cigi3_3_entity_control_alt_zoff, tvb, offset, 8, cigi_byte_order); - offset += 8; +/* CIGI4 Animation Control */ +static int +cigi4_add_animation_control(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void *data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi4_animation_control_state, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_animation_control_frame_position_reset, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_animation_control_loop_mode, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_animation_control_inherit_alpha, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi4_animation_control_alpha, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi4_animation_control_entity_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi4_animation_control_animation_id, tvb, offset, 2, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi4_animation_control_animation_speed, tvb, offset, 4, cigi_byte_order); + offset += 4; return offset; } + /* CIGI3 Conformal Clamped Entity Control */ -static gint -cigi3_add_conformal_clamped_entity_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_conformal_clamped_entity_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_conformal_clamped_entity_control_entity_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -4312,16 +4649,22 @@ cigi3_add_conformal_clamped_entity_control(tvbuff_t *tvb, proto_tree *tree, gint } /* CIGI3 Component Control */ -static gint -cigi3_add_component_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_component_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_component_control_component_id, tvb, offset, 2, cigi_byte_order); offset += 2; proto_tree_add_item(tree, hf_cigi3_component_control_instance_id, tvb, offset, 2, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_component_control_component_class, tvb, offset, 1, cigi_byte_order); + if (cigi_minor_version >= 3) { + proto_tree_add_item(tree, hf_cigi3_3_component_control_component_class, tvb, offset, 1, cigi_byte_order); + } else { + proto_tree_add_item(tree, hf_cigi3_component_control_component_class, tvb, offset, 1, cigi_byte_order); + } offset++; proto_tree_add_item(tree, hf_cigi3_component_control_component_state, tvb, offset, 1, cigi_byte_order); @@ -4348,59 +4691,58 @@ cigi3_add_component_control(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } -/* CIGI3_3 Component Control */ -static gint -cigi3_3_add_component_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +/* CIGI3 Short Component Control */ +static int +cigi3_add_short_component_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { - proto_tree_add_item(tree, hf_cigi3_3_component_control_component_id, tvb, offset, 2, cigi_byte_order); + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_short_component_control_component_id, tvb, offset, 2, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_3_component_control_instance_id, tvb, offset, 2, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_short_component_control_instance_id, tvb, offset, 2, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_3_component_control_component_class, tvb, offset, 1, cigi_byte_order); + if (cigi_minor_version >= 3) { + proto_tree_add_item(tree, hf_cigi3_3_short_component_control_component_class, tvb, offset, 1, cigi_byte_order); + } else { + proto_tree_add_item(tree, hf_cigi3_short_component_control_component_class, tvb, offset, 1, cigi_byte_order); + } offset++; - proto_tree_add_item(tree, hf_cigi3_3_component_control_component_state, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_short_component_control_component_state, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_3_component_control_data_1, tvb, offset, 4, cigi_byte_order); - offset += 4; - - proto_tree_add_item(tree, hf_cigi3_3_component_control_data_2, tvb, offset, 4, cigi_byte_order); - offset += 4; - - proto_tree_add_item(tree, hf_cigi3_3_component_control_data_3, tvb, offset, 4, cigi_byte_order); - offset += 4; - - proto_tree_add_item(tree, hf_cigi3_3_component_control_data_4, tvb, offset, 4, cigi_byte_order); - offset += 4; - - proto_tree_add_item(tree, hf_cigi3_3_component_control_data_5, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_short_component_control_data_1, tvb, offset, 4, cigi_byte_order); offset += 4; - proto_tree_add_item(tree, hf_cigi3_3_component_control_data_6, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_short_component_control_data_2, tvb, offset, 4, cigi_byte_order); offset += 4; return offset; } -/* CIGI3 Short Component Control */ -static gint -cigi3_add_short_component_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +/* CIGI4 Short Component Control */ +static int +cigi4_add_short_component_control(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) { - proto_tree_add_item(tree, hf_cigi3_short_component_control_component_id, tvb, offset, 2, cigi_byte_order); - offset += 2; + int offset = 0; - proto_tree_add_item(tree, hf_cigi3_short_component_control_instance_id, tvb, offset, 2, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_short_component_control_component_id, tvb, offset, 2, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_short_component_control_component_class, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_3_short_component_control_component_class, tvb, offset, 1, cigi_byte_order); offset++; proto_tree_add_item(tree, hf_cigi3_short_component_control_component_state, tvb, offset, 1, cigi_byte_order); offset++; + proto_tree_add_item(tree, hf_cigi3_short_component_control_instance_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + //reserved + offset += 6; + proto_tree_add_item(tree, hf_cigi3_short_component_control_data_1, tvb, offset, 4, cigi_byte_order); offset += 4; @@ -4410,49 +4752,76 @@ cigi3_add_short_component_control(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } -/* CIGI3_3 Short Component Control */ -static gint -cigi3_3_add_short_component_control(tvbuff_t *tvb, proto_tree *tree, gint offset) + +/* CIGI3 Articulated Part Control */ +static int +cigi3_add_articulated_part_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { - proto_tree_add_item(tree, hf_cigi3_3_short_component_control_component_id, tvb, offset, 2, cigi_byte_order); - offset += 2; + int offset = 0; - proto_tree_add_item(tree, hf_cigi3_3_short_component_control_instance_id, tvb, offset, 2, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_articulated_part_control_entity_id, tvb, offset, 2, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_3_short_component_control_component_class, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_articulated_part_control_part_id, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_3_short_component_control_component_state, tvb, offset, 1, cigi_byte_order); - offset++; + proto_tree_add_item(tree, hf_cigi3_articulated_part_control_part_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_articulated_part_control_xoff_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_articulated_part_control_yoff_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_articulated_part_control_zoff_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_articulated_part_control_roll_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_articulated_part_control_pitch_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_articulated_part_control_yaw_enable, tvb, offset, 1, cigi_byte_order); + offset += 3; + + proto_tree_add_item(tree, hf_cigi3_articulated_part_control_xoff, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_articulated_part_control_yoff, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_articulated_part_control_zoff, tvb, offset, 4, cigi_byte_order); + offset += 4; - proto_tree_add_item(tree, hf_cigi3_3_short_component_control_data_1, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_articulated_part_control_roll, tvb, offset, 4, cigi_byte_order); offset += 4; - proto_tree_add_item(tree, hf_cigi3_3_short_component_control_data_2, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_articulated_part_control_pitch, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_articulated_part_control_yaw, tvb, offset, 4, cigi_byte_order); offset += 4; return offset; } -/* CIGI3 Articulated Part Control */ -static gint -cigi3_add_articulated_part_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +/* CIGI4 Articulated Part Control */ +static int +cigi4_add_articulated_part_control(tvbuff_t* tvb, packet_info *pinfo _U_, proto_tree* tree, void* data _U_) { + int offset = 0; + + proto_tree* field_tree; + proto_item* tf; + proto_tree_add_item(tree, hf_cigi3_articulated_part_control_entity_id, tvb, offset, 2, cigi_byte_order); offset += 2; proto_tree_add_item(tree, hf_cigi3_articulated_part_control_part_id, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_articulated_part_control_part_enable, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_articulated_part_control_xoff_enable, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_articulated_part_control_yoff_enable, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_articulated_part_control_zoff_enable, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_articulated_part_control_roll_enable, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_articulated_part_control_pitch_enable, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_articulated_part_control_yaw_enable, tvb, offset, 1, cigi_byte_order); - offset += 3; + //enabled Flags + tf = proto_tree_add_item(tree, hf_cigi4_articulated_part_control_part_enable_flags, tvb, offset, 1, cigi_byte_order); + field_tree = proto_item_add_subtree(tf, ett_cigi4_articulated_part_control_part_enable_flags); + + proto_tree_add_item(field_tree, hf_cigi3_articulated_part_control_part_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_articulated_part_control_xoff_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_articulated_part_control_yoff_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_articulated_part_control_zoff_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_articulated_part_control_roll_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_articulated_part_control_pitch_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_articulated_part_control_yaw_enable, tvb, offset, 1, cigi_byte_order); + offset++; proto_tree_add_item(tree, hf_cigi3_articulated_part_control_xoff, tvb, offset, 4, cigi_byte_order); offset += 4; @@ -4475,10 +4844,13 @@ cigi3_add_articulated_part_control(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } + /* CIGI3 Short Articulated Part Control */ -static gint -cigi3_add_short_articulated_part_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_short_articulated_part_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_entity_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -4503,10 +4875,53 @@ cigi3_add_short_articulated_part_control(tvbuff_t *tvb, proto_tree *tree, gint o return offset; } +/* CIGI4 Short Articulated Part Control */ +static int +cigi4_add_short_articulated_part_control(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) +{ + int offset = 0; + + proto_tree* field_tree; + proto_item* tf; + + proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_entity_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_part_id_1, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_part_id_2, tvb, offset, 1, cigi_byte_order); + offset++; + + //enabled Flags + tf = proto_tree_add_item(tree, hf_cigi4_short_articulated_part_control_part_enable_flags, tvb, offset, 1, cigi_byte_order); + field_tree = proto_item_add_subtree(tf, ett_cigi4_short_articulated_part_control_part_enable_flags); + + proto_tree_add_item(field_tree, hf_cigi3_short_articulated_part_control_dof_select_1, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_short_articulated_part_control_dof_select_2, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_short_articulated_part_control_part_enable_1, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_short_articulated_part_control_part_enable_2, tvb, offset, 1, cigi_byte_order); + offset++; + + //reserved + offset += 3; + + proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_dof_1, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_short_articulated_part_control_dof_2, tvb, offset, 4, cigi_byte_order); + offset += 8; + + return offset; +} + + /* CIGI3 Rate Control */ -static gint -cigi3_add_rate_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_rate_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_rate_control_entity_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -4514,6 +4929,9 @@ cigi3_add_rate_control(tvbuff_t *tvb, proto_tree *tree, gint offset) offset++; proto_tree_add_item(tree, hf_cigi3_rate_control_apply_to_part, tvb, offset, 1, cigi_byte_order); + if (cigi_minor_version >= 2) { + proto_tree_add_item(tree, hf_cigi3_2_rate_control_coordinate_system, tvb, offset, 1, cigi_byte_order); + } offset += 3; proto_tree_add_item(tree, hf_cigi3_rate_control_x_rate, tvb, offset, 4, cigi_byte_order); @@ -4537,45 +4955,56 @@ cigi3_add_rate_control(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } -/* CIGI3_2 Rate Control */ -static gint -cigi3_2_add_rate_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +/* CIGI4 Velocity Control */ +static int +cigi4_add_velocity_control(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) { - proto_tree_add_item(tree, hf_cigi3_2_rate_control_entity_id, tvb, offset, 2, cigi_byte_order); + int offset = 0; + + proto_tree* field_tree; + proto_item* tf; + + proto_tree_add_item(tree, hf_cigi4_velocity_control_entity_id, tvb, offset, 2, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_2_rate_control_part_id, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_velocity_control_part_id, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_2_rate_control_apply_to_part, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_rate_control_coordinate_system, tvb, offset, 1, cigi_byte_order); - offset += 3; + //Flags + tf = proto_tree_add_item(tree, hf_cigi4_velocity_control_flags, tvb, offset, 1, cigi_byte_order); + field_tree = proto_item_add_subtree(tf, ett_cigi4_velocity_control_flags); + proto_tree_add_item(field_tree, hf_cigi4_velocity_control_apply_to_part, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi4_velocity_control_coordinate_system, tvb, offset, 1, cigi_byte_order); + offset++; - proto_tree_add_item(tree, hf_cigi3_2_rate_control_x_rate, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_velocity_control_x_rate, tvb, offset, 4, cigi_byte_order); offset += 4; - proto_tree_add_item(tree, hf_cigi3_2_rate_control_y_rate, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_velocity_control_y_rate, tvb, offset, 4, cigi_byte_order); offset += 4; - proto_tree_add_item(tree, hf_cigi3_2_rate_control_z_rate, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_velocity_control_z_rate, tvb, offset, 4, cigi_byte_order); offset += 4; - proto_tree_add_item(tree, hf_cigi3_2_rate_control_roll_rate, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_velocity_control_roll_rate, tvb, offset, 4, cigi_byte_order); offset += 4; - proto_tree_add_item(tree, hf_cigi3_2_rate_control_pitch_rate, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_velocity_control_pitch_rate, tvb, offset, 4, cigi_byte_order); offset += 4; - proto_tree_add_item(tree, hf_cigi3_2_rate_control_yaw_rate, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_velocity_control_yaw_rate, tvb, offset, 4, cigi_byte_order); offset += 4; return offset; } + /* CIGI3 Celestial Sphere Control */ -static gint -cigi3_add_celestial_sphere_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_celestial_sphere_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_hour, tvb, offset, 1, cigi_byte_order); offset++; @@ -4598,10 +5027,54 @@ cigi3_add_celestial_sphere_control(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } +/* CIGI4 Celestial Sphere Control */ +static int +cigi4_add_celestial_sphere_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) +{ + int offset = 0; + + proto_tree* field_tree; + proto_item* tf; + + //Enabled Flags + tf = proto_tree_add_item(tree, hf_cigi4_celestial_sphere_control_enable_flags, tvb, offset, 1, cigi_byte_order); + field_tree = proto_item_add_subtree(tf, ett_cigi4_celestial_sphere_control_flags); + proto_tree_add_item(field_tree, hf_cigi3_celestial_sphere_control_ephemeris_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_celestial_sphere_control_sun_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_celestial_sphere_control_moon_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_celestial_sphere_control_star_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_celestial_sphere_control_date_time_valid, tvb, offset, 1, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_hour, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_minute, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi4_celestial_sphere_control_seconds, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi4_celestial_sphere_control_date, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_celestial_sphere_control_star_intensity, tvb, offset, 4, cigi_byte_order); + offset += 4; + + //reserved + offset += 4; + + return offset; +} + + + /* CIGI3 Atmosphere Control */ -static gint -cigi3_add_atmosphere_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_atmosphere_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_atmosphere_control_atmospheric_model_enable, tvb, offset, 1, cigi_byte_order); offset++; @@ -4629,10 +5102,48 @@ cigi3_add_atmosphere_control(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } +/* CIGI4 Atmosphere Control */ +static int +cigi4_add_atmosphere_control(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_atmosphere_control_atmospheric_model_enable, tvb, offset, 1, cigi_byte_order); + + proto_tree_add_item(tree, hf_cigi3_atmosphere_control_humidity, tvb, offset, 1, cigi_byte_order); + offset++; + + //reserved + offset += 3; + + proto_tree_add_item(tree, hf_cigi3_atmosphere_control_air_temp, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_atmosphere_control_visibility_range, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_atmosphere_control_horiz_wind, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_atmosphere_control_vert_wind, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_atmosphere_control_wind_direction, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_atmosphere_control_barometric_pressure, tvb, offset, 4, cigi_byte_order); + offset += 4; + + return offset; +} + + /* CIGI3 Environmental Region Control */ -static gint -cigi3_add_environmental_region_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_environmental_region_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_environmental_region_control_region_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -4667,10 +5178,54 @@ cigi3_add_environmental_region_control(tvbuff_t *tvb, proto_tree *tree, gint off return offset; } + +/* CIGI4 Environmental Region Control */ +static int +cigi4_add_environmental_region_control(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_environmental_region_control_region_state, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_environmental_region_control_merge_weather, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_environmental_region_control_merge_aerosol, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_environmental_region_control_merge_maritime, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_environmental_region_control_merge_terrestrial, tvb, offset, 1, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_environmental_region_control_region_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_environmental_region_control_lat, tvb, offset, 8, cigi_byte_order); + offset += 8; + + proto_tree_add_item(tree, hf_cigi3_environmental_region_control_lon, tvb, offset, 8, cigi_byte_order); + offset += 8; + + proto_tree_add_item(tree, hf_cigi3_environmental_region_control_size_x, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_environmental_region_control_size_y, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_environmental_region_control_corner_radius, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_environmental_region_control_rotation, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_environmental_region_control_transition_perimeter, tvb, offset, 4, cigi_byte_order); + offset += 8; + + return offset; +} + + /* CIGI3 Weather Control */ -static gint -cigi3_add_weather_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_weather_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_weather_control_entity_region_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -4730,10 +5285,89 @@ cigi3_add_weather_control(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } + +/* CIGI4 Weather Control */ +static int +cigi4_add_weather_control(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_weather_control_layer_id, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_weather_control_humidity, tvb, offset, 1, cigi_byte_order); + offset++; + + //flags + proto_tree_add_item(tree, hf_cigi3_weather_control_weather_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_weather_control_scud_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_weather_control_random_winds_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_weather_control_random_lightning_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_weather_control_cloud_type, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_weather_control_scope, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_weather_control_severity, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_weather_control_top_scud_enable, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_weather_control_entity_region_id, tvb, offset, 2, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_weather_control_air_temp, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_weather_control_visibility_range, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_weather_control_scud_frequency, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_weather_control_coverage, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_weather_control_base_elevation, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_weather_control_thickness, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_weather_control_transition_band, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_weather_control_horiz_wind, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_weather_control_vert_wind, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_weather_control_wind_direction, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_weather_control_barometric_pressure, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_weather_control_aerosol_concentration, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi4_weather_control_top_scud_freq, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi4_weather_control_top_transition_band, tvb, offset, 4, cigi_byte_order); + offset += 4; + + //reserved + offset += 4; + + return offset; +} + /* CIGI3 Maritime Surface Conditions Control */ -static gint -cigi3_add_maritime_surface_conditions_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_maritime_surface_conditions_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_entity_region_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -4754,10 +5388,38 @@ cigi3_add_maritime_surface_conditions_control(tvbuff_t *tvb, proto_tree *tree, g return offset; } +/* CIGI4 Maritime Surface Conditions Control */ +static int +cigi4_add_maritime_surface_conditions_control(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void *data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_surface_conditions_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_whitecap_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_scope, tvb, offset, 1, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_entity_region_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_sea_surface_height, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_surface_water_temp, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_control_surface_clarity, tvb, offset, 4, cigi_byte_order); + offset += 8; + + return offset; +} + /* CIGI3 Wave Control */ -static gint -cigi3_add_wave_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_wave_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_wave_control_entity_region_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -4790,10 +5452,50 @@ cigi3_add_wave_control(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } +/* CIGI4 Wave Control */ +static int +cigi4_add_wave_control(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void *data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_wave_control_wave_id, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_wave_control_wave_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_wave_control_scope, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_wave_control_breaker_type, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_wave_control_entity_region_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_wave_control_height, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_wave_control_wavelength, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_wave_control_period, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_wave_control_direction, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_wave_control_phase_offset, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_wave_control_leading, tvb, offset, 4, cigi_byte_order); + offset += 4; + + return offset; +} + /* CIGI3 Terrestrial Surface Conditions Control */ -static gint -cigi3_add_terrestrial_surface_conditions_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_terrestrial_surface_conditions_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_control_entity_region_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -4811,10 +5513,35 @@ cigi3_add_terrestrial_surface_conditions_control(tvbuff_t *tvb, proto_tree *tree return offset; } +/* CIGI4 Terrestrial Surface Conditions Control */ +static int +cigi4_add_terrestrial_surface_conditions_control(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_control_entity_region_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_control_surface_condition_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_control_scope, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_control_severity, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_control_coverage, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_control_surface_condition_id, tvb, offset, 2, cigi_byte_order); + offset += 8; + + return offset; +} + /* CIGI3 View Control */ -static gint -cigi3_add_view_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_view_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_view_control_view_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -4853,10 +5580,65 @@ cigi3_add_view_control(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } +/* CIGI4 View Control */ +static int +cigi4_add_view_control(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) +{ + int offset = 0; + + proto_tree* field_tree; + proto_item* tf; + + proto_tree_add_item(tree, hf_cigi3_view_control_group_id, tvb, offset, 1, cigi_byte_order); + offset++; + + //Flags + tf = proto_tree_add_item(tree, hf_cigi4_view_control_enable_flags, tvb, offset, 1, cigi_byte_order); + field_tree = proto_item_add_subtree(tf, ett_cigi4_view_control_enable_flags); + proto_tree_add_item(field_tree, hf_cigi3_view_control_xoff_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_view_control_yoff_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_view_control_zoff_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_view_control_roll_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_view_control_pitch_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_view_control_yaw_enable, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_view_control_view_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_view_control_entity_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + //reserved + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_view_control_xoff, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_view_control_yoff, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_view_control_zoff, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_view_control_roll, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_view_control_pitch, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_view_control_yaw, tvb, offset, 4, cigi_byte_order); + offset += 8; + + return offset; +} + /* CIGI3 Sensor Control */ -static gint -cigi3_add_sensor_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_sensor_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_sensor_control_view_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -4889,10 +5671,50 @@ cigi3_add_sensor_control(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } +/* CIGI4 Sensor Control */ +static int +cigi4_add_sensor_control(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_sensor_control_sensor_id, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_sensor_control_sensor_on_off, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_sensor_control_polarity, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_sensor_control_line_dropout_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_sensor_control_auto_gain, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_sensor_control_track_white_black, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_sensor_control_track_mode, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_sensor_control_response_type, tvb, offset, 1, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_sensor_control_view_id, tvb, offset, 2, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_sensor_control_gain, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_sensor_control_level, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_sensor_control_ac_coupling, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_sensor_control_noise, tvb, offset, 4, cigi_byte_order); + offset += 8; + + return offset; +} + /* CIGI3 Motion Tracker Control */ -static gint -cigi3_add_motion_tracker_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_motion_tracker_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_view_group_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -4915,10 +5737,40 @@ cigi3_add_motion_tracker_control(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } +/* CIGI4 Motion Tracker Control */ +static int +cigi4_add_motion_tracker_control(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void *data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_tracker_id, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_tracker_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_boresight_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_x_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_y_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_z_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_roll_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_pitch_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_yaw_enable, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_view_group_select, tvb, offset, 1, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_motion_tracker_control_view_group_id, tvb, offset, 2, cigi_byte_order); + offset += 8; + + return offset; +} + /* CIGI3 Earth Reference Model Definition */ -static gint -cigi3_add_earth_reference_model_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_earth_reference_model_definition(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_earth_reference_model_definition_erm_enable, tvb, offset, 1, cigi_byte_order); offset += 6; @@ -4931,10 +5783,30 @@ cigi3_add_earth_reference_model_definition(tvbuff_t *tvb, proto_tree *tree, gint return offset; } +/* CIGI4 Earth Reference Model Definition */ +static int +cigi4_add_earth_reference_model_definition(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void *data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_earth_reference_model_definition_erm_enable, tvb, offset, 1, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_earth_reference_model_definition_equatorial_radius, tvb, offset, 8, cigi_byte_order); + offset += 8; + + proto_tree_add_item(tree, hf_cigi3_earth_reference_model_definition_flattening, tvb, offset, 8, cigi_byte_order); + offset += 8; + + return offset; +} + /* CIGI3 Trajectory Definition */ -static gint -cigi3_add_trajectory_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_trajectory_definition(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_trajectory_definition_entity_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -4956,10 +5828,50 @@ cigi3_add_trajectory_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } +/* CIGI4 Acceleration Control */ +static int +cigi4_add_acceleration_control(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi4_acceleration_control_entity_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi4_acceleration_control_articulated_part_id, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi4_acceleration_control_apply_to_part, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_acceleration_control_coord_system, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi4_acceleration_control_acceleration_x, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi4_acceleration_control_acceleration_y, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi4_acceleration_control_acceleration_z, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi4_acceleration_control_acceleration_roll, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi4_acceleration_control_acceleration_pitch, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi4_acceleration_control_acceleration_yaw, tvb, offset, 4, cigi_byte_order); + offset += 4; + + return offset; +} + + /* CIGI3 View Definition */ -static gint -cigi3_add_view_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_view_definition(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_view_definition_view_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -5002,10 +5914,60 @@ cigi3_add_view_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } +/* CIGI4 View Definition */ +static int +cigi4_add_view_definition(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_view_definition_view_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_view_definition_group_id, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_view_definition_near_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_view_definition_far_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_view_definition_left_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_view_definition_right_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_view_definition_top_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_view_definition_bottom_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_view_definition_mirror_mode, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_view_definition_pixel_replication, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_view_definition_projection_type, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_view_definition_reorder, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_view_definition_view_type, tvb, offset, 1, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_view_definition_near, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_view_definition_far, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_view_definition_left, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_view_definition_right, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_view_definition_top, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_view_definition_bottom, tvb, offset, 4, cigi_byte_order); + offset += 8; + + return offset; +} + /* CIGI3 Collision Detection Segment Definition */ -static gint -cigi3_add_collision_detection_segment_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_collision_detection_segment_definition(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_entity_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -5039,10 +6001,51 @@ cigi3_add_collision_detection_segment_definition(tvbuff_t *tvb, proto_tree *tree return offset; } +/* CIGI4 Collision Detection Segment Definition */ +static int +cigi4_add_collision_detection_segment_definition(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_segment_id, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_segment_enable, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_entity_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_x1, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_y1, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_z1, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_x2, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_y2, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_z2, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_definition_material_mask, tvb, offset, 4, cigi_byte_order); + offset += 8; + + return offset; +} + /* CIGI3 Collision Detection Volume Definition */ -static gint -cigi3_add_collision_detection_volume_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_collision_detection_volume_definition(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_entity_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -5083,65 +6086,91 @@ cigi3_add_collision_detection_volume_definition(tvbuff_t *tvb, proto_tree *tree, return offset; } -/* CIGI3 HAT/HOT Request */ -static gint -cigi3_add_hat_hot_request(tvbuff_t *tvb, proto_tree *tree, gint offset) +/* CIGI4 Collision Detection Volume Definition */ +static int +cigi4_add_collision_detection_volume_definition(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) { - proto_tree_add_item(tree, hf_cigi3_hat_hot_request_hat_hot_id, tvb, offset, 2, cigi_byte_order); - offset += 2; + int offset = 0; - proto_tree_add_item(tree, hf_cigi3_hat_hot_request_type, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_hat_hot_request_coordinate_system, tvb, offset, 1, cigi_byte_order); - offset += 2; + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_volume_id, tvb, offset, 1, cigi_byte_order); + offset++; - proto_tree_add_item(tree, hf_cigi3_hat_hot_request_entity_id, tvb, offset, 2, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_volume_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_volume_type, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_entity_id, tvb, offset, 2, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_hat_hot_request_lat_xoff, tvb, offset, 8, cigi_byte_order); - offset += 8; + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_x, tvb, offset, 4, cigi_byte_order); + offset += 4; - proto_tree_add_item(tree, hf_cigi3_hat_hot_request_lon_yoff, tvb, offset, 8, cigi_byte_order); - offset += 8; + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_y, tvb, offset, 4, cigi_byte_order); + offset += 4; - proto_tree_add_item(tree, hf_cigi3_hat_hot_request_alt_zoff, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_z, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_radius_height, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_width, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_depth, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_roll, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_pitch, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_definition_yaw, tvb, offset, 4, cigi_byte_order); offset += 8; return offset; } -/* CIGI3_2 HAT/HOT Request */ -static gint -cigi3_2_add_hat_hot_request(tvbuff_t *tvb, proto_tree *tree, gint offset) +/* CIGI3 HAT/HOT Request */ +static int +cigi3_add_hat_hot_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_hat_hot_id, tvb, offset, 2, cigi_byte_order); + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_hat_hot_request_hat_hot_id, tvb, offset, 2, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_type, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_coordinate_system, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_hat_hot_request_type, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_hat_hot_request_coordinate_system, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_update_period, tvb, offset, 1, cigi_byte_order); + if (cigi_minor_version >= 2) { + proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_update_period, tvb, offset, 1, cigi_byte_order); + } offset++; - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_entity_id, tvb, offset, 2, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_hat_hot_request_entity_id, tvb, offset, 2, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_lat_xoff, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_hat_hot_request_lat_xoff, tvb, offset, 8, cigi_byte_order); offset += 8; - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_lon_yoff, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_hat_hot_request_lon_yoff, tvb, offset, 8, cigi_byte_order); offset += 8; - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_alt_zoff, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_hat_hot_request_alt_zoff, tvb, offset, 8, cigi_byte_order); offset += 8; return offset; } /* CIGI3 Line of Sight Segment Request */ -static gint -cigi3_add_line_of_sight_segment_request(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_line_of_sight_segment_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_los_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -5149,12 +6178,15 @@ cigi3_add_line_of_sight_segment_request(tvbuff_t *tvb, proto_tree *tree, gint of proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_source_coord, tvb, offset, 1, cigi_byte_order); proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_destination_coord, tvb, offset, 1, cigi_byte_order); proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_response_coord, tvb, offset, 1, cigi_byte_order); + if (cigi_minor_version >= 2) { + proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_entity_id_valid, tvb, offset, 1, cigi_byte_order); + } offset++; proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_alpha_threshold, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_entity_id, tvb, offset, 2, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_source_entity_id, tvb, offset, 2, cigi_byte_order); offset += 2; proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_source_lat_xoff, tvb, offset, 8, cigi_byte_order); @@ -5176,65 +6208,79 @@ cigi3_add_line_of_sight_segment_request(tvbuff_t *tvb, proto_tree *tree, gint of offset += 8; proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_material_mask, tvb, offset, 4, cigi_byte_order); - offset += 8; + offset += 4; + + if (cigi_minor_version >= 2) { + proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_update_period, tvb, offset, 1, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_entity_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + } else { + offset += 4; + } return offset; } -/* CIGI3_2 Line of Sight Segment Request */ -static gint -cigi3_2_add_line_of_sight_segment_request(tvbuff_t *tvb, proto_tree *tree, gint offset) +/* CIGI4 Line of Sight Segment Request */ +static int +cigi4_add_line_of_sight_segment_request(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) { - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_los_id, tvb, offset, 2, cigi_byte_order); + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_los_id, tvb, offset, 2, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_type, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_source_coord, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_coord, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_response_coord, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_source_entity_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_type, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_source_coord, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_destination_coord, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_response_coord, tvb, offset, 1, cigi_byte_order); proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_entity_id_valid, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_alpha_threshold, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_alpha_threshold, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_entity_id, tvb, offset, 2, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_entity_id, tvb, offset, 2, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_source_lat_xoff, tvb, offset, 8, cigi_byte_order); - offset += 8; + proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_update_period, tvb, offset, 1, cigi_byte_order); + offset += 4; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_source_lon_yoff, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_source_lat_xoff, tvb, offset, 8, cigi_byte_order); offset += 8; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_source_alt_zoff, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_source_lon_yoff, tvb, offset, 8, cigi_byte_order); offset += 8; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_lat_xoff, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_source_alt_zoff, tvb, offset, 8, cigi_byte_order); offset += 8; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_lon_yoff, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_destination_lat_xoff, tvb, offset, 8, cigi_byte_order); offset += 8; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_alt_zoff, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_destination_lon_yoff, tvb, offset, 8, cigi_byte_order); offset += 8; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_material_mask, tvb, offset, 4, cigi_byte_order); - offset += 4; - - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_update_period, tvb, offset, 1, cigi_byte_order); - offset += 2; + proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_destination_alt_zoff, tvb, offset, 8, cigi_byte_order); + offset += 8; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_segment_request_destination_entity_id, tvb, offset, 2, cigi_byte_order); - offset += 2; + proto_tree_add_item(tree, hf_cigi3_line_of_sight_segment_request_material_mask, tvb, offset, 4, cigi_byte_order); + offset += 8; return offset; } /* CIGI3 Line of Sight Vector Request */ -static gint -cigi3_add_line_of_sight_vector_request(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_line_of_sight_vector_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_los_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -5271,63 +6317,72 @@ cigi3_add_line_of_sight_vector_request(tvbuff_t *tvb, proto_tree *tree, gint off offset += 8; proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_material_mask, tvb, offset, 4, cigi_byte_order); - offset += 8; + offset += 4; + + if (cigi_minor_version >= 2) { + proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_update_period, tvb, offset, 1, cigi_byte_order); + } + offset += 4; return offset; } -/* CIGI3_2 Line of Sight Vector Request */ -static gint -cigi3_2_add_line_of_sight_vector_request(tvbuff_t *tvb, proto_tree *tree, gint offset) +/* CIGI4 Line of Sight Vector Request */ +static int +cigi4_add_line_of_sight_vector_request(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) { - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_los_id, tvb, offset, 2, cigi_byte_order); + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_los_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_entity_id, tvb, offset, 2, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_type, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_source_coord, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_response_coord, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_type, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_source_coord, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_response_coord, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_alpha, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_alpha, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_entity_id, tvb, offset, 2, cigi_byte_order); - offset += 2; + proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_update_period, tvb, offset, 1, cigi_byte_order); + offset += 6; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_azimuth, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_azimuth, tvb, offset, 4, cigi_byte_order); offset += 4; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_elevation, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_elevation, tvb, offset, 4, cigi_byte_order); offset += 4; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_min_range, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_min_range, tvb, offset, 4, cigi_byte_order); offset += 4; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_max_range, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_max_range, tvb, offset, 4, cigi_byte_order); offset += 4; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_source_lat_xoff, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_source_lat_xoff, tvb, offset, 8, cigi_byte_order); offset += 8; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_source_lon_yoff, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_source_lon_yoff, tvb, offset, 8, cigi_byte_order); offset += 8; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_source_alt_zoff, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_source_alt_zoff, tvb, offset, 8, cigi_byte_order); offset += 8; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_material_mask, tvb, offset, 4, cigi_byte_order); - offset += 4; - - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_vector_request_update_period, tvb, offset, 1, cigi_byte_order); - offset += 4; + proto_tree_add_item(tree, hf_cigi3_line_of_sight_vector_request_material_mask, tvb, offset, 4, cigi_byte_order); + offset += 8; return offset; } /* CIGI3 Position Request */ -static gint -cigi3_add_position_request(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_position_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_position_request_object_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -5342,10 +6397,33 @@ cigi3_add_position_request(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } + +/* CIGI4 Position Request */ +static int +cigi4_add_position_request(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_position_request_part_id, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_position_request_update_mode, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_position_request_object_class, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_position_request_coord_system, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_position_request_object_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + return offset; +} + /* CIGI3 Environmental Conditions Request */ -static gint -cigi3_add_environmental_conditions_request(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_environmental_conditions_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_environmental_conditions_request_type, tvb, offset, 1, cigi_byte_order); offset++; @@ -5364,10 +6442,41 @@ cigi3_add_environmental_conditions_request(tvbuff_t *tvb, proto_tree *tree, gint return offset; } +/* CIGI4 Environmental Conditions Request */ +static int +cigi4_add_environmental_conditions_request(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_environmental_conditions_request_type, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_environmental_conditions_request_id, tvb, offset, 1, cigi_byte_order); + offset += 3; + + proto_tree_add_item(tree, hf_cigi3_environmental_conditions_request_lat, tvb, offset, 8, cigi_byte_order); + offset += 8; + + proto_tree_add_item(tree, hf_cigi3_environmental_conditions_request_lon, tvb, offset, 8, cigi_byte_order); + offset += 8; + + proto_tree_add_item(tree, hf_cigi3_environmental_conditions_request_alt, tvb, offset, 8, cigi_byte_order); + offset += 8; + + return offset; +} + /* CIGI3_3 Symbol Surface Definition */ -static gint -cigi3_3_add_symbol_surface_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_3_add_symbol_surface_definition(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + + /* Dissect as data on versions before 3.3 */ + if (cigi_minor_version < 3) { + return offset; + } + proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_surface_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -5419,17 +6528,72 @@ cigi3_3_add_symbol_surface_definition(tvbuff_t *tvb, proto_tree *tree, gint offs return offset; } -/* CIGI3_3 Symbol Text Definition */ -static gint -cigi3_3_add_symbol_text_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) +/* CIGI4 Symbol Surface Definition */ +static int +cigi4_add_symbol_surface_definition(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) { - guint8 packet_size = 0; + int offset = 0; - packet_size = tvb_get_guint8(tvb, offset-1); + proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_surface_id, tvb, offset, 2, cigi_byte_order); + offset += 2; - /* A symbol text definition packet cannot be less than 16 bytes. */ - if ( packet_size < 16 ) - return -1; + proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_entity_view_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_surface_state, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_attach_type, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_billboard, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_perspective_growth_enable, tvb, offset, 1, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_xoff_left, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_yoff_right, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_zoff_top, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_yaw_bottom, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_pitch, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_roll, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_width, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_height, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_min_u, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_max_u, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_min_v, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_surface_definition_max_v, tvb, offset, 4, cigi_byte_order); + offset += 8; + + return offset; +} + +/* CIGI3_3 Symbol Text Definition */ +static int +cigi3_3_add_symbol_text_definition(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) +{ + int offset = 0; + + if (cigi_minor_version < 3) { + return offset; + } proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_symbol_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -5444,26 +6608,58 @@ cigi3_3_add_symbol_text_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_font_size, tvb, offset, 4, cigi_byte_order); offset += 4; - proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_text, tvb, offset, packet_size-12, cigi_byte_order); - offset += packet_size-12; + if (tvb_reported_length_remaining(tvb, offset) < 2) { + proto_tree_add_expert_format(tree, pinfo, &ei_cigi_invalid_len, tvb, 0, + tvb_reported_length(tvb), "Insufficient room for symbol text definition"); + } else { + proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_text, tvb, offset, + tvb_reported_length_remaining(tvb, offset), cigi_byte_order); + } - return offset; + return tvb_reported_length(tvb); } -/* CIGI3_3 Symbol Circle Definition */ -static gint -cigi3_3_add_symbol_circle_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) +/* CIGI4 Symbol Text Definition */ +static int +cigi4_add_symbol_text_definition(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) { - guint8 packet_size = 0; - int ncircles,c; + int offset = 0; - packet_size = tvb_get_guint8(tvb, offset-1); + proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_alignment, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_orientation, tvb, offset, 1, cigi_byte_order); + offset++; - /* A symbol text definition packet cannot be less than 16 bytes. */ - if ( packet_size < 16 ) - return -1; + proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_font_ident, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_symbol_id, tvb, offset, 2, cigi_byte_order); + offset += 2; - ncircles = (packet_size - 16) / 24; + proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_font_size, tvb, offset, 4, cigi_byte_order); + offset += 4; + + if (tvb_reported_length_remaining(tvb, offset) < 2) { + proto_tree_add_expert_format(tree, pinfo, &ei_cigi_invalid_len, tvb, 0, + tvb_reported_length(tvb), "Insufficient room for symbol text definition"); + } else { + proto_tree_add_item(tree, hf_cigi3_3_symbol_text_definition_text, tvb, offset, + tvb_reported_length_remaining(tvb, offset), cigi_byte_order); + } + + return tvb_reported_length(tvb); +} + +/* CIGI3_3 Symbol Circle Definition */ +static int +cigi3_3_add_symbol_circle_definition(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) +{ + int offset = 0; + + int ncircles, c; + + if (cigi_minor_version < 3) { + return offset; + } proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_symbol_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -5480,7 +6676,14 @@ cigi3_3_add_symbol_circle_definition(tvbuff_t *tvb, proto_tree *tree, gint offse proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_stipple_pattern_length, tvb, offset, 4, cigi_byte_order); offset += 4; - for (c = 0; c< ncircles; c++) { + ncircles = tvb_reported_length_remaining(tvb, offset) / 24; + + /* The length of tvb is determined by a 1 octet packet length value and + * thus there should be fewer than 10 circles (CIGI 3.3 4.1.31) + */ + DISSECTOR_ASSERT_CMPINT(ncircles, <, 10); + + for (c = 0; c < ncircles; c++) { proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_center_u[c], tvb, offset, 4, cigi_byte_order); offset += 4; @@ -5503,20 +6706,78 @@ cigi3_3_add_symbol_circle_definition(tvbuff_t *tvb, proto_tree *tree, gint offse return offset; } -/* CIGI3_3 Symbol Line Definition */ -static gint -cigi3_3_add_symbol_line_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) +/* CIGI4 Symbol Circle Definition */ +static int +cigi4_add_symbol_circle_definition(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) { - guint8 packet_size = 0; - int nvertices,v; + int offset = 0; - packet_size = tvb_get_guint8(tvb, offset-1); + proto_tree* field_tree; + proto_item* tf; - /* A symbol text definition packet cannot be less than 16 bytes. */ - if ( packet_size < 16 ) - return -1; + int ncircles, c, c_field; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_symbol_id, tvb, offset, 2, cigi_byte_order); + offset += 2; - nvertices = (packet_size - 16) / 8; + proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_stipple_pattern, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_drawing_style, tvb, offset, 1, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_line_width, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_circle_definition_stipple_pattern_length, tvb, offset, 4, cigi_byte_order); + offset += 8; + + ncircles = tvb_reported_length_remaining(tvb, offset) / 24; + + for (c = 0; c < ncircles; c++) { + tf = proto_tree_add_item(tree, hf_cigi4_symbol_circle_definition_circles, tvb, offset, 24, cigi_byte_order); + proto_item_append_text(tf, " %u", c); + field_tree = proto_item_add_subtree(tf, ett_cigi4_symbol_circle_definition_circles); + + /* XXX: The length of tvb is determined by a 2 octet packet length value and + * thus there can be more circles than fields that are declared (unlike + * CIGI 3). Make sure we don't have a memory error. + */ + c_field = c % array_length(hf_cigi3_3_symbol_circle_definition_center_u); + + proto_tree_add_item(field_tree, hf_cigi3_3_symbol_circle_definition_center_u[c_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(field_tree, hf_cigi3_3_symbol_circle_definition_center_v[c_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(field_tree, hf_cigi3_3_symbol_circle_definition_radius[c_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(field_tree, hf_cigi3_3_symbol_circle_definition_inner_radius[c_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(field_tree, hf_cigi3_3_symbol_circle_definition_start_angle[c_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(field_tree, hf_cigi3_3_symbol_circle_definition_end_angle[c_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + } + + return offset; +} + +/* CIGI3_3 Symbol Line Definition */ +static int +cigi3_3_add_symbol_line_definition(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) +{ + int offset = 0; + + int nvertices, v; + + if (cigi_minor_version < 3) { + return offset; + } proto_tree_add_item(tree, hf_cigi3_3_symbol_line_definition_symbol_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -5533,6 +6794,13 @@ cigi3_3_add_symbol_line_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) proto_tree_add_item(tree, hf_cigi3_3_symbol_line_definition_stipple_pattern_length, tvb, offset, 4, cigi_byte_order); offset += 4; + nvertices = tvb_reported_length_remaining(tvb, offset) / 8; + + /* The length of tvb is determined by a 1 octet packet length value and + * thus there should be fewer than 30 vertices (CIGI 3.3 4.1.32) + */ + DISSECTOR_ASSERT_CMPINT(nvertices, <, 30); + for(v=0; v<nvertices; v++) { proto_tree_add_item(tree, hf_cigi3_3_symbol_line_definition_vertex_u[v], tvb, offset, 4, cigi_byte_order); offset += 4; @@ -5544,10 +6812,65 @@ cigi3_3_add_symbol_line_definition(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } +/* CIGI4 Symbol Polygon Definition */ +static int +cigi4_add_symbol_polygon_definition(tvbuff_t* tvb, packet_info *pinfo _U_, proto_tree* tree, void *data _U_) +{ + int offset = 0; + + proto_tree* field_tree; + proto_item* tf; + + int nvertices, v, v_field; + + proto_tree_add_item(tree, hf_cigi4_symbol_polygon_definition_symbol_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi4_symbol_polygon_definition_stipple_pattern, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi4_symbol_polygon_definition_primitive_type, tvb, offset, 1, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi4_symbol_polygon_definition_line_width, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi4_symbol_polygon_definition_stipple_pattern_length, tvb, offset, 4, cigi_byte_order); + offset += 8; + + nvertices = tvb_reported_length_remaining(tvb, offset) / 8; + + for (v = 0; v < nvertices; v++) { + tf = proto_tree_add_item(tree, hf_cigi4_symbol_polygon_definition_vertices, tvb, offset, 8, cigi_byte_order); + proto_item_append_text(tf, "[%u]", v); + field_tree = proto_item_add_subtree(tf, ett_cigi4_symbol_polygon_definition_vertices); + + /* XXX: The length of tvb is determined by a 2 octet packet length value and + * thus there can be more vertices than fields that are declared (unlike + * CIGI 3). Make sure we don't have a memory error. + */ + v_field = v % array_length(hf_cigi4_symbol_polygon_definition_vertex_u); + + proto_tree_add_item(field_tree, hf_cigi4_symbol_polygon_definition_vertex_u[v_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(field_tree, hf_cigi4_symbol_polygon_definition_vertex_v[v_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + } + + return offset; +} + /* CIGI3_3 Symbol Clone */ -static gint -cigi3_3_add_symbol_clone(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_3_add_symbol_clone(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + + if (cigi_minor_version < 3) { + return offset; + } + proto_tree_add_item(tree, hf_cigi3_3_symbol_clone_symbol_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -5560,10 +6883,34 @@ cigi3_3_add_symbol_clone(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } +/* CIGI4 Symbol Clone */ +static int +cigi4_add_symbol_clone(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_clone_symbol_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_clone_source_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_clone_source_type, tvb, offset, 1, cigi_byte_order); + offset += 8; + + return offset; +} + /* CIGI3_3 Symbol Control */ -static gint -cigi3_3_add_symbol_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_3_add_symbol_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + + if (cigi_minor_version < 3) { + return offset; + } + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_symbol_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -5618,12 +6965,78 @@ cigi3_3_add_symbol_control(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } +/* CIGI4 Symbol Control */ +static int +cigi4_add_symbol_control(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_symbol_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_parent_symbol_ident, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_symbol_state, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_attach_state, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_flash_control, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_inherit_color, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_layer, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_flash_duty_cycle, tvb, offset, 1, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_surface_ident, tvb, offset, 2, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_flash_period, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_position_u, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_position_v, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_rotation, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_red, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_green, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_blue, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_alpha, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_scale_u, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_3_symbol_control_scale_v, tvb, offset, 4, cigi_byte_order); + offset += 8; + + return offset; +} + /* CIGI3_3 Short Symbol Control */ -static gint -cigi3_3_add_short_symbol_control(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_3_add_short_symbol_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { - guint8 select1 = 0; - guint8 select2 = 0; + int offset = 0; + + if (cigi_minor_version < 3) { + return offset; + } + + uint8_t select1 = 0; + uint8_t select2 = 0; proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_symbol_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -5634,11 +7047,11 @@ cigi3_3_add_short_symbol_control(tvbuff_t *tvb, proto_tree *tree, gint offset) proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_inherit_color, tvb, offset, 1, cigi_byte_order); offset += 2; - select1 = tvb_get_guint8(tvb, offset); + select1 = tvb_get_uint8(tvb, offset); proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attribute_select1, tvb, offset, 1, cigi_byte_order); offset += 1; - select2 = tvb_get_guint8(tvb, offset); + select2 = tvb_get_uint8(tvb, offset); proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attribute_select2, tvb, offset, 1, cigi_byte_order); offset++; @@ -5716,55 +7129,175 @@ cigi3_3_add_short_symbol_control(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } -/* CIGI3 Start of Frame */ -static gint -cigi3_add_start_of_frame(tvbuff_t *tvb, proto_tree *tree, gint offset) +/* CIGI4 Short Symbol Control */ +static int +cigi4_add_short_symbol_control(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) { - proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, cigi_byte_order); - offset++; + int offset = 0; - proto_tree_add_item(tree, hf_cigi3_start_of_frame_db_number, tvb, offset, 1, cigi_byte_order); - offset++; + proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_symbol_id, tvb, offset, 2, cigi_byte_order); + offset += 2; - proto_tree_add_item(tree, hf_cigi3_start_of_frame_ig_status, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attribute_select1, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_start_of_frame_ig_mode, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_start_of_frame_timestamp_valid, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_start_of_frame_earth_reference_model, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attribute_select2, tvb, offset, 1, cigi_byte_order); offset++; - /* Get the Byte Swap in Big-Endian so that we can display whether the value - * is big-endian or little-endian to the user */ - proto_tree_add_item(tree, hf_cigi3_byte_swap, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; - - proto_tree_add_item(tree, hf_cigi3_start_of_frame_frame_ctr, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_symbol_state, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attach_state, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_flash_control, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_inherit_color, tvb, offset, 1, cigi_byte_order); offset += 4; - proto_tree_add_item(tree, hf_cigi3_start_of_frame_timestamp, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attribute_value1, tvb, offset, 4, cigi_byte_order); offset += 4; + proto_tree_add_item(tree, hf_cigi3_3_short_symbol_control_attribute_value2, tvb, offset, 4, cigi_byte_order); + offset += 8; + return offset; } -/* CIGI3_2 Start of Frame */ -static gint -cigi3_2_add_start_of_frame(tvbuff_t *tvb, proto_tree *tree, gint offset) +/* CIGI4 Symbol Textured Circle */ +static int +cigi4_add_symbol_circle_textured(tvbuff_t* tvb, packet_info *pinfo _U_, proto_tree* tree, void* data _U_) +{ + proto_tree* field_tree; + proto_item* tf; + + int offset = 0; + + int ncircles, c, c_field; + + proto_tree_add_item(tree, hf_cigi4_symbol_circle_textured_definition_symbol_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi4_symbol_circle_textured_definition_texture_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi4_symbol_circle_textured_definition_filter_mode, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_symbol_circle_textured_definition_wrap, tvb, offset, 1, cigi_byte_order); + offset += 8; + + ncircles = tvb_reported_length_remaining(tvb, offset) / 40; + + for (c = 0; c < ncircles; c++) { + tf = proto_tree_add_item(tree, hf_cigi4_symbol_circle_textured_definition_circles, tvb, offset, 1, cigi_byte_order); + proto_item_append_text(tf, " %u", c); + field_tree = proto_item_add_subtree(tf, ett_cigi4_symbol_circle_textured_definition_circles); + + /* XXX: The length of tvb is determined by a 2 octet packet length value and + * thus there can be more circles than fields that are declared (unlike + * CIGI 3). Make sure we don't have a memory error. + */ + c_field = c % array_length(hf_cigi4_symbol_circle_textured_definition_center_u); + + proto_tree_add_item(field_tree, hf_cigi4_symbol_circle_textured_definition_center_u[c_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(field_tree, hf_cigi4_symbol_circle_textured_definition_center_v[c_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(field_tree, hf_cigi4_symbol_circle_textured_definition_radius[c_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(field_tree, hf_cigi4_symbol_circle_textured_definition_inner_radius[c_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(field_tree, hf_cigi4_symbol_circle_textured_definition_start_angle[c_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(field_tree, hf_cigi4_symbol_circle_textured_definition_end_angle[c_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(field_tree, hf_cigi4_symbol_circle_textured_definition_texture_center_u[c_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(field_tree, hf_cigi4_symbol_circle_textured_definition_texture_center_v[c_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(field_tree, hf_cigi4_symbol_circle_textured_definition_texture_radius[c_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(field_tree, hf_cigi4_symbol_circle_textured_definition_texture_rotation[c_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + } + + return offset; +} + +/* CIGI4 Symbol Textured Polygon */ +static int +cigi4_add_symbol_polygon_textured(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) { + proto_tree* field_tree; + proto_item* tf; + + int offset = 0; + + int nvertices, v, v_field; + + proto_tree_add_item(tree, hf_cigi4_symbol_polygon_textured_definition_symbol_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi4_symbol_polygon_textured_definition_texture_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi4_symbol_polygon_textured_definition_filter_mode, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi4_symbol_polygon_textured_definition_wrap, tvb, offset, 1, cigi_byte_order); + offset += 8; + + nvertices = tvb_reported_length_remaining(tvb, offset) / 16; + + for (v = 0; v < nvertices; v++) { + tf = proto_tree_add_item(tree, hf_cigi4_symbol_polygon_textured_definition_vertices, tvb, offset, 1, cigi_byte_order); + proto_item_append_text(tf, " %u", v); + field_tree = proto_item_add_subtree(tf, ett_cigi4_symbol_polygon_textured_definition_vertices); + + /* XXX: The length of tvb is determined by a 2 octet packet length value and + * thus there can be more vertices than fields that are declared (unlike + * CIGI 3). Make sure we don't have a memory error. + */ + v_field = v % array_length(hf_cigi4_symbol_polygon_textured_definition_vertex_u); + + proto_tree_add_item(field_tree, hf_cigi4_symbol_polygon_textured_definition_vertex_u[v_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(field_tree, hf_cigi4_symbol_polygon_textured_definition_vertex_v[v_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(field_tree, hf_cigi4_symbol_polygon_textured_definition_texture_center_u[v_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(field_tree, hf_cigi4_symbol_polygon_textured_definition_texture_center_v[v_field], tvb, offset, 4, cigi_byte_order); + offset += 4; + } + + return offset; +} + +/* CIGI3 Start of Frame */ +static int +cigi3_add_start_of_frame(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) +{ + int offset = 0; + proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_db_number, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_start_of_frame_db_number, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_ig_status, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_start_of_frame_ig_status, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_ig_mode, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_timestamp_valid, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_earth_reference_model, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_minor_version, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_start_of_frame_ig_mode, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_start_of_frame_timestamp_valid, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_start_of_frame_earth_reference_model, tvb, offset, 1, cigi_byte_order); + if (cigi_minor_version >= 2) { + proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_minor_version, tvb, offset, 1, cigi_byte_order); + } offset++; /* Get the Byte Swap in Big-Endian so that we can display whether the value @@ -5772,27 +7305,43 @@ cigi3_2_add_start_of_frame(tvbuff_t *tvb, proto_tree *tree, gint offset) proto_tree_add_item(tree, hf_cigi3_byte_swap, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; - proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_ig_frame_number, tvb, offset, 4, cigi_byte_order); + if (cigi_minor_version >= 2) { + proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_ig_frame_number, tvb, offset, 4, cigi_byte_order); + } else { + proto_tree_add_item(tree, hf_cigi3_start_of_frame_frame_ctr, tvb, offset, 4, cigi_byte_order); + } offset += 4; - proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_timestamp, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_start_of_frame_timestamp, tvb, offset, 4, cigi_byte_order); offset += 4; - proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_last_host_frame_number, tvb, offset, 4, cigi_byte_order); - offset += 8; + if (cigi_minor_version >= 2) { + proto_tree_add_item(tree, hf_cigi3_2_start_of_frame_last_host_frame_number, tvb, offset, 4, cigi_byte_order); + offset += 8; + } return offset; } /* CIGI3 HAT/HOT Response */ -static gint -cigi3_add_hat_hot_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_hat_hot_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + proto_tree* field_tree; + proto_item* tf; + + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_hat_hot_response_hat_hot_id, tvb, offset, 2, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_hat_hot_response_valid, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_hat_hot_response_type, tvb, offset, 1, cigi_byte_order); + tf = proto_tree_add_item(tree, hf_cigi4_hat_hot_response_flags, tvb, offset, 1, cigi_byte_order); + field_tree = proto_item_add_subtree(tf, ett_cigi4_hat_hot_response_flags); + proto_tree_add_item(field_tree, hf_cigi3_hat_hot_response_valid, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_hat_hot_response_type, tvb, offset, 1, cigi_byte_order); + if (cigi_minor_version >= 2) { + proto_tree_add_item(tree, hf_cigi3_2_hat_hot_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order); + } offset += 4; proto_tree_add_item(tree, hf_cigi3_hat_hot_response_height, tvb, offset, 8, cigi_byte_order); @@ -5801,32 +7350,50 @@ cigi3_add_hat_hot_response(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } -/* CIGI3_2 HAT/HOT Response */ -static gint -cigi3_2_add_hat_hot_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +/* CIGI4 HAT/HOT Response */ +static int +cigi4_add_hat_hot_response(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) { - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_response_hat_hot_id, tvb, offset, 2, cigi_byte_order); + proto_tree* field_tree; + proto_item* tf; + + int offset = 0; + + tf = proto_tree_add_item(tree, hf_cigi4_hat_hot_response_flags, tvb, offset, 1, cigi_byte_order); + field_tree = proto_item_add_subtree(tf, ett_cigi4_hat_hot_response_flags); + proto_tree_add_item(field_tree, hf_cigi3_hat_hot_response_valid, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_hat_hot_response_type, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_2_hat_hot_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_response_valid, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_response_type, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order); - offset += 4; + proto_tree_add_item(tree, hf_cigi3_hat_hot_response_hat_hot_id, tvb, offset, 2, cigi_byte_order); + offset += 2; - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_response_height, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_hat_hot_response_height, tvb, offset, 8, cigi_byte_order); offset += 8; return offset; } + /* CIGI3 HAT/HOT Extended Response */ -static gint -cigi3_add_hat_hot_extended_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_hat_hot_extended_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + proto_tree* field_tree; + proto_item* tf; + + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_hat_hot_id, tvb, offset, 2, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_valid, tvb, offset, 1, cigi_byte_order); + tf = proto_tree_add_item(tree, hf_cigi4_hat_hot_extended_response_flags, tvb, offset, 1, cigi_byte_order); + field_tree = proto_item_add_subtree(tf, ett_cigi4_hat_hot_extended_response_flags); + proto_tree_add_item(field_tree, hf_cigi3_hat_hot_extended_response_valid, tvb, offset, 1, cigi_byte_order); + if (cigi_minor_version >= 2) { + proto_tree_add_item(field_tree, hf_cigi3_2_hat_hot_extended_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order); + } offset += 4; proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_hat, tvb, offset, 8, cigi_byte_order); @@ -5847,45 +7414,58 @@ cigi3_add_hat_hot_extended_response(tvbuff_t *tvb, proto_tree *tree, gint offset return offset; } -/* CIGI3_2 HAT/HOT Extended Response */ -static gint -cigi3_2_add_hat_hot_extended_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +/* CIGI4 HAT/HOT Extended Response */ +static int +cigi4_add_hat_hot_extended_response(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void *data _U_) { - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_hat_hot_id, tvb, offset, 2, cigi_byte_order); + proto_tree* field_tree; + proto_item* tf; + + int offset = 0; + + tf = proto_tree_add_item(tree, hf_cigi4_hat_hot_extended_response_flags, tvb, offset, 1, cigi_byte_order); + field_tree = proto_item_add_subtree(tf, ett_cigi4_hat_hot_extended_response_flags); + proto_tree_add_item(field_tree, hf_cigi3_hat_hot_extended_response_valid, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_2_hat_hot_extended_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_valid, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order); - offset += 4; + proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_hat_hot_id, tvb, offset, 2, cigi_byte_order); + offset += 2; - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_hat, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_hat, tvb, offset, 8, cigi_byte_order); offset += 8; - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_hot, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_hot, tvb, offset, 8, cigi_byte_order); offset += 8; - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_material_code, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_material_code, tvb, offset, 4, cigi_byte_order); offset += 4; - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_normal_vector_azimuth, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_normal_vector_azimuth, tvb, offset, 4, cigi_byte_order); offset += 4; - proto_tree_add_item(tree, hf_cigi3_2_hat_hot_extended_response_normal_vector_elevation, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_hat_hot_extended_response_normal_vector_elevation, tvb, offset, 4, cigi_byte_order); offset += 8; return offset; } + /* CIGI3 Line of Sight Response */ -static gint -cigi3_add_line_of_sight_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_line_of_sight_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_los_id, tvb, offset, 2, cigi_byte_order); offset += 2; proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_valid, tvb, offset, 1, cigi_byte_order); proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_entity_id_valid, tvb, offset, 1, cigi_byte_order); proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_visible, tvb, offset, 1, cigi_byte_order); + if (cigi_minor_version >= 2) { + proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order); + } offset++; proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_count, tvb, offset, 1, cigi_byte_order); @@ -5900,35 +7480,39 @@ cigi3_add_line_of_sight_response(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } -/* CIGI3_2 Line of Sight Response */ -static gint -cigi3_2_add_line_of_sight_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +/* CIGI4 Line of Sight Response */ +static int +cigi4_add_line_of_sight_response(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) { - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_los_id, tvb, offset, 2, cigi_byte_order); + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_los_id, tvb, offset, 2, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_valid, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_entity_id_valid, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_visible, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order); - offset++; + proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_entity_id, tvb, offset, 2, cigi_byte_order); + offset += 2; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_count, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_valid, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_entity_id_valid, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_visible, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_entity_id, tvb, offset, 2, cigi_byte_order); - offset += 2; + proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_count, tvb, offset, 1, cigi_byte_order); + offset += 7; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_response_range, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_response_range, tvb, offset, 8, cigi_byte_order); offset += 8; return offset; } /* CIGI3 Line of Sight Extended Response */ -static gint -cigi3_add_line_of_sight_extended_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_line_of_sight_extended_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_los_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -5936,7 +7520,11 @@ cigi3_add_line_of_sight_extended_response(tvbuff_t *tvb, proto_tree *tree, gint proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_entity_id_valid, tvb, offset, 1, cigi_byte_order); proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_range_valid, tvb, offset, 1, cigi_byte_order); proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_visible, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_intersection_coord, tvb, offset, 1, cigi_byte_order); + if (cigi_minor_version >= 2) { + proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order); + } else { + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_intersection_coord, tvb, offset, 1, cigi_byte_order); + } offset++; proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_response_count, tvb, offset, 1, cigi_byte_order); @@ -5981,66 +7569,70 @@ cigi3_add_line_of_sight_extended_response(tvbuff_t *tvb, proto_tree *tree, gint return offset; } -/* CIGI3_2 Line of Sight Extended Response */ -static gint -cigi3_2_add_line_of_sight_extended_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +/* CIGI4 Line of Sight Extended Response */ +static int +cigi4_add_line_of_sight_extended_response(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) { - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_los_id, tvb, offset, 2, cigi_byte_order); + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_los_id, tvb, offset, 2, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_valid, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_entity_id_valid, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_range_valid, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_visible, tvb, offset, 1, cigi_byte_order); - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order); - offset++; + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_entity_id, tvb, offset, 2, cigi_byte_order); + offset += 2; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_response_count, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_valid, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_entity_id_valid, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_range_valid, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_visible, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_host_frame_number_lsn, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_entity_id, tvb, offset, 2, cigi_byte_order); - offset += 2; + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_response_count, tvb, offset, 1, cigi_byte_order); + offset += 7; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_range, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_range, tvb, offset, 8, cigi_byte_order); offset += 8; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_lat_xoff, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_lat_xoff, tvb, offset, 8, cigi_byte_order); offset += 8; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_lon_yoff, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_lon_yoff, tvb, offset, 8, cigi_byte_order); offset += 8; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_alt_zoff, tvb, offset, 8, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_alt_zoff, tvb, offset, 8, cigi_byte_order); offset += 8; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_red, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_red, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_green, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_green, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_blue, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_blue, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_alpha, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_alpha, tvb, offset, 1, cigi_byte_order); offset++; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_material_code, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_material_code, tvb, offset, 4, cigi_byte_order); offset += 4; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_normal_vector_azimuth, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_normal_vector_azimuth, tvb, offset, 4, cigi_byte_order); offset += 4; - proto_tree_add_item(tree, hf_cigi3_2_line_of_sight_extended_response_normal_vector_elevation, tvb, offset, 4, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_line_of_sight_extended_response_normal_vector_elevation, tvb, offset, 4, cigi_byte_order); offset += 4; return offset; } /* CIGI3 Sensor Response */ -static gint -cigi3_add_sensor_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_sensor_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_sensor_response_view_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -6068,10 +7660,45 @@ cigi3_add_sensor_response(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } +/* CIGI4 Sensor Response */ +static int +cigi4_add_sensor_response(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void *data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_sensor_response_sensor_id, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_sensor_response_sensor_status, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_sensor_response_view_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_sensor_response_gate_x_size, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_sensor_response_gate_y_size, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_sensor_response_gate_x_pos, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_sensor_response_gate_y_pos, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_sensor_response_frame_ctr, tvb, offset, 4, cigi_byte_order); + offset += 4; + + return offset; +} + /* CIGI3 Sensor Extended Response */ -static gint -cigi3_add_sensor_extended_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_sensor_extended_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_view_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -6112,10 +7739,58 @@ cigi3_add_sensor_extended_response(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } +/* CIGI4 Sensor Extended Response */ +static int +cigi4_add_sensor_extended_response(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_view_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_entity_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_sensor_id, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_sensor_status, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_entity_id_valid, tvb, offset, 1, cigi_byte_order); + offset += 3; + + proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_gate_x_size, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_gate_y_size, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_gate_x_pos, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_gate_y_pos, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_frame_ctr, tvb, offset, 4, cigi_byte_order); + offset += 8; + + proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_track_lat, tvb, offset, 8, cigi_byte_order); + offset += 8; + + proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_track_lon, tvb, offset, 8, cigi_byte_order); + offset += 8; + + proto_tree_add_item(tree, hf_cigi3_sensor_extended_response_track_alt, tvb, offset, 8, cigi_byte_order); + offset += 8; + + return offset; +} + /* CIGI3 Position Response */ -static gint -cigi3_add_position_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_position_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_position_response_object_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -6147,10 +7822,49 @@ cigi3_add_position_response(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } +/* CIGI4 Position Response */ +static int +cigi4_add_position_response(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void *data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_position_response_part_id, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_position_response_object_class, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(tree, hf_cigi3_position_response_coord_system, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_position_response_object_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_position_response_lat_xoff, tvb, offset, 8, cigi_byte_order); + offset += 8; + + proto_tree_add_item(tree, hf_cigi3_position_response_lon_yoff, tvb, offset, 8, cigi_byte_order); + offset += 8; + + proto_tree_add_item(tree, hf_cigi3_position_response_alt_zoff, tvb, offset, 8, cigi_byte_order); + offset += 8; + + proto_tree_add_item(tree, hf_cigi3_position_response_roll, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_position_response_pitch, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_position_response_yaw, tvb, offset, 4, cigi_byte_order); + offset += 8; + + return offset; +} + /* CIGI3 Weather Conditions Response */ -static gint -cigi3_add_weather_conditions_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_weather_conditions_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_request_id, tvb, offset, 1, cigi_byte_order); offset++; @@ -6178,10 +7892,45 @@ cigi3_add_weather_conditions_response(tvbuff_t *tvb, proto_tree *tree, gint offs return offset; } +/* CIGI4 Weather Conditions Response */ +static int +cigi4_add_weather_conditions_response(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void *data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_request_id, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_humidity, tvb, offset, 1, cigi_byte_order); + offset += 3; + + proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_air_temp, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_visibility_range, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_horiz_speed, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_vert_speed, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_wind_direction, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_weather_conditions_response_barometric_pressure, tvb, offset, 4, cigi_byte_order); + offset += 4; + + return offset; +} + /* CIGI3 Aerosol Concentration Response */ -static gint -cigi3_add_aerosol_concentration_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_aerosol_concentration_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_aerosol_concentration_response_request_id, tvb, offset, 1, cigi_byte_order); offset++; @@ -6194,10 +7943,30 @@ cigi3_add_aerosol_concentration_response(tvbuff_t *tvb, proto_tree *tree, gint o return offset; } +/* CIGI4 Aerosol Concentration Response */ +static int +cigi4_add_aerosol_concentration_response(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void *data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_aerosol_concentration_response_request_id, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_aerosol_concentration_response_layer_id, tvb, offset, 1, cigi_byte_order); + offset += 3; + + proto_tree_add_item(tree, hf_cigi3_aerosol_concentration_response_aerosol_concentration, tvb, offset, 4, cigi_byte_order); + offset += 8; + + return offset; +} + /* CIGI3 Maritime Surface Conditions Response */ -static gint -cigi3_add_maritime_surface_conditions_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_maritime_surface_conditions_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_response_request_id, tvb, offset, 1, cigi_byte_order); offset += 2; @@ -6213,10 +7982,33 @@ cigi3_add_maritime_surface_conditions_response(tvbuff_t *tvb, proto_tree *tree, return offset; } +/* CIGI4 Maritime Surface Conditions Response */ +static int +cigi4_add_maritime_surface_conditions_response(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void *data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_response_request_id, tvb, offset, 1, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_response_sea_surface_height, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_response_surface_water_temp, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_maritime_surface_conditions_response_surface_clarity, tvb, offset, 4, cigi_byte_order); + offset += 8; + + return offset; +} + /* CIGI3 Terrestrial Surface Conditions Response */ -static gint -cigi3_add_terrestrial_surface_conditions_response(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_terrestrial_surface_conditions_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_response_request_id, tvb, offset, 1, cigi_byte_order); offset += 2; @@ -6226,10 +8018,27 @@ cigi3_add_terrestrial_surface_conditions_response(tvbuff_t *tvb, proto_tree *tre return offset; } +/* CIGI4 Terrestrial Surface Conditions Response */ +static int +cigi4_add_terrestrial_surface_conditions_response(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_response_request_id, tvb, offset, 1, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_terrestrial_surface_conditions_response_surface_id, tvb, offset, 4, cigi_byte_order); + offset += 8; + + return offset; +} + /* CIGI3 Collision Detection Segment Notification */ -static gint -cigi3_add_collision_detection_segment_notification(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_collision_detection_segment_notification(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_notification_entity_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -6251,10 +8060,39 @@ cigi3_add_collision_detection_segment_notification(tvbuff_t *tvb, proto_tree *tr return offset; } +/* CIGI4 Collision Detection Segment Notification */ +static int +cigi4_add_collision_detection_segment_notification(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_notification_entity_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_notification_contacted_entity_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_notification_segment_id, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_notification_type, tvb, offset, 1, cigi_byte_order); + offset += 3; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_notification_material_code, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_segment_notification_intersection_distance, tvb, offset, 4, cigi_byte_order); + offset += 8; + + return offset; +} + /* CIGI3 Collision Detection Volume Notification */ -static gint -cigi3_add_collision_detection_volume_notification(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_collision_detection_volume_notification(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_notification_entity_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -6273,20 +8111,60 @@ cigi3_add_collision_detection_volume_notification(tvbuff_t *tvb, proto_tree *tre return offset; } +/* CIGI4 Collision Detection Volume Notification */ +static int +cigi4_add_collision_detection_volume_notification(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_notification_entity_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_notification_contacted_entity_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_notification_volume_id, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_notification_type, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_collision_detection_volume_notification_contacted_volume_id, tvb, offset, 1, cigi_byte_order); + offset += 6; + + return offset; +} + /* CIGI3 Animation Stop Notification */ -static gint -cigi3_add_animation_stop_notification(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_animation_stop_notification(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_animation_stop_notification_entity_id, tvb, offset, 2, cigi_byte_order); offset += 6; return offset; } +/* CIGI4 Animation Stop Notification */ +static int +cigi4_add_animation_stop_notification(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void *data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_animation_stop_notification_entity_id, tvb, offset, 2, cigi_byte_order); + offset += 4; + + return offset; +} + /* CIGI3 Event Notification */ -static gint -cigi3_add_event_notification(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_event_notification(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { + int offset = 0; + proto_tree_add_item(tree, hf_cigi3_event_notification_event_id, tvb, offset, 2, cigi_byte_order); offset += 2; @@ -6302,28 +8180,572 @@ cigi3_add_event_notification(tvbuff_t *tvb, proto_tree *tree, gint offset) return offset; } +/* CIGI4 Event Notification */ +static int +cigi4_add_event_notification(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void *data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_event_notification_event_id, tvb, offset, 2, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_event_notification_data_1, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_event_notification_data_2, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_event_notification_data_3, tvb, offset, 4, cigi_byte_order); + offset += 8; + + return offset; +} + /* CIGI3 Image Generator Message */ -static gint -cigi3_add_image_generator_message(tvbuff_t *tvb, proto_tree *tree, gint offset) +static int +cigi3_add_image_generator_message(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) { - guint8 packet_size = 0; + int offset = 0; - packet_size = tvb_get_guint8(tvb, offset-1); + proto_tree_add_item(tree, hf_cigi3_image_generator_message_id, tvb, offset, 2, cigi_byte_order); + offset += 2; - /* An image generator packet cannot be less than 4 bytes ( because every cigi packet - * has a packet id (1 byte) and a packet size (1 byte) ). */ - if ( packet_size < 4 ) - return -1; + if (tvb_reported_length_remaining(tvb, offset) < 2) { + proto_tree_add_expert_format(tree, pinfo, &ei_cigi_invalid_len, tvb, 0, + tvb_reported_length(tvb), "Insufficient room for image generator message"); + } else { + proto_tree_add_item(tree, hf_cigi3_image_generator_message_message, tvb, + offset, tvb_reported_length_remaining(tvb, offset), cigi_byte_order); + } + + return (int)tvb_reported_length(tvb); +} + +/* CIGI4 Image Generator Message */ +static int +cigi4_add_image_generator_message(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void *data _U_) +{ + int offset = 0; proto_tree_add_item(tree, hf_cigi3_image_generator_message_id, tvb, offset, 2, cigi_byte_order); + // 2 bytes Reserved (padding to multiple of 4) + offset += 4; + + if (tvb_reported_length_remaining(tvb, offset) < 2) { + proto_tree_add_expert_format(tree, pinfo, &ei_cigi_invalid_len, tvb, 0, + tvb_reported_length(tvb), "Insufficient room for image generator message"); + } else { + proto_tree_add_item(tree, hf_cigi3_image_generator_message_message, tvb, + offset, tvb_reported_length_remaining(tvb, offset), cigi_byte_order); + } + + return (int)tvb_reported_length(tvb); +} + +/* Create the tree for CIGI 4 */ +static void +cigi4_add_tree(tvbuff_t *tvb, packet_info *pinfo, proto_tree *cigi_tree) +{ + int offset = 0; + int length = 0; + int init_offset = 0; + + int packet_id = 0; + int packet_size = 0; + int packet_length = 0; + uint16_t byte_swap = 0; + + proto_tree* cigi_packet_tree = NULL; + proto_item* tipacket, *ti; + tvbuff_t* next_tvb; + int hf_cigi4_packet; + + length = tvb_reported_length(tvb); + + /* Each iteration through this loop is meant to be a separate cigi packet + * therefore it is okay to assume that at the top of this look we are given + * a new packet to dissect. */ + while ( offset < length ) { + + byte_swap = tvb_get_ntohs(tvb, offset); + /* If we have the SOF or IG Control packet set the byte order */ + //if ((packet_id == CIGI4_PACKET_ID_IG_CONTROL || packet_id == CIGI4_PACKET_ID_START_OF_FRAME) && global_cigi_byte_order == CIGI_BYTE_ORDER_FROM_PACKET) { + //If the parser detects a zero in the "leftmost" byte, then the message is in Big Endian byte + if ((byte_swap & 0xFF00) == 0) { + cigi_byte_order = ENC_BIG_ENDIAN; + } + else { + cigi_byte_order = ENC_LITTLE_ENDIAN; + } + //} + packet_id = tvb_get_uint16(tvb, offset + 2, cigi_byte_order); + packet_size = tvb_get_uint16(tvb, offset, cigi_byte_order); + + /* If we have the start of frame or IG Control packet set the version */ + if ( ( packet_id == CIGI4_PACKET_ID_IG_CONTROL || packet_id == CIGI4_PACKET_ID_START_OF_FRAME ) && global_cigi_version == CIGI_VERSION_FROM_PACKET ) { + cigi_version = tvb_get_uint8(tvb, 4); + + if (( packet_size == CIGI4_PACKET_SIZE_IG_CONTROL && packet_id == CIGI4_PACKET_ID_IG_CONTROL ) || + ( packet_size == CIGI4_PACKET_SIZE_START_OF_FRAME && packet_id == CIGI4_PACKET_ID_START_OF_FRAME )) { + cigi_minor_version = tvb_get_uint8(tvb, 7) >> 4; + } else { + cigi_minor_version = 0; + } + } + + /* Add the subtree for the packet */ + if ( packet_id == CIGI4_PACKET_ID_IG_CONTROL ) { + hf_cigi4_packet = hf_cigi3_ig_control; + packet_length = CIGI4_PACKET_SIZE_IG_CONTROL; + } else if ( packet_id == CIGI4_PACKET_ID_ENTITY_POSITION ) { + hf_cigi4_packet = hf_cigi4_entity_position; + packet_length = CIGI4_PACKET_SIZE_ENTITY_POSITION; + } else if ( packet_id == CIGI4_PACKET_ID_CONFORMAL_CLAMPED_ENTITY_POSITION ) { + hf_cigi4_packet = hf_cigi4_conformal_clamped_entity_position; + packet_length = CIGI4_PACKET_SIZE_CONFORMAL_CLAMPED_ENTITY_POSITION; + } else if ( packet_id == CIGI4_PACKET_ID_COMPONENT_CONTROL ) { + hf_cigi4_packet = hf_cigi3_component_control; + packet_length = CIGI4_PACKET_SIZE_COMPONENT_CONTROL; + } else if ( packet_id == CIGI4_PACKET_ID_SHORT_COMPONENT_CONTROL ) { + hf_cigi4_packet = hf_cigi3_short_component_control; + packet_length = CIGI4_PACKET_SIZE_SHORT_COMPONENT_CONTROL; + } else if ( packet_id == CIGI4_PACKET_ID_ARTICULATED_PART_CONTROL ) { + hf_cigi4_packet = hf_cigi3_articulated_part_control; + packet_length = CIGI4_PACKET_SIZE_ARTICULATED_PART_CONTROL; + } else if ( packet_id == CIGI4_PACKET_ID_SHORT_ARTICULATED_PART_CONTROL ) { + hf_cigi4_packet = hf_cigi3_short_articulated_part_control; + packet_length = CIGI4_PACKET_SIZE_SHORT_ARTICULATED_PART_CONTROL; + } else if ( packet_id == CIGI4_PACKET_ID_VELOCITY_CONTROL ) { + hf_cigi4_packet = hf_cigi4_velocity_control; + packet_length = CIGI4_PACKET_SIZE_VELOCITY_CONTROL; + } else if ( packet_id == CIGI4_PACKET_ID_CELESTIAL_SPHERE_CONTROL ) { + hf_cigi4_packet = hf_cigi3_celestial_sphere_control; + packet_length = CIGI4_PACKET_SIZE_CELESTIAL_SPHERE_CONTROL; + } else if ( packet_id == CIGI4_PACKET_ID_ATMOSPHERE_CONTROL ) { + hf_cigi4_packet = hf_cigi3_atmosphere_control; + packet_length = CIGI4_PACKET_SIZE_ATMOSPHERE_CONTROL; + } else if ( packet_id == CIGI4_PACKET_ID_ENVIRONMENTAL_REGION_CONTROL ) { + hf_cigi4_packet = hf_cigi3_environmental_region_control; + packet_length = CIGI4_PACKET_SIZE_ENVIRONMENTAL_REGION_CONTROL; + } else if ( packet_id == CIGI4_PACKET_ID_WEATHER_CONTROL ) { + hf_cigi4_packet = hf_cigi3_weather_control; + packet_length = CIGI4_PACKET_SIZE_WEATHER_CONTROL; + } else if ( packet_id == CIGI4_PACKET_ID_MARITIME_SURFACE_CONDITIONS_CONTROL ) { + hf_cigi4_packet = hf_cigi3_maritime_surface_conditions_control; + packet_length = CIGI4_PACKET_SIZE_MARITIME_SURFACE_CONDITIONS_CONTROL; + } else if ( packet_id == CIGI4_PACKET_ID_WAVE_CONTROL ) { + hf_cigi4_packet = hf_cigi3_wave_control; + packet_length = CIGI4_PACKET_SIZE_WAVE_CONTROL; + } else if ( packet_id == CIGI4_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL ) { + hf_cigi4_packet = hf_cigi3_terrestrial_surface_conditions_control; + packet_length = CIGI4_PACKET_SIZE_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL; + } else if ( packet_id == CIGI4_PACKET_ID_VIEW_CONTROL ) { + hf_cigi4_packet = hf_cigi3_view_control; + packet_length = CIGI4_PACKET_SIZE_VIEW_CONTROL; + } else if (packet_id == CIGI4_PACKET_ID_SENSOR_CONTROL) { + hf_cigi4_packet = hf_cigi3_sensor_control; + packet_length = CIGI4_PACKET_SIZE_SENSOR_CONTROL; + } else if ( packet_id == CIGI4_PACKET_ID_MOTION_TRACKER_CONTROL ) { + hf_cigi4_packet = hf_cigi3_motion_tracker_control; + packet_length = CIGI4_PACKET_SIZE_MOTION_TRACKER_CONTROL; + } else if ( packet_id == CIGI4_PACKET_ID_EARTH_REFERENCE_MODEL_DEFINITION ) { + hf_cigi4_packet = hf_cigi3_earth_reference_model_definition; + packet_length = CIGI4_PACKET_SIZE_EARTH_REFERENCE_MODEL_DEFINITION; + } else if ( packet_id == CIGI4_PACKET_ID_ACCELERATION_CONTROL ) { + hf_cigi4_packet = hf_cigi4_acceleration_control; + packet_length = CIGI4_PACKET_SIZE_ACCELERATION_CONTROL; + } else if ( packet_id == CIGI4_PACKET_ID_VIEW_DEFINITION ) { + hf_cigi4_packet = hf_cigi3_view_definition; + packet_length = CIGI4_PACKET_SIZE_VIEW_DEFINITION; + } else if ( packet_id == CIGI4_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION ) { + hf_cigi4_packet = hf_cigi3_collision_detection_segment_definition; + packet_length = CIGI4_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_DEFINITION; + } else if ( packet_id == CIGI4_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION ) { + hf_cigi4_packet = hf_cigi3_collision_detection_volume_definition; + packet_length = CIGI4_PACKET_SIZE_COLLISION_DETECTION_VOLUME_DEFINITION; + } else if ( packet_id == CIGI4_PACKET_ID_HAT_HOT_REQUEST ) { + hf_cigi4_packet = hf_cigi3_hat_hot_request; + packet_length = CIGI4_PACKET_SIZE_HAT_HOT_REQUEST; + } else if ( packet_id == CIGI4_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST ) { + hf_cigi4_packet = hf_cigi3_line_of_sight_segment_request; + packet_length = CIGI4_PACKET_SIZE_LINE_OF_SIGHT_SEGMENT_REQUEST; + } else if ( packet_id == CIGI4_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST ) { + hf_cigi4_packet = hf_cigi3_line_of_sight_vector_request; + packet_length = CIGI4_PACKET_SIZE_LINE_OF_SIGHT_VECTOR_REQUEST; + } else if ( packet_id == CIGI4_PACKET_ID_POSITION_REQUEST ) { + hf_cigi4_packet = hf_cigi3_position_request; + packet_length = CIGI4_PACKET_SIZE_POSITION_REQUEST; + } else if ( packet_id == CIGI4_PACKET_ID_ENVIRONMENTAL_CONDITIONS_REQUEST ) { + hf_cigi4_packet = hf_cigi3_environmental_conditions_request; + packet_length = CIGI4_PACKET_SIZE_ENVIRONMENTAL_CONDITIONS_REQUEST; + } else if ( packet_id == CIGI4_PACKET_ID_SYMBOL_SURFACE_DEFINITION ) { + hf_cigi4_packet = hf_cigi3_3_symbol_surface_definition; + packet_length = CIGI4_PACKET_SIZE_SYMBOL_SURFACE_DEFINITION; + } else if ( packet_id == CIGI4_PACKET_ID_SYMBOL_TEXT_DEFINITION ){ + hf_cigi4_packet = hf_cigi3_3_symbol_text_definition; + packet_length = packet_size; + } else if ( packet_id == CIGI4_PACKET_ID_SYMBOL_CIRCLE_DEFINITION ){ + hf_cigi4_packet = hf_cigi3_3_symbol_circle_definition; + packet_length = packet_size; + } else if ( packet_id == CIGI4_PACKET_ID_SYMBOL_POLYGON_DEFINITION){ + hf_cigi4_packet = hf_cigi4_symbol_polygon_definition; + packet_length = packet_size; + } else if (packet_id == CIGI4_PACKET_ID_SYMBOL_CLONE) { + hf_cigi4_packet = hf_cigi3_3_symbol_clone; + packet_length = CIGI4_PACKET_SIZE_SYMBOL_CLONE; + } else if (packet_id == CIGI4_PACKET_ID_SYMBOL_CONTROL) { + hf_cigi4_packet = hf_cigi3_3_symbol_control; + packet_length = CIGI4_PACKET_SIZE_SYMBOL_CONTROL; + } else if (packet_id == CIGI4_PACKET_ID_SHORT_SYMBOL_CONTROL) { + hf_cigi4_packet = hf_cigi3_3_short_symbol_control; + packet_length = CIGI4_PACKET_SIZE_SHORT_SYMBOL_CONTROL; + } else if (packet_id == CIGI4_PACKET_ID_SYMBOL_CIRCLE_TEXTURED_DEFINITION) { + hf_cigi4_packet = hf_cigi4_symbol_circle_textured_definition; + packet_length = packet_size; + } else if (packet_id == CIGI4_PACKET_ID_SYMBOL_POLYGON_TEXTURED_DEFINITION) { + hf_cigi4_packet = hf_cigi4_symbol_polygon_textured_definition; + packet_length = packet_size; + } else if (packet_id == CIGI4_PACKET_ID_ENTITY_CONTROL) { + hf_cigi4_packet = hf_cigi4_entity_control; + packet_length = CIGI4_PACKET_SIZE_ENTITY_CONTROL; + }else if (packet_id == CIGI4_PACKET_ID_ANIMATION_CONTROL) { + hf_cigi4_packet = hf_cigi4_animation_control; + packet_length = CIGI4_PACKET_SIZE_ANIMATION_CONTROL; + } else if ( packet_id == CIGI4_PACKET_ID_START_OF_FRAME ) { + hf_cigi4_packet = hf_cigi4_start_of_frame; + packet_length = CIGI4_PACKET_SIZE_START_OF_FRAME; + } else if ( packet_id == CIGI4_PACKET_ID_HAT_HOT_RESPONSE ) { + hf_cigi4_packet = hf_cigi3_hat_hot_response; + packet_length = CIGI4_PACKET_SIZE_HAT_HOT_RESPONSE; + } else if ( packet_id == CIGI4_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE ) { + hf_cigi4_packet = hf_cigi3_hat_hot_extended_response; + packet_length = CIGI4_PACKET_SIZE_HAT_HOT_EXTENDED_RESPONSE; + } else if ( packet_id == CIGI4_PACKET_ID_LINE_OF_SIGHT_RESPONSE ) { + hf_cigi4_packet = hf_cigi3_line_of_sight_response; + packet_length = CIGI4_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE; + } else if ( packet_id == CIGI4_PACKET_ID_LINE_OF_SIGHT_RESPONSE ) { + hf_cigi4_packet = hf_cigi3_line_of_sight_response; + packet_length = CIGI4_PACKET_SIZE_LINE_OF_SIGHT_RESPONSE; + } else if ( packet_id == CIGI4_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE ) { + hf_cigi4_packet = hf_cigi3_line_of_sight_extended_response; + packet_length = CIGI4_PACKET_SIZE_LINE_OF_SIGHT_EXTENDED_RESPONSE; + } else if ( packet_id == CIGI4_PACKET_ID_SENSOR_RESPONSE ) { + hf_cigi4_packet = hf_cigi3_sensor_response; + packet_length = CIGI4_PACKET_SIZE_SENSOR_RESPONSE; + } else if ( packet_id == CIGI4_PACKET_ID_SENSOR_EXTENDED_RESPONSE ) { + hf_cigi4_packet = hf_cigi3_sensor_extended_response; + packet_length = CIGI4_PACKET_SIZE_SENSOR_EXTENDED_RESPONSE; + } else if ( packet_id == CIGI4_PACKET_ID_POSITION_RESPONSE ) { + hf_cigi4_packet = hf_cigi3_position_response; + packet_length = CIGI4_PACKET_SIZE_POSITION_RESPONSE; + } else if ( packet_id == CIGI4_PACKET_ID_WEATHER_CONDITIONS_RESPONSE ) { + hf_cigi4_packet = hf_cigi3_weather_conditions_response; + packet_length = CIGI4_PACKET_SIZE_WEATHER_CONDITIONS_RESPONSE; + } else if ( packet_id == CIGI4_PACKET_ID_AEROSOL_CONCENTRATION_RESPONSE ) { + hf_cigi4_packet = hf_cigi3_aerosol_concentration_response; + packet_length = CIGI4_PACKET_SIZE_AEROSOL_CONCENTRATION_RESPONSE; + } else if ( packet_id == CIGI4_PACKET_ID_MARITIME_SURFACE_CONDITIONS_RESPONSE ) { + hf_cigi4_packet = hf_cigi3_maritime_surface_conditions_response; + packet_length = CIGI4_PACKET_SIZE_MARITIME_SURFACE_CONDITIONS_RESPONSE; + } else if ( packet_id == CIGI4_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE ) { + hf_cigi4_packet = hf_cigi3_terrestrial_surface_conditions_response; + packet_length = CIGI4_PACKET_SIZE_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE; + } else if ( packet_id == CIGI4_PACKET_ID_COLLISION_DETECTION_SEGMENT_NOTIFICATION ) { + hf_cigi4_packet = hf_cigi3_collision_detection_segment_notification; + packet_length = CIGI4_PACKET_SIZE_COLLISION_DETECTION_SEGMENT_NOTIFICATION; + } else if ( packet_id == CIGI4_PACKET_ID_COLLISION_DETECTION_VOLUME_NOTIFICATION ) { + hf_cigi4_packet = hf_cigi3_collision_detection_volume_notification; + packet_length = CIGI4_PACKET_SIZE_COLLISION_DETECTION_VOLUME_NOTIFICATION; + } else if ( packet_id == CIGI4_PACKET_ID_ANIMATION_STOP_NOTIFICATION ) { + hf_cigi4_packet = hf_cigi3_animation_stop_notification; + packet_length = CIGI4_PACKET_SIZE_ANIMATION_STOP_NOTIFICATION; + } else if ( packet_id == CIGI4_PACKET_ID_EVENT_NOTIFICATION ) { + hf_cigi4_packet = hf_cigi3_event_notification; + packet_length = CIGI4_PACKET_SIZE_EVENT_NOTIFICATION; + } else if ( packet_id == CIGI4_PACKET_ID_IMAGE_GENERATOR_MESSAGE ) { + hf_cigi4_packet = hf_cigi3_image_generator_message; + packet_length = packet_size; + } else if ( packet_id >= CIGI4_PACKET_ID_LOCALLY_DEFINED_MIN && packet_id <= CIGI4_PACKET_ID_LOCALLY_DEFINED_MAX) { + hf_cigi4_packet = hf_cigi4_locally_defined; + packet_length = packet_size; + } else if ( packet_id >= CIGI4_PACKET_ID_REGISTERED_MIN && packet_id <= CIGI4_PACKET_ID_REGISTERED_MAX) { + hf_cigi4_packet = hf_cigi4_registered; + packet_length = packet_size; + } else { + hf_cigi4_packet = hf_cigi_unknown; + packet_length = packet_size; + } + tipacket = proto_tree_add_none_format(cigi_tree, hf_cigi4_packet, tvb, offset, packet_length, + "%s (%i bytes)", + val_to_str_ext_const(packet_id, &cigi4_packet_id_vals_ext, "Unknown"), + packet_length); + + cigi_packet_tree = proto_item_add_subtree(tipacket, ett_cigi); + + /* CIGI4 versions the first word the size of the packet (in bytes). + * The second word is of a packet is the packet ID. */ + init_offset = offset; + ti = proto_tree_add_item(cigi_packet_tree, hf_cigi4_packet_size, tvb, offset, 2, cigi_byte_order); + if (packet_size < 4) { + expert_add_info(pinfo, ti, &ei_cigi_invalid_len); + break; + } + offset += 2; + + proto_tree_add_item(cigi_packet_tree, hf_cigi4_packet_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + /* If packet_size != packet_len for the fixed size packet IDs, attempt + * to dissect normally then add an expert info and abort afterwards below. */ + next_tvb = tvb_new_subset_length(tvb, offset, packet_length - 4); + + int dissected = dissector_try_uint_new(cigi4_packet_id_table, packet_id, + next_tvb, pinfo, cigi_packet_tree, false, NULL); + + if (dissected == 0) { + dissected = cigi_add_data(next_tvb, cigi_packet_tree, 0); + } + + offset += dissected; + + if (offset-init_offset != packet_length) { + proto_tree_add_expert(cigi_packet_tree, pinfo, &ei_cigi_invalid_len, tvb, init_offset, offset-init_offset); + break; + } + } +} + +/* CIGI4 IG Control */ +static int +cigi4_add_ig_control(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) +{ + int offset = 0; + + proto_tree* field_tree; + proto_item* tf; + + proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_ig_control_db_number, tvb, offset, 1, cigi_byte_order); + offset++; + + tf = proto_tree_add_item(tree, hf_cigi4_ig_control_entity_substitution, tvb, offset, 1, cigi_byte_order); + field_tree = proto_item_add_subtree(tf, ett_cigi4_ig_control_entity_substitution); + proto_tree_add_item(field_tree, hf_cigi4_ig_control_entity_substitution_enable, tvb, offset, 1, cigi_byte_order); + offset++; + + tf = proto_tree_add_item(tree, hf_cigi4_ig_control_flags, tvb, offset, 1, cigi_byte_order); + field_tree = proto_item_add_subtree(tf, ett_cigi4_ig_control_flags); + proto_tree_add_item(field_tree, hf_cigi3_ig_control_ig_mode, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_ig_control_timestamp_valid, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi4_ig_control_smoothing_enable, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_2_ig_control_minor_version, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_2_ig_control_host_frame_number, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_2_ig_control_last_ig_frame_number, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_ig_control_timestamp, tvb, offset, 4, cigi_byte_order); + offset += 8; + + return offset; +} + +/* CIGI4 Start of Frame */ +static int +cigi4_add_start_of_frame(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *tree, void* data _U_) +{ + proto_tree* field_tree; + proto_item* tf; + + int offset = 0; + + proto_tree_add_item(tree, hf_cigi_version, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi4_start_of_frame_db_number, tvb, offset, 1, cigi_byte_order); offset += 2; - proto_tree_add_item(tree, hf_cigi3_image_generator_message_message, tvb, offset, packet_size-4, cigi_byte_order); - offset += packet_size-4; + tf = proto_tree_add_item(tree, hf_cigi4_start_of_frame_flags, tvb, offset, 1, cigi_byte_order); + field_tree = proto_item_add_subtree(tf, ett_cigi4_start_of_frame_flags); + + proto_tree_add_item(field_tree, hf_cigi4_start_of_frame_ig_mode, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi4_start_of_frame_timestamp_valid, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi4_start_of_frame_earth_reference_model, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi4_start_of_frame_minor_version, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi4_start_of_frame_ig_frame_number, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi4_start_of_frame_timestamp, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi4_start_of_frame_last_host_frame_number, tvb, offset, 4, cigi_byte_order); + offset += 4; + + tf = proto_tree_add_item(tree, hf_cigi4_start_of_frame_ig_condition_flags, tvb, offset, 1, cigi_byte_order); + field_tree = proto_item_add_subtree(tf, ett_cigi4_start_of_frame_ig_condition_flags); + proto_tree_add_item(field_tree, hf_cigi4_start_of_frame_condition_overframing, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi4_start_of_frame_condition_paging, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi4_start_of_frame_condition_excessive_variable_length_data, tvb, offset, 1, cigi_byte_order); + offset += 4; + + return offset; +} + +/* CIGI Entity Position */ +static int +cigi4_add_entity_position(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) +{ + int offset = 0; + + proto_tree* field_tree; + proto_item* tf; + + tf = proto_tree_add_item(tree, hf_cigi4_entity_position_flags, tvb, offset, 1, cigi_byte_order); + field_tree = proto_item_add_subtree(tf, ett_cigi4_entity_position_flags); + proto_tree_add_item(field_tree, hf_cigi4_entity_position_attach_state, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi4_entity_position_ground_ocean_clamp, tvb, offset, 1, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi4_entity_position_entity_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi4_entity_position_parent_id, tvb, offset, 2, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi4_entity_position_roll, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi4_entity_position_pitch, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi4_entity_position_yaw, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi4_entity_position_lat_xoff, tvb, offset, 8, cigi_byte_order); + offset += 8; + + proto_tree_add_item(tree, hf_cigi4_entity_position_lon_yoff, tvb, offset, 8, cigi_byte_order); + offset += 8; + + proto_tree_add_item(tree, hf_cigi4_entity_position_alt_zoff, tvb, offset, 8, cigi_byte_order); + offset += 8; + + return offset; +} + + +/* CIGI Conformal Clamped Entity Position */ +static int +cigi4_add_conformal_clamped_entity_position(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) { + int offset = 0; + + proto_tree_add_item(tree, hf_cigi4_conformal_clamped_entity_position_entity_id, tvb, offset, 2, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi4_conformal_clamped_entity_position_yaw, tvb, offset, 4, cigi_byte_order); + offset += 8; + + proto_tree_add_item(tree, hf_cigi4_conformal_clamped_entity_position_lat, tvb, offset, 8, cigi_byte_order); + offset += 8; + + proto_tree_add_item(tree, hf_cigi4_conformal_clamped_entity_position_lon, tvb, offset, 8, cigi_byte_order); + offset += 8; + + return offset; +} + +/* CIGI4 Component Control */ +static int +cigi4_add_component_control(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, void* data _U_) +{ + int offset = 0; + + proto_tree_add_item(tree, hf_cigi3_component_control_component_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_3_component_control_component_class, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_component_control_component_state, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_component_control_instance_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + //reserved + offset += 6; + + proto_tree_add_item(tree, hf_cigi3_component_control_data_1, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_component_control_data_2, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_component_control_data_3, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_component_control_data_4, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_component_control_data_5, tvb, offset, 4, cigi_byte_order); + offset += 4; + + proto_tree_add_item(tree, hf_cigi3_component_control_data_6, tvb, offset, 4, cigi_byte_order); + offset += 4; return offset; } + +/* CIGI4 HAT/HOT Request */ +static int +cigi4_add_hat_hot_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_) +{ + int offset = 0; + + proto_tree* field_tree; + proto_item* tf; + + proto_tree_add_item(tree, hf_cigi3_hat_hot_request_hat_hot_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + proto_tree_add_item(tree, hf_cigi3_hat_hot_request_entity_id, tvb, offset, 2, cigi_byte_order); + offset += 2; + + //subtree + tf = proto_tree_add_item(tree, hf_cigi4_hat_hot_request_flags, tvb, offset, 1, cigi_byte_order); + field_tree = proto_item_add_subtree(tf, ett_cigi4_hat_hot_request_flags); + proto_tree_add_item(field_tree, hf_cigi3_hat_hot_request_type, tvb, offset, 1, cigi_byte_order); + proto_tree_add_item(field_tree, hf_cigi3_hat_hot_request_coordinate_system, tvb, offset, 1, cigi_byte_order); + offset++; + + proto_tree_add_item(tree, hf_cigi3_2_hat_hot_request_update_period, tvb, offset, 1, cigi_byte_order); + offset++; + + //reserved + offset += 6; + + + proto_tree_add_item(tree, hf_cigi3_hat_hot_request_lat_xoff, tvb, offset, 8, cigi_byte_order); + offset += 8; + + proto_tree_add_item(tree, hf_cigi3_hat_hot_request_lon_yoff, tvb, offset, 8, cigi_byte_order); + offset += 8; + + proto_tree_add_item(tree, hf_cigi3_hat_hot_request_alt_zoff, tvb, offset, 8, cigi_byte_order); + offset += 8; + + return offset; +} + + + /* Register the protocol with Wireshark */ void proto_register_cigi(void) @@ -6401,6 +8823,18 @@ proto_register_cigi(void) "Used to determine whether the incoming data should be byte-swapped", HFILL } }, + /* CIGI4 */ + { &hf_cigi4_packet_id, + { "Packet ID", "cigi.packet_id", + FT_UINT16, BASE_HEX|BASE_EXT_STRING, &cigi4_packet_id_vals_ext, 0x0, + "Identifies the packet's ID", HFILL } + }, + { &hf_cigi4_packet_size, + { "Packet Size", "cigi.packet_size", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Identifies the number of bytes in this type of packet", HFILL } + }, + /* CIGI2 IG Control */ { &hf_cigi2_ig_control, { "IG Control", "cigi.ig_control", @@ -6471,26 +8905,6 @@ proto_register_cigi(void) }, /* CIGI3_2 IG Control */ - { &hf_cigi3_2_ig_control, - { "IG Control", "cigi.ig_control", - FT_NONE, BASE_NONE, NULL, 0x0, - "IG Control Packet", HFILL } - }, - { &hf_cigi3_2_ig_control_db_number, - { "Database Number", "cigi.ig_control.db_number", - FT_INT8, BASE_DEC, NULL, 0x0, - "Used to initiate a database load on the IG", HFILL } - }, - { &hf_cigi3_2_ig_control_ig_mode, - { "IG Mode", "cigi.ig_control.ig_mode", - FT_UINT8, BASE_DEC, VALS(cigi3_2_ig_control_ig_mode_vals), 0x03, - "Dictates the IG's operational mode", HFILL } - }, - { &hf_cigi3_2_ig_control_timestamp_valid, - { "Timestamp Valid", "cigi.ig_control.timestamp_valid", - FT_BOOLEAN, 8, TFS(&tfs_valid_invalid), 0x04, - "Indicates whether the timestamp contains a valid value", HFILL } - }, { &hf_cigi3_2_ig_control_minor_version, { "Minor Version", "cigi.ig_control.minor_version", FT_UINT8, BASE_DEC, NULL, 0xF0, @@ -6501,11 +8915,6 @@ proto_register_cigi(void) FT_UINT32, BASE_DEC, NULL, 0x0, "Uniquely identifies a data frame on the host", HFILL } }, - { &hf_cigi3_2_ig_control_timestamp, - { "Timestamp (microseconds)", "cigi.ig_control.timestamp", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Indicates the number of 10 microsecond \"ticks\" since some initial reference time", HFILL } - }, { &hf_cigi3_2_ig_control_last_ig_frame_number, { "IG Frame Number", "cigi.ig_control.last_ig_frame_number", FT_UINT32, BASE_DEC, NULL, 0x0, @@ -6513,55 +8922,97 @@ proto_register_cigi(void) }, /* CIGI3_3 IG Control */ - { &hf_cigi3_3_ig_control, - { "IG Control", "cigi.ig_control", - FT_NONE, BASE_NONE, NULL, 0x0, - "IG Control Packet", HFILL } + { &hf_cigi3_3_ig_control_extrapolation_enable, + { "Extrapolation/Interpolation Enable", "cigi.ig_control.extrapolation_enable", + FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08, + "Indicates whether any dead reckoning is enabled.", HFILL } }, - { &hf_cigi3_3_ig_control_db_number, - { "Database Number", "cigi.ig_control.db_number", - FT_INT8, BASE_DEC, NULL, 0x0, - "Used to initiate a database load on the IG", HFILL } + + /* CIGI4 IG Control */ + { &hf_cigi4_ig_control_entity_substitution, + { "Substitution", "cigi.ig_control.substitution", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL } }, - { &hf_cigi3_3_ig_control_ig_mode, - { "IG Mode", "cigi.ig_control.ig_mode", - FT_UINT8, BASE_DEC, VALS(cigi3_3_ig_control_ig_mode_vals), 0x03, - "Dictates the IG's operational mode", HFILL } + { &hf_cigi4_ig_control_entity_substitution_enable, + { "Substitution Enable", "cigi.ig_control.substitution_enable", + FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, + "Sets this parameter to Enable (1) the IG to substitute of entity types for all entities.", HFILL } }, - { &hf_cigi3_3_ig_control_timestamp_valid, - { "Timestamp Valid", "cigi.ig_control.timestamp_valid", - FT_BOOLEAN, 8, TFS(&tfs_valid_invalid), 0x04, - "Indicates whether the timestamp contains a valid value", HFILL } + { &hf_cigi4_ig_control_flags, + { "Flags", "cigi.ig_control.flags", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL } }, - { &hf_cigi3_3_ig_control_extrapolation_enable, - { "Extrapolation/Interpolation Enable", "cigi.ig_control.extrapolation_enable", + { &hf_cigi4_ig_control_smoothing_enable, + { "Smoothing Enable", "cigi.ig_control.smoothing_enable", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08, "Indicates whether any dead reckoning is enabled.", HFILL } }, - { &hf_cigi3_3_ig_control_minor_version, - { "Minor Version", "cigi.ig_control.minor_version", - FT_UINT8, BASE_DEC, NULL, 0xF0, - "Indicates the minor version of the CIGI interface", HFILL } + + /* CIGI4 Entity Position */ + { &hf_cigi4_entity_position, + { "Entity Position", "cigi.entity_position", + FT_NONE, BASE_NONE, NULL, 0x0, + "Entity Position Packet", HFILL } }, -#if 0 - { &hf_cigi3_3_ig_control_host_frame_number, - { "Host Frame Number", "cigi.ig_control.host_frame_number", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Uniquely identifies a data frame on the host", HFILL } + { &hf_cigi4_entity_position_entity_id, + { "Entity ID", "cigi.entity_position.entity_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Specifies the entity to which this packet is applied", HFILL } }, - { &hf_cigi3_3_ig_control_timestamp, - { "Timestamp (microseconds)", "cigi.ig_control.timestamp", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Indicates the number of 10 microsecond \"ticks\" since some initial reference time", HFILL } + { &hf_cigi4_entity_position_flags, + { "Flags", "cigi.entity_position.flags", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL } }, - { &hf_cigi3_3_ig_control_last_ig_frame_number, - { "IG Frame Number", "cigi.ig_control.last_ig_frame_number", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Contains the value of the IG Frame Number parameter in the last Start of Frame packet received from the IG", HFILL } + { &hf_cigi4_entity_position_attach_state, + { "Attach State", "cigi.entity_position.attach_state", + FT_BOOLEAN, 8, TFS(&attach_detach_tfs), 0x01, + "Identifies whether the entity should be attach as a child to a parent", HFILL } + }, + { &hf_cigi4_entity_position_ground_ocean_clamp, + { "Ground/Ocean Clamp", "cigi.entity_position.ground_ocean_clamp", + FT_UINT8, BASE_DEC, VALS(cigi4_entity_control_ground_ocean_clamp_vals), 0x06, + "Specifies whether the entity should be clamped to the ground or water surface", HFILL } + }, + { &hf_cigi4_entity_position_parent_id, + { "Parent ID", "cigi.entity_position.parent_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Specifies the parent for the entity", HFILL } + }, + { &hf_cigi4_entity_position_roll, + { "Roll (degrees)", "cigi.entity_position.roll", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the roll angle of the entity", HFILL } + }, + { &hf_cigi4_entity_position_pitch, + { "Pitch (degrees)", "cigi.entity_position.pitch", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the pitch angle of the entity", HFILL } + }, + { &hf_cigi4_entity_position_yaw, + { "Yaw (degrees)", "cigi.entity_position.yaw", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the instantaneous heading of the entity", HFILL } + }, + { &hf_cigi4_entity_position_lat_xoff, + { "Latitude (degrees)/X Offset (m)", "cigi.entity_position.lat_xoff", + FT_DOUBLE, BASE_NONE, NULL, 0x0, + "Specifies the entity's geodetic latitude or the distance from the parent's reference point along its parent's X axis", HFILL } + }, + { &hf_cigi4_entity_position_lon_yoff, + { "Longitude (degrees)/Y Offset (m)", "cigi.entity_position.lon_yoff", + FT_DOUBLE, BASE_NONE, NULL, 0x0, + "Specifies the entity's geodetic longitude or the distance from the parent's reference point along its parent's Y axis", HFILL } + }, + { &hf_cigi4_entity_position_alt_zoff, + { "Altitude (m)/Z Offset (m)", "cigi.entity_position.alt_zoff", + FT_DOUBLE, BASE_NONE, NULL, 0x0, + "Specifies the entity's altitude or the distance from the parent's reference point along its parent's Z axis", HFILL } }, -#endif - /* CIGI2 Entity Control */ + /* CIGI2 Entity Control */ { &hf_cigi2_entity_control, { "Entity Control", "cigi.entity_control", FT_NONE, BASE_NONE, NULL, 0x0, @@ -6671,7 +9122,7 @@ proto_register_cigi(void) }, { &hf_cigi3_entity_control_inherit_alpha, { "Inherit Alpha", "cigi.entity_control.inherit_alpha", - FT_BOOLEAN, 8, TFS(&cigi3_entity_control_inherit_alpha_tfs), 0x10, + FT_BOOLEAN, 8, TFS(&inherited_not_inherited_tfs), 0x10, "Specifies whether the entity's alpha is combined with the apparent alpha of its parent", HFILL } }, { &hf_cigi3_entity_control_ground_ocean_clamp, @@ -6741,107 +9192,134 @@ proto_register_cigi(void) }, /* CIGI3_3 Entity Control */ -#if 0 - { &hf_cigi3_3_entity_control, + { &hf_cigi3_3_entity_control_extrapolation_enable, + { "Linear Extrapolation/Interpolation Enable", "cigi.entity_control.extrapolation_enable", + FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10, + "Indicates whether the entity's motion may be smoothed by extrapolation or interpolation.", HFILL } + }, + + /* CIGI4 Entity Control */ + { &hf_cigi4_entity_control, { "Entity Control", "cigi.entity_control", FT_NONE, BASE_NONE, NULL, 0x0, "Entity Control Packet", HFILL } }, -#endif - { &hf_cigi3_3_entity_control_entity_id, - { "Entity ID", "cigi.entity_control.entity_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Specifies the entity to which this packet is applied", HFILL } - }, - { &hf_cigi3_3_entity_control_entity_state, + { &hf_cigi4_entity_control_entity_state, { "Entity State", "cigi.entity_control.entity_state", - FT_UINT8, BASE_DEC, VALS(cigi3_entity_control_entity_state_vals), 0x03, + FT_UINT8, BASE_DEC, VALS(cigi4_entity_control_entity_state_vals), 0x03, "Specifies whether the entity should be active or destroyed", HFILL } }, - { &hf_cigi3_3_entity_control_attach_state, - { "Attach State", "cigi.entity_control.attach_state", - FT_BOOLEAN, 8, TFS(&attach_detach_tfs), 0x04, - "Specifies whether the entity should be attached as a child to a parent", HFILL } - }, - { &hf_cigi3_3_entity_control_collision_detection_request, + { &hf_cigi4_entity_control_collision_reporting_enable, { "Collision Detection Request", "cigi.entity_control.coll_det_request", - FT_BOOLEAN, 8, TFS(&cigi3_entity_control_collision_detection_request_tfs), 0x08, - "Determines whether any collision detection segments and volumes associated with this entity are used as the source in collision testing", HFILL } + FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled), 0x04, + "Specifies whether any collision detection segments and volumes associated with this entity are used as the source in collision testing", HFILL } }, - { &hf_cigi3_3_entity_control_inherit_alpha, + { &hf_cigi4_entity_control_inherit_alpha, { "Inherit Alpha", "cigi.entity_control.inherit_alpha", - FT_BOOLEAN, 8, TFS(&cigi3_entity_control_inherit_alpha_tfs), 0x10, + FT_BOOLEAN, 8, TFS(&cigi4_entity_control_inherit_alpha_tfs), 0x8, "Specifies whether the entity's alpha is combined with the apparent alpha of its parent", HFILL } }, - { &hf_cigi3_3_entity_control_ground_ocean_clamp, - { "Ground/Ocean Clamp", "cigi.entity_control.ground_ocean_clamp", - FT_UINT8, BASE_DEC, VALS(cigi3_entity_control_ground_ocean_clamp_vals), 0x60, - "Specifies whether the entity should be clamped to the ground or water surface", HFILL } - }, - { &hf_cigi3_3_entity_control_animation_direction, - { "Animation Direction", "cigi.entity_control.animation_dir", - FT_BOOLEAN, 8, TFS(&cigi3_entity_control_animation_direction_tfs), 0x01, - "Specifies the direction in which an animation plays", HFILL } - }, - { &hf_cigi3_3_entity_control_animation_loop_mode, - { "Animation Loop Mode", "cigi.entity_control.animation_loop_mode", - FT_BOOLEAN, 8, TFS(&cigi3_entity_control_animation_loop_mode_tfs), 0x02, - "Specifies whether an animation should be a one-shot", HFILL } - }, - { &hf_cigi3_3_entity_control_animation_state, - { "Animation State", "cigi.entity_control.animation_state", - FT_UINT8, BASE_DEC, VALS(cigi3_entity_control_animation_state_vals), 0x0c, - "Specifies the state of an animation", HFILL } - }, - { &hf_cigi3_3_entity_control_extrapolation_enable, - { "Linear Extrapolation/Interpolation Enable", "cigi.entity_control.extrapolation_enable", + { &hf_cigi4_entity_control_smooting_enable, + { "Smoothing Enable", "cigi.entity_control.smoothing_enable", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10, - "Indicates whether the entity's motion may be smoothed by extrapolation or interpolation.", HFILL } + "Specifies whether the IG shall smooth the entity’s motion by extrapolation or interpolation.", HFILL } + }, + { &hf_cigi4_entity_control_extended_entity_type, + { "Linear Extrapolation/Interpolation Enable", "cigi.entity_control.extended_entity_type", + FT_BOOLEAN, 8, TFS(&tfs_entity_control_extended_entity_type), 0x20, + "Specifies whether the IG shall use a 16-bit Short Entity Type definition for the Entity ID or an extended 64-bit definition.", HFILL } }, - { &hf_cigi3_3_entity_control_alpha, + { &hf_cigi4_entity_control_alpha, { "Alpha", "cigi.entity_control.alpha", FT_UINT8, BASE_DEC, NULL, 0x0, "Specifies the explicit alpha to be applied to the entity's geometry", HFILL } }, - { &hf_cigi3_3_entity_control_entity_type, - { "Entity Type", "cigi.entity_control.entity_type", + { &hf_cigi4_entity_control_entity_id, + { "Entity ID", "cigi.entity_control.entity_id", FT_UINT16, BASE_DEC, NULL, 0x0, - "Specifies the type for the entity", HFILL } + "This parameter identifies a specific entity", HFILL } }, - { &hf_cigi3_3_entity_control_parent_id, - { "Parent ID", "cigi.entity_control.parent_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Specifies the parent for the entity", HFILL } + { &hf_cigi4_entity_control_entity_kind, + { "Parent Kind", "cigi.entity_control.parent_kind", + FT_UINT8, BASE_DEC, NULL, 0x0, + "This field shall identify the kind of entity described by the Entity Type record", HFILL } }, - { &hf_cigi3_3_entity_control_roll, - { "Roll (degrees)", "cigi.entity_control.roll", - FT_FLOAT, BASE_NONE, NULL, 0x0, - "Specifies the roll angle of the entity", HFILL } + { &hf_cigi4_entity_control_entity_domain, + { "Entity Domain", "cigi.entity_control.entity_domain", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Specifies the domain in which the entity operates", HFILL } }, - { &hf_cigi3_3_entity_control_pitch, - { "Pitch (degrees)", "cigi.entity_control.pitch", - FT_FLOAT, BASE_NONE, NULL, 0x0, - "Specifies the pitch angle of the entity", HFILL } + { &hf_cigi4_entity_control_entity_country, + { "Entity Country", "cigi.entity_control.entity_country", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Specifies the roll angle of the entity", HFILL } }, - { &hf_cigi3_3_entity_control_yaw, - { "Yaw (degrees)", "cigi.entity_control.yaw", - FT_FLOAT, BASE_NONE, NULL, 0x0, + { &hf_cigi4_entity_control_entity_category, + { "Entity Category", "cigi.entity_control.entity_category", + FT_UINT8, BASE_DEC, NULL, 0x0, "Specifies the instantaneous heading of the entity", HFILL } }, - { &hf_cigi3_3_entity_control_lat_xoff, - { "Latitude (degrees)/X Offset (m)", "cigi.entity_control.lat_xoff", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "Specifies the entity's geodetic latitude or the distance from the parent's reference point along its parent's X axis", HFILL } + { &hf_cigi4_entity_control_entity_subcategory, + { "Entity Subcategory", "cigi.entity_control.entity_subcategory", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Specifies a particular subcategory to which an entity belongs based on the Category field", HFILL } }, - { &hf_cigi3_3_entity_control_lon_yoff, - { "Longitude (degrees)/Y Offset (m)", "cigi.entity_control.lon_yoff", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "Specifies the entity's geodetic longitude or the distance from the parent's reference point along its parent's Y axis", HFILL } + { &hf_cigi4_entity_control_entity_specific, + { "Entity Specific", "cigi.entity_control.entity_specific", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Specifies a specific information about an entity based on the Subcategory field", HFILL } }, - { &hf_cigi3_3_entity_control_alt_zoff, - { "Altitude (m)/Z Offset (m)", "cigi.entity_control.alt_zoff", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "Specifies the entity's altitude or the distance from the parent's reference point along its parent's Z axis", HFILL } + { &hf_cigi4_entity_control_entity_extra, + { "Entity Extra", "cigi.entity_control.entity_extra", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Specifies extra information required to describe a particular entity", HFILL } + }, + + /* CIGI4 Animation Control */ + { &hf_cigi4_animation_control, + { "Animation Control", "cigi.animation_control", + FT_NONE, BASE_NONE, NULL, 0x0, + "Animation Control Packet", HFILL } + }, + { &hf_cigi4_animation_control_state, + { "Animation State", "cigi.animation_control_state", + FT_BOOLEAN, 8, TFS(&cigi4_animation_control_state_tfs), 0x01, + "Specifies the state of an animation.", HFILL } + }, + { &hf_cigi4_animation_control_frame_position_reset, + { "Animation State Position Reset", "cigi.animation_control_state_position_reset", + FT_BOOLEAN, 8, TFS(&cigi4_animation_control_state_positon_reset_tfs), 0x02, + "whether the animation is restarted from the beginning or just continues from its current frame", HFILL } + }, + { &hf_cigi4_animation_control_loop_mode, + { "Animation Loop Mode", "cigi.animation_control_loop_mode", + FT_BOOLEAN, 8, TFS(&cigi4_animation_control_state_loop_mode), 0x04, + "Specifies whether an animation should be a one-shot or should loop continuously", HFILL } + }, + { &hf_cigi4_animation_control_inherit_alpha, + { "Inherit Alpha", "cigi.animation_control_inherit_alpha", + FT_BOOLEAN, 8, TFS(&cigi4_animation_control_state_inherit_alpha), 0x04, + "Specifies whether the animation’s alpha is combined with the apparent alpha of the entity", HFILL } + }, + { &hf_cigi4_animation_control_alpha, + { "Alpha", "cigi.animation_control_alpha", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Specifies the explicit alpha to be applied to the entity’s geometry", HFILL } + }, + { &hf_cigi4_animation_control_entity_id, + { "Entity ID", "cigi.animation_control_entity_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + "This parameter identifies a specific entity", HFILL } + }, + { &hf_cigi4_animation_control_animation_id, + { "Animation ID", "cigi.animation_control_animation_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + "This parameter identifies the animation to which the data in this packet should be applied", HFILL } + }, + { &hf_cigi4_animation_control_animation_speed, + { "Animation Speed", "cigi.animation_control_animation_speed", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "This parameter identifies the animation to which the data in this packet should be applied", HFILL } }, /* CIGI3 Conformal Clamped Entity Control */ @@ -6871,6 +9349,33 @@ proto_register_cigi(void) "Specifies the entity's geodetic longitude", HFILL } }, + /* CIGI4 Conformal Clamped Entity Position */ + { &hf_cigi4_conformal_clamped_entity_position, + { "Conformal Clamped Entity Control", "cigi.conformal_clamped_entity_position", + FT_NONE, BASE_NONE, NULL, 0x0, + "Conformal Clamped Entity Control Packet", HFILL } + }, + { &hf_cigi4_conformal_clamped_entity_position_entity_id, + { "Entity ID", "cigi.conformal_clamped_entity_position.entity_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Specifies the entity to which this packet is applied", HFILL } + }, + { &hf_cigi4_conformal_clamped_entity_position_yaw, + { "Yaw (degrees)", "cigi.conformal_clamped_entity_position.yaw", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the instantaneous heading of the entity", HFILL } + }, + { &hf_cigi4_conformal_clamped_entity_position_lat, + { "Latitude (degrees)", "cigi.conformal_clamped_entity_position.lat", + FT_DOUBLE, BASE_NONE, NULL, 0x0, + "Specifies the entity's geodetic latitude", HFILL } + }, + { &hf_cigi4_conformal_clamped_entity_position_lon, + { "Longitude (degrees)", "cigi.conformal_clamped_entity_position.lon", + FT_DOUBLE, BASE_NONE, NULL, 0x0, + "Specifies the entity's geodetic longitude", HFILL } + }, + /* CIGI2 Component Control */ { &hf_cigi2_component_control, { "Component Control", "cigi.component_control", @@ -6966,63 +9471,13 @@ proto_register_cigi(void) }, /* CIGI3_3 Component Control */ -#if 0 - { &hf_cigi3_3_component_control, - { "Component Control", "cigi.component_control", - FT_NONE, BASE_NONE, NULL, 0x0, - "Component Control Packet", HFILL } - }, -#endif - { &hf_cigi3_3_component_control_component_id, - { "Component ID", "cigi.component_control.component_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Identifies the component to which the data in this packet should be applied", HFILL } - }, - { &hf_cigi3_3_component_control_instance_id, - { "Instance ID", "cigi.component_control.instance_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Identifies the object to which the component belongs", HFILL } - }, { &hf_cigi3_3_component_control_component_class, { "Component Class", "cigi.component_control.component_class", FT_UINT8, BASE_DEC, VALS(cigi3_3_component_control_component_class_vals), 0x3f, "Identifies the type of object to which the Instance ID parameter refers", HFILL } }, - { &hf_cigi3_3_component_control_component_state, - { "Component State", "cigi.component_control.component_state", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Specifies a discrete state for the component", HFILL } - }, - { &hf_cigi3_3_component_control_data_1, - { "Component Data 1", "cigi.component_control.data_1", - FT_BYTES, BASE_NONE, NULL, 0x0, - "User-defined component data", HFILL } - }, - { &hf_cigi3_3_component_control_data_2, - { "Component Data 2", "cigi.component_control.data_2", - FT_BYTES, BASE_NONE, NULL, 0x0, - "User-defined component data", HFILL } - }, - { &hf_cigi3_3_component_control_data_3, - { "Component Data 3", "cigi.component_control.data_3", - FT_BYTES, BASE_NONE, NULL, 0x0, - "User-defined component data", HFILL } - }, - { &hf_cigi3_3_component_control_data_4, - { "Component Data 4", "cigi.component_control.data_4", - FT_BYTES, BASE_NONE, NULL, 0x0, - "User-defined component data", HFILL } - }, - { &hf_cigi3_3_component_control_data_5, - { "Component Data 5", "cigi.component_control.data_5", - FT_BYTES, BASE_NONE, NULL, 0x0, - "User-defined component data", HFILL } - }, - { &hf_cigi3_3_component_control_data_6, - { "Component Data 6", "cigi.component_control.data_6", - FT_BYTES, BASE_NONE, NULL, 0x0, - "User-defined component data", HFILL } - }, + + /* CIGI4 Component Control */ /* CIGI3 Short Component Control */ { &hf_cigi3_short_component_control, @@ -7062,43 +9517,13 @@ proto_register_cigi(void) }, /* CIGI3_3 Short Component Control */ -#if 0 - { &hf_cigi3_3_short_component_control, - { "Short Component Control", "cigi.short_component_control", - FT_NONE, BASE_NONE, NULL, 0x0, - "Short Component Control Packet", HFILL } - }, -#endif - { &hf_cigi3_3_short_component_control_component_id, - { "Component ID", "cigi.short_component_control.component_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Identifies the component to which the data in this packet should be applied", HFILL } - }, - { &hf_cigi3_3_short_component_control_instance_id, - { "Instance ID", "cigi.short_component_control.instance_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Identifies the object to which the component belongs", HFILL } - }, { &hf_cigi3_3_short_component_control_component_class, { "Component Class", "cigi.short_component_control.component_class", FT_UINT8, BASE_DEC, VALS(cigi3_3_short_component_control_component_class_vals), 0x3f, "Identifies the type of object to which the Instance ID parameter refers", HFILL } }, - { &hf_cigi3_3_short_component_control_component_state, - { "Component State", "cigi.short_component_control.component_state", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Specifies a discrete state for the component", HFILL } - }, - { &hf_cigi3_3_short_component_control_data_1, - { "Component Data 1", "cigi.short_component_control.data_1", - FT_BYTES, BASE_NONE, NULL, 0x0, - "User-defined component data", HFILL } - }, - { &hf_cigi3_3_short_component_control_data_2, - { "Component Data 2", "cigi.short_component_control.data_2", - FT_BYTES, BASE_NONE, NULL, 0x0, - "User-defined component data", HFILL } - }, + + /* CIGI4 Short Component Control */ /* CIGI2 Articulated Parts Control */ { &hf_cigi2_articulated_parts_control, @@ -7264,6 +9689,9 @@ proto_register_cigi(void) "Specifies the angle of rotation of the articulated part about its Z axis", HFILL } }, + + /* CIGI4 Articulated Part Control */ + /* CIGI3 Short Articulated Part Control */ { &hf_cigi3_short_articulated_part_control, { "Short Articulated Part Control", "cigi.short_art_part_control", @@ -7316,6 +9744,13 @@ proto_register_cigi(void) "Specifies either an offset or an angular position for the part identified by Articulated Part ID 2", HFILL } }, + /* CIGI4 Short Articulated Part Control */ + { &hf_cigi4_short_articulated_part_control_part_enable_flags, + { "Request Flags", "cigi.short_art_part_control.flags", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + /* CIGI2 Rate Control */ { &hf_cigi2_rate_control, { "Rate Control", "cigi.rate_control", @@ -7416,57 +9851,69 @@ proto_register_cigi(void) }, /* CIGI3_2 Rate Control */ - { &hf_cigi3_2_rate_control, + { &hf_cigi3_2_rate_control_coordinate_system, + { "Coordinate System", "cigi.rate_control.coordinate_system", + FT_BOOLEAN, 8, TFS(&local_worldparent_tfs), 0x02, + "Specifies the reference coordinate system to which the linear and angular rates are applied", HFILL } + }, + + /* CIGI4 Velocity Control */ + { & hf_cigi4_velocity_control, { "Rate Control", "cigi.rate_control", FT_NONE, BASE_NONE, NULL, 0x0, - "Rate Control Packet", HFILL } + "Velocity Control Packet", HFILL } }, - { &hf_cigi3_2_rate_control_entity_id, + { & hf_cigi4_velocity_control_entity_id, { "Entity ID", "cigi.rate_control.entity_id", FT_UINT16, BASE_DEC, NULL, 0x0, "Specifies the entity to which the rate should be applied", HFILL } }, - { &hf_cigi3_2_rate_control_part_id, + { & hf_cigi4_velocity_control_part_id, { "Articulated Part ID", "cigi.rate_control.part_id", FT_UINT8, BASE_DEC, NULL, 0x0, "Specifies the articulated part to which the rate should be applied", HFILL } }, - { &hf_cigi3_2_rate_control_apply_to_part, + { &hf_cigi4_velocity_control_flags, + { "Flags", "cigi.rate_control.flags", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { & hf_cigi4_velocity_control_apply_to_part, { "Apply to Articulated Part", "cigi.rate_control.apply_to_part", FT_BOOLEAN, 8, NULL, 0x01, "Determines whether the rate is applied to the articulated part specified by the Articulated Part ID parameter", HFILL } }, - { &hf_cigi3_2_rate_control_coordinate_system, + { & hf_cigi4_velocity_control_coordinate_system, { "Coordinate System", "cigi.rate_control.coordinate_system", - FT_BOOLEAN, 8, TFS(&cigi3_2_rate_control_coord_sys_select_vals), 0x02, + FT_BOOLEAN, 8, TFS(&local_worldparent_tfs), 0x02, "Specifies the reference coordinate system to which the linear and angular rates are applied", HFILL } }, - { &hf_cigi3_2_rate_control_x_rate, + { & hf_cigi4_velocity_control_x_rate, { "X Linear Rate (m/s)", "cigi.rate_control.x_rate", FT_FLOAT, BASE_NONE, NULL, 0x0, "Specifies the X component of a linear velocity vector", HFILL } }, - { &hf_cigi3_2_rate_control_y_rate, + { & hf_cigi4_velocity_control_y_rate, { "Y Linear Rate (m/s)", "cigi.rate_control.y_rate", FT_FLOAT, BASE_NONE, NULL, 0x0, "Specifies the Y component of a linear velocity vector", HFILL } }, - { &hf_cigi3_2_rate_control_z_rate, + { & hf_cigi4_velocity_control_z_rate, { "Z Linear Rate (m/s)", "cigi.rate_control.z_rate", FT_FLOAT, BASE_NONE, NULL, 0x0, "Specifies the Z component of a linear velocity vector", HFILL } }, - { &hf_cigi3_2_rate_control_roll_rate, + { & hf_cigi4_velocity_control_roll_rate, { "Roll Angular Rate (degrees/s)", "cigi.rate_control.roll_rate", FT_FLOAT, BASE_NONE, NULL, 0x0, "Specifies the angle of rotation of the articulated part submodel about its X axis after yaw and pitch have been applied", HFILL } }, - { &hf_cigi3_2_rate_control_pitch_rate, + { & hf_cigi4_velocity_control_pitch_rate, { "Pitch Angular Rate (degrees/s)", "cigi.rate_control.pitch_rate", FT_FLOAT, BASE_NONE, NULL, 0x0, "Specifies the angle of rotation of the articulated part submodel about its Y axis after yaw has been applied", HFILL } }, - { &hf_cigi3_2_rate_control_yaw_rate, + { & hf_cigi4_velocity_control_yaw_rate, { "Yaw Angular Rate (degrees/s)", "cigi.rate_control.yaw_rate", FT_FLOAT, BASE_NONE, NULL, 0x0, "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 } @@ -7524,6 +9971,24 @@ proto_register_cigi(void) "Specifies the intensity of the star field within the sky model", HFILL } }, + /* CIGI4 Celestial Sphere Control */ + { &hf_cigi4_celestial_sphere_control_enable_flags, + { "Flags", "cigi.rate_control.flags", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_cigi4_celestial_sphere_control_seconds, + { "Second (sec)", "cigi.celestial_sphere_control.seconds", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Specifies the current date within the simulation", HFILL } + }, + /* The CIGI4 spec shows the date in the opposite order from CIGI3. */ + { &hf_cigi4_celestial_sphere_control_date, + { "Date (YYYYMMDD)", "cigi.celestial_sphere_control.date", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Specifies the current date within the simulation", HFILL } + }, + /* CIGI3 Atmosphere Control */ { &hf_cigi3_atmosphere_control, { "Atmosphere Control", "cigi.atmosphere_control", @@ -7571,6 +10036,8 @@ proto_register_cigi(void) "Specifies the global atmospheric pressure", HFILL } }, + /* CIGI4 Atmosphere Control */ + /* CIGI2 Environmental Control */ { &hf_cigi2_environment_control, { "Environment Control", "cigi.env_control", @@ -7710,6 +10177,9 @@ proto_register_cigi(void) "Specifies the width of the transition perimeter around the environmental region", HFILL } }, + + /* CIGI4 Environmental Region Control */ + /* CIGI2 Weather Control */ { &hf_cigi2_weather_control, { "Weather Control", "cigi.weather_control", @@ -7909,6 +10379,29 @@ proto_register_cigi(void) "Specifies the concentration of water, smoke, dust, or other particles suspended in the air", HFILL } }, + + /* CIGI4 Weather Control */ + { &hf_cigi4_weather_control_flags, + { "Request Flags", "cigi.weather_control.flags", + FT_UINT16, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_cigi4_weather_control_top_scud_enable, + { "Top Scud Enable", "cigi.weather_control.top_scud_enable", + FT_UINT8, BASE_DEC, NULL, 0x20, + "Specifies whether the weather layer produces scud effects", HFILL } + }, + { &hf_cigi4_weather_control_top_scud_freq, + { "Top Scud Frequency (%)", "cigi.weather_control.top_scud_frequency", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the frequency of scud within the transition band above a cloud or fog layer", HFILL } + }, + { &hf_cigi4_weather_control_top_transition_band, + { "Top Transition Band Thickness (m)", "cigi.weather_control.top_transition_band", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the height of a vertical transition band above the weather layer", HFILL } + }, + /* CIGI3 Maritime Surface Conditions Control */ { &hf_cigi3_maritime_surface_conditions_control, { "Maritime Surface Conditions Control", "cigi.maritime_surface_conditions_control", @@ -7951,6 +10444,9 @@ proto_register_cigi(void) "Specifies the clarity of the water at its surface", HFILL } }, + + /* CIGI4 Maritime Surface Conditions Control */ + /* CIGI3 Wave Control */ { &hf_cigi3_wave_control, { "Wave Control", "cigi.wave_control", @@ -8013,7 +10509,9 @@ proto_register_cigi(void) "Specifies the phase angle at which the crest occurs", HFILL } }, - /* Terrestrial Surface Conditions Control */ + /* CIGI4 Wave Control */ + + /* CIGI3 Terrestrial Surface Conditions Control */ { &hf_cigi3_terrestrial_surface_conditions_control, { "Terrestrial Surface Conditions Control", "cigi.terrestrial_surface_conditions_control", FT_NONE, BASE_NONE, NULL, 0x0, @@ -8050,6 +10548,8 @@ proto_register_cigi(void) "Determines the degree of coverage of the specified surface contaminant", HFILL } }, + /* CIGI4 Terrestrial Surface Conditions Control */ + /* CIGI2 View Control */ { &hf_cigi2_view_control, { "View Control", "cigi.view_control", @@ -8214,6 +10714,14 @@ proto_register_cigi(void) "Specifies the angle of rotation of the view or view group about its Z axis", HFILL } }, + + /* CIGI4 View Control */ + { &hf_cigi4_view_control_enable_flags, + { "Request Flags", "cigi.view_control.flags", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + /* CIGI2 Sensor Control */ { &hf_cigi2_sensor_control, { "Sensor Control", "cigi.sensor_control", @@ -8232,7 +10740,7 @@ proto_register_cigi(void) }, { &hf_cigi2_sensor_control_polarity, { "Polarity", "cigi.sensor_control.polarity", - FT_BOOLEAN, 8, TFS(&cigi2_sensor_control_polarity_tfs), 0x02, + FT_BOOLEAN, 8, TFS(&black_white_tfs), 0x02, "Indicates whether this sensor is showing white hot or black hot", HFILL } }, { &hf_cigi2_sensor_control_line_dropout, @@ -8257,7 +10765,7 @@ proto_register_cigi(void) }, { &hf_cigi2_sensor_control_track_polarity, { "Track White/Black", "cigi.sensor_control.track_polarity", - FT_BOOLEAN, 8, TFS(&cigi2_sensor_control_polarity_tfs), 0x04, + FT_BOOLEAN, 8, TFS(&black_white_tfs), 0x04, "Identifies whether the weapons sensor will track wither white or black", HFILL } }, { &hf_cigi2_sensor_control_gain, @@ -8319,7 +10827,7 @@ proto_register_cigi(void) }, { &hf_cigi3_sensor_control_track_white_black, { "Track White/Black", "cigi.sensor_control.track_white_black", - FT_BOOLEAN, 8, TFS(&cigi3_sensor_control_track_white_black_tfs), 0x10, + FT_BOOLEAN, 8, TFS(&black_white_tfs), 0x10, "Specifies whether the sensor tracks white or black", HFILL } }, { &hf_cigi3_sensor_control_track_mode, @@ -8353,7 +10861,10 @@ proto_register_cigi(void) "Specifies the amount of detector noise for the sensor", HFILL } }, - /* Motion Tracker Control */ + + /* CIGI4 Sensor Control */ + + /* CIGI3 Motion Tracker Control */ { &hf_cigi3_motion_tracker_control, { "Motion Tracker Control", "cigi.motion_tracker_control", FT_NONE, BASE_NONE, NULL, 0x0, @@ -8415,6 +10926,8 @@ proto_register_cigi(void) "Specifies whether the tracking device is attached to a single view or a view group", HFILL } }, + /* CIGI4 Motion Tracker Control */ + /* CIGI3 Earth Reference Model Definition */ { &hf_cigi3_earth_reference_model_definition, { "Earth Reference Model Definition", "cigi.earth_ref_model_def", @@ -8437,6 +10950,8 @@ proto_register_cigi(void) "Specifies the flattening of the ellipsoid", HFILL } }, + /* CIGI4 Earth Reference Model Definition */ + /* CIGI2 Trajectory Definition */ { &hf_cigi2_trajectory_definition, { "Trajectory Definition", "cigi.trajectory_def", @@ -8501,6 +11016,63 @@ proto_register_cigi(void) "Specifies the maximum velocity the entity can sustain", HFILL } }, + /* CIGI4 Acceleration Control */ + { &hf_cigi4_acceleration_control, + { "Trajectory Definition", "cigi.acceleration_control", + FT_NONE, BASE_NONE, NULL, 0x0, + "Trajectory Definition Packet", HFILL } + }, + { &hf_cigi4_acceleration_control_entity_id, + { "Entity ID", "cigi.acceleration_control.entity_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Identifies the entity for which the trajectory is defined", HFILL } + }, + { &hf_cigi4_acceleration_control_articulated_part_id, + { "Articulated Part ID", "cigi.acceleration_control.part_id", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Specifies the articulated part to which the acceleration may be applied", HFILL } + }, + { &hf_cigi4_acceleration_control_apply_to_part, + { "Apply to Articulated Part", "cigi.acceleration_control.apply_to_part", + FT_BOOLEAN, 8, NULL, 0x01, + "Indicates whether the acceleration may be applied to an articulated part or an entity", HFILL } + }, + { &hf_cigi4_acceleration_control_coord_system, + { "Sequence Direction", "cigi.acceleration_control.coord_system", + FT_BOOLEAN, 8, TFS(&local_worldparent_tfs), 0x02, + "Indicates the reference coordinate system to which the linear and angular accelerations may be applied", HFILL } + }, + { &hf_cigi4_acceleration_control_acceleration_x, + { "Acceleration X (m/s^2)", "cigi.acceleration_control.acceleration_x", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the X component of the acceleration vector", HFILL } + }, + { &hf_cigi4_acceleration_control_acceleration_y, + { "Acceleration Y (m/s^2)", "cigi.acceleration_control.acceleration_y", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the Y component of the acceleration vector", HFILL } + }, + { &hf_cigi4_acceleration_control_acceleration_z, + { "Acceleration Z (m/s^2)", "cigi.acceleration_control.acceleration_z", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the Z component of the acceleration vector", HFILL } + }, + { &hf_cigi4_acceleration_control_acceleration_roll, + { "Roll Angular Acceleration (deg/s^2)", "cigi.acceleration_control.acceleration_roll", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the angle of rotation of the articulated part submodel about its X axis after yaw and pitch have been applied.", HFILL } + }, + { &hf_cigi4_acceleration_control_acceleration_pitch, + { "Terminal Velocity (deg/s)", "cigi.acceleration_control.acceleration_pitch", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the angle of rotation of the articulated part submodel about its Y axis after yaw and pitch have been applied", HFILL } + }, + { &hf_cigi4_acceleration_control_acceleration_yaw, + { "Terminal Velocity (deg/s)", "cigi.acceleration_control.acceleration_yaw", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the angle of rotation of the articulated part submodel about its Z axis after yaw and pitch have been applied", HFILL } + }, + /* CIGI2 Special Effect Definition */ { &hf_cigi2_special_effect_definition, { "Special Effect Definition", "cigi.special_effect_def", @@ -8782,6 +11354,8 @@ proto_register_cigi(void) "Specifies the bottom half-angle of the view frustum", HFILL } }, + /* CIGI4 View Definition */ + /* CIGI2 Collision Detection Segment Definition */ { &hf_cigi2_collision_detection_segment_definition, { "Collision Detection Segment Definition", "cigi.coll_det_seg_def", @@ -8896,6 +11470,8 @@ proto_register_cigi(void) "Specifies the environmental and cultural features to be included in or excluded from consideration for collision testing", HFILL } }, + /* CIGI4 Collision Detection Segment Definition */ + /* CIGI2 Collision Detection Volume Definition */ { &hf_cigi2_collision_detection_volume_definition, { "Collision Detection Volume Definition", "cigi.coll_det_vol_def", @@ -9020,6 +11596,8 @@ proto_register_cigi(void) "Specifies the yaw of the cuboid with respect to the entity's coordinate system", HFILL } }, + /* CIGI4 Collision Detection Volume Definition */ + /* CIGI2 Height Above Terrain Request */ { &hf_cigi2_height_above_terrain_request, { "Height Above Terrain Request", "cigi.hat_request", @@ -9201,50 +11779,17 @@ proto_register_cigi(void) }, /* CIGI3_2 HAT/HOT Request */ - { &hf_cigi3_2_hat_hot_request, - { "HAT/HOT Request", "cigi.hat_hot_request", - FT_NONE, BASE_NONE, NULL, 0x0, - "HAT/HOT Request Packet", HFILL } - }, - { &hf_cigi3_2_hat_hot_request_hat_hot_id, - { "HAT/HOT ID", "cigi.hat_hot_request.hat_hot_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Identifies the HAT/HOT request", HFILL } - }, - { &hf_cigi3_2_hat_hot_request_type, - { "Request Type", "cigi.hat_hot_request.type", - FT_UINT8, BASE_DEC, VALS(cigi3_2_hat_hot_request_type_vals), 0x03, - "Determines the type of response packet the IG should return for this packet", HFILL } - }, - { &hf_cigi3_2_hat_hot_request_coordinate_system, - { "Coordinate System", "cigi.hat_hot_request.coordinate_system", - FT_BOOLEAN, 8, TFS(&entity_geodetic_tfs), 0x04, - "Specifies the coordinate system within which the test point is defined", HFILL } - }, { &hf_cigi3_2_hat_hot_request_update_period, { "Update Period", "cigi.hat_hot_request.update_period", FT_UINT8, BASE_DEC, NULL, 0x0, "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 } }, - { &hf_cigi3_2_hat_hot_request_entity_id, - { "Entity ID", "cigi.hat_hot_request.entity_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Specifies the entity relative to which the test point is defined", HFILL } - }, - { &hf_cigi3_2_hat_hot_request_lat_xoff, - { "Latitude (degrees)/X Offset (m)", "cigi.hat_hot_request.lat_xoff", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "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 } - }, - { &hf_cigi3_2_hat_hot_request_lon_yoff, - { "Longitude (degrees)/Y Offset (m)", "cigi.hat_hot_request.lon_yoff", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "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 } - }, - { &hf_cigi3_2_hat_hot_request_alt_zoff, - { "Altitude (m)/Z Offset (m)", "cigi.hat_hot_request.alt_zoff", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "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 } + + /* CIGI4 HAT/HOT Request */ + { &hf_cigi4_hat_hot_request_flags, + { "Request Flags", "cigi.hat_hot_request.flags", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL } }, /* CIGI3 Line of Sight Segment Request */ @@ -9283,8 +11828,8 @@ proto_register_cigi(void) FT_UINT8, BASE_DEC, NULL, 0x0, "Specifies the minimum alpha value a surface may have for an LOS response to be generated", HFILL } }, - { &hf_cigi3_line_of_sight_segment_request_entity_id, - { "Entity ID", "cigi.los_segment_request.entity_id", + { &hf_cigi3_line_of_sight_segment_request_source_entity_id, + { "Source Entity ID", "cigi.los_segment_request.source_entity_id", FT_UINT16, BASE_DEC, NULL, 0x0, "Specifies the entity relative to which the test segment endpoints are defined", HFILL } }, @@ -9325,86 +11870,11 @@ proto_register_cigi(void) }, /* CIGI3_2 Line of Sight Segment Request */ - { &hf_cigi3_2_line_of_sight_segment_request, - { "Line of Sight Segment Request", "cigi.los_segment_request", - FT_NONE, BASE_NONE, NULL, 0x0, - "Line of Sight Segment Request Packet", HFILL } - }, - { &hf_cigi3_2_line_of_sight_segment_request_los_id, - { "LOS ID", "cigi.los_segment_request.los_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Identifies the LOS request", HFILL } - }, - { &hf_cigi3_2_line_of_sight_segment_request_type, - { "Request Type", "cigi.los_segment_request.type", - FT_BOOLEAN, 8, TFS(&extended_normal_tfs), 0x01, - "Determines what type of response the IG should return for this request", HFILL } - }, - { &hf_cigi3_2_line_of_sight_segment_request_source_coord, - { "Source Point Coordinate System", "cigi.los_segment_request.source_coord", - FT_BOOLEAN, 8, TFS(&entity_geodetic_tfs), 0x02, - "Indicates the coordinate system relative to which the test segment source endpoint is specified", HFILL } - }, - { &hf_cigi3_2_line_of_sight_segment_request_destination_coord, - { "Destination Point Coordinate System", "cigi.los_segment_request.destination_coord", - FT_BOOLEAN, 8, TFS(&entity_geodetic_tfs), 0x04, - "Indicates the coordinate system relative to which the test segment destination endpoint is specified", HFILL } - }, - { &hf_cigi3_2_line_of_sight_segment_request_response_coord, - { "Response Coordinate System", "cigi.los_segment_request.response_coord", - FT_BOOLEAN, 8, TFS(&entity_geodetic_tfs), 0x08, - "Specifies the coordinate system to be used in the response", HFILL } - }, { &hf_cigi3_2_line_of_sight_segment_request_destination_entity_id_valid, { "Destination Entity ID Valid", "cigi.los_segment_request.destination_entity_id_valid", FT_BOOLEAN, 8, TFS(&tfs_valid_invalid), 0x10, "Destination Entity ID is valid.", HFILL } }, - { &hf_cigi3_2_line_of_sight_segment_request_alpha_threshold, - { "Alpha Threshold", "cigi.los_segment_request.alpha_threshold", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Specifies the minimum alpha value a surface may have for an LOS response to be generated", HFILL } - }, - { &hf_cigi3_2_line_of_sight_segment_request_entity_id, - { "Entity ID", "cigi.los_segment_request.entity_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Specifies the entity relative to which the test segment endpoints are defined", HFILL } - }, - { &hf_cigi3_2_line_of_sight_segment_request_source_lat_xoff, - { "Source Latitude (degrees)/Source X Offset (m)", "cigi.los_segment_request.source_lat_xoff", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "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 } - }, - { &hf_cigi3_2_line_of_sight_segment_request_source_lon_yoff, - { "Source Longitude (degrees)/Source Y Offset (m)", "cigi.los_segment_request.source_lon_yoff", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "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 } - }, - { &hf_cigi3_2_line_of_sight_segment_request_source_alt_zoff, - { "Source Altitude (m)/Source Z Offset (m)", "cigi.los_segment_request.source_alt_zoff", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "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 } - }, - { &hf_cigi3_2_line_of_sight_segment_request_destination_lat_xoff, - { "Destination Latitude (degrees)/ Destination X Offset (m)", "cigi.los_segment_request.destination_lat_xoff", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "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 } - }, - { &hf_cigi3_2_line_of_sight_segment_request_destination_lon_yoff, - { "Destination Longitude (degrees)/Destination Y Offset (m)", "cigi.los_segment_request.destination_lon_yoff", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "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 } - }, - { &hf_cigi3_2_line_of_sight_segment_request_destination_alt_zoff, - { "Destination Altitude (m)/ Destination Z Offset (m)", "cigi.los_segment_request.destination_alt_zoff", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "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 } - }, - { &hf_cigi3_2_line_of_sight_segment_request_material_mask, - { "Material Mask", "cigi.los_segment_request.material_mask", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Specifies the environmental and cultural features to be included in or excluded from consideration for the LOS segment testing", HFILL } - }, { &hf_cigi3_2_line_of_sight_segment_request_update_period, { "Update Period", "cigi.los_segment_request.update_period", FT_UINT8, BASE_DEC, NULL, 0x0, @@ -9416,6 +11886,8 @@ proto_register_cigi(void) "Indicates the entity with respect to which the Destination X Offset, Y Offset, and Destination Z Offset parameters are specified", HFILL } }, + /* CIGI4 Line of Sight Segment Request */ + /* CIGI3 Line of Sight Vector Request */ { &hf_cigi3_line_of_sight_vector_request, { "Line of Sight Vector Request", "cigi.los_vector_request", @@ -9494,87 +11966,15 @@ proto_register_cigi(void) }, /* CIGI3_2 Line of Sight Vector Request */ - { &hf_cigi3_2_line_of_sight_vector_request, - { "Line of Sight Vector Request", "cigi.los_vector_request", - FT_NONE, BASE_NONE, NULL, 0x0, - "Line of Sight Vector Request Packet", HFILL } - }, - { &hf_cigi3_2_line_of_sight_vector_request_los_id, - { "LOS ID", "cigi.los_vector_request.los_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Identifies the LOS request", HFILL } - }, - { &hf_cigi3_2_line_of_sight_vector_request_type, - { "Request Type", "cigi.los_vector_request.type", - FT_BOOLEAN, 8, TFS(&extended_normal_tfs), 0x01, - "Determines what type of response the IG should return for this request", HFILL } - }, - { &hf_cigi3_2_line_of_sight_vector_request_source_coord, - { "Source Point Coordinate System", "cigi.los_vector_request.source_coord", - FT_BOOLEAN, 8, TFS(&entity_geodetic_tfs), 0x02, - "Indicates the coordinate system relative to which the test vector source point is specified", HFILL } - }, - { &hf_cigi3_2_line_of_sight_vector_request_response_coord, - { "Response Coordinate System", "cigi.los_vector_request.response_coord", - FT_BOOLEAN, 8, TFS(&entity_geodetic_tfs), 0x04, - "Specifies the coordinate system to be used in the response", HFILL } - }, - { &hf_cigi3_2_line_of_sight_vector_request_alpha, - { "Alpha Threshold", "cigi.los_vector_request.alpha", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Specifies the minimum alpha value a surface may have for an LOS response to be generated", HFILL } - }, - { &hf_cigi3_2_line_of_sight_vector_request_entity_id, - { "Entity ID", "cigi.los_vector_request.entity_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Specifies the entity relative to which the test segment endpoints are defined", HFILL } - }, - { &hf_cigi3_2_line_of_sight_vector_request_azimuth, - { "Azimuth (degrees)", "cigi.los_vector_request.azimuth", - FT_FLOAT, BASE_NONE, NULL, 0x0, - "Specifies the horizontal angle of the LOS test vector", HFILL } - }, - { &hf_cigi3_2_line_of_sight_vector_request_elevation, - { "Elevation (degrees)", "cigi.los_vector_request.elevation", - FT_FLOAT, BASE_NONE, NULL, 0x0, - "Specifies the vertical angle of the LOS test vector", HFILL } - }, - { &hf_cigi3_2_line_of_sight_vector_request_min_range, - { "Minimum Range (m)", "cigi.los_vector_request.min_range", - FT_FLOAT, BASE_NONE, NULL, 0x0, - "Specifies the minimum range along the LOS test vector at which intersection testing should occur", HFILL } - }, - { &hf_cigi3_2_line_of_sight_vector_request_max_range, - { "Maximum Range (m)", "cigi.los_vector_request.max_range", - FT_FLOAT, BASE_NONE, NULL, 0x0, - "Specifies the maximum range along the LOS test vector at which intersection testing should occur", HFILL } - }, - { &hf_cigi3_2_line_of_sight_vector_request_source_lat_xoff, - { "Source Latitude (degrees)/Source X Offset (m)", "cigi.los_vector_request.source_lat_xoff", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "Specifies the latitude of the source point of the LOS test vector", HFILL } - }, - { &hf_cigi3_2_line_of_sight_vector_request_source_lon_yoff, - { "Source Longitude (degrees)/Source Y Offset (m)", "cigi.los_vector_request.source_lon_yoff", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "Specifies the longitude of the source point of the LOS test vector", HFILL } - }, - { &hf_cigi3_2_line_of_sight_vector_request_source_alt_zoff, - { "Source Altitude (m)/Source Z Offset (m)", "cigi.los_vector_request.source_alt_zoff", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "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 } - }, - { &hf_cigi3_2_line_of_sight_vector_request_material_mask, - { "Material Mask", "cigi.los_vector_request.material_mask", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Specifies the environmental and cultural features to be included in LOS segment testing", HFILL } - }, { &hf_cigi3_2_line_of_sight_vector_request_update_period, { "Update Period", "cigi.los_vector_request.update_period", FT_UINT8, BASE_DEC, NULL, 0x0, "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 } }, + + /* CIGI4 Line of Sight Vector Request */ + /* CIGI3 Position Request */ { &hf_cigi3_position_request, { "Position Request", "cigi.pos_request", @@ -9607,6 +12007,8 @@ proto_register_cigi(void) "Specifies the desired coordinate system relative to which the position and orientation should be given", HFILL } }, + /* CIGI4 Position Request */ + /* CIGI3 Environmental Conditions Request */ { &hf_cigi3_environmental_conditions_request, { "Environmental Conditions Request", "cigi.env_cond_request", @@ -9639,6 +12041,8 @@ proto_register_cigi(void) "Specifies the geodetic altitude at which the environmental state is requested", HFILL } }, + /* CIGI4 Environmental Conditions Request */ + /* CIGI3_3 Symbol Surface Definition */ { &hf_cigi3_3_symbol_surface_definition, { "Symbol Surface Definition", "cigi.symbl_srfc_def", @@ -9736,14 +12140,15 @@ proto_register_cigi(void) "Specifies the maximum V coordinate of the symbol surface's viewable area", HFILL } }, + + /* CIGI4 Symbol Surface Definition */ + /* CIGI3_3 Symbol Text Definition */ -#if 0 { &hf_cigi3_3_symbol_text_definition, { "Symbol Text Definition", "cigi.symbol_text_def", FT_NONE, BASE_NONE, NULL, 0x0, "Symbol Text Definition Packet", HFILL } }, -#endif { &hf_cigi3_3_symbol_text_definition_symbol_id, { "Symbol ID", "cigi.symbol_text_def.symbol_id", FT_UINT16, BASE_DEC, NULL, 0x0, @@ -9771,25 +12176,25 @@ proto_register_cigi(void) }, { &hf_cigi3_3_symbol_text_definition_text, { "Text", "cigi.symbol_text_def.text", - FT_STRINGZ, BASE_NONE, NULL, 0x0, + FT_STRINGZPAD, BASE_NONE, NULL, 0x0, "Symbol text", HFILL } }, + /* CIGI4 Symbol Text Definition */ + /* CIGI3_3 Symbol Circle Definition */ -#if 0 { &hf_cigi3_3_symbol_circle_definition, { "Symbol Circle Definition", "cigi.symbol_circle_def", FT_NONE, BASE_NONE, NULL, 0x0, "Symbol Circle Definition Packet", HFILL } }, -#endif { &hf_cigi3_3_symbol_circle_definition_symbol_id, { "Symbol ID", "cigi.symbol_circle_def.symbol_id", FT_UINT16, BASE_DEC, NULL, 0x0, "Specifies the identifier of the symbol that is being defined", HFILL } }, { &hf_cigi3_3_symbol_circle_definition_drawing_style, - { "Drawing Style", "cigi.symbl_circle_def.drawing_style", + { "Drawing Style", "cigi.symbol_circle_def.drawing_style", FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_circle_definition_drawing_style_tfs), 0x01, "Specifies whether the circles and arcs are curved lines or filled areas", HFILL } }, @@ -10079,22 +12484,22 @@ proto_register_cigi(void) "Specifies the end angle", HFILL } }, + /* CIGI4 Symbol Circle Definition */ + /* CIGI3_3 Symbol Line Definition */ -#if 0 { &hf_cigi3_3_symbol_line_definition, { "Symbol Line Definition", "cigi.symbol_line_def", FT_NONE, BASE_NONE, NULL, 0x0, "Symbol Line Definition Packet", HFILL } }, -#endif { &hf_cigi3_3_symbol_line_definition_symbol_id, { "Symbol ID", "cigi.symbol_line_def.symbol_id", FT_UINT16, BASE_DEC, NULL, 0x0, "Specifies the identifier of the symbol that is being defined", HFILL } }, { &hf_cigi3_3_symbol_line_definition_primitive_type, - { "Drawing Style", "cigi.symbl_line_def.primitive_type", - FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_circle_definition_drawing_style_tfs), 0x01, + { "Primitive Type", "cigi.symbl_line_def.primitive_type", + FT_UINT8, BASE_DEC, VALS(cigi3_3_symbol_line_definition_primitive_type_vals), 0x0F, "Specifies the type of point or line primitive used", HFILL } }, { &hf_cigi3_3_symbol_line_definition_stipple_pattern, @@ -10403,14 +12808,340 @@ proto_register_cigi(void) "Specifies the v position of the vertex", HFILL } }, + + /* CIGI4 Symbol Polygon Definition */ + { &hf_cigi4_symbol_polygon_definition, + { "Symbol Line Definition", "cigi.symbol_polygon_def", + FT_NONE, BASE_NONE, NULL, 0x0, + "Symbol Line Definition Packet", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_symbol_id, + { "Symbol ID", "cigi.symbol_polygon_def.symbol_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Specifies the identifier of the symbol that is being defined", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_primitive_type, + { "Primitive Type", "cigi.symbol_polygon_def.primitive_type", + FT_UINT8, BASE_DEC, VALS(cigi3_3_symbol_line_definition_primitive_type_vals), 0x0F, + "Specifies the type of point or line primitive used", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_stipple_pattern, + { "Stipple Pattern", "cigi.symbol_polygon_def.stipple_pattern", + FT_UINT16, BASE_HEX, NULL, 0x0, + "Specifies the dash pattern used", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_line_width, + { "Line Width (scaled symbol surface units)", "cigi.symbol_polygon_def.line_width", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the thickness of the line", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_stipple_pattern_length, + { "Stipple Pattern Length (scaled symbol surface units)", "cigi.symbol_polygon_def.stipple_pattern_length", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the length of one complete repetition of the stipple pattern", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertices, + { "Vertices", "cigi.symbol_polygon_def.vertices", + FT_NONE, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[0], + { "Vertex U 1 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u1", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[0], + { "Vertex V 1 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v1", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[1], + { "Vertex U 2 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u2", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[1], + { "Vertex V 2 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v2", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[2], + { "Vertex U 3 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u3", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[2], + { "Vertex V 3 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v3", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[3], + { "Vertex U 4 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u4", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[3], + { "Vertex V 4 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v4", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[4], + { "Vertex U 5 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u5", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[4], + { "Vertex V 5 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v5", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[5], + { "Vertex U 6 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u6", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[5], + { "Vertex V 6 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v6", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[6], + { "Vertex U 7 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u7", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[6], + { "Vertex V 7 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v7", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[7], + { "Vertex U 8 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u8", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[7], + { "Vertex V 8 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v8", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[8], + { "Vertex U 9 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u9", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[8], + { "Vertex V 9 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v9", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[9], + { "Vertex U 10 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u10", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[9], + { "Vertex V 10 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v10", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[10], + { "Vertex U 11 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u11", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[10], + { "Vertex V 11 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v11", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[11], + { "Vertex U 12 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u12", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[11], + { "Vertex V 12 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v12", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[12], + { "Vertex U 13 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u13", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[12], + { "Vertex V 13 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v13", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[13], + { "Vertex U 14 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u14", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[13], + { "Vertex V 14 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v14", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[14], + { "Vertex U 15 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u15", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[14], + { "Vertex V 15 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v15", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[15], + { "Vertex U 16 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u16", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[15], + { "Vertex V 16 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v16", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[16], + { "Vertex U 17 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u17", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[16], + { "Vertex V 17 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v17", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[17], + { "Vertex U 18 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u18", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[17], + { "Vertex V 18 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v18", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[18], + { "Vertex U 19 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u19", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[18], + { "Vertex V 19 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v19", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[19], + { "Vertex U 20 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u20", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[19], + { "Vertex V 20 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v20", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[20], + { "Vertex U 21 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u21", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[20], + { "Vertex V 21 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v21", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[21], + { "Vertex U 22 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u22", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[21], + { "Vertex V 22 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v22", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[22], + { "Vertex U 23 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u23", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[22], + { "Vertex V 23 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v23", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[23], + { "Vertex U 24 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u24", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[23], + { "Vertex V 24 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v24", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[24], + { "Vertex U 25 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u25", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[24], + { "Vertex V 25 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v25", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[25], + { "Vertex U 26 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u26", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[25], + { "Vertex V 26 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v26", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[26], + { "Vertex U 27 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u27", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[26], + { "Vertex V 27 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v27", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[27], + { "Vertex U 28 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u28", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[27], + { "Vertex V 28 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v28", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_u[28], + { "Vertex U 29 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_u29", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_definition_vertex_v[28], + { "Vertex V 29 (scaled symbol surface units)", "cigi.symbol_polygon_def.vertex_v29", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + /* CIGI3_3 Symbol Clone */ -#if 0 { &hf_cigi3_3_symbol_clone, - { "Symbol Surface Definition", "cigi.symbol_clone", + { "Symbol Clone", "cigi.symbol_clone", FT_NONE, BASE_NONE, NULL, 0x0, "Symbol Clone Packet", HFILL } }, -#endif { &hf_cigi3_3_symbol_clone_symbol_id, { "Symbol ID", "cigi.symbol_clone.symbol_id", FT_UINT16, BASE_DEC, NULL, 0x0, @@ -10427,14 +13158,15 @@ proto_register_cigi(void) "Identifies the symbol to copy or template to instantiate", HFILL } }, + + /* CIGI4 Symbol Clone */ + /* CIGI3_3 Symbol Control */ -#if 0 { &hf_cigi3_3_symbol_control, { "Symbol Control", "cigi.symbol_control", FT_NONE, BASE_NONE, NULL, 0x0, "Symbol Control Packet", HFILL } }, -#endif { &hf_cigi3_3_symbol_control_symbol_id, { "Symbol ID", "cigi.symbol_control.symbol_id", FT_UINT16, BASE_DEC, NULL, 0x0, @@ -10457,7 +13189,7 @@ proto_register_cigi(void) }, { &hf_cigi3_3_symbol_control_inherit_color, { "Inherit Color", "cigi.symbol_control.inherit_color", - FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_control_inherit_color_tfs), 0x10, + FT_BOOLEAN, 8, TFS(&inherited_not_inherited_tfs), 0x10, "Specifies whether the symbol inherits color from a parent symbol", HFILL } }, { &hf_cigi3_3_symbol_control_parent_symbol_ident, @@ -10531,14 +13263,14 @@ proto_register_cigi(void) "Specifies the v scaling factor", HFILL } }, + /* CIGI4 Symbol Control */ + /* CIGI3_3 Short Symbol Control */ -#if 0 { &hf_cigi3_3_short_symbol_control, { "Short Symbol Control", "cigi.short_symbol_control", FT_NONE, BASE_NONE, NULL, 0x0, "Short Symbol Control Packet", HFILL } }, -#endif { &hf_cigi3_3_short_symbol_control_symbol_id, { "Symbol ID", "cigi.short_symbol_control.symbol_id", FT_UINT16, BASE_DEC, NULL, 0x0, @@ -10561,7 +13293,7 @@ proto_register_cigi(void) }, { &hf_cigi3_3_short_symbol_control_inherit_color, { "Inherit Color", "cigi.short_symbol_control.inherit_color", - FT_BOOLEAN, 8, TFS(&cigi3_3_symbol_control_inherit_color_tfs), 0x10, + FT_BOOLEAN, 8, TFS(&inherited_not_inherited_tfs), 0x10, "Specifies whether the symbol inherits color from a parent symbol", HFILL } }, { &hf_cigi3_3_short_symbol_control_attribute_select1, @@ -10635,6 +13367,1102 @@ proto_register_cigi(void) "Specifies the alpha color component", HFILL } }, + /* CIGI4 Short Symbol Control */ + + /* CIGI4 Symbol Circle Textured Definition */ + { &hf_cigi4_symbol_circle_textured_definition, + { "Symbol Circle Textured Definition", "cigi.symbol_circle_textured_def", + FT_NONE, BASE_NONE, NULL, 0x0, + "Symbol Circle Definition Packet", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_symbol_id, + { "Symbol ID", "cigi.symbol_circle_textured_def.symbol_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Specifies the identifier of the symbol that is being defined", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_id, + { "Texture ID", "cigi.symbol_circle_textured_def.texture_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Specifies the identifier of the texture that is being applied", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_filter_mode, + { "Filter Mode", "cigi.symbol_circle_textured_def.filter_mode", + FT_BOOLEAN, 8, NULL, 0x01, + "Specifies the type of texture filtering/interpolation applied to the symbol", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_wrap, + { "Line Width (scaled symbol surface units)", "cigi.symbol_circle_textured_def.wrap", + FT_BOOLEAN, 8, NULL, 0x02, + "Specifies whether texture coordinates are to be wrapped or clamped when applied to the symbol", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_circles, + { "Circles", "cigi.symbol_circle_textured_def.circles", + FT_NONE, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_center_u[0], + { "Center U 1 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.center_u1", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_center_v[0], + { "Center V 1 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.center_v1", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_radius[0], + { "Radius 1 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.radius1", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the radius", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_inner_radius[0], + { "Inner Radius 1 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.inner_radius1", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the inner radius", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_start_angle[0], + { "Start Angle 1 (degrees)", "cigi.symbol_circle_textured_def.start_angle1", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the start angle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_end_angle[0], + { "End Angle 1 (degrees)", "cigi.symbol_circle_textured_def.end_angle1", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the end angle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_center_u[0], + { "Texture Coordinate S at Center Point", "cigi.symbol_circle_textured_def.texture_center_u1", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_center_v[0], + { "Texture Coordinate T at Center Point", "cigi.symbol_circle_textured_def.texture_center_v1", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_radius[0], + { "Texture Mapping Radius", "cigi.symbol_circle_textured_def.texture_mapping_radius1", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the extents of the texture that is stretched to cover the circle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_rotation[0], + { "Texture Mapping Rotation", "cigi.symbol_circle_textured_def.texture_mapping_rotation1", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the rotation of the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_center_u[1], + { "Center U 2 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.center_u2", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_center_v[1], + { "Center V 2 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.center_v2", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_radius[1], + { "Radius 2 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.radius2", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the radius", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_inner_radius[1], + { "Inner Radius 2 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.inner_radius2", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the inner radius", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_start_angle[1], + { "Start Angle 2 (degrees)", "cigi.symbol_circle_textured_def.start_angle2", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the start angle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_end_angle[1], + { "End Angle 2 (degrees)", "cigi.symbol_circle_textured_def.end_angle2", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the end angle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_center_u[1], + { "Texture Coordinate S at Center Point", "cigi.symbol_circle_textured_def.texture_center_u2", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_center_v[1], + { "Texture Coordinate T at Center Point", "cigi.symbol_circle_textured_def.texture_center_v2", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_radius[1], + { "Texture Mapping Radius", "cigi.symbol_circle_textured_def.texture_mapping_radius2", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the extents of the texture that is stretched to cover the circle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_rotation[1], + { "Texture Mapping Rotation", "cigi.symbol_circle_textured_def.texture_mapping_rotation2", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the rotation of the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_center_u[2], + { "Center U 3 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.center_u3", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_center_v[2], + { "Center V 3 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.center_v3", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_radius[2], + { "Radius 3 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.radius3", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the radius", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_inner_radius[2], + { "Inner Radius 3 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.inner_radius3", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the inner radius", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_start_angle[2], + { "Start Angle 3 (degrees)", "cigi.symbol_circle_textured_def.start_angle3", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the start angle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_end_angle[2], + { "End Angle 3 (degrees)", "cigi.symbol_circle_textured_def.end_angle3", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the end angle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_center_u[2], + { "Texture Coordinate S at Center Point", "cigi.symbol_circle_textured_def.texture_center_u3", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_center_v[2], + { "Texture Coordinate T at Center Point", "cigi.symbol_circle_textured_def.texture_center_v3", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_radius[2], + { "Texture Mapping Radius", "cigi.symbol_circle_textured_def.texture_mapping_radius3", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the extents of the texture that is stretched to cover the circle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_rotation[2], + { "Texture Mapping Rotation", "cigi.symbol_circle_textured_def.texture_mapping_rotation3", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the rotation of the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_center_u[3], + { "Center U 4 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.center_u4", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_center_v[3], + { "Center V 4 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.center_v4", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_radius[3], + { "Radius 4 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.radius4", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the radius", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_inner_radius[3], + { "Inner Radius 4 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.inner_radius4", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the inner radius", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_start_angle[3], + { "Start Angle 4 (degrees)", "cigi.symbol_circle_textured_def.start_angle4", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the start angle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_end_angle[3], + { "End Angle 4 (degrees)", "cigi.symbol_circle_textured_def.end_angle4", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the end angle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_center_u[3], + { "Texture Coordinate S at Center Point", "cigi.symbol_circle_textured_def.texture_center_u4", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_center_v[3], + { "Texture Coordinate T at Center Point", "cigi.symbol_circle_textured_def.texture_center_v4", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_radius[3], + { "Texture Mapping Radius", "cigi.symbol_circle_textured_def.texture_mapping_radius4", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the extents of the texture that is stretched to cover the circle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_rotation[3], + { "Texture Mapping Rotation", "cigi.symbol_circle_textured_def.texture_mapping_rotation4", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the rotation of the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_center_u[4], + { "Center U 5 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.center_u5", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_center_v[4], + { "Center V 5 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.center_v5", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_radius[4], + { "Radius 5 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.radius5", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the radius", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_inner_radius[4], + { "Inner Radius 5 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.inner_radius5", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the inner radius", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_start_angle[4], + { "Start Angle 5 (degrees)", "cigi.symbol_circle_textured_def.start_angle5", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the start angle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_end_angle[4], + { "End Angle 5 (degrees)", "cigi.symbol_circle_textured_def.end_angle5", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the end angle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_center_u[4], + { "Texture Coordinate S at Center Point", "cigi.symbol_circle_textured_def.texture_center_u5", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_center_v[4], + { "Texture Coordinate T at Center Point", "cigi.symbol_circle_textured_def.texture_center_v5", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_radius[4], + { "Texture Mapping Radius", "cigi.symbol_circle_textured_def.texture_mapping_radius5", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the extents of the texture that is stretched to cover the circle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_rotation[4], + { "Texture Mapping Rotation", "cigi.symbol_circle_textured_def.texture_mapping_rotation5", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the rotation of the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_center_u[5], + { "Center U 6 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.center_u6", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_center_v[5], + { "Center V 6 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.center_v6", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_radius[5], + { "Radius 6 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.radius6", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the radius", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_inner_radius[5], + { "Inner Radius 6 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.inner_radius6", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the inner radius", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_start_angle[5], + { "Start Angle 6 (degrees)", "cigi.symbol_circle_textured_def.start_angle6", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the start angle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_end_angle[5], + { "End Angle 6 (degrees)", "cigi.symbol_circle_textured_def.end_angle6", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the end angle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_center_u[5], + { "Texture Coordinate S at Center Point", "cigi.symbol_circle_textured_def.texture_center_u6", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_center_v[5], + { "Texture Coordinate T at Center Point", "cigi.symbol_circle_textured_def.texture_center_v6", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_radius[5], + { "Texture Mapping Radius", "cigi.symbol_circle_textured_def.texture_mapping_radius6", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the extents of the texture that is stretched to cover the circle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_rotation[5], + { "Texture Mapping Rotation", "cigi.symbol_circle_textured_def.texture_mapping_rotation6", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the rotation of the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_center_u[6], + { "Center U 7 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.center_u7", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_center_v[6], + { "Center V 7 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.center_v7", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_radius[6], + { "Radius 7 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.radius7", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the radius", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_inner_radius[6], + { "Inner Radius 7 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.inner_radius7", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the inner radius", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_start_angle[6], + { "Start Angle 7 (degrees)", "cigi.symbol_circle_textured_def.start_angle7", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the start angle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_end_angle[6], + { "End Angle 7 (degrees)", "cigi.symbol_circle_textured_def.end_angle7", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the end angle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_center_u[6], + { "Texture Coordinate S at Center Point", "cigi.symbol_circle_textured_def.texture_center_u7", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_center_v[6], + { "Texture Coordinate T at Center Point", "cigi.symbol_circle_textured_def.texture_center_v7", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_radius[6], + { "Texture Mapping Radius", "cigi.symbol_circle_textured_def.texture_mapping_radius7", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the extents of the texture that is stretched to cover the circle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_rotation[6], + { "Texture Mapping Rotation", "cigi.symbol_circle_textured_def.texture_mapping_rotation7", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the rotation of the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_center_u[7], + { "Center U 8 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.center_u8", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_center_v[7], + { "Center V 8 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.center_v8", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_radius[7], + { "Radius 8 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.radius8", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the radius", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_inner_radius[7], + { "Inner Radius 8 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.inner_radius8", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the inner radius", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_start_angle[7], + { "Start Angle 8 (degrees)", "cigi.symbol_circle_textured_def.start_angle8", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the start angle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_end_angle[7], + { "End Angle 8 (degrees)", "cigi.symbol_circle_textured_def.end_angle8", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the end angle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_center_u[7], + { "Texture Coordinate S at Center Point", "cigi.symbol_circle_textured_def.texture_center_u8", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_center_v[7], + { "Texture Coordinate T at Center Point", "cigi.symbol_circle_textured_def.texture_center_v8", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_radius[7], + { "Texture Mapping Radius", "cigi.symbol_circle_textured_def.texture_mapping_radius8", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the extents of the texture that is stretched to cover the circle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_rotation[7], + { "Texture Mapping Rotation", "cigi.symbol_circle_textured_def.texture_mapping_rotation8", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the rotation of the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_center_u[8], + { "Center U 9 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.center_u9", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_center_v[8], + { "Center V 9 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.center_v9", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_radius[8], + { "Radius 9 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.radius9", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the radius", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_inner_radius[8], + { "Inner Radius 9 (scaled symbol surface units)", "cigi.symbol_circle_textured_def.inner_radius9", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the inner radius", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_start_angle[8], + { "Start Angle 9 (degrees)", "cigi.symbol_circle_textured_def.start_angle9", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the start angle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_end_angle[8], + { "End Angle 9 (degrees)", "cigi.symbol_circle_textured_def.end_angle9", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the end angle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_center_u[8], + { "Texture Coordinate S at Center Point", "cigi.symbol_circle_textured_def.texture_center_u9", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_center_v[8], + { "Texture Coordinate T at Center Point", "cigi.symbol_circle_textured_def.texture_center_v9", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the circle’s center", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_radius[8], + { "Texture Mapping Radius", "cigi.symbol_circle_textured_def.texture_mapping_radius9", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the extents of the texture that is stretched to cover the circle", HFILL } + }, + { &hf_cigi4_symbol_circle_textured_definition_texture_rotation[8], + { "Texture Mapping Rotation", "cigi.symbol_circle_textured_def.texture_mapping_rotation9", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the rotation of the texture relative to the circle’s center", HFILL } + }, + + /* CIGI4 Symbol Polygon Textured Definition */ + { &hf_cigi4_symbol_polygon_textured_definition, + { "Symbol Textured Polygon Definition", "cigi.symbol_polygon_textured_def", + FT_NONE, BASE_NONE, NULL, 0x0, + "Symbol Circle Definition Packet", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_symbol_id, + { "Symbol ID", "cigi.symbol_polygon_textured_def.symbol_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Specifies the identifier of the symbol that is being defined", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_id, + { "Texture ID", "cigi.symbol_polygon_textured_def.texture_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Specifies the identifier of the texture that is being applied", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_filter_mode, + { "Filter Mode", "cigi.symbol_polygon_textured_def.filter_mode", + FT_BOOLEAN, 8, NULL, 0x01, + "Specifies the type of texture filtering/interpolation applied to the symbol", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_wrap, + { "Line Width (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.wrap", + FT_BOOLEAN, 8, NULL, 0x02, + "Specifies whether texture coordinates are to be wrapped or clamped when applied to the symbol", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertices, + { "Vertices", "cigi.symbol_polygon_textured_def.vertices", + FT_NONE, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[0], + { "Vertex U 1 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u1", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[0], + { "Vertex V 1 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v1", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[0], + { "Center U 1 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u1", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[0], + { "Center V 1 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v1", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[1], + { "Vertex U 2 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u2", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[1], + { "Vertex V 2 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v2", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[1], + { "Center U 2 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u2", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[1], + { "Center V 2 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v2", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[2], + { "Vertex U 3 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u3", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[2], + { "Vertex V 3 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v3", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[2], + { "Center U 3 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u3", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[2], + { "Center V 3 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v3", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[3], + { "Vertex U 4 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u4", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[3], + { "Vertex V 4 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v4", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[3], + { "Center U 4 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u4", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[3], + { "Center V 4 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v4", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[4], + { "Vertex U 5 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u5", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[4], + { "Vertex V 5 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v5", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[4], + { "Center U 5 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u5", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[4], + { "Center V 5 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v5", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[5], + { "Vertex U 6 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u6", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[5], + { "Vertex V 6 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v6", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[5], + { "Center U 6 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u6", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[5], + { "Center V 6 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v6", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[6], + { "Vertex U 7 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u7", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[6], + { "Vertex V 7 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v7", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[6], + { "Center U 7 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u7", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[6], + { "Center V 7 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v7", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[7], + { "Vertex U 8 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u8", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[7], + { "Vertex V 8 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v8", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[7], + { "Center U 8 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u8", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[7], + { "Center V 8 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v8", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[8], + { "Vertex U 9 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u9", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[8], + { "Vertex V 9 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v9", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[8], + { "Center U 9 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u9", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[8], + { "Center V 9 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v9", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[9], + { "Vertex U 10 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u10", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[9], + { "Vertex V 10 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v10", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[9], + { "Center U 10 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u10", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[9], + { "Center V 10 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v10", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[10], + { "Vertex U 11 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u11", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[10], + { "Vertex V 11 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v11", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[10], + { "Center U 11 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u11", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[10], + { "Center V 11 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v11", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[11], + { "Vertex U 12 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u12", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[11], + { "Vertex V 12 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v12", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[11], + { "Center U 12 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u12", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[11], + { "Center V 12 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v12", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[12], + { "Vertex U 13 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u13", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[12], + { "Vertex V 13 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v13", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[12], + { "Center U 13 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u13", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[12], + { "Center V 13 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v13", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[13], + { "Vertex U 14 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u14", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[13], + { "Vertex V 14 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v14", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[13], + { "Center U 14 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u14", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[13], + { "Center V 14 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v14", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[14], + { "Vertex U 15 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u15", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[14], + { "Vertex V 15 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v15", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[14], + { "Center U 15 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u15", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[14], + { "Center V 15 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v15", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[15], + { "Vertex U 16 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u16", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[15], + { "Vertex V 16 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v16", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[15], + { "Center U 16 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u16", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[15], + { "Center V 16 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v16", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[16], + { "Vertex U 17 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u17", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[16], + { "Vertex V 17 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v17", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[16], + { "Center U 17 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u17", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[16], + { "Center V 17 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v17", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[17], + { "Vertex U 18 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u18", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[17], + { "Vertex V 18 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v18", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[17], + { "Center U 18 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u18", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[17], + { "Center V 18 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v18", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[18], + { "Vertex U 19 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u19", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[18], + { "Vertex V 19 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v19", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[18], + { "Center U 19 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u19", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[18], + { "Center V 19 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v19", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[19], + { "Vertex U 20 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u20", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[19], + { "Vertex V 20 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v20", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[19], + { "Center U 1 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u20", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[19], + { "Center V 1 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v20", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[20], + { "Vertex U 21 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u21", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[20], + { "Vertex V 21 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v21", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[20], + { "Center U 21 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u21", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[20], + { "Center V 21 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v21", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[21], + { "Vertex U 22 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u22", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[21], + { "Vertex V 22 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v22", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[21], + { "Center U 22 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u22", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[21], + { "Center V 22 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v22", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[22], + { "Vertex U 23 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u23", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[22], + { "Vertex V 23 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v23", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[22], + { "Center U 23 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u23", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[22], + { "Center V 23 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v23", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[23], + { "Vertex U 24 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u24", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[23], + { "Vertex V 24 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v24", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[23], + { "Center U 24 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u24", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[23], + { "Center V 24 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v24", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[24], + { "Vertex U 25 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u25", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[24], + { "Vertex V 25 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v25", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[24], + { "Center U 25 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u25", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[24], + { "Center V 25 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v25", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[25], + { "Vertex U 26 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u26", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[25], + { "Vertex V 26 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v26", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[25], + { "Center U 26 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u26", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[25], + { "Center V 26 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v26", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[26], + { "Vertex U 27 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u27", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[26], + { "Vertex V 27 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v27", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[26], + { "Center U 27 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u27", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[26], + { "Center V 27 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v27", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[27], + { "Vertex U 28 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u28", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[27], + { "Vertex V 28 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v28", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[27], + { "Center U 28 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u28", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[27], + { "Center V 28 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v28", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_u[28], + { "Vertex U 29 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_u29", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the u position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_vertex_v[28], + { "Vertex V 29 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.vertex_v29", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the v position of the vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_u[28], + { "Center U 29 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_u29", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized S texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + { &hf_cigi4_symbol_polygon_textured_definition_texture_center_v[28], + { "Center V 29 (scaled symbol surface units)", "cigi.symbol_polygon_textured_def.center_v29", + FT_FLOAT, BASE_NONE, NULL, 0x0, + "Specifies the normalized T texture coordinate to position the texture relative to the associated vertex", HFILL } + }, + /* CIGI2 Start of Frame */ { &hf_cigi2_start_of_frame, { "Start of Frame", "cigi.sof", @@ -10715,51 +14543,98 @@ proto_register_cigi(void) FT_NONE, BASE_NONE, NULL, 0x0, "Start of Frame Packet", HFILL } }, - { &hf_cigi3_2_start_of_frame_db_number, + { &hf_cigi3_2_start_of_frame_minor_version, + { "Minor Version", "cigi.sof.minor_version", + FT_UINT8, BASE_DEC, NULL, 0xF0, + "Indicates the minor version of the CIGI interface", HFILL } + }, + { &hf_cigi3_2_start_of_frame_ig_frame_number, + { "IG Frame Number", "cigi.sof.ig_frame_number", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Uniquely identifies the IG data frame", HFILL } + }, + { &hf_cigi3_2_start_of_frame_last_host_frame_number, + { "Last Host Frame Number", "cigi.sof.last_host_frame_number", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Contains the value of the Host Frame parameter in the last IG Control packet received from the Host.", HFILL } + }, + + /* CIGI4 Start of Frame */ + { &hf_cigi4_start_of_frame, + { "Start of Frame", "cigi.sof", + FT_NONE, BASE_NONE, NULL, 0x0, + "Start of Frame Packet", HFILL } + }, + { &hf_cigi4_start_of_frame_db_number, { "Database Number", "cigi.sof.db_number", FT_INT8, BASE_DEC, NULL, 0x0, "Indicates to the Host which database is currently in use and if that database is being loaded into primary memory", HFILL } }, - { &hf_cigi3_2_start_of_frame_ig_status, + { &hf_cigi4_start_of_frame_ig_status, { "IG Status Code", "cigi.sof.ig_status", FT_UINT8, BASE_DEC, NULL, 0x0, "Indicates the error status of the IG", HFILL } }, - { &hf_cigi3_2_start_of_frame_minor_version, + { &hf_cigi4_start_of_frame_minor_version, { "Minor Version", "cigi.sof.minor_version", FT_UINT8, BASE_DEC, NULL, 0xF0, "Indicates the minor version of the CIGI interface", HFILL } }, - { &hf_cigi3_2_start_of_frame_ig_mode, + { &hf_cigi4_start_of_frame_flags, + { "Flags", "cigi.sof.flags", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_cigi4_start_of_frame_ig_mode, { "IG Mode", "cigi.sof.ig_mode", - FT_UINT8, BASE_DEC, VALS(cigi3_2_start_of_frame_ig_mode_vals), 0x03, + FT_UINT8, BASE_DEC, VALS(cigi3_start_of_frame_ig_mode_vals), 0x03, "Indicates the current IG mode", HFILL } }, - { &hf_cigi3_2_start_of_frame_timestamp_valid, + { &hf_cigi4_start_of_frame_timestamp_valid, { "Timestamp Valid", "cigi.sof.timestamp_valid", FT_BOOLEAN, 8, TFS(&tfs_valid_invalid), 0x04, "Indicates whether the Timestamp parameter contains a valid value", HFILL } }, - { &hf_cigi3_2_start_of_frame_earth_reference_model, + { &hf_cigi4_start_of_frame_earth_reference_model, { "Earth Reference Model", "cigi.sof.earth_reference_model", - FT_BOOLEAN, 8, TFS(&cigi3_2_start_of_frame_earth_reference_model_tfs), 0x08, + FT_BOOLEAN, 8, TFS(&cigi3_start_of_frame_earth_reference_model_tfs), 0x08, "Indicates whether the IG is using a custom Earth Reference Model or the default WGS 84 reference ellipsoid for coordinate conversion calculations", HFILL } }, - { &hf_cigi3_2_start_of_frame_ig_frame_number, + { &hf_cigi4_start_of_frame_ig_frame_number, { "IG Frame Number", "cigi.sof.ig_frame_number", FT_UINT32, BASE_DEC, NULL, 0x0, "Uniquely identifies the IG data frame", HFILL } }, - { &hf_cigi3_2_start_of_frame_timestamp, + { &hf_cigi4_start_of_frame_timestamp, { "Timestamp (microseconds)", "cigi.sof.timestamp", FT_UINT32, BASE_DEC, NULL, 0x0, "Indicates the number of 10 microsecond \"ticks\" since some initial reference time", HFILL } }, - { &hf_cigi3_2_start_of_frame_last_host_frame_number, + { &hf_cigi4_start_of_frame_last_host_frame_number, { "Last Host Frame Number", "cigi.sof.last_host_frame_number", FT_UINT32, BASE_DEC, NULL, 0x0, "Contains the value of the Host Frame parameter in the last IG Control packet received from the Host.", HFILL } }, + { &hf_cigi4_start_of_frame_ig_condition_flags, + { "IG Condition Flags", "cigi.sof.ig_condition_flags", + FT_UINT16, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_cigi4_start_of_frame_condition_overframing, + { "Overframing", "cigi.sof.overframing", + FT_BOOLEAN, 8, NULL, 0x01, + "The IG shall set this parameter to one (1) when the overframing condition is detected", HFILL } + }, + { &hf_cigi4_start_of_frame_condition_paging, + { "Paging", "cigi.sof.paging", + FT_BOOLEAN, 8, NULL, 0x02, + "The IG shall set this parameter to one (1) when the paging condition is present", HFILL } + }, + { &hf_cigi4_start_of_frame_condition_excessive_variable_length_data, + { "Excessive Variable Length Data", "cigi.sof.excessive_variable_length_data", + FT_BOOLEAN, 8, NULL, 0x04, + "The IG shall set this parameter to one (1) when the excessive variable length data condition is detected", HFILL } + }, /* CIGI2 Height Above Terrain Response */ { &hf_cigi2_height_above_terrain_response, @@ -10816,35 +14691,17 @@ proto_register_cigi(void) }, /* CIGI3_2 HAT/HOT Response */ - { &hf_cigi3_2_hat_hot_response, - { "HAT/HOT Response", "cigi.hat_hot_response", - FT_NONE, BASE_NONE, NULL, 0x0, - "HAT/HOT Response Packet", HFILL } - }, - { &hf_cigi3_2_hat_hot_response_hat_hot_id, - { "HAT/HOT ID", "cigi.hat_hot_response.hat_hot_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Identifies the HAT or HOT response", HFILL } - }, - { &hf_cigi3_2_hat_hot_response_valid, - { "Valid", "cigi.hat_hot_response.valid", - FT_BOOLEAN, 8, TFS(&tfs_valid_invalid), 0x01, - "Indicates whether the Height parameter contains a valid number", HFILL } - }, - { &hf_cigi3_2_hat_hot_response_type, - { "Response Type", "cigi.hat_hot_response.type", - FT_BOOLEAN, 8, TFS(&cigi3_2_hat_hot_response_type_tfs), 0x02, - "Indicates whether the Height parameter represent Height Above Terrain or Height Of Terrain", HFILL } - }, { &hf_cigi3_2_hat_hot_response_host_frame_number_lsn, { "Host Frame Number LSN", "cigi.hat_hot_response.host_frame_number_lsn", FT_UINT8, BASE_DEC, NULL, 0xf0, "Least significant nibble of the host frame number parameter of the last IG Control packet received before the HAT or HOT is calculated", HFILL } }, - { &hf_cigi3_2_hat_hot_response_height, - { "Height", "cigi.hat_hot_response.height", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "Contains the requested height", HFILL } + + /* CIGI4 HAT/HOT Response */ + { &hf_cigi4_hat_hot_response_flags, + { "Request Flags", "cigi.hat_hot_response.flags", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL } }, /* CIGI3 HAT/HOT Extended Response */ @@ -10890,50 +14747,17 @@ proto_register_cigi(void) }, /* CIGI3_2 HAT/HOT Extended Response */ - { &hf_cigi3_2_hat_hot_extended_response, - { "HAT/HOT Extended Response", "cigi.hat_hot_ext_response", - FT_NONE, BASE_NONE, NULL, 0x0, - "HAT/HOT Extended Response Packet", HFILL } - }, - { &hf_cigi3_2_hat_hot_extended_response_hat_hot_id, - { "HAT/HOT ID", "cigi.hat_hot_ext_response.hat_hot_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Identifies the HAT/HOT response", HFILL } - }, - { &hf_cigi3_2_hat_hot_extended_response_valid, - { "Valid", "cigi.hat_hot_ext_response.valid", - FT_BOOLEAN, 8, TFS(&tfs_valid_invalid), 0x01, - "Indicates whether the remaining parameters in this packet contain valid numbers", HFILL } - }, { &hf_cigi3_2_hat_hot_extended_response_host_frame_number_lsn, { "Host Frame Number LSN", "cigi.hat_hot_ext_response.host_frame_number_lsn", FT_UINT8, BASE_DEC, NULL, 0xf0, "Least significant nibble of the host frame number parameter of the last IG Control packet received before the HAT or HOT is calculated", HFILL } }, - { &hf_cigi3_2_hat_hot_extended_response_hat, - { "HAT", "cigi.hat_hot_ext_response.hat", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "Indicates the height of the test point above the terrain", HFILL } - }, - { &hf_cigi3_2_hat_hot_extended_response_hot, - { "HOT", "cigi.hat_hot_ext_response.hot", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "Indicates the height of terrain above or below the test point", HFILL } - }, - { &hf_cigi3_2_hat_hot_extended_response_material_code, - { "Material Code", "cigi.hat_hot_ext_response.material_code", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Indicates the material code of the terrain surface at the point of intersection with the HAT/HOT test vector", HFILL } - }, - { &hf_cigi3_2_hat_hot_extended_response_normal_vector_azimuth, - { "Normal Vector Azimuth (degrees)", "cigi.hat_hot_ext_response.normal_vector_azimuth", - FT_FLOAT, BASE_NONE, NULL, 0x0, - "Indicates the azimuth of the normal unit vector of the surface intersected by the HAT/HOT test vector", HFILL } - }, - { &hf_cigi3_2_hat_hot_extended_response_normal_vector_elevation, - { "Normal Vector Elevation (degrees)", "cigi.hat_hot_ext_response.normal_vector_elevation", - FT_FLOAT, BASE_NONE, NULL, 0x0, - "Indicates the elevation of the normal unit vector of the surface intersected by the HAT/HOT test vector", HFILL } + + /* CIGI4 HAT/HOT Extended Response */ + { &hf_cigi4_hat_hot_extended_response_flags, + { "Request Flags", "cigi.hat_hot_extended_response.flags", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL } }, /* CIGI2 Line of Sight Response */ @@ -11026,51 +14850,13 @@ proto_register_cigi(void) }, /* CIGI3_2 Line of Sight Response */ - { &hf_cigi3_2_line_of_sight_response, - { "Line of Sight Response", "cigi.los_response", - FT_NONE, BASE_NONE, NULL, 0x0, - "Line of Sight Response Packet", HFILL } - }, - { &hf_cigi3_2_line_of_sight_response_los_id, - { "LOS ID", "cigi.los_response.los_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Identifies the LOS response", HFILL } - }, - { &hf_cigi3_2_line_of_sight_response_valid, - { "Valid", "cigi.los_response.valid", - FT_BOOLEAN, 8, TFS(&tfs_valid_invalid), 0x01, - "Indicates whether the Range parameter is valid", HFILL } - }, - { &hf_cigi3_2_line_of_sight_response_entity_id_valid, - { "Entity ID Valid", "cigi.los_response.entity_id_valid", - FT_BOOLEAN, 8, TFS(&tfs_valid_invalid), 0x02, - "Indicates whether the LOS test vector or segment intersects with an entity or a non-entity", HFILL } - }, - { &hf_cigi3_2_line_of_sight_response_visible, - { "Visible", "cigi.los_response.visible", - FT_BOOLEAN, 8, TFS(&visible_occluded_tfs), 0x04, - "Indicates whether the destination point is visible from the source point", HFILL } - }, { &hf_cigi3_2_line_of_sight_response_host_frame_number_lsn, { "Host Frame Number LSN", "cigi.los_response.host_frame_number_lsn", FT_UINT8, BASE_DEC, NULL, 0xf0, "Least significant nibble of the host frame number parameter of the last IG Control packet received before the HAT or HOT is calculated", HFILL } }, - { &hf_cigi3_2_line_of_sight_response_count, - { "Response Count", "cigi.los_response.count", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Indicates the total number of Line of Sight Response packets the IG will return for the corresponding request", HFILL } - }, - { &hf_cigi3_2_line_of_sight_response_entity_id, - { "Entity ID", "cigi.los_response.entity_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Indicates the entity with which an LOS test vector or segment intersects", HFILL } - }, - { &hf_cigi3_2_line_of_sight_response_range, - { "Range (m)", "cigi.los_response.range", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "Indicates the distance along the LOS test segment or vector from the source point to the point of intersection with a polygon surface", HFILL } - }, + + /* CIGI4 Line of Sight Response */ /* CIGI3 Line of Sight Extended Response */ { &hf_cigi3_line_of_sight_extended_response, @@ -11175,106 +14961,13 @@ proto_register_cigi(void) }, /* CIGI3_2 Line of Sight Extended Response */ - { &hf_cigi3_2_line_of_sight_extended_response, - { "Line of Sight Extended Response", "cigi.3_2_los_ext_response", - FT_NONE, BASE_NONE, NULL, 0x0, - "Line of Sight Extended Response Packet", HFILL } - }, - { &hf_cigi3_2_line_of_sight_extended_response_los_id, - { "LOS ID", "cigi.3_2_los_ext_response.los_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Identifies the LOS response", HFILL } - }, - { &hf_cigi3_2_line_of_sight_extended_response_valid, - { "Valid", "cigi.3_2_los_ext_response.valid", - FT_BOOLEAN, 8, TFS(&tfs_valid_invalid), 0x01, - "Indicates whether this packet contains valid data", HFILL } - }, - { &hf_cigi3_2_line_of_sight_extended_response_entity_id_valid, - { "Entity ID Valid", "cigi.3_2_los_ext_response.entity_id_valid", - FT_BOOLEAN, 8, TFS(&tfs_valid_invalid), 0x02, - "Indicates whether the LOS test vector or segment intersects with an entity", HFILL } - }, - { &hf_cigi3_2_line_of_sight_extended_response_range_valid, - { "Range Valid", "cigi.3_2_los_ext_response.range_valid", - FT_BOOLEAN, 8, TFS(&tfs_valid_invalid), 0x04, - "Indicates whether the Range parameter is valid", HFILL } - }, - { &hf_cigi3_2_line_of_sight_extended_response_visible, - { "Visible", "cigi.3_2_los_ext_response.visible", - FT_BOOLEAN, 8, TFS(&visible_occluded_tfs), 0x08, - "Indicates whether the destination point is visible from the source point", HFILL } - }, { &hf_cigi3_2_line_of_sight_extended_response_host_frame_number_lsn, - { "Host Frame Number LSN", "cigi.3_2_los_ext_response.host_frame_number_lsn", + { "Host Frame Number LSN", "cigi.los_ext_response.host_frame_number_lsn", FT_UINT8, BASE_DEC, NULL, 0xf0, "Least significant nibble of the host frame number parameter of the last IG Control packet received before the HAT or HOT is calculated", HFILL } }, - { &hf_cigi3_2_line_of_sight_extended_response_response_count, - { "Response Count", "cigi.3_2_los_ext_response.response_count", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Indicates the total number of Line of Sight Extended Response packets the IG will return for the corresponding request", HFILL } - }, - { &hf_cigi3_2_line_of_sight_extended_response_entity_id, - { "Entity ID", "cigi.3_2_los_ext_response.entity_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Indicates the entity with which a LOS test vector or segment intersects", HFILL } - }, - { &hf_cigi3_2_line_of_sight_extended_response_range, - { "Range (m)", "cigi.3_2_los_ext_response.range", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "Indicates the distance along the LOS test segment or vector from the source point to the point of intersection with an object", HFILL } - }, - { &hf_cigi3_2_line_of_sight_extended_response_lat_xoff, - { "Latitude (degrees)/X Offset (m)", "cigi.3_2_los_ext_response.lat_xoff", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "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 } - }, - { &hf_cigi3_2_line_of_sight_extended_response_lon_yoff, - { "Longitude (degrees)/Y Offset (m)", "cigi.3_2_los_ext_response.lon_yoff", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "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 } - }, - { &hf_cigi3_2_line_of_sight_extended_response_alt_zoff, - { "Altitude (m)/Z Offset(m)", "cigi.3_2_los_ext_response.alt_zoff", - FT_DOUBLE, BASE_NONE, NULL, 0x0, - "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 } - }, - { &hf_cigi3_2_line_of_sight_extended_response_red, - { "Red", "cigi.3_2_los_ext_response.red", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Indicates the red color component of the surface at the point of intersection", HFILL } - }, - { &hf_cigi3_2_line_of_sight_extended_response_green, - { "Green", "cigi.3_2_los_ext_response.green", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Indicates the green color component of the surface at the point of intersection", HFILL } - }, - { &hf_cigi3_2_line_of_sight_extended_response_blue, - { "Blue", "cigi.3_2_los_ext_response.blue", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Indicates the blue color component of the surface at the point of intersection", HFILL } - }, - { &hf_cigi3_2_line_of_sight_extended_response_alpha, - { "Alpha", "cigi.3_2_los_ext_response.alpha", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Indicates the alpha component of the surface at the point of intersection", HFILL } - }, - { &hf_cigi3_2_line_of_sight_extended_response_material_code, - { "Material Code", "cigi.3_2_los_ext_response.material_code", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Indicates the material code of the surface intersected by the LOS test segment of vector", HFILL } - }, - { &hf_cigi3_2_line_of_sight_extended_response_normal_vector_azimuth, - { "Normal Vector Azimuth (degrees)", "cigi.3_2_los_ext_response.normal_vector_azimuth", - FT_FLOAT, BASE_NONE, NULL, 0x0, - "Indicates the azimuth of a unit vector normal to the surface intersected by the LOS test segment or vector", HFILL } - }, - { &hf_cigi3_2_line_of_sight_extended_response_normal_vector_elevation, - { "Normal Vector Elevation (degrees)", "cigi.3_2_los_ext_response.normal_vector_elevation", - FT_FLOAT, BASE_NONE, NULL, 0x0, - "Indicates the elevation of a unit vector normal to the surface intersected by the LOS test segment or vector", HFILL } - }, + + /* CIGI4 Line of Sight Extended Response */ /* CIGI2 Collision Detection Segment Response */ { &hf_cigi2_collision_detection_segment_response, @@ -11412,6 +15105,9 @@ proto_register_cigi(void) "Indicates the IG's frame counter at the time that the IG calculates the gate and line-of-sight intersection data", HFILL } }, + + /* CIGI4 Sensor Response */ + /* CIGI3 Sensor Extended Response */ { &hf_cigi3_sensor_extended_response, { "Sensor Extended Response", "cigi.sensor_ext_response", @@ -11484,6 +15180,9 @@ proto_register_cigi(void) "Indicates the geodetic altitude of the point being tracked by the sensor", HFILL } }, + + /* CIGI4 Sensor Extended Response */ + /* CIGI2 Height of Terrain Response */ { &hf_cigi2_height_of_terrain_response, { "Height of Terrain Response", "cigi.hot_response", @@ -11595,6 +15294,9 @@ proto_register_cigi(void) "Indicates the yaw angle of the specified entity, articulated part, view, or view group", HFILL } }, + + /* CIGI4 Position Response */ + /* CIGI3 Weather Conditions Response */ { &hf_cigi3_weather_conditions_response, { "Weather Conditions Response", "cigi.wea_cond_response", @@ -11642,6 +15344,8 @@ proto_register_cigi(void) "Indicates the atmospheric pressure at the requested location", HFILL } }, + /* CIGI4 Weather Conditions Response */ + /* CIGI3 Aerosol Concentration Response */ { &hf_cigi3_aerosol_concentration_response, { "Aerosol Concentration Response", "cigi.aerosol_concentration_response", @@ -11664,6 +15368,8 @@ proto_register_cigi(void) "Identifies the concentration of airborne particles", HFILL } }, + /* CIGI4 Aerosol Concentration Response */ + /* CIGI3 Maritime Surface Conditions Response */ { &hf_cigi3_maritime_surface_conditions_response, { "Maritime Surface Conditions Response", "cigi.maritime_surface_conditions_response", @@ -11691,6 +15397,8 @@ proto_register_cigi(void) "Indicates the clarity of the water at its surface", HFILL } }, + /* CIGI4 Maritime Surface Conditions Response */ + /* CIGI3 Terrestrial Surface Conditions Response */ { &hf_cigi3_terrestrial_surface_conditions_response, { "Terrestrial Surface Conditions Response", "cigi.terr_surface_cond_response", @@ -11708,6 +15416,8 @@ proto_register_cigi(void) "Indicates the presence of a specific surface condition or contaminant at the test point", HFILL } }, + /* CIGI4 Terrestrial Surface Conditions Response */ + /* CIGI3 Collision Detection Segment Notification */ { &hf_cigi3_collision_detection_segment_notification, { "Collision Detection Segment Notification", "cigi.coll_det_seg_notification", @@ -11745,6 +15455,8 @@ proto_register_cigi(void) "Indicates the distance along the collision test vector from the source endpoint to the point of intersection", HFILL } }, + /* CIGI4 Collision Detection Segment Notification */ + /* CIGI3 Collision Detection Volume Notification */ { &hf_cigi3_collision_detection_volume_notification, { "Collision Detection Volume Notification", "cigi.coll_det_vol_notification", @@ -11777,6 +15489,8 @@ proto_register_cigi(void) "Indicates the ID of the collision detection volume with which the collision occurred", HFILL } }, + /* CIGI4 Collision Detection Volume Notification */ + /* CIGI3 Animation Stop Notification */ { &hf_cigi3_animation_stop_notification, { "Animation Stop Notification", "cigi.animation_stop_notification", @@ -11789,6 +15503,8 @@ proto_register_cigi(void) "Indicates the entity ID of the animation that has stopped", HFILL } }, + /* CIGI4 Animation Stop Notification */ + /* CIGI3 Event Notification */ { &hf_cigi3_event_notification, { "Event Notification", "cigi.event_notification", @@ -11816,6 +15532,8 @@ proto_register_cigi(void) "Used for user-defined event data", HFILL } }, + /* CIGI4 Event Notification */ + /* CIGI2 Image Generator Message */ { &hf_cigi2_image_generator_message, { "Image Generator Message", "cigi.image_generator_message", @@ -11829,7 +15547,7 @@ proto_register_cigi(void) }, { &hf_cigi2_image_generator_message_message, { "Message", "cigi.image_generator_message.message", - FT_STRINGZ, BASE_NONE, NULL, 0x0, + FT_STRINGZPAD, BASE_NONE, NULL, 0x0, "Image generator message", HFILL } }, @@ -11846,10 +15564,12 @@ proto_register_cigi(void) }, { &hf_cigi3_image_generator_message_message, { "Message", "cigi.image_generator_message.message", - FT_STRINGZ, BASE_NONE, NULL, 0x0, + FT_STRINGZPAD, BASE_NONE, NULL, 0x0, "Message string", HFILL } }, + /* CIGI4 Image Generator Message */ + /* CIGI2 User Definable */ { &hf_cigi2_user_definable, { "User Definable", "cigi.user_definable", @@ -11863,6 +15583,20 @@ proto_register_cigi(void) FT_NONE, BASE_NONE, NULL, 0x0, "User-Defined Packet", HFILL } }, + + /* CIGI4 locally Defined Packets */ + { &hf_cigi4_locally_defined, + { "locally-Defined", "cigi.locally_defined", + FT_NONE, BASE_NONE, NULL, 0x0, + "locally-Defined Packet", HFILL } + }, + + /* CIGI4 Registered Packets */ + { &hf_cigi4_registered, + { "Registered", "cigi.registered", + FT_NONE, BASE_NONE, NULL, 0x0, + "Registered Packet", HFILL } + } }; static ei_register_info ei[] = { @@ -11877,6 +15611,7 @@ proto_register_cigi(void) { "from_packet", "From Packet", CIGI_VERSION_FROM_PACKET }, { "cigi2", "CIGI 2", CIGI_VERSION_2 }, { "cigi3", "CIGI 3", CIGI_VERSION_3 }, + { "cigi4", "CIGI 4", CIGI_VERSION_4 }, { NULL, NULL, 0 } }; @@ -11888,8 +15623,25 @@ proto_register_cigi(void) }; /* Setup protocol subtree array */ - static gint *ett[] = { + static int* ett[] = { &ett_cigi, + &ett_cigi4_start_of_frame_flags, + &ett_cigi4_start_of_frame_ig_condition_flags, + &ett_cigi4_ig_control_entity_substitution, + &ett_cigi4_ig_control_flags, + &ett_cigi4_entity_position_flags, + &ett_cigi4_hat_hot_request_flags, + &ett_cigi4_hat_hot_response_flags, + &ett_cigi4_hat_hot_extended_response_flags, + &ett_cigi4_articulated_part_control_part_enable_flags, + &ett_cigi4_short_articulated_part_control_part_enable_flags, + &ett_cigi4_velocity_control_flags, + &ett_cigi4_celestial_sphere_control_flags, + &ett_cigi4_view_control_enable_flags, + &ett_cigi4_symbol_circle_definition_circles, + &ett_cigi4_symbol_polygon_definition_vertices, + &ett_cigi4_symbol_circle_textured_definition_circles, + &ett_cigi4_symbol_polygon_textured_definition_vertices }; /* Register the protocol name and description */ @@ -11907,13 +15659,19 @@ proto_register_cigi(void) cigi_module = prefs_register_protocol(proto_cigi, proto_reg_handoff_cigi); /* Register preferences */ - prefs_register_enum_preference(cigi_module, "version", "CIGI version", "The version of CIGI with which to dissect packets", &global_cigi_version, cigi_versions, FALSE); - 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); + prefs_register_enum_preference(cigi_module, "version", "CIGI version", "The version of CIGI with which to dissect packets", &global_cigi_version, cigi_versions, false); + 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); prefs_register_string_preference(cigi_module, "host", "Host IP", "IPv4 address or hostname of the host", &global_host_ip); prefs_register_string_preference(cigi_module, "ig", "Image Generator IP", "IPv4 address or hostname of the image generator", &global_ig_ip); /* Register the dissector */ cigi_handle = register_dissector("cigi", dissect_cigi, proto_cigi); + + cigi3_packet_id_table = register_dissector_table("cigi3.packet_id", "CIGI3 Packet ID", + proto_cigi, FT_UINT8, BASE_DEC); + + cigi4_packet_id_table = register_dissector_table("cigi4.packet_id", "CIGI4 Packet ID", + proto_cigi, FT_UINT16, BASE_HEX); } /* This function is also called by preferences whenever "Apply" is pressed @@ -11923,7 +15681,7 @@ proto_register_cigi(void) void proto_reg_handoff_cigi(void) { - static gboolean inited = FALSE; + static bool inited = false; /* If the CIGI version preference was changed update the cigi version * information for all packets */ @@ -11953,7 +15711,229 @@ proto_reg_handoff_cigi(void) dissector_add_for_decode_as_with_preference("tcp.port", cigi_handle); heur_dissector_add("udp", dissect_cigi_heur, "CIGI over UDP", "cigi_udp", proto_cigi, HEURISTIC_ENABLE); - inited = TRUE; + // CIGI 3 packet ID types (some with fields added in 3.2 or 3.3). + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_IG_CONTROL, + create_dissector_handle(cigi3_add_ig_control, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_ENTITY_CONTROL, + create_dissector_handle(cigi3_add_entity_control, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_CONFORMAL_CLAMPED_ENTITY_CONTROL, + create_dissector_handle(cigi3_add_conformal_clamped_entity_control, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_COMPONENT_CONTROL, + create_dissector_handle(cigi3_add_component_control, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_SHORT_COMPONENT_CONTROL, + create_dissector_handle(cigi3_add_short_component_control, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_ARTICULATED_PART_CONTROL, + create_dissector_handle(cigi3_add_articulated_part_control, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_SHORT_ARTICULATED_PART_CONTROL, + create_dissector_handle(cigi3_add_short_articulated_part_control, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_RATE_CONTROL, + create_dissector_handle(cigi3_add_rate_control, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_CELESTIAL_SPHERE_CONTROL, + create_dissector_handle(cigi3_add_celestial_sphere_control, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_ATMOSPHERE_CONTROL, + create_dissector_handle(cigi3_add_atmosphere_control, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_ENVIRONMENTAL_REGION_CONTROL, + create_dissector_handle(cigi3_add_environmental_region_control, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_WEATHER_CONTROL, + create_dissector_handle(cigi3_add_weather_control, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_CONTROL, + create_dissector_handle(cigi3_add_maritime_surface_conditions_control, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_WAVE_CONTROL, + create_dissector_handle(cigi3_add_wave_control, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL, + create_dissector_handle(cigi3_add_terrestrial_surface_conditions_control, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_VIEW_CONTROL, + create_dissector_handle(cigi3_add_view_control, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_SENSOR_CONTROL, + create_dissector_handle(cigi3_add_sensor_control, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_MOTION_TRACKER_CONTROL, + create_dissector_handle(cigi3_add_motion_tracker_control, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_EARTH_REFERENCE_MODEL_DEFINITION, + create_dissector_handle(cigi3_add_earth_reference_model_definition, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_TRAJECTORY_DEFINITION, + create_dissector_handle(cigi3_add_trajectory_definition, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_VIEW_DEFINITION, + create_dissector_handle(cigi3_add_view_definition, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION, + create_dissector_handle(cigi3_add_collision_detection_segment_definition, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION, + create_dissector_handle(cigi3_add_collision_detection_volume_definition, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_HAT_HOT_REQUEST, + create_dissector_handle(cigi3_add_hat_hot_request, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST, + create_dissector_handle(cigi3_add_line_of_sight_segment_request, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST, + create_dissector_handle(cigi3_add_line_of_sight_vector_request, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_POSITION_REQUEST, + create_dissector_handle(cigi3_add_position_request, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_ENVIRONMENTAL_CONDITIONS_REQUEST, + create_dissector_handle(cigi3_add_environmental_conditions_request, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_START_OF_FRAME, + create_dissector_handle(cigi3_add_start_of_frame, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_HAT_HOT_RESPONSE, + create_dissector_handle(cigi3_add_hat_hot_response, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE, + create_dissector_handle(cigi3_add_hat_hot_extended_response, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_LINE_OF_SIGHT_RESPONSE, + create_dissector_handle(cigi3_add_line_of_sight_response, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE, + create_dissector_handle(cigi3_add_line_of_sight_extended_response, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_SENSOR_RESPONSE, + create_dissector_handle(cigi3_add_sensor_response, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_SENSOR_EXTENDED_RESPONSE, + create_dissector_handle(cigi3_add_sensor_extended_response, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_POSITION_RESPONSE, + create_dissector_handle(cigi3_add_position_response, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_WEATHER_CONDITIONS_RESPONSE, + create_dissector_handle(cigi3_add_weather_conditions_response, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_AEROSOL_CONCENTRATION_RESPONSE, + create_dissector_handle(cigi3_add_aerosol_concentration_response, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_MARITIME_SURFACE_CONDITIONS_RESPONSE, + create_dissector_handle(cigi3_add_maritime_surface_conditions_response, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE, + create_dissector_handle(cigi3_add_terrestrial_surface_conditions_response, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_COLLISION_DETECTION_SEGMENT_NOTIFICATION, + create_dissector_handle(cigi3_add_collision_detection_segment_notification, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_COLLISION_DETECTION_VOLUME_NOTIFICATION, + create_dissector_handle(cigi3_add_collision_detection_volume_notification, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_ANIMATION_STOP_NOTIFICATION, + create_dissector_handle(cigi3_add_animation_stop_notification, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_EVENT_NOTIFICATION, + create_dissector_handle(cigi3_add_event_notification, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_IMAGE_GENERATOR_MESSAGE, + create_dissector_handle(cigi3_add_image_generator_message, proto_cigi)); + + // Packet ID types added in CIGI 3.3 + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_SYMBOL_SURFACE_DEFINITION, + create_dissector_handle(cigi3_3_add_symbol_surface_definition, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_SYMBOL_TEXT_DEFINITION, + create_dissector_handle(cigi3_3_add_symbol_text_definition, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_SYMBOL_CIRCLE_DEFINITION, + create_dissector_handle(cigi3_3_add_symbol_circle_definition, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_SYMBOL_LINE_DEFINITION, + create_dissector_handle(cigi3_3_add_symbol_line_definition, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_SYMBOL_CLONE, + create_dissector_handle(cigi3_3_add_symbol_clone, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_SYMBOL_CONTROL, + create_dissector_handle(cigi3_3_add_symbol_control, proto_cigi)); + dissector_add_uint("cigi3.packet_id", CIGI3_PACKET_ID_SHORT_SYMBOL_CONTROL, + create_dissector_handle(cigi3_3_add_short_symbol_control, proto_cigi)); + + // CIGI 4 packet ID types + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_IG_CONTROL, + create_dissector_handle(cigi4_add_ig_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_ENTITY_POSITION, + create_dissector_handle(cigi4_add_entity_position, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_CONFORMAL_CLAMPED_ENTITY_POSITION, + create_dissector_handle(cigi4_add_conformal_clamped_entity_position, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_COMPONENT_CONTROL, + create_dissector_handle(cigi4_add_component_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_SHORT_COMPONENT_CONTROL, + create_dissector_handle(cigi4_add_short_component_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_ARTICULATED_PART_CONTROL, + create_dissector_handle(cigi4_add_articulated_part_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_SHORT_ARTICULATED_PART_CONTROL, + create_dissector_handle(cigi4_add_short_articulated_part_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_VELOCITY_CONTROL, + create_dissector_handle(cigi4_add_velocity_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_CELESTIAL_SPHERE_CONTROL, + create_dissector_handle(cigi4_add_celestial_sphere_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_ATMOSPHERE_CONTROL, + create_dissector_handle(cigi4_add_atmosphere_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_ENVIRONMENTAL_REGION_CONTROL, + create_dissector_handle(cigi4_add_environmental_region_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_WEATHER_CONTROL, + create_dissector_handle(cigi4_add_weather_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_MARITIME_SURFACE_CONDITIONS_CONTROL, + create_dissector_handle(cigi4_add_maritime_surface_conditions_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_WAVE_CONTROL, + create_dissector_handle(cigi4_add_wave_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_CONTROL, + create_dissector_handle(cigi4_add_terrestrial_surface_conditions_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_VIEW_CONTROL, + create_dissector_handle(cigi4_add_view_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_SENSOR_CONTROL, + create_dissector_handle(cigi4_add_sensor_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_MOTION_TRACKER_CONTROL, + create_dissector_handle(cigi4_add_motion_tracker_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_EARTH_REFERENCE_MODEL_DEFINITION, + create_dissector_handle(cigi4_add_earth_reference_model_definition, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_ACCELERATION_CONTROL, + create_dissector_handle(cigi4_add_acceleration_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_VIEW_DEFINITION, + create_dissector_handle(cigi4_add_view_definition, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_COLLISION_DETECTION_SEGMENT_DEFINITION, + create_dissector_handle(cigi4_add_collision_detection_segment_definition, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_COLLISION_DETECTION_VOLUME_DEFINITION, + create_dissector_handle(cigi4_add_collision_detection_volume_definition, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_HAT_HOT_REQUEST, + create_dissector_handle(cigi4_add_hat_hot_request, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_LINE_OF_SIGHT_SEGMENT_REQUEST, + create_dissector_handle(cigi4_add_line_of_sight_segment_request, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_LINE_OF_SIGHT_VECTOR_REQUEST, + create_dissector_handle(cigi4_add_line_of_sight_vector_request, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_POSITION_REQUEST, + create_dissector_handle(cigi4_add_position_request, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_ENVIRONMENTAL_CONDITIONS_REQUEST, + create_dissector_handle(cigi4_add_environmental_conditions_request, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_SYMBOL_SURFACE_DEFINITION, + create_dissector_handle(cigi4_add_symbol_surface_definition, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_SYMBOL_TEXT_DEFINITION, + create_dissector_handle(cigi4_add_symbol_text_definition, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_SYMBOL_CIRCLE_DEFINITION, + create_dissector_handle(cigi4_add_symbol_circle_definition, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_SYMBOL_POLYGON_DEFINITION, + create_dissector_handle(cigi4_add_symbol_polygon_definition, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_SYMBOL_CLONE, + create_dissector_handle(cigi4_add_symbol_clone, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_SYMBOL_CONTROL, + create_dissector_handle(cigi4_add_symbol_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_SHORT_SYMBOL_CONTROL, + create_dissector_handle(cigi4_add_short_symbol_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_SYMBOL_CIRCLE_TEXTURED_DEFINITION, + create_dissector_handle(cigi4_add_symbol_circle_textured, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_SYMBOL_POLYGON_TEXTURED_DEFINITION, + create_dissector_handle(cigi4_add_symbol_polygon_textured, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_ENTITY_CONTROL, + create_dissector_handle(cigi4_add_entity_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_ANIMATION_CONTROL, + create_dissector_handle(cigi4_add_animation_control, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_START_OF_FRAME, + create_dissector_handle(cigi4_add_start_of_frame, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_HAT_HOT_RESPONSE, + create_dissector_handle(cigi4_add_hat_hot_response, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_HAT_HOT_EXTENDED_RESPONSE, + create_dissector_handle(cigi4_add_hat_hot_extended_response, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_LINE_OF_SIGHT_RESPONSE, + create_dissector_handle(cigi4_add_line_of_sight_response, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_LINE_OF_SIGHT_EXTENDED_RESPONSE, + create_dissector_handle(cigi4_add_line_of_sight_extended_response, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_SENSOR_RESPONSE, + create_dissector_handle(cigi4_add_sensor_response, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_SENSOR_EXTENDED_RESPONSE, + create_dissector_handle(cigi4_add_sensor_extended_response, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_POSITION_RESPONSE, + create_dissector_handle(cigi4_add_position_response, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_WEATHER_CONDITIONS_RESPONSE, + create_dissector_handle(cigi4_add_weather_conditions_response, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_AEROSOL_CONCENTRATION_RESPONSE, + create_dissector_handle(cigi4_add_aerosol_concentration_response, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_MARITIME_SURFACE_CONDITIONS_RESPONSE, + create_dissector_handle(cigi4_add_maritime_surface_conditions_response, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_TERRESTRIAL_SURFACE_CONDITIONS_RESPONSE, + create_dissector_handle(cigi4_add_terrestrial_surface_conditions_response, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_COLLISION_DETECTION_SEGMENT_NOTIFICATION, + create_dissector_handle(cigi4_add_collision_detection_segment_notification, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_COLLISION_DETECTION_VOLUME_NOTIFICATION, + create_dissector_handle(cigi4_add_collision_detection_volume_notification, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_ANIMATION_STOP_NOTIFICATION, + create_dissector_handle(cigi4_add_animation_stop_notification, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_EVENT_NOTIFICATION, + create_dissector_handle(cigi4_add_event_notification, proto_cigi)); + dissector_add_uint("cigi4.packet_id", CIGI4_PACKET_ID_IMAGE_GENERATOR_MESSAGE, + create_dissector_handle(cigi4_add_image_generator_message, proto_cigi)); + + inited = true; } } |