diff options
Diffstat (limited to 'LibOVR/Src/OVR_Sensor2Impl.h')
-rw-r--r-- | LibOVR/Src/OVR_Sensor2Impl.h | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/LibOVR/Src/OVR_Sensor2Impl.h b/LibOVR/Src/OVR_Sensor2Impl.h new file mode 100644 index 0000000..4555eed --- /dev/null +++ b/LibOVR/Src/OVR_Sensor2Impl.h @@ -0,0 +1,153 @@ +/************************************************************************************ + +Filename : OVR_Sensor2Impl.h +Content : DK2 sensor device specific implementation. +Created : January 21, 2013 +Authors : Lee Cooper + +Copyright : Copyright 2014 Oculus VR, Inc. All Rights reserved. + +Licensed under the Oculus VR Rift SDK License Version 3.1 (the "License"); +you may not use the Oculus VR Rift SDK except in compliance with the License, +which is provided at the time of installation or download, or which +otherwise accompanies this software in either electronic or hard copy form. + +You may obtain a copy of the License at + +http://www.oculusvr.com/licenses/LICENSE-3.1 + +Unless required by applicable law or agreed to in writing, the Oculus VR SDK +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +*************************************************************************************/ + +#ifndef OVR_Sensor2Impl_h +#define OVR_Sensor2Impl_h + +#include "OVR_SensorImpl.h" +#include "OVR_SensorCalibration.h" + +namespace OVR { + +struct Tracker2Message; + +//------------------------------------------------------------------------------------- +// Used to convert DK2 Mks timestamps to system TimeSeconds +struct SensorTimestampMapping +{ + UInt64 TimestampMks; + double TimeSeconds; + const char* DebugTag; + + SensorTimestampMapping(const char* debugTag) + : TimestampMks(0), TimeSeconds(0.0), DebugTag(debugTag) { } +}; + +//------------------------------------------------------------------------------------- +// ***** OVR::Sensor2DeviceImpl + +// Oculus Sensor2 interface. +class Sensor2DeviceImpl : public SensorDeviceImpl +{ +public: + Sensor2DeviceImpl(SensorDeviceCreateDesc* createDesc); + ~Sensor2DeviceImpl(); + + // HIDDevice::Notifier interface. + virtual void OnInputReport(UByte* pData, UInt32 length); + virtual double OnTicks(double tickSeconds); + + // Get/set feature reports added for DK2. See 'DK2 Firmware Specification' document details. + virtual bool SetTrackingReport(const TrackingReport& data); + virtual bool GetTrackingReport(TrackingReport* data); + + virtual bool SetDisplayReport(const DisplayReport& data); + virtual bool GetDisplayReport(DisplayReport* data); + + virtual bool SetMagCalibrationReport(const MagCalibrationReport& data); + virtual bool GetMagCalibrationReport(MagCalibrationReport* data); + + virtual bool SetPositionCalibrationReport(const PositionCalibrationReport& data); + virtual bool GetAllPositionCalibrationReports(Array<PositionCalibrationReport>* data); + + virtual bool SetCustomPatternReport(const CustomPatternReport& data); + virtual bool GetCustomPatternReport(CustomPatternReport* data); + + virtual bool SetKeepAliveMuxReport(const KeepAliveMuxReport& data); + virtual bool GetKeepAliveMuxReport(KeepAliveMuxReport* data); + + virtual bool SetManufacturingReport(const ManufacturingReport& data); + virtual bool GetManufacturingReport(ManufacturingReport* data); + + virtual bool SetUUIDReport(const UUIDReport& data); + virtual bool GetUUIDReport(UUIDReport* data); + + virtual bool SetTemperatureReport(const TemperatureReport& data); + virtual bool GetAllTemperatureReports(Array<Array<TemperatureReport> >*); + + virtual bool GetGyroOffsetReport(GyroOffsetReport* data); + + virtual bool SetLensDistortionReport(const LensDistortionReport& data); + virtual bool GetLensDistortionReport(LensDistortionReport* data); + +protected: + virtual void openDevice(); + + bool decodeTracker2Message(Tracker2Message* message, UByte* buffer, int size); + + bool setTrackingReport(const TrackingReport& data); + bool getTrackingReport(TrackingReport* data); + + bool setDisplayReport(const DisplayReport& data); + bool getDisplayReport(DisplayReport* data); + + bool setMagCalibrationReport(const MagCalibrationReport& data); + bool getMagCalibrationReport(MagCalibrationReport* data); + + bool setPositionCalibrationReport(const PositionCalibrationReport& data); + bool getPositionCalibrationReport(PositionCalibrationReport* data); + bool getAllPositionCalibrationReports(Array<PositionCalibrationReport>* data); + + bool setCustomPatternReport(const CustomPatternReport& data); + bool getCustomPatternReport(CustomPatternReport* data); + + bool setKeepAliveMuxReport(const KeepAliveMuxReport& data); + bool getKeepAliveMuxReport(KeepAliveMuxReport* data); + + bool setManufacturingReport(const ManufacturingReport& data); + bool getManufacturingReport(ManufacturingReport* data); + + bool setUUIDReport(const UUIDReport& data); + bool getUUIDReport(UUIDReport* data); + + bool setTemperatureReport(const TemperatureReport& data); + bool getTemperatureReport(TemperatureReport* data); + bool getAllTemperatureReports(Array<Array<TemperatureReport> >*); + + bool getGyroOffsetReport(GyroOffsetReport* data); + + bool setLensDistortionReport(const LensDistortionReport& data); + bool getLensDistortionReport(LensDistortionReport* data); + + // Called for decoded messages + void onTrackerMessage(Tracker2Message* message); + + UByte LastNumSamples; + UInt16 LastRunningSampleCount; + UInt32 FullCameraFrameCount; + + SensorTimestampMapping LastCameraTime; + SensorTimestampMapping LastFrameTime; + SensorTimestampMapping LastSensorTime; + // Record last frame timestamp to know when to send pixelRead messages. + UInt32 LastFrameTimestamp; + + SensorCalibration *pCalibration; +}; + +} // namespace OVR + +#endif // OVR_Sensor2Impl_h |