mirror of
https://github.com/jwetzell/ddp-go.git
synced 2026-08-08 08:43:40 +00:00
50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log/slog"
|
|
"net"
|
|
|
|
"github.com/jwetzell/ddp-go"
|
|
)
|
|
|
|
// receive data from WLED virtual output
|
|
func main() {
|
|
addr, err := net.ResolveUDPAddr("udp", "0.0.0.0:4048")
|
|
if err != nil {
|
|
slog.Error("error making UDP address", "err", err)
|
|
return
|
|
}
|
|
|
|
client, err := net.ListenUDP("udp", addr)
|
|
if err != nil {
|
|
slog.Error("error listening to UDP", "err", err)
|
|
return
|
|
}
|
|
defer client.Close()
|
|
|
|
for {
|
|
buffer := make([]byte, 2048)
|
|
|
|
length, _, err := client.ReadFromUDP(buffer)
|
|
if err != nil {
|
|
slog.Error("error reading from UDP", "err", err)
|
|
} else if length > 0 {
|
|
message, err := ddp.Decode(buffer[0:length])
|
|
if err != nil {
|
|
slog.Error("error decoding", "err", err)
|
|
}
|
|
ledCount := uint32(message.Header.DataLength) / uint32(message.Header.DataType.BitsPerPixel/8) / 3
|
|
|
|
for i := 0; i < int(ledCount); i++ {
|
|
ledOffset := i * 3
|
|
ledR := message.Data[ledOffset+0]
|
|
ledG := message.Data[ledOffset+1]
|
|
ledB := message.Data[ledOffset+2]
|
|
|
|
fmt.Printf("led %d:\tr=%d\tg=%d\tb=%d\n", i, ledR, ledG, ledB)
|
|
}
|
|
}
|
|
}
|
|
}
|