summaryrefslogtreecommitdiffstats
path: root/dependencies/pkg/mod/golang.org/x/exp@v0.0.0-20220613132600-b0d781184e0d/io/i2c/example/displayip/main.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--dependencies/pkg/mod/golang.org/x/exp@v0.0.0-20220613132600-b0d781184e0d/io/i2c/example/displayip/main.go89
1 files changed, 89 insertions, 0 deletions
diff --git a/dependencies/pkg/mod/golang.org/x/exp@v0.0.0-20220613132600-b0d781184e0d/io/i2c/example/displayip/main.go b/dependencies/pkg/mod/golang.org/x/exp@v0.0.0-20220613132600-b0d781184e0d/io/i2c/example/displayip/main.go
new file mode 100644
index 0000000..58fe694
--- /dev/null
+++ b/dependencies/pkg/mod/golang.org/x/exp@v0.0.0-20220613132600-b0d781184e0d/io/i2c/example/displayip/main.go
@@ -0,0 +1,89 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package main contains a program that displays the IPv4 address
+// of the machine on an a Grove-LCD RGB backlight.
+package main
+
+import (
+ "fmt"
+ "net"
+
+ "golang.org/x/exp/io/i2c"
+)
+
+const (
+ DISPLAY_RGB_ADDR = 0x62
+ DISPLAY_TEXT_ADDR = 0x3e
+)
+
+func main() {
+ d, err := i2c.Open(&i2c.Devfs{Dev: "/dev/i2c-1"}, DISPLAY_RGB_ADDR)
+ if err != nil {
+ panic(err)
+ }
+
+ td, err := i2c.Open(&i2c.Devfs{Dev: "/dev/i2c-1"}, DISPLAY_TEXT_ADDR)
+ if err != nil {
+ panic(err)
+ }
+
+ // Set the backlight color to 100,100,100.
+ write(d, []byte{0, 0})
+ write(d, []byte{1, 0})
+ write(d, []byte{0x08, 0xaa})
+ write(d, []byte{4, 100}) // R value
+ write(d, []byte{3, 100}) // G value
+ write(d, []byte{2, 100}) // B value
+
+ ip, err := resolveIP()
+ if err != nil {
+ panic(err)
+ }
+
+ fmt.Printf("host machine IP is %v\n", ip)
+
+ write(td, []byte{0x80, 0x02}) // return home
+ write(td, []byte{0x80, 0x01}) // clean the display
+ write(td, []byte{0x80, 0x08 | 0x04}) // no cursor
+ write(td, []byte{0x80, 0x28}) // two lines
+
+ for _, s := range ip {
+ write(td, []byte{0x40, byte(s)})
+ }
+}
+
+func write(d *i2c.Device, buf []byte) {
+ err := d.Write(buf)
+ if err != nil {
+ panic(err)
+ }
+}
+
+func resolveIP() (string, error) {
+ var ip net.IP
+ ifaces, err := net.Interfaces()
+ if err != nil {
+ panic(err)
+ }
+ for _, i := range ifaces {
+ addrs, err := i.Addrs()
+ if err != nil {
+ panic(err)
+ }
+ for _, addr := range addrs {
+ switch v := addr.(type) {
+ case *net.IPNet:
+ ip = v.IP
+ case *net.IPAddr:
+ ip = v.IP
+ }
+ ip = ip.To4()
+ if ip != nil && ip.String() != "127.0.0.1" {
+ return ip.String(), nil
+ }
+ }
+ }
+ return "", fmt.Errorf("cannot resolve the IP")
+}