//!;;Rpy::+
//!;;Rpy::ModelElement: iddtypes::idd_track_types
//!;;Rpy::
//!;;Rpy::Component: IDDComponent 
//!;;Rpy::Configuration: IDDConfig
//!;;Rpy::Project: IDD
//!;;Rpy::
//!;;Rpy::FilePath: idd_track_types.h
//!;;Rpy::Tag: $Tag
//!;;Rpy::
//!;;Rpy::Copyright: Leonardocompany - COMPANY RESTRICTED
//!;;Rpy::
//!;;Rpy::Generated by Rhapsody: 7.5.3 
//!;;Rpy::-


#ifndef idd_track_types_H
#define idd_track_types_H

//## auto_generated
#include "iddtypes.h"
//## dependency idd_antenna_types
#include "idd_antenna_types.h"
//## dependency idd_avionic_types
#include "idd_avionic_types.h"
//## dependency idd_base_types
#include "idd_base_types.h"
//## dependency idd_waveform_types
#include "idd_waveform_types.h"
//## dependency stdint
#include "stdint.h"
namespace iddtypes
{
    //## package iddtypes::idd_track_types
    
    
    //#[ type _time_togo_t
    struct _time_togo_t
    {
        bool  valid;
        float time;
    } ;
    //#]
    
    //#[ type target_accuracy_t
    typedef enum CPP_ENUM_BASE(uint32_t)
    {
        accuracy_0,
        accuracy_1,
        accuracy_2,
        accuracy_3
    } target_accuracy_t;
    //#]
    
    //#[ type aspect_angle_t
    typedef enum CPP_ENUM_BASE(uint32_t)
    {
        left_aspect,
        right_aspect
    } aspect_angle_t;
    //#]
    
    //#[ type _tws_hpt_data_t
    struct _tws_hpt_data_t
    {
        float             hpt_mach;
        float             hpt_ground_track;
        float             hpt_cata_az;
        _time_togo_t      hpt_ttogo;
        target_accuracy_t pos_lev;
        target_accuracy_t vel_lev;
        float             hpt_sigma_x;
        float             hpt_sigma_y;
        float             hpt_sigma_z;
    };
    //#]
    
    //#[ type trk_wave_t
    enum trk_wave_t CPP_ENUM_BASE(uint32_t)
    {
        trk_lprf,
        trk_mprf,
        trk_hprf,
        trk_lprf_nc,
        trk_mprf_short,
        trk_wave_not_valid
    };
    //#]
    
    //#[ type tws_src_tgt_t
    typedef struct
    {
        int           associated_track_id;
        seconds_t     time_tag_det;
        metres_t      range;
        radians_t     nav_azimuth_det;
        radians_t     nav_elevation_det;
        trk_wave_t    waveform_det;
        bar_number_t  bar_number_det;
        pure_number_t sdr_det;
        float         in_alt_ac_det;
    } tws_src_tgt_t;
    
    #define TWS_MAX_NUM_SEARCH_TGTS 16
    //#]
    
    //#[ type _tws_search_data_t
    struct _tws_search_data_t
    {
        unsigned int  n_search;
        bar_number_t  bar_index;
        tws_src_tgt_t search_record[TWS_MAX_NUM_SEARCH_TGTS];
    };
    //#]
    
    //#[ type _tws_trk_tgt_t
    struct _tws_trk_tgt_t
    {
        int            track_file_id;
        int            track_priority;
        timetag_t      track_update_time;
        waveform_t     waveform_det;
        float          range_estimate;
        float          azimuth_estimate;
        float          elevation_estimate;
        float          r_state_vel_estimate;
        float          h_state_vel_estimate;
        float          v_state_vel_estimate;
        float          p_r_1_1;
        float          p_az_1_1;
        float          p_el_1_1;
        float          p_r_2_2;
        float          p_az_2_2;
        float          p_el_2_2;
        bool           is_hpt;
        float          altitude;
        float          asp_angle;
        aspect_angle_t asp_lr;
        float          cal_air_speed;
    };
    
    #define TWS_MAX_NUM_TRACKS         16 // array of tracks provided by TWS mode
    
    #define TWS_NUM_OF_TRACKED_TARGETS  8 // maximum number of TWS tracks
    //#]
    
