diff options
author | Damien George <damien.p.george@gmail.com> | 2016-08-29 12:27:21 +1000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2016-08-29 12:27:21 +1000 |
commit | 8e9b98e974ff141ba78918021f3203f620d1de8a (patch) | |
tree | 2667bcb7deebef5d8b21dae30def060c442b551e | |
parent | 9fba618356679b0eede00b7cd746d1a53e6b3772 (diff) | |
download | micropython-8e9b98e974ff141ba78918021f3203f620d1de8a.tar.gz micropython-8e9b98e974ff141ba78918021f3203f620d1de8a.zip |
esp8266/modules/onewire: Change onewire.read() to onewire.readinto().
This allows 1-wire drivers (eg DS18X20) to perform in-place operations and
hence do less memory allocations.
-rw-r--r-- | esp8266/modules/ds18x20.py | 7 | ||||
-rw-r--r-- | esp8266/modules/onewire.py | 6 |
2 files changed, 6 insertions, 7 deletions
diff --git a/esp8266/modules/ds18x20.py b/esp8266/modules/ds18x20.py index 66983f5bcc..9c5bb8eb6b 100644 --- a/esp8266/modules/ds18x20.py +++ b/esp8266/modules/ds18x20.py @@ -8,6 +8,7 @@ _WR_SCRATCH = const(0x4e) class DS18X20: def __init__(self, onewire): self.ow = onewire + self.buf = bytearray(9) def scan(self): return [rom for rom in self.ow.scan() if rom[0] == 0x28] @@ -21,10 +22,10 @@ class DS18X20: self.ow.reset(True) self.ow.select_rom(rom) self.ow.writebyte(_RD_SCRATCH) - buf = self.ow.read(9) - if self.ow.crc8(buf): + self.ow.readinto(self.buf) + if self.ow.crc8(self.buf): raise Exception('CRC error') - return buf + return self.buf def write_scratch(self, rom, buf): self.ow.reset(True) diff --git a/esp8266/modules/onewire.py b/esp8266/modules/onewire.py index af5675649b..06b216a57a 100644 --- a/esp8266/modules/onewire.py +++ b/esp8266/modules/onewire.py @@ -27,11 +27,9 @@ class OneWire: def readbyte(self): return _ow.readbyte(self.pin) - def read(self, count): - buf = bytearray(count) - for i in range(count): + def readinto(self, buf): + for i in range(len(buf)): buf[i] = _ow.readbyte(self.pin) - return buf def writebit(self, value): return _ow.writebit(self.pin, value) |