Skip to content

Commit 0caf6b3

Browse files
committed
Merge remote-tracking branch 'tuomaz/master'
2 parents ad6db5a + b7419c9 commit 0caf6b3

File tree

3 files changed

+98
-17
lines changed

3 files changed

+98
-17
lines changed

comms.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"image"
77
"image/color"
8+
"log"
89

910
"github.com/karalabe/hid"
1011
)
@@ -219,6 +220,8 @@ func (d *Device) rawWriteToButton(btnIndex int, rawImage []byte) error {
219220

220221
pageNumber := 0
221222
bytesRemaining := len(rawImage)
223+
halfImage := len(rawImage) / 2
224+
bytesSent := 0
222225

223226
for bytesRemaining > 0 {
224227

@@ -227,15 +230,21 @@ func (d *Device) rawWriteToButton(btnIndex int, rawImage []byte) error {
227230
imageReportHeaderLength := len(header)
228231
imageReportPayloadLength := imageReportLength - imageReportHeaderLength
229232

233+
if halfImage > imageReportPayloadLength {
234+
log.Fatalf("image too large: %d", halfImage*2)
235+
}
236+
230237
thisLength := 0
231238
if imageReportPayloadLength < bytesRemaining {
232-
thisLength = imageReportPayloadLength
239+
if d.deviceType.name == "Stream Deck Original" {
240+
thisLength = halfImage
241+
} else {
242+
thisLength = imageReportPayloadLength
243+
}
233244
} else {
234245
thisLength = bytesRemaining
235246
}
236247

237-
bytesSent := pageNumber * imageReportPayloadLength
238-
239248
payload := append(header, rawImage[bytesSent:(bytesSent+thisLength)]...)
240249
padding := make([]byte, imageReportLength-len(payload))
241250

@@ -244,6 +253,7 @@ func (d *Device) rawWriteToButton(btnIndex int, rawImage []byte) error {
244253

245254
bytesRemaining = bytesRemaining - thisLength
246255
pageNumber = pageNumber + 1
256+
bytesSent = bytesSent + thisLength
247257
}
248258
return nil
249259
}
@@ -256,7 +266,7 @@ func Min(x, y int) int {
256266
return y
257267
}
258268

259-
func Max (x, y int) int {
269+
func Max(x, y int) int {
260270
if x > y {
261271
return x
262272
}

devices/orig.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package devices
2+
3+
import (
4+
"image"
5+
6+
streamdeck "github.com/magicmonkey/go-streamdeck"
7+
)
8+
9+
var (
10+
originalName string
11+
originalButtonWidth uint
12+
originalButtonHeight uint
13+
originalImageReportPayloadLength uint
14+
)
15+
16+
// GetImageHeaderMini returns the USB comms header for a button image for the original
17+
func GetImageHeaderOriginal(bytesRemaining uint, btnIndex uint, pageNumber uint) []byte {
18+
var thisLength uint
19+
if originalImageReportPayloadLength < bytesRemaining {
20+
thisLength = originalImageReportPayloadLength
21+
} else {
22+
thisLength = bytesRemaining
23+
}
24+
header := []byte{
25+
'\x02',
26+
'\x01',
27+
byte(pageNumber + 1),
28+
0,
29+
get_header_element(thisLength, bytesRemaining),
30+
byte(btnIndex + 1),
31+
'\x00',
32+
'\x00',
33+
'\x00',
34+
'\x00',
35+
'\x00',
36+
'\x00',
37+
'\x00',
38+
'\x00',
39+
'\x00',
40+
'\x00',
41+
}
42+
43+
return header
44+
}
45+
46+
func init() {
47+
originalName = "Stream Deck Original"
48+
originalButtonWidth = 72
49+
originalButtonHeight = 72
50+
originalImageReportPayloadLength = 8191 //8191
51+
streamdeck.RegisterDevicetype(
52+
originalName, // Name
53+
image.Point{X: int(originalButtonWidth), Y: int(originalButtonHeight)}, // Width/height of a button
54+
0x60, // USB productID
55+
resetPacket17(), // Reset packet
56+
15, // Number of buttons
57+
3, // Number of rows
58+
5, // Number of cols
59+
brightnessPacket17(), // Brightness packet
60+
1, // Button read offset
61+
"BMP", // Image format
62+
originalImageReportPayloadLength, // Amount of image payload allowed per USB packet
63+
GetImageHeaderOriginal, // Function to get the comms image header
64+
)
65+
}

image.go

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,25 @@ 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)":
29-
return gift.New(
30-
gift.Resize(width, height, gift.LanczosResampling),
31-
gift.Rotate180(),
32-
), nil
33-
case "Streamdeck Mini":
34-
return gift.New(
35-
gift.Resize(width, height, gift.LanczosResampling),
36-
gift.Rotate90(),
37-
gift.FlipVertical(),
38-
), nil
39-
default:
40-
return nil, errors.New(fmt.Sprintf("Unsupported Device: %s", devName))
28+
case "Streamdeck XL", "Streamdeck (original v2)":
29+
return gift.New(
30+
gift.Resize(width, height, gift.LanczosResampling),
31+
gift.Rotate180(),
32+
), nil
33+
case "Streamdeck Mini":
34+
return gift.New(
35+
gift.Resize(width, height, gift.LanczosResampling),
36+
gift.Rotate90(),
37+
gift.FlipVertical(),
38+
), nil
39+
case "Stream Deck Original":
40+
return gift.New(
41+
gift.Resize(width, height, gift.LanczosResampling),
42+
gift.Rotate180(),
43+
), nil
44+
45+
default:
46+
return nil, errors.New(fmt.Sprintf("Unsupported Device: %s", devName))
4147
}
4248
}
4349

0 commit comments

Comments
 (0)