summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2016-08-29 12:27:21 +1000
committerDamien George <damien.p.george@gmail.com>2016-08-29 12:27:21 +1000
commit8e9b98e974ff141ba78918021f3203f620d1de8a (patch)
tree2667bcb7deebef5d8b21dae30def060c442b551e
parent9fba618356679b0eede00b7cd746d1a53e6b3772 (diff)
downloadmicropython-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.py7
-rw-r--r--esp8266/modules/onewire.py6
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)