Skip to content

Commit 945b1fb

Browse files
authored
Merge pull request #7 from ladyada/master
Reduce memory by turning calls into iterated lists
2 parents d1fcdcc + a76bcfc commit 945b1fb

File tree

1 file changed

+47
-115
lines changed

1 file changed

+47
-115
lines changed

adafruit_vl53l0x.py

+47-115
Original file line numberDiff line numberDiff line change
@@ -163,14 +163,11 @@ def __init__(self, i2c, address=41, io_timeout_s=0):
163163
# Initialize access to the sensor. This is based on the logic from:
164164
# https://github.com/pololu/vl53l0x-arduino/blob/master/VL53L0X.cpp
165165
# Set I2C standard mode.
166-
self._write_u8(0x88, 0x00)
167-
self._write_u8(0x80, 0x01)
168-
self._write_u8(0xFF, 0x01)
169-
self._write_u8(0x00, 0x00)
166+
for pair in ((0x88, 0x00), (0x80, 0x01), (0xFF, 0x01), (0x00, 0x00)):
167+
self._write_u8(pair[0], pair[1])
170168
self._stop_variable = self._read_u8(0x91)
171-
self._write_u8(0x00, 0x01)
172-
self._write_u8(0xFF, 0x00)
173-
self._write_u8(0x80, 0x00)
169+
for pair in ((0x00, 0x01), (0xFF, 0x00), (0x80, 0x00)):
170+
self._write_u8(pair[0], pair[1])
174171
# disable SIGNAL_RATE_MSRC (bit 1) and SIGNAL_RATE_PRE_RANGE (bit 4)
175172
# limit checks
176173
config_control = self._read_u8(_MSRC_CONFIG_CONTROL) | 0x12
@@ -189,11 +186,14 @@ def __init__(self, i2c, address=41, io_timeout_s=0):
189186
with self._device:
190187
self._device.write(ref_spad_map, end=1)
191188
self._device.readinto(ref_spad_map, start=1)
192-
self._write_u8(0xFF, 0x01)
193-
self._write_u8(_DYNAMIC_SPAD_REF_EN_START_OFFSET, 0x00)
194-
self._write_u8(_DYNAMIC_SPAD_NUM_REQUESTED_REF_SPAD, 0x2C)
195-
self._write_u8(0xFF, 0x00)
196-
self._write_u8(_GLOBAL_CONFIG_REF_EN_START_SELECT, 0xB4)
189+
190+
for pair in ((0xFF, 0x01),
191+
(_DYNAMIC_SPAD_REF_EN_START_OFFSET, 0x00),
192+
(_DYNAMIC_SPAD_NUM_REQUESTED_REF_SPAD, 0x2C),
193+
(0xFF, 0x00),
194+
(_GLOBAL_CONFIG_REF_EN_START_SELECT, 0xB4)):
195+
self._write_u8(pair[0], pair[1])
196+
197197
first_spad_to_enable = 12 if spad_is_aperture else 0
198198
spads_enabled = 0
199199
for i in range(48):
@@ -206,86 +206,28 @@ def __init__(self, i2c, address=41, io_timeout_s=0):
206206
spads_enabled += 1
207207
with self._device:
208208
self._device.write(ref_spad_map)
209-
self._write_u8(0xFF, 0x01)
210-
self._write_u8(0x00, 0x00)
211-
self._write_u8(0xFF, 0x00)
212-
self._write_u8(0x09, 0x00)
213-
self._write_u8(0x10, 0x00)
214-
self._write_u8(0x11, 0x00)
215-
self._write_u8(0x24, 0x01)
216-
self._write_u8(0x25, 0xFF)
217-
self._write_u8(0x75, 0x00)
218-
self._write_u8(0xFF, 0x01)
219-
self._write_u8(0x4E, 0x2C)
220-
self._write_u8(0x48, 0x00)
221-
self._write_u8(0x30, 0x20)
222-
self._write_u8(0xFF, 0x00)
223-
self._write_u8(0x30, 0x09)
224-
self._write_u8(0x54, 0x00)
225-
self._write_u8(0x31, 0x04)
226-
self._write_u8(0x32, 0x03)
227-
self._write_u8(0x40, 0x83)
228-
self._write_u8(0x46, 0x25)
229-
self._write_u8(0x60, 0x00)
230-
self._write_u8(0x27, 0x00)
231-
self._write_u8(0x50, 0x06)
232-
self._write_u8(0x51, 0x00)
233-
self._write_u8(0x52, 0x96)
234-
self._write_u8(0x56, 0x08)
235-
self._write_u8(0x57, 0x30)
236-
self._write_u8(0x61, 0x00)
237-
self._write_u8(0x62, 0x00)
238-
self._write_u8(0x64, 0x00)
239-
self._write_u8(0x65, 0x00)
240-
self._write_u8(0x66, 0xA0)
241-
self._write_u8(0xFF, 0x01)
242-
self._write_u8(0x22, 0x32)
243-
self._write_u8(0x47, 0x14)
244-
self._write_u8(0x49, 0xFF)
245-
self._write_u8(0x4A, 0x00)
246-
self._write_u8(0xFF, 0x00)
247-
self._write_u8(0x7A, 0x0A)
248-
self._write_u8(0x7B, 0x00)
249-
self._write_u8(0x78, 0x21)
250-
self._write_u8(0xFF, 0x01)
251-
self._write_u8(0x23, 0x34)
252-
self._write_u8(0x42, 0x00)
253-
self._write_u8(0x44, 0xFF)
254-
self._write_u8(0x45, 0x26)
255-
self._write_u8(0x46, 0x05)
256-
self._write_u8(0x40, 0x40)
257-
self._write_u8(0x0E, 0x06)
258-
self._write_u8(0x20, 0x1A)
259-
self._write_u8(0x43, 0x40)
260-
self._write_u8(0xFF, 0x00)
261-
self._write_u8(0x34, 0x03)
262-
self._write_u8(0x35, 0x44)
263-
self._write_u8(0xFF, 0x01)
264-
self._write_u8(0x31, 0x04)
265-
self._write_u8(0x4B, 0x09)
266-
self._write_u8(0x4C, 0x05)
267-
self._write_u8(0x4D, 0x04)
268-
self._write_u8(0xFF, 0x00)
269-
self._write_u8(0x44, 0x00)
270-
self._write_u8(0x45, 0x20)
271-
self._write_u8(0x47, 0x08)
272-
self._write_u8(0x48, 0x28)
273-
self._write_u8(0x67, 0x00)
274-
self._write_u8(0x70, 0x04)
275-
self._write_u8(0x71, 0x01)
276-
self._write_u8(0x72, 0xFE)
277-
self._write_u8(0x76, 0x00)
278-
self._write_u8(0x77, 0x00)
279-
self._write_u8(0xFF, 0x01)
280-
self._write_u8(0x0D, 0x01)
281-
self._write_u8(0xFF, 0x00)
282-
self._write_u8(0x80, 0x01)
283-
self._write_u8(0x01, 0xF8)
284-
self._write_u8(0xFF, 0x01)
285-
self._write_u8(0x8E, 0x01)
286-
self._write_u8(0x00, 0x01)
287-
self._write_u8(0xFF, 0x00)
288-
self._write_u8(0x80, 0x00)
209+
for pair in ((0xFF, 0x01), (0x00, 0x00), (0xFF, 0x00), (0x09, 0x00),
210+
(0x10, 0x00), (0x11, 0x00), (0x24, 0x01), (0x25, 0xFF),
211+
(0x75, 0x00), (0xFF, 0x01), (0x4E, 0x2C), (0x48, 0x00),
212+
(0x30, 0x20), (0xFF, 0x00), (0x30, 0x09), (0x54, 0x00),
213+
(0x31, 0x04), (0x32, 0x03), (0x40, 0x83), (0x46, 0x25),
214+
(0x60, 0x00), (0x27, 0x00), (0x50, 0x06), (0x51, 0x00),
215+
(0x52, 0x96), (0x56, 0x08), (0x57, 0x30), (0x61, 0x00),
216+
(0x62, 0x00), (0x64, 0x00), (0x65, 0x00), (0x66, 0xA0),
217+
(0xFF, 0x01), (0x22, 0x32), (0x47, 0x14), (0x49, 0xFF),
218+
(0x4A, 0x00), (0xFF, 0x00), (0x7A, 0x0A), (0x7B, 0x00),
219+
(0x78, 0x21), (0xFF, 0x01), (0x23, 0x34), (0x42, 0x00),
220+
(0x44, 0xFF), (0x45, 0x26), (0x46, 0x05), (0x40, 0x40),
221+
(0x0E, 0x06), (0x20, 0x1A), (0x43, 0x40), (0xFF, 0x00),
222+
(0x34, 0x03), (0x35, 0x44), (0xFF, 0x01), (0x31, 0x04),
223+
(0x4B, 0x09), (0x4C, 0x05), (0x4D, 0x04), (0xFF, 0x00),
224+
(0x44, 0x00), (0x45, 0x20), (0x47, 0x08), (0x48, 0x28),
225+
(0x67, 0x00), (0x70, 0x04), (0x71, 0x01), (0x72, 0xFE),
226+
(0x76, 0x00), (0x77, 0x00), (0xFF, 0x01), (0x0D, 0x01),
227+
(0xFF, 0x00), (0x80, 0x01), (0x01, 0xF8), (0xFF, 0x01),
228+
(0x8E, 0x01), (0x00, 0x01), (0xFF, 0x00), (0x80, 0x00)):
229+
self._write_u8(pair[0], pair[1])
230+
289231
self._write_u8(_SYSTEM_INTERRUPT_CONFIG_GPIO, 0x04)
290232
gpio_hv_mux_active_high = self._read_u8(_GPIO_HV_MUX_ACTIVE_HIGH)
291233
self._write_u8(_GPIO_HV_MUX_ACTIVE_HIGH,
@@ -337,16 +279,12 @@ def _get_spad_info(self):
337279
# Get reference SPAD count and type, returned as a 2-tuple of
338280
# count and boolean is_aperture. Based on code from:
339281
# https://github.com/pololu/vl53l0x-arduino/blob/master/VL53L0X.cpp
340-
self._write_u8(0x80, 0x01)
341-
self._write_u8(0xFF, 0x01)
342-
self._write_u8(0x00, 0x00)
343-
self._write_u8(0xFF, 0x06)
282+
for pair in ((0x80, 0x01), (0xFF, 0x01), (0x00, 0x00), (0xFF, 0x06)):
283+
self._write_u8(pair[0], pair[1])
344284
self._write_u8(0x83, self._read_u8(0x83) | 0x04)
345-
self._write_u8(0xFF, 0x07)
346-
self._write_u8(0x81, 0x01)
347-
self._write_u8(0x80, 0x01)
348-
self._write_u8(0x94, 0x6b)
349-
self._write_u8(0x83, 0x00)
285+
for pair in ((0xFF, 0x07), (0x81, 0x01), (0x80, 0x01),
286+
(0x94, 0x6b), (0x83, 0x00)):
287+
self._write_u8(pair[0], pair[1])
350288
start = time.monotonic()
351289
while self._read_u8(0x83) == 0x00:
352290
if self.io_timeout_s > 0 and \
@@ -356,13 +294,11 @@ def _get_spad_info(self):
356294
tmp = self._read_u8(0x92)
357295
count = tmp & 0x7F
358296
is_aperture = ((tmp >> 7) & 0x01) == 1
359-
self._write_u8(0x81, 0x00)
360-
self._write_u8(0xFF, 0x06)
297+
for pair in ((0x81, 0x00), (0xFF, 0x06)):
298+
self._write_u8(pair[0], pair[1])
361299
self._write_u8(0x83, self._read_u8(0x83) & ~0x04)
362-
self._write_u8(0xFF, 0x01)
363-
self._write_u8(0x00, 0x01)
364-
self._write_u8(0xFF, 0x00)
365-
self._write_u8(0x80, 0x00)
300+
for pair in ((0xFF, 0x01), (0x00, 0x01), (0xFF, 0x00), (0x80, 0x00)):
301+
self._write_u8(pair[0], pair[1])
366302
return (count, is_aperture)
367303

368304
def _perform_single_ref_calibration(self, vhv_init_byte):
@@ -498,14 +434,10 @@ def range(self):
498434
# Adapted from readRangeSingleMillimeters &
499435
# readRangeContinuousMillimeters in pololu code at:
500436
# https://github.com/pololu/vl53l0x-arduino/blob/master/VL53L0X.cpp
501-
self._write_u8(0x80, 0x01)
502-
self._write_u8(0xFF, 0x01)
503-
self._write_u8(0x00, 0x00)
504-
self._write_u8(0x91, self._stop_variable)
505-
self._write_u8(0x00, 0x01)
506-
self._write_u8(0xFF, 0x00)
507-
self._write_u8(0x80, 0x00)
508-
self._write_u8(_SYSRANGE_START, 0x01)
437+
for pair in ((0x80, 0x01), (0xFF, 0x01), (0x00, 0x00),
438+
(0x91, self._stop_variable), (0x00, 0x01), (0xFF, 0x00),
439+
(0x80, 0x00), (_SYSRANGE_START, 0x01)):
440+
self._write_u8(pair[0], pair[1])
509441
start = time.monotonic()
510442
while (self._read_u8(_SYSRANGE_START) & 0x01) > 0:
511443
if self.io_timeout_s > 0 and \

0 commit comments

Comments
 (0)