예제 #1
0
 private void SendPositionUpdate()
 {
     if (FSD.Connected)
     {
         if (mConnectInfo.ObserverMode)
         {
             FSD.SendPDU(new PDUATCPosition(mConnectInfo.Callsign, 99998, NetworkFacility.OBS, 40, NetworkRating.OBS, mUserAircraftData.Latitude, mUserAircraftData.Longitude));
         }
         else
         {
             if (mIsIdentPressed)
             {
                 mIsIdenting     = true;
                 mIsIdentPressed = false;
             }
             else if (mIsIdenting)
             {
                 mIsIdenting = false;
                 SquawkingIdentChanged?.Invoke(this, new SquawkingIdentChangedEventArgs(false));
             }
             if (mUserAircraftData != null)
             {
                 FSD.SendPDU(new PDUPilotPosition(OurCallsign, mUserAircraftData.TransponderCode, mUserAircraftData.TransponderMode >= 2, mIsIdenting || mUserAircraftData.TransponderIdent, NetworkRating.OBS, mUserAircraftData.Latitude, mUserAircraftData.Longitude, Convert.ToInt32(mUserAircraftData.AltitudeMsl * 3.28084), Convert.ToInt32(mUserAircraftData.PressureAltitude), Convert.ToInt32(mUserAircraftData.GroundSpeed), Convert.ToInt32(mUserAircraftData.Pitch), Convert.ToInt32(mUserAircraftData.Bank), Convert.ToInt32(mUserAircraftData.Heading)));
             }
         }
     }
 }
