# -*- coding: utf-8 -*-
# (c) Copyright 2019 Sensirion AG, Switzerland
from __future__ import absolute_import, division, print_function
[docs]class I2cDevice(object):
    """
    Base class for all I²C devices. Users should inherit from this class when
    implementing new I²C device drivers.
    The most important functionality of this class is the convenience method
    :py:meth:`~sensirion_i2c_driver.device.I2cDevice.execute` which allows
    derived classes to easily execute an
    :py:class:`~sensirion_i2c_driver.command.I2cCommand` object.
    """
[docs]    def __init__(self, connection, slave_address):
        """
        Create an I²C device instance on a given connection.
        :param ~sensirion_i2c_driver.connection.I2cConnection connection:
            The I²C connection used to execute the commands.
        :param byte slave_address:
            The I²C slave address of the device.
        """
        super(I2cDevice, self).__init__()
        self._connection = connection
        self._slave_address = slave_address 
    @property
    def connection(self):
        """
        Get the used I²C connection.
        :return: The used I²C connection.
        :rtype: ~sensirion_i2c_driver.connection.I2cConnection
        """
        return self._connection
    @property
    def slave_address(self):
        """
        Get the I²C slave address.
        :return: The I²C slave address.
        :rtype: byte
        """
        return self._slave_address
[docs]    def execute(self, command):
        """
        Execute an I²C command on this device.
        :param ~sensirion_i2c_driver.command.I2cCommand command:
            The command to be executed.
        :return:
            The interpreted response of the executed command.
        :rtype:
            Depends on the executed command.
        """
        return self._connection.execute(self._slave_address, command)