    //#[ type _tws_track_data_t
    struct _tws_track_data_t
    {
        unsigned int   n_tracks;
        _tws_trk_tgt_t  tracks[TWS_MAX_NUM_TRACKS];
        _tws_hpt_data_t hpt_data;
    };
    //#]
    
    //#[ type hpt_spt_local_track_t
    typedef struct
    {
        float p_az_1_1;
        float p_el_1_1;
        float p_r_1_1;
        float tgt_asp_smooth;
        float x_az_1;
        float x_aze_1;
        float x_el_1;
        float x_r_1;
    } hpt_spt_local_track_t;
    //#]
    
    //#[ type hpt_track_status_t
    typedef struct {
        bool incomplete;
        bool normal;
        bool display_vel;
        bool gc_transf;
        bool inaccurate;
        bool jam_bars;
        bool aoj;
        bool hoj;
        bool coast;
        bool zone;
    } hpt_track_status_t;
    //#]
    
    //#[ type _hpt_validity_t
    struct _hpt_validity_t{
        bool cas_and_mach;
        bool aspect_angle;
        bool acceleration;
        bool velocity;
        bool range_rate;
        bool position;
        bool range;
    };
    //#]
    
    //#[ type _hpt_display_t
    struct _hpt_display_t{
        bool                     time_to_go_valid;
        int                      time_to_go_hours;
        int                      time_to_go_minutes;
        int                      time_to_go_seconds;
        float                    cata_azimuth;
        float                    range;
        float                    azimuth;
        float                    elevation;
        float                    altitude;
        float                    aspect_angle;
        iddtypes::aspect_angle_t aspect_lr;
        float                    cas;
        float                    mach_no;
        float                    ground_track;
        float                    ground_speed;
        float                    track_angle;
    };
    //#]
    
    //#[ type _hpt_avionic_t
    struct _hpt_avionic_t{
        int   timetag;
        float range;
        float pos_x;
        float pos_y;
        float pos_z;
        float range_rate;
        float vel_magnitude;
        float vel_x;
        float vel_y;
        float vel_z;
        float acc_magnitude;
        float acc_x;
        float acc_y;
        float acc_z;
        float aspect_angle;
        float cas;
        float mach_no;
        int   pos_x_factor;
        int   pos_y_factor;
        int   pos_z_factor;
    };
    //#]
    
    //#[ type _hpt_avio_ext_t
    struct _hpt_avio_ext_t {
        float sigma_x;
        float sigma_y;
        float sigma_z;
        int   ground_mover_indication;
    };
    //#]
    
    //#[ type hpt_general_t
    typedef	struct {
        _hpt_validity_t             validity;
        hpt_track_status_t          track_status;
        iddtypes::target_accuracy_t pos_accuracy;
        iddtypes::target_accuracy_t vel_accuracy;
        iddtypes::target_accuracy_t acc_accuracy;
    } hpt_general_t;
    //#]
    
    //#[ type hpt_data_t
    typedef	struct {
        hpt_general_t  general;
        _hpt_display_t  display;
        _hpt_avionic_t  avionic;
        _hpt_avio_ext_t avio_ext;
    } hpt_data_t;
    //#]
    
    //#[ type hpt_status_t
    typedef struct
    {
        bool incomplete;
        bool normal;
        bool display_vel;
        bool gc_transf;
        bool inaccurate;
        int  jam_bars;
        bool aoj;
        bool hoj;
        bool in_coast;
        bool in_zone;
    } hpt_status_t;
    //#]
    
    //## type tws_trk_tgt_t
    typedef _tws_trk_tgt_t tws_trk_tgt_t;
    
    //## type tws_hpt_data_t
    typedef _tws_hpt_data_t tws_hpt_data_t;
    
    //## type tws_track_data_t
    typedef _tws_track_data_t tws_track_data_t;
    
    //## type tws_search_data_t
    typedef _tws_search_data_t tws_search_data_t;
    
    //## type time_togo_t
    typedef _time_togo_t time_togo_t;
    
    //## type hpt_validity_t
    typedef _hpt_validity_t hpt_validity_t;
    
    //## type hpt_display_t
    typedef _hpt_display_t hpt_display_t;
    
    //## type hpt_avionic_t
    typedef _hpt_avionic_t hpt_avionic_t;
    
    //## type hpt_avio_ext_t
    typedef _hpt_avio_ext_t hpt_avio_ext_t;
}

#endif
//;;Rpy:: end


