Skip to main content

Stream Deck Module 6 Keys

Release History

REVISIONDATE
1.0A02.04.2025

Introduction

The Elgato Stream Deck Module 6 is a USB 2.0–compliant input device engineered for efficient interaction with host systems through the USB HID (Human Interface Device) protocol. It consists of a grid of keys situated atop a single LCD screen, allowing for real-time display of dynamic content and the assignment of custom functions to each key. The device facilitates communication using a proprietary protocol, enabling the transmission of input events, state changes, and feedback to the LCD screen.

This documentation provides a comprehensive overview of the USB HID API for the Elgato Stream Deck 6-key module model, detailing the methods and data structures available for developers. It outlines how to utilize the device's features, including key event reporting, input handling, and control of the LCD for dynamic content display, to create robust applications and enhance interaction with the Stream Deck.


Devices Overview

Summary

NameModelVIDPIDCapabilities
Stream Deck Module 620GAI99010x0FD90x00B86 keys layout

Capabilities & Physical Characteristics

6 Keys Layout

EntityProperty
LCD image320 × 240 px (low DPI)
Key matrix3 x 2
Key image80 × 80 px

Keypad keys Index Layout
Image showing the 6 keys keypad buttons index layout.
Unit Pixel Layout
Image showing the 6 keys keypad buttons index layout.

Data Format

Basic Data Types

Array: A sequence of typed elements.

typename[number-of-elements] for a fixed-length array of typename elements

typename[] for a variable-length array of typename elements

TypeDescription
CHAR, INT8Signed 8-bit integer, ASCII
BYTE, UINT8Unsigned 8-bit integer
INT16Little-endian signed 16-bit integer
UINT16Little-endian unsigned 16-bit integer
INT32Little-endian signed 32-bit integer
UINT32Little-endian unsigned 32-bit integer

RGB Triplet

The RGB Color definition triplet

OffsetTypeNote
+ 0x00UINT8Red color component
+ 0x01UINT8Green color component
+ 0x02UINT8Blue color component

Input Report

Input reports are used to transmit “events” from the device to the host. Essentially, an “event” contains a key press state change. To obtain input reports, the host polls the device using a non-blocking HID READ command. The device returns a fixed 65-byte structure, as outlined below.

OffsetTypeNote
+ 0x00UINT8Report ID
+ 0x01BYTE[]Payload

Output Report

Output reports are used to transmit the bulk of data from the host to the device. They are used to upload images, firmware files, etc. To send an output report, the host uses the HID WRITE command. Each output report has a fixed size of 1024 bytes.

OffsetTypeNote
+ 0x00UINT8Report ID
+ 0x01UINT8Command
+ 0x02BYTE[]Payload

Feature Report

Feature reports are used to set and retrieve arbitrary information from the device, or to trigger commands.

  • To send feature report the host uses HID SEND FEATURE REPORT command.

  • To send feature report and obtain the response the host uses HID GET FEATURE REPORT command.

The Host forms the structure with maximum size of 32 bytes. The remaining space should be zero-padded.

OffsetTypeNote
+ 0x00UINT8Report ID
+ 0x01UINT8Command
+ 0x02BYTE[]Payload

Command Descriptions

Input Reports

To obtain input reports, the host polls unit with HID READ command. If the unit has no "event" pending. HID READ returns TIMEOUT error, therefore the payload isn't defined in this case.


Key press state change

An event is created every time a key state changes. The payload contains an array of bytes, each representing the state of a corresponding key. Therefore the Input Report payload looks as follows:

OffsetTypeNote
+ 0x00Input ReportReport ID: 0x01.
+ 0x01UINT8[64]First 6 bytes used. Each byte is 0x00 (released) or 0x01 (pressed)

Output Reports

Report ID: 0x02.

Used with HID WRITE. Multiple reports may be sent if data exceeds max payload.


Upload Data to Image Memory Bank

This command is used to upload an image file to the unit's temporary storage memory bank, either to display it immediately as a Key image or to enable subsequent commands to operate on it. Since it is not possible to upload the entire data bulk at once, the command supports a splitting mechanism.

Note: The maximum size of an output report is 1024 bytes. Therefore, the image file must be split into chunks defined by the payload size of the output report.

The structure of the Output Report report payload is as follows:

OffsetTypeNote
+ 0x00Output ReportReport ID: 0x02, Command: 0x01
+ 0x02UINT8Chunk Index
+ 0x03UINT8Reserved: 0x00
+ 0x04UINT8Show Image flag
+ 0x05UINT8key Index
+ 0x06BYTE[10]Reserved: fill with 0x00
+ 0x10BYTE[]Chunk Data

Feature Report - Setters

