Skip to content

Commit bf1100e

Browse files
committed
lsm6dsox: Combine _set_bits and _clear_bits functions.
Signed-off-by: Sebastian Romero <s.romero@arduino.cc>
1 parent 2c19727 commit bf1100e

File tree

1 file changed

+16
-31
lines changed

1 file changed

+16
-31
lines changed

micropython/drivers/imu/lsm6dsox/lsm6dsox.py

Lines changed: 16 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -204,11 +204,8 @@ def _write_reg(self, reg, val):
204204
finally:
205205
self.cs(1)
206206

207-
def _set_bits(self, reg, mask):
208-
self._write_reg(reg, self._read_reg(reg) | mask)
209-
210-
def _clear_bits(self, reg, mask):
211-
self._write_reg(reg, self._read_reg(reg) & ~mask)
207+
def _modify_bits(self, reg, clr_mask=0, set_mask=0):
208+
self._write_reg(reg, (self._read_reg(reg) & ~clr_mask) | set_mask)
212209

213210
def _read_reg_into(self, reg, buf):
214211
if self._use_i2c:
@@ -233,7 +230,7 @@ def _select_page(self, address, value=None):
233230

234231
rw_bit = 0x20 if value is None else 0x40
235232
# Clear both read and write bits first, then set read (bit 5) or write (bit 6).
236-
self._write_reg(_PAGE_RW, (self._read_reg(_PAGE_RW) & 0x9F) | rw_bit)
233+
self._modify_bits(_PAGE_RW, clr_mask=0x60, set_mask=rw_bit)
237234

238235
# select page
239236
self._write_reg(_PAGE_SEL, (msb << 4) | 0x01)
@@ -251,22 +248,21 @@ def _select_page(self, address, value=None):
251248

252249
# unset page write/read and page_sel
253250
self._write_reg(_PAGE_SEL, 0x01)
254-
self._clear_bits(_PAGE_RW, rw_bit)
251+
self._modify_bits(_PAGE_RW, clr_mask=rw_bit)
255252

256253
self.set_mem_bank(_FUNC_CFG_BANK_USER)
257254
return val
258255

259256
def reset(self):
260-
self._write_reg(_CTRL3_C, self._read_reg(_CTRL3_C) | 0x1)
257+
self._modify_bits(_CTRL3_C, set_mask=0x1)
261258
for i in range(10):
262259
if (self._read_reg(_CTRL3_C) & 0x01) == 0:
263260
return
264261
time.sleep_ms(10)
265262
raise OSError("Failed to reset LSM6DS device.")
266263

267264
def set_mem_bank(self, bank):
268-
cfg = self._read_reg(_FUNC_CFG_ACCESS) & 0x3F
269-
self._write_reg(_FUNC_CFG_ACCESS, cfg | (bank << 6))
265+
self._modify_bits(_FUNC_CFG_ACCESS, clr_mask=0xC0, set_mask=(bank << 6))
270266

271267
def set_embedded_functions(self, enable, emb_ab=None):
272268
self.set_mem_bank(_FUNC_CFG_BANK_EMBED)
@@ -294,18 +290,18 @@ def load_mlc(self, ucf):
294290
emb_ab = self.set_embedded_functions(False)
295291

296292
# Disable I3C interface
297-
self._write_reg(_CTRL9_XL, self._read_reg(_CTRL9_XL) | 0x01)
293+
self._modify_bits(_CTRL9_XL, set_mask=0x01)
298294

299295
# Enable Block Data Update
300-
self._write_reg(_CTRL3_C, self._read_reg(_CTRL3_C) | 0x40)
296+
self._modify_bits(_CTRL3_C, set_mask=0x40)
301297

302298
# Route signals on interrupt pin 1
303299
self.set_mem_bank(_FUNC_CFG_BANK_EMBED)
304-
self._write_reg(_MLC_INT1, self._read_reg(_MLC_INT1) & 0x01)
300+
self._modify_bits(_MLC_INT1, clr_mask=0xFE)
305301
self.set_mem_bank(_FUNC_CFG_BANK_USER)
306302

307303
# Configure interrupt pin mode
308-
self._write_reg(_TAP_CFG0, self._read_reg(_TAP_CFG0) | 0x41)
304+
self._modify_bits(_TAP_CFG0, set_mask=0x41)
309305

310306
self.set_embedded_functions(True, emb_ab)
311307

@@ -323,33 +319,22 @@ def pedometer_config(self, enable=True, debounce=10, int1_enable=False, int2_ena
323319
self._select_page(_PEDO_DEB_STEPS_CONF, debounce)
324320

325321
if int1_enable:
326-
self._set_bits(_MD1_CFG, _INT_EMB_FUNC_MASK)
322+
self._modify_bits(_MD1_CFG, set_mask=_INT_EMB_FUNC_MASK)
327323
if int2_enable:
328-
self._set_bits(_MD2_CFG, _INT_EMB_FUNC_MASK)
324+
self._modify_bits(_MD2_CFG, set_mask=_INT_EMB_FUNC_MASK)
329325

330326
self.set_mem_bank(_FUNC_CFG_BANK_EMBED)
331327

332-
if enable:
333-
self._set_bits(_EMB_FUNC_EN_A, _PEDO_EN_MASK)
334-
else:
335-
self._clear_bits(_EMB_FUNC_EN_A, _PEDO_EN_MASK)
336-
337-
if int1_enable:
338-
self._set_bits(_EMB_FUNC_INT1, _PEDO_INT_MASK)
339-
else:
340-
self._clear_bits(_EMB_FUNC_INT1, _PEDO_INT_MASK)
341-
342-
if int2_enable:
343-
self._set_bits(_EMB_FUNC_INT2, _PEDO_INT_MASK)
344-
else:
345-
self._clear_bits(_EMB_FUNC_INT2, _PEDO_INT_MASK)
328+
self._modify_bits(_EMB_FUNC_EN_A, _PEDO_EN_MASK, enable and _PEDO_EN_MASK)
329+
self._modify_bits(_EMB_FUNC_INT1, _PEDO_INT_MASK, int1_enable and _PEDO_INT_MASK)
330+
self._modify_bits(_EMB_FUNC_INT2, _PEDO_INT_MASK, int2_enable and _PEDO_INT_MASK)
346331

347332
self.set_mem_bank(_FUNC_CFG_BANK_USER)
348333

349334
def pedometer_reset(self):
350335
"""Reset the step counter."""
351336
self.set_mem_bank(_FUNC_CFG_BANK_EMBED)
352-
self._set_bits(_EMB_FUNC_SRC, _PEDO_RST_STEP_MASK)
337+
self._modify_bits(_EMB_FUNC_SRC, set_mask=_PEDO_RST_STEP_MASK)
353338
self.set_mem_bank(_FUNC_CFG_BANK_USER)
354339

355340
def steps(self):

0 commit comments

Comments
 (0)