예제 #1
0
        // This method will accept a buffer of data with the assumption that
        // category has been determined. It will then decode the data and save
        // it in the shared buffer. Everry time a message is passed in the data
        // will be appended to the buffer. This means that each line will contain
        // data for one message. For data items which are not in the message,
        // indicated by the FSPEC field, N/A will be inserted instead. The shared
        // buffer is loacted in the SharedData and will not be saved. It is
        //  responsibility of the user to save the data in a file it desired.
        public static void Do(byte[] Data)
        {
            // I048/010     Data Source Identifier                          2
            // NO NEED to do anything this is handled in CAT01

            // I048/140 Time-of-Day                                         3
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("140")].CurrentlyPresent == true)
            {
                CAT48I140UserData.DecodeCAT48I140(Data);
            }

            // I048/020 Target Report Descriptor                            1+
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("020")].CurrentlyPresent == true)
            {
                CAT48I020UserData.DecodeCAT48I002(Data);
            }

            // I048/040 Measured Position in Slant Polar Coordinates        4
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("040")].CurrentlyPresent == true)
            {
                CAT48I040UserData.DecodeCAT48I040(Data);
            }

            // I048/070 Mode-3/A Code in Octal Representation               2
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("070")].CurrentlyPresent == true)
            {
                CAT48I070UserData.DecodeCAT48I070(Data);
            }

            // I048/090 Flight Level in Binary Representation               2
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("090")].CurrentlyPresent == true)
            {
                CAT48I090UserData.DecodeCAT48I090(Data);
            }

            // I048/130 Radar Plot Characteristics                          1 + 1+
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("130")].CurrentlyPresent == true)
            {
                CAT48I130UserData.DecodeCAT48I130(Data);
            }

            // n.a.         Field Extension Indicator

            // I048/220 Aircraft Address                                    3
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("220")].CurrentlyPresent == true)
            {
                CAT48I220UserData.DecodeCAT48I220(Data);
            }

            // I048/240 Aircraft Identification                             6
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("240")].CurrentlyPresent == true)
            {
                CAT48I240UserData.DecodeCAT48I240(Data);
            }

            // I048/250 Mode S MB Data                                      1+8*N
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("250")].CurrentlyPresent == true)
            {
                CAT48I250UserData.DecodeCAT48I250(Data);
            }

            // I048/161 Track Number                                        2
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("161")].CurrentlyPresent == true)
            {
                CAT48I161UserData.DecodeCAT48I161(Data);
            }

            // I048/042 Calculated Position in Cartesian Coordinates        4
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("042")].CurrentlyPresent == true)
            {
                CAT48I042UserData.DecodeCAT48I042(Data);
            }

            // I048/200 Calculated Track Velocity in Polar Representation   4
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("200")].CurrentlyPresent == true)
            {
                CAT48I200UserData.DecodeCAT48I200(Data);
            }

            // I048/170 Track Status                                        1+
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("170")].CurrentlyPresent == true)
            {
                CAT48I170UserData.DecodeCAT48I170(Data);
            }

            // n.a.         Field Extension Indicator

            // I048/210 Track Quality                                       4
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("210")].CurrentlyPresent == true)
            {
                CAT48I210UserData.DecodeCAT48I210(Data);
            }

            // I048/030 Warning/Error Conditions                            1+
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("030")].CurrentlyPresent == true)
            {
                CAT48I030UserData.DecodeCAT48I030(Data);
            }
            // I048/080 Mode-3/A Code Confidence Indicator                  2
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("080")].CurrentlyPresent == true)
            {
                CAT48I080UserData.DecodeCAT48I080(Data);
            }

            // I048/100 Mode-C Code and Confidence Indicator                4
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("100")].CurrentlyPresent == true)
            {
                CAT48I100UserData.DecodeCAT48I100(Data);
            }

            // I048/110 Height Measured by 3D Radar                         2
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("110")].CurrentlyPresent == true)
            {
                CAT48I110UserData.DecodeCAT48I110(Data);
            }

            // I048/120 Radial Doppler Speed                                1+
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("120")].CurrentlyPresent == true)
            {
                CAT48I120UserData.DecodeCAT48I120(Data);
            }

            // I048/230 Communications / ACAS Capability and Flight Status  2
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("230")].CurrentlyPresent == true)
            {
                CAT48I230UserData.DecodeCAT48I230(Data);
            }

            // n.a.         Field Extension Indicator

            // I048/260 ACAS Resolution Advisory Report                     7
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("260")].CurrentlyPresent == true)
            {
                CAT48I260UserData.DecodeCAT48I260(Data);
            }

            // I048/055 Mode-1 Code in Octal Representation                 1
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("055")].CurrentlyPresent == true)
            {
                CAT48I055UserData.DecodeCAT48I055(Data);
            }

            // I048/050, Mode-2 Code in Octal Representation
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("050")].CurrentlyPresent == true)
            {
                CAT48I050UserData.DecodeCAT48I050(Data);
            }

            // I048/065 Mode-1 Code Confidence Indicator                    1
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("065")].CurrentlyPresent == true)
            {
                CAT48I065UserData.DecodeCAT48I065(Data);
            }

            // I048/060 Mode-2 Code Confidence Indicator                    2
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("060")].CurrentlyPresent == true)
            {
                CAT48I060UserData.DecodeCAT48I060(Data);
            }

            //  Reserved for Special Purpose Indicator (SP)                       1+
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("SPI")].CurrentlyPresent == true)
            {
                CAT48ISPIUserData.DecodeCAT48ISPI(Data);
            }

            ////////////////////////////////////////////////////////////////////////////////////
            // All CAT48 data has been decoded, so lets save off the message data to the global
            // storage for latter usage

            MainASTERIXDataStorage.CAT48Data CAT48MessageData = new MainASTERIXDataStorage.CAT48Data();

            foreach (CAT48.CAT48DataItem Item in CAT48.I048DataItems)
            {
                CAT48.CAT48DataItem MyItem = new CAT48.CAT48DataItem();

                MyItem.CurrentlyPresent = Item.CurrentlyPresent;
                MyItem.Description      = Item.Description;
                MyItem.HasBeenPresent   = Item.HasBeenPresent;
                MyItem.ID    = Item.ID;
                MyItem.value = Item.value;

                CAT48MessageData.CAT48DataItems.Add(MyItem);
            }

            MainASTERIXDataStorage.CAT48Message.Add(CAT48MessageData);
            CAT48.Intitialize(false);
        }
        public static void DecodeCAT48I002(byte[] Data)
        {
            // Decode 020
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("020")].HasBeenPresent == true)
            {
                // First define CAT48I002 class
                CAT48I020UserData MyI002UserData = new CAT48I020UserData();

                // Get an instance of bit ops
                Bit_Ops BO = new Bit_Ops();

                //Extract the first octet
                BO.DWord[Bit_Ops.Bits0_7_Of_DWord] = Data[CAT48.CurrentDataBufferOctalIndex];

                ///////////////////////////////////////////////////////////////////////////////////////////////////
                //
                int Type_Result = BitExtractor.GetIntFromThreeBits(BO.DWord[CAT48I020Types.Word1_TYP_Index_1], BO.DWord[CAT48I020Types.Word1_TYP_Index_2], BO.DWord[CAT48I020Types.Word1_TYP_Index_3]);

                switch (Type_Result)
                {
                    // Monoradar Data Target Reports, from a Radar Surveillance System to an SDPS
                    // (plots and tracks from PSRs, SSRs, MSSRs, excluding Mode S and ground surveillance)
                    case 0:
                        MyI002UserData.Type_Of_Report = CAT48I020Types.Type_Of_Report_Type.No_Detection;
                        break;
                    case 1:
                        MyI002UserData.Type_Of_Report = CAT48I020Types.Type_Of_Report_Type.Single_PSR;
                        break;
                    case 2:
                        MyI002UserData.Type_Of_Report = CAT48I020Types.Type_Of_Report_Type.Single_SSR;
                        break;
                    case 3:
                        MyI002UserData.Type_Of_Report = CAT48I020Types.Type_Of_Report_Type.SSR_PSR_Detection;
                        break;
                    case 4:
                        MyI002UserData.Type_Of_Report = CAT48I020Types.Type_Of_Report_Type.Single_Mode_S_All_Call;
                        break;
                    case 5:
                        MyI002UserData.Type_Of_Report = CAT48I020Types.Type_Of_Report_Type.Single_Mode_S_Roll_Call;
                        break;
                    case 6:
                        MyI002UserData.Type_Of_Report = CAT48I020Types.Type_Of_Report_Type.Mode_S_All_Call_PSR;
                        break;
                    case 7:
                        MyI002UserData.Type_Of_Report = CAT48I020Types.Type_Of_Report_Type.Mode_S_Roll_Call_PSR;
                        break;

                    // Handle unsupported data/categories
                    default:
                        break;
                }

                if (BO.DWord[CAT48I020Types.Word1_SIM_Index] == true)
                    MyI002UserData.Simulated_Or_Actual = CAT48I020Types.Simulated_Or_Actual_Type.Simulated;
                else
                    MyI002UserData.Simulated_Or_Actual = CAT48I020Types.Simulated_Or_Actual_Type.Actual;

                if (BO.DWord[CAT48I020Types.Word1_RDP_Index] == true)
                    MyI002UserData.RDP_Chain = CAT48I020Types.RDP_Chain_Type.RDP_2;
                else
                    MyI002UserData.RDP_Chain = CAT48I020Types.RDP_Chain_Type.RDP_1;

                if (BO.DWord[CAT48I020Types.Word1_SPI_Index] == true)
                    MyI002UserData.Special_Position_Ind = CAT48I020Types.Special_Position_Ind_Type.SPI;
                else
                    MyI002UserData.Special_Position_Ind = CAT48I020Types.Special_Position_Ind_Type.NO_SPI;

                if (BO.DWord[CAT48I020Types.Word1_FFT_Index] == true)
                    MyI002UserData.Data_From_FFT = CAT48I020Types.Data_From_FFT_Type.From_FFT;
                else
                    MyI002UserData.Data_From_FFT = CAT48I020Types.Data_From_FFT_Type.Not_from_FFT;

                 ///////////////////////////////////////////////////////////////////////////////////////////////////
                //
                if (BO.DWord[CAT48I020Types.Word1_FX_Index] == false)
                    MyI002UserData.Next_Extension_1 = CAT48I020Types.Next_Extension_Type.No;

                else
                {
                    // OK we have a filed extension, so lets first move the data buffer to the next
                    // octet
                    CAT48.CurrentDataBufferOctalIndex = CAT48.CurrentDataBufferOctalIndex + 1;

                    //Extract the next octet
                    BO.DWord[Bit_Ops.Bits0_7_Of_DWord] = Data[CAT48.CurrentDataBufferOctalIndex];

                    if (BO.DWord[CAT48I020Types.Word2_TST_Index] == true)
                        MyI002UserData.Test_Target_Indicator = CAT48I020Types.Test_Target_Indicator_Type.Test_Target_Indicator;
                    else
                        MyI002UserData.Test_Target_Indicator = CAT48I020Types.Test_Target_Indicator_Type.Real_Target_Indicator;

                    if (BO.DWord[CAT48I020Types.Word2_MI_Index] == true)
                        MyI002UserData.Military_Emergency = CAT48I020Types.Military_Emergency_Type.Unknown_Data;
                    else
                        MyI002UserData.Military_Emergency = CAT48I020Types.Military_Emergency_Type.Unknown_Data;

                    if (BO.DWord[CAT48I020Types.Word2_ME_Index] == true)
                        MyI002UserData.Military_Identification = CAT48I020Types.Military_Identification_Type.Unknown_Data;
                    else
                        MyI002UserData.Military_Identification = CAT48I020Types.Military_Identification_Type.Unknown_Data;

                    if ((BO.DWord[CAT48I020Types.Word2_FOE_FRI_Start_Index] == true) && (BO.DWord[CAT48I020Types.Word2_FOE_FRI_End_Index] == true))
                    {
                        MyI002UserData.FOE_or_FRI = CAT48I020Types.FOE_or_FRI_Type.No_Replay;
                    }
                    else if (BO.DWord[CAT48I020Types.Word2_FOE_FRI_Start_Index] == true)
                    {
                        MyI002UserData.FOE_or_FRI = CAT48I020Types.FOE_or_FRI_Type.Frendly_Target;
                    }
                    else if (BO.DWord[CAT48I020Types.Word2_FOE_FRI_End_Index] == true)
                    {
                        MyI002UserData.FOE_or_FRI = CAT48I020Types.FOE_or_FRI_Type.Unknown_Target;
                    }
                    else
                        MyI002UserData.FOE_or_FRI = CAT48I020Types.FOE_or_FRI_Type.No_Mode_4;

                }
                //////////////////////////////////////////////////////////////////////////////////
                // Now assign it to the generic list
                CAT48.I048DataItems[CAT48.ItemIDToIndex("020")].value = MyI002UserData;
                //////////////////////////////////////////////////////////////////////////////////
            }
        }
