feat(hid): rebind POP Keys' dedicated emoji keys - #726
Conversation
Greptile SummaryThe PR makes four dedicated POP Keys emoji controls configurable through the existing HID++ keyboard-capture path.
Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains.
|
| Filename | Overview |
|---|---|
| crates/openlogi-core/src/binding/button.rs | Adds four append-only POP Keys identifiers, labels, and keyboard-key entries without changing existing serialized names. |
| crates/openlogi-core/src/binding/defaults.rs | Gives the new keyboard controls inert defaults so unbound keys retain native firmware behavior. |
| crates/openlogi-device/src/session/keyboard.rs | Maps the four dedicated emoji CIDs into the existing generic keyboard diversion and capture flow. |
| docs/config.example.toml | Documents configuring a dedicated POP Keys emoji control. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart LR
A[Device TOML binding] --> B[ButtonId emoji variant]
B --> C[CID mapping 0x0104–0x0107]
C --> D[HID++ 0x1b04 diversion]
D --> E[Captured button press]
E --> F[Configured action dispatch]
Reviews (4): Last reviewed commit: "feat(hid): rebind POP Keys' dedicated em..." | Re-trigger Greptile
033c559 to
fac0d46
Compare
|
@RafRaf Cool idea, does it make sense for those emoji to be set by the user instead of hardcoding the main ones? |
|
@davidbudnick The KeyEmoji* names come from Logitech's own control catalog - each is a fixed HID++ control ID with an official name (e.g. "Loudly crying face"), not something I made up. :) That name's tied to the physical switch, not the keycap sitting on top of it, so swapping caps doesn't change which control you're binding - you can still assign it whatever you want. Here's a couple of spares in place:
|
Neat! Just double checking thanks for the extra info! |
Four of POP Keys' five dedicated emoji keys (heart-eyes, crying, smiley, tears) had no ButtonId at all, so they couldn't be rebound anywhere. Add them as KeyEmoji* variants, wire their CIDs (0x104-0x107) into the keyboard capture session's 0x1b04 diversion table, and default them to Action::None like every other keyboard key. Config-only for now, matching the existing 9 F-row keys: the GUI's Keys tab doesn't render any keyboard key of this kind yet.
b5c4a7c to
9d365b3
Compare
|
Hey @AprilNEA! Rebased onto master since we had a conflict with the wheel-tilt PR — should be clean now. Could you approve / merge when you get a chance? |



I recently picked up a POP Keys keyboard and wanted to remap the emoji row the same way I remap everything else on my Logi gear (I've actually swapped in some of the spare keycaps it ships with, so what's printed on my keys right now isn't even the stock heart-eyes/crying/smiley/tears set — more on why that doesn't matter below). Turns out OpenLogi has no way to bind those keys at all — 4 of POP Keys' 5 dedicated emoji keys aren't modeled as a
ButtonIdanywhere. Only the "open emoji panel" key was already covered (KeyEmoji).This PR adds the missing four as new
ButtonIdvariants (KeyEmojiHeartEyes,KeyEmojiCrying,KeyEmojiSmiley,KeyEmojiTears) and wires their CIDs (0x104–0x107) into the0x1b04diversion table, so they're bindable inconfig.tomlthe same wayKeySearch/KeyDictation/etc. already are. The naming/binding is by HID++ control ID, not by whatever's printed on the cap — since POP Keys keycaps are swappable, that's the only thing that actually stays stable per key.I only did the config-side plumbing, not a dashboard entry — figured this counts as a small fix rather than a new feature. The Keys tab doesn't render this category of key at all yet (not even the existing 9), so a proper POP Keys render in the dashboard felt like its own, bigger effort and probably deserves a separate PR.
Tested locally on macOS —
fmt/clippy/test --workspaceall pass, and I confirmed live on my own POP Keys (spare caps and all) that it actually works:Happy to adjust naming or scope if you'd rather it done differently.