public static void DecodeCAT48I250(byte[] Data) { #region DecodeConstantsRegion //////////////////////////////////////////////////////////////// // MAG HDG DECODE CONSTANTS double MAG_HDG_1 = 90.0 / 512.0; double MAG_HDG_2 = MAG_HDG_1 * 2.0; double MAG_HDG_3 = MAG_HDG_2 * 2.0; double MAG_HDG_4 = MAG_HDG_3 * 2.0; double MAG_HDG_5 = MAG_HDG_4 * 2.0; double MAG_HDG_6 = MAG_HDG_5 * 2.0; double MAG_HDG_7 = MAG_HDG_6 * 2.0; double MAG_HDG_8 = MAG_HDG_7 * 2.0; double MAG_HDG_9 = MAG_HDG_8 * 2.0; double MAG_HDG_10 = MAG_HDG_9 * 2.0; //////////////////////////////////////////////////////////////// // IAS DECODE CONSTANTS int IAS_1 = 1; int IAS_2 = IAS_1 * 2; int IAS_3 = IAS_2 * 2; int IAS_4 = IAS_3 * 2; int IAS_5 = IAS_4 * 2; int IAS_6 = IAS_5 * 2; int IAS_7 = IAS_6 * 2; int IAS_8 = IAS_7 * 2; int IAS_9 = IAS_8 * 2; int IAS_10 = IAS_9 * 2; //////////////////////////////////////////////////////////////// // MACH DECODE CONSTANTS double MACH_1 = 2.048 / 512.0; double MACH_2 = MACH_1 * 2.0; double MACH_3 = MACH_2 * 2.0; double MACH_4 = MACH_3 * 2.0; double MACH_5 = MACH_4 * 2.0; double MACH_6 = MACH_5 * 2.0; double MACH_7 = MACH_6 * 2.0; double MACH_8 = MACH_7 * 2.0; double MACH_9 = MACH_8 * 2.0; double MACH_10 = MAG_HDG_9 * 2.0; //////////////////////////////////////////////////////////////// // RoC DECODE CONSTANTS int RoC_1 = 8192 / 256; // 32 feet/min int RoC_2 = RoC_1 * 2; int RoC_3 = RoC_2 * 2; int RoC_4 = RoC_3 * 2; int RoC_5 = RoC_4 * 2; int RoC_6 = RoC_5 * 2; int RoC_7 = RoC_6 * 2; int RoC_8 = RoC_7 * 2; int RoC_9 = RoC_8 * 2; //////////////////////////////////////////////////////////////// // ROLL ANGLE CONSTANTS double ROLL_ANG_1 = 45.0 / 256.0; double ROLL_ANG_2 = ROLL_ANG_1 * 2; double ROLL_ANG_3 = ROLL_ANG_2 * 2; double ROLL_ANG_4 = ROLL_ANG_3 * 2; double ROLL_ANG_5 = ROLL_ANG_4 * 2; double ROLL_ANG_6 = ROLL_ANG_5 * 2; double ROLL_ANG_7 = ROLL_ANG_6 * 2; double ROLL_ANG_8 = ROLL_ANG_7 * 2; double ROLL_ANG_9 = ROLL_ANG_8 * 2; //////////////////////////////////////////////////////////////// // TRUE TRACK ANGLE CONSTANTS double TRUE_TRK_ANG_1 = 90.0 / 512.0; double TRUE_TRK_ANG_2 = TRUE_TRK_ANG_1 * 2; double TRUE_TRK_ANG_3 = TRUE_TRK_ANG_2 * 2; double TRUE_TRK_ANG_4 = TRUE_TRK_ANG_3 * 2; double TRUE_TRK_ANG_5 = TRUE_TRK_ANG_4 * 2; double TRUE_TRK_ANG_6 = TRUE_TRK_ANG_5 * 2; double TRUE_TRK_ANG_7 = TRUE_TRK_ANG_6 * 2; double TRUE_TRK_ANG_8 = TRUE_TRK_ANG_7 * 2; double TRUE_TRK_ANG_9 = TRUE_TRK_ANG_8 * 2; double TRUE_TRK_ANG_10 = TRUE_TRK_ANG_9 * 2; //////////////////////////////////////////////////////////////// // GND SPD CONSTANTS double GND_SPD_1 = 1024.0 / 512.0; double GND_SPD_2 = GND_SPD_1 * 2; double GND_SPD_3 = GND_SPD_2 * 2; double GND_SPD_4 = GND_SPD_3 * 2; double GND_SPD_5 = GND_SPD_4 * 2; double GND_SPD_6 = GND_SPD_5 * 2; double GND_SPD_7 = GND_SPD_6 * 2; double GND_SPD_8 = GND_SPD_7 * 2; double GND_SPD_9 = GND_SPD_8 * 2; double GND_SPD_10 = GND_SPD_9 * 2; //////////////////////////////////////////////////////////////// // TRK AND RFATE CONSTANTS double TRK_ANG_RATE_1 = 8.0 / 256.0; double TRK_ANG_RATE_2 = TRK_ANG_RATE_1 * 2; double TRK_ANG_RATE_3 = TRK_ANG_RATE_2 * 2; double TRK_ANG_RATE_4 = TRK_ANG_RATE_3 * 2; double TRK_ANG_RATE_5 = TRK_ANG_RATE_4 * 2; double TRK_ANG_RATE_6 = TRK_ANG_RATE_5 * 2; double TRK_ANG_RATE_7 = TRK_ANG_RATE_6 * 2; double TRK_ANG_RATE_8 = TRK_ANG_RATE_7 * 2; double TRK_ANG_RATE_9 = TRK_ANG_RATE_8 * 2; //////////////////////////////////////////////////////////////// // TRUE AIRSPEED int TAS_1 = 2; int TAS_2 = TAS_1 * 2; int TAS_3 = TAS_2 * 2; int TAS_4 = TAS_3 * 2; int TAS_5 = TAS_4 * 2; int TAS_6 = TAS_5 * 2; int TAS_7 = TAS_6 * 2; int TAS_8 = TAS_7 * 2; int TAS_9 = TAS_8 * 2; int TAS_10 = TAS_9 * 2; //////////////////////////////////////////////////////////////// // SELECTED_ALTITUDE int SEL_ALT_1 = 16; //feet int SEL_ALT_2 = SEL_ALT_1 * 2; int SEL_ALT_3 = SEL_ALT_2 * 2; int SEL_ALT_4 = SEL_ALT_3 * 2; int SEL_ALT_5 = SEL_ALT_4 * 2; int SEL_ALT_6 = SEL_ALT_5 * 2; int SEL_ALT_7 = SEL_ALT_6 * 2; int SEL_ALT_8 = SEL_ALT_7 * 2; int SEL_ALT_9 = SEL_ALT_8 * 2; int SEL_ALT_10 = SEL_ALT_9 * 2; int SEL_ALT_11 = SEL_ALT_10 * 2; int SEL_ALT_12 = SEL_ALT_11 * 2; //////////////////////////////////////////////////////////////// // BARO SETTING double BARO_STNG_1 = 0.1; //mb (add 800.0 mb to the value computed) double BARO_STNG_2 = BARO_STNG_1 * 2; double BARO_STNG_3 = BARO_STNG_2 * 2; double BARO_STNG_4 = BARO_STNG_3 * 2; double BARO_STNG_5 = BARO_STNG_4 * 2; double BARO_STNG_6 = BARO_STNG_5 * 2; double BARO_STNG_7 = BARO_STNG_6 * 2; double BARO_STNG_8 = BARO_STNG_7 * 2; double BARO_STNG_9 = BARO_STNG_8 * 2; double BARO_STNG_10 = BARO_STNG_9 * 2; double BARO_STNG_11 = BARO_STNG_10 * 2; double BARO_STNG_12 = BARO_STNG_11 * 2; #endregion CAT48I250Types.CAT48I250DataType CAT48I250Data = new CAT48I250Types.CAT48I250DataType(); // The lenght is always 1 + 8 X (repetative factor form the first octet) // Get an instance of bit ops Bit_Ops BO1 = new Bit_Ops(); Bit_Ops BO2 = new Bit_Ops(); //Extract the first octet BO1.DWord[Bit_Ops.Bits0_7_Of_DWord] = Data[CAT48.CurrentDataBufferOctalIndex + 1]; int Repetative_Factor = (int)BO1.DWord[Bit_Ops.Bits0_7_Of_DWord]; CAT48.CurrentDataBufferOctalIndex = CAT48.CurrentDataBufferOctalIndex + 1; ////////////////////////////////////////////////////////////////////////////////////////// for (int I = 0; I < Repetative_Factor; I++) { BO1.DWord[Bit_Ops.Bits24_31_Of_DWord] = Data[CAT48.CurrentDataBufferOctalIndex + 1 + (8 * I)]; BO1.DWord[Bit_Ops.Bits16_23_Of_DWord] = Data[CAT48.CurrentDataBufferOctalIndex + 2 + (8 * I)]; BO1.DWord[Bit_Ops.Bits8_15_Of_DWord] = Data[CAT48.CurrentDataBufferOctalIndex + 3 + (8 * I)]; BO1.DWord[Bit_Ops.Bits0_7_Of_DWord] = Data[CAT48.CurrentDataBufferOctalIndex + 4 + (8 * I)]; BO2.DWord[Bit_Ops.Bits24_31_Of_DWord] = Data[CAT48.CurrentDataBufferOctalIndex + 5 + (8 * I)]; BO2.DWord[Bit_Ops.Bits16_23_Of_DWord] = Data[CAT48.CurrentDataBufferOctalIndex + 6 + (8 * I)]; BO2.DWord[Bit_Ops.Bits8_15_Of_DWord] = Data[CAT48.CurrentDataBufferOctalIndex + 7 + (8 * I)]; BO2.DWord[Bit_Ops.Bits0_7_Of_DWord] = Data[CAT48.CurrentDataBufferOctalIndex + 8 + (8 * I)]; // Fist check whether this is a Broadcst report or CIGB initiated int Register_Number = System.Convert.ToInt16(BO2.DWord[Bit_Ops.Bits0_7_Of_DWord]); string Test = "NONE"; double Value = 0.0; if (Register_Number == 0) { #region BroadcastMessages Register_Number = System.Convert.ToInt16(BO1.DWord[Bit_Ops.Bits0_7_Of_DWord]); // Parse the data depending on the register number switch (Register_Number.ToString("X")) { default: Test = Register_Number.ToString("X"); Test = Test + Test; break; } #endregion } else { #region GCIB_Messages // Parse the data depending on the register number switch (Register_Number.ToString("X")) { // Data link capability report case "10": break; // Common usage GICB capability report case "17": break; // Selected vertical intention case "40": // BDS40 is present CAT48I250Data.BDS40_Selected_Vertical_Intention_Report.Present_This_Cycle = true; #region MCP_FCU_SEL_ALT_REGION // Bit 1 MCP_FCU_SEL_ALTD Status CAT48I250Data.BDS40_Selected_Vertical_Intention_Report.MCP_FCU_Sel_ALT.Is_Valid = BO1.DWord[Bit_Ops.Bit31]; // Bits 2 .. 13 MCP_FCU_SEL_ALT Value Value = 0.0; if (BO1.DWord[Bit_Ops.Bit19]) Value = SEL_ALT_1; if (BO1.DWord[Bit_Ops.Bit20]) Value = Value + SEL_ALT_2; if (BO1.DWord[Bit_Ops.Bit21]) Value = Value + SEL_ALT_3; if (BO1.DWord[Bit_Ops.Bit22]) Value = Value + SEL_ALT_4; if (BO1.DWord[Bit_Ops.Bit23]) Value = Value + SEL_ALT_5; if (BO1.DWord[Bit_Ops.Bit24]) Value = Value + SEL_ALT_6; if (BO1.DWord[Bit_Ops.Bit25]) Value = Value + SEL_ALT_7; if (BO1.DWord[Bit_Ops.Bit26]) Value = Value + SEL_ALT_8; if (BO1.DWord[Bit_Ops.Bit27]) Value = Value + SEL_ALT_9; if (BO1.DWord[Bit_Ops.Bit28]) Value = Value + SEL_ALT_10; if (BO1.DWord[Bit_Ops.Bit29]) Value = Value + SEL_ALT_11; if (BO1.DWord[Bit_Ops.Bit30]) Value = Value + SEL_ALT_12; CAT48I250Data.BDS40_Selected_Vertical_Intention_Report.MCP_FCU_Sel_ALT.Value = (int)Value / 100; // Use FL #endregion #region FMS_SELECTED_ALT_REGION // Bit 14 FMS_SELECTED_ALT Status CAT48I250Data.BDS40_Selected_Vertical_Intention_Report.FMS_Sel_ALT.Is_Valid = BO1.DWord[Bit_Ops.Bit18]; // Bits 15 .. 26 MCP_FCU_SEL_ALT Value Value = 0.0; if (BO1.DWord[Bit_Ops.Bit6]) Value = SEL_ALT_1; if (BO1.DWord[Bit_Ops.Bit7]) Value = Value + SEL_ALT_2; if (BO1.DWord[Bit_Ops.Bit8]) Value = Value + SEL_ALT_3; if (BO1.DWord[Bit_Ops.Bit9]) Value = Value + SEL_ALT_4; if (BO1.DWord[Bit_Ops.Bit10]) Value = Value + SEL_ALT_5; if (BO1.DWord[Bit_Ops.Bit11]) Value = Value + SEL_ALT_6; if (BO1.DWord[Bit_Ops.Bit12]) Value = Value + SEL_ALT_7; if (BO1.DWord[Bit_Ops.Bit13]) Value = Value + SEL_ALT_8; if (BO1.DWord[Bit_Ops.Bit14]) Value = Value + SEL_ALT_9; if (BO1.DWord[Bit_Ops.Bit15]) Value = Value + SEL_ALT_10; if (BO1.DWord[Bit_Ops.Bit16]) Value = Value + SEL_ALT_11; if (BO1.DWord[Bit_Ops.Bit17]) Value = Value + SEL_ALT_12; CAT48I250Data.BDS40_Selected_Vertical_Intention_Report.FMS_Sel_ALT.Value = (int)Value / 100; // Use FL #endregion #region BARO_SETTING_REGION // Bit 27 BARO_SETTING Status CAT48I250Data.BDS40_Selected_Vertical_Intention_Report.Baro_Sel_ALT.Is_Valid = BO1.DWord[Bit_Ops.Bit5]; // Bits 28 .. 39 MCP_FCU_SEL_ALT Value Value = 0.0; if (BO2.DWord[Bit_Ops.Bit25]) Value = BARO_STNG_1; if (BO2.DWord[Bit_Ops.Bit26]) Value = Value + BARO_STNG_2; if (BO2.DWord[Bit_Ops.Bit27]) Value = Value + BARO_STNG_3; if (BO2.DWord[Bit_Ops.Bit28]) Value = Value + BARO_STNG_4; if (BO2.DWord[Bit_Ops.Bit29]) Value = Value + BARO_STNG_5; if (BO2.DWord[Bit_Ops.Bit30]) Value = Value + BARO_STNG_6; if (BO2.DWord[Bit_Ops.Bit31]) Value = Value + BARO_STNG_7; if (BO1.DWord[Bit_Ops.Bit0]) Value = Value + BARO_STNG_8; if (BO1.DWord[Bit_Ops.Bit1]) Value = Value + BARO_STNG_9; if (BO1.DWord[Bit_Ops.Bit2]) Value = Value + BARO_STNG_10; if (BO1.DWord[Bit_Ops.Bit3]) Value = Value + BARO_STNG_11; if (BO1.DWord[Bit_Ops.Bit4]) Value = Value + BARO_STNG_12; CAT48I250Data.BDS40_Selected_Vertical_Intention_Report.Baro_Sel_ALT.Value = (int)Value + 800; // Always add 800mb #endregion // BIT 40 .. 47 ARE RESERVED (24 ..17) #region STATUS_REGION // Bit 48 .. 56 STATUS // Bit 48 STATUS OF MCP/FCU MODE BITS CAT48I250Data.BDS40_Selected_Vertical_Intention_Report.Status_Data.MCP_FCU_Mode_Bits_Populated = BO2.DWord[Bit_Ops.Bit16]; // Bit 49 VNAV MODE CAT48I250Data.BDS40_Selected_Vertical_Intention_Report.Status_Data.VNAV_Mode_Active = BO2.DWord[Bit_Ops.Bit15]; // Bit 50 ALT HOLD MODE MODE CAT48I250Data.BDS40_Selected_Vertical_Intention_Report.Status_Data.ALT_Hold_Active = BO2.DWord[Bit_Ops.Bit14]; // Bit 51 ALT HOLD MODE MODE CAT48I250Data.BDS40_Selected_Vertical_Intention_Report.Status_Data.APP_Mode_Active = BO2.DWord[Bit_Ops.Bit13]; // Bits 52 .. 53 are reserved // Bit 54 ALT STATUS OF TARGET ALT SOURCE BITS and 55..56 TARGET ALT SOURCE if (!BO2.DWord[Bit_Ops.Bit10]) { CAT48I250Data.BDS40_Selected_Vertical_Intention_Report.Status_Data.Target_Altitude_Source = CAT48I250Types.BDS40_Selected_Vertical_Intention_Report.Status.Target_Altitude_Mode_Type.Unknown; } else { if (BO2.DWord[Bit_Ops.Bit9] && BO2.DWord[Bit_Ops.Bit8]) CAT48I250Data.BDS40_Selected_Vertical_Intention_Report.Status_Data.Target_Altitude_Source = CAT48I250Types.BDS40_Selected_Vertical_Intention_Report.Status.Target_Altitude_Mode_Type.FMS_Selected_Alt; else if (BO2.DWord[Bit_Ops.Bit9]) CAT48I250Data.BDS40_Selected_Vertical_Intention_Report.Status_Data.Target_Altitude_Source = CAT48I250Types.BDS40_Selected_Vertical_Intention_Report.Status.Target_Altitude_Mode_Type.Aircraft_Alt; else if (BO2.DWord[Bit_Ops.Bit8]) CAT48I250Data.BDS40_Selected_Vertical_Intention_Report.Status_Data.Target_Altitude_Source = CAT48I250Types.BDS40_Selected_Vertical_Intention_Report.Status.Target_Altitude_Mode_Type.FCU_MCP_Selected_Alt; else CAT48I250Data.BDS40_Selected_Vertical_Intention_Report.Status_Data.Target_Altitude_Source = CAT48I250Types.BDS40_Selected_Vertical_Intention_Report.Status.Target_Altitude_Mode_Type.Unknown; } #endregion break; // Track and turn report case "50": // BDS50 is present CAT48I250Data.BDS50_Track_Turn_Report.Present_This_Cycle = true; #region ROLL_ANGLE_REGION // Bit 1 ROLL ANGLE Status CAT48I250Data.BDS50_Track_Turn_Report.Roll_Ang.Is_Valid = BO1.DWord[Bit_Ops.Bit31]; // Bits 3 .. 11 ROLL ANGLE Value Value = 0.0; // Bit 2 ROLL ANGLE SIGN if (BO1.DWord[Bit_Ops.Bit30]) { Bit_Ops BO1_Temp = new Bit_Ops(); BO1_Temp.DWord[Bit_Ops.Bit0] = !BO1.DWord[Bit_Ops.Bit21]; BO1_Temp.DWord[Bit_Ops.Bit1] = !BO1.DWord[Bit_Ops.Bit22]; BO1_Temp.DWord[Bit_Ops.Bit2] = !BO1.DWord[Bit_Ops.Bit23]; BO1_Temp.DWord[Bit_Ops.Bit3] = !BO1.DWord[Bit_Ops.Bit24]; BO1_Temp.DWord[Bit_Ops.Bit4] = !BO1.DWord[Bit_Ops.Bit25]; BO1_Temp.DWord[Bit_Ops.Bit5] = !BO1.DWord[Bit_Ops.Bit26]; BO1_Temp.DWord[Bit_Ops.Bit6] = !BO1.DWord[Bit_Ops.Bit27]; BO1_Temp.DWord[Bit_Ops.Bit7] = !BO1.DWord[Bit_Ops.Bit28]; BO1_Temp.DWord[Bit_Ops.Bit8] = !BO1.DWord[Bit_Ops.Bit29]; BO1_Temp.DWord[Bit_Ops.Bit9] = !BO1.DWord[Bit_Ops.Bit30]; BO1_Temp.DWord[Bit_Ops.Bit10] = false; BO1_Temp.DWord[Bit_Ops.Bit11] = false; BO1_Temp.DWord[Bit_Ops.Bit12] = false; BO1_Temp.DWord[Bit_Ops.Bit13] = false; BO1_Temp.DWord[Bit_Ops.Bit14] = false; BO1_Temp.DWord[Bit_Ops.Bit15] = 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]) Value = ROLL_ANG_1; if (BO1_Temp.DWord[Bit_Ops.Bit1]) Value = Value + ROLL_ANG_2; if (BO1_Temp.DWord[Bit_Ops.Bit2]) Value = Value + ROLL_ANG_3; if (BO1_Temp.DWord[Bit_Ops.Bit3]) Value = Value + ROLL_ANG_4; if (BO1_Temp.DWord[Bit_Ops.Bit4]) Value = Value + ROLL_ANG_5; if (BO1_Temp.DWord[Bit_Ops.Bit5]) Value = Value + ROLL_ANG_6; if (BO1_Temp.DWord[Bit_Ops.Bit6]) Value = Value + ROLL_ANG_7; if (BO1_Temp.DWord[Bit_Ops.Bit7]) Value = Value + ROLL_ANG_8; if (BO1_Temp.DWord[Bit_Ops.Bit8]) Value = Value + ROLL_ANG_9; CAT48I250Data.BDS50_Track_Turn_Report.Roll_Ang.Value = -Value; } else { if (BO1.DWord[Bit_Ops.Bit21]) Value = ROLL_ANG_1; if (BO1.DWord[Bit_Ops.Bit22]) Value = Value + ROLL_ANG_2; if (BO1.DWord[Bit_Ops.Bit23]) Value = Value + ROLL_ANG_3; if (BO1.DWord[Bit_Ops.Bit24]) Value = Value + ROLL_ANG_4; if (BO1.DWord[Bit_Ops.Bit25]) Value = Value + ROLL_ANG_5; if (BO1.DWord[Bit_Ops.Bit26]) Value = Value + ROLL_ANG_6; if (BO1.DWord[Bit_Ops.Bit27]) Value = Value + ROLL_ANG_7; if (BO1.DWord[Bit_Ops.Bit28]) Value = Value + ROLL_ANG_8; if (BO1.DWord[Bit_Ops.Bit29]) Value = Value + ROLL_ANG_9; CAT48I250Data.BDS50_Track_Turn_Report.Roll_Ang.Value = Value; } #endregion #region TRUE_TRACK_ANGLE_REGION // Bit 12 TRUE TRACK ANGLE Status CAT48I250Data.BDS50_Track_Turn_Report.TRUE_TRK.Is_Valid = BO1.DWord[Bit_Ops.Bit20]; // Bits 14 .. 23 TRUE TRACK ANGLE Value Value = 0.0; // Bit 13 TRUE TRACK ANGLE SIGN if (BO1.DWord[Bit_Ops.Bit19]) { Bit_Ops BO1_Temp = new Bit_Ops(); BO1_Temp.DWord[Bit_Ops.Bit0] = !BO1.DWord[Bit_Ops.Bit9]; BO1_Temp.DWord[Bit_Ops.Bit1] = !BO1.DWord[Bit_Ops.Bit10]; BO1_Temp.DWord[Bit_Ops.Bit2] = !BO1.DWord[Bit_Ops.Bit11]; BO1_Temp.DWord[Bit_Ops.Bit3] = !BO1.DWord[Bit_Ops.Bit12]; BO1_Temp.DWord[Bit_Ops.Bit4] = !BO1.DWord[Bit_Ops.Bit13]; BO1_Temp.DWord[Bit_Ops.Bit5] = !BO1.DWord[Bit_Ops.Bit14]; BO1_Temp.DWord[Bit_Ops.Bit6] = !BO1.DWord[Bit_Ops.Bit15]; BO1_Temp.DWord[Bit_Ops.Bit7] = !BO1.DWord[Bit_Ops.Bit16]; BO1_Temp.DWord[Bit_Ops.Bit8] = !BO1.DWord[Bit_Ops.Bit17]; BO1_Temp.DWord[Bit_Ops.Bit9] = !BO1.DWord[Bit_Ops.Bit18]; BO1_Temp.DWord[Bit_Ops.Bit10] = !BO1.DWord[Bit_Ops.Bit19]; BO1_Temp.DWord[Bit_Ops.Bit11] = false; BO1_Temp.DWord[Bit_Ops.Bit12] = false; BO1_Temp.DWord[Bit_Ops.Bit13] = false; BO1_Temp.DWord[Bit_Ops.Bit14] = false; BO1_Temp.DWord[Bit_Ops.Bit15] = 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]) Value = TRUE_TRK_ANG_1; if (BO1_Temp.DWord[Bit_Ops.Bit1]) Value = Value + TRUE_TRK_ANG_2; if (BO1_Temp.DWord[Bit_Ops.Bit2]) Value = Value + TRUE_TRK_ANG_3; if (BO1_Temp.DWord[Bit_Ops.Bit3]) Value = Value + TRUE_TRK_ANG_4; if (BO1_Temp.DWord[Bit_Ops.Bit4]) Value = Value + TRUE_TRK_ANG_5; if (BO1_Temp.DWord[Bit_Ops.Bit5]) Value = Value + TRUE_TRK_ANG_6; if (BO1_Temp.DWord[Bit_Ops.Bit6]) Value = Value + TRUE_TRK_ANG_7; if (BO1_Temp.DWord[Bit_Ops.Bit7]) Value = Value + TRUE_TRK_ANG_8; if (BO1_Temp.DWord[Bit_Ops.Bit8]) Value = Value + TRUE_TRK_ANG_9; if (BO1_Temp.DWord[Bit_Ops.Bit9]) Value = Value + TRUE_TRK_ANG_10; CAT48I250Data.BDS50_Track_Turn_Report.TRUE_TRK.Value = 360.0 - Value; } else { if (BO1.DWord[Bit_Ops.Bit9]) Value = TRUE_TRK_ANG_1; if (BO1.DWord[Bit_Ops.Bit10]) Value = Value + TRUE_TRK_ANG_2; if (BO1.DWord[Bit_Ops.Bit11]) Value = Value + TRUE_TRK_ANG_3; if (BO1.DWord[Bit_Ops.Bit12]) Value = Value + TRUE_TRK_ANG_4; if (BO1.DWord[Bit_Ops.Bit13]) Value = Value + TRUE_TRK_ANG_5; if (BO1.DWord[Bit_Ops.Bit14]) Value = Value + TRUE_TRK_ANG_6; if (BO1.DWord[Bit_Ops.Bit15]) Value = Value + TRUE_TRK_ANG_7; if (BO1.DWord[Bit_Ops.Bit16]) Value = Value + TRUE_TRK_ANG_8; if (BO1.DWord[Bit_Ops.Bit17]) Value = Value + TRUE_TRK_ANG_9; if (BO1.DWord[Bit_Ops.Bit18]) Value = Value + TRUE_TRK_ANG_10; CAT48I250Data.BDS50_Track_Turn_Report.TRUE_TRK.Value = Value; } #endregion #region GROUND_SPEED_REGION // Bit 24 GROUND SPEED Status CAT48I250Data.BDS50_Track_Turn_Report.GND_SPD.Is_Valid = BO1.DWord[Bit_Ops.Bit8]; // Bits 25 .. 34 GROUND SPEED Value Value = 0.0; if (BO2.DWord[Bit_Ops.Bit30]) Value = GND_SPD_1; if (BO2.DWord[Bit_Ops.Bit31]) Value = Value + GND_SPD_2; if (BO1.DWord[Bit_Ops.Bit0]) Value = Value + GND_SPD_3; if (BO1.DWord[Bit_Ops.Bit1]) Value = Value + GND_SPD_4; if (BO1.DWord[Bit_Ops.Bit2]) Value = Value + GND_SPD_5; if (BO1.DWord[Bit_Ops.Bit3]) Value = Value + GND_SPD_6; if (BO1.DWord[Bit_Ops.Bit4]) Value = Value + GND_SPD_7; if (BO1.DWord[Bit_Ops.Bit5]) Value = Value + GND_SPD_8; if (BO1.DWord[Bit_Ops.Bit6]) Value = Value + GND_SPD_9; if (BO1.DWord[Bit_Ops.Bit7]) Value = Value + GND_SPD_10; CAT48I250Data.BDS50_Track_Turn_Report.GND_SPD.Value = Value; #endregion #region TRACK_ANGLE_RATE_REGION // Bit 35 TRACK ANGLE RATE Status CAT48I250Data.BDS50_Track_Turn_Report.TRK_ANG_RATE.Is_Valid = BO2.DWord[Bit_Ops.Bit29]; // Bits 37 .. 45 TRACK ANGLE RATE Value Value = 0.0; // Bit 36 TRACK ANGLE RATE SIGN if (BO2.DWord[Bit_Ops.Bit28]) { Bit_Ops BO1_Temp = new Bit_Ops(); BO1_Temp.DWord[Bit_Ops.Bit0] = !BO2.DWord[Bit_Ops.Bit19]; BO1_Temp.DWord[Bit_Ops.Bit1] = !BO2.DWord[Bit_Ops.Bit20]; BO1_Temp.DWord[Bit_Ops.Bit2] = !BO2.DWord[Bit_Ops.Bit21]; BO1_Temp.DWord[Bit_Ops.Bit3] = !BO2.DWord[Bit_Ops.Bit22]; BO1_Temp.DWord[Bit_Ops.Bit4] = !BO2.DWord[Bit_Ops.Bit23]; BO1_Temp.DWord[Bit_Ops.Bit5] = !BO2.DWord[Bit_Ops.Bit24]; BO1_Temp.DWord[Bit_Ops.Bit6] = !BO2.DWord[Bit_Ops.Bit25]; BO1_Temp.DWord[Bit_Ops.Bit7] = !BO2.DWord[Bit_Ops.Bit26]; BO1_Temp.DWord[Bit_Ops.Bit8] = !BO2.DWord[Bit_Ops.Bit27]; BO1_Temp.DWord[Bit_Ops.Bit9] = !BO2.DWord[Bit_Ops.Bit28]; BO1_Temp.DWord[Bit_Ops.Bit10] = false; BO1_Temp.DWord[Bit_Ops.Bit11] = false; BO1_Temp.DWord[Bit_Ops.Bit12] = false; BO1_Temp.DWord[Bit_Ops.Bit13] = false; BO1_Temp.DWord[Bit_Ops.Bit14] = false; BO1_Temp.DWord[Bit_Ops.Bit15] = 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]) Value = Value + TRK_ANG_RATE_1; if (BO1_Temp.DWord[Bit_Ops.Bit1]) Value = Value + TRK_ANG_RATE_2; if (BO1_Temp.DWord[Bit_Ops.Bit2]) Value = Value + TRK_ANG_RATE_3; if (BO1_Temp.DWord[Bit_Ops.Bit3]) Value = Value + TRK_ANG_RATE_4; if (BO1_Temp.DWord[Bit_Ops.Bit4]) Value = Value + TRK_ANG_RATE_5; if (BO1_Temp.DWord[Bit_Ops.Bit5]) Value = Value + TRK_ANG_RATE_6; if (BO1_Temp.DWord[Bit_Ops.Bit6]) Value = Value + TRK_ANG_RATE_7; if (BO1_Temp.DWord[Bit_Ops.Bit7]) Value = Value + TRK_ANG_RATE_8; if (BO1_Temp.DWord[Bit_Ops.Bit8]) Value = Value + TRK_ANG_RATE_9; CAT48I250Data.BDS50_Track_Turn_Report.TRK_ANG_RATE.Value = -Value; } else { if (BO2.DWord[Bit_Ops.Bit19]) Value = TRK_ANG_RATE_1; if (BO2.DWord[Bit_Ops.Bit20]) Value = Value + TRK_ANG_RATE_2; if (BO2.DWord[Bit_Ops.Bit21]) Value = Value + TRK_ANG_RATE_3; if (BO2.DWord[Bit_Ops.Bit22]) Value = Value + TRK_ANG_RATE_4; if (BO2.DWord[Bit_Ops.Bit23]) Value = Value + TRK_ANG_RATE_5; if (BO2.DWord[Bit_Ops.Bit24]) Value = Value + TRK_ANG_RATE_6; if (BO2.DWord[Bit_Ops.Bit25]) Value = Value + TRK_ANG_RATE_7; if (BO2.DWord[Bit_Ops.Bit26]) Value = Value + TRK_ANG_RATE_8; if (BO2.DWord[Bit_Ops.Bit27]) Value = Value + TRK_ANG_RATE_9; CAT48I250Data.BDS50_Track_Turn_Report.TRK_ANG_RATE.Value = Value; } #endregion #region TRUE_AIRSPEED_REGION // Bit 46 TAS Status CAT48I250Data.BDS50_Track_Turn_Report.TAS.Is_Valid = BO1.DWord[Bit_Ops.Bit18]; // Bits 47 .. 56 TAS Value Value = 0.0; if (BO2.DWord[Bit_Ops.Bit8]) Value = TAS_1; if (BO2.DWord[Bit_Ops.Bit9]) Value = Value + TAS_2; if (BO2.DWord[Bit_Ops.Bit10]) Value = Value + TAS_3; if (BO2.DWord[Bit_Ops.Bit11]) Value = Value + TAS_4; if (BO2.DWord[Bit_Ops.Bit12]) Value = Value + TAS_5; if (BO2.DWord[Bit_Ops.Bit13]) Value = Value + TAS_6; if (BO2.DWord[Bit_Ops.Bit14]) Value = Value + TAS_7; if (BO2.DWord[Bit_Ops.Bit15]) Value = Value + TAS_8; if (BO2.DWord[Bit_Ops.Bit16]) Value = Value + TAS_9; if (BO2.DWord[Bit_Ops.Bit17]) Value = Value + TAS_10; CAT48I250Data.BDS50_Track_Turn_Report.TAS.Value = (int)Value; #endregion break; // Heading and speed report case "60": // BDS60 is present CAT48I250Data.BDS60_HDG_SPD_Report.Present_This_Cycle = true; #region MAG_HSG_REGION // Bit 1 MAG HDG Status CAT48I250Data.BDS60_HDG_SPD_Report.MAG_HDG.Is_Valid = BO1.DWord[Bit_Ops.Bit31]; // Bits 3 .. 12 MAG HDG Value Value = 0.0; // Bit 2 MAG HDG SIGN if (BO1.DWord[Bit_Ops.Bit30]) { Bit_Ops BO1_Temp = new Bit_Ops(); BO1_Temp.DWord[Bit_Ops.Bit0] = !BO1.DWord[Bit_Ops.Bit20]; BO1_Temp.DWord[Bit_Ops.Bit1] = !BO1.DWord[Bit_Ops.Bit21]; BO1_Temp.DWord[Bit_Ops.Bit2] = !BO1.DWord[Bit_Ops.Bit22]; BO1_Temp.DWord[Bit_Ops.Bit3] = !BO1.DWord[Bit_Ops.Bit23]; BO1_Temp.DWord[Bit_Ops.Bit4] = !BO1.DWord[Bit_Ops.Bit24]; BO1_Temp.DWord[Bit_Ops.Bit5] = !BO1.DWord[Bit_Ops.Bit25]; BO1_Temp.DWord[Bit_Ops.Bit6] = !BO1.DWord[Bit_Ops.Bit26]; BO1_Temp.DWord[Bit_Ops.Bit7] = !BO1.DWord[Bit_Ops.Bit27]; BO1_Temp.DWord[Bit_Ops.Bit8] = !BO1.DWord[Bit_Ops.Bit28]; BO1_Temp.DWord[Bit_Ops.Bit9] = !BO1.DWord[Bit_Ops.Bit29]; BO1_Temp.DWord[Bit_Ops.Bit10] = !BO1.DWord[Bit_Ops.Bit30]; BO1_Temp.DWord[Bit_Ops.Bit11] = false; BO1_Temp.DWord[Bit_Ops.Bit12] = false; BO1_Temp.DWord[Bit_Ops.Bit13] = false; BO1_Temp.DWord[Bit_Ops.Bit14] = false; BO1_Temp.DWord[Bit_Ops.Bit15] = 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]) Value = MAG_HDG_1; if (BO1_Temp.DWord[Bit_Ops.Bit1]) Value = Value + MAG_HDG_2; if (BO1_Temp.DWord[Bit_Ops.Bit2]) Value = Value + MAG_HDG_3; if (BO1_Temp.DWord[Bit_Ops.Bit3]) Value = Value + MAG_HDG_4; if (BO1_Temp.DWord[Bit_Ops.Bit4]) Value = Value + MAG_HDG_5; if (BO1_Temp.DWord[Bit_Ops.Bit5]) Value = Value + MAG_HDG_6; if (BO1_Temp.DWord[Bit_Ops.Bit6]) Value = Value + MAG_HDG_7; if (BO1_Temp.DWord[Bit_Ops.Bit7]) Value = Value + MAG_HDG_8; if (BO1_Temp.DWord[Bit_Ops.Bit8]) Value = Value + MAG_HDG_9; if (BO1_Temp.DWord[Bit_Ops.Bit9]) Value = Value + MAG_HDG_10; CAT48I250Data.BDS60_HDG_SPD_Report.MAG_HDG.Value = 360.0 - Value; } else { if (BO1.DWord[Bit_Ops.Bit20]) Value = MAG_HDG_1; if (BO1.DWord[Bit_Ops.Bit21]) Value = Value + MAG_HDG_2; if (BO1.DWord[Bit_Ops.Bit22]) Value = Value + MAG_HDG_3; if (BO1.DWord[Bit_Ops.Bit23]) Value = Value + MAG_HDG_4; if (BO1.DWord[Bit_Ops.Bit24]) Value = Value + MAG_HDG_5; if (BO1.DWord[Bit_Ops.Bit25]) Value = Value + MAG_HDG_6; if (BO1.DWord[Bit_Ops.Bit26]) Value = Value + MAG_HDG_7; if (BO1.DWord[Bit_Ops.Bit27]) Value = Value + MAG_HDG_8; if (BO1.DWord[Bit_Ops.Bit28]) Value = Value + MAG_HDG_9; if (BO1.DWord[Bit_Ops.Bit29]) Value = Value + MAG_HDG_10; CAT48I250Data.BDS60_HDG_SPD_Report.MAG_HDG.Value = Value; } #endregion #region IAS_REGION // BIT 13 IAS STATUS CAT48I250Data.BDS60_HDG_SPD_Report.IAS.Is_Valid = BO1.DWord[Bit_Ops.Bit19]; // BITS 14 .. 23 IAS VALUE Value = 0.0; if (BO1.DWord[Bit_Ops.Bit9]) Value = IAS_1; if (BO1.DWord[Bit_Ops.Bit10]) Value = Value + IAS_2; if (BO1.DWord[Bit_Ops.Bit11]) Value = Value + IAS_3; if (BO1.DWord[Bit_Ops.Bit12]) Value = Value + IAS_4; if (BO1.DWord[Bit_Ops.Bit13]) Value = Value + IAS_5; if (BO1.DWord[Bit_Ops.Bit14]) Value = Value + IAS_6; if (BO1.DWord[Bit_Ops.Bit15]) Value = Value + IAS_7; if (BO1.DWord[Bit_Ops.Bit16]) Value = Value + IAS_8; if (BO1.DWord[Bit_Ops.Bit17]) Value = Value + IAS_9; if (BO1.DWord[Bit_Ops.Bit18]) Value = Value + IAS_10; // Assign new IAS value CAT48I250Data.BDS60_HDG_SPD_Report.IAS.Value = (int)Value; #endregion #region MACH_REGION // BIT 24 MACH STATUS CAT48I250Data.BDS60_HDG_SPD_Report.MACH.Is_Valid = BO1.DWord[Bit_Ops.Bit8]; // BITS 25 .. 34 MACH VALUE Value = 0.0; if (BO2.DWord[Bit_Ops.Bit30]) Value = MACH_1; if (BO2.DWord[Bit_Ops.Bit31]) Value = Value + MACH_2; if (BO1.DWord[Bit_Ops.Bit0]) Value = Value + MACH_3; if (BO1.DWord[Bit_Ops.Bit1]) Value = Value + MACH_4; if (BO1.DWord[Bit_Ops.Bit2]) Value = Value + MACH_5; if (BO1.DWord[Bit_Ops.Bit3]) Value = Value + MACH_6; if (BO1.DWord[Bit_Ops.Bit4]) Value = Value + MACH_7; if (BO1.DWord[Bit_Ops.Bit5]) Value = Value + MACH_8; if (BO1.DWord[Bit_Ops.Bit6]) Value = Value + MACH_9; if (BO1.DWord[Bit_Ops.Bit7]) Value = Value + MACH_10; // Assign new MACH value CAT48I250Data.BDS60_HDG_SPD_Report.MACH.Value = Value; #endregion #region BARO_ALT_RATE // BIT 35 BARO ALT RATE STATUS CAT48I250Data.BDS60_HDG_SPD_Report.Baro_RoC.Is_Valid = BO2.DWord[Bit_Ops.Bit29]; // BITS 37 .. 45 BARO ALT RATE VALUE Value = 0.0; // Bit 36 BARO ALT RATE SIGN if (BO2.DWord[Bit_Ops.Bit28]) { Bit_Ops BO1_Temp = new Bit_Ops(); BO1_Temp.DWord[Bit_Ops.Bit0] = !BO2.DWord[Bit_Ops.Bit19]; BO1_Temp.DWord[Bit_Ops.Bit1] = !BO2.DWord[Bit_Ops.Bit20]; BO1_Temp.DWord[Bit_Ops.Bit2] = !BO2.DWord[Bit_Ops.Bit21]; BO1_Temp.DWord[Bit_Ops.Bit3] = !BO2.DWord[Bit_Ops.Bit22]; BO1_Temp.DWord[Bit_Ops.Bit4] = !BO2.DWord[Bit_Ops.Bit23]; BO1_Temp.DWord[Bit_Ops.Bit5] = !BO2.DWord[Bit_Ops.Bit24]; BO1_Temp.DWord[Bit_Ops.Bit6] = !BO2.DWord[Bit_Ops.Bit25]; BO1_Temp.DWord[Bit_Ops.Bit7] = !BO2.DWord[Bit_Ops.Bit26]; BO1_Temp.DWord[Bit_Ops.Bit8] = !BO2.DWord[Bit_Ops.Bit27]; BO1_Temp.DWord[Bit_Ops.Bit9] = false; BO1_Temp.DWord[Bit_Ops.Bit10] = false; BO1_Temp.DWord[Bit_Ops.Bit11] = false; BO1_Temp.DWord[Bit_Ops.Bit12] = false; BO1_Temp.DWord[Bit_Ops.Bit13] = false; BO1_Temp.DWord[Bit_Ops.Bit14] = false; BO1_Temp.DWord[Bit_Ops.Bit15] = false; if (BO1_Temp.DWord[Bit_Ops.Bit0]) Value = RoC_1; if (BO1_Temp.DWord[Bit_Ops.Bit1]) Value = Value + RoC_2; if (BO1_Temp.DWord[Bit_Ops.Bit2]) Value = Value + RoC_3; if (BO1_Temp.DWord[Bit_Ops.Bit3]) Value = Value + RoC_4; if (BO1_Temp.DWord[Bit_Ops.Bit4]) Value = Value + RoC_5; if (BO1_Temp.DWord[Bit_Ops.Bit5]) Value = Value + RoC_6; if (BO1_Temp.DWord[Bit_Ops.Bit6]) Value = Value + RoC_7; if (BO1_Temp.DWord[Bit_Ops.Bit7]) Value = Value + RoC_8; if (BO1_Temp.DWord[Bit_Ops.Bit8]) Value = Value + RoC_9; BO1_Temp.DWord[Bit_Ops.Bits0_15_Of_DWord] = BO1_Temp.DWord[Bit_Ops.Bits0_15_Of_DWord] + 1; CAT48I250Data.BDS60_HDG_SPD_Report.Baro_RoC.Value = -(int)Value; } else { if (BO2.DWord[Bit_Ops.Bit19]) Value = RoC_1; if (BO2.DWord[Bit_Ops.Bit20]) Value = Value + RoC_2; if (BO2.DWord[Bit_Ops.Bit21]) Value = Value + RoC_3; if (BO2.DWord[Bit_Ops.Bit22]) Value = Value + RoC_4; if (BO2.DWord[Bit_Ops.Bit23]) Value = Value + RoC_5; if (BO2.DWord[Bit_Ops.Bit24]) Value = Value + RoC_6; if (BO2.DWord[Bit_Ops.Bit25]) Value = Value + RoC_7; if (BO2.DWord[Bit_Ops.Bit26]) Value = Value + RoC_8; if (BO2.DWord[Bit_Ops.Bit27]) Value = Value + RoC_9; CAT48I250Data.BDS60_HDG_SPD_Report.Baro_RoC.Value = (int)Value; } #endregion #region INERTIAL_ALT_RATE // BIT 48 BARO ALT RATE STATUS CAT48I250Data.BDS60_HDG_SPD_Report.Inertial_RoC.Is_Valid = BO2.DWord[Bit_Ops.Bit18]; // BITS 47 .. 56 BARO ALT RATE VALUE Value = 0.0; // Bit 36 BARO ALT RATE SIGN if (BO2.DWord[Bit_Ops.Bit17]) { Bit_Ops BO1_Temp = new Bit_Ops(); BO1_Temp.DWord[Bit_Ops.Bit0] = !BO2.DWord[Bit_Ops.Bit8]; BO1_Temp.DWord[Bit_Ops.Bit1] = !BO2.DWord[Bit_Ops.Bit9]; BO1_Temp.DWord[Bit_Ops.Bit2] = !BO2.DWord[Bit_Ops.Bit10]; BO1_Temp.DWord[Bit_Ops.Bit3] = !BO2.DWord[Bit_Ops.Bit11]; BO1_Temp.DWord[Bit_Ops.Bit4] = !BO2.DWord[Bit_Ops.Bit12]; BO1_Temp.DWord[Bit_Ops.Bit5] = !BO2.DWord[Bit_Ops.Bit13]; BO1_Temp.DWord[Bit_Ops.Bit6] = !BO2.DWord[Bit_Ops.Bit14]; BO1_Temp.DWord[Bit_Ops.Bit7] = !BO2.DWord[Bit_Ops.Bit15]; BO1_Temp.DWord[Bit_Ops.Bit8] = !BO2.DWord[Bit_Ops.Bit16]; BO1_Temp.DWord[Bit_Ops.Bit9] = false; BO1_Temp.DWord[Bit_Ops.Bit10] = false; BO1_Temp.DWord[Bit_Ops.Bit11] = false; BO1_Temp.DWord[Bit_Ops.Bit12] = false; BO1_Temp.DWord[Bit_Ops.Bit13] = false; BO1_Temp.DWord[Bit_Ops.Bit14] = false; BO1_Temp.DWord[Bit_Ops.Bit15] = false; if (BO1_Temp.DWord[Bit_Ops.Bit0]) Value = RoC_1; if (BO1_Temp.DWord[Bit_Ops.Bit1]) Value = Value + RoC_2; if (BO1_Temp.DWord[Bit_Ops.Bit2]) Value = Value + RoC_3; if (BO1_Temp.DWord[Bit_Ops.Bit3]) Value = Value + RoC_4; if (BO1_Temp.DWord[Bit_Ops.Bit4]) Value = Value + RoC_5; if (BO1_Temp.DWord[Bit_Ops.Bit5]) Value = Value + RoC_6; if (BO1_Temp.DWord[Bit_Ops.Bit6]) Value = Value + RoC_7; if (BO1_Temp.DWord[Bit_Ops.Bit7]) Value = Value + RoC_8; if (BO1_Temp.DWord[Bit_Ops.Bit8]) Value = Value + RoC_9; BO1_Temp.DWord[Bit_Ops.Bits0_15_Of_DWord] = BO1_Temp.DWord[Bit_Ops.Bits0_15_Of_DWord] + 1; CAT48I250Data.BDS60_HDG_SPD_Report.Inertial_RoC.Value = -(int)Value; } else { if (BO2.DWord[Bit_Ops.Bit8]) Value = RoC_1; if (BO2.DWord[Bit_Ops.Bit9]) Value = Value + RoC_2; if (BO2.DWord[Bit_Ops.Bit10]) Value = Value + RoC_3; if (BO2.DWord[Bit_Ops.Bit11]) Value = Value + RoC_4; if (BO2.DWord[Bit_Ops.Bit12]) Value = Value + RoC_5; if (BO2.DWord[Bit_Ops.Bit13]) Value = Value + RoC_6; if (BO2.DWord[Bit_Ops.Bit14]) Value = Value + RoC_7; if (BO2.DWord[Bit_Ops.Bit15]) Value = Value + RoC_8; if (BO2.DWord[Bit_Ops.Bit16]) Value = Value + RoC_9; CAT48I250Data.BDS60_HDG_SPD_Report.Inertial_RoC.Value = (int)Value; } #endregion break; #endregion } } } // Increase data buffer index so it ready for the next data item. CAT48.CurrentDataBufferOctalIndex = CAT48.CurrentDataBufferOctalIndex + (8 * Repetative_Factor); ////////////////////////////////////////////////////////////////////////////////// // Now assign it to the generic list CAT48.I048DataItems[CAT48.ItemIDToIndex("250")].value = CAT48I250Data; ////////////////////////////////////////////////////////////////////////////////// }