private void TimerCallback(object state) { RTIMUData data = thread.GetIMUData; var task = this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { TextGyro.Text = string.Format("Gyro (radians/sec):: x: {0:F4}, y: {1:F4}, z: {2:F4}", data.gyro.X, data.gyro.Y, data.gyro.Z); TextAccel.Text = string.Format("Accel (g):: x: {0:F4}, y: {1:F4}, z: {2:F4}", data.accel.X, data.accel.Y, data.accel.Z); TextMag.Text = string.Format("Mag (uT):: x: {0:F4}, y: {1:F4}, z: {2:F4}", data.mag.X, data.mag.Y, data.mag.Z); TextPose.Text = RTMath.DisplayDegrees("Pose:", data.fusionPose); TextQPose.Text = RTMath.Display("QPose:", data.fusionQPose); BiasTextStatus.Text = string.Format("Gyro bias:: {0}, Mag cal: {1}", thread.GyroBiasValid ? "valid" : "invalid", thread.MagCalValid ? "valid" : "invalid"); TextPressure.Text = string.Format("Pressure (hPa):: {0:F4}", data.pressure); TextHumidity.Text = string.Format("Humidity (%RH):: {0:F4}", data.humidity); TextTemperature.Text = string.Format("Temperature (degC):: {0:F4}", data.temperature); if (thread.IMUInitComplete) { TextRate.Text = string.Format("Rate: {0} samples per second", thread.SampleRate); } IMUTextStatus.Text = "IMU status:: " + thread.IMUErrorMessage; PressureTextStatus.Text = "Pressure status:: " + thread.PressureErrorMessage; HumidityTextStatus.Text = "Humidity status:: " + thread.HumidityErrorMessage; }); }
public RTIMUThread() { mImu.IMUInit(); mPressure.PressureInit(); mHumidity.HumidityInit(); mStartTime = System.DateTime.Now.Ticks; Task.Run(() => { while (true) { Task.Delay(2); if (mImu.InitComplete) { RTIMUData data; while (mImu.IMURead(out data)) { mSampleCount++; // collect all of the data mFusion.NewIMUData(ref data); mHumidity.HumidityRead(ref data); mPressure.PressureRead(ref data); // data is now ready for procesing - just pass to display in this case lock (this) { mImuData = data; } } } if ((System.DateTime.Now.Ticks - mStartTime) >= 10000000) { mStartTime = System.DateTime.Now.Ticks; mSampleRate = mSampleCount; mSampleCount = 0; } } }); }
public static extern void RTIMU_getData(IntPtr imuHandle, out RTIMUData data);