Skip to content

Commit 4eb9517

Browse files
authored
Merge pull request #36 from billvanleeuwen424/typeAnnotations
Missing Type Annotations
2 parents b01a1c6 + 893e898 commit 4eb9517

File tree

1 file changed

+50
-35
lines changed

1 file changed

+50
-35
lines changed

adafruit_bmp280.py

Lines changed: 50 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
#
33
# SPDX-License-Identifier: MIT
44

5+
# SPDX-FileCopyrightText: 2022 Bill Van Leeuwen for Adafruit Industries
6+
#
7+
# SPDX-License-Identifier: MIT
8+
59
"""
610
`adafruit_bmp280`
711
===============================================================================
@@ -30,6 +34,17 @@
3034

3135
from micropython import const
3236

37+
38+
try:
39+
from typing import Optional
40+
41+
# Used only for type annotations.
42+
from busio import SPI, I2C
43+
from digitalio import DigitalInOut
44+
45+
except ImportError:
46+
pass
47+
3348
__version__ = "0.0.0-auto.0"
3449
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_BMP280.git"
3550

@@ -121,7 +136,7 @@ class Adafruit_BMP280: # pylint: disable=invalid-name
121136
122137
"""
123138

124-
def __init__(self):
139+
def __init__(self) -> None:
125140
# Check device ID.
126141
chip_id = self._read_byte(_REGISTER_CHIPID)
127142
if _CHIP_ID != chip_id:
@@ -140,7 +155,7 @@ def __init__(self):
140155
"""Pressure in hectoPascals at sea level. Used to calibrate `altitude`."""
141156
self._t_fine = None
142157

143-
def _read_temperature(self):
158+
def _read_temperature(self) -> None:
144159
# perform one measurement
145160
if self.mode != MODE_NORMAL:
146161
self.mode = MODE_FORCE
@@ -164,27 +179,27 @@ def _read_temperature(self):
164179
self._t_fine = int(var1 + var2)
165180
# print("t_fine: ", self.t_fine)
166181

167-
def _reset(self):
182+
def _reset(self) -> None:
168183
"""Soft reset the sensor"""
169184
self._write_register_byte(_REGISTER_SOFTRESET, 0xB6)
170185
sleep(0.004) # Datasheet says 2ms. Using 4ms just to be safe
171186

172-
def _write_ctrl_meas(self):
187+
def _write_ctrl_meas(self) -> None:
173188
"""
174189
Write the values to the ctrl_meas register in the device
175190
ctrl_meas sets the pressure and temperature data acquisition options
176191
"""
177192
self._write_register_byte(_REGISTER_CTRL_MEAS, self._ctrl_meas)
178193

179-
def _get_status(self):
194+
def _get_status(self) -> int:
180195
"""Get the value from the status register in the device"""
181196
return self._read_byte(_REGISTER_STATUS)
182197

183-
def _read_config(self):
198+
def _read_config(self) -> int:
184199
"""Read the value from the config register in the device"""
185200
return self._read_byte(_REGISTER_CONFIG)
186201

187-
def _write_config(self):
202+
def _write_config(self) -> None:
188203
"""Write the value to the config register in the device"""
189204
normal_flag = False
190205
if self._mode == MODE_NORMAL:
@@ -196,30 +211,30 @@ def _write_config(self):
196211
self.mode = MODE_NORMAL
197212

198213
@property
199-
def mode(self):
214+
def mode(self) -> int:
200215
"""
201216
Operation mode
202217
Allowed values are set in the MODE enum class
203218
"""
204219
return self._mode
205220

206221
@mode.setter
207-
def mode(self, value):
222+
def mode(self, value: int) -> None:
208223
if not value in _BMP280_MODES:
209224
raise ValueError("Mode '%s' not supported" % (value))
210225
self._mode = value
211226
self._write_ctrl_meas()
212227

213228
@property
214-
def standby_period(self):
229+
def standby_period(self) -> int:
215230
"""
216231
Control the inactive period when in Normal mode
217232
Allowed standby periods are set the STANDBY enum class
218233
"""
219234
return self._t_standby
220235

