Example #1
0
 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;
     }
 }
Example #2
0
        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;
            }
        }
Example #3
0
        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;
            }
        }