# -*- coding: utf-8 -*-
# (c) Copyright 2020 Sensirion AG, Switzerland

##############################################################################
##############################################################################
#                 _____         _    _ _______ _____ ____  _   _
#                / ____|   /\  | |  | |__   __|_   _/ __ \| \ | |
#               | |       /  \ | |  | |  | |    | || |  | |  \| |
#               | |      / /\ \| |  | |  | |    | || |  | | . ` |
#               | |____ / ____ \ |__| |  | |   _| || |__| | |\  |
#                \_____/_/    \_\____/   |_|  |_____\____/|_| \_|
#
#     THIS FILE IS AUTOMATICALLY GENERATED AND MUST NOT BE EDITED MANUALLY!
#
# Generator:    sensirion-shdlc-interface-generator 0.8.2
# Product:      SFC5xxx
# Version:      0.1.0
#
##############################################################################
##############################################################################

# flake8: noqa

from __future__ import absolute_import, division, print_function
from sensirion_shdlc_driver.command import ShdlcCommand
from struct import pack, unpack

import logging
log = logging.getLogger(__name__)


class Sfc5xxxCmdAdvancedMeasurementsBase(ShdlcCommand):
    """
    SHDLC command 0x30: "Advanced Measurements".
    """

    def __init__(self, *args, **kwargs):
        """
        Constructor.
        """
        super(Sfc5xxxCmdAdvancedMeasurementsBase, self).__init__(
            0x30, *args, **kwargs)


class Sfc5xxxCmdMeasureRawFlow(Sfc5xxxCmdAdvancedMeasurementsBase):
    """
    Measure Raw Flow Command

    Perform a flow measurement and return the measured raw flow ticks from the
    sensor.
    """

    def __init__(self):
        """
        Constructor.
        """
        super(Sfc5xxxCmdMeasureRawFlow, self).__init__(
            data=b"".join([bytes(bytearray([0x00]))]),
            max_response_time=0.05,
            post_processing_time=0.0,
            min_response_length=2,
            max_response_length=2
        )

    @staticmethod
    def interpret_response(data):
        """
        :return: Measured raw flow in ticks.
        :rtype: int
        """
        flow = int(unpack(">H", data[0:2])[0])  # uint16
        return flow


class Sfc5xxxCmdMeasureRawThermalConductivity(Sfc5xxxCmdAdvancedMeasurementsBase):
    """
    Measure Raw Thermal Conductivity Command

    Perform a thermal conductivity measurement and return the measured raw tick
    value.

    .. note:: The valve must be fully closed for at least 500ms to get correct
              results!
    """

    def __init__(self, use_temperature_compensation=None):
        """
        Constructor.

        :param int use_temperature_compensation:
            This parameter (existing since V1.56) allows to choose between
            uncompensated and temperature compensated measurement. If this
            parameter is not used, the compensated value will be returned if
            possible, otherwise the uncompensated value will be returned:

            -  0x00: Read uncompensated thermal conductivity
            -  0x01: Read temperature compensated thermal conductivity
            This parameter is optional. When passing ``None`` (the default),
            it is not sent to the device at all.
        """
        super(Sfc5xxxCmdMeasureRawThermalConductivity, self).__init__(
            data=b"".join([bytes(bytearray([0x01])),
                           pack(">B", use_temperature_compensation) if use_temperature_compensation is not None else b""]),
            max_response_time=0.05,
            post_processing_time=0.0,
            min_response_length=2,
            max_response_length=2
        )

    @staticmethod
    def interpret_response(data):
        """
        :return: Measured raw thermal conductivity in ticks.
        :rtype: int
        """
        thermal_conductivity = int(unpack(">H", data[0:2])[0])  # uint16
        return thermal_conductivity


class Sfc5xxxCmdMeasureRawThermalConductivityWithClosedValve(Sfc5xxxCmdAdvancedMeasurementsBase):
    """
    Measure Raw Thermal Conductivity With Closed Valve Command

    Perform a thermal conductivity measurement and return the measured raw tick
    value. The valve is automatically closed during the measurement.
    """

    def __init__(self, use_temperature_compensation=None):
        """
        Constructor.

        :param int use_temperature_compensation:
            This parameter (existing since V1.56) allows to choose between
            uncompensated and temperature compensated measurement. If this
            parameter is not used, the compensated value will be returned if
            possible, otherwise the uncompensated value will be returned:

            -  0x00: Read uncompensated thermal conductivity
            -  0x01: Read temperature compensated thermal conductivity
            This parameter is optional. When passing ``None`` (the default),
            it is not sent to the device at all.
        """
        super(Sfc5xxxCmdMeasureRawThermalConductivityWithClosedValve, self).__init__(
            data=b"".join([bytes(bytearray([0x02])),
                           pack(">B", use_temperature_compensation) if use_temperature_compensation is not None else b""]),
            max_response_time=0.6,
            post_processing_time=0.0,
            min_response_length=2,
            max_response_length=2
        )

    @staticmethod
    def interpret_response(data):
        """
        :return: Measured raw thermal conductivity in ticks.
        :rtype: int
        """
        thermal_conductivity = int(unpack(">H", data[0:2])[0])  # uint16
        return thermal_conductivity