221236
@standby_period.setter
222-
def standby_period(self, value):
237+
def standby_period(self, value: int) -> None:
223238
if not value in _BMP280_STANDBY_TCS:
224239
raise ValueError("Standby Period '%s' not supported" % (value))
225240
if self._t_standby == value:
@@ -228,52 +243,52 @@ def standby_period(self, value):
228243
self._write_config()
229244

230245
@property
231-
def overscan_temperature(self):
246+
def overscan_temperature(self) -> int:
232247
"""
233248
Temperature Oversampling
234249
Allowed values are set in the OVERSCAN enum class
235250
"""
236251
return self._overscan_temperature
237252

238253
@overscan_temperature.setter
239-
def overscan_temperature(self, value):
254+
def overscan_temperature(self, value: int) -> None:
240255
if not value in _BMP280_OVERSCANS:
241256
raise ValueError("Overscan value '%s' not supported" % (value))
242257
self._overscan_temperature = value
243258
self._write_ctrl_meas()
244259

245260
@property
246-
def overscan_pressure(self):
261+
def overscan_pressure(self) -> int:
247262
"""
248263
Pressure Oversampling
249264
Allowed values are set in the OVERSCAN enum class
250265
"""
251266
return self._overscan_pressure
252267

253268
@overscan_pressure.setter
254-
def overscan_pressure(self, value):
269+
def overscan_pressure(self, value: int) -> None:
255270
if not value in _BMP280_OVERSCANS:
256271
raise ValueError("Overscan value '%s' not supported" % (value))
257272
self._overscan_pressure = value
258273
self._write_ctrl_meas()
259274

260275
@property
261-
def iir_filter(self):
276+
def iir_filter(self) -> int:
262277
"""
263278
Controls the time constant of the IIR filter
264279
Allowed values are set in the IIR_FILTER enum class
265280
"""
266281
return self._iir_filter
267282

268283
@iir_filter.setter
269-
def iir_filter(self, value):
284+
def iir_filter(self, value: int) -> None:
270285
if not value in _BMP280_IIR_FILTERS:
271286
raise ValueError("IIR Filter '%s' not supported" % (value))
272287
self._iir_filter = value
273288
self._write_config()
274289

275290
@property
276-
def _config(self):
291+
def _config(self) -> int:
277292
"""Value to be written to the device's config register"""
278293
config = 0
279294
if self.mode == MODE_NORMAL:
@@ -283,15 +298,15 @@ def _config(self):
283298
return config
284299

285300
@property
286-
def _ctrl_meas(self):
301+
def _ctrl_meas(self) -> int:
287302
"""Value to be written to the device's ctrl_meas register"""
288303
ctrl_meas = self.overscan_temperature << 5
289304
ctrl_meas += self.overscan_pressure << 2
290305
ctrl_meas += self.mode
291306
return ctrl_meas
292307

293308
@property
294-
def measurement_time_typical(self):
309+
def measurement_time_typical(self) -> float:
295310
"""Typical time in milliseconds required to complete a measurement in normal mode"""
296311
meas_time_ms = 1
297312
if self.overscan_temperature != OVERSCAN_DISABLE:
@@ -301,7 +316,7 @@ def measurement_time_typical(self):
301316
return meas_time_ms
302317

303318
@property
304-
def measurement_time_max(self):
319+
def measurement_time_max(self) -> float:
305320
"""Maximum time in milliseconds required to complete a measurement in normal mode"""
306321
meas_time_ms = 1.25
307322
if self.overscan_temperature != OVERSCAN_DISABLE:
@@ -311,13 +326,13 @@ def measurement_time_max(self):
311326
return meas_time_ms
312327

313328
@property
314-
def temperature(self):
329+
def temperature(self) -> float:
315330
"""The compensated temperature in degrees Celsius."""
316331
self._read_temperature()
317332
return self._t_fine / 5120.0
318333

