This can be caused by many things. I think most likely: 1) Unexpected login API error (try another API). 2) Unexpected error in vXbox API. 3) Try to disconnect all physical Xbox controllers. 4) An error in the current version of the program (try 1.0.7.0). 5) The Xbox companion app (or other app) defines the virtual controller process as a cheat program. Try an alternative program: https://github.com/Snoothy/UCR. Uses a different vXbox driver (remember to uninstall the current driver before installing...
Can you try this on newer version of program (screenshot display old version UI)? If you use keyboard instead mouse (or just don't enabling mouse) to control Axes then stutter is removed? If you use 10000ms refresh rate then stutter is removed?
Probably double input: mouse + vXbox. When Lock is "ON", mouse pointer locked in last position - try Lock "ON" when cursor in center screen. LLHook Lock don't hide mouse movement perfectly (technically is trick). You can try Hook (dll injector), RawInput lock, but I don't recommend this: very risky if game have anti-cheat system, and unstable in action. Can disable all mouse controls in game? You can try this (https://sourceforge.net/p/vjoy-controller/discussion/general/thread/486ba7d879/) to hide...
Do you need a lock option? If no, then try to use RawInput without lock. Can you provide me your profile-file (vcd)? Or a screenshot?
I don't have an Xbox. Any information about the crash? Typical ways to get information about a crash: - Windows event logs - try running without enabling (or try other) physical input devices (you can use a timer) [Problem in input API] - try running without enabling vXbox [Problem in vXbox] Can you ask other people: they have same issue?
It's seems profile-file is corrupted (or empty). On start: 1) load Autosave.vcd (last profile). 2) if "/load vXbox1.vcd" exist in command-line args, then load vXbox1.vcd. If these (or one of these) files is corrupted then unexpected things may occur. Can you attach your profile-files (Autosave.vcd + vXbox1.vcd) to your message?
1-2) More data. I have tried creating a cmd file in the root folder with content: VirtualController.exe /load WalkBtn.vcd and it works great. 4) Why do you launch the Virtual Controller after the game, and I always launch it before the game? I can make it so that the main form is minimized by default at startup, but this gives a different visual effect - at startup, make the form "not minimized" (if there is no "minimize" flag). 6) As far as I know: the virtual controller does not work with administrator...
Currently, each axis independent. But some options have in internal device "Internal Joystick". It's ellipse border (x2/a2 + y2/b2 <= 1). https://sourceforge.net/p/vjoy-controller/discussion/general/thread/cb9fbd3232/#36d8/be40
1) You can try the internal device "Calculator" (Boolean). 2) You can try the internal device "Program" (On / Off Binds). 3) Can you provide me with the math formula? Currently, linear output: Output = Sensitivity * Input. Exponential output: Output = Sensitivity * exp(Input)?
1-2) "/load" works for me. More data is required for analysis. 2-3) For this, an internal device "Program" was created. 4) For this I need to rewrite some of the initialization code. Why do you need this? 5) Detailed documentation is my weak point. 6) I like to keep all files in one place (it helps a lot when uninstalling programs + simple transfer of configuration to another computer). What are the benefits of storing data in AppData? 7) This is a error. Fixed this bug recently (1.0.7.2). 8) I don’t...
Try the new version.
Currently, the program does not provide for hiding devices. If you are an experienced (or love to take risks) user, then you can try the "HidGuardian" (https://github.com/ViGEm/HidGuardian). There is one more way. Connect the gamepad to another computer and transfer input through the network.
On the emulator PS2, I played a game where you need to lightly press a key. Very like to triggers (LT / RT) of Xbox 360 gamepad. There is no d-pad time sensitivity. But there is for Stick ( through internal joystick - max speed parameter).
sensitivity of D-pad... Can you describe this? If you about "weak" / "full" press state, then answer is no.
Press [LB] Delay1 Release [LB] Delay2 Press [RB] Delay3 Release [RB] Currently, Delay1=Delay2=Delay3=50 ms. Can be changed in settings (Timer interval).
[Keyboard] Button X = [Keyboard] Button S, Space every 50 ms for 5 sec. Do you want something like this? Attached a configuration file for this case.
[Keyboard] Button <x> => [Keyboard] Button , <space> every 50 ms for 5 sec. Do you want something like this?</space></x> Attached a configuration file for this case.
In your case (you do not need a user interface; I/O devices are known; there is a known way to transfer data; you are able to write a bit of your own code) the best option would be to use “vXbox API”. This way should provide a minimum consumption of computer resources to achieve your goal. https://github.com/shauleiz/ScpVBus/releases https://github.com/shauleiz/vGen/releases
Possible solutions: 1) disable the keyboard / mouse in the game (or set it to non-working keys). 2) use Lock Feature.
As far as I understand (due to the need for knowledge of the TCP/UDP data structure), you want to write your program for managing NetJoy. If not, write. It is not so simple to describe the whole structure of transmission-reception, due to the dependence on the settings. The main composition of the transfer: - device number; - some settings; - type of control (button, axis, ...); - The new value of the control. You can simply examine the transmitted packages for changes in axis values to quickly understand...
It is not so simple to describe the whole structure of transmission-reception, due to the dependence on the settings. The main composition of the transfer: - device number; - some settings; - type of control (button, axis, ...); - The new value of the control. You can simply examine the transmitted packages for changes in axis values to quickly understand where the values are stored in the package. For simplicity, do not use a buffer (Data-Hold Time = 0). Associated Code С# (only the necessary fragments):...
You can use modifiers "Set Increase" and "Set Decrease". Attached a picture. To check the controls, I recommend using "Help / Game Controllers" (Win + R, write "joy.cpl)". If there are no delays, but there is a game, then the problem is with the game.
I think that processing will take less than 1 ms, but may be more depending on the complexity of your profile.
There is no such parameter in the program. If you have one core loaded at 10%, then increasing the number of threads will not increase performance. Performance depends on many factors, not just the number of threads. Have performance issues? Bring your profile for analysis.
Additional data required: Check if everything works as it should in the case of an opaque active window (for example, a notepad or a main form of the virtual controller). There are fears that programs are configured in such a way that they read data from vXbox only when their window is active. Do not use version 1.0.7.0 due to errors in the profile loading function.
Try the new version. Main Form / Help / Transparent Window New possible solution: Try to use different Keyboard API (LLHook, RawInput)
Try the new version. Main Form / Help / Transparent Window New possible solution: Try to use different Keyboard API (LLHook, RawInput)
Can I have a diagram of your work or configuration files for detailed analysis? Example: [PC01 Keyboard] => [NetJoy01] => [PC02 vXbox]. Current solutions: 1) Disable keyboard / mouse (through settings) for these programs (if possible). 2) As a temporary solution, I can add a transparent form that can be used as an active window. Will this solution suit you?
I think the problem is not in the output device (vXbox), but in the input device (keyboard, mouse, gamepad, ...). Some programs with an active window hide user input from other programs. Therefore, Virtual Controller does not see input while their window is active. In order to prevent devices from being hidden for Virtual Controller, you must somehow hide them from these programs (Parsec, Steam's game window).
Попробуй уменьшить чувствительность осей DirectInput (например 50% или 10%). Прикрепи свой файл-конфигурации для анализа.
В "IO Devices" нужно включить таймеры: Интервал таймера должен быть больше чем интервал обновления DirectInput. Не забудь скачать последную версию программы для устранения бага в UI.
В "IO Devices" нужно включить таймеры: Не забудь скачать последную версию программы для устранения бага в UI.
В "IO Devices" нужно включить таймеры:
Вот набор (прикрепленные файлы) для режима vJoy.
RawInput связан с определенным устройством. Твоя физ. мышь не связана с OpenTrack. Чтобы работало попробуй определить устройство – например через режим «быстрой привязки» или перебором. Рекомендую попробовать устройство Simulated Mouse. Если не помогло, тогда надо пробовать использовать LLHook + Lock Feature. Нужно уточнить детали про трекинг. Ограничен или нет поворот головы влево и вправо (думаю ограничен если не крутишься на кресле)? В играх где есть управление обзором мышкой ограничения нет....
Нужно полное описание того чего ты хочешь. Просто в первом сообщение было сказано только про (мышь+гейпад xbox360) => (виртуальный геймпад xbox360). А потом появились всякие Opentrack, vJoy. Напиши какие у тебя физические (которые можно в руки взять) устройства. Программа VR читает данные только с одного устройства (виртуальный геймпад xbox360) или нет (виртуальный геймпад xbox360, клавиатура, мышь, vJoy)?
Вместо Axis [X] Positive попробуй использовать Axis [X] Increase:
Если в реестре нет этих значений, тогда vJoy (не Virtual Controller) использует "зашитие" значения (X,Y,Z = 50%, остальные = 0%). http://vjoystick.sourceforge.net/site/index.php/download-a-install/deployment216/initial-values Думаю проблема в том, что программа Opentrack "захватила" контроль над vJoy Device 1, и как результат программа Virtual Controller не может получить доступ к контролю vJoy Device 1. Насколько я знаю только одна программа может иметь контроль над устройством, а вот получать данные...
vJoy by default has its "neutral" axis values. They are stored in the register (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\vjoy\Parameters\Device01). Function "Release" sets them (or 50% if they not exist). You can try to set 50% - the usual neutral value: Axis [RX] = 50% My English is a mixture of "I think it should be" + google translate. I write well (more or less) in Russian.
I recommend attaching a file to reduce the content of the message. I recommend using RAW Input for the mouse. I recommend using XInput for the gamepad. I recommend that you first configure the mouse separately, and then the mouse + gamepad. Reduced time for testing. Customizing mouse controls for a stick is a pretty slippery theme. Devices are different in physical implementation. There are several control setup approaches, here is an example: https://sourceforge.net/p/vjoy-controller/discussion...
Try the new version.
Is possible to optimize the Enable/Disable Bind operation in the program code? Yes, already working on it.
Try the new version.
I think that the error may be in the synchronization of various modules - especially DirectInput. Why are you using DirectInput? You can immediately enable / disable the bindings through the calculator.
Try the new version. I think that limiting the range of values of the X and Y axes of the mouse is not necessary.
Try a temporary solution for now: -LLHook Mouse -Lock Feature ON
The X (Y) axis is currently associated with the location of the cursor on the screen (currenly may some errors with fast movement), which is limited by the screen resolution. I recommend using the X(Y)-axis speed of the mouse. This is the source value obtained from the mouse in "Raw Input" mode. Axis speed is not limited by screen resolution and is used by default in "quick binding" mode.
Try to rebind (disable) the mouse controls in game Try the LLHook
Try a new version.
Try a new version.
You probably need a circular region of axis values: Instead of a rectangular area: The rectangular area is universal. Each axis is independent. In the circular region, two axes must be connected. In the next update, I will probably add a circular area for vXbox devices.
The virtual controller 1.0.6.4 allows you to set the maximum rate of change of the axis value of the internal joystick. Try this configuration file to check the “walk button”. You can try different values of the maximum speed (400%/s, 250%/s, 100%/s, ...).
Try a new version.
Working on it.
Try a new version.
Indeed, some gamepads cause this error. I work on problem.
Can you attach your own set of bindings?
You can use the following devices: - Internal Joystick (allows dynamic change of sensitivity) - Calculator (allows various mathematical operations) - Program (allows you to dynamically enable / disable bindings) I recently created bindings for the "walk button" type. You can take it as a base. (https://sourceforge.net/p/vjoy-controller/discussion/general/thread/cb9fbd3232/)
You may need to add a binding to enable the lock if you have not done so (by default, the lock is turned off for reliability). Binding example 1: Keyboard [F4] Press => Keyboard [Lock Invert] Binding example 2: Program [Capture On] => Keyboard [Lock On]
In the Windows Explorer, the input is blocked? If yes, then everything is fine. Some programs (especially games) have protection against blocking / capture of keyboard / mouse input.
Attached a file with settings. Details: - 84 bindings. - 10 timers (4 timers for each axis + 2 timers for changing sensitivity). The interval is 10 milliseconds. - 8 calculators (3 calculators for each axis + 2 calculators for changing sensitivity). - Min. sensitivity set to 25%. Stored in the calculator №8 (the initial value of the operand 2 = 0.25). - The dead zone for the internal joystick (axis X, Y) is set to 5%. P.S.: Do not forget to download the latest version of the program (1.0.6.2).
Attached a file with settings. Details: - 84 bindings. - 10 timers (4 timers for each axis + 2 timers for changing sensitivity). The interval is 10 milliseconds. - 8 calculators (3 calculators for each axis + 2 calculators for changing sensitivity). - Min. sensitivity set to 25%. Stored in the calculator №8 (the initial value of the operand 2 = 0.25). - The dead zone for the internal joystick (axis X, Y) is set to 5%.
Perhaps the point is that the value of the axis in the game can not change instantly (<1 millisecond). It is necessary to check the smooth (~ 25-100 milliseconds) reduction / increase (from 0% to 50%, from 50% to 0%, from 50% to 100%, from 100% to 50%, ...). Below is a picture with an example where auto-reset is disabled.
Try using soft sensitivity switching. I attached an example of a settings file (there are additional settings for internal devices). Controls: P.S. While doing this example I found several errors in the module "calculator" and corrected them.
I fixed the errors in the internal joystick module. New controls:
I found that only the X axis of the internal joystick is working correctly. I will fix it in the next update. Now you need to use 2 internal joysticks for 2 axes. I attached a picture with an example.
I found that only the X axis of the internal joystick is working correctly. I will fix it in the next update. Now you need to use 2 internal joysticks for 2 axes.
Я обнаружил что работает корректно только ось Х у внутреннего джойстика. Исправлю в следующем обновлении. Сейчас нужно использовать 2 внутрених джойстика для 2 осей. I attached a picture with an example.
Try this: Keyboard [F1] Press => internal joystick sensitivity Axis [X] = 25% Keyboard [F1] Press => internal joystick sensitivity Axis [Y] = 25% Keyboard [F1] Release => internal joystick sensitivity Axis [X] = 100% Keyboard [F1] Release => internal joystick sensitivity Axis [Y] = 100%
You can do this through an internal joystick (a new internal device). Example: Keyboard [W] Press/Release => internal joystick Axis [Y] +/- 50% Keyboard [S] Press/Release => internal joystick Axis [Y] -/+ 50% Keyboard [D] Press/Release => internal joystick Axis [X] +/- 50% Keyboard [A] Press/Release => internal joystick Axis [X] -/+ 50% internal joystick Axis [X] Change => virtual Left Stick [X] = 100%*Input internal joystick Axis [X] Release => virtual Left Stick [X] Release internal joystick Axis...
The new version is available for download. 1.0.6.0 Reworked almost all the code. Previous program settings are not compatible. It is recommended to remove the old version before installing the new one. New options for network joystick. New options for force feedback DirectInput / vJoy. New options for the internal device "Program" (profile change, dynamic disable / enable bindings). Added internal device "Internal joystick." Internal joystick - provides joystick type devices. Mainly used as an adapter...
Try run as "admin"
I recommend to use: Mouse Axis Speed X [Change] => vXbox Left Stick X [Input Set] 100% Mouse Axis Speed Y [Change] => vXbox Left Stick Y [Input Set] -100% Mouse Axis Speed X [Release] = > vXbox Left Stick X [Release] Mouse Axis Speed Y [Release] = > vXbox Left Stick Y [Release] 100% - it's default value, you can try various values (10%,50%,125%,200%,1000%,...) if value negative (-100%) then axis is inverted. Better to use RawInput Mouse. If you using Mouse WM (LLHook) then you need to use Mouse Lock...
To exit from program you can add the bind: Keyboard [Button] [Esc] [Press] => Program [Close] To disable warning you must add unlock bind (this message is notification about dead lock - possibility to lose any control): Keyboard [Button] [Esc] [Press] => Program [Close] OR Keyboard [Button] [Esc] [Press] => Program [Keyboard Lock] Off
Next Update will be include new functions to solve your task. But update will not soon release (many things need to do).
About "ON/OFF the Binds" - Every bind have unique ID. - You can create new bind which can "ON / OFF" the bind with needed ID. Example: Bind 1: Input (Keyboard button A press) => Output (Mouse X + 25%) Bind 2: Input (Boolean Device 1 Greater) => Output (Program Bind 1 ON) Bind 3: Input (Boolean Device 1 Less) => Output (Program Bind 1 OFF) "BIG SWITCH" this about new feature "Loading binds from a custom file", example: Bind 1: Input (Keyboard button F1 press) => Output (Program Profile Load from "game1.dat")...
Try to see the reaction of your devices through the built-in utility "joy.cpl" (Win + R, write "joy.cpl", ENTER). Are all your devices displayed and working correctly?
In the next version, I plan to expand the binding functions: - ON/OFF the binds - Loading binds from a custom file Most likely this will be done through the "Program" device. The next release is delayed due to the development environment change (Visual Studio 2008 => Visual Studio 2015), various revisions of the internal architecture (optimizations, new functions) and UI.
In truth, I tested FFB only on test samples (I do not have FFB devices). But the main course of the tests was defined as the full transfer of vJoy FFB to physical devices using DirectInput. During the tests, I found some limitations of vJoy: 1. No support for custom effects. 2. Only one active effect can be processed correctly. And some possible bug in SlimDX (module working with DirectInput): incorrected support of Ramp Force. I recommend using the following samples: 1) FFB [Auto] => FFB [Auto]...
Your task give me a challenge. In first look it seems easy. Next near impossible. And at end (using forbidden arts) I solve it! UB = Upper Border LB = Lower Border X = Custom parameter Return Values of Boolean Device (Input Value) IF(A>B) C=A-B IF(A<B) C=B-A IF(A=B) C=1 IF(A!=B) C=0 Math Model for Range Control of value X IF(X<UB)AND(X>LB) THEN vJoy.X = X Transform IF(X<UB) Y = UB - X IF(X>LB) .... IF(X-UB>LB-UB) ... IF(UB-X<UB-LB) ... IF(Y<UB-LB) Z = UB - LB - Y = UB - LB - UB + X = X - LB IF(X>0)...
Your task give me a challenge. In first look it seems easy. Next near impossible. And at end (using forbidden arts) I solve it! UB = Upper Border LB = Lower Border X = Custom parameter Return Values of Boolean Device (Input Value) IF(A>B) C=A-B IF(A<B) C=B-A IF(A=B) C=1 IF(A!=B) C=0 Math Model for Range Control of value X IF(X<UB)AND(X>LB) THEN vJoy.X = X Transform IF(X<UB) Y = UB - X IF(X>LB) .... IF(X-UB>LB-UB) ... IF(UB-X<UB-LB) ... IF(Y<UB-LB) Z="UB" -="" LB="" -="" Y="UB" -="" LB="" -="" UB=""...
Your task give me a challenge. In first look it seems easy. Next near impossible. And at end (using forbidden arts) I solve it! UB = Upper Border LB = Lower Border X = Custom parameter Return Values of Boolean Device (Input Value) IF(A>B) C=A-B IF(A<B) C=B-A IF(A=B) C=1 IF(A!=B) C=0 Math Model for Range Control of value X IF(X<UB)AND(X>LB) THEN vJoy.X = X Transform IF(X<UB) Y="UB" -="" X="" IF(X="">LB) .... IF(X-UB>LB-UB) ... IF(UB-X<UB-LB) ...="" IF(Y<UB-LB)="" Z="UB" -="" LB="" -="" Y="UB" -=""...
1) NetJoy support up to 255 devices. COMPUTER-CLIENT 1 Keyboard Key Event => NetJoyOutput 1 Button Event COMPUTER-CLIENT 2 Keyboard Key Event => NetJoyOutput 2 Button Event COMPUTER-CLIENT 3 Keyboard Key Event => NetJoyOutput 3 Button Event COMPUTER-CLIENT 4 Keyboard Key Event => NetJoyOutput 4 Button Event COMPUTER-SERVER NetJoyIn 1 Button Event => vXbox1 Button Event NetJoyIn 2 Button Event => vXbox2 Button Event NetJoyIn 3 Button Event => vXbox3 Button Event NetJoyIn 4 Button Event => vXbox4 Button...
1) Yes, some UI elements may working not good as I think (tested only on "standard" UI settings OS Windows XP/7/8/10). May help the keyboard button "Tab" to change active button. 2) "Lock" can be ON/OFF via output device "Program". Way to Lock only needed keys is unknown currently. 3) "NetJoy" Input/Output is internal devices. "NetJoy Input" is "server", "NetJoy Output" is "client". Typical binds: COMPUTER 1: Keyboard Key Event => NetJoyOutput Button Event COMPUTER 2: NetJoyIn Button Event => Virtual...
Good article: https://www.codeproject.com/Articles/716591/Combining-Raw-Input-and-keyboard-Hook-to-selective
There some problems to me. I already tried to write the RAW lock. This possible to make on C++ (not easy), but problematically on C#. Currently, I write on C#. Another way is use special driver HidGuardian: https://github.com/nefarius/ViGEm/tree/master/Sys/HidGuardian. I not very well tested it. Be careful: if something will work incorrect then very possible you will lost all input devices (after restart OS). I plan to add HidGuardian in future updates (with support ViGEm), but not in near time.
I need more information to answer. Can you attach your binds file (or screenshot)? This problem occur just after run (without influence from other software)? Try to use standard binds file "Example_KeyboardMouseToVXbox_00.bnd". Try to use "Raw Input" API for Keyboard. Turn ON option "Enabled Log" in Options (Misc). Reproduce the problem and attach the log file (log.txt).
You need to add bind "Keyboard button release = vJoy button release". I recommend to use "Quick Binding" option in "Bind Manager".
I planning to add FFB support for Virtual Devices. Next update will contain vJoy FFB and DirectInput FFB. After that will add vXbox FFB and XInput FFB. Many works about vJoy / DirectInput FFB close to done. If vXbox FFB (vibration) support will be not hard / long to add, then it will be included in next update.
Probably previous, I don't correct understood your goal. I thinked you need "classic" POV (in my way of think): POV UP = vJoy POV UP; POV UP Release = vJoy POV UP Release; ... POV Release = vJoy POV Release. But probably you need next: POV UP = vJoy CPOV 0; POV UP+RIGHT = vJoy CPOV 4500; POV RIGHT = vJoy CPOV 9000; ... Without any "release" bind. Try to test it in game and "joy.cpl".
May help: 1) You can try use "quick mode" to setup vJoy controls. 2) You can try add binds like "POV to vJoy POV" (POV Up => vJoy CPOV 0; POV Down => vJoy CPOV 18000; POV Release => vJoy CPOV -1). 3) You can test vJoy POV in "joy.cpl" (in cmd write joy.cpl and press enter). Currently, I work on update where you can more easy to setup controls. But it need time for new ideas and tests, since most code need be rewritten.
I not sure what you want, but I think you need try use "Continuous Pov" instead "Axis". if "Continuous Pov" value was greater that MAX, then program auto set value = value - MAX.
Currently (included since 1.0.3.0 version) you can use: Command line list: /vxbox1 - plug in vXbox Device #1 /vxbox2 - plug in vXbox Device #2 /vxbox3 - plug in vXbox Device #3 /vxbox4 - plug in vXbox Device #4 /minimized - minimized main form /loadcontrols <FileName> - load controls from custom file (in folder "Binds") /loadoptions <FileName> - load options from custom file (in Root folder) /installbus - install virtual bus for vXbox Devices /removebus - remove virtual bus /capture - begin input...
Thank for feedback. Using command line to change binds is good idea. I try add command...