Esempio n. 1
0
    def read_power_register(self,
                            retry: bool = True) -> Optional[Dict[int, bool]]:
        """Reads power register."""
        self.logger.debug("Reading power register")

        # Read register
        try:
            self.i2c.write([0x40], retry=retry)
            bytes_ = self.i2c.read(2, retry=retry)
        except I2CError as e:
            raise exceptions.ReadPowerRegisterError(logger=self.logger) from e

        # Parse response bytes
        msb = bytes_[0]
        lsb = bytes_[1]
        powered_channels = {
            0: not bool(bitwise.get_bit_from_byte(4, msb)),
            1: not bool(bitwise.get_bit_from_byte(3, msb)),
            2: not bool(bitwise.get_bit_from_byte(2, msb)),
            3: not bool(bitwise.get_bit_from_byte(1, msb)),
            4: not bool(bitwise.get_bit_from_byte(0, msb)),
            5: not bool(bitwise.get_bit_from_byte(7, lsb)),
            6: not bool(bitwise.get_bit_from_byte(6, lsb)),
            7: not bool(bitwise.get_bit_from_byte(5, lsb)),
        }
        return powered_channels
Esempio n. 2
0
    def read_status(self, retry: bool = True) -> Status:
        """Reads status."""
        self.logger.debug("Reading status")

        # Read status data, requires mux diable to read all x4 bytes
        try:
            with self.i2c_lock:
                self.i2c.write(bytes([0x04, 0x13, 0x8a, 0x00, 0x01]),
                               retry=retry)
                bytes_ = self.i2c.read(4, retry=retry, disable_mux=True)
        except I2CError as e:
            raise ReadStatusError(logger=self.logger) from e

        # Parse status bytes
        _, _, status_msb, status_lsb = bytes_
        status = Status(
            error_condition=bool(bitwise.get_bit_from_byte(0, status_lsb)),
            flash_error=bool(bitwise.get_bit_from_byte(1, status_lsb)),
            calibration_error=bool(bitwise.get_bit_from_byte(2, status_lsb)),
            rs232=bool(bitwise.get_bit_from_byte(0, status_msb)),
            rs485=bool(bitwise.get_bit_from_byte(1, status_msb)),
            i2c=bool(bitwise.get_bit_from_byte(2, status_msb)),
            warm_up_mode=bool(bitwise.get_bit_from_byte(3, status_msb)),
            single_point_calibration=bool(
                bitwise.get_bit_from_byte(7, status_msb)),
        )

        # Successfully read status
        self.logger.debug("Status: {}".format(status))
        return status
Esempio n. 3
0
    def read_status_register(self, retry: bool = True) -> StatusRegister:
        """Reads status of sensor."""
        self.logger.info("Reading status register")
        try:
            byte = self.i2c.read_register(0x00, retry=retry)
        except I2CError as e:
            raise ReadRegisterError(message="status reg", logger=self.logger) from e

        # Parse status register byte
        status_register = StatusRegister(
            firmware_mode=bitwise.get_bit_from_byte(7, byte),
            app_valid=bool(bitwise.get_bit_from_byte(4, byte)),
            data_ready=bool(bitwise.get_bit_from_byte(3, byte)),
            error=bool(bitwise.get_bit_from_byte(0, byte)),
        )
        self.logger.debug(status_register)
        return status_register
Esempio n. 4
0
    def read_user_register(self, retry: bool = True) -> UserRegister:
        """ Reads user register."""
        self.logger.debug("Reading user register")

        # Read register
        try:
            byte = self.i2c.read_register(0xE7, retry=retry)
        except I2CError as e:
            raise exceptions.ReadUserRegisterError(logger=self.logger) from e

        # Parse register content
        resolution_msb = bitwise.get_bit_from_byte(bit=7, byte=byte)
        resolution_lsb = bitwise.get_bit_from_byte(bit=0, byte=byte)
        user_register = UserRegister(
            resolution=resolution_msb << 1 + resolution_lsb,
            end_of_battery=bool(bitwise.get_bit_from_byte(bit=6, byte=byte)),
            heater_enabled=bool(bitwise.get_bit_from_byte(bit=2, byte=byte)),
            reload_disabled=bool(bitwise.get_bit_from_byte(bit=1, byte=byte)),
        )

        # Successfully read user register
        self.logger.debug("User register: {}".format(user_register))
        return user_register
