private void Simconnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data) { switch (data.dwRequestID) { case (uint)DATA_REQUESTS.FLIGHT_STATUS: { var flightStatus = data.dwData[0] as FlightStatusStruct?; if (flightStatus.HasValue) { AircraftStatusUpdated?.Invoke(this, new AircraftStatusUpdatedEventArgs( new AircraftStatus { Latitude = flightStatus.Value.Latitude, Longitude = flightStatus.Value.Longitude, Altitude = flightStatus.Value.Altitude, AltitudeAboveGround = flightStatus.Value.AltitudeAboveGround, Bank = flightStatus.Value.Bank, Heading = flightStatus.Value.MagneticHeading, TrueHeading = flightStatus.Value.TrueHeading, GroundSpeed = flightStatus.Value.GroundSpeed, IndicatedAirSpeed = flightStatus.Value.IndicatedAirspeed, VerticalSpeed = flightStatus.Value.VerticalSpeed, IsOnGround = flightStatus.Value.IsOnGround == 1, Transponder = flightStatus.Value.Transponder.ToString().PadLeft(4, '0'), FrequencyCom1 = flightStatus.Value.Com1, FrequencyCom2 = flightStatus.Value.Com2 })); } } break; } }
private void Simconnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data) { // Must be general SimObject information switch (data.dwRequestID) { case (uint)DATA_REQUESTS.FLIGHT_STATUS: { var flightStatus = data.dwData[0] as FlightStatusStruct?; if (flightStatus.HasValue) { logger.LogTrace("Get Aircraft status"); AircraftStatusUpdated?.Invoke(this, new AircraftStatusUpdatedEventArgs( new AircraftStatus { //SimTime = flightStatus.Value.SimTime, SimRate = flightStatus.Value.SimRate, Latitude = flightStatus.Value.Latitude, Longitude = flightStatus.Value.Longitude, Altitude = flightStatus.Value.Altitude, AltitudeAboveGround = flightStatus.Value.AltitudeAboveGround, Pitch = flightStatus.Value.Pitch, Bank = flightStatus.Value.Bank, Heading = flightStatus.Value.MagneticHeading, TrueHeading = flightStatus.Value.TrueHeading, GroundSpeed = flightStatus.Value.GroundSpeed, IndicatedAirSpeed = flightStatus.Value.IndicatedAirSpeed, VerticalSpeed = flightStatus.Value.VerticalSpeed, TouchdownNormalVelocity = flightStatus.Value.TouchdownNormalVelocity, GForce = flightStatus.Value.GForce, FuelTotalQuantity = flightStatus.Value.FuelTotalQuantity, IsOnGround = flightStatus.Value.IsOnGround == 1, StallWarning = flightStatus.Value.StallWarning == 1, OverspeedWarning = flightStatus.Value.OverspeedWarning == 1, IsAutopilotOn = flightStatus.Value.IsAutopilotOn == 1, Transponder = flightStatus.Value.Transponder.ToString().PadLeft(4, '0'), FrequencyCom1 = flightStatus.Value.Com1, FrequencyCom2 = flightStatus.Value.Com2, })); } } break; } }
private void Simconnect_OnRecvSimobjectDataBytypeAsync(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data) { // Must be general SimObject information switch (data.dwRequestID) { case (uint)DATA_REQUESTS.FLIGHT_STATUS: { var flightStatus = data.dwData[0] as FlightStatusStruct?; if (flightStatus.HasValue) { logger.LogTrace("Get Aircraft status"); AircraftStatusUpdated?.Invoke(this, new AircraftStatusUpdatedEventArgs( new AircraftStatus { //SimTime = flightStatus.Value.SimTime, //SimRate = flightStatus.Value.SimRate, Latitude = flightStatus.Value.Latitude, Longitude = flightStatus.Value.Longitude, Altitude = flightStatus.Value.Altitude, AltitudeAboveGround = flightStatus.Value.AltitudeAboveGround, Pitch = flightStatus.Value.Pitch, Bank = flightStatus.Value.Bank, Heading = flightStatus.Value.MagneticHeading, TrueHeading = flightStatus.Value.TrueHeading, GroundSpeed = flightStatus.Value.GroundSpeed, IndicatedAirSpeed = flightStatus.Value.IndicatedAirSpeed, VerticalSpeed = flightStatus.Value.VerticalSpeed, FuelTotalQuantity = flightStatus.Value.FuelTotalQuantity, IsOnGround = flightStatus.Value.IsOnGround == 1, StallWarning = flightStatus.Value.StallWarning == 1, OverspeedWarning = flightStatus.Value.OverspeedWarning == 1, IsAutopilotOn = flightStatus.Value.IsAutopilotOn == 1, IsApHdgOn = flightStatus.Value.IsApHdgOn == 1, ApHeading = flightStatus.Value.ApHdg, IsApNavOn = flightStatus.Value.IsApNavOn == 1, IsApAprOn = flightStatus.Value.IsApAprOn == 1, IsApAltOn = flightStatus.Value.IsApAltOn == 1, ApAltitude = flightStatus.Value.ApAlt, IsApVsOn = flightStatus.Value.IsApVsOn == 1, IsApFlcOn = flightStatus.Value.IsApFlcOn == 1, ApAirspeed = flightStatus.Value.ApAirspeed, ApVs = flightStatus.Value.ApVs, Transponder = flightStatus.Value.Transponder.ToString().PadLeft(4, '0'), FreqencyCom1 = flightStatus.Value.Com1, FreqencyCom2 = flightStatus.Value.Com2, IsAvMasterOn = flightStatus.Value.AvMasterOn == 1 })); } else { // Cast failed logger.LogError("Cannot cast to FlightStatusStruct!"); } } break; case (uint)DATA_REQUESTS.TOGGLE_VALUE_DATA: { var result = new Dictionary <TOGGLE_VALUE, string>(); lock (lockLists) { if (data.dwDefineCount != genericValues.Count) { logger.LogError("Incompatible array count {actual}, expected {expected}. Skipping received data", data.dwDefineCount, genericValues.Count); return; } var dataArray = data.dwData[0] as GenericValuesStruct?; if (!dataArray.HasValue) { logger.LogError("Invalid data received"); return; } for (int i = 0; i < data.dwDefineCount; i++) { var genericValue = genericValues.ElementAt(i); int decimals = eventLib.GetDecimals(genericValue); double toggleValue = Math.Round(dataArray.Value.Get(i), decimals); result.Add(genericValue, toggleValue.ToString("F" + decimals.ToString())); } } GenericValuesUpdated?.Invoke(this, new ToggleValueUpdatedEventArgs(result)); } break; } }