streamdeck

package module
v0.2.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 14, 2023 License: MIT Imports: 18 Imported by: 0

README

streamdeck

Go Report Card Go Reference MIT licensed

streamdeck buttons streamdeck slide show

streamdeck is a library for interfacing with the Elgato/Corsair Stream Deck

This library is written in the programing language Go.

Note

This project is a golang API for the Elgato/Corsair Stream Deck. This library unleashes the power of the StreamDeck. It allows you to completely customize the content of the device, without the need of the OEM's software.

License

streamdeck is published under the permissive MIT license.

Dependencies

There are a few go libraries which are needed at compile time. streamdeck does not have any runtime dependencies.

CGO

This version requires no CGO, but will only work on Linux (think raspberry pi, etc).

Supported Operating Systems

The library should work on Linux only.

streamdeck works well on SoC boards like the Raspberry / Orange / Banana Pis.

Linux Device rules

On Linux you might have to create an udev rule, to access the streamdeck.

sudo vim /etc/udev/rules.d/99-streamdeck.rules

SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0060", MODE="0664", GROUP="plugdev"

After saving the udev rule, unplug and plug the streamdeck again into the USB port. For the rule above, your user must be a member of the plugdev group.

Documentation

The auto generated documentation can be found at godoc.org

Examples

Please checkout the dedicated repository streamdeck-examples for examples.

My personal library of streamdeck elements / buttons can be found in the streamdeck-buttons repository.

Credits

This project would not have been possible without the work of Alex Van Camp. In particular his notes of the StreamDeck's protocol were very helpful. Alex has provided a reference implementation in Javascript / Node.js.

This was forked from the version by dh1tw and then modified in various ways.

Documentation

Index

Constants

View Source
const VendorID = 0x0fd9

VendorID is the USB VendorID assigned to Elgato (0x0fd9)

Variables

This section is empty.

Functions

This section is empty.

Types

type BtnEvent

type BtnEvent func(btnIndex int, newBtnState BtnState)

BtnEvent is a callback which gets executed when the state of a button changes, so whenever it gets pressed or released.

type BtnState

type BtnState int

BtnState is a type representing the button state.

const (
	// BtnPressed button pressed
	BtnPressed BtnState = iota
	// BtnReleased button released
	BtnReleased
)

func (BtnState) String

func (i BtnState) String() string

type Page

type Page interface {
	Set(btnIndex int, state BtnState) Page
	Parent() Page
	Draw()
	SetActive(bool)
}

Page contains the configuration of one particular page of buttons. Pages can be nested to an arbitrary depth.

type ReadErrorCb

type ReadErrorCb func(err error)

ReadErrorCb is a callback which gets executed in case reading from the Stream Deck fails (e.g. the cable get's disconnected).

type StreamDeck

type StreamDeck struct {
	sync.Mutex

	Info *StreamdeckDevice
	// contains filtered or unexported fields
}

StreamDeck is the object representing the Elgato Stream Deck.

func NewStreamDeck

func NewStreamDeck(serial ...string) (*StreamDeck, error)

NewStreamDeck is the constructor of the StreamDeck object. If several StreamDecks are connected to this PC, the Streamdeck can be selected by supplying the optional serial number of the Device. In the examples folder there is a small program which enumerates all available Stream Decks. If no serial number is supplied, the first StreamDeck found will be selected.

func (*StreamDeck) ClearAllBtns

func (sd *StreamDeck) ClearAllBtns()

ClearAllBtns fills all keys with the color black

func (*StreamDeck) ClearBtn

func (sd *StreamDeck) ClearBtn(btnIndex int) error

ClearBtn fills a particular key with the color black

func (*StreamDeck) Close

func (sd *StreamDeck) Close() error

Close the connection to the Elgato Stream Deck

func (*StreamDeck) FillColor

func (sd *StreamDeck) FillColor(btnIndex, r, g, b int) error

FillColor fills the given button with a solid color.

func (*StreamDeck) FillImage

func (sd *StreamDeck) FillImage(btnIndex int, img image.Image) error

FillImage fills the given key with an image. For best performance, provide the image in the size of ?x? pixels. Otherwise it will be automatically resized.

func (*StreamDeck) FillImageFromFile

func (sd *StreamDeck) FillImageFromFile(keyIndex int, path string) error

FillImageFromFile fills the given key with an image from a file.

func (*StreamDeck) FillPanel

func (sd *StreamDeck) FillPanel(img image.Image) error

FillPanel fills the whole panel witn an image. The image is scaled to fit and then center-cropped (if necessary). The native picture size is 360px x 216px.

func (*StreamDeck) FillPanelFromFile

func (sd *StreamDeck) FillPanelFromFile(path string) error

FillPanelFromFile fills the entire panel with an image from a file.

func (*StreamDeck) GetFirmwareVersion

func (sd *StreamDeck) GetFirmwareVersion() (string, error)

func (*StreamDeck) GetSerialNumber

func (sd *StreamDeck) GetSerialNumber() (string, error)

func (*StreamDeck) Reset

func (sd *StreamDeck) Reset() error

func (*StreamDeck) SetBrightness

func (sd *StreamDeck) SetBrightness(pc uint8) error

func (*StreamDeck) SetBtnEventCb

func (sd *StreamDeck) SetBtnEventCb(ev BtnEvent)

SetBtnEventCb sets the BtnEvent callback which get's executed whenever a Button event (pressed/released) occures.

func (*StreamDeck) WriteText

func (sd *StreamDeck) WriteText(btnIndex int, textBtn TextButton) error

WriteText can write several lines of Text to a button. It is up to the user to ensure that the lines fit properly on the button.

type StreamdeckDevice

type StreamdeckDevice struct {
	ProductID        uint16
	Name             string
	NumButtons       int
	ButtonSize       int
	StreamBuffer     int
	Spacer           int
	NumButtonColumns int
	NumButtonRows    int
}

func (*StreamdeckDevice) PanelHeight

func (dev *StreamdeckDevice) PanelHeight() int

func (*StreamdeckDevice) PanelWidth

func (dev *StreamdeckDevice) PanelWidth() int

type TextButton

type TextButton struct {
	Lines   []TextLine
	BgColor color.Color
}

TextButton holds the lines to be written to a button and the desired Background color.

type TextLine

type TextLine struct {
	Text      string
	PosX      int
	PosY      int
	Font      *truetype.Font
	FontSize  float64
	FontColor color.Color
}

TextLine holds the content of one text line.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL