Skip to content

Commit 1485714

Browse files
committed
Use custom scan function to work around address range limitation
1 parent 09ecd35 commit 1485714

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

src/modulino/modulino.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ def discover(self, default_addresses: list[int]) -> int | None:
183183
if len(default_addresses) == 0:
184184
return None
185185

186-
devices_on_bus = self.i2c_bus.scan()
186+
devices_on_bus = Modulino.scan(self.i2c_bus)
187187
for addr in default_addresses:
188188
if addr in devices_on_bus:
189189
return addr
@@ -207,7 +207,7 @@ def connected(self) -> bool:
207207
"""
208208
if not bool(self):
209209
return False
210-
return self.address in self.i2c_bus.scan()
210+
return self.address in Modulino.scan(self.i2c_bus)
211211

212212
@property
213213
def pin_strap_address(self) -> int | None:
@@ -314,6 +314,18 @@ def has_default_address(self) -> bool:
314314
"""
315315
return self.address in self.default_addresses
316316

317+
@staticmethod
318+
def scan(bus: I2C) -> list[int]:
319+
addresses = bytearray() # Use 8bit data type
320+
# Skip general call address (0x00)
321+
for address in range(1,128):
322+
try:
323+
bus.writeto(address, b'')
324+
addresses.append(address)
325+
except OSError:
326+
pass
327+
return list(addresses)
328+
317329
@staticmethod
318330
def available_devices(bus: I2C = None) -> list[Modulino]:
319331
"""
@@ -327,7 +339,7 @@ def available_devices(bus: I2C = None) -> list[Modulino]:
327339
"""
328340
if bus is None:
329341
bus = _I2CHelper.get_interface()
330-
device_addresses = bus.scan()
342+
device_addresses = Modulino.scan(bus)
331343
devices = []
332344
for address in device_addresses:
333345
if address == _BOOTLOADER_ADDRESS:

0 commit comments

Comments
 (0)