diff options
Diffstat (limited to 'dependencies/pkg/mod/golang.org/x/exp@v0.0.0-20220613132600-b0d781184e0d/io/i2c/example/displayip')
-rw-r--r-- | dependencies/pkg/mod/golang.org/x/exp@v0.0.0-20220613132600-b0d781184e0d/io/i2c/example/displayip/main.go | 89 |
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") +} |