|
|
|
@ -53,7 +53,8 @@ type Dev struct {
|
|
|
|
blink bool
|
|
|
|
blink bool
|
|
|
|
on bool
|
|
|
|
on bool
|
|
|
|
cursor bool
|
|
|
|
cursor bool
|
|
|
|
backlight interface{}
|
|
|
|
blMono display.DisplayBacklight
|
|
|
|
|
|
|
|
blRGB display.DisplayRGBBacklight
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func wrap(err error) error {
|
|
|
|
func wrap(err error) error {
|
|
|
|
@ -71,16 +72,22 @@ func wrap(err error) error {
|
|
|
|
// display.DisplayRGBBacklight.
|
|
|
|
// display.DisplayRGBBacklight.
|
|
|
|
func New(bus i2c.Bus,
|
|
|
|
func New(bus i2c.Bus,
|
|
|
|
address uint16,
|
|
|
|
address uint16,
|
|
|
|
backlight interface{},
|
|
|
|
backlight any,
|
|
|
|
rows,
|
|
|
|
rows,
|
|
|
|
cols int) (*Dev, error) {
|
|
|
|
cols int) (*Dev, error) {
|
|
|
|
|
|
|
|
|
|
|
|
dev := &Dev{
|
|
|
|
dev := &Dev{
|
|
|
|
d: &i2c.Dev{Bus: bus, Addr: address},
|
|
|
|
d: &i2c.Dev{Bus: bus, Addr: address},
|
|
|
|
backlight: backlight,
|
|
|
|
|
|
|
|
rows: rows,
|
|
|
|
rows: rows,
|
|
|
|
cols: cols,
|
|
|
|
cols: cols,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
switch bl := backlight.(type) {
|
|
|
|
|
|
|
|
case display.DisplayBacklight:
|
|
|
|
|
|
|
|
dev.blMono = bl
|
|
|
|
|
|
|
|
case display.DisplayRGBBacklight:
|
|
|
|
|
|
|
|
dev.blRGB = bl
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
err := dev.init()
|
|
|
|
err := dev.init()
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
dev = nil
|
|
|
|
dev = nil
|
|
|
|
@ -118,7 +125,6 @@ func (dev *Dev) init() error {
|
|
|
|
_ = dev.Backlight(0xff)
|
|
|
|
_ = dev.Backlight(0xff)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println("dev.init() returns", err)
|
|
|
|
|
|
|
|
err = wrap(err)
|
|
|
|
err = wrap(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return err
|
|
|
|
return err
|
|
|
|
@ -343,27 +349,23 @@ func (dev *Dev) WriteString(text string) (n int, err error) {
|
|
|
|
|
|
|
|
|
|
|
|
// Set the backlight intensity.
|
|
|
|
// Set the backlight intensity.
|
|
|
|
func (dev *Dev) Backlight(intensity display.Intensity) error {
|
|
|
|
func (dev *Dev) Backlight(intensity display.Intensity) error {
|
|
|
|
switch bl := dev.backlight.(type) {
|
|
|
|
if dev.blMono != nil {
|
|
|
|
case display.DisplayBacklight:
|
|
|
|
return dev.blMono.Backlight(intensity)
|
|
|
|
return bl.Backlight(intensity)
|
|
|
|
} else if dev.blRGB != nil {
|
|
|
|
case display.DisplayRGBBacklight:
|
|
|
|
return dev.blRGB.RGBBacklight(intensity, intensity, intensity)
|
|
|
|
return bl.RGBBacklight(intensity, intensity, intensity)
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
|
|
return ErrNotImplemented
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return ErrNotImplemented
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// For units that have an RGB Backlight, set the backlight color/intensity.
|
|
|
|
// For units that have an RGB Backlight, set the backlight color/intensity.
|
|
|
|
// The range of the values is 0-255.
|
|
|
|
// The range of the values is 0-255.
|
|
|
|
func (dev *Dev) RGBBacklight(red, green, blue display.Intensity) error {
|
|
|
|
func (dev *Dev) RGBBacklight(red, green, blue display.Intensity) error {
|
|
|
|
switch bl := dev.backlight.(type) {
|
|
|
|
if dev.blRGB != nil {
|
|
|
|
case display.DisplayRGBBacklight:
|
|
|
|
return dev.blRGB.RGBBacklight(red, green, blue)
|
|
|
|
return bl.RGBBacklight(red, green, blue)
|
|
|
|
} else if dev.blMono != nil {
|
|
|
|
case display.DisplayBacklight:
|
|
|
|
return dev.blMono.Backlight(red | green | blue)
|
|
|
|
return bl.Backlight(red | green | blue)
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
|
|
return ErrNotImplemented
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return ErrNotImplemented
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var _ conn.Resource = &Dev{}
|
|
|
|
var _ conn.Resource = &Dev{}
|
|
|
|
|