319334
@property
320-
def pressure(self):
335+
def pressure(self) -> Optional[float]:
321336
"""
322337
The compensated pressure in hectoPascals.
323338
returns `None` if pressure measurement is disabled
@@ -348,14 +363,14 @@ def pressure(self):
348363
return pressure
349364

350365
@property
351-
def altitude(self):
366+
def altitude(self) -> float:
352367
"""The altitude based on the sea level pressure (:attr:`sea_level_pressure`)
353368
- which you must enter ahead of time)"""
354369
p = self.pressure # in Si units for hPascal
355370
return 44330 * (1.0 - math.pow(p / self.sea_level_pressure, 0.1903))
356371

357372
####################### Internal helpers ################################
358-
def _read_coefficients(self):
373+
def _read_coefficients(self) -> None:
359374
"""Read & save the calibration coefficients"""
360375
coeff = self._read_register(_REGISTER_DIG_T1, 24)
361376
coeff = list(struct.unpack("<HhhHhhhhhhhh", bytes(coeff)))
@@ -371,23 +386,23 @@ def _read_coefficients(self):
371386
# print("%d %d %d" % (self._pressure_calib[6], self._pressure_calib[7],
372387
# self._pressure_calib[8]))
373388

374-
def _read_byte(self, register):
389+
def _read_byte(self, register: int) -> int:
375390
"""Read a byte register value and return it"""
376391
return self._read_register(register, 1)[0]
377392

378-
def _read24(self, register):
393+
def _read24(self, register: int) -> float:
379394
"""Read an unsigned 24-bit value as a floating point and return it."""
380395
ret = 0.0
381396
for b in self._read_register(register, 3):
382397
ret *= 256.0
383398
ret += float(b & 0xFF)
384399
return ret
385400

386-
def _read_register(self, register, length):
401+
def _read_register(self, register: int, length: int) -> None:
387402
"""Low level register reading, not implemented in base class"""
388403
raise NotImplementedError()
389404

390-
def _write_register_byte(self, register, value):
405+
def _write_register_byte(self, register: int, value: int) -> None:
391406
"""Low level register writing, not implemented in base class"""
392407
raise NotImplementedError()
393408

@@ -433,15 +448,15 @@ class Adafruit_BMP280_I2C(Adafruit_BMP280): # pylint: disable=invalid-name
433448
434449
"""
435450

436-
def __init__(self, i2c, address=0x77):
451+
def __init__(self, i2c: I2C, address: int = 0x77) -> None:
437452
from adafruit_bus_device import ( # pylint: disable=import-outside-toplevel
438453
i2c_device,
439454
)
440455

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

444-
def _read_register(self, register, length):
459+
def _read_register(self, register: int, length: int) -> bytearray:
445460
"""Low level register reading over I2C, returns a list of values"""
446461
with self._i2c as i2c:
447462
i2c.write(bytes([register & 0xFF]))
@@ -450,7 +465,7 @@ def _read_register(self, register, length):
450465
# print("$%02X => %s" % (register, [hex(i) for i in result]))
451466
return result
452467

453-
def _write_register_byte(self, register, value):
468+
def _write_register_byte(self, register: int, value: int) -> None:
454469
"""Low level register writing over I2C, writes one 8-bit value"""
455470
with self._i2c as i2c:
456471
i2c.write(bytes([register & 0xFF, value & 0xFF]))
@@ -502,15 +517,15 @@ class Adafruit_BMP280_SPI(Adafruit_BMP280):
502517
503518
"""
504519

505-
def __init__(self, spi, cs, baudrate=100000):
520+
def __init__(self, spi: SPI, cs: DigitalInOut, baudrate=100000) -> None:
506521
from adafruit_bus_device import ( # pylint: disable=import-outside-toplevel
507522
spi_device,
508523
)
509524

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

513-
def _read_register(self, register, length):
528+
def _read_register(self, register: int, length: int) -> bytearray:
514529
"""Low level register reading over SPI, returns a list of values"""
515530
register = (register | 0x80) & 0xFF # Read single, bit 7 high.
516531
with self._spi as spi:
@@ -521,7 +536,7 @@ def _read_register(self, register, length):
521536
# print("$%02X => %s" % (register, [hex(i) for i in result]))
522537
return result
523538

524-
def _write_register_byte(self, register, value):
539+
def _write_register_byte(self, register: int, value: int) -> None:
525540
"""Low level register writing over SPI, writes one 8-bit value"""
526541
register &= 0x7F # Write, bit 7 low.
527542
with self._spi as spi:

0 commit comments

Comments
 (0)