summaryrefslogtreecommitdiffstats
path: root/dependencies/pkg/mod/golang.org/x/exp@v0.0.0-20220613132600-b0d781184e0d/io/i2c/i2c.go
diff options
context:
space:
mode:
Diffstat (limited to 'dependencies/pkg/mod/golang.org/x/exp@v0.0.0-20220613132600-b0d781184e0d/io/i2c/i2c.go')
-rw-r--r--dependencies/pkg/mod/golang.org/x/exp@v0.0.0-20220613132600-b0d781184e0d/io/i2c/i2c.go75
1 files changed, 75 insertions, 0 deletions
diff --git a/dependencies/pkg/mod/golang.org/x/exp@v0.0.0-20220613132600-b0d781184e0d/io/i2c/i2c.go b/dependencies/pkg/mod/golang.org/x/exp@v0.0.0-20220613132600-b0d781184e0d/io/i2c/i2c.go
new file mode 100644
index 0000000..192ad3d
--- /dev/null
+++ b/dependencies/pkg/mod/golang.org/x/exp@v0.0.0-20220613132600-b0d781184e0d/io/i2c/i2c.go
@@ -0,0 +1,75 @@
+// 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 i2c allows users to read from and write to a slave I2C device.
+//
+// # Deprecated
+//
+// This package is not maintained anymore. An actively supported cross-platform
+// alternative is https://periph.io/.
+package i2c // import "golang.org/x/exp/io/i2c"
+
+import (
+ "golang.org/x/exp/io/i2c/driver"
+)
+
+const tenbitMask = 1 << 12
+
+// Device represents an I2C device. Devices must be closed once
+// they are no longer in use.
+type Device struct {
+ conn driver.Conn
+}
+
+// TenBit marks an I2C address as a 10-bit address.
+func TenBit(addr int) int {
+ return addr | tenbitMask
+}
+
+// Read reads len(buf) bytes from the device.
+func (d *Device) Read(buf []byte) error {
+ return d.conn.Tx(nil, buf)
+}
+
+// ReadReg is similar to Read but it reads from a register.
+func (d *Device) ReadReg(reg byte, buf []byte) error {
+ return d.conn.Tx([]byte{reg}, buf)
+}
+
+// Write writes the buffer to the device. If it is required to write to a
+// specific register, the register should be passed as the first byte in the
+// given buffer.
+func (d *Device) Write(buf []byte) (err error) {
+ return d.conn.Tx(buf, nil)
+}
+
+// WriteReg is similar to Write but writes to a register.
+func (d *Device) WriteReg(reg byte, buf []byte) (err error) {
+ // TODO(jbd): Do not allocate, not optimal.
+ return d.conn.Tx(append([]byte{reg}, buf...), nil)
+}
+
+// Close closes the device and releases the underlying sources.
+func (d *Device) Close() error {
+ return d.conn.Close()
+}
+
+// Open opens a connection to an I2C device.
+// All devices must be closed once they are no longer in use.
+// For devices that use 10-bit I2C addresses, addr can be marked
+// as a 10-bit address with TenBit.
+func Open(o driver.Opener, addr int) (*Device, error) {
+ unmasked, tenbit := resolveAddr(addr)
+ conn, err := o.Open(unmasked, tenbit)
+ if err != nil {
+ return nil, err
+ }
+ return &Device{conn: conn}, nil
+}
+
+// resolveAddr returns whether the addr is 10-bit masked or not.
+// It also returns the unmasked address.
+func resolveAddr(addr int) (unmasked int, tenbit bool) {
+ return addr & (tenbitMask - 1), addr&tenbitMask == tenbitMask
+}