Class NativeI2CDeviceSMBus

java.lang.Object
com.diozero.internal.spi.AbstractDevice
com.diozero.internal.provider.builtin.i2c.NativeI2CDeviceSMBus
All Implemented Interfaces:
DeviceInterface, I2CDeviceInterface, I2CSMBusInterface, InternalDeviceInterface, InternalI2CDeviceInterface, AutoCloseable

public class NativeI2CDeviceSMBus
extends AbstractDevice
implements InternalI2CDeviceInterface

JNI wrapper of SMBus interface.

Reference Kernel I2C dev interface and SMBus Protocol.

See i2c-dev for a definition of the in-line functions.

  • Constructor Details

  • Method Details

    • closeDevice

      public void closeDevice()
      Specified by:
      closeDevice in class AbstractDevice
    • probe

      public boolean probe​(I2CDevice.ProbeMode mode)
      Description copied from interface: I2CSMBusInterface
      Probe this I2C device to see if it is connected
      Specified by:
      probe in interface I2CSMBusInterface
      Parameters:
      mode - Probe mode
      Returns:
      True if the probe is successful and the device is connected
    • 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:
      The byte data read (note caller needs to handle conversion to unsigned)
    • 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
    • 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 byte (note caller needs to handle conversion to unsigned)
    • 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) in Little Endian order as per the SMBus specification.

       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 a signed short in Little Endian byte order
    • 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. Note that the data is written in Little Endian byte order as per the SMBus specification.

       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 in Little Endian byte order
    • 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:
      the value 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:
      the data read up to 32 bytes in length
    • 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 - the data to write (up to 32 bytes)
    • blockProcessCall

      public byte[] blockProcessCall​(int registerAddress, byte... txData)
      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 and read from
      txData - the byte array from which the data is written (up to 32 bytes)
      Returns:
      the data read (up to 32 bytes)
    • readI2CBlockData

      public int readI2CBlockData​(int registerAddress, byte[] buffer)
      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
      buffer - the buffer to read the data into, the buffer length specifies the number of bytes to read
      Returns:
      the number of bytes actually 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
    • readBytes

      public int readBytes​(byte[] buffer)
      Description copied from interface: I2CSMBusInterface
      Diozero SMBus extension to read the specified number of bytes from the device
      Specified by:
      readBytes in interface I2CSMBusInterface
      Parameters:
      buffer - byte array to populate, the length of the byte array indicates the number of bytes to read
      Returns:
      the number of bytes read
    • writeBytes

      public void writeBytes​(byte... data)
      Description copied from interface: I2CSMBusInterface
      Diozero SMBus extension to write the specified byte array to the device
      Specified by:
      writeBytes in interface I2CSMBusInterface
      Parameters:
      data - the data to write
    • readNoStop

      public int readNoStop​(byte registerAddress, int rxLength, byte[] rxData, boolean repeatedStart)
      Specified by:
      readNoStop in interface I2CDeviceInterface
    • readWrite

      public void readWrite​(I2CDeviceInterface.I2CMessage[] messages, byte[] buffer)
      Specified by:
      readWrite in interface I2CDeviceInterface