Skip to content

Add type annotations, update docstrings #60

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Feb 14, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 28 additions & 21 deletions adafruit_bme280/advanced.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,13 @@
from micropython import const
from adafruit_bme280.basic import Adafruit_BME280

try:
import typing # pylint: disable=unused-import
from busio import I2C, SPI
from digitalio import DigitalInOut
except ImportError:
pass

__version__ = "0.0.0-auto.0"
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_BME280.git"

Expand Down Expand Up @@ -134,7 +141,7 @@ class Adafruit_BME280_Advanced(Adafruit_BME280):
"""

# pylint: disable=too-many-instance-attributes
def __init__(self):
def __init__(self) -> None:
"""Check the BME280 was found, read the coefficients and enable the sensor"""
self._overscan_humidity = OVERSCAN_X1
self._overscan_temperature = OVERSCAN_X1
Expand All @@ -144,15 +151,15 @@ def __init__(self):
super().__init__()

@property
def standby_period(self):
def standby_period(self) -> int:
"""
Control the inactive period when in Normal mode
Allowed standby periods are the constants STANDBY_TC_*
"""
return self._t_standby

@standby_period.setter
def standby_period(self, value):
def standby_period(self, value: int) -> None:
if not value in _BME280_STANDBY_TCS:
raise ValueError("Standby Period '%s' not supported" % (value))
if self._t_standby == value:
Expand All @@ -161,67 +168,67 @@ def standby_period(self, value):
self._write_config()

@property
def overscan_humidity(self):
def overscan_humidity(self) -> int:
"""
Humidity Oversampling
Allowed values are the constants OVERSCAN_*
"""
return self._overscan_humidity

@overscan_humidity.setter
def overscan_humidity(self, value):
def overscan_humidity(self, value: int) -> None:
if not value in _BME280_OVERSCANS:
raise ValueError("Overscan value '%s' not supported" % (value))
self._overscan_humidity = value
self._write_ctrl_meas()

@property
def overscan_temperature(self):
def overscan_temperature(self) -> int:
"""
Temperature Oversampling
Allowed values are the constants OVERSCAN_*
"""
return self._overscan_temperature

@overscan_temperature.setter
def overscan_temperature(self, value):
def overscan_temperature(self, value: int) -> None:
if not value in _BME280_OVERSCANS:
raise ValueError("Overscan value '%s' not supported" % (value))
self._overscan_temperature = value
self._write_ctrl_meas()

@property
def overscan_pressure(self):
def overscan_pressure(self) -> int:
"""
Pressure Oversampling
Allowed values are the constants OVERSCAN_*
"""
return self._overscan_pressure

@overscan_pressure.setter
def overscan_pressure(self, value):
def overscan_pressure(self, value: int) -> None:
if not value in _BME280_OVERSCANS:
raise ValueError("Overscan value '%s' not supported" % (value))
self._overscan_pressure = value
self._write_ctrl_meas()

@property
def iir_filter(self):
def iir_filter(self) -> int:
"""
Controls the time constant of the IIR filter
Allowed values are the constants IIR_FILTER_*
"""
return self._iir_filter

@iir_filter.setter
def iir_filter(self, value):
def iir_filter(self, value: int) -> None:
if not value in _BME280_IIR_FILTERS:
raise ValueError("IIR Filter '%s' not supported" % (value))
self._iir_filter = value
self._write_config()

@property
def _config(self):
def _config(self) -> int:
"""Value to be written to the device's config register """
config = 0
if self.mode == MODE_NORMAL:
Expand All @@ -231,15 +238,15 @@ def _config(self):
return config

@property
def _ctrl_meas(self):
def _ctrl_meas(self) -> int:
"""Value to be written to the device's ctrl_meas register """
ctrl_meas = self.overscan_temperature << 5
ctrl_meas += self.overscan_pressure << 2
ctrl_meas += self.mode
return ctrl_meas

@property
def measurement_time_typical(self):
def measurement_time_typical(self) -> float:
"""Typical time in milliseconds required to complete a measurement in normal mode"""
meas_time_ms = 1.0
if self.overscan_temperature != OVERSCAN_DISABLE:
Expand All @@ -251,7 +258,7 @@ def measurement_time_typical(self):
return meas_time_ms

@property
def measurement_time_max(self):
def measurement_time_max(self) -> float:
"""Maximum time in milliseconds required to complete a measurement in normal mode"""
meas_time_ms = 1.25
if self.overscan_temperature != OVERSCAN_DISABLE:
Expand Down Expand Up @@ -309,23 +316,23 @@ class Adafruit_BME280_I2C(Adafruit_BME280_Advanced):

"""

def __init__(self, i2c, address=_BME280_ADDRESS):
def __init__(self, i2c: I2C, address: int = _BME280_ADDRESS) -> None:
from adafruit_bus_device import ( # pylint: disable=import-outside-toplevel
i2c_device,
)

self._i2c = i2c_device.I2CDevice(i2c, address)
super().__init__()

def _read_register(self, register, length):
def _read_register(self, register: int, length: int) -> bytearray:
with self._i2c as i2c:
i2c.write(bytes([register & 0xFF]))
result = bytearray(length)
i2c.readinto(result)
# print("$%02X => %s" % (register, [hex(i) for i in result]))
return result

def _write_register_byte(self, register, value):
def _write_register_byte(self, register: int, value: int) -> None:
with self._i2c as i2c:
i2c.write(bytes([register & 0xFF, value & 0xFF]))
# print("$%02X <= 0x%02X" % (register, value))
Expand Down Expand Up @@ -379,15 +386,15 @@ class Adafruit_BME280_SPI(Adafruit_BME280_Advanced):

"""

def __init__(self, spi, cs, baudrate=100000):
def __init__(self, spi: SPI, cs: DigitalInOut, baudrate: int = 100000) -> None:
from adafruit_bus_device import ( # pylint: disable=import-outside-toplevel
spi_device,
)

self._spi = spi_device.SPIDevice(spi, cs, baudrate=baudrate)
super().__init__()

def _read_register(self, register, length):
def _read_register(self, register: int, length: int) -> bytearray:
register = (register | 0x80) & 0xFF # Read single, bit 7 high.
with self._spi as spi:
spi.write(bytearray([register])) # pylint: disable=no-member
Expand All @@ -396,7 +403,7 @@ def _read_register(self, register, length):
# print("$%02X => %s" % (register, [hex(i) for i in result]))
return result

def _write_register_byte(self, register, value):
def _write_register_byte(self, register: int, value: int) -> None:
register &= 0x7F # Write, bit 7 low.
with self._spi as spi:
spi.write(bytes([register, value & 0xFF])) # pylint: disable=no-member
Loading