@@ -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