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; } }
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 = ""; } }
/* * 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))); }
/// <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(); } } }
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)}"); }
void simconnect_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data) { // not used at the moment }
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; } }
/// <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); }
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(); }
/// <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; } }
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; } }
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; } }
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; } }
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; } }
void sc_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data) { Console.WriteLine("sc_OnRecvSystemState"); data.Dump(); }
void simconnect_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data) { // not used at the moment }