Class NativeI2CDeviceSMBus

java.lang.Object
com.diozero.internal.provider.sysfs.NativeI2CDeviceSMBus
All Implemented Interfaces:
I2CSMBusInterface, java.io.Closeable, java.lang.AutoCloseable

public class NativeI2CDeviceSMBus
extends java.lang.Object
implements I2CSMBusInterface

JNI wrapper of SMBus interface.

Reference Kernel I2C dev interface and SMBus Protocol.

See i2c-dev for defintion of the inline functions.

See Python CFFI implementation.

  • Field Summary

    Fields inherited from interface com.diozero.internal.provider.sysfs.I2CSMBusInterface

    MAX_I2C_BLOCK_SIZE
  • Constructor Summary

    Constructors 
    Constructor Description
    NativeI2CDeviceSMBus​(int controller, int deviceAddress, boolean force)  
  • Method Summary

    Modifier and Type Method Description
    byte[] blockProcessCall​(int registerAddress, byte[] txData, int length)
    SMBus Block Write - Block Read Process Call
    void close()  
    boolean probe​(I2CDevice.ProbeMode mode)
    Probe this I2C device
    short processCall​(int registerAddress, short data)
    SMBus Process Call
    byte[] readBlockData​(int registerAddress)
    SMBus Block Read: i2c_smbus_read_block_data()
    byte readByte()
    SMBus Receive Byte: i2c_smbus_read_byte()
    byte readByteData​(int registerAddress)
    SMBus Read Byte: i2c_smbus_read_byte_data()
    byte[] readBytes​(int length)  
    byte[] readI2CBlockData​(int registerAddress, int length)
    I2C Block Read: i2c_smbus_read_i2c_block_data()
    short readWordData​(int registerAddress)
    SMBus Read Word: i2c_smbus_read_word_data()
    void writeBlockData​(int registerAddress, byte[] data)
    SMBus Block Write: i2c_smbus_write_block_data()
    void writeByte​(byte data)
    SMBus Send Byte: i2c_smbus_write_byte()
    void writeByteData​(int registerAddress, byte data)
    SMBus Write Byte: i2c_smbus_write_byte_data()
    void writeBytes​(byte[] data)  
    void writeI2CBlockData​(int registerAddress, byte[] data)
    I2C Block Write: i2c_smbus_write_i2c_block_data()
    void writeQuick​(byte bit)
    SMBus Quick Command
    void writeWordData​(int registerAddress, short data)
    SMBus Write Word: i2c_smbus_write_word_data()

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

  • Method Details

    • close

      public void close()
      Specified by:
      close in interface java.lang.AutoCloseable
      Specified by:
      close in interface java.io.Closeable
      Specified by:
      close in interface I2CSMBusInterface
    • probe

      public boolean probe​(I2CDevice.ProbeMode mode)
      Description copied from interface: I2CSMBusInterface
      Probe this I2C device
      Specified by:
      probe in interface I2CSMBusInterface
      Parameters:
      mode - Probe mode
      Returns:
      True if the probe is successful
    • writeQuick

      public void writeQuick​(byte bit)
      Description copied from interface: I2CSMBusInterface

      SMBus Quick Command

      This sends a single bit to the device, at the place of the Rd/Wr bit.

      A Addr Rd/Wr [A] P
      Specified by:
      writeQuick in interface I2CSMBusInterface
      Parameters:
      bit - The bit to write
    • readByte

      public byte readByte()
      Description copied from interface: I2CSMBusInterface

      SMBus Receive Byte: i2c_smbus_read_byte()

      This reads a single byte from a device, without specifying a device register. Some devices are so simple that this interface is enough; for others, it is a shorthand if you want to read the same register as in the previous SMBus command.

      S Addr Rd [A] [Data] NA P
      Specified by:
      readByte in interface I2CSMBusInterface
      Returns:
      Unsigned byte
    • writeByte

      public void writeByte​(byte data)
      Description copied from interface: I2CSMBusInterface

      SMBus Send Byte: i2c_smbus_write_byte()

      This operation is the reverse of Receive Byte: it sends a single byte to a device. See Receive Byte for more information.

      S Addr Wr [A] Data [A] P
      Specified by:
      writeByte in interface I2CSMBusInterface
      Parameters:
      data - value to write
    • readBytes

      public byte[] readBytes​(int length)
      Specified by:
      readBytes in interface I2CSMBusInterface
    • writeBytes

      public void writeBytes​(byte[] data)
      Specified by:
      writeBytes in interface I2CSMBusInterface
    • readByteData

      public byte readByteData​(int registerAddress)
      Description copied from interface: I2CSMBusInterface

      SMBus Read Byte: i2c_smbus_read_byte_data()

      This reads a single byte from a device, from a designated register. The register is specified through the Comm byte.

      S Addr Wr [A] Comm [A] S Addr Rd [A] [Data] NA P
      Specified by:
      readByteData in interface I2CSMBusInterface
      Parameters:
      registerAddress - the register to read from
      Returns:
      data read as unsigned byte
    • writeByteData

      public void writeByteData​(int registerAddress, byte data)
      Description copied from interface: I2CSMBusInterface

      SMBus Write Byte: i2c_smbus_write_byte_data()

      This writes a single byte to a device, to a designated register. The register is specified through the Comm byte. This is the opposite of the Read Byte operation.

      S Addr Wr [A] Comm [A] Data [A] P
      Specified by:
      writeByteData in interface I2CSMBusInterface
      Parameters:
      registerAddress - the register to write to
      data - value to write
    • readWordData

      public short readWordData​(int registerAddress)
      Description copied from interface: I2CSMBusInterface

      SMBus Read Word: i2c_smbus_read_word_data()

      This operation is very like Read Byte; again, data is read from a device, from a designated register that is specified through the Comm byte. But this time, the data is a complete word (16 bits).

      S Addr Wr [A] Comm [A] S Addr Rd [A] [DataLow] A [DataHigh] NA P
      Specified by:
      readWordData in interface I2CSMBusInterface
      Parameters:
      registerAddress - the register to read from
      Returns:
      data read as unsigned short
    • writeWordData

      public void writeWordData​(int registerAddress, short data)
      Description copied from interface: I2CSMBusInterface

      SMBus Write Word: i2c_smbus_write_word_data()

      This is the opposite of the Read Word operation. 16 bits of data is written to a device, to the designated register that is specified through the Comm byte.

      S Addr Wr [A] Comm [A] DataLow [A] DataHigh [A] P
      Specified by:
      writeWordData in interface I2CSMBusInterface
      Parameters:
      registerAddress - the register to write to
      data - value to write
    • processCall

      public short processCall​(int registerAddress, short data)
      Description copied from interface: I2CSMBusInterface

      SMBus Process Call

      This command selects a device register (through the Comm byte), sends 16 bits of data to it, and reads 16 bits of data in return.

      S Addr Wr [A] Comm [A] DataLow [A] DataHigh [A] 
                      S Addr Rd [A] [DataLow] A [DataHigh] NA P
      Specified by:
      processCall in interface I2CSMBusInterface
      Parameters:
      registerAddress - the register to write to / read from
      data - value to write
      Returns:
      data read
    • readBlockData

      public byte[] readBlockData​(int registerAddress)
      Description copied from interface: I2CSMBusInterface

      SMBus Block Read: i2c_smbus_read_block_data()

      This command reads a block of up to 32 bytes from a device, from a designated register that is specified through the Comm byte. The amount of data is specified by the device in the Count byte.

      S Addr Wr [A] Comm [A] 
                      S Addr Rd [A] [Count] A [Data] A [Data] A ... A [Data] NA P
      Specified by:
      readBlockData in interface I2CSMBusInterface
      Parameters:
      registerAddress - the register to read from
      Returns:
      data read
    • writeBlockData

      public void writeBlockData​(int registerAddress, byte[] data)
      Description copied from interface: I2CSMBusInterface

      SMBus Block Write: i2c_smbus_write_block_data()

      The opposite of the Block Read command, this writes up to 32 bytes to a device, to a designated register that is specified through the Comm byte. The amount of data is specified in the Count byte.

      S Addr Wr [A] Comm [A] Count [A] Data [A] Data [A] ... [A] Data [A] P
      Specified by:
      writeBlockData in interface I2CSMBusInterface
      Parameters:
      registerAddress - the register to write to
      data - values to write
    • blockProcessCall

      public byte[] blockProcessCall​(int registerAddress, byte[] txData, int length)
      Description copied from interface: I2CSMBusInterface

      SMBus Block Write - Block Read Process Call

      SMBus Block Write - Block Read Process Call was introduced in Revision 2.0 of the specification.
      This command selects a device register (through the Comm byte), sends 1 to 31 bytes of data to it, and reads 1 to 31 bytes of data in return.

      S Addr Wr [A] Comm [A] Count [A] Data [A] ...
                      S Addr Rd [A] [Count] A [Data] ... A P
      Specified by:
      blockProcessCall in interface I2CSMBusInterface
      Parameters:
      registerAddress - the register to write to
      txData - data to write
      length - Length
      Returns:
      data read
    • readI2CBlockData

      public byte[] readI2CBlockData​(int registerAddress, int length)
      Description copied from interface: I2CSMBusInterface

      I2C Block Read: i2c_smbus_read_i2c_block_data()

      This command reads a block of bytes from a device, from a designated register that is specified through the Comm byte.

      S Addr Wr [A] Comm [A]
            S Addr Rd [A] [Data] A [Data] A ... A [Data] NA P
      Specified by:
      readI2CBlockData in interface I2CSMBusInterface
      Parameters:
      registerAddress - the register to read from
      length - amount of data to read
      Returns:
      values to read
    • writeI2CBlockData

      public void writeI2CBlockData​(int registerAddress, byte[] data)
      Description copied from interface: I2CSMBusInterface

      I2C Block Write: i2c_smbus_write_i2c_block_data()

      The opposite of the Block Read command, this writes bytes to a device, to a designated register that is specified through the Comm byte. Note that command lengths of 0, 2, or more bytes are supported as they are indistinguishable from data.

      S Addr Wr [A] Comm [A] Data [A] Data [A] ... [A] Data [A] P
      Specified by:
      writeI2CBlockData in interface I2CSMBusInterface
      Parameters:
      registerAddress - the register to write to
      data - values to write