The Report ID of the feature report for setters is defined with unique values. Below, you can find the description of possible Report IDs and commands. To send a feature report, the host uses the HID SEND FEATURE REPORT command.

This command forcibly triggers the display of the boot logo. The Feature Report payload is structured as follows:

OffsetTypeNote
+ 0x00Feature ReportReport ID: 0x0B, Command: 0x63
+ 0x02UINT8Show Boot Logo: 0x00

Set Backlight Brightness

This command sets the LCD backlight brightness. The Feature Report payload is structured as follows:

OffsetTypeNote
+ 0x00Feature ReportReport ID: 0x05, Command: 0x55
+ 0x02UINT80xAA
+ 0x03UINT80xD1
+ 0x04UINT80x01
+ 0x05UINT8Brightness Value

Set Idle Time Before Sleep Mode

This command sets the duration, in seconds, of idling before the unit enters Sleep Mode. The Feature Report payload is structured as follows:

OffsetTypeNote
+ 0x00Feature ReportReport ID: 0x0B, Command: 0xA2
+ 0x02INT32Idle time before entering Sleep Mode in seconds

Note: Set to zero seconds to disable sleep mode.

This command stores a slice of the boot logo from the Image Memory Bank into persistent memory. Each slice corresponds to a key image; therefore, the Stream Deck 6-key module is unable to operate with a full LCD image.

OffsetTypeNote
+ 0x00Feature ReportReport ID: 0x0B, Command: 0x63
+ 0x02UINT8Update Boot Logo: 0x02
+ 0x03UINT8Slice Index

Feature Report - Getters

The Report ID of the feature report for getters is assigned unique values. Below, you can find the description of the possible Report IDs. The Command field is usually ignored. To send a feature report and obtain a response, the host uses the HID GET FEATURE REPORT command.

Get Firmware Version

This command requests the firmware version string of the unit. The Feature Report payload is structured as follows:

OffsetTypeNote
+ 0x00Feature ReportReport ID: see below

The response should be as follows:

OffsetTypeNote
+ 0x00UINT8Report ID: see below
+ 0x01BYTE[4]N/A
+ 0x05UINT8[12]Version String ASCII

Report IDs by firmware type:

Report IDFirmwareNote
0xA0LD
0xA1AP2Primary firmware
0xA2AP1Backup firmware

Get Unit Serial Number

This command requests the unit's serial number string. The Feature Report payload is structured as follows:

OffsetTypeNote
+ 0x00Feature ReportReport ID: 0x03

The response should be as follows:

OffsetTypeNote
+ 0x00UINT8Report ID: 0x03
+ 0x01BYTE[4]N/A
+ 0x05UINT8[DataLength]Serial Number String ASCII

Get Idle time before entering Sleep Mode

This command requests the duration, in seconds, of idling before the unit enters Sleep Mode.

OffsetTypeNote
+ 0x00Feature ReportReport ID: 0xA3

The response should be as follows:

OffsetTypeNote
+ 0x00UINT8Report ID: 0xA3
+ 0x01UINT8Data Length
+ 0x02INT32Duration

The size of a Feature Report is fixed to 32 bytes


Device Setup & Communication

Setup Connection

To bring the unit into operational mode, open it as a USB HID device. Once connected, the unit can provide input events, receive commands to update LCD feedback, and respond to internal configuration adjustments.


Polling Input Controllers

To detect controller state changes, use the Input Report. The host application should periodically poll the unit using a timed HID READ command. If no state change has occurred, the device will return a TIMEOUT error. If a change has occurred, the Input Report will contain the relevant controller data.

tip

The recommended polling interval is 50 ms.


Uploading Images

Key Image

Steps to operate:

  1. Prepare a key image matching the device's specified dimensions
  2. warning

    The image must be rotated 90° clockwise

  3. Export the image as a BMP file.
  4. Use the Upload Data to Image Memory Bank command with the Show Image flag set to 0x01, specifying the key index. This uploads the image to the unit for immediate display.

Full LCD Image

info

The Stream Deck 6-key module does not support uploading a full LCD image in one command.

Instead, use Upload key Image for each LCD slice underneath a key.

Boot Logo Image

info

The Stream Deck 6-key module does not support uploading a single Boot Logo for the entire LCD.

Instead:

  1. Prepare a key image according to device specifications.

  2. warning

    Rotate the image 90° clockwise.

  3. Export the image as a BMP file.

  4. Use Upload Data to Image Memory Bank with the Show Image flag set to 0x00 for the target slice.

  5. Use the Update Boot Logo command to store that slice in the unit's persistent memory.


Closing Connection

To disconnect, simply close the USB HID device connection.

tip

It's recommended to trigger the Show Logo command before closing the connection. This clears active key images and resets the display cleanly.