public void captureTrackPoint(PlaneInfoResponse _planeInfoResponse, PlaneAvionicsResponse _planeAvionicsResponse, double absoluteTime, double baseInterval = 0.5) { double trackCaptureInterval = Math.Abs(_planeInfoResponse.AirspeedIndicated) > baseInterval? Math.Max(baseInterval, Math.Abs(_planeInfoResponse.AirspeedIndicated) / 30 - 1) : baseInterval * 5; if (absoluteTime - lastTrackCapture >= trackCaptureInterval) { lastTrackCapture = absoluteTime; trackRecording.Add(new TrackPoint(new GeoLocation(_planeInfoResponse.Latitude, _planeInfoResponse.Longitude), _planeInfoResponse.Altitude, (int)_planeInfoResponse.AltitudeAboveGround, _planeInfoResponse.VelocityBodyZ, _planeInfoResponse.AirspeedIndicated, normalizeAngle(_planeInfoResponse.PlaneHeading), normalizeAngle(_planeInfoResponse.PlanePitch), normalizeAngle(_planeInfoResponse.PlaneBank), packLights(_planeAvionicsResponse), packAvionics(_planeAvionicsResponse), DateTime.UtcNow, recordingCounter)); Console.WriteLine("Track capture: " + recordingCounter); } }
public int packLights(PlaneAvionicsResponse _planeAvionicsResponse) { bool[] myBools = new bool[] { _planeAvionicsResponse.LIGHTBEACON == 100, _planeAvionicsResponse.LIGHTCABIN == 100, _planeAvionicsResponse.LIGHTGLARESHIELD == 100, _planeAvionicsResponse.LIGHTLANDING == 100, _planeAvionicsResponse.LIGHTLOGO == 100, _planeAvionicsResponse.LIGHTNAV == 100, _planeAvionicsResponse.LIGHTPANEL == 100, _planeAvionicsResponse.LIGHTPEDESTRAL == 100, _planeAvionicsResponse.LIGHTPOTENTIOMETER == 100, _planeAvionicsResponse.LIGHTRECOGNITION == 100, _planeAvionicsResponse.LIGHTSTROBE == 100, _planeAvionicsResponse.LIGHTTAXI == 100, _planeAvionicsResponse.LIGHTWING == 100, }; byte[] byteArray = myBools.Select(b => (byte)(b ? 1 : 0)).ToArray(); int lights = BitConverter.ToInt32(byteArray, 0); return(lights); }
public KeyValuePair <double, string> buildTrackFile(string appName, string nickName, PlaneInfoResponse _planeInfoResponse, PlaneAvionicsResponse _planeAvionicsResponse, MathClass _mathClass, string filename, bool timeAligned = false) { string str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><gpx creator=\"" + appName + "\" version=\"1.0\"><trk><name>" + _planeAvionicsResponse.Title + " - " + nickName + "</name><desc></desc><trkseg>"; TrackPoint prev = new TrackPoint(new GeoLocation(0, 0), 0, 0, 0, 0, 0, 0, 0, 0, 0, DateTime.Now, 0); double distance = 0; foreach (TrackPoint trackPoint in trackRecording) { if (prev.Elevation != 0) { double flatDistance = _mathClass.findDistanceBetweenPoints(prev.Location.Latitude, prev.Location.Longitude, trackPoint.Location.Latitude, trackPoint.Location.Longitude); distance += flatDistance / Math.Cos((prev.Elevation - trackPoint.Elevation) / flatDistance); } DateTime timestamp = !timeAligned ? trackPoint.Time : (new DateTime(2000, 1, 1)).AddSeconds(trackPoint.Timer); str += Environment.NewLine + "<trkpt lon=\"" + (trackPoint.Location.Longitude * 180 / Math.PI).ToString(CultureInfo.InvariantCulture) + "\" lat=\"" + (trackPoint.Location.Latitude * 180 / Math.PI).ToString(CultureInfo.InvariantCulture) + "\">" + Environment.NewLine + " <ele>" + trackPoint.Elevation.ToString(CultureInfo.InvariantCulture) + "</ele>" + Environment.NewLine + " <agl>" + trackPoint.AltitudeAboveGround.ToString() + "</agl>" + Environment.NewLine + " <velocity>" + trackPoint.Velocity.ToString(CultureInfo.InvariantCulture) + "</velocity>" + Environment.NewLine + " <airspeed>" + trackPoint.Airspeed.ToString(CultureInfo.InvariantCulture) + "</airspeed>" + Environment.NewLine + " <heading>" + trackPoint.Heading + "</heading>" + Environment.NewLine + " <pitch>" + trackPoint.Pitch + "</pitch>" + Environment.NewLine + " <roll>" + trackPoint.Roll + "</roll>" + Environment.NewLine + " <lights>" + trackPoint.Lights.ToString() + "</lights>" + Environment.NewLine + " <avionics>" + trackPoint.Avionics.ToString() + "</avionics>" + Environment.NewLine + " <time>" + timestamp.ToString("O") + "Z" + "</time>" + Environment.NewLine + "</trkpt>"; prev = trackPoint; } str += "</trkseg></trk></gpx>"; if (trackRecording.Count <= 1) { //addLogMessage("Track data damaged!", 2); } return(new KeyValuePair <double, string>(distance, str)); }
public int packAvionics(PlaneAvionicsResponse _planeAvionicsResponse) { return(0); }