Exemplo n.º 1
0
        private void OnRecieveDataHandler(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            switch ((REQUESTS)data.dwRequestID)
            {
            case REQUESTS.AircraftRequest:
                foreach (AircraftData aircraftData in data.dwData)
                {
                    clientRecieveAircraftDataHandler(aircraftData);
                }
                break;

            case REQUESTS.TrafficRequest:
                foreach (TrafficData trafficData in data.dwData)
                {
                    clientRecieveTrafficDataHandler(data.dwObjectID, trafficData);
                }
                break;

            case REQUESTS.AttitudeRequest:
                foreach (AttitudeData attitudeData in data.dwData)
                {
                    clientRecieveAttitudeDataHandler(attitudeData);
                }
                break;

            default:
                break;
            }
        }
Exemplo n.º 2
0
        private void SimConnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            Struct1 struct1 = (Struct1)data.dwData[0];

            SetPith(struct1.PITCH);
            SetBank(struct1.BANK);
        }
Exemplo n.º 3
0
        void simconnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            switch ((DATA_REQUESTS)data.dwRequestID)
            {
            case DATA_REQUESTS.REQUEST_1:
                Struct1 s1 = (Struct1)data.dwData[0];

                if (!simrunning)
                {
                    sw.Start();
                    simrunning = true;
                }

                s1.time = sw.ElapsedMilliseconds;

                log.Add(s1);

                if (log.Count % 100 == 0)
                {
                    Struct1 current = log.Last();
                    displayStats(current);
                }
                break;

            case DATA_REQUESTS.REQUEST_2:
                Struct2 s2 = (Struct2)data.dwData[0];
                s2.time = log.Count == 0 ? 0 : log.Last().time;
                log2.Add(s2);
                break;

            default:
                displayText("Unknown request ID: " + data.dwRequestID);
                break;
            }
        }
Exemplo n.º 4
0
        private void SimConnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            Console.WriteLine("SimConnect_OnRecvSimobjectData");

            uint iRequest = data.dwRequestID;
            uint iObject  = data.dwObjectID;

            if (!lObjectIDs.Contains(iObject))
            {
                lObjectIDs.Add(iObject);
            }
            foreach (SimvarRequest oSimvarRequest in lSimvarRequests)
            {
                if (iRequest == (uint)oSimvarRequest.eRequest && (!bObjectIDSelectionEnabled || iObject == m_iObjectIdRequest))
                {
                    double dValue = (double)data.dwData[0];
                    oSimvarRequest.dValue        = dValue;
                    oSimvarRequest.bPending      = false;
                    oSimvarRequest.bStillPending = false;

                    // WatchServer sends to client
                    var dict = new Dictionary <string, dynamic>
                    {
                        { "key", oSimvarRequest.sName },
                        { "value", dValue }
                    };

                    watchServer.SendMessage(dict);
                }
            }
        }
Exemplo n.º 5
0
 private void ProcessData()
 {
     try
     {
         List <SIMCONNECT_RECV_SIMOBJECT_DATA> data = new List <SIMCONNECT_RECV_SIMOBJECT_DATA>();
         while (_working)
         {
             _simConnectProcessEvent.WaitOne();
             _simConnectProcessEvent.Reset();
             lock (_dataQueue)
             {
                 while (_dataQueue.Count > 0)
                 {
                     data.Add(_dataQueue.Dequeue());
                 }
             }
             while (data.Count > 0)
             {
                 SIMCONNECT_RECV_SIMOBJECT_DATA d = data[0];
                 data.RemoveAt(0);
             }
         }
     }
     catch (ThreadAbortException)
     { }
 }
        private void OnSimVarReceived(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            var request = _simVarsByRequests[(SimVars)data.dwRequestID];

            request.Set(data.dwData[0]);
            _eventAggregator.GetEvent <SimVarReceivedEvent>().Publish(request);
        }
Exemplo n.º 7
0
 private void sc_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
 {
     if ((Requests)data.dwRequestID == Requests.UserPosition)
     {
         userPos = (LatLon)data.dwData;
     }
 }
Exemplo n.º 8
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;
     }
 }
 private void SimClient_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
 {
     try
     {
         DataRxEvent?.Invoke((RequestsEnum)data.dwRequestID, data);
     }
     catch (Exception) { }
 }
Exemplo n.º 10
0
        private void OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            AircraftStatusModel aircraftStatusModel = new AircraftStatusModel((AircraftStatusStruct)data.dwData[0]);

            var json = JsonConvert.SerializeObject(aircraftStatusModel);

            connection.Send <string>("flightdata", json);
        }