class Sfc5xxxCmdMeasureTemperature(Sfc5xxxCmdAdvancedMeasurementsBase):
    """
    Measure Temperature Command

    Perform a gas temperature measurement.
    """

    def __init__(self):
        """
        Constructor.
        """
        super(Sfc5xxxCmdMeasureTemperature, self).__init__(
            data=b"".join([bytes(bytearray([0x10]))]),
            max_response_time=0.05,
            post_processing_time=0.0,
            min_response_length=4,
            max_response_length=4
        )

    @staticmethod
    def interpret_response(data):
        """
        :return: Measured temperature [°C].
        :rtype: float
        """
        temperature = float(unpack(">f", data[0:4])[0])  # float
        return temperature

# -*- coding: utf-8 -*-
# (c) Copyright 2020 Sensirion AG, Switzerland

##############################################################################
##############################################################################
#                 _____         _    _ _______ _____ ____  _   _
#                / ____|   /\  | |  | |__   __|_   _/ __ \| \ | |
#               | |       /  \ | |  | |  | |    | || |  | |  \| |
#               | |      / /\ \| |  | |  | |    | || |  | | . ` |
#               | |____ / ____ \ |__| |  | |   _| || |__| | |\  |
#                \_____/_/    \_\____/   |_|  |_____\____/|_| \_|
#
#     THIS FILE IS AUTOMATICALLY GENERATED AND MUST NOT BE EDITED MANUALLY!
#
# Generator:    sensirion-shdlc-interface-generator 0.8.2
# Product:      SFC5xxx
# Version:      0.1.0
#
##############################################################################
##############################################################################

# flake8: noqa

from __future__ import absolute_import, division, print_function
from sensirion_shdlc_driver.command import ShdlcCommand
from struct import pack, unpack

import logging
log = logging.getLogger(__name__)


class Sfc5xxxCmdAdvancedMeasurementsBase(ShdlcCommand):
    """
    SHDLC command 0x30: "Advanced Measurements".
    """

    def __init__(self, *args, **kwargs):
        """
        Constructor.
        """
        super(Sfc5xxxCmdAdvancedMeasurementsBase, self).__init__(
            0x30, *args, **kwargs)


class Sfc5xxxCmdMeasureRawFlow(Sfc5xxxCmdAdvancedMeasurementsBase):
    """
    Measure Raw Flow Command

    Perform a flow measurement and return the measured raw flow ticks from the
    sensor.
    """

    def __init__(self):
        """
        Constructor.
        """
        super(Sfc5xxxCmdMeasureRawFlow, self).__init__(
            data=b"".join([bytes(bytearray([0x00]))]),
            max_response_time=0.05,
            post_processing_time=0.0,
            min_response_length=2,
            max_response_length=2
        )

    @staticmethod
    def interpret_response(data):
        """
        :return: Measured raw flow in ticks.
        :rtype: int
        """
        flow = int(unpack(">H", data[0:2])[0])  # uint16
        return flow


class Sfc5xxxCmdMeasureRawThermalConductivity(Sfc5xxxCmdAdvancedMeasurementsBase):
    """
    Measure Raw Thermal Conductivity Command

    Perform a thermal conductivity measurement and return the measured raw tick
    value.

    .. note:: The valve must be fully closed for at least 500ms to get correct
              results!
    """

    def __init__(self, use_temperature_compensation=None):
        """
        Constructor.

        :param int use_temperature_compensation:
            This parameter (existing since V1.56) allows to choose between
            uncompensated and temperature compensated measurement. If this
            parameter is not used, the compensated value will be returned if
            possible, otherwise the uncompensated value will be returned:

            -  0x00: Read uncompensated thermal conductivity
            -  0x01: Read temperature compensated thermal conductivity
            This parameter is optional. When passing ``None`` (the default),
            it is not sent to the device at all.
        """
        super(Sfc5xxxCmdMeasureRawThermalConductivity, self).__init__(
            data=b"".join([bytes(bytearray([0x01])),
                           pack(">B", use_temperature_compensation) if use_temperature_compensation is not None else b""]),
            max_response_time=0.05,
            post_processing_time=0.0,
            min_response_length=2,
            max_response_length=2
        )

    @staticmethod
    def interpret_response(data):
        """
        :return: Measured raw thermal conductivity in ticks.
        :rtype: int
        """
        thermal_conductivity = int(unpack(">H", data[0:2])[0])  # uint16
        return thermal_conductivity


