diff --git a/_cpp/th_b1553_icd.h b/_cpp/th_b1553_icd.h new file mode 100644 index 0000000..6bbdb4a --- /dev/null +++ b/_cpp/th_b1553_icd.h @@ -0,0 +1,3631 @@ +/* + * b1553_icd_br.h + * + * Created on: 18/mag/2017 + * Author: chessaa + */ + +#ifndef B1553_ICD_TH_H_ +#define B1553_ICD_TH_H_ + +#include "idd_types.h" +#include "stddef.h" + +#include "gc_math.h" + +#include "th_b1553_icd_messages_id.h" + +using namespace idd_codec; + +namespace icd1553 +{ + +IDD_VERSION(grifo_icd, "TH", 1, 0, "IDDxxxxx-48", "IRSxxxxx-48"); + +#define ICD1553_TIMETAG_MICROSECONDS_LSB (64) + +#include "idd_pack16.h" + +//Some common constant +#define ICD1553_SEMICIRCLE_LSB (3.05176E-05f) +#define ICD1553_SEMICIRCLE2_LSB (5.96046E-08f) + +#define ICD1553_SEMICIRCLE_RAD_LSB (GC_K_PI*ICD1553_SEMICIRCLE_LSB) +#define ICD1553_SEMICIRCLE2_RAD_LSB (GC_K_PI*ICD1553_SEMICIRCLE2_LSB) + +typedef uint16_t icd_raw_word_t; +typedef uint32_t icd_raw_dword_t; + +#define ICD_STATIC_CHECK_SIZE_WORD(type_, word_size_) IDD_STATIC_CHECK_SIZE(type_, (word_size_)*2) +#define ICD_STATIC_CHECK_OFFSET_WORD(struct_, member_, offset_) IDD_STATIC_CHECK_OFFSET(struct_, member_, 2*((offset_)-1)) + +typedef idd_bitfield_i16_t call_sign_character1_msw_t; +typedef idd_bitfield_i16_t call_sign_character2_msw_t; +typedef idd_bitfield_i16_t call_sign_character3_lsw_t; +typedef idd_bitfield_i16_t call_sign_character4_lsw_t; + +//Message A1: Radar Operational Setting and Parameter Transfer + +//Word A1-01: Radar Setting +enum target_history_t +{ + TARGET_HISTORY_LEVEL_01, + TARGET_HISTORY_LEVEL_02, + TARGET_HISTORY_LEVEL_03, + TARGET_HISTORY_LEVEL_04, +}; + +typedef idd_bitfield_u16_t tgt_history_level_field_t; + +typedef idd_bitfield_u16_t symb_intensity_field_t; + +enum ground_target_rejected_radial_vel_t +{ + GROUND_TARGET_REJ_LOW, + GROUND_TARGET_REJ_HIGH, +}; +typedef idd_bitfield_u16_t ground_reject_vel_high_field_t; + +enum min_detect_ground_tgt_radial_vel_t +{ + MIN_DETECT_GROUND_LOW, + MIN_DETECT_GROUND_HIGH, +}; +typedef idd_bitfield_u16_t min_dectect_ground_radial_vel_high_field_t; + +enum ale_blanking_t +{ + ALE_BLANKING_ENABLED, + ALE_BLANKING_DISABLED +}; +typedef idd_bitfield_u16_t ale_blanking_disable_field_t; + +enum altitude_block_t +{ + BTBK, + TPBK, + NORMAL_BK, + + altitude_block_enum_max +}; + +typedef idd_bitfield_u16_t altitude_block_field_t; + +enum prf_lookup_selection_t +{ + LPRF, + MPRF_LOOKUP +}; + +typedef idd_bitfield_u16_t prf_lookup_selection_field_t; + +typedef idd_bitfield_u16_t spare1_15_field_t; + +//Word A1-01: Radar Setting +union rdr_settings_t +{ + tgt_history_level_field_t history_level; + symb_intensity_field_t sym_intensity; + ground_reject_vel_high_field_t ground_reject_vel_high; + min_dectect_ground_radial_vel_high_field_t min_dectect_ground_radial_vel_high; + ale_blanking_disable_field_t ale_blanking_disable; + altitude_block_field_t altitude_block; + prf_lookup_selection_field_t prf_lookup_selection; + + spare1_15_field_t sett_spare15; + + icd_raw_word_t raw; +}; + +//Word A1-02: Frequency Agility Setting and Interleave selection + +enum frequency_agility_type_t +{ + FIXED, + RANDOM, + ADAPTIVE, + + AGILITY_NOT_VALID, + + frequency_agility_enum_max +}; + +typedef idd_bitfield_u16_t frq_agility_field_t; + +enum frequency_group_selector_tellback_t +{ + FREQUENCY_GROUP_NOT_ACTIVE, + FREQUENCY_GROUP_ACTIVE +}; + +typedef idd_bitfield_u16_t frq_group1_field_t; +typedef idd_bitfield_u16_t frq_group2_field_t; +typedef idd_bitfield_u16_t frq_group3_field_t; +typedef idd_bitfield_u16_t frq_group4_field_t; +typedef idd_bitfield_u16_t frq_group5_field_t; + +#define ICD1553_CHANNEL_MIN 1 +#define ICD1553_CHANNEL_MAX 30 + +typedef idd_range_bitfield_t frq_channel_field_t; + +enum waveform_interleave_selection_tellback_t +{ + WAVEFORM_INT_SEL_SPARE, + WAVEFORM_INT_01_SEL_SPARE, + WAVEFORM_INT_02_SEL_SPARE, + WAVEFORM_INT_03_SEL_SPARE, +}; +typedef idd_bitfield_u16_t frq_waveform_interleave_field_t; + +enum lprf_threshold_selection_tellback_t +{ + THRESHOLD_LOW, + THRESHOLD_HIGH +}; +typedef idd_bitfield_u16_t lprf_threshold_high_field_t; + +//Word A1-02: Frequency Agility Setting and Interleave selection + +union frequency_t { + frq_agility_field_t agility; + + frq_group1_field_t g1; + frq_group2_field_t g2; + frq_group3_field_t g3; + frq_group4_field_t g4; + frq_group5_field_t g5; + + frq_channel_field_t channel; + + frq_waveform_interleave_field_t waveform; + + lprf_threshold_high_field_t lprf_threshold; + + icd_raw_word_t raw; +}; + + +//Word A1-03: Beacon Delay and Code + +typedef idd_bitfield_u16_t becon_delay_field_t; +typedef idd_bitfield_u16_t becon_code_field_t; + +union beacon_delay_and_code_t +{ + becon_delay_field_t delay; + becon_code_field_t code; + + icd_raw_word_t raw; +}; + +//Word A1-04: Radar Gains and RF Channels Grouping Options + +typedef idd_bitfield_u16_t if_gain_field_t; +typedef idd_bitfield_u16_t moving_target_gain_field_t; +typedef idd_bitfield_u16_t frq_group_option_field_t; + +enum frequency_grouping_t +{ + FREQUENCY_GROUPING_OPTION_01, + FREQUENCY_GROUPING_OPTION_02, +}; + +typedef idd_bitfield_u16_t frequency_grouping_field_t; + +typedef idd_bitfield_u16_t spare1_15_field_t ; + +union gains_and_chgrp_t +{ + if_gain_field_t if_gain; + moving_target_gain_field_t moving_target_gain; + frequency_grouping_field_t frequency_grouping_field; + + spare1_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word A1-05: A/C Identifier + +/*union ac_identifier_t { + uint16_t ac_id; + icd_raw_word_t raw; +};*/ + + +typedef idd_bitfield_u16_t ac_identifier_t; + +//Word A1-06: Date of Mission +#define ICD1553_YEAR_OF_MISSION_MIN 0 +#define ICD1553_YEAR_OF_MISSION_MAX 63 +typedef idd_range_bitfield_t year_of_mission_t; + +#define ICD1553_MONTH_OF_MISSION_MIN 1 +#define ICD1553_MONTH_OF_MISSION_MAX 12 +typedef idd_range_bitfield_t month_of_mission_t; + +#define ICD1553_DAY_OF_MISSION_MIN 1 +#define ICD1553_DAY_OF_MISSION_MAX 31 +typedef idd_range_bitfield_t day_of_mission_t; + +//Word A1-07: Time of Mission +typedef idd_bitfield_u16_t time_of_mission_t; + +//A1-08: Parameter identifier +enum parameter_transfer_enabled_t +{ + PAR_TRANSF_NOT_ACTIVE, + PAR_TRANSF_ACTIVE +}; + +typedef idd_bitfield_u16_t param_enable_field_t; + +enum receive_transmit_selector_t +{ + SELECTOR_RECEIVE, + SELECTOR_TRANSMIT +}; +typedef idd_bitfield_u16_t param_tx_field_t; + +enum param_id_code_t +{ + param_antenna_haromization_yaw=1, + param_antenna_haromization_pitch=2, + param_antenna_haromization_roll=3, + param_bulkhead_x_displacement=4, + param_bulkhead_y_displacement=5, + param_bulkhead_z_displacement=6, + + param_symbol_intensity_a=11, + param_symbol_intensity_b=12, + param_symbol_intensity_c=13, + param_symbol_waveform_command=21, + param_symbol_cutt_off_velocity=31, + param_symbol_range_threshold_for_aws=41, + param_symbol_test_01_for_new_modes=51, + param_symbol_test_02_for_new_modes=52, + param_symbol_test_03_for_new_modes=53, + param_symbol_test_04_for_new_modes=54, + param_symbol_white_level_for_sar_images=61, + param_symbol_black_level_for_sar_images=62, + param_symbol_pre_compression_factor_for_sar_images=63, +}; + +typedef idd_bitfield_u16_t param_num_field_t; + +#define ICD1553_PARAM_ANGLE_RAD_LSB (ICD1553_SEMICIRCLE_RAD_LSB) + +IDD_FIXEDPOINT_TRAIT_DECLARATION(param_angle_lsb, float, ICD1553_PARAM_ANGLE_RAD_LSB, -1, 1, ICD1553_PARAM_ANGLE_RAD_LSB, ICD1553_PARAM_ANGLE_RAD_LSB); + +typedef idd_fixedpoint param_angle_t; + +typedef idd_bitfield_u16_t spare6_15_t; + +union param_id_t +{ + param_enable_field_t enable; + param_tx_field_t tx; + param_num_field_t num; + + spare6_15_t spare; + + icd_raw_word_t raw; +}; + +typedef idd_bitfield_u16_t param_int_field_t; + + +union param_value_t +{ + param_int_field_t ivalue; + param_angle_t angle; + icd_raw_word_t raw; +}; + +typedef idd_bitfield_u16_t mission_time_mark_field_t; + +union date_of_mission_t +{ + year_of_mission_t year_of_mission; + month_of_mission_t month_of_mission; + day_of_mission_t day_of_mission; + + mission_time_mark_field_t time_mark; //spare; + + icd_raw_word_t raw; +}; + +// Message A1: Radar Operational Setting and Parameter Transfer + +struct msg_rdr_settings_and_parameters_t +{ + //WORD A1-01, radar settings + rdr_settings_t settings; + + //WORD A1-02, Frequency Agility Setting and Interleave selection + frequency_t frequency; + + //WORD A1-03, Beacon Delay and Code + beacon_delay_and_code_t beacon; + + //Word A1-04: Radar Gains and RF Channels Grouping Options + gains_and_chgrp_t gains_and_chgrp; + + //Word A1-05: A/C Identifier + ac_identifier_t ac_id; + + //Word A1-06: Date of Mission + date_of_mission_t date_of_mission; + + //Word A1-07: Time of Mission + time_of_mission_t time_of_mission; + + //Word A1-08: Parameter Identifier + param_id_t param_id; + + //TODO, Word A1-09/10: Parameter Value + param_value_t param_value_1; + + //TODO, Word A1-09/10: Parameter Value + param_value_t param_value_2; +}; + +ICD_STATIC_CHECK_SIZE_WORD(msg_rdr_settings_and_parameters_t, LEN_A1_rdr_operational_setting); + + +//Message A2: Radar Operation Command + +//Word A2-01: Radar Mode Command + +enum rdr_modes_t +{ + RWS=0, + VS, + ACM, + TWS, + MODE_SPARE_4=4, + GM, + SEA_LOW, + SEA_HIGH, + GMTI, + BCN, + AGR, + TA, + WA, + TS, + MODE_SPARE_14, + RDR_DLY //this is actually only a tell-back, a not command-able mode +}; + +enum des_control_t +{ + LOCK_ON, + LOCK_ON_DTT, + TRANS_HPT_BUT, + REJECT, + LOCK_ON_STT, + DES_TRACK_LABEL, + EXEC_SAR, + NOT_VALID +}; + +enum ibit_request_t +{ + NORMAL=0, + INT_BIT=1 +}; + +enum stby_selection_t +{ + STBY_OFF, + STBY_ON +}; + +typedef bool freeze_selection_t; +typedef bool stop_powerup_selection_t; +typedef bool emergency_selection_t; +typedef bool silence_selection_t; + +enum sar_exec_selection_t +{ + SAR_ON_CURSOR, + SAR_ON_SPOI +}; + +typedef idd_bitfield_u16_t rdr_mode_field_t; +typedef idd_bitfield_u16_t des_control_field_t; +typedef idd_bitfield_u16_t ibit_request_field_t; +typedef idd_boolfield_u16_t stby_field_t; +typedef idd_bitfield_u16_t freeze_field_t; +typedef idd_bitfield_u16_t stop_powerup_field_t; +typedef idd_bitfield_u16_t reserved11_field_t; +typedef idd_bitfield_u16_t silence_field_t; +typedef idd_bitfield_u16_t sar_exec_filed_t; +typedef idd_bitfield_u16_t spare2_15_field_t; + +//Word A2-01: Radar Mode Command + +union rdr_mode_command_word_t { + rdr_mode_field_t master_mode; + des_control_field_t des_ctrl; + ibit_request_field_t ibit; + stby_field_t stby; + freeze_field_t freeze; + stop_powerup_field_t stop_powerup; //reserved + reserved11_field_t reserved11; + silence_field_t silence; //reserved + sar_exec_filed_t sar_type; + + spare2_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word A2-02: Radar Functions and Parameters (word#1) + +enum rws_submode_t +{ + RWS_NAM, + RWS_ASM +}; + +enum spot_selection_t +{ + SEL_NORMAL, + SEL_SPOT +}; + +enum acm_submode_t +{ + BORESIGHT, + NARROW, + HUD, + WIDE, + VERTICAL, + SLEWABLE, + ACM_SPARE_6, + ACM_SPARE_7 +}; + +enum gm_submode_t +{ + GM_RBM, + GM_DBS +}; + +enum expand_t +{ + EXP_NORMAL, + EXPAND, + EXP_SPARE2, + EXP_SPARE3 +}; + +enum range_scale_t +{ + NM80, + NM40, + NM20, + NM10 +}; + +enum bars_num_t +{ + BARS_1=0, + BARS_2, + BARS_SPARE, + BARS_4 +}; + +enum scan_width_t +{ + W60, + W30, + W25, + W15 +}; + +enum velocity_scale_t { + KTS2400, + KTS1200 +}; + +typedef idd_bitfield_u16_t rws_submode_field_t; +typedef idd_bitfield_u16_t spot_selection_field_t; +typedef idd_bitfield_u16_t acm_submode_field_t; +typedef idd_bitfield_u16_t gm_submode_field_t; +typedef idd_bitfield_u16_t expand_field_t; +typedef idd_bitfield_u16_t range_scale_field_t; +typedef idd_bitfield_u16_t bars_num_field_t; +typedef idd_bitfield_u16_t scan_width_field_t; +typedef idd_bitfield_u16_t velocity_scale_field_t; + +//Word A2-02: Radar Functions and Parameters (word#1) + +union rdr_fun_and_param1_t { + rws_submode_field_t rws_submode; + spot_selection_field_t spot; + acm_submode_field_t acm_submode; + gm_submode_field_t gm_submode; + expand_field_t expand; + range_scale_field_t range_scale; + bars_num_field_t bars_num; + scan_width_field_t scan_width; + velocity_scale_field_t velocity_scale; + spare1_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word A2-03: Radar Functions and Parameters (word#2) + +enum range_scale_extension_t //TODO: so far not used +{ + NM_LEGACY, + NM160, + NM60, + NM2_5 +}; + +enum zoom_t +{ + ZOOM_NOT_ATIVE, + ZOOM_IN, + ZOOM_OUT, + ZOOM_SPARE +}; + +enum sar_map_orientation_t +{ + SAR_AC_NOSE_REFERENCE, + SAR_SLANT_CROSS_RANGE, + NOT_USED_1, + NOT_USED_2 +}; + +typedef idd_bitfield_u16_t spare0_4_field_t; + +typedef idd_bitfield_u16_t zoom_field_t; + +typedef idd_bitfield_u16_t sar_map_orientation_field_t; + +typedef idd_bitfield_u16_t spare8_15_field_t; + +//Word A2-03: Radar Functions and Parameters (word#2) + +union rdr_fun_and_param2_t { + spare0_4_field_t spare_0_4; + + zoom_field_t zoom; + sar_map_orientation_field_t sar_map_orientation; + + spare8_15_field_t spare_8_15; + + icd_raw_word_t raw; +}; + +//Message A2: Radar Operation Command + +struct msg_rdr_operation_command_t +{ + //Word A2-01: Radar Mode Command + rdr_mode_command_word_t rdr_mode_command; + + //Word A2-02: Radar Functions and Parameters (word#1) + rdr_fun_and_param1_t param1; + + //Word A2-03: Radar Functions and Parameters (word#2) + rdr_fun_and_param2_t param2; +}; + +ICD_STATIC_CHECK_SIZE_WORD(msg_rdr_operation_command_t, LEN_A2_rdr_operation_command); + +//**A3: Graphic settings + +//Word A3-01: Graphic Order +enum bulls_eye_identifier_t +{ + NO_BULLS_EYE, + BULLS_EYE_WAYPOINT_01, + BULLS_EYE_WAYPOINT_02, + BULLS_EYE_WAYPOINT_03 +}; + +typedef idd_bitfield_u16_t bulls_eye_identifier_field_t; + +typedef idd_bitfield_u16_t spare5_15_field_t; + +typedef idd_bitfield_u16_t waypoint_01_flag_field_t; +typedef idd_bitfield_u16_t waypoint_02_flag_field_t; +typedef idd_bitfield_u16_t waypoint_03_flag_field_t; +typedef idd_bitfield_u16_t intercept_flight_director_field_t; +typedef idd_bitfield_u16_t break_away_cue_field_t; +typedef idd_bitfield_u16_t intercept_zones_and_target_tip_field_t; +typedef idd_bitfield_u16_t time_to_go_to_cursor_field_t; +typedef idd_bitfield_u16_t allowable_steering_error_circle_field_t; +typedef idd_bitfield_u16_t attack_steering_cue_field_t; + + + +union graphic_order_t +{ + waypoint_01_flag_field_t waypoint_01_flag; + waypoint_02_flag_field_t waypoint_02_flag; + waypoint_03_flag_field_t waypoint_03_flag; + + intercept_flight_director_field_t intercept_flight_director; + break_away_cue_field_t break_away_cue; + intercept_zones_and_target_tip_field_t intercept_zones_and_target_tip; + time_to_go_to_cursor_field_t time_to_go_to_cursor; + allowable_steering_error_circle_field_t allowable_steering_error_circle; + attack_steering_cue_field_t attack_steering_cue; + + bulls_eye_identifier_field_t bulls_eye_identifier; + + spare5_15_field_t spare; +}; + +//Word A3-02: Time-to-Go to Cursor +//todo lsb +typedef idd_bitfield_u16_t time_to_go_to_cursor_t; + +//Word A3-03/04: Waypoint 1 Latitude, Selector and Qualifier + + +//typedef idd_bitfield_u16_t waypoint_lat_msw_t; +//typedef idd_bitfield_u16_t waypoint_lat_lsw_t; +//typedef idd_bitfield_u32_t waypoint_lat_t; + +#define ICD1553_WAYPOINT_LATLON_LSB ((5.96046E-8f)*GC_K_PI) + +IDD_FIXEDPOINT_TRAIT_LSB_DECLARATION(icd_waypoint_latlon_lsb, float, ICD1553_WAYPOINT_LATLON_LSB); +typedef idd_fixedpoint32_bitfield waypoint_latlon_t; + +//typedef idd_fixedpoint_bitfield cas_t; + +//IDD_FIXEDPOINT_TRAIT_LSB_DECLARATION(icd_semicircle2_lsb, float, ICD1553_SEMICIRCLE2_RAD_LSB); +//typedef idd_fixedpoint16x semicircle2_t; +//typedef idd_bitfield_u32_t waypoint_lat_t; + +enum waypoint_fyt_selection_t +{ + WAYPOINT, + FYT +}; + + +typedef idd_bitfield_gap_low_t waypoint_fyt_selection_field_t; + +typedef idd_bitfield_gap_low_t waypoint_qualifier_validity_t; + +enum waypoint_qualifier_value_t +{ + WAYPOINT_LEFT, + WAYPOINT_RIGHT, + WAYPOINT_DTK, + WAYPOINT_MARK +}; + +typedef idd_bitfield_gap_low_t waypoint_qualifier_value_field_t; + +typedef idd_bitfield_gap_low_t dspare3_15_field_t; + +union waypoint_lat_sel_qual_t +{ + //waypoint_lat_msw_t waypoint_lat_msw; + //waypoint_lat_lsw_t waypoint_lat_lsw; + + //waypoint_lat_t waypoint_lat; + waypoint_latlon_t waypoint_lat; + + waypoint_fyt_selection_field_t waypoint_fyt_selection_field; + + waypoint_qualifier_validity_t waypoint_qualifier_validity; + + waypoint_qualifier_value_field_t waypoint_qualifier_value_field; + + dspare3_15_field_t spare; + + icd_raw_word_t raw[2]; +}; + +//Word A3-05/06: Waypoint 1 Longitude and Code +//typedef idd_bitfield_u16_t waypoint_lon_msw_t; +//typedef idd_bitfield_u16_t waypoint_lon_lsw_t; + +//typedef idd_bitfield_u32_t waypoint_lon_t; + +//typedef idd_bitfield_u32_t waypoint_lon_t; + +#define ICD1553_WAYPOINT_SYMBOL_MIN 0 +#define ICD1553_WAYPOINT_SYMBOL_MAX 99 +//typedef idd_range_bitfield_t waypoint_code_t; +typedef idd_bitfield_gap_low_t waypoint_code_t; + +//typedef idd_bitfield_u16_t waypoint_code_t; + +union waypoint_lon_code_t +{ + waypoint_latlon_t waypoint_lon; + waypoint_code_t waypoint_code; + + icd_raw_word_t raw[2]; +}; + +//Word A3-15: Intercept Flight Director X and Selectors +//Y-Display coord. of the IFD symbol +//todo lsb +typedef idd_bitfield_u16_t display_coord_t; + +typedef idd_bitfield_u16_t spare7_15_field_t; + +typedef idd_bitfield_u16_t spare5_15_field_t; + +enum intercept_mode_selector_t +{ + REAR, + ALL +}; + +typedef idd_bitfield_u16_t intercept_mode_selector_field_t; + +enum normal_dashed_selector_t +{ + SELECTOR_NORMAL, + SELECTOR_DASHED +}; + +typedef idd_bitfield_u16_t normal_dashed_selector_field_t; + +//Word A3-15: Intercept Flight Director X and Selectors +union intercept_flight_director_x_and_selectors_t +{ + display_coord_t x_display_coord_of_the_ifd_symbol; + + intercept_mode_selector_field_t intercept_mode_selector; + + normal_dashed_selector_field_t normal_dashed_selector; + + spare5_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word A3-16: Intercept Flight Director Y +union intercept_flight_director_y_t +{ + display_coord_t y_display_coord_of_the_ifd_symbol; + spare7_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word A3-17: Intercept Zone Rmin +union intercept_zone_r_min_t +{ + display_coord_t y_display_coord_of_the_r_min_posit_of_the_intercept_zone; + spare7_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word A3-18: Intercept Zone Rmax +union intercept_zone_r_max_t +{ + display_coord_t y_display_coord_of_the_r_max_posit_of_the_intercept_zone; + spare7_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word A3-19: No Escape Zone Rmax +union no_escape_zone_r_max_t +{ + display_coord_t y_display_coord_of_the_r_max_posit_of_the_no_escape_zone; + spare7_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word A3-20: Intercept Zone Target Tip +union intercept_zone_target_tip_t +{ + display_coord_t y_display_coord_of_the_intercept_zone_target_tip; + spare7_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Radius of the ASEC +//todo lsb +typedef idd_bitfield_u16_t radius_of_the_asec_t; + +enum asec_blink_normal_t +{ + ASEC_NORMAL, + ASEC_BLINK +}; +typedef idd_bitfield_u16_t normal_blink_selector_t; + +typedef idd_bitfield_u16_t spare6_15_field_t; + +//Word A3-21: Allowable Steering Error Circle (ASEC) Radius and Selector +union asec_radius_and_selector_t +{ + radius_of_the_asec_t radius_of_the_asec; + normal_blink_selector_t normal_blink_selector; + spare6_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word A3-22: Attack Steering Cue (ASC) X and Selector +union asc_x_and_selector_t +{ + display_coord_t x_display_coord_of_the_asc_symbol; + normal_blink_selector_t normal_blink_selector; + spare6_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word A3-23: Attack Steering Cue (ASC) Y +union asc_y_t +{ + display_coord_t y_display_coord_of_the_asc_symbol; + spare7_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word A3-24: Tracked Target Info (Intercept and Data Link) +typedef idd_bitfield_u16_t hpt_within_intercept_zone_selector_t; +typedef idd_bitfield_u16_t hpt_data_link_correlation_selector_t; + +enum friend_foe_selector_t +{ + FRIEND, + FOE +}; +typedef idd_bitfield_u16_t hpt_friend_foe_selector_field_t; + +typedef idd_bitfield_u16_t spt_within_intercept_zone_selector_t; +typedef idd_bitfield_u16_t spt_data_link_correlation_selector_t; +typedef idd_bitfield_u16_t spt_friend_foe_selector_field_t; + +typedef idd_bitfield_u16_t tws_tracket_tgt_01_within_int_zone_selector_t; +typedef idd_bitfield_u16_t tws_tracket_tgt_02_within_int_zone_selector_t; +typedef idd_bitfield_u16_t tws_tracket_tgt_03_within_int_zone_selector_t; +typedef idd_bitfield_u16_t tws_tracket_tgt_04_within_int_zone_selector_t; +typedef idd_bitfield_u16_t tws_tracket_tgt_05_within_int_zone_selector_t; +typedef idd_bitfield_u16_t tws_tracket_tgt_06_within_int_zone_selector_t; +typedef idd_bitfield_u16_t tws_tracket_tgt_07_within_int_zone_selector_t; +typedef idd_bitfield_u16_t tws_tracket_tgt_08_within_int_zone_selector_t; +typedef idd_bitfield_u16_t tws_tracket_tgt_09_within_int_zone_selector_t; +typedef idd_bitfield_u16_t tws_tracket_tgt_10_within_int_zone_selector_t; + +typedef idd_bitfield_u16_t spare2_15_field_t; + +union tracked_target_info_t +{ + hpt_within_intercept_zone_selector_t hpt_within_intercept_zone_selector; + hpt_data_link_correlation_selector_t hpt_data_link_correlation_selector; + hpt_friend_foe_selector_field_t hpt_friend_foe_selector_field; + + spt_within_intercept_zone_selector_t spt_within_intercept_zone_selector; + spt_data_link_correlation_selector_t spt_data_link_correlation_selector; + spt_friend_foe_selector_field_t spt_friend_foe_selector_field; + + tws_tracket_tgt_01_within_int_zone_selector_t tws_tracket_tgt_01_within_int_zone_selector; + tws_tracket_tgt_02_within_int_zone_selector_t tws_tracket_tgt_02_within_int_zone_selector; + tws_tracket_tgt_03_within_int_zone_selector_t tws_tracket_tgt_03_within_int_zone_selector; + tws_tracket_tgt_04_within_int_zone_selector_t tws_tracket_tgt_04_within_int_zone_selector; + tws_tracket_tgt_05_within_int_zone_selector_t tws_tracket_tgt_05_within_int_zone_selector; + tws_tracket_tgt_06_within_int_zone_selector_t tws_tracket_tgt_06_within_int_zone_selector; + tws_tracket_tgt_07_within_int_zone_selector_t tws_tracket_tgt_07_within_int_zone_selector; + tws_tracket_tgt_08_within_int_zone_selector_t tws_tracket_tgt_08_within_int_zone_selector; + + tws_tracket_tgt_09_within_int_zone_selector_t tws_tracket_tgt_09_within_int_zone_selector; + tws_tracket_tgt_10_within_int_zone_selector_t tws_tracket_tgt_10_within_int_zone_selector; + //spare2_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word A3-25/26: HPT Call Sign +union hpt_call_sign_t +{ + call_sign_character1_msw_t character1; + call_sign_character2_msw_t character2; + call_sign_character3_lsw_t character3; + call_sign_character4_lsw_t character4; + + icd_raw_word_t raw[2]; +}; + +//Word A3-27/28: SPT Call Sign +/*union spt_call_sign_t +{ + call_sign_character1_msw_t character1; + call_sign_character2_msw_t character2; + call_sign_character3_lsw_t character3; + call_sign_character4_lsw_t character4; + + icd_raw_word_t raw[2]; +};*/ + +//Word A3-27: Reserved +union a3_27_reserved_t +{ + icd_raw_word_t raw; +}; + +typedef idd_bitfield_u16_t track_id_of_tws_tracked_tgt_xx_t; +typedef idd_bitfield_u16_t track_id_of_tws_tracked_tgt_yy_t; + +//Word A3-28: Track Id of TWS Tracked Targets 09 and 10 +union track_id_of_tws_tracked_targets_09_and_10_t +{ + track_id_of_tws_tracked_tgt_xx_t track_id_of_tws_tracked_tgt_09; + track_id_of_tws_tracked_tgt_yy_t track_id_of_tws_tracked_tgt_10; + + icd_raw_word_t raw; +}; + +//Word A3-29: Track Id of TWS Tracked Targets 01 and 02 +union track_id_of_tws_tracked_targets_01_and_02_t +{ + track_id_of_tws_tracked_tgt_xx_t track_id_of_tws_tracked_tgt_01; + track_id_of_tws_tracked_tgt_yy_t track_id_of_tws_tracked_tgt_02; + + icd_raw_word_t raw; +}; + +//Word A3-30: Track Id of TWS Tracked Targets 03 and 04 +union track_id_of_tws_tracked_targets_03_and_04_t +{ + track_id_of_tws_tracked_tgt_xx_t track_id_of_tws_tracked_tgt_03; + track_id_of_tws_tracked_tgt_yy_t track_id_of_tws_tracked_tgt_04; + + icd_raw_word_t raw; +}; + +//Word A3-31: Track Id of TWS Tracked Targets 05 and 06 +union track_id_of_tws_tracked_targets_05_and_06_t +{ + track_id_of_tws_tracked_tgt_xx_t track_id_of_tws_tracked_tgt_05; + track_id_of_tws_tracked_tgt_yy_t track_id_of_tws_tracked_tgt_06; + + icd_raw_word_t raw; +}; + +//Word A3-32: Track Id of TWS Tracked Targets 07 and 08 +union track_id_of_tws_tracked_targets_07_and_08_t +{ + track_id_of_tws_tracked_tgt_xx_t track_id_of_tws_tracked_tgt_07; + track_id_of_tws_tracked_tgt_yy_t track_id_of_tws_tracked_tgt_08; + + icd_raw_word_t raw; +}; + +//Message A3: Graphic Settings + +struct waypoint_data_t +{ + //Word A3-03/04: Waypoint 1 Latitude, Selector and Qualifier + waypoint_lat_sel_qual_t waypoint_lat_sel_qual; + + //Word A3-05/06: Waypoint 1 Longitude and Code + waypoint_lon_code_t waypoint_lon_code; +}; + +struct waypoint_data_array_t +{ + waypoint_data_t wp[3]; +}; + +struct msg_graphic_setting_t +{ + //Word A3-01: Graphic Order + graphic_order_t graphic_order; + + //Word A3-02: Time-to-Go to Cursor + time_to_go_to_cursor_t time_to_go_to_cursor; + + waypoint_data_array_t waypoints; + +#if 0 + //Word A3-03/04: Waypoint 1 Latitude, Selector and Qualifier + waypoint_lat_sel_qual_t waypoint_01_lat_sel_qual; + + //Word A3-05/06: Waypoint 1 Longitude and Code + waypoint_lon_code_t waypoint_01_lon_code; + + //Word A3-07/08: Waypoint 2 Latitude, Selector and Qualifier + waypoint_lat_sel_qual_t waypoint_02_lat_sel_qual; + + //Word A3-09/10: Waypoint 2 Longitude and Code + waypoint_lon_code_t waypoint_02_lon_code; + + //Word A3-11/12: Waypoint 3 Latitude, Selector and Qualifier + waypoint_lat_sel_qual_t waypoint_03_lat_sel_qual; + + //Word A3-13/14: Waypoint 3 Longitude and Code + waypoint_lon_code_t waypoint_03_lon_code; +#endif + + //Word A3-15: Intercept Flight Director X and Selectors + intercept_flight_director_x_and_selectors_t intercept_flight_director_x_and_selectors; + + //Word A3-16: Intercept Flight Director Y + intercept_flight_director_y_t intercept_flight_director_y; + + //Word A3-17: Intercept Zone Rmin + intercept_zone_r_min_t intercept_zone_r_min; + + //Word A3-18: Intercept Zone Rmax + intercept_zone_r_max_t intercept_zone_r_max; + + //Word A3-19: No Escape Zone Rmax + no_escape_zone_r_max_t no_escape_zone_r_max; + + //Word A3-20: Intercept Zone Target Tip + intercept_zone_target_tip_t intercept_zone_target_tip; + + //Word A3-21: Allowable Steering Error Circle (ASEC) Radius and Selector + asec_radius_and_selector_t asec_radius_and_selector; + + //Word A3-22: Attack Steering Cue (ASC) X and Selector + asc_x_and_selector_t asc_x_and_selector; + + //Word A3-23: Attack Steering Cue (ASC) Y + asc_y_t asc_y; + + //Word A3-24: Tracked Target Info (Intercept and Data Link) + tracked_target_info_t tracked_target_info; + + //Word A3-25/26: HPT Call Sign + hpt_call_sign_t hpt_call_sign; + + //Word A3-27/28: SPT Call Sign + //spt_call_sign_t spt_call_sign; + + //Word A3-27 - reserved + a3_27_reserved_t a3_27_reserved; + + //Word A3-28: Track Id of TWS Tracked Targets 09 and 10 + track_id_of_tws_tracked_targets_09_and_10_t track_id_of_tws_tracked_targets_09_and_10; + + //Word A3-29: Track Id of TWS Tracked Targets 01 and 02 + track_id_of_tws_tracked_targets_01_and_02_t track_id_of_tws_tracked_targets_01_and_02; + + //Word A3-30: Track Id of TWS Tracked Targets 03 and 04 + track_id_of_tws_tracked_targets_03_and_04_t track_id_of_tws_tracked_targets_03_and_04; + + //Word A3-31: Track Id of TWS Tracked Targets 05 and 06 + track_id_of_tws_tracked_targets_05_and_06_t track_id_of_tws_tracked_targets_05_and_06; + + //Word A3-32: Track Id of TWS Tracked Targets 07 and 08 + track_id_of_tws_tracked_targets_07_and_08_t track_id_of_tws_tracked_targets_07_and_08; +}; + +ICD_STATIC_CHECK_SIZE_WORD(msg_graphic_setting_t, LEN_A3_graphic_settings); + +//**A4: Navigation Data and Acquisition Cursor Data + +//typedef icd_raw_word_t relative_timetag_t; +//IDD_FIXEDPOINT_TRAIT_DECLARATION(icd_timetag_lsb, float, 0.064f, 0, 4000.0f, 0.064f, 0.064f); +//typedef idd_fixedpoint relative_timetag_t; + +typedef idd_scaled_integer relative_timetag_t; + +#define ICD1553_ACCELERATION_FEET_LSB (0.03125) +#define ICD1553_ACCELERATION_METERS_LSB (ICD1553_ACCELERATION_FEET_LSB/GC_K_METERS_TO_FEETS) + +IDD_FIXEDPOINT_TRAIT_LSB_DECLARATION(icd_acceleration_lsb, float, ICD1553_ACCELERATION_METERS_LSB); +typedef idd_fixedpoint acceleration_t; + +IDD_FIXEDPOINT_TRAIT_LSB_DECLARATION(icd_semicircle_lsb, float, ICD1553_SEMICIRCLE_RAD_LSB); +typedef idd_fixedpoint semicircle_t; + +#define ICD1553_TAS_KNOTS_LSB (0.125f) +#define ICD1553_TAS_MS_LSB (ICD1553_TAS_KNOTS_LSB*GC_K_KNOTS_TO_MS) + +IDD_FIXEDPOINT_TRAIT_LSB_DECLARATION(icd_tas_lsb, float, ICD1553_TAS_MS_LSB); +typedef idd_fixedpoint tas_t; + +#define ICD1553_CAS_KNOTS_LSB (1.0) +#define ICD1553_CAS_MS_LSB (ICD1553_CAS_KNOTS_LSB*GC_K_KNOTS_TO_MS) + +IDD_FIXEDPOINT_TRAIT_LSB_DECLARATION(icd_cas_lsb, float, ICD1553_CAS_MS_LSB); +//typedef idd_fixedpoint cas_t; +typedef idd_fixedpoint_bitfield cas_t; + +#define ICD1553_BARO_ALT_FEET_LSB (4.0) +#define ICD1553_BARO_ALT_METERS_LSB (ICD1553_BARO_ALT_FEET_LSB*GC_K_FEETS_TO_METERS) + +IDD_FIXEDPOINT_TRAIT_LSB_DECLARATION(icd_baro_altitude_lsb, float, ICD1553_BARO_ALT_METERS_LSB); +typedef idd_fixedpoint baro_altitude_t; + +#define ICD1553_RADIO_ALT_FEET_LSB (2.0) +#define ICD1553_RADIO_ALT_METERS_LSB (ICD1553_RADIO_ALT_FEET_LSB*GC_K_FEETS_TO_METERS) + +IDD_FIXEDPOINT_TRAIT_LSB_DECLARATION(icd_radio_altitude_lsb, float, ICD1553_RADIO_ALT_METERS_LSB); +typedef idd_fixedpoint radio_altitude_t; + +#define ICD1553_SPOI_ALT_FEET_LSB (1.0) +#define ICD1553_SPOI_ALT_METERS_LSB (ICD1553_SPOI_ALT_FEET_LSB*GC_K_FEETS_TO_METERS) + +IDD_FIXEDPOINT_TRAIT_LSB_DECLARATION(icd_spoi_altitude_lsb, float, ICD1553_SPOI_ALT_METERS_LSB); +typedef idd_fixedpoint spoi_altitude_t; + +#define ICD1553_GEOPOS_SC_LSB (4.65661E-10) +#define ICD1553_GEOPOS_RAD_LSB (ICD1553_GEOPOS_SC_LSB*GC_K_PI) + +IDD_FIXEDPOINT_TRAIT_LSB_DECLARATION(icd_latlong_altitude_lsb, float, ICD1553_GEOPOS_RAD_LSB); +typedef idd_fixedpoint16x latlong_t; + +#define ICD1553_CRS_SLAVE_RNG_METERS_LSB (8*GC_K_FEETS_TO_METERS) + +IDD_FIXEDPOINT_TRAIT_LSB_DECLARATION(icd_crs_range_slave_lsb, float, ICD1553_CRS_SLAVE_RNG_METERS_LSB); +typedef idd_fixedpoint crs_slave_range_t; + +template struct nav_data_invalid_field_t: public idd_bitfield_u16_t {}; + +typedef idd_bitfield_u16_t navigation_invalid_t; +typedef idd_bitfield_u16_t attitude_invalid_t; +typedef idd_bitfield_u16_t baro_intertial_altitude_invalid_t; +typedef idd_bitfield_u16_t correct_baro_altitude_invalid_t; +typedef idd_bitfield_u16_t radio_altimeter_invalid_t; +typedef idd_bitfield_u16_t spoi_altitude_invalid_t; +typedef idd_bitfield_u16_t spoi_position_invalid_t; +typedef idd_bitfield_u16_t tas_invalid_t; +typedef idd_bitfield_u16_t cas_invalid_t; +typedef idd_bitfield_u16_t present_position_invalid_t; +typedef idd_bitfield_u16_t ant_slew_valid_field_t; +typedef idd_bitfield_u16_t crs_rate_invalid_field_t; +typedef idd_bitfield_u16_t crs_slave_selector_field_t; +typedef idd_bitfield_u16_t crs_zero_valid_field_t; +typedef idd_bitfield_u16_t crs_snowplough_valid_field_t; + + +union a4_validity_and_slew_t // Word A4-01: Validity and Slew Data +{ + navigation_invalid_t navigation_invalid; + attitude_invalid_t attitude_invalid; + baro_intertial_altitude_invalid_t baro_intertial_altitude_invalid; + correct_baro_altitude_invalid_t correct_baro_altitude_invalid; + radio_altimeter_invalid_t radio_altimeter_invalid; + spoi_altitude_invalid_t spoi_altitude_invalid; + spoi_position_invalid_t spoi_position_invalid; + tas_invalid_t tas_invalid; + cas_invalid_t cas_invalid; + present_position_invalid_t present_position_invalid; + + ant_slew_valid_field_t ant_slew_valid; + crs_rate_invalid_field_t crs_rate_invalid; + crs_slave_selector_field_t crs_normal_slave; + crs_zero_valid_field_t crs_zero_valid_field; + crs_snowplough_valid_field_t crs_snowplough_valid_field; + + icd_raw_word_t raw; +}; + +//A5-19: Rate of motion of acquisition cursor x +typedef idd_bitfield_i16_t crs_motion_rate_field_t; +typedef idd_bitfield_u16_t crs_ghost_selector_field_t; +typedef idd_bitfield_u16_t crs_dtt_selector_field_t; +typedef idd_bitfield_u16_t crs_sar_selector_field_t; +typedef idd_bitfield_u16_t crs_abs_pos_field_t; +typedef idd_bitfield_u16_t crs_motion_abs_field_t; + +//typedef idd_bitfield_u16_t clearance_plane_distance_t; +typedef idd_scaled_integer clearance_plane_distance_t; + +#define ICD1553_WIND_KNOTS_LSB (0.0625) +#define ICD1553_WIND_MS_LSB (ICD1553_WIND_KNOTS_LSB*GC_K_KNOTS_TO_MS) +IDD_FIXEDPOINT_TRAIT_LSB_DECLARATION(icd_wind_lsb, float, ICD1553_WIND_MS_LSB); +typedef idd_fixedpoint_bitfield wind_speed_t; + + +union crs_motion_x_t { + crs_motion_rate_field_t rate; + crs_ghost_selector_field_t ghost; + crs_dtt_selector_field_t dtt; + crs_sar_selector_field_t sar; + + crs_motion_abs_field_t abs_pos; + crs_abs_pos_field_t abs; + + icd_raw_word_t raw; +}; + +//A4-20: Rate of motion of acq cursor y + +union crs_motion_y_t { + crs_motion_rate_field_t rate; + + crs_motion_abs_field_t abs_pos; + + icd_raw_word_t raw; +}; + +//Message A4: Navigation Data and Acquisition Cursor Data + +struct msg_nav_data_and_cursor_t +{ + //Word A4-01: Validity and Slew Data + a4_validity_and_slew_t validity_and_slew; + + //Word A4-02: Time Tag + relative_timetag_t timetag; + + //Word A4-03: Present True Heading + semicircle_t true_heading; + + //Word A4-04: Present Magnetic Heading + semicircle_t magnetic_heading; + + //Word A4-05: X Acceleration + acceleration_t x_acceleration; + + //Word A4-06: Y Acceleration + acceleration_t y_acceleration; + + //Word A4-07: Z Acceleration + acceleration_t z_acceleration; + + //Word A4-08: True Air Speed (DADC) + tas_t true_air_speed; + + //Word A4-09: Ownship Calibrated Air Speed + cas_t calibrated_air_speed; + + //Word A4-10: Barometric / Inertial Altitude + baro_altitude_t baro_altitude; + + //Word A4-11: Corrected Barometric Altitude + baro_altitude_t corrected_baro_altitude; + + //Word A4-12: Radio Altimeter Altitude + radio_altitude_t radio_altitude; + + //Word A4-13: SPOI Altitude Above Sea Level + spoi_altitude_t spoi_baro_altitude; + + //Word A4-14: Clearance Plane Distance + clearance_plane_distance_t clearance_plane_distance; + + //Word A4-15: Wind Direction + semicircle_t wind_direction; + + //Word A4-16: Wind Speed + wind_speed_t wind_speed; + + //Word A4-17: AZ Antenna Demand + semicircle_t az_antenna_demand; + + //Word A4-18: EL Antenna Demand + semicircle_t el_antenna_demand; + + //Word A4-19: Rate of Motion of Acquisition Cursor X and Selectors + crs_motion_x_t acq_crs_x; + + //Word A4-20: Rate of Motion of Acquisition Cursor Y + crs_motion_y_t acq_crs_y; + + //Word A4-21: Acquisition Cursor - Range + crs_slave_range_t acq_crs_rng; + + //Word A4-22: Acquisition Cursor - Azimuth + semicircle_t acq_crs_az; + + //Word A4-23: Present Position Data Time Tag + relative_timetag_t ppos_timetag; + + //Word A4-24/25: Present Position Latitude + latlong_t ppos_lat; + + //Word A4-26/27: Present Position Longitude + latlong_t ppos_lon; + + //Word A4-28/29: SPOI Latitude + latlong_t spoi_lat; + + //Word A4-30/31: SPOI Longitude + latlong_t spoi_lon; +}; + +ICD_STATIC_CHECK_SIZE_WORD(msg_nav_data_and_cursor_t, LEN_A4_navigation_andcursor_data); + +//**A5: INU High Speed Vector + +#define ICD1553_VELOCITY_FEET_LSB (3.81470E-06) +#define ICD1553_VELOCITY_METERS_LSB (ICD1553_VELOCITY_FEET_LSB*GC_K_FEETS_TO_METERS) + +IDD_FIXEDPOINT_TRAIT_LSB_DECLARATION(icd_velocity_lsb, float, ICD1553_VELOCITY_METERS_LSB); +typedef idd_fixedpoint16x velocity_t; + +#define ICD1553_ATTITUDE_RATE_SC_LSB (1.22070E-04) +#define ICD1553_ATTITUDE_RATE_RAD_LSB (ICD1553_ATTITUDE_RATE_SC_LSB*GC_K_PI) + +IDD_FIXEDPOINT_TRAIT_LSB_DECLARATION(attitude_rate_lsb, float, ICD1553_ATTITUDE_RATE_RAD_LSB); + +typedef idd_fixedpoint attitude_rate_t; + +#define ICD1553_ANGULAR_RATE_SC_LSB (2.44141E-04) +#define ICD1553_ALGULAR_RATE_RAD_LSB (ICD1553_ANGULAR_RATE_SC_LSB*GC_K_PI) + +IDD_FIXEDPOINT_TRAIT_LSB_DECLARATION(angular_rate_lsb, float, ICD1553_ALGULAR_RATE_RAD_LSB); + +typedef idd_fixedpoint ang_acc_t; + +//Message A5: INU High Speed Vector + +struct msg_inu_high_speed_t +{ + //Word A5-01: INU Mode Word, ignorata dal radar + icd_raw_word_t mode_word; + + //Word A5-02: INU Control Word 2 (Time Tag) + relative_timetag_t timetag; + + //Word A5-03/04: X Velocity + velocity_t x_vel; + + //Word A5-05/06: Y Velocity + velocity_t y_vel; + + //Word A5-07/08: Z Velocity + velocity_t z_vel; + + //Word A5-09: Platform Azimuth + semicircle_t platform_azimuth; + + //Word A5-10: Roll + semicircle_t roll; + + //Word A5-11: Pitch + semicircle_t pitch; + + //Word A5-12: Roll Rate + attitude_rate_t roll_rate; + + //Word A5-13: Pitch Rate + attitude_rate_t pitch_rate; + + //Word A5-14: Yaw Rate + attitude_rate_t yaw_rate; + + //Word A5-15: Longitudinal Acceleration (nx) + acceleration_t longitudinal_acc; + + //Word A5-16: Lateral Acceleration (ny) + acceleration_t lateral_acc; + + //Word A5-17: Normal Acceleration (nz) + acceleration_t normal_acc; + + //Word A5-18: Platform Azimuth Time Tag + relative_timetag_t ptaz_tt; + + //Word A5-19: Roll Time Tag + relative_timetag_t roll_tt; + + //Word A5-20: Pitch Time Tag + relative_timetag_t pitch_tt; + + //Word A5-21: Roll Axis Angular Acceleration + ang_acc_t roll_ang_acc; + + //Word A5-22: Pitch Axis Angular Acceleration + ang_acc_t pitch_ang_acc; + + //Word A5-23: Yaw Axis Angular Acceleration + ang_acc_t yaw_ang_acc; +}; + +ICD_STATIC_CHECK_SIZE_WORD(msg_inu_high_speed_t, LEN_A5_inu_high_speed_vector); + +//**A6: N/A + +//**A7: Data Link Targets (Message#1) + +//A7-01: DL Targets Validity +enum dl_target_validity_t +{ + DL_TGT_VALIDITY_NOT_ACTIVE, + DL_TGT_VALIDITY_ACTIVE +}; + +typedef idd_bitfield_u16_t dl_target_validity_01_field_t; +typedef idd_bitfield_u16_t dl_target_validity_02_field_t; +typedef idd_bitfield_u16_t dl_target_validity_03_field_t; +typedef idd_bitfield_u16_t dl_target_validity_04_field_t; +typedef idd_bitfield_u16_t dl_target_validity_05_field_t; +typedef idd_bitfield_u16_t dl_target_validity_06_field_t; +typedef idd_bitfield_u16_t dl_target_validity_07_field_t; +typedef idd_bitfield_u16_t dl_target_validity_08_field_t; +typedef idd_bitfield_u16_t dl_target_validity_09_field_t; +typedef idd_bitfield_u16_t dl_target_validity_10_field_t; + +typedef idd_bitfield_u16_t spare6_15_field_t; + +union dl_target_xx_validity_t // Word A7-01: DL Targets Validity +{ + dl_target_validity_01_field_t dl_target_validity_01; + dl_target_validity_02_field_t dl_target_validity_02; + dl_target_validity_03_field_t dl_target_validity_03; + dl_target_validity_04_field_t dl_target_validity_04; + dl_target_validity_05_field_t dl_target_validity_05; + dl_target_validity_06_field_t dl_target_validity_06; + dl_target_validity_07_field_t dl_target_validity_07; + dl_target_validity_08_field_t dl_target_validity_08; + dl_target_validity_09_field_t dl_target_validity_09; + dl_target_validity_10_field_t dl_target_validity_10; + + spare6_15_field_t spare; + + icd_raw_word_t raw; +}; + +//A7-02, A7-08, A7-14, A7-20, A7-26: Target 01/02/03/04/05 Position X +//TODO lsb +//typedef idd_bitfield_i16_t target_position_x_t; + +#define ICD1553_DL_POSITION_METERS_LSB float(1/32767) + +IDD_FIXEDPOINT_TRAIT_DECLARATION(dl_position_lsb, float, ICD1553_DL_POSITION_METERS_LSB, -1, 1, ICD1553_DL_POSITION_METERS_LSB, ICD1553_DL_POSITION_METERS_LSB); + +typedef idd_fixedpoint target_position_x_t; + +//A7-03, A7-09, A7-15, A7-21, A7-27: Target 01/02/03/04/05 Position Y +//TODO lsb +//typedef idd_bitfield_i16_t target_position_y_t; +typedef idd_fixedpoint target_position_y_t; + +//A7-04, A7-10, A7-16, A7-22, A7-28: Target 01/02/03/04/05 Ground Track Angle +//TODO lsb +//typedef idd_bitfield_i16_t target_ground_track_angle_t; +typedef semicircle_t target_ground_track_angle_t; + +//A7-05, A7-11, A7-17, A7-23, A7-29: Target 01/02/03/04/05 Presentation Data + +//Type of Target 01/02/03/04/05 +enum dl_target_type_selector_t +{ + DL_TARGET, + DL_HIGH_PRIORITY_TARGET, //HPL + DL_MEMBER, + DL_HIGH_PRIORITY_MEMBER //HPM +}; + +typedef idd_bitfield_i16_t dl_target_type_selector_field_t; + +//Velocity of Target 01/02/03/04/05 +//TODO lsb +typedef idd_bitfield_i16_t velocity_of_target_t; + + +//Altitude of Target 01/02/03/04/05 +//TODO lsb +typedef idd_bitfield_i16_t altitude_of_target_t; + +//Target 01/02/03/04/05 within Intercept Zone selector +//TODO lsb +typedef idd_bitfield_i16_t intercept_zone_selector_t; + +typedef idd_bitfield_u16_t spare3_15_field_t; + +union target_presentation_data_t +{ + dl_target_type_selector_field_t dl_target_type_selector; + velocity_of_target_t velocity_of_target; + altitude_of_target_t altitude_of_target; + intercept_zone_selector_t intercept_zone_selector; + spare3_15_field_t spare; + icd_raw_word_t raw; +}; + +//A7-06/07, A7-12/13, A7-18/19, A7-24/25, A7-30/31: Target 01/02/03/04/05 Call Sign +union target_call_sign_t +{ + call_sign_character1_msw_t character1_msw; + call_sign_character2_msw_t character2_msw; + call_sign_character3_lsw_t character3_lsw; + call_sign_character4_lsw_t character4_lsw; + icd_raw_word_t raw; +}; + +union target_half_call_sign_t +{ + call_sign_character1_msw_t character1_msw; + call_sign_character2_msw_t character2_msw; + icd_raw_word_t raw; +}; + +//Message A7: Data Link Targets (Message#1) +struct data_link_target_t +{ + target_position_x_t tgt_pos_x; + target_position_y_t tgt_pos_y; + target_ground_track_angle_t tgt_ground_track_angle; + target_presentation_data_t tgt_presentation_data; + target_half_call_sign_t tgt_call_sign[2]; +}; + +struct msg1_data_link_target_t +{ + dl_target_xx_validity_t dl_target_validity; +#if 0 + data_link_target_t dl[5]; +#else + target_position_x_t tgt_01_pos_x; + target_position_y_t tgt_01_pos_y; + target_ground_track_angle_t tgt_01_ground_track_angle; + target_presentation_data_t tgt_01_presentation_data; + target_half_call_sign_t tgt_01_call_sign[2];// + //target_call_sign_t tgt_01_call_sign; + + target_position_x_t tgt_02_pos_x; + target_position_y_t tgt_02_pos_y; + target_ground_track_angle_t tgt_02_ground_track_angle; + target_presentation_data_t tgt_02_presentation_data; + target_half_call_sign_t tgt_02_call_sign[2];// + //target_call_sign_t tgt_02_call_sign; + + target_position_x_t tgt_03_pos_x; + target_position_y_t tgt_03_pos_y; + target_ground_track_angle_t tgt_03_ground_track_angle; + target_presentation_data_t tgt_03_presentation_data; + target_half_call_sign_t tgt_03_call_sign[2];// + //target_call_sign_t tgt_03_call_sign; + + target_position_x_t tgt_04_pos_x; + target_position_y_t tgt_04_pos_y; + target_ground_track_angle_t tgt_04_ground_track_angle; + target_presentation_data_t tgt_04_presentation_data; + target_half_call_sign_t tgt_04_call_sign[2];// + //target_call_sign_t tgt_04_call_sign; + + target_position_x_t tgt_05_pos_x; + target_position_y_t tgt_05_pos_y; + target_ground_track_angle_t tgt_05_ground_track_angle; + target_presentation_data_t tgt_05_presentation_data; + target_half_call_sign_t tgt_05_call_sign[2];// + //target_call_sign_t tgt_05_call_sign; +#endif +}; + +ICD_STATIC_CHECK_SIZE_WORD(msg1_data_link_target_t, LEN_A7_data_link_targets_1); + +//**A8: Data link targets + +//Message A8: Data Link Targets (Message#2) +struct msg2_data_link_target_t +{ +#if 0 + data_link_target_t dl[5]; +#else + target_position_x_t tgt_06_pos_x; + target_position_y_t tgt_06_pos_y; + target_ground_track_angle_t tgt_06_ground_track_angle; + target_presentation_data_t tgt_06_presentation_data; + target_half_call_sign_t tgt_06_call_sign[2];// + //target_call_sign_t tgt_06_call_sign; + + target_position_x_t tgt_07_pos_x; + target_position_y_t tgt_07_pos_y; + target_ground_track_angle_t tgt_07_ground_track_angle; + target_presentation_data_t tgt_07_presentation_data; + target_half_call_sign_t tgt_07_call_sign[2];// + //target_call_sign_t tgt_07_call_sign; + + target_position_x_t tgt_08_pos_x; + target_position_y_t tgt_08_pos_y; + target_ground_track_angle_t tgt_08_ground_track_angle; + target_presentation_data_t tgt_08_presentation_data; + target_half_call_sign_t tgt_08_call_sign[2];// + //target_call_sign_t tgt_08_call_sign; + + target_position_x_t tgt_09_pos_x; + target_position_y_t tgt_09_pos_y; + target_ground_track_angle_t tgt_09_ground_track_angle; + target_presentation_data_t tgt_09_presentation_data; + target_half_call_sign_t tgt_09_call_sign[2];// + //target_call_sign_t tgt_09_call_sign; + + target_position_x_t tgt_10_pos_x; + target_position_y_t tgt_10_pos_y; + target_ground_track_angle_t tgt_10_ground_track_angle; + target_presentation_data_t tgt_10_presentation_data; + target_half_call_sign_t tgt_10_call_sign[2];// + //target_call_sign_t tgt_10_call_sign; +#endif +}; + +ICD_STATIC_CHECK_SIZE_WORD(msg2_data_link_target_t, LEN_A8_data_link_targets_2); + +//Message A9: Reserved RX Message +struct msg_reserved_t +{ + icd_raw_word_t raw[32]; +}; + +ICD_STATIC_CHECK_SIZE_WORD(msg_reserved_t, LEN_A9_reserved_debug); + +//TODO Message A20: reserved development message (da aggiungere al documento) +struct msg_dev0_reserved_t +{ + icd_raw_word_t marker; + + icd_raw_word_t dbg_ctrl; + + icd_raw_word_t dbg_mode; + + icd_raw_word_t gc_dbg_ctrl; + icd_raw_word_t gc_dbg_crs_xy; + + + icd_raw_word_t raw[32-5]; +}; + +ICD_STATIC_CHECK_SIZE_WORD(msg_dev0_reserved_t, 32); + +//****** TX Messages + +//todo Message B1: TWS Status and Targets 1 and 2 + +//Word B1-01: Validity Word and HPT Identifier + +enum tws_target_validity_t +{ + TWS_NOT_ACTIVE, + TWS_ACTIVE +}; + +typedef idd_bitfield_u16_t tws_target_01_validity_field_t; +typedef idd_bitfield_u16_t tws_target_02_validity_field_t; +typedef idd_bitfield_u16_t tws_target_03_validity_field_t; +typedef idd_bitfield_u16_t tws_target_04_validity_field_t; +typedef idd_bitfield_u16_t tws_target_05_validity_field_t; +typedef idd_bitfield_u16_t tws_target_06_validity_field_t; +typedef idd_bitfield_u16_t tws_target_07_validity_field_t; +typedef idd_bitfield_u16_t tws_target_08_validity_field_t; + +enum tws_target_which_t +{ + TARGET_01_HPT, + TARGET_02_HPT, + TARGET_03_HPT, + TARGET_04_HPT, + TARGET_05_HPT, + TARGET_06_HPT, + TARGET_07_HPT, + TARGET_08_HPT, + HPT_NOT_PRESENT +}; + +typedef idd_bitfield_u16_t tws_target_which_field_t; + +typedef idd_bitfield_u16_t spare4_15_field_t; + +union valitidy_word_and_hpt_identifier_t +{ + tws_target_01_validity_field_t track_01_validity; + tws_target_02_validity_field_t track_02_validity; + tws_target_03_validity_field_t track_03_validity; + tws_target_04_validity_field_t track_04_validity; + tws_target_05_validity_field_t track_05_validity; + tws_target_06_validity_field_t track_06_validity; + tws_target_07_validity_field_t track_07_validity; + tws_target_08_validity_field_t track_08_validity; + + tws_target_which_field_t tws_target_which_field; + + spare4_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word B1-02: Track Priority (Targets 01 to 04) + +enum track_priority_t +{ + PRIORITY_LEVEL_1, + PRIORITY_LEVEL_2, + PRIORITY_LEVEL_3, + PRIORITY_LEVEL_4, + PRIORITY_LEVEL_5, + PRIORITY_LEVEL_6, + PRIORITY_LEVEL_7, + PRIORITY_LEVEL_8 +}; + +typedef idd_bitfield_u16_t track_01_priority_field_t; +typedef idd_bitfield_u16_t track_02_priority_field_t; +typedef idd_bitfield_u16_t track_03_priority_field_t; +typedef idd_bitfield_u16_t track_04_priority_field_t; + +typedef idd_bitfield_u16_t spare4_15_field_t; + +union track_priority_01_04_t +{ + track_01_priority_field_t track_01_priority_field; + track_02_priority_field_t track_02_priority_field; + track_03_priority_field_t track_03_priority_field; + track_04_priority_field_t track_04_priority_field; + + spare4_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word B1-03: Track Priority (Targets 05 to 08) +typedef idd_bitfield_u16_t track_05_priority_field_t; +typedef idd_bitfield_u16_t track_06_priority_field_t; +typedef idd_bitfield_u16_t track_07_priority_field_t; +typedef idd_bitfield_u16_t track_08_priority_field_t; + +union track_priority_05_08_t +{ + track_05_priority_field_t track_05_priority_field; + track_06_priority_field_t track_06_priority_field; + track_07_priority_field_t track_07_priority_field; + track_08_priority_field_t track_08_priority_field; + + spare4_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word B1-04: Track Accuracy (Targets 01 to 04) +enum target_accurancy_t +{ + TARGET_ACCURANCY_LEVEL_0, + TARGET_ACCURANCY_LEVEL_1, + TARGET_ACCURANCY_LEVEL_2, + TARGET_ACCURANCY_LEVEL_3 +}; + +typedef idd_bitfield_u16_t track_01_position_accurancy_t; +typedef idd_bitfield_u16_t track_01_velocity_accurancy_t; +typedef idd_bitfield_u16_t track_02_position_accurancy_t; +typedef idd_bitfield_u16_t track_02_velocity_accurancy_t; +typedef idd_bitfield_u16_t track_03_position_accurancy_t; +typedef idd_bitfield_u16_t track_03_velocity_accurancy_t; +typedef idd_bitfield_u16_t track_04_position_accurancy_t; +typedef idd_bitfield_u16_t track_04_velocity_accurancy_t; + +union track_accurancy_01_04_t +{ + track_01_position_accurancy_t track_01_position_accurancy; + track_01_velocity_accurancy_t track_01_velocity_accurancy; + track_02_position_accurancy_t track_02_position_accurancy; + track_02_velocity_accurancy_t track_02_velocity_accurancy; + track_03_position_accurancy_t track_03_position_accurancy; + track_03_velocity_accurancy_t track_03_velocity_accurancy; + track_04_position_accurancy_t track_04_position_accurancy; + track_04_velocity_accurancy_t track_04_velocity_accurancy; + + icd_raw_word_t raw; +}; + +//Word B1-05: Track Accuracy (Targets 05 to 08) +typedef idd_bitfield_u16_t track_05_position_accurancy_t; +typedef idd_bitfield_u16_t track_05_velocity_accurancy_t; +typedef idd_bitfield_u16_t track_06_position_accurancy_t; +typedef idd_bitfield_u16_t track_06_velocity_accurancy_t; +typedef idd_bitfield_u16_t track_07_position_accurancy_t; +typedef idd_bitfield_u16_t track_07_velocity_accurancy_t; +typedef idd_bitfield_u16_t track_08_position_accurancy_t; +typedef idd_bitfield_u16_t track_08_velocity_accurancy_t; + +union track_accurancy_05_08_t +{ + track_05_position_accurancy_t track_05_position_accurancy; + track_05_velocity_accurancy_t track_05_velocity_accurancy; + track_06_position_accurancy_t track_06_position_accurancy; + track_06_velocity_accurancy_t track_06_velocity_accurancy; + track_07_position_accurancy_t track_07_position_accurancy; + track_07_velocity_accurancy_t track_07_velocity_accurancy; + track_08_position_accurancy_t track_08_position_accurancy; + track_08_velocity_accurancy_t track_08_velocity_accurancy; + + icd_raw_word_t raw; +}; + +//Word B1-06: Track Id of TWS Tracked targets 01 and 02 +typedef idd_bitfield_u16_t track_id_of_tws_tracked_tgt_a_t; +typedef idd_bitfield_u16_t track_id_of_tws_tracked_tgt_b_t; + +union track_id_of_tws_tracked_target_01_02_t +{ + track_id_of_tws_tracked_tgt_a_t track_id_of_tws_tracked_tgt_01; + track_id_of_tws_tracked_tgt_b_t track_id_of_tws_tracked_tgt_02; + icd_raw_word_t raw; +}; + +//Word B1-07: Track Id of TWS Tracked targets 03 and 04 +union track_id_of_tws_tracked_target_03_04_t +{ + track_id_of_tws_tracked_tgt_a_t track_id_of_tws_tracked_tgt_03; + track_id_of_tws_tracked_tgt_b_t track_id_of_tws_tracked_tgt_04; + icd_raw_word_t raw; +}; + +//Word B1-08: Track Id of TWS Tracked targets 05 and 06 +union track_id_of_tws_tracked_target_05_06_t +{ + track_id_of_tws_tracked_tgt_a_t track_id_of_tws_tracked_tgt_05; + track_id_of_tws_tracked_tgt_b_t track_id_of_tws_tracked_tgt_06; + icd_raw_word_t raw; +}; + +//Word B1-09: Track Id of TWS Tracked targets 07 and 08 +union track_id_of_tws_tracked_target_07_08_t +{ + track_id_of_tws_tracked_tgt_a_t track_id_of_tws_tracked_tgt_07; + track_id_of_tws_tracked_tgt_b_t track_id_of_tws_tracked_tgt_08; + icd_raw_word_t raw; +}; + +//Word B1-10: HPT X Display Coordinate +#define ICD1553_DISPLAY_PIXEL_MIN 0 +#define ICD1553_DISPLAY_PIXEL_MAX 483 +typedef idd_range_bitfield_t display_coord_htp_target_t; + +typedef idd_bitfield_u16_t spare7_15_field_t; + +union x_display_coord_of_the_hpt_target_t +{ + display_coord_htp_target_t display_coord_htp_target; + + spare7_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word B1-11: HPT Y Display Coordinate +union y_display_coord_of_the_hpt_target_t +{ + display_coord_htp_target_t display_coord_htp_target; + + spare7_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word B1-13: Target 01 Range +//Word B1-22: Target 02 Range +//todo lsb +//typedef idd_bitfield_u16_t range_of_tracked_target_t; +#define ICD1553_TARGET_RANGE_FEET_LSB (8) +#define ICD1553_TARGET_RANGE_METERS_LSB (ICD1553_TARGET_RANGE_FEET_LSB/GC_K_METERS_TO_FEETS) + +IDD_FIXEDPOINT_TRAIT_LSB_DECLARATION(target_range_lsb, float, ICD1553_TARGET_RANGE_METERS_LSB); +typedef idd_fixedpoint range_of_tracked_target_t; + +//Word B1-14: Target 01 Position X +//Word B1-23: Target 02 Position X +//Word B1-15: Target 01 Position Y +//Word B1-24: Target 02 Position Y +#define ICD1553_TWS_POS_XY_LSB 16.0f + +IDD_FIXEDPOINT_TRAIT_DECLARATION(tws_pos_xy_lsb, float, ICD1553_TWS_POS_XY_LSB, -1, 1, ICD1553_TWS_POS_XY_LSB, ICD1553_TWS_POS_XY_LSB); + +typedef idd_fixedpoint tws_xy_t; + + + +//Word B1-16: Target 01 Position Z +//Word B1-25: Target 02 Position Z +#define ICD1553_TWS_POS_Z_LSB 2.5f + +IDD_FIXEDPOINT_TRAIT_DECLARATION(tws_pos_z_lsb, float, ICD1553_TWS_POS_Z_LSB, -1, 1, ICD1553_TWS_POS_Z_LSB, ICD1553_TWS_POS_Z_LSB); + +typedef idd_fixedpoint tws_z_t; + + +//Word B1-17: Target 01 Velocity (magnitude) +//Word B1-26: Target 02 Velocity (magnitude) +#define ICD1553_TWS_VEL_MAGNITUDE_FEET_LSB 0.0625f +#define ICD1553_TWS_VEL_MAGNITUDE_METERS_LSB (0.0625f/GC_K_METERS_TO_FEETS) + +IDD_FIXEDPOINT_TRAIT_LSB_DECLARATION(tws_vel_magnitude_lsb, float, ICD1553_TWS_VEL_MAGNITUDE_METERS_LSB); //, 0, 1, ICD1553_TWS_VEL_MAGNITUDE_LSB, ICD1553_TWS_VEL_MAGNITUDE_LSB); + +typedef idd_fixedpoint target_velocity_magnitude_t; + +//#define ICD1553_VEL_MAGN_MIN 0 +//#define ICD1553_VEL_MAGN_MAX 4000 +//typedef idd_range_bitfield_t velocity_magnitude_t; + + +//Word B1-18: Target 01 Velocity X +//Word B1-19: Target 01 Velocity Y +//Word B1-20: Target 01 Velocity Z +//Word B1-27: Target 02 Velocity X +//Word B1-28: Target 02 Velocity Y +//Word B1-29: Target 02 Velocity Z +#define ICD1553_TWS_VEL_LSB 0.125f + +IDD_FIXEDPOINT_TRAIT_DECLARATION(tws_vel_lsb, float, ICD1553_TWS_VEL_LSB, -1, 1, ICD1553_TWS_VEL_LSB, ICD1553_TWS_VEL_LSB); + +typedef idd_fixedpoint tws_velocity_t; + + +//Message B1: TWS Status and Targets 1 and 2 +struct tws_status_and_targets_01_02_t +{ + //Word B1-01: Validity Word and HPT Identifier + valitidy_word_and_hpt_identifier_t valitidy_word_and_hpt_identifier; + + //Word B1-02: Track Priority (Targets 01 to 04) + track_priority_01_04_t track_priority_01_04; + + //Word B1-03: Track Priority (Targets 05 to 08) + track_priority_05_08_t track_priority_05_08; + + //Word B1-04: Track Accuracy (Targets 01 to 04) + track_accurancy_01_04_t track_accurancy_01_04; + + //Word B1-05: Track Accuracy (Targets 05 to 08) + track_accurancy_05_08_t track_accurancy_05_08; + + //Word B1-06: Track Id of TWS Tracked targets 01 and 02 + track_id_of_tws_tracked_target_01_02_t track_id_of_tws_tracked_target_01_02; + + //Word B1-07: Track Id of TWS Tracked targets 03 and 04 + track_id_of_tws_tracked_target_03_04_t track_id_of_tws_tracked_target_03_04; + + //Word B1-08: Track Id of TWS Tracked targets 05 and 06 + track_id_of_tws_tracked_target_05_06_t track_id_of_tws_tracked_target_05_06; + + //Word B1-09: Track Id of TWS Tracked targets 07 and 08 + track_id_of_tws_tracked_target_07_08_t track_id_of_tws_tracked_target_07_08; + + //Word B1-10: HPT X Display Coordinate + x_display_coord_of_the_hpt_target_t x_display_coord_of_the_hpt_target; + + //Word B1-11: HPT Y Display Coordinate + y_display_coord_of_the_hpt_target_t y_display_coord_of_the_hpt_target; + + //Word B1-12: Target 01 Time Tag + relative_timetag_t time_tag_of_tracked_target_01_data; + + //Word B1-13: Target 01 Range + range_of_tracked_target_t range_of_tracked_01_target; + + //Word B1-14: Target 01 Position X + tws_xy_t target_01_position_x; + + //Word B1-15: Target 01 Position Y + tws_xy_t target_01_position_y; + + //Word B1-16: Target 01 Position Z + tws_z_t target_01_position_z; + + //Word B1-17: Target 01 Velocity (magnitude) + target_velocity_magnitude_t target_01_velocity_magnitude; + + //Word B1-18: Target 01 Velocity X + tws_velocity_t target_01_velocity_x; + + //Word B1-19: Target 01 Velocity Y + tws_velocity_t target_01_velocity_y; + + //Word B1-20: Target 01 Velocity Z + tws_velocity_t target_01_velocity_z; + + //Word B1-21: Target 02 Time Tag + relative_timetag_t time_tag_of_tracked_target_02_data; + + //Word B1-22: Target 02 Range + range_of_tracked_target_t range_of_tracked_02_target; + + //Word B1-23: Target 02 Position X + tws_xy_t target_02_position_x; + + //Word B1-24: Target 02 Position Y + tws_xy_t target_02_position_y; + + //Word B1-25: Target 02 Position Z + tws_z_t target_02_position_z; + + //Word B1-26: Target 02 Velocity (magnitude) + target_velocity_magnitude_t target_02_velocity_magnitude; + + //Word B1-27: Target 02 Velocity X + tws_velocity_t target_02_velocity_x; + + //Word B1-28: Target 02 Velocity Y + tws_velocity_t target_02_velocity_y; + + //Word B1-29: Target 02 Velocity Z + tws_velocity_t target_02_velocity_z; +}; + +ICD_STATIC_CHECK_SIZE_WORD(tws_status_and_targets_01_02_t, LEN_B1_tws_status_1_2); + +//Message B2: TWS Targets 3, 4, 5 +struct tws_status_and_targets_03_04_05_t +{ + //Word B2-01: Target 03 Time Tag + relative_timetag_t time_tag_of_tracked_target_03_data; + + //Word B2-02: Target 03 Range + range_of_tracked_target_t range_of_tracked_03_target; + + //Word B2-03: Target 03 Position X + tws_xy_t target_03_position_x; + + //Word B2-04: Target 03 Position Y + tws_xy_t target_03_position_y; + + //Word B2-05: Target 03 Position Z + tws_z_t target_03_position_z; + + //Word B2-06: Target 03 Velocity (magnitude) + target_velocity_magnitude_t target_03_velocity_magnitude; + + //Word B2-07: Target 03 Velocity X + tws_velocity_t target_03_velocity_x; + + //Word B2-08: Target 03 Velocity Y + tws_velocity_t target_03_velocity_y; + + //Word B2-09: Target 03 Velocity Z + tws_velocity_t target_03_velocity_z; + + //Word B2-10: Target 04 Time Tag + relative_timetag_t time_tag_of_tracked_target_04_data; + + //Word B2-11: Target 04 Range + range_of_tracked_target_t range_of_tracked_04_target; + + //Word B2-12: Target 04 Position X + tws_xy_t target_04_position_x; + + //Word B2-13: Target 04 Position Y + tws_xy_t target_04_position_y; + + //Word B2-14: Target 04 Position Z + tws_z_t target_04_position_z; + + //Word B2-15: Target 04 Velocity (magnitude) + target_velocity_magnitude_t target_04_velocity_magnitude; + + //Word B2-16: Target 04 Velocity X + tws_velocity_t target_04_velocity_x; + + //Word B2-17: Target 04 Velocity Y + tws_velocity_t target_04_velocity_y; + + //Word B2-18: Target 04 Velocity Z + tws_velocity_t target_04_velocity_z; + + //Word B2-19: Target 05 Time Tag + relative_timetag_t time_tag_of_tracked_target_05_data; + + //Word B2-20: Target 05 Range + range_of_tracked_target_t range_of_tracked_05_target; + + //Word B2-21: Target 05 Position X + tws_xy_t target_05_position_x; + + //Word B2-22: Target 05 Position Y + tws_xy_t target_05_position_y; + + //Word B2-23: Target 05 Position Z + tws_z_t target_05_position_z; + + //Word B2-24: Target 05 Velocity (magnitude) + target_velocity_magnitude_t target_05_velocity_magnitude; + + //Word B2-25: Target 05 Velocity X + tws_velocity_t target_05_velocity_x; + + //Word B2-26: Target 05 Velocity Y + tws_velocity_t target_05_velocity_y; + + //Word B2-27: Target 05 Velocity Z + tws_velocity_t target_05_velocity_z; +}; + +ICD_STATIC_CHECK_SIZE_WORD(tws_status_and_targets_03_04_05_t, LEN_B2_tws_status_3_4_5); + +//Message B3: TWS Targets 6, 7, 8 +struct tws_status_and_targets_06_07_08_t +{ + //Word B3-01: Target 06 Time Tag + relative_timetag_t time_tag_of_tracked_target_06_data; + + //Word B3-02: Target 06 Range + range_of_tracked_target_t range_of_tracked_06_target; + + //Word B3-03: Target 06 Position X + tws_xy_t target_06_position_x; + + //Word B3-04: Target 06 Position Y + tws_xy_t target_06_position_y; + + //Word B3-05: Target 06 Position Z + tws_z_t target_06_position_z; + + //Word B3-06: Target 06 Velocity (magnitude) + target_velocity_magnitude_t target_06_velocity_magnitude; + + //Word B3-07: Target 06 Velocity X + tws_velocity_t target_06_velocity_x; + + //Word B3-08: Target 06 Velocity Y + tws_velocity_t target_06_velocity_y; + + //Word B3-09: Target 06 Velocity Z + tws_velocity_t target_06_velocity_z; + + //Word B3-10: Target 07 Time Tag + relative_timetag_t time_tag_of_tracked_target_07_data; + + //Word B3-11: Target 07 Range + range_of_tracked_target_t range_of_tracked_07_target; + + //Word B3-12: Target 07 Position X + tws_xy_t target_07_position_x; + + //Word B3-13: Target 07 Position Y + tws_xy_t target_07_position_y; + + //Word B3-14: Target 07 Position Z + tws_z_t target_07_position_z; + + //Word B3-15: Target 07 Velocity (magnitude) + target_velocity_magnitude_t target_07_velocity_magnitude; + + //Word B3-16: Target 07 Velocity X + tws_velocity_t target_07_velocity_x; + + //Word B3-17: Target 07 Velocity Y + tws_velocity_t target_07_velocity_y; + + //Word B3-18: Target 07 Velocity Z + tws_velocity_t target_07_velocity_z; + + //Word B3-19: Target 08 Time Tag + relative_timetag_t time_tag_of_tracked_target_08_data; + + //Word B3-20: Target 08 Range + range_of_tracked_target_t range_of_tracked_08_target; + + //Word B3-21: Target 08 Position X + tws_xy_t target_08_position_x; + + //Word B3-22: Target 08 Position Y + tws_xy_t target_08_position_y; + + //Word B3-23: Target 08 Position Z + tws_z_t target_08_position_z; + + //Word B3-24: Target 08 Velocity (magnitude) + target_velocity_magnitude_t target_08_velocity_magnitude; + + //Word B3-25: Target 08 Velocity X + tws_velocity_t target_08_velocity_x; + + //Word B3-26: Target 08 Velocity Y + tws_velocity_t target_08_velocity_y; + + //Word B3-27: Target 08 Velocity Z + tws_velocity_t target_08_velocity_z; +}; + +ICD_STATIC_CHECK_SIZE_WORD(tws_status_and_targets_06_07_08_t, LEN_B3_tws_status_6_7_8); + + +//TODO Message B4: SPT Target Message + +//Word B4-01: Track Validity and Status Word #1 +typedef idd_bitfield_u16_t range_validity_t; +typedef idd_bitfield_u16_t position_z_y_z_validity_t; +typedef idd_bitfield_u16_t range_rate_validity_t; +typedef idd_bitfield_u16_t velocity_data_validity_t; +typedef idd_bitfield_u16_t acceleration_data_validity_t; +typedef idd_bitfield_u16_t aspect_validity_t; +typedef idd_bitfield_u16_t cas_and_mach_number_validity_t; +typedef idd_bitfield_u16_t spare1_7_field_t; +typedef idd_bitfield_u16_t display_coordinates_validity_t; + +enum accurancy_level_t +{ + ACCURANCY_LELEL_0, + ACCURANCY_LELEL_1, + ACCURANCY_LELEL_2, + ACCURANCY_LELEL_3 +}; + +typedef idd_bitfield_u16_t position_accurancy_t; +typedef idd_bitfield_u16_t velocity_accurancy_t; +typedef idd_bitfield_u16_t acceleration_accurancy_t; + +typedef idd_bitfield_u16_t spare1_15_field_t; + +union b4_track_validity_and_status_word_01_t +{ + range_validity_t range_validity; + position_z_y_z_validity_t position_z_y_z_validity; + range_rate_validity_t range_rate_validity; + velocity_data_validity_t velocity_data_validity; + acceleration_data_validity_t acceleration_data_validity; + aspect_validity_t aspect_validity; + cas_and_mach_number_validity_t cas_and_mach_number_validity; + spare1_7_field_t spare7; + display_coordinates_validity_t display_coordinates_validity; + position_accurancy_t position_accurancy; + velocity_accurancy_t velocity_accurancy; + acceleration_accurancy_t acceleration_accurancy; + spare1_15_field_t spare15; + + icd_raw_word_t raw; +}; + +//Word B4-02: Track Validity and Status Word #2 +typedef idd_bitfield_u16_t reacquisition_t; +typedef idd_bitfield_u16_t target_in_coast_t; +typedef idd_bitfield_u16_t hoj_t; +typedef idd_bitfield_u16_t aoj_t; + +enum normalization_factor_6_lev_t +{ + NORMALIZATION_FACTOR_6_LEV_0, + NORMALIZATION_FACTOR_6_LEV_1, + NORMALIZATION_FACTOR_6_LEV_2, + NORMALIZATION_FACTOR_6_LEV_3, + NORMALIZATION_FACTOR_6_LEV_4, + NORMALIZATION_FACTOR_6_LEV_5 +}; + +typedef idd_bitfield_u16_t normalization_factor_for_target_position_x_t; +typedef idd_bitfield_u16_t normalization_factor_for_target_position_y_t; + +enum normalization_factor_4_lev_t +{ + NORMALIZATION_FACTOR_4_LEV_0, + NORMALIZATION_FACTOR_4_LEV_1, + NORMALIZATION_FACTOR_4_LEV_2, + NORMALIZATION_FACTOR_4_LEV_3, +}; + +typedef idd_bitfield_u16_t normalization_factor_for_target_position_z_t; + +typedef idd_bitfield_u16_t spare4_15_field_t; + +union b4_track_validity_and_status_word_02_t +{ + reacquisition_t reacquisition; + target_in_coast_t target_in_coast; + hoj_t hoj; + aoj_t aoj; + normalization_factor_for_target_position_x_t normalization_factor_for_target_position_x; + normalization_factor_for_target_position_y_t normalization_factor_for_target_position_y; + normalization_factor_for_target_position_z_t normalization_factor_for_target_position_z; + + spare4_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word B4-06: Normalized Target Position Y +//Word B4-05: Normalized Target Position X +//Word B4-07: Normalized Target Position Z +typedef idd_bitfield_u16_t normalized_target_position_t; + +//Word B4-08: Target Range Rate +//todo lsb +typedef idd_bitfield_u16_t range_rate_of_the_tracked_target_t; + +//Word B4-09: Target Velocity (Magnitude) +//todo lsb +//typedef idd_bitfield_u16_t target_velocity_magnitude_t; + +//Word B4-10: Target Velocity X +//Word B4-11: Target Velocity Y +//Word B4-12: Target Velocity Z +//todo lsb +typedef idd_bitfield_u16_t target_velocity_t; + +//Word B4-13: Target Acceleration (Magnitude) +//todo lsb +typedef idd_bitfield_u16_t target_acceleration_magnitude_t; + +//Word B4-17: Target Aspect Angle +//todo lsb +typedef idd_bitfield_u16_t target_aspect_angle_t; + +//Word B4-18: Target CAS +//todo lsb +typedef idd_bitfield_u16_t target_cas_t; + +//Word B4-19: Target Mach Number +//todo lsb +typedef idd_bitfield_u16_t target_mach_number_t; + +//Word B4-20: Target X Display Coordinate +//Word B4-21: Target Y Display Coordinate +union target_nn_display_coordinate_t +{ + display_coord_t display_coord_of_the_tracked_target; + spare7_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word B4-22: Standard Deviation of Position X estimate +//Word B4-23: Standard Deviation of Position Y estimate +//Word B4-24: Standard Deviation of Position Z estimate +#define ICD1553_STD_DEV_POS_FEET_LSB (0.42725) +#define ICD1553_STD_DEV_POS_METERS_LSB (ICD1553_STD_DEV_POS_FEET_LSB/GC_K_METERS_TO_FEETS) + +IDD_FIXEDPOINT_TRAIT_LSB_DECLARATION(standard_deviation_of_position_nn_estimate_slb, float, ICD1553_STD_DEV_POS_METERS_LSB); +typedef idd_fixedpoint standard_deviation_of_position_nn_estimate_t; + +struct spt_target_message_t +{ + //Word B4-01: Track Validity and Status Word #1 + b4_track_validity_and_status_word_01_t track_validity_and_status_word_01; + + //Word B4-02: Track Validity and Status Word #2 + b4_track_validity_and_status_word_02_t track_validity_and_status_word_02; + + //Word B4-03: Time Tag + relative_timetag_t relative_timetag; + + //Word B4-04: Target Range + range_of_tracked_target_t range_of_tracked_target; + + //Word B4-05: Normalized Target Position X + normalized_target_position_t normalized_target_position_x; + + //Word B4-06: Normalized Target Position Y + normalized_target_position_t normalized_target_position_y; + + //Word B4-07: Normalized Target Position Z + normalized_target_position_t normalized_target_position_z; + + //Word B4-08: Target Range Rate + range_rate_of_the_tracked_target_t range_rate_of_the_tracked_target; + + //Word B4-09: Target Velocity (Magnitude) + target_velocity_magnitude_t target_velocity_magnitude; + + //Word B4-10: Target Velocity X + target_velocity_t target_velocity_x; + + //Word B4-11: Target Velocity Y + target_velocity_t target_velocity_y; + + //Word B4-12: Target Velocity Z + target_velocity_t target_velocity_z; + + //Word B4-13: Target Acceleration (Magnitude) + target_acceleration_magnitude_t target_acceleration_magnitude; + + //Word B4-14: Target Acceleration X + acceleration_t target_acceleration_x; + + //Word B4-15: Target Acceleration Y + acceleration_t target_acceleration_y; + + //Word B4-16: Target Acceleration Z + acceleration_t target_acceleration_z; + + //Word B4-17: Target Aspect Angle + target_aspect_angle_t target_aspect_angle; + + //Word B4-18: Target CAS + target_cas_t target_cas; + + //Word B4-19: Target Mach Number + target_mach_number_t target_mach_number; + + //Word B4-20: Target X Display Coordinate + target_nn_display_coordinate_t target_x_display_coordinate; + + //Word B4-21: Target Y Display Coordinate + target_nn_display_coordinate_t target_y_display_coordinate; + + //Word B4-22: Standard Deviation of Position X estimate + standard_deviation_of_position_nn_estimate_t standard_deviation_of_position_x_estimate; + + //Word B4-23: Standard Deviation of Position Y estimate + standard_deviation_of_position_nn_estimate_t standard_deviation_of_position_y_estimate; + + //Word B4-24: Standard Deviation of Position Z estimate + standard_deviation_of_position_nn_estimate_t standard_deviation_of_position_z_estimate; +}; + +ICD_STATIC_CHECK_SIZE_WORD(spt_target_message_t, LEN_B4_stp_legacy); + + +//TODO Message B5: Tracked Target Message + +//Word B5-01: Track Validity and Status Word #1 +typedef idd_bitfield_u16_t aspect_angle_and_ground_track_angle_validity_t; +typedef idd_bitfield_u16_t antenna_position_validity_t; + +union b5_track_validity_and_status_word_01_t +{ + range_validity_t range_validity; + position_z_y_z_validity_t position_z_y_z_validity; + range_rate_validity_t range_rate_validity; + velocity_data_validity_t velocity_data_validity; + acceleration_data_validity_t acceleration_data_validity; + aspect_angle_and_ground_track_angle_validity_t aspect_angle_and_ground_track_angle_validity; + cas_and_mach_number_validity_t cas_and_mach_number_validity; + antenna_position_validity_t antenna_position_validity; + display_coordinates_validity_t display_coordinates_validity; + position_accurancy_t position_accurancy; + velocity_accurancy_t velocity_accurancy; + acceleration_accurancy_t acceleration_accurancy; + spare1_15_field_t spare15; + + icd_raw_word_t raw; +}; + +//Word B5-02: Track Validity and Status Word #2 + +typedef idd_bitfield_u16_t target_moving_in_ftt_t; +typedef idd_bitfield_u16_t swap_hpt_flag_t; +typedef idd_bitfield_u16_t single_pt_rejected_t; + +union b5_track_validity_and_status_word_02_t +{ + reacquisition_t reacquisition; + target_in_coast_t target_in_coast; + hoj_t hoj; + aoj_t aoj; + normalization_factor_for_target_position_x_t normalization_factor_for_target_position_x; + normalization_factor_for_target_position_y_t normalization_factor_for_target_position_y; + normalization_factor_for_target_position_z_t normalization_factor_for_target_position_z; + + target_moving_in_ftt_t target_moving_in_ftt; + swap_hpt_flag_t swap_hpt_flag; + single_pt_rejected_t single_pt_rejected; + + spare1_15_field_t spare; + + icd_raw_word_t raw; +}; + + +typedef idd_bitfield_u16_t track_id_t; +typedef idd_bitfield_u16_t track_id_spare_t; + +union track_aux_info_t +{ + track_id_t id; + track_id_spare_t reseved; + icd_raw_word_t raw; +}; + +//Word B5-25: Antenna Azimuth Position +//todo lsb +//typedef idd_bitfield_u16_t antenna_azimuth_position_t; + +//Word B5-26: Antenna Elevation Position +//todo lsb +//typedef idd_bitfield_u16_t antenna_elevation_position_t; + +struct tracked_target_message_t +{ + //Word B5-01: Track Validity and Status Word #1 + b5_track_validity_and_status_word_01_t track_validity_and_status_word_01; + + //Word B5-02: Track Validity and Status Word #2 + b5_track_validity_and_status_word_02_t track_validity_and_status_word_02; + + //Word B5-03: Time Tag + relative_timetag_t relative_timetag; + + //Word B5-04: Target Range + range_of_tracked_target_t range_of_tracked_target; + + //Word B5-05: Normalized Target Position X + normalized_target_position_t normalized_target_position_x; + + //Word B5-06: Normalized Target Position Y + normalized_target_position_t normalized_target_position_y; + + //Word B5-07: Normalized Target Position Z + normalized_target_position_t normalized_target_position_z; + + //Word B5-08: Target Range Rate + range_rate_of_the_tracked_target_t range_rate_of_the_tracked_target; + + //Word B5-09: Target Velocity (Magnitude) + target_velocity_magnitude_t target_velocity_magnitude; + + //Word B5-10: Target Velocity X + target_velocity_t target_velocity_x; + + //Word B5-11: Target Velocity Y + target_velocity_t target_velocity_y; + + //Word B5-12: Target Velocity Z + target_velocity_t target_velocity_z; + + //Word B5-13: Target Acceleration (Magnitude) + target_acceleration_magnitude_t target_acceleration_magnitude; + + //Word B5-14: Target Acceleration X + acceleration_t target_acceleration_x; + + //Word B5-15: Target Acceleration Y + acceleration_t target_acceleration_y; + + //Word B5-16: Target Acceleration Z + acceleration_t target_acceleration_z; + + //Word B5-17: Target Aspect Angle + target_aspect_angle_t target_aspect_angle; + + //Word B5-18: Target CAS + target_cas_t target_cas; + + //Word B5-19: Target Mach Number + target_mach_number_t target_mach_number; + + //Word B5-20: Target X Display Coordinate + target_nn_display_coordinate_t target_x_display_coordinate; + + //Word B5-21: Target Y Display Coordinate + target_nn_display_coordinate_t target_y_display_coordinate; + + //Word B5-22: Standard Deviation of Position X estimate + standard_deviation_of_position_nn_estimate_t standard_deviation_of_position_x_estimate; + + //Word B5-23: Standard Deviation of Position Y estimate + standard_deviation_of_position_nn_estimate_t standard_deviation_of_position_y_estimate; + + //Word B5-24: Standard Deviation of Position Z estimate + standard_deviation_of_position_nn_estimate_t standard_deviation_of_position_z_estimate; + + //Word B5-25: Antenna Azimuth Position + semicircle_t antenna_azimuth_position; + + //Word B5-26: Antenna Elevation Position + semicircle_t antenna_elevation_position; + + track_aux_info_t aux; +}; + +ICD_STATIC_CHECK_SIZE_WORD(tracked_target_message_t, LEN_B5_stt); + +//Message B6: Radar Operational Setting and Parameter Transfer Tell-Back + +//Word B6-05: Radar Health Status and BIT report validity +enum radar_fails_status_t +{ + RDR_OK, + RDR_FAILED +}; +typedef idd_bitfield_u16_t radar_fails_status_field_t; + +enum lru_fail_status_t +{ + LRU_OK, + LRU_FAILED +}; +typedef idd_bitfield_u16_t array_status_t; +typedef idd_bitfield_u16_t pedestal_status_t; +typedef idd_bitfield_u16_t servoloop_status_t; +typedef idd_bitfield_u16_t rx_front_end_status_t; +typedef idd_bitfield_u16_t receiver_status_t; +typedef idd_bitfield_u16_t trasmitter_status_t; +typedef idd_bitfield_u16_t processor_status_t; + +#if 0 +enum over_temperature_alarm_t +{ + NO_OVERTEMP, + OVERTEMP +}; +typedef idd_bitfield_u16_t transmitter_over_temperature_alarm_field_t; +typedef idd_bitfield_u16_t processor_over_temperature_alarm_field_t; +typedef idd_bitfield_u16_t servoloop_over_temperature_alarm_field_t; + +enum pressurization_status_t +{ + PRESSURIZATION_OK, + PRESSURIZATION_FAIL +}; +typedef idd_bitfield_u16_t pressurization_status_field_t; +#else + +typedef idd_bitfield_u16_t transmitter_over_temperature_alarm_field_t; +typedef idd_bitfield_u16_t processor_over_temperature_alarm_field_t; +typedef idd_bitfield_u16_t servoloop_over_temperature_alarm_field_t; + +typedef idd_bitfield_u16_t pressurization_status_field_t; +//typedef idd_bitfield_u16_t lcu_over_temperature_status_field_t; + +#endif + +enum bit_report_available_t +{ + BIT_NOT_AVAILABLE, + BIT_AVAILABLE +}; +typedef idd_bitfield_u16_t bit_report_available_field_t; + +typedef idd_bitfield_u16_t spare3_15_field_t ; + +union radar_health_status_and_bit_report_validity_t +{ + radar_fails_status_field_t radar_fails_status_field; + + array_status_t array_status; + pedestal_status_t pedestal_status; + servoloop_status_t servoloop_status; + rx_front_end_status_t rx_front_end_status; + receiver_status_t receiver_status; + trasmitter_status_t trasmitter_status; + processor_status_t processor_status; + + transmitter_over_temperature_alarm_field_t transmitter_over_temperature_alarm_field; + processor_over_temperature_alarm_field_t processor_over_temperature_alarm_field; + servoloop_over_temperature_alarm_field_t servoloop_over_temperature_alarm_field; + + pressurization_status_field_t pressurization_status_field; + + bit_report_available_field_t bit_report_available_field; + + spare3_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word B6-06: SW Release 1 +typedef idd_bitfield_u16_t main_computer_sw_release_t; +typedef idd_bitfield_u16_t main_computer_sw_version_t; +typedef idd_bitfield_u16_t graphics_computer_sw_release_t; +typedef idd_bitfield_u16_t graphics_computer_sw_version_t; + +union sw_release_01_t +{ + main_computer_sw_release_t main_computer_sw_release; + main_computer_sw_version_t main_computer_sw_version; + graphics_computer_sw_release_t graphics_computer_sw_release; + graphics_computer_sw_version_t graphics_computer_sw_version; + + icd_raw_word_t raw; +}; + +//Word B6-07: SW Release 2 +typedef idd_bitfield_u16_t antenna_computer_sw_release_t; +typedef idd_bitfield_u16_t antenna_computer_sw_version_t; + +typedef idd_bitfield_u16_t spare8_15_field_t ; + +union sw_release_02_t +{ + antenna_computer_sw_release_t antenna_computer_sw_release; + antenna_computer_sw_version_t antenna_computer_sw_version; + + spare8_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word B6-10: Clearance Plane Distance Tell-Back +typedef idd_bitfield_u16_t distance_of_second_clearance_plane_in_ta_t; + + +//Word B6-11: Terrain Avoidance Data (word#1) +typedef idd_bitfield_u16_t min_range_of_protrusion_high_clearance_plane_t; + +enum no_signal_available_indication_t +{ + SIGNAL_AVAILABLE, + NO_SIGNAL_AVAILABLE +}; +typedef idd_bitfield_u16_t no_signal_available_indication_field_t; + +enum jammer_within_corridor_indication_t +{ + NO_JAMMER_WITHIN_CORRIDOR, + JAMMER_PRESENT_WITHIN_CORRIDOR +}; +typedef idd_bitfield_u16_t jammer_within_corridor_indication_field_t; + +typedef idd_bitfield_u16_t spare2_15_field_t ; + +union ta_data_01_t +{ + min_range_of_protrusion_high_clearance_plane_t min_range_of_protrusion_high_clearance_plane; + + no_signal_available_indication_field_t no_signal_available_indication_field; + + jammer_within_corridor_indication_field_t jammer_within_corridor_indication_field; + + spare2_15_field_t spare2_15_field; + + icd_raw_word_t raw; +}; + + +//Word B6-12: Terrain Avoidance Data (word#2) + +typedef idd_bitfield_u16_t min_range_of_protrusion_low_clearance_plane_t; + +typedef idd_bitfield_u16_t spare4_15_field_t ; + +union ta_data_02_t +{ + min_range_of_protrusion_low_clearance_plane_t min_range_of_protrusion_low_clearance_plane; + + spare4_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word B6-16: Cursor X-Display coordinate and Qualifiers + +typedef idd_bitfield_u16_t crs_pixel_pos_field_t; + +enum normal_slave_selector_tellback_t +{ + SEL_CURSOR_NORMAL, + SEL_CURSOR_SLAVE +}; +typedef idd_boolfield_u16_t normal_slave_selector_tellback_field_t ; + +enum normal_snowplough_selector_tellback_t +{ + NORMAL_SEL, + SNOWPLOUGH_SEL +}; +typedef idd_boolfield_u16_t normal_snowplough_selector_tellback_field_t ; + +enum normal_sar_enabled_selector_tellback_t +{ + SEL_SAR_NORMAL, + SEL_SAR_ENABLED +}; +typedef idd_boolfield_u16_t normal_sar_enabled_selector_tellback_field_t ; + +typedef idd_bitfield_u16_t spare3_15_field_t ; + +union crs_x_coord_t +{ + crs_pixel_pos_field_t pos; + + normal_slave_selector_tellback_field_t normal_slave; + + idd_bitfield_u16_t zero; + + normal_snowplough_selector_tellback_field_t snowplugh; + + normal_sar_enabled_selector_tellback_field_t sar_enabled; + + spare3_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word B6-17: Cursor Y-Display coordinate + +typedef idd_bitfield_u16_t spare7_15_field_t ; + +union crs_y_coord_t +{ + crs_pixel_pos_field_t pos; + + spare7_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Message B6: Radar Operational Setting and Parameter Transfer Tell-Back + +struct msg_settings_tellback_t +{ + rdr_settings_t settings; //Word B6-01: Radar Setting Tell-Back + frequency_t frequency; //Word B6-02: Frequency Agility Setting and Interleave selection Tell-Back + beacon_delay_and_code_t beacon; //Word B6-03: Beacon Delay and Code Tell-Back + gains_and_chgrp_t gains_and_chgrp; //Word B6-04: Radar Gains and RF Channel Grouping Tell-Back + + radar_health_status_and_bit_report_validity_t health_status; //Word B6-05: Radar Health Status and BIT report validity + + sw_release_01_t sw_release_01; //Word B6-06: SW Release 1, + sw_release_02_t sw_release_02; //Word B6-07: SW Release 2 + + semicircle_t az_scan_centre; //Word B6-08: AZ Scan Centre + semicircle_t el_scan_centre; //Word B6-09: EL Scan Centre + + distance_of_second_clearance_plane_in_ta_t clearance_plane_distance; //Word B6-10: Clearance Plane Distance Tell-Back + + ta_data_01_t ta_data_01; //Word B6-11: Terrain Avoidance Data (word#1) + ta_data_02_t ta_data_02; //Word B6-12: Terrain Avoidance Data (word#2) + + param_id_t param_id; //Word B6-13: Parameter Identifier Tell-Back + icd_raw_word_t param_value_1; //Word B6-14: Parameter Value (word 1) + icd_raw_word_t param_value_2; //Word B6-15: Parameter Value (word 2) + + crs_x_coord_t crs_x; //Word B6-16: Cursor X-Display coordinate and Qualifiers + crs_y_coord_t crs_y; //Word B6-17: Cursor Y-Display coordinate + + crs_slave_range_t crs_range; //Word B6-18: Cursor Inertial position (range) + semicircle_t crs_azimuth; //Word B6-19: Cursor Inertial position (Azimuth) + latlong_t crs_lat; //Word B6-20/21: Cursor Position Latitude + latlong_t crs_long; //Word B6-22/23: Cursor Position Longitude + + //icd_raw_word_t grifo_reseved_[4]; +}; + +ICD_STATIC_CHECK_SIZE_WORD(msg_settings_tellback_t, LEN_B6_rdr_operational_setting_tellback); + +//Message B7: Radar Status Tell-Back + +//Word B7-01: Radar Mode Tell-Back +enum rdr_design_sts_t { + DS_STT, + DS_DTT, + DS_SAM, + DS_TWS_with_HPT, + DS_AGR_Lock_On, + DS_ACQUISITION_in_Progress, + DS_SAR, + DS_NOT_VALID +}; + +typedef idd_bitfield_u16_t rdr_design_sts_field_t; +//typedef idd_bitfield_u16_t ibit_status_field_t; +//typedef idd_bitfield_u16_t standby_tellback_field_t; +//typedef idd_bitfield_u16_t freeze_tellback_field_t; + +enum degraded_performance_status_t +{ + PERF_NORMAL, + PERF_DEGRADED +}; +typedef idd_bitfield_u16_t degraded_performance_field_t; + +enum rf_radiation_status_t +{ + RADIATION_ON, + RADIATION_OFF +}; +typedef idd_boolfield_u16_t rf_radiation_field_t; + +enum transition_status_t +{ + NO_TRANSITION, + TRANSITION_IN_PROGRESS +}; +typedef idd_boolfield_u16_t transition_status_field_t; + +enum last_acquisition_result_t +{ + LAST_ACQUISITION_UNSUCCESSFUL, + LAST_ACQUISITION_SUCCESSFUL +}; +typedef idd_bitfield_u16_t last_acq_result_field_t; + +typedef idd_bitfield_u16_t sar_acquisition_field_t; + +//Word B7-01: Radar Mode Tell-Back +union rdr_mode_tellback_t +{ + rdr_mode_field_t master_mode; + rdr_design_sts_field_t design_sts; + ibit_request_field_t ibit_sts; + stby_field_t stby_sts; + freeze_field_t freeze_sts; + degraded_performance_field_t degrad_perf; + reserved11_field_t reserved11; //A.k.a. emergency + rf_radiation_field_t rf_radiation; + transition_status_field_t transition_status; + last_acq_result_field_t last_acq_result; + sar_acquisition_field_t sar_acquisition; + + icd_raw_word_t raw; +}; + +//Word B7-02: Radar Functions and Parameters Tell-Back (word#1) +enum scan_width_tb_t { + TB_W60, + TB_W55, + TB_W50, + TB_W45, + TB_W40, + TB_W35, + TB_W30, + TB_W25, + TB_W20, + TB_W15, + TB_W10, + TB_W05, + TB_W0, + TB_W_NV13, + TB_W_NV14, + TB_W_NV15 +}; + +typedef idd_bitfield_u16_t scan_width_tellback_field_t; + +enum velocity_scale_tb_t +{ + VS_NM80, + VS_NM40, + + VS_2400KTS, + VS_1200KTS +}; + +IDD_INT_TRAIT_DECLARATION(velocity_scale_tb_trait_t, velocity_scale_tb_t, VS_NM80, VS_1200KTS); + +typedef idd_bitfield_u16_t velocity_scale_tb_field_t; + +//Word B7-02: Radar Functions and Parameters Tell-Back (word#1) + +union rdr_fun_and_param1_tellback_t { + rws_submode_field_t rws_submode; + spot_selection_field_t spot; + acm_submode_field_t acm_submode; + gm_submode_field_t gm_submode; + expand_field_t expand; + range_scale_field_t range_scale; + velocity_scale_tb_field_t velocity_scale; + bars_num_field_t bars_num; + scan_width_tellback_field_t scan_width; + spare1_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word B7-03: Radar Functions and Parameters Tell-Back (word#2) +#if 0 +enum sar_feasibility_for_cursor_t +{ + SAR_NOT_FEASIBLE, + SAR_FEASIBLE +}; + +enum sar_feasibility_for_spoi_t +{ + SAR_NOT_FEASIBLE_ON_SPOI, + SAR_FEASIBLE_ON_SPOI +}; +#endif +typedef bool sar_feasibility_for_cursor_t; +typedef bool sar_feasibility_for_spoi_t; + +typedef idd_bitfield_u16_t sar_feasibility_for_cursor_field_t; +typedef idd_bitfield_u16_t sar_feasibility_for_spoi_field_t; + + +//Word B7-03: Radar Functions and Parameters Tell-Back (word#2) + +typedef idd_bitfield_u16_t spare6_15_field_t ; + +union rdr_fun_and_param2_tellback_t +{ + spare0_4_field_t spare_0_4; + + zoom_field_t zoom; + sar_map_orientation_field_t sar_map_orientation; + + sar_feasibility_for_cursor_field_t sar_crs_feasibility; + sar_feasibility_for_spoi_field_t sar_spoi_feasibility; + + spare6_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Message B7: Radar Status Tell-Back + +struct msg_rdr_status_tellback_t +{ + rdr_mode_tellback_t mode; //Word B7-01: Radar Mode Tell-Back + rdr_fun_and_param1_tellback_t param1; //Word B7-02: Radar Functions and Parameters Tell-Back (word#1) + rdr_fun_and_param2_tellback_t param2; //Word B7-03: Radar Functions and Parameters Tell-Back (word#2) +}; + +ICD_STATIC_CHECK_SIZE_WORD(msg_rdr_status_tellback_t, LEN_B7_rdrstatus_tellback); + +//Message B8: BIT Report Message +//todo + +//Word B8-01: BIT Report Label + + +enum bit_report_label_t +{ + BIT_REP_POWER_UP, + BIT_REP_FAST_POWER_UP, + BIT_REP_INT, + BIT_REP_SWITCH_OFF, + BIT_REP_FAIL_ONSET, + BIT_REP_FAIL_STOP, + BIT_REP_SPARE_6, + BIT_REP_SPAR_7 +}; +typedef idd_bitfield_u16_t bit_report_label_field_t ; + +typedef idd_bitfield_u16_t spare13_15_field_t ; + +union bit_report_label_union_t +{ + bit_report_label_field_t bit_report_label_field; + spare13_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word B8-02: BIT Report Date +union bit_report_date_union_t +{ + year_of_mission_t year_of_mission; + month_of_mission_t month_of_mission; + day_of_mission_t day_of_mission; + + spare1_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word B8-04: Degradation Conditions (word 1) +union degradation_conditions_word_01_t +{ + idd_bitfield_u16_t degradation_message_01; + idd_bitfield_u16_t degradation_message_02; + idd_bitfield_u16_t degradation_message_03; + idd_bitfield_u16_t degradation_message_04; + idd_bitfield_u16_t degradation_message_05; + idd_bitfield_u16_t degradation_message_06; + idd_bitfield_u16_t degradation_message_07; + idd_bitfield_u16_t degradation_message_08; + idd_bitfield_u16_t degradation_message_09; + idd_bitfield_u16_t degradation_message_10; + idd_bitfield_u16_t degradation_message_11; + idd_bitfield_u16_t degradation_message_12; + idd_bitfield_u16_t degradation_message_13; + idd_bitfield_u16_t degradation_message_14; + idd_bitfield_u16_t degradation_message_15; + idd_bitfield_u16_t degradation_message_16; + icd_raw_word_t raw; +}; + +//Word B8-05: Degradation Conditions (word 2) +typedef idd_bitfield_u16_t spare16_15_field_t ; + +//Word B8-06: Failure Location (Pedestal) +typedef idd_bitfield_u16_t spare11_15_field_t ; +union failure_location_pedestal_t +{ + idd_bitfield_u16_t sru_01_gimbal; + idd_bitfield_u16_t sru_02_waveguide; + idd_bitfield_u16_t sru_03_waveguide; + idd_bitfield_u16_t sru_04_delta_guard_lna_switch; + idd_bitfield_u16_t sru_05_waveguide_switch; + spare11_15_field_t spare; + icd_raw_word_t raw; +}; + +//Word B8-07: Failure Location (Servoloop) +typedef idd_bitfield_u16_t spare13_15_field_t ; +union failure_location_servoloop_t +{ + idd_bitfield_u16_t sru_01_chassis; + idd_bitfield_u16_t sru_02_power_supply; + idd_bitfield_u16_t sru_03_digital_controller; + spare13_15_field_t spare; + icd_raw_word_t raw; +}; + +//Word B8-08: Failure Location (RX Front-End) +typedef idd_bitfield_u16_t spare10_15_field_t ; +union failure_location_rx_front_end_t +{ + idd_bitfield_u16_t sru_01_chassis; + idd_bitfield_u16_t sru_02_delta_guard_lna; + idd_bitfield_u16_t sru_03_sum_act_prot_and_lna; + idd_bitfield_u16_t sru_04_4_port_circulator; + idd_bitfield_u16_t sru_05_stc_attenuators_delta_guard; + idd_bitfield_u16_t sru_05_stc_attenuators_sum; + spare10_15_field_t spare; + icd_raw_word_t raw; +}; + +//Word B8-09: Failure Location (Receiver) +typedef idd_bitfield_u16_t spare9_15_field_t ; +union failure_location_receiver_t +{ + idd_bitfield_u16_t sru_01_chassis; + idd_bitfield_u16_t sru_02_uhf_assy; + idd_bitfield_u16_t sru_03_synthesizer; + idd_bitfield_u16_t sru_04_delta_guard_down_converter; + idd_bitfield_u16_t sru_05_sum_down_converter; + idd_bitfield_u16_t sru_06_l_o_distributor; + idd_bitfield_u16_t sru_07_up_converter; + spare9_15_field_t spare; + icd_raw_word_t raw; +}; + +//Word B8-10: Failure Location (Transmitter) +typedef idd_bitfield_u16_t spare8_15_field_t ; +union failure_location_transmitter_t +{ + idd_bitfield_u16_t sru_01_chassis; + idd_bitfield_u16_t sru_02_rex_f_tx; + idd_bitfield_u16_t sru_03_power_supply; + idd_bitfield_u16_t sru_04_valve_el_twt_tx; + idd_bitfield_u16_t sru_05_rf_driver; + idd_bitfield_u16_t sru_06_controller_tx; + idd_bitfield_u16_t sru_07_h_v_power_supply; + idd_bitfield_u16_t sru_08_eht_power_supply; + spare8_15_field_t spare; + icd_raw_word_t raw; +}; + +//Word B8-11: Failure Location (Processor) +typedef idd_bitfield_u16_t spare2_15_field_t ; +union failure_location_processor_t +{ + idd_bitfield_u16_t sru_01_mother_board_and_chassis; + idd_bitfield_u16_t sru_02_pulse_compressor; + idd_bitfield_u16_t sru_03_mti_fft; + idd_bitfield_u16_t sru_04_dbs; + idd_bitfield_u16_t sru_05_cfar; + idd_bitfield_u16_t sru_06_timer; + idd_bitfield_u16_t sru_07_post_processor; + idd_bitfield_u16_t sru_08_agc_clutter_lock; + idd_bitfield_u16_t sru_09_aux_computer; + idd_bitfield_u16_t sru_10_main_computer; + idd_bitfield_u16_t sru_11_graphic_computer; + idd_bitfield_u16_t sru_12_power_supply; + idd_bitfield_u16_t sru_13_det_exp; + idd_bitfield_u16_t sru_14_rx_module; + + spare2_15_field_t spare; + icd_raw_word_t raw; +}; + +//Word B8-12: Signal Processor Test Results +union signal_processor_test_result_t +{ + idd_bitfield_u16_t test_sp_01_timer1_micro_p; + idd_bitfield_u16_t test_sp_02_timer1_timing; + idd_bitfield_u16_t test_sp_03_timer1_to_timer2_if; + idd_bitfield_u16_t test_sp_04_time2_micro_p; + idd_bitfield_u16_t test_sp_05_sp_chain_vector_test_coherent_search; + idd_bitfield_u16_t test_sp_06_sp_chain_vector_test_non_coherent_search; + idd_bitfield_u16_t test_sp_07_sp_chain_vector_test_coherent_track; + idd_bitfield_u16_t test_sp_08_sp_chain_vector_test_non_coherent_track; + idd_bitfield_u16_t test_sp_09_a_d_and_d_a; + idd_bitfield_u16_t test_sp_10_sp_if; + idd_bitfield_u16_t test_sp_11_attenuators_and_antenna; + idd_bitfield_u16_t test_sp_12_fast_bus_interface; + idd_bitfield_u16_t test_sp_13_dbs_input; + idd_bitfield_u16_t test_sp_14_external_sp_interfaces; + idd_bitfield_u16_t test_sp_15_dbs_output; + idd_bitfield_u16_t test_sp_16_bcn; + + icd_raw_word_t raw; +}; + +//Word B8-13: Rx Module Test Results +typedef idd_bitfield_u16_t spare10_14_field_t ; +union rx_module_test_results_t +{ + idd_bitfield_u16_t test_rm_01_master_clock_level; + idd_bitfield_u16_t test_rm_02_expander_level; + idd_bitfield_u16_t test_rm_03_sum_channel_down_converter; + idd_bitfield_u16_t test_rm_04_d_g_channel_down_converter; + idd_bitfield_u16_t test_rm_05_noise_attenuators; + spare2_15_field_t spare; + idd_bitfield_u16_t test_rm_16_calibration_sum_channel_fail; + + icd_raw_word_t raw; +}; + +//Word B8-14: Data Processor Test Results +typedef idd_bitfield_u16_t spare2_15_field_t ; +union data_processor_test_results_t +{ + idd_bitfield_u16_t test_dp_01_486_cpu_tests; + idd_bitfield_u16_t test_dp_02_486_interfaces_with_r3000_and_gc; + idd_bitfield_u16_t test_dp_03_486_interface_with_slc; + idd_bitfield_u16_t test_dp_04_slc_communications; + idd_bitfield_u16_t test_dp_05_r3000_cpu_tests; + idd_bitfield_u16_t test_dp_06_r3000_interfaces; + idd_bitfield_u16_t test_dp_07_1553_and_discretes; + idd_bitfield_u16_t test_dp_08_graphic_cpu; + idd_bitfield_u16_t test_dp_09_graphic_processors; + idd_bitfield_u16_t test_dp_10_video_memory; + idd_bitfield_u16_t test_dp_11_video_unit; + idd_bitfield_u16_t test_dp_12_transputer_unit; + idd_bitfield_u16_t test_dp_13_scan_converter_polar_memory; + idd_bitfield_u16_t test_dp_14_scan_converter_format_converter; + + spare2_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word B8-15: Post Processor Test Results +typedef idd_bitfield_u16_t spare8_15_field_t ; +union post_processor_test_results_t +{ + idd_bitfield_u16_t test_pp_01_master_dsp; + idd_bitfield_u16_t test_pp_02_interface_card; + idd_bitfield_u16_t test_pp_03_cpu_cards; + idd_bitfield_u16_t test_pp_04_dma_bus; + idd_bitfield_u16_t test_pp_05_sp_interface; + idd_bitfield_u16_t test_pp_06_dp_interface; + idd_bitfield_u16_t test_pp_07_scan_converter_interface; + idd_bitfield_u16_t test_pp_08_agc_interface; + + spare8_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word B8-16: AGC Test Results +typedef idd_bitfield_u16_t spare1_11_field_t ; +typedef idd_bitfield_u16_t spare1_15_field_t ; +union agc_test_results_t +{ + idd_bitfield_u16_t test_agc_01_non_destr_internal_xyp_ram; + idd_bitfield_u16_t test_agc_02_non_destr_external_xyp_ram; + idd_bitfield_u16_t test_agc_03_eprom_checksum; + idd_bitfield_u16_t test_agc_04_eeprom_checksum; + idd_bitfield_u16_t test_agc_05_dual_port_ram; + idd_bitfield_u16_t test_agc_06_agc_machine; + idd_bitfield_u16_t test_agc_07_sat_machine; + idd_bitfield_u16_t test_agc_08_phs_machine; + idd_bitfield_u16_t test_agc_09_c_ram_xy_data_checksum; + idd_bitfield_u16_t test_agc_10_pulse_compressor_interface; + idd_bitfield_u16_t test_agc_11_dp_interface; + + spare1_11_field_t spare11; + + idd_bitfield_u16_t test_agc_13_taxi_running; + idd_bitfield_u16_t test_agc_14_non_destr_ext_xup_ram; + idd_bitfield_u16_t test_agc_15_servoloop_interface; + + spare1_15_field_t spare15; + + icd_raw_word_t raw; +}; + +//Word B8-17: Power Supply Test Results +typedef idd_bitfield_u16_t spare12_15_field_t ; +union power_supply_test_result_t +{ + idd_bitfield_u16_t test_ps_01_power_supply; + idd_bitfield_u16_t test_ps_02_over_temperature; + idd_bitfield_u16_t test_ps_03; + + spare12_15_field_t spare11; + + icd_raw_word_t raw; +}; + +//Word B8-18: Servoloop Test Results +typedef idd_bitfield_u16_t spare1_15_field_t ; +union servoloop_test_results_t +{ + idd_bitfield_u16_t test_sl_01_low_voltage_power_supply; + idd_bitfield_u16_t test_sl_02_high_voltage_power_supply; + idd_bitfield_u16_t test_sl_03_motors_drivers; + idd_bitfield_u16_t test_sl_04_resolvers_power_supply; + idd_bitfield_u16_t test_sl_05_waveguide_switch; + idd_bitfield_u16_t test_sl_06_over_temperature; + idd_bitfield_u16_t test_sl_07_resolver_to_digital_conv; + idd_bitfield_u16_t test_sl_08_position_loop_error; + idd_bitfield_u16_t test_sl_09_microprocessor; + idd_bitfield_u16_t test_sl_10_agc_control; + idd_bitfield_u16_t test_sl_11_a_and_d; + idd_bitfield_u16_t test_sl_12_d_and_a_s; + idd_bitfield_u16_t test_sl_13_serial_communications; + idd_bitfield_u16_t test_sl_14_taxi_interface; + idd_bitfield_u16_t test_sl_15_pedestal_centre_scan_location; + + spare1_15_field_t spare15; + + icd_raw_word_t raw; +}; + +//Word B8-19: Transmitter Test Results (word 1) +union transmitter_test_result_word_01_t +{ + idd_bitfield_u16_t test_tx_01_microprocessors; + idd_bitfield_u16_t test_tx_02_tx_rf_input; + idd_bitfield_u16_t test_tx_03_twt_rf_input; + idd_bitfield_u16_t test_tx_04_twt_rf_output; + idd_bitfield_u16_t test_tx_05_tx_rf_ouput_level; + idd_bitfield_u16_t test_tx_06_vswr; + idd_bitfield_u16_t test_tx_07_3_phase_input_power; + idd_bitfield_u16_t test_tx_08_low_voltage_power_supplies; + idd_bitfield_u16_t test_tx_09_hv_ps_over_temperature_hazard; + idd_bitfield_u16_t test_tx_10_hv_ps_over_temperature_warning; + idd_bitfield_u16_t test_tx_11_twt_helix_over_current; + idd_bitfield_u16_t test_tx_12_cathode_to_helix_arc; + idd_bitfield_u16_t test_tx_13_twt_over_temperature_hazard; + idd_bitfield_u16_t test_tx_14_txt_over_temperature_warning; + idd_bitfield_u16_t test_tx_15_cathode_under_voltage; + idd_bitfield_u16_t test_tx_16_cathode_over_voltage; + + icd_raw_word_t raw; +}; + +//Word B8-20: Transmitter Test Results (word 2) +typedef idd_bitfield_u16_t spare6_15_field_t ; +union transmitter_test_result_word_02_t +{ + idd_bitfield_u16_t test_tx_17_collector_undex_voltage; + idd_bitfield_u16_t test_tx_18_collector_over_voltage; + idd_bitfield_u16_t test_tx_19_rectified_voltage; + idd_bitfield_u16_t test_tx_20_cathode_inv_current_fail; + idd_bitfield_u16_t test_tx_21_collector_inv_current_fail; + idd_bitfield_u16_t test_tx_22_waveguide_pressurization; + idd_bitfield_u16_t test_tx_23_grid_window_over_duty; + idd_bitfield_u16_t test_tx_24_floating_deck_fail; + idd_bitfield_u16_t test_tx_25_floating_deck_ps_fail; + idd_bitfield_u16_t test_tx_26_power_supplies_synch; + + spare6_15_field_t spare; + + icd_raw_word_t raw; +}; + +//Word B8-21: Receiver and Rx Front-End Test Results +typedef idd_bitfield_u16_t spare3_7_field_t ; +typedef idd_bitfield_u16_t spare6_15_field_t ; +union receiver_and_rx_front_end_test_results_t +{ + idd_bitfield_u16_t test_rx_01_17_collector_undex_voltage; + idd_bitfield_u16_t test_rx_02_collector_over_voltage; + idd_bitfield_u16_t test_rx_03_rectified_voltage; + idd_bitfield_u16_t test_rx_04_cathode_inv_current_fail; + idd_bitfield_u16_t test_rx_05_collector_inv_current_fail; + + spare3_7_field_t spare7; + + idd_bitfield_u16_t test_fe_01_lna; + idd_bitfield_u16_t test_fe_02_agc_attenuators; + + spare6_15_field_t spare6; + + icd_raw_word_t raw; +}; + +//Word B8-22: Integrated System Test Results and LRU status +typedef idd_bitfield_u16_t spare1_15_field_t ; +union integrated_system_test_results_and_lru_status_t +{ + idd_bitfield_u16_t test_is_01_upconverter_chain_levels; + idd_bitfield_u16_t test_is_02_downconverter_chain_levels; + idd_bitfield_u16_t test_is_03_antenna_status_inconsistent; + idd_bitfield_u16_t test_is_04_tx_status_inconsistent; + idd_bitfield_u16_t test_is_05_tx_power_level; + idd_bitfield_u16_t array_status; + idd_bitfield_u16_t pedestal_status; + idd_bitfield_u16_t servoloop_status; + idd_bitfield_u16_t rx_front_end_status; + idd_bitfield_u16_t receiver_status; + idd_bitfield_u16_t transmitter_status; + idd_bitfield_u16_t processor_status; + idd_bitfield_u16_t calibration_noise_fail; + idd_bitfield_u16_t calibration_injection_fail; + idd_bitfield_u16_t calibration_delta_channel_fail; + + spare1_15_field_t spare15; + + icd_raw_word_t raw; +}; + + +//Message B8: BIT Report Message +struct bit_report_message_t +{ + //Word B8-01: BIT Report Label + bit_report_label_union_t bit_report_label; + + //Word B8-02: BIT Report Date + bit_report_date_union_t bit_report_date; + + //Word B8-03: BIT Report Time Tag + time_of_mission_t bit_report_time_tag; + + //Word B8-04: Degradation Conditions (word 1) + degradation_conditions_word_01_t degradation_conditions_word_01; + + //Word B8-05: Degradation Conditions (word 2) + spare16_15_field_t degradation_conditions_word_02; + + //Word B8-06: Failure Location (Pedestal) + failure_location_pedestal_t failure_location_pedestal; + + //Word B8-07: Failure Location (Servoloop) + failure_location_servoloop_t failure_location_servoloop; + + //Word B8-08: Failure Location (RX Front-End) + failure_location_rx_front_end_t failure_location_rx_front_end; + + //Word B8-09: Failure Location (Receiver) + failure_location_receiver_t failure_location_receiver; + + //Word B8-10: Failure Location (Transmitter) + failure_location_transmitter_t failure_location_transmitter; + + //Word B8-11: Failure Location (Processor) + failure_location_processor_t failure_location_processor; + + //Word B8-12: Signal Processor Test Results + signal_processor_test_result_t signal_processor_test_result; + + //Word B8-13: Rx Module Test Results + rx_module_test_results_t rx_module_test_results; + + //Word B8-14: Data Processor Test Results + data_processor_test_results_t data_processor_test_results; + + //Word B8-15: Post Processor Test Results + post_processor_test_results_t post_processor_test_results; + + //Word B8-16: AGC Test Results + agc_test_results_t agc_test_results; + + //Word B8-17: Power Supply Test Results + power_supply_test_result_t power_supply_test_result; + + //Word B8-18: Servoloop Test Results + servoloop_test_results_t servoloop_test_results; + + //Word B8-19: Transmitter Test Results (word 1) + transmitter_test_result_word_01_t transmitter_test_result_word_01; + + //Word B8-20: Transmitter Test Results (word 2) + transmitter_test_result_word_02_t transmitter_test_result_word_02; + + //Word B8-21: Receiver and Rx Front-End Test Results + receiver_and_rx_front_end_test_results_t receiver_and_rx_front_end_test_results; + + //Word B8-22: Integrated System Test Results and LRU status + integrated_system_test_results_and_lru_status_t integrated_system_test_results_and_lru_status; +}; + +ICD_STATIC_CHECK_SIZE_WORD(bit_report_message_t, LEN_B8_bit_report); + + +//Message B9: Reserved Message #1 (Search Target Message) + +struct msg_b09_t +{ + relative_timetag_t tt_low; + relative_timetag_t tt_high; + icd_raw_word_t scan_sts; + semicircle_t nav_az; + semicircle_t nav_el; + semicircle_t body_az; + semicircle_t body_el; + + icd_raw_word_t spare[32-7]; +}; + +ICD_STATIC_CHECK_SIZE_WORD(msg_b09_t, LEN_B9_reserved_1); + +//Message B10: Reserved Message #2 (Mode Data Message) + +struct msg_b10_t +{ + icd_raw_word_t mode; + relative_timetag_t tt_low; + relative_timetag_t tt_high; + + icd_raw_word_t spare[32-3]; +}; + +ICD_STATIC_CHECK_SIZE_WORD(msg_b10_t, LEN_B10_reserved_2); + +//Message B11: Reserved TX Message (Debug Message) + +struct msg_b11_t +{ + icd_raw_word_t spare[32]; +}; + +ICD_STATIC_CHECK_SIZE_WORD(msg_b11_t, LEN_B11_reserved_debug); + + +//**B20 +struct msg_dev0_result_t +{ + icd_raw_word_t spare[32]; +}; + +ICD_STATIC_CHECK_SIZE_WORD(msg_dev0_result_t, LEN_B11_reserved_debug); + + +#include "idd_unpack.h" + + +template class icd1553_message_trait +{ +public: + enum sizes_enum + { + wc=sizeof(T_)/2, + size=sizeof(T_) + }; + enum sa_enum { sa=sa_}; + + enum rxmode {rxtx=rxtx_}; + + typedef T_ type_t; +}; + +#define ICD_MSGLEN(s_) (sizeof(s_)/sizeof(icd_raw_word_t)) + +//With MinGW offsetof() generate a warning to the dummy pointer ot 0! +//#define ICD_WOFFSET(s_, f_) ((((unsigned int)&(((s_*)0x10)->f_))-0x10)/sizeof(icd_raw_word_t)) +#define ICD_WOFFSETOF(s_, f_) (IDD_OFFSETOF(s_, f_)/sizeof(icd_raw_word_t)) +#define ICD_WOFFSETOFD(s_, f_) (IDD_OFFSETOF(s_, f_)/sizeof(icd_raw_dword_t)) + +//Messages traits: + +//RX: +typedef icd1553_message_trait msg_rdr_settings_and_parameters_trait; +typedef icd1553_message_trait msg_rdr_operation_command_trait; +typedef icd1553_message_trait msg_graphic_setting_trait; + +typedef icd1553_message_trait msg_nav_data_and_cursor_trait; +typedef icd1553_message_trait msg_inu_high_speed_trait; + +typedef icd1553_message_trait msg1_data_link_target_trait; +typedef icd1553_message_trait msg2_data_link_target_trait; + +typedef icd1553_message_trait msg_dev0_reserved_trait; +//typedef icd1553_message_trait<21, msg_dev1_reserved_t> msg_dev0_reserved_trait; + +//TX: +typedef icd1553_message_trait tws_status_and_targets_01_02_trait; +typedef icd1553_message_trait tws_status_and_targets_03_04_05_trait; +typedef icd1553_message_trait tws_status_and_targets_06_07_08_trait; + +typedef icd1553_message_trait spt_target_message_trait; +typedef icd1553_message_trait hpt_target_message_trait; + +typedef icd1553_message_trait msg_settings_tellback_trait; +typedef icd1553_message_trait msg_rdr_status_tellback_trait; + +typedef icd1553_message_trait bit_report_message_trait; + +typedef icd1553_message_trait msg_b09_trait; +typedef icd1553_message_trait msg_b10_trait; + +typedef icd1553_message_trait msg_dev0_result_trait; + +class IcdInfo +{ +public: + virtual unsigned int major_version() const =0; + virtual unsigned int minor_version() const =0; + virtual const char* name() const =0; + virtual const char* pn() const =0; + + virtual ~IcdInfo() {} +}; + + +extern IcdInfo& Icd_GetInfo(); + +} //namespace icd1553 + +#include "evo_b1553_bite_icd.h" + +#endif /* B1553_ICD_TH_H_ */ diff --git a/layouts/user_layout.json b/layouts/user_layout.json index 3d441c1..d23cf87 100644 --- a/layouts/user_layout.json +++ b/layouts/user_layout.json @@ -1,5 +1,5 @@ { - "window_geometry": "1600x1099+298+121", + "window_geometry": "1600x1099+156+156", "main_sash_position": [ 1, 793 diff --git a/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_fun_and_param1_tellback.py b/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_fun_and_param1_tellback.py index 944c83f..6c0290f 100644 --- a/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_fun_and_param1_tellback.py +++ b/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_fun_and_param1_tellback.py @@ -7,6 +7,7 @@ em.ENUM_MAP.update({ "rws_submode_tellback" : RwsSubmode, "spot_function_tellback" : SpotSelection, "acm_submode_tellback" : AcmSubmode, + "gm_submode_tellback" : GmSubmode, "expand_tellback" : Expand, "range_scale_tellback" : RangeScale, "number_of_bars_tellback" : BarsNum, @@ -16,14 +17,14 @@ em.ENUM_MAP.update({ class _RdrFunAndParam1TellbackStr(ctypes.LittleEndianStructure): _pack_ = 1 _fields_ = [ - ("azimuth_scan_width_tellback" , ctypes.c_uint16,4), - ("number_of_bars_tellback" , ctypes.c_uint16,2), - ("range_scale_tellback" , ctypes.c_uint16,2), - ("expand_tellback" , ctypes.c_uint16,2), - ("reserved" , ctypes.c_uint16,1), - ("acm_submode_tellback" , ctypes.c_uint16,3), - ("spot_function_tellback" , ctypes.c_uint16,1), - ("rws_submode_tellback" , ctypes.c_uint16,1) + ("azimuth_scan_width_tellback", ctypes.c_uint16, 4), # bit 0-3 + ("number_of_bars_tellback", ctypes.c_uint16, 2), # bit 4-5 + ("range_scale_tellback", ctypes.c_uint16, 2), # bit 6-7 + ("expand_tellback", ctypes.c_uint16, 2), # bit 8-9 + ("gm_submode_tellback", ctypes.c_uint16, 1), # bit 10 + ("acm_submode_tellback", ctypes.c_uint16, 3), # bit 11-13 + ("spot_function_tellback", ctypes.c_uint16, 1), # bit 14 + ("rws_submode_tellback", ctypes.c_uint16, 1) # bit 15 ] class RdrFunAndParam1Tellback(ctypes.Union): @@ -88,20 +89,10 @@ class RdrFunAndParam1Tellback(ctypes.Union): self.raw &= ~(0x03 << (15-11)) self.raw |= (value << (15-11)) - # Bitfield accessors for scan_width + # Bitfield accessors for scan_width (bit 0-3) def get_scan_width(self): - return AzimuthScanWidth((self.raw >> (15-13)) & 0x03) + return AzimuthScanWidth(self.raw & 0x0F) def set_scan_width(self, value): - self.raw &= ~(0x03 << (15-13)) - self.raw |= (value << (15-13)) - - # Bitfield accessors for velocity_scale - - # Bitfield accessors for spare - def get_spare(self): - return (self.raw >> 0) & 0x01 - - def set_spare(self, value): - self.raw &= ~(0x01 << 0) - self.raw |= (value << 0) \ No newline at end of file + self.raw &= ~0x0F + self.raw |= (value & 0x0F) \ No newline at end of file diff --git a/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_fun_and_param2.py b/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_fun_and_param2.py index eb3161e..95dc9aa 100644 --- a/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_fun_and_param2.py +++ b/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_fun_and_param2.py @@ -12,11 +12,10 @@ em.ENUM_MAP.update({ class _RdrFunAndParam2Str(ctypes.LittleEndianStructure): _pack_ = 1 _fields_ = [ - ("spare", ctypes.c_uint16,8), - ("sar_map_orientation", ctypes.c_uint16,2), - ("zoom_command", ctypes.c_uint16,2), - ("spare_2", ctypes.c_uint16,4), - + ("spare_8_15", ctypes.c_uint16, 8), # bit 0-7 + ("sar_map_orientation", ctypes.c_uint16, 2), # bit 8-9 + ("zoom_command", ctypes.c_uint16, 2), # bit 10-11 + ("spare_0_4", ctypes.c_uint16, 4), # bit 12-15 ] @@ -34,21 +33,21 @@ class RdrFunAndParam2(ctypes.Union): self.raw &= ~(0x0F << 12) self.raw |= (value << 12) - # Bitfield accessors for zoom + # Bitfield accessors for zoom (bit 10-11) def get_zoom(self): - return Zoom((self.raw >> 9) & 0x03) + return Zoom((self.raw >> 10) & 0x03) def set_zoom(self, value): - self.raw &= ~(0x03 << 9) - self.raw |= (value << 9) + self.raw &= ~(0x03 << 10) + self.raw |= (value << 10) - # Bitfield accessors for sar_map_orientation + # Bitfield accessors for sar_map_orientation (bit 8-9) def get_sar_map_orientation(self): - return SarMapOrientation((self.raw >> 7) & 0x03) + return SarMapOrientation((self.raw >> 8) & 0x03) def set_sar_map_orientation(self, value): - self.raw &= ~(0x03 << 7) - self.raw |= (value << 7) + self.raw &= ~(0x03 << 8) + self.raw |= (value << 8) # Bitfield accessors for spare_8_15 def get_spare_8_15(self): diff --git a/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_fun_and_param2_tellback.py b/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_fun_and_param2_tellback.py index b5966ed..2e9b0f6 100644 --- a/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_fun_and_param2_tellback.py +++ b/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_fun_and_param2_tellback.py @@ -1,20 +1,58 @@ import ctypes +from .enums import Zoom, SarMapOrientation + +import Grifo_E_1553lib.data_types.enum_map as em + +em.ENUM_MAP.update({ + "zoom_tellback": Zoom, + "sar_map_orientation_tellback": SarMapOrientation, +}) class _RdrFunAndParam2TellbackStr(ctypes.LittleEndianStructure): _pack_ = 1 _fields_ = [ - ("spare2", ctypes.c_uint16,6), - ("reserved9", ctypes.c_uint16,1), - ("reserved8", ctypes.c_uint16,1), - ("reserved6", ctypes.c_uint16,2), - ("reserved4", ctypes.c_uint16,2), - ("spare", ctypes.c_uint16,4), - + ("spare6_15", ctypes.c_uint16, 6), # bit 0-5 + ("sar_spoi_feasibility", ctypes.c_uint16, 1), # bit 6 + ("sar_crs_feasibility", ctypes.c_uint16, 1), # bit 7 + ("sar_map_orientation_tellback", ctypes.c_uint16, 2), # bit 8-9 + ("zoom_tellback", ctypes.c_uint16, 2), # bit 10-11 + ("spare0_4", ctypes.c_uint16, 4), # bit 12-15 ] - - + + class RdrFunAndParam2Tellback(ctypes.Union): _fields_ = [ ("raw", ctypes.c_uint16), ("str", _RdrFunAndParam2TellbackStr) - ] \ No newline at end of file + ] + + # Bitfield accessors for zoom tellback (bit 10-11) + def get_zoom_tellback(self): + return Zoom((self.raw >> 10) & 0x03) + + def set_zoom_tellback(self, value): + self.raw &= ~(0x03 << 10) + self.raw |= (value << 10) + + # Bitfield accessors for sar_map_orientation tellback (bit 8-9) + def get_sar_map_orientation_tellback(self): + return SarMapOrientation((self.raw >> 8) & 0x03) + + def set_sar_map_orientation_tellback(self, value): + self.raw &= ~(0x03 << 8) + self.raw |= (value << 8) + + # Bitfield accessors for SAR feasibility tellbacks + def get_sar_crs_feasibility(self): + return bool((self.raw >> 7) & 0x01) + + def set_sar_crs_feasibility(self, value): + self.raw &= ~(0x01 << 7) + self.raw |= (int(bool(value)) << 7) + + def get_sar_spoi_feasibility(self): + return bool((self.raw >> 6) & 0x01) + + def set_sar_spoi_feasibility(self, value): + self.raw &= ~(0x01 << 6) + self.raw |= (int(bool(value)) << 6) \ No newline at end of file diff --git a/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_mode_command.py b/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_mode_command.py index 532c7a4..55fc951 100644 --- a/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_mode_command.py +++ b/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_mode_command.py @@ -22,6 +22,8 @@ class _RdrModeCommandWordStr(ctypes.LittleEndianStructure): ("spare_0_1", ctypes.c_uint16, 2), ("sar_type", ctypes.c_uint16, 1), ("silence", ctypes.c_uint16, 1), + # reserved11: historically used for EMERGENCY command flag + # GUI mapping: legacy `emergency` -> this reserved11 bit ("reserved11", ctypes.c_uint16, 1), ("stop_powerup", ctypes.c_uint16, 1), ("freeze", ctypes.c_uint16, 1), @@ -77,9 +79,11 @@ class RdrModeCommandWord(ctypes.Union): self.raw = (self.raw & ~(0x01 << 5)) | ((int(value) & 0x01) << 5) def get_reserved11(self): + """Return the reserved11 bit (EMERGENCY flag in some configs).""" return (self.raw >> 4) & 0x01 def set_reserved11(self, value): + """Set the reserved11 bit (EMERGENCY flag in some configs).""" self.raw = (self.raw & ~(0x01 << 4)) | ((int(value) & 0x01) << 4) def get_silence(self): return SilenceSelection((self.raw >> 3) & 0x01) diff --git a/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_status_tellback.py b/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_status_tellback.py index 3290af6..35b6a33 100644 --- a/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_status_tellback.py +++ b/pymsc/PyBusMonitor1553/Grifo_E_1553lib/data_types/rdr_status_tellback.py @@ -88,9 +88,15 @@ class RdrStatusTellback(ctypes.Union): # Bitfield accessors for reserved11 def get_reserved11(self): + """Return the reserved11 bit. + + Note: this bit is used as the EMERGENCY tellback flag in some configurations + (legacy GUI expects `emergency_tellback` -> this reserved11 bit). + """ return (self.raw >> (15-11)) & 0x01 def set_reserved11(self, value): + """Set the reserved11 bit (EMERGENCY tellback in some configs).""" self.raw &= ~(0x01 << (15-11)) self.raw |= (value << (15-11)) diff --git a/pymsc/core/field_mappings.py b/pymsc/core/field_mappings.py index 357ad8c..82263d4 100644 --- a/pymsc/core/field_mappings.py +++ b/pymsc/core/field_mappings.py @@ -60,10 +60,11 @@ A2_FIELD_MAP = { 'PWR_UP_STOP_FUNCT_SEL': 'rdr_mode_command.stop_powerup', 'silence': 'rdr_mode_command.silence', 'SAR_ACQUISITION': 'rdr_mode_command.sar_type', - # 'emergency': 'param2.emergency', # DISABLED - field doesn't exist in param2 + # emergency command -> reserved11 in rdr_mode_command (bit present) + 'emergency': 'rdr_mode_command.reserved11', # RdrFunAndParam1 fields (param1.field_name) - # Note: These use getter/setter methods, not direct attributes + # Note: These use getter/setter methods automatically via get_{field}() 'rws_submode_command': 'param1.rws_submode', 'SPOT_FUNC_SEL': 'param1.spot', 'acm_submode_command': 'param1.acm_submode', @@ -186,12 +187,12 @@ A3_FIELD_MAP = { # ============================================================================ A4_FIELD_MAP = { # Validity and slew - # Note: SAR/Ghost/DTT fields may not exist in A4ValidityAndSlew - checking available getters - # Available: ant_slew_valid, attitude_invalid, baro_intertial_altitude_invalid, cas_invalid, etc. - # These fields might be in a different message or not implemented yet - # 'SAR_ENABLED': 'validity_and_slew.spare1', # DISABLED - field not found - # 'NORM_GHOST_SELECTION': 'validity_and_slew.spare2', # DISABLED - field not found - # 'DTT_ENABLED': 'validity_and_slew.spare3', # DISABLED - field not found + # Note: SAR/Ghost/DTT selectors exist inside the cursor acquisition union + # (`acq_crs_x` -> `CrsMotionX.str`). Map legacy flat names to the nested + # path so GUI controls can access the correct bitfields. + 'SAR_ENABLED': 'acq_crs_x.str.sar_enabled_selector', + 'NORM_GHOST_SELECTION': 'acq_crs_x.str.normal_ghost_selector', + 'DTT_ENABLED': 'acq_crs_x.str.mtt_enabled_selector', 'CLEARANCE_PLANE_DIST': 'clearance_plane_distance', # Timetag @@ -329,6 +330,10 @@ B6_FIELD_MAP = { 'CRS_LON_tellback': 'cursor_pos_longitude', 'crs_x_tellback': 'cursor_x_display_coord_qual.current_x_display_coord', 'crs_y_tellback': 'cursor_y_display_coord.current_y_display_coord', + + # SAR enabled tellback lives in the cursor X coord qualifier (B6 W16) + # map legacy tellback name to the nested bitfield + 'normal_sar_enabled_tellback': 'cursor_x_display_coord_qual.cursor_normal_slave_selector_tellback', # Param tellback 'PARAM_ID_TB': 'param_id_tellback', @@ -349,25 +354,34 @@ B7_FIELD_MAP = { 'stby_tellback': 'rdr_mode_tellback.stby', 'freeze_tellback': 'rdr_mode_tellback.freeze', 'rf_status': 'rdr_mode_tellback.rf_radiation', - # Note: emergency field does not exist in RdrFunAndParam2Tellback + # emergency tellback is stored in reserved11 of rdr_mode_tellback + 'emergency_tellback': 'rdr_mode_tellback.reserved11', # Status flags 'TRANSITION': 'rdr_mode_tellback.transition_status', 'LAST_ACQ_FAIL': 'rdr_mode_tellback.last_acq_result', 'DEGRADED_PERF_STATUS': 'rdr_mode_tellback.spare', # Field not found, using spare - # Function parameters tellback - 'rws_submode_tellback': 'param1_tellback.rws_submode', - 'acm_submode_tellback': 'param1_tellback.acm_submode', - 'gm_submode_tellback': 'param1_tellback.gm_submode', - 'range_scale_tellback': 'param1_tellback.range_scale', - 'bars_tellback': 'param1_tellback.bars_num', - 'scan_width_tellback': 'param1_tellback.scan_width', - # Note: velocity_scale field does not exist in RdrFunAndParam1Tellback - 'velocity_scale_tellback': 'param1_tellback.spare', # Field not found + # Function parameters tellback - use .str for direct bitfield access + 'rws_submode_tellback': 'param1_tellback.str.rws_submode_tellback', + 'spot_function_tellback': 'param1_tellback.str.spot_function_tellback', + 'acm_submode_tellback': 'param1_tellback.str.acm_submode_tellback', + 'gm_submode_tellback': 'param1_tellback.str.gm_submode_tellback', + 'expand_tellback': 'param1_tellback.str.expand_tellback', + 'range_scale_tellback': 'param1_tellback.str.range_scale_tellback', + 'bars_tellback': 'param1_tellback.str.number_of_bars_tellback', + 'scan_width_tellback': 'param1_tellback.str.azimuth_scan_width_tellback', + # Note: velocity_scale and range_scale share the same bits in the tellback union + 'velocity_scale_tellback': 'param1_tellback.str.range_scale_tellback', # SAR 'SAR_ACQUISITION_TB': 'rdr_mode_tellback.sar_type', + # Param2 tellbacks (B7 W3) - use .str for direct bitfield access + 'zoom_tellback': 'param2_tellback.str.zoom_tellback', + 'sar_map_orientation_tellback': 'param2_tellback.str.sar_map_orientation_tellback', + # SAR feasibility flags (B7 W3 bits) + 'sar_crs_feasibility': 'param2_tellback.str.sar_crs_feasibility', + 'sar_spoi_feasibility': 'param2_tellback.str.sar_spoi_feasibility', } # ============================================================================ diff --git a/pymsc/gui/command_registry.py b/pymsc/gui/command_registry.py index 581eff5..342a251 100644 --- a/pymsc/gui/command_registry.py +++ b/pymsc/gui/command_registry.py @@ -33,25 +33,41 @@ CHECKBOXES = [ "label": "IBIT", "description": "toggle IBIT status", "param": "0" }, { - "command": "sar_enabled", "message": None, "field": "SAR_ENABLED", "tooltip": "A4 SAR_ENABLED", - "message_tb": None, "field_tb": "", "label": "SAR enabled", "description": "toggle SAR enabled [DISABLED - field not in 1553]", "param": "0" + "command": "sar_enabled", "message": msg_a4, "field": "SAR_ENABLED", "tooltip": "A4 SAR_ENABLED", + "message_tb": msg_b6, "field_tb": "normal_sar_enabled_tellback", "tooltip_tb": "B6 SAR_TB", + "label": "SAR enabled", "description": "toggle SAR enabled", "param": "0" }, { - "command": "ghost_enabled", "message": None, "field": "NORM_GHOST_SELECTION", "tooltip": "A4 Ghost", - "message_tb": None, "field_tb": "", "label": "Ghost enabled", "description": "toggle ghost enabled [DISABLED - field not in 1553]", "param": "0" + "command": "sar_crs_feas", "message": None, "field": "", "tooltip": "", + "message_tb": msg_b7, "field_tb": "sar_crs_feasibility", "tooltip_tb": "B7 CRS_FEAS", + "label": "CRS Feas.", "description": "Cursor CRS feasibility tellback", "param": "0" }, { - "command": "dtt_enabled", "message": None, "field": "DTT_ENABLED", "tooltip": "A4 DTT", - "message_tb": None, "field_tb": "", "label": "DTT enabled", "description": "toggle DTT enabled [DISABLED - field not in 1553]", "param": "0" + "command": "sar_spoi_feas", "message": None, "field": "", "tooltip": "", + "message_tb": msg_b7, "field_tb": "sar_spoi_feasibility", "tooltip_tb": "B7 SPOI_FEAS", + "label": "Spoi Feas.", "description": "Cursor SPOI feasibility tellback", "param": "0" + }, + { + "command": "ghost_enabled", "message": msg_a4, "field": "NORM_GHOST_SELECTION", "tooltip": "A4 Ghost", + "message_tb": None, "field_tb": "", "label": "Ghost enabled", "description": "toggle ghost enabled", "param": "0" + }, + { + "command": "dtt_enabled", "message": msg_a4, "field": "DTT_ENABLED", "tooltip": "A4 DTT", + "message_tb": None, "field_tb": "", "label": "DTT enabled", "description": "toggle DTT enabled", "param": "0" }, { "command": "ale_blanking", "message": msg_a1, "field": "ALE_BLANKING", "tooltip": "A1 ALE", "message_tb": None, "field_tb": "", "label": "ALE blanking", "description": "toggle ALE blanking", "param": "0" }, { - "command": "emergency", "message": None, "field": "emergency", "tooltip": "A2 emergency", - "message_tb": None, "field_tb": "emergency_tellback", "tooltip_tb": "B7 emergency_tb", - "label": "EMERGENCY", "description": "toggle EMERGENCY status [DISABLED - field not in 1553]", "param": "0" + "command": "spot", "message": msg_a2, "field": "SPOT_FUNC_SEL", "tooltip": "A2 SPOT", + "message_tb": msg_b7, "field_tb": "spot_function_tellback", "tooltip_tb": "B7 SPOT_TB", + "label": "Spot", "description": "toggle Spot function", "param": "0" + }, + { + "command": "emergency", "message": msg_a2, "field": "emergency", "tooltip": "A2 emergency", + "message_tb": msg_b7, "field_tb": "emergency_tellback", "tooltip_tb": "B7 emergency_tb", + "label": "EMERGENCY", "description": "toggle EMERGENCY status", "param": "0" }, { "command": "deg_perf", "message": None, "field": "", "message_tb": msg_b7, @@ -135,18 +151,21 @@ COMBOBOXES = [ }, { "command": "expand", "message": msg_a2, "field": "EXPAND", "tooltip": "A2 EXPAND", - "message_tb": None, "field_tb": "", "label": "Expand", "description": "Select Expand", - "values": ["NORMAL", "EXPAND", "EXP_NV2", "EXP_NV3"] + "message_tb": msg_b7, "field_tb": "expand_tellback", "label": "Expand", "description": "Select Expand", + "values": ["EXP_NORMAL", "EXPAND", "EXP_SPARE2", "EXP_SPARE3"], + "values_tb": ["EXP_NORMAL", "EXPAND", "EXP_SPARE2", "EXP_SPARE3"] }, { "command": "zoom", "message": msg_a2, "field": "ZOOM_COMMAND", "tooltip": "A2 ZOOM", - "message_tb": None, "field_tb": "", "label": "Zoom", "description": "Select Zoom", - "values": ["ZOOM_NOT_ATIVE", "ZOOM_IN", "ZOOM_OUT", "ZOOM_SPARE"] + "message_tb": msg_b7, "field_tb": "zoom_tellback", "label": "Zoom", "description": "Select Zoom", + "values": ["ZOOM_NOT_ATIVE", "ZOOM_IN", "ZOOM_OUT", "ZOOM_SPARE"], + "values_tb": ["ZOOM_NOT_ATIVE", "ZOOM_IN", "ZOOM_OUT", "ZOOM_SPARE"] }, { "command": "sar_map_orientation", "message": msg_a2, "field": "SAR_MAP_ORIENTATION", "tooltip": "A2 SAR MAP", - "message_tb": None, "field_tb": "", "label": "Sar map orient.", "description": "Select Sar map orientation", - "values": ["SAR_AC_NOSE_REFERENCE", "SAR_SLANT_CROSS_RANGE", "NOT_USED_1", "NOT_USED_2"] + "message_tb": msg_b7, "field_tb": "sar_map_orientation_tellback", "label": "Sar map orient.", "description": "Select Sar map orientation", + "values": ["SAR_AC_NOSE_REFERENCE", "SAR_SLANT_CROSS_RANGE", "NOT_USED_1", "NOT_USED_2"], + "values_tb": ["SAR_AC_NOSE_REFERENCE", "SAR_SLANT_CROSS_RANGE", "NOT_USED_1", "NOT_USED_2"] }, { "command": "ground_tgt_reject", "message": msg_a1, "field": "GND_TGT_REJ_RAD_VEL", "tooltip": "A1 GND REJ", @@ -163,11 +182,6 @@ COMBOBOXES = [ "message_tb": None, "field_tb": "", "label": "Power-up stop", "description": "Select Power-up stop", "values": ["NORMAL", "STOP"] }, - { - "command": "spot", "message": msg_a2, "field": "SPOT_FUNC_SEL", "tooltip": "A2 SPOT", - "message_tb": None, "field_tb": "", "label": "Spot", "description": "Select Spot function", - "values": ["NORMAL", "STOP"] - }, { "command": "alt_block", "message": msg_a1, "field": "alt_block", "tooltip": "A1 alt_block", "message_tb": msg_b6, "field_tb": "alt_block_tellback", "tooltip_tb": "B6 alt_block_tb",