Exemplo n.º 11
0
        void simconnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            nbFromSimconnect += 1;
            if (!Acm.AlreadySending)
            {
                if (Acm.CurrentPort != null)
                {
                    switch ((MySimConnect.DATA_REQUESTS)data.dwRequestID)
                    {
                    case MySimConnect.DATA_REQUESTS.REQUEST_1:
                        MySimConnect.Struct1 s1 = (MySimConnect.Struct1)data.dwData[0];

                        MySimConnect.curHeading  = Convert.ToUInt32(s1.heading * 180 / Math.PI);
                        MySimConnect.curAltitude = Convert.ToInt32(s1.altitude);

                        string msg;
                        msg  = "<DATA;";
                        msg += s1.autopilot + ";";
                        msg += s1.yawdamp_h + ";";
                        msg += s1.heading_h + ";";
                        msg += s1.approach_h + ";";
                        msg += s1.nav_h + ";";
                        msg += s1.altitude_h + ";";
                        msg += s1.vs_h + ";";

                        msg += Convert.ToInt32(s1.altitude) + ";";
                        msg += Convert.ToInt32(s1.heading * 180 / Math.PI) + ";";
                        msg += Math.Round(s1.altimeter, 2) + ";";
                        msg += Math.Round(s1.fuel_quantity / s1.fuel_capacity * 100) + ";";
                        msg += Math.Round(s1.wind_direction) + ";";
                        msg += Math.Round(s1.wind_velocity) + ";";
                        msg += Math.Round(s1.flaps * 100) + ";";

                        msg += Convert.ToInt32(s1.heading_var) + ";";
                        msg += Convert.ToInt32(s1.altitude_var) + ";";
                        msg += Convert.ToInt32(s1.vs_var) + ";";

                        msg += (s1.autopilot == 1 ? "AP" : "--");
                        msg += (s1.yawdamp_h == 1 ? "YD" : "--");
                        msg += (s1.heading_h == 1 ? "HDG" : "---");
                        msg += (s1.approach_h == 1 ? "APR" : "---");
                        msg += (s1.nav_h == 1 ? "NAV" : "---");
                        msg += (s1.altitude_h == 1 ? "ALT" : (s1.vs_h == 1 ? "VS-" : "---"));

                        msg += ";END;>";

                        //DisplayInfo("(" + Acm.CurrentPort.PortName + "): SEND: " + msg);

                        Acm.SendValue(msg);

                        break;

                    default:
                        break;
                    }
                }
            }
        }
Exemplo n.º 12
0
 protected virtual void SimConnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
 {
     if (data.dwRequestID == (uint)REQUESTS.AIRPLANE)
     {
         //this.AirPlaneData = (C172Struct)data.dwData[0];
         SIMCONNECT_DATA_XYZ AIRCRAFT_ORIENTATION_AXIS = (SIMCONNECT_DATA_XYZ)data.dwData[0];
         Console.WriteLine("{0}, {1}, {2}", AIRCRAFT_ORIENTATION_AXIS.x, AIRCRAFT_ORIENTATION_AXIS.y, AIRCRAFT_ORIENTATION_AXIS.z);
     }
 }
Exemplo n.º 13
0
 private void _simconnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
 {
     _simConnectEvent.Reset();
     lock (_dataQueue)
     {
         _dataQueue.Enqueue(data);
     }
     _simConnectProcessEvent.Set();
 }
Exemplo n.º 14
0
 void sc_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
 {
     if ((Requests)data.dwRequestID == Requests.UserPosition)
     {
         LatLon userPos = (LatLon)data.dwData;
         CreateNearbyObjects(new Coordinate(userPos.Latitude, userPos.Longitude), placementRadiusMeters);
         RemoveFarAwayObjects(new Coordinate(userPos.Latitude, userPos.Longitude), placementRadiusMeters);
     }
 }
Exemplo n.º 15
0
        protected override void OnRecvObjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            AirplaneGeoInfo geoInfo = (AirplaneGeoInfo)data.dwData[0];
            AirplaneGeoInfoChangedEventArgs args = new AirplaneGeoInfoChangedEventArgs {
                info = geoInfo
            };

            OnAircraftDataChanged?.Invoke(this, args);
        }
Exemplo n.º 16
0
        private void OnRecvSimobjectData(SimConnect simConnect, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            REQUEST request = (REQUEST)data.dwRequestID;

            (simConnect as SimConnectzmo) !.typeToRequest !
            .Where(candidate => candidate.Value == request)
            .Select(candidate => candidate.Key)
            .Single()
            .Process(simConnect, data.dwData[0]);
        }
