Honeycomb Echo trim wheel issue/fix
Hello, I recently picked up a honeycomb echo controller to play DCS while on the go. I was satisfied with the controller till I tried binding the trim wheel. I found that the trim wheel was unpredictable and often scrolled seemingly random amounts. After further inspection and troubleshooting I found that the controller was outputting 4 times super quickly per physical detent and also sometimes outputs twice in between the detents. I am not sure if this is fixable with some sort of firmware update or not so I took matter into my own hands as it seems to be an issue that some other people have and not just a faulty controller.
I used a free program called autohotkey to write a script that debounces the trim wheel and rebinds the denounced output to a mouse scroll for you to bind in your program of choice instead of the trim wheel.
This is not an elegant or ideal solution but I was able to make the trim wheel usable for my use case. It is likely you will have to play with the configuration of the script to better match your use case or control responsiveness preference.
Step 1: download autohotkey v2
Step 2: In autohotkey create a new blank script named debounce
Step 3: open the script you just created with a text editor of your choosing. Notepad will suffice.
Step 4: copy and paste this text into the file
#Requires AutoHotkey v2.0
Persistent
; =========================
; CONFIGURATION SECTION
; =========================
ControllerNumber := 1 ; which controller to use
ButtonDown := 24 ; button for scroll down
ButtonUp := 23 ; button for scroll up
ScrollLockTime := 200 ; ms between opposite directions
DebounceTime := 90 ; ms between same-button triggers
ScrollAmount := 3 ; scroll steps per press
PollRate := 15 ; timer speed (lower = faster)
; =========================
; SCRIPT START
; =========================
SetTimer(CheckButtons, PollRate)
lastStateDown := false
lastStateUp := false
lastTriggerDown := 0
lastTriggerUp := 0
lastScrollTime := 0
lastScrollDirection := "" ; "up" or "down"
CheckButtons() {
global ControllerNumber, ButtonDown, ButtonUp
global lastStateDown, lastStateUp
global lastTriggerDown, lastTriggerUp
global lastScrollTime, lastScrollDirection
global ScrollLockTime, DebounceTime, ScrollAmount
now := A_TickCount
; Build key names dynamically
keyDown := ControllerNumber "Joy" ButtonDown
keyUp := ControllerNumber "Joy" ButtonUp
; Scroll Down
currentDown := GetKeyState(keyDown)
if (currentDown && !lastStateDown) {
canScroll := (now - lastTriggerDown > DebounceTime)
if (lastScrollDirection = "up")
canScroll := canScroll && (now - lastScrollTime > ScrollLockTime)
if (canScroll) {
lastTriggerDown := now
lastScrollTime := now
lastScrollDirection := "down"
Loop ScrollAmount
Click("WheelDown")
}
}
lastStateDown := currentDown
; Scroll Up
currentUp := GetKeyState(keyUp)
if (currentUp && !lastStateUp) {
canScroll := (now - lastTriggerUp > DebounceTime)
if (lastScrollDirection = "down")
canScroll := canScroll && (now - lastScrollTime > ScrollLockTime)
if (canScroll) {
lastTriggerUp := now
lastScrollTime := now
lastScrollDirection := "up"
Loop ScrollAmount
Click("WheelUp")
}
}
lastStateUp := currentUp
}
Step 5: save the file and double click the file to run the script.
Step 6: Use an application that you can scroll up and down on to test. If nothing is scrolling then you probably need to change the controller number in the script. You can make adjustments in the script configuration section to change how the wheel outputs. Debounce time and scroll lock time have the most effect.
Step 7: rebind whatever you’d like to use the trim wheel on in whatever sim you are using to mouse scroll up and mouse scroll down respectively.
Hopefully this helps if you’re encountering the same issues as me.