[PR #314] [MERGED] Fix dropped lizard key/mouse reports; restore pad haptics in pure lizard #280

Closed
opened 2026-10-22 05:08:40 +00:00 by roman · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/safijari/openpuck/pull/314
Author: @safijari
Created: 10/14/2026
Status: ✅ Merged
Merged: 10/14/2026
Merged by: @safijari

Base: main ← Head: fix-lizard-dropped-reports


📝 Commits (2)

  • f8b6ecf Queue lizard HID reports through usbTxHid so key edges aren't dropped
  • a170b47 Re-enable pad haptics layer on connect in pure lizard mode

📊 Changes

2 files changed (+19 additions, -16 deletions)

View changed files

📝 OpenPuck/haptics.cpp (+7 -3)
📝 OpenPuck/mode_lizard.cpp (+12 -13)

📄 Description

Dropped inputs in pure lizard mode

`rfLizard` sent mouse, consumer and keyboard reports straight to `hid[0]`, each guarded by `ready()`. They share one endpoint that stays busy until the host polls, so the second report in a cycle was dropped while the shadow state (`pmod`/`pkc`/`pmbtn`/`prevCC`) had already advanced. Key edges were lost whenever they landed in the same cycle as cursor motion or a mouse-button change. All four send sites (including `rfLizardRelease`) now go through `usbTxHid`, which orders reports and paces them to the host poll, and keeps lizard off the unprotected direct-send path described in `usb_tx.cpp`.

Pad haptics in pure lizard

Puck modes never steer id9, so in `MODE_LIZARD` nothing re-enabled the controller's autonomous pad layer if an earlier session left id9=0 (trackpad ticks silent). In pure lizard only, `hapticTask` now lands id9=1 once per connect. Other puck modes are unchanged, so Steam keeps control of haptics. The root cause of the silent ticks is a hypothesis (stale controller state); not confirmed.

Testing: `make check` and `make build` pass; flashed. Input skips confirmed fixed on hardware; haptics change not yet confirmed.

🤖 Generated with Claude Code


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/safijari/openpuck/pull/314 **Author:** [@safijari](https://github.com/safijari) **Created:** 10/14/2026 **Status:** ✅ Merged **Merged:** 10/14/2026 **Merged by:** [@safijari](https://github.com/safijari) **Base:** `main` ← **Head:** `fix-lizard-dropped-reports` --- ### 📝 Commits (2) - [`f8b6ecf`](https://github.com/safijari/openpuck/commit/f8b6ecfd56ea85ccc3eab02a8610d2f2e323d9bd) Queue lizard HID reports through usbTxHid so key edges aren't dropped - [`a170b47`](https://github.com/safijari/openpuck/commit/a170b47a7034af98c3a4de56edb5776e76fb4560) Re-enable pad haptics layer on connect in pure lizard mode ### 📊 Changes **2 files changed** (+19 additions, -16 deletions) <details> <summary>View changed files</summary> 📝 `OpenPuck/haptics.cpp` (+7 -3) 📝 `OpenPuck/mode_lizard.cpp` (+12 -13) </details> ### 📄 Description **Dropped inputs in pure lizard mode** \`rfLizard\` sent mouse, consumer and keyboard reports straight to \`hid[0]\`, each guarded by \`ready()\`. They share one endpoint that stays busy until the host polls, so the second report in a cycle was dropped while the shadow state (\`pmod\`/\`pkc\`/\`pmbtn\`/\`prevCC\`) had already advanced. Key edges were lost whenever they landed in the same cycle as cursor motion or a mouse-button change. All four send sites (including \`rfLizardRelease\`) now go through \`usbTxHid\`, which orders reports and paces them to the host poll, and keeps lizard off the unprotected direct-send path described in \`usb_tx.cpp\`. **Pad haptics in pure lizard** Puck modes never steer id9, so in \`MODE_LIZARD\` nothing re-enabled the controller's autonomous pad layer if an earlier session left id9=0 (trackpad ticks silent). In pure lizard only, \`hapticTask\` now lands id9=1 once per connect. Other puck modes are unchanged, so Steam keeps control of haptics. The root cause of the silent ticks is a hypothesis (stale controller state); not confirmed. **Testing:** \`make check\` and \`make build\` pass; flashed. Input skips confirmed fixed on hardware; haptics change not yet confirmed. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
roman 2026-10-22 05:08:40 +00:00
Sign in to join this conversation.
No labels
pull-request
wontfix
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
safijari/openpuck#280
No description provided.