Exemplo n.º 17
0
        public void receiveData(SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            int diffSeconds = latestData.zuluTime;

            latestData = (flightData)data.dwData[0];
            if (!flightDataValid)
            {
                // First reception of data
                initialFuel     = latestData.totalFuel;
                flightDataValid = true;
                return;
            }
            diffSeconds = latestData.zuluTime - diffSeconds;
            if (diffSeconds <= 0)
            {
                return;
            }

            int envBonusFactor = latestData.altitude_agl <= 1000 ? 5 : latestData.altitude_agl < 2000 ? 3 : 1;

            envBonusTime += envBonusFactor * diffSeconds;
            envBonus     += envBonusFactor * diffSeconds * weatherSeverity();

            if (isTacho)
            {
                rentalTicker += diffSeconds * latestData.rpmPercentage / 36.0f;
            }
            else
            {
                engineTime += diffSeconds;
            }

            if (latestData.timeOfDay != 1)
            {
                nightTime += diffSeconds;
            }

            if (engines.Length > 0)
            {
                engines[0].feed(diffSeconds, latestData.combustion1 != 0, latestData.rpm1, latestData.cht1, latestData.mixture1, latestData.altitude);
            }
            if (engines.Length > 1)
            {
                engines[1].feed(diffSeconds, latestData.combustion2 != 0, latestData.rpm2, latestData.cht2, latestData.mixture2, latestData.altitude);
            }
            if (engines.Length > 2)
            {
                engines[2].feed(diffSeconds, latestData.combustion3 != 0, latestData.rpm3, latestData.cht3, latestData.mixture3, latestData.altitude);
            }
            if (engines.Length > 3)
            {
                engines[3].feed(diffSeconds, latestData.combustion4 != 0, latestData.rpm4, latestData.cht4, latestData.mixture4, latestData.altitude);
            }
        }
Exemplo n.º 18
0
 private async void OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
 {
     try
     {
         var position = (SimUpdate)data.dwData;
         currentPosition = position;
         await simHub.SendPositionObject(position);
     }
     catch (Exception)
     {
     }
 }
Exemplo n.º 19
0
        /*
         * Data has been received from FS
         */
        public void onRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            switch ((DATA_REQUESTID)data.dwRequestID)
            {
            case DATA_REQUESTID.AIRCRAFT_SPECS:
            {
                if (currentAircraft != null)
                {
                    currentAircraft.receiveData(data);
                }
                break;
            }

            case DATA_REQUESTID.AIRCRAFT_INFO:
            {
                aircraft_info latestInfo = (aircraft_info)data.dwData[0];
                if (currentAircraft != null)
                {
                    if (currentAircraft.specifications.title != latestInfo.title)
                    {
                        eventAircraftChanged(sender);
                    }
                    else
                    {
                        currentAircraft.latestInfo = latestInfo;
                        if (!currentAircraft.probeDataValid)
                        {
                            updateProbedataFunction();
                        }
                        updateFunction();
                    }
                }
                break;
            }

            case DATA_REQUESTID.FLIGHT_DATA:
            {
                if (currentFlight != null)
                {
                    currentFlight.receiveData(data);
                    checkCurrentState(currentFlight.latestData);
                }
                break;
            }

            case DATA_REQUESTID.FLIGHT_FINISH_DATA:
            {
                finishFlight(data);
                break;
            }
            }
        }
Exemplo n.º 20
0
        void simconnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            switch ((DATA_REQUESTS)data.dwRequestID)
            {
            case DATA_REQUESTS.REQUEST_1:
                Control1 s1 = (Control1)data.dwData[0];
                send();
                break;

            default:
                break;
            }
        }
Exemplo n.º 21
0
        public void receiveData(SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            switch ((DATA_REQUESTID)data.dwRequestID)
            {
            case DATA_REQUESTID.AIRCRAFT_SPECS:
            {
                specifications = (aicraft_specs)data.dwData[0];

                specifications.estimateFuelFlow /= 1000.0f;                 // estimateFF seems to be multiplied by 1000 by FS.
                break;
            }
            }
        }
