diff --git a/host/generic/i2cbus.go b/host/generic/i2cbus.go index 526d2db..dc8e74c 100644 --- a/host/generic/i2cbus.go +++ b/host/generic/i2cbus.go @@ -11,6 +11,7 @@ import ( "time" "unsafe" + "github.com/golang/glog" "github.com/kidoman/embd" ) @@ -58,6 +59,8 @@ func (b *i2cBus) init() error { return err } + glog.V(2).Infof("i2c: bus %v initialized", b.l) + b.initialized = true return nil @@ -65,6 +68,7 @@ func (b *i2cBus) init() error { func (b *i2cBus) setAddress(addr byte) error { if addr != b.addr { + glog.V(2).Infof("i2c: setting bus %v address to %#02x", b.l, addr) if _, _, errno := syscall.Syscall(syscall.SYS_IOCTL, b.file.Fd(), slaveCmd, uintptr(addr)); errno != 0 { return syscall.Errno(errno) } @@ -79,6 +83,10 @@ func (b *i2cBus) ReadByte(addr byte) (byte, error) { b.mu.Lock() defer b.mu.Unlock() + if err := b.init(); err != nil { + return 0, err + } + if err := b.setAddress(addr); err != nil { return 0, err } @@ -97,6 +105,10 @@ func (b *i2cBus) WriteByte(addr, value byte) error { b.mu.Lock() defer b.mu.Unlock() + if err := b.init(); err != nil { + return err + } + if err := b.setAddress(addr); err != nil { return err } @@ -114,6 +126,10 @@ func (b *i2cBus) WriteBytes(addr byte, value []byte) error { b.mu.Lock() defer b.mu.Unlock() + if err := b.init(); err != nil { + return err + } + if err := b.setAddress(addr); err != nil { return err } @@ -138,6 +154,10 @@ func (b *i2cBus) ReadFromReg(addr, reg byte, value []byte) error { b.mu.Lock() defer b.mu.Unlock() + if err := b.init(); err != nil { + return err + } + if err := b.setAddress(addr); err != nil { return err } @@ -187,6 +207,10 @@ func (b *i2cBus) WriteToReg(addr, reg byte, value []byte) error { b.mu.Lock() defer b.mu.Unlock() + if err := b.init(); err != nil { + return err + } + if err := b.setAddress(addr); err != nil { return err } @@ -217,6 +241,10 @@ func (b *i2cBus) WriteByteToReg(addr, reg, value byte) error { b.mu.Lock() defer b.mu.Unlock() + if err := b.init(); err != nil { + return err + } + if err := b.setAddress(addr); err != nil { return err } @@ -248,6 +276,10 @@ func (b *i2cBus) WriteWordToReg(addr, reg byte, value uint16) error { b.mu.Lock() defer b.mu.Unlock() + if err := b.init(); err != nil { + return err + } + if err := b.setAddress(addr); err != nil { return err }