public static void DecodeCAT62I060(byte[] Data) { // A new instance of the CAT48I070 data CAT62I060Types.CAT62060Mode3UserData MyCAT62I060 = new CAT62I060Types.CAT62060Mode3UserData(); // Get an instance of bit ops Bit_Ops BO = new Bit_Ops(); BO.DWord[Bit_Ops.Bits0_7_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex + 1]; BO.DWord[Bit_Ops.Bits8_15_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex]; ////////////////////////////////////////////////////////////////////////////////// // Has code has changed MyCAT62I060.Mode_3A_Has_Changed = (BO.DWord[Bit_Ops.Bit13] == true); ////////////////////////////////////////////////////////////////////////////////// // Decode Code value int A = DetermineOctalFromTheeBoolean(BO.DWord[Bit_Ops.Bit9], BO.DWord[Bit_Ops.Bit10], BO.DWord[Bit_Ops.Bit11]); int B = DetermineOctalFromTheeBoolean(BO.DWord[Bit_Ops.Bit6], BO.DWord[Bit_Ops.Bit7], BO.DWord[Bit_Ops.Bit8]); int C = DetermineOctalFromTheeBoolean(BO.DWord[Bit_Ops.Bit3], BO.DWord[Bit_Ops.Bit4], BO.DWord[Bit_Ops.Bit5]); int D = DetermineOctalFromTheeBoolean(BO.DWord[Bit_Ops.Bit0], BO.DWord[Bit_Ops.Bit1], BO.DWord[Bit_Ops.Bit2]); MyCAT62I060.Mode3A_Code = A.ToString() + B.ToString() + C.ToString() + D.ToString(); ////////////////////////////////////////////////////////////////////////////////// // Now assign it to the generic list CAT62.I062DataItems[CAT62.ItemIDToIndex("060")].value = MyCAT62I060; ////////////////////////////////////////////////////////////////////////////////// // Increase data buffer index so it ready for the next data item. CAT62.CurrentDataBufferOctalIndex = CAT62.CurrentDataBufferOctalIndex + 2; }
public static void DecodeCAT62I015(byte[] Data) { //Extract the first octet int ServiceNumber = Data[CAT62.CurrentDataBufferOctalIndex]; ////////////////////////////////////////////////////////////////////////////////// // Now assign it to the generic list CAT62.I062DataItems[CAT62.ItemIDToIndex("015")].value = ServiceNumber; ////////////////////////////////////////////////////////////////////////////////// // Increase data buffer index so it ready for the next data item. CAT62.CurrentDataBufferOctalIndex = CAT62.CurrentDataBufferOctalIndex + 1; }
public static void DecodeCAT62I040(byte[] Data) { // Get an instance of bit ops Bit_Ops BO = new Bit_Ops(); BO.DWord[Bit_Ops.Bits8_15_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex]; BO.DWord[Bit_Ops.Bits0_7_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex + 1]; int Track_Number = BO.DWord[Bit_Ops.Bits0_15_Of_DWord]; ////////////////////////////////////////////////////////////////////////////////// // Now assign it to the generic list CAT62.I062DataItems[CAT62.ItemIDToIndex("040")].value = Track_Number; ////////////////////////////////////////////////////////////////////////////////// // Increase data buffer index so it ready for the next data item. CAT62.CurrentDataBufferOctalIndex = CAT62.CurrentDataBufferOctalIndex + 2; }
public static void DecodeCAT62I136(byte[] Data) { // Get an instance of bit ops Bit_Ops BO = new Bit_Ops(); BO.DWord[Bit_Ops.Bits0_7_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex + 1]; BO.DWord[Bit_Ops.Bits8_15_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex]; double MeasuredFlightLevel = DecodeFlightLevel(BO); ////////////////////////////////////////////////////////////////////////////////// // Now assign it to the generic list CAT62.I062DataItems[CAT62.ItemIDToIndex("136")].value = MeasuredFlightLevel; ////////////////////////////////////////////////////////////////////////////////// // Increase data buffer index so it ready for the next data item. CAT62.CurrentDataBufferOctalIndex = CAT62.CurrentDataBufferOctalIndex + 2; }
public static void DecodeCAT62I220(byte[] Data) { // Define a global record for all data, then down there depending on the avalability of each field // populate specific items. Each item has validity flag that needs to be set for each available data // item for this message CAT62I220Types.CalculatedRateOfClimbDescent CAT62I220DataRecord = new CAT62I220Types.CalculatedRateOfClimbDescent(); /////////////////////////////////////////////////////////////// // Track_Angle and Magnetic Heading DECODE CONSTANTS double RCD_1 = 6.25; // LSB Feet/MIN double RCD_2 = RCD_1 * 2.0; double RCD_3 = RCD_2 * 2.0; double RCD_4 = RCD_3 * 2.0; double RCD_5 = RCD_4 * 2.0; double RCD_6 = RCD_5 * 2.0; double RCD_7 = RCD_6 * 2.0; double RCD_8 = RCD_7 * 2.0; double RCD_9 = RCD_8 * 2.0; double RCD_10 = RCD_9 * 2.0; double RCD_11 = RCD_10 * 2.0; double RCD_12 = RCD_11 * 2.0; double RCD_13 = RCD_12 * 2.0; double RCD_14 = RCD_13 * 2.0; double RCD_15 = RCD_14 * 2.0; double RCD_16 = RCD_15 * 2.0; // MSB /////////////////////////////////////////////////////////////////// Bit_Ops BO = new Bit_Ops(); BO.DWord[Bit_Ops.Bits0_7_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex + 1]; BO.DWord[Bit_Ops.Bits8_15_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex]; double Value = 0.0; if (BO.DWord[Bit_Ops.Bit15]) { BO.DWord[Bit_Ops.Bit0] = !BO.DWord[Bit_Ops.Bit0]; BO.DWord[Bit_Ops.Bit1] = !BO.DWord[Bit_Ops.Bit1]; BO.DWord[Bit_Ops.Bit2] = !BO.DWord[Bit_Ops.Bit2]; BO.DWord[Bit_Ops.Bit3] = !BO.DWord[Bit_Ops.Bit3]; BO.DWord[Bit_Ops.Bit4] = !BO.DWord[Bit_Ops.Bit4]; BO.DWord[Bit_Ops.Bit5] = !BO.DWord[Bit_Ops.Bit5]; BO.DWord[Bit_Ops.Bit6] = !BO.DWord[Bit_Ops.Bit6]; BO.DWord[Bit_Ops.Bit7] = !BO.DWord[Bit_Ops.Bit7]; BO.DWord[Bit_Ops.Bit8] = !BO.DWord[Bit_Ops.Bit8]; BO.DWord[Bit_Ops.Bit9] = !BO.DWord[Bit_Ops.Bit9]; BO.DWord[Bit_Ops.Bit10] = !BO.DWord[Bit_Ops.Bit10]; BO.DWord[Bit_Ops.Bit11] = !BO.DWord[Bit_Ops.Bit11]; BO.DWord[Bit_Ops.Bit12] = !BO.DWord[Bit_Ops.Bit12]; BO.DWord[Bit_Ops.Bit13] = !BO.DWord[Bit_Ops.Bit13]; BO.DWord[Bit_Ops.Bit14] = !BO.DWord[Bit_Ops.Bit14]; BO.DWord[Bit_Ops.Bit15] = !BO.DWord[Bit_Ops.Bit15]; BO.DWord[Bit_Ops.Bits0_15_Of_DWord] = BO.DWord[Bit_Ops.Bits0_15_Of_DWord] + 1; if (BO.DWord[Bit_Ops.Bit0]) { Value = RCD_1; } if (BO.DWord[Bit_Ops.Bit1]) { Value = Value + RCD_2; } if (BO.DWord[Bit_Ops.Bit2]) { Value = Value + RCD_3; } if (BO.DWord[Bit_Ops.Bit3]) { Value = Value + RCD_4; } if (BO.DWord[Bit_Ops.Bit4]) { Value = Value + RCD_5; } if (BO.DWord[Bit_Ops.Bit5]) { Value = Value + RCD_6; } if (BO.DWord[Bit_Ops.Bit6]) { Value = Value + RCD_7; } if (BO.DWord[Bit_Ops.Bit7]) { Value = Value + RCD_8; } if (BO.DWord[Bit_Ops.Bit8]) { Value = Value + RCD_9; } if (BO.DWord[Bit_Ops.Bit9]) { Value = Value + RCD_10; } if (BO.DWord[Bit_Ops.Bit10]) { Value = Value + RCD_11; } if (BO.DWord[Bit_Ops.Bit11]) { Value = Value + RCD_12; } if (BO.DWord[Bit_Ops.Bit12]) { Value = Value + RCD_13; } if (BO.DWord[Bit_Ops.Bit13]) { Value = Value + RCD_14; } if (BO.DWord[Bit_Ops.Bit14]) { Value = Value + RCD_15; } if (BO.DWord[Bit_Ops.Bit15]) { Value = Value + RCD_16; } Value = -Value; } else { if (BO.DWord[Bit_Ops.Bit0]) { Value = RCD_1; } if (BO.DWord[Bit_Ops.Bit1]) { Value = Value + RCD_2; } if (BO.DWord[Bit_Ops.Bit2]) { Value = Value + RCD_3; } if (BO.DWord[Bit_Ops.Bit3]) { Value = Value + RCD_4; } if (BO.DWord[Bit_Ops.Bit4]) { Value = Value + RCD_5; } if (BO.DWord[Bit_Ops.Bit5]) { Value = Value + RCD_6; } if (BO.DWord[Bit_Ops.Bit6]) { Value = Value + RCD_7; } if (BO.DWord[Bit_Ops.Bit7]) { Value = Value + RCD_8; } if (BO.DWord[Bit_Ops.Bit8]) { Value = Value + RCD_9; } if (BO.DWord[Bit_Ops.Bit9]) { Value = Value + RCD_10; } if (BO.DWord[Bit_Ops.Bit10]) { Value = Value + RCD_11; } if (BO.DWord[Bit_Ops.Bit11]) { Value = Value + RCD_12; } if (BO.DWord[Bit_Ops.Bit12]) { Value = Value + RCD_13; } if (BO.DWord[Bit_Ops.Bit13]) { Value = Value + RCD_14; } if (BO.DWord[Bit_Ops.Bit14]) { Value = Value + RCD_15; } } CAT62I220DataRecord.Is_Valid = true; CAT62I220DataRecord.Value = Value; ////////////////////////////////////////////////////////////////////////////////// // Now assign it to the generic list CAT62.I062DataItems[CAT62.ItemIDToIndex("220")].value = CAT62I220DataRecord; ////////////////////////////////////////////////////////////////////////////////// // Increase data buffer index so it ready for the next data item. CAT62.CurrentDataBufferOctalIndex = CAT62.CurrentDataBufferOctalIndex + 2; }
public static void DecodeCAT62I185(byte[] Data) { CAT62I185Types.CalculatedGSPandHDG_Type CalculatedGSPDandHDG = new CAT62I185Types.CalculatedGSPandHDG_Type(); // Get an instance of bit ops Bit_Ops BO = new Bit_Ops(); BO.DWord[Bit_Ops.Bits0_7_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex + 3]; BO.DWord[Bit_Ops.Bits8_15_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex + 2]; BO.DWord[Bit_Ops.Bits16_23_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex + 1]; BO.DWord[Bit_Ops.Bits24_31_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex]; double Vx = 0.0; double Vy = 0.0; /////////////////////////////////////////////////////////////////////////////////////// // Decode Vx /////////////////////////////////////////////////////////////////////////////////////// if (BO.DWord[Bit_Ops.Bit31] == true) { Bit_Ops BO1_Temp = new Bit_Ops(); BO1_Temp.DWord[Bit_Ops.Bit0] = !BO.DWord[Bit_Ops.Bit16]; BO1_Temp.DWord[Bit_Ops.Bit1] = !BO.DWord[Bit_Ops.Bit17]; BO1_Temp.DWord[Bit_Ops.Bit2] = !BO.DWord[Bit_Ops.Bit18]; BO1_Temp.DWord[Bit_Ops.Bit3] = !BO.DWord[Bit_Ops.Bit19]; BO1_Temp.DWord[Bit_Ops.Bit4] = !BO.DWord[Bit_Ops.Bit20]; BO1_Temp.DWord[Bit_Ops.Bit5] = !BO.DWord[Bit_Ops.Bit21]; BO1_Temp.DWord[Bit_Ops.Bit6] = !BO.DWord[Bit_Ops.Bit22]; BO1_Temp.DWord[Bit_Ops.Bit7] = !BO.DWord[Bit_Ops.Bit23]; BO1_Temp.DWord[Bit_Ops.Bit8] = !BO.DWord[Bit_Ops.Bit24]; BO1_Temp.DWord[Bit_Ops.Bit9] = !BO.DWord[Bit_Ops.Bit25]; BO1_Temp.DWord[Bit_Ops.Bit10] = !BO.DWord[Bit_Ops.Bit26]; BO1_Temp.DWord[Bit_Ops.Bit11] = !BO.DWord[Bit_Ops.Bit27]; BO1_Temp.DWord[Bit_Ops.Bit12] = !BO.DWord[Bit_Ops.Bit28]; BO1_Temp.DWord[Bit_Ops.Bit13] = !BO.DWord[Bit_Ops.Bit29]; BO1_Temp.DWord[Bit_Ops.Bit14] = !BO.DWord[Bit_Ops.Bit30]; BO1_Temp.DWord[Bit_Ops.Bit15] = !BO.DWord[Bit_Ops.Bit31]; BO1_Temp.DWord[Bit_Ops.Bit16] = false; BO1_Temp.DWord[Bit_Ops.Bit17] = false; BO1_Temp.DWord[Bit_Ops.Bit18] = false; BO1_Temp.DWord[Bit_Ops.Bit19] = false; BO1_Temp.DWord[Bit_Ops.Bit20] = false; BO1_Temp.DWord[Bit_Ops.Bit21] = false; BO1_Temp.DWord[Bit_Ops.Bit22] = false; BO1_Temp.DWord[Bit_Ops.Bit23] = false; BO1_Temp.DWord[Bit_Ops.Bit24] = false; BO1_Temp.DWord[Bit_Ops.Bit25] = false; BO1_Temp.DWord[Bit_Ops.Bit26] = false; BO1_Temp.DWord[Bit_Ops.Bit27] = false; BO1_Temp.DWord[Bit_Ops.Bit28] = false; BO1_Temp.DWord[Bit_Ops.Bit29] = false; BO1_Temp.DWord[Bit_Ops.Bit30] = false; BO1_Temp.DWord[Bit_Ops.Bit31] = false; BO1_Temp.DWord[Bit_Ops.Bits0_15_Of_DWord] = BO1_Temp.DWord[Bit_Ops.Bits0_15_Of_DWord] + 1; if (BO1_Temp.DWord[Bit_Ops.Bit0] == true) { Vx = V_1; } if (BO1_Temp.DWord[Bit_Ops.Bit1] == true) { Vx = Vx + V_2; } if (BO1_Temp.DWord[Bit_Ops.Bit2] == true) { Vx = Vx + V_3; } if (BO1_Temp.DWord[Bit_Ops.Bit3] == true) { Vx = Vx + V_4; } if (BO1_Temp.DWord[Bit_Ops.Bit4] == true) { Vx = Vx + V_5; } if (BO1_Temp.DWord[Bit_Ops.Bit5] == true) { Vx = Vx + V_6; } if (BO1_Temp.DWord[Bit_Ops.Bit6] == true) { Vx = Vx + V_7; } if (BO1_Temp.DWord[Bit_Ops.Bit7] == true) { Vx = Vx + V_8; } if (BO1_Temp.DWord[Bit_Ops.Bit8] == true) { Vx = Vx + V_9; } if (BO1_Temp.DWord[Bit_Ops.Bit9] == true) { Vx = Vx + V_10; } if (BO1_Temp.DWord[Bit_Ops.Bit10] == true) { Vx = Vx + V_11; } if (BO1_Temp.DWord[Bit_Ops.Bit11] == true) { Vx = Vx + V_12; } if (BO1_Temp.DWord[Bit_Ops.Bit12] == true) { Vx = Vx + V_13; } if (BO1_Temp.DWord[Bit_Ops.Bit13] == true) { Vx = Vx + V_14; } if (BO1_Temp.DWord[Bit_Ops.Bit14] == true) { Vx = Vx + V_15; } if (BO1_Temp.DWord[Bit_Ops.Bit15] == true) { Vx = Vx + V_16; } Vx = -Vx; } else { if (BO.DWord[Bit_Ops.Bit16] == true) { Vx = V_1; } if (BO.DWord[Bit_Ops.Bit17] == true) { Vx = Vx + V_2; } if (BO.DWord[Bit_Ops.Bit18] == true) { Vx = Vx + V_3; } if (BO.DWord[Bit_Ops.Bit19] == true) { Vx = Vx + V_4; } if (BO.DWord[Bit_Ops.Bit20] == true) { Vx = Vx + V_5; } if (BO.DWord[Bit_Ops.Bit21] == true) { Vx = Vx + V_6; } if (BO.DWord[Bit_Ops.Bit22] == true) { Vx = Vx + V_7; } if (BO.DWord[Bit_Ops.Bit23] == true) { Vx = Vx + V_8; } if (BO.DWord[Bit_Ops.Bit24] == true) { Vx = Vx + V_9; } if (BO.DWord[Bit_Ops.Bit25] == true) { Vx = Vx + V_10; } if (BO.DWord[Bit_Ops.Bit26] == true) { Vx = Vx + V_11; } if (BO.DWord[Bit_Ops.Bit27] == true) { Vx = Vx + V_12; } if (BO.DWord[Bit_Ops.Bit28] == true) { Vx = Vx + V_13; } if (BO.DWord[Bit_Ops.Bit29] == true) { Vx = Vx + V_14; } if (BO.DWord[Bit_Ops.Bit30] == true) { Vx = Vx + V_15; } if (BO.DWord[Bit_Ops.Bit31] == true) { Vx = Vx + V_16; } } /////////////////////////////////////////////////////////////////////////////////////// // Decode Vy /////////////////////////////////////////////////////////////////////////////////////// if (BO.DWord[Bit_Ops.Bit15] == true) { Bit_Ops BO1_Temp = new Bit_Ops(); BO1_Temp.DWord[Bit_Ops.Bit0] = !BO.DWord[Bit_Ops.Bit0]; BO1_Temp.DWord[Bit_Ops.Bit1] = !BO.DWord[Bit_Ops.Bit1]; BO1_Temp.DWord[Bit_Ops.Bit2] = !BO.DWord[Bit_Ops.Bit2]; BO1_Temp.DWord[Bit_Ops.Bit3] = !BO.DWord[Bit_Ops.Bit3]; BO1_Temp.DWord[Bit_Ops.Bit4] = !BO.DWord[Bit_Ops.Bit4]; BO1_Temp.DWord[Bit_Ops.Bit5] = !BO.DWord[Bit_Ops.Bit5]; BO1_Temp.DWord[Bit_Ops.Bit6] = !BO.DWord[Bit_Ops.Bit6]; BO1_Temp.DWord[Bit_Ops.Bit7] = !BO.DWord[Bit_Ops.Bit7]; BO1_Temp.DWord[Bit_Ops.Bit8] = !BO.DWord[Bit_Ops.Bit8]; BO1_Temp.DWord[Bit_Ops.Bit9] = !BO.DWord[Bit_Ops.Bit9]; BO1_Temp.DWord[Bit_Ops.Bit10] = !BO.DWord[Bit_Ops.Bit10]; BO1_Temp.DWord[Bit_Ops.Bit11] = !BO.DWord[Bit_Ops.Bit11]; BO1_Temp.DWord[Bit_Ops.Bit12] = !BO.DWord[Bit_Ops.Bit12]; BO1_Temp.DWord[Bit_Ops.Bit13] = !BO.DWord[Bit_Ops.Bit13]; BO1_Temp.DWord[Bit_Ops.Bit14] = !BO.DWord[Bit_Ops.Bit14]; BO1_Temp.DWord[Bit_Ops.Bit15] = !BO.DWord[Bit_Ops.Bit15]; BO1_Temp.DWord[Bit_Ops.Bit16] = false; BO1_Temp.DWord[Bit_Ops.Bit17] = false; BO1_Temp.DWord[Bit_Ops.Bit18] = false; BO1_Temp.DWord[Bit_Ops.Bit19] = false; BO1_Temp.DWord[Bit_Ops.Bit20] = false; BO1_Temp.DWord[Bit_Ops.Bit21] = false; BO1_Temp.DWord[Bit_Ops.Bit22] = false; BO1_Temp.DWord[Bit_Ops.Bit23] = false; BO1_Temp.DWord[Bit_Ops.Bit24] = false; BO1_Temp.DWord[Bit_Ops.Bit25] = false; BO1_Temp.DWord[Bit_Ops.Bit26] = false; BO1_Temp.DWord[Bit_Ops.Bit27] = false; BO1_Temp.DWord[Bit_Ops.Bit28] = false; BO1_Temp.DWord[Bit_Ops.Bit29] = false; BO1_Temp.DWord[Bit_Ops.Bit30] = false; BO1_Temp.DWord[Bit_Ops.Bit31] = false; BO1_Temp.DWord[Bit_Ops.Bits0_15_Of_DWord] = BO1_Temp.DWord[Bit_Ops.Bits0_15_Of_DWord] + 1; if (BO1_Temp.DWord[Bit_Ops.Bit0] == true) { Vy = V_1; } if (BO1_Temp.DWord[Bit_Ops.Bit1] == true) { Vy = Vy + V_2; } if (BO1_Temp.DWord[Bit_Ops.Bit2] == true) { Vy = Vy + V_3; } if (BO1_Temp.DWord[Bit_Ops.Bit3] == true) { Vy = Vy + V_4; } if (BO1_Temp.DWord[Bit_Ops.Bit4] == true) { Vy = Vy + V_5; } if (BO1_Temp.DWord[Bit_Ops.Bit5] == true) { Vy = Vy + V_6; } if (BO1_Temp.DWord[Bit_Ops.Bit6] == true) { Vy = Vy + V_7; } if (BO1_Temp.DWord[Bit_Ops.Bit7] == true) { Vy = Vy + V_8; } if (BO1_Temp.DWord[Bit_Ops.Bit8] == true) { Vy = Vy + V_9; } if (BO1_Temp.DWord[Bit_Ops.Bit9] == true) { Vy = Vy + V_10; } if (BO1_Temp.DWord[Bit_Ops.Bit10] == true) { Vy = Vy + V_11; } if (BO1_Temp.DWord[Bit_Ops.Bit11] == true) { Vy = Vy + V_12; } if (BO1_Temp.DWord[Bit_Ops.Bit12] == true) { Vy = Vy + V_13; } if (BO1_Temp.DWord[Bit_Ops.Bit13] == true) { Vy = Vy + V_14; } if (BO1_Temp.DWord[Bit_Ops.Bit14] == true) { Vy = Vy + V_15; } if (BO1_Temp.DWord[Bit_Ops.Bit15] == true) { Vy = Vy + V_16; } Vy = -Vy; } else { if (BO.DWord[Bit_Ops.Bit0] == true) { Vy = V_1; } if (BO.DWord[Bit_Ops.Bit1] == true) { Vy = Vy + V_2; } if (BO.DWord[Bit_Ops.Bit2] == true) { Vy = Vy + V_3; } if (BO.DWord[Bit_Ops.Bit3] == true) { Vy = Vy + V_4; } if (BO.DWord[Bit_Ops.Bit4] == true) { Vy = Vy + V_5; } if (BO.DWord[Bit_Ops.Bit5] == true) { Vy = Vy + V_6; } if (BO.DWord[Bit_Ops.Bit6] == true) { Vy = Vy + V_7; } if (BO.DWord[Bit_Ops.Bit7] == true) { Vy = Vy + V_8; } if (BO.DWord[Bit_Ops.Bit8] == true) { Vy = Vy + V_9; } if (BO.DWord[Bit_Ops.Bit9] == true) { Vy = Vy + V_10; } if (BO.DWord[Bit_Ops.Bit10] == true) { Vy = Vy + V_11; } if (BO.DWord[Bit_Ops.Bit11] == true) { Vy = Vy + V_12; } if (BO.DWord[Bit_Ops.Bit12] == true) { Vy = Vy + V_13; } if (BO.DWord[Bit_Ops.Bit13] == true) { Vy = Vy + V_14; } if (BO.DWord[Bit_Ops.Bit14] == true) { Vy = Vy + V_15; } if (BO.DWord[Bit_Ops.Bit15] == true) { Vy = Vy + V_16; } } CalculatedGSPDandHDG = ToPolarFromCarteisan(Vx, Vy); ////////////////////////////////////////////////////////////////////////////////// // Now assign it to the generic list CAT62.I062DataItems[CAT62.ItemIDToIndex("185")].value = CalculatedGSPDandHDG; ////////////////////////////////////////////////////////////////////////////////// // Increase data buffer index so it ready for the next data item. CAT62.CurrentDataBufferOctalIndex = CAT62.CurrentDataBufferOctalIndex + 4; }
// 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 // 2. - Spare - // I062/015 Service Identification 1 if (CAT62.I062DataItems[CAT62.ItemIDToIndex("015")].CurrentlyPresent == true) { CAT62I015UserData.DecodeCAT62I015(Data); } // I062/070 Time Of Track Information 3 if (CAT62.I062DataItems[CAT62.ItemIDToIndex("070")].CurrentlyPresent == true) { CAT62I070UserData.DecodeCAT62I070(Data); } // I062/105 Calculated Track Position (WGS-84) 8 if (CAT62.I062DataItems[CAT62.ItemIDToIndex("105")].CurrentlyPresent == true) { CAT62I105UserData.DecodeCAT62I105(Data); } // I062/100 Calculated Track Position (Cartesian) 6 if (CAT62.I062DataItems[CAT62.ItemIDToIndex("100")].CurrentlyPresent == true) { CAT62I100UserData.DecodeCAT62I100(Data); } // I062/185 Calculated Track Velocity (Cartesian) 4 if (CAT62.I062DataItems[CAT62.ItemIDToIndex("185")].CurrentlyPresent == true) { CAT62I185UserData.DecodeCAT62I185(Data); } // FX. - Field extension indicator - // // I062/210 Calculated Acceleration (Cartesian) 2 if (CAT62.I062DataItems[CAT62.ItemIDToIndex("210")].CurrentlyPresent == true) { CAT62I210UserData.DecodeCAT62I210(Data); } // I062/060 Track Mode 3/A Code 2 if (CAT62.I062DataItems[CAT62.ItemIDToIndex("060")].CurrentlyPresent == true) { CAT62I060UserData.DecodeCAT62I060(Data); } // I062/245 Target Identification 7 if (CAT62.I062DataItems[CAT62.ItemIDToIndex("245")].CurrentlyPresent == true) { CAT62I245UserData.DecodeCAT62I245(Data); } // I062/380 Aircraft Derived Data 1+ if (CAT62.I062DataItems[CAT62.ItemIDToIndex("380")].CurrentlyPresent == true) { CAT62I380UserData.DecodeCAT62I380(Data); } // I062/040 Track Number 2 if (CAT62.I062DataItems[CAT62.ItemIDToIndex("040")].CurrentlyPresent == true) { CAT62I040UserData.DecodeCAT62I040(Data); } // I062/080 Track Status 1+ if (CAT62.I062DataItems[CAT62.ItemIDToIndex("080")].CurrentlyPresent == true) { CAT62I080UserData.DecodeCAT62I080(Data); } // I062/290 System Track Update Ages 1+ if (CAT62.I062DataItems[CAT62.ItemIDToIndex("290")].CurrentlyPresent == true) { CAT62I290UserData.DecodeCAT62I290(Data); } // FX. - Field extension indicator - // // I062/200 Mode of Movement 1 if (CAT62.I062DataItems[CAT62.ItemIDToIndex("200")].CurrentlyPresent == true) { CAT62I200UserData.DecodeCAT62I200(Data); } // I062/295 Track Data Ages 1+ if (CAT62.I062DataItems[CAT62.ItemIDToIndex("295")].CurrentlyPresent == true) { CAT62I295UserData.DecodeCAT62I295(Data); } // I062/136 Measured Flight Level 2 if (CAT62.I062DataItems[CAT62.ItemIDToIndex("136")].CurrentlyPresent == true) { CAT62I136UserData.DecodeCAT62I136(Data); } // I062/130 Calculated Track Geometric Altitude 2 if (CAT62.I062DataItems[CAT62.ItemIDToIndex("130")].CurrentlyPresent == true) { CAT62I130UserData.DecodeCAT62I130(Data); } // I062/135 Calculated Track Barometric Altitude 2 if (CAT62.I062DataItems[CAT62.ItemIDToIndex("135")].CurrentlyPresent == true) { CAT62I135UserData.DecodeCAT62I135(Data); } // I062/220 Calculated Rate Of Climb/Descent 2 if (CAT62.I062DataItems[CAT62.ItemIDToIndex("220")].CurrentlyPresent == true) { CAT62I220UserData.DecodeCAT62I220(Data); } // I062/390 Flight Plan Related Data 1+ if (CAT62.I062DataItems[CAT62.ItemIDToIndex("390")].CurrentlyPresent == true) { CAT62I390UserData.DecodeCAT62I390(Data); } // FX. - Field extension indicator - // // I062/270 Target Size & Orientation 1+ if (CAT62.I062DataItems[CAT62.ItemIDToIndex("270")].CurrentlyPresent == true) { CAT62I270UserData.DecodeCAT62I270(Data); } // I062/300 Vehicle Fleet Identification 1 if (CAT62.I062DataItems[CAT62.ItemIDToIndex("300")].CurrentlyPresent == true) { CAT62I300UserData.DecodeCAT62I300(Data); } // I062/110 Mode 5 Data reports & Extended Mode 1 Code 1+ if (CAT62.I062DataItems[CAT62.ItemIDToIndex("110")].CurrentlyPresent == true) { CAT62I110UserData.DecodeCAT62I110(Data); } // I062/120 Track Mode 2 Code 2 if (CAT62.I062DataItems[CAT62.ItemIDToIndex("120")].CurrentlyPresent == true) { CAT62I120UserData.DecodeCAT62I120(Data); } // I062/510 Composed Track Number 3+ if (CAT62.I062DataItems[CAT62.ItemIDToIndex("510")].CurrentlyPresent == true) { CAT62I510UserData.DecodeCAT62I510(Data); } // I062/500 Estimated Accuracies 1+ if (CAT62.I062DataItems[CAT62.ItemIDToIndex("500")].CurrentlyPresent == true) { CAT62I500UserData.DecodeCAT62I500(Data); } // I062/340 Measured Information 1+ if (CAT62.I062DataItems[CAT62.ItemIDToIndex("340")].CurrentlyPresent == true) { CAT62I340UserData.DecodeCAT62I340(Data); } // FX. - Field extension indicator - // I062/500 Estimated Accuracies 1+ if (CAT62.I062DataItems[CAT62.ItemIDToIndex("REF")].CurrentlyPresent == true) { CAT62IREFUserData.DecodeCAT62IREF(Data); } // I062/340 Measured Information 1+ if (CAT62.I062DataItems[CAT62.ItemIDToIndex("SPI")].CurrentlyPresent == true) { CAT62ISPIUserData.DecodeCAT62ISPI(Data); } //////////////////////////////////////////////////////////////////////////////////// // All CAT62 data has been decoded, so lets save off the message data to the global // storage for latter usage MainASTERIXDataStorage.CAT62Data CAT62MessageData = new MainASTERIXDataStorage.CAT62Data(); foreach (CAT62.CAT062DataItem Item in CAT62.I062DataItems) { CAT62.CAT062DataItem MyItem = new CAT62.CAT062DataItem(); MyItem.CurrentlyPresent = Item.CurrentlyPresent; MyItem.Description = Item.Description; MyItem.HasBeenPresent = Item.HasBeenPresent; MyItem.ID = Item.ID; MyItem.value = Item.value; CAT62MessageData.CAT62DataItems.Add(MyItem); } MainASTERIXDataStorage.CAT62Message.Add(CAT62MessageData); CAT62.Intitialize(false); }
public static void DecodeCAT62I105(byte[] Data) { // Get an instance of bit ops Bit_Ops BO = new Bit_Ops(); BO.DWord[Bit_Ops.Bits0_7_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex + 3]; BO.DWord[Bit_Ops.Bits8_15_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex + 2]; BO.DWord[Bit_Ops.Bits16_23_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex + 1]; BO.DWord[Bit_Ops.Bits24_31_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex]; double Result = 0.0; double Latitude = 0.0; double Longitude = 0.0; // Check for negative values if (BO.DWord[Bit_Ops.Bit31] == true) { BO.DWord[Bit_Ops.Bit0] = !BO.DWord[Bit_Ops.Bit0]; BO.DWord[Bit_Ops.Bit1] = !BO.DWord[Bit_Ops.Bit1]; BO.DWord[Bit_Ops.Bit2] = !BO.DWord[Bit_Ops.Bit2]; BO.DWord[Bit_Ops.Bit3] = !BO.DWord[Bit_Ops.Bit3]; BO.DWord[Bit_Ops.Bit4] = !BO.DWord[Bit_Ops.Bit4]; BO.DWord[Bit_Ops.Bit5] = !BO.DWord[Bit_Ops.Bit5]; BO.DWord[Bit_Ops.Bit6] = !BO.DWord[Bit_Ops.Bit6]; BO.DWord[Bit_Ops.Bit7] = !BO.DWord[Bit_Ops.Bit7]; BO.DWord[Bit_Ops.Bit8] = !BO.DWord[Bit_Ops.Bit8]; BO.DWord[Bit_Ops.Bit9] = !BO.DWord[Bit_Ops.Bit9]; BO.DWord[Bit_Ops.Bit10] = !BO.DWord[Bit_Ops.Bit10]; BO.DWord[Bit_Ops.Bit11] = !BO.DWord[Bit_Ops.Bit11]; BO.DWord[Bit_Ops.Bit12] = !BO.DWord[Bit_Ops.Bit12]; BO.DWord[Bit_Ops.Bit13] = !BO.DWord[Bit_Ops.Bit13]; BO.DWord[Bit_Ops.Bit14] = !BO.DWord[Bit_Ops.Bit14]; BO.DWord[Bit_Ops.Bit15] = !BO.DWord[Bit_Ops.Bit15]; BO.DWord[Bit_Ops.Bit16] = !BO.DWord[Bit_Ops.Bit16]; BO.DWord[Bit_Ops.Bit17] = !BO.DWord[Bit_Ops.Bit17]; BO.DWord[Bit_Ops.Bit18] = !BO.DWord[Bit_Ops.Bit18]; BO.DWord[Bit_Ops.Bit19] = !BO.DWord[Bit_Ops.Bit19]; BO.DWord[Bit_Ops.Bit20] = !BO.DWord[Bit_Ops.Bit20]; BO.DWord[Bit_Ops.Bit21] = !BO.DWord[Bit_Ops.Bit21]; BO.DWord[Bit_Ops.Bit22] = !BO.DWord[Bit_Ops.Bit22]; BO.DWord[Bit_Ops.Bit23] = !BO.DWord[Bit_Ops.Bit23]; BO.DWord[Bit_Ops.Bit24] = !BO.DWord[Bit_Ops.Bit24]; BO.DWord[Bit_Ops.Bit25] = !BO.DWord[Bit_Ops.Bit25]; BO.DWord[Bit_Ops.Bit26] = !BO.DWord[Bit_Ops.Bit26]; BO.DWord[Bit_Ops.Bit27] = !BO.DWord[Bit_Ops.Bit27]; BO.DWord[Bit_Ops.Bit28] = !BO.DWord[Bit_Ops.Bit28]; BO.DWord[Bit_Ops.Bit29] = !BO.DWord[Bit_Ops.Bit29]; BO.DWord[Bit_Ops.Bit30] = !BO.DWord[Bit_Ops.Bit30]; BO.DWord[Bit_Ops.Bit31] = !BO.DWord[Bit_Ops.Bit31]; BO.DWord[Bit_Ops.Bits16_31_Of_DWord] = BO.DWord[Bit_Ops.Bits16_31_Of_DWord] + 1; if (BO.DWord[Bit_Ops.Bit0] == true) { Result = POS_FIX_1; } if (BO.DWord[Bit_Ops.Bit1] == true) { Result = Result + POS_FIX_2; } if (BO.DWord[Bit_Ops.Bit2] == true) { Result = Result + POS_FIX_3; } if (BO.DWord[Bit_Ops.Bit3] == true) { Result = Result + POS_FIX_4; } if (BO.DWord[Bit_Ops.Bit4] == true) { Result = Result + POS_FIX_5; } if (BO.DWord[Bit_Ops.Bit5] == true) { Result = Result + POS_FIX_6; } if (BO.DWord[Bit_Ops.Bit6] == true) { Result = Result + POS_FIX_7; } if (BO.DWord[Bit_Ops.Bit7] == true) { Result = Result + POS_FIX_8; } if (BO.DWord[Bit_Ops.Bit8] == true) { Result = Result + POS_FIX_9; } if (BO.DWord[Bit_Ops.Bit9] == true) { Result = Result + POS_FIX_10; } if (BO.DWord[Bit_Ops.Bit10] == true) { Result = Result + POS_FIX_11; } if (BO.DWord[Bit_Ops.Bit11] == true) { Result = Result + POS_FIX_12; } if (BO.DWord[Bit_Ops.Bit12] == true) { Result = Result + POS_FIX_13; } if (BO.DWord[Bit_Ops.Bit13] == true) { Result = Result + POS_FIX_14; } if (BO.DWord[Bit_Ops.Bit14] == true) { Result = Result + POS_FIX_15; } if (BO.DWord[Bit_Ops.Bit15] == true) { Result = Result + POS_FIX_16; } if (BO.DWord[Bit_Ops.Bit16] == true) { Result = Result + POS_FIX_17; } if (BO.DWord[Bit_Ops.Bit17] == true) { Result = Result + POS_FIX_18; } if (BO.DWord[Bit_Ops.Bit18] == true) { Result = Result + POS_FIX_19; } if (BO.DWord[Bit_Ops.Bit19] == true) { Result = Result + POS_FIX_20; } if (BO.DWord[Bit_Ops.Bit20] == true) { Result = Result + POS_FIX_21; } if (BO.DWord[Bit_Ops.Bit21] == true) { Result = Result + POS_FIX_22; } if (BO.DWord[Bit_Ops.Bit22] == true) { Result = Result + POS_FIX_23; } if (BO.DWord[Bit_Ops.Bit23] == true) { Result = Result + POS_FIX_24; } if (BO.DWord[Bit_Ops.Bit24] == true) { Result = Result + POS_FIX_25; } if (BO.DWord[Bit_Ops.Bit25] == true) { Result = Result + POS_FIX_26; } if (BO.DWord[Bit_Ops.Bit26] == true) { Result = Result + POS_FIX_27; } if (BO.DWord[Bit_Ops.Bit27] == true) { Result = Result + POS_FIX_28; } Latitude = -Result; } else { /////////////////////////////////////////////////////////////////////////////////////// if (BO.DWord[Bit_Ops.Bit0] == true) { Result = POS_FIX_1; } if (BO.DWord[Bit_Ops.Bit1] == true) { Result = Result + POS_FIX_2; } if (BO.DWord[Bit_Ops.Bit2] == true) { Result = Result + POS_FIX_3; } if (BO.DWord[Bit_Ops.Bit3] == true) { Result = Result + POS_FIX_4; } if (BO.DWord[Bit_Ops.Bit4] == true) { Result = Result + POS_FIX_5; } if (BO.DWord[Bit_Ops.Bit5] == true) { Result = Result + POS_FIX_6; } if (BO.DWord[Bit_Ops.Bit6] == true) { Result = Result + POS_FIX_7; } if (BO.DWord[Bit_Ops.Bit7] == true) { Result = Result + POS_FIX_8; } if (BO.DWord[Bit_Ops.Bit8] == true) { Result = Result + POS_FIX_9; } if (BO.DWord[Bit_Ops.Bit9] == true) { Result = Result + POS_FIX_10; } if (BO.DWord[Bit_Ops.Bit10] == true) { Result = Result + POS_FIX_11; } if (BO.DWord[Bit_Ops.Bit11] == true) { Result = Result + POS_FIX_12; } if (BO.DWord[Bit_Ops.Bit12] == true) { Result = Result + POS_FIX_13; } if (BO.DWord[Bit_Ops.Bit13] == true) { Result = Result + POS_FIX_14; } if (BO.DWord[Bit_Ops.Bit14] == true) { Result = Result + POS_FIX_15; } if (BO.DWord[Bit_Ops.Bit15] == true) { Result = Result + POS_FIX_16; } if (BO.DWord[Bit_Ops.Bit16] == true) { Result = Result + POS_FIX_17; } if (BO.DWord[Bit_Ops.Bit17] == true) { Result = Result + POS_FIX_18; } if (BO.DWord[Bit_Ops.Bit18] == true) { Result = Result + POS_FIX_19; } if (BO.DWord[Bit_Ops.Bit19] == true) { Result = Result + POS_FIX_20; } if (BO.DWord[Bit_Ops.Bit20] == true) { Result = Result + POS_FIX_21; } if (BO.DWord[Bit_Ops.Bit21] == true) { Result = Result + POS_FIX_22; } if (BO.DWord[Bit_Ops.Bit22] == true) { Result = Result + POS_FIX_23; } if (BO.DWord[Bit_Ops.Bit23] == true) { Result = Result + POS_FIX_24; } if (BO.DWord[Bit_Ops.Bit24] == true) { Result = Result + POS_FIX_25; } if (BO.DWord[Bit_Ops.Bit25] == true) { Result = Result + POS_FIX_26; } if (BO.DWord[Bit_Ops.Bit26] == true) { Result = Result + POS_FIX_27; } if (BO.DWord[Bit_Ops.Bit27] == true) { Result = Result + POS_FIX_28; } Latitude = Result; } Result = 0.0; BO.DWord[Bit_Ops.Bits0_7_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex + 7]; BO.DWord[Bit_Ops.Bits8_15_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex + 6]; BO.DWord[Bit_Ops.Bits16_23_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex + 5]; BO.DWord[Bit_Ops.Bits24_31_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex + 4]; // Check for negative values if (BO.DWord[Bit_Ops.Bit31] == true) { BO.DWord[Bit_Ops.Bit0] = !BO.DWord[Bit_Ops.Bit0]; BO.DWord[Bit_Ops.Bit1] = !BO.DWord[Bit_Ops.Bit1]; BO.DWord[Bit_Ops.Bit2] = !BO.DWord[Bit_Ops.Bit2]; BO.DWord[Bit_Ops.Bit3] = !BO.DWord[Bit_Ops.Bit3]; BO.DWord[Bit_Ops.Bit4] = !BO.DWord[Bit_Ops.Bit4]; BO.DWord[Bit_Ops.Bit5] = !BO.DWord[Bit_Ops.Bit5]; BO.DWord[Bit_Ops.Bit6] = !BO.DWord[Bit_Ops.Bit6]; BO.DWord[Bit_Ops.Bit7] = !BO.DWord[Bit_Ops.Bit7]; BO.DWord[Bit_Ops.Bit8] = !BO.DWord[Bit_Ops.Bit8]; BO.DWord[Bit_Ops.Bit9] = !BO.DWord[Bit_Ops.Bit9]; BO.DWord[Bit_Ops.Bit10] = !BO.DWord[Bit_Ops.Bit10]; BO.DWord[Bit_Ops.Bit11] = !BO.DWord[Bit_Ops.Bit11]; BO.DWord[Bit_Ops.Bit12] = !BO.DWord[Bit_Ops.Bit12]; BO.DWord[Bit_Ops.Bit13] = !BO.DWord[Bit_Ops.Bit13]; BO.DWord[Bit_Ops.Bit14] = !BO.DWord[Bit_Ops.Bit14]; BO.DWord[Bit_Ops.Bit15] = !BO.DWord[Bit_Ops.Bit15]; BO.DWord[Bit_Ops.Bit16] = !BO.DWord[Bit_Ops.Bit16]; BO.DWord[Bit_Ops.Bit17] = !BO.DWord[Bit_Ops.Bit17]; BO.DWord[Bit_Ops.Bit18] = !BO.DWord[Bit_Ops.Bit18]; BO.DWord[Bit_Ops.Bit19] = !BO.DWord[Bit_Ops.Bit19]; BO.DWord[Bit_Ops.Bit20] = !BO.DWord[Bit_Ops.Bit20]; BO.DWord[Bit_Ops.Bit21] = !BO.DWord[Bit_Ops.Bit21]; BO.DWord[Bit_Ops.Bit22] = !BO.DWord[Bit_Ops.Bit22]; BO.DWord[Bit_Ops.Bit23] = !BO.DWord[Bit_Ops.Bit23]; BO.DWord[Bit_Ops.Bit24] = !BO.DWord[Bit_Ops.Bit24]; BO.DWord[Bit_Ops.Bit25] = !BO.DWord[Bit_Ops.Bit25]; BO.DWord[Bit_Ops.Bit26] = !BO.DWord[Bit_Ops.Bit26]; BO.DWord[Bit_Ops.Bit27] = !BO.DWord[Bit_Ops.Bit27]; BO.DWord[Bit_Ops.Bit28] = !BO.DWord[Bit_Ops.Bit28]; BO.DWord[Bit_Ops.Bit29] = !BO.DWord[Bit_Ops.Bit29]; BO.DWord[Bit_Ops.Bit30] = !BO.DWord[Bit_Ops.Bit30]; BO.DWord[Bit_Ops.Bit31] = !BO.DWord[Bit_Ops.Bit31]; BO.DWord[Bit_Ops.Bits16_31_Of_DWord] = BO.DWord[Bit_Ops.Bits16_31_Of_DWord] + 1; if (BO.DWord[Bit_Ops.Bit0] == true) { Result = POS_FIX_1; } if (BO.DWord[Bit_Ops.Bit1] == true) { Result = Result + POS_FIX_2; } if (BO.DWord[Bit_Ops.Bit2] == true) { Result = Result + POS_FIX_3; } if (BO.DWord[Bit_Ops.Bit3] == true) { Result = Result + POS_FIX_4; } if (BO.DWord[Bit_Ops.Bit4] == true) { Result = Result + POS_FIX_5; } if (BO.DWord[Bit_Ops.Bit5] == true) { Result = Result + POS_FIX_6; } if (BO.DWord[Bit_Ops.Bit6] == true) { Result = Result + POS_FIX_7; } if (BO.DWord[Bit_Ops.Bit7] == true) { Result = Result + POS_FIX_8; } if (BO.DWord[Bit_Ops.Bit8] == true) { Result = Result + POS_FIX_9; } if (BO.DWord[Bit_Ops.Bit9] == true) { Result = Result + POS_FIX_10; } if (BO.DWord[Bit_Ops.Bit10] == true) { Result = Result + POS_FIX_11; } if (BO.DWord[Bit_Ops.Bit11] == true) { Result = Result + POS_FIX_12; } if (BO.DWord[Bit_Ops.Bit12] == true) { Result = Result + POS_FIX_13; } if (BO.DWord[Bit_Ops.Bit13] == true) { Result = Result + POS_FIX_14; } if (BO.DWord[Bit_Ops.Bit14] == true) { Result = Result + POS_FIX_15; } if (BO.DWord[Bit_Ops.Bit15] == true) { Result = Result + POS_FIX_16; } if (BO.DWord[Bit_Ops.Bit16] == true) { Result = Result + POS_FIX_17; } if (BO.DWord[Bit_Ops.Bit17] == true) { Result = Result + POS_FIX_18; } if (BO.DWord[Bit_Ops.Bit18] == true) { Result = Result + POS_FIX_19; } if (BO.DWord[Bit_Ops.Bit19] == true) { Result = Result + POS_FIX_20; } if (BO.DWord[Bit_Ops.Bit20] == true) { Result = Result + POS_FIX_21; } if (BO.DWord[Bit_Ops.Bit21] == true) { Result = Result + POS_FIX_22; } if (BO.DWord[Bit_Ops.Bit22] == true) { Result = Result + POS_FIX_23; } if (BO.DWord[Bit_Ops.Bit23] == true) { Result = Result + POS_FIX_24; } if (BO.DWord[Bit_Ops.Bit24] == true) { Result = Result + POS_FIX_25; } if (BO.DWord[Bit_Ops.Bit25] == true) { Result = Result + POS_FIX_26; } if (BO.DWord[Bit_Ops.Bit26] == true) { Result = Result + POS_FIX_27; } if (BO.DWord[Bit_Ops.Bit27] == true) { Result = Result + POS_FIX_28; } Longitude = -Result; } else { if (BO.DWord[Bit_Ops.Bit0] == true) { Result = POS_FIX_1; } if (BO.DWord[Bit_Ops.Bit1] == true) { Result = Result + POS_FIX_2; } if (BO.DWord[Bit_Ops.Bit2] == true) { Result = Result + POS_FIX_3; } if (BO.DWord[Bit_Ops.Bit3] == true) { Result = Result + POS_FIX_4; } if (BO.DWord[Bit_Ops.Bit4] == true) { Result = Result + POS_FIX_5; } if (BO.DWord[Bit_Ops.Bit5] == true) { Result = Result + POS_FIX_6; } if (BO.DWord[Bit_Ops.Bit6] == true) { Result = Result + POS_FIX_7; } if (BO.DWord[Bit_Ops.Bit7] == true) { Result = Result + POS_FIX_8; } if (BO.DWord[Bit_Ops.Bit8] == true) { Result = Result + POS_FIX_9; } if (BO.DWord[Bit_Ops.Bit9] == true) { Result = Result + POS_FIX_10; } if (BO.DWord[Bit_Ops.Bit10] == true) { Result = Result + POS_FIX_11; } if (BO.DWord[Bit_Ops.Bit11] == true) { Result = Result + POS_FIX_12; } if (BO.DWord[Bit_Ops.Bit12] == true) { Result = Result + POS_FIX_13; } if (BO.DWord[Bit_Ops.Bit13] == true) { Result = Result + POS_FIX_14; } if (BO.DWord[Bit_Ops.Bit14] == true) { Result = Result + POS_FIX_15; } if (BO.DWord[Bit_Ops.Bit15] == true) { Result = Result + POS_FIX_16; } if (BO.DWord[Bit_Ops.Bit16] == true) { Result = Result + POS_FIX_17; } if (BO.DWord[Bit_Ops.Bit17] == true) { Result = Result + POS_FIX_18; } if (BO.DWord[Bit_Ops.Bit18] == true) { Result = Result + POS_FIX_19; } if (BO.DWord[Bit_Ops.Bit19] == true) { Result = Result + POS_FIX_20; } if (BO.DWord[Bit_Ops.Bit20] == true) { Result = Result + POS_FIX_21; } if (BO.DWord[Bit_Ops.Bit21] == true) { Result = Result + POS_FIX_22; } if (BO.DWord[Bit_Ops.Bit22] == true) { Result = Result + POS_FIX_23; } if (BO.DWord[Bit_Ops.Bit23] == true) { Result = Result + POS_FIX_24; } if (BO.DWord[Bit_Ops.Bit24] == true) { Result = Result + POS_FIX_25; } if (BO.DWord[Bit_Ops.Bit25] == true) { Result = Result + POS_FIX_26; } if (BO.DWord[Bit_Ops.Bit26] == true) { Result = Result + POS_FIX_27; } Longitude = Result; } GeoCordSystemDegMinSecUtilities.LatLongClass LatLong = new GeoCordSystemDegMinSecUtilities.LatLongClass(Latitude, Longitude); ////////////////////////////////////////////////////////////////////////////////// // Now assign it to the generic list CAT62.I062DataItems[CAT62.ItemIDToIndex("105")].value = LatLong; ////////////////////////////////////////////////////////////////////////////////// // Increase data buffer index so it ready for the next data item. CAT62.CurrentDataBufferOctalIndex = CAT62.CurrentDataBufferOctalIndex + 8; }
private static void ExtractAndDecodeASTERIX_CAT_DataBlock(byte[] DataBlock, bool Is_Live_Data) { // First thing is to store the time of the reception regardless of the category received string Time = DateTime.Now.Hour.ToString().PadLeft(2, '0') + ":" + DateTime.Now.Minute.ToString().PadLeft(2, '0') + ":" + DateTime.Now.Second.ToString().PadLeft(2, '0') + ":" + DateTime.Now.Millisecond.ToString().PadLeft(3, '0'); // Save off the time of reception so decoders can use it TimeOfReception = DateTime.Now; // Extract ASTERIX category string Category = ASTERIX.ExtractCategory(DataBlock); // Extract lenght in Bytes, as indicated by the ASTERIX string LengthOfDataBlockInBytes = ASTERIX.ExtractLengthOfDataBlockInBytes(DataBlock); // Here format the lenght of bytes // to always use 3 characters for better alignement if (LengthOfDataBlockInBytes.Length < 3) { LengthOfDataBlockInBytes = "0" + LengthOfDataBlockInBytes; } else if (LengthOfDataBlockInBytes.Length < 2) { LengthOfDataBlockInBytes = "00" + LengthOfDataBlockInBytes; } // Define a string to store data not specific for all messages and add commond data // 1. TIME of reception // 2. Source IP address // 3. Multicast IP address // 4. Length of data block in bytes // 5. Asterix Category // // 6. Append Category specifc data, done just below string Common_Message_Data_String; if (Is_Live_Data == true) Common_Message_Data_String = Time + " " + iep.ToString() + " " + SharedData.CurrentMulticastAddress + ':' + SharedData.Current_Port.ToString() + " " + LengthOfDataBlockInBytes.ToString() + " " + Category + " "; else Common_Message_Data_String = Time + " " + "Recorded" + " " + "Recorded" + ':' + "Recorded" + " " + LengthOfDataBlockInBytes.ToString() + " " + Category + " "; // Hold individual records of the messages // from an individual data block string[] MessageData = new string[3000]; byte[] DataBlockNoCATandLEN = new byte[DataBlock.Length - 3]; // Now after we extracted Category and Lenght of the Data Block lets remove the first three octets from the data // buffer and pass it on to individual message handlers to do message decoding Array.Copy(DataBlock, 3, DataBlockNoCATandLEN, 0, (DataBlock.Length - 3)); DataBlock = DataBlockNoCATandLEN; // Now do a switch based on the category received int NumOfMsgsDecoded = 0; switch (Category) { // 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 "001": if (Properties.Settings.Default.CAT_001_Enabled == true) { CAT01 MyCAT01 = new CAT01(); MessageData = MyCAT01.Decode(DataBlock, Time, out NumOfMsgsDecoded); } break; // Monoradar Service Messages (status, North marker, sector crossing messages) case "002": if (Properties.Settings.Default.CAT_002_Enabled == true) { CAT02 MyCAT02 = new CAT02(); MessageData = MyCAT02.Decode(DataBlock, Time, out NumOfMsgsDecoded); } break; // Monoradar Derived Weather Information case "008": if (Properties.Settings.Default.CAT_008_Enabled == true) { CAT08 MyCAT08 = new CAT08(); } break; // Next version of Category 002: PSR Radar, M-SSR Radar, Mode-S Station case "034": if (Properties.Settings.Default.CAT_034_Enabled == true) { CAT34 MyCAT34 = new CAT34(); MessageData = MyCAT34.Decode(DataBlock, Time, out NumOfMsgsDecoded); } break; // Next version of Category 001: PSR Radar, M-SSR Radar, Mode-S Station case "048": if (Properties.Settings.Default.CAT_048_Enabled == true) { CAT48 MyCAT48 = new CAT48(); MessageData = MyCAT48.Decode(DataBlock, Time, out NumOfMsgsDecoded); } break; // System Track Data(next version of Category 030 & 011, also applicable to non-ARTAS systems) case "062": if (Properties.Settings.Default.CAT_062_Enabled == true) { CAT62 MyCAT62 = new CAT62(); MessageData = MyCAT62.Decode(DataBlock, Time, out NumOfMsgsDecoded); } break; // Sensor Status Messages (SPDS) case "063": if (Properties.Settings.Default.CAT_063_Enabled == true) { CAT63 MyCAT63 = new CAT63(); } break; // SDPS Service Status Messages (SDPS) case "065": if (Properties.Settings.Default.CAT_065_Enabled == true) { CAT65 MyCAT65 = new CAT65(); } break; // Transmission of Reference Trajectory State Vectors case "244": if (Properties.Settings.Default.CAT_244_Enabled == true) { CAT244 MyCAT244 = new CAT244(); } break; // Handle unsupported data/categories default: Common_Message_Data_String = Common_Message_Data_String + " Unsupported category " + Category + " has been received"; break; } if (Properties.Settings.Default.PopulateMainListBox == true) { for (int I = 0; I < NumOfMsgsDecoded; I++) SharedData.DataBox.Items.Add(Common_Message_Data_String + MessageData[I]); } }
private static void ExtractAndDecodeASTERIX_CAT_DataBlock(byte[] DataBlock, bool Is_Live_Data) { // First thing is to store the time of the reception regardless of the category received string Time = DateTime.Now.Hour.ToString().PadLeft(2, '0') + ":" + DateTime.Now.Minute.ToString().PadLeft(2, '0') + ":" + DateTime.Now.Second.ToString().PadLeft(2, '0') + ":" + DateTime.Now.Millisecond.ToString().PadLeft(3, '0'); // Save off the time of reception so decoders can use it TimeOfReception = DateTime.Now; // Extract ASTERIX category string Category = ASTERIX.ExtractCategory(DataBlock); // Extract lenght in Bytes, as indicated by the ASTERIX string LengthOfDataBlockInBytes = ASTERIX.ExtractLengthOfDataBlockInBytes(DataBlock); // Here format the lenght of bytes // to always use 3 characters for better alignement if (LengthOfDataBlockInBytes.Length < 3) { LengthOfDataBlockInBytes = "0" + LengthOfDataBlockInBytes; } else if (LengthOfDataBlockInBytes.Length < 2) { LengthOfDataBlockInBytes = "00" + LengthOfDataBlockInBytes; } // Define a string to store data not specific for all messages and add commond data // 1. TIME of reception // 2. Source IP address // 3. Multicast IP address // 4. Length of data block in bytes // 5. Asterix Category // // 6. Append Category specifc data, done just below string Common_Message_Data_String; if (Is_Live_Data == true) { Common_Message_Data_String = Time + " " + iep.ToString() + " " + SharedData.CurrentMulticastAddress + ':' + SharedData.Current_Port.ToString() + " " + LengthOfDataBlockInBytes.ToString() + " " + Category + " "; } else { Common_Message_Data_String = Time + " " + "Recorded" + " " + "Recorded" + ':' + "Recorded" + " " + LengthOfDataBlockInBytes.ToString() + " " + Category + " "; } // Hold individual records of the messages // from an individual data block string[] MessageData = new string[3000]; byte[] DataBlockNoCATandLEN = new byte[DataBlock.Length - 3]; // Now after we extracted Category and Lenght of the Data Block lets remove the first three octets from the data // buffer and pass it on to individual message handlers to do message decoding Array.Copy(DataBlock, 3, DataBlockNoCATandLEN, 0, (DataBlock.Length - 3)); DataBlock = DataBlockNoCATandLEN; // Now do a switch based on the category received int NumOfMsgsDecoded = 0; switch (Category) { // 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 "001": if (Properties.Settings.Default.CAT_001_Enabled == true) { CAT01 MyCAT01 = new CAT01(); MessageData = MyCAT01.Decode(DataBlock, Time, out NumOfMsgsDecoded); } break; // Monoradar Service Messages (status, North marker, sector crossing messages) case "002": if (Properties.Settings.Default.CAT_002_Enabled == true) { CAT02 MyCAT02 = new CAT02(); MessageData = MyCAT02.Decode(DataBlock, Time, out NumOfMsgsDecoded); } break; // Monoradar Derived Weather Information case "008": if (Properties.Settings.Default.CAT_008_Enabled == true) { CAT08 MyCAT08 = new CAT08(); } break; // Next version of Category 002: PSR Radar, M-SSR Radar, Mode-S Station case "034": if (Properties.Settings.Default.CAT_034_Enabled == true) { CAT34 MyCAT34 = new CAT34(); MessageData = MyCAT34.Decode(DataBlock, Time, out NumOfMsgsDecoded); } break; // Next version of Category 001: PSR Radar, M-SSR Radar, Mode-S Station case "048": if (Properties.Settings.Default.CAT_048_Enabled == true) { CAT48 MyCAT48 = new CAT48(); MessageData = MyCAT48.Decode(DataBlock, Time, out NumOfMsgsDecoded); } break; // System Track Data(next version of Category 030 & 011, also applicable to non-ARTAS systems) case "062": if (Properties.Settings.Default.CAT_062_Enabled == true) { CAT62 MyCAT62 = new CAT62(); MessageData = MyCAT62.Decode(DataBlock, Time, out NumOfMsgsDecoded); } break; // Sensor Status Messages (SPDS) case "063": if (Properties.Settings.Default.CAT_063_Enabled == true) { CAT63 MyCAT63 = new CAT63(); } break; // SDPS Service Status Messages (SDPS) case "065": if (Properties.Settings.Default.CAT_065_Enabled == true) { CAT65 MyCAT65 = new CAT65(); } break; // Transmission of Reference Trajectory State Vectors case "244": if (Properties.Settings.Default.CAT_244_Enabled == true) { CAT244 MyCAT244 = new CAT244(); } break; // Handle unsupported data/categories default: Common_Message_Data_String = Common_Message_Data_String + " Unsupported category " + Category + " has been received"; break; } if (Properties.Settings.Default.PopulateMainListBox == true) { for (int I = 0; I < NumOfMsgsDecoded; I++) { SharedData.DataBox.Items.Add(Common_Message_Data_String + MessageData[I]); } } }
private void EarthPlotExporter_Load(object sender, EventArgs e) { // Each time the form is opened reset code lookup // and then populate based on the latest received // data for (int I = 0; I < SSR_Code_Lookup.Length; I++) { SSR_Code_Lookup[I] = false; } // On load determine what SSR codes are present end populate the combo box if (MainASTERIXDataStorage.CAT01Message.Count > 0) { foreach (MainASTERIXDataStorage.CAT01Data Msg in MainASTERIXDataStorage.CAT01Message) { CAT01I070Types.CAT01070Mode3UserData MyData = (CAT01I070Types.CAT01070Mode3UserData)Msg.CAT01DataItems[CAT01.ItemIDToIndex("070")].value; int Result; if (MyData != null) { if (int.TryParse(MyData.Mode3A_Code, out Result) == true) { SSR_Code_Lookup[Result] = true; } } } } else if (MainASTERIXDataStorage.CAT48Message.Count > 0) { foreach (MainASTERIXDataStorage.CAT48Data Msg in MainASTERIXDataStorage.CAT48Message) { CAT48I070Types.CAT48I070Mode3UserData MyData = (CAT48I070Types.CAT48I070Mode3UserData)Msg.CAT48DataItems[CAT48.ItemIDToIndex("070")].value; int Result; if (MyData != null) { if (int.TryParse(MyData.Mode3A_Code, out Result) == true) { SSR_Code_Lookup[Result] = true; } } } } else if (MainASTERIXDataStorage.CAT62Message.Count > 0) { foreach (MainASTERIXDataStorage.CAT62Data Msg in MainASTERIXDataStorage.CAT62Message) { CAT62I060Types.CAT62060Mode3UserData MyData = (CAT62I060Types.CAT62060Mode3UserData)Msg.CAT62DataItems[CAT62.ItemIDToIndex("060")].value; int Result; if (MyData != null) { if (int.TryParse(MyData.Mode3A_Code, out Result) == true) { SSR_Code_Lookup[Result] = true; } } } } this.comboBox1.Items.Clear(); for (int I = 0; I < SSR_Code_Lookup.Length; I++) { if (SSR_Code_Lookup[I] == true) { this.comboBox1.Items.Add(I.ToString().PadLeft(4, '0')); } } if (this.comboBox1.Items.Count > 0) { this.comboBox1.SelectedIndex = 0; } this.labelNumberofCodes.Text = this.comboBox1.Items.Count.ToString(); }
private string BuildExportedData() { string Data = ""; int TargetNumber = 1; if (TypeOfExporter == ExporterType.GePath) { // On load determine what SSR codes are present end populate the combo box if (MainASTERIXDataStorage.CAT01Message.Count > 0) { foreach (MainASTERIXDataStorage.CAT01Data Msg in MainASTERIXDataStorage.CAT01Message) { CAT01I070Types.CAT01070Mode3UserData Mode3AData = (CAT01I070Types.CAT01070Mode3UserData)Msg.CAT01DataItems[CAT01.ItemIDToIndex("070")].value; if (Mode3AData != null) { if (Mode3AData.Code_Validated == CAT01I070Types.Code_Validation_Type.Code_Validated) { if (Mode3AData.Mode3A_Code == (string)this.comboBox1.Items[this.comboBox1.SelectedIndex]) { // Get Lat/Long CAT01I040Types.CAT01I040MeasuredPosInPolarCoordinates LatLongData = (CAT01I040Types.CAT01I040MeasuredPosInPolarCoordinates)Msg.CAT01DataItems[CAT01.ItemIDToIndex("040")].value; // Get Flight Level CAT01I090Types.CAT01I090FlightLevelUserData FlightLevelData = (CAT01I090Types.CAT01I090FlightLevelUserData)Msg.CAT01DataItems[CAT01.ItemIDToIndex("090")].value; double LevelInMeeters = 0.0; if (FlightLevelData != null) { try { LevelInMeeters = (FlightLevelData.FlightLevel * 100.00) * SharedData.FeetToMeeters; } catch { } } Data = Data + "P" + TargetNumber.ToString() + "," + "SSR" + Mode3AData.Mode3A_Code + "_" + TargetNumber.ToString() + "," + LatLongData.LatLong.GetLatLongDecimal().LongitudeDecimal.ToString() + "," + LatLongData.LatLong.GetLatLongDecimal().LatitudeDecimal.ToString() + "," + LevelInMeeters.ToString() + Environment.NewLine; TargetNumber++; } } } } } else if (MainASTERIXDataStorage.CAT48Message.Count > 0) { foreach (MainASTERIXDataStorage.CAT48Data Msg in MainASTERIXDataStorage.CAT48Message) { CAT48I070Types.CAT48I070Mode3UserData Mode3AData = (CAT48I070Types.CAT48I070Mode3UserData)Msg.CAT48DataItems[CAT48.ItemIDToIndex("070")].value; if (Mode3AData != null) { if (Mode3AData.Code_Validated == CAT48I070Types.Code_Validation_Type.Code_Validated) { if (Mode3AData.Mode3A_Code == (string)this.comboBox1.Items[this.comboBox1.SelectedIndex]) { // Get Lat/Long in decimal CAT48I040Types.CAT48I040MeasuredPosInPolarCoordinates LatLongData = (CAT48I040Types.CAT48I040MeasuredPosInPolarCoordinates)Msg.CAT48DataItems[CAT48.ItemIDToIndex("040")].value; // Get Flight Level CAT48I090Types.CAT48I090FlightLevelUserData FlightLevelData = (CAT48I090Types.CAT48I090FlightLevelUserData)Msg.CAT48DataItems[CAT48.ItemIDToIndex("090")].value; double LevelInMeeters = 0.0; if (FlightLevelData != null) { try { LevelInMeeters = (FlightLevelData.FlightLevel * 100.00) * SharedData.FeetToMeeters; } catch { } } Data = Data + "P" + TargetNumber.ToString() + "," + "SSR" + Mode3AData.Mode3A_Code + "_" + TargetNumber.ToString() + "," + LatLongData.LatLong.GetLatLongDecimal().LongitudeDecimal.ToString() + "," + LatLongData.LatLong.GetLatLongDecimal().LatitudeDecimal.ToString() + "," + LevelInMeeters.ToString() + Environment.NewLine; TargetNumber++; } } } } } else if (MainASTERIXDataStorage.CAT62Message.Count > 0) { foreach (MainASTERIXDataStorage.CAT62Data Msg in MainASTERIXDataStorage.CAT62Message) { CAT62I060Types.CAT62060Mode3UserData Mode3AData = (CAT62I060Types.CAT62060Mode3UserData)Msg.CAT62DataItems[CAT62.ItemIDToIndex("060")].value; if (Mode3AData != null) { if (Mode3AData.Mode3A_Code == (string)this.comboBox1.Items[this.comboBox1.SelectedIndex]) { // Get Lat/Long in decimal GeoCordSystemDegMinSecUtilities.LatLongClass LatLongData = (GeoCordSystemDegMinSecUtilities.LatLongClass)Msg.CAT62DataItems[CAT62.ItemIDToIndex("105")].value; double FlightLevelData = 0.0; if (Msg.CAT62DataItems[CAT62.ItemIDToIndex("136")].value != null) { try { // Get Flight Level FlightLevelData = (double)Msg.CAT62DataItems[CAT62.ItemIDToIndex("136")].value; } catch { } } double LevelInMeeters = (FlightLevelData * 100.00) * SharedData.FeetToMeeters; Data = Data + "P" + TargetNumber.ToString() + "," + "SSR" + Mode3AData.Mode3A_Code + "_" + TargetNumber.ToString() + "," + LatLongData.GetLatLongDecimal().LongitudeDecimal.ToString() + "," + LatLongData.GetLatLongDecimal().LatitudeDecimal.ToString() + "," + LevelInMeeters.ToString() + Environment.NewLine; TargetNumber++; } } } } } else { // On load determine what SSR codes are present end populate the combo box if (MainASTERIXDataStorage.CAT01Message.Count > 0) { foreach (MainASTERIXDataStorage.CAT01Data Msg in MainASTERIXDataStorage.CAT01Message) { CAT01I070Types.CAT01070Mode3UserData Mode3AData = (CAT01I070Types.CAT01070Mode3UserData)Msg.CAT01DataItems[CAT01.ItemIDToIndex("070")].value; if (Mode3AData != null) { if (Mode3AData.Code_Validated == CAT01I070Types.Code_Validation_Type.Code_Validated) { if (Mode3AData.Mode3A_Code == (string)this.comboBox1.Items[this.comboBox1.SelectedIndex]) { // Get Lat/Long CAT01I040Types.CAT01I040MeasuredPosInPolarCoordinates LatLongData = (CAT01I040Types.CAT01I040MeasuredPosInPolarCoordinates)Msg.CAT01DataItems[CAT01.ItemIDToIndex("040")].value; // Get Flight Level CAT01I090Types.CAT01I090FlightLevelUserData FlightLevelData = (CAT01I090Types.CAT01I090FlightLevelUserData)Msg.CAT01DataItems[CAT01.ItemIDToIndex("090")].value; double LevelInMeeters = 0.0; if (FlightLevelData != null) { try { LevelInMeeters = (FlightLevelData.FlightLevel * 100.00) * SharedData.FeetToMeeters; } catch { } } Data = Data + LatLongData.LatLong.GetLatLongDecimal().LongitudeDecimal.ToString() + "," + LatLongData.LatLong.GetLatLongDecimal().LatitudeDecimal.ToString() + "," + LevelInMeeters.ToString() + Environment.NewLine; } } } } } else if (MainASTERIXDataStorage.CAT48Message.Count > 0) { foreach (MainASTERIXDataStorage.CAT48Data Msg in MainASTERIXDataStorage.CAT48Message) { CAT48I070Types.CAT48I070Mode3UserData Mode3AData = (CAT48I070Types.CAT48I070Mode3UserData)Msg.CAT48DataItems[CAT48.ItemIDToIndex("070")].value; if (Mode3AData != null) { if (Mode3AData.Code_Validated == CAT48I070Types.Code_Validation_Type.Code_Validated) { if (Mode3AData.Mode3A_Code == (string)this.comboBox1.Items[this.comboBox1.SelectedIndex]) { // Get Lat/Long in decimal CAT48I040Types.CAT48I040MeasuredPosInPolarCoordinates LatLongData = (CAT48I040Types.CAT48I040MeasuredPosInPolarCoordinates)Msg.CAT48DataItems[CAT48.ItemIDToIndex("040")].value; // Get Flight Level CAT48I090Types.CAT48I090FlightLevelUserData FlightLevelData = (CAT48I090Types.CAT48I090FlightLevelUserData)Msg.CAT48DataItems[CAT48.ItemIDToIndex("090")].value; double LevelInMeeters = 0.0; if (FlightLevelData != null) { try { LevelInMeeters = (FlightLevelData.FlightLevel * 100.00) * SharedData.FeetToMeeters; } catch { } } Data = Data + LatLongData.LatLong.GetLatLongDecimal().LongitudeDecimal.ToString() + "," + LatLongData.LatLong.GetLatLongDecimal().LatitudeDecimal.ToString() + "," + LevelInMeeters.ToString() + Environment.NewLine; } } } } } else if (MainASTERIXDataStorage.CAT62Message.Count > 0) { foreach (MainASTERIXDataStorage.CAT62Data Msg in MainASTERIXDataStorage.CAT62Message) { CAT62I060Types.CAT62060Mode3UserData Mode3AData = (CAT62I060Types.CAT62060Mode3UserData)Msg.CAT62DataItems[CAT62.ItemIDToIndex("060")].value; if (Mode3AData != null) { if (Mode3AData.Mode3A_Code == (string)this.comboBox1.Items[this.comboBox1.SelectedIndex]) { // Get Lat/Long in decimal GeoCordSystemDegMinSecUtilities.LatLongClass LatLongData = (GeoCordSystemDegMinSecUtilities.LatLongClass)Msg.CAT62DataItems[CAT62.ItemIDToIndex("105")].value; double FlightLevelData = 0.0; if (Msg.CAT62DataItems[CAT62.ItemIDToIndex("136")].value != null) { try { // Get Flight Level FlightLevelData = (double)Msg.CAT62DataItems[CAT62.ItemIDToIndex("136")].value; } catch { } } double LevelInMeeters = (FlightLevelData * 100.00) * SharedData.FeetToMeeters; Data = Data + LatLongData.GetLatLongDecimal().LongitudeDecimal.ToString() + "," + LatLongData.GetLatLongDecimal().LatitudeDecimal.ToString() + "," + LevelInMeeters.ToString() + Environment.NewLine; TargetNumber++; } } } } } return(Data); }
private void comboBoxSSRCode_SelectedIndexChanged(object sender, EventArgs e) { this.listBoxDataBySSRCode.Items.Clear(); if (SSR_Code_Lookup.Length > 0) { // On load determine what SSR codes are present end populate the combo box if (MainASTERIXDataStorage.CAT01Message.Count > 0) { foreach (MainASTERIXDataStorage.CAT01Data Msg in MainASTERIXDataStorage.CAT01Message) { CAT01I070Types.CAT01070Mode3UserData MyData = (CAT01I070Types.CAT01070Mode3UserData)Msg.CAT01DataItems[CAT01.ItemIDToIndex("070")].value; if (MyData.Mode3A_Code == this.comboBoxSSRCode.Items[this.comboBoxSSRCode.SelectedIndex].ToString()) { ASTERIX.SIC_SAC_Time SIC_SAC_TIME = (ASTERIX.SIC_SAC_Time)Msg.CAT01DataItems[CAT01.ItemIDToIndex("010")].value; // Display time string Time = SIC_SAC_TIME.TimeofReception.Hour.ToString().PadLeft(2, '0') + ":" + SIC_SAC_TIME.TimeofReception.Minute.ToString().PadLeft(2, '0') + ":" + SIC_SAC_TIME.TimeofReception.Second.ToString().PadLeft(2, '0') + ":" + SIC_SAC_TIME.TimeofReception.Millisecond.ToString().PadLeft(3, '0'); this.listBoxDataBySSRCode.Items.Add("Rcvd Time: " + Time); CAT01I040Types.CAT01I040MeasuredPosInPolarCoordinates PositionData = (CAT01I040Types.CAT01I040MeasuredPosInPolarCoordinates)Msg.CAT01DataItems[CAT01.ItemIDToIndex("040")].value; this.listBoxDataBySSRCode.Items.Add("\tDistance:\t" + PositionData.Measured_Distance); this.listBoxDataBySSRCode.Items.Add("\tAzimuth:\t" + PositionData.Measured_Azimuth.ToString()); string Lat, Lon; PositionData.LatLong.GetDegMinSecStringFormat(out Lat, out Lon); this.listBoxDataBySSRCode.Items.Add("\tLat/Long:\t" + Lat + "/" + Lon); // Display Data CAT01I090Types.CAT01I090FlightLevelUserData FL_Data = (CAT01I090Types.CAT01I090FlightLevelUserData)Msg.CAT01DataItems[CAT01.ItemIDToIndex("090")].value; this.listBoxDataBySSRCode.Items.Add("\tMode Validated:\t" + FL_Data.Code_Validated.ToString()); this.listBoxDataBySSRCode.Items.Add("\tMode Garbled:\t" + FL_Data.Code_Garbled.ToString()); this.listBoxDataBySSRCode.Items.Add("\tFL:\t" + FL_Data.FlightLevel.ToString()); this.listBoxDataBySSRCode.Items.Add(" "); } } } else if (MainASTERIXDataStorage.CAT48Message.Count > 0) { foreach (MainASTERIXDataStorage.CAT48Data Msg in MainASTERIXDataStorage.CAT48Message) { CAT48I070Types.CAT48I070Mode3UserData MyData = (CAT48I070Types.CAT48I070Mode3UserData)Msg.CAT48DataItems[CAT48.ItemIDToIndex("070")].value; if (MyData.Mode3A_Code == this.comboBoxSSRCode.Items[this.comboBoxSSRCode.SelectedIndex].ToString()) { ASTERIX.SIC_SAC_Time SIC_SAC_TIME = (ASTERIX.SIC_SAC_Time)Msg.CAT48DataItems[CAT48.ItemIDToIndex("010")].value; // Display time string Time = SIC_SAC_TIME.TimeofReception.Hour.ToString().PadLeft(2, '0') + ":" + SIC_SAC_TIME.TimeofReception.Minute.ToString().PadLeft(2, '0') + ":" + SIC_SAC_TIME.TimeofReception.Second.ToString().PadLeft(2, '0') + ":" + SIC_SAC_TIME.TimeofReception.Millisecond.ToString().PadLeft(3, '0'); this.listBoxDataBySSRCode.Items.Add("Rcvd Time: " + Time); // Display Data CAT48I240Types.CAT48I240ACID_Data ACID_String = (CAT48I240Types.CAT48I240ACID_Data)Msg.CAT48DataItems[CAT48.ItemIDToIndex("240")].value; if (ACID_String != null) { this.listBoxDataBySSRCode.Items.Add("\t" + "Callsign:" + ACID_String.ACID); } else { this.listBoxDataBySSRCode.Items.Add("\t" + "Callsign: N/A"); } CAT48I040Types.CAT48I040MeasuredPosInPolarCoordinates PositionData = (CAT48I040Types.CAT48I040MeasuredPosInPolarCoordinates)Msg.CAT48DataItems[CAT48.ItemIDToIndex("040")].value; this.listBoxDataBySSRCode.Items.Add("\tDistance:\t" + PositionData.Measured_Distance); this.listBoxDataBySSRCode.Items.Add("\tAzimuth:\t" + PositionData.Measured_Azimuth.ToString()); string Lat, Lon; PositionData.LatLong.GetDegMinSecStringFormat(out Lat, out Lon); this.listBoxDataBySSRCode.Items.Add("\tLat/Long:\t" + Lat + "/" + Lon); CAT48I090Types.CAT48I090FlightLevelUserData FL_Data = (CAT48I090Types.CAT48I090FlightLevelUserData)Msg.CAT48DataItems[CAT48.ItemIDToIndex("090")].value; this.listBoxDataBySSRCode.Items.Add("\tMode Validated:\t" + FL_Data.Code_Validated.ToString()); this.listBoxDataBySSRCode.Items.Add("\tMode Garbled:\t" + FL_Data.Code_Garbled.ToString()); this.listBoxDataBySSRCode.Items.Add("\tFL:\t" + FL_Data.FlightLevel.ToString()); this.listBoxDataBySSRCode.Items.Add(" "); } } } else if (MainASTERIXDataStorage.CAT62Message.Count > 0) { foreach (MainASTERIXDataStorage.CAT62Data Msg in MainASTERIXDataStorage.CAT62Message) { CAT62I060Types.CAT62060Mode3UserData MyData = (CAT62I060Types.CAT62060Mode3UserData)Msg.CAT62DataItems[CAT62.ItemIDToIndex("060")].value; if (MyData.Mode3A_Code == this.comboBoxSSRCode.Items[this.comboBoxSSRCode.SelectedIndex].ToString()) { ASTERIX.SIC_SAC_Time SIC_SAC_TIME = (ASTERIX.SIC_SAC_Time)Msg.CAT62DataItems[CAT62.ItemIDToIndex("010")].value; // TIME string Time = SIC_SAC_TIME.TimeofReception.Hour.ToString().PadLeft(2, '0') + ":" + SIC_SAC_TIME.TimeofReception.Minute.ToString().PadLeft(2, '0') + ":" + SIC_SAC_TIME.TimeofReception.Second.ToString().PadLeft(2, '0') + ":" + SIC_SAC_TIME.TimeofReception.Millisecond.ToString().PadLeft(3, '0'); this.listBoxDataBySSRCode.Items.Add("Rcvd Time: " + Time); // TRACK NUMBER int TrackNumber = (int)Msg.CAT62DataItems[CAT62.ItemIDToIndex("040")].value; this.listBoxDataBySSRCode.Items.Add("\t" + "TRACK#:" + TrackNumber.ToString()); // CALLSIGN CAT62I380Types.CAT62I380Data CAT62I380Data = (CAT62I380Types.CAT62I380Data)Msg.CAT62DataItems[CAT62.ItemIDToIndex("380")].value; if (CAT62I380Data != null) { this.listBoxDataBySSRCode.Items.Add("\t" + "Callsign:" + CAT62I380Data.ACID.ACID_String); } // POSITION GeoCordSystemDegMinSecUtilities.LatLongClass LatLongData = (GeoCordSystemDegMinSecUtilities.LatLongClass)Msg.CAT62DataItems[CAT62.ItemIDToIndex("105")].value; string Lat, Lon; LatLongData.GetDegMinSecStringFormat(out Lat, out Lon); this.listBoxDataBySSRCode.Items.Add("\tLat/Long:\t" + Lat + "/" + Lon); // FLIGHT LEVEL double FlightLevel = (double)Msg.CAT62DataItems[CAT62.ItemIDToIndex("136")].value; if (Msg.CAT62DataItems[CAT62.ItemIDToIndex("136")].value != null) { this.listBoxDataBySSRCode.Items.Add("\tFL:\t" + FlightLevel.ToString()); } else { this.listBoxDataBySSRCode.Items.Add("\tFL:\t" + "N/A"); } this.listBoxDataBySSRCode.Items.Add(" "); } } } } else { this.listBoxDataBySSRCode.Items.Add("No data was acquired !!!"); } }
public static void DecodeCAT62I070(byte[] Data) { // Get an instance of bit ops Bit_Ops BO = new Bit_Ops(); BO.DWord[Bit_Ops.Bits0_7_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex + 2]; BO.DWord[Bit_Ops.Bits8_15_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex + 1]; BO.DWord[Bit_Ops.Bits16_23_Of_DWord] = Data[CAT62.CurrentDataBufferOctalIndex]; CAT62I070Types.CAT62070ElapsedTimeSinceMidnight Result = new CAT62I070Types.CAT62070ElapsedTimeSinceMidnight(); if (BO.DWord[Bit_Ops.Bit0] == true) { Result.ElapsedTimeSinceMidnight = FIX_POINT_1; } if (BO.DWord[Bit_Ops.Bit1] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_2; } if (BO.DWord[Bit_Ops.Bit2] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_3; } if (BO.DWord[Bit_Ops.Bit3] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_4; } if (BO.DWord[Bit_Ops.Bit4] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_5; } if (BO.DWord[Bit_Ops.Bit5] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_6; } if (BO.DWord[Bit_Ops.Bit6] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_7; } if (BO.DWord[Bit_Ops.Bit7] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_8; } if (BO.DWord[Bit_Ops.Bit8] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_9; } if (BO.DWord[Bit_Ops.Bit9] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_10; } if (BO.DWord[Bit_Ops.Bit10] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_11; } if (BO.DWord[Bit_Ops.Bit11] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_12; } if (BO.DWord[Bit_Ops.Bit12] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_13; } if (BO.DWord[Bit_Ops.Bit13] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_14; } if (BO.DWord[Bit_Ops.Bit14] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_15; } if (BO.DWord[Bit_Ops.Bit15] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_16; } if (BO.DWord[Bit_Ops.Bit16] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_17; } if (BO.DWord[Bit_Ops.Bit17] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_18; } if (BO.DWord[Bit_Ops.Bit18] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_19; } if (BO.DWord[Bit_Ops.Bit19] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_20; } if (BO.DWord[Bit_Ops.Bit20] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_21; } if (BO.DWord[Bit_Ops.Bit21] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_22; } if (BO.DWord[Bit_Ops.Bit22] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_23; } if (BO.DWord[Bit_Ops.Bit23] == true) { Result.ElapsedTimeSinceMidnight = Result.ElapsedTimeSinceMidnight + FIX_POINT_24; } ////////////////////////////////////////////////////////////////////////////////// // Now assign it to the generic list CAT62.I062DataItems[CAT62.ItemIDToIndex("070")].value = Result; ////////////////////////////////////////////////////////////////////////////////// // Increase data buffer index so it ready for the next data item. CAT62.CurrentDataBufferOctalIndex = CAT62.CurrentDataBufferOctalIndex + 3; }