Exemplo n.º 22
0
        void SimConnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            PositionData s1          = (PositionData)data.dwData[0];
            double       heading     = s1.heading * 180.0 / Math.PI;
            double       trueheading = s1.trueheading * 180.0 / Math.PI;
            string       message     = string.Format("{7}|{0:f10}|{1:f10}|{2:f0}|{3:f0}|{4:f0}|{5:f0}|{6:f0}", s1.latitude, s1.longitude, s1.altitude, s1.airspeed, s1.groundspeed, heading, trueheading, seq_id++);

            Console.WriteLine(message);
            // TODO: add timestamp
            if (FSXDataReceived != null)
            {
                FSXDataReceived(message);
            }
        }
        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)
                {
                    try
                    {
                        //object obj = data.dwData[0];
                        //AircraftData acData = (AircraftData?)obj ?? default;
                        TelemetryData telemetryData = new TelemetryData
                        {
                            Pitch      = (float)flightStatus.Value.Pitch,
                            Roll       = (float)flightStatus.Value.Bank,
                            Yaw        = (float)flightStatus.Value.Yaw,
                            Surge      = (float)flightStatus.Value.zAccel,
                            Sway       = (float)flightStatus.Value.xAccel,
                            Heave      = (float)flightStatus.Value.yAccel,
                            RollSpeed  = (float)flightStatus.Value.xVelocity,
                            YawSpeed   = (float)flightStatus.Value.yVelocity,
                            PitchSpeed = (float)flightStatus.Value.zVelocity,
                            Speed      = (float)flightStatus.Value.GroundSpeed,
                            RPM        = (float)flightStatus.Value.RPM
                        };

                        IsConnected = true;
                        IsRunning   = true;

                        TelemetryEventArgs args = new TelemetryEventArgs(new TelemetryInfoElem(telemetryData, lastTelemetryData));
                        RaiseEvent(OnTelemetryUpdate, args);
                        lastTelemetryData = telemetryData;
                    }
                    catch (Exception e)
                    {
                        LogError(Name + "TelemetryProvider Exception while receiving data", e);
                        IsConnected = false;
                        IsRunning   = false;
                        Thread.Sleep(1000);
                    }
                }
            }
            break;
            }
        }
Exemplo n.º 24
0
        private void SimConnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            if (data.dwRequestID == (uint)(Requests.MainRequest))
            {
                SimConnectData typedData = (SimConnectData)data.dwData[0];

                if (!double.IsNaN(typedData.latitude))
                {
                    flightData.Latitude = typedData.latitude;
                }
                if (!double.IsNaN(typedData.longitude))
                {
                    flightData.Longitude = typedData.longitude;
                }
                if (!double.IsNaN(typedData.altitude))
                {
                    flightData.AltitudeFt = typedData.altitude;
                }
                if (!double.IsNaN(typedData.groundSpeed))
                {
                    flightData.GroundSpeedKt = typedData.groundSpeed;
                }
                if (!double.IsNaN(typedData.groundTrack))
                {
                    flightData.GroundTrackDegrees = typedData.groundTrack;
                }
                if (!double.IsNaN(typedData.pitch))
                {
                    flightData.PitchDegrees = -typedData.pitch;
                }
                if (!double.IsNaN(typedData.roll))
                {
                    flightData.RollDegrees = -typedData.roll;
                }
                if (!double.IsNaN(typedData.trueHeading))
                {
                    flightData.TrueHeadingDegrees = typedData.trueHeading;
                }


                Debug.WriteLine("SimConnect - Alt:{0:F2}, Lat:{1:F4}, Lon:{2:F4}, GS:{3:F1}, GT:{4:F1}, Pitch:{5:F2}, Roll:{6:F2}, TH:{7:F1}",
                                typedData.altitude, typedData.latitude, typedData.longitude, typedData.groundSpeed,
                                typedData.groundTrack, typedData.pitch, typedData.roll, typedData.trueHeading);
                Debug.WriteLine("Flight Data - Alt:{0:F2}, Lat:{1:F4}, Lon:{2:F4}, GS:{3:F1}, GT:{4:F1}, Pitch:{5:F2}, Roll:{6:F2}, TH:{7:F1}",
                                flightData.AltitudeFt, flightData.Latitude, flightData.Longitude, flightData.GroundSpeedKt,
                                flightData.GroundTrackDegrees, flightData.PitchDegrees, flightData.RollDegrees, flightData.TrueHeadingDegrees);
            }
            Debug.Flush();
        }
