Class NativeI2CDeviceSMBus

    • Method Detail

      • 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