Example #1
0
        private void DataReceived(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
        {
            switch ((Requests)data.dwRequestID)
            {
                case Requests.PositionInformationRequest:
                    Data.PositionInformation = (PositionInformation)data.dwData[0];
                    break;

                default:
                    Logger.Log("Unknown request ID: " + data.dwRequestID);
                    break;
            }
        }
Example #2
0
        protected virtual void SimConnect_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
        {
            uint iRequest = data.dwRequestID;
            uint iObject  = data.dwObjectID;

            //lock (simlock)
            {
                foreach (SimVar oSimvarRequest in this.VarList)
                {
                    if (iRequest == (uint)oSimvarRequest.DefID)
                    {
                        object d = data.dwData[0];
                        switch (oSimvarRequest.DataType)
                        {
                        case SIMCONNECT_DATATYPE.STRING128:
                            oSimvarRequest.Value = ((STRING128)data.dwData[0]).Value;
                            break;

                        case SIMCONNECT_DATATYPE.FLOAT64:
                            oSimvarRequest.Value = (double)data.dwData[0];
                            break;

                        case SIMCONNECT_DATATYPE.XYZ:
                            //oSimvarRequest.Value = (double)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);
                            break;
                        }
                    }
                }
                this.Ready = true;
            }
        }
        private void simconnect_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
        {
            string DirNumberText   = "";
            string DirNumber1Text  = "";
            string DirNumber2Text  = "";
            string FileNumberText  = "";
            string FileNumber1Text = "";
            string FileNumber2Text = "";
            double DirNumber1      = 0;
            double DirNumber2      = 0;
            double FileNumber1     = 0;
            double FileNumber2     = 0;


            if (data.dwRequestID == 0)
            {
                Struct1 struct1 = (Struct1)data.dwData[0];
                // label_aircraft.Text = struct1.title.ToString();
                textBox_latitude.Text       = struct1.latitude.ToString();
                textBox_longitude.Text      = struct1.longitude.ToString();
                textBox_trueheading.Text    = struct1.trueheading.ToString();
                textBox_groundaltitude.Text = struct1.groundaltitude.ToString();
                var latitude  = struct1.latitude;
                var longitude = struct1.longitude;
                gMapControl1.Position   = new PointLatLng(latitude, longitude);
                gMapControl1.Zoom       = 20;
                gMapControl1.MinZoom    = 3;
                gMapControl1.MaxZoom    = 15;
                gMapControl1.ShowCenter = false;

                PointLatLng point = new PointLatLng(latitude, longitude);

                GMapMarker marker = new GMarkerGoogle(new PointLatLng(latitude, longitude), new Bitmap(AirManagerResources.aircraft_jet_user));

                gMapOverlay.Markers.Add(marker);
                gMapControl1.Overlays.Add(gMapOverlay);   // overlay added



                DirNumber1 = ((int)(((180.0 + (struct1.longitude)) * 12) / 360.0));
                if (DirNumber1 < 10)
                {
                    DirNumber1Text = "0" + DirNumber1.ToString();
                }
                else
                {
                    DirNumber1Text = DirNumber1.ToString();
                }
                DirNumber2 = ((int)(((90.0 - (struct1.latitude)) * 8) / 180.0));
                if (DirNumber2 < 10)
                {
                    DirNumber2Text = "0" + DirNumber2.ToString();
                }
                else
                {
                    DirNumber2Text = DirNumber2.ToString();
                }
                DirNumberText = DirNumber1Text + DirNumber2Text;

                FileNumber1 = ((int)(((180.0 + (struct1.longitude)) * 96) / 360.0));
                if (FileNumber1 < 10)
                {
                    FileNumber1Text = "0" + FileNumber1.ToString();
                }
                else
                {
                    FileNumber1Text = FileNumber1.ToString();
                }
                FileNumber2 = ((int)(((90.0 - (struct1.latitude)) * 64) / 180.0));
                if (FileNumber2 < 10)
                {
                    FileNumber2Text = "0" + FileNumber2.ToString();
                }
                else
                {
                    FileNumber2Text = FileNumber2.ToString();
                }
                FileNumberText = FileNumber1Text + FileNumber2Text;
            }
            else
            {
                label_status.Text           = "Unknown request ID: " + ((uint)data.dwRequestID);
                textBox_latitude.Text       = "";
                textBox_longitude.Text      = "";
                textBox_trueheading.Text    = "";
                textBox_groundaltitude.Text = "";
            }
        }
Example #4
0
 /*
  * Wenn daten über simconnect empfangen werden
  */
 void simconnect_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
 {
     // auswertung request id
     switch ((DataRequests)data.dwRequestID)
     {
         // wenn req id 1
         case DataRequests.Request_1:
             StructCoordinates s1 = (StructCoordinates)data.dwData[0];
             //FuncGetPosition();
             //FuncCheckMissions();
             if (RequestCheckMIssions != null)
             {
                 RequestCheckMIssions(s1.latitude, s1.longitude);
             }
             break;
         default:
             // sonst nummer der unbekannten id in listbox schreiben
             //funcPrintOut("Unknown request ID: " + data.dwRequestID);
             break;
     }
 }
 protected virtual void SimConnect_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
 {
     // didn't find any difference between SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE and SIMCONNECT_RECV_EXCEPTION. should be safe to do that.
     // invoke on main thread.
     Application.Current?.Dispatcher.Invoke(new Action(() => OnRecvObjectData(sender, data)));
 }
Example #6
0
        /// <summary>
        /// Method called every time a specific station data query is returned
        /// </summary>
        /// <param name="data">Data associated with the query </param>
        public void RecieveStationAtIndexQuery(SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
        {
            // Try to cast
            StationAtIndex?stationAtIndex = data.dwData[0] as StationAtIndex?;

            if (stationAtIndex.HasValue)
            {
                // TODO: Do I need or not
                // Unregister request ID so it can be used again
                //this.SimConnect.ClearDataDefinition((DataIdentifier)data.dwRequestID);

                Station station = new Station(this);

                // Convert request ID to station ID
                int stationIndex = (int)(data.dwRequestID - (uint)DataIdentifier.RecieveStationAtIndex);

                // Fill data class
                station.Name              = stationAtIndex.Value.Title;
                station.Index             = stationIndex;
                station.IsSelected        = stationAtIndex.Value.IsSelected == 1 ? true : false;
                station.SelectionChanged += new StationSendDataHandler(StationSelectionChanged);

                // Does this station exist?
                int cachedIndex = IndexOfStation(station);

                // Doesn't exist, add it
                if (cachedIndex == -1)
                {
                    Stations.Add(station);
                }
                // Does exist. Update it.
                else
                {
                    // Is it still being processed?
                    if (Stations[cachedIndex].BeingProcessed)
                    {
                        // If the expected value matches the returned value (System correctly updated the selected station state)
                        // then we're done processing that station
                        if (Stations[cachedIndex].ExpectedValueForIsSelected == station.IsSelected)
                        {
                            Stations[cachedIndex].BeingProcessed = false;
                        }
                        // Some extra logic in case SimConnect acts up and doesn't update properly.
                        else
                        {
                            if (Stations[cachedIndex].CurrentProcessRequests < Station.MAX_TIMES_TIL_RESEND)
                            {
                                Stations[cachedIndex].CurrentProcessRequests++;
                            }
                            else // Somehow the system STILL didn't get the request. Resend.
                            {
                                Stations[cachedIndex].CurrentProcessRequests = 0;
                                SetStation(new StationEventArgs(cachedIndex, Stations[cachedIndex].ExpectedValueForIsSelected));
                            }
                        }
                    }
                    // We are free to overwrite the previous station
                    else
                    {
                        Stations[cachedIndex] = station;
                        OnPropertyChanged("Stations");
                    }
                }

                NumberOfStationsProcessed++;

                if (NumberOfStationsProcessed == NumberOfStations)
                {
                    // Reset amount of stations processed
                    NumberOfStationsProcessed = 0;

                    FinishStationQuery();
                }
            }
        }
Example #7
0
 private void SimConnect_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
 {
     throw new NotImplementedException();
 }
 private void OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
 {
     //Console.WriteLine($"OnRecvSimobjectDataBytype: {JsonConvert.SerializeObject(data, Formatting.Indented)}");
 }
Example #9
0
 void simconnect_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
 {
     // not used at the moment
 }
Example #10
0
        void simconnect_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
        {

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

                    label5.Text = s1.latitude.ToString("##.#######");
                    label7.Text = s1.longitude.ToString("##.#######");
                    label9.Text = s1.altitude.ToString("####");
                    label12.Text = (s1.heading * (180 / Math.PI)).ToString("###");
                    if (s1.airspeed < 1)
                    {
                        label14.Text = "0kts";
                    }
                    else
                    {
                        label14.Text = s1.airspeed.ToString("###") + "kts";
                    }
                    label16.Text = (s1.verticalspeed * 60).ToString("####") + "fpm";
                    label18.Text = s1.rpm.ToString("####");

                    /*
                     * Look into the following bools, broken, or my knowledge is bad.
                     */ 
                    label25.ForeColor = GetColor(s1.starter); // No change
                    label23.ForeColor = GetColor(s1.lmagneto); // Goes green when engine starts
                    label24.ForeColor = GetColor(s1.rmagneto); // No change

                    // End of broken

                    label28.ForeColor = GetColor(s1.fuelpump);
                    break;

                default:
                    MessageBox.Show("Unknown request ID: " + data.dwRequestID, "FSCommunicate", MessageBoxButtons.OK, MessageBoxIcon.Error);

                    break;
            }
        }
Example #11
0
        /// <summary>
        /// simconnect_OnRecvSimobjectDataByType is used to handle events from simconnect, the events are based on the commands it is sent <see cref="getFlightData(string)"/>.
        /// The requested data is pulled from the respective structure and in some cases formatted.
        /// A string describing the data and the data itself is then sent to the client window and to Twitch.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="data"></param>
        void simconnect_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
        {
            string message = "";

            switch ((DATA_REQUESTS)data.dwRequestID)
            {
            case DATA_REQUESTS.REQUEST_ALT:
                Struct_alt s_alt = (Struct_alt)data.dwData[0];
                message = "We are currently at " + Math.Truncate(s_alt.altitude * 1) / 1 + " ft.";
                break;

            case DATA_REQUESTS.REQUEST_FLIGHT:
                Struct_flight s_flight = (Struct_flight)data.dwData[0];
                message = "Currently flying at " + Math.Truncate(s_flight.altitude * 10) / 10 + " feet with a speed of " + Math.Truncate(s_flight.speed * 10) / 10 + " knots. ";
                if (s_flight.distance > 0)
                {
                    message = message + "Currently " + Math.Truncate(s_flight.distance * 10) / 10 + " from our next waypoint of " + s_flight.waypoint;
                }
                break;

            case DATA_REQUESTS.REQUEST_HEADING:
                Struct_heading s_heading = (Struct_heading)data.dwData[0];
                double         degrees   = Math.Truncate(s_heading.heading * 180 / 3.1415 * 1) / 1;
                message = "Currently flying a heading of " + degrees + " degrees";
                break;

            case DATA_REQUESTS.REQUEST_SPEED:
                Struct_speed s_speed = (Struct_speed)data.dwData[0];
                //We are currently flying at XXX mph(XXX kph)(edited)
                double mph = Math.Truncate(s_speed.speed * 0.868976 * 1) / 1;
                message = "Currently flying at " + Math.Truncate(s_speed.speed * 1) / 1 + " knots or " + mph + " miles per hour.";
                break;

            case DATA_REQUESTS.REQUEST_TEMP:
                Struct_temp s_temp = (Struct_temp)data.dwData[0];
                //We are currently flying at XXX mph(XXX kph)(edited)
                //!temp = The current outside temperature is XXX degrees
                double farenheit = Math.Truncate((s_temp.temperature * 9 / 5 + 32) * 1) / 1;
                message = "The current outside temperature is " + Math.Truncate(s_temp.temperature * 1) / 1 + " C, or " + farenheit + " F.";
                break;

            case DATA_REQUESTS.REQUEST_TIME:
                Struct_time s_time = (Struct_time)data.dwData[0];
                //We are currently flying at XXX mph(XXX kph)(edited)
                //!time = Current in-sim time is XXX XXXX XXXX
                int hours   = (int)(s_time.time / 3600);
                int minutes = (int)((s_time.time % 3600) / 60);
                int seconds = (int)((s_time.time % 3600) % 60);
                message = "Current in-sim time is " + hours + " hours  " + minutes + " minutes " + seconds + " seconds";
                break;

            case DATA_REQUESTS.REQUEST_ROUTE:
                Struct_route s_route = (Struct_route)data.dwData[0];
                message = "Currently flying from " + s_route.waypoint_previous + " to " + s_route.waypoint_next + " with ete " + s_route.ete + " ending at "
                          + s_route.waypoint_arroach + " with eta of " + s_route.eta + ".";

                break;

            case DATA_REQUESTS.REQUEST_PLANE:
                Struct_plane s_plane = (Struct_plane)data.dwData[0];
                message = "Currently flying with livery " + s_plane.title + ". ATC Info: " + s_plane.Airline + " " + s_plane.Type + " " + s_plane.Model + ".";

                break;

            case DATA_REQUESTS.REQUEST_WIND:
                Struct_wind s_wind = (Struct_wind)data.dwData[0];
                //double wind_degrees = Math.Truncate(s_wind.direction * 180 / 3.1415 * 1) / 1;
                double velocity_mph = Math.Truncate(s_wind.velocity * .681818 * 10) / 10;
                message = "Current wind velocity is " + velocity_mph + " mph. Wind direction is " + s_wind.direction + " degrees.";

                break;

            case DATA_REQUESTS.REQUEST_WX:
                Struct_wx s_wx = (Struct_wx)data.dwData[0];
                //double wind_degrees = Math.Truncate(s_wind.direction * 180 / 3.1415 * 1) / 1;
                //!wx = Weather at our current location is X winds from X degrees.The outside temperature is X and there is (precipitation)with visibility at X miles
                double velocity_wx_mph = Math.Truncate(s_wx.velocity * .681818 * 1) / 1;
                double farenheit_wx    = Math.Truncate((s_wx.temperature * 9 / 5 + 32) * 1) / 1;
                message = velocity_wx_mph + "mph at " + s_wx.direction + " degrees.";
                message = message + "The outside temperature is " + Math.Truncate(s_wx.temperature * 1) / 1 + " C,  " + farenheit_wx + " F. ";
                //message = message + "Visibility is " + s_wx.visibility + " meters. ";

                switch (s_wx.precip_state)
                {
                case 2:
                    message = message + "There is no precipitation.";
                    break;

                case 4:
                    switch (s_wx.precip_rate)
                    {
                    case 0:
                        message = message + "There is light rain.";
                        break;

                    case 1:
                        message = message + "There is light rain.";
                        break;

                    case 2:
                        message = message + "There is moderate rain.";
                        break;

                    case 3:
                        message = message + "There is heavy rain.";
                        break;

                    case 4:
                        message = message + "There is extremely heavy rain.";
                        break;
                    }
                    break;

                case 8:
                    switch (s_wx.precip_rate)
                    {
                    case 0:
                        message = message + "There is light snow.";
                        break;

                    case 1:
                        message = message + "There is light snow.";
                        break;

                    case 2:
                        message = message + "There is moderate snow.";
                        break;

                    case 3:
                        message = message + "There is heavy snow.";
                        break;

                    case 4:
                        message = message + "There is extremely heavy snow.";
                        break;
                    }
                    break;
                }
                break;

            case DATA_REQUESTS.REQUEST_1:
                Struct1 s2 = (Struct1)data.dwData[0];

                ATCBOT_View.Instance.displayText("title: " + s2.title);
                ATCBOT_View.Instance.displayText("Lat:   " + s2.latitude);
                ATCBOT_View.Instance.displayText("Lon:   " + s2.longitude);
                ATCBOT_View.Instance.displayText("Alt:   " + s2.altitude);
                break;

            default:
                ATCBOT_View.Instance.displayText("Unknown request ID: " + data.dwRequestID);

                break;
            }
            ATCBOT_View.Instance.displayText(message);
            Twitch_Controller.Instance.sendChatMessage(message);
        }
Example #12
0
        protected override void SimConnect_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
        {
            base.SimConnect_OnRecvSimobjectDataBytype(sender, data);

            //data.
        }
        private async 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.LogDebug("Get Flight status");
                    FlightStatusUpdated?.Invoke(this, new FlightStatusUpdatedEventArgs(
                                                    new FlightStatus
                        {
                            //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
                        }));
                }
                else
                {
                    // Cast failed
                    logger.LogError("Cannot cast to FlightStatusStruct!");
                }
            }
            break;
            }
        }
        /// <summary>
        /// Received data from SimConnect
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="data"></param>
        //       {3,"GENERAL ENG THROTTLE LEVER POSITION ,number" },
        //       {4,"BRAKE PARKING POSITION,Position" },
        //       {5,"AIRSPEED INDICATED,knots" },
        //       {6,"AUTOTHROTTLE ACTIVE,boolean" },
        // ---------------------------------------------------------------------
        private void Sim_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
        {
            int    iRequest = (int)data.dwRequestID;
            double dValue   = (double)data.dwData[0];

            if (iRequest == idx_ap_Master)
            {
                if (dValue > 0)
                {
                    btAutoPilot.Background = Brushes.LightGreen;
                }
                else
                {
                    btAutoPilot.Background = Brushes.LightGray;
                }
            }
            else if (iRequest == idx_approach)
            {
                if (dValue > 0)
                {
                    btApproach.Background = Brushes.LightGreen;
                    ChangeFltState(FLT_STAGE.Approach);
                }
                else
                {
                    btApproach.Background = Brushes.LightGray;
                }
            }
            else if (iRequest == idx_airSpeed)
            {
                int speed = Convert.ToInt32(dValue);
                btSpeed.Content = speed.ToString();
                if (fltStage < FLT_STAGE.TaxiBeforeTakeOff)
                {
                    if (speed > 4)
                    {
                        ChangeFltState(FLT_STAGE.TaxiBeforeTakeOff);
                    }
                }
                if (fltStage == FLT_STAGE.RunUp)
                {
                    if (!bRotateMessageSent && vRotate > 0 && speed >= (vRotate - 2))
                    {
                        bRotateMessageSent = true;
                        btSpeed.Background = Brushes.Green;
                        //.Background = Brushes.LightGreen;
                    }
                }
                if (fltStage < FLT_STAGE.TakeOff)
                {
                    if (altitudePlane > (20 + elevation))
                    {
                        ChangeFltState(FLT_STAGE.TakeOff);
                        //bTakeOff = true;
                        bTimer      = true;
                        takeOffTime = DateTime.Now.AddSeconds(-5);
                    }
                }
                if (fltStage > FLT_STAGE.TakeOff && speed < 40 && altitudePlane < (50 + elevation))
                {
                    //bLanded = true;
                    ChangeFltState(FLT_STAGE.Landed);
                    ChangeFltState(FLT_STAGE.TaxiAfterLanding);
                }
                if (fltStage == FLT_STAGE.TaxiBeforeTakeOff || fltStage == FLT_STAGE.TaxiAfterLanding)
                {
                    if (speed > 50)
                    {
                        btSpeed.Background = Brushes.LightBlue;
                        ChangeFltState(FLT_STAGE.RunUp);
                    }
                    else if (speed > 28)
                    {
                        btSpeed.Background = Brushes.Red;
                    }
                    else if (speed > 20)
                    {
                        btSpeed.Background = Brushes.LightCoral;
                    }
                    else if (speed > 2)
                    {
                        btSpeed.Background = Brushes.LightGreen;
                    }
                    else
                    {
                        btSpeed.Background = Brushes.LightGray;
                        btSpeed.Content    = "0";
                    }
                }
            }
            else if (iRequest == idx_autoThrottle)
            {
                if (dValue == 1)
                {
                    btAutoThrust.Background = Brushes.LightGreen;
                }
                else
                {
                    btAutoThrust.Background = Brushes.LightGray;
                }
            }
            else if (iRequest == idx_parkingBrake)
            {
                //lblAutoThrust.Content = dValue.ToString();
                if (dValue == 1)
                {
                    btBrake.Background = Brushes.Red;
                }
                else
                {
                    btBrake.Background = Brushes.LightGray;
                }
            }
            else if (iRequest == idx_Vr) //set Vr
            {
                if (vRotate == 0)
                {
                    SetV1Speed((int)dValue);
                }
            }
            else if (iRequest == idx_altitude)
            {
                altitudePlane       = (int)dValue;
                lblAltitude.Content = altitudePlane.ToString();
                if (!bSetElevation)
                {
                    elevation            = altitudePlane;
                    lblElevation.Content = $"{altitudePlane}";
                    bSetElevation        = true;
                }
                else if (fltStage == FLT_STAGE.TakeOff)
                {
                    if (altitudePlane > elevation + 999)
                    {
                        btSpeed.Background = Brushes.LightGreen;
                        ChangeFltState(FLT_STAGE.Climb);
                    }
                }
            }
            else if (iRequest == idx_throttlePosition)
            {
                tbPosition.Text = ((int)dValue).ToString();
            }
            else if (iRequest == idx_next_wp_alt)
            {
                lblNextWpAlt.Content = ((int)dValue).ToString();
            }
            else if (iRequest == idx_GroundAltitude)
            {
                int alt = (int)dValue;
                lblGroundAlt.Content = alt.ToString();
            }
            //       if (iRequest < 8)
            //      GetLabelForUid(iRequest).Content = dValue.ToString();
        }
