17
17
import busio
18
18
from micropython import const
19
19
20
+ try :
21
+ from typing import Optional , List , Tuple
22
+ from microcontroller import Pin
23
+ except ImportError :
24
+ pass
25
+
20
26
_SEARCH_ROM = const (0xF0 )
21
27
_MATCH_ROM = const (0x55 )
22
28
_SKIP_ROM = const (0xCC )
@@ -30,56 +36,56 @@ class OneWireError(Exception):
30
36
class OneWireAddress :
31
37
"""A class to represent a 1-Wire address."""
32
38
33
- def __init__ (self , rom ) :
39
+ def __init__ (self , rom : bytearray ) -> None :
34
40
self ._rom = rom
35
41
36
42
@property
37
- def rom (self ):
43
+ def rom (self ) -> bytearray :
38
44
"""The unique 64 bit ROM code."""
39
45
return self ._rom
40
46
41
47
@property
42
- def crc (self ):
48
+ def crc (self ) -> int :
43
49
"""The 8 bit CRC."""
44
50
return self ._rom [7 ]
45
51
46
52
@property
47
- def serial_number (self ):
53
+ def serial_number (self ) -> bytearray :
48
54
"""The 48 bit serial number."""
49
55
return self ._rom [1 :7 ]
50
56
51
57
@property
52
- def family_code (self ):
58
+ def family_code (self ) -> int :
53
59
"""The 8 bit family code."""
54
60
return self ._rom [0 ]
55
61
56
62
57
63
class OneWireBus :
58
64
"""A class to represent a 1-Wire bus."""
59
65
60
- def __init__ (self , pin ) :
66
+ def __init__ (self , pin : Pin ) -> None :
61
67
# pylint: disable=no-member
62
68
self ._ow = busio .OneWire (pin )
63
69
self ._readbit = self ._ow .read_bit
64
70
self ._writebit = self ._ow .write_bit
65
71
self ._maximum_devices = _MAX_DEV
66
72
67
73
@property
68
- def maximum_devices (self ):
74
+ def maximum_devices (self ) -> int :
69
75
"""The maximum number of devices the bus will scan for. Valid range is 1 to 255.
70
76
It is an error to have more devices on the bus than this number. Having less is OK.
71
77
"""
72
78
return self ._maximum_devices
73
79
74
80
@maximum_devices .setter
75
- def maximum_devices (self , count ) :
81
+ def maximum_devices (self , count : int ) -> None :
76
82
if not isinstance (count , int ):
77
83
raise ValueError ("Maximum must be an integer value 1 - 255." )
78
84
if count < 1 or count > 0xFF :
79
85
raise ValueError ("Maximum must be an integer value 1 - 255." )
80
86
self ._maximum_devices = count
81
87
82
- def reset (self , required = False ):
88
+ def reset (self , required : bool = False ) -> bool :
83
89
"""
84
90
Perform a reset and check for presence pulse.
85
91
@@ -90,7 +96,7 @@ def reset(self, required=False):
90
96
raise OneWireError ("No presence pulse found. Check devices and wiring." )
91
97
return not reset
92
98
93
- def readinto (self , buf , * , start = 0 , end = None ):
99
+ def readinto (self , buf : bytearray , * , start : int = 0 , end : Optional [ int ] = None ) -> None :
94
100
"""
95
101
Read into ``buf`` from the device. The number of bytes read will be the
96
102
length of ``buf``.
@@ -108,7 +114,7 @@ def readinto(self, buf, *, start=0, end=None):
108
114
for i in range (start , end ):
109
115
buf [i ] = self ._readbyte ()
110
116
111
- def write (self , buf , * , start = 0 , end = None ):
117
+ def write (self , buf : bytearray , * , start : int = 0 , end : Optional [ int ] = None ) -> None :
112
118
"""
113
119
Write the bytes from ``buf`` to the device.
114
120
@@ -125,7 +131,7 @@ def write(self, buf, *, start=0, end=None):
125
131
for i in range (start , end ):
126
132
self ._writebyte (buf [i ])
127
133
128
- def scan (self ):
134
+ def scan (self ) -> List [ OneWireAddress ] :
129
135
"""Scan for devices on the bus and return a list of addresses."""
130
136
devices = []
131
137
diff = 65
@@ -146,18 +152,18 @@ def scan(self):
146
152
break
147
153
return devices
148
154
149
- def _readbyte (self ):
155
+ def _readbyte (self ) -> int :
150
156
val = 0
151
157
for i in range (8 ):
152
158
val |= self ._ow .read_bit () << i
153
159
return val
154
160
155
- def _writebyte (self , value ) :
161
+ def _writebyte (self , value : int ) -> None :
156
162
for i in range (8 ):
157
163
bit = (value >> i ) & 0x1
158
164
self ._ow .write_bit (bit )
159
165
160
- def _search_rom (self , l_rom , diff ) :
166
+ def _search_rom (self , l_rom : Optional [ bytearray ] , diff : int ) -> Tuple [ bytearray , int ] :
161
167
if not self .reset ():
162
168
return None , 0
163
169
self ._writebyte (_SEARCH_ROM )
@@ -185,7 +191,7 @@ def _search_rom(self, l_rom, diff):
185
191
return rom , next_diff
186
192
187
193
@staticmethod
188
- def crc8 (data ) :
194
+ def crc8 (data : bytearray ) -> int :
189
195
"""
190
196
Perform the 1-Wire CRC check on the provided data.
191
197
0 commit comments