Skip to content

Commit 72c1ccb

Browse files
authored
Merge pull request #32 from tcfranks/main
Add Missing Type Annotations
2 parents 650c89f + 74829d5 commit 72c1ccb

File tree

2 files changed

+32
-23
lines changed

2 files changed

+32
-23
lines changed

adafruit_scd30.py

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@
3333
from adafruit_bus_device import i2c_device
3434
from micropython import const
3535

36+
try:
37+
from typing import Union, Optional
38+
from circuitpython_typing import ReadableBuffer
39+
from busio import I2C
40+
except ImportError:
41+
pass
3642

3743
__version__ = "0.0.0+auto.0"
3844
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_SCD30.git"
@@ -85,7 +91,9 @@ class SCD30:
8591
8692
"""
8793

88-
def __init__(self, i2c_bus, ambient_pressure=0, address=SCD30_DEFAULT_ADDR):
94+
def __init__(
95+
self, i2c_bus: I2C, ambient_pressure: int = 0, address: int = SCD30_DEFAULT_ADDR
96+
) -> None:
8997
if ambient_pressure != 0:
9098
if ambient_pressure < 700 or ambient_pressure > 1400:
9199
raise AttributeError("`ambient_pressure` must be from 700-1400 mBar")
@@ -104,13 +112,13 @@ def __init__(self, i2c_bus, ambient_pressure=0, address=SCD30_DEFAULT_ADDR):
104112
self._relative_humidity = None
105113
self._co2 = None
106114

107-
def reset(self):
115+
def reset(self) -> None:
108116
"""Perform a soft reset on the sensor, restoring default values"""
109117
self._send_command(_CMD_SOFT_RESET)
110118
time.sleep(0.1) # not mentioned by datasheet, but required to avoid IO error
111119

112120
@property
113-
def measurement_interval(self):
121+
def measurement_interval(self) -> int:
114122
"""Sets the interval between readings in seconds. The interval value must be from 2-1800
115123
116124
.. note::
@@ -121,13 +129,13 @@ def measurement_interval(self):
121129
return self._read_register(_CMD_SET_MEASUREMENT_INTERVAL)
122130

123131
@measurement_interval.setter
124-
def measurement_interval(self, value):
132+
def measurement_interval(self, value: int) -> None:
125133
if value < 2 or value > 1800:
126134
raise AttributeError("measurement_interval must be from 2-1800 seconds")
127135
self._send_command(_CMD_SET_MEASUREMENT_INTERVAL, value)
128136

129137
@property
130-
def self_calibration_enabled(self):
138+
def self_calibration_enabled(self) -> bool:
131139
"""Enables or disables automatic self calibration (ASC). To work correctly, the sensor must
132140
be on and active for 7 days after enabling ASC, and exposed to fresh air for at least 1 hour
133141
per day. Consult the manufacturer's documentation for more information.
@@ -144,32 +152,32 @@ def self_calibration_enabled(self):
144152
return self._read_register(_CMD_AUTOMATIC_SELF_CALIBRATION) == 1
145153

146154
@self_calibration_enabled.setter
147-
def self_calibration_enabled(self, enabled):
155+
def self_calibration_enabled(self, enabled: bool) -> None:
148156
self._send_command(_CMD_AUTOMATIC_SELF_CALIBRATION, enabled)
149157
if enabled:
150158
time.sleep(0.01)
151159

152160
@property
153-
def data_available(self):
161+
def data_available(self) -> bool:
154162
"""Check the sensor to see if new data is available"""
155163
return self._read_register(_CMD_GET_DATA_READY)
156164

157165
@property
158-
def ambient_pressure(self):
166+
def ambient_pressure(self) -> int:
159167
"""Specifies the ambient air pressure at the measurement location in mBar. Setting this
160168
value adjusts the CO2 measurement calculations to account for the air pressure's effect on
161169
readings. Values must be in mBar, from 700 to 1400 mBar"""
162170
return self._read_register(_CMD_CONTINUOUS_MEASUREMENT)
163171

164172
@ambient_pressure.setter
165-
def ambient_pressure(self, pressure_mbar):
173+
def ambient_pressure(self, pressure_mbar: int) -> None:
166174
pressure_mbar = int(pressure_mbar)
167175
if pressure_mbar != 0 and (pressure_mbar > 1400 or pressure_mbar < 700):
168176
raise AttributeError("ambient_pressure must be from 700 to 1400 mBar")
169177
self._send_command(_CMD_CONTINUOUS_MEASUREMENT, pressure_mbar)
170178

171179
@property
172-
def altitude(self):
180+
def altitude(self) -> int:
173181
"""Specifies the altitude at the measurement location in meters above sea level. Setting
174182
this value adjusts the CO2 measurement calculations to account for the air pressure's effect
175183
on readings.
@@ -182,11 +190,11 @@ def altitude(self):
182190
return self._read_register(_CMD_SET_ALTITUDE_COMPENSATION)
183191