Exemplo n.º 25
0
        private void simconnect_OnRecvSimObjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            switch ((DATA_REQUESTS)data.dwRequestID)
            {
            case DATA_REQUESTS.REQUEST_PLAYER_UPDATE_AND_ATTACH:
                AirplaneData dt = (AirplaneData)data.dwData[0];
                dt.desired = 0;
                simconnect.SetDataOnSimObject(DEFINITIONS.AirplaneData, towplaneid, 0, dt);
                break;

            default:
                MessageBox.Show("Unknown Request ID " + data.dwRequestID);
                break;
            }
        }
        // for future use

        /*        void SimConnect_OnRecvEvent(SimConnect sender, SIMCONNECT_RECV_EVENT data)
         *      {
         *          switch ((EVENTS)(data.uEventID))
         *          {
         *              case EVENTS.FlightPlanActivated:
         *                  int n = 5;
         *                  break;
         *
         *              case EVENTS.FlightPlanDeactivated:
         *                  int aa = 7;
         *                  break;
         *
         *              case EVENTS.SimStop:
         *                  int x = 6;
         *                  break;
         *
         *              case EVENTS.SimStart:
         *                  int z = 7;
         *                  break;
         *
         *
         *              default:
         *                  break;
         *          }
         *
         *      }*/

        // for future use

        /*        void SimConnect_OnRecvFilename(SimConnect sender, SIMCONNECT_RECV_EVENT_FILENAME data)
         *      {
         *          switch ((EVENTS)(data.uEventID))
         *          {
         *              case EVENTS.FlightPlanActivated:
         *                  int n = 5;
         *                  break;
         *
         *              default:
         *                  break;
         *          }
         *      }*/

        // when receiving object data first asked for simenvironment info to get aircraft title one time
        // once that is received then ask once a second for aircraft info
        void SimConnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            switch ((DATA_REQUESTS)data.dwRequestID)
            {
            case DATA_REQUESTS.DataRequest:
                flightDataHandler.Invoke(FlightData((SimPlaneDataStructure)data.dwData[0]));
                break;

            case DATA_REQUESTS.SimEnvironmentReq:
                environmentDataHandler.Invoke(EnvironmentData((SimEnvironmentDataStructure)data.dwData[0]));
                break;

            default:
                break;
            }
        }
Exemplo n.º 27
0
        void finishFlight(SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            fuelStruct fuel       = (fuelStruct)data.dwData[0];
            String     parameters = currentFlight.getUrlParameters();

            parameters += String.Format("&lat={0:f}&lon={1:f}", currentAircraft.latestInfo.lat, currentAircraft.latestInfo.lon);
            parameters += "&" + fuel.getUrlParameters();
            using (SubmitForm dialog = new SubmitForm(parameters))
            {
                dialog.ShowDialog();
            }

            disposeFlight();
            updateFunction();
            currentAircraft.invalidatePosition();
        }
Exemplo n.º 28
0
 private void Simconnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
 {
     // Must be general SimObject information
     switch (data.dwRequestID)
     {
     case (uint)DATA_REQUESTS.AIRCRAFT_POSITION:
     {
         var position = data.dwData[0] as AircraftPositionStruct?;
         if (position.HasValue)
         {
             ProcessAircraftPosition(position.Value);
         }
     }
     break;
     }
 }
Exemplo n.º 29
0
 void simconnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
 {
     switch ((DEFINITIONS)data.dwRequestID)
     {
     case DEFINITIONS.SimData:
         try
         {
             handleSimData((SimData)data.dwData[0]);
         }
         catch (Exception e)
         {
             Console.WriteLine(e.ToString());
         }
         break;
     }
 }
Exemplo n.º 30
0
        void sc_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            UserPosition pos = (UserPosition)data.dwData;

            if (!Objects.ContainsKey(data.dwObjectID))
            {
                Objects.Add(data.dwObjectID, pos);
                lstViewer.Items.Add(pos.ListItem);
            }

            pos.ListItem.SubItems[colheaderLatitude.Index].Text  = pos.LatitudeDegrees.ToString();
            pos.ListItem.SubItems[colheaderLongitude.Index].Text = pos.LongitudeDegrees.ToString();
            pos.ListItem.SubItems[colheaderAltitude.Index].Text  = pos.AltitudeFeet.ToString();
            pos.ListItem.SubItems[colheaderPitch.Index].Text     = pos.PitchDegrees.ToString();
            pos.ListItem.SubItems[colheaderBank.Index].Text      = pos.BankDegrees.ToString();
            pos.ListItem.SubItems[colheaderHeading.Index].Text   = pos.HeadingDegrees.ToString();
        }
Exemplo n.º 31
0
 private void OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
 {
     try
     {
         Donnees = (DonneesAvion)data.dwData[0];
     }
     catch (Exception e)
     {
         Console.WriteLine("OnRecvSimobjectData a échoué :" + e.Message);
     }
 }
