Interesting features added here layer switching based on applications and a bit more.
Would be nice to have.
Interesting features added here layer switching based on applications and a bit more.
Would be nice to have.
It’s already possible to send commands to a UHK. We currently do not have a cross-platform tool to identify the foreground window (application), and execute UHK commands based on that. So, layer-switching based on the active application is not there yet. But it’s doable in principle, someone could write a tool, even a platform-specific one (e.g. Windows-only, Linux-only etc.)
What’s new in the ZSA solution is a notification towards the host about which layer is currently active on the keyboard. That would be nice, sort of a “live mode” in Agent, and Agent would display the current keymap and layer as you type on your UHK. Then, a mini-mode where Agent removes all the menus and side panels, and only visualises the keyboard itself.
Cool idea!
The UHK already exposes the active layer via USB. We’ll do the rest via:
I know executing commands over USB but I have no idea how to read the current keymap and layer. Is the Agent ↔ UHK interface only described in the firmware source code? Am I heading in the right direction by looking at UsbCommandId_GetDeviceState = 0x09
?
Yes, GetDeviceState is the relevant USB command:
$ packages/usb/get-device-state.ts
isEepromBusy: no | isMacroStatusDirty: no | areHalvesMerged: no | leftKeyboardHalfSlot:LeftKeyboardHalf | leftModuleSlot:KeyClusterLeft | rightModuleSlot:TrackpointRight | layer:base
The USB protocol is undocumented, so you have to read the source.
Some fairly old tickets there