From 2e6bd46354a851f46de6efd5b587182c703819d4 Mon Sep 17 00:00:00 2001 From: Gavin Cabbage Date: Sat, 29 Aug 2015 00:42:44 -0400 Subject: [PATCH] i2c: added ReadBytes to I2CBus --- host/generic/i2cbus.go | 22 ++++++++++++++++++++++ i2c.go | 2 ++ 2 files changed, 24 insertions(+) diff --git a/host/generic/i2cbus.go b/host/generic/i2cbus.go index dc8e74c..45c5870 100644 --- a/host/generic/i2cbus.go +++ b/host/generic/i2cbus.go @@ -101,6 +101,28 @@ func (b *i2cBus) ReadByte(addr byte) (byte, error) { return bytes[0], nil } +func (b *i2cBus) ReadBytes(addr byte, num int) ([]byte, error) { + b.mu.Lock() + defer b.mu.Unlock() + + if err := b.init(); err != nil { + return []byte{0}, err + } + + if err := b.setAddress(addr); err != nil { + return []byte{0}, err + } + + bytes := make([]byte, num) + n, _ := b.file.Read(bytes) + + if n != num { + return []byte{0}, fmt.Errorf("i2c: Unexpected number (%v) of bytes read", n) + } + + return bytes, nil +} + func (b *i2cBus) WriteByte(addr, value byte) error { b.mu.Lock() defer b.mu.Unlock() diff --git a/i2c.go b/i2c.go index 8bdb876..d9922ed 100644 --- a/i2c.go +++ b/i2c.go @@ -4,6 +4,8 @@ package embd // I2CBus interface is used to interact with the I2C bus. type I2CBus interface { + // ReadByte reads a byte from the given address. + ReadBytes(addr byte, num int) (value []byte, err error) // ReadByte reads a byte from the given address. ReadByte(addr byte) (value byte, err error) // WriteByte writes a byte to the given address.