Exemplo n.º 32
0
        void sc_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            if (data.dwRequestID == (uint)Requests.PlanePosition)
            {
                PlanePosition.Struct pos = (PlanePosition.Struct)data.dwData[0];

                if (UseMagneticHeading)
                    pos.heading = pos.magheading;

                SimPosition = new PlanePosition(pos);

                byte[] packet = P3DHIL.ExtensionMethods.StructExtensionMethods.StructureToByteArray(pos);

                _udpSend.SendAsync(packet, packet.Length, "127.0.0.1", 49005).ContinueWith((x) => { Console.WriteLine("UDP Send [{0}|{1}] {2}", x.Result, packet.Length, x.Exception.Message); }, TaskContinuationOptions.NotOnRanToCompletion);

                NotifyOfPropertyChange(() => SimPosition);
            }
            else if (data.dwRequestID == (uint)Requests.SurfacesPosition)
            {
                SurfacesPosition.Struct pos = (SurfacesPosition.Struct)data.dwData[0];

                SimControl = new SurfacesPosition(pos);
                NotifyOfPropertyChange(() => SimControl);
            }
            else
            {
                Console.WriteLine("Unknown");
            }
        }
Exemplo n.º 33
0
 void simconnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
 {
     if(data.dwRequestID >= (uint)SIMCONNECT_EVENTS.EVENTID_POSITIONREPORT_FOR_AIUPDATE)
         HandleAIPositionReport(data.dwObjectID, (AIPositionReportStruct)data.dwData[0]);
     else
     {
         switch ((SIMCONNECT_EVENTS)data.dwRequestID)
         {
             case SIMCONNECT_EVENTS.EVENTID_POSITIONREPORT:
                 var posreport = (PositionReportStruct)data.dwData[0];
                 var positionReportMsg = new PositionReportMessage()
                 {
                     TrueAltitude = posreport.truealtitude,
                     PressureAltitude = posreport.pressurealtitude,
                     Longitude = posreport.longitude,
                     Latitude = posreport.latitude,
                     Groundspeed = posreport.groundspeed,
                     Pitch = -posreport.pitch,
                     Bank = -posreport.bank,
                     Heading = posreport.heading,
                 };
                 broker.Publish(positionReportMsg);
                 break;
         }
     }
 }
