diff --git a/i2c.go b/i2c.go index 42600f0..b9bdb67 100644 --- a/i2c.go +++ b/i2c.go @@ -3,7 +3,15 @@ package drivers // I2C represents an I2C bus. It is notably implemented by the // machine.I2C type. type I2C interface { - // ReadRegister(addr uint8, r uint8, buf []byte) error - // WriteRegister(addr uint8, r uint8, buf []byte) error + // Tx performs a [I²C] transaction with address addr. + // Most I2C peripherals have some sort of register mapping scheme to allow + // users to interact with them: + // + // bus.Tx(addr, []byte{reg}, buf) // Reads register reg into buf. + // bus.Tx(addr, append([]byte{reg}, buf...), nil) // Writes buf into register reg. + // + // The semantics of most I2C transactions require that the w write buffer be non-empty. + // + // [I²C]: https://en.wikipedia.org/wiki/I%C2%B2C Tx(addr uint16, w, r []byte) error } diff --git a/tester/device.go b/tester/device.go index 9933ef8..4ab686d 100644 --- a/tester/device.go +++ b/tester/device.go @@ -5,10 +5,10 @@ const MaxRegisters = 255 type I2CDevice interface { // ReadRegister implements I2C.ReadRegister. - ReadRegister(r uint8, buf []byte) error + readRegister(r uint8, buf []byte) error // WriteRegister implements I2C.WriteRegister. - WriteRegister(r uint8, buf []byte) error + writeRegister(r uint8, buf []byte) error // Tx implements I2C.Tx Tx(w, r []byte) error diff --git a/tester/device16.go b/tester/device16.go index b424462..e02373f 100644 --- a/tester/device16.go +++ b/tester/device16.go @@ -33,7 +33,7 @@ func (d *I2CDevice16) Addr() uint8 { } // ReadRegister implements I2C.ReadRegister. -func (d *I2CDevice16) ReadRegister(r uint8, buf []byte) error { +func (d *I2CDevice16) readRegister(r uint8, buf []byte) error { if d.Err != nil { return d.Err } @@ -54,7 +54,7 @@ func (d *I2CDevice16) ReadRegister(r uint8, buf []byte) error { } // WriteRegister implements I2C.WriteRegister. -func (d *I2CDevice16) WriteRegister(r uint8, buf []byte) error { +func (d *I2CDevice16) writeRegister(r uint8, buf []byte) error { if d.Err != nil { return d.Err } @@ -80,11 +80,11 @@ func (bus *I2CDevice16) Tx(w, r []byte) error { bus.c.Fatalf("i2c mock: need a write byte") return nil case 1: - return bus.ReadRegister(w[0], r) + return bus.readRegister(w[0], r) default: if len(r) > 0 || len(w) == 1 { bus.c.Fatalf("i2c mock: unsupported lengths in Tx(%d, %d)", len(w), len(r)) } - return bus.WriteRegister(w[0], w[1:]) + return bus.writeRegister(w[0], w[1:]) } } diff --git a/tester/device8.go b/tester/device8.go index 7fa5a40..9be77a7 100644 --- a/tester/device8.go +++ b/tester/device8.go @@ -34,7 +34,7 @@ func (d *I2CDevice8) Addr() uint8 { } // ReadRegister implements I2C.ReadRegister. -func (d *I2CDevice8) ReadRegister(r uint8, buf []byte) error { +func (d *I2CDevice8) readRegister(r uint8, buf []byte) error { if d.Err != nil { return d.Err } @@ -47,7 +47,7 @@ func (d *I2CDevice8) ReadRegister(r uint8, buf []byte) error { } // WriteRegister implements I2C.WriteRegister. -func (d *I2CDevice8) WriteRegister(r uint8, buf []byte) error { +func (d *I2CDevice8) writeRegister(r uint8, buf []byte) error { if d.Err != nil { return d.Err } @@ -63,12 +63,12 @@ func (bus *I2CDevice8) Tx(w, r []byte) error { bus.c.Fatalf("i2c mock: need a write byte") return nil case 1: - return bus.ReadRegister(w[0], r) + return bus.readRegister(w[0], r) default: if len(r) > 0 || len(w) == 1 { bus.c.Fatalf("i2c mock: unsupported lengths in Tx(%d, %d)", len(w), len(r)) } - return bus.WriteRegister(w[0], w[1:]) + return bus.writeRegister(w[0], w[1:]) } } diff --git a/tester/devicecmd.go b/tester/devicecmd.go index decb042..fc4c3c7 100644 --- a/tester/devicecmd.go +++ b/tester/devicecmd.go @@ -50,7 +50,7 @@ func (d *I2CDeviceCmd) Addr() uint8 { } // ReadRegister implements I2C.ReadRegister. -func (d *I2CDeviceCmd) ReadRegister(r uint8, buf []byte) error { +func (d *I2CDeviceCmd) readRegister(r uint8, buf []byte) error { if d.Err != nil { return d.Err } @@ -59,7 +59,7 @@ func (d *I2CDeviceCmd) ReadRegister(r uint8, buf []byte) error { } // WriteRegister implements I2C.WriteRegister. -func (d *I2CDeviceCmd) WriteRegister(r uint8, buf []byte) error { +func (d *I2CDeviceCmd) writeRegister(r uint8, buf []byte) error { if d.Err != nil { return d.Err } diff --git a/tester/i2c.go b/tester/i2c.go index fb3628a..b880211 100644 --- a/tester/i2c.go +++ b/tester/i2c.go @@ -38,12 +38,12 @@ func (bus *I2CBus) NewDevice(addr uint8) *I2CDevice8 { // ReadRegister implements I2C.ReadRegister. func (bus *I2CBus) ReadRegister(addr uint8, r uint8, buf []byte) error { - return bus.FindDevice(addr).ReadRegister(r, buf) + return bus.FindDevice(addr).readRegister(r, buf) } // WriteRegister implements I2C.WriteRegister. func (bus *I2CBus) WriteRegister(addr uint8, r uint8, buf []byte) error { - return bus.FindDevice(addr).WriteRegister(r, buf) + return bus.FindDevice(addr).writeRegister(r, buf) } // Tx implements I2C.Tx.