public static IMU_Display_Monitor getIMU_Display_Monitor()
 {
     if (imu_Display_Monitor == null || imu_Display_Monitor.IsDisposed)
     {
         imu_Display_Monitor = new IMU_Display_Monitor();
         return(imu_Display_Monitor);
     }
     return(imu_Display_Monitor);
 }
예제 #2
0
            // Non-static method
            public void sensorEventThread()
            {
                try
                {
                    while (true)
                    {
                        ZenEvent zenEvent = new ZenEvent();
                        //Console.WriteLine(mZenHandle);
                        if (OpenZen.ZenWaitForNextEvent(mZenHandle, zenEvent))
                        {
                            if (zenEvent.component.handle == 0)
                            {
                                // if the handle is on, its not a sensor event but a system wide
                                // event
                                switch (zenEvent.eventType)
                                {
                                case (int)ZenSensorEvent.ZenSensorEvent_SensorFound:
                                    Console.WriteLine("found sensor event event " + zenEvent.data.sensorFound.name);
                                    mFoundSensors.Add(zenEvent.data.sensorFound);
                                    break;

                                case (int)ZenSensorEvent.ZenSensorEvent_SensorListingProgress:
                                    if (zenEvent.data.sensorListingProgress.progress == 1.0)
                                    {
                                        mSearchDone = true;
                                    }
                                    break;
                                }
                            }
                            else
                            {
                                switch (zenEvent.eventType)
                                {
                                case (int)ZenImuEvent.ZenImuEvent_Sample:
                                    mImuEventCount++;

                                    if (mImuEventCount % 100 == 0)
                                    {
                                        continue;
                                    }
                                    // read acceleration
                                    OpenZenFloatArray fa = OpenZenFloatArray.frompointer(zenEvent.data.imuData.a);
                                    // read euler angles
                                    OpenZenFloatArray fg = OpenZenFloatArray.frompointer(zenEvent.data.imuData.g);
                                    // read quaternion
                                    OpenZenFloatArray fb = OpenZenFloatArray.frompointer(zenEvent.data.imuData.b);

                                    // Output Data
                                    IMU_Display_Monitor imu = FormProvider.getIMU_Display_Monitor();

                                    // Accelerometer
                                    imu.acx = fa.getitem(0);
                                    imu.acy = fa.getitem(1);
                                    imu.acz = fa.getitem(2);

                                    // Gyroscope
                                    imu.gyx = fg.getitem(0);
                                    imu.gyy = fg.getitem(1);
                                    imu.gyz = fg.getitem(2);

                                    // Magnetometer
                                    imu.mgx = fb.getitem(0);
                                    imu.mgy = fb.getitem(1);
                                    imu.mgz = fb.getitem(2);

                                    break;
                                }
                            }
                        }
                    }
                }
                catch (ThreadAbortException)
                {
                }
            }