From 9730cd2e5a1137b28c62508de80ce28d7d7681bb Mon Sep 17 00:00:00 2001 From: callmepain Date: Wed, 11 Mar 2026 12:07:27 +0100 Subject: [PATCH] Fix Stream Deck Plus dial TURN events lost with HIDAPI 0.15.0 (libusb) The Stream Deck Plus USB HID report descriptor declares a 512-byte input report. Reading only 14 bytes worked with older HIDAPI versions, but HIDAPI 0.15.0 using the libusb backend silently drops reports when the requested size is smaller than the descriptor's report size. This causes dial TURN events to never arrive, while button presses (which appear in shorter reports) still work. Capturing raw HID data confirms 512-byte reads return all events correctly, whereas 14-byte reads return no data for dial rotations. Add a class constant _INPUT_REPORT_LEN = 512 (matching the HID report descriptor) and use it in _read_control_states() instead of the hard-coded 14-byte read. Co-Authored-By: Claude Opus 4.6 --- src/StreamDeck/Devices/StreamDeckPlus.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/StreamDeck/Devices/StreamDeckPlus.py b/src/StreamDeck/Devices/StreamDeckPlus.py index eb5c6683..8c9b0d72 100644 --- a/src/StreamDeck/Devices/StreamDeckPlus.py +++ b/src/StreamDeck/Devices/StreamDeckPlus.py @@ -337,8 +337,10 @@ def reset(self): payload[0:2] = [0x03, 0x02] self.device.write_feature(payload) + _INPUT_REPORT_LEN = 512 + def _read_control_states(self): - states = self.device.read(14) + states = self.device.read(self._INPUT_REPORT_LEN) if states is None: return None