Ejemplo n.º 1
0
        internal void ProcessData(PluginTypes.TrackedDeviceData data)
        {
            float scale = 0.001f;

            if (m_device != null)
            {
                scale = 1.0f / m_device.m_worldUnitScaleInMillimeters;
            }

            if (data.tracked_device_index != m_Index)
            {
                //m_Index = data.tracked_device_index;
                m_hasInfo   = false;
                m_Connected = false;
            }

            // m_Index = data.tracked_device_index;
            m_SequenceNumber    = data.sequence_number;
            m_Time              = (ulong)data.packet_time;
            m_TrackerID         = (TrackerID)data.tracker_id;
            m_batteryPercentage = data.battery_percent;
            m_gain              = data.dsp_status & 0x3;

            m_Enabled             = GetFlag(data.status, Status.ENABLED);
            m_Docked              = GetFlag(data.status, Status.DOCKED);
            m_powered             = GetFlag(data.status, Status.HAS_EXTERNAL_POWER);
            m_charging            = GetFlag(data.status, Status.BATTERY_CHARGING);
            m_batteryLow          = GetFlag(data.status, Status.BATTERY_LOW);
            m_wired               = GetFlag(data.status, Status.MODE_WIRED);
            m_HemiTrackingEnabled = GetFlag(data.status, Status.FILTER_HEMI_TRACKING_ENABLED);
            m_PowerOffButtonMode  = GetFlag(data.status, Status.POWER_OFF_BUTTON_MODE);

            m_Buttons   = (Buttons)data.buttons;
            m_Trigger   = data.trigger;
            m_JoystickX = data.joystick_x;
            m_JoystickY = data.joystick_y;

            //m_Position.Set(data.tracker_pos[0] * scale, data.tracker_pos[1] * scale, -data.tracker_pos[2] * scale);
            //m_Rotation.Set(data.tracker_rot_quat[0], data.tracker_rot_quat[1], -data.tracker_rot_quat[2], -data.tracker_rot_quat[3]);
            m_Position.Set(data.pos[0] * scale, data.pos[1] * scale, -data.pos[2] * scale);
            m_Rotation.Set(data.rot_quat[0], data.rot_quat[1], -data.rot_quat[2], -data.rot_quat[3]);

            if (data.imu_gravity[0] != 0 && data.imu_gravity[1] != 0 && data.imu_gravity[2] != 0)
            {
                m_Gravity.Set(data.imu_gravity[0], data.imu_gravity[1], -data.imu_gravity[2]);
            }

            if (!m_hasInfo)
            {
                UpdateInfo();
            }
        }
Ejemplo n.º 2
0
 public static extern PluginTypes.Result sxCoreGetDataAtTime(uint tracked_device_index, UInt64 time, out PluginTypes.TrackedDeviceData data);        // returns an interpolated position and orientation at a specified time in the past
Ejemplo n.º 3
0
 public static extern PluginTypes.Result sxCoreGetDataPrevious(uint tracked_device_index, uint history_index_back, out PluginTypes.TrackedDeviceData data);
Ejemplo n.º 4
0
 public static extern PluginTypes.Result sxCoreGetData(uint tracked_device_index, out PluginTypes.TrackedDeviceData data); // get packet data, this should be fast, and locking should only be on accessing the packet queue, not on device reading/writing/open/close