コード例 #1
0
ファイル: SlewMenu.cs プロジェクト: qery/FsConnect
        //
        // Event handlers
        //

        private void HandleReceivedFsData(object sender, FsDataReceivedEventArgs e)
        {
            try
            {
                if (e.Data == null || e.Data.Count == 0)
                {
                    throw new Exception("No data returned");
                }

                if (e.RequestId == (uint)Requests.PlaneInfo)
                {
                    _planeInfoResponse = (PlaneInfoResponse)e.Data.FirstOrDefault();

                    Console.WriteLine(_planeInfoResponse.ToString());
                }
                else if (e.RequestId == (uint)Requests.PlanePosition)
                {
                    _planePosition = (PlanePosition)e.Data.FirstOrDefault();

                    _pollPlanePositionResetEvent.Set();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Could not handle received FS data: " + ex);
            }
        }
コード例 #2
0
ファイル: SimObjectManager.cs プロジェクト: qery/FsConnect
        private void HandleReceivedFsData(object sender, FsDataReceivedEventArgs e)
        {
            try
            {
                if (e.Data == null || e.Data.Count == 0)
                {
                    throw new Exception("No data returned");
                }

                if (e.RequestId == _requestIdUInt)
                {
                    _simObjects[e.ObjectID] = (T)e.Data.FirstOrDefault();

                    // Set reset event when all items have been returned.
                    if (e.EntryNumber == e.OutOf)
                    {
                        _getResetEvent.Set();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Could not handle received FS data: " + ex);
            }
        }
コード例 #3
0
 private static void Fs_FsDataReceived(object sender, FsDataReceivedEventArgs e)
 {
     if (e.RequestId == (uint)Requests.PlaneInfo)
     {
         PlaneInfoResponse r = (PlaneInfoResponse)e.Data;
         Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss")}\t{r.Latitude:F4},{r.Longitude:F4}\t{r.Altitude:F1}ft\t{r.Heading:F1}deg\t\t{r.IASKnots:F0}kt\t\t{r.GSKnots:F0}kt");
     }
 }
コード例 #4
0
ファイル: Program.cs プロジェクト: GuillaumePugnet/FsConnect
 private static void HandleReceivedFsData(object sender, FsDataReceivedEventArgs e)
 {
     if (e.RequestId == (uint)Requests.PlaneInfo)
     {
         PlaneInfoResponse r = (PlaneInfoResponse)e.Data;
         Console.WriteLine($"{r.Latitude:F4} {r.Longitude:F4} {r.Altitude:F1}ft {r.Heading:F1}deg {r.SpeedMpS:F0}m/s {r.SpeedKnots:F0}kt");
     }
 }
コード例 #5
0
ファイル: MainWindow.xaml.cs プロジェクト: ZenMusic/gees
 private static void HandleReceivedFsData(object sender, FsDataReceivedEventArgs e)
 {
     if (!SafeToRead)
     {
         Console.WriteLine("lost one");
         return;
     }
     SafeToRead = false;
     try
     {
         if (e.RequestId == (uint)Requests.PlaneInfo)
         {
             if (!ShowLanding)
             {
                 PlaneInfoResponse r = (PlaneInfoResponse)e.Data;
                 //ignore when noone is flying
                 if (r.ForwardSpeed < 4) //if less then 4kt, it's not a landing or out to menu
                 {
                     SafeToRead = true;
                     return;
                 }
                 if (r.OnGround)
                 {
                     Onground.Add(r);
                     if (Onground.Count > BUFFER_SIZE)
                     {
                         Onground.RemoveAt(0);
                         if (Inair.Count == BUFFER_SIZE)
                         {
                             ShowLanding = true;
                         }
                     }
                 }
                 else
                 {
                     Inair.Add(r);
                     if (Inair.Count > BUFFER_SIZE)
                     {
                         Inair.RemoveAt(0);
                     }
                     Onground.Clear();
                 }
                 if (Inair.Count > BUFFER_SIZE || Onground.Count > BUFFER_SIZE) //maximum 1 for race condition
                 {
                     Inair.Clear();
                     Onground.Clear();
                     throw new Exception("this baaad");
                 }
                 // POnGround = r.OnGround;
             }
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
     }
     SafeToRead = true;
 }
コード例 #6
0
        private static void HandleReceivedFsData(object sender, FsDataReceivedEventArgs e)
        {
            if (e.Data == null || e.Data.Count == 0)
            {
                return;
            }

            if (e.RequestId == (uint)Requests.PlaneInfoRequest)
            {
                PlaneInfoResponse r = (PlaneInfoResponse)e.Data.FirstOrDefault();
                Console.WriteLine($"{r.PlaneLatitude:F4} {r.PlaneLongitude:F4} {r.PlaneAltitude:F1}ft {r.PlaneHeadingDegreesTrue:F1}deg {r.AirspeedTrueInMeterPerSecond:F0}m/s {r.AirspeedTrueInKnot:F0}kt");
            }
        }
コード例 #7
0
ファイル: Program.cs プロジェクト: qery/FsConnect
        private static void HandleReceivedFsData(object sender, FsDataReceivedEventArgs e)
        {
            if (e.Data == null || e.Data.Count == 0)
            {
                return;
            }

            if (e.RequestId == (uint)Requests.PlaneInfoRequest)
            {
                PlaneInfoResponse r = (PlaneInfoResponse)e.Data.FirstOrDefault();
                Console.WriteLine($"{r.Latitude:F4} {r.Longitude:F4} {r.Altitude:F1}ft {r.Heading:F1}deg {r.SpeedMpS:F0}m/s {r.SpeedKnots:F0}kt");
            }
        }
コード例 #8
0
ファイル: AutopilotManager.cs プロジェクト: c-true/FsConnect
        protected override void OnFsDataReceived(object sender, FsDataReceivedEventArgs e)
        {
            if (e.Data.Count == 0)
            {
                return;
            }
            if (!(e.Data[0] is AutopilotSimVars))
            {
                return;
            }

            _autopilotSimVars = (AutopilotSimVars)e.Data[0];
            _resetEvent.Set();
        }
コード例 #9
0
ファイル: RadioManager.cs プロジェクト: c-true/FsConnect
        private void OnFsDataReceived(object sender, FsDataReceivedEventArgs e)
        {
            if (e.Data.Count == 0)
            {
                return;
            }
            if (!(e.Data[0] is RadioManagerSimVars))
            {
                return;
            }

            _radioManagerSimVars = (RadioManagerSimVars)e.Data[0];
            _resetEvent.Set();
        }
コード例 #10
0
        private static void HandleReceivedFsData(object sender, FsDataReceivedEventArgs e)
        {
            try
            {
                if (e.RequestId == (uint)Requests.PlaneInfo)
                {
                    _planeInfoResponse = (PlaneInfoResponse)e.Data;

                    Console.WriteLine($"Pos: ({FsUtils.Rad2Deg(_planeInfoResponse.Latitude):F4}, {FsUtils.Rad2Deg(_planeInfoResponse.Longitude):F4}), Alt: {_planeInfoResponse.Altitude:F0} ft, Hdg: {FsUtils.Rad2Deg(_planeInfoResponse.Heading):F1} deg, Speed: {_planeInfoResponse.Speed:F0} kt");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Could not handle received FS data: " + ex);
            }
        }
コード例 #11
0
ファイル: FsConnectManager.cs プロジェクト: c-true/FsConnect
 protected virtual void OnFsDataReceived(object sender, FsDataReceivedEventArgs e)
 {
 }
コード例 #12
0
        /// <summary>
        /// Handle FsDataReceived events from FsConnect
        /// </summary>
        private void _fsConn_FsDataReceived(object sender, FsDataReceivedEventArgs e)
        {
            if (e.RequestId == (uint)Requests.PlaneInfo)
            {
                // Prepare the data to send out in the DataReceived event
                PlaneInfoResponse     r    = (PlaneInfoResponse)e.Data.FirstOrDefault();
                DataReceivedEventArgs args = new DataReceivedEventArgs()
                {
                    Title                   = r.Title,
                    Latitude                = r.Latitude,
                    Longitude               = r.Longitude,
                    Altitude                = r.Altitude,
                    Pitch                   = r.Pitch,
                    Bank                    = r.Bank,
                    HeadingTrue             = r.HeadingTrue,
                    HeadingMagnetic         = r.HeadingMagnetic,
                    FlapsHandleIndex        = r.FlapsHandleIndex,
                    FlapsNumHandlePositions = r.FlapsNumHandlePositions,
                    Airspeed_Indicated      = r.Airspeed_Indicated,
                    Airspeed_True           = r.Airspeed_True,
                    GPSGroundSpeed          = r.GPSGroundSpeed,
                    VerticalSpeed           = r.VerticalSpeed,
                    OnGround                = r.OnGround,
                    ParkingBrakeSet         = r.ParkingBrakeSet,
                    NumberOfEngines         = r.NumberOfEngines,
                    Engine1Starter          = r.Engine1Starter,
                    Engine2Starter          = r.Engine2Starter,
                    Engine3Starter          = r.Engine3Starter,
                    Engine4Starter          = r.Engine4Starter,
                    Engine1Combusting       = r.Engine1Combusting,
                    Engine2Combusting       = r.Engine2Combusting,
                    Engine3Combusting       = r.Engine3Combusting,
                    Engine4Combusting       = r.Engine4Combusting,
                    Lights                  = new LightStates()
                    {
                        Nav         = r.LightNav,
                        Beacon      = r.LightBeacon,
                        Landing     = r.LightLanding,
                        Taxi        = r.LightTaxi,
                        Strobe      = r.LightStrobe,
                        Panel       = r.LightPanel,
                        Recognition = r.LightRecognition,
                        Wing        = r.LightWing,
                        Logo        = r.LightLogo,
                        Cabin       = r.LightCabin,
                    },
                    FlightState       = (r.OnGround) ? "Landed" : "Flying",
                    ParkingBrakeState = (r.ParkingBrakeSet > 0) ? "Set" : "Released",
                    Timestamp         = DateTime.UtcNow
                };

                // Fire the DataReceived event
                OnDataReceived(args);

                // If this is the first data we've received, set some monitoring flags
                if (!_firstDataRecvd)
                {
                    _lastGroundState       = r.OnGround;
                    _lastParkingBrakeState = r.ParkingBrakeSet;

                    // Record that we have received first data
                    _firstDataRecvd = true;
                }
                else
                {
                    // Check if the ground state has changed
                    if (r.OnGround != _lastGroundState)
                    {
                        // Detect what happened
                        if (r.OnGround == true)
                        {
                            // We landed, fire the Landed event
                            OnLanded();
                        }
                        else
                        {
                            OnTakeoff();
                        }
                    }

                    if (r.ParkingBrakeSet != _lastParkingBrakeState)
                    {
                        // Detect what happened
                        if (r.ParkingBrakeSet == short.MaxValue)
                        {
                            // Parking brake was juset set
                            OnParkingBrakeSet();
                        }
                        else
                        {
                            OnParkingBrakeReleased();
                        }
                    }
                }

                // Update record flags
                _lastGroundState       = r.OnGround;
                _lastParkingBrakeState = r.ParkingBrakeSet;
            }
        }