nuclear@1: /************************************************************************************ nuclear@1: nuclear@1: Filename : OVR_OSX_HMDDevice.h nuclear@1: Content : OSX HMDDevice implementation nuclear@1: Created : September 21, 2012 nuclear@1: Authors : Michael Antonov nuclear@1: nuclear@1: Copyright : Copyright 2012 Oculus VR, Inc. All Rights reserved. nuclear@1: nuclear@1: Use of this software is subject to the terms of the Oculus license nuclear@1: agreement provided at the time of installation or download, or which nuclear@1: otherwise accompanies this software in either electronic or hard copy form. nuclear@1: nuclear@1: *************************************************************************************/ nuclear@1: nuclear@1: #ifndef OVR_OSX_HMDDevice_h nuclear@1: #define OVR_OSX_HMDDevice_h nuclear@1: nuclear@1: #include "OVR_DeviceImpl.h" nuclear@1: #include nuclear@1: #include "OVR_Profile.h" nuclear@1: nuclear@1: namespace OVR { namespace OSX { nuclear@1: nuclear@1: class HMDDevice; nuclear@1: nuclear@1: nuclear@1: //------------------------------------------------------------------------------------- nuclear@1: nuclear@1: // HMDDeviceFactory enumerates attached Oculus HMD devices. nuclear@1: // nuclear@1: // This is currently done by matching monitor device strings. nuclear@1: nuclear@1: class HMDDeviceFactory : public DeviceFactory nuclear@1: { nuclear@1: public: nuclear@1: static HMDDeviceFactory Instance; nuclear@1: nuclear@1: // Enumerates devices, creating and destroying relevant objects in manager. nuclear@1: virtual void EnumerateDevices(EnumerateVisitor& visitor); nuclear@1: nuclear@1: protected: nuclear@1: DeviceManager* getManager() const { return (DeviceManager*) pManager; } nuclear@1: }; nuclear@1: nuclear@1: nuclear@1: class HMDDeviceCreateDesc : public DeviceCreateDesc nuclear@1: { nuclear@1: friend class HMDDevice; nuclear@1: nuclear@1: protected: nuclear@1: enum nuclear@1: { nuclear@1: Contents_Screen = 1, nuclear@1: Contents_Distortion = 2, nuclear@1: Contents_7Inch = 4, nuclear@1: }; nuclear@1: nuclear@1: public: nuclear@1: nuclear@1: HMDDeviceCreateDesc(DeviceFactory* factory, nuclear@1: UInt32 vendor, UInt32 product, const String& displayDeviceName, long dispId); nuclear@1: HMDDeviceCreateDesc(const HMDDeviceCreateDesc& other); nuclear@1: nuclear@1: virtual DeviceCreateDesc* Clone() const nuclear@1: { nuclear@1: return new HMDDeviceCreateDesc(*this); nuclear@1: } nuclear@1: nuclear@1: virtual DeviceBase* NewDeviceInstance(); nuclear@1: nuclear@1: virtual MatchResult MatchDevice(const DeviceCreateDesc& other, nuclear@1: DeviceCreateDesc**) const; nuclear@1: nuclear@1: virtual bool UpdateMatchedCandidate(const DeviceCreateDesc&, bool* newDeviceFlag = NULL); nuclear@1: nuclear@1: virtual bool GetDeviceInfo(DeviceInfo* info) const; nuclear@1: nuclear@1: // Requests the currently used default profile. This profile affects the nuclear@1: // settings reported by HMDInfo. nuclear@1: Profile* GetProfileAddRef() const; nuclear@1: nuclear@1: ProfileType GetProfileType() const nuclear@1: { nuclear@1: return (HResolution >= 1920) ? Profile_RiftDKHD : Profile_RiftDK1; nuclear@1: } nuclear@1: nuclear@1: void SetScreenParameters(int x, int y, unsigned hres, unsigned vres, float hsize, float vsize) nuclear@1: { nuclear@1: DesktopX = x; nuclear@1: DesktopY = y; nuclear@1: HResolution = hres; nuclear@1: VResolution = vres; nuclear@1: HScreenSize = hsize; nuclear@1: VScreenSize = vsize; nuclear@1: Contents |= Contents_Screen; nuclear@1: } nuclear@1: nuclear@1: void SetDistortion(const float* dks) nuclear@1: { nuclear@1: for (int i = 0; i < 4; i++) nuclear@1: DistortionK[i] = dks[i]; nuclear@1: Contents |= Contents_Distortion; nuclear@1: } nuclear@1: nuclear@1: void Set7Inch() { Contents |= Contents_7Inch; } nuclear@1: nuclear@1: bool Is7Inch() const; nuclear@1: nuclear@1: protected: nuclear@1: String DeviceId; nuclear@1: String DisplayDeviceName; nuclear@1: int DesktopX, DesktopY; nuclear@1: unsigned Contents; nuclear@1: unsigned HResolution, VResolution; nuclear@1: float HScreenSize, VScreenSize; nuclear@1: long DisplayId; nuclear@1: float DistortionK[4]; nuclear@1: }; nuclear@1: nuclear@1: nuclear@1: //------------------------------------------------------------------------------------- nuclear@1: nuclear@1: // HMDDevice represents an Oculus HMD device unit. An instance of this class nuclear@1: // is typically created from the DeviceManager. nuclear@1: // After HMD device is created, we its sensor data can be obtained by nuclear@1: // first creating a Sensor object and then wrappig it in SensorFusion. nuclear@1: nuclear@1: class HMDDevice : public DeviceImpl nuclear@1: { nuclear@1: public: nuclear@1: HMDDevice(HMDDeviceCreateDesc* createDesc); nuclear@1: ~HMDDevice(); nuclear@1: nuclear@1: virtual bool Initialize(DeviceBase* parent); nuclear@1: virtual void Shutdown(); nuclear@1: nuclear@1: nuclear@1: // Requests the currently used default profile. This profile affects the nuclear@1: // settings reported by HMDInfo. nuclear@1: virtual Profile* GetProfile() const; nuclear@1: virtual const char* GetProfileName() const; nuclear@1: virtual bool SetProfileName(const char* name); nuclear@1: nuclear@1: // Query associated sensor. nuclear@1: virtual OVR::SensorDevice* GetSensor(); nuclear@1: nuclear@1: protected: nuclear@1: HMDDeviceCreateDesc* getDesc() const { return (HMDDeviceCreateDesc*)pCreateDesc.GetPtr(); } nuclear@1: nuclear@1: // User name for the profile used with this device. nuclear@1: String ProfileName; nuclear@1: mutable Ptr pCachedProfile; nuclear@1: }; nuclear@1: nuclear@1: nuclear@1: }} // namespace OVR::OSX nuclear@1: nuclear@1: #endif // OVR_OSX_HMDDevice_h nuclear@1: