Skip to content

Commit 0d45dca

Browse files
authored
Merge pull request #9 from tannewt/struct_opt
Optimize UnaryStruct memory use for when its unused
2 parents a4bc90c + 9ed054e commit 0d45dca

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

adafruit_register/i2c_struct.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,16 +71,19 @@ class UnaryStruct:
7171
"""
7272
def __init__(self, register_address, struct_format):
7373
self.format = struct_format
74-
self.buffer = bytearray(1+struct.calcsize(self.format))
75-
self.buffer[0] = register_address
74+
self.address = register_address
7675

7776
def __get__(self, obj, objtype=None):
77+
buf = bytearray(1+struct.calcsize(self.format))
78+
buf[0] = self.address
7879
with obj.i2c_device:
79-
obj.i2c_device.write(self.buffer, end=1, stop=False)
80-
obj.i2c_device.readinto(self.buffer, start=1)
81-
return struct.unpack_from(self.format, memoryview(self.buffer)[1:])[0]
80+
obj.i2c_device.write(buf, end=1, stop=False)
81+
obj.i2c_device.readinto(buf, start=1)
82+
return struct.unpack_from(self.format, buf, 1)[0]
8283

8384
def __set__(self, obj, value):
84-
struct.pack_into(self.format, self.buffer, 1, value)
85+
buf = bytearray(1+struct.calcsize(self.format))
86+
buf[0] = self.address
87+
struct.pack_into(self.format, buf, 1, value)
8588
with obj.i2c_device:
86-
obj.i2c_device.write(self.buffer)
89+
obj.i2c_device.write(buf)

0 commit comments

Comments
 (0)