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(); } }
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
public static extern PluginTypes.Result sxCoreGetDataPrevious(uint tracked_device_index, uint history_index_back, out PluginTypes.TrackedDeviceData data);
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