mirror of
https://github.com/tulir/gomuks.git
synced 2025-04-20 10:33:41 -05:00
Add LED controls in ui/beepberry subpackage
This commit is contained in:
parent
68cfe2be80
commit
0714fec38b
3 changed files with 100 additions and 0 deletions
2
go.mod
2
go.mod
|
@ -27,6 +27,8 @@ require (
|
||||||
maunium.net/go/mauflag v1.0.0
|
maunium.net/go/mauflag v1.0.0
|
||||||
maunium.net/go/mautrix v0.11.1
|
maunium.net/go/mautrix v0.11.1
|
||||||
mvdan.cc/xurls/v2 v2.4.0
|
mvdan.cc/xurls/v2 v2.4.0
|
||||||
|
periph.io/x/conn/v3 v3.7.0
|
||||||
|
periph.io/x/host/v3 v3.8.2
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
|
5
go.sum
5
go.sum
|
@ -15,6 +15,7 @@ github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
|
||||||
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||||
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
|
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
|
||||||
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||||
|
github.com/jonboulle/clockwork v0.3.0 h1:9BSCMi8C+0qdApAp4auwX0RkLGUjs956h0EkuQymUhg=
|
||||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
|
@ -127,3 +128,7 @@ maunium.net/go/mautrix v0.11.1 h1:S5TZGY3M1/bJcd6Y5SUWsNvqQAgFjgFYk5ULm/NCkqk=
|
||||||
maunium.net/go/mautrix v0.11.1/go.mod h1:K29EcHwsNg6r7fMfwvi0GHQ9o5wSjqB9+Q8RjCIQEjA=
|
maunium.net/go/mautrix v0.11.1/go.mod h1:K29EcHwsNg6r7fMfwvi0GHQ9o5wSjqB9+Q8RjCIQEjA=
|
||||||
mvdan.cc/xurls/v2 v2.4.0 h1:tzxjVAj+wSBmDcF6zBB7/myTy3gX9xvi8Tyr28AuQgc=
|
mvdan.cc/xurls/v2 v2.4.0 h1:tzxjVAj+wSBmDcF6zBB7/myTy3gX9xvi8Tyr28AuQgc=
|
||||||
mvdan.cc/xurls/v2 v2.4.0/go.mod h1:+GEjq9uNjqs8LQfM9nVnM8rff0OQ5Iash5rzX+N1CSg=
|
mvdan.cc/xurls/v2 v2.4.0/go.mod h1:+GEjq9uNjqs8LQfM9nVnM8rff0OQ5Iash5rzX+N1CSg=
|
||||||
|
periph.io/x/conn/v3 v3.7.0 h1:f1EXLn4pkf7AEWwkol2gilCNZ0ElY+bxS4WE2PQXfrA=
|
||||||
|
periph.io/x/conn/v3 v3.7.0/go.mod h1:ypY7UVxgDbP9PJGwFSVelRRagxyXYfttVh7hJZUHEhg=
|
||||||
|
periph.io/x/host/v3 v3.8.2 h1:ayKUDzgUCN0g8+/xM9GTkWaOBhSLVcVHGTfjAOi8OsQ=
|
||||||
|
periph.io/x/host/v3 v3.8.2/go.mod h1:yFL76AesNHR68PboofSWYaQTKmvPXsQH2Apvp/ls/K4=
|
||||||
|
|
93
ui/beepberry/led.go
Normal file
93
ui/beepberry/led.go
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
package beepberry
|
||||||
|
|
||||||
|
import (
|
||||||
|
"periph.io/x/conn/v3/i2c"
|
||||||
|
"periph.io/x/conn/v3/i2c/i2creg"
|
||||||
|
"periph.io/x/host/v3"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
write = 0x80
|
||||||
|
|
||||||
|
power = 0x20
|
||||||
|
red = 0x21
|
||||||
|
green = 0x22
|
||||||
|
blue = 0x23
|
||||||
|
)
|
||||||
|
|
||||||
|
type LED struct {
|
||||||
|
bus i2c.BusCloser
|
||||||
|
chip *i2c.Dev
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewLED() (*LED, error) {
|
||||||
|
if _, err := host.Init(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
i, err := i2creg.Open("1")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &LED{
|
||||||
|
bus: i,
|
||||||
|
chip: &i2c.Dev{Addr: 0x1F, Bus: i},
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *LED) Close() error {
|
||||||
|
return l.bus.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *LED) On() error {
|
||||||
|
_, err := l.chip.Write([]byte{power + write, 0x01})
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *LED) Off() error {
|
||||||
|
_, err := l.chip.Write([]byte{power + write, 0x00})
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *LED) SetColor(r, g, b uint16) error {
|
||||||
|
if _, err := l.chip.Write([]byte{red + write, byte(r)}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := l.chip.Write([]byte{green + write, byte(g)}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := l.chip.Write([]byte{blue + write, byte(b)}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *LED) IsOn() (bool, error) {
|
||||||
|
p := make([]byte, 1)
|
||||||
|
if err := l.chip.Tx([]byte{power}, p); err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return p[0] > 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *LED) Color() ([]byte, error) {
|
||||||
|
r := make([]byte, 1)
|
||||||
|
if err := l.chip.Tx([]byte{red}, r); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
g := make([]byte, 1)
|
||||||
|
if err := l.chip.Tx([]byte{green}, g); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
b := make([]byte, 1)
|
||||||
|
if err := l.chip.Tx([]byte{blue}, b); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return []byte{r[0], g[0], b[0]}, nil
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue