add basic start on artnet decoding

This commit is contained in:
Joel Wetzell
2025-12-22 20:09:02 -06:00
commit 307afe8bed
7 changed files with 236 additions and 0 deletions
+37
View File
@@ -0,0 +1,37 @@
package artnet
import (
"encoding/binary"
"errors"
"slices"
)
type ArtNetPacket interface {
GetOpCode() uint16
}
var ArtNetID []uint8 = []uint8{'A', 'r', 't', '-', 'N', 'e', 't', 0x00}
type ArtNetHeader struct {
ID []uint8
OpCode uint16
ProtVerHi uint8
ProtVerLo uint8
}
func NewHeader(data []byte) (*ArtNetHeader, error) {
if len(data) < 12 {
return nil, errors.New("header must be at least 12 bytes")
}
if !slices.Equal(ArtNetID, data[0:8]) {
return nil, errors.New("header id does not match Art-Net ID")
}
return &ArtNetHeader{
OpCode: binary.LittleEndian.Uint16(data[8:10]),
ProtVerHi: data[10],
ProtVerLo: data[11],
}, nil
}