Skip to content

Commit 2e15bf8

Browse files
authored
Merge pull request #24 from tekktrik/doc/add-typing
Add typing, minor tweaks
2 parents a3ce1f3 + 3da156b commit 2e15bf8

File tree

2 files changed

+51
-23
lines changed

2 files changed

+51
-23
lines changed

adafruit_onewire/bus.py

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@
1717
import busio
1818
from micropython import const
1919

20+
try:
21+
from typing import Optional, List, Tuple
22+
from microcontroller import Pin
23+
except ImportError:
24+
pass
25+
2026
_SEARCH_ROM = const(0xF0)
2127
_MATCH_ROM = const(0x55)
2228
_SKIP_ROM = const(0xCC)
@@ -30,56 +36,56 @@ class OneWireError(Exception):
3036
class OneWireAddress:
3137
"""A class to represent a 1-Wire address."""
3238

33-
def __init__(self, rom):
39+
def __init__(self, rom: bytearray) -> None:
3440
self._rom = rom
3541

3642
@property
37-
def rom(self):
43+
def rom(self) -> bytearray:
3844
"""The unique 64 bit ROM code."""
3945
return self._rom
4046

4147
@property
42-
def crc(self):
48+
def crc(self) -> int:
4349
"""The 8 bit CRC."""
4450
return self._rom[7]
4551

4652
@property
47-
def serial_number(self):
53+
def serial_number(self) -> bytearray:
4854
"""The 48 bit serial number."""
4955
return self._rom[1:7]
5056

5157
@property
52-
def family_code(self):
58+
def family_code(self) -> int:
5359
"""The 8 bit family code."""
5460
return self._rom[0]
5561

5662

5763
class OneWireBus:
5864
"""A class to represent a 1-Wire bus."""
5965

60-
def __init__(self, pin):
66+
def __init__(self, pin: Pin) -> None:
6167
# pylint: disable=no-member
6268
self._ow = busio.OneWire(pin)
6369
self._readbit = self._ow.read_bit
6470
self._writebit = self._ow.write_bit
6571
self._maximum_devices = _MAX_DEV
6672

6773
@property
68-
def maximum_devices(self):
74+
def maximum_devices(self) -> int:
6975
"""The maximum number of devices the bus will scan for. Valid range is 1 to 255.
7076
It is an error to have more devices on the bus than this number. Having less is OK.
7177
"""
7278
return self._maximum_devices
7379

7480
@maximum_devices.setter
75-
def maximum_devices(self, count):
81+
def maximum_devices(self, count: int) -> None:
7682
if not isinstance(count, int):
7783
raise ValueError("Maximum must be an integer value 1 - 255.")
7884
if count < 1 or count > 0xFF:
7985
raise ValueError("Maximum must be an integer value 1 - 255.")
8086
self._maximum_devices = count
8187

82-
def reset(self, required=False):
88+
def reset(self, required: bool = False) -> bool:
8389
"""
8490
Perform a reset and check for presence pulse.
8591
@@ -90,7 +96,9 @@ def reset(self, required=False):
9096
raise OneWireError("No presence pulse found. Check devices and wiring.")
9197
return not reset
9298

93-
def readinto(self, buf, *, start=0, end=None):
99+
def readinto(
100+
self, buf: bytearray, *, start: int = 0, end: Optional[int] = None
101+
) -> None:
94102
"""
95103
Read into ``buf`` from the device. The number of bytes read will be the
96104
length of ``buf``.
@@ -108,7 +116,9 @@ def readinto(self, buf, *, start=0, end=None):
108116
for i in range(start, end):
109117
buf[i] = self._readbyte()
110118

