Skip to content

Commit b28133d

Browse files
committed
Merge branch 'master' of github:magicmonkey/go-streamdeck
2 parents db96982 + 9aa7513 commit b28133d

File tree

4 files changed

+95
-11
lines changed

4 files changed

+95
-11
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0060", MODE:="666"
2727
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0063", MODE:="666"
2828
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006c", MODE:="666"
2929
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006d", MODE:="666"
30+
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0080", MODE:="666"
3031
```
3132

3233
## Usage

comms.go

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ func (d *Device) Close() {
119119

120120
// SetBrightness sets the button brightness
121121
// pct is an integer between 0-100
122-
func (d *Device) SetBrightness(pct int) {
122+
func (d *Device) SetBrightness(pct int) error {
123123
if pct < 0 {
124124
pct = 0
125125
}
@@ -129,15 +129,33 @@ func (d *Device) SetBrightness(pct int) {
129129

130130
preamble := d.deviceType.brightnessPacket
131131
payload := append(preamble, byte(pct))
132-
d.fd.SendFeatureReport(payload)
132+
_, err := d.fd.SendFeatureReport(payload)
133+
if err != nil {
134+
return err
135+
}
136+
return nil
137+
}
138+
139+
// GetButtonImageSize returns the size of the images to uploaded to the buttons
140+
func (d* Device) GetButtonImageSize() image.Point {
141+
return d.deviceType.imageSize
142+
}
143+
144+
// GetNumButtonsOnDevice returns the number of button this device has
145+
func (d* Device) GetNumButtonsOnDevice() uint {
146+
return d.deviceType.numberOfButtons
133147
}
134148

135149
// ClearButtons writes a black square to all buttons
136-
func (d *Device) ClearButtons() {
150+
func (d *Device) ClearButtons() error {
137151
numButtons := int(d.deviceType.numberOfButtons)
138152
for i := 0; i < numButtons; i++ {
139-
d.WriteColorToButton(i, color.Black)
153+
err := d.WriteColorToButton(i, color.Black)
154+
if err != nil {
155+
return err
156+
}
140157
}
158+
return nil
141159
}
142160

143161
// WriteColorToButton writes a specified color to the given button
@@ -156,7 +174,10 @@ func (d *Device) WriteImageToButton(btnIndex int, filename string) error {
156174
if err != nil {
157175
return err
158176
}
159-
d.WriteRawImageToButton(btnIndex, img)
177+
err = d.WriteRawImageToButton(btnIndex, img)
178+
if err != nil {
179+
return err
180+
}
160181
return nil
161182
}
162183

@@ -195,9 +216,10 @@ func (d *Device) ButtonPress(f func(int, *Device, error)) {
195216
}
196217

197218
// ResetComms will reset the comms protocol to the StreamDeck; useful if things have gotten de-synced, but it will also reboot the StreamDeck
198-
func (d *Device) ResetComms() {
219+
func (d *Device) ResetComms() error {
199220
payload := d.deviceType.resetPacket
200-
d.fd.SendFeatureReport(payload)
221+
_, err := d.fd.SendFeatureReport(payload)
222+
return err
201223
}
202224

203225
// WriteRawImageToButton takes an `image.Image` and writes it to the given button, after resizing and rotating the image to fit the button (for some reason the StreamDeck screens are all upside down)
@@ -250,7 +272,10 @@ func (d *Device) rawWriteToButton(btnIndex int, rawImage []byte) error {
250272
padding := make([]byte, imageReportLength-len(payload))
251273

252274
thingToSend := append(payload, padding...)
253-
d.fd.Write(thingToSend)
275+
_, err := d.fd.Write(thingToSend)
276+
if err != nil {
277+
return err
278+
}
254279

255280
bytesRemaining = bytesRemaining - thisLength
256281
pageNumber = pageNumber + 1

devices/origmk2.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package devices
2+
3+
import (
4+
"image"
5+
6+
streamdeck "github.com/magicmonkey/go-streamdeck"
7+
)
8+
9+
var (
10+
omk2Name string
11+
omk2ButtonWidth uint
12+
omk2ButtonHeight uint
13+
omk2ImageReportPayloadLength uint
14+
)
15+
16+
// GetImageHeaderOv2 returns the USB comms header for a button image for the XL
17+
func GetImageHeaderOMK2(bytesRemaining uint, btnIndex uint, pageNumber uint) []byte {
18+
thisLength := uint(0)
19+
if ov2ImageReportPayloadLength < bytesRemaining {
20+
thisLength = ov2ImageReportPayloadLength
21+
} else {
22+
thisLength = bytesRemaining
23+
}
24+
header := []byte{'\x02', '\x07', byte(btnIndex)}
25+
if thisLength == bytesRemaining {
26+
header = append(header, '\x01')
27+
} else {
28+
header = append(header, '\x00')
29+
}
30+
31+
header = append(header, byte(thisLength&0xff))
32+
header = append(header, byte(thisLength>>8))
33+
34+
header = append(header, byte(pageNumber&0xff))
35+
header = append(header, byte(pageNumber>>8))
36+
37+
return header
38+
}
39+
40+
func init() {
41+
omk2Name = "Stream Deck MK.2"
42+
omk2ButtonWidth = 72
43+
omk2ButtonHeight = 72
44+
omk2ImageReportPayloadLength = 1024
45+
streamdeck.RegisterDevicetype(
46+
omk2Name, // Name
47+
image.Point{X: int(omk2ButtonWidth), Y: int(omk2ButtonHeight)}, // Width/height of a button
48+
0x80, // USB productID
49+
resetPacket32(), // Reset packet
50+
15, // Number of buttons
51+
3, // Number of rows
52+
5, // Number of columns
53+
brightnessPacket32(), // Set brightness packet preamble
54+
4, // Button read offset
55+
"JPEG", // Image format
56+
omk2ImageReportPayloadLength, // Amount of image payload allowed per USB packet
57+
GetImageHeaderOMK2, // Function to get the comms image header
58+
)
59+
}

image.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func resizeAndRotate(img image.Image, width, height int, devname string) image.I
2525

2626
func deviceSpecifics(devName string, width, height int) (*gift.GIFT, error) {
2727
switch devName {
28-
case "Streamdeck XL", "Streamdeck (original v2)":
28+
case "Streamdeck XL", "Streamdeck (original v2)", "Stream Deck MK.2":
2929
return gift.New(
3030
gift.Resize(width, height, gift.LanczosResampling),
3131
gift.Rotate180(),
@@ -41,7 +41,6 @@ func deviceSpecifics(devName string, width, height int) (*gift.GIFT, error) {
4141
gift.Resize(width, height, gift.LanczosResampling),
4242
gift.Rotate180(),
4343
), nil
44-
4544
default:
4645
return nil, errors.New(fmt.Sprintf("Unsupported Device: %s", devName))
4746
}
@@ -62,7 +61,7 @@ func getImageForButton(img image.Image, btnFormat string) ([]byte, error) {
6261

6362
func getSolidColourImage(colour color.Color, btnSize int) *image.RGBA {
6463
img := image.NewRGBA(image.Rect(0, 0, btnSize, btnSize))
65-
//colour := color.RGBA{red, green, blue, 0}
64+
// colour := color.RGBA{red, green, blue, 0}
6665
draw.Draw(img, img.Bounds(), image.NewUniform(colour), image.Point{0, 0}, draw.Src)
6766
return img
6867
}

0 commit comments

Comments
 (0)