예제 #2
0
 public void SquawkIdent()
 {
     if (FSD.Connected)
     {
         mIsIdentPressed = true;
         SquawkingIdentChanged?.Invoke(this, new SquawkingIdentChangedEventArgs(true));
     }
 }
        private void SetupSubscribers()
        {
            // com audio selection
            mXplaneConnector.Subscribe(DataRefs.Cockpit2RadiosActuatorsAudioComSelection, 5, (e, v) => { mRadioStackState.ComAudioSelection = (uint)e.Value; });

            // com1 frequency
            mXplaneConnector.Subscribe(DataRefs.Cockpit2RadiosActuatorsCom1FrequencyHz, 5, (e, v) => { mRadioStackState.Com1ActiveFreq = ((uint)e.Value * 10000).Normalize25KhzFrequency(); });
            // com1 standby frequency
            mXplaneConnector.Subscribe(DataRefs.Cockpit2RadiosActuatorsCom1StandbyFrequencyHz, 5, (e, v) => { mRadioStackState.Com1StandbyFreq = ((uint)e.Value * 10000).Normalize25KhzFrequency(); });
            // com1 power
            mXplaneConnector.Subscribe(DataRefs.Cockpit2RadiosActuatorsCom1Power, 5, (e, v) => { mRadioStackState.Com1Power = Convert.ToBoolean(e.Value); });
            // com1 listening
            mXplaneConnector.Subscribe(DataRefs.Cockpit2RadiosActuatorsAudioSelectionCom1, 5, (e, v) => { mRadioStackState.Com1Listening = Convert.ToBoolean(e.Value); });
            // com1 volume
            mXplaneConnector.Subscribe(DataRefs.Cockpit2RadiosActuatorsAudioVolumeCom1, 5, (e, v) =>
            {
                if (e.Value > 1.0f)
                {
                    e.Value = 1.0f;
                }
                if (e.Value < 0.0f)
                {
                    e.Value = 0.0f;
                }
                Com1VolumeChanged?.Invoke(this, new RadioVolumeChangedEventArgs(1, e.Value));
            });

            // com2 frequency
            mXplaneConnector.Subscribe(DataRefs.Cockpit2RadiosActuatorsCom2FrequencyHz, 5, (e, v) => { mRadioStackState.Com2ActiveFreq = ((uint)e.Value * 10000).Normalize25KhzFrequency(); });
            // com2 standby frequency
            mXplaneConnector.Subscribe(DataRefs.Cockpit2RadiosActuatorsCom2StandbyFrequencyHz, 5, (e, v) => { mRadioStackState.Com2StandbyFreq = ((uint)e.Value * 10000).Normalize25KhzFrequency(); });
            // com2 power
            mXplaneConnector.Subscribe(DataRefs.Cockpit2RadiosActuatorsCom2Power, 5, (e, v) => { mRadioStackState.Com2Power = Convert.ToBoolean(e.Value); });
            // com2 listening
            mXplaneConnector.Subscribe(DataRefs.Cockpit2RadiosActuatorsAudioSelectionCom2, 5, (e, v) => { mRadioStackState.Com2Listening = Convert.ToBoolean(e.Value); });
            // com2 volume
            mXplaneConnector.Subscribe(DataRefs.Cockpit2RadiosActuatorsAudioVolumeCom2, 5, (e, v) =>
            {
                if (e.Value > 1.0f)
                {
                    e.Value = 1.0f;
                }
                if (e.Value < 0.0f)
                {
                    e.Value = 0.0f;
                }
                Com2VolumeChanged?.Invoke(this, new RadioVolumeChangedEventArgs(2, e.Value));
            });

            // avionics power
            mXplaneConnector.Subscribe(DataRefs.Cockpit2SwitchesAvionicsPowerOn, 5, (e, v) => { mRadioStackState.AvionicsPower = Convert.ToBoolean(e.Value); });

            // latitude
            mXplaneConnector.Subscribe(DataRefs.FlightmodelPositionLatitude, 5, (e, v) => { mUserAircraftData.Latitude = e.Value; });

            // longitude
            mXplaneConnector.Subscribe(DataRefs.FlightmodelPositionLongitude, 5, (e, v) => { mUserAircraftData.Longitude = e.Value; });

            // true altitude msl
            mXplaneConnector.Subscribe(DataRefs.FlightmodelPositionElevation, 5, (e, v) => { mUserAircraftData.AltitudeMsl = e.Value; });

            // pressure altitude
            mXplaneConnector.Subscribe(DataRefs.Cockpit2GaugesIndicatorsAltitudeFtPilot, 5, (e, v) => { mUserAircraftData.PressureAltitude = e.Value; });

            // heading
            mXplaneConnector.Subscribe(DataRefs.FlightmodelPositionPsi, 5, (e, v) => { mUserAircraftData.Heading = e.Value; });

            // ground speed
            mXplaneConnector.Subscribe(DataRefs.FlightmodelPositionGroundspeed, 5, (e, v) => { mUserAircraftData.GroundSpeed = e.Value * 1.94384; });

            // pitch
            mXplaneConnector.Subscribe(DataRefs.FlightmodelPositionTheta, 5, (e, v) => { mUserAircraftData.Pitch = e.Value; });

            // bank
            mXplaneConnector.Subscribe(DataRefs.FlightmodelPositionPhi, 5, (e, v) => { mUserAircraftData.Bank = e.Value; });

            // transponder code
            mXplaneConnector.Subscribe(DataRefs.CockpitRadiosTransponderCode, 5, (e, v) => { mUserAircraftData.TransponderCode = Convert.ToInt32(e.Value); });

            // transponder mode
            mXplaneConnector.Subscribe(DataRefs.CockpitRadiosTransponderMode, 5, (e, v) => { mUserAircraftData.TransponderMode = Convert.ToInt32(e.Value); });

            // transponder ident
            mXplaneConnector.Subscribe(DataRefs.CockpitRadiosTransponderId, 5, (e, v) => { mUserAircraftData.TransponderIdent = Convert.ToBoolean(e.Value); SquawkingIdentChanged?.Invoke(this, new SquawkingIdentChangedEventArgs(Convert.ToBoolean(e.Value))); });

            // beacon light
            mXplaneConnector.Subscribe(DataRefs.CockpitElectricalBeaconLightsOn, 5, (e, v) => { mUserAircraftData.BeaconLightsOn = Convert.ToBoolean(e.Value); });

            // landing lights
            mXplaneConnector.Subscribe(DataRefs.CockpitElectricalLandingLightsOn, 5, (e, v) => { mUserAircraftData.LandingLightsOn = Convert.ToBoolean(e.Value); });

            // taxi lights
            mXplaneConnector.Subscribe(DataRefs.CockpitElectricalTaxiLightOn, 5, (e, v) => { mUserAircraftData.TaxiLightsOn = Convert.ToBoolean(e.Value); });

            // nav lights
            mXplaneConnector.Subscribe(DataRefs.CockpitElectricalNavLightsOn, 5, (e, v) => { mUserAircraftData.NavLightsOn = Convert.ToBoolean(e.Value); });

            // strobe lights
            mXplaneConnector.Subscribe(DataRefs.CockpitElectricalStrobeLightsOn, 5, (e, v) => { mUserAircraftData.StrobeLightsOn = Convert.ToBoolean(e.Value); });

            // flaps
            mXplaneConnector.Subscribe(DataRefs.FlightmodelControlsFlaprat, 5, (e, v) => { mUserAircraftData.FlapsPercentage = e.Value; });

            // gear
            mXplaneConnector.Subscribe(DataRefs.CockpitSwitchesGearHandleStatus, 5, (e, v) => { mUserAircraftData.GearDown = Convert.ToBoolean(e.Value); });

            // speed brakes
            mXplaneConnector.Subscribe(DataRefs.Cockpit2ControlsSpeedbrakeRatio, 5, (e, v) => { mUserAircraftData.SpeedBrakeDeployed = e.Value > 0; });

            // replay mode
            mXplaneConnector.Subscribe(DataRefs.OperationPrefsReplayMode, 5, (e, v) => { mUserAircraftData.ReplayModeEnabled = Convert.ToBoolean(e.Value); });

            // engine count
            var engCount = new DataRefElement
            {
                DataRef   = "sim/aircraft/engine/acf_num_engines",
                Frequency = 5
            };

            mXplaneConnector.Subscribe(engCount, 5, (e, v) => { mUserAircraftData.EngineCount = Convert.ToInt32(e.Value); });

            // engine1 running
            var engn0 = new DataRefElement
            {
                DataRef   = "sim/flightmodel/engine/ENGN_running[0]",
                Frequency = 5
            };

            // engine2 running
            var engn1 = new DataRefElement
            {
                DataRef   = "sim/flightmodel/engine/ENGN_running[1]",
                Frequency = 5
            };

            // engine3 running
            var engn2 = new DataRefElement
            {
                DataRef   = "sim/flightmodel/engine/ENGN_running[2]",
                Frequency = 5
            };

            // engine1 running
            var engn3 = new DataRefElement
            {
                DataRef   = "sim/flightmodel/engine/ENGN_running[3]",
                Frequency = 5
            };

            mXplaneConnector.Subscribe(engn0, 5, (e, v) => { mUserAircraftData.Engine1Running = Convert.ToBoolean(e.Value); });
            mXplaneConnector.Subscribe(engn1, 5, (e, v) => { mUserAircraftData.Engine2Running = Convert.ToBoolean(e.Value); });
            mXplaneConnector.Subscribe(engn2, 5, (e, v) => { mUserAircraftData.Engine3Running = Convert.ToBoolean(e.Value); });
            mXplaneConnector.Subscribe(engn3, 5, (e, v) => { mUserAircraftData.Engine4Running = Convert.ToBoolean(e.Value); });

            // on the ground
            mXplaneConnector.Subscribe(DataRefs.FlightmodelFailuresOngroundAny, 5, (e, v) => { mUserAircraftData.OnGround = Convert.ToBoolean(e.Value); });

            // ptt command
            var ptt = new DataRefElement
            {
                DataRef   = "xpilot/ptt",
                Frequency = 15
            };

            mXplaneConnector.Subscribe(ptt, 15, (e, v) =>
            {
                PushToTalkStateChanged?.Invoke(this, new PushToTalkStateChangedEventArgs(Convert.ToBoolean(e.Value)));
            });

            mXplaneConnector.Start();
        }