Esempio n. 1
0
 public CompassImpl()
 {
     this.syncLock      = new object();
     this.sensorManager = (SensorManager)Application.Context.GetSystemService(Context.SensorService);
     this.readOb        = Observable.Create <CompassReading>(ob =>
     {
         var accelMgr = new ShinySensorManager(this.sensorManager);
         var magMgr   = new ShinySensorManager(this.sensorManager);
         accelMgr.Start(SensorType.Accelerometer, SensorDelay.Fastest, e =>
         {
             lock (this.syncLock)
             {
                 this.lastAccel = e; //.Values.ToArray();
                 this.Calc(ob);
             }
         });
         magMgr.Start(SensorType.MagneticField, SensorDelay.Fastest, e =>
         {
             lock (this.syncLock)
             {
                 this.lastMag = e; //.Values.ToArray();
                 this.Calc(ob);
             }
         });
         return(() =>
         {
             accelMgr.Stop();
             magMgr.Stop();
         });
     })
                          .Publish()
                          .RefCount();
 }
Esempio n. 2
0
        public IObservable <T> WhenReadingTaken()
        {
            this.readOb = this.readOb ?? Observable.Create <T>(ob =>
            {
                var mgr = new ShinySensorManager(this.sensorManager);
                //var delay = this.ToSensorDelay(this.ReportInterval);

                mgr.Start(this.type, SensorDelay.Fastest, e =>
                {
                    var reading = this.ToReading(e);
                    ob.OnNext(reading);
                });
                return(() => mgr.Stop());
            })
                          .Publish()
                          .RefCount();

            return(this.readOb);
        }
        protected AbstractSensor(SensorType type)
        {
            this.type          = type;
            this.sensorManager = (SensorManager)Application.Context.GetSystemService(Context.SensorService);
            this.IsAvailable   = this.sensorManager.GetSensorList(type).Any();

            this.readOb = Observable.Create <T>(ob =>
            {
                var mgr = new ShinySensorManager(this.sensorManager);
                //var delay = this.ToSensorDelay(this.ReportInterval);

                mgr.Start(this.type, SensorDelay.Fastest, e =>
                {
                    var reading = this.ToReading(e);
                    ob.OnNext(reading);
                });
                return(() => mgr.Stop());
            })
                          .Publish()
                          .RefCount();
        }
Esempio n. 4
0
        public IObservable <CompassReading> WhenReadingTaken()
        {
            if (!this.IsAvailable)
            {
                return(Observable.Empty <CompassReading>());
            }

            this.readOb = this.readOb ?? Observable.Create <CompassReading>(ob =>
            {
                var accelMgr = new ShinySensorManager(this.sensorManager);
                var magMgr   = new ShinySensorManager(this.sensorManager);
                accelMgr.Start(SensorType.Accelerometer, SensorDelay.Fastest, e =>
                {
                    lock (this.syncLock)
                    {
                        this.lastAccel = e.Values.ToArray();
                        this.Calc(ob);
                    }
                });
                magMgr.Start(SensorType.MagneticField, SensorDelay.Fastest, e =>
                {
                    lock (this.syncLock)
                    {
                        this.lastMag = e.Values.ToArray();
                        this.Calc(ob);
                    }
                });
                return(() =>
                {
                    accelMgr.Stop();
                    magMgr.Stop();
                });
            })
                          .Publish()
                          .RefCount();

            return(this.readOb);
        }