diff --git a/README.RU.md b/README.RU.md index 5273ab0..f3ec646 100644 --- a/README.RU.md +++ b/README.RU.md @@ -45,13 +45,13 @@ Razer Hydra | Левый Vive контроллер | Правый Vive конт ------------ | ------------- Включение, выключение приседания | `ALT` + `9` и `ALT` + `0` (заменяет на нажатие тачпада) -- Для HMD можно использовать любой драйвер, с поддержкой приседания по кнопке. Например, можно использовать [OpenVR-ArduinoHMD драйвер](https://github.com/r57zone/OpenVR-ArduinoHMD) или [TrueOpenVR и SteamVR мост драйвер](https://github.com/TrueOpenVR) для HMD (FreeTrack для HMD из смартфонов или ArduinoHMD для [полноценных DIY шлемов](https://github.com/TrueOpenVR/TrueOpenVR-DIY/blob/master/HMD/HMD.RU.md)). +- Для HMD можно использовать любой драйвер, с поддержкой приседания по кнопке. Например, можно использовать [OpenVR-ArduinoHMD драйвер](https://github.com/r57zone/OpenVR-ArduinoHMD) или [TrueOpenVR и SteamVR мост драйвер](https://github.com/TrueOpenVR) для HMD (FreeTrack для HMD из смартфонов или ArduinoHMD для [полноценных DIY шлемов](https://github.com/TrueOpenVR/TrueOpenVR-DIY/blob/master/HMD/HMD.RU.md)). По умолчанию это кнопка `PAUSE`, изменить её можно в конфигурационном файле "default.vrsettings", параметр `CrouchPressKey`, название нужной кнопки можно найти [здесь](https://github.com/r57zone/DualShock4-emulator/blob/master/BINDINGS.RU.md). - Изменить тип контроллеров, с Valve Index на HTC Vive, можно изменив значение `true` на `false`, параметра `IndexControllers`, в конфигурационном файле "default.vrsettings", параметр `CustomPressKey` - Во время нажатия кнопки 3, на правом контроллере Razer Hydra, также нажимается кнопка клавиатуры (кнопка настраивается). Настройки приседания можно найти в конфигурационном файле "default.vrsettings". -- Поддерживается нажатие кнопки клавиатуры, на кнопку 4, левого контроллера. По умолчанию это кнопка `V`, изменить её можно в конфигурационном файле "default.vrsettings", параметр `CustomPressKey`, код нужной кнопки можно найти [здесь](https://github.com/r57zone/Half-Life-Alyx-novr/blob/master/BINDINGS.md#codes). Включить её можно в конфигурационном файле, изменив значение `false` на `true`, параметра `EnableCustomKey` и она заменит нажатие тачпада контроллера. +- Поддерживается нажатие кнопки клавиатуры, на кнопку 4, левого контроллера. По умолчанию это кнопка `V`, изменить её можно в конфигурационном файле "default.vrsettings", параметр `CustomPressKey`, название нужной кнопки можно найти [здесь](https://github.com/r57zone/DualShock4-emulator/blob/master/BINDINGS.RU.md). Включить её можно в конфигурационном файле, изменив значение `false` на `true`, параметра `EnableCustomKey` и она заменит нажатие тачпада контроллера. - Отредактировать раскладку контроллеров можно также в "SteamVR Bindings UI", открыв настройки SteamVR, выбрав "Advance Settings" -> "Show" и перейдя в пункт контроллеры. @@ -61,8 +61,6 @@ Razer Hydra | Левый Vive контроллер | Правый Vive конт 3. [Добавьте параметр](https://youtu.be/QCA3m4_3IJM?t=197) `"activateMultipleDrivers" : true,` в конфиг "...\Steam\config\steamvr.vrsettings", в раздел `steamvr`. 4. Измените мёртвую зону, если ваш стик уходит в сторону, в конфиге "..\Steam\steamapps\common\SteamVR\drivers\razer_hydra\hydra\resources\settings\default.vrsettings", параметр `JoyStickDeadZone`. Чтобы определить значение мёртвой зоны, для проблемного стика, можно использовать [эту программу](https://github.com/r57zone/Sixence-Razer-Hydra-sample/releases). -Дополнительная информация есть в [вики](https://github.com/betavr/steamvr_driver_hydra/wiki). - ## Решение проблем **• Стик наклонен в одну из сторон и не двигается в протиположную**
Закройте SteamVR, отключите USB провод контроллеров, подождите 5-10 секунд и подключите снова. diff --git a/README.md b/README.md index d230eff..bfd1ed9 100644 --- a/README.md +++ b/README.md @@ -45,13 +45,13 @@ Description | Razer Hydra Button ------------ | ------------- Turning on, off crouch | `ALT` + `9` and `ALT` + `0` (replaced to touchpad press) -- For HMD, you can use any driver that supports crouch by button. For example, you can use [OpenVR-ArduinoHMD Driver](https://github.com/r57zone/OpenVR-ArduinoHMD) or [TrueOpenVR and SteamVR Bridge Driver](https://github.com/TrueOpenVR) for HMD (FreeTrack for HMD from smartphones or ArduinoHMD for [full-fledged DIY headsets](https://github.com/TrueOpenVR/TrueOpenVR-DIY/blob/master/HMD/HMD.RU.md)). +- For HMD, you can use any driver that supports crouch by button. For example, you can use [OpenVR-ArduinoHMD Driver](https://github.com/r57zone/OpenVR-ArduinoHMD) or [TrueOpenVR and SteamVR Bridge Driver](https://github.com/TrueOpenVR) for HMD (FreeTrack for HMD from smartphones or ArduinoHMD for [full-fledged DIY headsets](https://github.com/TrueOpenVR/TrueOpenVR-DIY/blob/master/HMD/HMD.md)). By default, this is the `PAUSE` button, you can change it in the "default.vrsettings" configuration file, the `CrouchPressKey` parameter, the name of the desired button can be found [here](https://github.com/r57zone/DualShock4-emulator/blob/master/BINDINGS.md). - You can change the type of controllers from Valve Index to HTC Vive by changing the value `true` to `false`, parameter `IndexControllers`, in the configuration file "default.vrsettings", parameter `CustomPressKey` - While pressing button 3, on the right Razer Hydra controller, the keyboard button is also pressed (the button is configurable). Crouch settings can be found in the configuration file "default.vrsettings". -- Supports pressing the keyboard button, on button 4, of the left controller. By default, this is the `V` button, you can change it in the "default.vrsettings" configuration file, the `CustomPressKey` parameter, the code for the desired button can be found [here](https://github.com/r57zone/Half-Life-Alyx-novr/blob/master/BINDINGS.md#codes). You can turn it on in the configuration file by changing the value of `false` to `true`, the `EnableCustomKey` parameter and it will replace pressing the controller touchpad. +- Supports pressing the keyboard button, on button 4, of the left controller. By default, this is the `V` button, you can change it in the "default.vrsettings" configuration file, the `CustomPressKey` parameter, the name for the desired button can be found [here](https://github.com/r57zone/DualShock4-emulator/blob/master/BINDINGS.md). You can turn it on in the configuration file by changing the value of `false` to `true`, the `EnableCustomKey` parameter and it will replace pressing the controller touchpad. - You can also edit the controller layout in the "SteamVR Bindings UI" by opening the SteamVR settings, selecting "Advance Settings" -> "Show" and going to the controllers item. @@ -62,8 +62,6 @@ Turning on, off crouch | `ALT` + `9` and `ALT` + `0` (replaced to touchpad press 3. [Add option](https://youtu.be/QCA3m4_3IJM?t=197) `"activateMultipleDrivers" : true,` to config "...\Steam\config\steamvr.vrsettings", to `steamvr` section. 4. Change the dead zone if your stick goes to the side in config "..\Steam\steamapps\common\SteamVR\drivers\razer_hydra\hydra\resources\settings\default.vrsettings", option `JoyStickDeadZone`. To determine the value of the dead zone can use [this program](https://github.com/r57zone/Sixence-Razer-Hydra-sample/releases). -For more detailed instructions please visit the [wiki](https://github.com/betavr/steamvr_driver_hydra/wiki). - ## Problems solving **• The stick is tilted to one side and does not move to the opposite side**
Close SteamVR, unplug the controllers USB cable, wait 5-10 seconds and plug it back in. diff --git a/drivers/driver_hydra/driver_hydra.cpp b/drivers/driver_hydra/driver_hydra.cpp index a15e00a..c37e595 100644 --- a/drivers/driver_hydra/driver_hydra.cpp +++ b/drivers/driver_hydra/driver_hydra.cpp @@ -65,8 +65,8 @@ static const char * const k_pch_Hydra_Section = "hydra"; //static const char * const k_pch_Hydra_RenderModel_String = "rendermodel"; static const char * const k_pch_Hydra_EnableIMU_Bool = "EnableImu"; static const char * const k_pch_Hydra_JoystickDeadzone_Float = "JoyStickDeadZone"; -static const char * const k_pch_Hydra_CrouchPressKey_Int32 = "CrouchPressKey"; -static const char * const k_pch_Hydra_CustomPressKey_Int32 = "CustomPressKey"; +static const char * const k_pch_Hydra_CrouchPressKey_String = "CrouchPressKey"; +static const char * const k_pch_Hydra_CustomPressKey_String = "CustomPressKey"; static const char * const k_pch_Hydra_CrouchOffset_Float = "CrouchOffset"; static const char * const k_pch_Hydra_RecognizeAsIndexControllers_Bool = "IndexControllers"; static const char * const k_pch_Hydra_EnableCustomKey_Bool = "EnableCustomKey"; @@ -77,6 +77,126 @@ static void GenerateSerialNumber(char *p, int psize, int base, int controller) _snprintf(p, psize, "hydra%d_controller%d", base, controller); } +int KeyNameToKeyCode(std::string KeyName) { + std::transform(KeyName.begin(), KeyName.end(), KeyName.begin(), ::toupper); + + if (KeyName == "NONE") return 0; + + else if (KeyName == "MOUSE-LEFT-BTN") return VK_LBUTTON; + else if (KeyName == "MOUSE-RIGHT-BTN") return VK_RBUTTON; + else if (KeyName == "MOUSE-MIDDLE-BTN") return VK_MBUTTON; + else if (KeyName == "MOUSE-SIDE1-BTN") return VK_XBUTTON1; + else if (KeyName == "MOUSE-SIDE2-BTN") return VK_XBUTTON2; + + else if (KeyName == "ESCAPE") return VK_ESCAPE; + else if (KeyName == "F1") return VK_F1; + else if (KeyName == "F2") return VK_F2; + else if (KeyName == "F3") return VK_F3; + else if (KeyName == "F4") return VK_F4; + else if (KeyName == "F5") return VK_F5; + else if (KeyName == "F6") return VK_F6; + else if (KeyName == "F7") return VK_F7; + else if (KeyName == "F8") return VK_F8; + else if (KeyName == "F9") return VK_F9; + else if (KeyName == "F10") return VK_F10; + else if (KeyName == "F11") return VK_F11; + else if (KeyName == "F12") return VK_F12; + + else if (KeyName == "~") return 192; + else if (KeyName == "1") return '1'; + else if (KeyName == "2") return '2'; + else if (KeyName == "3") return '3'; + else if (KeyName == "4") return '4'; + else if (KeyName == "5") return '5'; + else if (KeyName == "6") return '6'; + else if (KeyName == "7") return '7'; + else if (KeyName == "8") return '8'; + else if (KeyName == "9") return '9'; + else if (KeyName == "0") return '0'; + else if (KeyName == "-") return 189; + else if (KeyName == "=") return 187; + + else if (KeyName == "TAB") return VK_TAB; + else if (KeyName == "CAPS-LOCK") return VK_CAPITAL; + else if (KeyName == "SHIFT") return VK_SHIFT; + else if (KeyName == "CTRL") return VK_CONTROL; + else if (KeyName == "WIN") return VK_LWIN; + else if (KeyName == "ALT") return VK_MENU; + else if (KeyName == "SPACE") return VK_SPACE; + else if (KeyName == "ENTER") return VK_RETURN; + else if (KeyName == "BACKSPACE") return VK_BACK; + + else if (KeyName == "Q") return 'Q'; + else if (KeyName == "W") return 'W'; + else if (KeyName == "E") return 'E'; + else if (KeyName == "R") return 'R'; + else if (KeyName == "T") return 'T'; + else if (KeyName == "Y") return 'Y'; + else if (KeyName == "U") return 'U'; + else if (KeyName == "I") return 'I'; + else if (KeyName == "O") return 'O'; + else if (KeyName == "P") return 'P'; + else if (KeyName == "[") return '['; + else if (KeyName == "]") return ']'; + else if (KeyName == "A") return 'A'; + else if (KeyName == "S") return 'S'; + else if (KeyName == "D") return 'D'; + else if (KeyName == "F") return 'F'; + else if (KeyName == "G") return 'G'; + else if (KeyName == "H") return 'H'; + else if (KeyName == "J") return 'J'; + else if (KeyName == "K") return 'K'; + else if (KeyName == "L") return 'L'; + else if (KeyName == ";") return 186; + else if (KeyName == "'") return 222; + else if (KeyName == "\\") return 220; + else if (KeyName == "Z") return 'Z'; + else if (KeyName == "X") return 'X'; + else if (KeyName == "C") return 'C'; + else if (KeyName == "V") return 'V'; + else if (KeyName == "B") return 'B'; + else if (KeyName == "N") return 'N'; + else if (KeyName == "M") return 'M'; + else if (KeyName == "<") return 188; + else if (KeyName == ">") return 190; + else if (KeyName == "?") return 191; + + else if (KeyName == "PRINTSCREEN") return VK_SNAPSHOT; + else if (KeyName == "SCROLL-LOCK") return VK_SCROLL; + else if (KeyName == "PAUSE") return VK_PAUSE; + else if (KeyName == "INSERT") return VK_INSERT; + else if (KeyName == "HOME") return VK_HOME; + else if (KeyName == "PAGE-UP") return VK_NEXT; + else if (KeyName == "DELETE") return VK_DELETE; + else if (KeyName == "END") return VK_END; + else if (KeyName == "PAGE-DOWN") return VK_PRIOR; + + else if (KeyName == "UP") return VK_UP; + else if (KeyName == "DOWN") return VK_DOWN; + else if (KeyName == "LEFT") return VK_LEFT; + else if (KeyName == "RIGHT") return VK_RIGHT; + + else if (KeyName == "NUM-LOCK") return VK_NUMLOCK; + else if (KeyName == "NUMPAD0") return VK_NUMPAD0; + else if (KeyName == "NUMPAD1") return VK_NUMPAD1; + else if (KeyName == "NUMPAD2") return VK_NUMPAD2; + else if (KeyName == "NUMPAD3") return VK_NUMPAD3; + else if (KeyName == "NUMPAD4") return VK_NUMPAD4; + else if (KeyName == "NUMPAD5") return VK_NUMPAD5; + else if (KeyName == "NUMPAD6") return VK_NUMPAD6; + else if (KeyName == "NUMPAD7") return VK_NUMPAD7; + else if (KeyName == "NUMPAD8") return VK_NUMPAD8; + else if (KeyName == "NUMPAD9") return VK_NUMPAD9; + + else if (KeyName == "NUMPAD-DIVIDE") return VK_DIVIDE; + else if (KeyName == "NUMPAD-MULTIPLY") return VK_MULTIPLY; + else if (KeyName == "NUMPAD-MINUS") return VK_SUBTRACT; + else if (KeyName == "NUMPAD-PLUS") return VK_ADD; + else if (KeyName == "NUMPAD-DEL") return VK_DECIMAL; + + else return 0; +} + //----------------------------------------------------------------------------- // Purpose: Watchdog //----------------------------------------------------------------------------- @@ -372,13 +492,15 @@ class CHydraControllerDriver : public vr::ITrackedDeviceServerDriver m_bEnableHoldThumbpad = true; // Crouch key code (for send to another HMD drivers) - m_nCrouchPressKey = vr::VRSettings()->GetInt32(k_pch_Hydra_Section, k_pch_Hydra_CrouchPressKey_Int32); + vr::VRSettings()->GetString(k_pch_Hydra_Section, k_pch_Hydra_CrouchPressKey_String, buf, sizeof(buf)); + m_nCrouchPressKey = KeyNameToKeyCode(buf); // Crouch offset Z m_fCrouchOffset = vr::VRSettings()->GetFloat(k_pch_Hydra_Section, k_pch_Hydra_CrouchOffset_Float); // Cutom key code (for send to another apps) - m_nCustomPressKey = vr::VRSettings()->GetInt32(k_pch_Hydra_Section, k_pch_Hydra_CustomPressKey_Int32); + vr::VRSettings()->GetString(k_pch_Hydra_Section, k_pch_Hydra_CustomPressKey_String, buf, sizeof(buf)); + m_nCustomPressKey = KeyNameToKeyCode(buf); // Enable custom key on left Index controller EnabledCustomKey = vr::VRSettings()->GetBool(k_pch_Hydra_Section, k_pch_Hydra_EnableCustomKey_Bool); diff --git a/resources/settings/default.vrsettings b/resources/settings/default.vrsettings index 2c8c5a2..7d41e3e 100644 --- a/resources/settings/default.vrsettings +++ b/resources/settings/default.vrsettings @@ -2,10 +2,10 @@ "hydra" : { "IndexControllers" : true, "JoyStickDeadZone" : 0.0, - "CrouchPressKey": 19, + "CrouchPressKey": "PAUSE", "CrouchOffset": 0.7, "EnableCustomKey" : false, - "CustomPressKey": 86, + "CustomPressKey": "V", "EnableImu" : true } } \ No newline at end of file