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.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface com.diozero.api.I2CDeviceInterface
I2CDeviceInterface.I2CMessage
-
-
Field Summary
-
Fields inherited from interface com.diozero.api.I2CSMBusInterface
MAX_I2C_BLOCK_SIZE
-
-
Constructor Summary
Constructors Constructor Description NativeI2CDeviceSMBus(DeviceFactoryInterface deviceFactory, String key, int controller, int address, I2CConstants.AddressSize addressSize, boolean force)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description byte[]
blockProcessCall(int registerAddress, byte... txData)
SMBus Block Write - Block Read Process Callvoid
closeDevice()
boolean
probe(I2CDevice.ProbeMode mode)
Probe this I2C device to see if it is connectedshort
processCall(int registerAddress, short data)
SMBus Process Callbyte[]
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()
int
readBytes(byte[] buffer)
Diozero SMBus extension to read the specified number of bytes from the deviceint
readI2CBlockData(int registerAddress, byte[] buffer)
I2C Block Read:i2c_smbus_read_i2c_block_data()
int
readNoStop(byte registerAddress, int rxLength, byte[] rxData, boolean repeatedStart)
short
readWordData(int registerAddress)
SMBus Read Word:i2c_smbus_read_word_data()
void
readWrite(I2CDeviceInterface.I2CMessage[] messages, byte[] buffer)
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)
Diozero SMBus extension to write the specified byte array to the devicevoid
writeI2CBlockData(int registerAddress, byte... data)
I2C Block Write:i2c_smbus_write_i2c_block_data()
void
writeQuick(byte bit)
SMBus Quick Commandvoid
writeWordData(int registerAddress, short data)
SMBus Write Word:i2c_smbus_write_word_data()
-
Methods inherited from class com.diozero.internal.spi.AbstractDevice
close, getDeviceFactory, getKey, isOpen
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.diozero.api.DeviceInterface
close
-
Methods inherited from interface com.diozero.api.I2CSMBusInterface
probe, readWordSwapped, writeWordSwapped
-
Methods inherited from interface com.diozero.internal.spi.InternalDeviceInterface
getKey, isOpen
-
-
-
-
Constructor Detail
-
NativeI2CDeviceSMBus
public NativeI2CDeviceSMBus(DeviceFactoryInterface deviceFactory, String key, int controller, int address, I2CConstants.AddressSize addressSize, boolean force)
-
-
Method Detail
-
closeDevice
public void closeDevice()
- Specified by:
closeDevice
in classAbstractDevice
-
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 interfaceI2CSMBusInterface
- 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 interfaceI2CSMBusInterface
- 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 interfaceI2CSMBusInterface
- 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 interfaceI2CSMBusInterface
- 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 interfaceI2CSMBusInterface
- 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 interfaceI2CSMBusInterface
- Parameters:
registerAddress
- the register to write todata
- 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 interfaceI2CSMBusInterface
- 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 interfaceI2CSMBusInterface
- Parameters:
registerAddress
- the register to write todata
- value to write inLittle 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 interfaceI2CSMBusInterface
- Parameters:
registerAddress
- the register to write to / read fromdata
- 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 interfaceI2CSMBusInterface
- 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 interfaceI2CSMBusInterface
- Parameters:
registerAddress
- the register to write todata
- 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 interfaceI2CSMBusInterface
- Parameters:
registerAddress
- the register to write to and read fromtxData
- 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 interfaceI2CSMBusInterface
- Parameters:
registerAddress
- the register to read frombuffer
- 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 interfaceI2CSMBusInterface
- Parameters:
registerAddress
- the register to write todata
- 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 interfaceI2CSMBusInterface
- 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 interfaceI2CSMBusInterface
- Parameters:
data
- the data to write
-
readNoStop
public int readNoStop(byte registerAddress, int rxLength, byte[] rxData, boolean repeatedStart)
- Specified by:
readNoStop
in interfaceI2CDeviceInterface
-
readWrite
public void readWrite(I2CDeviceInterface.I2CMessage[] messages, byte[] buffer)
- Specified by:
readWrite
in interfaceI2CDeviceInterface
-
-