ZSA features - interesting

Interesting features added here layer switching based on applications and a bit more.

Would be nice to have.

2 Likes

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!

2 Likes

The UHK already exposes the active layer via USB. We’ll do the rest via:

1 Like

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?

1 Like

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 :slight_smile: