Exemplo n.º 1
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");
     }
 }
        /// <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;
            }
        }