nuclear@0: /************************************************************************************ nuclear@0: nuclear@0: Filename : Service_NetClient.h nuclear@0: Content : Client for service interface nuclear@0: Created : June 12, 2014 nuclear@0: Authors : Michael Antonov, Kevin Jenkins, Chris Taylor nuclear@0: nuclear@0: Copyright : Copyright 2014 Oculus VR, LLC All Rights reserved. nuclear@0: nuclear@0: Licensed under the Oculus VR Rift SDK License Version 3.2 (the "License"); nuclear@0: you may not use the Oculus VR Rift SDK except in compliance with the License, nuclear@0: which is provided at the time of installation or download, or which nuclear@0: otherwise accompanies this software in either electronic or hard copy form. nuclear@0: nuclear@0: You may obtain a copy of the License at nuclear@0: nuclear@0: http://www.oculusvr.com/licenses/LICENSE-3.2 nuclear@0: nuclear@0: Unless required by applicable law or agreed to in writing, the Oculus VR SDK nuclear@0: distributed under the License is distributed on an "AS IS" BASIS, nuclear@0: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. nuclear@0: See the License for the specific language governing permissions and nuclear@0: limitations under the License. nuclear@0: nuclear@0: ************************************************************************************/ nuclear@0: nuclear@0: #ifndef OVR_Service_NetClient_h nuclear@0: #define OVR_Service_NetClient_h nuclear@0: nuclear@0: #include "../Net/OVR_NetworkTypes.h" nuclear@0: #include "Service_NetSessionCommon.h" nuclear@0: #include "../Kernel/OVR_System.h" nuclear@0: #include "../OVR_CAPI.h" nuclear@0: #include "../Util/Util_Render_Stereo.h" nuclear@0: nuclear@0: namespace OVR { namespace Service { nuclear@0: nuclear@0: using namespace OVR::Net; nuclear@0: nuclear@0: nuclear@0: //------------------------------------------------------------------------------------- nuclear@0: // NetClient nuclear@0: nuclear@0: class NetClient : public NetSessionCommon, nuclear@0: public Net::Plugins::NetworkPlugin, nuclear@0: public SystemSingletonBase nuclear@0: { nuclear@0: OVR_DECLARE_SINGLETON(NetClient); nuclear@0: virtual void OnThreadDestroy(); nuclear@0: nuclear@0: // Status nuclear@0: bool LatencyTesterAvailable; nuclear@0: int HMDCount; nuclear@0: bool EdgeTriggeredHMDCount; nuclear@0: nuclear@0: virtual void OnReceive(Net::ReceivePayload* pPayload, Net::ListenerReceiveResult* lrrOut); nuclear@0: virtual void OnDisconnected(Net::Connection* conn); nuclear@0: virtual void OnConnected(Net::Connection* conn); nuclear@0: nuclear@0: virtual int Run(); nuclear@0: nuclear@0: public: nuclear@0: bool Connect(bool blocking); nuclear@0: bool IsConnected(bool attemptReconnect, bool blockOnReconnect); nuclear@0: void Disconnect(); nuclear@0: nuclear@0: void GetLocalProtocolVersion(int& major, int& minor, int& patch); nuclear@0: // This function may fail if it is not connected nuclear@0: bool GetRemoteProtocolVersion(int& major, int& minor, int& patch); nuclear@0: nuclear@0: void SetLastError(String str); nuclear@0: nuclear@0: public: nuclear@0: // Persistent key-value storage nuclear@0: const char* GetStringValue(VirtualHmdId hmd, const char* key, const char* default_val); nuclear@0: bool GetBoolValue(VirtualHmdId hmd, const char* key, bool default_val); nuclear@0: int GetIntValue(VirtualHmdId hmd, const char* key, int default_val); nuclear@0: double GetNumberValue(VirtualHmdId hmd, const char* key, double default_val); nuclear@0: int GetNumberValues(VirtualHmdId hmd, const char* key, double* values, int num_vals); nuclear@0: nuclear@0: bool SetStringValue(VirtualHmdId hmd, const char* key, const char* val); nuclear@0: bool SetBoolValue(VirtualHmdId hmd, const char* key, bool val); nuclear@0: bool SetIntValue(VirtualHmdId hmd, const char* key, int val); nuclear@0: bool SetNumberValue(VirtualHmdId hmd, const char* key, double val); nuclear@0: bool SetNumberValues(VirtualHmdId hmd, const char* key, const double* vals, int num_vals); nuclear@0: nuclear@0: bool GetDriverMode(bool& driverInstalled, bool& compatMode, bool& hideDK1Mode); nuclear@0: bool SetDriverMode(bool compatMode, bool hideDK1Mode); nuclear@0: nuclear@0: int Hmd_Detect(); nuclear@0: bool Hmd_Create(int index, HMDNetworkInfo* netInfo); nuclear@0: void Hmd_Release(VirtualHmdId hmd); nuclear@0: nuclear@0: // Last string is cached locally. nuclear@0: const char* Hmd_GetLastError(VirtualHmdId hmd); nuclear@0: nuclear@0: // TBD: Replace with a function to return internal, original HMDInfo? nuclear@0: nuclear@0: // Fills in description about HMD; this is the same as filled in by ovrHmd_Create. nuclear@0: // The actual descriptor is a par nuclear@0: bool Hmd_GetHmdInfo(VirtualHmdId hmd, HMDInfo* hmdInfo); nuclear@0: nuclear@0: //------------------------------------------------------------------------------------- nuclear@0: unsigned int Hmd_GetEnabledCaps(VirtualHmdId hmd); nuclear@0: // Returns new caps after modification nuclear@0: unsigned int Hmd_SetEnabledCaps(VirtualHmdId hmd, unsigned int hmdCaps); nuclear@0: nuclear@0: // Updates driver render target nuclear@0: bool Hmd_AttachToWindow(VirtualHmdId hmd, void* hWindow); nuclear@0: nuclear@0: //------------------------------------------------------------------------------------- nuclear@0: // *** Tracking Setup nuclear@0: nuclear@0: bool Hmd_ConfigureTracking(VirtualHmdId hmd, unsigned supportedCaps, unsigned requiredCaps); nuclear@0: void Hmd_ResetTracking(VirtualHmdId hmd); nuclear@0: nuclear@0: // TBD: Camera frames nuclear@0: bool LatencyUtil_ProcessInputs(double startTestSeconds, unsigned char rgbColorOut[3]); nuclear@0: const char* LatencyUtil_GetResultsString(); nuclear@0: nuclear@0: bool ShutdownServer(); nuclear@0: nuclear@0: protected: nuclear@0: String Hmd_GetLastError_Str; nuclear@0: String LatencyUtil_GetResultsString_Str; nuclear@0: String ProfileGetValue1_Str, ProfileGetValue3_Str; nuclear@0: nuclear@0: protected: nuclear@0: //// Push Notifications: nuclear@0: nuclear@0: void registerRPC(); nuclear@0: nuclear@0: ObserverScope InitialServerStateScope; nuclear@0: void InitialServerState_1(BitStream* userData, ReceivePayload* pPayload); nuclear@0: nuclear@0: ObserverScope LatencyTesterAvailableScope; nuclear@0: void LatencyTesterAvailable_1(BitStream* userData, ReceivePayload* pPayload); nuclear@0: nuclear@0: ObserverScope DefaultLogOutputScope; nuclear@0: void DefaultLogOutput_1(BitStream* userData, ReceivePayload* pPayload); nuclear@0: nuclear@0: ObserverScope HMDCountUpdateScope; nuclear@0: void HMDCountUpdate_1(BitStream* userData, ReceivePayload* pPayload); nuclear@0: }; nuclear@0: nuclear@0: nuclear@0: }} // namespace OVR::Service nuclear@0: nuclear@0: #endif // OVR_Service_NetClient_h