package ws2812b import ( "errors" "github.com/jgarff/rpi_ws281x/golang/ws2811" ) type LED struct { GPIO int Count int Brightness int IsInit bool } var led *LED func Init(gpio, count, brightness int) (*LED, error) { if led != nil && led.IsInit == true { ws2811.Clear() ws2811.Fini() } err := ws2811.Init(gpio, count, brightness) if err != nil { led = nil return nil, err } led = &LED{ GPIO: gpio, Count: count, Brightness: brightness, IsInit: true, } return led, nil } func IsInit() bool { if led == nil { return false } return led.IsInit } func Close() { ws2811.Clear() ws2811.Fini() led.IsInit = false } func ClearAll() { ws2811.Clear() } func Len() int { if led == nil { return 0 } return led.Count } func WriteColor(pos int, color uint32) error { if pos < 0 || pos > led.Count { return errors.New("position out of range") } ws2811.SetLed(pos, color) if err := ws2811.Render(); err != nil { ws2811.Clear() return err } return nil }