FINALLY some progress, it’s alive:
I restarted from @mingle’s code (thanks! experimental as it may be, it saved me hours of effort), and customized it for my setup.
I added the management of the joystick Z-hat/button, it now acts as a safety enable for joystick movements (because eventually my joystick box will be located at the front right of the enclosure, and I wouldn’t want the machine to start moving if I hit the joystick when leaning into the enclosure)
The buttons on the right are used for X/Y/Z single step, and the top three buttons allow to select between 1mm, 0.1mm, and 0.05mm steps (which is all I ever use in the CNCjs interface anyway)
I’ll probably tune the delays and steps to smooth the speed variations (which can be heard in the somewhat funky jogging noises), but I think I’m hooked to the joystick as a jogging device. It feels much more natural to me than all keyboard-based jogging solutions I experimented with previously. And since I moved from the SO3 to the XXL, the importance of being able to jog quickly to any location matters a lot now.
Note1: the 3D-printed case for the small OLED display was only supposed to have it at an angle for better visibility, somehow it turned out looking like a mini iMac or something, which looks cool so I did not bother printing a less bulky version.
Note2: I used an Arduino Leonardo since I initially wanted to emulate a keyboard, but at the end of the day a plain old UART (that can run on any Arduino) like @mingle did is much better, as one does not have to care about window focus then, the CNCjs pendant just runs and listens to anything coming on a specific COM port, regardless of the currently active window.
Note3: still, the Leonardo will come in handy if I want to use this setup to control Carbide Motion via keyboard shortcuts emulation. Right now it’s a CNCjs-only solution.