• Which the release of FS2020 we see an explosition of activity on the forun and of course we are very happy to see this. But having all questions about FS2020 in one forum becomes a bit messy. So therefore we would like to ask you all to use the following guidelines when posting your questions:

    • Tag FS2020 specific questions with the MSFS2020 tag.
    • Questions about making 3D assets can be posted in the 3D asset design forum. Either post them in the subforum of the modelling tool you use or in the general forum if they are general.
    • Questions about aircraft design can be posted in the Aircraft design forum
    • Questions about airport design can be posted in the FS2020 airport design forum. Once airport development tools have been updated for FS2020 you can post tool speciifc questions in the subforums of those tools as well of course.
    • Questions about terrain design can be posted in the FS2020 terrain design forum.
    • Questions about SimConnect can be posted in the SimConnect forum.

    Any other question that is not specific to an aspect of development or tool can be posted in the General chat forum.

    By following these guidelines we make sure that the forums remain easy to read for everybody and also that the right people can find your post to answer it.

C# PMDG

Messages
3
Country
china
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


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;
            }
        }
 
SpringOcean, I have the same problem. Everthing else works. The C++ example that comes with the SDK works, but I do not get any data. Did you solve this in the mean time?
 
You may have to contact PMDG because I know some of their offsets are customized. I was doing some work on setting fuel values on the cockpit gauges and the default offset values don't work for their 737NGX because they changed them.
 
Back
Top