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; } }