예제 #3
0
        public static void DecodeCAT48I002(byte[] Data)
        {
            // Decode 020
            if (CAT48.I048DataItems[CAT48.ItemIDToIndex("020")].HasBeenPresent == true)
            {
                // First define CAT48I002 class
                CAT48I020UserData MyI002UserData = new CAT48I020UserData();

                // Get an instance of bit ops
                Bit_Ops BO = new Bit_Ops();

                //Extract the first octet
                BO.DWord[Bit_Ops.Bits0_7_Of_DWord] = Data[CAT48.CurrentDataBufferOctalIndex];

                ///////////////////////////////////////////////////////////////////////////////////////////////////
                //
                int Type_Result = BitExtractor.GetIntFromThreeBits(BO.DWord[CAT48I020Types.Word1_TYP_Index_1], BO.DWord[CAT48I020Types.Word1_TYP_Index_2], BO.DWord[CAT48I020Types.Word1_TYP_Index_3]);

                switch (Type_Result)
                {
                // Monoradar Data Target Reports, from a Radar Surveillance System to an SDPS
                // (plots and tracks from PSRs, SSRs, MSSRs, excluding Mode S and ground surveillance)
                case 0:
                    MyI002UserData.Type_Of_Report = CAT48I020Types.Type_Of_Report_Type.No_Detection;
                    break;

                case 1:
                    MyI002UserData.Type_Of_Report = CAT48I020Types.Type_Of_Report_Type.Single_PSR;
                    break;

                case 2:
                    MyI002UserData.Type_Of_Report = CAT48I020Types.Type_Of_Report_Type.Single_SSR;
                    break;

                case 3:
                    MyI002UserData.Type_Of_Report = CAT48I020Types.Type_Of_Report_Type.SSR_PSR_Detection;
                    break;

                case 4:
                    MyI002UserData.Type_Of_Report = CAT48I020Types.Type_Of_Report_Type.Single_Mode_S_All_Call;
                    break;

                case 5:
                    MyI002UserData.Type_Of_Report = CAT48I020Types.Type_Of_Report_Type.Single_Mode_S_Roll_Call;
                    break;

                case 6:
                    MyI002UserData.Type_Of_Report = CAT48I020Types.Type_Of_Report_Type.Mode_S_All_Call_PSR;
                    break;

                case 7:
                    MyI002UserData.Type_Of_Report = CAT48I020Types.Type_Of_Report_Type.Mode_S_Roll_Call_PSR;
                    break;

                // Handle unsupported data/categories
                default:
                    break;
                }


                if (BO.DWord[CAT48I020Types.Word1_SIM_Index] == true)
                {
                    MyI002UserData.Simulated_Or_Actual = CAT48I020Types.Simulated_Or_Actual_Type.Simulated;
                }
                else
                {
                    MyI002UserData.Simulated_Or_Actual = CAT48I020Types.Simulated_Or_Actual_Type.Actual;
                }


                if (BO.DWord[CAT48I020Types.Word1_RDP_Index] == true)
                {
                    MyI002UserData.RDP_Chain = CAT48I020Types.RDP_Chain_Type.RDP_2;
                }
                else
                {
                    MyI002UserData.RDP_Chain = CAT48I020Types.RDP_Chain_Type.RDP_1;
                }


                if (BO.DWord[CAT48I020Types.Word1_SPI_Index] == true)
                {
                    MyI002UserData.Special_Position_Ind = CAT48I020Types.Special_Position_Ind_Type.SPI;
                }
                else
                {
                    MyI002UserData.Special_Position_Ind = CAT48I020Types.Special_Position_Ind_Type.NO_SPI;
                }


                if (BO.DWord[CAT48I020Types.Word1_FFT_Index] == true)
                {
                    MyI002UserData.Data_From_FFT = CAT48I020Types.Data_From_FFT_Type.From_FFT;
                }
                else
                {
                    MyI002UserData.Data_From_FFT = CAT48I020Types.Data_From_FFT_Type.Not_from_FFT;
                }


                ///////////////////////////////////////////////////////////////////////////////////////////////////
                //
                if (BO.DWord[CAT48I020Types.Word1_FX_Index] == false)
                {
                    MyI002UserData.Next_Extension_1 = CAT48I020Types.Next_Extension_Type.No;
                }

                else
                {
                    // OK we have a filed extension, so lets first move the data buffer to the next
                    // octet
                    CAT48.CurrentDataBufferOctalIndex = CAT48.CurrentDataBufferOctalIndex + 1;

                    //Extract the next octet
                    BO.DWord[Bit_Ops.Bits0_7_Of_DWord] = Data[CAT48.CurrentDataBufferOctalIndex];

                    if (BO.DWord[CAT48I020Types.Word2_TST_Index] == true)
                    {
                        MyI002UserData.Test_Target_Indicator = CAT48I020Types.Test_Target_Indicator_Type.Test_Target_Indicator;
                    }
                    else
                    {
                        MyI002UserData.Test_Target_Indicator = CAT48I020Types.Test_Target_Indicator_Type.Real_Target_Indicator;
                    }

                    if (BO.DWord[CAT48I020Types.Word2_MI_Index] == true)
                    {
                        MyI002UserData.Military_Emergency = CAT48I020Types.Military_Emergency_Type.Unknown_Data;
                    }
                    else
                    {
                        MyI002UserData.Military_Emergency = CAT48I020Types.Military_Emergency_Type.Unknown_Data;
                    }

                    if (BO.DWord[CAT48I020Types.Word2_ME_Index] == true)
                    {
                        MyI002UserData.Military_Identification = CAT48I020Types.Military_Identification_Type.Unknown_Data;
                    }
                    else
                    {
                        MyI002UserData.Military_Identification = CAT48I020Types.Military_Identification_Type.Unknown_Data;
                    }


                    if ((BO.DWord[CAT48I020Types.Word2_FOE_FRI_Start_Index] == true) && (BO.DWord[CAT48I020Types.Word2_FOE_FRI_End_Index] == true))
                    {
                        MyI002UserData.FOE_or_FRI = CAT48I020Types.FOE_or_FRI_Type.No_Replay;
                    }
                    else if (BO.DWord[CAT48I020Types.Word2_FOE_FRI_Start_Index] == true)
                    {
                        MyI002UserData.FOE_or_FRI = CAT48I020Types.FOE_or_FRI_Type.Frendly_Target;
                    }
                    else if (BO.DWord[CAT48I020Types.Word2_FOE_FRI_End_Index] == true)
                    {
                        MyI002UserData.FOE_or_FRI = CAT48I020Types.FOE_or_FRI_Type.Unknown_Target;
                    }
                    else
                    {
                        MyI002UserData.FOE_or_FRI = CAT48I020Types.FOE_or_FRI_Type.No_Mode_4;
                    }
                }
                //////////////////////////////////////////////////////////////////////////////////
                // Now assign it to the generic list
                CAT48.I048DataItems[CAT48.ItemIDToIndex("020")].value = MyI002UserData;
                //////////////////////////////////////////////////////////////////////////////////
            }
        }