> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/holoscan/sensor-bridge/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/holoscan/sensor-bridge/_mcp/server.

# hololink::emulation::PyI2CPeripheral

**Inherits from:** `hololink::emulation::I2CPeripheral` (public)

***

## Methods

### i2c\_transaction \[#i2ctransaction]

```cpp showLineNumbers={false}
I2CStatus hololink::emulation::PyI2CPeripheral::i2c_transaction(
    uint16_t peripheral_address,
    const uint8_t *write_bytes,
    uint16_t write_size,
    uint8_t *read_bytes,
    uint16_t read_size
) override
```

python:

`def `[`i2c_transaction`](#i2ctransaction)`(self: hemu.I2CPeripheral, peripheral_address: int, write_bytes: List[int], read_bytes: List[int]) -> hemu.I2CStatus`

perform an I2C transaction. This will be called by the [I2CController](i2ccontroller) when a transaction is requested.

read request size is the size of the read\_bytes vector as initialized by the caller

**Returns:** [I2CStatus](../enums/i2cstatus) The status of the transaction.

**Parameters**

The peripheral address to communicate with.

The bytes to write to the peripheral.

The size of the write bytes

The bytes to read from the peripheral. This shall be filled with 0s to the requested read size and replaced by peripheral. This is to ensure peripheral can get the read count from read\_bytes.size() and enough valid data is returned for no-ops.

The size of the read bytes

### start \[#start]

```cpp showLineNumbers={false}
void hololink::emulation::PyI2CPeripheral::start() override
```

start the peripheral.

This will be called when [I2CController](i2ccontroller) itself starts and should not be done by the client code

### stop \[#stop]

```cpp showLineNumbers={false}
void hololink::emulation::PyI2CPeripheral::stop() override
```

stop the peripheral.

This will be called when the [I2CController](i2ccontroller) is stopped and should not be done by the client code

Peripheral should release all resources in case a subsequent start() is called.

### attach\_to\_i2c \[#attachtoi2c]

```cpp showLineNumbers={false}
void hololink::emulation::PyI2CPeripheral::attach_to_i2c(
    I2CController &i2c_controller,
    uint8_t i2c_bus_address
) override
```

python:

`def `[`attach_to_i2c`](#attachtoi2c)`(self: hemu.I2CPeripheral, i2c_controller: hemu.I2CController, bus_address: int)`

attach the peripheral to the I2C controller. This should be called by client code before start() is called

**Parameters**

The I2C controller to attach to. Retrieved from [HSBEmulator](hsbemulator) with get\_i2c(controller\_address)

The bus address of the peripheral.

### I2CPeripheral \[#i2cperipheral]

```cpp showLineNumbers={false}
hololink::emulation::I2CPeripheral::I2CPeripheral()
```