Example #15
0
        /// <summary>
        /// Fully receive the simconnect data object
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="data"></param>
        void simconnect_OnRecvSimobjectDataBytype(
            SimConnect sender,
            SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
        {
            // Switch by message data types
            switch ((FsDataObjects.DATA_REQUESTS)data.dwRequestID)
            {
            case FsDataObjects.DATA_REQUESTS.REQUEST_1:
                // Receive the aircraft data
                FsDataObjects.AircraftDataStructure acData = (FsDataObjects.AircraftDataStructure)data.dwData[0];

                // Set display parameters
                lblX.Text   = String.Format("{0,0:N5} deg", acData.longitude);
                lblY.Text   = String.Format("{0,0:N5} deg", acData.latitude);
                lblAlt.Text = String.Format("{0,0:N2} ft", acData.altitude);
                lblU.Text   = String.Format("{0,0:N3} ft/s", acData.u);
                lblV.Text   = String.Format("{0,0:N3} ft/s", acData.v);
                lblW.Text   = String.Format("{0,0:N3} ft/s", -acData.w_neg);

                lblYaw.Text   = String.Format("{0,0:N3} deg", acData.yaw);
                lblPitch.Text = String.Format("{0,0:N3} deg", -acData.pitch_neg);
                lblRoll.Text  = String.Format("{0,0:N3} deg", -acData.roll_neg);
                lblP.Text     = String.Format("{0,0:N3} rad/s", -acData.p_neg);
                lblQ.Text     = String.Format("{0,0:N3} rad/s", -acData.q_neg);
                lblR.Text     = String.Format("{0,0:N3} rad/s", acData.r);

                lblMach.Text = String.Format("{0,0:N5}", acData.mach);

                lblElevator.Text = String.Format("{0,0:N3}%", ControlsLatest.elevator * 100);
                lblThrottle.Text = String.Format("{0,0:N3}%", ControlsLatest.throttle1);
                lblAileron.Text  = String.Format("{0,0:N3}%", ControlsLatest.aileron * 100);
                lblRudder.Text   = String.Format("{0,0:N3}%", ControlsLatest.rudder * 100);
                lblGear.Text     = (gear_last == 0) ? "Down" : "Up";
                lblFlaps.Text    = String.Format("{0,0:N0}% Down", (flaps_last / 2.0) * 100.0);
                lblBeta.Text     = String.Format("{0,0:N3} deg", acData.beta * 180.0 / Math.PI);

                // Get the current time
                DateTime CurrentTime = DateTime.Now;

                // Only send if the time interval since the last send has been great enough
                if ((CurrentTime - LastSendTime).Milliseconds > 100)
                {
                    // Create the UDP sending string packet
                    String udpSend   = NetworkParser.UdpStringFromAC(acData);
                    Byte[] sendBytes = Encoding.ASCII.GetBytes(udpSend);

                    // Send the packets and update the last send time
                    udpSocket.BeginSend(
                        sendBytes,
                        sendBytes.Length,
                        endpointSending,
                        null,
                        null);
                    LastSendTime = CurrentTime;
                }

                break;

            default:
                WriteToLog("Unknown request ID: " + data.dwRequestID);
                break;
            }
        }
Example #16
0
        private async void simconnect_OnRecvSimobjectDataBytypeAsync(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
        {
            // Must be general SimObject information
            switch (data.dwRequestID)
            {
            case (uint)DATA_REQUESTS.AIRCRAFT_DATA:
            {
                var aircraftData = data.dwData[0] as AircraftDataStruct?;

                if (aircraftData.HasValue)
                {
                    var dto = new AircraftData
                    {
                        Title        = aircraftData.Value.Title,
                        Type         = aircraftData.Value.AtcType,
                        Model        = aircraftData.Value.AtcModel,
                        TailNumber   = aircraftData.Value.AtcId,
                        Airline      = aircraftData.Value.AtcAirline,
                        FlightNumber = aircraftData.Value.AtcFlightNumber
                    };

                    AircraftDataUpdated?.Invoke(this, new AircraftDataUpdatedEventArgs(dto));
                }
                else
                {
                    // Cast failed
                    logger.LogError("Cannot cast to AircraftDataStruct!");
                }
            }
            break;

            case (uint)DATA_REQUESTS.FLIGHT_PLAN_STATUS:
            {
                var flightPlan = data.dwData[0] as FlightPlanStruct?;
            }
            break;

            case (uint)DATA_REQUESTS.FLIGHT_STATUS:
            {
                var flightStatus = data.dwData[0] as FlightStatusStruct?;

                if (flightStatus.HasValue)
                {
                    FlightStatusUpdated?.Invoke(this, new FlightStatusUpdatedEventArgs(
                                                    new ClientFlightStatus
                        {
                            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
                        }));
                }
                else
                {
                    // Cast failed
                    logger.LogError("Cannot cast to FlightStatusStruct!");
                }

                await Task.Delay(StatusDelayMilliseconds);

                simconnect?.RequestDataOnSimObjectType(DATA_REQUESTS.FLIGHT_STATUS, DEFINITIONS.FlightStatus, 0, SIMCONNECT_SIMOBJECT_TYPE.USER);
            }
            break;
            }
        }
Example #17
0
        void simconnect_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
        {
            switch ((DATA_REQUESTS)data.dwRequestID)
            {
                case DATA_REQUESTS.REQUEST_1:
                    Struct1 s1 = (Struct1)data.dwData[0];

                    processTitle(s1.title);
                    processLatitude(s1.latitude);
                    processLongitude(s1.longitude);
                    processAltitude(s1.altitude);
                    break;

                default:
                    // txtbxRemarks.Text += "Unknown request ID: " + data.dwRequestID;
                    break;
            }
        }
Example #18
0
        private void SimConnect_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
        {
            Console.WriteLine("SimConnect_OnRecvSimobjectDataBytype");

            SimVarsViewModel.HandleReceivedData(data);
        }
        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,
                            QNHMbar           = flightStatus.Value.QNHmbar,
                            Transponder       = flightStatus.Value.Transponder.ToString().PadLeft(4, '0'),
                            FreqencyCom1      = flightStatus.Value.Com1,
                            FreqencyCom2      = flightStatus.Value.Com2,
                            IsAvMasterOn      = flightStatus.Value.AvMasterOn == 1,
                            Nav1OBS           = flightStatus.Value.Nav1OBS,
                            Nav2OBS           = flightStatus.Value.Nav2OBS,
                            ADFCard           = flightStatus.Value.ADFCard,
                        }));
                }
                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;
            }
        }