111-
def write(self, buf, *, start=0, end=None):
119+
def write(
120+
self, buf: bytearray, *, start: int = 0, end: Optional[int] = None
121+
) -> None:
112122
"""
113123
Write the bytes from ``buf`` to the device.
114124
@@ -125,11 +135,11 @@ def write(self, buf, *, start=0, end=None):
125135
for i in range(start, end):
126136
self._writebyte(buf[i])
127137

128-
def scan(self):
138+
def scan(self) -> List[OneWireAddress]:
129139
"""Scan for devices on the bus and return a list of addresses."""
130140
devices = []
131141
diff = 65
132-
rom = False
142+
rom = None
133143
count = 0
134144
for _ in range(0xFF):
135145
rom, diff = self._search_rom(rom, diff)
@@ -146,18 +156,20 @@ def scan(self):
146156
break
147157
return devices
148158

149-
def _readbyte(self):
159+
def _readbyte(self) -> int:
150160
val = 0
151161
for i in range(8):
152162
val |= self._ow.read_bit() << i
153163
return val
154164

155-
def _writebyte(self, value):
165+
def _writebyte(self, value: int) -> None:
156166
for i in range(8):
157167
bit = (value >> i) & 0x1
158168
self._ow.write_bit(bit)
159169

160-
def _search_rom(self, l_rom, diff):
170+
def _search_rom(
171+
self, l_rom: Optional[bytearray], diff: int
172+
) -> Tuple[bytearray, int]:
161173
if not self.reset():
162174
return None, 0
163175
self._writebyte(_SEARCH_ROM)
@@ -185,7 +197,7 @@ def _search_rom(self, l_rom, diff):
185197
return rom, next_diff
186198

187199
@staticmethod
188-
def crc8(data):
200+
def crc8(data: bytearray) -> int:
189201
"""
190202
Perform the 1-Wire CRC check on the provided data.
191203

adafruit_onewire/device.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,38 @@
1414
__version__ = "0.0.0-auto.0"
1515
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_OneWire.git"
1616

17+
try:
18+
from typing import Optional, Type
19+
from types import TracebackType
20+
from adafruit_onewire.bus import OneWireBus, OneWireAddress
21+
except ImportError:
22+
pass
23+
1724
_MATCH_ROM = b"\x55"
1825

1926

2027
class OneWireDevice:
2128
"""A class to represent a single device on the 1-Wire bus."""
2229

23-
def __init__(self, bus, address):
30+
def __init__(self, bus: OneWireBus, address: OneWireAddress):
2431
self._bus = bus
2532
self._address = address
2633

27-
def __enter__(self):
34+
def __enter__(self) -> "OneWireDevice":
2835
self._select_rom()
2936
return self
3037

31-
def __exit__(self, *exc):
38+
def __exit__(
39+
self,
40+
exception_type: Optional[Type[type]],
41+
exception_value: Optional[BaseException],
42+
traceback: Optional[TracebackType],
43+
) -> bool:
3244
return False
3345

34-
def readinto(self, buf, *, start=0, end=None):
46+
def readinto(
47+
self, buf: bytearray, *, start: int = 0, end: Optional[int] = None
48+
) -> None:
3549
"""
3650
Read into ``buf`` from the device. The number of bytes read will be the
3751
length of ``buf``.
@@ -49,7 +63,9 @@ def readinto(self, buf, *, start=0, end=None):
4963
if self._bus.crc8(buf):
5064
raise RuntimeError("CRC error.")
5165

52-
def write(self, buf, *, start=0, end=None):
66+
def write(
67+
self, buf: bytearray, *, start: int = 0, end: Optional[int] = None
68+
) -> None:
5369
"""
5470
Write the bytes from ``buf`` to the device.
5571
@@ -63,7 +79,7 @@ def write(self, buf, *, start=0, end=None):
6379
"""
6480
return self._bus.write(buf, start=start, end=end)
6581

66-
def _select_rom(self):
82+
def _select_rom(self) -> None:
6783
self._bus.reset()
6884
self.write(_MATCH_ROM)
6985
self.write(self._address.rom)

0 commit comments

Comments
 (0)