Skip to content

Commit 5666a1b

Browse files
committed
change read() to read the whole request at once; not one byte at a time
1 parent 2544b4f commit 5666a1b

File tree

1 file changed

+5
-9
lines changed

1 file changed

+5
-9
lines changed

adafruit_fram.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,8 @@ def __getitem__(self, key):
134134
if key > self._max_size:
135135
raise ValueError("Register '{0}' greater than maximum FRAM size."
136136
" ({1})".format(key, self._max_size))
137-
read_buffer = self._read_byte(key)
137+
buffer = bytearray(1)
138+
read_buffer = self._read_register(key, buffer)
138139
elif isinstance(key, slice):
139140
registers = list(range(key.start if not key.start is None else 0,
140141
key.stop if not key.stop is None else self._max_size,
@@ -143,9 +144,8 @@ def __getitem__(self, key):
143144
raise ValueError("Register + Length greater than maximum FRAM size."
144145
" ({0})".format(self._max_size))
145146

146-
read_buffer = bytearray(len(registers))
147-
for i, register in enumerate(registers):
148-
read_buffer[i] = self._read_byte(register)[0]
147+
buffer = bytearray(len(registers))
148+
read_buffer = self._read_register(registers[0], buffer)
149149

150150
return read_buffer
151151

@@ -187,9 +187,6 @@ def __setitem__(self, key, value):
187187

188188
self._write_page(key.start, value, self._wraparound)
189189

190-
def _read_byte(self, register):
191-
return self._read_register(register)
192-
193190
def _read_register(self, register):
194191
# Implemented by subclass
195192
raise NotImplementedError
@@ -229,11 +226,10 @@ def __init__(self, i2c_bus, address=0x50, write_protect=False,
229226
self._i2c = i2cdev(i2c_bus, address)
230227
super().__init__(_MAX_SIZE_I2C, write_protect, wp_pin)
231228

232-
def _read_register(self, register):
229+
def _read_register(self, register, read_buffer):
233230
write_buffer = bytearray(2)
234231
write_buffer[0] = register >> 8
235232
write_buffer[1] = register & 0xFF
236-
read_buffer = bytearray(1)
237233
with self._i2c as i2c:
238234
i2c.write_then_readinto(write_buffer, read_buffer)
239235
return read_buffer

0 commit comments

Comments
 (0)