Example #20
0
        void simconnect_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
        {
            switch ((DATA_REQUESTS)data.dwRequestID)
            {
                case DATA_REQUESTS.REQUEST_1:
                    Struct1 s1 = (Struct1)data.dwData[0];       //arrange all data from "Struct1" in a array

                    gridFlightViewer.ColumnCount = 7;           //define column number needed in the datagridview

                    //add name to each of the columns
                    gridFlightViewer.Columns[0].Name = "Flight No:";
                    gridFlightViewer.Columns[1].Name = "Aircraft ID";
                    gridFlightViewer.Columns[2].Name = "Airline";
                    gridFlightViewer.Columns[3].Name = "From Airport";
                    gridFlightViewer.Columns[4].Name = "To Airport";
                    gridFlightViewer.Columns[5].Name = "Departure Time";
                    gridFlightViewer.Columns[6].Name = "Flight Status";

                    //exclude user aircraft and its data
                    if (s1.etd !=0 && s1.eta !=0)
                    {
                        TimeSpan arr = TimeSpan.FromSeconds(s1.eta);

                        string arrs = string.Format("{0:D2}h:{1:D2}m:{2:D2}s",
                                                arr.Hours,
                                                arr.Minutes,
                                                arr.Seconds);

                        TimeSpan dept = TimeSpan.FromSeconds(s1.etd);

                        string depts = string.Format("{0:D2}h:{1:D2}m:{2:D2}s",
                                                dept.Hours,
                                                dept.Minutes,
                                                dept.Seconds);

                        //change all AI Statuses to make it understandable by the user.
                        if (s1.aicurstatus == "sleep")
                        {
                            s1.aicurstatus = "At Gate";
                        }
                        else if (s1.aicurstatus == "preflight support")
                        {
                            s1.aicurstatus = "Boarding";
                        }
                        else if (s1.aicurstatus == "Push back 1" || s1.aicurstatus == "Push back 2" || s1.aicurstatus == "clearance")
                        {
                            s1.aicurstatus = "Final Check";
                        }
                        else if (s1.aicurstatus == "pre taxi out" || s1.aicurstatus == "taxi out")
                        {
                            s1.aicurstatus = "Taxiing";
                        }
                        else if (s1.aicurstatus == "takeoff 1" || s1.aicurstatus == "takeoff 2")
                        {
                            s1.aicurstatus = "Departed";
                        }
                        else if (s1.aicurstatus == "enroute")
                        {
                            s1.aicurstatus = "Enroute";
                        }
                        else if (s1.aicurstatus == "landing")
                        {
                            s1.aicurstatus = "Landing";
                        }
                        else if (s1.aicurstatus == "go around")
                        {
                            s1.aicurstatus = "Delayed";
                        }
                        else if (s1.aicurstatus == "postflight support")
                        {
                            s1.aicurstatus="Post Flight Check";
                        }

                        //create new string and add all data in that string in a row
                        string[] row = new string[] { s1.flightnumber, s1.atcid, s1.atcairline, s1.FromAirport, s1.ToAirport, depts, s1.aicurstatus};
                        gridFlightViewer.Rows.Add(row); //adds all data to the datagridview

                    }
                    break;

                default:

                    lstSystemLog1.Items.Clear();
                    lstSystemLog1.Items.Add(DateTime.Now + "  " + "Unknown request ID: " + data.dwRequestID);
                    break;
            }
        }
Example #21
0
 void sc_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
 {
     Console.WriteLine("sc_OnRecvSystemState");
     data.Dump();
 }
Example #22
0
 void simconnect_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data)
 {
     // not used at the moment
 }