PSMoveSteamVRBridge
server_driver.h
1 #pragma once
2 #include "PSMoveClient_CAPI.h"
3 #include <openvr_driver.h>
4 #include "config.h"
5 #include "trackable_device.h"
6 #include "tracker.h"
7 #include "logger.h"
8 #include "settings_util.h"
9 
10 // Platform specific includes
11 #if defined( _WIN32 )
12 #include <windows.h>
13 #include <direct.h>
14 #define getcwd _getcwd // suppress "deprecation" warning
15 #else
16 #include <unistd.h>
17 #endif
18 
19 namespace steamvrbridge {
20 
21  /*
22  IServerTrackedDeviceProvider implementation as per:
23  https://github.com/ValveSoftware/openvr/wiki/IServerTrackedDeviceProvider_Overview
24  */
25  class CServerDriver_PSMoveService : public vr::IServerTrackedDeviceProvider
26  {
27  public:
29  virtual ~CServerDriver_PSMoveService();
30 
31  static CServerDriver_PSMoveService *getInstance()
32  {
33  if (m_instance == nullptr)
34  m_instance= new CServerDriver_PSMoveService();
35 
36  return m_instance;
37  }
38 
39  // Inherited via IServerTrackedDeviceProvider
40  virtual vr::EVRInitError Init(vr::IVRDriverContext *pDriverContext) override;
41  virtual void Cleanup() override;
42  virtual const char * const *GetInterfaceVersions() override;
43  virtual void RunFrame() override;
44  virtual bool ShouldBlockStandbyMode() override;
45  virtual void EnterStandby() override;
46  virtual void LeaveStandby() override;
47 
48  void LaunchPSMoveService();
49  void LaunchPSMoveMonitor();
50 
51  bool IsHMDTrackingSpaceCalibrated() const { return m_config.has_calibrated_world_from_driver_pose; }
52  void SetHMDTrackingSpace(const PSMPosef &origin_pose);
53  inline PSMPosef GetWorldFromDriverPose() const { return m_config.world_from_driver_pose; }
54 
55  private:
56  vr::ITrackedDeviceServerDriver * FindTrackedDeviceDriver(const char * pchId);
57  vr::ETrackedControllerRole AllocateControllerRole(PSMControllerHand psmControllerHand);
58  void AllocateUniquePSMoveController(PSMControllerID ControllerID, PSMControllerHand psmControllerHand, const std::string &ControllerSerial);
59  void AllocateUniqueVirtualController(PSMControllerID psmControllerID, PSMControllerHand psmControllerHand, const std::string &psmControllerSerial);
60  void AllocateUniquePSNaviController(PSMControllerID psmControllerID, PSMControllerHand psmControllerHand, const std::string &psmControllerSerial, const std::string &psmParentControllerSerial);
61  void AllocateUniqueDualShock4Controller(PSMControllerID ControllerID, PSMControllerHand psmControllerHand, const std::string &ControllerSerial);
62  void AllocateUniquePSMoveTracker(const PSMClientTrackerInfo *trackerInfo);
63  bool ReconnectToPSMoveService();
64 
65  // Event Handling
66  void HandleClientPSMoveEvent(const PSMMessage *event);
67  void HandleConnectedToPSMoveService();
68  void HandleFailedToConnectToPSMoveService();
69  void HandleDisconnectedFromPSMoveService();
70  static void HandleServiceVersionResponse(const PSMResponseMessage *response, void *userdata);
71  void HandleControllerListChanged();
72  void HandleTrackerListChanged();
73 
74  // Response Handling
75  void HandleClientPSMoveResponse(const PSMMessage *message);
76  void HandleControllerListReponse(const PSMControllerList *controller_list, const PSMResponseHandle response_handle);
77  void HandleTrackerListReponse(const PSMTrackerList *tracker_list);
78 
79  ServerDriverConfig m_config;
80 
81  bool m_bLaunchedPSMoveMonitor;
82  bool m_bLaunchedPSMoveService;
83  bool m_bInitialized;
84 
85  std::vector< TrackableDevice * > m_vecTrackedDevices;
86 
87  // Singleton instance of CServerDriver_PSMoveService
88  static CServerDriver_PSMoveService *m_instance;
89  };
90 }
Provides printf-style line logging via the vr::IVRDriverLog interface provided by SteamVR during init...
Definition: config.cpp:18
Definition: settings_util.h:8
void LaunchPSMoveMonitor()
Launch monitor_psmove if needed (requested by devices as they activate)
Definition: server_driver.cpp:650
Definition: server_driver.h:25