Configure a pinky (shift button)
-
Hi, my setup is a CH Fighterstick+prothrottle+propedals. I’d like to use button 4 in FS as a shift to duplicate all the buttons. Could you please tell me how to do it?
Thanks. -
That stick has profiling software and you could do it with that but the built-in BMS functionality is a much better option in my opinion. The follow in that way:
There is a button function (called a callback) in BMS called SimHotasPinkyShift which is like the pinky switch except it elevates all of your button numbers by 256 when held and does the normal pinky button function when tapped briefly. It does require a small amount of text editing of the .key file to define the shifted button presses.
The first step would be to make a copy of your .key file for backup purposes and later at each step where you might want to go back to the “last known working one” as you make edits (e.g. splashh1.key, splashh2.key, etc.) . Open your .key file in a text editor like Notepad and find all lines which have the word SimHotasPinkyShift and delete them (1 or 2). Assuming the file does not contain the word SimHotasPinkyShift anywhere, paste in the following line:
SimHotasPinkyShift -1 0 0XFFFFFFFF 0 0 0 1 “STICK: PINKY SWITCH (DX SHIFT)”
Save the .key file and go into BMS setup and find this function in the big keyboard binding table. Highlight it and press the joystick button for the pinky function on your joystick. Save the .key file again and exit BMS.
Open the .key file with Notepad again and notice a new line has been added by BMS at the bottom. It will look something like:
SimHotasPinkyShift 2 -1 -2 0 0x0 0
Don’t worry if the exact numbers are different. What this is saying is that when you press the #3 joystick button (0 is one, 1 is two, 2 is three, etc.) it will trigger the callback SimHotasPinkyShift. That’s correct but there’s a small issue. When we hold button #3 every joystick button ID will be increased including button #3 which will become button #259. To be able to stop triggering the callback we need to also bind button #259 to that function. This is done simply by making a copy of the first line and editing the number like this:
SimHotasPinkyShift 2 -1 -2 0 0x0 0
SimHotasPinkyShift 258 -1 -2 0 0x0 0When button 3 is held it triggers the callback to function and when button 259 is released the callback stops functioning. Despite having two different numerical IDs it is the same button physically. This is the groundwork for setting up pinky shifting and if you understand this you are 90% of the way to mastery of the concept. Next is the process of making a shifted bind which is very similar to what we did above. For example let’s say that I want TMS Up to be the unshifted function and CMS Up to be the shifted function. First we find the DX binding for the unshifted function in the .key file:
SimTMSUp 6 -1 -2 0 0x0 0
This means that button #7 will trigger SimTMSUp. When the pinky shift button is held button #7 will become button #263. We cannot bind button #263 within the BMS program so we do it with a text edit instead. The process is simple, copy the line for the unshifted function and modify both the callback and the button ID (+256). The result is like so:
SimTMSUp 6 -1 -2 0 0x0 0
SimCMSUp 262 -1 -2 0 0x0 0The rest of the labor is doing this process for all of the functions you wish to assign to the shifted ID range.
-
I also like to use the .Cfg edit of:
set g_nHotasShiftQuickPressTimeLimit XXXThe XXX is time in milliseconds for it to take to act as a shift. I have mine set to 333 for 1/3 of a second. For me, it allows the shift button to still act as the radar expand (or whatever you want to program it to) if I just tap it.
-
Many many thanks for your answer. I have to read slowly across the whole explanation and configure my HOTAS. I prefer to do it from BMS instead of CH Control Manager as you said.
-
Many many thanks for your answer. I have to read slowly across the whole explanation and configure my HOTAS. I prefer to do it from BMS instead of CH Control Manager as you said.
Wise choice Pal.