184192
@altitude.setter
185-
def altitude(self, altitude):
193+
def altitude(self, altitude: int) -> None:
186194
self._send_command(_CMD_SET_ALTITUDE_COMPENSATION, int(altitude))
187195

188196
@property
189-
def temperature_offset(self):
197+
def temperature_offset(self) -> float:
190198
"""Specifies the offset to be added to the reported measurements to account for a bias in
191199
the measured signal. Value is in degrees Celsius with a resolution of 0.01 degrees and a
192200
maximum value of 655.35 C
@@ -200,7 +208,7 @@ def temperature_offset(self):
200208
return raw_offset / 100.0
201209

202210
@temperature_offset.setter
203-
def temperature_offset(self, offset):
211+
def temperature_offset(self, offset: Union[float, int]) -> None:
204212
if offset > 655.35:
205213
raise AttributeError(
206214
"Offset value must be less than or equal to 655.35 degrees Celsius"
@@ -209,7 +217,7 @@ def temperature_offset(self, offset):
209217
self._send_command(_CMD_SET_TEMPERATURE_OFFSET, int(offset * 100))
210218

211219
@property
212-
def forced_recalibration_reference(self):
220+
def forced_recalibration_reference(self) -> int:
213221
"""Specifies the concentration of a reference source of CO2 placed in close proximity to the
214222
sensor. The value must be from 400 to 2000 ppm.
215223
@@ -221,11 +229,11 @@ def forced_recalibration_reference(self):
221229
return self._read_register(_CMD_SET_FORCED_RECALIBRATION_FACTOR)
222230

223231
@forced_recalibration_reference.setter
224-
def forced_recalibration_reference(self, reference_value):
232+
def forced_recalibration_reference(self, reference_value: int) -> None:
225233
self._send_command(_CMD_SET_FORCED_RECALIBRATION_FACTOR, reference_value)
226234

227235
@property
228-
def CO2(self): # pylint:disable=invalid-name
236+
def CO2(self) -> float: # pylint:disable=invalid-name
229237
"""Returns the CO2 concentration in PPM (parts per million)
230238
231239
.. note::
@@ -237,7 +245,7 @@ def CO2(self): # pylint:disable=invalid-name
237245
return self._co2
238246

239247
@property
240-
def temperature(self):
248+
def temperature(self) -> float:
241249
"""Returns the current temperature in degrees Celsius
242250
243251
.. note::
@@ -249,7 +257,7 @@ def temperature(self):
249257
return self._temperature
250258

251259
@property
252-
def relative_humidity(self):
260+
def relative_humidity(self) -> float:
253261
"""Returns the current relative humidity in %rH.
254262
255263
.. note::
@@ -260,7 +268,7 @@ def relative_humidity(self):
260268
self._read_data()
261269
return self._relative_humidity
262270

263-
def _send_command(self, command, arguments=None):
271+
def _send_command(self, command: int, arguments: Optional[int] = None) -> None:
264272
# if there is an argument, calculate the CRC and include it as well.
265273
if arguments is not None:
266274
self._crc_buffer[0] = arguments >> 8
@@ -280,7 +288,7 @@ def _send_command(self, command, arguments=None):
280288
i2c.write(self._buffer, end=end_byte)
281289
time.sleep(0.05) # 3ms min delay
282290

283-
def _read_register(self, reg_addr):
291+
def _read_register(self, reg_addr: int) -> int:
284292
self._buffer[0] = reg_addr >> 8
285293
self._buffer[1] = reg_addr & 0xFF
286294
with self.i2c_device as i2c:
@@ -293,7 +301,7 @@ def _read_register(self, reg_addr):
293301
raise RuntimeError("CRC check failed while reading data")
294302
return unpack_from(">H", self._buffer[0:2])[0]
295303

296-
def _read_data(self):
304+
def _read_data(self) -> None:
297305
self._send_command(_CMD_READ_MEASUREMENT)
298306
with self.i2c_device as i2c:
299307
i2c.readinto(self._buffer)
@@ -314,11 +322,11 @@ def _read_data(self):
314322
">f", self._buffer[12:14] + self._buffer[15:17]
315323
)[0]
316324

317-
def _check_crc(self, data_bytes, crc):
325+
def _check_crc(self, data_bytes: ReadableBuffer, crc: int) -> bool:
318326
return crc == self._crc8(bytearray(data_bytes))
319327

320328
@staticmethod
321-
def _crc8(buffer):
329+
def _crc8(buffer: bytearray) -> int:
322330
crc = 0xFF
323331
for byte in buffer:
324332
crc ^= byte

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@
55
Adafruit-Blinka
66
adafruit-circuitpython-register
77
adafruit-circuitpython-busdevice
8+
adafruit-circuitpython-typing

0 commit comments

Comments
 (0)