def test_get_bit_from_byte():
    byte = 0x4C
    bit = bitwise.get_bit_from_byte(7, byte)
    assert bit == 0
    bit = bitwise.get_bit_from_byte(6, byte)
    assert bit == 1
    bit = bitwise.get_bit_from_byte(5, byte)
    assert bit == 0
    bit = bitwise.get_bit_from_byte(4, byte)
    assert bit == 0
    bit = bitwise.get_bit_from_byte(3, byte)
    assert bit == 1
    bit = bitwise.get_bit_from_byte(2, byte)
    assert bit == 1
    bit = bitwise.get_bit_from_byte(1, byte)
    assert bit == 0
    bit = bitwise.get_bit_from_byte(0, byte)
    assert bit == 0
Esempio n. 6
0
    def read_error_register(self, retry: bool = True) -> ErrorRegister:
        """Reads error register."""
        self.logger.info("Reading error register")
        try:
            byte = self.i2c.read_register(0x0E, retry=retry)
        except I2CError as e:
            raise ReadRegisterError(message="error reg", logger=self.logger) from e

        # Parse error register byte
        return ErrorRegister(
            write_register_invalid=bool(bitwise.get_bit_from_byte(0, byte)),
            read_register_invalid=bool(bitwise.get_bit_from_byte(1, byte)),
            measurement_mode_invalid=bool(bitwise.get_bit_from_byte(2, byte)),
            max_resistance=bool(bitwise.get_bit_from_byte(3, byte)),
            heater_fault=bool(bitwise.get_bit_from_byte(4, byte)),
            heater_supply=bool(bitwise.get_bit_from_byte(5, byte)),
        )
if os.getenv("IS_USB_I2C_ENABLED") != "true":
    print("Platform is not usb-to-i2c enabled")
    exit(0)

# Initialize i2c instance
i2c_controller = I2cController()
i2c_controller.configure("ftdi://ftdi:232h/1")
i2c = i2c_controller.get_port(0x15)

# Read data bytes
i2c.write([0x04, 0x13, 0x8B, 0x00, 0x01])
bytes_ = i2c.read(4)

# Parse data bytes
_, _, status_msb, status_lsb = bytes_
error_condition = (bool(bitwise.get_bit_from_byte(0, status_lsb)),)
flash_error = (bool(bitwise.get_bit_from_byte(1, status_lsb)),)
calibration_error = (bool(bitwise.get_bit_from_byte(2, status_lsb)),)
rs232 = (bool(bitwise.get_bit_from_byte(0, status_msb)),)
rs485 = (bool(bitwise.get_bit_from_byte(1, status_msb)),)
i2c_ = (bool(bitwise.get_bit_from_byte(2, status_msb)),)
warm_up_mode = (bool(bitwise.get_bit_from_byte(3, status_msb)),)
single_point_calibration = (bool(bitwise.get_bit_from_byte(7, status_msb)),)

# Display status
print("Error Condition: {}".format(bool(error_condition)))
print("Flash Error: {}".format(bool(flash_error)))
print("Calibration Error: {}".format(bool(calibration_error)))
print("RS232: {}".format(bool(rs232)))
print("RS485: {}".format(bool(rs485)))
print("I2C: {}".format(bool(i2c_)))
Esempio n. 8
0
if os.getenv("IS_USB_I2C_ENABLED") != "true":
    print("Platform is not usb-to-i2c enabled")
    exit(0)

# Initialize i2c instance
i2c_controller = I2cController()
i2c_controller.configure("ftdi://ftdi:232h/1")
i2c = i2c_controller.get_port(0x15)

# Read data bytes
i2c.write([0x04, 0x13, 0x8b, 0x00, 0x01])
bytes_ = i2c.read(4)

# Parse data bytes
_, _, status_msb, status_lsb = bytes_
error_condition = bool(bitwise.get_bit_from_byte(0, status_lsb)),
flash_error = bool(bitwise.get_bit_from_byte(1, status_lsb)),
calibration_error = bool(bitwise.get_bit_from_byte(2, status_lsb)),
rs232 = bool(bitwise.get_bit_from_byte(0, status_msb)),
rs485 = bool(bitwise.get_bit_from_byte(1, status_msb)),
i2c_ = bool(bitwise.get_bit_from_byte(2, status_msb)),
warm_up_mode = bool(bitwise.get_bit_from_byte(3, status_msb)),
single_point_calibration = bool(bitwise.get_bit_from_byte(7, status_msb)),

# Display status
print("Error Condition: {}".format(bool(error_condition)))
print("Flash Error: {}".format(bool(flash_error)))
print("Calibration Error: {}".format(bool(calibration_error)))
print("RS232: {}".format(bool(rs232)))
print("RS485: {}".format(bool(rs485)))
print("I2C: {}".format(bool(i2c_)))