Exemplo n.º 34
0
        void simconnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            Struct1 s1 = (Struct1)data.dwData[0];
            // calculate timestep, there is no good way to get a timestamp from the sim
            // jitter will add noise to the calculated accelerations, but it should average out
            int ticks = Environment.TickCount;
            rxIntervalSmoothed = (0.001 * (ticks - lastTicks) + 9 * rxIntervalSmoothed) / 10; // convert to seconds and apply some smoothing
            lastTicks = ticks;
            // display the frequency of data reception
            int rxFrequency = (int)(1 / rxIntervalSmoothed);
            labelRxFreq.Text = rxFrequency.ToString();

            //build a rotation matrix with the given roll, pitch, heading, using aircraft axis convention (x = roll axis, y = pitch axis, z = yaw axis)
            double[] dcm = new double[9];
            double Sp = Math.Sin(s1.pitch * degToRad);
            double Cp = Math.Cos(s1.pitch * degToRad);
            double Sr = Math.Sin(s1.roll * degToRad);
            double Cr = Math.Cos(s1.roll * degToRad);
            double Sy = Math.Sin(s1.headingTrue * degToRad);
            double Cy = Math.Cos(s1.headingTrue * degToRad);

            dcm[0] = Cp * Cy;
            dcm[1] = Sr * Sp * Cy - Cr * Sy;
            dcm[2] = Cr * Sp * Cy + Sr * Sy;
            dcm[3] = Cp * Sy;
            dcm[4] = Sr * Sp * Sy + Cr * Cy;
            dcm[5] = Cr * Sp * Sy - Sr * Cy;
            dcm[6] = -Sp;
            dcm[7] = Sr * Cp;
            dcm[8] = Cr * Cp;

            // differentiate world speeds to get accels, then add gravity and rotate to body frame
            // fsx uses X as left/right, Y as up/down, Z as fore/aft; here we convert to aircraft convention
            // accelerations are positive in AFT LEFT DOWN direction
            double vxe = s1.vz;
            double vye = s1.vx;
            double vze = s1.vy;
            // if deltaT is 0, just use gravity
            double axe = rxIntervalSmoothed > 0 ? (vxe - vxeOld) / rxIntervalSmoothed : 0;
            double aye = rxIntervalSmoothed > 0 ? (vye - vyeOld) / rxIntervalSmoothed : 0;
            double aze = rxIntervalSmoothed > 0 ? (vze - vzeOld) / rxIntervalSmoothed + 9.81 : 9.81;
            vxeOld = vxe;
            vyeOld = vye;
            vzeOld = vze;

            // multiply earth frame accelerations by rotation matrix to get body frame accelerations
            double axb = axe * dcm[0] + aye * dcm[3] + aze * dcm[6];
            double ayb = axe * dcm[1] + aye * dcm[4] + aze * dcm[7];
            double azb = axe * dcm[2] + aye * dcm[5] + aze * dcm[8];

            // ***** Code for modelling gyro errors *********
            // calculate StdDev required to give the user-specified bias instability (rads/min) at the current sample rate
            // the bias instability is the 1sd error in angle after one minute of integration
            // biasinstability = sigma*sqrt(n)
            int samplesPerMinute = 60 * rxFrequency;
            double sigma = gyroBiasDrift / Math.Sqrt(samplesPerMinute);
            sigma /= 60; // convert to rads/sec
            // integrate noise to make the bias follow a random walk
            calculatedGyroBiasX += gaussianRandom(sigma);
            calculatedGyroBiasY += gaussianRandom(sigma);
            calculatedGyroBiasZ += gaussianRandom(sigma);
            // constrain them within limits
            constrainDouble(ref calculatedGyroBiasX, -gyroBiasLimit, gyroBiasLimit);
            constrainDouble(ref calculatedGyroBiasY, -gyroBiasLimit, gyroBiasLimit);
            constrainDouble(ref calculatedGyroBiasZ, -gyroBiasLimit, gyroBiasLimit);
            // add bias drift plus white noise
            s1.omegaX += (float)(gaussianRandom(gyroNoise) + calculatedGyroBiasX);
            s1.omegaY += (float)(gaussianRandom(gyroNoise) + calculatedGyroBiasY);
            s1.omegaZ += (float)(gaussianRandom(gyroNoise) + calculatedGyroBiasZ);

            // display the "gyro" readings and calculated accelerations
            labelOmegaX.Text = s1.omegaX.ToString();
            labelOmegaY.Text = s1.omegaY.ToString();
            labelOmegaZ.Text = s1.omegaZ.ToString();
            labelAX.Text = axb.ToString();
            labelAY.Text = ayb.ToString();
            labelAZ.Text = azb.ToString();

            // Convert to binary format, using x-plane UDP protocol
            // x-plane data is in 36 byte blocks with an index and 32 bytes of data (usually as floats)
            // gyro rates and accelerations are sent with index 255
            // BitConverter class is used to get a byte[4] array for each float. This is then copied to the main byte[]
            // some things are reversed to meet android conventions

            byte[] simData = new byte[201];
            simData[0] = 70; simData[1] = 83; simData[2] = 88; simData[3] = 33; // "FSX!" header
            simData[4] = 0; //not used

            simData[5] = 20; simData[6] = 0; simData[7] = 0; simData[8] = 0; // index for lat/lon/alt as int32
            BitConverter.GetBytes(s1.latitude).CopyTo(simData, 9);
            BitConverter.GetBytes(s1.longitude).CopyTo(simData, 13);
            BitConverter.GetBytes(s1.trueAltitude / 0.3048f).CopyTo(simData, 17); //convert to feet for x-plane compatability

            simData[41] = 3; simData[42] = 0; simData[43] = 0; simData[44] = 0; //index for speeds
            BitConverter.GetBytes(s1.ias / 0.5144f).CopyTo(simData, 45); //convert to knots for x-plane compatability
            BitConverter.GetBytes(s1.groundspeed / 0.5144f).CopyTo(simData, 57);

            simData[77] = 17; simData[78] = 0; simData[79] = 0; simData[80] = 0; //index for pitch roll heading
            BitConverter.GetBytes(s1.pitch).CopyTo(simData, 81);
            BitConverter.GetBytes(-s1.roll).CopyTo(simData, 85);
            BitConverter.GetBytes(s1.headingTrue).CopyTo(simData, 89);
            BitConverter.GetBytes(s1.headingMag).CopyTo(simData, 93);

            simData[113] = 4; simData[114] = 0; simData[115] = 0; simData[116] = 0; //index for processed accels, convert to Gs
            BitConverter.GetBytes((float)azb / 9.8f).CopyTo(simData, 133); // down
            BitConverter.GetBytes((float)axb / 9.8f).CopyTo(simData, 137); // aft
            BitConverter.GetBytes((float)ayb / 9.8f).CopyTo(simData, 141); // left

            simData[149] = 16; simData[150] = 0; simData[151] = 0; simData[152] = 0; // index for gyro rates
            BitConverter.GetBytes(-s1.omegaY).CopyTo(simData, 153); // pitch rate
            BitConverter.GetBytes(-s1.omegaX).CopyTo(simData, 157); // roll rate
            BitConverter.GetBytes(s1.omegaZ).CopyTo(simData, 161); // yaw rate

            simData[185] = 18; simData[186] = 0; simData[187] = 0; simData[188] = 0;
            BitConverter.GetBytes(s1.gpsBearing).CopyTo(simData, 197);

            // send over the network to the remote host and port specified by user
            if (TxRxUDP)
            {
                byte[] packet = simData;
                try
                {
                    udpClient.Send(packet, packet.Length, remoteHost, remotePort);
                }
                catch (Exception ex) { displayText(ex.Message); }
            }
        }
