diff --git a/libraries/plugins/src/plugins/InputConfiguration.cpp b/libraries/plugins/src/plugins/InputConfiguration.cpp index 9234ac6585..976a9c9463 100644 --- a/libraries/plugins/src/plugins/InputConfiguration.cpp +++ b/libraries/plugins/src/plugins/InputConfiguration.cpp @@ -54,7 +54,8 @@ QStringList InputConfiguration::activeInputPlugins() { if (plugin->configurable()) { QString pluginName = plugin->getName(); if (pluginName == QString("OpenVR")) { - activePlugins << QString("Vive"); + QString headsetName = plugin->getDeviceName(); + activePlugins << headsetName; } else { activePlugins << pluginName; } @@ -74,7 +75,7 @@ QString InputConfiguration::configurationLayout(QString pluginName) { QString sourcePath; for (auto plugin : PluginManager::getInstance()->getInputPlugins()) { - if (plugin->getName() == pluginName) { + if (plugin->getName() == pluginName || plugin->getDeviceName() == pluginName) { return plugin->configurationLayout(); } } diff --git a/libraries/plugins/src/plugins/InputPlugin.h b/libraries/plugins/src/plugins/InputPlugin.h index 5d02964c97..23fbb6cac6 100644 --- a/libraries/plugins/src/plugins/InputPlugin.h +++ b/libraries/plugins/src/plugins/InputPlugin.h @@ -26,10 +26,11 @@ public: // If an input plugin is only a single device, it will only return it's primary name. virtual QStringList getSubdeviceNames() { return { getName() }; }; virtual void setConfigurationSettings(const QJsonObject configurationSettings) { } - virtual QJsonObject configurationSettings() { return QJsonObject(); } + virtual QJsonObject configurationSettings() { return QJsonObject(); } virtual QString configurationLayout() { return QString(); } + virtual QString getDeviceName() { return QString(); } virtual void calibrate() {} - virtual bool uncalibrate() { return false; } + virtual bool uncalibrate() { return false; } virtual bool configurable() { return false; } virtual bool isHandController() const { return false; } virtual bool isHeadController() const { return false; } diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index c58e97cc06..1f63769b22 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -11,6 +11,7 @@ #include "ViveControllerManager.h" #include +#include #include #include @@ -333,12 +334,33 @@ ViveControllerManager::InputDevice::InputDevice(vr::IVRSystem*& system) : _configStringMap[Config::FeetHipsChestAndShoulders] = QString("FeetHipsChestAndShoulders"); } +std::string ViveControllerManager::InputDevice::getTrackingSystemName() { + std::string trackingSystemName = ""; + if (_system) { + uint32_t HmdTrackingIndex = 0; + uint32_t bufferLength = _system->GetStringTrackedDeviceProperty(HmdTrackingIndex, vr::Prop_TrackingSystemName_String, NULL, 0, NULL); + if (bufferLength > 0) { + char* stringBuffer = new char[bufferLength]; + _system->GetStringTrackedDeviceProperty(HmdTrackingIndex, vr::Prop_ManufacturerName_String, stringBuffer, bufferLength, NULL); + trackingSystemName = stringBuffer; + delete[] stringBuffer; + } + } + return trackingSystemName; +} + void ViveControllerManager::InputDevice::update(float deltaTime, const controller::InputCalibrationData& inputCalibrationData) { _poseStateMap.clear(); _buttonPressedMap.clear(); _validTrackedObjects.clear(); _trackedControllers = 0; + if (_headsetName == "") { + _headsetName = getTrackingSystemName(); + if (_headsetName == "HTC") { + _headsetName += " Vive"; + } + } // While the keyboard is open, we defer strictly to the keyboard values if (isOpenVrKeyboardShown()) { _axisStateMap.clear(); diff --git a/plugins/openvr/src/ViveControllerManager.h b/plugins/openvr/src/ViveControllerManager.h index 0dd13d95cb..d66db45ee9 100644 --- a/plugins/openvr/src/ViveControllerManager.h +++ b/plugins/openvr/src/ViveControllerManager.h @@ -52,6 +52,8 @@ public: bool activate() override; void deactivate() override; + QString getDeviceName() { return QString::fromStdString(_inputDevice->_headsetName); } + void pluginFocusOutEvent() override { _inputDevice->focusOutEvent(); } void pluginUpdate(float deltaTime, const controller::InputCalibrationData& inputCalibrationData) override; @@ -76,6 +78,7 @@ private: void calibrateOrUncalibrate(const controller::InputCalibrationData& inputCalibration); void calibrate(const controller::InputCalibrationData& inputCalibration); void uncalibrate(); + std::string getTrackingSystemName(); void sendUserActivityData(QString activity); void configureCalibrationSettings(const QJsonObject configurationSettings); QJsonObject configurationSettings(); @@ -161,6 +164,7 @@ private: HandConfig _handConfig { HandConfig::HandController }; FilteredStick _filteredLeftStick; FilteredStick _filteredRightStick; + std::string _headsetName {""}; std::vector _validTrackedObjects; std::map _pucksPostOffset;