# I2cDevice

Summary:[Methods](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#pubmethods)\|[Inherited Methods](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#inhmethods)\|[\[Expand All\]](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#)  

# I2cDevice

`
public


interface
I2cDevice
`  
`


implements

`[Closeable](https://developer.android.com/reference/java/io/Closeable)`


`

|-----------------------------------------|
| com.google.android.things.pio.I2cDevice |

<br />

*** ** * ** ***

Controls an I2C device. I2C is a bus protocol allowing a master (running Android headless) to control multiple slave device connected to this bus. Each device must have a unique address to disambiguate the commands sent. Some devices use the notion of register (also called commands), allowing you to select a memory address to read from/write to. The datasheet for your device will explain what each register is used for. Opening an I2C device takes ownership of it for the whole system, preventing anyone else from opening/accessing this device until you call[close()](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#close()). Forgetting to call[close()](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#close())will prevent anyone (including the same process/app) from using the device.

## Summary

|                                                                                                                                          ### Public methods                                                                                                                                          ||
|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ` abstract void`                                                              | ` `[close](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#close())`() ` Close and release the device.                                                                                |
| ` default `[String](https://developer.android.com/reference/java/lang/String) | ` `[getName](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#getName())`() ` Returns the I/O name.                                                                                    |
| ` abstract void`                                                              | ` `[read](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#read(byte[], int))`(byte[] buffer, int length) ` Read data from the device.                                                 |
| ` abstract void`                                                              | ` `[readRegBuffer](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#readRegBuffer(int, byte[], int))`(int reg, byte[] buffer, int length) ` Read multiple bytes from a given register. |
| ` abstract byte`                                                              | ` `[readRegByte](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#readRegByte(int))`(int reg) ` Read a byte from a given register.                                                     |
| ` abstract short`                                                             | ` `[readRegWord](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#readRegWord(int))`(int reg) ` Read a 2-byte word from a given register.                                              |
| ` abstract void`                                                              | ` `[write](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#write(byte[], int))`(byte[] buffer, int length) ` Write data to the device.                                                |
| ` abstract void`                                                              | ` `[writeRegBuffer](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#writeRegBuffer(int, byte[], int))`(int reg, byte[] buffer, int length) ` Write a byte array to a given register.  |
| ` abstract void`                                                              | ` `[writeRegByte](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#writeRegByte(int, byte))`(int reg, byte data) ` Write a byte to a given register.                                   |
| ` abstract void`                                                              | ` `[writeRegWord](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#writeRegWord(int, short))`(int reg, short data) ` Write a 2-byte word to a given register.                          |

| ### Inherited methods |
|-----------------------|---|
| [![](https://developer.android.com/static/assets/images/styles/disclosure_down.png)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#)From interface` `[java.io.Closeable](https://developer.android.com/reference/java/io/Closeable)` ` |------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| | ` abstract void` | ` `[close](https://developer.android.com/reference/java/io/Closeable#close())`() ` Closes this stream and releases any system resources associated with it. | ||
| [![](https://developer.android.com/static/assets/images/styles/disclosure_down.png)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#)From interface` `[java.lang.AutoCloseable](https://developer.android.com/reference/java/lang/AutoCloseable)` ` |------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------| | ` abstract void` | ` `[close](https://developer.android.com/reference/java/lang/AutoCloseable#close())`() ` Closes this resource, relinquishing any underlying resources. | ||

## Public methods

### close

```
void close ()
```

Close and release the device. Must be called in order to make the device available to other users.

<br />

|                                                     Throws                                                      ||
|----------------------------------------------------------------------------|-------------------------------------|
| [IOException](https://developer.android.com/reference/java/io/IOException) | if the I2cDevice is already closed. |

### getName

```
String getName ()
```

Returns the I/O name.

<br />

|                                  Returns                                   ||
|--------------------------------------------------------------------|--------|
| [String](https://developer.android.com/reference/java/lang/String) | <br /> |

### read

```
void read (byte[] buffer, 
                int length)
```

Read data from the device.

<br />

|                                        Parameters                                        ||
|----------|--------------------------------------------------------------------------------|
| `buffer` | `byte`: Buffer to read data into. <br />                                       |
| `length` | `int`: Number of bytes to read, may not be larger than the buffer size. <br /> |

|                                                Throws                                                ||
|----------------------------------------------------------------------------|--------------------------|
|                                                                            | IOException              |
|                                                                            | IllegalArgumentException |
| [IOException](https://developer.android.com/reference/java/io/IOException) |                          |

**See also:**

- [readRegByte(int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#readRegByte(int))
- [readRegWord(int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#readRegWord(int))
- [readRegBuffer(int, byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#readRegBuffer(int, byte[], int))
- [write(byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#write(byte[], int))  

### readRegBuffer

```
void readRegBuffer (int reg, 
                byte[] buffer, 
                int length)
```

Read multiple bytes from a given register.

<br />

|                                        Parameters                                        ||
|----------|--------------------------------------------------------------------------------|
| `reg`    | `int`: The register to read from (0x00-0xFF). <br />                           |
| `buffer` | `byte`: Buffer to read data into. <br />                                       |
| `length` | `int`: Number of bytes to read, may not be larger than the buffer size. <br /> |

|                                                Throws                                                ||
|----------------------------------------------------------------------------|--------------------------|
|                                                                            | IOException              |
|                                                                            | IllegalArgumentException |
| [IOException](https://developer.android.com/reference/java/io/IOException) |                          |

**See also:**

- [read(byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#read(byte[], int))
- [readRegByte(int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#readRegByte(int))
- [readRegWord(int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#readRegWord(int))
- [writeRegBuffer(int, byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#writeRegBuffer(int, byte[], int))  

### readRegByte

```
byte readRegByte (int reg)
```

Read a byte from a given register.

<br />

|                         Parameters                          ||
|-------|------------------------------------------------------|
| `reg` | `int`: The register to read from (0x00-0xFF). <br /> |

|                    Returns                     ||
|--------|----------------------------------------|
| `byte` | The value read from the device. <br /> |

|                                                Throws                                                ||
|----------------------------------------------------------------------------|--------------------------|
|                                                                            | IOException              |
|                                                                            | IllegalArgumentException |
| [IOException](https://developer.android.com/reference/java/io/IOException) |                          |

**See also:**

- [read(byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#read(byte[], int))
- [readRegWord(int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#readRegWord(int))
- [readRegBuffer(int, byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#readRegBuffer(int, byte[], int))
- [writeRegByte(int, byte)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#writeRegByte(int, byte))  

### readRegWord

```
short readRegWord (int reg)
```

Read a 2-byte word from a given register.

<br />

|                         Parameters                          ||
|-------|------------------------------------------------------|
| `reg` | `int`: The register to read from (0x00-0xFF). <br /> |

|                        Returns                         ||
|---------|-----------------------------------------------|
| `short` | The 2-byte value read from the device. <br /> |

|                                                Throws                                                ||
|----------------------------------------------------------------------------|--------------------------|
|                                                                            | IOException              |
|                                                                            | IllegalArgumentException |
| [IOException](https://developer.android.com/reference/java/io/IOException) |                          |

**See also:**

- [read(byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#read(byte[], int))
- [readRegByte(int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#readRegByte(int))
- [readRegBuffer(int, byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#readRegBuffer(int, byte[], int))
- [writeRegWord(int, short)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#writeRegWord(int, short))  

### write

```
void write (byte[] buffer, 
                int length)
```

Write data to the device.

<br />

|                                        Parameters                                         ||
|----------|---------------------------------------------------------------------------------|
| `buffer` | `byte`: Data to write. <br />                                                   |
| `length` | `int`: Number of bytes to write, may not be larger than the buffer size. <br /> |

|                                                Throws                                                ||
|----------------------------------------------------------------------------|--------------------------|
|                                                                            | IOException              |
|                                                                            | IllegalArgumentException |
| [IOException](https://developer.android.com/reference/java/io/IOException) |                          |

**See also:**

- [read(byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#read(byte[], int))
- [writeRegByte(int, byte)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#writeRegByte(int, byte))
- [writeRegWord(int, short)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#writeRegWord(int, short))
- [writeRegBuffer(int, byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#writeRegBuffer(int, byte[], int))  

### writeRegBuffer

```
void writeRegBuffer (int reg, 
                byte[] buffer, 
                int length)
```

Write a byte array to a given register.

<br />

|                                        Parameters                                         ||
|----------|---------------------------------------------------------------------------------|
| `reg`    | `int`: The register to write to (0x00-0xFF). <br />                             |
| `buffer` | `byte`: Data to write. <br />                                                   |
| `length` | `int`: Number of bytes to write, may not be larger than the buffer size. <br /> |

|                                                Throws                                                ||
|----------------------------------------------------------------------------|--------------------------|
|                                                                            | IOException              |
|                                                                            | IllegalArgumentException |
| [IOException](https://developer.android.com/reference/java/io/IOException) |                          |

**See also:**

- [readRegBuffer(int, byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#readRegBuffer(int, byte[], int))
- [write(byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#write(byte[], int))
- [writeRegByte(int, byte)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#writeRegByte(int, byte))
- [writeRegWord(int, short)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#writeRegWord(int, short))  

### writeRegByte

```
void writeRegByte (int reg, 
                byte data)
```

Write a byte to a given register.

<br />

|                         Parameters                          ||
|--------|-----------------------------------------------------|
| `reg`  | `int`: The register to write to (0x00-0xFF). <br /> |
| `data` | `byte`: Value to write. <br />                      |

|                                                Throws                                                ||
|----------------------------------------------------------------------------|--------------------------|
|                                                                            | IOException              |
|                                                                            | IllegalArgumentException |
| [IOException](https://developer.android.com/reference/java/io/IOException) |                          |

**See also:**

- [readRegByte(int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#readRegByte(int))
- [write(byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#write(byte[], int))
- [writeRegWord(int, short)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#writeRegWord(int, short))
- [writeRegBuffer(int, byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#writeRegBuffer(int, byte[], int))  

### writeRegWord

```
void writeRegWord (int reg, 
                short data)
```

Write a 2-byte word to a given register.

<br />

|                         Parameters                          ||
|--------|-----------------------------------------------------|
| `reg`  | `int`: The register to write to (0x00-0xFF). <br /> |
| `data` | `short`: Value to write. <br />                     |

|                                                Throws                                                ||
|----------------------------------------------------------------------------|--------------------------|
|                                                                            | IOException              |
|                                                                            | IllegalArgumentException |
| [IOException](https://developer.android.com/reference/java/io/IOException) |                          |

**See also:**

- [readRegWord(int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#readRegWord(int))
- [write(byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#write(byte[], int))
- [writeRegByte(int, byte)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#writeRegByte(int, byte))
- [writeRegBuffer(int, byte[], int)](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice#writeRegBuffer(int, byte[], int))  
-

  ## Interfaces

  - [Gpio](https://developer.android.com/reference/com/google/android/things/pio/Gpio)
  - [GpioCallback](https://developer.android.com/reference/com/google/android/things/pio/GpioCallback)
  - [I2cDevice](https://developer.android.com/reference/com/google/android/things/pio/I2cDevice)
  - [Pwm](https://developer.android.com/reference/com/google/android/things/pio/Pwm)
  - [SpiDevice](https://developer.android.com/reference/com/google/android/things/pio/SpiDevice)
  - [UartDevice](https://developer.android.com/reference/com/google/android/things/pio/UartDevice)
  - [UartDeviceCallback](https://developer.android.com/reference/com/google/android/things/pio/UartDeviceCallback)
-

  ## Classes

  - [PeripheralManager](https://developer.android.com/reference/com/google/android/things/pio/PeripheralManager)