Exemplo n.º 35
0
        void simconnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            Console.WriteLine("Got SimobjectData");

            switch ((DATA_REQUESTS)data.dwRequestID)
            {
                case DATA_REQUESTS.REQUEST_1:
                    Struct1 s1 = (Struct1)data.dwData[0];

                    Console.WriteLine("Title: " + s1.title);
                    Console.WriteLine("COM1:  " + s1.com1freq);
                    Console.WriteLine("COM2:  " + s1.com2freq);

                    form1.setFrequencies(s1.com1freq, s1.com1standby, s1.com2freq, s1.com2standby);
                    form1.updateSerialDisplay();
                    break;

                default:
                    Console.WriteLine("Unknown request ID: " + data.dwRequestID);
                    break;
            }
        }
Exemplo n.º 36
0
        static void simConnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            Dictionary<string, string> simData = new Dictionary<string, string>();
            switch ((DATA_REQUESTS)data.dwRequestID)
            {
                case DATA_REQUESTS.DataRequest:
                    DataStructure s1 = (DataStructure)data.dwData[0];

                    simData.Add("Pitch", s1.pitch.ToString());
                    simData.Add("Roll", s1.roll.ToString());
                    simData.Add("XAccel", s1.xAccel.ToString());
                    simData.Add("YAccel", s1.yAccel.ToString());
                    simData.Add("ZAccel", s1.zAccel.ToString());
                    simData.Add("GForce", s1.gforce.ToString());
                    simData.Add("RPM1", s1.rpm2.ToString());
                    simData.Add("RPM2", s1.rpm1.ToString());
                    simData.Add("Surface", s1.surface.ToString());
                    simData.Add("Crashed", s1.crashed.ToString());
                    simData.Add("TAS", s1.tas.ToString());
                    simData.Add("Heading", s1.heading.ToString());
                    simData.Add("Altitude", s1.altitude.ToString());
                    break;

                default:
                    //displayText("Unknown request ID: " + data.dwRequestID);
                    break;
            }
            //return simData;
        }
Exemplo n.º 37
0
        void simConnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            switch ((DATA_REQUESTS)data.dwRequestID)
            {
                case DATA_REQUESTS.DataRequest:
                    DataStructure s1 = (DataStructure)data.dwData[0];

                    pitch.Text = s1.pitch.ToString();
                    roll.Text = s1.roll.ToString();
                    xAccel.Text = s1.xAccel.ToString();
                    YAccel.Text = s1.yAccel.ToString();
                    ZAccel.Text = s1.zAccel.ToString();
                    GForce.Text = s1.gforce.ToString();
                    rpm1.Text = s1.rpm1.ToString();
                    rpm2.Text = s1.rpm2.ToString();
                    altAboveGround.Text = s1.altaboveground.ToString();
                    surface.Text = s1.surface.ToString();
                    crashed.Text = s1.crashed.ToString();
                    tas.Text = s1.tas.ToString();
                    heading.Text = s1.heading.ToString();
                    altitude.Text = s1.altitude.ToString();
                    break;

                default:
                    DisplayText("Unknown request ID: " + data.dwRequestID);
                    break;
            }
        }
        private void simconnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
        {
            switch ((DATA_REQUESTS)data.dwRequestID)
            {
                case DATA_REQUESTS.REQUEST_1:
                    Struct1 s1 = (Struct1)data.dwData[0];
                    Airspeed = s1.indicatedAirspeed;
                    break;

                default:
                    //Console.WriteLine("Unknown request ID: " + data.dwRequestID);
                    break;
            }
        }