using Microsoft.Phone.Controls;
using System.Windows;

// benoetigter Namespace fuer den Zugriff auf den Beschleunigungssensor
using Microsoft.Devices.Sensors;

namespace Accelerometer
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Referenz zur Accelerometer Klasse
        private Microsoft.Devices.Sensors.Accelerometer myAccelerometer;

        // Hauptkonstruktor
        public MainPage()
        {
            InitializeComponent();
        }

        // Methode, die die Informationen des Beschleunigungssensors in die Steuerelemente übertraegt
        private void MyReadingChanged(AccelerometerReadingEventArgs e)        
        {
            // vor dem Zugriff pruefen, ob Sensor initialisiert wurde
            if (myAccelerometer != null)
            {
                // Status des Sensors auslesen und anzeigen
                tbxSensorState.Text = myAccelerometer.State.ToString();
                // Zeitstempel des Sensors auslesen und anzeigen
                tbxTimeStamp.Text = e.Timestamp.LocalDateTime.ToString();
                // Werte der verschiedenen Achsen auslesen und anzeigen
                tbxX.Text = e.X.ToString();
                tbxY.Text = e.Y.ToString();
                tbxZ.Text = e.Z.ToString();
            }
        }

        // Ereignismethode vom ReadingChanged Ereignisses des Beschleunigungssensors
        void myAccelerometer_ReadingChanged(object sender, AccelerometerReadingEventArgs e)
        {
            // Aufruf der eigenen Verarbeitungsmethode, da der Thread des Event Handlers von einem anderen Thread aufgerufen wird, als der,
            // welcher für die ApplicationPage zuständig ist
            Deployment.Current.Dispatcher.BeginInvoke(() => MyReadingChanged(e));
        }

        // Ereignismethode, die durch Betaetigen der Schaltflaeche ausgeloest wird
        private void btnSensor_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            // pruefen, ob Sensor initialisiert wurde
            if(myAccelerometer == null)
            {
                // Sensor initialisieren
                myAccelerometer = new Microsoft.Devices.Sensors.Accelerometer();
                // Sensorereignis anheangen
                myAccelerometer.ReadingChanged += new System.EventHandler<AccelerometerReadingEventArgs>(myAccelerometer_ReadingChanged);
                // Sensormessung starten
                myAccelerometer.Start();
                btnSensor.Content = "Sensor stoppen";
            }
            else
            {
                // Sensormessung stoppen
                myAccelerometer.Stop();
                // verwendete Resourcen und Referenz wieder freigeben, um keine unnötige Akkuenergie zu verbrauchens
                myAccelerometer.Dispose();
                myAccelerometer = null;
                btnSensor.Content = "Sensor starten";
            }
        }
    }
}