- Messages
- 3
- Country

Hi
i want write a app to get ngx data with C#,but i can get event and can't get data,please help me
i want write a app to get ngx data with C#,but i can get event and can't get data,please help me
Code:
private string NGXClientName = "PMDG737NGX";
private string NGXDataClientName = "PMDG_NGX_Data";
enum Client_Data_ID
{
PMDG_NGX_DATA_ID = 0x4E477831,
PMDG_NGX_DATA_DEFINITION = 0x4E477832,
PMDG_NGX_CONTROL_ID = 0x4E477833,
PMDG_NGX_CONTROL_DEFINITION = 0x4E477834,
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
struct PMDG_NGX_Data
{
// Electrical
//[MarshalAs(UnmanagedType.Bool)]
////////////////////////////////////////////
// Controls and indicators
////////////////////////////////////////////
#region Aft overhead
//------------------------------------------
#region ADIRU
public byte IRS_DisplaySelector; // Positions 0..4
public bool IRS_SysDisplay_R; // false: L true: R
public bool IRS_annunGPS;
public bool IRS_annunALIGN_L;
public bool IRS_annunALIGN_R;
public bool IRS_annunON_DC_L;
public bool IRS_annunON_DC_R;
public bool IRS_annunFAULT_L;
public bool IRS_annunFAULT_R;
public bool IRS_annunDC_FAIL_L;
public bool IRS_annunDC_FAIL_R;
public byte IRS_ModeSelector_L; // 0: OFF 1: ALIGN 2: NAV 3: ATT
public byte IRS_ModeSelector_R;
#endregion
#region PSEU
public bool WARN_annunPSEU;
#endregion
#region Service Interphone
public bool COMM_ServiceInterphoneSw;
#endregion
#region Lights
public byte LTS_DomeWhiteSw; // 0: DIM 1: OFF 2: BRIGHT
#endregion
#region Engine
public bool ENG_EECSwitch_L;
public bool ENG_EECSwitch_R;
public bool ENG_annunREVERSER_L;
public bool ENG_annunREVERSER_R;
public bool ENG_annunENGINE_CONTROL_L;
public bool ENG_annunENGINE_CONTROL_R;
public bool ENG_annunALTN_L;
public bool ENG_annunALTN_R;
#endregion
#region Oxygen
public byte OXY_Needle; // Position 0...240
public bool OXY_SwNormal; // true: NORMAL false: ON
public bool OXY_annunPASS_OXY_ON;
#endregion
#region Gear
public bool GEAR_annunOvhdLEFT;
public bool GEAR_annunOvhdNOSE;
public bool GEAR_annunOvhdRIGHT;
#endregion
#region Flight recorder
public bool FLTREC_SwNormal; // true: NORMAL false: TEST
public bool FLTREC_annunOFF;
#endregion
#endregion
#region Forward overhead
//------------------------------------------
#region Flight Controls
public byte FCTL_FltControl_Sw_L;
public byte FCTL_FltControl_Sw_R; // 0: STBY/RUD 1: OFF 2: ON
public bool FCTL_Spoiler_Sw_L; // true: ON false: OFF
public bool FCTL_Spoiler_Sw_R;
public bool FCTL_YawDamper_Sw;
public bool FCTL_AltnFlaps_Sw_ARM; // true: ARM false: OFF
public byte FCTL_AltnFlaps_Control_Sw; // 0: UP 1: OFF 2: DOWN
public bool FCTL_annunFC_LOW_PRESSURE_L; // FLT CONTROL
public bool FCTL_annunFC_LOW_PRESSURE_R;
public bool FCTL_annunYAW_DAMPER;
public bool FCTL_annunLOW_QUANTITY;
public bool FCTL_annunLOW_PRESSURE;
public bool FCTL_annunLOW_STBY_RUD_ON;
public bool FCTL_annunFEEL_DIFF_PRESS;
public bool FCTL_annunSPEED_TRIM_FAIL;
public bool FCTL_annunMACH_TRIM_FAIL;
public bool FCTL_annunAUTO_SLAT_FAIL;
#endregion
#region Navigation/Displays
public byte NAVDIS_VHFNavSelector; // 0: BOTH ON 1 1: NORMAL 2: BOTH ON 2
public byte NAVDIS_IRSSelector; // 0: BOTH ON L 1: NORMAL 2: BOTH ON R
public byte NAVDIS_FMCSelector; // 0: BOTH ON L 1: NORMAL 2: BOTH ON R
public byte NAVDIS_SourceSelector; // 0: ALL ON 1 1: AUTO 2: ALL ON 2
public byte NAVDIS_ControlPaneSelector; // 0: BOTH ON 1 1: NORMAL 2: BOTH ON 2
#endregion
#region Fuel
public float FUEL_FuelTempNeedle; // Value
public bool FUEL_CrossFeedSw;
public bool FUEL_PumpFwdSw_L; // left fwd / right fwd
public bool FUEL_PumpFwdSw_R;
public bool FUEL_PumpAftSw_L; // left aft / right aft
public bool FUEL_PumpAftSw_R;
public bool FUEL_PumpCtrSw_L; // ctr left / ctr right
public bool FUEL_PumpCtrSw_R;
public bool FUEL_annunENG_VALVE_CLOSED_L;
public bool FUEL_annunENG_VALVE_CLOSED_R;
public bool FUEL_annunSPAR_VALVE_CLOSED_L;
public bool FUEL_annunSPAR_VALVE_CLOSED_R;
public bool FUEL_annunFILTER_BYPASS_L;
public bool FUEL_annunFILTER_BYPASS_R;
public bool FUEL_annunXFEED_VALVE_OPEN;
public bool FUEL_annunLOWPRESS_Fwd_L;
public bool FUEL_annunLOWPRESS_Fwd_R;
public bool FUEL_annunLOWPRESS_Aft_L;
public bool FUEL_annunLOWPRESS_Aft_R;
public bool FUEL_annunLOWPRESS_Ctr_L;
public bool FUEL_annunLOWPRESS_Ctr_R;
#endregion
#region Electrical
public bool ELEC_annunBAT_DISCHARGE;
public bool ELEC_annunTR_UNIT;
public bool ELEC_annunELEC;
public byte ELEC_DCMeterSelector; // 0: STBY PWR 1: BAT BUS ... 7: TEST
public byte ELEC_ACMeterSelector; // 0: STBY PWR 1: GND PWR ... 6: TEST
public byte ELEC_BatSelector; // 0: OFF 1: BAT 2: ON
public bool ELEC_CabUtilSw;
public bool ELEC_IFEPassSeatSw;
public bool ELEC_annunDRIVE_L;
public bool ELEC_annunDRIVE_R;
public bool ELEC_annunSTANDBY_POWER_OFF;
public bool ELEC_IDGDisconnectSw_L;
public bool ELEC_IDGDisconnectSw_R;
public byte ELEC_StandbyPowerSelector; // 0: BAT 1: OFF 2: AUTO
public bool ELEC_annunGRD_POWER_AVAILABLE;
public bool ELEC_GrdPwrSw;
public bool ELEC_BusTransSw_AUTO;
public bool ELEC_GenSw_L;
public bool ELEC_GenSw_R;
public bool ELEC_APUGenSw_L;
public bool ELEC_APUGenSw_R;
public bool ELEC_annunTRANSFER_BUS_OFF_L;
public bool ELEC_annunTRANSFER_BUS_OFF_R;
public bool ELEC_annunSOURCE_OFF_L;
public bool ELEC_annunSOURCE_OFF_R;
public bool ELEC_annunGEN_BUS_OFF_L;
public bool ELEC_annunGEN_BUS_OFF_R;
public bool ELEC_annunAPU_GEN_OFF_BUS;
#endregion
#region APU
public float APU_EGTNeedle; // Value
public bool APU_annunMAINT;
public bool APU_annunLOW_OIL_PRESSURE;
public bool APU_annunFAULT;
public bool APU_annunOVERSPEED;
#endregion
#region Wipers
public byte OH_WiperLSelector; // 0: PARK 1: INT 2: LOW 3:HIGH
public byte OH_WiperRSelector; // 0: PARK 1: INT 2: LOW 3:HIGH
#endregion
#region Center overhead controls & indicators
public byte LTS_CircuitBreakerKnob; // Position 0...150
public byte LTS_OvereadPanelKnob; // Position 0...150
public bool AIR_EquipCoolingSupplyNORM;
public bool AIR_EquipCoolingExhaustNORM;
public bool AIR_annunEquipCoolingSupplyOFF;
public bool AIR_annunEquipCoolingExhaustOFF;
public bool LTS_annunEmerNOT_ARMED;
public byte LTS_EmerExitSelector; // 0: OFF 1: ARMED 2: ON
public byte COMM_NoSmokingSelector; // 0: OFF 1: AUTO 2: ON
public byte COMM_FastenBeltsSelector; // 0: OFF 1: AUTO 2: ON
public bool COMM_annunCALL;
public bool COMM_annunPA_IN_USE;
#endregion
#region Anti-ice
public bool ICE_annunOVERHEAT_1;
public bool ICE_annunOVERHEAT_2;
public bool ICE_annunOVERHEAT_3;
public bool ICE_annunOVERHEAT_4;
public bool ICE_annunON_1;
public bool ICE_annunON_2;
public bool ICE_annunON_3;
public bool ICE_annunON_4;
public bool ICE_WindowHeatSw_1;
public bool ICE_WindowHeatSw_2;
public bool ICE_WindowHeatSw_3;
public bool ICE_WindowHeatSw_4;
public bool ICE_annunCAPT_PITOT;
public bool ICE_annunL_ELEV_PITOT;
public bool ICE_annunL_ALPHA_VANE;
public bool ICE_annunL_TEMP_PROBE;
public bool ICE_annunFO_PITOT;
public bool ICE_annunR_ELEV_PITOT;
public bool ICE_annunR_ALPHA_VANE;
public bool ICE_annunAUX_PITOT;
public bool ICE_TestProbeHeatSw_L;
public bool ICE_TestProbeHeatSw_R;
public bool ICE_annunVALVE_OPEN_L;
public bool ICE_annunVALVE_OPEN_R;
public bool ICE_annunCOWL_ANTI_ICE_L;
public bool ICE_annunCOWL_ANTI_ICE_R;
public bool ICE_annunCOWL_VALVE_OPEN_L;
public bool ICE_annunCOWL_VALVE_OPEN_R;
public bool ICE_WingAntiIceSw;
public bool ICE_EngAntiIceSw_L;
public bool ICE_EngAntiIceSw_R;
#endregion
#region Hydraulics
public bool HYD_annunLOW_PRESS_eng_L;
public bool HYD_annunLOW_PRESS_eng_R;
public bool HYD_annunLOW_PRESS_elec_L;
public bool HYD_annunLOW_PRESS_elec_R;
public bool HYD_annunOVERHEAT_elec_L;
public bool HYD_annunOVERHEAT_elec_R;
public bool HYD_PumpSw_eng_L;
public bool HYD_PumpSw_eng_R;
public bool HYD_PumpSw_elec_L;
public bool HYD_PumpSw_elec_R;
#endregion
#region Air systems
public byte AIR_TempSourceSelector; // Positions 0..6
public bool AIR_TrimAirSwitch;
public bool AIR_annunZoneTemp_1;
public bool AIR_annunZoneTemp_2;
public bool AIR_annunZoneTemp_3;
public bool AIR_annunDualBleed;
public bool AIR_annunRamDoorL;
public bool AIR_annunRamDoorR;
public bool AIR_RecircFanSwitch_L;
public bool AIR_RecircFanSwitch_R;
public byte AIR_PackSwitch_L; // 0=OFF 1=AUTO 2=HIGH
public byte AIR_PackSwitch_R;
public bool AIR_BleedAirSwitch_L;
public bool AIR_BleedAirSwitch_R;
public bool AIR_APUBleedAirSwitch;
public bool AIR_IsolationValveSwitch;
public bool AIR_annunPackTripOff_L;
public bool AIR_annunPackTripOff_R;
public bool AIR_annunWingBodyOverheat_L;
public bool AIR_annunWingBodyOverheat_R;
public bool AIR_annunBleedTripOff_L;
public bool AIR_annunBleedTripOff_R;
public int AIR_FltAltWindow;
public int AIR_LandAltWindow;
public int AIR_OutflowValveSwitch; // 0=CLOSE 1=NEUTRAL 2=OPEN
public int AIR_PressurizationModeSelector; // 0=AUTO 1=ALTN 2=MAN
#endregion
#region Bottom overhead
public byte LTS_LandingLtRetractableSw_L; // 0: RETRACT 1: EXTEND 2: ON
public byte LTS_LandingLtRetractableSw_R;
public bool LTS_LandingLtFixedSw_L;
public bool LTS_LandingLtFixedSw_R;
public bool LTS_RunwayTurnoffSw_L;
public bool LTS_RunwayTurnoffSw_R;
public bool LTS_TaxiSw;
public byte APU_Selector; // 0: OFF 1: ON 2: START
public byte ENG_StartSelector_L; // 0: GRD 1: OFF 2: CONT 3: FLT
public byte ENG_StartSelector_R;
public byte ENG_IgnitionSelector; // 0: IGN L 1: BOTH 2: IGN R
public bool LTS_LogoSw;
public byte LTS_PositionSw; // 0: STEADY 1: OFF 2: STROBE&STEADY
public bool LTS_AntiCollisionSw;
public bool LTS_WingSw;
public bool LTS_WheelWellSw;
#endregion
#endregion
#region Glareshield
//------------------------------------------
#region Warnings
public bool WARN_annunFIRE_WARN_L;
public bool WARN_annunFIRE_WARN_R;
public bool WARN_annunMASTER_CAUTION_L;
public bool WARN_annunMASTER_CAUTION_R;
public bool WARN_annunFLT_CONT;
public bool WARN_annunIRS;
public bool WARN_annunFUEL;
public bool WARN_annunELEC;
public bool WARN_annunAPU;
public bool WARN_annunOVHT_DET;
public bool WARN_annunANTI_ICE;
public bool WARN_annunHYD;
public bool WARN_annunDOORS;
public bool WARN_annunENG;
public bool WARN_annunOVERHEAD;
public bool WARN_annunAIR_COND;
#endregion
#region EFIS control panels
public bool EFIS_MinsSelBARO_L;
public bool EFIS_MinsSelBARO_R;
public bool EFIS_BaroSelHPA_L;
public bool EFIS_BaroSelHPA_R;
public byte EFIS_VORADFSel1_L; // 0: VOR 1: OFF 2: ADF
public byte EFIS_VORADFSel1_R;
public byte EFIS_VORADFSel2_L; // 0: VOR 1: OFF 2: ADF
public byte EFIS_VORADFSel2_R;
public byte EFIS_ModeSel_L; // 0: APP 1: VOR 2: MAP 3: PLAn
public byte EFIS_ModeSel_R;
public byte EFIS_RangeSel_L; // 0: 5 ... 7: 640
public byte EFIS_RangeSel_R;
#endregion
#region Mode control panel
public byte MCP_Course_L;
public byte MCP_Course_R;
public float MCP_IASMach; // Mach if < 10.0
public bool MCP_IASBlank;
public bool MCP_IASOverspeedFlash;
public bool MCP_IASUnderspeedFlash;
public short MCP_Heading;
public short MCP_Altitude;
public short MCP_VertSpeed;
public bool MCP_VertSpeedBlank;
public bool MCP_FDSw_L;
public bool MCP_FDSw_R;
public bool MCP_ATArmSw;
public byte MCP_BankLimitSel; // 0: 10 ... 4: 30
public bool MCP_DisengageBar;
public bool MCP_annunFD_L;
public bool MCP_annunFD_R;
public bool MCP_annunATArm;
public bool MCP_annunN1;
public bool MCP_annunSPEED;
public bool MCP_annunVNAV;
public bool MCP_annunLVL_CHG;
public bool MCP_annunHDG_SEL;
public bool MCP_annunLNAV;
public bool MCP_annunVOR_LOC;
public bool MCP_annunAPP;
public bool MCP_annunALT_HOLD;
public bool MCP_annunVS;
public bool MCP_annunCMD_A;
public bool MCP_annunCWS_A;
public bool MCP_annunCMD_B;
public bool MCP_annunCWS_B;
#endregion
#region Forward panel
//------------------------------------------
public bool MAIN_NoseWheelSteeringSwNORM; // false: ALT
public bool MAIN_annunBELOW_GS_L;
public bool MAIN_annunBELOW_GS_R;
public byte MAIN_MainPanelDUSel_L; // 0: OUTBD PFD ... 4 MFD for Capt; reverse sequence for FO
public byte MAIN_MainPanelDUSel_R;
public byte MAIN_LowerDUSel_L; // 0: ENG PRI ... 2 ND for Capt; reverse sequence for FO
...
}
struct PMDG_NGX_Control
{
public int Event;
public int Parameter;
}
enum NGX_Events
{
EVT_OH_ELEC_BATTERY_SWITCH = 69633,
}
frmMain.simConnect.MapClientDataNameToID(NGXClientName, Client_Data_ID.PMDG_NGX_CONTROL_ID);
frmMain.simConnect.AddToClientDataDefinition(Definitions.Struct_Event, 0x0, (uint)Marshal.SizeOf(typeof(PMDG_NGX_Control)), 0.0f, SimConnect.SIMCONNECT_UNUSED);
frmMain.simConnect.MapClientEventToSimEvent(AircraftEvent.EVT_OH_ELEC_BATTERY_SWITCH, "#69633");
frmMain.simConnect.AddClientEventToNotificationGroup(Notifaction_Group.Group_Overhead_Electric, AircraftEvent.EVT_OH_ELEC_BATTERY_SWITCH, false);
frmMain.simConnect.MapClientDataNameToID(NGXDataClientName, Client_Data_ID.PMDG_NGX_DATA_ID);
frmMain.simConnect.AddToClientDataDefinition(Client_Data_ID.PMDG_NGX_DATA_DEFINITION, 0, (uint)Marshal.SizeOf(typeof(PMDG_NGX_Data)), 0.0f, SimConnect.SIMCONNECT_UNUSED);
frmMain.simConnect.RegisterStruct<SIMCONNECT_RECV_CLIENT_DATA, PMDG_NGX_Data>(Definitions.Struct_Data);
frmMain.simConnect.OnRecvClientData += simConnect_RecvClientDataEvent;
void simConnect_RecvClientDataEvent(SimConnect sender, SIMCONNECT_RECV_CLIENT_DATA data)
{
switch ((NGX_Request)data.dwRequestID)
{
case NGX_Request.Data_Request:
//PMDG.PMDG_NGX_Data da = (PMDG.PMDG_NGX_Data)data.dwData;
PrintMsg(data.dwData.Length.ToString());
break;
default:
break;
}
}