class Sfc5xxxCmdMeasureRawThermalConductivityWithClosedValve(Sfc5xxxCmdAdvancedMeasurementsBase):
    """
    Measure Raw Thermal Conductivity With Closed Valve Command

    Perform a thermal conductivity measurement and return the measured raw tick
    value. The valve is automatically closed during the measurement.
    """

    def __init__(self, use_temperature_compensation=None):
        """
        Constructor.

        :param int use_temperature_compensation:
            This parameter (existing since V1.56) allows to choose between
            uncompensated and temperature compensated measurement. If this
            parameter is not used, the compensated value will be returned if
            possible, otherwise the uncompensated value will be returned:

            -  0x00: Read uncompensated thermal conductivity
            -  0x01: Read temperature compensated thermal conductivity
            This parameter is optional. When passing ``None`` (the default),
            it is not sent to the device at all.
        """
        super(Sfc5xxxCmdMeasureRawThermalConductivityWithClosedValve, self).__init__(
            data=b"".join([bytes(bytearray([0x02])),
                           pack(">B", use_temperature_compensation) if use_temperature_compensation is not None else b""]),
            max_response_time=0.6,
            post_processing_time=0.0,
            min_response_length=2,
            max_response_length=2
        )

    @staticmethod
    def interpret_response(data):
        """
        :return: Measured raw thermal conductivity in ticks.
        :rtype: int
        """
        thermal_conductivity = int(unpack(">H", data[0:2])[0])  # uint16
        return thermal_conductivity


class Sfc5xxxCmdMeasureTemperature(Sfc5xxxCmdAdvancedMeasurementsBase):
    """
    Measure Temperature Command

    Perform a gas temperature measurement.
    """

    def __init__(self):
        """
        Constructor.
        """
        super(Sfc5xxxCmdMeasureTemperature, self).__init__(
            data=b"".join([bytes(bytearray([0x10]))]),
            max_response_time=0.05,
            post_processing_time=0.0,
            min_response_length=4,
            max_response_length=4
        )

    @staticmethod
    def interpret_response(data):
        """
        :return: Measured temperature [°C].
        :rtype: float
        """
        temperature = float(unpack(">f", data[0:4])[0])  # float
        return temperature

# -*- coding: utf-8 -*- # (c) Copyright 2020 Sensirion AG, Switzerland ############################################################################## ############################################################################## #                 _____         _    _ _______ _____ ____  _   _ #                / ____|   /\  | |  | |__   __|_   _/ __ \| \ | | #               | |       /  \ | |  | |  | |    | || |  | |  \| | #               | |      / /\ \| |  | |  | |    | || |  | | . ` | #               | |____ / ____ \ |__| |  | |   _| || |__| | |\  | #                \_____/_/    \_\____/   |_|  |_____\____/|_| \_| # #     THIS FILE IS AUTOMATICALLY GENERATED AND MUST NOT BE EDITED MANUALLY! # # Generator:    sensirion-shdlc-interface-generator 0.8.2 # Product:      SFC5xxx # Version:      0.1.0 # ############################################################################## ############################################################################## # flake8: noqa SHDLC command 0x30: "Advanced Measurements". Constructor. Measure Raw Flow Command      Perform a flow measurement and return the measured raw flow ticks from the     sensor. Constructor. :return: Measured raw flow in ticks.         :rtype: int # uint16 Measure Raw Thermal Conductivity Command      Perform a thermal conductivity measurement and return the measured raw tick     value.      .. note:: The valve must be fully closed for at least 500ms to get correct               results! Constructor.          :param int use_temperature_compensation:             This parameter (existing since V1.56) allows to choose between             uncompensated and temperature compensated measurement. If this             parameter is not used, the compensated value will be returned if             possible, otherwise the uncompensated value will be returned:              -  0x00: Read uncompensated thermal conductivity             -  0x01: Read temperature compensated thermal conductivity             This parameter is optional. When passing ``None`` (the default),             it is not sent to the device at all. :return: Measured raw thermal conductivity in ticks.         :rtype: int # uint16 Measure Raw Thermal Conductivity With Closed Valve Command      Perform a thermal conductivity measurement and return the measured raw tick     value. The valve is automatically closed during the measurement. Constructor.          :param int use_temperature_compensation:             This parameter (existing since V1.56) allows to choose between             uncompensated and temperature compensated measurement. If this             parameter is not used, the compensated value will be returned if             possible, otherwise the uncompensated value will be returned:              -  0x00: Read uncompensated thermal conductivity             -  0x01: Read temperature compensated thermal conductivity             This parameter is optional. When passing ``None`` (the default),             it is not sent to the device at all. :return: Measured raw thermal conductivity in ticks.         :rtype: int # uint16 Measure Temperature Command      Perform a gas temperature measurement. Constructor. :return: Measured temperature [°C].         :rtype: float # float