| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- using YJMPD_UWP.Helpers;
- using System;
- using Windows.Devices.Sensors;
- namespace YJMPD_UWP.Model
- {
- public class CompassTracker
- {
- public delegate void OnHeadingUpdateHandler(object sender, HeadingUpdatedEventArgs e);
- public event OnHeadingUpdateHandler OnHeadingUpdate;
- public delegate void OnHeadingUpdateSlowHandler(object sender, HeadingUpdatedEventArgs e);
- public event OnHeadingUpdateSlowHandler OnSlowHeadingUpdated;
- private Compass comp;
- private CompassReading hdn;
- public CompassReading Heading { get { return hdn; } }
- private CompassReading lastreading;
- private double lastreadingtime;
- public CompassTracker()
- {
- comp = Compass.GetDefault();
- // Assign an event handler for the compass reading-changed event
- if (comp != null)
- {
- // Establish the report interval for all scenarios
- uint minReportInterval = comp.MinimumReportInterval;
- uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
- comp.ReportInterval = reportInterval;
- comp.ReadingChanged += Comp_ReadingChanged;
- hdn = comp.GetCurrentReading();
- }
- }
- private void Comp_ReadingChanged(Compass sender, CompassReadingChangedEventArgs args)
- {
- UpdateHeading(args.Reading);
- UpdateSlowHeading(args.Reading);
- }
- private void UpdateHeading(CompassReading r)
- {
- hdn = r;
- //Make sure someone is listening
- if (OnHeadingUpdate == null) return;
- OnHeadingUpdate(this, new HeadingUpdatedEventArgs(r));
- }
- private void UpdateSlowHeading(CompassReading r)
- {
- if (lastreading == null) { lastreading = r; lastreadingtime = Util.Now; }
- if (Math.Abs(r.HeadingMagneticNorth - lastreading.HeadingMagneticNorth) > 10 && Util.Now - lastreadingtime > 25)
- {
- lastreading = r;
- lastreadingtime = Util.Now;
- //Make sure someone is listening
- if (OnSlowHeadingUpdated == null) return;
- OnSlowHeadingUpdated(this, new HeadingUpdatedEventArgs(r));
- }
- }
- }
- public class HeadingUpdatedEventArgs : EventArgs
- {
- public CompassReading Heading;
- public HeadingUpdatedEventArgs(CompassReading heading)
- {
- Heading = heading;
- }
- }
- }
|