Skip to content

Commit 0a31521

Browse files
committed
ensure config mode before setting range or bandwidth settings
1 parent 597f4d3 commit 0a31521

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

adafruit_bno055.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,11 +514,17 @@ def accel_range(self) -> int:
514514

515515
@accel_range.setter
516516
def accel_range(self, rng: int = ACCEL_4G) -> None:
517+
old_mode = None
518+
if self.mode != CONFIG_MODE:
519+
old_mode = self.mode
520+
self.mode = CONFIG_MODE
517521
self._write_register(_PAGE_REGISTER, 0x01)
518522
value = self._read_register(_ACCEL_CONFIG_REGISTER)
519523
masked_value = 0b11111100 & value
520524
self._write_register(_ACCEL_CONFIG_REGISTER, masked_value | rng)
521525
self._write_register(_PAGE_REGISTER, 0x00)
526+
if old_mode is not None:
527+
self.mode = old_mode
522528

523529
@property
524530
def accel_bandwidth(self) -> int:
@@ -534,11 +540,17 @@ def accel_bandwidth(self) -> int:
534540
def accel_bandwidth(self, bandwidth: int = ACCEL_62_5HZ) -> None:
535541
if self.mode in [0x08, 0x09, 0x0A, 0x0B, 0x0C]:
536542
raise RuntimeError("Mode must not be a fusion mode")
543+
old_mode = None
544+
if self.mode != CONFIG_MODE:
545+
old_mode = self.mode
546+
self.mode = CONFIG_MODE
537547
self._write_register(_PAGE_REGISTER, 0x01)
538548
value = self._read_register(_ACCEL_CONFIG_REGISTER)
539549
masked_value = 0b11100011 & value
540550
self._write_register(_ACCEL_CONFIG_REGISTER, masked_value | bandwidth)
541551
self._write_register(_PAGE_REGISTER, 0x00)
552+
if old_mode is not None:
553+
self.mode = old_mode
542554

543555
@property
544556
def accel_mode(self) -> int:
@@ -574,11 +586,17 @@ def gyro_range(self) -> int:
574586
def gyro_range(self, rng: int = GYRO_2000_DPS) -> None:
575587
if self.mode in [0x08, 0x09, 0x0A, 0x0B, 0x0C]:
576588
raise RuntimeError("Mode must not be a fusion mode")
589+
old_mode = None
590+
if self.mode != CONFIG_MODE:
591+
old_mode = self.mode
592+
self.mode = CONFIG_MODE
577593
self._write_register(_PAGE_REGISTER, 0x01)
578594
value = self._read_register(_GYRO_CONFIG_0_REGISTER)
579595
masked_value = 0b00111000 & value
580596
self._write_register(_GYRO_CONFIG_0_REGISTER, masked_value | rng)
581597
self._write_register(_PAGE_REGISTER, 0x00)
598+
if old_mode is not None:
599+
self.mode = old_mode
582600

583601
@property
584602
def gyro_bandwidth(self) -> int:
@@ -594,11 +612,17 @@ def gyro_bandwidth(self) -> int:
594612
def gyro_bandwidth(self, bandwidth: int = GYRO_32HZ) -> None:
595613
if self.mode in [0x08, 0x09, 0x0A, 0x0B, 0x0C]:
596614
raise RuntimeError("Mode must not be a fusion mode")
615+
old_mode = None
616+
if self.mode != CONFIG_MODE:
617+
old_mode = self.mode
618+
self.mode = CONFIG_MODE
597619
self._write_register(_PAGE_REGISTER, 0x01)
598620
value = self._read_register(_GYRO_CONFIG_0_REGISTER)
599621
masked_value = 0b00000111 & value
600622
self._write_register(_GYRO_CONFIG_0_REGISTER, masked_value | bandwidth)
601623
self._write_register(_PAGE_REGISTER, 0x00)
624+
if old_mode is not None:
625+
self.mode = old_mode
602626

603627
@property
604628
def gyro_mode(self) -> int:

0 commit comments

Comments
 (0)