[OneDev #36] peripherals: validate trimmed minimal awaken as generic, publish-safe G915X enable command #4

Open
opened 2026-05-24 04:46:35 +00:00 by joseph · 0 comments
Owner

Imported from OneDev issue #36 (id 35561)
Original project: internal-joseph
Original state: Open
Original submitterId: 5
Original submitDate: 2026-05-05T21:33:16.835+00:00
Original lastActivity: {'date': '2026-05-05T21:33:16.835+00:00', 'description': 'opened', 'userId': 5}

Original fields:

  • Type: New Feature
  • Priority: Normal
  • Assignees: None

Context

The Frida-captured 437-write replay (g915x_open_writes_frida.txt) puts the keyboard into HID++ event-emit mode. It's tied to OUR keyboard:

  • 0x8101 fn=2/3/9 page writes for sectors 0x65, 0x02 carry device-specific CRC bytes in fn=9 params[7:11] that other users' keyboards will reject (proven empirically: patching the bytes triggers the keyboard's preset-wave fallback)
  • The actual color/binding payload bytes also reflect our profile state (G-key bindings, default colors)

Publishing the full replay as a public "awaken your G915X without G HUB" tool would either fail on others' boards or silently wipe their stored profile to ours.

What's actually needed for event-emit mode

Per the Ghidra v1-v4 walks, FKC (0x1B05) activation only requires:

  • Feature index lookups (generic — read-only)
  • 0x1B05 fn=0/1/2/4 — getCapabilities, getFKCState, getCIDInfo, getSetUpCookie
  • 0x1B05 fn=1 setFKCState(true) (if cookie was set)
  • 0x1B05 fn=3 modifier-state-sync (02 00 00)

None of these write to 0x8101. The 31-write CRITICAL minimal trim candidate (g915x_open_writes_minimal.txt from issue #27) was specifically built to exclude the user-specific 0x8101 page writes.

Done when

  • Hardware-validate the 31-write minimal candidate puts the G915X into event-emit mode (the Phase 3.6 work in #27)
  • Confirm the minimal candidate contains ZERO 0x8101 fn=2/3/9 page writes (only fn=0/8/12 reads or no 0x8101 at all)
  • Strip any remaining device-specific bytes (cookie values, randomized session bytes)
  • Document a "generic awaken" recipe in peripherals/ README distinguishing it from the user-specific full replay
  • Test on a second G915X if available (Joseph has one; ask around for a second)
  • internal-joseph#27 — replay trim work (this issue depends on its hardware validation)
  • internal-joseph#28 — closed; G-key colors don't need 0x8101 anymore so the publishable awaken can avoid that whole topic
Imported from OneDev issue #36 (id 35561) Original project: internal-joseph Original state: Open Original submitterId: 5 Original submitDate: 2026-05-05T21:33:16.835+00:00 Original lastActivity: {'date': '2026-05-05T21:33:16.835+00:00', 'description': 'opened', 'userId': 5} Original fields: - Type: New Feature - Priority: Normal - Assignees: None ## Context The Frida-captured 437-write replay (`g915x_open_writes_frida.txt`) puts the keyboard into HID++ event-emit mode. It's tied to OUR keyboard: - 0x8101 fn=2/3/9 page writes for sectors 0x65, 0x02 carry **device-specific CRC bytes** in fn=9 params[7:11] that other users' keyboards will reject (proven empirically: patching the bytes triggers the keyboard's preset-wave fallback) - The actual color/binding payload bytes also reflect our profile state (G-key bindings, default colors) Publishing the full replay as a public "awaken your G915X without G HUB" tool would either fail on others' boards or silently wipe their stored profile to ours. ## What's actually needed for event-emit mode Per the Ghidra v1-v4 walks, FKC (0x1B05) activation only requires: - Feature index lookups (generic — read-only) - 0x1B05 fn=0/1/2/4 — getCapabilities, getFKCState, getCIDInfo, getSetUpCookie - 0x1B05 fn=1 setFKCState(true) (if cookie was set) - 0x1B05 fn=3 modifier-state-sync (`02 00 00`) None of these write to 0x8101. The 31-write CRITICAL minimal trim candidate (`g915x_open_writes_minimal.txt` from issue #27) was specifically built to exclude the user-specific 0x8101 page writes. ## Done when - [ ] Hardware-validate the 31-write minimal candidate puts the G915X into event-emit mode (the Phase 3.6 work in #27) - [ ] Confirm the minimal candidate contains ZERO 0x8101 fn=2/3/9 page writes (only fn=0/8/12 reads or no 0x8101 at all) - [ ] Strip any remaining device-specific bytes (cookie values, randomized session bytes) - [ ] Document a "generic awaken" recipe in `peripherals/` README distinguishing it from the user-specific full replay - [ ] Test on a second G915X if available (Joseph has one; ask around for a second) ## Related - internal-joseph#27 — replay trim work (this issue depends on its hardware validation) - internal-joseph#28 — closed; G-key colors don't need 0x8101 anymore so the publishable awaken can avoid that whole topic
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
joseph/internal-joseph#4
No description provided.