Add support for StreamDeck Plus XL and update product IDs - #170
Add support for StreamDeck Plus XL and update product IDs#170mdlopezme wants to merge 2 commits into
Conversation
- New StreamDeckPlusXL device class: 36 keys (9x4), 6 dials, 1200x100 touchscreen - Key resolution 112x112 JPEG with 90° rotation (portrait LCD) - Touchscreen image rotation handling for internal portrait frame - Serial number at report 0x06 offset 2, firmware at 0x05 offset 6 - Registered PID 0x00c6 in ProductIDs and DeviceManager Based on work by Moises Lopez (PR abcminiuser#170), adapted for StreamController's fork. Tested on hardware: Elgato Stream Deck + XL, firmware 1.0.2.2
|
Thanks for the patch, and sorry I've taken so long to look at it. Most of this looks fine - but I think it would be preferable to keep PIL out of the core Streamdeck classes, and leave it as optional helper support functions/modules as well - in theory, it should be possilble to use the Streamdeck interfaces with any image library. That means we should expose the rotations needed by the caller, but not perform the actual rotation within the Streamdeck class. |
|
Locally merged in 1e335dd. |
|
I've updated the device code in ad0b921 to remove the PIL dependency from the core of the library - I've tried to keep it only in the optional image helpers, so people can choose to swap in an alternative image library if they choose to. If you have time, please try the latest master on your HW to ensure I haven't broken anything. |
Summary
Implements full device driver support for the Elgato Stream Deck + XL (USB PID
0x00c6). The device was reverse-engineered via HID probing on the physical hardware and all functionality has been verified end-to-end.Hardware Specs (discovered via reverse engineering)
0x00c6Key technical findings
KEY_ROTATION = 90(PIL rotates 90 CCW before sending). Touchscreen images are rotated manually inset_touchscreen_imagewithexpand=Truebecause the sharedPILHelper._to_native_formatusesrotate()withoutexpand=True, which crops non-square images.(x, y, w, h)are swapped to(y, x, h, w)in the 0x0c header.Changes
Added
src/StreamDeck/Devices/StreamDeckPlusXL.py— Full driver implementation. Includes all abstract method implementations, HID event parsing, image upload, and touchscreen rotation handling.Test Results
Hardware validation was performed on a physical Stream Deck + XL with 20 interactive checks — all passed.
How to verify with hardware
If you have a Stream Deck + XL, copy the script below and run it. It walks through 20 checks covering keys, dials, touchscreen, brightness, and callbacks — you confirm each step by observing the device.
Hardware validation script — click to expand, save, and run
Test coverage breakdown